xref: /openbmc/linux/drivers/usb/storage/sddr09.c (revision 6f8aa65b52037123beab573432e371c0f70b7b9a)
1 /* Driver for SanDisk SDDR-09 SmartMedia reader
2  *
3  *   (c) 2000, 2001 Robert Baruch (autophile@starband.net)
4  *   (c) 2002 Andries Brouwer (aeb@cwi.nl)
5  * Developed with the assistance of:
6  *   (c) 2002 Alan Stern <stern@rowland.org>
7  *
8  * The SanDisk SDDR-09 SmartMedia reader uses the Shuttle EUSB-01 chip.
9  * This chip is a programmable USB controller. In the SDDR-09, it has
10  * been programmed to obey a certain limited set of SCSI commands.
11  * This driver translates the "real" SCSI commands to the SDDR-09 SCSI
12  * commands.
13  *
14  * This program is free software; you can redistribute it and/or modify it
15  * under the terms of the GNU General Public License as published by the
16  * Free Software Foundation; either version 2, or (at your option) any
17  * later version.
18  *
19  * This program is distributed in the hope that it will be useful, but
20  * WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22  * General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License along
25  * with this program; if not, write to the Free Software Foundation, Inc.,
26  * 675 Mass Ave, Cambridge, MA 02139, USA.
27  */
28 
29 /*
30  * Known vendor commands: 12 bytes, first byte is opcode
31  *
32  * E7: read scatter gather
33  * E8: read
34  * E9: write
35  * EA: erase
36  * EB: reset
37  * EC: read status
38  * ED: read ID
39  * EE: write CIS (?)
40  * EF: compute checksum (?)
41  */
42 
43 #include <linux/errno.h>
44 #include <linux/slab.h>
45 
46 #include <scsi/scsi.h>
47 #include <scsi/scsi_cmnd.h>
48 #include <scsi/scsi_device.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, offset;
709 	struct scatterlist *sg;
710 	int result;
711 
712 	// Figure out the initial LBA and page
713 	lba = address >> info->blockshift;
714 	page = (address & info->blockmask);
715 	maxlba = info->capacity >> (info->pageshift + info->blockshift);
716 	if (lba >= maxlba)
717 		return -EIO;
718 
719 	// Since we only read in one block at a time, we have to create
720 	// a bounce buffer and move the data a piece at a time between the
721 	// bounce buffer and the actual transfer buffer.
722 
723 	len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
724 	buffer = kmalloc(len, GFP_NOIO);
725 	if (buffer == NULL) {
726 		printk(KERN_WARNING "sddr09_read_data: Out of memory\n");
727 		return -ENOMEM;
728 	}
729 
730 	// This could be made much more efficient by checking for
731 	// contiguous LBA's. Another exercise left to the student.
732 
733 	result = 0;
734 	offset = 0;
735 	sg = NULL;
736 
737 	while (sectors > 0) {
738 
739 		/* Find number of pages we can read in this block */
740 		pages = min(sectors, info->blocksize - page);
741 		len = pages << info->pageshift;
742 
743 		/* Not overflowing capacity? */
744 		if (lba >= maxlba) {
745 			US_DEBUGP("Error: Requested lba %u exceeds "
746 				  "maximum %u\n", lba, maxlba);
747 			result = -EIO;
748 			break;
749 		}
750 
751 		/* Find where this lba lives on disk */
752 		pba = info->lba_to_pba[lba];
753 
754 		if (pba == UNDEF) {	/* this lba was never written */
755 
756 			US_DEBUGP("Read %d zero pages (LBA %d) page %d\n",
757 				  pages, lba, page);
758 
759 			/* This is not really an error. It just means
760 			   that the block has never been written.
761 			   Instead of returning an error
762 			   it is better to return all zero data. */
763 
764 			memset(buffer, 0, len);
765 
766 		} else {
767 			US_DEBUGP("Read %d pages, from PBA %d"
768 				  " (LBA %d) page %d\n",
769 				  pages, pba, lba, page);
770 
771 			address = ((pba << info->blockshift) + page) <<
772 				info->pageshift;
773 
774 			result = sddr09_read20(us, address>>1,
775 					pages, info->pageshift, buffer, 0);
776 			if (result)
777 				break;
778 		}
779 
780 		// Store the data in the transfer buffer
781 		usb_stor_access_xfer_buf(buffer, len, us->srb,
782 				&sg, &offset, TO_XFER_BUF);
783 
784 		page = 0;
785 		lba++;
786 		sectors -= pages;
787 	}
788 
789 	kfree(buffer);
790 	return result;
791 }
792 
793 static unsigned int
794 sddr09_find_unused_pba(struct sddr09_card_info *info, unsigned int lba) {
795 	static unsigned int lastpba = 1;
796 	int zonestart, end, i;
797 
798 	zonestart = (lba/1000) << 10;
799 	end = info->capacity >> (info->blockshift + info->pageshift);
800 	end -= zonestart;
801 	if (end > 1024)
802 		end = 1024;
803 
804 	for (i = lastpba+1; i < end; i++) {
805 		if (info->pba_to_lba[zonestart+i] == UNDEF) {
806 			lastpba = i;
807 			return zonestart+i;
808 		}
809 	}
810 	for (i = 0; i <= lastpba; i++) {
811 		if (info->pba_to_lba[zonestart+i] == UNDEF) {
812 			lastpba = i;
813 			return zonestart+i;
814 		}
815 	}
816 	return 0;
817 }
818 
819 static int
820 sddr09_write_lba(struct us_data *us, unsigned int lba,
821 		 unsigned int page, unsigned int pages,
822 		 unsigned char *ptr, unsigned char *blockbuffer) {
823 
824 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
825 	unsigned long address;
826 	unsigned int pba, lbap;
827 	unsigned int pagelen;
828 	unsigned char *bptr, *cptr, *xptr;
829 	unsigned char ecc[3];
830 	int i, result, isnew;
831 
832 	lbap = ((lba % 1000) << 1) | 0x1000;
833 	if (parity[MSB_of(lbap) ^ LSB_of(lbap)])
834 		lbap ^= 1;
835 	pba = info->lba_to_pba[lba];
836 	isnew = 0;
837 
838 	if (pba == UNDEF) {
839 		pba = sddr09_find_unused_pba(info, lba);
840 		if (!pba) {
841 			printk(KERN_WARNING
842 			       "sddr09_write_lba: Out of unused blocks\n");
843 			return -ENOSPC;
844 		}
845 		info->pba_to_lba[pba] = lba;
846 		info->lba_to_pba[lba] = pba;
847 		isnew = 1;
848 	}
849 
850 	if (pba == 1) {
851 		/* Maybe it is impossible to write to PBA 1.
852 		   Fake success, but don't do anything. */
853 		printk(KERN_WARNING "sddr09: avoid writing to pba 1\n");
854 		return 0;
855 	}
856 
857 	pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
858 
859 	/* read old contents */
860 	address = (pba << (info->pageshift + info->blockshift));
861 	result = sddr09_read22(us, address>>1, info->blocksize,
862 			       info->pageshift, blockbuffer, 0);
863 	if (result)
864 		return result;
865 
866 	/* check old contents and fill lba */
867 	for (i = 0; i < info->blocksize; i++) {
868 		bptr = blockbuffer + i*pagelen;
869 		cptr = bptr + info->pagesize;
870 		nand_compute_ecc(bptr, ecc);
871 		if (!nand_compare_ecc(cptr+13, ecc)) {
872 			US_DEBUGP("Warning: bad ecc in page %d- of pba %d\n",
873 				  i, pba);
874 			nand_store_ecc(cptr+13, ecc);
875 		}
876 		nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
877 		if (!nand_compare_ecc(cptr+8, ecc)) {
878 			US_DEBUGP("Warning: bad ecc in page %d+ of pba %d\n",
879 				  i, pba);
880 			nand_store_ecc(cptr+8, ecc);
881 		}
882 		cptr[6] = cptr[11] = MSB_of(lbap);
883 		cptr[7] = cptr[12] = LSB_of(lbap);
884 	}
885 
886 	/* copy in new stuff and compute ECC */
887 	xptr = ptr;
888 	for (i = page; i < page+pages; i++) {
889 		bptr = blockbuffer + i*pagelen;
890 		cptr = bptr + info->pagesize;
891 		memcpy(bptr, xptr, info->pagesize);
892 		xptr += info->pagesize;
893 		nand_compute_ecc(bptr, ecc);
894 		nand_store_ecc(cptr+13, ecc);
895 		nand_compute_ecc(bptr+(info->pagesize / 2), ecc);
896 		nand_store_ecc(cptr+8, ecc);
897 	}
898 
899 	US_DEBUGP("Rewrite PBA %d (LBA %d)\n", pba, lba);
900 
901 	result = sddr09_write_inplace(us, address>>1, info->blocksize,
902 				      info->pageshift, blockbuffer, 0);
903 
904 	US_DEBUGP("sddr09_write_inplace returns %d\n", result);
905 
906 #if 0
907 	{
908 		unsigned char status = 0;
909 		int result2 = sddr09_read_status(us, &status);
910 		if (result2)
911 			US_DEBUGP("sddr09_write_inplace: cannot read status\n");
912 		else if (status != 0xc0)
913 			US_DEBUGP("sddr09_write_inplace: status after write: 0x%x\n",
914 				  status);
915 	}
916 #endif
917 
918 #if 0
919 	{
920 		int result2 = sddr09_test_unit_ready(us);
921 	}
922 #endif
923 
924 	return result;
925 }
926 
927 static int
928 sddr09_write_data(struct us_data *us,
929 		  unsigned long address,
930 		  unsigned int sectors) {
931 
932 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
933 	unsigned int lba, maxlba, page, pages;
934 	unsigned int pagelen, blocklen;
935 	unsigned char *blockbuffer;
936 	unsigned char *buffer;
937 	unsigned int len, offset;
938 	struct scatterlist *sg;
939 	int result;
940 
941 	// Figure out the initial LBA and page
942 	lba = address >> info->blockshift;
943 	page = (address & info->blockmask);
944 	maxlba = info->capacity >> (info->pageshift + info->blockshift);
945 	if (lba >= maxlba)
946 		return -EIO;
947 
948 	// blockbuffer is used for reading in the old data, overwriting
949 	// with the new data, and performing ECC calculations
950 
951 	/* TODO: instead of doing kmalloc/kfree for each write,
952 	   add a bufferpointer to the info structure */
953 
954 	pagelen = (1 << info->pageshift) + (1 << CONTROL_SHIFT);
955 	blocklen = (pagelen << info->blockshift);
956 	blockbuffer = kmalloc(blocklen, GFP_NOIO);
957 	if (!blockbuffer) {
958 		printk(KERN_WARNING "sddr09_write_data: Out of memory\n");
959 		return -ENOMEM;
960 	}
961 
962 	// Since we don't write the user data directly to the device,
963 	// we have to create a bounce buffer and move the data a piece
964 	// at a time between the bounce buffer and the actual transfer buffer.
965 
966 	len = min(sectors, (unsigned int) info->blocksize) * info->pagesize;
967 	buffer = kmalloc(len, GFP_NOIO);
968 	if (buffer == NULL) {
969 		printk(KERN_WARNING "sddr09_write_data: Out of memory\n");
970 		kfree(blockbuffer);
971 		return -ENOMEM;
972 	}
973 
974 	result = 0;
975 	offset = 0;
976 	sg = NULL;
977 
978 	while (sectors > 0) {
979 
980 		// Write as many sectors as possible in this block
981 
982 		pages = min(sectors, info->blocksize - page);
983 		len = (pages << info->pageshift);
984 
985 		/* Not overflowing capacity? */
986 		if (lba >= maxlba) {
987 			US_DEBUGP("Error: Requested lba %u exceeds "
988 				  "maximum %u\n", lba, maxlba);
989 			result = -EIO;
990 			break;
991 		}
992 
993 		// Get the data from the transfer buffer
994 		usb_stor_access_xfer_buf(buffer, len, us->srb,
995 				&sg, &offset, FROM_XFER_BUF);
996 
997 		result = sddr09_write_lba(us, lba, page, pages,
998 				buffer, blockbuffer);
999 		if (result)
1000 			break;
1001 
1002 		page = 0;
1003 		lba++;
1004 		sectors -= pages;
1005 	}
1006 
1007 	kfree(buffer);
1008 	kfree(blockbuffer);
1009 
1010 	return result;
1011 }
1012 
1013 static int
1014 sddr09_read_control(struct us_data *us,
1015 		unsigned long address,
1016 		unsigned int blocks,
1017 		unsigned char *content,
1018 		int use_sg) {
1019 
1020 	US_DEBUGP("Read control address %lu, blocks %d\n",
1021 		address, blocks);
1022 
1023 	return sddr09_read21(us, address, blocks,
1024 			     CONTROL_SHIFT, content, use_sg);
1025 }
1026 
1027 /*
1028  * Read Device ID Command: 12 bytes.
1029  * byte 0: opcode: ED
1030  *
1031  * Returns 2 bytes: Manufacturer ID and Device ID.
1032  * On more recent cards 3 bytes: the third byte is an option code A5
1033  * signifying that the secret command to read an 128-bit ID is available.
1034  * On still more recent cards 4 bytes: the fourth byte C0 means that
1035  * a second read ID cmd is available.
1036  */
1037 static int
1038 sddr09_read_deviceID(struct us_data *us, unsigned char *deviceID) {
1039 	unsigned char *command = us->iobuf;
1040 	unsigned char *content = us->iobuf;
1041 	int result, i;
1042 
1043 	memset(command, 0, 12);
1044 	command[0] = 0xED;
1045 	command[1] = LUNBITS;
1046 
1047 	result = sddr09_send_scsi_command(us, command, 12);
1048 	if (result)
1049 		return result;
1050 
1051 	result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
1052 			content, 64, NULL);
1053 
1054 	for (i = 0; i < 4; i++)
1055 		deviceID[i] = content[i];
1056 
1057 	return (result == USB_STOR_XFER_GOOD ? 0 : -EIO);
1058 }
1059 
1060 static int
1061 sddr09_get_wp(struct us_data *us, struct sddr09_card_info *info) {
1062 	int result;
1063 	unsigned char status;
1064 
1065 	result = sddr09_read_status(us, &status);
1066 	if (result) {
1067 		US_DEBUGP("sddr09_get_wp: read_status fails\n");
1068 		return result;
1069 	}
1070 	US_DEBUGP("sddr09_get_wp: status 0x%02X", status);
1071 	if ((status & 0x80) == 0) {
1072 		info->flags |= SDDR09_WP;	/* write protected */
1073 		US_DEBUGP(" WP");
1074 	}
1075 	if (status & 0x40)
1076 		US_DEBUGP(" Ready");
1077 	if (status & LUNBITS)
1078 		US_DEBUGP(" Suspended");
1079 	if (status & 0x1)
1080 		US_DEBUGP(" Error");
1081 	US_DEBUGP("\n");
1082 	return 0;
1083 }
1084 
1085 #if 0
1086 /*
1087  * Reset Command: 12 bytes.
1088  * byte 0: opcode: EB
1089  */
1090 static int
1091 sddr09_reset(struct us_data *us) {
1092 
1093 	unsigned char *command = us->iobuf;
1094 
1095 	memset(command, 0, 12);
1096 	command[0] = 0xEB;
1097 	command[1] = LUNBITS;
1098 
1099 	return sddr09_send_scsi_command(us, command, 12);
1100 }
1101 #endif
1102 
1103 static struct nand_flash_dev *
1104 sddr09_get_cardinfo(struct us_data *us, unsigned char flags) {
1105 	struct nand_flash_dev *cardinfo;
1106 	unsigned char deviceID[4];
1107 	char blurbtxt[256];
1108 	int result;
1109 
1110 	US_DEBUGP("Reading capacity...\n");
1111 
1112 	result = sddr09_read_deviceID(us, deviceID);
1113 
1114 	if (result) {
1115 		US_DEBUGP("Result of read_deviceID is %d\n", result);
1116 		printk(KERN_WARNING "sddr09: could not read card info\n");
1117 		return NULL;
1118 	}
1119 
1120 	sprintf(blurbtxt, "sddr09: Found Flash card, ID = %02X %02X %02X %02X",
1121 		deviceID[0], deviceID[1], deviceID[2], deviceID[3]);
1122 
1123 	/* Byte 0 is the manufacturer */
1124 	sprintf(blurbtxt + strlen(blurbtxt),
1125 		": Manuf. %s",
1126 		nand_flash_manufacturer(deviceID[0]));
1127 
1128 	/* Byte 1 is the device type */
1129 	cardinfo = nand_find_id(deviceID[1]);
1130 	if (cardinfo) {
1131 		/* MB or MiB? It is neither. A 16 MB card has
1132 		   17301504 raw bytes, of which 16384000 are
1133 		   usable for user data. */
1134 		sprintf(blurbtxt + strlen(blurbtxt),
1135 			", %d MB", 1<<(cardinfo->chipshift - 20));
1136 	} else {
1137 		sprintf(blurbtxt + strlen(blurbtxt),
1138 			", type unrecognized");
1139 	}
1140 
1141 	/* Byte 2 is code to signal availability of 128-bit ID */
1142 	if (deviceID[2] == 0xa5) {
1143 		sprintf(blurbtxt + strlen(blurbtxt),
1144 			", 128-bit ID");
1145 	}
1146 
1147 	/* Byte 3 announces the availability of another read ID command */
1148 	if (deviceID[3] == 0xc0) {
1149 		sprintf(blurbtxt + strlen(blurbtxt),
1150 			", extra cmd");
1151 	}
1152 
1153 	if (flags & SDDR09_WP)
1154 		sprintf(blurbtxt + strlen(blurbtxt),
1155 			", WP");
1156 
1157 	printk(KERN_WARNING "%s\n", blurbtxt);
1158 
1159 	return cardinfo;
1160 }
1161 
1162 static int
1163 sddr09_read_map(struct us_data *us) {
1164 
1165 	struct sddr09_card_info *info = (struct sddr09_card_info *) us->extra;
1166 	int numblocks, alloc_len, alloc_blocks;
1167 	int i, j, result;
1168 	unsigned char *buffer, *buffer_end, *ptr;
1169 	unsigned int lba, lbact;
1170 
1171 	if (!info->capacity)
1172 		return -1;
1173 
1174 	// size of a block is 1 << (blockshift + pageshift) bytes
1175 	// divide into the total capacity to get the number of blocks
1176 
1177 	numblocks = info->capacity >> (info->blockshift + info->pageshift);
1178 
1179 	// read 64 bytes for every block (actually 1 << CONTROL_SHIFT)
1180 	// but only use a 64 KB buffer
1181 	// buffer size used must be a multiple of (1 << CONTROL_SHIFT)
1182 #define SDDR09_READ_MAP_BUFSZ 65536
1183 
1184 	alloc_blocks = min(numblocks, SDDR09_READ_MAP_BUFSZ >> CONTROL_SHIFT);
1185 	alloc_len = (alloc_blocks << CONTROL_SHIFT);
1186 	buffer = kmalloc(alloc_len, GFP_NOIO);
1187 	if (buffer == NULL) {
1188 		printk(KERN_WARNING "sddr09_read_map: out of memory\n");
1189 		result = -1;
1190 		goto done;
1191 	}
1192 	buffer_end = buffer + alloc_len;
1193 
1194 #undef SDDR09_READ_MAP_BUFSZ
1195 
1196 	kfree(info->lba_to_pba);
1197 	kfree(info->pba_to_lba);
1198 	info->lba_to_pba = kmalloc(numblocks*sizeof(int), GFP_NOIO);
1199 	info->pba_to_lba = kmalloc(numblocks*sizeof(int), GFP_NOIO);
1200 
1201 	if (info->lba_to_pba == NULL || info->pba_to_lba == NULL) {
1202 		printk(KERN_WARNING "sddr09_read_map: out of memory\n");
1203 		result = -1;
1204 		goto done;
1205 	}
1206 
1207 	for (i = 0; i < numblocks; i++)
1208 		info->lba_to_pba[i] = info->pba_to_lba[i] = UNDEF;
1209 
1210 	/*
1211 	 * Define lba-pba translation table
1212 	 */
1213 
1214 	ptr = buffer_end;
1215 	for (i = 0; i < numblocks; i++) {
1216 		ptr += (1 << CONTROL_SHIFT);
1217 		if (ptr >= buffer_end) {
1218 			unsigned long address;
1219 
1220 			address = i << (info->pageshift + info->blockshift);
1221 			result = sddr09_read_control(
1222 				us, address>>1,
1223 				min(alloc_blocks, numblocks - i),
1224 				buffer, 0);
1225 			if (result) {
1226 				result = -1;
1227 				goto done;
1228 			}
1229 			ptr = buffer;
1230 		}
1231 
1232 		if (i == 0 || i == 1) {
1233 			info->pba_to_lba[i] = UNUSABLE;
1234 			continue;
1235 		}
1236 
1237 		/* special PBAs have control field 0^16 */
1238 		for (j = 0; j < 16; j++)
1239 			if (ptr[j] != 0)
1240 				goto nonz;
1241 		info->pba_to_lba[i] = UNUSABLE;
1242 		printk(KERN_WARNING "sddr09: PBA %d has no logical mapping\n",
1243 		       i);
1244 		continue;
1245 
1246 	nonz:
1247 		/* unwritten PBAs have control field FF^16 */
1248 		for (j = 0; j < 16; j++)
1249 			if (ptr[j] != 0xff)
1250 				goto nonff;
1251 		continue;
1252 
1253 	nonff:
1254 		/* normal PBAs start with six FFs */
1255 		if (j < 6) {
1256 			printk(KERN_WARNING
1257 			       "sddr09: PBA %d has no logical mapping: "
1258 			       "reserved area = %02X%02X%02X%02X "
1259 			       "data status %02X block status %02X\n",
1260 			       i, ptr[0], ptr[1], ptr[2], ptr[3],
1261 			       ptr[4], ptr[5]);
1262 			info->pba_to_lba[i] = UNUSABLE;
1263 			continue;
1264 		}
1265 
1266 		if ((ptr[6] >> 4) != 0x01) {
1267 			printk(KERN_WARNING
1268 			       "sddr09: PBA %d has invalid address field "
1269 			       "%02X%02X/%02X%02X\n",
1270 			       i, ptr[6], ptr[7], ptr[11], ptr[12]);
1271 			info->pba_to_lba[i] = UNUSABLE;
1272 			continue;
1273 		}
1274 
1275 		/* check even parity */
1276 		if (parity[ptr[6] ^ ptr[7]]) {
1277 			printk(KERN_WARNING
1278 			       "sddr09: Bad parity in LBA for block %d"
1279 			       " (%02X %02X)\n", i, ptr[6], ptr[7]);
1280 			info->pba_to_lba[i] = UNUSABLE;
1281 			continue;
1282 		}
1283 
1284 		lba = short_pack(ptr[7], ptr[6]);
1285 		lba = (lba & 0x07FF) >> 1;
1286 
1287 		/*
1288 		 * Every 1024 physical blocks ("zone"), the LBA numbers
1289 		 * go back to zero, but are within a higher block of LBA's.
1290 		 * Also, there is a maximum of 1000 LBA's per zone.
1291 		 * In other words, in PBA 1024-2047 you will find LBA 0-999
1292 		 * which are really LBA 1000-1999. This allows for 24 bad
1293 		 * or special physical blocks per zone.
1294 		 */
1295 
1296 		if (lba >= 1000) {
1297 			printk(KERN_WARNING
1298 			       "sddr09: Bad low LBA %d for block %d\n",
1299 			       lba, i);
1300 			goto possibly_erase;
1301 		}
1302 
1303 		lba += 1000*(i/0x400);
1304 
1305 		if (info->lba_to_pba[lba] != UNDEF) {
1306 			printk(KERN_WARNING
1307 			       "sddr09: LBA %d seen for PBA %d and %d\n",
1308 			       lba, info->lba_to_pba[lba], i);
1309 			goto possibly_erase;
1310 		}
1311 
1312 		info->pba_to_lba[i] = lba;
1313 		info->lba_to_pba[lba] = i;
1314 		continue;
1315 
1316 	possibly_erase:
1317 		if (erase_bad_lba_entries) {
1318 			unsigned long address;
1319 
1320 			address = (i << (info->pageshift + info->blockshift));
1321 			sddr09_erase(us, address>>1);
1322 			info->pba_to_lba[i] = UNDEF;
1323 		} else
1324 			info->pba_to_lba[i] = UNUSABLE;
1325 	}
1326 
1327 	/*
1328 	 * Approximate capacity. This is not entirely correct yet,
1329 	 * since a zone with less than 1000 usable pages leads to
1330 	 * missing LBAs. Especially if it is the last zone, some
1331 	 * LBAs can be past capacity.
1332 	 */
1333 	lbact = 0;
1334 	for (i = 0; i < numblocks; i += 1024) {
1335 		int ct = 0;
1336 
1337 		for (j = 0; j < 1024 && i+j < numblocks; j++) {
1338 			if (info->pba_to_lba[i+j] != UNUSABLE) {
1339 				if (ct >= 1000)
1340 					info->pba_to_lba[i+j] = SPARE;
1341 				else
1342 					ct++;
1343 			}
1344 		}
1345 		lbact += ct;
1346 	}
1347 	info->lbact = lbact;
1348 	US_DEBUGP("Found %d LBA's\n", lbact);
1349 	result = 0;
1350 
1351  done:
1352 	if (result != 0) {
1353 		kfree(info->lba_to_pba);
1354 		kfree(info->pba_to_lba);
1355 		info->lba_to_pba = NULL;
1356 		info->pba_to_lba = NULL;
1357 	}
1358 	kfree(buffer);
1359 	return result;
1360 }
1361 
1362 static void
1363 sddr09_card_info_destructor(void *extra) {
1364 	struct sddr09_card_info *info = (struct sddr09_card_info *)extra;
1365 
1366 	if (!info)
1367 		return;
1368 
1369 	kfree(info->lba_to_pba);
1370 	kfree(info->pba_to_lba);
1371 }
1372 
1373 static int
1374 sddr09_common_init(struct us_data *us) {
1375 	int result;
1376 
1377 	/* set the configuration -- STALL is an acceptable response here */
1378 	if (us->pusb_dev->actconfig->desc.bConfigurationValue != 1) {
1379 		US_DEBUGP("active config #%d != 1 ??\n", us->pusb_dev
1380 				->actconfig->desc.bConfigurationValue);
1381 		return -EINVAL;
1382 	}
1383 
1384 	result = usb_reset_configuration(us->pusb_dev);
1385 	US_DEBUGP("Result of usb_reset_configuration is %d\n", result);
1386 	if (result == -EPIPE) {
1387 		US_DEBUGP("-- stall on control interface\n");
1388 	} else if (result != 0) {
1389 		/* it's not a stall, but another error -- time to bail */
1390 		US_DEBUGP("-- Unknown error.  Rejecting device\n");
1391 		return -EINVAL;
1392 	}
1393 
1394 	us->extra = kzalloc(sizeof(struct sddr09_card_info), GFP_NOIO);
1395 	if (!us->extra)
1396 		return -ENOMEM;
1397 	us->extra_destructor = sddr09_card_info_destructor;
1398 
1399 	nand_init_ecc();
1400 	return 0;
1401 }
1402 
1403 
1404 /*
1405  * This is needed at a very early stage. If this is not listed in the
1406  * unusual devices list but called from here then LUN 0 of the combo reader
1407  * is not recognized. But I do not know what precisely these calls do.
1408  */
1409 int
1410 usb_stor_sddr09_dpcm_init(struct us_data *us) {
1411 	int result;
1412 	unsigned char *data = us->iobuf;
1413 
1414 	result = sddr09_common_init(us);
1415 	if (result)
1416 		return result;
1417 
1418 	result = sddr09_send_command(us, 0x01, USB_DIR_IN, data, 2);
1419 	if (result) {
1420 		US_DEBUGP("sddr09_init: send_command fails\n");
1421 		return result;
1422 	}
1423 
1424 	US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
1425 	// get 07 02
1426 
1427 	result = sddr09_send_command(us, 0x08, USB_DIR_IN, data, 2);
1428 	if (result) {
1429 		US_DEBUGP("sddr09_init: 2nd send_command fails\n");
1430 		return result;
1431 	}
1432 
1433 	US_DEBUGP("SDDR09init: %02X %02X\n", data[0], data[1]);
1434 	// get 07 00
1435 
1436 	result = sddr09_request_sense(us, data, 18);
1437 	if (result == 0 && data[2] != 0) {
1438 		int j;
1439 		for (j=0; j<18; j++)
1440 			printk(" %02X", data[j]);
1441 		printk("\n");
1442 		// get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
1443 		// 70: current command
1444 		// sense key 0, sense code 0, extd sense code 0
1445 		// additional transfer length * = sizeof(data) - 7
1446 		// Or: 70 00 06 00 00 00 00 0b 00 00 00 00 28 00 00 00 00 00
1447 		// sense key 06, sense code 28: unit attention,
1448 		// not ready to ready transition
1449 	}
1450 
1451 	// test unit ready
1452 
1453 	return 0;		/* not result */
1454 }
1455 
1456 /*
1457  * Transport for the Microtech DPCM-USB
1458  */
1459 int dpcm_transport(struct scsi_cmnd *srb, struct us_data *us)
1460 {
1461 	int ret;
1462 
1463 	US_DEBUGP("dpcm_transport: LUN=%d\n", srb->device->lun);
1464 
1465 	switch (srb->device->lun) {
1466 	case 0:
1467 
1468 		/*
1469 		 * LUN 0 corresponds to the CompactFlash card reader.
1470 		 */
1471 		ret = usb_stor_CB_transport(srb, us);
1472 		break;
1473 
1474 	case 1:
1475 
1476 		/*
1477 		 * LUN 1 corresponds to the SmartMedia card reader.
1478 		 */
1479 
1480 		/*
1481 		 * Set the LUN to 0 (just in case).
1482 		 */
1483 		srb->device->lun = 0;
1484 		ret = sddr09_transport(srb, us);
1485 		srb->device->lun = 1;
1486 		break;
1487 
1488 	default:
1489 		US_DEBUGP("dpcm_transport: Invalid LUN %d\n",
1490 				srb->device->lun);
1491 		ret = USB_STOR_TRANSPORT_ERROR;
1492 		break;
1493 	}
1494 	return ret;
1495 }
1496 
1497 
1498 /*
1499  * Transport for the Sandisk SDDR-09
1500  */
1501 int sddr09_transport(struct scsi_cmnd *srb, struct us_data *us)
1502 {
1503 	static unsigned char sensekey = 0, sensecode = 0;
1504 	static unsigned char havefakesense = 0;
1505 	int result, i;
1506 	unsigned char *ptr = us->iobuf;
1507 	unsigned long capacity;
1508 	unsigned int page, pages;
1509 
1510 	struct sddr09_card_info *info;
1511 
1512 	static unsigned char inquiry_response[8] = {
1513 		0x00, 0x80, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x00
1514 	};
1515 
1516 	/* note: no block descriptor support */
1517 	static unsigned char mode_page_01[19] = {
1518 		0x00, 0x0F, 0x00, 0x0, 0x0, 0x0, 0x00,
1519 		0x01, 0x0A,
1520 		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1521 	};
1522 
1523 	info = (struct sddr09_card_info *)us->extra;
1524 
1525 	if (srb->cmnd[0] == REQUEST_SENSE && havefakesense) {
1526 		/* for a faked command, we have to follow with a faked sense */
1527 		memset(ptr, 0, 18);
1528 		ptr[0] = 0x70;
1529 		ptr[2] = sensekey;
1530 		ptr[7] = 11;
1531 		ptr[12] = sensecode;
1532 		usb_stor_set_xfer_buf(ptr, 18, srb);
1533 		sensekey = sensecode = havefakesense = 0;
1534 		return USB_STOR_TRANSPORT_GOOD;
1535 	}
1536 
1537 	havefakesense = 1;
1538 
1539 	/* Dummy up a response for INQUIRY since SDDR09 doesn't
1540 	   respond to INQUIRY commands */
1541 
1542 	if (srb->cmnd[0] == INQUIRY) {
1543 		memcpy(ptr, inquiry_response, 8);
1544 		fill_inquiry_response(us, ptr, 36);
1545 		return USB_STOR_TRANSPORT_GOOD;
1546 	}
1547 
1548 	if (srb->cmnd[0] == READ_CAPACITY) {
1549 		struct nand_flash_dev *cardinfo;
1550 
1551 		sddr09_get_wp(us, info);	/* read WP bit */
1552 
1553 		cardinfo = sddr09_get_cardinfo(us, info->flags);
1554 		if (!cardinfo) {
1555 			/* probably no media */
1556 		init_error:
1557 			sensekey = 0x02;	/* not ready */
1558 			sensecode = 0x3a;	/* medium not present */
1559 			return USB_STOR_TRANSPORT_FAILED;
1560 		}
1561 
1562 		info->capacity = (1 << cardinfo->chipshift);
1563 		info->pageshift = cardinfo->pageshift;
1564 		info->pagesize = (1 << info->pageshift);
1565 		info->blockshift = cardinfo->blockshift;
1566 		info->blocksize = (1 << info->blockshift);
1567 		info->blockmask = info->blocksize - 1;
1568 
1569 		// map initialization, must follow get_cardinfo()
1570 		if (sddr09_read_map(us)) {
1571 			/* probably out of memory */
1572 			goto init_error;
1573 		}
1574 
1575 		// Report capacity
1576 
1577 		capacity = (info->lbact << info->blockshift) - 1;
1578 
1579 		((__be32 *) ptr)[0] = cpu_to_be32(capacity);
1580 
1581 		// Report page size
1582 
1583 		((__be32 *) ptr)[1] = cpu_to_be32(info->pagesize);
1584 		usb_stor_set_xfer_buf(ptr, 8, srb);
1585 
1586 		return USB_STOR_TRANSPORT_GOOD;
1587 	}
1588 
1589 	if (srb->cmnd[0] == MODE_SENSE_10) {
1590 		int modepage = (srb->cmnd[2] & 0x3F);
1591 
1592 		/* They ask for the Read/Write error recovery page,
1593 		   or for all pages. */
1594 		/* %% We should check DBD %% */
1595 		if (modepage == 0x01 || modepage == 0x3F) {
1596 			US_DEBUGP("SDDR09: Dummy up request for "
1597 				  "mode page 0x%x\n", modepage);
1598 
1599 			memcpy(ptr, mode_page_01, sizeof(mode_page_01));
1600 			((__be16*)ptr)[0] = cpu_to_be16(sizeof(mode_page_01) - 2);
1601 			ptr[3] = (info->flags & SDDR09_WP) ? 0x80 : 0;
1602 			usb_stor_set_xfer_buf(ptr, sizeof(mode_page_01), srb);
1603 			return USB_STOR_TRANSPORT_GOOD;
1604 		}
1605 
1606 		sensekey = 0x05;	/* illegal request */
1607 		sensecode = 0x24;	/* invalid field in CDB */
1608 		return USB_STOR_TRANSPORT_FAILED;
1609 	}
1610 
1611 	if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL)
1612 		return USB_STOR_TRANSPORT_GOOD;
1613 
1614 	havefakesense = 0;
1615 
1616 	if (srb->cmnd[0] == READ_10) {
1617 
1618 		page = short_pack(srb->cmnd[3], srb->cmnd[2]);
1619 		page <<= 16;
1620 		page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
1621 		pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
1622 
1623 		US_DEBUGP("READ_10: read page %d pagect %d\n",
1624 			  page, pages);
1625 
1626 		result = sddr09_read_data(us, page, pages);
1627 		return (result == 0 ? USB_STOR_TRANSPORT_GOOD :
1628 				USB_STOR_TRANSPORT_ERROR);
1629 	}
1630 
1631 	if (srb->cmnd[0] == WRITE_10) {
1632 
1633 		page = short_pack(srb->cmnd[3], srb->cmnd[2]);
1634 		page <<= 16;
1635 		page |= short_pack(srb->cmnd[5], srb->cmnd[4]);
1636 		pages = short_pack(srb->cmnd[8], srb->cmnd[7]);
1637 
1638 		US_DEBUGP("WRITE_10: write page %d pagect %d\n",
1639 			  page, pages);
1640 
1641 		result = sddr09_write_data(us, page, pages);
1642 		return (result == 0 ? USB_STOR_TRANSPORT_GOOD :
1643 				USB_STOR_TRANSPORT_ERROR);
1644 	}
1645 
1646 	/* catch-all for all other commands, except
1647 	 * pass TEST_UNIT_READY and REQUEST_SENSE through
1648 	 */
1649 	if (srb->cmnd[0] != TEST_UNIT_READY &&
1650 	    srb->cmnd[0] != REQUEST_SENSE) {
1651 		sensekey = 0x05;	/* illegal request */
1652 		sensecode = 0x20;	/* invalid command */
1653 		havefakesense = 1;
1654 		return USB_STOR_TRANSPORT_FAILED;
1655 	}
1656 
1657 	for (; srb->cmd_len<12; srb->cmd_len++)
1658 		srb->cmnd[srb->cmd_len] = 0;
1659 
1660 	srb->cmnd[1] = LUNBITS;
1661 
1662 	ptr[0] = 0;
1663 	for (i=0; i<12; i++)
1664 		sprintf(ptr+strlen(ptr), "%02X ", srb->cmnd[i]);
1665 
1666 	US_DEBUGP("SDDR09: Send control for command %s\n", ptr);
1667 
1668 	result = sddr09_send_scsi_command(us, srb->cmnd, 12);
1669 	if (result) {
1670 		US_DEBUGP("sddr09_transport: sddr09_send_scsi_command "
1671 			  "returns %d\n", result);
1672 		return USB_STOR_TRANSPORT_ERROR;
1673 	}
1674 
1675 	if (scsi_bufflen(srb) == 0)
1676 		return USB_STOR_TRANSPORT_GOOD;
1677 
1678 	if (srb->sc_data_direction == DMA_TO_DEVICE ||
1679 	    srb->sc_data_direction == DMA_FROM_DEVICE) {
1680 		unsigned int pipe = (srb->sc_data_direction == DMA_TO_DEVICE)
1681 				? us->send_bulk_pipe : us->recv_bulk_pipe;
1682 
1683 		US_DEBUGP("SDDR09: %s %d bytes\n",
1684 			  (srb->sc_data_direction == DMA_TO_DEVICE) ?
1685 			  "sending" : "receiving",
1686 			  scsi_bufflen(srb));
1687 
1688 		result = usb_stor_bulk_srb(us, pipe, srb);
1689 
1690 		return (result == USB_STOR_XFER_GOOD ?
1691 			USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR);
1692 	}
1693 
1694 	return USB_STOR_TRANSPORT_GOOD;
1695 }
1696 
1697 /*
1698  * Initialization routine for the sddr09 subdriver
1699  */
1700 int
1701 usb_stor_sddr09_init(struct us_data *us) {
1702 	return sddr09_common_init(us);
1703 }
1704