1 // SPDX-License-Identifier: GPL-2.0+
3 * Driver for SanDisk SDDR-09 SmartMedia reader
5 * (c) 2000, 2001 Robert Baruch (autophile@starband.net)
6 * (c) 2002 Andries Brouwer (aeb@cwi.nl)
7 * Developed with the assistance of:
8 * (c) 2002 Alan Stern <stern@rowland.org>
10 * The SanDisk SDDR-09 SmartMedia reader uses the Shuttle EUSB-01 chip.
11 * This chip is a programmable USB controller. In the SDDR-09, it has
12 * been programmed to obey a certain limited set of SCSI commands.
13 * This driver translates the "real" SCSI commands to the SDDR-09 SCSI
18 * Known vendor commands: 12 bytes, first byte is opcode
20 * E7: read scatter gather
28 * EF: compute checksum (?)
31 #include <linux/errno.h>
32 #include <linux/module.h>
33 #include <linux/slab.h>
35 #include <scsi/scsi.h>
36 #include <scsi/scsi_cmnd.h>
37 #include <scsi/scsi_device.h>
40 #include "transport.h"
45 #define DRV_NAME "ums-sddr09"
47 MODULE_DESCRIPTION("Driver for SanDisk SDDR-09 SmartMedia reader");
48 MODULE_AUTHOR("Andries Brouwer <aeb@cwi.nl>, Robert Baruch <autophile@starband.net>");
49 MODULE_LICENSE("GPL");
50 MODULE_IMPORT_NS(USB_STORAGE
);
52 static int usb_stor_sddr09_dpcm_init(struct us_data
*us
);
53 static int sddr09_transport(struct scsi_cmnd
*srb
, struct us_data
*us
);
54 static int usb_stor_sddr09_init(struct us_data
*us
);
58 * The table of devices
60 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
61 vendorName, productName, useProtocol, useTransport, \
62 initFunction, flags) \
63 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
64 .driver_info = (flags) }
66 static struct usb_device_id sddr09_usb_ids
[] = {
67 # include "unusual_sddr09.h"
68 { } /* Terminating entry */
70 MODULE_DEVICE_TABLE(usb
, sddr09_usb_ids
);
77 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
78 vendor_name, product_name, use_protocol, use_transport, \
79 init_function, Flags) \
81 .vendorName = vendor_name, \
82 .productName = product_name, \
83 .useProtocol = use_protocol, \
84 .useTransport = use_transport, \
85 .initFunction = init_function, \
88 static struct us_unusual_dev sddr09_unusual_dev_list
[] = {
89 # include "unusual_sddr09.h"
90 { } /* Terminating entry */
96 #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) )
97 #define LSB_of(s) ((s)&0xFF)
98 #define MSB_of(s) ((s)>>8)
101 * First some stuff that does not belong here:
102 * data on SmartMedia and other cards, completely
103 * unrelated to this driver.
104 * Similar stuff occurs in <linux/mtd/nand_ids.h>.
107 struct nand_flash_dev
{
109 int chipshift
; /* 1<<cs bytes total capacity */
110 char pageshift
; /* 1<<ps bytes in a page */
111 char blockshift
; /* 1<<bs pages in an erase block */
112 char zoneshift
; /* 1<<zs blocks in a zone */
113 /* # of logical blocks is 125/128 of this */
114 char pageadrlen
; /* length of an address in bytes - 1 */
118 * NAND Flash Manufacturer ID Codes
120 #define NAND_MFR_AMD 0x01
121 #define NAND_MFR_NATSEMI 0x8f
122 #define NAND_MFR_TOSHIBA 0x98
123 #define NAND_MFR_SAMSUNG 0xec
125 static inline char *nand_flash_manufacturer(int manuf_id
) {
129 case NAND_MFR_NATSEMI
:
131 case NAND_MFR_TOSHIBA
:
133 case NAND_MFR_SAMSUNG
:
141 * It looks like it is unnecessary to attach manufacturer to the
142 * remaining data: SSFDC prescribes manufacturer-independent id codes.
144 * 256 MB NAND flash has a 5-byte ID with 2nd byte 0xaa, 0xba, 0xca or 0xda.
147 static struct nand_flash_dev nand_flash_ids
[] = {
149 { 0x6e, 20, 8, 4, 8, 2}, /* 1 MB */
150 { 0xe8, 20, 8, 4, 8, 2}, /* 1 MB */
151 { 0xec, 20, 8, 4, 8, 2}, /* 1 MB */
152 { 0x64, 21, 8, 4, 9, 2}, /* 2 MB */
153 { 0xea, 21, 8, 4, 9, 2}, /* 2 MB */
154 { 0x6b, 22, 9, 4, 9, 2}, /* 4 MB */
155 { 0xe3, 22, 9, 4, 9, 2}, /* 4 MB */
156 { 0xe5, 22, 9, 4, 9, 2}, /* 4 MB */
157 { 0xe6, 23, 9, 4, 10, 2}, /* 8 MB */
158 { 0x73, 24, 9, 5, 10, 2}, /* 16 MB */
159 { 0x75, 25, 9, 5, 10, 2}, /* 32 MB */
160 { 0x76, 26, 9, 5, 10, 3}, /* 64 MB */
161 { 0x79, 27, 9, 5, 10, 3}, /* 128 MB */
164 { 0x5d, 21, 9, 4, 8, 2}, /* 2 MB */
165 { 0xd5, 22, 9, 4, 9, 2}, /* 4 MB */
166 { 0xd6, 23, 9, 4, 10, 2}, /* 8 MB */
167 { 0x57, 24, 9, 4, 11, 2}, /* 16 MB */
168 { 0x58, 25, 9, 4, 12, 2}, /* 32 MB */
172 static struct nand_flash_dev
*
173 nand_find_id(unsigned char id
) {
176 for (i
= 0; i
< ARRAY_SIZE(nand_flash_ids
); i
++)
177 if (nand_flash_ids
[i
].model_id
== id
)
178 return &(nand_flash_ids
[i
]);
185 static unsigned char parity
[256];
186 static unsigned char ecc2
[256];
188 static void nand_init_ecc(void) {
192 for (i
= 1; i
< 256; i
++)
193 parity
[i
] = (parity
[i
&(i
-1)] ^ 1);
195 for (i
= 0; i
< 256; i
++) {
197 for (j
= 0; j
< 8; j
++) {
207 ecc2
[i
] = ~(a
^ (a
<<1) ^ (parity
[i
] ? 0xa8 : 0));
211 /* compute 3-byte ecc on 256 bytes */
212 static void nand_compute_ecc(unsigned char *data
, unsigned char *ecc
) {
214 unsigned char par
= 0, bit
, bits
[8] = {0};
216 /* collect 16 checksum bits */
217 for (i
= 0; i
< 256; i
++) {
219 bit
= parity
[data
[i
]];
220 for (j
= 0; j
< 8; j
++)
221 if ((i
& (1<<j
)) == 0)
225 /* put 4+4+4 = 12 bits in the ecc */
226 a
= (bits
[3] << 6) + (bits
[2] << 4) + (bits
[1] << 2) + bits
[0];
227 ecc
[0] = ~(a
^ (a
<<1) ^ (parity
[par
] ? 0xaa : 0));
229 a
= (bits
[7] << 6) + (bits
[6] << 4) + (bits
[5] << 2) + bits
[4];
230 ecc
[1] = ~(a
^ (a
<<1) ^ (parity
[par
] ? 0xaa : 0));
235 static int nand_compare_ecc(unsigned char *data
, unsigned char *ecc
) {
236 return (data
[0] == ecc
[0] && data
[1] == ecc
[1] && data
[2] == ecc
[2]);
239 static void nand_store_ecc(unsigned char *data
, unsigned char *ecc
) {
240 memcpy(data
, ecc
, 3);
244 * The actual driver starts here.
247 struct sddr09_card_info
{
248 unsigned long capacity
; /* Size of card in bytes */
249 int pagesize
; /* Size of page in bytes */
250 int pageshift
; /* log2 of pagesize */
251 int blocksize
; /* Size of block in pages */
252 int blockshift
; /* log2 of blocksize */
253 int blockmask
; /* 2^blockshift - 1 */
254 int *lba_to_pba
; /* logical to physical map */
255 int *pba_to_lba
; /* physical to logical map */
256 int lbact
; /* number of available pages */
258 #define SDDR09_WP 1 /* write protected */
262 * On my 16MB card, control blocks have size 64 (16 real control bytes,
263 * and 48 junk bytes). In reality of course the card uses 16 control bytes,
264 * so the reader makes up the remaining 48. Don't know whether these numbers
265 * depend on the card. For now a constant.
267 #define CONTROL_SHIFT 6
270 * On my Combo CF/SM reader, the SM reader has LUN 1.
271 * (and things fail with LUN 0).
272 * It seems LUN is irrelevant for others.
275 #define LUNBITS (LUN << 5)
278 * LBA and PBA are unsigned ints. Special values.
280 #define UNDEF 0xffffffff
281 #define SPARE 0xfffffffe
282 #define UNUSABLE 0xfffffffd
284 static const int erase_bad_lba_entries
= 0;
286 /* send vendor interface command (0x41) */
287 /* called for requests 0, 1, 8 */
289 sddr09_send_command(struct us_data
*us
,
290 unsigned char request
,
291 unsigned char direction
,
292 unsigned char *xfer_data
,
293 unsigned int xfer_len
) {
295 unsigned char requesttype
= (0x41 | direction
);
298 // Get the receive or send control pipe number
300 if (direction
== USB_DIR_IN
)
301 pipe
= us
->recv_ctrl_pipe
;
303 pipe
= us
->send_ctrl_pipe
;
305 rc
= usb_stor_ctrl_transfer(us
, pipe
, request
, requesttype
,
306 0, 0, xfer_data
, xfer_len
);
308 case USB_STOR_XFER_GOOD
: return 0;
309 case USB_STOR_XFER_STALLED
: return -EPIPE
;
310 default: return -EIO
;
315 sddr09_send_scsi_command(struct us_data
*us
,
316 unsigned char *command
,
317 unsigned int command_len
) {
318 return sddr09_send_command(us
, 0, USB_DIR_OUT
, command
, command_len
);
323 * Test Unit Ready Command: 12 bytes.
327 sddr09_test_unit_ready(struct us_data
*us
) {
328 unsigned char *command
= us
->iobuf
;
331 memset(command
, 0, 6);
332 command
[1] = LUNBITS
;
334 result
= sddr09_send_scsi_command(us
, command
, 6);
336 usb_stor_dbg(us
, "sddr09_test_unit_ready returns %d\n", result
);
343 * Request Sense Command: 12 bytes.
345 * byte 4: data length
348 sddr09_request_sense(struct us_data
*us
, unsigned char *sensebuf
, int buflen
) {
349 unsigned char *command
= us
->iobuf
;
352 memset(command
, 0, 12);
354 command
[1] = LUNBITS
;
357 result
= sddr09_send_scsi_command(us
, command
, 12);
361 result
= usb_stor_bulk_transfer_buf(us
, us
->recv_bulk_pipe
,
362 sensebuf
, buflen
, NULL
);
363 return (result
== USB_STOR_XFER_GOOD
? 0 : -EIO
);
367 * Read Command: 12 bytes.
369 * byte 1: last two bits: 00: read data, 01: read blockwise control,
370 * 10: read both, 11: read pagewise control.
371 * It turns out we need values 20, 21, 22, 23 here (LUN 1).
372 * bytes 2-5: address (interpretation depends on byte 1, see below)
373 * bytes 10-11: count (idem)
375 * A page has 512 data bytes and 64 control bytes (16 control and 48 junk).
376 * A read data command gets data in 512-byte pages.
377 * A read control command gets control in 64-byte chunks.
378 * A read both command gets data+control in 576-byte chunks.
380 * Blocks are groups of 32 pages, and read blockwise control jumps to the
381 * next block, while read pagewise control jumps to the next page after
382 * reading a group of 64 control bytes.
383 * [Here 512 = 1<<pageshift, 32 = 1<<blockshift, 64 is constant?]
385 * (1 MB and 2 MB cards are a bit different, but I have only a 16 MB card.)
389 sddr09_readX(struct us_data
*us
, int x
, unsigned long fromaddress
,
390 int nr_of_pages
, int bulklen
, unsigned char *buf
,
393 unsigned char *command
= us
->iobuf
;
397 command
[1] = LUNBITS
| x
;
398 command
[2] = MSB_of(fromaddress
>>16);
399 command
[3] = LSB_of(fromaddress
>>16);
400 command
[4] = MSB_of(fromaddress
& 0xFFFF);
401 command
[5] = LSB_of(fromaddress
& 0xFFFF);
406 command
[10] = MSB_of(nr_of_pages
);
407 command
[11] = LSB_of(nr_of_pages
);
409 result
= sddr09_send_scsi_command(us
, command
, 12);
412 usb_stor_dbg(us
, "Result for send_control in sddr09_read2%d %d\n",
417 result
= usb_stor_bulk_transfer_sg(us
, us
->recv_bulk_pipe
,
418 buf
, bulklen
, use_sg
, NULL
);
420 if (result
!= USB_STOR_XFER_GOOD
) {
421 usb_stor_dbg(us
, "Result for bulk_transfer in sddr09_read2%d %d\n",
431 * fromaddress counts data shorts:
432 * increasing it by 256 shifts the bytestream by 512 bytes;
433 * the last 8 bits are ignored.
435 * nr_of_pages counts pages of size (1 << pageshift).
438 sddr09_read20(struct us_data
*us
, unsigned long fromaddress
,
439 int nr_of_pages
, int pageshift
, unsigned char *buf
, int use_sg
) {
440 int bulklen
= nr_of_pages
<< pageshift
;
442 /* The last 8 bits of fromaddress are ignored. */
443 return sddr09_readX(us
, 0, fromaddress
, nr_of_pages
, bulklen
,
448 * Read Blockwise Control
450 * fromaddress gives the starting position (as in read data;
451 * the last 8 bits are ignored); increasing it by 32*256 shifts
452 * the output stream by 64 bytes.
454 * count counts control groups of size (1 << controlshift).
455 * For me, controlshift = 6. Is this constant?
457 * After getting one control group, jump to the next block
458 * (fromaddress += 8192).
461 sddr09_read21(struct us_data
*us
, unsigned long fromaddress
,
462 int count
, int controlshift
, unsigned char *buf
, int use_sg
) {
464 int bulklen
= (count
<< controlshift
);
465 return sddr09_readX(us
, 1, fromaddress
, count
, bulklen
,
470 * Read both Data and Control
472 * fromaddress counts data shorts, ignoring control:
473 * increasing it by 256 shifts the bytestream by 576 = 512+64 bytes;
474 * the last 8 bits are ignored.
476 * nr_of_pages counts pages of size (1 << pageshift) + (1 << controlshift).
479 sddr09_read22(struct us_data
*us
, unsigned long fromaddress
,
480 int nr_of_pages
, int pageshift
, unsigned char *buf
, int use_sg
) {
482 int bulklen
= (nr_of_pages
<< pageshift
) + (nr_of_pages
<< CONTROL_SHIFT
);
483 usb_stor_dbg(us
, "reading %d pages, %d bytes\n", nr_of_pages
, bulklen
);
484 return sddr09_readX(us
, 2, fromaddress
, nr_of_pages
, bulklen
,
490 * Read Pagewise Control
492 * fromaddress gives the starting position (as in read data;
493 * the last 8 bits are ignored); increasing it by 256 shifts
494 * the output stream by 64 bytes.
496 * count counts control groups of size (1 << controlshift).
497 * For me, controlshift = 6. Is this constant?
499 * After getting one control group, jump to the next page
500 * (fromaddress += 256).
503 sddr09_read23(struct us_data
*us
, unsigned long fromaddress
,
504 int count
, int controlshift
, unsigned char *buf
, int use_sg
) {
506 int bulklen
= (count
<< controlshift
);
507 return sddr09_readX(us
, 3, fromaddress
, count
, bulklen
,
513 * Erase Command: 12 bytes.
515 * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
517 * Always precisely one block is erased; bytes 2-5 and 10-11 are ignored.
518 * The byte address being erased is 2*Eaddress.
519 * The CIS cannot be erased.
522 sddr09_erase(struct us_data
*us
, unsigned long Eaddress
) {
523 unsigned char *command
= us
->iobuf
;
526 usb_stor_dbg(us
, "erase address %lu\n", Eaddress
);
528 memset(command
, 0, 12);
530 command
[1] = LUNBITS
;
531 command
[6] = MSB_of(Eaddress
>>16);
532 command
[7] = LSB_of(Eaddress
>>16);
533 command
[8] = MSB_of(Eaddress
& 0xFFFF);
534 command
[9] = LSB_of(Eaddress
& 0xFFFF);
536 result
= sddr09_send_scsi_command(us
, command
, 12);
539 usb_stor_dbg(us
, "Result for send_control in sddr09_erase %d\n",
546 * Write CIS Command: 12 bytes.
548 * bytes 2-5: write address in shorts
549 * bytes 10-11: sector count
551 * This writes at the indicated address. Don't know how it differs
552 * from E9. Maybe it does not erase? However, it will also write to
555 * When two such commands on the same page follow each other directly,
556 * the second one is not done.
560 * Write Command: 12 bytes.
562 * bytes 2-5: write address (big-endian, counting shorts, sector aligned).
563 * bytes 6-9: erase address (big-endian, counting shorts, sector aligned).
564 * bytes 10-11: sector count (big-endian, in 512-byte sectors).
566 * If write address equals erase address, the erase is done first,
567 * otherwise the write is done first. When erase address equals zero
571 sddr09_writeX(struct us_data
*us
,
572 unsigned long Waddress
, unsigned long Eaddress
,
573 int nr_of_pages
, int bulklen
, unsigned char *buf
, int use_sg
) {
575 unsigned char *command
= us
->iobuf
;
579 command
[1] = LUNBITS
;
581 command
[2] = MSB_of(Waddress
>>16);
582 command
[3] = LSB_of(Waddress
>>16);
583 command
[4] = MSB_of(Waddress
& 0xFFFF);
584 command
[5] = LSB_of(Waddress
& 0xFFFF);
586 command
[6] = MSB_of(Eaddress
>>16);
587 command
[7] = LSB_of(Eaddress
>>16);
588 command
[8] = MSB_of(Eaddress
& 0xFFFF);
589 command
[9] = LSB_of(Eaddress
& 0xFFFF);
591 command
[10] = MSB_of(nr_of_pages
);
592 command
[11] = LSB_of(nr_of_pages
);
594 result
= sddr09_send_scsi_command(us
, command
, 12);
597 usb_stor_dbg(us
, "Result for send_control in sddr09_writeX %d\n",
602 result
= usb_stor_bulk_transfer_sg(us
, us
->send_bulk_pipe
,
603 buf
, bulklen
, use_sg
, NULL
);
605 if (result
!= USB_STOR_XFER_GOOD
) {
606 usb_stor_dbg(us
, "Result for bulk_transfer in sddr09_writeX %d\n",
613 /* erase address, write same address */
615 sddr09_write_inplace(struct us_data
*us
, unsigned long address
,
616 int nr_of_pages
, int pageshift
, unsigned char *buf
,
618 int bulklen
= (nr_of_pages
<< pageshift
) + (nr_of_pages
<< CONTROL_SHIFT
);
619 return sddr09_writeX(us
, address
, address
, nr_of_pages
, bulklen
,
625 * Read Scatter Gather Command: 3+4n bytes.
628 * bytes 4i-1,4i,4i+1: page address
629 * byte 4i+2: page count
632 * This reads several pages from the card to a single memory buffer.
633 * The last two bits of byte 1 have the same meaning as for E8.
636 sddr09_read_sg_test_only(struct us_data
*us
) {
637 unsigned char *command
= us
->iobuf
;
638 int result
, bulklen
, nsg
, ct
;
640 unsigned long address
;
644 command
[1] = LUNBITS
;
646 address
= 040000; ct
= 1;
648 bulklen
+= (ct
<< 9);
649 command
[4*nsg
+2] = ct
;
650 command
[4*nsg
+1] = ((address
>> 9) & 0xFF);
651 command
[4*nsg
+0] = ((address
>> 17) & 0xFF);
652 command
[4*nsg
-1] = ((address
>> 25) & 0xFF);
654 address
= 0340000; ct
= 1;
656 bulklen
+= (ct
<< 9);
657 command
[4*nsg
+2] = ct
;
658 command
[4*nsg
+1] = ((address
>> 9) & 0xFF);
659 command
[4*nsg
+0] = ((address
>> 17) & 0xFF);
660 command
[4*nsg
-1] = ((address
>> 25) & 0xFF);
662 address
= 01000000; ct
= 2;
664 bulklen
+= (ct
<< 9);
665 command
[4*nsg
+2] = ct
;
666 command
[4*nsg
+1] = ((address
>> 9) & 0xFF);
667 command
[4*nsg
+0] = ((address
>> 17) & 0xFF);
668 command
[4*nsg
-1] = ((address
>> 25) & 0xFF);
672 result
= sddr09_send_scsi_command(us
, command
, 4*nsg
+3);
675 usb_stor_dbg(us
, "Result for send_control in sddr09_read_sg %d\n",
680 buf
= kmalloc(bulklen
, GFP_NOIO
);
684 result
= usb_stor_bulk_transfer_buf(us
, us
->recv_bulk_pipe
,
687 if (result
!= USB_STOR_XFER_GOOD
) {
688 usb_stor_dbg(us
, "Result for bulk_transfer in sddr09_read_sg %d\n",
698 * Read Status Command: 12 bytes.
701 * Returns 64 bytes, all zero except for the first.
703 * bit 5: 1: Suspended
705 * bit 7: 1: Not write-protected
709 sddr09_read_status(struct us_data
*us
, unsigned char *status
) {
711 unsigned char *command
= us
->iobuf
;
712 unsigned char *data
= us
->iobuf
;
715 usb_stor_dbg(us
, "Reading status...\n");
717 memset(command
, 0, 12);
719 command
[1] = LUNBITS
;
721 result
= sddr09_send_scsi_command(us
, command
, 12);
725 result
= usb_stor_bulk_transfer_buf(us
, us
->recv_bulk_pipe
,
728 return (result
== USB_STOR_XFER_GOOD
? 0 : -EIO
);
732 sddr09_read_data(struct us_data
*us
,
733 unsigned long address
,
734 unsigned int sectors
) {
736 struct sddr09_card_info
*info
= (struct sddr09_card_info
*) us
->extra
;
737 unsigned char *buffer
;
738 unsigned int lba
, maxlba
, pba
;
739 unsigned int page
, pages
;
740 unsigned int len
, offset
;
741 struct scatterlist
*sg
;
744 // Figure out the initial LBA and page
745 lba
= address
>> info
->blockshift
;
746 page
= (address
& info
->blockmask
);
747 maxlba
= info
->capacity
>> (info
->pageshift
+ info
->blockshift
);
751 // Since we only read in one block at a time, we have to create
752 // a bounce buffer and move the data a piece at a time between the
753 // bounce buffer and the actual transfer buffer.
755 len
= min(sectors
, (unsigned int) info
->blocksize
) * info
->pagesize
;
756 buffer
= kmalloc(len
, GFP_NOIO
);
760 // This could be made much more efficient by checking for
761 // contiguous LBA's. Another exercise left to the student.
767 while (sectors
> 0) {
769 /* Find number of pages we can read in this block */
770 pages
= min(sectors
, info
->blocksize
- page
);
771 len
= pages
<< info
->pageshift
;
773 /* Not overflowing capacity? */
775 usb_stor_dbg(us
, "Error: Requested lba %u exceeds maximum %u\n",
781 /* Find where this lba lives on disk */
782 pba
= info
->lba_to_pba
[lba
];
784 if (pba
== UNDEF
) { /* this lba was never written */
786 usb_stor_dbg(us
, "Read %d zero pages (LBA %d) page %d\n",
790 * This is not really an error. It just means
791 * that the block has never been written.
792 * Instead of returning an error
793 * it is better to return all zero data.
796 memset(buffer
, 0, len
);
799 usb_stor_dbg(us
, "Read %d pages, from PBA %d (LBA %d) page %d\n",
800 pages
, pba
, lba
, page
);
802 address
= ((pba
<< info
->blockshift
) + page
) <<
805 result
= sddr09_read20(us
, address
>>1,
806 pages
, info
->pageshift
, buffer
, 0);
811 // Store the data in the transfer buffer
812 usb_stor_access_xfer_buf(buffer
, len
, us
->srb
,
813 &sg
, &offset
, TO_XFER_BUF
);
825 sddr09_find_unused_pba(struct sddr09_card_info
*info
, unsigned int lba
) {
826 static unsigned int lastpba
= 1;
827 int zonestart
, end
, i
;
829 zonestart
= (lba
/1000) << 10;
830 end
= info
->capacity
>> (info
->blockshift
+ info
->pageshift
);
835 for (i
= lastpba
+1; i
< end
; i
++) {
836 if (info
->pba_to_lba
[zonestart
+i
] == UNDEF
) {
841 for (i
= 0; i
<= lastpba
; i
++) {
842 if (info
->pba_to_lba
[zonestart
+i
] == UNDEF
) {
851 sddr09_write_lba(struct us_data
*us
, unsigned int lba
,
852 unsigned int page
, unsigned int pages
,
853 unsigned char *ptr
, unsigned char *blockbuffer
) {
855 struct sddr09_card_info
*info
= (struct sddr09_card_info
*) us
->extra
;
856 unsigned long address
;
857 unsigned int pba
, lbap
;
858 unsigned int pagelen
;
859 unsigned char *bptr
, *cptr
, *xptr
;
860 unsigned char ecc
[3];
863 lbap
= ((lba
% 1000) << 1) | 0x1000;
864 if (parity
[MSB_of(lbap
) ^ LSB_of(lbap
)])
866 pba
= info
->lba_to_pba
[lba
];
869 pba
= sddr09_find_unused_pba(info
, lba
);
872 "sddr09_write_lba: Out of unused blocks\n");
875 info
->pba_to_lba
[pba
] = lba
;
876 info
->lba_to_pba
[lba
] = pba
;
881 * Maybe it is impossible to write to PBA 1.
882 * Fake success, but don't do anything.
884 printk(KERN_WARNING
"sddr09: avoid writing to pba 1\n");
888 pagelen
= (1 << info
->pageshift
) + (1 << CONTROL_SHIFT
);
890 /* read old contents */
891 address
= (pba
<< (info
->pageshift
+ info
->blockshift
));
892 result
= sddr09_read22(us
, address
>>1, info
->blocksize
,
893 info
->pageshift
, blockbuffer
, 0);
897 /* check old contents and fill lba */
898 for (i
= 0; i
< info
->blocksize
; i
++) {
899 bptr
= blockbuffer
+ i
*pagelen
;
900 cptr
= bptr
+ info
->pagesize
;
901 nand_compute_ecc(bptr
, ecc
);
902 if (!nand_compare_ecc(cptr
+13, ecc
)) {
903 usb_stor_dbg(us
, "Warning: bad ecc in page %d- of pba %d\n",
905 nand_store_ecc(cptr
+13, ecc
);
907 nand_compute_ecc(bptr
+(info
->pagesize
/ 2), ecc
);
908 if (!nand_compare_ecc(cptr
+8, ecc
)) {
909 usb_stor_dbg(us
, "Warning: bad ecc in page %d+ of pba %d\n",
911 nand_store_ecc(cptr
+8, ecc
);
913 cptr
[6] = cptr
[11] = MSB_of(lbap
);
914 cptr
[7] = cptr
[12] = LSB_of(lbap
);
917 /* copy in new stuff and compute ECC */
919 for (i
= page
; i
< page
+pages
; i
++) {
920 bptr
= blockbuffer
+ i
*pagelen
;
921 cptr
= bptr
+ info
->pagesize
;
922 memcpy(bptr
, xptr
, info
->pagesize
);
923 xptr
+= info
->pagesize
;
924 nand_compute_ecc(bptr
, ecc
);
925 nand_store_ecc(cptr
+13, ecc
);
926 nand_compute_ecc(bptr
+(info
->pagesize
/ 2), ecc
);
927 nand_store_ecc(cptr
+8, ecc
);
930 usb_stor_dbg(us
, "Rewrite PBA %d (LBA %d)\n", pba
, lba
);
932 result
= sddr09_write_inplace(us
, address
>>1, info
->blocksize
,
933 info
->pageshift
, blockbuffer
, 0);
935 usb_stor_dbg(us
, "sddr09_write_inplace returns %d\n", result
);
939 unsigned char status
= 0;
940 int result2
= sddr09_read_status(us
, &status
);
942 usb_stor_dbg(us
, "cannot read status\n");
943 else if (status
!= 0xc0)
944 usb_stor_dbg(us
, "status after write: 0x%x\n", status
);
950 int result2
= sddr09_test_unit_ready(us
);
958 sddr09_write_data(struct us_data
*us
,
959 unsigned long address
,
960 unsigned int sectors
) {
962 struct sddr09_card_info
*info
= (struct sddr09_card_info
*) us
->extra
;
963 unsigned int lba
, maxlba
, page
, pages
;
964 unsigned int pagelen
, blocklen
;
965 unsigned char *blockbuffer
;
966 unsigned char *buffer
;
967 unsigned int len
, offset
;
968 struct scatterlist
*sg
;
971 /* Figure out the initial LBA and page */
972 lba
= address
>> info
->blockshift
;
973 page
= (address
& info
->blockmask
);
974 maxlba
= info
->capacity
>> (info
->pageshift
+ info
->blockshift
);
979 * blockbuffer is used for reading in the old data, overwriting
980 * with the new data, and performing ECC calculations
984 * TODO: instead of doing kmalloc/kfree for each write,
985 * add a bufferpointer to the info structure
988 pagelen
= (1 << info
->pageshift
) + (1 << CONTROL_SHIFT
);
989 blocklen
= (pagelen
<< info
->blockshift
);
990 blockbuffer
= kmalloc(blocklen
, GFP_NOIO
);
995 * Since we don't write the user data directly to the device,
996 * we have to create a bounce buffer and move the data a piece
997 * at a time between the bounce buffer and the actual transfer buffer.
1000 len
= min(sectors
, (unsigned int) info
->blocksize
) * info
->pagesize
;
1001 buffer
= kmalloc(len
, GFP_NOIO
);
1011 while (sectors
> 0) {
1013 /* Write as many sectors as possible in this block */
1015 pages
= min(sectors
, info
->blocksize
- page
);
1016 len
= (pages
<< info
->pageshift
);
1018 /* Not overflowing capacity? */
1019 if (lba
>= maxlba
) {
1020 usb_stor_dbg(us
, "Error: Requested lba %u exceeds maximum %u\n",
1026 /* Get the data from the transfer buffer */
1027 usb_stor_access_xfer_buf(buffer
, len
, us
->srb
,
1028 &sg
, &offset
, FROM_XFER_BUF
);
1030 result
= sddr09_write_lba(us
, lba
, page
, pages
,
1031 buffer
, blockbuffer
);
1047 sddr09_read_control(struct us_data
*us
,
1048 unsigned long address
,
1049 unsigned int blocks
,
1050 unsigned char *content
,
1053 usb_stor_dbg(us
, "Read control address %lu, blocks %d\n",
1056 return sddr09_read21(us
, address
, blocks
,
1057 CONTROL_SHIFT
, content
, use_sg
);
1061 * Read Device ID Command: 12 bytes.
1062 * byte 0: opcode: ED
1064 * Returns 2 bytes: Manufacturer ID and Device ID.
1065 * On more recent cards 3 bytes: the third byte is an option code A5
1066 * signifying that the secret command to read an 128-bit ID is available.
1067 * On still more recent cards 4 bytes: the fourth byte C0 means that
1068 * a second read ID cmd is available.
1071 sddr09_read_deviceID(struct us_data
*us
, unsigned char *deviceID
) {
1072 unsigned char *command
= us
->iobuf
;
1073 unsigned char *content
= us
->iobuf
;
1076 memset(command
, 0, 12);
1078 command
[1] = LUNBITS
;
1080 result
= sddr09_send_scsi_command(us
, command
, 12);
1084 result
= usb_stor_bulk_transfer_buf(us
, us
->recv_bulk_pipe
,
1087 for (i
= 0; i
< 4; i
++)
1088 deviceID
[i
] = content
[i
];
1090 return (result
== USB_STOR_XFER_GOOD
? 0 : -EIO
);
1094 sddr09_get_wp(struct us_data
*us
, struct sddr09_card_info
*info
) {
1096 unsigned char status
;
1099 result
= sddr09_read_status(us
, &status
);
1101 usb_stor_dbg(us
, "read_status fails\n");
1104 if ((status
& 0x80) == 0) {
1105 info
->flags
|= SDDR09_WP
; /* write protected */
1110 usb_stor_dbg(us
, "status 0x%02X%s%s%s%s\n", status
, wp_fmt
,
1111 status
& 0x40 ? " Ready" : "",
1112 status
& LUNBITS
? " Suspended" : "",
1113 status
& 0x01 ? " Error" : "");
1120 * Reset Command: 12 bytes.
1121 * byte 0: opcode: EB
1124 sddr09_reset(struct us_data
*us
) {
1126 unsigned char *command
= us
->iobuf
;
1128 memset(command
, 0, 12);
1130 command
[1] = LUNBITS
;
1132 return sddr09_send_scsi_command(us
, command
, 12);
1136 static struct nand_flash_dev
*
1137 sddr09_get_cardinfo(struct us_data
*us
, unsigned char flags
) {
1138 struct nand_flash_dev
*cardinfo
;
1139 unsigned char deviceID
[4];
1143 usb_stor_dbg(us
, "Reading capacity...\n");
1145 result
= sddr09_read_deviceID(us
, deviceID
);
1148 usb_stor_dbg(us
, "Result of read_deviceID is %d\n", result
);
1149 printk(KERN_WARNING
"sddr09: could not read card info\n");
1153 sprintf(blurbtxt
, "sddr09: Found Flash card, ID = %4ph", deviceID
);
1155 /* Byte 0 is the manufacturer */
1156 sprintf(blurbtxt
+ strlen(blurbtxt
),
1158 nand_flash_manufacturer(deviceID
[0]));
1160 /* Byte 1 is the device type */
1161 cardinfo
= nand_find_id(deviceID
[1]);
1164 * MB or MiB? It is neither. A 16 MB card has
1165 * 17301504 raw bytes, of which 16384000 are
1166 * usable for user data.
1168 sprintf(blurbtxt
+ strlen(blurbtxt
),
1169 ", %d MB", 1<<(cardinfo
->chipshift
- 20));
1171 sprintf(blurbtxt
+ strlen(blurbtxt
),
1172 ", type unrecognized");
1175 /* Byte 2 is code to signal availability of 128-bit ID */
1176 if (deviceID
[2] == 0xa5) {
1177 sprintf(blurbtxt
+ strlen(blurbtxt
),
1181 /* Byte 3 announces the availability of another read ID command */
1182 if (deviceID
[3] == 0xc0) {
1183 sprintf(blurbtxt
+ strlen(blurbtxt
),
1187 if (flags
& SDDR09_WP
)
1188 sprintf(blurbtxt
+ strlen(blurbtxt
),
1191 printk(KERN_WARNING
"%s\n", blurbtxt
);
1197 sddr09_read_map(struct us_data
*us
) {
1199 struct sddr09_card_info
*info
= (struct sddr09_card_info
*) us
->extra
;
1200 int numblocks
, alloc_len
, alloc_blocks
;
1202 unsigned char *buffer
, *buffer_end
, *ptr
;
1203 unsigned int lba
, lbact
;
1205 if (!info
->capacity
)
1209 * size of a block is 1 << (blockshift + pageshift) bytes
1210 * divide into the total capacity to get the number of blocks
1213 numblocks
= info
->capacity
>> (info
->blockshift
+ info
->pageshift
);
1216 * read 64 bytes for every block (actually 1 << CONTROL_SHIFT)
1217 * but only use a 64 KB buffer
1218 * buffer size used must be a multiple of (1 << CONTROL_SHIFT)
1220 #define SDDR09_READ_MAP_BUFSZ 65536
1222 alloc_blocks
= min(numblocks
, SDDR09_READ_MAP_BUFSZ
>> CONTROL_SHIFT
);
1223 alloc_len
= (alloc_blocks
<< CONTROL_SHIFT
);
1224 buffer
= kmalloc(alloc_len
, GFP_NOIO
);
1229 buffer_end
= buffer
+ alloc_len
;
1231 #undef SDDR09_READ_MAP_BUFSZ
1233 kfree(info
->lba_to_pba
);
1234 kfree(info
->pba_to_lba
);
1235 info
->lba_to_pba
= kmalloc_array(numblocks
, sizeof(int), GFP_NOIO
);
1236 info
->pba_to_lba
= kmalloc_array(numblocks
, sizeof(int), GFP_NOIO
);
1238 if (info
->lba_to_pba
== NULL
|| info
->pba_to_lba
== NULL
) {
1239 printk(KERN_WARNING
"sddr09_read_map: out of memory\n");
1244 for (i
= 0; i
< numblocks
; i
++)
1245 info
->lba_to_pba
[i
] = info
->pba_to_lba
[i
] = UNDEF
;
1248 * Define lba-pba translation table
1252 for (i
= 0; i
< numblocks
; i
++) {
1253 ptr
+= (1 << CONTROL_SHIFT
);
1254 if (ptr
>= buffer_end
) {
1255 unsigned long address
;
1257 address
= i
<< (info
->pageshift
+ info
->blockshift
);
1258 result
= sddr09_read_control(
1260 min(alloc_blocks
, numblocks
- i
),
1269 if (i
== 0 || i
== 1) {
1270 info
->pba_to_lba
[i
] = UNUSABLE
;
1274 /* special PBAs have control field 0^16 */
1275 for (j
= 0; j
< 16; j
++)
1278 info
->pba_to_lba
[i
] = UNUSABLE
;
1279 printk(KERN_WARNING
"sddr09: PBA %d has no logical mapping\n",
1284 /* unwritten PBAs have control field FF^16 */
1285 for (j
= 0; j
< 16; j
++)
1291 /* normal PBAs start with six FFs */
1294 "sddr09: PBA %d has no logical mapping: "
1295 "reserved area = %02X%02X%02X%02X "
1296 "data status %02X block status %02X\n",
1297 i
, ptr
[0], ptr
[1], ptr
[2], ptr
[3],
1299 info
->pba_to_lba
[i
] = UNUSABLE
;
1303 if ((ptr
[6] >> 4) != 0x01) {
1305 "sddr09: PBA %d has invalid address field "
1306 "%02X%02X/%02X%02X\n",
1307 i
, ptr
[6], ptr
[7], ptr
[11], ptr
[12]);
1308 info
->pba_to_lba
[i
] = UNUSABLE
;
1312 /* check even parity */
1313 if (parity
[ptr
[6] ^ ptr
[7]]) {
1315 "sddr09: Bad parity in LBA for block %d"
1316 " (%02X %02X)\n", i
, ptr
[6], ptr
[7]);
1317 info
->pba_to_lba
[i
] = UNUSABLE
;
1321 lba
= short_pack(ptr
[7], ptr
[6]);
1322 lba
= (lba
& 0x07FF) >> 1;
1325 * Every 1024 physical blocks ("zone"), the LBA numbers
1326 * go back to zero, but are within a higher block of LBA's.
1327 * Also, there is a maximum of 1000 LBA's per zone.
1328 * In other words, in PBA 1024-2047 you will find LBA 0-999
1329 * which are really LBA 1000-1999. This allows for 24 bad
1330 * or special physical blocks per zone.
1335 "sddr09: Bad low LBA %d for block %d\n",
1337 goto possibly_erase
;
1340 lba
+= 1000*(i
/0x400);
1342 if (info
->lba_to_pba
[lba
] != UNDEF
) {
1344 "sddr09: LBA %d seen for PBA %d and %d\n",
1345 lba
, info
->lba_to_pba
[lba
], i
);
1346 goto possibly_erase
;
1349 info
->pba_to_lba
[i
] = lba
;
1350 info
->lba_to_pba
[lba
] = i
;
1354 if (erase_bad_lba_entries
) {
1355 unsigned long address
;
1357 address
= (i
<< (info
->pageshift
+ info
->blockshift
));
1358 sddr09_erase(us
, address
>>1);
1359 info
->pba_to_lba
[i
] = UNDEF
;
1361 info
->pba_to_lba
[i
] = UNUSABLE
;
1365 * Approximate capacity. This is not entirely correct yet,
1366 * since a zone with less than 1000 usable pages leads to
1367 * missing LBAs. Especially if it is the last zone, some
1368 * LBAs can be past capacity.
1371 for (i
= 0; i
< numblocks
; i
+= 1024) {
1374 for (j
= 0; j
< 1024 && i
+j
< numblocks
; j
++) {
1375 if (info
->pba_to_lba
[i
+j
] != UNUSABLE
) {
1377 info
->pba_to_lba
[i
+j
] = SPARE
;
1384 info
->lbact
= lbact
;
1385 usb_stor_dbg(us
, "Found %d LBA's\n", lbact
);
1390 kfree(info
->lba_to_pba
);
1391 kfree(info
->pba_to_lba
);
1392 info
->lba_to_pba
= NULL
;
1393 info
->pba_to_lba
= NULL
;
1400 sddr09_card_info_destructor(void *extra
) {
1401 struct sddr09_card_info
*info
= (struct sddr09_card_info
*)extra
;
1406 kfree(info
->lba_to_pba
);
1407 kfree(info
->pba_to_lba
);
1411 sddr09_common_init(struct us_data
*us
) {
1414 /* set the configuration -- STALL is an acceptable response here */
1415 if (us
->pusb_dev
->actconfig
->desc
.bConfigurationValue
!= 1) {
1416 usb_stor_dbg(us
, "active config #%d != 1 ??\n",
1417 us
->pusb_dev
->actconfig
->desc
.bConfigurationValue
);
1421 result
= usb_reset_configuration(us
->pusb_dev
);
1422 usb_stor_dbg(us
, "Result of usb_reset_configuration is %d\n", result
);
1423 if (result
== -EPIPE
) {
1424 usb_stor_dbg(us
, "-- stall on control interface\n");
1425 } else if (result
!= 0) {
1426 /* it's not a stall, but another error -- time to bail */
1427 usb_stor_dbg(us
, "-- Unknown error. Rejecting device\n");
1431 us
->extra
= kzalloc(sizeof(struct sddr09_card_info
), GFP_NOIO
);
1434 us
->extra_destructor
= sddr09_card_info_destructor
;
1442 * This is needed at a very early stage. If this is not listed in the
1443 * unusual devices list but called from here then LUN 0 of the combo reader
1444 * is not recognized. But I do not know what precisely these calls do.
1447 usb_stor_sddr09_dpcm_init(struct us_data
*us
) {
1449 unsigned char *data
= us
->iobuf
;
1451 result
= sddr09_common_init(us
);
1455 result
= sddr09_send_command(us
, 0x01, USB_DIR_IN
, data
, 2);
1457 usb_stor_dbg(us
, "send_command fails\n");
1461 usb_stor_dbg(us
, "%02X %02X\n", data
[0], data
[1]);
1464 result
= sddr09_send_command(us
, 0x08, USB_DIR_IN
, data
, 2);
1466 usb_stor_dbg(us
, "2nd send_command fails\n");
1470 usb_stor_dbg(us
, "%02X %02X\n", data
[0], data
[1]);
1473 result
= sddr09_request_sense(us
, data
, 18);
1474 if (result
== 0 && data
[2] != 0) {
1476 for (j
=0; j
<18; j
++)
1477 printk(" %02X", data
[j
]);
1479 // get 70 00 00 00 00 00 00 * 00 00 00 00 00 00
1480 // 70: current command
1481 // sense key 0, sense code 0, extd sense code 0
1482 // additional transfer length * = sizeof(data) - 7
1483 // Or: 70 00 06 00 00 00 00 0b 00 00 00 00 28 00 00 00 00 00
1484 // sense key 06, sense code 28: unit attention,
1485 // not ready to ready transition
1490 return 0; /* not result */
1494 * Transport for the Microtech DPCM-USB
1496 static int dpcm_transport(struct scsi_cmnd
*srb
, struct us_data
*us
)
1500 usb_stor_dbg(us
, "LUN=%d\n", (u8
)srb
->device
->lun
);
1502 switch (srb
->device
->lun
) {
1506 * LUN 0 corresponds to the CompactFlash card reader.
1508 ret
= usb_stor_CB_transport(srb
, us
);
1514 * LUN 1 corresponds to the SmartMedia card reader.
1518 * Set the LUN to 0 (just in case).
1520 srb
->device
->lun
= 0;
1521 ret
= sddr09_transport(srb
, us
);
1522 srb
->device
->lun
= 1;
1526 usb_stor_dbg(us
, "Invalid LUN %d\n", (u8
)srb
->device
->lun
);
1527 ret
= USB_STOR_TRANSPORT_ERROR
;
1535 * Transport for the Sandisk SDDR-09
1537 static int sddr09_transport(struct scsi_cmnd
*srb
, struct us_data
*us
)
1539 static unsigned char sensekey
= 0, sensecode
= 0;
1540 static unsigned char havefakesense
= 0;
1542 unsigned char *ptr
= us
->iobuf
;
1543 unsigned long capacity
;
1544 unsigned int page
, pages
;
1546 struct sddr09_card_info
*info
;
1548 static unsigned char inquiry_response
[8] = {
1549 0x00, 0x80, 0x00, 0x02, 0x1F, 0x00, 0x00, 0x00
1552 /* note: no block descriptor support */
1553 static unsigned char mode_page_01
[19] = {
1554 0x00, 0x0F, 0x00, 0x0, 0x0, 0x0, 0x00,
1556 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1559 info
= (struct sddr09_card_info
*)us
->extra
;
1561 if (srb
->cmnd
[0] == REQUEST_SENSE
&& havefakesense
) {
1562 /* for a faked command, we have to follow with a faked sense */
1567 ptr
[12] = sensecode
;
1568 usb_stor_set_xfer_buf(ptr
, 18, srb
);
1569 sensekey
= sensecode
= havefakesense
= 0;
1570 return USB_STOR_TRANSPORT_GOOD
;
1576 * Dummy up a response for INQUIRY since SDDR09 doesn't
1577 * respond to INQUIRY commands
1580 if (srb
->cmnd
[0] == INQUIRY
) {
1581 memcpy(ptr
, inquiry_response
, 8);
1582 fill_inquiry_response(us
, ptr
, 36);
1583 return USB_STOR_TRANSPORT_GOOD
;
1586 if (srb
->cmnd
[0] == READ_CAPACITY
) {
1587 struct nand_flash_dev
*cardinfo
;
1589 sddr09_get_wp(us
, info
); /* read WP bit */
1591 cardinfo
= sddr09_get_cardinfo(us
, info
->flags
);
1593 /* probably no media */
1595 sensekey
= 0x02; /* not ready */
1596 sensecode
= 0x3a; /* medium not present */
1597 return USB_STOR_TRANSPORT_FAILED
;
1600 info
->capacity
= (1 << cardinfo
->chipshift
);
1601 info
->pageshift
= cardinfo
->pageshift
;
1602 info
->pagesize
= (1 << info
->pageshift
);
1603 info
->blockshift
= cardinfo
->blockshift
;
1604 info
->blocksize
= (1 << info
->blockshift
);
1605 info
->blockmask
= info
->blocksize
- 1;
1607 // map initialization, must follow get_cardinfo()
1608 if (sddr09_read_map(us
)) {
1609 /* probably out of memory */
1615 capacity
= (info
->lbact
<< info
->blockshift
) - 1;
1617 ((__be32
*) ptr
)[0] = cpu_to_be32(capacity
);
1621 ((__be32
*) ptr
)[1] = cpu_to_be32(info
->pagesize
);
1622 usb_stor_set_xfer_buf(ptr
, 8, srb
);
1624 return USB_STOR_TRANSPORT_GOOD
;
1627 if (srb
->cmnd
[0] == MODE_SENSE_10
) {
1628 int modepage
= (srb
->cmnd
[2] & 0x3F);
1631 * They ask for the Read/Write error recovery page,
1634 /* %% We should check DBD %% */
1635 if (modepage
== 0x01 || modepage
== 0x3F) {
1636 usb_stor_dbg(us
, "Dummy up request for mode page 0x%x\n",
1639 memcpy(ptr
, mode_page_01
, sizeof(mode_page_01
));
1640 ((__be16
*)ptr
)[0] = cpu_to_be16(sizeof(mode_page_01
) - 2);
1641 ptr
[3] = (info
->flags
& SDDR09_WP
) ? 0x80 : 0;
1642 usb_stor_set_xfer_buf(ptr
, sizeof(mode_page_01
), srb
);
1643 return USB_STOR_TRANSPORT_GOOD
;
1646 sensekey
= 0x05; /* illegal request */
1647 sensecode
= 0x24; /* invalid field in CDB */
1648 return USB_STOR_TRANSPORT_FAILED
;
1651 if (srb
->cmnd
[0] == ALLOW_MEDIUM_REMOVAL
)
1652 return USB_STOR_TRANSPORT_GOOD
;
1656 if (srb
->cmnd
[0] == READ_10
) {
1658 page
= short_pack(srb
->cmnd
[3], srb
->cmnd
[2]);
1660 page
|= short_pack(srb
->cmnd
[5], srb
->cmnd
[4]);
1661 pages
= short_pack(srb
->cmnd
[8], srb
->cmnd
[7]);
1663 usb_stor_dbg(us
, "READ_10: read page %d pagect %d\n",
1666 result
= sddr09_read_data(us
, page
, pages
);
1667 return (result
== 0 ? USB_STOR_TRANSPORT_GOOD
:
1668 USB_STOR_TRANSPORT_ERROR
);
1671 if (srb
->cmnd
[0] == WRITE_10
) {
1673 page
= short_pack(srb
->cmnd
[3], srb
->cmnd
[2]);
1675 page
|= short_pack(srb
->cmnd
[5], srb
->cmnd
[4]);
1676 pages
= short_pack(srb
->cmnd
[8], srb
->cmnd
[7]);
1678 usb_stor_dbg(us
, "WRITE_10: write page %d pagect %d\n",
1681 result
= sddr09_write_data(us
, page
, pages
);
1682 return (result
== 0 ? USB_STOR_TRANSPORT_GOOD
:
1683 USB_STOR_TRANSPORT_ERROR
);
1687 * catch-all for all other commands, except
1688 * pass TEST_UNIT_READY and REQUEST_SENSE through
1690 if (srb
->cmnd
[0] != TEST_UNIT_READY
&&
1691 srb
->cmnd
[0] != REQUEST_SENSE
) {
1692 sensekey
= 0x05; /* illegal request */
1693 sensecode
= 0x20; /* invalid command */
1695 return USB_STOR_TRANSPORT_FAILED
;
1698 for (; srb
->cmd_len
<12; srb
->cmd_len
++)
1699 srb
->cmnd
[srb
->cmd_len
] = 0;
1701 srb
->cmnd
[1] = LUNBITS
;
1704 for (i
=0; i
<12; i
++)
1705 sprintf(ptr
+strlen(ptr
), "%02X ", srb
->cmnd
[i
]);
1707 usb_stor_dbg(us
, "Send control for command %s\n", ptr
);
1709 result
= sddr09_send_scsi_command(us
, srb
->cmnd
, 12);
1711 usb_stor_dbg(us
, "sddr09_send_scsi_command returns %d\n",
1713 return USB_STOR_TRANSPORT_ERROR
;
1716 if (scsi_bufflen(srb
) == 0)
1717 return USB_STOR_TRANSPORT_GOOD
;
1719 if (srb
->sc_data_direction
== DMA_TO_DEVICE
||
1720 srb
->sc_data_direction
== DMA_FROM_DEVICE
) {
1721 unsigned int pipe
= (srb
->sc_data_direction
== DMA_TO_DEVICE
)
1722 ? us
->send_bulk_pipe
: us
->recv_bulk_pipe
;
1724 usb_stor_dbg(us
, "%s %d bytes\n",
1725 (srb
->sc_data_direction
== DMA_TO_DEVICE
) ?
1726 "sending" : "receiving",
1729 result
= usb_stor_bulk_srb(us
, pipe
, srb
);
1731 return (result
== USB_STOR_XFER_GOOD
?
1732 USB_STOR_TRANSPORT_GOOD
: USB_STOR_TRANSPORT_ERROR
);
1735 return USB_STOR_TRANSPORT_GOOD
;
1739 * Initialization routine for the sddr09 subdriver
1742 usb_stor_sddr09_init(struct us_data
*us
) {
1743 return sddr09_common_init(us
);
1746 static struct scsi_host_template sddr09_host_template
;
1748 static int sddr09_probe(struct usb_interface
*intf
,
1749 const struct usb_device_id
*id
)
1754 result
= usb_stor_probe1(&us
, intf
, id
,
1755 (id
- sddr09_usb_ids
) + sddr09_unusual_dev_list
,
1756 &sddr09_host_template
);
1760 if (us
->protocol
== USB_PR_DPCM_USB
) {
1761 us
->transport_name
= "Control/Bulk-EUSB/SDDR09";
1762 us
->transport
= dpcm_transport
;
1763 us
->transport_reset
= usb_stor_CB_reset
;
1766 us
->transport_name
= "EUSB/SDDR09";
1767 us
->transport
= sddr09_transport
;
1768 us
->transport_reset
= usb_stor_CB_reset
;
1772 result
= usb_stor_probe2(us
);
1776 static struct usb_driver sddr09_driver
= {
1778 .probe
= sddr09_probe
,
1779 .disconnect
= usb_stor_disconnect
,
1780 .suspend
= usb_stor_suspend
,
1781 .resume
= usb_stor_resume
,
1782 .reset_resume
= usb_stor_reset_resume
,
1783 .pre_reset
= usb_stor_pre_reset
,
1784 .post_reset
= usb_stor_post_reset
,
1785 .id_table
= sddr09_usb_ids
,
1790 module_usb_stor_driver(sddr09_driver
, sddr09_host_template
, DRV_NAME
);