xref: /linux/drivers/usb/storage/sddr09.c (revision a7edd0e676d51145ae634a2acf7a447e319200fa)
1 /* Driver for SanDisk SDDR-09 SmartMedia reader
2  *
3  * $Id: sddr09.c,v 1.24 2002/04/22 03:39:43 mdharm Exp $
4  *   (c) 2000, 2001 Robert Baruch (autophile@starband.net)
5  *   (c) 2002 Andries Brouwer (aeb@cwi.nl)
6  * Developed with the assistance of:
7  *   (c) 2002 Alan Stern <stern@rowland.org>
8  *
9  * The SanDisk SDDR-09 SmartMedia reader uses the Shuttle EUSB-01 chip.
10  * This chip is a programmable USB controller. In the SDDR-09, it has
11  * been programmed to obey a certain limited set of SCSI commands.
12  * This driver translates the "real" SCSI commands to the SDDR-09 SCSI
13  * commands.
14  *
15  * This program is free software; you can redistribute it and/or modify it
16  * under the terms of the GNU General Public License as published by the
17  * Free Software Foundation; either version 2, or (at your option) any
18  * later version.
19  *
20  * This program is distributed in the hope that it will be useful, but
21  * WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23  * General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License along
26  * with this program; if not, write to the Free Software Foundation, Inc.,
27  * 675 Mass Ave, Cambridge, MA 02139, USA.
28  */
29 
30 /*
31  * Known vendor commands: 12 bytes, first byte is opcode
32  *
33  * E7: read scatter gather
34  * E8: read
35  * E9: write
36  * EA: erase
37  * EB: reset
38  * EC: read status
39  * ED: read ID
40  * EE: write CIS (?)
41  * EF: compute checksum (?)
42  */
43 
44 #include <linux/errno.h>
45 #include <linux/slab.h>
46 
47 #include <scsi/scsi.h>
48 #include <scsi/scsi_cmnd.h>
49 
50 #include "usb.h"
51 #include "transport.h"
52 #include "protocol.h"
53 #include "debug.h"
54 #include "sddr09.h"
55 
56 
57 #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) )
58 #define LSB_of(s) ((s)&0xFF)
59 #define MSB_of(s) ((s)>>8)
60 
61 /* #define US_DEBUGP printk */
62 
63 /*
64  * First some stuff that does not belong here:
65  * data on SmartMedia and other cards, completely
66  * unrelated to this driver.
67  * Similar stuff occurs in <linux/mtd/nand_ids.h>.
68  */
69 
70 struct nand_flash_dev {
71 	int model_id;
72 	int chipshift;		/* 1<<cs bytes total capacity */
73 	char pageshift;		/* 1<<ps bytes in a page */
74 	char blockshift;	/* 1<<bs pages in an erase block */
75 	char zoneshift;		/* 1<<zs blocks in a zone */
76 				/* # of logical blocks is 125/128 of this */
77 	char pageadrlen;	/* length of an address in bytes - 1 */
78 };
79 
80 /*
81  * NAND Flash Manufacturer ID Codes
82  */
83 #define NAND_MFR_AMD		0x01
84 #define NAND_MFR_NATSEMI	0x8f
85 #define NAND_MFR_TOSHIBA	0x98
86 #define NAND_MFR_SAMSUNG	0xec
87 
88 static inline char *nand_flash_manufacturer(int manuf_id) {
89 	switch(manuf_id) {
90 	case NAND_MFR_AMD:
91 		return "AMD";
92 	case NAND_MFR_NATSEMI:
93 		return "NATSEMI";
94 	case NAND_MFR_TOSHIBA:
95 		return "Toshiba";
96 	case NAND_MFR_SAMSUNG:
97 		return "Samsung";
98 	default:
99 		return "unknown";
100 	}
101 }
102 
103 /*
104  * It looks like it is unnecessary to attach manufacturer to the
105  * remaining data: SSFDC prescribes manufacturer-independent id codes.
106  *
107  * 256 MB NAND flash has a 5-byte ID with 2nd byte 0xaa, 0xba, 0xca or 0xda.
108  */
109 
110 static struct nand_flash_dev nand_flash_ids[] = {
111 	/* NAND flash */
112 	{ 0x6e, 20, 8, 4, 8, 2},	/* 1 MB */
113 	{ 0xe8, 20, 8, 4, 8, 2},	/* 1 MB */
114 	{ 0xec, 20, 8, 4, 8, 2},	/* 1 MB */
115 	{ 0x64, 21, 8, 4, 9, 2}, 	/* 2 MB */
116 	{ 0xea, 21, 8, 4, 9, 2},	/* 2 MB */
117 	{ 0x6b, 22, 9, 4, 9, 2},	/* 4 MB */
118 	{ 0xe3, 22, 9, 4, 9, 2},	/* 4 MB */
119 	{ 0xe5, 22, 9, 4, 9, 2},	/* 4 MB */
120 	{ 0xe6, 23, 9, 4, 10, 2},	/* 8 MB */
121 	{ 0x73, 24, 9, 5, 10, 2},	/* 16 MB */
122 	{ 0x75, 25, 9, 5, 10, 2},	/* 32 MB */
123 	{ 0x76, 26, 9, 5, 10, 3},	/* 64 MB */
124 	{ 0x79, 27, 9, 5, 10, 3},	/* 128 MB */
125 
126 	/* MASK ROM */
127 	{ 0x5d, 21, 9, 4, 8, 2},	/* 2 MB */
128 	{ 0xd5, 22, 9, 4, 9, 2},	/* 4 MB */
129 	{ 0xd6, 23, 9, 4, 10, 2},	/* 8 MB */
130 	{ 0x57, 24, 9, 4, 11, 2},	/* 16 MB */
131 	{ 0x58, 25, 9, 4, 12, 2},	/* 32 MB */
132 	{ 0,}
133 };
134 
135 static struct nand_flash_dev *
136 nand_find_id(unsigned char id) {
137 	int i;
138 
139 	for (i = 0; i < ARRAY_SIZE(nand_flash_ids); i++)
140 		if (nand_flash_ids[i].model_id == id)
141 			return &(nand_flash_ids[i]);
142 	return NULL;
143 }
144 
145 /*
146  * ECC computation.
147  */
148 static unsigned char parity[256];
149 static unsigned char ecc2[256];
150 
151 static void nand_init_ecc(void) {
152 	int i, j, a;
153 
154 	parity[0] = 0;
155 	for (i = 1; i < 256; i++)
156 		parity[i] = (parity[i&(i-1)] ^ 1);
157 
158 	for (i = 0; i < 256; i++) {
159 		a = 0;
160 		for (j = 0; j < 8; j++) {
161 			if (i & (1<<j)) {
162 				if ((j & 1) == 0)
163 					a ^= 0x04;
164 				if ((j & 2) == 0)
165 					a ^= 0x10;
166 				if ((j & 4) == 0)
167 					a ^= 0x40;
168 			}
169 		}
170 		ecc2[i] = ~(a ^ (a<<1) ^ (parity[i] ? 0xa8 : 0));
171 	}
172 }
173 
174 /* compute 3-byte ecc on 256 bytes */
175 static void nand_compute_ecc(unsigned char *data, unsigned char *ecc) {
176 	int i, j, a;
177 	unsigned char par, bit, bits[8];
178 
179 	par = 0;
180 	for (j = 0; j < 8; j++)
181 		bits[j] = 0;
182 
183 	/* collect 16 checksum bits */
184 	for (i = 0; i < 256; i++) {
185 		par ^= data[i];
186 		bit = parity[data[i]];
187 		for (j = 0; j < 8; j++)
188 			if ((i & (1<<j)) == 0)
189 				bits[j] ^= bit;
190 	}
191 
192 	/* put 4+4+4 = 12 bits in the ecc */
193 	a = (bits[3] << 6) + (bits[2] << 4) + (bits[1] << 2) + bits[0];
194 	ecc[0] = ~(a ^ (a<<1) ^ (parity[par] ? 0xaa : 0));
195 
196 	a = (bits[7] << 6) + (bits[6] << 4) + (bits[5] << 2) + bits[4];
197 	ecc[1] = ~(a ^ (a<<1) ^ (parity[par] ? 0xaa : 0));
198 
199 	ecc[2] = ecc2[par];
200 }
201 
202 static int nand_compare_ecc(unsigned char *data, unsigned char *ecc) {
203 	return (data[0] == ecc[0] && data[1] == ecc[1] && data[2] == ecc[2]);
204 }
205 
206 static void nand_store_ecc(unsigned char *data, unsigned char *ecc) {
207 	memcpy(data, ecc, 3);
208 }
209 
210 /*
211  * The actual driver starts here.
212  */
213 
214 struct sddr09_card_info {
215 	unsigned long	capacity;	/* Size of card in bytes */
216 	int		pagesize;	/* Size of page in bytes */
217 	int		pageshift;	/* log2 of pagesize */
218 	int		blocksize;	/* Size of block in pages */
219 	int		blockshift;	/* log2 of blocksize */
220 	int		blockmask;	/* 2^blockshift - 1 */
221 	int		*lba_to_pba;	/* logical to physical map */
222 	int		*pba_to_lba;	/* physical to logical map */
223 	int		lbact;		/* number of available pages */
224 	int		flags;
225 #define	SDDR09_WP	1		/* write protected */
226 };
227 
228 /*
229  * On my 16MB card, control blocks have size 64 (16 real control bytes,
230  * and 48 junk bytes). In reality of course the card uses 16 control bytes,
231  * so the reader makes up the remaining 48. Don't know whether these numbers
232  * depend on the card. For now a constant.
233  */
234 #define CONTROL_SHIFT 6
235 
236 /*
237  * On my Combo CF/SM reader, the SM reader has LUN 1.
238  * (and things fail with LUN 0).
239  * It seems LUN is irrelevant for others.
240  */
241 #define LUN	1
242 #define	LUNBITS	(LUN << 5)
243 
244 /*
245  * LBA and PBA are unsigned ints. Special values.
246  */
247 #define UNDEF    0xffffffff
248 #define SPARE    0xfffffffe
249 #define UNUSABLE 0xfffffffd
250 
251 static const int erase_bad_lba_entries = 0;
252 
253 /* send vendor interface command (0x41) */
254 /* called for requests 0, 1, 8 */
255 static int
256 sddr09_send_command(struct us_data *us,
257 		    unsigned char request,
258 		    unsigned char direction,
259 		    unsigned char *xfer_data,
260 		    unsigned int xfer_len) {
261 	unsigned int pipe;
262 	unsigned char requesttype = (0x41 | direction);
263 	int rc;
264 
265 	// Get the receive or send control pipe number
266 
267 	if (direction == USB_DIR_IN)
268 		pipe = us->recv_ctrl_pipe;
269 	else
270 		pipe = us->send_ctrl_pipe;
271 
272 	rc = usb_stor_ctrl_transfer(us, pipe, request, requesttype,
273 				   0, 0, xfer_data, xfer_len);
274 	switch (rc) {
275 		case USB_STOR_XFER_GOOD:	return 0;
276 		case USB_STOR_XFER_STALLED:	return -EPIPE;
277 		default:			return -EIO;
278 	}
279 }
280 
281 static int
282 sddr09_send_scsi_command(struct us_data *us,
283 			 unsigned char *command,
284 			 unsigned int command_len) {
285 	return sddr09_send_command(us, 0, USB_DIR_OUT, command, command_len);
286 }
287 
288 #if 0
289 /*
290  * Test Unit Ready Command: 12 bytes.
291  * byte 0: opcode: 00
292  */
293 static int
294 sddr09_test_unit_ready(struct us_data *us) {
295 	unsigned char *command = us->iobuf;
296 	int result;
297 
298 	memset(command, 0, 6);
299 	command[1] = LUNBITS;
300 
301 	result = sddr09_send_scsi_command(us, command, 6);
302 
303 	US_DEBUGP("sddr09_test_unit_ready returns %d\n", result);
304 
305 	return result;
306 }
307 #endif
308 
309 /*
310  * Request Sense Command: 12 bytes.
311  * byte 0: opcode: 03
312  * byte 4: data length
313  */
314 static int
315 sddr09_request_sense(struct us_data *us, unsigned char *sensebuf, int buflen) {
316 	unsigned char *command = us->iobuf;
317 	int result;
318 
319 	memset(command, 0, 12);
320 	command[0] = 0x03;
321 	command[1] = LUNBITS;
322 	command[4] = buflen;
323 
324 	result = sddr09_send_scsi_command(us, command, 12);
325 	if (result)
326 		return result;
327 
328 	result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
329 			sensebuf, buflen, NULL);
330 	return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
331 }
332 
333 /*
334  * Read Command: 12 bytes.
335  * byte 0: opcode: E8
336  * byte 1: last two bits: 00: read data, 01: read blockwise control,
337  *			10: read both, 11: read pagewise control.
338  *	 It turns out we need values 20, 21, 22, 23 here (LUN 1).
339  * bytes 2-5: address (interpretation depends on byte 1, see below)
340  * bytes 10-11: count (idem)
341  *
342  * A page has 512 data bytes and 64 control bytes (16 control and 48 junk).
343  * A read data command gets data in 512-byte pages.
344  * A read control command gets control in 64-byte chunks.
345  * A read both command gets data+control in 576-byte chunks.
346  *
347  * Blocks are groups of 32 pages, and read blockwise control jumps to the
348  * next block, while read pagewise control jumps to the next page after
349  * reading a group of 64 control bytes.
350  * [Here 512 = 1<<pageshift, 32 = 1<<blockshift, 64 is constant?]
351  *
352  * (1 MB and 2 MB cards are a bit different, but I have only a 16 MB card.)
353  */
354 
355 static int
356 sddr09_readX(struct us_data *us, int x, unsigned long fromaddress,
357 	     int nr_of_pages, int bulklen, unsigned char *buf,
358 	     int use_sg) {
359 
360 	unsigned char *command = us->iobuf;
361 	int result;
362 
363 	command[0] = 0xE8;
364 	command[1] = LUNBITS | x;
365 	command[2] = MSB_of(fromaddress>>16);
366 	command[3] = LSB_of(fromaddress>>16);
367 	command[4] = MSB_of(fromaddress & 0xFFFF);
368 	command[5] = LSB_of(fromaddress & 0xFFFF);
369 	command[6] = 0;
370 	command[7] = 0;
371 	command[8] = 0;
372 	command[9] = 0;
373 	command[10] = MSB_of(nr_of_pages);
374 	command[11] = LSB_of(nr_of_pages);
375 
376 	result = sddr09_send_scsi_command(us, command, 12);
377 
378 	if (result) {
379 		US_DEBUGP("Result for send_control in sddr09_read2%d %d\n",
380 			  x, result);
381 		return result;
382 	}
383 
384 	result = usb_stor_bulk_transfer_sg(us, us->recv_bulk_pipe,
385 				       buf, bulklen, use_sg, NULL);
386 
387 	if (result != USB_STOR_XFER_GOOD) {
388 		US_DEBUGP("Result for bulk_transfer in sddr09_read2%d %d\n",
389 			  x, result);
390 		return -EIO;
391 	}
392 	return 0;
393 }
394 
395 /*
396  * Read Data
397  *
398  * fromaddress counts data shorts:
399  * increasing it by 256 shifts the bytestream by 512 bytes;
400  * the last 8 bits are ignored.
401  *
402  * nr_of_pages counts pages of size (1 << pageshift).
403  */
404 static int
405 sddr09_read20(struct us_data *us, unsigned long fromaddress,
406 	      int nr_of_pages, int pageshift, unsigned char *buf, int use_sg) {
407 	int bulklen = nr_of_pages << pageshift;
408 
409 	/* The last 8 bits of fromaddress are ignored. */
410 	return sddr09_readX(us, 0, fromaddress, nr_of_pages, bulklen,
411 			    buf, use_sg);
412 }
413 
414 /*
415  * Read Blockwise Control
416  *
417  * fromaddress gives the starting position (as in read data;
418  * the last 8 bits are ignored); increasing it by 32*256 shifts
419  * the output stream by 64 bytes.
420  *
421  * count counts control groups of size (1 << controlshift).
422  * For me, controlshift = 6. Is this constant?
423  *
424  * After getting one control group, jump to the next block
425  * (fromaddress += 8192).
426  */
427 static int
428 sddr09_read21(struct us_data *us, unsigned long fromaddress,
429 	      int count, int controlshift, unsigned char *buf, int use_sg) {
430 
431 	int bulklen = (count << controlshift);
432 	return sddr09_readX(us, 1, fromaddress, count, bulklen,
433 			    buf, use_sg);
434 }
435 
436 /*
437  * Read both Data and Control
438  *
439  * fromaddress counts data shorts, ignoring control:
440  * increasing it by 256 shifts the bytestream by 576 = 512+64 bytes;
441  * the last 8 bits are ignored.
442  *
443  * nr_of_pages counts pages of size (1 << pageshift) + (1 << controlshift).
444  */
445 static int
446 sddr09_read22(struct us_data *us, unsigned long fromaddress,
447 	      int nr_of_pages, int pageshift, unsigned char *buf, int use_sg) {
448 
449 	int bulklen = (nr_of_pages << pageshift) + (nr_of_pages << CONTROL_SHIFT);
450 	US_DEBUGP("sddr09_read22: reading %d pages, %d bytes\n",
451 		  nr_of_pages, bulklen);
452 	return sddr09_readX(us, 2, fromaddress, nr_of_pages, bulklen,
453 			    buf, use_sg);
454 }
455 
456 #if 0
457 /*
458  * Read Pagewise Control
459  *
460  * fromaddress gives the starting position (as in read data;
461  * the last 8 bits are ignored); increasing it by 256 shifts
462  * the output stream by 64 bytes.
463  *
464  * count counts control groups of size (1 << controlshift).
465  * For me, controlshift = 6. Is this constant?
466  *
467  * After getting one control group, jump to the next page
468  * (fromaddress += 256).
469  */
470 static int
471 sddr09_read23(struct us_data *us, unsigned long fromaddress,
472 	      int count, int controlshift, unsigned char *buf, int use_sg) {
473 
474 	int bulklen = (count << controlshift);
475 	return sddr09_readX(us, 3, fromaddress, count, bulklen,
476 			    buf, use_sg);
477 }
478 #endif
479 
480 /*
481  * Erase Command: 12 bytes.
482  * byte 0: opcode: EA
483  * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
484  *
485  * Always precisely one block is erased; bytes 2-5 and 10-11 are ignored.
486  * The byte address being erased is 2*Eaddress.
487  * The CIS cannot be erased.
488  */
489 static int
490 sddr09_erase(struct us_data *us, unsigned long Eaddress) {
491 	unsigned char *command = us->iobuf;
492 	int result;
493 
494 	US_DEBUGP("sddr09_erase: erase address %lu\n", Eaddress);
495 
496 	memset(command, 0, 12);
497 	command[0] = 0xEA;
498 	command[1] = LUNBITS;
499 	command[6] = MSB_of(Eaddress>>16);
500 	command[7] = LSB_of(Eaddress>>16);
501 	command[8] = MSB_of(Eaddress & 0xFFFF);
502 	command[9] = LSB_of(Eaddress & 0xFFFF);
503 
504 	result = sddr09_send_scsi_command(us, command, 12);
505 
506 	if (result)
507 		US_DEBUGP("Result for send_control in sddr09_erase %d\n",
508 			  result);
509 
510 	return result;
511 }
512 
513 /*
514  * Write CIS Command: 12 bytes.
515  * byte 0: opcode: EE
516  * bytes 2-5: write address in shorts
517  * bytes 10-11: sector count
518  *
519  * This writes at the indicated address. Don't know how it differs
520  * from E9. Maybe it does not erase? However, it will also write to
521  * the CIS.
522  *
523  * When two such commands on the same page follow each other directly,
524  * the second one is not done.
525  */
526 
527 /*
528  * Write Command: 12 bytes.
529  * byte 0: opcode: E9
530  * bytes 2-5: write address (big-endian, counting shorts, sector aligned).
531  * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
532  * bytes 10-11: sector count (big-endian, in 512-byte sectors).
533  *
534  * If write address equals erase address, the erase is done first,
535  * otherwise the write is done first. When erase address equals zero
536  * no erase is done?
537  */
538 static int
539 sddr09_writeX(struct us_data *us,
540 	      unsigned long Waddress, unsigned long Eaddress,
541 	      int nr_of_pages, int bulklen, unsigned char *buf, int use_sg) {
542 
543 	unsigned char *command = us->iobuf;
544 	int result;
545 
546 	command[0] = 0xE9;
547 	command[1] = LUNBITS;
548 
549 	command[2] = MSB_of(Waddress>>16);
550 	command[3] = LSB_of(Waddress>>16);
551 	command[4] = MSB_of(Waddress & 0xFFFF);
552 	command[5] = LSB_of(Waddress & 0xFFFF);
553 
554 	command[6] = MSB_of(Eaddress>>16);
555 	command[7] = LSB_of(Eaddress>>16);
556 	command[8] = MSB_of(Eaddress & 0xFFFF);
557 	command[9] = LSB_of(Eaddress & 0xFFFF);
558 
559 	command[10] = MSB_of(nr_of_pages);
560 	command[11] = LSB_of(nr_of_pages);
561 
562 	result = sddr09_send_scsi_command(us, command, 12);
563 
564 	if (result) {
565 		US_DEBUGP("Result for send_control in sddr09_writeX %d\n",
566 			  result);
567 		return result;
568 	}
569 
570 	result = usb_stor_bulk_transfer_sg(us, us->send_bulk_pipe,
571 				       buf, bulklen, use_sg, NULL);
572 
573 	if (result != USB_STOR_XFER_GOOD) {
574 		US_DEBUGP("Result for bulk_transfer in sddr09_writeX %d\n",
575 			  result);
576 		return -EIO;
577 	}
578 	return 0;
579 }
580 
581 /* erase address, write same address */
582 static int
583 sddr09_write_inplace(struct us_data *us, unsigned long address,
584 		     int nr_of_pages, int pageshift, unsigned char *buf,
585 		     int use_sg) {
586 	int bulklen = (nr_of_pages << pageshift) + (nr_of_pages << CONTROL_SHIFT);
587 	return sddr09_writeX(us, address, address, nr_of_pages, bulklen,
588 			     buf, use_sg);
589 }
590 
591 #if 0
592 /*
593  * Read Scatter Gather Command: 3+4n bytes.
594  * byte 0: opcode E7
595  * byte 2: n
596  * bytes 4i-1,4i,4i+1: page address
597  * byte 4i+2: page count
598  * (i=1..n)
599  *
600  * This reads several pages from the card to a single memory buffer.
601  * The last two bits of byte 1 have the same meaning as for E8.
602  */
603 static int
604 sddr09_read_sg_test_only(struct us_data *us) {
605 	unsigned char *command = us->iobuf;
606 	int result, bulklen, nsg, ct;
607 	unsigned char *buf;
608 	unsigned long address;
609 
610 	nsg = bulklen = 0;
611 	command[0] = 0xE7;
612 	command[1] = LUNBITS;
613 	command[2] = 0;
614 	address = 040000; ct = 1;
615 	nsg++;
616 	bulklen += (ct << 9);
617 	command[4*nsg+2] = ct;
618 	command[4*nsg+1] = ((address >> 9) & 0xFF);
619 	command[4*nsg+0] = ((address >> 17) & 0xFF);
620 	command[4*nsg-1] = ((address >> 25) & 0xFF);
621 
622 	address = 0340000; ct = 1;
623 	nsg++;
624 	bulklen += (ct << 9);
625 	command[4*nsg+2] = ct;
626 	command[4*nsg+1] = ((address >> 9) & 0xFF);
627 	command[4*nsg+0] = ((address >> 17) & 0xFF);
628 	command[4*nsg-1] = ((address >> 25) & 0xFF);
629 
630 	address = 01000000; ct = 2;
631 	nsg++;
632 	bulklen += (ct << 9);
633 	command[4*nsg+2] = ct;
634 	command[4*nsg+1] = ((address >> 9) & 0xFF);
635 	command[4*nsg+0] = ((address >> 17) & 0xFF);
636 	command[4*nsg-1] = ((address >> 25) & 0xFF);
637 
638 	command[2] = nsg;
639 
640 	result = sddr09_send_scsi_command(us, command, 4*nsg+3);
641 
642 	if (result) {
643 		US_DEBUGP("Result for send_control in sddr09_read_sg %d\n",
644 			  result);
645 		return result;
646 	}
647 
648 	buf = kmalloc(bulklen, GFP_NOIO);
649 	if (!buf)
650 		return -ENOMEM;
651 
652 	result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
653 				       buf, bulklen, NULL);
654 	kfree(buf);
655 	if (result != USB_STOR_XFER_GOOD) {
656 		US_DEBUGP("Result for bulk_transfer in sddr09_read_sg %d\n",
657 			  result);
658 		return -EIO;
659 	}
660 
661 	return 0;
662 }
663 #endif
664 
665 /*
666  * Read Status Command: 12 bytes.
667  * byte 0: opcode: EC
668  *
669  * Returns 64 bytes, all zero except for the first.
670  * bit 0: 1: Error
671  * bit 5: 1: Suspended
672  * bit 6: 1: Ready
673  * bit 7: 1: Not write-protected
674  */
675 
676 static int
677 sddr09_read_status(struct us_data *us, unsigned char *status) {
678 
679 	unsigned char *command = us->iobuf;
680 	unsigned char *data = us->iobuf;
681 	int result;
682 
683 	US_DEBUGP("Reading status...\n");
684 
685 	memset(command, 0, 12);
686 	command[0] = 0xEC;
687 	command[1] = LUNBITS;
688 
689 	result = sddr09_send_scsi_command(us, command, 12);
690 	if (result)
691 		return result;
692 
693 	result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
694 				       data, 64, NULL);
695 	*status = data[0];
696 	return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
697 }
698 
699 static int
700 sddr09_read_data(struct us_data *us,
701 		 unsigned long address,
702 		 unsigned int sectors) {
703 
704 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
705 	unsigned char *buffer;
706 	unsigned int lba, maxlba, pba;
707 	unsigned int page, pages;
708 	unsigned int len, index, offset;
709 	int result;
710 
711 	// Figure out the initial LBA and page
712 	lba = address >> info->blockshift;
713 	page = (address & info->blockmask);
714 	maxlba = info->capacity >> (info->pageshift + info->blockshift);
715 	if (lba >= maxlba)
716 		return -EIO;
717 
718 	// Since we only read in one block at a time, we have to create
719 	// a bounce buffer and move the data a piece at a time between the
720 	// bounce buffer and the actual transfer buffer.
721 
722 	len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
723 	buffer = kmalloc(len, GFP_NOIO);
724 	if (buffer == NULL) {
725 		printk("sddr09_read_data: Out of memory\n");
726 		return -ENOMEM;
727 	}
728 
729 	// This could be made much more efficient by checking for
730 	// contiguous LBA's. Another exercise left to the student.
731 
732 	result = 0;
733 	index = offset = 0;
734 
735 	while (sectors > 0) {
736 
737 		/* Find number of pages we can read in this block */
738 		pages = min(sectors, info->blocksize - page);
739 		len = pages << info->pageshift;
740 
741 		/* Not overflowing capacity? */
742 		if (lba >= maxlba) {
743 			US_DEBUGP("Error: Requested lba %u exceeds "
744 				  "maximum %u\n", lba, maxlba);
745 			result = -EIO;
746 			break;
747 		}
748 
749 		/* Find where this lba lives on disk */
750 		pba = info->lba_to_pba[lba];
751 
752 		if (pba == UNDEF) {	/* this lba was never written */
753 
754 			US_DEBUGP("Read %d zero pages (LBA %d) page %d\n",
755 				  pages, lba, page);
756 
757 			/* This is not really an error. It just means
758 			   that the block has never been written.
759 			   Instead of returning an error
760 			   it is better to return all zero data. */
761 
762 			memset(buffer, 0, len);
763 
764 		} else {
765 			US_DEBUGP("Read %d pages, from PBA %d"
766 				  " (LBA %d) page %d\n",
767 				  pages, pba, lba, page);
768 
769 			address = ((pba << info->blockshift) + page) <<
770 				info->pageshift;
771 
772 			result = sddr09_read20(us, address>>1,
773 					pages, info->pageshift, buffer, 0);
774 			if (result)
775 				break;
776 		}
777 
778 		// Store the data in the transfer buffer
779 		usb_stor_access_xfer_buf(buffer, len, us->srb,
780 				&index, &offset, TO_XFER_BUF);
781 
782 		page = 0;
783 		lba++;
784 		sectors -= pages;
785 	}
786 
787 	kfree(buffer);
788 	return result;
789 }
790 
791 static unsigned int
792 sddr09_find_unused_pba(struct sddr09_card_info *info, unsigned int lba) {
793 	static unsigned int lastpba = 1;
794 	int zonestart, end, i;
795 
796 	zonestart = (lba/1000) << 10;
797 	end = info->capacity >> (info->blockshift + info->pageshift);
798 	end -= zonestart;
799 	if (end > 1024)
800 		end = 1024;
801 
802 	for (i = lastpba+1; i < end; i++) {
803 		if (info->pba_to_lba[zonestart+i] == UNDEF) {
804 			lastpba = i;
805 			return zonestart+i;
806 		}
807 	}
808 	for (i = 0; i <= lastpba; i++) {
809 		if (info->pba_to_lba[zonestart+i] == UNDEF) {
810 			lastpba = i;
811 			return zonestart+i;
812 		}
813 	}
814 	return 0;
815 }
816 
817 static int
818 sddr09_write_lba(struct us_data *us, unsigned int lba,
819 		 unsigned int page, unsigned int pages,
820 		 unsigned char *ptr, unsigned char *blockbuffer) {
821 
822 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
823 	unsigned long address;
824 	unsigned int pba, lbap;
825 	unsigned int pagelen;
826 	unsigned char *bptr, *cptr, *xptr;
827 	unsigned char ecc[3];
828 	int i, result, isnew;
829 
830 	lbap = ((lba % 1000) << 1) | 0x1000;
831 	if (parity[MSB_of(lbap) ^ LSB_of(lbap)])
832 		lbap ^= 1;
833 	pba = info->lba_to_pba[lba];
834 	isnew = 0;
835 
836 	if (pba == UNDEF) {
837 		pba = sddr09_find_unused_pba(info, lba);
838 		if (!pba) {
839 			printk("sddr09_write_lba: Out of unused blocks\n");
840 			return -ENOSPC;
841 		}
842 		info->pba_to_lba[pba] = lba;
843 		info->lba_to_pba[lba] = pba;
844 		isnew = 1;
845 	}
846 
847 	if (pba == 1) {
848 		/* Maybe it is impossible to write to PBA 1.
849 		   Fake success, but don't do anything. */
850 		printk("sddr09: avoid writing to pba 1\n");
851 		return 0;
852 	}
853 
854 	pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
855 
856 	/* read old contents */
857 	address = (pba << (info->pageshift + info->blockshift));
858 	result = sddr09_read22(us, address>>1, info->blocksize,
859 			       info->pageshift, blockbuffer, 0);
860 	if (result)
861 		return result;
862 
863 	/* check old contents and fill lba */
864 	for (i = 0; i < info->blocksize; i++) {
865 		bptr = blockbuffer + i*pagelen;
866 		cptr = bptr + info->pagesize;
867 		nand_compute_ecc(bptr, ecc);
868 		if (!nand_compare_ecc(cptr+13, ecc)) {
869 			US_DEBUGP("Warning: bad ecc in page %d- of pba %d\n",
870 				  i, pba);
871 			nand_store_ecc(cptr+13, ecc);
872 		}
873 		nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
874 		if (!nand_compare_ecc(cptr+8, ecc)) {
875 			US_DEBUGP("Warning: bad ecc in page %d+ of pba %d\n",
876 				  i, pba);
877 			nand_store_ecc(cptr+8, ecc);
878 		}
879 		cptr[6] = cptr[11] = MSB_of(lbap);
880 		cptr[7] = cptr[12] = LSB_of(lbap);
881 	}
882 
883 	/* copy in new stuff and compute ECC */
884 	xptr = ptr;
885 	for (i = page; i < page+pages; i++) {
886 		bptr = blockbuffer + i*pagelen;
887 		cptr = bptr + info->pagesize;
888 		memcpy(bptr, xptr, info->pagesize);
889 		xptr += info->pagesize;
890 		nand_compute_ecc(bptr, ecc);
891 		nand_store_ecc(cptr+13, ecc);
892 		nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
893 		nand_store_ecc(cptr+8, ecc);
894 	}
895 
896 	US_DEBUGP("Rewrite PBA %d (LBA %d)\n", pba, lba);
897 
898 	result = sddr09_write_inplace(us, address>>1, info->blocksize,
899 				      info->pageshift, blockbuffer, 0);
900 
901 	US_DEBUGP("sddr09_write_inplace returns %d\n", result);
902 
903 #if 0
904 	{
905 		unsigned char status = 0;
906 		int result2 = sddr09_read_status(us, &status);
907 		if (result2)
908 			US_DEBUGP("sddr09_write_inplace: cannot read status\n");
909 		else if (status != 0xc0)
910 			US_DEBUGP("sddr09_write_inplace: status after write: 0x%x\n",
911 				  status);
912 	}
913 #endif
914 
915 #if 0
916 	{
917 		int result2 = sddr09_test_unit_ready(us);
918 	}
919 #endif
920 
921 	return result;
922 }
923 
924 static int
925 sddr09_write_data(struct us_data *us,
926 		  unsigned long address,
927 		  unsigned int sectors) {
928 
929 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
930 	unsigned int lba, maxlba, page, pages;
931 	unsigned int pagelen, blocklen;
932 	unsigned char *blockbuffer;
933 	unsigned char *buffer;
934 	unsigned int len, index, offset;
935 	int result;
936 
937 	// Figure out the initial LBA and page
938 	lba = address >> info->blockshift;
939 	page = (address & info->blockmask);
940 	maxlba = info->capacity >> (info->pageshift + info->blockshift);
941 	if (lba >= maxlba)
942 		return -EIO;
943 
944 	// blockbuffer is used for reading in the old data, overwriting
945 	// with the new data, and performing ECC calculations
946 
947 	/* TODO: instead of doing kmalloc/kfree for each write,
948 	   add a bufferpointer to the info structure */
949 
950 	pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
951 	blocklen = (pagelen << info->blockshift);
952 	blockbuffer = kmalloc(blocklen, GFP_NOIO);
953 	if (!blockbuffer) {
954 		printk("sddr09_write_data: Out of memory\n");
955 		return -ENOMEM;
956 	}
957 
958 	// Since we don't write the user data directly to the device,
959 	// we have to create a bounce buffer and move the data a piece
960 	// at a time between the bounce buffer and the actual transfer buffer.
961 
962 	len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
963 	buffer = kmalloc(len, GFP_NOIO);
964 	if (buffer == NULL) {
965 		printk("sddr09_write_data: Out of memory\n");
966 		kfree(blockbuffer);
967 		return -ENOMEM;
968 	}
969 
970 	result = 0;
971 	index = offset = 0;
972 
973 	while (sectors > 0) {
974 
975 		// Write as many sectors as possible in this block
976 
977 		pages = min(sectors, info->blocksize - page);
978 		len = (pages << info->pageshift);
979 
980 		/* Not overflowing capacity? */
981 		if (lba >= maxlba) {
982 			US_DEBUGP("Error: Requested lba %u exceeds "
983 				  "maximum %u\n", lba, maxlba);
984 			result = -EIO;
985 			break;
986 		}
987 
988 		// Get the data from the transfer buffer
989 		usb_stor_access_xfer_buf(buffer, len, us->srb,
990 				&index, &offset, FROM_XFER_BUF);
991 
992 		result = sddr09_write_lba(us, lba, page, pages,
993 				buffer, blockbuffer);
994 		if (result)
995 			break;
996 
997 		page = 0;
998 		lba++;
999 		sectors -= pages;
1000 	}
1001 
1002 	kfree(buffer);
1003 	kfree(blockbuffer);
1004 
1005 	return result;
1006 }
1007 
1008 static int
1009 sddr09_read_control(struct us_data *us,
1010 		unsigned long address,
1011 		unsigned int blocks,
1012 		unsigned char *content,
1013 		int use_sg) {
1014 
1015 	US_DEBUGP("Read control address %lu, blocks %d\n",
1016 		address, blocks);
1017 
1018 	return sddr09_read21(us, address, blocks,
1019 			     CONTROL_SHIFT, content, use_sg);
1020 }
1021 
1022 /*
1023  * Read Device ID Command: 12 bytes.
1024  * byte 0: opcode: ED
1025  *
1026  * Returns 2 bytes: Manufacturer ID and Device ID.
1027  * On more recent cards 3 bytes: the third byte is an option code A5
1028  * signifying that the secret command to read an 128-bit ID is available.
1029  * On still more recent cards 4 bytes: the fourth byte C0 means that
1030  * a second read ID cmd is available.
1031  */
1032 static int
1033 sddr09_read_deviceID(struct us_data *us, unsigned char *deviceID) {
1034 	unsigned char *command = us->iobuf;
1035 	unsigned char *content = us->iobuf;
1036 	int result, i;
1037 
1038 	memset(command, 0, 12);
1039 	command[0] = 0xED;
1040 	command[1] = LUNBITS;
1041 
1042 	result = sddr09_send_scsi_command(us, command, 12);
1043 	if (result)
1044 		return result;
1045 
1046 	result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
1047 			content, 64, NULL);
1048 
1049 	for (i = 0; i < 4; i++)
1050 		deviceID[i] = content[i];
1051 
1052 	return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
1053 }
1054 
1055 static int
1056 sddr09_get_wp(struct us_data *us, struct sddr09_card_info *info) {
1057 	int result;
1058 	unsigned char status;
1059 
1060 	result = sddr09_read_status(us, &status);
1061 	if (result) {
1062 		US_DEBUGP("sddr09_get_wp: read_status fails\n");
1063 		return result;
1064 	}
1065 	US_DEBUGP("sddr09_get_wp: status 0x%02X", status);
1066 	if ((status & 0x80) == 0) {
1067 		info->flags |= SDDR09_WP;	/* write protected */
1068 		US_DEBUGP(" WP");
1069 	}
1070 	if (status & 0x40)
1071 		US_DEBUGP(" Ready");
1072 	if (status & LUNBITS)
1073 		US_DEBUGP(" Suspended");
1074 	if (status & 0x1)
1075 		US_DEBUGP(" Error");
1076 	US_DEBUGP("\n");
1077 	return 0;
1078 }
1079 
1080 #if 0
1081 /*
1082  * Reset Command: 12 bytes.
1083  * byte 0: opcode: EB
1084  */
1085 static int
1086 sddr09_reset(struct us_data *us) {
1087 
1088 	unsigned char *command = us->iobuf;
1089 
1090 	memset(command, 0, 12);
1091 	command[0] = 0xEB;
1092 	command[1] = LUNBITS;
1093 
1094 	return sddr09_send_scsi_command(us, command, 12);
1095 }
1096 #endif
1097 
1098 static struct nand_flash_dev *
1099 sddr09_get_cardinfo(struct us_data *us, unsigned char flags) {
1100 	struct nand_flash_dev *cardinfo;
1101 	unsigned char deviceID[4];
1102 	char blurbtxt[256];
1103 	int result;
1104 
1105 	US_DEBUGP("Reading capacity...\n");
1106 
1107 	result = sddr09_read_deviceID(us, deviceID);
1108 
1109 	if (result) {
1110 		US_DEBUGP("Result of read_deviceID is %d\n", result);
1111 		printk("sddr09: could not read card info\n");
1112 		return NULL;
1113 	}
1114 
1115 	sprintf(blurbtxt, "sddr09: Found Flash card, ID = %02X %02X %02X %02X",
1116 		deviceID[0], deviceID[1], deviceID[2], deviceID[3]);
1117 
1118 	/* Byte 0 is the manufacturer */
1119 	sprintf(blurbtxt + strlen(blurbtxt),
1120 		": Manuf. %s",
1121 		nand_flash_manufacturer(deviceID[0]));
1122 
1123 	/* Byte 1 is the device type */
1124 	cardinfo = nand_find_id(deviceID[1]);
1125 	if (cardinfo) {
1126 		/* MB or MiB? It is neither. A 16 MB card has
1127 		   17301504 raw bytes, of which 16384000 are
1128 		   usable for user data. */
1129 		sprintf(blurbtxt + strlen(blurbtxt),
1130 			", %d MB", 1<<(cardinfo->chipshift - 20));
1131 	} else {
1132 		sprintf(blurbtxt + strlen(blurbtxt),
1133 			", type unrecognized");
1134 	}
1135 
1136 	/* Byte 2 is code to signal availability of 128-bit ID */
1137 	if (deviceID[2] == 0xa5) {
1138 		sprintf(blurbtxt + strlen(blurbtxt),
1139 			", 128-bit ID");
1140 	}
1141 
1142 	/* Byte 3 announces the availability of another read ID command */
1143 	if (deviceID[3] == 0xc0) {
1144 		sprintf(blurbtxt + strlen(blurbtxt),
1145 			", extra cmd");
1146 	}
1147 
1148 	if (flags & SDDR09_WP)
1149 		sprintf(blurbtxt + strlen(blurbtxt),
1150 			", WP");
1151 
1152 	printk("%s\n", blurbtxt);
1153 
1154 	return cardinfo;
1155 }
1156 
1157 static int
1158 sddr09_read_map(struct us_data *us) {
1159 
1160 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
1161 	int numblocks, alloc_len, alloc_blocks;
1162 	int i, j, result;
1163 	unsigned char *buffer, *buffer_end, *ptr;
1164 	unsigned int lba, lbact;
1165 
1166 	if (!info->capacity)
1167 		return -1;
1168 
1169 	// size of a block is 1 << (blockshift + pageshift) bytes
1170 	// divide into the total capacity to get the number of blocks
1171 
1172 	numblocks = info->capacity >> (info->blockshift + info->pageshift);
1173 
1174 	// read 64 bytes for every block (actually 1 << CONTROL_SHIFT)
1175 	// but only use a 64 KB buffer
1176 	// buffer size used must be a multiple of (1 << CONTROL_SHIFT)
1177 #define SDDR09_READ_MAP_BUFSZ 65536
1178 
1179 	alloc_blocks = min(numblocks, SDDR09_READ_MAP_BUFSZ >> CONTROL_SHIFT);
1180 	alloc_len = (alloc_blocks << CONTROL_SHIFT);
1181 	buffer = kmalloc(alloc_len, GFP_NOIO);
1182 	if (buffer == NULL) {
1183 		printk("sddr09_read_map: out of memory\n");
1184 		result = -1;
1185 		goto done;
1186 	}
1187 	buffer_end = buffer + alloc_len;
1188 
1189 #undef SDDR09_READ_MAP_BUFSZ
1190 
1191 	kfree(info->lba_to_pba);
1192 	kfree(info->pba_to_lba);
1193 	info->lba_to_pba = kmalloc(numblocks*sizeof(int), GFP_NOIO);
1194 	info->pba_to_lba = kmalloc(numblocks*sizeof(int), GFP_NOIO);
1195 
1196 	if (info->lba_to_pba == NULL || info->pba_to_lba == NULL) {
1197 		printk("sddr09_read_map: out of memory\n");
1198 		result = -1;
1199 		goto done;
1200 	}
1201 
1202 	for (i = 0; i < numblocks; i++)
1203 		info->lba_to_pba[i] = info->pba_to_lba[i] = UNDEF;
1204 
1205 	/*
1206 	 * Define lba-pba translation table
1207 	 */
1208 
1209 	ptr = buffer_end;
1210 	for (i = 0; i < numblocks; i++) {
1211 		ptr += (1 << CONTROL_SHIFT);
1212 		if (ptr >= buffer_end) {
1213 			unsigned long address;
1214 
1215 			address = i << (info->pageshift + info->blockshift);
1216 			result = sddr09_read_control(
1217 				us, address>>1,
1218 				min(alloc_blocks, numblocks - i),
1219 				buffer, 0);
1220 			if (result) {
1221 				result = -1;
1222 				goto done;
1223 			}
1224 			ptr = buffer;
1225 		}
1226 
1227 		if (i == 0 || i == 1) {
1228 			info->pba_to_lba[i] = UNUSABLE;
1229 			continue;
1230 		}
1231 
1232 		/* special PBAs have control field 0^16 */
1233 		for (j = 0; j < 16; j++)
1234 			if (ptr[j] != 0)
1235 				goto nonz;
1236 		info->pba_to_lba[i] = UNUSABLE;
1237 		printk("sddr09: PBA %d has no logical mapping\n", i);
1238 		continue;
1239 
1240 	nonz:
1241 		/* unwritten PBAs have control field FF^16 */
1242 		for (j = 0; j < 16; j++)
1243 			if (ptr[j] != 0xff)
1244 				goto nonff;
1245 		continue;
1246 
1247 	nonff:
1248 		/* normal PBAs start with six FFs */
1249 		if (j < 6) {
1250 			printk("sddr09: PBA %d has no logical mapping: "
1251 			       "reserved area = %02X%02X%02X%02X "
1252 			       "data status %02X block status %02X\n",
1253 			       i, ptr[0], ptr[1], ptr[2], ptr[3],
1254 			       ptr[4], ptr[5]);
1255 			info->pba_to_lba[i] = UNUSABLE;
1256 			continue;
1257 		}
1258 
1259 		if ((ptr[6] >> 4) != 0x01) {
1260 			printk("sddr09: PBA %d has invalid address field "
1261 			       "%02X%02X/%02X%02X\n",
1262 			       i, ptr[6], ptr[7], ptr[11], ptr[12]);
1263 			info->pba_to_lba[i] = UNUSABLE;
1264 			continue;
1265 		}
1266 
1267 		/* check even parity */
1268 		if (parity[ptr[6] ^ ptr[7]]) {
1269 			printk("sddr09: Bad parity in LBA for block %d"
1270 			       " (%02X %02X)\n", i, ptr[6], ptr[7]);
1271 			info->pba_to_lba[i] = UNUSABLE;
1272 			continue;
1273 		}
1274 
1275 		lba = short_pack(ptr[7], ptr[6]);
1276 		lba = (lba & 0x07FF) >> 1;
1277 
1278 		/*
1279 		 * Every 1024 physical blocks ("zone"), the LBA numbers
1280 		 * go back to zero, but are within a higher block of LBA's.
1281 		 * Also, there is a maximum of 1000 LBA's per zone.
1282 		 * In other words, in PBA 1024-2047 you will find LBA 0-999
1283 		 * which are really LBA 1000-1999. This allows for 24 bad
1284 		 * or special physical blocks per zone.
1285 		 */
1286 
1287 		if (lba >= 1000) {
1288 			printk("sddr09: Bad low LBA %d for block %d\n",
1289 			       lba, i);
1290 			goto possibly_erase;
1291 		}
1292 
1293 		lba += 1000*(i/0x400);
1294 
1295 		if (info->lba_to_pba[lba] != UNDEF) {
1296 			printk("sddr09: LBA %d seen for PBA %d and %d\n",
1297 			       lba, info->lba_to_pba[lba], i);
1298 			goto possibly_erase;
1299 		}
1300 
1301 		info->pba_to_lba[i] = lba;
1302 		info->lba_to_pba[lba] = i;
1303 		continue;
1304 
1305 	possibly_erase:
1306 		if (erase_bad_lba_entries) {
1307 			unsigned long address;
1308 
1309 			address = (i << (info->pageshift + info->blockshift));
1310 			sddr09_erase(us, address>>1);
1311 			info->pba_to_lba[i] = UNDEF;
1312 		} else
1313 			info->pba_to_lba[i] = UNUSABLE;
1314 	}
1315 
1316 	/*
1317 	 * Approximate capacity. This is not entirely correct yet,
1318 	 * since a zone with less than 1000 usable pages leads to
1319 	 * missing LBAs. Especially if it is the last zone, some
1320 	 * LBAs can be past capacity.
1321 	 */
1322 	lbact = 0;
1323 	for (i = 0; i < numblocks; i += 1024) {
1324 		int ct = 0;
1325 
1326 		for (j = 0; j < 1024 && i+j < numblocks; j++) {
1327 			if (info->pba_to_lba[i+j] != UNUSABLE) {
1328 				if (ct >= 1000)
1329 					info->pba_to_lba[i+j] = SPARE;
1330 				else
1331 					ct++;
1332 			}
1333 		}
1334 		lbact += ct;
1335 	}
1336 	info->lbact = lbact;
1337 	US_DEBUGP("Found %d LBA's\n", lbact);
1338 	result = 0;
1339 
1340  done:
1341 	if (result != 0) {
1342 		kfree(info->lba_to_pba);
1343 		kfree(info->pba_to_lba);
1344 		info->lba_to_pba = NULL;
1345 		info->pba_to_lba = NULL;
1346 	}
1347 	kfree(buffer);
1348 	return result;
1349 }
1350 
1351 static void
1352 sddr09_card_info_destructor(void *extra) {
1353 	struct sddr09_card_info *info = (struct sddr09_card_info *)extra;
1354 
1355 	if (!info)
1356 		return;
1357 
1358 	kfree(info->lba_to_pba);
1359 	kfree(info->pba_to_lba);
1360 }
1361 
1362 static int
1363 sddr09_common_init(struct us_data *us) {
1364 	int result;
1365 
1366 	/* set the configuration -- STALL is an acceptable response here */
1367 	if (us->pusb_dev->actconfig->desc.bConfigurationValue != 1) {
1368 		US_DEBUGP("active config #%d != 1 ??\n", us->pusb_dev
1369 				->actconfig->desc.bConfigurationValue);
1370 		return -EINVAL;
1371 	}
1372 
1373 	result = usb_reset_configuration(us->pusb_dev);
1374 	US_DEBUGP("Result of usb_reset_configuration is %d\n", result);
1375 	if (result == -EPIPE) {
1376 		US_DEBUGP("-- stall on control interface\n");
1377 	} else if (result != 0) {
1378 		/* it's not a stall, but another error -- time to bail */
1379 		US_DEBUGP("-- Unknown error.  Rejecting device\n");
1380 		return -EINVAL;
1381 	}
1382 
1383 	us->extra = kzalloc(sizeof(struct sddr09_card_info), GFP_NOIO);
1384 	if (!us->extra)
1385 		return -ENOMEM;
1386 	us->extra_destructor = sddr09_card_info_destructor;
1387 
1388 	nand_init_ecc();
1389 	return 0;
1390 }
1391 
1392 
1393 /*
1394  * This is needed at a very early stage. If this is not listed in the
1395  * unusual devices list but called from here then LUN 0 of the combo reader
1396  * is not recognized. But I do not know what precisely these calls do.
1397  */
1398 int
1399 usb_stor_sddr09_dpcm_init(struct us_data *us) {
1400 	int result;
1401 	unsigned char *data = us->iobuf;
1402 
1403 	result = sddr09_common_init(us);
1404 	if (result)
1405 		return result;
1406 
1407 	result = sddr09_send_command(us, 0x01, USB_DIR_IN, data, 2);
1408 	if (result) {
1409 		US_DEBUGP("sddr09_init: send_command fails\n");
1410 		return result;
1411 	}
1412 
1413 	US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
1414 	// get 07 02
1415 
1416 	result = sddr09_send_command(us, 0x08, USB_DIR_IN, data, 2);
1417 	if (result) {
1418 		US_DEBUGP("sddr09_init: 2nd send_command fails\n");
1419 		return result;
1420 	}
1421 
1422 	US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
1423 	// get 07 00
1424 
1425 	result = sddr09_request_sense(us, data, 18);
1426 	if (result == 0 && data[2] != 0) {
1427 		int j;
1428 		for (j=0; j<18; j++)
1429 			printk(" %02X", data[j]);
1430 		printk("\n");
1431 		// get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
1432 		// 70: current command
1433 		// sense key 0, sense code 0, extd sense code 0
1434 		// additional transfer length * = sizeof(data) - 7
1435 		// Or: 70 00 06 00 00 00 00 0b 00 00 00 00 28 00 00 00 00 00
1436 		// sense key 06, sense code 28: unit attention,
1437 		// not ready to ready transition
1438 	}
1439 
1440 	// test unit ready
1441 
1442 	return 0;		/* not result */
1443 }
1444 
1445 /*
1446  * Transport for the Sandisk SDDR-09
1447  */
1448 int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
1449 {
1450 	static unsigned char sensekey = 0, sensecode = 0;
1451 	static unsigned char havefakesense = 0;
1452 	int result, i;
1453 	unsigned char *ptr = us->iobuf;
1454 	unsigned long capacity;
1455 	unsigned int page, pages;
1456 
1457 	struct sddr09_card_info *info;
1458 
1459 	static unsigned char inquiry_response[8] = {
1460 		0x00, 0x80, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x00
1461 	};
1462 
1463 	/* note: no block descriptor support */
1464 	static unsigned char mode_page_01[19] = {
1465 		0x00, 0x0F, 0x00, 0x0, 0x0, 0x0, 0x00,
1466 		0x01, 0x0A,
1467 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1468 	};
1469 
1470 	info = (struct sddr09_card_info *)us->extra;
1471 
1472 	if (srb->cmnd[0] == REQUEST_SENSE && havefakesense) {
1473 		/* for a faked command, we have to follow with a faked sense */
1474 		memset(ptr, 0, 18);
1475 		ptr[0] = 0x70;
1476 		ptr[2] = sensekey;
1477 		ptr[7] = 11;
1478 		ptr[12] = sensecode;
1479 		usb_stor_set_xfer_buf(ptr, 18, srb);
1480 		sensekey = sensecode = havefakesense = 0;
1481 		return USB_STOR_TRANSPORT_GOOD;
1482 	}
1483 
1484 	havefakesense = 1;
1485 
1486 	/* Dummy up a response for INQUIRY since SDDR09 doesn't
1487 	   respond to INQUIRY commands */
1488 
1489 	if (srb->cmnd[0] == INQUIRY) {
1490 		memcpy(ptr, inquiry_response, 8);
1491 		fill_inquiry_response(us, ptr, 36);
1492 		return USB_STOR_TRANSPORT_GOOD;
1493 	}
1494 
1495 	if (srb->cmnd[0] == READ_CAPACITY) {
1496 		struct nand_flash_dev *cardinfo;
1497 
1498 		sddr09_get_wp(us, info);	/* read WP bit */
1499 
1500 		cardinfo = sddr09_get_cardinfo(us, info->flags);
1501 		if (!cardinfo) {
1502 			/* probably no media */
1503 		init_error:
1504 			sensekey = 0x02;	/* not ready */
1505 			sensecode = 0x3a;	/* medium not present */
1506 			return USB_STOR_TRANSPORT_FAILED;
1507 		}
1508 
1509 		info->capacity = (1 << cardinfo->chipshift);
1510 		info->pageshift = cardinfo->pageshift;
1511 		info->pagesize = (1 << info->pageshift);
1512 		info->blockshift = cardinfo->blockshift;
1513 		info->blocksize = (1 << info->blockshift);
1514 		info->blockmask = info->blocksize - 1;
1515 
1516 		// map initialization, must follow get_cardinfo()
1517 		if (sddr09_read_map(us)) {
1518 			/* probably out of memory */
1519 			goto init_error;
1520 		}
1521 
1522 		// Report capacity
1523 
1524 		capacity = (info->lbact << info->blockshift) - 1;
1525 
1526 		((__be32 *) ptr)[0] = cpu_to_be32(capacity);
1527 
1528 		// Report page size
1529 
1530 		((__be32 *) ptr)[1] = cpu_to_be32(info->pagesize);
1531 		usb_stor_set_xfer_buf(ptr, 8, srb);
1532 
1533 		return USB_STOR_TRANSPORT_GOOD;
1534 	}
1535 
1536 	if (srb->cmnd[0] == MODE_SENSE_10) {
1537 		int modepage = (srb->cmnd[2] & 0x3F);
1538 
1539 		/* They ask for the Read/Write error recovery page,
1540 		   or for all pages. */
1541 		/* %% We should check DBD %% */
1542 		if (modepage == 0x01 || modepage == 0x3F) {
1543 			US_DEBUGP("SDDR09: Dummy up request for "
1544 				  "mode page 0x%x\n", modepage);
1545 
1546 			memcpy(ptr, mode_page_01, sizeof(mode_page_01));
1547 			((__be16*)ptr)[0] = cpu_to_be16(sizeof(mode_page_01) - 2);
1548 			ptr[3] = (info->flags & SDDR09_WP) ? 0x80 : 0;
1549 			usb_stor_set_xfer_buf(ptr, sizeof(mode_page_01), srb);
1550 			return USB_STOR_TRANSPORT_GOOD;
1551 		}
1552 
1553 		sensekey = 0x05;	/* illegal request */
1554 		sensecode = 0x24;	/* invalid field in CDB */
1555 		return USB_STOR_TRANSPORT_FAILED;
1556 	}
1557 
1558 	if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL)
1559 		return USB_STOR_TRANSPORT_GOOD;
1560 
1561 	havefakesense = 0;
1562 
1563 	if (srb->cmnd[0] == READ_10) {
1564 
1565 		page = short_pack(srb->cmnd[3], srb->cmnd[2]);
1566 		page <<= 16;
1567 		page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
1568 		pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
1569 
1570 		US_DEBUGP("READ_10: read page %d pagect %d\n",
1571 			  page, pages);
1572 
1573 		result = sddr09_read_data(us, page, pages);
1574 		return (result == 0 ? USB_STOR_TRANSPORT_GOOD :
1575 				USB_STOR_TRANSPORT_ERROR);
1576 	}
1577 
1578 	if (srb->cmnd[0] == WRITE_10) {
1579 
1580 		page = short_pack(srb->cmnd[3], srb->cmnd[2]);
1581 		page <<= 16;
1582 		page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
1583 		pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
1584 
1585 		US_DEBUGP("WRITE_10: write page %d pagect %d\n",
1586 			  page, pages);
1587 
1588 		result = sddr09_write_data(us, page, pages);
1589 		return (result == 0 ? USB_STOR_TRANSPORT_GOOD :
1590 				USB_STOR_TRANSPORT_ERROR);
1591 	}
1592 
1593 	/* catch-all for all other commands, except
1594 	 * pass TEST_UNIT_READY and REQUEST_SENSE through
1595 	 */
1596 	if (srb->cmnd[0] != TEST_UNIT_READY &&
1597 	    srb->cmnd[0] != REQUEST_SENSE) {
1598 		sensekey = 0x05;	/* illegal request */
1599 		sensecode = 0x20;	/* invalid command */
1600 		havefakesense = 1;
1601 		return USB_STOR_TRANSPORT_FAILED;
1602 	}
1603 
1604 	for (; srb->cmd_len<12; srb->cmd_len++)
1605 		srb->cmnd[srb->cmd_len] = 0;
1606 
1607 	srb->cmnd[1] = LUNBITS;
1608 
1609 	ptr[0] = 0;
1610 	for (i=0; i<12; i++)
1611 		sprintf(ptr+strlen(ptr), "%02X ", srb->cmnd[i]);
1612 
1613 	US_DEBUGP("SDDR09: Send control for command %s\n", ptr);
1614 
1615 	result = sddr09_send_scsi_command(us, srb->cmnd, 12);
1616 	if (result) {
1617 		US_DEBUGP("sddr09_transport: sddr09_send_scsi_command "
1618 			  "returns %d\n", result);
1619 		return USB_STOR_TRANSPORT_ERROR;
1620 	}
1621 
1622 	if (srb->request_bufflen == 0)
1623 		return USB_STOR_TRANSPORT_GOOD;
1624 
1625 	if (srb->sc_data_direction == DMA_TO_DEVICE ||
1626 	    srb->sc_data_direction == DMA_FROM_DEVICE) {
1627 		unsigned int pipe = (srb->sc_data_direction == DMA_TO_DEVICE)
1628 				? us->send_bulk_pipe : us->recv_bulk_pipe;
1629 
1630 		US_DEBUGP("SDDR09: %s %d bytes\n",
1631 			  (srb->sc_data_direction == DMA_TO_DEVICE) ?
1632 			  "sending" : "receiving",
1633 			  srb->request_bufflen);
1634 
1635 		result = usb_stor_bulk_transfer_sg(us, pipe,
1636 					srb->request_buffer,
1637 					srb->request_bufflen,
1638 					srb->use_sg, &srb->resid);
1639 
1640 		return (result == USB_STOR_XFER_GOOD ?
1641 			USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
1642 	}
1643 
1644 	return USB_STOR_TRANSPORT_GOOD;
1645 }
1646 
1647 /*
1648  * Initialization routine for the sddr09 subdriver
1649  */
1650 int
1651 usb_stor_sddr09_init(struct us_data *us) {
1652 	return sddr09_common_init(us);
1653 }
1654