Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Staging: Remove ENE UB6250 MS card codes from keucr

Remove ENE UB6250 MS card codes from keucr.

Signed-off-by: Cho, Yu-Chen <acho@novell.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Cho, Yu-Chen and committed by
Greg Kroah-Hartman
20c3d7f7 33842ced

+6 -2680
+3 -3
drivers/staging/keucr/Kconfig
··· 1 1 config USB_ENESTORAGE 2 - tristate "USB ENE SM/MS card reader support" 2 + tristate "USB ENE SM card reader support" 3 3 depends on USB && SCSI && m 4 4 ---help--- 5 - Say Y here if you wish to control a ENE SM/MS Card reader. 6 - To use SD card, please build driver/usb/storage/ums-eneub6250.ko 5 + Say Y here if you wish to control a ENE SM Card reader. 6 + To use SD/MS card, please build driver/usb/storage/ums-eneub6250.ko 7 7 8 8 This option depends on 'SCSI' support being enabled, but you 9 9 probably also need 'SCSI device support: SCSI disk support'
-2
drivers/staging/keucr/Makefile
··· 7 7 scsiglue.o \ 8 8 transport.o \ 9 9 init.o \ 10 - msscsi.o \ 11 - ms.o \ 12 10 smscsi.o \ 13 11 smilmain.o \ 14 12 smilsub.o \
+1 -70
drivers/staging/keucr/init.c
··· 31 31 if (!us->SM_Status.Ready && !us->MS_Status.Ready) { 32 32 result = ENE_SMInit(us); 33 33 if (result != USB_STOR_XFER_GOOD) { 34 - result = ENE_MSInit(us); 35 - if (result != USB_STOR_XFER_GOOD) 36 - return USB_STOR_TRANSPORT_ERROR; 34 + return USB_STOR_TRANSPORT_ERROR; 37 35 } 38 36 } 39 37 ··· 57 59 58 60 result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); 59 61 return result; 60 - } 61 - 62 - /* 63 - * ENE_MSInit(): 64 - */ 65 - int ENE_MSInit(struct us_data *us) 66 - { 67 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 68 - int result; 69 - BYTE buf[0x200]; 70 - WORD MSP_BlockSize, MSP_UserAreaBlocks; 71 - 72 - printk(KERN_INFO "transport --- ENE_MSInit\n"); 73 - result = ENE_LoadBinCode(us, MS_INIT_PATTERN); 74 - if (result != USB_STOR_XFER_GOOD) { 75 - printk(KERN_ERR "Load MS Init Code Fail !!\n"); 76 - return USB_STOR_TRANSPORT_ERROR; 77 - } 78 - 79 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 80 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 81 - bcb->DataTransferLength = 0x200; 82 - bcb->Flags = 0x80; 83 - bcb->CDB[0] = 0xF1; 84 - bcb->CDB[1] = 0x01; 85 - 86 - result = ENE_SendScsiCmd(us, FDIR_READ, &buf, 0); 87 - if (result != USB_STOR_XFER_GOOD) { 88 - printk(KERN_ERR "Execution MS Init Code Fail !!\n"); 89 - return USB_STOR_TRANSPORT_ERROR; 90 - } 91 - 92 - us->MS_Status = *(PMS_STATUS)&buf[0]; 93 - 94 - if (us->MS_Status.Insert && us->MS_Status.Ready) { 95 - printk(KERN_INFO "Insert = %x\n", us->MS_Status.Insert); 96 - printk(KERN_INFO "Ready = %x\n", us->MS_Status.Ready); 97 - printk(KERN_INFO "IsMSPro = %x\n", us->MS_Status.IsMSPro); 98 - printk(KERN_INFO "IsMSPHG = %x\n", us->MS_Status.IsMSPHG); 99 - printk(KERN_INFO "WtP = %x\n", us->MS_Status.WtP); 100 - if (us->MS_Status.IsMSPro) { 101 - MSP_BlockSize = (buf[6] << 8) | buf[7]; 102 - MSP_UserAreaBlocks = (buf[10] << 8) | buf[11]; 103 - us->MSP_TotalBlock = MSP_BlockSize * MSP_UserAreaBlocks; 104 - } else { 105 - MS_CardInit(us); 106 - } 107 - printk(KERN_INFO "MS Init Code OK !!\n"); 108 - } else { 109 - printk(KERN_INFO "MS Card Not Ready --- %x\n", buf[0]); 110 - return USB_STOR_TRANSPORT_ERROR; 111 - } 112 - 113 - return USB_STOR_TRANSPORT_GOOD; 114 62 } 115 63 116 64 /* ··· 129 185 if (buf == NULL) 130 186 return USB_STOR_TRANSPORT_ERROR; 131 187 switch (flag) { 132 - /* For MS */ 133 - case MS_INIT_PATTERN: 134 - printk(KERN_INFO "MS_INIT_PATTERN\n"); 135 - memcpy(buf, MS_Init, 0x800); 136 - break; 137 - case MSP_RW_PATTERN: 138 - printk(KERN_INFO "MSP_RW_PATTERN\n"); 139 - memcpy(buf, MSP_Rdwr, 0x800); 140 - break; 141 - case MS_RW_PATTERN: 142 - printk(KERN_INFO "MS_RW_PATTERN\n"); 143 - memcpy(buf, MS_Rdwr, 0x800); 144 - break; 145 188 /* For SS */ 146 189 case SM_INIT_PATTERN: 147 190 printk(KERN_INFO "SM_INIT_PATTERN\n");
-773
drivers/staging/keucr/init.h
··· 4 4 extern int Check_D_MediaFmt(struct us_data *); 5 5 6 6 7 - static BYTE MS_Init[] = { 8 - 0x90, 0xF0, 0x15, 0xE0, 0xF5, 0x1C, 0x11, 0x2C, 9 - 0x90, 0xFF, 0x09, 0xE0, 0x30, 0xE1, 0x06, 0x90, 10 - 0xFF, 0x23, 0x74, 0x80, 0xF0, 0x90, 0xFF, 0x09, 11 - 0xE0, 0x30, 0xE5, 0xFC, 0x51, 0x59, 0x75, 0x3F, 12 - 0x00, 0x75, 0x3E, 0x00, 0x75, 0x3D, 0x00, 0x75, 13 - 0x3C, 0x00, 0xD3, 0x22, 0x90, 0xFF, 0x83, 0xE0, 14 - 0xA2, 0xE1, 0x92, 0x25, 0x20, 0x25, 0x06, 0xC2, 15 - 0x1F, 0xD2, 0x19, 0xC3, 0x22, 0x7F, 0x02, 0x12, 16 - 0x2F, 0xCB, 0x20, 0x19, 0x05, 0x30, 0x1F, 0x02, 17 - 0xD3, 0x22, 0x90, 0xEA, 0x44, 0x74, 0x80, 0xF0, 18 - 0x7F, 0x10, 0x12, 0x2F, 0xC5, 0x90, 0xFE, 0x47, 19 - 0xE0, 0x44, 0x80, 0xF0, 0x78, 0x00, 0xE8, 0xC3, 20 - 0x94, 0x04, 0x50, 0x0A, 0x7F, 0x88, 0x7E, 0x13, 21 - 0x12, 0xE4, 0xA6, 0x08, 0x80, 0xF0, 0x90, 0xFE, 22 - 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0xFE, 0x47, 23 - 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0xFE, 0x45, 0xE0, 24 - 0x54, 0xFE, 0xF0, 0x90, 0xFE, 0x45, 0xE0, 0x54, 25 - 0x7F, 0xF0, 0x90, 0xFE, 0x46, 0xE0, 0x44, 0x40, 26 - 0xF0, 0x90, 0xFE, 0x45, 0xE0, 0x54, 0xC7, 0x44, 27 - 0x18, 0xF0, 0x90, 0xFE, 0x47, 0xE0, 0x44, 0x08, 28 - 0xF0, 0x90, 0xFE, 0x45, 0xE0, 0x44, 0x40, 0xF0, 29 - 0x7F, 0x32, 0x7E, 0x00, 0x12, 0xE4, 0xA6, 0x90, 30 - 0xFE, 0x51, 0xE0, 0x54, 0x33, 0xF0, 0x90, 0xFE, 31 - 0x44, 0x74, 0x02, 0xF0, 0x30, 0x25, 0x04, 0xE0, 32 - 0x20, 0xE1, 0xF9, 0x90, 0xFE, 0x51, 0xE0, 0x54, 33 - 0x0F, 0xF0, 0x90, 0xFE, 0x44, 0x74, 0x02, 0xF0, 34 - 0x30, 0x25, 0x04, 0xE0, 0x20, 0xE1, 0xF9, 0x90, 35 - 0xFE, 0x44, 0x74, 0x04, 0xF0, 0x30, 0x25, 0x04, 36 - 0xE0, 0x20, 0xE2, 0xF9, 0x90, 0xFE, 0x4C, 0xE0, 37 - 0xF0, 0x90, 0xFE, 0x4D, 0xE0, 0xF0, 0x90, 0xFE, 38 - 0x48, 0x74, 0x7F, 0xF0, 0x90, 0xFE, 0x49, 0x74, 39 - 0x9F, 0xF0, 0x90, 0xFE, 0x51, 0xE0, 0x54, 0x3C, 40 - 0x44, 0x02, 0xF0, 0x90, 0xFE, 0x44, 0x74, 0x02, 41 - 0xF0, 0x30, 0x25, 0x04, 0xE0, 0x20, 0xE1, 0xF9, 42 - 0x90, 0xFE, 0x46, 0xE0, 0x44, 0x20, 0xF0, 0x79, 43 - 0x02, 0x7A, 0x06, 0x7B, 0x00, 0x7C, 0x00, 0x7D, 44 - 0x06, 0x7E, 0xEB, 0x7F, 0xC9, 0x12, 0x2F, 0xA7, 45 - 0x40, 0x03, 0x02, 0xE2, 0x37, 0xC2, 0x45, 0xC2, 46 - 0x1E, 0x90, 0xEB, 0xCB, 0xE0, 0x64, 0x01, 0x70, 47 - 0x65, 0x90, 0xEB, 0xCD, 0xE0, 0x70, 0x5F, 0x90, 48 - 0xEB, 0xCE, 0xE0, 0x60, 0x08, 0x54, 0x03, 0x60, 49 - 0x55, 0xD2, 0x1E, 0x80, 0x09, 0x90, 0xEB, 0xC9, 50 - 0xE0, 0x30, 0xE0, 0x02, 0xD2, 0x1E, 0x90, 0xEA, 51 - 0x45, 0x74, 0x01, 0xF0, 0x75, 0x0B, 0x00, 0xE5, 52 - 0x0B, 0xC3, 0x94, 0x80, 0x50, 0x31, 0x12, 0x2F, 53 - 0xB9, 0x40, 0x03, 0x02, 0xE2, 0x37, 0x90, 0xEB, 54 - 0xC8, 0xE0, 0x54, 0x80, 0x70, 0x0B, 0x7F, 0x38, 55 - 0x7E, 0x13, 0x12, 0xE4, 0xA6, 0x05, 0x0B, 0x80, 56 - 0xDE, 0x12, 0x2F, 0xB9, 0x40, 0x03, 0x02, 0xE2, 57 - 0x37, 0x90, 0xEB, 0xC8, 0xE0, 0xF9, 0x54, 0x40, 58 - 0x60, 0x0A, 0xE9, 0x54, 0x01, 0x70, 0x03, 0x02, 59 - 0xE2, 0x37, 0xD2, 0x1E, 0x80, 0x24, 0x90, 0xEB, 60 - 0xCB, 0xE0, 0x64, 0x00, 0x60, 0x03, 0x02, 0xE2, 61 - 0x37, 0x90, 0xEA, 0x45, 0x74, 0x00, 0xF0, 0x7F, 62 - 0x90, 0x12, 0x2F, 0xC5, 0x12, 0xE2, 0xB0, 0x40, 63 - 0x03, 0x02, 0xE2, 0x37, 0xD2, 0x1F, 0xC2, 0x19, 64 - 0xD3, 0x22, 0x90, 0xEA, 0x44, 0x74, 0x00, 0xF0, 65 - 0x75, 0x17, 0x00, 0x79, 0x00, 0x7A, 0x00, 0x7B, 66 - 0x10, 0x7C, 0x02, 0x7D, 0x02, 0x12, 0x2F, 0xA7, 67 - 0x40, 0x02, 0x80, 0x5B, 0x7F, 0x80, 0x12, 0x2F, 68 - 0xC5, 0x90, 0xFE, 0x45, 0xE0, 0x54, 0xFE, 0xF0, 69 - 0x90, 0xFE, 0x45, 0xE0, 0x44, 0x04, 0xF0, 0x90, 70 - 0xEB, 0xCC, 0xE0, 0x64, 0x07, 0x70, 0x2D, 0x90, 71 - 0xEA, 0x44, 0x74, 0x40, 0xF0, 0x75, 0x17, 0x00, 72 - 0x79, 0x00, 0x7A, 0x00, 0x7B, 0x10, 0x7C, 0x02, 73 - 0x7D, 0x02, 0x12, 0x2F, 0xA7, 0x40, 0x02, 0x80, 74 - 0x26, 0x7F, 0x80, 0x12, 0x2F, 0xC5, 0x90, 0xFE, 75 - 0x45, 0xE0, 0x54, 0xFA, 0xF0, 0x90, 0xFE, 0x45, 76 - 0xE0, 0x44, 0x01, 0xF0, 0x90, 0xEA, 0x45, 0xE0, 77 - 0x60, 0x07, 0x12, 0x2F, 0xCE, 0x40, 0x02, 0x80, 78 - 0x06, 0xD2, 0x1F, 0xC2, 0x19, 0xD3, 0x22, 0xE4, 79 - 0x90, 0xFE, 0x48, 0xF0, 0x90, 0xFE, 0x49, 0xF0, 80 - 0x90, 0xFE, 0x4C, 0xE0, 0xF0, 0x90, 0xFE, 0x4D, 81 - 0xE0, 0xF0, 0x90, 0xFE, 0x47, 0xE0, 0x54, 0x7F, 82 - 0xF0, 0xC2, 0x25, 0xC2, 0x1F, 0xD2, 0x19, 0xC3, 83 - 0x22, 0x90, 0xEA, 0x45, 0xE0, 0x64, 0x01, 0x70, 84 - 0x03, 0xD3, 0x80, 0x01, 0xC3, 0xE4, 0x92, 0xE3, 85 - 0xC0, 0xE0, 0x90, 0xEB, 0xCC, 0xE0, 0x64, 0x07, 86 - 0x70, 0x03, 0xD3, 0x80, 0x01, 0xC3, 0xD0, 0xE0, 87 - 0x92, 0xE4, 0xA2, 0x25, 0x92, 0xE0, 0xA2, 0x1F, 88 - 0x92, 0xE1, 0xA2, 0x19, 0x92, 0xE2, 0xA2, 0x1E, 89 - 0x92, 0xE6, 0x90, 0xF4, 0x00, 0xF0, 0x74, 0xFF, 90 - 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x7B, 91 - 0x40, 0x7C, 0xEB, 0x7D, 0x6F, 0xAE, 0x83, 0xAF, 92 - 0x82, 0x12, 0x2F, 0xC8, 0x90, 0xFF, 0x2A, 0x74, 93 - 0x02, 0xF0, 0xA3, 0x74, 0x00, 0xF0, 0xD3, 0x22, 94 - 0xC2, 0x1E, 0x74, 0xFF, 0x90, 0xEA, 0x49, 0xF0, 95 - 0x90, 0xFE, 0x44, 0x74, 0x02, 0xF0, 0x30, 0x25, 96 - 0x04, 0xE0, 0x20, 0xE1, 0xF9, 0x90, 0xFF, 0x09, 97 - 0x30, 0x25, 0x07, 0xE0, 0x30, 0xE5, 0xF9, 0xD3, 98 - 0x80, 0x01, 0xC3, 0x40, 0x01, 0x22, 0xC2, 0x1A, 99 - 0xC2, 0x22, 0x75, 0x14, 0x00, 0xE5, 0x14, 0x64, 100 - 0x0C, 0x70, 0x03, 0x02, 0xE4, 0x4B, 0x75, 0x17, 101 - 0x00, 0x75, 0x18, 0x00, 0x85, 0x14, 0x19, 0x75, 102 - 0x1B, 0x00, 0x12, 0x2F, 0x8C, 0x40, 0x03, 0x02, 103 - 0xE4, 0x46, 0x30, 0x41, 0x03, 0x02, 0xE4, 0x46, 104 - 0x90, 0xEB, 0xDD, 0xE0, 0x20, 0xE7, 0x03, 0x02, 105 - 0xE4, 0x46, 0x90, 0xEB, 0xDE, 0xE0, 0x20, 0xE2, 106 - 0x02, 0x80, 0x03, 0x02, 0xE4, 0x46, 0x90, 0xF4, 107 - 0x00, 0xE0, 0xFE, 0x90, 0xF4, 0x01, 0xE0, 0x64, 108 - 0x01, 0x4E, 0x60, 0x03, 0x02, 0xE4, 0x46, 0x90, 109 - 0xEA, 0x49, 0xE0, 0x64, 0xFF, 0x60, 0x03, 0x02, 110 - 0xE4, 0x4B, 0x90, 0xF5, 0xA0, 0xE0, 0x64, 0x01, 111 - 0x60, 0x03, 0x02, 0xE4, 0x46, 0x90, 0xF5, 0xD6, 112 - 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0xE4, 0x46, 113 - 0x90, 0xF5, 0xD8, 0xE0, 0xFF, 0xC3, 0x74, 0x03, 114 - 0x9F, 0x50, 0x03, 0x02, 0xE4, 0x46, 0xEF, 0x60, 115 - 0x04, 0xD2, 0x1E, 0x80, 0x0B, 0xC2, 0x1E, 0x90, 116 - 0xEB, 0xC9, 0xE0, 0x30, 0xE0, 0x02, 0xD2, 0x1E, 117 - 0x90, 0xF5, 0xA2, 0xE0, 0xFE, 0x90, 0xF5, 0xA3, 118 - 0xE0, 0xFF, 0x25, 0xE0, 0x90, 0xEA, 0x47, 0xF0, 119 - 0xE4, 0x74, 0x10, 0x9F, 0x74, 0x00, 0x9E, 0x50, 120 - 0x03, 0x02, 0xE4, 0x46, 0x90, 0xF5, 0xA4, 0xE0, 121 - 0xFE, 0x90, 0xF5, 0xA5, 0xE0, 0xFF, 0xC3, 0x74, 122 - 0x00, 0x9F, 0x74, 0x20, 0x9E, 0x50, 0x03, 0x02, 123 - 0xE4, 0x46, 0xEE, 0x4F, 0x70, 0x03, 0x02, 0xE4, 124 - 0x46, 0x90, 0xF5, 0xA6, 0xE0, 0xFE, 0x90, 0xF5, 125 - 0xA7, 0xE0, 0xFF, 0xEE, 0x4F, 0x70, 0x03, 0x02, 126 - 0xE4, 0x46, 0x90, 0xF5, 0x78, 0xE0, 0x64, 0x01, 127 - 0x60, 0x03, 0x02, 0xE4, 0x46, 0x90, 0xF5, 0x74, 128 - 0xE0, 0xFC, 0x90, 0xF5, 0x75, 0xE0, 0xFD, 0x90, 129 - 0xF5, 0x76, 0xE0, 0x90, 0xEA, 0x5B, 0xF0, 0xFE, 130 - 0x90, 0xF5, 0x77, 0xE0, 0x90, 0xEA, 0x5C, 0xF0, 131 - 0xFF, 0x4E, 0x4D, 0x4C, 0x70, 0x03, 0x02, 0xE4, 132 - 0x46, 0x90, 0xF5, 0x70, 0xE0, 0xFC, 0x90, 0xF5, 133 - 0x71, 0xE0, 0xFD, 0x90, 0xF5, 0x72, 0xE0, 0xFE, 134 - 0x90, 0xF5, 0x73, 0xE0, 0xFF, 0xEC, 0x90, 0xEA, 135 - 0x55, 0xF0, 0xED, 0x90, 0xEA, 0x56, 0xF0, 0xEE, 136 - 0x90, 0xEA, 0x57, 0xF0, 0xEF, 0x90, 0xEA, 0x58, 137 - 0xF0, 0xEC, 0x64, 0xFF, 0x70, 0x12, 0xED, 0x64, 138 - 0xFF, 0x70, 0x0D, 0xEE, 0x64, 0xFF, 0x70, 0x08, 139 - 0xEF, 0x64, 0xFF, 0x70, 0x03, 0x02, 0xE4, 0x46, 140 - 0xC2, 0x3F, 0x90, 0xF5, 0xD3, 0xE0, 0x64, 0x01, 141 - 0x70, 0x02, 0xD2, 0x3F, 0x75, 0x17, 0x00, 0x75, 142 - 0x18, 0x00, 0x85, 0x14, 0x19, 0x75, 0x1B, 0x01, 143 - 0x12, 0x2F, 0x8C, 0x40, 0x03, 0x02, 0xE4, 0x46, 144 - 0x90, 0xEA, 0x49, 0xE5, 0x14, 0xF0, 0x05, 0x14, 145 - 0x02, 0xE2, 0xDD, 0xD2, 0x22, 0x90, 0xEA, 0x49, 146 - 0xE0, 0x64, 0xFF, 0x70, 0x02, 0x80, 0x02, 0x80, 147 - 0x12, 0x90, 0xFE, 0x44, 0x74, 0x02, 0xF0, 0x30, 148 - 0x25, 0x04, 0xE0, 0x20, 0xE1, 0xF9, 0x12, 0x2F, 149 - 0x9E, 0xC3, 0x22, 0x30, 0x3F, 0x36, 0x74, 0x88, 150 - 0x90, 0xEA, 0x44, 0xF0, 0x75, 0x17, 0x00, 0x79, 151 - 0x00, 0x7A, 0x00, 0x7B, 0x10, 0x7C, 0x02, 0x7D, 152 - 0x02, 0x12, 0x2F, 0xA7, 0x7F, 0x80, 0x12, 0x2F, 153 - 0xC5, 0x90, 0xFE, 0x45, 0xE0, 0x54, 0xFE, 0xF0, 154 - 0x90, 0xFE, 0x45, 0xE0, 0x44, 0x04, 0xF0, 0x90, 155 - 0xFE, 0x44, 0x74, 0x02, 0xF0, 0x30, 0x25, 0x04, 156 - 0xE0, 0x20, 0xE1, 0xF9, 0xD3, 0x22, 0x75, 0x8A, 157 - 0x00, 0x75, 0x8C, 0xCE, 0xC2, 0x8D, 0x90, 0xEA, 158 - 0x65, 0xE4, 0xF0, 0xA3, 0xF0, 0xD2, 0x8C, 0x90, 159 - 0xEA, 0x65, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xEC, 160 - 0xC3, 0x9E, 0x40, 0xF3, 0x70, 0x05, 0xED, 0xC3, 161 - 0x9F, 0x40, 0xEC, 0xC2, 0x8C, 0x22, 0x00, 0x00, 162 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 163 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 164 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 165 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 166 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 167 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 168 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 169 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 170 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 171 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 172 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 173 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 174 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 175 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 176 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 177 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 178 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 179 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 180 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 181 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 182 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 183 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 184 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 185 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 186 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 187 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 188 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 189 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 190 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 191 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 192 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 193 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 194 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 195 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 196 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 197 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 198 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 199 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 200 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 201 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 202 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 203 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 204 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 205 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 206 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 207 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 208 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 209 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 210 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 211 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 212 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 213 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 214 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 215 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 216 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 217 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 218 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 219 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 220 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 221 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 222 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 223 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 224 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 225 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 226 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 227 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 228 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 229 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 230 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 231 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 232 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 233 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 234 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 235 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 236 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 237 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 238 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 239 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 240 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 241 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 242 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 243 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 244 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 245 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 246 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 247 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 248 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 249 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 250 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 251 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 252 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 253 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 254 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 255 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 256 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 257 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 258 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 259 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 260 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 261 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 262 - 0x4D, 0x53, 0x2D, 0x49, 0x6E, 0x69, 0x74, 0x20, 263 - 0x20, 0x20, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30 }; 264 - 265 - static BYTE MSP_Rdwr[] = { 266 - 0x90, 0xF0, 0x10, 0xE0, 0x90, 0xEA, 0x46, 0xF0, 267 - 0xB4, 0x04, 0x03, 0x02, 0xE1, 0x1E, 0x90, 0xFF, 268 - 0x09, 0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 269 - 0x74, 0x80, 0xF0, 0x90, 0xFF, 0x09, 0xE0, 0x30, 270 - 0xE5, 0xFC, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 271 - 0x92, 0x25, 0x40, 0x01, 0x22, 0x20, 0x1F, 0x02, 272 - 0xC3, 0x22, 0x30, 0x45, 0x02, 0xC3, 0x22, 0xC3, 273 - 0xE5, 0x3D, 0x13, 0xF5, 0x08, 0xE5, 0x3E, 0x13, 274 - 0xF5, 0x09, 0x78, 0x96, 0x79, 0x20, 0xAA, 0x08, 275 - 0xAB, 0x09, 0x12, 0xE2, 0x53, 0x20, 0x1D, 0x10, 276 - 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 0x92, 0x25, 277 - 0x30, 0x25, 0x03, 0x30, 0x24, 0xEF, 0xD2, 0x24, 278 - 0x20, 0x23, 0x10, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 279 - 0xE1, 0x92, 0x25, 0x30, 0x25, 0x03, 0x30, 0x24, 280 - 0xEF, 0xD2, 0x24, 0x30, 0x24, 0x02, 0xC3, 0x22, 281 - 0xC2, 0x24, 0xC2, 0x23, 0x90, 0xEA, 0x4B, 0xE0, 282 - 0x30, 0xE3, 0x0B, 0xC2, 0x25, 0x90, 0xFF, 0x85, 283 - 0xE0, 0x54, 0xFD, 0xF0, 0xC3, 0x22, 0x30, 0xE2, 284 - 0x78, 0x90, 0xFF, 0x09, 0x90, 0xFF, 0x83, 0xE0, 285 - 0xA2, 0xE1, 0x92, 0x25, 0x30, 0x25, 0x0A, 0x90, 286 - 0xFF, 0x09, 0xE0, 0x30, 0xE5, 0xEE, 0xD3, 0x80, 287 - 0x01, 0xC3, 0x40, 0x01, 0x22, 0x79, 0x00, 0x90, 288 - 0xFE, 0x46, 0xE0, 0x54, 0xF0, 0x49, 0xF0, 0x78, 289 - 0x2D, 0x12, 0x2F, 0xAA, 0x7E, 0xF4, 0x7F, 0x00, 290 - 0x7D, 0x00, 0x7C, 0x02, 0x12, 0x2F, 0xC2, 0x20, 291 - 0x1D, 0x10, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 292 - 0x92, 0x25, 0x30, 0x25, 0x03, 0x30, 0x24, 0xEF, 293 - 0xD2, 0x24, 0x30, 0x24, 0x13, 0x75, 0x3F, 0x00, 294 - 0xC3, 0xE5, 0x09, 0x33, 0xF5, 0x3E, 0xE5, 0x08, 295 - 0x33, 0xF5, 0x3D, 0x75, 0x3C, 0x00, 0xC3, 0x22, 296 - 0x90, 0xFF, 0x2A, 0x74, 0x02, 0xF0, 0xA3, 0x74, 297 - 0x00, 0xF0, 0xE5, 0x09, 0x24, 0xFF, 0xF5, 0x09, 298 - 0xE5, 0x08, 0x34, 0xFF, 0xF5, 0x08, 0x02, 0xE0, 299 - 0x60, 0x90, 0xEA, 0x4B, 0xE0, 0x20, 0xE0, 0x03, 300 - 0x02, 0xE0, 0x60, 0xE4, 0xF5, 0x3F, 0xF5, 0x3E, 301 - 0xF5, 0x3D, 0xF5, 0x3C, 0xD3, 0x22, 0x90, 0xFF, 302 - 0x09, 0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 303 - 0x74, 0x80, 0xF0, 0x90, 0xFF, 0x09, 0xE0, 0x30, 304 - 0xE5, 0xFC, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 305 - 0x92, 0x25, 0x40, 0x01, 0x22, 0x20, 0x1F, 0x02, 306 - 0xC3, 0x22, 0x30, 0x1E, 0x02, 0xC3, 0x22, 0xC3, 307 - 0xE5, 0x3D, 0x13, 0xF5, 0x08, 0xE5, 0x3E, 0x13, 308 - 0xF5, 0x09, 0x78, 0x96, 0x79, 0x21, 0xAA, 0x08, 309 - 0xAB, 0x09, 0x12, 0xE2, 0x53, 0x20, 0x1D, 0x10, 310 - 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 0x92, 0x25, 311 - 0x30, 0x25, 0x03, 0x30, 0x24, 0xEF, 0xD2, 0x24, 312 - 0x30, 0x2D, 0x05, 0x75, 0x0A, 0x01, 0x80, 0x03, 313 - 0x75, 0x0A, 0x08, 0x20, 0x23, 0x10, 0x90, 0xFF, 314 - 0x83, 0xE0, 0xA2, 0xE1, 0x92, 0x25, 0x30, 0x25, 315 - 0x03, 0x30, 0x24, 0xEF, 0xD2, 0x24, 0x30, 0x24, 316 - 0x02, 0xC3, 0x22, 0xC2, 0x24, 0xC2, 0x23, 0x90, 317 - 0xEA, 0x4B, 0xE0, 0x30, 0xE1, 0x0B, 0xC2, 0x25, 318 - 0x90, 0xFF, 0x85, 0xE0, 0x54, 0xFD, 0xF0, 0xC3, 319 - 0x22, 0x20, 0xE2, 0x03, 0x02, 0xE2, 0x3E, 0x79, 320 - 0x0F, 0x90, 0xFE, 0x46, 0xE0, 0x54, 0xF0, 0x49, 321 - 0xF0, 0x75, 0x0B, 0x00, 0xE5, 0x0B, 0xC3, 0x95, 322 - 0x0A, 0x50, 0x43, 0x90, 0xFF, 0x09, 0x30, 0x25, 323 - 0x0B, 0xE0, 0x30, 0xE1, 0xF9, 0x90, 0xFF, 0x09, 324 - 0xF0, 0xD3, 0x80, 0x01, 0xC3, 0x50, 0x0F, 0xAF, 325 - 0x0B, 0x7C, 0xF0, 0x7D, 0x00, 0xAB, 0x4D, 0xAA, 326 - 0x4C, 0x12, 0x2F, 0xBF, 0x40, 0x0F, 0x90, 0xFF, 327 - 0x09, 0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 328 - 0x74, 0x80, 0xF0, 0xC3, 0x22, 0x90, 0xFF, 0x09, 329 - 0xE0, 0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 0x74, 330 - 0x80, 0xF0, 0x05, 0x0B, 0x80, 0xB6, 0x20, 0x1D, 331 - 0x10, 0x90, 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 0x92, 332 - 0x25, 0x30, 0x25, 0x03, 0x30, 0x24, 0xEF, 0xD2, 333 - 0x24, 0x30, 0x24, 0x13, 0x75, 0x3F, 0x00, 0xC3, 334 - 0xE5, 0x09, 0x33, 0xF5, 0x3E, 0xE5, 0x08, 0x33, 335 - 0xF5, 0x3D, 0x75, 0x3C, 0x00, 0xC3, 0x22, 0xE5, 336 - 0x09, 0x24, 0xFF, 0xF5, 0x09, 0xE5, 0x08, 0x34, 337 - 0xFF, 0xF5, 0x08, 0x02, 0xE1, 0x7B, 0x90, 0xEA, 338 - 0x4B, 0xE0, 0x20, 0xE0, 0x03, 0x02, 0xE1, 0x7B, 339 - 0xE4, 0xF5, 0x3F, 0xF5, 0x3E, 0xF5, 0x3D, 0xF5, 340 - 0x3C, 0xD3, 0x22, 0x90, 0xFE, 0x4C, 0xE0, 0xF0, 341 - 0x90, 0xFE, 0x4D, 0xE0, 0xF0, 0xC2, 0x24, 0xC2, 342 - 0x23, 0xC2, 0x1D, 0x90, 0xFE, 0x50, 0xE8, 0xF0, 343 - 0x90, 0xFE, 0x40, 0xE9, 0xF0, 0x90, 0xFE, 0x40, 344 - 0xEA, 0xF0, 0x90, 0xFE, 0x40, 0xEB, 0xF0, 0x90, 345 - 0xEB, 0x2A, 0xE0, 0x90, 0xFE, 0x40, 0xF0, 0x90, 346 - 0xEB, 0x2B, 0xE0, 0x90, 0xFE, 0x40, 0xF0, 0x90, 347 - 0xEB, 0x2C, 0xE0, 0x90, 0xFE, 0x40, 0xF0, 0x90, 348 - 0xEB, 0x2D, 0xE0, 0x90, 0xFE, 0x40, 0xF0, 0x90, 349 - 0xFE, 0x44, 0x74, 0x01, 0xF0, 0x22, 0x00, 0x00, 350 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 351 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 352 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 353 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 354 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 355 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 356 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 357 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 358 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 359 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 360 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 361 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 362 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 363 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 364 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 365 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 366 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 367 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 368 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 369 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 370 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 371 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 372 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 373 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 374 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 375 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 376 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 377 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 378 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 379 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 380 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 381 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 382 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 383 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 384 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 385 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 386 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 387 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 388 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 389 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 390 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 391 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 392 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 393 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 394 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 395 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 396 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 397 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 398 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 399 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 400 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 401 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 402 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 403 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 404 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 405 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 406 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 407 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 408 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 409 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 410 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 411 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 412 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 413 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 414 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 415 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 416 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 417 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 418 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 419 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 420 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 421 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 422 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 423 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 424 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 425 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 426 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 427 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 428 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 429 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 430 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 431 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 432 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 433 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 434 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 435 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 436 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 437 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 438 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 439 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 440 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 441 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 442 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 443 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 444 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 445 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 446 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 447 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 448 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 449 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 450 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 451 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 452 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 453 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 454 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 455 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 456 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 457 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 458 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 459 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 460 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 461 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 462 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 463 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 464 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 465 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 466 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 467 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 468 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 469 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 470 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 471 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 472 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 473 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 474 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 475 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 476 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 477 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 478 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 479 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 480 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 481 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 482 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 483 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 484 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 485 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 486 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 487 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 488 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 489 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 490 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 491 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 492 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 493 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 494 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 495 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 496 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 497 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 498 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 499 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 500 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 501 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 502 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 503 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 504 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 505 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 506 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 507 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 508 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 509 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 510 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 511 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 512 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 513 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 514 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 515 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 516 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 517 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 518 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 519 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 520 - 0x4D, 0x53, 0x50, 0x2D, 0x52, 0x57, 0x20, 0x20, 521 - 0x20, 0x20, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30 }; 522 - 523 - static BYTE MS_Rdwr[] = { 524 - 0x90, 0xF0, 0x10, 0xE0, 0x90, 0xEA, 0x46, 0xF0, 525 - 0xB4, 0x02, 0x02, 0x80, 0x36, 0x90, 0xF0, 0x11, 526 - 0xE0, 0xF5, 0x17, 0x90, 0xF0, 0x12, 0xE0, 0xF5, 527 - 0x18, 0x90, 0xF0, 0x13, 0xE0, 0xF5, 0x19, 0x90, 528 - 0xF0, 0x14, 0xE0, 0xF5, 0x1B, 0x90, 0xF0, 0x15, 529 - 0xE0, 0xF5, 0x1C, 0x90, 0xF0, 0x16, 0xE0, 0xF5, 530 - 0x1D, 0x90, 0xF0, 0x17, 0xE0, 0xF5, 0x1E, 0x90, 531 - 0xF0, 0x18, 0xE0, 0xF5, 0x1F, 0x90, 0xF0, 0x19, 532 - 0xE0, 0xF5, 0x10, 0x90, 0xFF, 0x09, 0xE0, 0x30, 533 - 0xE1, 0x06, 0x90, 0xFF, 0x23, 0x74, 0x80, 0xF0, 534 - 0x90, 0xFF, 0x09, 0xE0, 0x30, 0xE5, 0xFC, 0x90, 535 - 0xFF, 0x83, 0xE0, 0xA2, 0xE1, 0x92, 0x25, 0x40, 536 - 0x01, 0x22, 0x90, 0xEA, 0x46, 0xE0, 0xB4, 0x02, 537 - 0x02, 0x80, 0x2B, 0xB4, 0x03, 0x03, 0x02, 0xE0, 538 - 0x96, 0xB4, 0x04, 0x05, 0xD2, 0x21, 0x02, 0xE2, 539 - 0xBC, 0xB4, 0x08, 0x0E, 0x85, 0x1C, 0x11, 0x85, 540 - 0x1D, 0x12, 0x85, 0x10, 0x1B, 0xC2, 0x21, 0x02, 541 - 0xE2, 0xBC, 0xB4, 0x06, 0x03, 0x02, 0xE2, 0x2F, 542 - 0xB4, 0x05, 0x03, 0x02, 0xE2, 0x7A, 0x20, 0x1F, 543 - 0x02, 0xC3, 0x22, 0x90, 0xEA, 0x46, 0xE0, 0xB4, 544 - 0x03, 0x03, 0x02, 0xE1, 0x94, 0xC3, 0xE5, 0x3D, 545 - 0x13, 0xF5, 0x14, 0xE5, 0x3E, 0x13, 0xF5, 0x15, 546 - 0x90, 0xEB, 0x2A, 0xE0, 0xFC, 0x90, 0xEB, 0x2B, 547 - 0xE0, 0xFD, 0x90, 0xEB, 0x2C, 0xE0, 0xFE, 0x90, 548 - 0xEB, 0x2D, 0xE0, 0xFF, 0x90, 0xEA, 0x47, 0xE0, 549 - 0x14, 0xFB, 0x60, 0x12, 0xC3, 0xEC, 0x13, 0xFC, 550 - 0xED, 0x13, 0xFD, 0xEE, 0x13, 0xFE, 0xEF, 0x13, 551 - 0xFF, 0xC3, 0xEB, 0x13, 0x80, 0xEB, 0x8E, 0x1E, 552 - 0x8F, 0x1F, 0x90, 0xEB, 0x2D, 0xE0, 0xFF, 0x90, 553 - 0xEA, 0x47, 0xE0, 0x14, 0x5F, 0xF5, 0x1B, 0xD2, 554 - 0x1A, 0x90, 0xEA, 0x47, 0xE0, 0xC3, 0x95, 0x1B, 555 - 0xF5, 0x16, 0xE5, 0x14, 0x70, 0x0A, 0xE5, 0x16, 556 - 0xD3, 0x95, 0x15, 0x40, 0x03, 0x85, 0x15, 0x16, 557 - 0xE5, 0x1E, 0xF5, 0x18, 0xE5, 0x1F, 0xF5, 0x19, 558 - 0x75, 0x17, 0x00, 0x90, 0xEA, 0x5C, 0xE0, 0xF8, 559 - 0x90, 0xEB, 0x6D, 0xE0, 0x65, 0x18, 0x70, 0x08, 560 - 0xA3, 0xE0, 0x65, 0x19, 0x70, 0x03, 0x80, 0x07, 561 - 0xA3, 0xA3, 0xD8, 0xEF, 0xC3, 0x80, 0x01, 0xD3, 562 - 0x40, 0x4F, 0xE5, 0x16, 0x64, 0x01, 0x70, 0x07, 563 - 0x12, 0x2F, 0x8C, 0x50, 0x41, 0x80, 0x07, 0xAB, 564 - 0x16, 0x12, 0xE5, 0x60, 0x50, 0x38, 0xC3, 0xE5, 565 - 0x15, 0x95, 0x16, 0xF5, 0x15, 0xE5, 0x14, 0x94, 566 - 0x00, 0xF5, 0x14, 0xE5, 0x14, 0x45, 0x15, 0x60, 567 - 0x17, 0x05, 0x0D, 0xE5, 0x0D, 0x70, 0x02, 0x05, 568 - 0x0C, 0x05, 0x1F, 0xE5, 0x1F, 0x70, 0x02, 0x05, 569 - 0x1E, 0x74, 0x00, 0xF5, 0x1B, 0x02, 0xE0, 0xF1, 570 - 0x75, 0x3F, 0x00, 0x75, 0x3E, 0x00, 0x75, 0x3D, 571 - 0x00, 0x75, 0x3C, 0x00, 0xD3, 0x22, 0x12, 0x2F, 572 - 0x9E, 0x75, 0x3F, 0x00, 0xC3, 0xE5, 0x15, 0x33, 573 - 0xF5, 0x3E, 0xE5, 0x14, 0x33, 0xF5, 0x3D, 0x75, 574 - 0x3C, 0x00, 0xC3, 0x22, 0xE5, 0x1C, 0x70, 0x03, 575 - 0x75, 0x1C, 0x01, 0xC3, 0x94, 0x80, 0x40, 0x03, 576 - 0x75, 0x1C, 0x80, 0xAA, 0x1C, 0xAD, 0x1B, 0x90, 577 - 0xF4, 0x00, 0xC0, 0x83, 0xC0, 0x82, 0xEA, 0x60, 578 - 0x5F, 0xAE, 0x18, 0xAF, 0x19, 0xE4, 0x90, 0xFE, 579 - 0x48, 0xF0, 0x90, 0xFE, 0x49, 0xF0, 0x12, 0x2F, 580 - 0x8F, 0x90, 0xFE, 0x48, 0x74, 0x7F, 0xF0, 0x90, 581 - 0xFE, 0x49, 0x74, 0x9F, 0xF0, 0x90, 0xEB, 0xDD, 582 - 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xA3, 0xC0, 583 - 0x83, 0xC0, 0x82, 0x90, 0xEB, 0xDE, 0xE0, 0xD0, 584 - 0x82, 0xD0, 0x83, 0xF0, 0xA3, 0xC0, 0x83, 0xC0, 585 - 0x82, 0x90, 0xEB, 0xDF, 0xE0, 0xD0, 0x82, 0xD0, 586 - 0x83, 0xF0, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0x90, 587 - 0xEB, 0xE0, 0xE0, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 588 - 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0x1A, 0x05, 0x19, 589 - 0xE5, 0x19, 0x70, 0x02, 0x05, 0x18, 0x80, 0x9E, 590 - 0xD0, 0x82, 0xD0, 0x83, 0xE5, 0x1C, 0x25, 0xE0, 591 - 0xFF, 0x74, 0x00, 0x33, 0xFE, 0xEF, 0x25, 0xE0, 592 - 0xFF, 0xEE, 0x33, 0xFE, 0x90, 0xFF, 0x2A, 0xEE, 593 - 0xF0, 0xA3, 0xEF, 0xF0, 0x02, 0xE1, 0x70, 0x20, 594 - 0x1F, 0x02, 0xC3, 0x22, 0x30, 0x1E, 0x02, 0x80, 595 - 0xF9, 0xD2, 0x1A, 0x75, 0x17, 0x00, 0x75, 0x3F, 596 - 0x00, 0x75, 0x3E, 0x00, 0x75, 0x3D, 0x00, 0x75, 597 - 0x3C, 0x00, 0x90, 0xEA, 0x5C, 0xE0, 0xF8, 0x90, 598 - 0xEB, 0x6D, 0xE0, 0x65, 0x18, 0x70, 0x08, 0xA3, 599 - 0xE0, 0x65, 0x19, 0x70, 0x03, 0x80, 0x07, 0xA3, 600 - 0xA3, 0xD8, 0xEF, 0xC3, 0x80, 0x01, 0xD3, 0x40, 601 - 0x0E, 0x75, 0x1C, 0xF8, 0x75, 0x1D, 0xFF, 0x12, 602 - 0xE7, 0x77, 0x40, 0x05, 0x12, 0x2F, 0x9E, 0xC3, 603 - 0x22, 0x22, 0x20, 0x1F, 0x02, 0xC3, 0x22, 0x30, 604 - 0x1E, 0x02, 0x80, 0xF9, 0xD2, 0x1A, 0x75, 0x3F, 605 - 0x00, 0x75, 0x3E, 0x00, 0x75, 0x3D, 0x00, 0x75, 606 - 0x3C, 0x00, 0x90, 0xEA, 0x5C, 0xE0, 0xF8, 0x90, 607 - 0xEB, 0x6D, 0xE0, 0x65, 0x18, 0x70, 0x08, 0xA3, 608 - 0xE0, 0x65, 0x19, 0x70, 0x03, 0x80, 0x07, 0xA3, 609 - 0xA3, 0xD8, 0xEF, 0xC3, 0x80, 0x01, 0xD3, 0x40, 610 - 0x08, 0x12, 0xE6, 0x6F, 0x40, 0x05, 0x12, 0x2F, 611 - 0x9E, 0xC3, 0x22, 0x22, 0x20, 0x1F, 0x02, 0xC3, 612 - 0x22, 0x30, 0x1E, 0x02, 0x80, 0xF9, 0xC3, 0xE5, 613 - 0x3D, 0x13, 0xF5, 0x14, 0xE5, 0x3E, 0x13, 0xF5, 614 - 0x15, 0x30, 0x21, 0x39, 0x90, 0xEB, 0x2A, 0xE0, 615 - 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 616 - 0xE0, 0xFF, 0x90, 0xEA, 0x47, 0xE0, 0x14, 0xFB, 617 - 0x60, 0x12, 0xC3, 0xEC, 0x13, 0xFC, 0xED, 0x13, 618 - 0xFD, 0xEE, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xC3, 619 - 0xEB, 0x13, 0x80, 0xEB, 0x8E, 0x18, 0x8F, 0x19, 620 - 0x90, 0xEB, 0x2D, 0xE0, 0xFF, 0x90, 0xEA, 0x47, 621 - 0xE0, 0x14, 0x5F, 0xF5, 0x1B, 0xD2, 0x1C, 0xC3, 622 - 0x90, 0xEA, 0x47, 0xE0, 0x95, 0x1B, 0xF5, 0x16, 623 - 0xE5, 0x14, 0x70, 0x0A, 0xD3, 0xE5, 0x16, 0x95, 624 - 0x15, 0x40, 0x03, 0x85, 0x15, 0x16, 0x90, 0xEA, 625 - 0x5C, 0xE0, 0xF8, 0x90, 0xEB, 0x6D, 0xE0, 0x65, 626 - 0x18, 0x70, 0x08, 0xA3, 0xE0, 0x65, 0x19, 0x70, 627 - 0x03, 0x80, 0x07, 0xA3, 0xA3, 0xD8, 0xEF, 0xC3, 628 - 0x80, 0x01, 0xD3, 0x50, 0x03, 0x02, 0xE4, 0x34, 629 - 0x20, 0x21, 0x2F, 0xC2, 0x42, 0x75, 0x10, 0x00, 630 - 0xE5, 0x10, 0x65, 0x1B, 0x70, 0x03, 0x02, 0xE3, 631 - 0x7A, 0x12, 0x2F, 0x89, 0x40, 0x03, 0x02, 0xE4, 632 - 0x31, 0xE5, 0x10, 0x70, 0x11, 0xC0, 0x1C, 0xC0, 633 - 0x1B, 0x75, 0x1B, 0x00, 0x75, 0x1C, 0xEF, 0x12, 634 - 0x2F, 0x95, 0xD0, 0x1B, 0xD0, 0x1C, 0x05, 0x10, 635 - 0x80, 0xD6, 0x75, 0x17, 0x00, 0x30, 0x21, 0x06, 636 - 0xC0, 0x18, 0xC0, 0x19, 0x80, 0x10, 0x75, 0x1C, 637 - 0xF8, 0x75, 0x1D, 0xFF, 0xC0, 0x18, 0xC0, 0x19, 638 - 0x85, 0x11, 0x18, 0x85, 0x12, 0x19, 0xE5, 0x16, 639 - 0xB4, 0x01, 0x0C, 0x12, 0xE5, 0x11, 0x40, 0x13, 640 - 0xD0, 0x19, 0xD0, 0x18, 0x02, 0xE4, 0x31, 0x12, 641 - 0x2F, 0x92, 0x40, 0x07, 0xD0, 0x19, 0xD0, 0x18, 642 - 0x02, 0xE4, 0x31, 0xD0, 0x19, 0xD0, 0x18, 0xE5, 643 - 0x10, 0x25, 0x16, 0xF5, 0x10, 0x20, 0x21, 0x3A, 644 - 0x90, 0xEA, 0x47, 0xE0, 0x65, 0x10, 0x60, 0x0C, 645 - 0x12, 0x2F, 0x89, 0x40, 0x03, 0x02, 0xE4, 0x31, 646 - 0x05, 0x10, 0x80, 0xEC, 0x20, 0x42, 0x05, 0x12, 647 - 0xE7, 0x77, 0x80, 0x09, 0x75, 0x1B, 0x00, 0x75, 648 - 0x1C, 0x7F, 0x12, 0x2F, 0x95, 0x75, 0x17, 0x00, 649 - 0x85, 0x11, 0x18, 0x85, 0x12, 0x19, 0x75, 0x1B, 650 - 0x00, 0x75, 0x1C, 0xF8, 0x75, 0x1D, 0xFF, 0x12, 651 - 0xE6, 0x6F, 0xC3, 0xE5, 0x15, 0x95, 0x16, 0xF5, 652 - 0x15, 0xE5, 0x14, 0x94, 0x00, 0xF5, 0x14, 0xE5, 653 - 0x15, 0x45, 0x14, 0x60, 0x16, 0x05, 0x19, 0xE5, 654 - 0x19, 0x70, 0x02, 0x05, 0x18, 0x05, 0x0D, 0xE5, 655 - 0x0D, 0x70, 0x02, 0x05, 0x0C, 0x75, 0x1B, 0x00, 656 - 0x02, 0xE3, 0x0F, 0x75, 0x3F, 0x00, 0x75, 0x3E, 657 - 0x00, 0x75, 0x3D, 0x00, 0x75, 0x3C, 0x00, 0xD3, 658 - 0x22, 0x12, 0x2F, 0x9E, 0x90, 0xFF, 0x09, 0xE0, 659 - 0x30, 0xE1, 0x06, 0x90, 0xFF, 0x23, 0x74, 0x80, 660 - 0xF0, 0x75, 0x3F, 0x00, 0xC3, 0xE5, 0x15, 0x33, 661 - 0xF5, 0x3E, 0xE5, 0x14, 0x33, 0xF5, 0x3D, 0x75, 662 - 0x3C, 0x00, 0xC3, 0x22, 0x75, 0x1A, 0x20, 0x12, 663 - 0x2F, 0xA4, 0x40, 0x03, 0x02, 0xE5, 0x0F, 0x79, 664 - 0x0F, 0x90, 0xFE, 0x46, 0xE0, 0x54, 0xF0, 0x49, 665 - 0xF0, 0x78, 0xD2, 0x12, 0x2F, 0xAA, 0x30, 0x1C, 666 - 0x5A, 0x30, 0x2D, 0x05, 0x75, 0x16, 0x01, 0x80, 667 - 0x03, 0x75, 0x16, 0x08, 0x75, 0x08, 0x00, 0xE5, 668 - 0x08, 0x65, 0x16, 0x70, 0x02, 0x80, 0x55, 0x90, 669 - 0xFF, 0x09, 0x30, 0x25, 0x0B, 0xE0, 0x30, 0xE1, 670 - 0xF9, 0x90, 0xFF, 0x09, 0xF0, 0xD3, 0x80, 0x01, 671 - 0xC3, 0x50, 0x0F, 0xAF, 0x08, 0x7C, 0xF0, 0x7D, 672 - 0x00, 0xAB, 0x4D, 0xAA, 0x4C, 0x12, 0x2F, 0xBF, 673 - 0x40, 0x10, 0x90, 0xFF, 0x09, 0xE0, 0x30, 0xE1, 674 - 0x06, 0x90, 0xFF, 0x23, 0x74, 0x80, 0xF0, 0x02, 675 - 0xE5, 0x0A, 0x90, 0xFF, 0x09, 0xE0, 0x30, 0xE1, 676 - 0x06, 0x90, 0xFF, 0x23, 0x74, 0x80, 0xF0, 0x05, 677 - 0x08, 0x80, 0xB4, 0x7C, 0xF0, 0x7D, 0x00, 0x7B, 678 - 0x00, 0x7A, 0x02, 0x7F, 0x00, 0x12, 0x2F, 0xBF, 679 - 0x40, 0x02, 0x80, 0x2E, 0x20, 0x1D, 0x08, 0x30, 680 - 0x25, 0x03, 0x30, 0x24, 0xF7, 0xD2, 0x24, 0x30, 681 - 0x24, 0x02, 0xC3, 0x22, 0x79, 0x55, 0x7A, 0x01, 682 - 0x12, 0x2F, 0xAD, 0x40, 0x02, 0x80, 0x18, 0x12, 683 - 0x2F, 0xB0, 0x30, 0x24, 0x02, 0xC3, 0x22, 0xEF, 684 - 0x54, 0xC1, 0x64, 0x80, 0x60, 0x02, 0x80, 0x02, 685 - 0xD3, 0x22, 0x79, 0xC3, 0x12, 0x2F, 0x9B, 0xC3, 686 - 0x22, 0xC0, 0x16, 0x30, 0x1E, 0x03, 0x02, 0xE5, 687 - 0x5C, 0x75, 0x09, 0x00, 0x7C, 0x08, 0x30, 0x2D, 688 - 0x02, 0x7C, 0x20, 0x20, 0x25, 0x03, 0x02, 0xE5, 689 - 0x5C, 0xC0, 0x04, 0x12, 0xE4, 0x54, 0xD0, 0x04, 690 - 0x50, 0x04, 0xD0, 0x16, 0xD3, 0x22, 0xA9, 0x09, 691 - 0xE9, 0x54, 0x07, 0x60, 0x0C, 0x90, 0xFE, 0x4C, 692 - 0xE0, 0xF0, 0x90, 0xFE, 0x4D, 0xE0, 0xF0, 0x80, 693 - 0x09, 0x20, 0x25, 0x03, 0x02, 0xE5, 0x5C, 0x12, 694 - 0x2F, 0xB3, 0x05, 0x09, 0xE5, 0x09, 0x6C, 0x60, 695 - 0x03, 0x02, 0xE5, 0x23, 0xD0, 0x16, 0xC3, 0x22, 696 - 0xC0, 0x03, 0x75, 0x1A, 0x00, 0x12, 0x2F, 0xB6, 697 - 0x40, 0x04, 0xD0, 0x03, 0xC3, 0x22, 0xC2, 0x41, 698 - 0x79, 0xAA, 0x7A, 0x00, 0x12, 0x2F, 0xAD, 0x50, 699 - 0xF1, 0xD0, 0x03, 0x1B, 0x8B, 0x08, 0xC2, 0x40, 700 - 0x20, 0x20, 0x08, 0x30, 0x25, 0x03, 0x30, 0x24, 701 - 0xF7, 0xD2, 0x24, 0x30, 0x24, 0x02, 0xC3, 0x22, 702 - 0x12, 0x2F, 0xB0, 0xC2, 0x20, 0xC2, 0x24, 0xEF, 703 - 0x54, 0xE1, 0xFF, 0x30, 0xE0, 0x03, 0x02, 0xE6, 704 - 0x6D, 0x20, 0xE6, 0x0F, 0x30, 0xE7, 0x02, 0xD2, 705 - 0x40, 0x20, 0xE5, 0x19, 0x64, 0x80, 0x70, 0x03, 706 - 0x02, 0xE6, 0x4B, 0x12, 0x2F, 0xB9, 0x40, 0x03, 707 - 0x02, 0xE6, 0x68, 0x90, 0xEB, 0xCA, 0xE0, 0x54, 708 - 0x15, 0x60, 0x02, 0xD2, 0x41, 0xE5, 0x08, 0x70, 709 - 0x0E, 0x20, 0x40, 0x0B, 0x79, 0x33, 0x7A, 0x01, 710 - 0x12, 0x2F, 0xAD, 0x40, 0x02, 0xC1, 0x6D, 0x12, 711 - 0x2F, 0xBC, 0x40, 0x02, 0xC1, 0x6D, 0x90, 0xEB, 712 - 0xDE, 0xE0, 0x54, 0x30, 0x64, 0x30, 0x60, 0x02, 713 - 0xC1, 0x6D, 0x79, 0x00, 0x90, 0xFE, 0x46, 0xE0, 714 - 0x54, 0xF0, 0x49, 0xF0, 0x79, 0x00, 0x78, 0x2D, 715 - 0x12, 0x2F, 0xAA, 0x90, 0xFF, 0x09, 0x30, 0x25, 716 - 0x07, 0xE0, 0x30, 0xE5, 0xF9, 0xD3, 0x80, 0x01, 717 - 0xC3, 0x40, 0x02, 0x80, 0x5B, 0xC0, 0x01, 0x7E, 718 - 0xF4, 0x7F, 0x00, 0x7D, 0x00, 0x7C, 0x02, 0x12, 719 - 0x2F, 0xC2, 0xD0, 0x01, 0x40, 0x09, 0x09, 0xE9, 720 - 0x64, 0x20, 0x70, 0xD2, 0x02, 0xE6, 0x68, 0x90, 721 - 0xFF, 0x2A, 0x74, 0x02, 0xF0, 0xA3, 0x74, 0x00, 722 - 0xF0, 0x20, 0x1D, 0x08, 0x30, 0x25, 0x03, 0x30, 723 - 0x24, 0xF7, 0xD2, 0x24, 0x30, 0x24, 0x02, 0xC3, 724 - 0x22, 0x30, 0x40, 0x02, 0x80, 0x05, 0x15, 0x08, 725 - 0x02, 0xE5, 0x80, 0x30, 0x41, 0x16, 0x79, 0xCC, 726 - 0x12, 0x2F, 0x9B, 0xC2, 0x1A, 0x90, 0xEA, 0x47, 727 - 0xE0, 0x65, 0x1B, 0x60, 0x07, 0x12, 0x2F, 0x8C, 728 - 0x05, 0x1B, 0x80, 0xF1, 0xD2, 0x1A, 0xD3, 0x22, 729 - 0x79, 0xC3, 0x12, 0x2F, 0x9B, 0xC3, 0x22, 0xC0, 730 - 0x08, 0x30, 0x1E, 0x02, 0x80, 0x33, 0x75, 0x1A, 731 - 0x40, 0x75, 0x1D, 0xFF, 0x75, 0x08, 0x00, 0x20, 732 - 0x25, 0x02, 0x80, 0x25, 0x12, 0xE6, 0xAD, 0x50, 733 - 0x04, 0xD0, 0x08, 0xD3, 0x22, 0xA9, 0x08, 0xE9, 734 - 0x54, 0x07, 0x60, 0x02, 0x80, 0x08, 0x20, 0x25, 735 - 0x02, 0x80, 0x0E, 0x12, 0x2F, 0xB3, 0x05, 0x08, 736 - 0xE5, 0x08, 0x64, 0x20, 0x60, 0x03, 0x02, 0xE6, 737 - 0x7F, 0xD0, 0x08, 0xC3, 0x22, 0x90, 0xFE, 0x4C, 738 - 0xE0, 0xF0, 0x90, 0xFE, 0x4D, 0xE0, 0xF0, 0xC2, 739 - 0x1D, 0xC2, 0x24, 0x90, 0xFE, 0x50, 0x74, 0x87, 740 - 0xF0, 0x90, 0xFE, 0x40, 0x74, 0x00, 0xF0, 0x90, 741 - 0xFE, 0x40, 0x74, 0x00, 0xF0, 0x90, 0xFE, 0x40, 742 - 0x74, 0x10, 0xF0, 0x90, 0xFE, 0x40, 0x74, 0x0F, 743 - 0xF0, 0x90, 0xFE, 0x57, 0x74, 0x0F, 0xF0, 0x90, 744 - 0xFE, 0x44, 0x74, 0x01, 0xF0, 0x20, 0x1D, 0x08, 745 - 0x30, 0x25, 0x03, 0x30, 0x24, 0xF7, 0xD2, 0x24, 746 - 0x30, 0x24, 0x02, 0xC3, 0x22, 0x79, 0x00, 0x90, 747 - 0xFE, 0x46, 0xE0, 0x54, 0xF0, 0x49, 0xF0, 0x90, 748 - 0xFE, 0x4D, 0x30, 0x25, 0x07, 0xE0, 0x30, 0xE5, 749 - 0xF9, 0xD3, 0x80, 0x01, 0xC3, 0x40, 0x01, 0x22, 750 - 0x78, 0xB4, 0x12, 0x2F, 0xAA, 0x90, 0xEA, 0x44, 751 - 0xE0, 0x90, 0xFE, 0x40, 0xF0, 0x78, 0x17, 0x7D, 752 - 0x09, 0xE6, 0x08, 0x90, 0xFE, 0x40, 0xF0, 0xDD, 753 - 0xF8, 0x74, 0xFF, 0x90, 0xFE, 0x40, 0xF0, 0xF0, 754 - 0xF0, 0xF0, 0xC2, 0x1D, 0xC2, 0x24, 0xF0, 0x20, 755 - 0x1D, 0x08, 0x30, 0x25, 0x03, 0x30, 0x24, 0xF7, 756 - 0xD2, 0x24, 0x30, 0x24, 0x02, 0xC3, 0x22, 0x90, 757 - 0xFE, 0x4E, 0x30, 0x25, 0x07, 0xE0, 0x30, 0xE6, 758 - 0xF9, 0xD3, 0x80, 0x01, 0xC3, 0x79, 0x55, 0x7A, 759 - 0x01, 0x12, 0x2F, 0xAD, 0x40, 0x02, 0x80, 0x13, 760 - 0x12, 0x2F, 0xB0, 0x30, 0x24, 0x02, 0xC3, 0x22, 761 - 0xEF, 0x20, 0xE0, 0x07, 0x54, 0xC0, 0xB4, 0x80, 762 - 0x02, 0x80, 0x02, 0xC3, 0x22, 0xD3, 0x22, 0x30, 763 - 0x1E, 0x02, 0x80, 0x0A, 0x12, 0xE7, 0x88, 0x40, 764 - 0x03, 0x02, 0xE7, 0x86, 0xD3, 0x22, 0xC3, 0x22, 765 - 0xC0, 0x08, 0x75, 0x08, 0x00, 0x20, 0x25, 0x02, 766 - 0x80, 0x25, 0x12, 0x2F, 0xA1, 0x50, 0x03, 0xD0, 767 - 0x08, 0x22, 0xA9, 0x08, 0xE9, 0x54, 0x07, 0x60, 768 - 0x02, 0x80, 0x09, 0xA2, 0x25, 0x40, 0x02, 0x80, 769 - 0x0E, 0x12, 0x2F, 0xB3, 0x05, 0x08, 0xE5, 0x08, 770 - 0x64, 0x20, 0x60, 0x03, 0x02, 0xE7, 0x8D, 0xD0, 771 - 0x08, 0xC3, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 772 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 773 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 774 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 775 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 776 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 777 - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 778 - 0x4D, 0x53, 0x2D, 0x52, 0x57, 0x20, 0x20, 0x20, 779 - 0x20, 0x20, 0x20, 0x31, 0x30, 0x30, 0x30, 0x30 }; 780 7 781 8 static BYTE SM_Init[] = { 782 9 0x7B, 0x09, 0x7C, 0xF0, 0x7D, 0x10, 0x7E, 0xE9,
-1034
drivers/staging/keucr/ms.c
··· 1 - #include <linux/slab.h> 2 - #include <asm/byteorder.h> 3 - 4 - #include "usb.h" 5 - #include "scsiglue.h" 6 - #include "transport.h" 7 - #include "ms.h" 8 - 9 - /* 10 - * MS_ReaderCopyBlock() 11 - */ 12 - int MS_ReaderCopyBlock(struct us_data *us, WORD oldphy, WORD newphy, 13 - WORD PhyBlockAddr, BYTE PageNum, PBYTE buf, WORD len) 14 - { 15 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 16 - int result; 17 - 18 - /* printk(KERN_INFO "MS_ReaderCopyBlock --- PhyBlockAddr = %x, 19 - PageNum = %x\n", PhyBlockAddr, PageNum); */ 20 - result = ENE_LoadBinCode(us, MS_RW_PATTERN); 21 - if (result != USB_STOR_XFER_GOOD) 22 - return USB_STOR_TRANSPORT_ERROR; 23 - 24 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 25 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 26 - bcb->DataTransferLength = 0x200*len; 27 - bcb->Flags = 0x00; 28 - bcb->CDB[0] = 0xF0; 29 - bcb->CDB[1] = 0x08; 30 - bcb->CDB[4] = (BYTE)(oldphy); 31 - bcb->CDB[3] = (BYTE)(oldphy>>8); 32 - bcb->CDB[2] = 0; /* (BYTE)(oldphy>>16) */ 33 - bcb->CDB[7] = (BYTE)(newphy); 34 - bcb->CDB[6] = (BYTE)(newphy>>8); 35 - bcb->CDB[5] = 0; /* (BYTE)(newphy>>16) */ 36 - bcb->CDB[9] = (BYTE)(PhyBlockAddr); 37 - bcb->CDB[8] = (BYTE)(PhyBlockAddr>>8); 38 - bcb->CDB[10] = PageNum; 39 - 40 - result = ENE_SendScsiCmd(us, FDIR_WRITE, buf, 0); 41 - if (result != USB_STOR_XFER_GOOD) 42 - return USB_STOR_TRANSPORT_ERROR; 43 - 44 - return USB_STOR_TRANSPORT_GOOD; 45 - } 46 - 47 - /* 48 - * MS_ReaderReadPage() 49 - */ 50 - int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, 51 - BYTE PageNum, PDWORD PageBuf, MS_LibTypeExtdat *ExtraDat) 52 - { 53 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 54 - int result; 55 - BYTE ExtBuf[4]; 56 - DWORD bn = PhyBlockAddr * 0x20 + PageNum; 57 - 58 - /* printk(KERN_INFO "MS --- MS_ReaderReadPage, 59 - PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); */ 60 - 61 - result = ENE_LoadBinCode(us, MS_RW_PATTERN); 62 - if (result != USB_STOR_XFER_GOOD) 63 - return USB_STOR_TRANSPORT_ERROR; 64 - 65 - /* Read Page Data */ 66 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 67 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 68 - bcb->DataTransferLength = 0x200; 69 - bcb->Flags = 0x80; 70 - bcb->CDB[0] = 0xF1; 71 - bcb->CDB[1] = 0x02; 72 - bcb->CDB[5] = (BYTE)(bn); 73 - bcb->CDB[4] = (BYTE)(bn>>8); 74 - bcb->CDB[3] = (BYTE)(bn>>16); 75 - bcb->CDB[2] = (BYTE)(bn>>24); 76 - 77 - result = ENE_SendScsiCmd(us, FDIR_READ, PageBuf, 0); 78 - if (result != USB_STOR_XFER_GOOD) 79 - return USB_STOR_TRANSPORT_ERROR; 80 - 81 - /* Read Extra Data */ 82 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 83 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 84 - bcb->DataTransferLength = 0x4; 85 - bcb->Flags = 0x80; 86 - bcb->CDB[0] = 0xF1; 87 - bcb->CDB[1] = 0x03; 88 - bcb->CDB[5] = (BYTE)(PageNum); 89 - bcb->CDB[4] = (BYTE)(PhyBlockAddr); 90 - bcb->CDB[3] = (BYTE)(PhyBlockAddr>>8); 91 - bcb->CDB[2] = (BYTE)(PhyBlockAddr>>16); 92 - bcb->CDB[6] = 0x01; 93 - 94 - result = ENE_SendScsiCmd(us, FDIR_READ, &ExtBuf, 0); 95 - if (result != USB_STOR_XFER_GOOD) 96 - return USB_STOR_TRANSPORT_ERROR; 97 - 98 - ExtraDat->reserved = 0; 99 - ExtraDat->intr = 0x80; /* Not yet,fireware support */ 100 - ExtraDat->status0 = 0x10; /* Not yet,fireware support */ 101 - ExtraDat->status1 = 0x00; /* Not yet,fireware support */ 102 - ExtraDat->ovrflg = ExtBuf[0]; 103 - ExtraDat->mngflg = ExtBuf[1]; 104 - ExtraDat->logadr = MemStickLogAddr(ExtBuf[2], ExtBuf[3]); 105 - 106 - return USB_STOR_TRANSPORT_GOOD; 107 - } 108 - 109 - /* 110 - * MS_ReaderEraseBlock() 111 - */ 112 - int MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr) 113 - { 114 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 115 - int result; 116 - DWORD bn = PhyBlockAddr; 117 - 118 - /* printk(KERN_INFO "MS --- MS_ReaderEraseBlock, 119 - PhyBlockAddr = %x\n", PhyBlockAddr); */ 120 - result = ENE_LoadBinCode(us, MS_RW_PATTERN); 121 - if (result != USB_STOR_XFER_GOOD) 122 - return USB_STOR_TRANSPORT_ERROR; 123 - 124 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 125 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 126 - bcb->DataTransferLength = 0x200; 127 - bcb->Flags = 0x80; 128 - bcb->CDB[0] = 0xF2; 129 - bcb->CDB[1] = 0x06; 130 - bcb->CDB[4] = (BYTE)(bn); 131 - bcb->CDB[3] = (BYTE)(bn>>8); 132 - bcb->CDB[2] = (BYTE)(bn>>16); 133 - 134 - result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); 135 - if (result != USB_STOR_XFER_GOOD) 136 - return USB_STOR_TRANSPORT_ERROR; 137 - 138 - return USB_STOR_TRANSPORT_GOOD; 139 - } 140 - 141 - /* 142 - * MS_CardInit() 143 - */ 144 - int MS_CardInit(struct us_data *us) 145 - { 146 - DWORD result = 0; 147 - WORD TmpBlock; 148 - PBYTE PageBuffer0 = NULL, PageBuffer1 = NULL; 149 - MS_LibTypeExtdat extdat; 150 - WORD btBlk1st, btBlk2nd; 151 - DWORD btBlk1stErred; 152 - 153 - printk(KERN_INFO "MS_CardInit start\n"); 154 - 155 - MS_LibFreeAllocatedArea(us); 156 - 157 - PageBuffer0 = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL); 158 - PageBuffer1 = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL); 159 - if ((PageBuffer0 == NULL) || (PageBuffer1 == NULL)) { 160 - result = MS_NO_MEMORY_ERROR; 161 - goto exit; 162 - } 163 - 164 - btBlk1st = btBlk2nd = MS_LB_NOT_USED; 165 - btBlk1stErred = 0; 166 - 167 - for (TmpBlock = 0; TmpBlock < MS_MAX_INITIAL_ERROR_BLOCKS+2; 168 - TmpBlock++) { 169 - switch (MS_ReaderReadPage(us, TmpBlock, 0, 170 - (DWORD *)PageBuffer0, &extdat)) { 171 - case MS_STATUS_SUCCESS: 172 - break; 173 - case MS_STATUS_INT_ERROR: 174 - break; 175 - case MS_STATUS_ERROR: 176 - default: 177 - continue; 178 - } 179 - 180 - if ((extdat.ovrflg & MS_REG_OVR_BKST) == MS_REG_OVR_BKST_NG) 181 - continue; 182 - 183 - if (((extdat.mngflg & MS_REG_MNG_SYSFLG) == MS_REG_MNG_SYSFLG_USER) || 184 - (be16_to_cpu(((MemStickBootBlockPage0 *)PageBuffer0)->header.wBlockID) != MS_BOOT_BLOCK_ID) || 185 - (be16_to_cpu(((MemStickBootBlockPage0 *)PageBuffer0)->header.wFormatVersion) != MS_BOOT_BLOCK_FORMAT_VERSION) || 186 - (((MemStickBootBlockPage0 *)PageBuffer0)->header.bNumberOfDataEntry != MS_BOOT_BLOCK_DATA_ENTRIES)) 187 - continue; 188 - 189 - if (btBlk1st != MS_LB_NOT_USED) { 190 - btBlk2nd = TmpBlock; 191 - break; 192 - } 193 - 194 - btBlk1st = TmpBlock; 195 - memcpy(PageBuffer1, PageBuffer0, MS_BYTES_PER_PAGE); 196 - if (extdat.status1 & 197 - (MS_REG_ST1_DTER | MS_REG_ST1_EXER | MS_REG_ST1_FGER)) 198 - btBlk1stErred = 1; 199 - } 200 - 201 - if (btBlk1st == MS_LB_NOT_USED) { 202 - result = MS_STATUS_ERROR; 203 - goto exit; 204 - } 205 - 206 - /* write protect */ 207 - if ((extdat.status0 & MS_REG_ST0_WP) == MS_REG_ST0_WP_ON) 208 - MS_LibCtrlSet(us, MS_LIB_CTRL_WRPROTECT); 209 - 210 - result = MS_STATUS_ERROR; 211 - /* 1st Boot Block */ 212 - if (btBlk1stErred == 0) 213 - result = MS_LibProcessBootBlock(us, btBlk1st, PageBuffer1); 214 - /* 1st */ 215 - /* 2nd Boot Block */ 216 - if (result && (btBlk2nd != MS_LB_NOT_USED)) 217 - result = MS_LibProcessBootBlock(us, btBlk2nd, PageBuffer0); 218 - 219 - if (result) { 220 - result = MS_STATUS_ERROR; 221 - goto exit; 222 - } 223 - 224 - for (TmpBlock = 0; TmpBlock < btBlk1st; TmpBlock++) 225 - us->MS_Lib.Phy2LogMap[TmpBlock] = MS_LB_INITIAL_ERROR; 226 - 227 - us->MS_Lib.Phy2LogMap[btBlk1st] = MS_LB_BOOT_BLOCK; 228 - 229 - if (btBlk2nd != MS_LB_NOT_USED) { 230 - for (TmpBlock = btBlk1st + 1; TmpBlock < btBlk2nd; TmpBlock++) 231 - us->MS_Lib.Phy2LogMap[TmpBlock] = MS_LB_INITIAL_ERROR; 232 - us->MS_Lib.Phy2LogMap[btBlk2nd] = MS_LB_BOOT_BLOCK; 233 - } 234 - 235 - result = MS_LibScanLogicalBlockNumber(us, btBlk1st); 236 - if (result) 237 - goto exit; 238 - 239 - for (TmpBlock = MS_PHYSICAL_BLOCKS_PER_SEGMENT; 240 - TmpBlock < us->MS_Lib.NumberOfPhyBlock; 241 - TmpBlock += MS_PHYSICAL_BLOCKS_PER_SEGMENT) { 242 - if (MS_CountFreeBlock(us, TmpBlock) == 0) { 243 - MS_LibCtrlSet(us, MS_LIB_CTRL_WRPROTECT); 244 - break; 245 - } 246 - } 247 - 248 - /* write */ 249 - if (MS_LibAllocWriteBuf(us)) { 250 - result = MS_NO_MEMORY_ERROR; 251 - goto exit; 252 - } 253 - 254 - result = MS_STATUS_SUCCESS; 255 - 256 - exit: 257 - kfree(PageBuffer1); 258 - kfree(PageBuffer0); 259 - 260 - printk(KERN_INFO "MS_CardInit end\n"); 261 - return result; 262 - } 263 - 264 - /* 265 - * MS_LibCheckDisableBlock() 266 - */ 267 - int MS_LibCheckDisableBlock(struct us_data *us, WORD PhyBlock) 268 - { 269 - PWORD PageBuf = NULL; 270 - DWORD result = MS_STATUS_SUCCESS; 271 - DWORD blk, index = 0; 272 - MS_LibTypeExtdat extdat; 273 - 274 - PageBuf = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL); 275 - if (PageBuf == NULL) { 276 - result = MS_NO_MEMORY_ERROR; 277 - goto exit; 278 - } 279 - 280 - MS_ReaderReadPage(us, PhyBlock, 1, (DWORD *)PageBuf, &extdat); 281 - do { 282 - blk = be16_to_cpu(PageBuf[index]); 283 - if (blk == MS_LB_NOT_USED) 284 - break; 285 - if (blk == us->MS_Lib.Log2PhyMap[0]) { 286 - result = MS_ERROR_FLASH_READ; 287 - break; 288 - } 289 - index++; 290 - } while (1); 291 - 292 - exit: 293 - kfree(PageBuf); 294 - return result; 295 - } 296 - 297 - /* 298 - * MS_LibFreeAllocatedArea() 299 - */ 300 - void MS_LibFreeAllocatedArea(struct us_data *us) 301 - { 302 - MS_LibFreeWriteBuf(us); 303 - MS_LibFreeLogicalMap(us); 304 - 305 - us->MS_Lib.flags = 0; 306 - us->MS_Lib.BytesPerSector = 0; 307 - us->MS_Lib.SectorsPerCylinder = 0; 308 - 309 - us->MS_Lib.cardType = 0; 310 - us->MS_Lib.blockSize = 0; 311 - us->MS_Lib.PagesPerBlock = 0; 312 - 313 - us->MS_Lib.NumberOfPhyBlock = 0; 314 - us->MS_Lib.NumberOfLogBlock = 0; 315 - } 316 - 317 - /* 318 - * MS_LibFreeWriteBuf() 319 - */ 320 - void MS_LibFreeWriteBuf(struct us_data *us) 321 - { 322 - us->MS_Lib.wrtblk = (WORD)-1; /* set to -1 */ 323 - 324 - /* memset((fdoExt)->MS_Lib.pagemap, 0, 325 - sizeof((fdoExt)->MS_Lib.pagemap)) */ 326 - MS_LibClearPageMap(us); 327 - 328 - if (us->MS_Lib.blkpag) { 329 - kfree((BYTE *)(us->MS_Lib.blkpag)); /* Arnold test ... */ 330 - us->MS_Lib.blkpag = NULL; 331 - } 332 - 333 - if (us->MS_Lib.blkext) { 334 - kfree((BYTE *)(us->MS_Lib.blkext)); /* Arnold test ... */ 335 - us->MS_Lib.blkext = NULL; 336 - } 337 - } 338 - 339 - /* 340 - * MS_LibFreeLogicalMap() 341 - */ 342 - int MS_LibFreeLogicalMap(struct us_data *us) 343 - { 344 - kfree(us->MS_Lib.Phy2LogMap); 345 - us->MS_Lib.Phy2LogMap = NULL; 346 - 347 - kfree(us->MS_Lib.Log2PhyMap); 348 - us->MS_Lib.Log2PhyMap = NULL; 349 - 350 - return 0; 351 - } 352 - 353 - /* 354 - * MS_LibProcessBootBlock() 355 - */ 356 - int MS_LibProcessBootBlock(struct us_data *us, WORD PhyBlock, BYTE *PageData) 357 - { 358 - MemStickBootBlockSysEnt *SysEntry; 359 - MemStickBootBlockSysInf *SysInfo; 360 - DWORD i, result; 361 - BYTE PageNumber; 362 - BYTE *PageBuffer; 363 - MS_LibTypeExtdat ExtraData; 364 - 365 - 366 - PageBuffer = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL); 367 - if (PageBuffer == NULL) 368 - return (DWORD)-1; 369 - 370 - result = (DWORD)-1; 371 - 372 - SysInfo = &(((MemStickBootBlockPage0 *)PageData)->sysinf); 373 - 374 - if ((SysInfo->bMsClass != MS_SYSINF_MSCLASS_TYPE_1) || 375 - (be16_to_cpu(SysInfo->wPageSize) != MS_SYSINF_PAGE_SIZE) || 376 - ((SysInfo->bSecuritySupport & MS_SYSINF_SECURITY) == MS_SYSINF_SECURITY_SUPPORT) || 377 - (SysInfo->bReserved1 != MS_SYSINF_RESERVED1) || 378 - (SysInfo->bReserved2 != MS_SYSINF_RESERVED2) || 379 - (SysInfo->bFormatType != MS_SYSINF_FORMAT_FAT) || 380 - (SysInfo->bUsage != MS_SYSINF_USAGE_GENERAL)) 381 - goto exit; 382 - 383 - switch (us->MS_Lib.cardType = SysInfo->bCardType) { 384 - case MS_SYSINF_CARDTYPE_RDONLY: 385 - MS_LibCtrlSet(us, MS_LIB_CTRL_RDONLY); 386 - break; 387 - case MS_SYSINF_CARDTYPE_RDWR: 388 - MS_LibCtrlReset(us, MS_LIB_CTRL_RDONLY); 389 - break; 390 - case MS_SYSINF_CARDTYPE_HYBRID: 391 - default: 392 - goto exit; 393 - } 394 - 395 - us->MS_Lib.blockSize = be16_to_cpu(SysInfo->wBlockSize); 396 - us->MS_Lib.NumberOfPhyBlock = be16_to_cpu(SysInfo->wBlockNumber); 397 - us->MS_Lib.NumberOfLogBlock = be16_to_cpu(SysInfo->wTotalBlockNumber) 398 - -2; 399 - us->MS_Lib.PagesPerBlock = us->MS_Lib.blockSize * SIZE_OF_KIRO / 400 - MS_BYTES_PER_PAGE; 401 - us->MS_Lib.NumberOfSegment = us->MS_Lib.NumberOfPhyBlock / 402 - MS_PHYSICAL_BLOCKS_PER_SEGMENT; 403 - us->MS_Model = be16_to_cpu(SysInfo->wMemorySize); 404 - 405 - /*Allocate to all number of logicalblock and physicalblock */ 406 - if (MS_LibAllocLogicalMap(us)) 407 - goto exit; 408 - 409 - /* Mark the book block */ 410 - MS_LibSetBootBlockMark(us, PhyBlock); 411 - 412 - SysEntry = &(((MemStickBootBlockPage0 *)PageData)->sysent); 413 - 414 - for (i = 0; i < MS_NUMBER_OF_SYSTEM_ENTRY; i++) { 415 - DWORD EntryOffset, EntrySize; 416 - 417 - EntryOffset = be32_to_cpu(SysEntry->entry[i].dwStart); 418 - 419 - if (EntryOffset == 0xffffff) 420 - continue; 421 - EntrySize = be32_to_cpu(SysEntry->entry[i].dwSize); 422 - 423 - if (EntrySize == 0) 424 - continue; 425 - 426 - if (EntryOffset + MS_BYTES_PER_PAGE + EntrySize > 427 - us->MS_Lib.blockSize * (DWORD)SIZE_OF_KIRO) 428 - continue; 429 - 430 - if (i == 0) { 431 - BYTE PrevPageNumber = 0; 432 - WORD phyblk; 433 - 434 - if (SysEntry->entry[i].bType != 435 - MS_SYSENT_TYPE_INVALID_BLOCK) 436 - goto exit; 437 - 438 - while (EntrySize > 0) { 439 - 440 - PageNumber = (BYTE)(EntryOffset / 441 - MS_BYTES_PER_PAGE + 1); 442 - if (PageNumber != PrevPageNumber) { 443 - switch (MS_ReaderReadPage(us, PhyBlock, 444 - PageNumber, (DWORD *)PageBuffer, 445 - &ExtraData)) { 446 - case MS_STATUS_SUCCESS: 447 - break; 448 - case MS_STATUS_WRITE_PROTECT: 449 - case MS_ERROR_FLASH_READ: 450 - case MS_STATUS_ERROR: 451 - default: 452 - goto exit; 453 - } 454 - 455 - PrevPageNumber = PageNumber; 456 - } 457 - 458 - phyblk = be16_to_cpu(*(WORD *)(PageBuffer + 459 - (EntryOffset % MS_BYTES_PER_PAGE))); 460 - if (phyblk < 0x0fff) 461 - MS_LibSetInitialErrorBlock(us, phyblk); 462 - 463 - EntryOffset += 2; 464 - EntrySize -= 2; 465 - } 466 - } else if (i == 1) { /* CIS/IDI */ 467 - MemStickBootBlockIDI *idi; 468 - 469 - if (SysEntry->entry[i].bType != MS_SYSENT_TYPE_CIS_IDI) 470 - goto exit; 471 - 472 - switch (MS_ReaderReadPage(us, PhyBlock, 473 - (BYTE)(EntryOffset / MS_BYTES_PER_PAGE + 1), 474 - (DWORD *)PageBuffer, &ExtraData)) { 475 - case MS_STATUS_SUCCESS: 476 - break; 477 - case MS_STATUS_WRITE_PROTECT: 478 - case MS_ERROR_FLASH_READ: 479 - case MS_STATUS_ERROR: 480 - default: 481 - goto exit; 482 - } 483 - 484 - idi = &((MemStickBootBlockCIS_IDI *)(PageBuffer + 485 - (EntryOffset % MS_BYTES_PER_PAGE)))->idi.idi; 486 - if (le16_to_cpu(idi->wIDIgeneralConfiguration) != 487 - MS_IDI_GENERAL_CONF) 488 - goto exit; 489 - 490 - us->MS_Lib.BytesPerSector = 491 - le16_to_cpu(idi->wIDIbytesPerSector); 492 - if (us->MS_Lib.BytesPerSector != MS_BYTES_PER_PAGE) 493 - goto exit; 494 - } 495 - } /* End for .. */ 496 - 497 - result = 0; 498 - 499 - exit: 500 - if (result) 501 - MS_LibFreeLogicalMap(us); 502 - 503 - kfree(PageBuffer); 504 - 505 - result = 0; 506 - return result; 507 - } 508 - 509 - /* 510 - * MS_LibAllocLogicalMap() 511 - */ 512 - int MS_LibAllocLogicalMap(struct us_data *us) 513 - { 514 - DWORD i; 515 - 516 - 517 - us->MS_Lib.Phy2LogMap = kmalloc(us->MS_Lib.NumberOfPhyBlock * 518 - sizeof(WORD), GFP_KERNEL); 519 - us->MS_Lib.Log2PhyMap = kmalloc(us->MS_Lib.NumberOfLogBlock * 520 - sizeof(WORD), GFP_KERNEL); 521 - 522 - if ((us->MS_Lib.Phy2LogMap == NULL) || 523 - (us->MS_Lib.Log2PhyMap == NULL)) { 524 - MS_LibFreeLogicalMap(us); 525 - return (DWORD)-1; 526 - } 527 - 528 - for (i = 0; i < us->MS_Lib.NumberOfPhyBlock; i++) 529 - us->MS_Lib.Phy2LogMap[i] = MS_LB_NOT_USED; 530 - 531 - for (i = 0; i < us->MS_Lib.NumberOfLogBlock; i++) 532 - us->MS_Lib.Log2PhyMap[i] = MS_LB_NOT_USED; 533 - 534 - return 0; 535 - } 536 - 537 - /* 538 - * MS_LibSetBootBlockMark() 539 - */ 540 - int MS_LibSetBootBlockMark(struct us_data *us, WORD phyblk) 541 - { 542 - return MS_LibSetLogicalBlockMark(us, phyblk, MS_LB_BOOT_BLOCK); 543 - } 544 - 545 - /* 546 - * MS_LibSetLogicalBlockMark() 547 - */ 548 - int MS_LibSetLogicalBlockMark(struct us_data *us, WORD phyblk, WORD mark) 549 - { 550 - if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 551 - return (DWORD)-1; 552 - 553 - us->MS_Lib.Phy2LogMap[phyblk] = mark; 554 - 555 - return 0; 556 - } 557 - 558 - /* 559 - * MS_LibSetInitialErrorBlock() 560 - */ 561 - int MS_LibSetInitialErrorBlock(struct us_data *us, WORD phyblk) 562 - { 563 - return MS_LibSetLogicalBlockMark(us, phyblk, MS_LB_INITIAL_ERROR); 564 - } 565 - 566 - /* 567 - * MS_LibScanLogicalBlockNumber() 568 - */ 569 - int MS_LibScanLogicalBlockNumber(struct us_data *us, WORD btBlk1st) 570 - { 571 - WORD PhyBlock, newblk, i; 572 - WORD LogStart, LogEnde; 573 - MS_LibTypeExtdat extdat; 574 - BYTE buf[0x200]; 575 - DWORD count = 0, index = 0; 576 - 577 - for (PhyBlock = 0; PhyBlock < us->MS_Lib.NumberOfPhyBlock;) { 578 - MS_LibPhy2LogRange(PhyBlock, &LogStart, &LogEnde); 579 - 580 - for (i = 0; i < MS_PHYSICAL_BLOCKS_PER_SEGMENT; 581 - i++, PhyBlock++) { 582 - switch (MS_LibConv2Logical(us, PhyBlock)) { 583 - case MS_STATUS_ERROR: 584 - continue; 585 - default: 586 - break; 587 - } 588 - 589 - if (count == PhyBlock) { 590 - MS_LibReadExtraBlock(us, PhyBlock, 591 - 0, 0x80, &buf); 592 - count += 0x80; 593 - } 594 - index = (PhyBlock % 0x80) * 4; 595 - 596 - extdat.ovrflg = buf[index]; 597 - extdat.mngflg = buf[index+1]; 598 - extdat.logadr = MemStickLogAddr(buf[index+2], 599 - buf[index+3]); 600 - 601 - if ((extdat.ovrflg & MS_REG_OVR_BKST) != 602 - MS_REG_OVR_BKST_OK) { 603 - MS_LibSetAcquiredErrorBlock(us, PhyBlock); 604 - continue; 605 - } 606 - 607 - if ((extdat.mngflg & MS_REG_MNG_ATFLG) == 608 - MS_REG_MNG_ATFLG_ATTBL) { 609 - MS_LibErasePhyBlock(us, PhyBlock); 610 - continue; 611 - } 612 - 613 - if (extdat.logadr != MS_LB_NOT_USED) { 614 - if ((extdat.logadr < LogStart) || 615 - (LogEnde <= extdat.logadr)) { 616 - MS_LibErasePhyBlock(us, PhyBlock); 617 - continue; 618 - } 619 - 620 - newblk = MS_LibConv2Physical(us, extdat.logadr); 621 - 622 - if (newblk != MS_LB_NOT_USED) { 623 - if (extdat.logadr == 0) { 624 - MS_LibSetLogicalPair(us, 625 - extdat.logadr, 626 - PhyBlock); 627 - if (MS_LibCheckDisableBlock(us, 628 - btBlk1st)) { 629 - MS_LibSetLogicalPair(us, 630 - extdat.logadr, newblk); 631 - continue; 632 - } 633 - } 634 - 635 - MS_LibReadExtra(us, newblk, 0, &extdat); 636 - if ((extdat.ovrflg & MS_REG_OVR_UDST) == 637 - MS_REG_OVR_UDST_UPDATING) { 638 - MS_LibErasePhyBlock(us, 639 - PhyBlock); 640 - continue; 641 - } else { 642 - MS_LibErasePhyBlock(us, newblk); 643 - } 644 - } 645 - 646 - MS_LibSetLogicalPair(us, extdat.logadr, 647 - PhyBlock); 648 - } 649 - } 650 - } /* End for ... */ 651 - 652 - return MS_STATUS_SUCCESS; 653 - } 654 - 655 - /* 656 - * MS_LibAllocWriteBuf() 657 - */ 658 - int MS_LibAllocWriteBuf(struct us_data *us) 659 - { 660 - us->MS_Lib.wrtblk = (WORD)-1; 661 - 662 - us->MS_Lib.blkpag = kmalloc(us->MS_Lib.PagesPerBlock * 663 - us->MS_Lib.BytesPerSector, GFP_KERNEL); 664 - us->MS_Lib.blkext = kmalloc(us->MS_Lib.PagesPerBlock * 665 - sizeof(MS_LibTypeExtdat), GFP_KERNEL); 666 - 667 - if ((us->MS_Lib.blkpag == NULL) || (us->MS_Lib.blkext == NULL)) { 668 - MS_LibFreeWriteBuf(us); 669 - return (DWORD)-1; 670 - } 671 - 672 - MS_LibClearWriteBuf(us); 673 - 674 - return 0; 675 - } 676 - 677 - /* 678 - * MS_LibClearWriteBuf() 679 - */ 680 - void MS_LibClearWriteBuf(struct us_data *us) 681 - { 682 - int i; 683 - 684 - us->MS_Lib.wrtblk = (WORD)-1; 685 - MS_LibClearPageMap(us); 686 - 687 - if (us->MS_Lib.blkpag) 688 - memset(us->MS_Lib.blkpag, 0xff, 689 - us->MS_Lib.PagesPerBlock * us->MS_Lib.BytesPerSector); 690 - 691 - if (us->MS_Lib.blkext) { 692 - for (i = 0; i < us->MS_Lib.PagesPerBlock; i++) { 693 - us->MS_Lib.blkext[i].status1 = MS_REG_ST1_DEFAULT; 694 - us->MS_Lib.blkext[i].ovrflg = MS_REG_OVR_DEFAULT; 695 - us->MS_Lib.blkext[i].mngflg = MS_REG_MNG_DEFAULT; 696 - us->MS_Lib.blkext[i].logadr = MS_LB_NOT_USED; 697 - } 698 - } 699 - } 700 - 701 - /* 702 - * MS_LibPhy2LogRange() 703 - */ 704 - void MS_LibPhy2LogRange(WORD PhyBlock, WORD *LogStart, WORD *LogEnde) 705 - { 706 - PhyBlock /= MS_PHYSICAL_BLOCKS_PER_SEGMENT; 707 - 708 - if (PhyBlock) { 709 - *LogStart = MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT + 710 - (PhyBlock - 1) * MS_LOGICAL_BLOCKS_PER_SEGMENT;/*496*/ 711 - *LogEnde = *LogStart + MS_LOGICAL_BLOCKS_PER_SEGMENT;/*496*/ 712 - } else { 713 - *LogStart = 0; 714 - *LogEnde = MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT;/*494*/ 715 - } 716 - } 717 - 718 - /* 719 - * MS_LibReadExtraBlock() 720 - */ 721 - int MS_LibReadExtraBlock(struct us_data *us, DWORD PhyBlock, 722 - BYTE PageNum, BYTE blen, void *buf) 723 - { 724 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 725 - int result; 726 - 727 - /* printk("MS_LibReadExtraBlock --- PhyBlock = %x, 728 - PageNum = %x, blen = %x\n", PhyBlock, PageNum, blen); */ 729 - 730 - /* Read Extra Data */ 731 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 732 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 733 - bcb->DataTransferLength = 0x4 * blen; 734 - bcb->Flags = 0x80; 735 - bcb->CDB[0] = 0xF1; 736 - bcb->CDB[1] = 0x03; 737 - bcb->CDB[5] = (BYTE)(PageNum); 738 - bcb->CDB[4] = (BYTE)(PhyBlock); 739 - bcb->CDB[3] = (BYTE)(PhyBlock>>8); 740 - bcb->CDB[2] = (BYTE)(PhyBlock>>16); 741 - bcb->CDB[6] = blen; 742 - 743 - result = ENE_SendScsiCmd(us, FDIR_READ, buf, 0); 744 - if (result != USB_STOR_XFER_GOOD) 745 - return USB_STOR_TRANSPORT_ERROR; 746 - 747 - return USB_STOR_TRANSPORT_GOOD; 748 - } 749 - 750 - /* 751 - * MS_LibReadExtra() 752 - */ 753 - int MS_LibReadExtra(struct us_data *us, DWORD PhyBlock, 754 - BYTE PageNum, MS_LibTypeExtdat *ExtraDat) 755 - { 756 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 757 - int result; 758 - BYTE ExtBuf[4]; 759 - 760 - /* printk("MS_LibReadExtra --- PhyBlock = %x, PageNum = %x\n" 761 - , PhyBlock, PageNum); */ 762 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 763 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 764 - bcb->DataTransferLength = 0x4; 765 - bcb->Flags = 0x80; 766 - bcb->CDB[0] = 0xF1; 767 - bcb->CDB[1] = 0x03; 768 - bcb->CDB[5] = (BYTE)(PageNum); 769 - bcb->CDB[4] = (BYTE)(PhyBlock); 770 - bcb->CDB[3] = (BYTE)(PhyBlock>>8); 771 - bcb->CDB[2] = (BYTE)(PhyBlock>>16); 772 - bcb->CDB[6] = 0x01; 773 - 774 - result = ENE_SendScsiCmd(us, FDIR_READ, &ExtBuf, 0); 775 - if (result != USB_STOR_XFER_GOOD) 776 - return USB_STOR_TRANSPORT_ERROR; 777 - 778 - ExtraDat->reserved = 0; 779 - ExtraDat->intr = 0x80; /* Not yet, waiting for fireware support */ 780 - ExtraDat->status0 = 0x10; /* Not yet, waiting for fireware support */ 781 - ExtraDat->status1 = 0x00; /* Not yet, waiting for fireware support */ 782 - ExtraDat->ovrflg = ExtBuf[0]; 783 - ExtraDat->mngflg = ExtBuf[1]; 784 - ExtraDat->logadr = MemStickLogAddr(ExtBuf[2], ExtBuf[3]); 785 - 786 - return USB_STOR_TRANSPORT_GOOD; 787 - } 788 - 789 - /* 790 - * MS_LibSetAcquiredErrorBlock() 791 - */ 792 - int MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk) 793 - { 794 - WORD log; 795 - 796 - if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 797 - return (DWORD)-1; 798 - 799 - log = us->MS_Lib.Phy2LogMap[phyblk]; 800 - 801 - if (log < us->MS_Lib.NumberOfLogBlock) 802 - us->MS_Lib.Log2PhyMap[log] = MS_LB_NOT_USED; 803 - 804 - if (us->MS_Lib.Phy2LogMap[phyblk] != MS_LB_INITIAL_ERROR) 805 - us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_ACQUIRED_ERROR; 806 - 807 - return 0; 808 - } 809 - 810 - /* 811 - * MS_LibErasePhyBlock() 812 - */ 813 - int MS_LibErasePhyBlock(struct us_data *us, WORD phyblk) 814 - { 815 - WORD log; 816 - 817 - if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 818 - return MS_STATUS_ERROR; 819 - 820 - log = us->MS_Lib.Phy2LogMap[phyblk]; 821 - 822 - if (log < us->MS_Lib.NumberOfLogBlock) 823 - us->MS_Lib.Log2PhyMap[log] = MS_LB_NOT_USED; 824 - 825 - us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_NOT_USED; 826 - 827 - if (MS_LibIsWritable(us)) { 828 - switch (MS_ReaderEraseBlock(us, phyblk)) { 829 - case MS_STATUS_SUCCESS: 830 - us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_NOT_USED_ERASED; 831 - return MS_STATUS_SUCCESS; 832 - case MS_ERROR_FLASH_ERASE: 833 - case MS_STATUS_INT_ERROR: 834 - MS_LibErrorPhyBlock(us, phyblk); 835 - return MS_ERROR_FLASH_ERASE; 836 - case MS_STATUS_ERROR: 837 - default: 838 - MS_LibCtrlSet(us, MS_LIB_CTRL_RDONLY); 839 - MS_LibSetAcquiredErrorBlock(us, phyblk); 840 - return MS_STATUS_ERROR; 841 - } 842 - } 843 - 844 - MS_LibSetAcquiredErrorBlock(us, phyblk); 845 - 846 - return MS_STATUS_SUCCESS; 847 - } 848 - 849 - /* 850 - * MS_LibErrorPhyBlock() 851 - */ 852 - int MS_LibErrorPhyBlock(struct us_data *us, WORD phyblk) 853 - { 854 - if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 855 - return MS_STATUS_ERROR; 856 - 857 - MS_LibSetAcquiredErrorBlock(us, phyblk); 858 - 859 - if (MS_LibIsWritable(us)) 860 - return MS_LibOverwriteExtra(us, phyblk, 0, 861 - (BYTE)(~MS_REG_OVR_BKST & BYTE_MASK)); 862 - 863 - 864 - return MS_STATUS_SUCCESS; 865 - } 866 - 867 - /* 868 - * MS_LibOverwriteExtra() 869 - */ 870 - int MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr, 871 - BYTE PageNum, BYTE OverwriteFlag) 872 - { 873 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 874 - int result; 875 - 876 - /* printk("MS --- MS_LibOverwriteExtra, \ 877 - PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); */ 878 - result = ENE_LoadBinCode(us, MS_RW_PATTERN); 879 - if (result != USB_STOR_XFER_GOOD) 880 - return USB_STOR_TRANSPORT_ERROR; 881 - 882 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 883 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 884 - bcb->DataTransferLength = 0x4; 885 - bcb->Flags = 0x80; 886 - bcb->CDB[0] = 0xF2; 887 - bcb->CDB[1] = 0x05; 888 - bcb->CDB[5] = (BYTE)(PageNum); 889 - bcb->CDB[4] = (BYTE)(PhyBlockAddr); 890 - bcb->CDB[3] = (BYTE)(PhyBlockAddr>>8); 891 - bcb->CDB[2] = (BYTE)(PhyBlockAddr>>16); 892 - bcb->CDB[6] = OverwriteFlag; 893 - bcb->CDB[7] = 0xFF; 894 - bcb->CDB[8] = 0xFF; 895 - bcb->CDB[9] = 0xFF; 896 - 897 - result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); 898 - if (result != USB_STOR_XFER_GOOD) 899 - return USB_STOR_TRANSPORT_ERROR; 900 - 901 - return USB_STOR_TRANSPORT_GOOD; 902 - } 903 - 904 - /* 905 - * MS_LibForceSetLogicalPair() 906 - */ 907 - int MS_LibForceSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk) 908 - { 909 - if (logblk == MS_LB_NOT_USED) 910 - return 0; 911 - 912 - if ((logblk >= us->MS_Lib.NumberOfLogBlock) || 913 - (phyblk >= us->MS_Lib.NumberOfPhyBlock)) 914 - return (DWORD)-1; 915 - 916 - us->MS_Lib.Phy2LogMap[phyblk] = logblk; 917 - us->MS_Lib.Log2PhyMap[logblk] = phyblk; 918 - 919 - return 0; 920 - } 921 - 922 - /* 923 - * MS_LibSetLogicalPair() 924 - */ 925 - int MS_LibSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk) 926 - { 927 - if ((logblk >= us->MS_Lib.NumberOfLogBlock) || 928 - (phyblk >= us->MS_Lib.NumberOfPhyBlock)) 929 - return (DWORD)-1; 930 - 931 - us->MS_Lib.Phy2LogMap[phyblk] = logblk; 932 - us->MS_Lib.Log2PhyMap[logblk] = phyblk; 933 - 934 - return 0; 935 - } 936 - 937 - /* 938 - * MS_CountFreeBlock() 939 - */ 940 - int MS_CountFreeBlock(struct us_data *us, WORD PhyBlock) 941 - { 942 - DWORD Ende, Count; 943 - 944 - Ende = PhyBlock + MS_PHYSICAL_BLOCKS_PER_SEGMENT; 945 - for (Count = 0; PhyBlock < Ende; PhyBlock++) { 946 - switch (us->MS_Lib.Phy2LogMap[PhyBlock]) { 947 - case MS_LB_NOT_USED: 948 - case MS_LB_NOT_USED_ERASED: 949 - Count++; 950 - default: 951 - break; 952 - } 953 - } 954 - 955 - return Count; 956 - } 957 - 958 - /* 959 - * MS_LibSearchBlockFromPhysical() 960 - */ 961 - int MS_LibSearchBlockFromPhysical(struct us_data *us, WORD phyblk) 962 - { 963 - WORD Newblk; 964 - WORD blk; 965 - MS_LibTypeExtdat extdat; 966 - 967 - if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 968 - return MS_LB_ERROR; 969 - 970 - for (blk = phyblk + 1; blk != phyblk; blk++) { 971 - if ((blk & MS_PHYSICAL_BLOCKS_PER_SEGMENT_MASK) == 0) 972 - blk -= MS_PHYSICAL_BLOCKS_PER_SEGMENT; 973 - 974 - Newblk = us->MS_Lib.Phy2LogMap[blk]; 975 - if (us->MS_Lib.Phy2LogMap[blk] == MS_LB_NOT_USED_ERASED) 976 - return blk; 977 - else if (us->MS_Lib.Phy2LogMap[blk] == MS_LB_NOT_USED) { 978 - switch (MS_LibReadExtra(us, blk, 0, &extdat)) { 979 - case MS_STATUS_SUCCESS: 980 - case MS_STATUS_SUCCESS_WITH_ECC: 981 - break; 982 - case MS_NOCARD_ERROR: 983 - return MS_NOCARD_ERROR; 984 - case MS_STATUS_INT_ERROR: 985 - return MS_LB_ERROR; 986 - case MS_ERROR_FLASH_READ: 987 - default: 988 - MS_LibSetAcquiredErrorBlock(us, blk); 989 - /* MS_LibErrorPhyBlock(fdoExt, blk); */ 990 - continue; 991 - } /* End switch */ 992 - 993 - if ((extdat.ovrflg & MS_REG_OVR_BKST) != 994 - MS_REG_OVR_BKST_OK) { 995 - MS_LibSetAcquiredErrorBlock(us, blk); 996 - continue; 997 - } 998 - 999 - switch (MS_LibErasePhyBlock(us, blk)) { 1000 - case MS_STATUS_SUCCESS: 1001 - return blk; 1002 - case MS_STATUS_ERROR: 1003 - return MS_LB_ERROR; 1004 - case MS_ERROR_FLASH_ERASE: 1005 - default: 1006 - MS_LibErrorPhyBlock(us, blk); 1007 - break; 1008 - } 1009 - } 1010 - } /* End for */ 1011 - 1012 - return MS_LB_ERROR; 1013 - } 1014 - 1015 - /* 1016 - * MS_LibSearchBlockFromLogical() 1017 - */ 1018 - int MS_LibSearchBlockFromLogical(struct us_data *us, WORD logblk) 1019 - { 1020 - WORD phyblk; 1021 - 1022 - phyblk = MS_LibConv2Physical(us, logblk); 1023 - if (phyblk >= MS_LB_ERROR) { 1024 - if (logblk >= us->MS_Lib.NumberOfLogBlock) 1025 - return MS_LB_ERROR; 1026 - 1027 - phyblk = (logblk + MS_NUMBER_OF_BOOT_BLOCK) / 1028 - MS_LOGICAL_BLOCKS_PER_SEGMENT; 1029 - phyblk *= MS_PHYSICAL_BLOCKS_PER_SEGMENT; 1030 - phyblk += MS_PHYSICAL_BLOCKS_PER_SEGMENT - 1; 1031 - } 1032 - 1033 - return MS_LibSearchBlockFromPhysical(us, phyblk); 1034 - }
-401
drivers/staging/keucr/ms.h
··· 1 - #ifndef MS_INCD 2 - #define MS_INCD 3 - 4 - #include <linux/blkdev.h> 5 - #include "common.h" 6 - 7 - /* MemoryStick Register */ 8 - /* Status Register 0 */ 9 - #define MS_REG_ST0_MB 0x80 /* media busy */ 10 - #define MS_REG_ST0_FB0 0x40 /* flush busy 0 */ 11 - #define MS_REG_ST0_BE 0x20 /* buffer empty */ 12 - #define MS_REG_ST0_BF 0x10 /* buffer full */ 13 - #define MS_REG_ST0_SL 0x02 /* sleep */ 14 - #define MS_REG_ST0_WP 0x01 /* write protected */ 15 - #define MS_REG_ST0_WP_ON MS_REG_ST0_WP 16 - #define MS_REG_ST0_WP_OFF 0x00 17 - 18 - /* Status Register 1 */ 19 - #define MS_REG_ST1_MB 0x80 /* media busy */ 20 - #define MS_REG_ST1_FB1 0x40 /* flush busy 1 */ 21 - #define MS_REG_ST1_DTER 0x20 /* error on data(corrected) */ 22 - #define MS_REG_ST1_UCDT 0x10 /* unable to correct data */ 23 - #define MS_REG_ST1_EXER 0x08 /* error on extra(corrected) */ 24 - #define MS_REG_ST1_UCEX 0x04 /* unable to correct extra */ 25 - #define MS_REG_ST1_FGER 0x02 /* error on overwrite flag(corrected) */ 26 - #define MS_REG_ST1_UCFG 0x01 /* unable to correct overwrite flag */ 27 - #define MS_REG_ST1_DEFAULT (MS_REG_ST1_MB | MS_REG_ST1_FB1 | \ 28 - MS_REG_ST1_DTER | MS_REG_ST1_UCDT | \ 29 - MS_REG_ST1_EXER | MS_REG_ST1_UCEX | \ 30 - MS_REG_ST1_FGER | MS_REG_ST1_UCFG) 31 - 32 - /* System Parameter */ 33 - #define MS_REG_SYSPAR_BAMD 0x80 /* block address mode */ 34 - #define MS_REG_SYSPAR_BAND_LINEAR MS_REG_SYSPAR_BAMD /* linear mode */ 35 - #define MS_REG_SYSPAR_BAND_CHIP 0x00 /* chip mode */ 36 - #define MS_REG_SYSPAR_ATEN 0x40 /* attribute ROM enable */ 37 - #define MS_REG_SYSPAR_ATEN_ENABLE MS_REG_SYSPAR_ATEN /* enable */ 38 - #define MS_REG_SYSPAR_ATEN_DISABLE 0x00 /* disable */ 39 - #define MS_REG_SYSPAR_RESERVED 0x2f 40 - 41 - /* Command Parameter */ 42 - #define MS_REG_CMDPAR_CP2 0x80 43 - #define MS_REG_CMDPAR_CP1 0x40 44 - #define MS_REG_CMDPAR_CP0 0x20 45 - #define MS_REG_CMDPAR_BLOCK_ACCESS 0 46 - #define MS_REG_CMDPAR_PAGE_ACCESS MS_REG_CMDPAR_CP0 47 - #define MS_REG_CMDPAR_EXTRA_DATA MS_REG_CMDPAR_CP1 48 - #define MS_REG_CMDPAR_OVERWRITE MS_REG_CMDPAR_CP2 49 - #define MS_REG_CMDPAR_RESERVED 0x1f 50 - 51 - /* Overwrite Area */ 52 - #define MS_REG_OVR_BKST 0x80 /* block status */ 53 - #define MS_REG_OVR_BKST_OK MS_REG_OVR_BKST /* OK */ 54 - #define MS_REG_OVR_BKST_NG 0x00 /* NG */ 55 - #define MS_REG_OVR_PGST0 0x40 /* page status */ 56 - #define MS_REG_OVR_PGST1 0x20 57 - #define MS_REG_OVR_PGST_MASK (MS_REG_OVR_PGST0 | MS_REG_OVR_PGST1) 58 - #define MS_REG_OVR_PGST_OK (MS_REG_OVR_PGST0 | MS_REG_OVR_PGST1) /* OK */ 59 - #define MS_REG_OVR_PGST_NG MS_REG_OVR_PGST1 /* NG */ 60 - #define MS_REG_OVR_PGST_DATA_ERROR 0x00 /* data error */ 61 - #define MS_REG_OVR_UDST 0x10 /* update status */ 62 - #define MS_REG_OVR_UDST_UPDATING 0x00 /* updating */ 63 - #define MS_REG_OVR_UDST_NO_UPDATE MS_REG_OVR_UDST 64 - #define MS_REG_OVR_RESERVED 0x08 65 - #define MS_REG_OVR_DEFAULT (MS_REG_OVR_BKST_OK | \ 66 - MS_REG_OVR_PGST_OK | \ 67 - MS_REG_OVR_UDST_NO_UPDATE | \ 68 - MS_REG_OVR_RESERVED) 69 - /* Management Flag */ 70 - #define MS_REG_MNG_SCMS0 0x20 /* serial copy management system */ 71 - #define MS_REG_MNG_SCMS1 0x10 72 - #define MS_REG_MNG_SCMS_MASK (MS_REG_MNG_SCMS0 | MS_REG_MNG_SCMS1) 73 - #define MS_REG_MNG_SCMS_COPY_OK (MS_REG_MNG_SCMS0 | MS_REG_MNG_SCMS1) 74 - #define MS_REG_MNG_SCMS_ONE_COPY MS_REG_MNG_SCMS1 75 - #define MS_REG_MNG_SCMS_NO_COPY 0x00 76 - #define MS_REG_MNG_ATFLG 0x08 /* address transfer table flag */ 77 - #define MS_REG_MNG_ATFLG_OTHER MS_REG_MNG_ATFLG /* other */ 78 - #define MS_REG_MNG_ATFLG_ATTBL 0x00 /* address transfer table */ 79 - #define MS_REG_MNG_SYSFLG 0x04 /* system flag */ 80 - #define MS_REG_MNG_SYSFLG_USER MS_REG_MNG_SYSFLG /* user block */ 81 - #define MS_REG_MNG_SYSFLG_BOOT 0x00 /* system block */ 82 - #define MS_REG_MNG_RESERVED 0xc3 83 - #define MS_REG_MNG_DEFAULT (MS_REG_MNG_SCMS_COPY_OK | \ 84 - MS_REG_MNG_ATFLG_OTHER | \ 85 - MS_REG_MNG_SYSFLG_USER | \ 86 - MS_REG_MNG_RESERVED) 87 - 88 - /* Error codes */ 89 - #define MS_STATUS_SUCCESS 0x0000 90 - #define MS_ERROR_OUT_OF_SPACE 0x0103 91 - #define MS_STATUS_WRITE_PROTECT 0x0106 92 - #define MS_ERROR_READ_DATA 0x8002 93 - #define MS_ERROR_FLASH_READ 0x8003 94 - #define MS_ERROR_FLASH_WRITE 0x8004 95 - #define MS_ERROR_FLASH_ERASE 0x8005 96 - #define MS_ERROR_FLASH_COPY 0x8006 97 - 98 - #define MS_STATUS_ERROR 0xfffe 99 - #define MS_FIFO_ERROR 0xfffd 100 - #define MS_UNDEFINED_ERROR 0xfffc 101 - #define MS_KETIMEOUT_ERROR 0xfffb 102 - #define MS_STATUS_INT_ERROR 0xfffa 103 - #define MS_NO_MEMORY_ERROR 0xfff9 104 - #define MS_NOCARD_ERROR 0xfff8 105 - #define MS_LB_NOT_USED 0xffff 106 - #define MS_LB_ERROR 0xfff0 107 - #define MS_LB_BOOT_BLOCK 0xfff1 108 - #define MS_LB_INITIAL_ERROR 0xfff2 109 - #define MS_STATUS_SUCCESS_WITH_ECC 0xfff3 110 - #define MS_LB_ACQUIRED_ERROR 0xfff4 111 - #define MS_LB_NOT_USED_ERASED 0xfff5 112 - 113 - #define MS_LibConv2Physical(pdx, LogBlock) \ 114 - (((LogBlock) >= (pdx)->MS_Lib.NumberOfLogBlock) ? \ 115 - MS_STATUS_ERROR : (pdx)->MS_Lib.Log2PhyMap[LogBlock]) 116 - #define MS_LibConv2Logical(pdx, PhyBlock) \ 117 - (((PhyBlock) >= (pdx)->MS_Lib.NumberOfPhyBlock) ? \ 118 - MS_STATUS_ERROR : (pdx)->MS_Lib.Phy2LogMap[PhyBlock]) 119 - /*dphy->log table */ 120 - 121 - #define MS_LIB_CTRL_RDONLY 0 122 - #define MS_LIB_CTRL_WRPROTECT 1 123 - #define MS_LibCtrlCheck(pdx, Flag) ((pdx)->MS_Lib.flags & (1 << (Flag))) 124 - 125 - #define MS_LibCtrlSet(pdx, Flag) ((pdx)->MS_Lib.flags |= (1 << (Flag))) 126 - #define MS_LibCtrlReset(pdx, Flag) ((pdx)->MS_Lib.flags &= ~(1 << (Flag))) 127 - #define MS_LibIsWritable(pdx) \ 128 - ((MS_LibCtrlCheck((pdx), MS_LIB_CTRL_RDONLY) == 0) && \ 129 - (MS_LibCtrlCheck(pdx, MS_LIB_CTRL_WRPROTECT) == 0)) 130 - 131 - #define MS_MAX_PAGES_PER_BLOCK 32 132 - #define MS_LIB_BITS_PER_BYTE 8 133 - 134 - #define MS_LibPageMapIdx(n) ((n) / MS_LIB_BITS_PER_BYTE) 135 - #define MS_LibPageMapBit(n) (1 << ((n) % MS_LIB_BITS_PER_BYTE)) 136 - #define MS_LibCheckPageMapBit(pdx, n) \ 137 - ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] & MS_LibPageMapBit(n)) 138 - #define MS_LibSetPageMapBit(pdx, n) \ 139 - ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] |= MS_LibPageMapBit(n)) 140 - #define MS_LibResetPageMapBit(pdx, n) \ 141 - ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] &= ~MS_LibPageMapBit(n)) 142 - #define MS_LibClearPageMap(pdx) \ 143 - memset((pdx)->MS_Lib.pagemap, 0, sizeof((pdx)->MS_Lib.pagemap)) 144 - 145 - 146 - #define MemStickLogAddr(logadr1, logadr0) \ 147 - ((((WORD)(logadr1)) << 8) | (logadr0)) 148 - 149 - #define MS_BYTES_PER_PAGE 512 150 - 151 - #define MS_MAX_INITIAL_ERROR_BLOCKS 10 152 - #define MS_NUMBER_OF_PAGES_FOR_BOOT_BLOCK 3 153 - #define MS_NUMBER_OF_PAGES_FOR_LPCTBL 2 154 - 155 - #define MS_NUMBER_OF_BOOT_BLOCK 2 156 - #define MS_NUMBER_OF_SYSTEM_BLOCK 4 157 - #define MS_LOGICAL_BLOCKS_PER_SEGMENT 496 158 - #define MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT 494 159 - #define MS_PHYSICAL_BLOCKS_PER_SEGMENT 0x200 /* 512 */ 160 - #define MS_PHYSICAL_BLOCKS_PER_SEGMENT_MASK 0x1ff 161 - 162 - #define MS_SECTOR_SIZE 512 163 - #define MBR_SIGNATURE 0xAA55 164 - #define PBR_SIGNATURE 0xAA55 165 - 166 - #define PARTITION_FAT_12 1 167 - #define PARTITION_FAT_16 2 168 - 169 - #define MS_BOOT_BLOCK_ID 0x0001 170 - #define MS_BOOT_BLOCK_FORMAT_VERSION 0x0100 171 - #define MS_BOOT_BLOCK_DATA_ENTRIES 2 172 - 173 - #define MS_SYSINF_MSCLASS_TYPE_1 1 174 - #define MS_SYSINF_CARDTYPE_RDONLY 1 175 - #define MS_SYSINF_CARDTYPE_RDWR 2 176 - #define MS_SYSINF_CARDTYPE_HYBRID 3 177 - #define MS_SYSINF_SECURITY 0x01 178 - #define MS_SYSINF_SECURITY_NO_SUPPORT MS_SYSINF_SECURITY 179 - #define MS_SYSINF_SECURITY_SUPPORT 0 180 - #define MS_SYSINF_FORMAT_MAT 0 /* ? */ 181 - #define MS_SYSINF_FORMAT_FAT 1 182 - #define MS_SYSINF_USAGE_GENERAL 0 183 - #define MS_SYSINF_PAGE_SIZE MS_BYTES_PER_PAGE /* fixed */ 184 - #define MS_SYSINF_RESERVED1 1 185 - #define MS_SYSINF_RESERVED2 1 186 - 187 - #define MS_SYSENT_TYPE_INVALID_BLOCK 0x01 188 - #define MS_SYSENT_TYPE_CIS_IDI 0x0a /* CIS/IDI */ 189 - 190 - #define SIZE_OF_KIRO 1024 191 - 192 - /* BOOT BLOCK */ 193 - #define MS_NUMBER_OF_SYSTEM_ENTRY 4 194 - 195 - /* 196 - * MemStickRegisters 197 - */ 198 - /* Status registers (16 bytes) */ 199 - typedef struct { 200 - BYTE Reserved0; /* 00 */ 201 - BYTE INTRegister; /* 01 */ 202 - BYTE StatusRegister0; /* 02 */ 203 - BYTE StatusRegister1; /* 03 */ 204 - BYTE Reserved1[12]; /* 04-0F */ 205 - } MemStickStatusRegisters; 206 - 207 - /* Parameter registers (6 bytes) */ 208 - typedef struct { 209 - BYTE SystemParameter; /* 10 */ 210 - BYTE BlockAddress2; /* 11 */ 211 - BYTE BlockAddress1; /* 12 */ 212 - BYTE BlockAddress0; /* 13 */ 213 - BYTE CMDParameter; /* 14 */ 214 - BYTE PageAddress; /* 15 */ 215 - } MemStickParameterRegisters; 216 - 217 - /* Extra registers (9 bytes) */ 218 - typedef struct { 219 - BYTE OverwriteFlag; /* 16 */ 220 - BYTE ManagementFlag; /* 17 */ 221 - BYTE LogicalAddress1; /* 18 */ 222 - BYTE LogicalAddress0; /* 19 */ 223 - BYTE ReservedArea[5]; /* 1A-1E */ 224 - } MemStickExtraDataRegisters; 225 - 226 - /* All registers in Memory Stick (32 bytes, includes 1 byte padding) */ 227 - typedef struct { 228 - MemStickStatusRegisters status; 229 - MemStickParameterRegisters param; 230 - MemStickExtraDataRegisters extra; 231 - BYTE padding; 232 - } MemStickRegisters, *PMemStickRegisters; 233 - 234 - /* 235 - * MemStickBootBlockPage0 236 - */ 237 - typedef struct { 238 - WORD wBlockID; 239 - WORD wFormatVersion; 240 - BYTE bReserved1[184]; 241 - BYTE bNumberOfDataEntry; 242 - BYTE bReserved2[179]; 243 - } MemStickBootBlockHeader; 244 - 245 - typedef struct { 246 - DWORD dwStart; 247 - DWORD dwSize; 248 - BYTE bType; 249 - BYTE bReserved[3]; 250 - } MemStickBootBlockSysEntRec; 251 - 252 - typedef struct { 253 - MemStickBootBlockSysEntRec entry[MS_NUMBER_OF_SYSTEM_ENTRY]; 254 - } MemStickBootBlockSysEnt; 255 - 256 - typedef struct { 257 - BYTE bMsClass; /* must be 1 */ 258 - BYTE bCardType; /* see below */ 259 - WORD wBlockSize; /* n KB */ 260 - WORD wBlockNumber; /* number of physical block */ 261 - WORD wTotalBlockNumber; /* number of logical block */ 262 - WORD wPageSize; /* must be 0x200 */ 263 - BYTE bExtraSize; /* 0x10 */ 264 - BYTE bSecuritySupport; 265 - BYTE bAssemblyDate[8]; 266 - BYTE bFactoryArea[4]; 267 - BYTE bAssemblyMakerCode; 268 - BYTE bAssemblyMachineCode[3]; 269 - WORD wMemoryMakerCode; 270 - WORD wMemoryDeviceCode; 271 - WORD wMemorySize; 272 - BYTE bReserved1; 273 - BYTE bReserved2; 274 - BYTE bVCC; 275 - BYTE bVPP; 276 - WORD wControllerChipNumber; 277 - WORD wControllerFunction; /* New MS */ 278 - BYTE bReserved3[9]; /* New MS */ 279 - BYTE bParallelSupport; /* New MS */ 280 - WORD wFormatValue; /* New MS */ 281 - BYTE bFormatType; 282 - BYTE bUsage; 283 - BYTE bDeviceType; 284 - BYTE bReserved4[22]; 285 - BYTE bFUValue3; 286 - BYTE bFUValue4; 287 - BYTE bReserved5[15]; 288 - } MemStickBootBlockSysInf; 289 - 290 - typedef struct { 291 - MemStickBootBlockHeader header; 292 - MemStickBootBlockSysEnt sysent; 293 - MemStickBootBlockSysInf sysinf; 294 - } MemStickBootBlockPage0; 295 - 296 - /* 297 - * MemStickBootBlockCIS_IDI 298 - */ 299 - typedef struct { 300 - BYTE bCistplDEVICE[6]; /* 0 */ 301 - BYTE bCistplDEVICE0C[6]; /* 6 */ 302 - BYTE bCistplJEDECC[4]; /* 12 */ 303 - BYTE bCistplMANFID[6]; /* 16 */ 304 - BYTE bCistplVER1[32]; /* 22 */ 305 - BYTE bCistplFUNCID[4]; /* 54 */ 306 - BYTE bCistplFUNCE0[4]; /* 58 */ 307 - BYTE bCistplFUNCE1[5]; /* 62 */ 308 - BYTE bCistplCONF[7]; /* 67 */ 309 - BYTE bCistplCFTBLENT0[10]; /* 74 */ 310 - BYTE bCistplCFTBLENT1[8]; /* 84 */ 311 - BYTE bCistplCFTBLENT2[12]; /* 92 */ 312 - BYTE bCistplCFTBLENT3[8]; /* 104 */ 313 - BYTE bCistplCFTBLENT4[17]; /* 112 */ 314 - BYTE bCistplCFTBLENT5[8]; /* 129 */ 315 - BYTE bCistplCFTBLENT6[17]; /* 137 */ 316 - BYTE bCistplCFTBLENT7[8]; /* 154 */ 317 - BYTE bCistplNOLINK[3]; /* 162 */ 318 - } MemStickBootBlockCIS; 319 - 320 - typedef struct { 321 - #define MS_IDI_GENERAL_CONF 0x848A 322 - WORD wIDIgeneralConfiguration; /* 0 */ 323 - WORD wIDInumberOfCylinder; /* 1 */ 324 - WORD wIDIreserved0; /* 2 */ 325 - WORD wIDInumberOfHead; /* 3 */ 326 - WORD wIDIbytesPerTrack; /* 4 */ 327 - WORD wIDIbytesPerSector; /* 5 */ 328 - WORD wIDIsectorsPerTrack; /* 6 */ 329 - WORD wIDItotalSectors[2]; /* 7-8 high,low */ 330 - WORD wIDIreserved1[11]; /* 9-19 */ 331 - WORD wIDIbufferType; /* 20 */ 332 - WORD wIDIbufferSize; /* 21 */ 333 - WORD wIDIlongCmdECC; /* 22 */ 334 - WORD wIDIfirmVersion[4]; /* 23-26 */ 335 - WORD wIDImodelName[20]; /* 27-46 */ 336 - WORD wIDIreserved2; /* 47 */ 337 - WORD wIDIlongWordSupported; /* 48 */ 338 - WORD wIDIdmaSupported; /* 49 */ 339 - WORD wIDIreserved3; /* 50 */ 340 - WORD wIDIpioTiming; /* 51 */ 341 - WORD wIDIdmaTiming; /* 52 */ 342 - WORD wIDItransferParameter; /* 53 */ 343 - WORD wIDIformattedCylinder; /* 54 */ 344 - WORD wIDIformattedHead; /* 55 */ 345 - WORD wIDIformattedSectorsPerTrack; /* 56 */ 346 - WORD wIDIformattedTotalSectors[2]; /* 57-58 */ 347 - WORD wIDImultiSector; /* 59 */ 348 - WORD wIDIlbaSectors[2]; /* 60-61 */ 349 - WORD wIDIsingleWordDMA; /* 62 */ 350 - WORD wIDImultiWordDMA; /* 63 */ 351 - WORD wIDIreserved4[192]; /* 64-255 */ 352 - } MemStickBootBlockIDI; 353 - 354 - typedef struct { 355 - union { 356 - MemStickBootBlockCIS cis; 357 - BYTE dmy[256]; 358 - } cis; 359 - 360 - union { 361 - MemStickBootBlockIDI idi; 362 - BYTE dmy[256]; 363 - } idi; 364 - 365 - } MemStickBootBlockCIS_IDI; 366 - 367 - /* 368 - * MS_LibControl 369 - */ 370 - typedef struct { 371 - BYTE reserved; 372 - BYTE intr; 373 - BYTE status0; 374 - BYTE status1; 375 - BYTE ovrflg; 376 - BYTE mngflg; 377 - WORD logadr; 378 - } MS_LibTypeExtdat; 379 - 380 - typedef struct { 381 - DWORD flags; 382 - DWORD BytesPerSector; 383 - DWORD NumberOfCylinder; 384 - DWORD SectorsPerCylinder; 385 - WORD cardType; /* R/W, RO, Hybrid */ 386 - WORD blockSize; 387 - WORD PagesPerBlock; 388 - WORD NumberOfPhyBlock; 389 - WORD NumberOfLogBlock; 390 - WORD NumberOfSegment; 391 - WORD *Phy2LogMap; /* phy2log table */ 392 - WORD *Log2PhyMap; /* log2phy table */ 393 - WORD wrtblk; 394 - BYTE pagemap[(MS_MAX_PAGES_PER_BLOCK + (MS_LIB_BITS_PER_BYTE-1)) / 395 - MS_LIB_BITS_PER_BYTE]; 396 - BYTE *blkpag; 397 - MS_LibTypeExtdat *blkext; 398 - BYTE copybuf[512]; 399 - } MS_LibControl; 400 - 401 - #endif
-344
drivers/staging/keucr/msscsi.c
··· 1 - #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 2 - 3 - #include <linux/sched.h> 4 - #include <linux/errno.h> 5 - #include <linux/slab.h> 6 - 7 - #include <scsi/scsi.h> 8 - #include <scsi/scsi_eh.h> 9 - #include <scsi/scsi_device.h> 10 - 11 - #include "usb.h" 12 - #include "scsiglue.h" 13 - #include "transport.h" 14 - 15 - /* 16 - * MS_SCSI_Test_Unit_Ready() 17 - */ 18 - int MS_SCSI_Test_Unit_Ready(struct us_data *us, struct scsi_cmnd *srb) 19 - { 20 - /* pr_info("MS_SCSI_Test_Unit_Ready\n"); */ 21 - if (us->MS_Status.Insert && us->MS_Status.Ready) 22 - return USB_STOR_TRANSPORT_GOOD; 23 - else { 24 - ENE_MSInit(us); 25 - return USB_STOR_TRANSPORT_GOOD; 26 - } 27 - 28 - return USB_STOR_TRANSPORT_GOOD; 29 - } 30 - 31 - /* 32 - * MS_SCSI_Inquiry() 33 - */ 34 - int MS_SCSI_Inquiry(struct us_data *us, struct scsi_cmnd *srb) 35 - { 36 - /* pr_info("MS_SCSI_Inquiry\n"); */ 37 - BYTE data_ptr[36] = {0x00, 0x80, 0x02, 0x00, 0x1F, 0x00, 38 - 0x00, 0x00, 0x55, 0x53, 0x42, 0x32, 39 - 0x2E, 0x30, 0x20, 0x20, 0x43, 0x61, 40 - 0x72, 0x64, 0x52, 0x65, 0x61, 0x64, 41 - 0x65, 0x72, 0x20, 0x20, 0x20, 0x20, 42 - 0x20, 0x20, 0x30, 0x31, 0x30, 0x30}; 43 - 44 - usb_stor_set_xfer_buf(us, data_ptr, 36, srb, TO_XFER_BUF); 45 - return USB_STOR_TRANSPORT_GOOD; 46 - } 47 - 48 - /* 49 - * MS_SCSI_Mode_Sense() 50 - */ 51 - int MS_SCSI_Mode_Sense(struct us_data *us, struct scsi_cmnd *srb) 52 - { 53 - BYTE mediaNoWP[12] = {0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 54 - 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00}; 55 - BYTE mediaWP[12] = {0x0b, 0x00, 0x80, 0x08, 0x00, 0x00, 56 - 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00}; 57 - 58 - if (us->MS_Status.WtP) 59 - usb_stor_set_xfer_buf(us, mediaWP, 12, srb, TO_XFER_BUF); 60 - else 61 - usb_stor_set_xfer_buf(us, mediaNoWP, 12, srb, TO_XFER_BUF); 62 - 63 - 64 - return USB_STOR_TRANSPORT_GOOD; 65 - } 66 - 67 - /* 68 - * MS_SCSI_Read_Capacity() 69 - */ 70 - int MS_SCSI_Read_Capacity(struct us_data *us, struct scsi_cmnd *srb) 71 - { 72 - unsigned int offset = 0; 73 - struct scatterlist *sg = NULL; 74 - DWORD bl_num; 75 - WORD bl_len; 76 - BYTE buf[8]; 77 - 78 - pr_info("MS_SCSI_Read_Capacity\n"); 79 - 80 - bl_len = 0x200; 81 - if (us->MS_Status.IsMSPro) 82 - bl_num = us->MSP_TotalBlock - 1; 83 - else 84 - bl_num = us->MS_Lib.NumberOfLogBlock * 85 - us->MS_Lib.blockSize * 2 - 1; 86 - 87 - us->bl_num = bl_num; 88 - pr_info("bl_len = %x\n", bl_len); 89 - pr_info("bl_num = %x\n", bl_num); 90 - 91 - /* srb->request_bufflen = 8; */ 92 - buf[0] = (bl_num >> 24) & 0xff; 93 - buf[1] = (bl_num >> 16) & 0xff; 94 - buf[2] = (bl_num >> 8) & 0xff; 95 - buf[3] = (bl_num >> 0) & 0xff; 96 - buf[4] = (bl_len >> 24) & 0xff; 97 - buf[5] = (bl_len >> 16) & 0xff; 98 - buf[6] = (bl_len >> 8) & 0xff; 99 - buf[7] = (bl_len >> 0) & 0xff; 100 - 101 - usb_stor_access_xfer_buf(us, buf, 8, srb, &sg, &offset, TO_XFER_BUF); 102 - /* usb_stor_set_xfer_buf(us, buf, srb->request_bufflen, 103 - srb, TO_XFER_BUF); */ 104 - 105 - return USB_STOR_TRANSPORT_GOOD; 106 - } 107 - 108 - /* 109 - * MS_SCSI_Read() 110 - */ 111 - int MS_SCSI_Read(struct us_data *us, struct scsi_cmnd *srb) 112 - { 113 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 114 - int result = 0; 115 - PBYTE Cdb = srb->cmnd; 116 - DWORD bn = ((Cdb[2] << 24) & 0xff000000) | 117 - ((Cdb[3] << 16) & 0x00ff0000) | 118 - ((Cdb[4] << 8) & 0x0000ff00) | 119 - ((Cdb[5] << 0) & 0x000000ff); 120 - WORD blen = ((Cdb[7] << 8) & 0xff00) | ((Cdb[8] << 0) & 0x00ff); 121 - DWORD blenByte = blen * 0x200; 122 - 123 - /* pr_info("SCSIOP_READ --- bn = %X, blen = %X, srb->use_sg = %X\n", 124 - bn, blen, srb->use_sg); */ 125 - 126 - if (bn > us->bl_num) 127 - return USB_STOR_TRANSPORT_ERROR; 128 - 129 - if (us->MS_Status.IsMSPro) { 130 - result = ENE_LoadBinCode(us, MSP_RW_PATTERN); 131 - if (result != USB_STOR_XFER_GOOD) { 132 - pr_info("Load MSP RW pattern Fail !!\n"); 133 - return USB_STOR_TRANSPORT_ERROR; 134 - } 135 - 136 - /* set up the command wrapper */ 137 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 138 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 139 - bcb->DataTransferLength = blenByte; 140 - bcb->Flags = 0x80; 141 - bcb->CDB[0] = 0xF1; 142 - bcb->CDB[1] = 0x02; 143 - bcb->CDB[5] = (BYTE)(bn); 144 - bcb->CDB[4] = (BYTE)(bn>>8); 145 - bcb->CDB[3] = (BYTE)(bn>>16); 146 - bcb->CDB[2] = (BYTE)(bn>>24); 147 - 148 - result = ENE_SendScsiCmd(us, FDIR_READ, scsi_sglist(srb), 1); 149 - } else { 150 - void *buf; 151 - int offset = 0; 152 - WORD phyblk, logblk; 153 - BYTE PageNum; 154 - WORD len; 155 - DWORD blkno; 156 - 157 - buf = kmalloc(blenByte, GFP_KERNEL); 158 - if (buf == NULL) 159 - return USB_STOR_TRANSPORT_ERROR; 160 - 161 - result = ENE_LoadBinCode(us, MS_RW_PATTERN); 162 - if (result != USB_STOR_XFER_GOOD) { 163 - pr_info("Load MS RW pattern Fail !!\n"); 164 - result = USB_STOR_TRANSPORT_ERROR; 165 - goto exit; 166 - } 167 - 168 - logblk = (WORD)(bn / us->MS_Lib.PagesPerBlock); 169 - PageNum = (BYTE)(bn % us->MS_Lib.PagesPerBlock); 170 - 171 - while (1) { 172 - if (blen > (us->MS_Lib.PagesPerBlock-PageNum)) 173 - len = us->MS_Lib.PagesPerBlock-PageNum; 174 - else 175 - len = blen; 176 - 177 - phyblk = MS_LibConv2Physical(us, logblk); 178 - blkno = phyblk * 0x20 + PageNum; 179 - 180 - /* set up the command wrapper */ 181 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 182 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 183 - bcb->DataTransferLength = 0x200 * len; 184 - bcb->Flags = 0x80; 185 - bcb->CDB[0] = 0xF1; 186 - bcb->CDB[1] = 0x02; 187 - bcb->CDB[5] = (BYTE)(blkno); 188 - bcb->CDB[4] = (BYTE)(blkno>>8); 189 - bcb->CDB[3] = (BYTE)(blkno>>16); 190 - bcb->CDB[2] = (BYTE)(blkno>>24); 191 - 192 - result = ENE_SendScsiCmd(us, FDIR_READ, buf+offset, 0); 193 - if (result != USB_STOR_XFER_GOOD) { 194 - pr_info("MS_SCSI_Read --- result = %x\n", 195 - result); 196 - result = USB_STOR_TRANSPORT_ERROR; 197 - goto exit; 198 - } 199 - 200 - blen -= len; 201 - if (blen <= 0) 202 - break; 203 - logblk++; 204 - PageNum = 0; 205 - offset += MS_BYTES_PER_PAGE*len; 206 - } 207 - usb_stor_set_xfer_buf(us, buf, blenByte, srb, TO_XFER_BUF); 208 - exit: 209 - kfree(buf); 210 - } 211 - return result; 212 - } 213 - 214 - /* 215 - * MS_SCSI_Write() 216 - */ 217 - int MS_SCSI_Write(struct us_data *us, struct scsi_cmnd *srb) 218 - { 219 - struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 220 - int result = 0; 221 - PBYTE Cdb = srb->cmnd; 222 - DWORD bn = ((Cdb[2] << 24) & 0xff000000) | 223 - ((Cdb[3] << 16) & 0x00ff0000) | 224 - ((Cdb[4] << 8) & 0x0000ff00) | 225 - ((Cdb[5] << 0) & 0x000000ff); 226 - WORD blen = ((Cdb[7] << 8) & 0xff00) | ((Cdb[8] << 0) & 0x00ff); 227 - DWORD blenByte = blen * 0x200; 228 - 229 - if (bn > us->bl_num) 230 - return USB_STOR_TRANSPORT_ERROR; 231 - 232 - if (us->MS_Status.IsMSPro) { 233 - result = ENE_LoadBinCode(us, MSP_RW_PATTERN); 234 - if (result != USB_STOR_XFER_GOOD) { 235 - pr_info("Load MSP RW pattern Fail !!\n"); 236 - return USB_STOR_TRANSPORT_ERROR; 237 - } 238 - 239 - /* set up the command wrapper */ 240 - memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 241 - bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 242 - bcb->DataTransferLength = blenByte; 243 - bcb->Flags = 0x00; 244 - bcb->CDB[0] = 0xF0; 245 - bcb->CDB[1] = 0x04; 246 - bcb->CDB[5] = (BYTE)(bn); 247 - bcb->CDB[4] = (BYTE)(bn>>8); 248 - bcb->CDB[3] = (BYTE)(bn>>16); 249 - bcb->CDB[2] = (BYTE)(bn>>24); 250 - 251 - result = ENE_SendScsiCmd(us, FDIR_WRITE, scsi_sglist(srb), 1); 252 - } else { 253 - void *buf; 254 - int offset = 0; 255 - WORD PhyBlockAddr; 256 - BYTE PageNum; 257 - DWORD result; 258 - WORD len, oldphy, newphy; 259 - 260 - buf = kmalloc(blenByte, GFP_KERNEL); 261 - if (buf == NULL) 262 - return USB_STOR_TRANSPORT_ERROR; 263 - usb_stor_set_xfer_buf(us, buf, blenByte, srb, FROM_XFER_BUF); 264 - 265 - result = ENE_LoadBinCode(us, MS_RW_PATTERN); 266 - if (result != USB_STOR_XFER_GOOD) { 267 - pr_info("Load MS RW pattern Fail !!\n"); 268 - result = USB_STOR_TRANSPORT_ERROR; 269 - goto exit; 270 - } 271 - 272 - PhyBlockAddr = (WORD)(bn / us->MS_Lib.PagesPerBlock); 273 - PageNum = (BYTE)(bn % us->MS_Lib.PagesPerBlock); 274 - 275 - while (1) { 276 - if (blen > (us->MS_Lib.PagesPerBlock-PageNum)) 277 - len = us->MS_Lib.PagesPerBlock-PageNum; 278 - else 279 - len = blen; 280 - 281 - oldphy = MS_LibConv2Physical(us, PhyBlockAddr); 282 - newphy = MS_LibSearchBlockFromLogical(us, PhyBlockAddr); 283 - 284 - result = MS_ReaderCopyBlock(us, oldphy, newphy, 285 - PhyBlockAddr, PageNum, 286 - buf+offset, len); 287 - if (result != USB_STOR_XFER_GOOD) { 288 - pr_info("MS_SCSI_Write --- result = %x\n", 289 - result); 290 - result = USB_STOR_TRANSPORT_ERROR; 291 - goto exit; 292 - } 293 - 294 - us->MS_Lib.Phy2LogMap[oldphy] = MS_LB_NOT_USED_ERASED; 295 - MS_LibForceSetLogicalPair(us, PhyBlockAddr, newphy); 296 - 297 - blen -= len; 298 - if (blen <= 0) 299 - break; 300 - PhyBlockAddr++; 301 - PageNum = 0; 302 - offset += MS_BYTES_PER_PAGE*len; 303 - } 304 - exit: 305 - kfree(buf); 306 - } 307 - return result; 308 - } 309 - 310 - /* 311 - * MS_SCSIIrp() 312 - */ 313 - int MS_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb) 314 - { 315 - int result; 316 - 317 - us->SrbStatus = SS_SUCCESS; 318 - switch (srb->cmnd[0]) { 319 - case TEST_UNIT_READY: 320 - result = MS_SCSI_Test_Unit_Ready(us, srb); 321 - break; /* 0x00 */ 322 - case INQUIRY: 323 - result = MS_SCSI_Inquiry(us, srb); 324 - break; /* 0x12 */ 325 - case MODE_SENSE: 326 - result = MS_SCSI_Mode_Sense(us, srb); 327 - break; /* 0x1A */ 328 - case READ_CAPACITY: 329 - result = MS_SCSI_Read_Capacity(us, srb); 330 - break; /* 0x25 */ 331 - case READ_10: 332 - result = MS_SCSI_Read(us, srb); 333 - break; /* 0x28 */ 334 - case WRITE_10: 335 - result = MS_SCSI_Write(us, srb); 336 - break; /* 0x2A */ 337 - default: 338 - us->SrbStatus = SS_ILLEGAL_REQUEST; 339 - result = USB_STOR_TRANSPORT_FAILED; 340 - break; 341 - } 342 - return result; 343 - } 344 -
+1 -3
drivers/staging/keucr/transport.c
··· 432 432 usb_stor_print_cmd(srb); 433 433 /* send the command to the transport layer */ 434 434 scsi_set_resid(srb, 0); 435 - if (!(us->MS_Status.Ready || us->SM_Status.Ready)) 435 + if (!(us->SM_Status.Ready)) 436 436 result = ENE_InitMedia(us); 437 437 438 438 if (us->Power_IsResum == true) { ··· 440 440 us->Power_IsResum = false; 441 441 } 442 442 443 - if (us->MS_Status.Ready) 444 - result = MS_SCSIIrp(us, srb); 445 443 if (us->SM_Status.Ready) 446 444 result = SM_SCSIIrp(us, srb); 447 445
-46
drivers/staging/keucr/transport.h
··· 95 95 */ 96 96 extern void ENE_stor_invoke_transport(struct scsi_cmnd *, struct us_data *); 97 97 extern int ENE_InitMedia(struct us_data *); 98 - extern int ENE_MSInit(struct us_data *); 99 98 extern int ENE_SMInit(struct us_data *); 100 99 extern int ENE_SendScsiCmd(struct us_data*, BYTE, void*, int); 101 100 extern int ENE_LoadBinCode(struct us_data*, BYTE); ··· 106 107 /* 107 108 * ENE scsi function 108 109 */ 109 - extern int MS_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb); 110 110 extern int SM_SCSIIrp(struct us_data *us, struct scsi_cmnd *srb); 111 - 112 - /* 113 - * ENE MS function 114 - */ 115 - extern int MS_CardInit(struct us_data *us); 116 - extern void MS_LibFreeAllocatedArea(struct us_data *us); 117 - extern void MS_LibFreeWriteBuf(struct us_data *us); 118 - extern int MS_LibFreeLogicalMap(struct us_data *us); 119 - extern int MS_LibForceSetLogicalPair(struct us_data *us, WORD logblk, 120 - WORD phyblk); 121 - extern int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, 122 - BYTE PageNum, DWORD *PageBuf, 123 - MS_LibTypeExtdat *ExtraDat); 124 - extern int MS_ReaderCopyBlock(struct us_data *us, WORD oldphy, 125 - WORD newphy, WORD PhyBlockAddr, 126 - BYTE PageNum, PBYTE buf, WORD len); 127 - extern int MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr); 128 - extern int MS_LibProcessBootBlock(struct us_data *us, WORD PhyBlock, 129 - BYTE *PageData); 130 - extern int MS_LibAllocLogicalMap(struct us_data *us); 131 - extern int MS_LibSetBootBlockMark(struct us_data *us, WORD phyblk); 132 - extern int MS_LibSetLogicalBlockMark(struct us_data *us, WORD phyblk, 133 - WORD mark); 134 - extern int MS_LibSetInitialErrorBlock(struct us_data *us, WORD phyblk); 135 - extern int MS_LibScanLogicalBlockNumber(struct us_data *us, WORD phyblk); 136 - extern int MS_LibAllocWriteBuf(struct us_data *us); 137 - void MS_LibClearWriteBuf(struct us_data *us); 138 - void MS_LibPhy2LogRange(WORD PhyBlock, WORD *LogStart, 139 - WORD *LogEnde); 140 - extern int MS_LibReadExtra(struct us_data *us, DWORD PhyBlock, 141 - BYTE PageNum, MS_LibTypeExtdat *ExtraDat); 142 - extern int MS_LibReadExtraBlock(struct us_data *us, DWORD PhyBlock, 143 - BYTE PageNum, BYTE blen, void *buf); 144 - extern int MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk); 145 - extern int MS_LibErasePhyBlock(struct us_data *us, WORD phyblk); 146 - extern int MS_LibErrorPhyBlock(struct us_data *us, WORD phyblk); 147 - extern int MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr, 148 - BYTE PageNum, BYTE OverwriteFlag); 149 - extern int MS_LibSetLogicalPair(struct us_data *us, 150 - WORD logblk, WORD phyblk); 151 - extern int MS_LibCheckDisableBlock(struct us_data *us, WORD PhyBlock); 152 - extern int MS_CountFreeBlock(struct us_data *us, WORD PhyBlock); 153 - extern int MS_LibSearchBlockFromLogical(struct us_data *us, WORD logblk); 154 - extern int MS_LibSearchBlockFromPhysical(struct us_data *us, WORD phyblk); 155 111 156 112 #endif
-2
drivers/staging/keucr/usb.c
··· 75 75 us->Power_IsResum = true; 76 76 // 77 77 //us->SD_Status.Ready = 0; //?? 78 - us->MS_Status = *(PMS_STATUS)&tmp; 79 78 us->SM_Status = *(PSM_STATUS)&tmp; 80 79 81 80 return 0; ··· 97 98 us->Power_IsResum = true; 98 99 // 99 100 //us->SD_Status.Ready = 0; //?? 100 - us->MS_Status = *(PMS_STATUS)&tmp; 101 101 us->SM_Status = *(PSM_STATUS)&tmp; 102 102 return 0; 103 103 }
+1 -2
drivers/staging/keucr/usb.h
··· 10 10 #include <linux/mutex.h> 11 11 #include <scsi/scsi_host.h> 12 12 #include "common.h" 13 - #include "ms.h" 14 13 15 14 struct us_data; 16 15 struct scsi_cmnd; ··· 200 201 //----- MS Control Data ---------------- 201 202 BOOLEAN MS_SWWP; 202 203 DWORD MSP_TotalBlock; 203 - MS_LibControl MS_Lib; 204 + /* MS_LibControl MS_Lib; */ 204 205 BOOLEAN MS_IsRWPage; 205 206 WORD MS_Model; 206 207