aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorCho, Yu-Chen <acho@novell.com>2011-05-18 06:40:09 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-05-18 11:22:38 -0400
commit333c5ec0184c96f3d4adec4623966ca0745ebc51 (patch)
treead9f0fcbc75b097b8e165ca0b104e4c38c4de2f5 /drivers/staging
parent02bb4b9e4c31809e4c751d7f3808c448e7ad0244 (diff)
staging/keucr: fix keucr ms coding style
fix keucr ms.c and ms.h coding style Signed-off-by: Cho, Yu-Chen <acho@novell.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/keucr/ms.c693
-rw-r--r--drivers/staging/keucr/ms.h338
2 files changed, 566 insertions, 465 deletions
diff --git a/drivers/staging/keucr/ms.c b/drivers/staging/keucr/ms.c
index 52fe0a6eba2..087ad73ff70 100644
--- a/drivers/staging/keucr/ms.c
+++ b/drivers/staging/keucr/ms.c
@@ -6,13 +6,17 @@
6#include "transport.h" 6#include "transport.h"
7#include "ms.h" 7#include "ms.h"
8 8
9//----- MS_ReaderCopyBlock() ------------------------------------------ 9/*
10int MS_ReaderCopyBlock(struct us_data *us, WORD oldphy, WORD newphy, WORD PhyBlockAddr, BYTE PageNum, PBYTE buf, WORD len) 10 * MS_ReaderCopyBlock()
11 */
12int MS_ReaderCopyBlock(struct us_data *us, WORD oldphy, WORD newphy,
13 WORD PhyBlockAddr, BYTE PageNum, PBYTE buf, WORD len)
11{ 14{
12 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 15 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
13 int result; 16 int result;
14 17
15 //printk("MS_ReaderCopyBlock --- PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); 18 /* printk(KERN_INFO "MS_ReaderCopyBlock --- PhyBlockAddr = %x,
19 PageNum = %x\n", PhyBlockAddr, PageNum); */
16 result = ENE_LoadBinCode(us, MS_RW_PATTERN); 20 result = ENE_LoadBinCode(us, MS_RW_PATTERN);
17 if (result != USB_STOR_XFER_GOOD) 21 if (result != USB_STOR_XFER_GOOD)
18 return USB_STOR_TRANSPORT_ERROR; 22 return USB_STOR_TRANSPORT_ERROR;
@@ -40,21 +44,25 @@ int MS_ReaderCopyBlock(struct us_data *us, WORD oldphy, WORD newphy, WORD PhyBlo
40 return USB_STOR_TRANSPORT_GOOD; 44 return USB_STOR_TRANSPORT_GOOD;
41} 45}
42 46
43//----- MS_ReaderReadPage() ------------------------------------------ 47/*
44int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, PDWORD PageBuf, MS_LibTypeExtdat *ExtraDat) 48 * MS_ReaderReadPage()
49 */
50int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr,
51 BYTE PageNum, PDWORD PageBuf, MS_LibTypeExtdat *ExtraDat)
45{ 52{
46 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 53 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
47 int result; 54 int result;
48 BYTE ExtBuf[4]; 55 BYTE ExtBuf[4];
49 DWORD bn = PhyBlockAddr * 0x20 + PageNum; 56 DWORD bn = PhyBlockAddr * 0x20 + PageNum;
50 57
51 //printk("MS --- MS_ReaderReadPage, PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); 58 /* printk(KERN_INFO "MS --- MS_ReaderReadPage,
59 PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); */
52 60
53 result = ENE_LoadBinCode(us, MS_RW_PATTERN); 61 result = ENE_LoadBinCode(us, MS_RW_PATTERN);
54 if (result != USB_STOR_XFER_GOOD) 62 if (result != USB_STOR_XFER_GOOD)
55 return USB_STOR_TRANSPORT_ERROR; 63 return USB_STOR_TRANSPORT_ERROR;
56 64
57 // Read Page Data 65 /* Read Page Data */
58 memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 66 memset(bcb, 0, sizeof(struct bulk_cb_wrap));
59 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 67 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
60 bcb->DataTransferLength = 0x200; 68 bcb->DataTransferLength = 0x200;
@@ -65,12 +73,12 @@ int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, PDWO
65 bcb->CDB[4] = (BYTE)(bn>>8); 73 bcb->CDB[4] = (BYTE)(bn>>8);
66 bcb->CDB[3] = (BYTE)(bn>>16); 74 bcb->CDB[3] = (BYTE)(bn>>16);
67 bcb->CDB[2] = (BYTE)(bn>>24); 75 bcb->CDB[2] = (BYTE)(bn>>24);
68 76
69 result = ENE_SendScsiCmd(us, FDIR_READ, PageBuf, 0); 77 result = ENE_SendScsiCmd(us, FDIR_READ, PageBuf, 0);
70 if (result != USB_STOR_XFER_GOOD) 78 if (result != USB_STOR_XFER_GOOD)
71 return USB_STOR_TRANSPORT_ERROR; 79 return USB_STOR_TRANSPORT_ERROR;
72 80
73 // Read Extra Data 81 /* Read Extra Data */
74 memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 82 memset(bcb, 0, sizeof(struct bulk_cb_wrap));
75 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 83 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
76 bcb->DataTransferLength = 0x4; 84 bcb->DataTransferLength = 0x4;
@@ -88,9 +96,9 @@ int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, PDWO
88 return USB_STOR_TRANSPORT_ERROR; 96 return USB_STOR_TRANSPORT_ERROR;
89 97
90 ExtraDat->reserved = 0; 98 ExtraDat->reserved = 0;
91 ExtraDat->intr = 0x80; // Not yet, 安砞, 单 fireware support 99 ExtraDat->intr = 0x80; /* Not yet,fireware support */
92 ExtraDat->status0 = 0x10; // Not yet, 安砞, 单 fireware support 100 ExtraDat->status0 = 0x10; /* Not yet,fireware support */
93 ExtraDat->status1 = 0x00; // Not yet, 安砞, 单 fireware support 101 ExtraDat->status1 = 0x00; /* Not yet,fireware support */
94 ExtraDat->ovrflg = ExtBuf[0]; 102 ExtraDat->ovrflg = ExtBuf[0];
95 ExtraDat->mngflg = ExtBuf[1]; 103 ExtraDat->mngflg = ExtBuf[1];
96 ExtraDat->logadr = MemStickLogAddr(ExtBuf[2], ExtBuf[3]); 104 ExtraDat->logadr = MemStickLogAddr(ExtBuf[2], ExtBuf[3]);
@@ -98,14 +106,17 @@ int MS_ReaderReadPage(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, PDWO
98 return USB_STOR_TRANSPORT_GOOD; 106 return USB_STOR_TRANSPORT_GOOD;
99} 107}
100 108
101//----- MS_ReaderEraseBlock() ---------------------------------------- 109/*
110 * MS_ReaderEraseBlock()
111 */
102int MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr) 112int MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr)
103{ 113{
104 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 114 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
105 int result; 115 int result;
106 DWORD bn = PhyBlockAddr; 116 DWORD bn = PhyBlockAddr;
107 117
108 //printk("MS --- MS_ReaderEraseBlock, PhyBlockAddr = %x\n", PhyBlockAddr); 118 /* printk(KERN_INFO "MS --- MS_ReaderEraseBlock,
119 PhyBlockAddr = %x\n", PhyBlockAddr); */
109 result = ENE_LoadBinCode(us, MS_RW_PATTERN); 120 result = ENE_LoadBinCode(us, MS_RW_PATTERN);
110 if (result != USB_STOR_XFER_GOOD) 121 if (result != USB_STOR_XFER_GOOD)
111 return USB_STOR_TRANSPORT_ERROR; 122 return USB_STOR_TRANSPORT_ERROR;
@@ -119,7 +130,7 @@ int MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr)
119 bcb->CDB[4] = (BYTE)(bn); 130 bcb->CDB[4] = (BYTE)(bn);
120 bcb->CDB[3] = (BYTE)(bn>>8); 131 bcb->CDB[3] = (BYTE)(bn>>8);
121 bcb->CDB[2] = (BYTE)(bn>>16); 132 bcb->CDB[2] = (BYTE)(bn>>16);
122 133
123 result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); 134 result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0);
124 if (result != USB_STOR_XFER_GOOD) 135 if (result != USB_STOR_XFER_GOOD)
125 return USB_STOR_TRANSPORT_ERROR; 136 return USB_STOR_TRANSPORT_ERROR;
@@ -127,23 +138,25 @@ int MS_ReaderEraseBlock(struct us_data *us, DWORD PhyBlockAddr)
127 return USB_STOR_TRANSPORT_GOOD; 138 return USB_STOR_TRANSPORT_GOOD;
128} 139}
129 140
130//----- MS_CardInit() ------------------------------------------------ 141/*
142 * MS_CardInit()
143 */
131int MS_CardInit(struct us_data *us) 144int MS_CardInit(struct us_data *us)
132{ 145{
133 DWORD result=0; 146 DWORD result = 0;
134 WORD TmpBlock; 147 WORD TmpBlock;
135 PBYTE PageBuffer0 = NULL, PageBuffer1 = NULL; 148 PBYTE PageBuffer0 = NULL, PageBuffer1 = NULL;
136 MS_LibTypeExtdat extdat; 149 MS_LibTypeExtdat extdat;
137 WORD btBlk1st, btBlk2nd; 150 WORD btBlk1st, btBlk2nd;
138 DWORD btBlk1stErred; 151 DWORD btBlk1stErred;
139 152
140 printk("MS_CardInit start\n"); 153 printk(KERN_INFO "MS_CardInit start\n");
141 154
142 MS_LibFreeAllocatedArea(us); 155 MS_LibFreeAllocatedArea(us);
143 156
144 if (((PageBuffer0 = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL)) == NULL) || 157 PageBuffer0 = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL);
145 ((PageBuffer1 = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL)) == NULL)) 158 PageBuffer1 = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL);
146 { 159 if ((PageBuffer0 == NULL) || (PageBuffer1 == NULL)) {
147 result = MS_NO_MEMORY_ERROR; 160 result = MS_NO_MEMORY_ERROR;
148 goto exit; 161 goto exit;
149 } 162 }
@@ -151,16 +164,16 @@ int MS_CardInit(struct us_data *us)
151 btBlk1st = btBlk2nd = MS_LB_NOT_USED; 164 btBlk1st = btBlk2nd = MS_LB_NOT_USED;
152 btBlk1stErred = 0; 165 btBlk1stErred = 0;
153 166
154 for (TmpBlock=0; TmpBlock < MS_MAX_INITIAL_ERROR_BLOCKS+2; TmpBlock++) 167 for (TmpBlock = 0; TmpBlock < MS_MAX_INITIAL_ERROR_BLOCKS+2;
155 { 168 TmpBlock++) {
156 switch (MS_ReaderReadPage(us, TmpBlock, 0, (DWORD *)PageBuffer0, &extdat)) 169 switch (MS_ReaderReadPage(us, TmpBlock, 0,
157 { 170 (DWORD *)PageBuffer0, &extdat)) {
158 case MS_STATUS_SUCCESS: 171 case MS_STATUS_SUCCESS:
159 break; 172 break;
160 case MS_STATUS_INT_ERROR: 173 case MS_STATUS_INT_ERROR:
161 break; 174 break;
162 case MS_STATUS_ERROR: 175 case MS_STATUS_ERROR:
163 default: 176 default:
164 continue; 177 continue;
165 } 178 }
166 179
@@ -173,38 +186,37 @@ int MS_CardInit(struct us_data *us)
173 (((MemStickBootBlockPage0 *)PageBuffer0)->header.bNumberOfDataEntry != MS_BOOT_BLOCK_DATA_ENTRIES)) 186 (((MemStickBootBlockPage0 *)PageBuffer0)->header.bNumberOfDataEntry != MS_BOOT_BLOCK_DATA_ENTRIES))
174 continue; 187 continue;
175 188
176 if (btBlk1st != MS_LB_NOT_USED) 189 if (btBlk1st != MS_LB_NOT_USED) {
177 {
178 btBlk2nd = TmpBlock; 190 btBlk2nd = TmpBlock;
179 break; 191 break;
180 } 192 }
181 193
182 btBlk1st = TmpBlock; 194 btBlk1st = TmpBlock;
183 memcpy(PageBuffer1, PageBuffer0, MS_BYTES_PER_PAGE); 195 memcpy(PageBuffer1, PageBuffer0, MS_BYTES_PER_PAGE);
184 if (extdat.status1 & (MS_REG_ST1_DTER | MS_REG_ST1_EXER | MS_REG_ST1_FGER)) 196 if (extdat.status1 &
197 (MS_REG_ST1_DTER | MS_REG_ST1_EXER | MS_REG_ST1_FGER))
185 btBlk1stErred = 1; 198 btBlk1stErred = 1;
186 } 199 }
187 200
188 if (btBlk1st == MS_LB_NOT_USED) 201 if (btBlk1st == MS_LB_NOT_USED) {
189 {
190 result = MS_STATUS_ERROR; 202 result = MS_STATUS_ERROR;
191 goto exit; 203 goto exit;
192 } 204 }
193 205
194 // write protect 206 /* write protect */
195 if ((extdat.status0 & MS_REG_ST0_WP) == MS_REG_ST0_WP_ON) 207 if ((extdat.status0 & MS_REG_ST0_WP) == MS_REG_ST0_WP_ON)
196 MS_LibCtrlSet(us, MS_LIB_CTRL_WRPROTECT); 208 MS_LibCtrlSet(us, MS_LIB_CTRL_WRPROTECT);
197 209
198 result = MS_STATUS_ERROR; 210 result = MS_STATUS_ERROR;
199 // 1st Boot Block 211 /* 1st Boot Block */
200 if (btBlk1stErred == 0) 212 if (btBlk1stErred == 0)
201 result = MS_LibProcessBootBlock(us, btBlk1st, PageBuffer1); // 1st 213 result = MS_LibProcessBootBlock(us, btBlk1st, PageBuffer1);
202 // 2nd Boot Block 214 /* 1st */
215 /* 2nd Boot Block */
203 if (result && (btBlk2nd != MS_LB_NOT_USED)) 216 if (result && (btBlk2nd != MS_LB_NOT_USED))
204 result = MS_LibProcessBootBlock(us, btBlk2nd, PageBuffer0); 217 result = MS_LibProcessBootBlock(us, btBlk2nd, PageBuffer0);
205 218
206 if (result) 219 if (result) {
207 {
208 result = MS_STATUS_ERROR; 220 result = MS_STATUS_ERROR;
209 goto exit; 221 goto exit;
210 } 222 }
@@ -214,8 +226,7 @@ int MS_CardInit(struct us_data *us)
214 226
215 us->MS_Lib.Phy2LogMap[btBlk1st] = MS_LB_BOOT_BLOCK; 227 us->MS_Lib.Phy2LogMap[btBlk1st] = MS_LB_BOOT_BLOCK;
216 228
217 if (btBlk2nd != MS_LB_NOT_USED) 229 if (btBlk2nd != MS_LB_NOT_USED) {
218 {
219 for (TmpBlock = btBlk1st + 1; TmpBlock < btBlk2nd; TmpBlock++) 230 for (TmpBlock = btBlk1st + 1; TmpBlock < btBlk2nd; TmpBlock++)
220 us->MS_Lib.Phy2LogMap[TmpBlock] = MS_LB_INITIAL_ERROR; 231 us->MS_Lib.Phy2LogMap[TmpBlock] = MS_LB_INITIAL_ERROR;
221 us->MS_Lib.Phy2LogMap[btBlk2nd] = MS_LB_BOOT_BLOCK; 232 us->MS_Lib.Phy2LogMap[btBlk2nd] = MS_LB_BOOT_BLOCK;
@@ -225,18 +236,17 @@ int MS_CardInit(struct us_data *us)
225 if (result) 236 if (result)
226 goto exit; 237 goto exit;
227 238
228 for (TmpBlock=MS_PHYSICAL_BLOCKS_PER_SEGMENT; TmpBlock<us->MS_Lib.NumberOfPhyBlock; TmpBlock+=MS_PHYSICAL_BLOCKS_PER_SEGMENT) 239 for (TmpBlock = MS_PHYSICAL_BLOCKS_PER_SEGMENT;
229 { 240 TmpBlock < us->MS_Lib.NumberOfPhyBlock;
230 if (MS_CountFreeBlock(us, TmpBlock) == 0) 241 TmpBlock += MS_PHYSICAL_BLOCKS_PER_SEGMENT) {
231 { 242 if (MS_CountFreeBlock(us, TmpBlock) == 0) {
232 MS_LibCtrlSet(us, MS_LIB_CTRL_WRPROTECT); 243 MS_LibCtrlSet(us, MS_LIB_CTRL_WRPROTECT);
233 break; 244 break;
234 } 245 }
235 } 246 }
236 247
237 // write 248 /* write */
238 if (MS_LibAllocWriteBuf(us)) 249 if (MS_LibAllocWriteBuf(us)) {
239 {
240 result = MS_NO_MEMORY_ERROR; 250 result = MS_NO_MEMORY_ERROR;
241 goto exit; 251 goto exit;
242 } 252 }
@@ -245,46 +255,48 @@ int MS_CardInit(struct us_data *us)
245 255
246exit: 256exit:
247 kfree(PageBuffer1); 257 kfree(PageBuffer1);
248 kfree(PageBuffer0); 258 kfree(PageBuffer0);
249 259
250 printk("MS_CardInit end\n"); 260 printk(KERN_INFO "MS_CardInit end\n");
251 return result; 261 return result;
252} 262}
253 263
254//----- MS_LibCheckDisableBlock() ------------------------------------ 264/*
265 * MS_LibCheckDisableBlock()
266 */
255int MS_LibCheckDisableBlock(struct us_data *us, WORD PhyBlock) 267int MS_LibCheckDisableBlock(struct us_data *us, WORD PhyBlock)
256{ 268{
257 PWORD PageBuf=NULL; 269 PWORD PageBuf = NULL;
258 DWORD result=MS_STATUS_SUCCESS; 270 DWORD result = MS_STATUS_SUCCESS;
259 DWORD blk, index=0; 271 DWORD blk, index = 0;
260 MS_LibTypeExtdat extdat; 272 MS_LibTypeExtdat extdat;
261 273
262 if (((PageBuf = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL)) == NULL)) 274 PageBuf = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL);
263 { 275 if (PageBuf == NULL) {
264 result = MS_NO_MEMORY_ERROR; 276 result = MS_NO_MEMORY_ERROR;
265 goto exit; 277 goto exit;
266 } 278 }
267 279
268 MS_ReaderReadPage(us, PhyBlock, 1, (DWORD *)PageBuf, &extdat); 280 MS_ReaderReadPage(us, PhyBlock, 1, (DWORD *)PageBuf, &extdat);
269 do 281 do {
270 {
271 blk = be16_to_cpu(PageBuf[index]); 282 blk = be16_to_cpu(PageBuf[index]);
272 if (blk == MS_LB_NOT_USED) 283 if (blk == MS_LB_NOT_USED)
273 break; 284 break;
274 if (blk == us->MS_Lib.Log2PhyMap[0]) 285 if (blk == us->MS_Lib.Log2PhyMap[0]) {
275 {
276 result = MS_ERROR_FLASH_READ; 286 result = MS_ERROR_FLASH_READ;
277 break; 287 break;
278 } 288 }
279 index++; 289 index++;
280 } while(1); 290 } while (1);
281 291
282exit: 292exit:
283 kfree(PageBuf); 293 kfree(PageBuf);
284 return result; 294 return result;
285} 295}
286 296
287//----- MS_LibFreeAllocatedArea() ------------------------------------ 297/*
298 * MS_LibFreeAllocatedArea()
299 */
288void MS_LibFreeAllocatedArea(struct us_data *us) 300void MS_LibFreeAllocatedArea(struct us_data *us)
289{ 301{
290 MS_LibFreeWriteBuf(us); 302 MS_LibFreeWriteBuf(us);
@@ -302,26 +314,31 @@ void MS_LibFreeAllocatedArea(struct us_data *us)
302 us->MS_Lib.NumberOfLogBlock = 0; 314 us->MS_Lib.NumberOfLogBlock = 0;
303} 315}
304 316
305//----- MS_LibFreeWriteBuf() ----------------------------------------- 317/*
318 * MS_LibFreeWriteBuf()
319 */
306void MS_LibFreeWriteBuf(struct us_data *us) 320void MS_LibFreeWriteBuf(struct us_data *us)
307{ 321{
308 us->MS_Lib.wrtblk = (WORD)-1; //set to -1 322 us->MS_Lib.wrtblk = (WORD)-1; /* set to -1 */
309 MS_LibClearPageMap(us); // memset((fdoExt)->MS_Lib.pagemap, 0, sizeof((fdoExt)->MS_Lib.pagemap))
310 323
311 if (us->MS_Lib.blkpag) 324 /* memset((fdoExt)->MS_Lib.pagemap, 0,
312 { 325 sizeof((fdoExt)->MS_Lib.pagemap)) */
313 kfree((BYTE *)(us->MS_Lib.blkpag)); // Arnold test ... 326 MS_LibClearPageMap(us);
327
328 if (us->MS_Lib.blkpag) {
329 kfree((BYTE *)(us->MS_Lib.blkpag)); /* Arnold test ... */
314 us->MS_Lib.blkpag = NULL; 330 us->MS_Lib.blkpag = NULL;
315 } 331 }
316 332
317 if (us->MS_Lib.blkext) 333 if (us->MS_Lib.blkext) {
318 { 334 kfree((BYTE *)(us->MS_Lib.blkext)); /* Arnold test ... */
319 kfree((BYTE *)(us->MS_Lib.blkext)); // Arnold test ...
320 us->MS_Lib.blkext = NULL; 335 us->MS_Lib.blkext = NULL;
321 } 336 }
322} 337}
323 338
324//----- MS_LibFreeLogicalMap() --------------------------------------- 339/*
340 * MS_LibFreeLogicalMap()
341 */
325int MS_LibFreeLogicalMap(struct us_data *us) 342int MS_LibFreeLogicalMap(struct us_data *us)
326{ 343{
327 kfree(us->MS_Lib.Phy2LogMap); 344 kfree(us->MS_Lib.Phy2LogMap);
@@ -330,10 +347,12 @@ int MS_LibFreeLogicalMap(struct us_data *us)
330 kfree(us->MS_Lib.Log2PhyMap); 347 kfree(us->MS_Lib.Log2PhyMap);
331 us->MS_Lib.Log2PhyMap = NULL; 348 us->MS_Lib.Log2PhyMap = NULL;
332 349
333 return 0; 350 return 0;
334} 351}
335 352
336//----- MS_LibProcessBootBlock() ------------------------------------- 353/*
354 * MS_LibProcessBootBlock()
355 */
337int MS_LibProcessBootBlock(struct us_data *us, WORD PhyBlock, BYTE *PageData) 356int MS_LibProcessBootBlock(struct us_data *us, WORD PhyBlock, BYTE *PageData)
338{ 357{
339 MemStickBootBlockSysEnt *SysEntry; 358 MemStickBootBlockSysEnt *SysEntry;
@@ -343,144 +362,165 @@ int MS_LibProcessBootBlock(struct us_data *us, WORD PhyBlock, BYTE *PageData)
343 BYTE *PageBuffer; 362 BYTE *PageBuffer;
344 MS_LibTypeExtdat ExtraData; 363 MS_LibTypeExtdat ExtraData;
345 364
346 if ((PageBuffer = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL))==NULL) 365
366 PageBuffer = kmalloc(MS_BYTES_PER_PAGE, GFP_KERNEL);
367 if (PageBuffer == NULL)
347 return (DWORD)-1; 368 return (DWORD)-1;
348 369
349 result = (DWORD)-1; 370 result = (DWORD)-1;
350 371
351 SysInfo= &(((MemStickBootBlockPage0 *)PageData)->sysinf); 372 SysInfo = &(((MemStickBootBlockPage0 *)PageData)->sysinf);
352 373
353 if ((SysInfo->bMsClass != MS_SYSINF_MSCLASS_TYPE_1) || 374 if ((SysInfo->bMsClass != MS_SYSINF_MSCLASS_TYPE_1) ||
354 (be16_to_cpu(SysInfo->wPageSize) != MS_SYSINF_PAGE_SIZE) || 375 (be16_to_cpu(SysInfo->wPageSize) != MS_SYSINF_PAGE_SIZE) ||
355 ((SysInfo->bSecuritySupport & MS_SYSINF_SECURITY) == MS_SYSINF_SECURITY_SUPPORT) || 376 ((SysInfo->bSecuritySupport & MS_SYSINF_SECURITY) == MS_SYSINF_SECURITY_SUPPORT) ||
356 (SysInfo->bReserved1 != MS_SYSINF_RESERVED1) || 377 (SysInfo->bReserved1 != MS_SYSINF_RESERVED1) ||
357 (SysInfo->bReserved2 != MS_SYSINF_RESERVED2) || 378 (SysInfo->bReserved2 != MS_SYSINF_RESERVED2) ||
358 (SysInfo->bFormatType!= MS_SYSINF_FORMAT_FAT) || 379 (SysInfo->bFormatType != MS_SYSINF_FORMAT_FAT) ||
359 (SysInfo->bUsage != MS_SYSINF_USAGE_GENERAL)) 380 (SysInfo->bUsage != MS_SYSINF_USAGE_GENERAL))
360 goto exit; 381 goto exit;
361 382
362 switch (us->MS_Lib.cardType = SysInfo->bCardType) 383 switch (us->MS_Lib.cardType = SysInfo->bCardType) {
363 { 384 case MS_SYSINF_CARDTYPE_RDONLY:
364 case MS_SYSINF_CARDTYPE_RDONLY: 385 MS_LibCtrlSet(us, MS_LIB_CTRL_RDONLY);
365 MS_LibCtrlSet(us, MS_LIB_CTRL_RDONLY); 386 break;
366 break; 387 case MS_SYSINF_CARDTYPE_RDWR:
367 case MS_SYSINF_CARDTYPE_RDWR: 388 MS_LibCtrlReset(us, MS_LIB_CTRL_RDONLY);
368 MS_LibCtrlReset(us, MS_LIB_CTRL_RDONLY); 389 break;
369 break; 390 case MS_SYSINF_CARDTYPE_HYBRID:
370 case MS_SYSINF_CARDTYPE_HYBRID: 391 default:
371 default: 392 goto exit;
372 goto exit;
373 } 393 }
374 394
375 us->MS_Lib.blockSize = be16_to_cpu(SysInfo->wBlockSize); 395 us->MS_Lib.blockSize = be16_to_cpu(SysInfo->wBlockSize);
376 us->MS_Lib.NumberOfPhyBlock = be16_to_cpu(SysInfo->wBlockNumber); 396 us->MS_Lib.NumberOfPhyBlock = be16_to_cpu(SysInfo->wBlockNumber);
377 us->MS_Lib.NumberOfLogBlock = be16_to_cpu(SysInfo->wTotalBlockNumber) - 2; 397 us->MS_Lib.NumberOfLogBlock = be16_to_cpu(SysInfo->wTotalBlockNumber)
378 us->MS_Lib.PagesPerBlock = us->MS_Lib.blockSize * SIZE_OF_KIRO / MS_BYTES_PER_PAGE; 398 -2;
379 us->MS_Lib.NumberOfSegment = us->MS_Lib.NumberOfPhyBlock / MS_PHYSICAL_BLOCKS_PER_SEGMENT; 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;
380 us->MS_Model = be16_to_cpu(SysInfo->wMemorySize); 403 us->MS_Model = be16_to_cpu(SysInfo->wMemorySize);
381 404
382 if (MS_LibAllocLogicalMap(us)) //Allocate to all number of logicalblock and physicalblock 405 /*Allocate to all number of logicalblock and physicalblock */
406 if (MS_LibAllocLogicalMap(us))
383 goto exit; 407 goto exit;
384 408
385 MS_LibSetBootBlockMark(us, PhyBlock); //Mark the book block 409 /* Mark the book block */
410 MS_LibSetBootBlockMark(us, PhyBlock);
386 411
387 SysEntry = &(((MemStickBootBlockPage0 *)PageData)->sysent); 412 SysEntry = &(((MemStickBootBlockPage0 *)PageData)->sysent);
388 413
389 for (i=0; i<MS_NUMBER_OF_SYSTEM_ENTRY; i++) 414 for (i = 0; i < MS_NUMBER_OF_SYSTEM_ENTRY; i++) {
390 {
391 DWORD EntryOffset, EntrySize; 415 DWORD EntryOffset, EntrySize;
392 416
393 if ((EntryOffset = be32_to_cpu(SysEntry->entry[i].dwStart)) == 0xffffff) 417 EntryOffset = be32_to_cpu(SysEntry->entry[i].dwStart);
418
419 if (EntryOffset == 0xffffff)
394 continue; 420 continue;
421 EntrySize = be32_to_cpu(SysEntry->entry[i].dwSize);
395 422
396 if ((EntrySize = be32_to_cpu(SysEntry->entry[i].dwSize)) == 0) 423 if (EntrySize == 0)
397 continue; 424 continue;
398 425
399 if (EntryOffset + MS_BYTES_PER_PAGE + EntrySize > us->MS_Lib.blockSize * (DWORD)SIZE_OF_KIRO) 426 if (EntryOffset + MS_BYTES_PER_PAGE + EntrySize >
427 us->MS_Lib.blockSize * (DWORD)SIZE_OF_KIRO)
400 continue; 428 continue;
401 429
402 if (i == 0) 430 if (i == 0) {
403 {
404 BYTE PrevPageNumber = 0; 431 BYTE PrevPageNumber = 0;
405 WORD phyblk; 432 WORD phyblk;
406 433
407 if (SysEntry->entry[i].bType != MS_SYSENT_TYPE_INVALID_BLOCK) 434 if (SysEntry->entry[i].bType !=
435 MS_SYSENT_TYPE_INVALID_BLOCK)
408 goto exit; 436 goto exit;
409 437
410 while (EntrySize > 0) 438 while (EntrySize > 0) {
411 { 439
412 if ((PageNumber = (BYTE)(EntryOffset / MS_BYTES_PER_PAGE + 1)) != PrevPageNumber) 440 PageNumber = (BYTE)(EntryOffset /
413 { 441 MS_BYTES_PER_PAGE + 1);
414 switch (MS_ReaderReadPage(us, PhyBlock, PageNumber, (DWORD *)PageBuffer, &ExtraData)) 442 if (PageNumber != PrevPageNumber) {
415 { 443 switch (MS_ReaderReadPage(us, PhyBlock,
416 case MS_STATUS_SUCCESS: 444 PageNumber, (DWORD *)PageBuffer,
417 break; 445 &ExtraData)) {
418 case MS_STATUS_WRITE_PROTECT: 446 case MS_STATUS_SUCCESS:
419 case MS_ERROR_FLASH_READ: 447 break;
420 case MS_STATUS_ERROR: 448 case MS_STATUS_WRITE_PROTECT:
421 default: 449 case MS_ERROR_FLASH_READ:
422 goto exit; 450 case MS_STATUS_ERROR:
451 default:
452 goto exit;
423 } 453 }
424 454
425 PrevPageNumber = PageNumber; 455 PrevPageNumber = PageNumber;
426 } 456 }
427 457
428 if ((phyblk = be16_to_cpu(*(WORD *)(PageBuffer + (EntryOffset % MS_BYTES_PER_PAGE)))) < 0x0fff) 458 phyblk = be16_to_cpu(*(WORD *)(PageBuffer +
459 (EntryOffset % MS_BYTES_PER_PAGE)));
460 if (phyblk < 0x0fff)
429 MS_LibSetInitialErrorBlock(us, phyblk); 461 MS_LibSetInitialErrorBlock(us, phyblk);
430 462
431 EntryOffset += 2; 463 EntryOffset += 2;
432 EntrySize -= 2; 464 EntrySize -= 2;
433 } 465 }
434 } 466 } else if (i == 1) { /* CIS/IDI */
435 else if (i == 1)
436 { // CIS/IDI
437 MemStickBootBlockIDI *idi; 467 MemStickBootBlockIDI *idi;
438 468
439 if (SysEntry->entry[i].bType != MS_SYSENT_TYPE_CIS_IDI) 469 if (SysEntry->entry[i].bType != MS_SYSENT_TYPE_CIS_IDI)
440 goto exit; 470 goto exit;
441 471
442 switch (MS_ReaderReadPage(us, PhyBlock, (BYTE)(EntryOffset / MS_BYTES_PER_PAGE + 1), (DWORD *)PageBuffer, &ExtraData)) 472 switch (MS_ReaderReadPage(us, PhyBlock,
443 { 473 (BYTE)(EntryOffset / MS_BYTES_PER_PAGE + 1),
444 case MS_STATUS_SUCCESS: 474 (DWORD *)PageBuffer, &ExtraData)) {
445 break; 475 case MS_STATUS_SUCCESS:
446 case MS_STATUS_WRITE_PROTECT: 476 break;
447 case MS_ERROR_FLASH_READ: 477 case MS_STATUS_WRITE_PROTECT:
448 case MS_STATUS_ERROR: 478 case MS_ERROR_FLASH_READ:
449 default: 479 case MS_STATUS_ERROR:
450 goto exit; 480 default:
481 goto exit;
451 } 482 }
452 483
453 idi = &((MemStickBootBlockCIS_IDI *)(PageBuffer + (EntryOffset % MS_BYTES_PER_PAGE)))->idi.idi; 484 idi = &((MemStickBootBlockCIS_IDI *)(PageBuffer +
454 if (le16_to_cpu(idi->wIDIgeneralConfiguration) != MS_IDI_GENERAL_CONF) 485 (EntryOffset % MS_BYTES_PER_PAGE)))->idi.idi;
486 if (le16_to_cpu(idi->wIDIgeneralConfiguration) !=
487 MS_IDI_GENERAL_CONF)
455 goto exit; 488 goto exit;
456 489
457 us->MS_Lib.BytesPerSector = le16_to_cpu(idi->wIDIbytesPerSector); 490 us->MS_Lib.BytesPerSector =
491 le16_to_cpu(idi->wIDIbytesPerSector);
458 if (us->MS_Lib.BytesPerSector != MS_BYTES_PER_PAGE) 492 if (us->MS_Lib.BytesPerSector != MS_BYTES_PER_PAGE)
459 goto exit; 493 goto exit;
460 } 494 }
461 } // End for .. 495 } /* End for .. */
462 496
463 result = 0; 497 result = 0;
464 498
465exit: 499exit:
466 if (result) MS_LibFreeLogicalMap(us); 500 if (result)
501 MS_LibFreeLogicalMap(us);
502
467 kfree(PageBuffer); 503 kfree(PageBuffer);
468 504
469 result = 0; 505 result = 0;
470 return result; 506 return result;
471} 507}
472 508
473//----- MS_LibAllocLogicalMap() -------------------------------------- 509/*
510 * MS_LibAllocLogicalMap()
511 */
474int MS_LibAllocLogicalMap(struct us_data *us) 512int MS_LibAllocLogicalMap(struct us_data *us)
475{ 513{
476 DWORD i; 514 DWORD i;
477 515
478 516
479 us->MS_Lib.Phy2LogMap = kmalloc(us->MS_Lib.NumberOfPhyBlock * sizeof(WORD), GFP_KERNEL); 517 us->MS_Lib.Phy2LogMap = kmalloc(us->MS_Lib.NumberOfPhyBlock *
480 us->MS_Lib.Log2PhyMap = kmalloc(us->MS_Lib.NumberOfLogBlock * sizeof(WORD), GFP_KERNEL); 518 sizeof(WORD), GFP_KERNEL);
519 us->MS_Lib.Log2PhyMap = kmalloc(us->MS_Lib.NumberOfLogBlock *
520 sizeof(WORD), GFP_KERNEL);
481 521
482 if ((us->MS_Lib.Phy2LogMap == NULL) || (us->MS_Lib.Log2PhyMap == NULL)) 522 if ((us->MS_Lib.Phy2LogMap == NULL) ||
483 { 523 (us->MS_Lib.Log2PhyMap == NULL)) {
484 MS_LibFreeLogicalMap(us); 524 MS_LibFreeLogicalMap(us);
485 return (DWORD)-1; 525 return (DWORD)-1;
486 } 526 }
@@ -489,128 +529,142 @@ int MS_LibAllocLogicalMap(struct us_data *us)
489 us->MS_Lib.Phy2LogMap[i] = MS_LB_NOT_USED; 529 us->MS_Lib.Phy2LogMap[i] = MS_LB_NOT_USED;
490 530
491 for (i = 0; i < us->MS_Lib.NumberOfLogBlock; i++) 531 for (i = 0; i < us->MS_Lib.NumberOfLogBlock; i++)
492 us->MS_Lib.Log2PhyMap[i] = MS_LB_NOT_USED; 532 us->MS_Lib.Log2PhyMap[i] = MS_LB_NOT_USED;
493 533
494 return 0; 534 return 0;
495} 535}
496 536
497//----- MS_LibSetBootBlockMark() ------------------------------------- 537/*
538 * MS_LibSetBootBlockMark()
539 */
498int MS_LibSetBootBlockMark(struct us_data *us, WORD phyblk) 540int MS_LibSetBootBlockMark(struct us_data *us, WORD phyblk)
499{ 541{
500 return MS_LibSetLogicalBlockMark(us, phyblk, MS_LB_BOOT_BLOCK); 542 return MS_LibSetLogicalBlockMark(us, phyblk, MS_LB_BOOT_BLOCK);
501} 543}
502 544
503//----- MS_LibSetLogicalBlockMark() ---------------------------------- 545/*
546 * MS_LibSetLogicalBlockMark()
547 */
504int MS_LibSetLogicalBlockMark(struct us_data *us, WORD phyblk, WORD mark) 548int MS_LibSetLogicalBlockMark(struct us_data *us, WORD phyblk, WORD mark)
505{ 549{
506 if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 550 if (phyblk >= us->MS_Lib.NumberOfPhyBlock)
507 return (DWORD)-1; 551 return (DWORD)-1;
508 552
509 us->MS_Lib.Phy2LogMap[phyblk] = mark; 553 us->MS_Lib.Phy2LogMap[phyblk] = mark;
510 554
511 return 0; 555 return 0;
512} 556}
513 557
514//----- MS_LibSetInitialErrorBlock() --------------------------------- 558/*
559 * MS_LibSetInitialErrorBlock()
560 */
515int MS_LibSetInitialErrorBlock(struct us_data *us, WORD phyblk) 561int MS_LibSetInitialErrorBlock(struct us_data *us, WORD phyblk)
516{ 562{
517 return MS_LibSetLogicalBlockMark(us, phyblk, MS_LB_INITIAL_ERROR); 563 return MS_LibSetLogicalBlockMark(us, phyblk, MS_LB_INITIAL_ERROR);
518} 564}
519 565
520//----- MS_LibScanLogicalBlockNumber() ------------------------------- 566/*
567 * MS_LibScanLogicalBlockNumber()
568 */
521int MS_LibScanLogicalBlockNumber(struct us_data *us, WORD btBlk1st) 569int MS_LibScanLogicalBlockNumber(struct us_data *us, WORD btBlk1st)
522{ 570{
523 WORD PhyBlock, newblk, i; 571 WORD PhyBlock, newblk, i;
524 WORD LogStart, LogEnde; 572 WORD LogStart, LogEnde;
525 MS_LibTypeExtdat extdat; 573 MS_LibTypeExtdat extdat;
526 BYTE buf[0x200]; 574 BYTE buf[0x200];
527 DWORD count=0, index=0; 575 DWORD count = 0, index = 0;
528 576
529 for (PhyBlock = 0; PhyBlock < us->MS_Lib.NumberOfPhyBlock;) 577 for (PhyBlock = 0; PhyBlock < us->MS_Lib.NumberOfPhyBlock;) {
530 {
531 MS_LibPhy2LogRange(PhyBlock, &LogStart, &LogEnde); 578 MS_LibPhy2LogRange(PhyBlock, &LogStart, &LogEnde);
532 579
533 for (i=0; i<MS_PHYSICAL_BLOCKS_PER_SEGMENT; i++, PhyBlock++) 580 for (i = 0; i < MS_PHYSICAL_BLOCKS_PER_SEGMENT;
534 { 581 i++, PhyBlock++) {
535 switch (MS_LibConv2Logical(us, PhyBlock)) 582 switch (MS_LibConv2Logical(us, PhyBlock)) {
536 { 583 case MS_STATUS_ERROR:
537 case MS_STATUS_ERROR: 584 continue;
538 continue; 585 default:
539 default: 586 break;
540 break;
541 } 587 }
542 588
543 if (count == PhyBlock) 589 if (count == PhyBlock) {
544 { 590 MS_LibReadExtraBlock(us, PhyBlock,
545 MS_LibReadExtraBlock(us, PhyBlock, 0, 0x80, &buf); 591 0, 0x80, &buf);
546 count += 0x80; 592 count += 0x80;
547 } 593 }
548 index = (PhyBlock % 0x80) * 4; 594 index = (PhyBlock % 0x80) * 4;
549 595
550 extdat.ovrflg = buf[index]; 596 extdat.ovrflg = buf[index];
551 extdat.mngflg = buf[index+1]; 597 extdat.mngflg = buf[index+1];
552 extdat.logadr = MemStickLogAddr(buf[index+2], buf[index+3]); 598 extdat.logadr = MemStickLogAddr(buf[index+2],
599 buf[index+3]);
553 600
554 if ((extdat.ovrflg & MS_REG_OVR_BKST) != MS_REG_OVR_BKST_OK) 601 if ((extdat.ovrflg & MS_REG_OVR_BKST) !=
555 { 602 MS_REG_OVR_BKST_OK) {
556 MS_LibSetAcquiredErrorBlock(us, PhyBlock); 603 MS_LibSetAcquiredErrorBlock(us, PhyBlock);
557 continue; 604 continue;
558 } 605 }
559 606
560 if ((extdat.mngflg & MS_REG_MNG_ATFLG) == MS_REG_MNG_ATFLG_ATTBL) 607 if ((extdat.mngflg & MS_REG_MNG_ATFLG) ==
561 { 608 MS_REG_MNG_ATFLG_ATTBL) {
562 MS_LibErasePhyBlock(us, PhyBlock); 609 MS_LibErasePhyBlock(us, PhyBlock);
563 continue; 610 continue;
564 } 611 }
565 612
566 if (extdat.logadr != MS_LB_NOT_USED) 613 if (extdat.logadr != MS_LB_NOT_USED) {
567 { 614 if ((extdat.logadr < LogStart) ||
568 if ((extdat.logadr < LogStart) || (LogEnde <= extdat.logadr)) 615 (LogEnde <= extdat.logadr)) {
569 {
570 MS_LibErasePhyBlock(us, PhyBlock); 616 MS_LibErasePhyBlock(us, PhyBlock);
571 continue; 617 continue;
572 } 618 }
573 619
574 if ((newblk = MS_LibConv2Physical(us, extdat.logadr)) != MS_LB_NOT_USED) 620 newblk = MS_LibConv2Physical(us, extdat.logadr);
575 { 621
576 if (extdat.logadr==0) 622 if (newblk != MS_LB_NOT_USED) {
577 { 623 if (extdat.logadr == 0) {
578 MS_LibSetLogicalPair(us, extdat.logadr, PhyBlock); 624 MS_LibSetLogicalPair(us,
579 if ( MS_LibCheckDisableBlock(us, btBlk1st) ) 625 extdat.logadr,
580 { 626 PhyBlock);
581 MS_LibSetLogicalPair(us, extdat.logadr, newblk); 627 if (MS_LibCheckDisableBlock(us,
628 btBlk1st)) {
629 MS_LibSetLogicalPair(us,
630 extdat.logadr, newblk);
582 continue; 631 continue;
583 } 632 }
584 } 633 }
585 634
586 MS_LibReadExtra(us, newblk, 0, &extdat); 635 MS_LibReadExtra(us, newblk, 0, &extdat);
587 if ((extdat.ovrflg & MS_REG_OVR_UDST) == MS_REG_OVR_UDST_UPDATING) 636 if ((extdat.ovrflg & MS_REG_OVR_UDST) ==
588 { 637 MS_REG_OVR_UDST_UPDATING) {
589 MS_LibErasePhyBlock(us, PhyBlock); 638 MS_LibErasePhyBlock(us,
639 PhyBlock);
590 continue; 640 continue;
591 } 641 } else {
592 else
593 MS_LibErasePhyBlock(us, newblk); 642 MS_LibErasePhyBlock(us, newblk);
643 }
594 } 644 }
595 645
596 MS_LibSetLogicalPair(us, extdat.logadr, PhyBlock); 646 MS_LibSetLogicalPair(us, extdat.logadr,
647 PhyBlock);
597 } 648 }
598 } 649 }
599 } //End for ... 650 } /* End for ... */
600 651
601 return MS_STATUS_SUCCESS; 652 return MS_STATUS_SUCCESS;
602} 653}
603 654
604//----- MS_LibAllocWriteBuf() ---------------------------------------- 655/*
656 * MS_LibAllocWriteBuf()
657 */
605int MS_LibAllocWriteBuf(struct us_data *us) 658int MS_LibAllocWriteBuf(struct us_data *us)
606{ 659{
607 us->MS_Lib.wrtblk = (WORD)-1; 660 us->MS_Lib.wrtblk = (WORD)-1;
608 661
609 us->MS_Lib.blkpag = kmalloc(us->MS_Lib.PagesPerBlock * us->MS_Lib.BytesPerSector, GFP_KERNEL); 662 us->MS_Lib.blkpag = kmalloc(us->MS_Lib.PagesPerBlock *
610 us->MS_Lib.blkext = kmalloc(us->MS_Lib.PagesPerBlock * sizeof(MS_LibTypeExtdat), GFP_KERNEL); 663 us->MS_Lib.BytesPerSector, GFP_KERNEL);
664 us->MS_Lib.blkext = kmalloc(us->MS_Lib.PagesPerBlock *
665 sizeof(MS_LibTypeExtdat), GFP_KERNEL);
611 666
612 if ((us->MS_Lib.blkpag == NULL) || (us->MS_Lib.blkext == NULL)) 667 if ((us->MS_Lib.blkpag == NULL) || (us->MS_Lib.blkext == NULL)) {
613 {
614 MS_LibFreeWriteBuf(us); 668 MS_LibFreeWriteBuf(us);
615 return (DWORD)-1; 669 return (DWORD)-1;
616 } 670 }
@@ -620,7 +674,9 @@ int MS_LibAllocWriteBuf(struct us_data *us)
620 return 0; 674 return 0;
621} 675}
622 676
623//----- MS_LibClearWriteBuf() ---------------------------------------- 677/*
678 * MS_LibClearWriteBuf()
679 */
624void MS_LibClearWriteBuf(struct us_data *us) 680void MS_LibClearWriteBuf(struct us_data *us)
625{ 681{
626 int i; 682 int i;
@@ -629,12 +685,11 @@ void MS_LibClearWriteBuf(struct us_data *us)
629 MS_LibClearPageMap(us); 685 MS_LibClearPageMap(us);
630 686
631 if (us->MS_Lib.blkpag) 687 if (us->MS_Lib.blkpag)
632 memset(us->MS_Lib.blkpag, 0xff, us->MS_Lib.PagesPerBlock * us->MS_Lib.BytesPerSector); 688 memset(us->MS_Lib.blkpag, 0xff,
689 us->MS_Lib.PagesPerBlock * us->MS_Lib.BytesPerSector);
633 690
634 if (us->MS_Lib.blkext) 691 if (us->MS_Lib.blkext) {
635 { 692 for (i = 0; i < us->MS_Lib.PagesPerBlock; i++) {
636 for (i = 0; i < us->MS_Lib.PagesPerBlock; i++)
637 {
638 us->MS_Lib.blkext[i].status1 = MS_REG_ST1_DEFAULT; 693 us->MS_Lib.blkext[i].status1 = MS_REG_ST1_DEFAULT;
639 us->MS_Lib.blkext[i].ovrflg = MS_REG_OVR_DEFAULT; 694 us->MS_Lib.blkext[i].ovrflg = MS_REG_OVR_DEFAULT;
640 us->MS_Lib.blkext[i].mngflg = MS_REG_MNG_DEFAULT; 695 us->MS_Lib.blkext[i].mngflg = MS_REG_MNG_DEFAULT;
@@ -643,32 +698,36 @@ void MS_LibClearWriteBuf(struct us_data *us)
643 } 698 }
644} 699}
645 700
646//----- MS_LibPhy2LogRange() ----------------------------------------- 701/*
702 * MS_LibPhy2LogRange()
703 */
647void MS_LibPhy2LogRange(WORD PhyBlock, WORD *LogStart, WORD *LogEnde) 704void MS_LibPhy2LogRange(WORD PhyBlock, WORD *LogStart, WORD *LogEnde)
648{ 705{
649 PhyBlock /= MS_PHYSICAL_BLOCKS_PER_SEGMENT; 706 PhyBlock /= MS_PHYSICAL_BLOCKS_PER_SEGMENT;
650 707
651 if (PhyBlock) 708 if (PhyBlock) {
652 { 709 *LogStart = MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT +
653 *LogStart = MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT + (PhyBlock - 1) * MS_LOGICAL_BLOCKS_PER_SEGMENT;//496 710 (PhyBlock - 1) * MS_LOGICAL_BLOCKS_PER_SEGMENT;/*496*/
654 *LogEnde = *LogStart + MS_LOGICAL_BLOCKS_PER_SEGMENT;//496 711 *LogEnde = *LogStart + MS_LOGICAL_BLOCKS_PER_SEGMENT;/*496*/
655 } 712 } else {
656 else
657 {
658 *LogStart = 0; 713 *LogStart = 0;
659 *LogEnde = MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT;//494 714 *LogEnde = MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT;/*494*/
660 } 715 }
661} 716}
662 717
663//----- MS_LibReadExtraBlock() -------------------------------------------- 718/*
664int MS_LibReadExtraBlock(struct us_data *us, DWORD PhyBlock, BYTE PageNum, BYTE blen, void *buf) 719 * MS_LibReadExtraBlock()
720 */
721int MS_LibReadExtraBlock(struct us_data *us, DWORD PhyBlock,
722 BYTE PageNum, BYTE blen, void *buf)
665{ 723{
666 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 724 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
667 int result; 725 int result;
668 726
669 //printk("MS_LibReadExtraBlock --- PhyBlock = %x, PageNum = %x, blen = %x\n", PhyBlock, PageNum, blen); 727 /* printk("MS_LibReadExtraBlock --- PhyBlock = %x,
728 PageNum = %x, blen = %x\n", PhyBlock, PageNum, blen); */
670 729
671 // Read Extra Data 730 /* Read Extra Data */
672 memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 731 memset(bcb, 0, sizeof(struct bulk_cb_wrap));
673 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 732 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
674 bcb->DataTransferLength = 0x4 * blen; 733 bcb->DataTransferLength = 0x4 * blen;
@@ -688,14 +747,18 @@ int MS_LibReadExtraBlock(struct us_data *us, DWORD PhyBlock, BYTE PageNum, BYTE
688 return USB_STOR_TRANSPORT_GOOD; 747 return USB_STOR_TRANSPORT_GOOD;
689} 748}
690 749
691//----- MS_LibReadExtra() -------------------------------------------- 750/*
692int MS_LibReadExtra(struct us_data *us, DWORD PhyBlock, BYTE PageNum, MS_LibTypeExtdat *ExtraDat) 751 * MS_LibReadExtra()
752 */
753int MS_LibReadExtra(struct us_data *us, DWORD PhyBlock,
754 BYTE PageNum, MS_LibTypeExtdat *ExtraDat)
693{ 755{
694 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 756 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
695 int result; 757 int result;
696 BYTE ExtBuf[4]; 758 BYTE ExtBuf[4];
697 759
698 //printk("MS_LibReadExtra --- PhyBlock = %x, PageNum = %x\n", PhyBlock, PageNum); 760 /* printk("MS_LibReadExtra --- PhyBlock = %x, PageNum = %x\n"
761 , PhyBlock, PageNum); */
699 memset(bcb, 0, sizeof(struct bulk_cb_wrap)); 762 memset(bcb, 0, sizeof(struct bulk_cb_wrap));
700 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); 763 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
701 bcb->DataTransferLength = 0x4; 764 bcb->DataTransferLength = 0x4;
@@ -707,23 +770,25 @@ int MS_LibReadExtra(struct us_data *us, DWORD PhyBlock, BYTE PageNum, MS_LibType
707 bcb->CDB[3] = (BYTE)(PhyBlock>>8); 770 bcb->CDB[3] = (BYTE)(PhyBlock>>8);
708 bcb->CDB[2] = (BYTE)(PhyBlock>>16); 771 bcb->CDB[2] = (BYTE)(PhyBlock>>16);
709 bcb->CDB[6] = 0x01; 772 bcb->CDB[6] = 0x01;
710 773
711 result = ENE_SendScsiCmd(us, FDIR_READ, &ExtBuf, 0); 774 result = ENE_SendScsiCmd(us, FDIR_READ, &ExtBuf, 0);
712 if (result != USB_STOR_XFER_GOOD) 775 if (result != USB_STOR_XFER_GOOD)
713 return USB_STOR_TRANSPORT_ERROR; 776 return USB_STOR_TRANSPORT_ERROR;
714 777
715 ExtraDat->reserved = 0; 778 ExtraDat->reserved = 0;
716 ExtraDat->intr = 0x80; // Not yet, waiting for fireware support 779 ExtraDat->intr = 0x80; /* Not yet, waiting for fireware support */
717 ExtraDat->status0 = 0x10; // Not yet, waiting for fireware support 780 ExtraDat->status0 = 0x10; /* Not yet, waiting for fireware support */
718 ExtraDat->status1 = 0x00; // Not yet, waiting for fireware support 781 ExtraDat->status1 = 0x00; /* Not yet, waiting for fireware support */
719 ExtraDat->ovrflg = ExtBuf[0]; 782 ExtraDat->ovrflg = ExtBuf[0];
720 ExtraDat->mngflg = ExtBuf[1]; 783 ExtraDat->mngflg = ExtBuf[1];
721 ExtraDat->logadr = MemStickLogAddr(ExtBuf[2], ExtBuf[3]); 784 ExtraDat->logadr = MemStickLogAddr(ExtBuf[2], ExtBuf[3]);
722 785
723 return USB_STOR_TRANSPORT_GOOD; 786 return USB_STOR_TRANSPORT_GOOD;
724} 787}
725 788
726//----- MS_LibSetAcquiredErrorBlock() -------------------------------- 789/*
790 * MS_LibSetAcquiredErrorBlock()
791 */
727int MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk) 792int MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk)
728{ 793{
729 WORD log; 794 WORD log;
@@ -731,7 +796,9 @@ int MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk)
731 if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 796 if (phyblk >= us->MS_Lib.NumberOfPhyBlock)
732 return (DWORD)-1; 797 return (DWORD)-1;
733 798
734 if ((log = us->MS_Lib.Phy2LogMap[phyblk]) < us->MS_Lib.NumberOfLogBlock) 799 log = us->MS_Lib.Phy2LogMap[phyblk];
800
801 if (log < us->MS_Lib.NumberOfLogBlock)
735 us->MS_Lib.Log2PhyMap[log] = MS_LB_NOT_USED; 802 us->MS_Lib.Log2PhyMap[log] = MS_LB_NOT_USED;
736 803
737 if (us->MS_Lib.Phy2LogMap[phyblk] != MS_LB_INITIAL_ERROR) 804 if (us->MS_Lib.Phy2LogMap[phyblk] != MS_LB_INITIAL_ERROR)
@@ -740,7 +807,9 @@ int MS_LibSetAcquiredErrorBlock(struct us_data *us, WORD phyblk)
740 return 0; 807 return 0;
741} 808}
742 809
743//----- MS_LibErasePhyBlock() ---------------------------------------- 810/*
811 * MS_LibErasePhyBlock()
812 */
744int MS_LibErasePhyBlock(struct us_data *us, WORD phyblk) 813int MS_LibErasePhyBlock(struct us_data *us, WORD phyblk)
745{ 814{
746 WORD log; 815 WORD log;
@@ -748,27 +817,27 @@ int MS_LibErasePhyBlock(struct us_data *us, WORD phyblk)
748 if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 817 if (phyblk >= us->MS_Lib.NumberOfPhyBlock)
749 return MS_STATUS_ERROR; 818 return MS_STATUS_ERROR;
750 819
751 if ((log = us->MS_Lib.Phy2LogMap[phyblk]) < us->MS_Lib.NumberOfLogBlock) 820 log = us->MS_Lib.Phy2LogMap[phyblk];
821
822 if (log < us->MS_Lib.NumberOfLogBlock)
752 us->MS_Lib.Log2PhyMap[log] = MS_LB_NOT_USED; 823 us->MS_Lib.Log2PhyMap[log] = MS_LB_NOT_USED;
753 824
754 us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_NOT_USED; 825 us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_NOT_USED;
755 826
756 if (MS_LibIsWritable(us)) 827 if (MS_LibIsWritable(us)) {
757 { 828 switch (MS_ReaderEraseBlock(us, phyblk)) {
758 switch (MS_ReaderEraseBlock(us, phyblk)) 829 case MS_STATUS_SUCCESS:
759 { 830 us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_NOT_USED_ERASED;
760 case MS_STATUS_SUCCESS: 831 return MS_STATUS_SUCCESS;
761 us->MS_Lib.Phy2LogMap[phyblk] = MS_LB_NOT_USED_ERASED; 832 case MS_ERROR_FLASH_ERASE:
762 return MS_STATUS_SUCCESS; 833 case MS_STATUS_INT_ERROR:
763 case MS_ERROR_FLASH_ERASE: 834 MS_LibErrorPhyBlock(us, phyblk);
764 case MS_STATUS_INT_ERROR : 835 return MS_ERROR_FLASH_ERASE;
765 MS_LibErrorPhyBlock(us, phyblk); 836 case MS_STATUS_ERROR:
766 return MS_ERROR_FLASH_ERASE; 837 default:
767 case MS_STATUS_ERROR: 838 MS_LibCtrlSet(us, MS_LIB_CTRL_RDONLY);
768 default: 839 MS_LibSetAcquiredErrorBlock(us, phyblk);
769 MS_LibCtrlSet(us, MS_LIB_CTRL_RDONLY); 840 return MS_STATUS_ERROR;
770 MS_LibSetAcquiredErrorBlock(us, phyblk);
771 return MS_STATUS_ERROR;
772 } 841 }
773 } 842 }
774 843
@@ -777,29 +846,35 @@ int MS_LibErasePhyBlock(struct us_data *us, WORD phyblk)
777 return MS_STATUS_SUCCESS; 846 return MS_STATUS_SUCCESS;
778} 847}
779 848
780//----- MS_LibErrorPhyBlock() ---------------------------------------- 849/*
850 * MS_LibErrorPhyBlock()
851 */
781int MS_LibErrorPhyBlock(struct us_data *us, WORD phyblk) 852int MS_LibErrorPhyBlock(struct us_data *us, WORD phyblk)
782{ 853{
783 if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 854 if (phyblk >= us->MS_Lib.NumberOfPhyBlock)
784 return MS_STATUS_ERROR; 855 return MS_STATUS_ERROR;
785 856
786 MS_LibSetAcquiredErrorBlock(us, phyblk); 857 MS_LibSetAcquiredErrorBlock(us, phyblk);
787 858
788 if (MS_LibIsWritable(us)) 859 if (MS_LibIsWritable(us))
789 return MS_LibOverwriteExtra(us, phyblk, 0, 860 return MS_LibOverwriteExtra(us, phyblk, 0,
790 (BYTE)(~MS_REG_OVR_BKST & BYTE_MASK)); 861 (BYTE)(~MS_REG_OVR_BKST & BYTE_MASK));
791 862
792 863
793 return MS_STATUS_SUCCESS; 864 return MS_STATUS_SUCCESS;
794} 865}
795 866
796//----- MS_LibOverwriteExtra() --------------------------------------- 867/*
797int MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, BYTE OverwriteFlag) 868 * MS_LibOverwriteExtra()
869 */
870int MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr,
871 BYTE PageNum, BYTE OverwriteFlag)
798{ 872{
799 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; 873 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
800 int result; 874 int result;
801 875
802 //printk("MS --- MS_LibOverwriteExtra, PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); 876 /* printk("MS --- MS_LibOverwriteExtra, \
877 PhyBlockAddr = %x, PageNum = %x\n", PhyBlockAddr, PageNum); */
803 result = ENE_LoadBinCode(us, MS_RW_PATTERN); 878 result = ENE_LoadBinCode(us, MS_RW_PATTERN);
804 if (result != USB_STOR_XFER_GOOD) 879 if (result != USB_STOR_XFER_GOOD)
805 return USB_STOR_TRANSPORT_ERROR; 880 return USB_STOR_TRANSPORT_ERROR;
@@ -818,7 +893,7 @@ int MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, B
818 bcb->CDB[7] = 0xFF; 893 bcb->CDB[7] = 0xFF;
819 bcb->CDB[8] = 0xFF; 894 bcb->CDB[8] = 0xFF;
820 bcb->CDB[9] = 0xFF; 895 bcb->CDB[9] = 0xFF;
821 896
822 result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0); 897 result = ENE_SendScsiCmd(us, FDIR_READ, NULL, 0);
823 if (result != USB_STOR_XFER_GOOD) 898 if (result != USB_STOR_XFER_GOOD)
824 return USB_STOR_TRANSPORT_ERROR; 899 return USB_STOR_TRANSPORT_ERROR;
@@ -826,13 +901,16 @@ int MS_LibOverwriteExtra(struct us_data *us, DWORD PhyBlockAddr, BYTE PageNum, B
826 return USB_STOR_TRANSPORT_GOOD; 901 return USB_STOR_TRANSPORT_GOOD;
827} 902}
828 903
829//----- MS_LibForceSetLogicalPair() ---------------------------------- 904/*
905 * MS_LibForceSetLogicalPair()
906 */
830int MS_LibForceSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk) 907int MS_LibForceSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk)
831{ 908{
832 if (logblk == MS_LB_NOT_USED) 909 if (logblk == MS_LB_NOT_USED)
833 return 0; 910 return 0;
834 911
835 if ((logblk >= us->MS_Lib.NumberOfLogBlock) || (phyblk >= us->MS_Lib.NumberOfPhyBlock)) 912 if ((logblk >= us->MS_Lib.NumberOfLogBlock) ||
913 (phyblk >= us->MS_Lib.NumberOfPhyBlock))
836 return (DWORD)-1; 914 return (DWORD)-1;
837 915
838 us->MS_Lib.Phy2LogMap[phyblk] = logblk; 916 us->MS_Lib.Phy2LogMap[phyblk] = logblk;
@@ -841,10 +919,13 @@ int MS_LibForceSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk)
841 return 0; 919 return 0;
842} 920}
843 921
844//----- MS_LibSetLogicalPair() --------------------------------------- 922/*
923 * MS_LibSetLogicalPair()
924 */
845int MS_LibSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk) 925int MS_LibSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk)
846{ 926{
847 if ((logblk >= us->MS_Lib.NumberOfLogBlock) || (phyblk >= us->MS_Lib.NumberOfPhyBlock)) 927 if ((logblk >= us->MS_Lib.NumberOfLogBlock) ||
928 (phyblk >= us->MS_Lib.NumberOfPhyBlock))
848 return (DWORD)-1; 929 return (DWORD)-1;
849 930
850 us->MS_Lib.Phy2LogMap[phyblk] = logblk; 931 us->MS_Lib.Phy2LogMap[phyblk] = logblk;
@@ -853,28 +934,30 @@ int MS_LibSetLogicalPair(struct us_data *us, WORD logblk, WORD phyblk)
853 return 0; 934 return 0;
854} 935}
855 936
856//----- MS_CountFreeBlock() ------------------------------------------ 937/*
938 * MS_CountFreeBlock()
939 */
857int MS_CountFreeBlock(struct us_data *us, WORD PhyBlock) 940int MS_CountFreeBlock(struct us_data *us, WORD PhyBlock)
858{ 941{
859 DWORD Ende, Count; 942 DWORD Ende, Count;
860 943
861 Ende = PhyBlock + MS_PHYSICAL_BLOCKS_PER_SEGMENT; 944 Ende = PhyBlock + MS_PHYSICAL_BLOCKS_PER_SEGMENT;
862 for (Count = 0; PhyBlock < Ende; PhyBlock++) 945 for (Count = 0; PhyBlock < Ende; PhyBlock++) {
863 { 946 switch (us->MS_Lib.Phy2LogMap[PhyBlock]) {
864 switch (us->MS_Lib.Phy2LogMap[PhyBlock]) 947 case MS_LB_NOT_USED:
865 { 948 case MS_LB_NOT_USED_ERASED:
866 case MS_LB_NOT_USED: 949 Count++;
867 case MS_LB_NOT_USED_ERASED: 950 default:
868 Count++; 951 break;
869 default:
870 break;
871 } 952 }
872 } 953 }
873 954
874 return Count; 955 return Count;
875} 956}
876 957
877//----- MS_LibSearchBlockFromPhysical() ------------------------------ 958/*
959 * MS_LibSearchBlockFromPhysical()
960 */
878int MS_LibSearchBlockFromPhysical(struct us_data *us, WORD phyblk) 961int MS_LibSearchBlockFromPhysical(struct us_data *us, WORD phyblk)
879{ 962{
880 WORD Newblk; 963 WORD Newblk;
@@ -884,70 +967,68 @@ int MS_LibSearchBlockFromPhysical(struct us_data *us, WORD phyblk)
884 if (phyblk >= us->MS_Lib.NumberOfPhyBlock) 967 if (phyblk >= us->MS_Lib.NumberOfPhyBlock)
885 return MS_LB_ERROR; 968 return MS_LB_ERROR;
886 969
887 for (blk = phyblk + 1; blk != phyblk; blk++) 970 for (blk = phyblk + 1; blk != phyblk; blk++) {
888 {
889 if ((blk & MS_PHYSICAL_BLOCKS_PER_SEGMENT_MASK) == 0) 971 if ((blk & MS_PHYSICAL_BLOCKS_PER_SEGMENT_MASK) == 0)
890 blk -= MS_PHYSICAL_BLOCKS_PER_SEGMENT; 972 blk -= MS_PHYSICAL_BLOCKS_PER_SEGMENT;
891 973
892 Newblk = us->MS_Lib.Phy2LogMap[blk]; 974 Newblk = us->MS_Lib.Phy2LogMap[blk];
893 if (us->MS_Lib.Phy2LogMap[blk] == MS_LB_NOT_USED_ERASED) 975 if (us->MS_Lib.Phy2LogMap[blk] == MS_LB_NOT_USED_ERASED)
894 return blk; 976 return blk;
895 else if (us->MS_Lib.Phy2LogMap[blk] == MS_LB_NOT_USED) 977 else if (us->MS_Lib.Phy2LogMap[blk] == MS_LB_NOT_USED) {
896 { 978 switch (MS_LibReadExtra(us, blk, 0, &extdat)) {
897 switch (MS_LibReadExtra(us, blk, 0, &extdat)) 979 case MS_STATUS_SUCCESS:
898 { 980 case MS_STATUS_SUCCESS_WITH_ECC:
899 case MS_STATUS_SUCCESS : 981 break;
900 case MS_STATUS_SUCCESS_WITH_ECC: 982 case MS_NOCARD_ERROR:
901 break; 983 return MS_NOCARD_ERROR;
902 case MS_NOCARD_ERROR: 984 case MS_STATUS_INT_ERROR:
903 return MS_NOCARD_ERROR; 985 return MS_LB_ERROR;
904 case MS_STATUS_INT_ERROR: 986 case MS_ERROR_FLASH_READ:
905 return MS_LB_ERROR; 987 default:
906 case MS_ERROR_FLASH_READ: 988 MS_LibSetAcquiredErrorBlock(us, blk);
907 default: 989 /* MS_LibErrorPhyBlock(fdoExt, blk); */
908 MS_LibSetAcquiredErrorBlock(us, blk); // MS_LibErrorPhyBlock(fdoExt, blk); 990 continue;
909 continue; 991 } /* End switch */
910 } // End switch
911 992
912 if ((extdat.ovrflg & MS_REG_OVR_BKST) != MS_REG_OVR_BKST_OK) 993 if ((extdat.ovrflg & MS_REG_OVR_BKST) !=
913 { 994 MS_REG_OVR_BKST_OK) {
914 MS_LibSetAcquiredErrorBlock(us, blk); 995 MS_LibSetAcquiredErrorBlock(us, blk);
915 continue; 996 continue;
916 } 997 }
917 998
918 switch (MS_LibErasePhyBlock(us, blk)) 999 switch (MS_LibErasePhyBlock(us, blk)) {
919 { 1000 case MS_STATUS_SUCCESS:
920 case MS_STATUS_SUCCESS: 1001 return blk;
921 return blk; 1002 case MS_STATUS_ERROR:
922 case MS_STATUS_ERROR: 1003 return MS_LB_ERROR;
923 return MS_LB_ERROR; 1004 case MS_ERROR_FLASH_ERASE:
924 case MS_ERROR_FLASH_ERASE: 1005 default:
925 default: 1006 MS_LibErrorPhyBlock(us, blk);
926 MS_LibErrorPhyBlock(us, blk); 1007 break;
927 break;
928 } 1008 }
929 } 1009 }
930 } // End for 1010 } /* End for */
931 1011
932 return MS_LB_ERROR; 1012 return MS_LB_ERROR;
933} 1013}
934 1014
935//----- MS_LibSearchBlockFromLogical() ------------------------------- 1015/*
1016 * MS_LibSearchBlockFromLogical()
1017 */
936int MS_LibSearchBlockFromLogical(struct us_data *us, WORD logblk) 1018int MS_LibSearchBlockFromLogical(struct us_data *us, WORD logblk)
937{ 1019{
938 WORD phyblk; 1020 WORD phyblk;
939 1021
940 if ((phyblk=MS_LibConv2Physical(us, logblk)) >= MS_LB_ERROR) 1022 phyblk = MS_LibConv2Physical(us, logblk);
941 { 1023 if (phyblk >= MS_LB_ERROR) {
942 if (logblk >= us->MS_Lib.NumberOfLogBlock) 1024 if (logblk >= us->MS_Lib.NumberOfLogBlock)
943 return MS_LB_ERROR; 1025 return MS_LB_ERROR;
944 1026
945 phyblk = (logblk + MS_NUMBER_OF_BOOT_BLOCK) / MS_LOGICAL_BLOCKS_PER_SEGMENT; 1027 phyblk = (logblk + MS_NUMBER_OF_BOOT_BLOCK) /
1028 MS_LOGICAL_BLOCKS_PER_SEGMENT;
946 phyblk *= MS_PHYSICAL_BLOCKS_PER_SEGMENT; 1029 phyblk *= MS_PHYSICAL_BLOCKS_PER_SEGMENT;
947 phyblk += MS_PHYSICAL_BLOCKS_PER_SEGMENT - 1; 1030 phyblk += MS_PHYSICAL_BLOCKS_PER_SEGMENT - 1;
948 } 1031 }
949 1032
950 return MS_LibSearchBlockFromPhysical(us, phyblk); 1033 return MS_LibSearchBlockFromPhysical(us, phyblk);
951} 1034}
952
953
diff --git a/drivers/staging/keucr/ms.h b/drivers/staging/keucr/ms.h
index 4509db79298..a3da4be3f55 100644
--- a/drivers/staging/keucr/ms.h
+++ b/drivers/staging/keucr/ms.h
@@ -4,41 +4,41 @@
4#include <linux/blkdev.h> 4#include <linux/blkdev.h>
5#include "common.h" 5#include "common.h"
6 6
7// MemoryStick Register 7/* MemoryStick Register */
8// Status Register 0 8/* Status Register 0 */
9#define MS_REG_ST0_MB 0x80 // media busy 9#define MS_REG_ST0_MB 0x80 /* media busy */
10#define MS_REG_ST0_FB0 0x40 // flush busy 0 10#define MS_REG_ST0_FB0 0x40 /* flush busy 0 */
11#define MS_REG_ST0_BE 0x20 // buffer empty 11#define MS_REG_ST0_BE 0x20 /* buffer empty */
12#define MS_REG_ST0_BF 0x10 // buffer full 12#define MS_REG_ST0_BF 0x10 /* buffer full */
13#define MS_REG_ST0_SL 0x02 // sleep 13#define MS_REG_ST0_SL 0x02 /* sleep */
14#define MS_REG_ST0_WP 0x01 // write protected 14#define MS_REG_ST0_WP 0x01 /* write protected */
15#define MS_REG_ST0_WP_ON MS_REG_ST0_WP 15#define MS_REG_ST0_WP_ON MS_REG_ST0_WP
16#define MS_REG_ST0_WP_OFF 0x00 16#define MS_REG_ST0_WP_OFF 0x00
17 17
18// Status Register 1 18/* Status Register 1 */
19#define MS_REG_ST1_MB 0x80 // media busy 19#define MS_REG_ST1_MB 0x80 /* media busy */
20#define MS_REG_ST1_FB1 0x40 // flush busy 1 20#define MS_REG_ST1_FB1 0x40 /* flush busy 1 */
21#define MS_REG_ST1_DTER 0x20 // error on data(corrected) 21#define MS_REG_ST1_DTER 0x20 /* error on data(corrected) */
22#define MS_REG_ST1_UCDT 0x10 // unable to correct data 22#define MS_REG_ST1_UCDT 0x10 /* unable to correct data */
23#define MS_REG_ST1_EXER 0x08 // error on extra(corrected) 23#define MS_REG_ST1_EXER 0x08 /* error on extra(corrected) */
24#define MS_REG_ST1_UCEX 0x04 // unable to correct extra 24#define MS_REG_ST1_UCEX 0x04 /* unable to correct extra */
25#define MS_REG_ST1_FGER 0x02 // error on overwrite flag(corrected) 25#define MS_REG_ST1_FGER 0x02 /* error on overwrite flag(corrected) */
26#define MS_REG_ST1_UCFG 0x01 // unable to correct overwrite flag 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 | \ 27#define MS_REG_ST1_DEFAULT (MS_REG_ST1_MB | MS_REG_ST1_FB1 | \
28 MS_REG_ST1_DTER | MS_REG_ST1_UCDT | \ 28 MS_REG_ST1_DTER | MS_REG_ST1_UCDT | \
29 MS_REG_ST1_EXER | MS_REG_ST1_UCEX | \ 29 MS_REG_ST1_EXER | MS_REG_ST1_UCEX | \
30 MS_REG_ST1_FGER | MS_REG_ST1_UCFG) 30 MS_REG_ST1_FGER | MS_REG_ST1_UCFG)
31 31
32// System Parameter 32/* System Parameter */
33#define MS_REG_SYSPAR_BAMD 0x80 // block address mode 33#define MS_REG_SYSPAR_BAMD 0x80 /* block address mode */
34#define MS_REG_SYSPAR_BAND_LINEAR MS_REG_SYSPAR_BAMD // linear mode 34#define MS_REG_SYSPAR_BAND_LINEAR MS_REG_SYSPAR_BAMD /* linear mode */
35#define MS_REG_SYSPAR_BAND_CHIP 0x00 // chip mode 35#define MS_REG_SYSPAR_BAND_CHIP 0x00 /* chip mode */
36#define MS_REG_SYSPAR_ATEN 0x40 // attribute ROM enable 36#define MS_REG_SYSPAR_ATEN 0x40 /* attribute ROM enable */
37#define MS_REG_SYSPAR_ATEN_ENABLE MS_REG_SYSPAR_ATEN // enable 37#define MS_REG_SYSPAR_ATEN_ENABLE MS_REG_SYSPAR_ATEN /* enable */
38#define MS_REG_SYSPAR_ATEN_DISABLE 0x00 // disable 38#define MS_REG_SYSPAR_ATEN_DISABLE 0x00 /* disable */
39#define MS_REG_SYSPAR_RESERVED 0x2f 39#define MS_REG_SYSPAR_RESERVED 0x2f
40 40
41// Command Parameter 41/* Command Parameter */
42#define MS_REG_CMDPAR_CP2 0x80 42#define MS_REG_CMDPAR_CP2 0x80
43#define MS_REG_CMDPAR_CP1 0x40 43#define MS_REG_CMDPAR_CP1 0x40
44#define MS_REG_CMDPAR_CP0 0x20 44#define MS_REG_CMDPAR_CP0 0x20
@@ -48,44 +48,44 @@
48#define MS_REG_CMDPAR_OVERWRITE MS_REG_CMDPAR_CP2 48#define MS_REG_CMDPAR_OVERWRITE MS_REG_CMDPAR_CP2
49#define MS_REG_CMDPAR_RESERVED 0x1f 49#define MS_REG_CMDPAR_RESERVED 0x1f
50 50
51// Overwrite Area 51/* Overwrite Area */
52#define MS_REG_OVR_BKST 0x80 // block status 52#define MS_REG_OVR_BKST 0x80 /* block status */
53#define MS_REG_OVR_BKST_OK MS_REG_OVR_BKST // OK 53#define MS_REG_OVR_BKST_OK MS_REG_OVR_BKST /* OK */
54#define MS_REG_OVR_BKST_NG 0x00 // NG 54#define MS_REG_OVR_BKST_NG 0x00 /* NG */
55#define MS_REG_OVR_PGST0 0x40 // page status 55#define MS_REG_OVR_PGST0 0x40 /* page status */
56#define MS_REG_OVR_PGST1 0x20 56#define MS_REG_OVR_PGST1 0x20
57#define MS_REG_OVR_PGST_MASK (MS_REG_OVR_PGST0 | MS_REG_OVR_PGST1) 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 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 59#define MS_REG_OVR_PGST_NG MS_REG_OVR_PGST1 /* NG */
60#define MS_REG_OVR_PGST_DATA_ERROR 0x00 // data error 60#define MS_REG_OVR_PGST_DATA_ERROR 0x00 /* data error */
61#define MS_REG_OVR_UDST 0x10 // update status 61#define MS_REG_OVR_UDST 0x10 /* update status */
62#define MS_REG_OVR_UDST_UPDATING 0x00 // updating 62#define MS_REG_OVR_UDST_UPDATING 0x00 /* updating */
63#define MS_REG_OVR_UDST_NO_UPDATE MS_REG_OVR_UDST 63#define MS_REG_OVR_UDST_NO_UPDATE MS_REG_OVR_UDST
64#define MS_REG_OVR_RESERVED 0x08 64#define MS_REG_OVR_RESERVED 0x08
65#define MS_REG_OVR_DEFAULT (MS_REG_OVR_BKST_OK | \ 65#define MS_REG_OVR_DEFAULT (MS_REG_OVR_BKST_OK | \
66 MS_REG_OVR_PGST_OK | \ 66 MS_REG_OVR_PGST_OK | \
67 MS_REG_OVR_UDST_NO_UPDATE | \ 67 MS_REG_OVR_UDST_NO_UPDATE | \
68 MS_REG_OVR_RESERVED) 68 MS_REG_OVR_RESERVED)
69// Management Flag 69/* Management Flag */
70#define MS_REG_MNG_SCMS0 0x20 // serial copy management system 70#define MS_REG_MNG_SCMS0 0x20 /* serial copy management system */
71#define MS_REG_MNG_SCMS1 0x10 71#define MS_REG_MNG_SCMS1 0x10
72#define MS_REG_MNG_SCMS_MASK (MS_REG_MNG_SCMS0 | MS_REG_MNG_SCMS1) 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) 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 74#define MS_REG_MNG_SCMS_ONE_COPY MS_REG_MNG_SCMS1
75#define MS_REG_MNG_SCMS_NO_COPY 0x00 75#define MS_REG_MNG_SCMS_NO_COPY 0x00
76#define MS_REG_MNG_ATFLG 0x08 // address transfer table flag 76#define MS_REG_MNG_ATFLG 0x08 /* address transfer table flag */
77#define MS_REG_MNG_ATFLG_OTHER MS_REG_MNG_ATFLG // other 77#define MS_REG_MNG_ATFLG_OTHER MS_REG_MNG_ATFLG /* other */
78#define MS_REG_MNG_ATFLG_ATTBL 0x00 // address transfer table 78#define MS_REG_MNG_ATFLG_ATTBL 0x00 /* address transfer table */
79#define MS_REG_MNG_SYSFLG 0x04 // system flag 79#define MS_REG_MNG_SYSFLG 0x04 /* system flag */
80#define MS_REG_MNG_SYSFLG_USER MS_REG_MNG_SYSFLG // user block 80#define MS_REG_MNG_SYSFLG_USER MS_REG_MNG_SYSFLG /* user block */
81#define MS_REG_MNG_SYSFLG_BOOT 0x00 // system block 81#define MS_REG_MNG_SYSFLG_BOOT 0x00 /* system block */
82#define MS_REG_MNG_RESERVED 0xc3 82#define MS_REG_MNG_RESERVED 0xc3
83#define MS_REG_MNG_DEFAULT (MS_REG_MNG_SCMS_COPY_OK | \ 83#define MS_REG_MNG_DEFAULT (MS_REG_MNG_SCMS_COPY_OK | \
84 MS_REG_MNG_ATFLG_OTHER | \ 84 MS_REG_MNG_ATFLG_OTHER | \
85 MS_REG_MNG_SYSFLG_USER | \ 85 MS_REG_MNG_SYSFLG_USER | \
86 MS_REG_MNG_RESERVED) 86 MS_REG_MNG_RESERVED)
87 87
88// Error codes 88/* Error codes */
89#define MS_STATUS_SUCCESS 0x0000 89#define MS_STATUS_SUCCESS 0x0000
90#define MS_ERROR_OUT_OF_SPACE 0x0103 90#define MS_ERROR_OUT_OF_SPACE 0x0103
91#define MS_STATUS_WRITE_PROTECT 0x0106 91#define MS_STATUS_WRITE_PROTECT 0x0106
@@ -110,29 +110,41 @@
110#define MS_LB_ACQUIRED_ERROR 0xfff4 110#define MS_LB_ACQUIRED_ERROR 0xfff4
111#define MS_LB_NOT_USED_ERASED 0xfff5 111#define MS_LB_NOT_USED_ERASED 0xfff5
112 112
113#define MS_LibConv2Physical(pdx, LogBlock) (((LogBlock) >= (pdx)->MS_Lib.NumberOfLogBlock) ? MS_STATUS_ERROR : (pdx)->MS_Lib.Log2PhyMap[LogBlock]) 113#define MS_LibConv2Physical(pdx, LogBlock) \
114#define MS_LibConv2Logical(pdx, PhyBlock) (((PhyBlock) >= (pdx)->MS_Lib.NumberOfPhyBlock) ? MS_STATUS_ERROR : (pdx)->MS_Lib.Phy2LogMap[PhyBlock]) //琩phy->log table 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 */
115 120
116#define MS_LIB_CTRL_RDONLY 0 121#define MS_LIB_CTRL_RDONLY 0
117#define MS_LIB_CTRL_WRPROTECT 1 122#define MS_LIB_CTRL_WRPROTECT 1
118#define MS_LibCtrlCheck(pdx, Flag) ((pdx)->MS_Lib.flags & (1 << (Flag))) 123#define MS_LibCtrlCheck(pdx, Flag) ((pdx)->MS_Lib.flags & (1 << (Flag)))
119 124
120#define MS_LibCtrlSet(pdx, Flag) (pdx)->MS_Lib.flags |= (1 << (Flag)) 125#define MS_LibCtrlSet(pdx, Flag) ((pdx)->MS_Lib.flags |= (1 << (Flag)))
121#define MS_LibCtrlReset(pdx, Flag) (pdx)->MS_Lib.flags &= ~(1 << (Flag)) 126#define MS_LibCtrlReset(pdx, Flag) ((pdx)->MS_Lib.flags &= ~(1 << (Flag)))
122#define MS_LibIsWritable(pdx) ((MS_LibCtrlCheck((pdx), MS_LIB_CTRL_RDONLY) == 0) && (MS_LibCtrlCheck(pdx, MS_LIB_CTRL_WRPROTECT) == 0)) 127#define MS_LibIsWritable(pdx) \
128 ((MS_LibCtrlCheck((pdx), MS_LIB_CTRL_RDONLY) == 0) && \
129 (MS_LibCtrlCheck(pdx, MS_LIB_CTRL_WRPROTECT) == 0))
123 130
124#define MS_MAX_PAGES_PER_BLOCK 32 131#define MS_MAX_PAGES_PER_BLOCK 32
125#define MS_LIB_BITS_PER_BYTE 8 132#define MS_LIB_BITS_PER_BYTE 8
126 133
127#define MS_LibPageMapIdx(n) ((n) / MS_LIB_BITS_PER_BYTE) 134#define MS_LibPageMapIdx(n) ((n) / MS_LIB_BITS_PER_BYTE)
128#define MS_LibPageMapBit(n) (1 << ((n) % MS_LIB_BITS_PER_BYTE)) 135#define MS_LibPageMapBit(n) (1 << ((n) % MS_LIB_BITS_PER_BYTE))
129#define MS_LibCheckPageMapBit(pdx, n) ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] & MS_LibPageMapBit(n)) 136#define MS_LibCheckPageMapBit(pdx, n) \
130#define MS_LibSetPageMapBit(pdx, n) ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] |= MS_LibPageMapBit(n)) 137 ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] & MS_LibPageMapBit(n))
131#define MS_LibResetPageMapBit(pdx, n) ((pdx)->MS_Lib.pagemap[MS_LibPageMapIdx(n)] &= ~MS_LibPageMapBit(n)) 138#define MS_LibSetPageMapBit(pdx, n) \
132#define MS_LibClearPageMap(pdx) memset((pdx)->MS_Lib.pagemap, 0, sizeof((pdx)->MS_Lib.pagemap)) 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))
133 144
134 145
135#define MemStickLogAddr(logadr1, logadr0) ((((WORD)(logadr1)) << 8) | (logadr0)) 146#define MemStickLogAddr(logadr1, logadr0) \
147 ((((WORD)(logadr1)) << 8) | (logadr0))
136 148
137#define MS_BYTES_PER_PAGE 512 149#define MS_BYTES_PER_PAGE 512
138 150
@@ -144,7 +156,7 @@
144#define MS_NUMBER_OF_SYSTEM_BLOCK 4 156#define MS_NUMBER_OF_SYSTEM_BLOCK 4
145#define MS_LOGICAL_BLOCKS_PER_SEGMENT 496 157#define MS_LOGICAL_BLOCKS_PER_SEGMENT 496
146#define MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT 494 158#define MS_LOGICAL_BLOCKS_IN_1ST_SEGMENT 494
147#define MS_PHYSICAL_BLOCKS_PER_SEGMENT 0x200 // 512 159#define MS_PHYSICAL_BLOCKS_PER_SEGMENT 0x200 /* 512 */
148#define MS_PHYSICAL_BLOCKS_PER_SEGMENT_MASK 0x1ff 160#define MS_PHYSICAL_BLOCKS_PER_SEGMENT_MASK 0x1ff
149 161
150#define MS_SECTOR_SIZE 512 162#define MS_SECTOR_SIZE 512
@@ -165,51 +177,53 @@
165#define MS_SYSINF_SECURITY 0x01 177#define MS_SYSINF_SECURITY 0x01
166#define MS_SYSINF_SECURITY_NO_SUPPORT MS_SYSINF_SECURITY 178#define MS_SYSINF_SECURITY_NO_SUPPORT MS_SYSINF_SECURITY
167#define MS_SYSINF_SECURITY_SUPPORT 0 179#define MS_SYSINF_SECURITY_SUPPORT 0
168#define MS_SYSINF_FORMAT_MAT 0 // ? 180#define MS_SYSINF_FORMAT_MAT 0 /* ? */
169#define MS_SYSINF_FORMAT_FAT 1 181#define MS_SYSINF_FORMAT_FAT 1
170#define MS_SYSINF_USAGE_GENERAL 0 182#define MS_SYSINF_USAGE_GENERAL 0
171#define MS_SYSINF_PAGE_SIZE MS_BYTES_PER_PAGE // fixed 183#define MS_SYSINF_PAGE_SIZE MS_BYTES_PER_PAGE /* fixed */
172#define MS_SYSINF_RESERVED1 1 184#define MS_SYSINF_RESERVED1 1
173#define MS_SYSINF_RESERVED2 1 185#define MS_SYSINF_RESERVED2 1
174 186
175#define MS_SYSENT_TYPE_INVALID_BLOCK 0x01 187#define MS_SYSENT_TYPE_INVALID_BLOCK 0x01
176#define MS_SYSENT_TYPE_CIS_IDI 0x0a // CIS/IDI 188#define MS_SYSENT_TYPE_CIS_IDI 0x0a /* CIS/IDI */
177 189
178#define SIZE_OF_KIRO 1024 190#define SIZE_OF_KIRO 1024
179 191
180// BOOT BLOCK 192/* BOOT BLOCK */
181#define MS_NUMBER_OF_SYSTEM_ENTRY 4 193#define MS_NUMBER_OF_SYSTEM_ENTRY 4
182 194
183//----- MemStickRegisters -------------------------------------------- 195/*
184// Status registers (16 bytes) 196 * MemStickRegisters
197 */
198/* Status registers (16 bytes) */
185typedef struct { 199typedef struct {
186 BYTE Reserved0; // 00 200 BYTE Reserved0; /* 00 */
187 BYTE INTRegister; // 01 201 BYTE INTRegister; /* 01 */
188 BYTE StatusRegister0; // 02 202 BYTE StatusRegister0; /* 02 */
189 BYTE StatusRegister1; // 03 203 BYTE StatusRegister1; /* 03 */
190 BYTE Reserved1[12]; // 04-0F 204 BYTE Reserved1[12]; /* 04-0F */
191} MemStickStatusRegisters; 205} MemStickStatusRegisters;
192 206
193// Parameter registers (6 bytes) 207/* Parameter registers (6 bytes) */
194typedef struct { 208typedef struct {
195 BYTE SystemParameter; // 10 209 BYTE SystemParameter; /* 10 */
196 BYTE BlockAddress2; // 11 210 BYTE BlockAddress2; /* 11 */
197 BYTE BlockAddress1; // 12 211 BYTE BlockAddress1; /* 12 */
198 BYTE BlockAddress0; // 13 212 BYTE BlockAddress0; /* 13 */
199 BYTE CMDParameter; // 14 213 BYTE CMDParameter; /* 14 */
200 BYTE PageAddress; // 15 214 BYTE PageAddress; /* 15 */
201} MemStickParameterRegisters; 215} MemStickParameterRegisters;
202 216
203// Extra registers (9 bytes) 217/* Extra registers (9 bytes) */
204typedef struct { 218typedef struct {
205 BYTE OverwriteFlag; // 16 219 BYTE OverwriteFlag; /* 16 */
206 BYTE ManagementFlag; // 17 220 BYTE ManagementFlag; /* 17 */
207 BYTE LogicalAddress1; // 18 221 BYTE LogicalAddress1; /* 18 */
208 BYTE LogicalAddress0; // 19 222 BYTE LogicalAddress0; /* 19 */
209 BYTE ReservedArea[5]; // 1A-1E 223 BYTE ReservedArea[5]; /* 1A-1E */
210} MemStickExtraDataRegisters; 224} MemStickExtraDataRegisters;
211 225
212// All registers in Memory Stick (32 bytes, includes 1 byte padding) 226/* All registers in Memory Stick (32 bytes, includes 1 byte padding) */
213typedef struct { 227typedef struct {
214 MemStickStatusRegisters status; 228 MemStickStatusRegisters status;
215 MemStickParameterRegisters param; 229 MemStickParameterRegisters param;
@@ -217,7 +231,9 @@ typedef struct {
217 BYTE padding; 231 BYTE padding;
218} MemStickRegisters, *PMemStickRegisters; 232} MemStickRegisters, *PMemStickRegisters;
219 233
220//----- MemStickBootBlockPage0 --------------------------------------- 234/*
235 * MemStickBootBlockPage0
236 */
221typedef struct { 237typedef struct {
222 WORD wBlockID; 238 WORD wBlockID;
223 WORD wFormatVersion; 239 WORD wFormatVersion;
@@ -238,13 +254,13 @@ typedef struct {
238} MemStickBootBlockSysEnt; 254} MemStickBootBlockSysEnt;
239 255
240typedef struct { 256typedef struct {
241 BYTE bMsClass; // must be 1 257 BYTE bMsClass; /* must be 1 */
242 BYTE bCardType; // see below 258 BYTE bCardType; /* see below */
243 WORD wBlockSize; // n KB 259 WORD wBlockSize; /* n KB */
244 WORD wBlockNumber; // number of physical block 260 WORD wBlockNumber; /* number of physical block */
245 WORD wTotalBlockNumber; // number of logical block 261 WORD wTotalBlockNumber; /* number of logical block */
246 WORD wPageSize; // must be 0x200 262 WORD wPageSize; /* must be 0x200 */
247 BYTE bExtraSize; // 0x10 263 BYTE bExtraSize; /* 0x10 */
248 BYTE bSecuritySupport; 264 BYTE bSecuritySupport;
249 BYTE bAssemblyDate[8]; 265 BYTE bAssemblyDate[8];
250 BYTE bFactoryArea[4]; 266 BYTE bFactoryArea[4];
@@ -258,10 +274,10 @@ typedef struct {
258 BYTE bVCC; 274 BYTE bVCC;
259 BYTE bVPP; 275 BYTE bVPP;
260 WORD wControllerChipNumber; 276 WORD wControllerChipNumber;
261 WORD wControllerFunction; // New MS 277 WORD wControllerFunction; /* New MS */
262 BYTE bReserved3[9]; // New MS 278 BYTE bReserved3[9]; /* New MS */
263 BYTE bParallelSupport; // New MS 279 BYTE bParallelSupport; /* New MS */
264 WORD wFormatValue; // New MS 280 WORD wFormatValue; /* New MS */
265 BYTE bFormatType; 281 BYTE bFormatType;
266 BYTE bUsage; 282 BYTE bUsage;
267 BYTE bDeviceType; 283 BYTE bDeviceType;
@@ -277,60 +293,62 @@ typedef struct {
277 MemStickBootBlockSysInf sysinf; 293 MemStickBootBlockSysInf sysinf;
278} MemStickBootBlockPage0; 294} MemStickBootBlockPage0;
279 295
280//----- MemStickBootBlockCIS_IDI ------------------------------------- 296/*
297 * MemStickBootBlockCIS_IDI
298 */
281typedef struct { 299typedef struct {
282 BYTE bCistplDEVICE[6]; // 0 300 BYTE bCistplDEVICE[6]; /* 0 */
283 BYTE bCistplDEVICE0C[6]; // 6 301 BYTE bCistplDEVICE0C[6]; /* 6 */
284 BYTE bCistplJEDECC[4]; // 12 302 BYTE bCistplJEDECC[4]; /* 12 */
285 BYTE bCistplMANFID[6]; // 16 303 BYTE bCistplMANFID[6]; /* 16 */
286 BYTE bCistplVER1[32]; // 22 304 BYTE bCistplVER1[32]; /* 22 */
287 BYTE bCistplFUNCID[4]; // 54 305 BYTE bCistplFUNCID[4]; /* 54 */
288 BYTE bCistplFUNCE0[4]; // 58 306 BYTE bCistplFUNCE0[4]; /* 58 */
289 BYTE bCistplFUNCE1[5]; // 62 307 BYTE bCistplFUNCE1[5]; /* 62 */
290 BYTE bCistplCONF[7]; // 67 308 BYTE bCistplCONF[7]; /* 67 */
291 BYTE bCistplCFTBLENT0[10]; // 74 309 BYTE bCistplCFTBLENT0[10]; /* 74 */
292 BYTE bCistplCFTBLENT1[8]; // 84 310 BYTE bCistplCFTBLENT1[8]; /* 84 */
293 BYTE bCistplCFTBLENT2[12]; // 92 311 BYTE bCistplCFTBLENT2[12]; /* 92 */
294 BYTE bCistplCFTBLENT3[8]; // 104 312 BYTE bCistplCFTBLENT3[8]; /* 104 */
295 BYTE bCistplCFTBLENT4[17]; // 112 313 BYTE bCistplCFTBLENT4[17]; /* 112 */
296 BYTE bCistplCFTBLENT5[8]; // 129 314 BYTE bCistplCFTBLENT5[8]; /* 129 */
297 BYTE bCistplCFTBLENT6[17]; // 137 315 BYTE bCistplCFTBLENT6[17]; /* 137 */
298 BYTE bCistplCFTBLENT7[8]; // 154 316 BYTE bCistplCFTBLENT7[8]; /* 154 */
299 BYTE bCistplNOLINK[3]; // 162 317 BYTE bCistplNOLINK[3]; /* 162 */
300} MemStickBootBlockCIS; 318} MemStickBootBlockCIS;
301 319
302typedef struct { 320typedef struct {
303#define MS_IDI_GENERAL_CONF 0x848A 321#define MS_IDI_GENERAL_CONF 0x848A
304 WORD wIDIgeneralConfiguration; // 0 322 WORD wIDIgeneralConfiguration; /* 0 */
305 WORD wIDInumberOfCylinder; // 1 323 WORD wIDInumberOfCylinder; /* 1 */
306 WORD wIDIreserved0; // 2 324 WORD wIDIreserved0; /* 2 */
307 WORD wIDInumberOfHead; // 3 325 WORD wIDInumberOfHead; /* 3 */
308 WORD wIDIbytesPerTrack; // 4 326 WORD wIDIbytesPerTrack; /* 4 */
309 WORD wIDIbytesPerSector; // 5 327 WORD wIDIbytesPerSector; /* 5 */
310 WORD wIDIsectorsPerTrack; // 6 328 WORD wIDIsectorsPerTrack; /* 6 */
311 WORD wIDItotalSectors[2]; // 7-8 high,low 329 WORD wIDItotalSectors[2]; /* 7-8 high,low */
312 WORD wIDIreserved1[11]; // 9-19 330 WORD wIDIreserved1[11]; /* 9-19 */
313 WORD wIDIbufferType; // 20 331 WORD wIDIbufferType; /* 20 */
314 WORD wIDIbufferSize; // 21 332 WORD wIDIbufferSize; /* 21 */
315 WORD wIDIlongCmdECC; // 22 333 WORD wIDIlongCmdECC; /* 22 */
316 WORD wIDIfirmVersion[4]; // 23-26 334 WORD wIDIfirmVersion[4]; /* 23-26 */
317 WORD wIDImodelName[20]; // 27-46 335 WORD wIDImodelName[20]; /* 27-46 */
318 WORD wIDIreserved2; // 47 336 WORD wIDIreserved2; /* 47 */
319 WORD wIDIlongWordSupported; // 48 337 WORD wIDIlongWordSupported; /* 48 */
320 WORD wIDIdmaSupported; // 49 338 WORD wIDIdmaSupported; /* 49 */
321 WORD wIDIreserved3; // 50 339 WORD wIDIreserved3; /* 50 */
322 WORD wIDIpioTiming; // 51 340 WORD wIDIpioTiming; /* 51 */
323 WORD wIDIdmaTiming; // 52 341 WORD wIDIdmaTiming; /* 52 */
324 WORD wIDItransferParameter; // 53 342 WORD wIDItransferParameter; /* 53 */
325 WORD wIDIformattedCylinder; // 54 343 WORD wIDIformattedCylinder; /* 54 */
326 WORD wIDIformattedHead; // 55 344 WORD wIDIformattedHead; /* 55 */
327 WORD wIDIformattedSectorsPerTrack; // 56 345 WORD wIDIformattedSectorsPerTrack; /* 56 */
328 WORD wIDIformattedTotalSectors[2]; // 57-58 346 WORD wIDIformattedTotalSectors[2]; /* 57-58 */
329 WORD wIDImultiSector; // 59 347 WORD wIDImultiSector; /* 59 */
330 WORD wIDIlbaSectors[2]; // 60-61 348 WORD wIDIlbaSectors[2]; /* 60-61 */
331 WORD wIDIsingleWordDMA; // 62 349 WORD wIDIsingleWordDMA; /* 62 */
332 WORD wIDImultiWordDMA; // 63 350 WORD wIDImultiWordDMA; /* 63 */
333 WORD wIDIreserved4[192]; // 64-255 351 WORD wIDIreserved4[192]; /* 64-255 */
334} MemStickBootBlockIDI; 352} MemStickBootBlockIDI;
335 353
336typedef struct { 354typedef struct {
@@ -346,7 +364,9 @@ typedef struct {
346 364
347} MemStickBootBlockCIS_IDI; 365} MemStickBootBlockCIS_IDI;
348 366
349//----- MS_LibControl ------------------------------------------------ 367/*
368 * MS_LibControl
369 */
350typedef struct { 370typedef struct {
351 BYTE reserved; 371 BYTE reserved;
352 BYTE intr; 372 BYTE intr;
@@ -362,14 +382,14 @@ typedef struct {
362 DWORD BytesPerSector; 382 DWORD BytesPerSector;
363 DWORD NumberOfCylinder; 383 DWORD NumberOfCylinder;
364 DWORD SectorsPerCylinder; 384 DWORD SectorsPerCylinder;
365 WORD cardType; // R/W, RO, Hybrid 385 WORD cardType; /* R/W, RO, Hybrid */
366 WORD blockSize; 386 WORD blockSize;
367 WORD PagesPerBlock; 387 WORD PagesPerBlock;
368 WORD NumberOfPhyBlock; 388 WORD NumberOfPhyBlock;
369 WORD NumberOfLogBlock; 389 WORD NumberOfLogBlock;
370 WORD NumberOfSegment; 390 WORD NumberOfSegment;
371 WORD *Phy2LogMap; // phy2log table 391 WORD *Phy2LogMap; /* phy2log table */
372 WORD *Log2PhyMap; // log2phy table 392 WORD *Log2PhyMap; /* log2phy table */
373 WORD wrtblk; 393 WORD wrtblk;
374 BYTE pagemap[(MS_MAX_PAGES_PER_BLOCK + (MS_LIB_BITS_PER_BYTE-1)) / 394 BYTE pagemap[(MS_MAX_PAGES_PER_BLOCK + (MS_LIB_BITS_PER_BYTE-1)) /
375 MS_LIB_BITS_PER_BYTE]; 395 MS_LIB_BITS_PER_BYTE];