1 // SPDX-License-Identifier: GPL-2.0+
3 * Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable
5 * Current development and maintenance by:
6 * (c) 2000, 2001 Robert Baruch (autophile@starband.net)
7 * (c) 2004, 2005 Daniel Drake <dsd@gentoo.org>
9 * Developed with the assistance of:
10 * (c) 2002 Alan Stern <stern@rowland.org>
12 * Flash support based on earlier work by:
13 * (c) 2002 Thomas Kreiling <usbdev@sm04.de>
15 * Many originally ATAPI devices were slightly modified to meet the USB
16 * market by using some kind of translation from ATAPI to USB on the host,
17 * and the peripheral would translate from USB back to ATAPI.
19 * SCM Microsystems (www.scmmicro.com) makes a device, sold to OEM's only,
20 * which does the USB-to-ATAPI conversion. By obtaining the data sheet on
21 * their device under nondisclosure agreement, I have been able to write
22 * this driver for Linux.
24 * The chip used in the device can also be used for EPP and ISA translation
25 * as well. This driver is only guaranteed to work with the ATAPI
28 * See the Kconfig help text for a list of devices known to be supported by
32 #include <linux/errno.h>
33 #include <linux/module.h>
34 #include <linux/slab.h>
35 #include <linux/cdrom.h>
37 #include <scsi/scsi.h>
38 #include <scsi/scsi_cmnd.h>
41 #include "transport.h"
46 #define DRV_NAME "ums-usbat"
48 MODULE_DESCRIPTION("Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable");
49 MODULE_AUTHOR("Daniel Drake <dsd@gentoo.org>, Robert Baruch <autophile@starband.net>");
50 MODULE_LICENSE("GPL");
51 MODULE_IMPORT_NS(USB_STORAGE
);
53 /* Supported device types */
54 #define USBAT_DEV_HP8200 0x01
55 #define USBAT_DEV_FLASH 0x02
57 #define USBAT_EPP_PORT 0x10
58 #define USBAT_EPP_REGISTER 0x30
59 #define USBAT_ATA 0x40
60 #define USBAT_ISA 0x50
62 /* Commands (need to be logically OR'd with an access type */
63 #define USBAT_CMD_READ_REG 0x00
64 #define USBAT_CMD_WRITE_REG 0x01
65 #define USBAT_CMD_READ_BLOCK 0x02
66 #define USBAT_CMD_WRITE_BLOCK 0x03
67 #define USBAT_CMD_COND_READ_BLOCK 0x04
68 #define USBAT_CMD_COND_WRITE_BLOCK 0x05
69 #define USBAT_CMD_WRITE_REGS 0x07
71 /* Commands (these don't need an access type) */
72 #define USBAT_CMD_EXEC_CMD 0x80
73 #define USBAT_CMD_SET_FEAT 0x81
74 #define USBAT_CMD_UIO 0x82
76 /* Methods of accessing UIO register */
77 #define USBAT_UIO_READ 1
78 #define USBAT_UIO_WRITE 0
81 #define USBAT_QUAL_FCQ 0x20 /* full compare */
82 #define USBAT_QUAL_ALQ 0x10 /* auto load subcount */
84 /* USBAT Flash Media status types */
85 #define USBAT_FLASH_MEDIA_NONE 0
86 #define USBAT_FLASH_MEDIA_CF 1
88 /* USBAT Flash Media change types */
89 #define USBAT_FLASH_MEDIA_SAME 0
90 #define USBAT_FLASH_MEDIA_CHANGED 1
92 /* USBAT ATA registers */
93 #define USBAT_ATA_DATA 0x10 /* read/write data (R/W) */
94 #define USBAT_ATA_FEATURES 0x11 /* set features (W) */
95 #define USBAT_ATA_ERROR 0x11 /* error (R) */
96 #define USBAT_ATA_SECCNT 0x12 /* sector count (R/W) */
97 #define USBAT_ATA_SECNUM 0x13 /* sector number (R/W) */
98 #define USBAT_ATA_LBA_ME 0x14 /* cylinder low (R/W) */
99 #define USBAT_ATA_LBA_HI 0x15 /* cylinder high (R/W) */
100 #define USBAT_ATA_DEVICE 0x16 /* head/device selection (R/W) */
101 #define USBAT_ATA_STATUS 0x17 /* device status (R) */
102 #define USBAT_ATA_CMD 0x17 /* device command (W) */
103 #define USBAT_ATA_ALTSTATUS 0x0E /* status (no clear IRQ) (R) */
105 /* USBAT User I/O Data registers */
106 #define USBAT_UIO_EPAD 0x80 /* Enable Peripheral Control Signals */
107 #define USBAT_UIO_CDT 0x40 /* Card Detect (Read Only) */
108 /* CDT = ACKD & !UI1 & !UI0 */
109 #define USBAT_UIO_1 0x20 /* I/O 1 */
110 #define USBAT_UIO_0 0x10 /* I/O 0 */
111 #define USBAT_UIO_EPP_ATA 0x08 /* 1=EPP mode, 0=ATA mode */
112 #define USBAT_UIO_UI1 0x04 /* Input 1 */
113 #define USBAT_UIO_UI0 0x02 /* Input 0 */
114 #define USBAT_UIO_INTR_ACK 0x01 /* Interrupt (ATA/ISA)/Acknowledge (EPP) */
116 /* USBAT User I/O Enable registers */
117 #define USBAT_UIO_DRVRST 0x80 /* Reset Peripheral */
118 #define USBAT_UIO_ACKD 0x40 /* Enable Card Detect */
119 #define USBAT_UIO_OE1 0x20 /* I/O 1 set=output/clr=input */
120 /* If ACKD=1, set OE1 to 1 also. */
121 #define USBAT_UIO_OE0 0x10 /* I/O 0 set=output/clr=input */
122 #define USBAT_UIO_ADPRST 0x01 /* Reset SCM chip */
125 #define USBAT_FEAT_ETEN 0x80 /* External trigger enable */
126 #define USBAT_FEAT_U1 0x08
127 #define USBAT_FEAT_U0 0x04
128 #define USBAT_FEAT_ET1 0x02
129 #define USBAT_FEAT_ET2 0x01
134 /* Used for Flash readers only */
135 unsigned long sectors
; /* total sector count */
136 unsigned long ssize
; /* sector size in bytes */
138 unsigned char sense_key
;
139 unsigned long sense_asc
; /* additional sense code */
140 unsigned long sense_ascq
; /* additional sense code qualifier */
143 #define short_pack(LSB,MSB) ( ((u16)(LSB)) | ( ((u16)(MSB))<<8 ) )
144 #define LSB_of(s) ((s)&0xFF)
145 #define MSB_of(s) ((s)>>8)
147 static int transferred
= 0;
149 static int usbat_flash_transport(struct scsi_cmnd
* srb
, struct us_data
*us
);
150 static int usbat_hp8200e_transport(struct scsi_cmnd
*srb
, struct us_data
*us
);
152 static int init_usbat_cd(struct us_data
*us
);
153 static int init_usbat_flash(struct us_data
*us
);
157 * The table of devices
159 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
160 vendorName, productName, useProtocol, useTransport, \
161 initFunction, flags) \
162 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \
163 .driver_info = (flags) }
165 static struct usb_device_id usbat_usb_ids
[] = {
166 # include "unusual_usbat.h"
167 { } /* Terminating entry */
169 MODULE_DEVICE_TABLE(usb
, usbat_usb_ids
);
176 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
177 vendor_name, product_name, use_protocol, use_transport, \
178 init_function, Flags) \
180 .vendorName = vendor_name, \
181 .productName = product_name, \
182 .useProtocol = use_protocol, \
183 .useTransport = use_transport, \
184 .initFunction = init_function, \
187 static struct us_unusual_dev usbat_unusual_dev_list
[] = {
188 # include "unusual_usbat.h"
189 { } /* Terminating entry */
195 * Convenience function to produce an ATA read/write sectors command
196 * Use cmd=0x20 for read, cmd=0x30 for write
198 static void usbat_pack_ata_sector_cmd(unsigned char *buf
,
199 unsigned char thistime
,
200 u32 sector
, unsigned char cmd
)
204 buf
[2] = sector
& 0xFF;
205 buf
[3] = (sector
>> 8) & 0xFF;
206 buf
[4] = (sector
>> 16) & 0xFF;
207 buf
[5] = 0xE0 | ((sector
>> 24) & 0x0F);
212 * Convenience function to get the device type (flash or hp8200)
214 static int usbat_get_device_type(struct us_data
*us
)
216 return ((struct usbat_info
*)us
->extra
)->devicetype
;
220 * Read a register from the device
222 static int usbat_read(struct us_data
*us
,
223 unsigned char access
,
225 unsigned char *content
)
227 return usb_stor_ctrl_transfer(us
,
229 access
| USBAT_CMD_READ_REG
,
238 * Write to a register on the device
240 static int usbat_write(struct us_data
*us
,
241 unsigned char access
,
243 unsigned char content
)
245 return usb_stor_ctrl_transfer(us
,
247 access
| USBAT_CMD_WRITE_REG
,
249 short_pack(reg
, content
),
256 * Convenience function to perform a bulk read
258 static int usbat_bulk_read(struct us_data
*us
,
264 return USB_STOR_XFER_GOOD
;
266 usb_stor_dbg(us
, "len = %d\n", len
);
267 return usb_stor_bulk_transfer_sg(us
, us
->recv_bulk_pipe
, buf
, len
, use_sg
, NULL
);
271 * Convenience function to perform a bulk write
273 static int usbat_bulk_write(struct us_data
*us
,
279 return USB_STOR_XFER_GOOD
;
281 usb_stor_dbg(us
, "len = %d\n", len
);
282 return usb_stor_bulk_transfer_sg(us
, us
->send_bulk_pipe
, buf
, len
, use_sg
, NULL
);
286 * Some USBAT-specific commands can only be executed over a command transport
287 * This transport allows one (len=8) or two (len=16) vendor-specific commands
290 static int usbat_execute_command(struct us_data
*us
,
291 unsigned char *commands
,
294 return usb_stor_ctrl_transfer(us
, us
->send_ctrl_pipe
,
295 USBAT_CMD_EXEC_CMD
, 0x40, 0, 0,
300 * Read the status register
302 static int usbat_get_status(struct us_data
*us
, unsigned char *status
)
305 rc
= usbat_read(us
, USBAT_ATA
, USBAT_ATA_STATUS
, status
);
307 usb_stor_dbg(us
, "0x%02X\n", *status
);
312 * Check the device status
314 static int usbat_check_status(struct us_data
*us
)
316 unsigned char *reply
= us
->iobuf
;
319 rc
= usbat_get_status(us
, reply
);
320 if (rc
!= USB_STOR_XFER_GOOD
)
321 return USB_STOR_TRANSPORT_FAILED
;
323 /* error/check condition (0x51 is ok) */
324 if (*reply
& 0x01 && *reply
!= 0x51)
325 return USB_STOR_TRANSPORT_FAILED
;
329 return USB_STOR_TRANSPORT_FAILED
;
331 return USB_STOR_TRANSPORT_GOOD
;
335 * Stores critical information in internal registers in preparation for the execution
336 * of a conditional usbat_read_blocks or usbat_write_blocks call.
338 static int usbat_set_shuttle_features(struct us_data
*us
,
339 unsigned char external_trigger
,
340 unsigned char epp_control
,
341 unsigned char mask_byte
,
342 unsigned char test_pattern
,
343 unsigned char subcountH
,
344 unsigned char subcountL
)
346 unsigned char *command
= us
->iobuf
;
349 command
[1] = USBAT_CMD_SET_FEAT
;
352 * The only bit relevant to ATA access is bit 6
353 * which defines 8 bit data access (set) or 16 bit (unset)
355 command
[2] = epp_control
;
358 * If FCQ is set in the qualifier (defined in R/W cmd), then bits U0, U1,
359 * ET1 and ET2 define an external event to be checked for on event of a
360 * _read_blocks or _write_blocks operation. The read/write will not take
361 * place unless the defined trigger signal is active.
363 command
[3] = external_trigger
;
366 * The resultant byte of the mask operation (see mask_byte) is compared for
367 * equivalence with this test pattern. If equal, the read/write will take
370 command
[4] = test_pattern
;
373 * This value is logically ANDed with the status register field specified
374 * in the read/write command.
376 command
[5] = mask_byte
;
379 * If ALQ is set in the qualifier, this field contains the address of the
380 * registers where the byte count should be read for transferring the data.
381 * If ALQ is not set, then this field contains the number of bytes to be
384 command
[6] = subcountL
;
385 command
[7] = subcountH
;
387 return usbat_execute_command(us
, command
, 8);
391 * Block, waiting for an ATA device to become not busy or to report
392 * an error condition.
394 static int usbat_wait_not_busy(struct us_data
*us
, int minutes
)
398 unsigned char *status
= us
->iobuf
;
401 * Synchronizing cache on a CDR could take a heck of a long time,
402 * but probably not more than 10 minutes or so. On the other hand,
403 * doing a full blank on a CDRW at speed 1 will take about 75
407 for (i
=0; i
<1200+minutes
*60; i
++) {
409 result
= usbat_get_status(us
, status
);
411 if (result
!=USB_STOR_XFER_GOOD
)
412 return USB_STOR_TRANSPORT_ERROR
;
413 if (*status
& 0x01) { /* check condition */
414 result
= usbat_read(us
, USBAT_ATA
, 0x10, status
);
415 return USB_STOR_TRANSPORT_FAILED
;
417 if (*status
& 0x20) /* device fault */
418 return USB_STOR_TRANSPORT_FAILED
;
420 if ((*status
& 0x80)==0x00) { /* not busy */
421 usb_stor_dbg(us
, "Waited not busy for %d steps\n", i
);
422 return USB_STOR_TRANSPORT_GOOD
;
426 msleep(10); /* 5 seconds */
428 msleep(50); /* 10 seconds */
430 msleep(100); /* 50 seconds */
432 msleep(1000); /* X minutes */
435 usb_stor_dbg(us
, "Waited not busy for %d minutes, timing out\n",
437 return USB_STOR_TRANSPORT_FAILED
;
441 * Read block data from the data register
443 static int usbat_read_block(struct us_data
*us
,
449 unsigned char *command
= us
->iobuf
;
452 return USB_STOR_TRANSPORT_GOOD
;
455 command
[1] = USBAT_ATA
| USBAT_CMD_READ_BLOCK
;
456 command
[2] = USBAT_ATA_DATA
;
460 command
[6] = LSB_of(len
);
461 command
[7] = MSB_of(len
);
463 result
= usbat_execute_command(us
, command
, 8);
464 if (result
!= USB_STOR_XFER_GOOD
)
465 return USB_STOR_TRANSPORT_ERROR
;
467 result
= usbat_bulk_read(us
, buf
, len
, use_sg
);
468 return (result
== USB_STOR_XFER_GOOD
?
469 USB_STOR_TRANSPORT_GOOD
: USB_STOR_TRANSPORT_ERROR
);
473 * Write block data via the data register
475 static int usbat_write_block(struct us_data
*us
,
476 unsigned char access
,
483 unsigned char *command
= us
->iobuf
;
486 return USB_STOR_TRANSPORT_GOOD
;
489 command
[1] = access
| USBAT_CMD_WRITE_BLOCK
;
490 command
[2] = USBAT_ATA_DATA
;
494 command
[6] = LSB_of(len
);
495 command
[7] = MSB_of(len
);
497 result
= usbat_execute_command(us
, command
, 8);
499 if (result
!= USB_STOR_XFER_GOOD
)
500 return USB_STOR_TRANSPORT_ERROR
;
502 result
= usbat_bulk_write(us
, buf
, len
, use_sg
);
503 if (result
!= USB_STOR_XFER_GOOD
)
504 return USB_STOR_TRANSPORT_ERROR
;
506 return usbat_wait_not_busy(us
, minutes
);
510 * Process read and write requests
512 static int usbat_hp8200e_rw_block_test(struct us_data
*us
,
513 unsigned char access
,
514 unsigned char *registers
,
515 unsigned char *data_out
,
516 unsigned short num_registers
,
517 unsigned char data_reg
,
518 unsigned char status_reg
,
519 unsigned char timeout
,
520 unsigned char qualifier
,
528 unsigned int pipe
= (direction
== DMA_FROM_DEVICE
) ?
529 us
->recv_bulk_pipe
: us
->send_bulk_pipe
;
531 unsigned char *command
= us
->iobuf
;
534 unsigned char *data
= us
->iobuf
;
535 unsigned char *status
= us
->iobuf
;
537 BUG_ON(num_registers
> US_IOBUF_SIZE
/2);
539 for (i
=0; i
<20; i
++) {
542 * The first time we send the full command, which consists
543 * of downloading the SCSI command followed by downloading
544 * the data via a write-and-test. Any other time we only
545 * send the command to download the data -- the SCSI command
546 * is still 'active' in some sense in the device.
548 * We're only going to try sending the data 10 times. After
549 * that, we just return a failure.
555 * Write to multiple registers
556 * Not really sure the 0x07, 0x17, 0xfc, 0xe7 is
557 * necessary here, but that's what came out of the
558 * trace every single time.
561 command
[1] = access
| USBAT_CMD_WRITE_REGS
;
566 command
[6] = LSB_of(num_registers
*2);
567 command
[7] = MSB_of(num_registers
*2);
571 /* Conditionally read or write blocks */
572 command
[cmdlen
-8] = (direction
==DMA_TO_DEVICE
? 0x40 : 0xC0);
573 command
[cmdlen
-7] = access
|
574 (direction
==DMA_TO_DEVICE
?
575 USBAT_CMD_COND_WRITE_BLOCK
: USBAT_CMD_COND_READ_BLOCK
);
576 command
[cmdlen
-6] = data_reg
;
577 command
[cmdlen
-5] = status_reg
;
578 command
[cmdlen
-4] = timeout
;
579 command
[cmdlen
-3] = qualifier
;
580 command
[cmdlen
-2] = LSB_of(len
);
581 command
[cmdlen
-1] = MSB_of(len
);
583 result
= usbat_execute_command(us
, command
, cmdlen
);
585 if (result
!= USB_STOR_XFER_GOOD
)
586 return USB_STOR_TRANSPORT_ERROR
;
590 for (j
=0; j
<num_registers
; j
++) {
591 data
[j
<<1] = registers
[j
];
592 data
[1+(j
<<1)] = data_out
[j
];
595 result
= usbat_bulk_write(us
, data
, num_registers
*2, 0);
596 if (result
!= USB_STOR_XFER_GOOD
)
597 return USB_STOR_TRANSPORT_ERROR
;
601 result
= usb_stor_bulk_transfer_sg(us
,
602 pipe
, buf
, len
, use_sg
, NULL
);
605 * If we get a stall on the bulk download, we'll retry
606 * the bulk download -- but not the SCSI command because
607 * in some sense the SCSI command is still 'active' and
608 * waiting for the data. Don't ask me why this should be;
609 * I'm only following what the Windoze driver did.
611 * Note that a stall for the test-and-read/write command means
612 * that the test failed. In this case we're testing to make
613 * sure that the device is error-free
614 * (i.e. bit 0 -- CHK -- of status is 0). The most likely
615 * hypothesis is that the USBAT chip somehow knows what
616 * the device will accept, but doesn't give the device any
617 * data until all data is received. Thus, the device would
618 * still be waiting for the first byte of data if a stall
619 * occurs, even if the stall implies that some data was
623 if (result
== USB_STOR_XFER_SHORT
||
624 result
== USB_STOR_XFER_STALLED
) {
627 * If we're reading and we stalled, then clear
628 * the bulk output pipe only the first time.
631 if (direction
==DMA_FROM_DEVICE
&& i
==0) {
632 if (usb_stor_clear_halt(us
,
633 us
->send_bulk_pipe
) < 0)
634 return USB_STOR_TRANSPORT_ERROR
;
638 * Read status: is the device angry, or just busy?
641 result
= usbat_read(us
, USBAT_ATA
,
642 direction
==DMA_TO_DEVICE
?
643 USBAT_ATA_STATUS
: USBAT_ATA_ALTSTATUS
,
646 if (result
!=USB_STOR_XFER_GOOD
)
647 return USB_STOR_TRANSPORT_ERROR
;
648 if (*status
& 0x01) /* check condition */
649 return USB_STOR_TRANSPORT_FAILED
;
650 if (*status
& 0x20) /* device fault */
651 return USB_STOR_TRANSPORT_FAILED
;
653 usb_stor_dbg(us
, "Redoing %s\n",
654 direction
== DMA_TO_DEVICE
657 } else if (result
!= USB_STOR_XFER_GOOD
)
658 return USB_STOR_TRANSPORT_ERROR
;
660 return usbat_wait_not_busy(us
, minutes
);
664 usb_stor_dbg(us
, "Bummer! %s bulk data 20 times failed\n",
665 direction
== DMA_TO_DEVICE
? "Writing" : "Reading");
667 return USB_STOR_TRANSPORT_FAILED
;
671 * Write to multiple registers:
672 * Allows us to write specific data to any registers. The data to be written
673 * gets packed in this sequence: reg0, data0, reg1, data1, ..., regN, dataN
674 * which gets sent through bulk out.
675 * Not designed for large transfers of data!
677 static int usbat_multiple_write(struct us_data
*us
,
678 unsigned char *registers
,
679 unsigned char *data_out
,
680 unsigned short num_registers
)
683 unsigned char *data
= us
->iobuf
;
684 unsigned char *command
= us
->iobuf
;
686 BUG_ON(num_registers
> US_IOBUF_SIZE
/2);
688 /* Write to multiple registers, ATA access */
690 command
[1] = USBAT_ATA
| USBAT_CMD_WRITE_REGS
;
698 /* Number of bytes to be transferred (incl. addresses and data) */
699 command
[6] = LSB_of(num_registers
*2);
700 command
[7] = MSB_of(num_registers
*2);
702 /* The setup command */
703 result
= usbat_execute_command(us
, command
, 8);
704 if (result
!= USB_STOR_XFER_GOOD
)
705 return USB_STOR_TRANSPORT_ERROR
;
707 /* Create the reg/data, reg/data sequence */
708 for (i
=0; i
<num_registers
; i
++) {
709 data
[i
<<1] = registers
[i
];
710 data
[1+(i
<<1)] = data_out
[i
];
714 result
= usbat_bulk_write(us
, data
, num_registers
*2, 0);
715 if (result
!= USB_STOR_XFER_GOOD
)
716 return USB_STOR_TRANSPORT_ERROR
;
718 if (usbat_get_device_type(us
) == USBAT_DEV_HP8200
)
719 return usbat_wait_not_busy(us
, 0);
721 return USB_STOR_TRANSPORT_GOOD
;
725 * Conditionally read blocks from device:
726 * Allows us to read blocks from a specific data register, based upon the
727 * condition that a status register can be successfully masked with a status
728 * qualifier. If this condition is not initially met, the read will wait
729 * up until a maximum amount of time has elapsed, as specified by timeout.
730 * The read will start when the condition is met, otherwise the command aborts.
732 * The qualifier defined here is not the value that is masked, it defines
733 * conditions for the write to take place. The actual masked qualifier (and
734 * other related details) are defined beforehand with _set_shuttle_features().
736 static int usbat_read_blocks(struct us_data
*us
,
742 unsigned char *command
= us
->iobuf
;
745 command
[1] = USBAT_ATA
| USBAT_CMD_COND_READ_BLOCK
;
746 command
[2] = USBAT_ATA_DATA
;
747 command
[3] = USBAT_ATA_STATUS
;
748 command
[4] = 0xFD; /* Timeout (ms); */
749 command
[5] = USBAT_QUAL_FCQ
;
750 command
[6] = LSB_of(len
);
751 command
[7] = MSB_of(len
);
753 /* Multiple block read setup command */
754 result
= usbat_execute_command(us
, command
, 8);
755 if (result
!= USB_STOR_XFER_GOOD
)
756 return USB_STOR_TRANSPORT_FAILED
;
758 /* Read the blocks we just asked for */
759 result
= usbat_bulk_read(us
, buffer
, len
, use_sg
);
760 if (result
!= USB_STOR_XFER_GOOD
)
761 return USB_STOR_TRANSPORT_FAILED
;
763 return USB_STOR_TRANSPORT_GOOD
;
767 * Conditionally write blocks to device:
768 * Allows us to write blocks to a specific data register, based upon the
769 * condition that a status register can be successfully masked with a status
770 * qualifier. If this condition is not initially met, the write will wait
771 * up until a maximum amount of time has elapsed, as specified by timeout.
772 * The read will start when the condition is met, otherwise the command aborts.
774 * The qualifier defined here is not the value that is masked, it defines
775 * conditions for the write to take place. The actual masked qualifier (and
776 * other related details) are defined beforehand with _set_shuttle_features().
778 static int usbat_write_blocks(struct us_data
*us
,
784 unsigned char *command
= us
->iobuf
;
787 command
[1] = USBAT_ATA
| USBAT_CMD_COND_WRITE_BLOCK
;
788 command
[2] = USBAT_ATA_DATA
;
789 command
[3] = USBAT_ATA_STATUS
;
790 command
[4] = 0xFD; /* Timeout (ms) */
791 command
[5] = USBAT_QUAL_FCQ
;
792 command
[6] = LSB_of(len
);
793 command
[7] = MSB_of(len
);
795 /* Multiple block write setup command */
796 result
= usbat_execute_command(us
, command
, 8);
797 if (result
!= USB_STOR_XFER_GOOD
)
798 return USB_STOR_TRANSPORT_FAILED
;
801 result
= usbat_bulk_write(us
, buffer
, len
, use_sg
);
802 if (result
!= USB_STOR_XFER_GOOD
)
803 return USB_STOR_TRANSPORT_FAILED
;
805 return USB_STOR_TRANSPORT_GOOD
;
809 * Read the User IO register
811 static int usbat_read_user_io(struct us_data
*us
, unsigned char *data_flags
)
815 result
= usb_stor_ctrl_transfer(us
,
824 usb_stor_dbg(us
, "UIO register reads %02X\n", *data_flags
);
830 * Write to the User IO register
832 static int usbat_write_user_io(struct us_data
*us
,
833 unsigned char enable_flags
,
834 unsigned char data_flags
)
836 return usb_stor_ctrl_transfer(us
,
840 short_pack(enable_flags
, data_flags
),
848 * Often needed on media change.
850 static int usbat_device_reset(struct us_data
*us
)
855 * Reset peripheral, enable peripheral control signals
856 * (bring reset signal up)
858 rc
= usbat_write_user_io(us
,
859 USBAT_UIO_DRVRST
| USBAT_UIO_OE1
| USBAT_UIO_OE0
,
860 USBAT_UIO_EPAD
| USBAT_UIO_1
);
861 if (rc
!= USB_STOR_XFER_GOOD
)
862 return USB_STOR_TRANSPORT_ERROR
;
865 * Enable peripheral control signals
866 * (bring reset signal down)
868 rc
= usbat_write_user_io(us
,
869 USBAT_UIO_OE1
| USBAT_UIO_OE0
,
870 USBAT_UIO_EPAD
| USBAT_UIO_1
);
871 if (rc
!= USB_STOR_XFER_GOOD
)
872 return USB_STOR_TRANSPORT_ERROR
;
874 return USB_STOR_TRANSPORT_GOOD
;
880 static int usbat_device_enable_cdt(struct us_data
*us
)
884 /* Enable peripheral control signals and card detect */
885 rc
= usbat_write_user_io(us
,
886 USBAT_UIO_ACKD
| USBAT_UIO_OE1
| USBAT_UIO_OE0
,
887 USBAT_UIO_EPAD
| USBAT_UIO_1
);
888 if (rc
!= USB_STOR_XFER_GOOD
)
889 return USB_STOR_TRANSPORT_ERROR
;
891 return USB_STOR_TRANSPORT_GOOD
;
895 * Determine if media is present.
897 static int usbat_flash_check_media_present(struct us_data
*us
,
900 if (*uio
& USBAT_UIO_UI0
) {
901 usb_stor_dbg(us
, "no media detected\n");
902 return USBAT_FLASH_MEDIA_NONE
;
905 return USBAT_FLASH_MEDIA_CF
;
909 * Determine if media has changed since last operation
911 static int usbat_flash_check_media_changed(struct us_data
*us
,
914 if (*uio
& USBAT_UIO_0
) {
915 usb_stor_dbg(us
, "media change detected\n");
916 return USBAT_FLASH_MEDIA_CHANGED
;
919 return USBAT_FLASH_MEDIA_SAME
;
923 * Check for media change / no media and handle the situation appropriately
925 static int usbat_flash_check_media(struct us_data
*us
,
926 struct usbat_info
*info
)
929 unsigned char *uio
= us
->iobuf
;
931 rc
= usbat_read_user_io(us
, uio
);
932 if (rc
!= USB_STOR_XFER_GOOD
)
933 return USB_STOR_TRANSPORT_ERROR
;
935 /* Check for media existence */
936 rc
= usbat_flash_check_media_present(us
, uio
);
937 if (rc
== USBAT_FLASH_MEDIA_NONE
) {
938 info
->sense_key
= 0x02;
939 info
->sense_asc
= 0x3A;
940 info
->sense_ascq
= 0x00;
941 return USB_STOR_TRANSPORT_FAILED
;
944 /* Check for media change */
945 rc
= usbat_flash_check_media_changed(us
, uio
);
946 if (rc
== USBAT_FLASH_MEDIA_CHANGED
) {
948 /* Reset and re-enable card detect */
949 rc
= usbat_device_reset(us
);
950 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
952 rc
= usbat_device_enable_cdt(us
);
953 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
958 rc
= usbat_read_user_io(us
, uio
);
959 if (rc
!= USB_STOR_XFER_GOOD
)
960 return USB_STOR_TRANSPORT_ERROR
;
962 info
->sense_key
= UNIT_ATTENTION
;
963 info
->sense_asc
= 0x28;
964 info
->sense_ascq
= 0x00;
965 return USB_STOR_TRANSPORT_FAILED
;
968 return USB_STOR_TRANSPORT_GOOD
;
972 * Determine whether we are controlling a flash-based reader/writer,
973 * or a HP8200-based CD drive.
974 * Sets transport functions as appropriate.
976 static int usbat_identify_device(struct us_data
*us
,
977 struct usbat_info
*info
)
980 unsigned char status
;
983 return USB_STOR_TRANSPORT_ERROR
;
985 rc
= usbat_device_reset(us
);
986 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
991 * In attempt to distinguish between HP CDRW's and Flash readers, we now
992 * execute the IDENTIFY PACKET DEVICE command. On ATA devices (i.e. flash
993 * readers), this command should fail with error. On ATAPI devices (i.e.
994 * CDROM drives), it should succeed.
996 rc
= usbat_write(us
, USBAT_ATA
, USBAT_ATA_CMD
, 0xA1);
997 if (rc
!= USB_STOR_XFER_GOOD
)
998 return USB_STOR_TRANSPORT_ERROR
;
1000 rc
= usbat_get_status(us
, &status
);
1001 if (rc
!= USB_STOR_XFER_GOOD
)
1002 return USB_STOR_TRANSPORT_ERROR
;
1004 /* Check for error bit, or if the command 'fell through' */
1005 if (status
== 0xA1 || !(status
& 0x01)) {
1006 /* Device is HP 8200 */
1007 usb_stor_dbg(us
, "Detected HP8200 CDRW\n");
1008 info
->devicetype
= USBAT_DEV_HP8200
;
1010 /* Device is a CompactFlash reader/writer */
1011 usb_stor_dbg(us
, "Detected Flash reader/writer\n");
1012 info
->devicetype
= USBAT_DEV_FLASH
;
1015 return USB_STOR_TRANSPORT_GOOD
;
1019 * Set the transport function based on the device type
1021 static int usbat_set_transport(struct us_data
*us
,
1022 struct usbat_info
*info
,
1026 if (!info
->devicetype
)
1027 info
->devicetype
= devicetype
;
1029 if (!info
->devicetype
)
1030 usbat_identify_device(us
, info
);
1032 switch (info
->devicetype
) {
1034 return USB_STOR_TRANSPORT_ERROR
;
1036 case USBAT_DEV_HP8200
:
1037 us
->transport
= usbat_hp8200e_transport
;
1040 case USBAT_DEV_FLASH
:
1041 us
->transport
= usbat_flash_transport
;
1049 * Read the media capacity
1051 static int usbat_flash_get_sector_count(struct us_data
*us
,
1052 struct usbat_info
*info
)
1054 unsigned char registers
[3] = {
1059 unsigned char command
[3] = { 0x01, 0xA0, 0xEC };
1060 unsigned char *reply
;
1061 unsigned char status
;
1065 return USB_STOR_TRANSPORT_ERROR
;
1067 reply
= kmalloc(512, GFP_NOIO
);
1069 return USB_STOR_TRANSPORT_ERROR
;
1071 /* ATA command : IDENTIFY DEVICE */
1072 rc
= usbat_multiple_write(us
, registers
, command
, 3);
1073 if (rc
!= USB_STOR_XFER_GOOD
) {
1074 usb_stor_dbg(us
, "Gah! identify_device failed\n");
1075 rc
= USB_STOR_TRANSPORT_ERROR
;
1079 /* Read device status */
1080 if (usbat_get_status(us
, &status
) != USB_STOR_XFER_GOOD
) {
1081 rc
= USB_STOR_TRANSPORT_ERROR
;
1087 /* Read the device identification data */
1088 rc
= usbat_read_block(us
, reply
, 512, 0);
1089 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1092 info
->sectors
= ((u32
)(reply
[117]) << 24) |
1093 ((u32
)(reply
[116]) << 16) |
1094 ((u32
)(reply
[115]) << 8) |
1095 ((u32
)(reply
[114]) );
1097 rc
= USB_STOR_TRANSPORT_GOOD
;
1105 * Read data from device
1107 static int usbat_flash_read_data(struct us_data
*us
,
1108 struct usbat_info
*info
,
1112 unsigned char registers
[7] = {
1121 unsigned char command
[7];
1122 unsigned char *buffer
;
1123 unsigned char thistime
;
1124 unsigned int totallen
, alloclen
;
1126 unsigned int sg_offset
= 0;
1127 struct scatterlist
*sg
= NULL
;
1129 result
= usbat_flash_check_media(us
, info
);
1130 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1134 * we're working in LBA mode. according to the ATA spec,
1135 * we can support up to 28-bit addressing. I don't know if Jumpshot
1136 * supports beyond 24-bit addressing. It's kind of hard to test
1137 * since it requires > 8GB CF card.
1140 if (sector
> 0x0FFFFFFF)
1141 return USB_STOR_TRANSPORT_ERROR
;
1143 totallen
= sectors
* info
->ssize
;
1146 * Since we don't read more than 64 KB at a time, we have to create
1147 * a bounce buffer and move the data a piece at a time between the
1148 * bounce buffer and the actual transfer buffer.
1151 alloclen
= min(totallen
, 65536u);
1152 buffer
= kmalloc(alloclen
, GFP_NOIO
);
1154 return USB_STOR_TRANSPORT_ERROR
;
1158 * loop, never allocate or transfer more than 64k at once
1159 * (min(128k, 255*info->ssize) is the real limit)
1161 len
= min(totallen
, alloclen
);
1162 thistime
= (len
/ info
->ssize
) & 0xff;
1164 /* ATA command 0x20 (READ SECTORS) */
1165 usbat_pack_ata_sector_cmd(command
, thistime
, sector
, 0x20);
1167 /* Write/execute ATA read command */
1168 result
= usbat_multiple_write(us
, registers
, command
, 7);
1169 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1172 /* Read the data we just requested */
1173 result
= usbat_read_blocks(us
, buffer
, len
, 0);
1174 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1177 usb_stor_dbg(us
, "%d bytes\n", len
);
1179 /* Store the data in the transfer buffer */
1180 usb_stor_access_xfer_buf(buffer
, len
, us
->srb
,
1181 &sg
, &sg_offset
, TO_XFER_BUF
);
1185 } while (totallen
> 0);
1188 return USB_STOR_TRANSPORT_GOOD
;
1192 return USB_STOR_TRANSPORT_ERROR
;
1196 * Write data to device
1198 static int usbat_flash_write_data(struct us_data
*us
,
1199 struct usbat_info
*info
,
1203 unsigned char registers
[7] = {
1212 unsigned char command
[7];
1213 unsigned char *buffer
;
1214 unsigned char thistime
;
1215 unsigned int totallen
, alloclen
;
1217 unsigned int sg_offset
= 0;
1218 struct scatterlist
*sg
= NULL
;
1220 result
= usbat_flash_check_media(us
, info
);
1221 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1225 * we're working in LBA mode. according to the ATA spec,
1226 * we can support up to 28-bit addressing. I don't know if the device
1227 * supports beyond 24-bit addressing. It's kind of hard to test
1228 * since it requires > 8GB media.
1231 if (sector
> 0x0FFFFFFF)
1232 return USB_STOR_TRANSPORT_ERROR
;
1234 totallen
= sectors
* info
->ssize
;
1237 * Since we don't write more than 64 KB at a time, we have to create
1238 * a bounce buffer and move the data a piece at a time between the
1239 * bounce buffer and the actual transfer buffer.
1242 alloclen
= min(totallen
, 65536u);
1243 buffer
= kmalloc(alloclen
, GFP_NOIO
);
1245 return USB_STOR_TRANSPORT_ERROR
;
1249 * loop, never allocate or transfer more than 64k at once
1250 * (min(128k, 255*info->ssize) is the real limit)
1252 len
= min(totallen
, alloclen
);
1253 thistime
= (len
/ info
->ssize
) & 0xff;
1255 /* Get the data from the transfer buffer */
1256 usb_stor_access_xfer_buf(buffer
, len
, us
->srb
,
1257 &sg
, &sg_offset
, FROM_XFER_BUF
);
1259 /* ATA command 0x30 (WRITE SECTORS) */
1260 usbat_pack_ata_sector_cmd(command
, thistime
, sector
, 0x30);
1262 /* Write/execute ATA write command */
1263 result
= usbat_multiple_write(us
, registers
, command
, 7);
1264 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1267 /* Write the data */
1268 result
= usbat_write_blocks(us
, buffer
, len
, 0);
1269 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1274 } while (totallen
> 0);
1281 return USB_STOR_TRANSPORT_ERROR
;
1285 * Squeeze a potentially huge (> 65535 byte) read10 command into
1286 * a little ( <= 65535 byte) ATAPI pipe
1288 static int usbat_hp8200e_handle_read10(struct us_data
*us
,
1289 unsigned char *registers
,
1290 unsigned char *data
,
1291 struct scsi_cmnd
*srb
)
1293 int result
= USB_STOR_TRANSPORT_GOOD
;
1294 unsigned char *buffer
;
1296 unsigned int sector
;
1297 unsigned int sg_offset
= 0;
1298 struct scatterlist
*sg
= NULL
;
1300 usb_stor_dbg(us
, "transfersize %d\n", srb
->transfersize
);
1302 if (scsi_bufflen(srb
) < 0x10000) {
1304 result
= usbat_hp8200e_rw_block_test(us
, USBAT_ATA
,
1305 registers
, data
, 19,
1306 USBAT_ATA_DATA
, USBAT_ATA_STATUS
, 0xFD,
1307 (USBAT_QUAL_FCQ
| USBAT_QUAL_ALQ
),
1310 scsi_bufflen(srb
), scsi_sg_count(srb
), 1);
1316 * Since we're requesting more data than we can handle in
1317 * a single read command (max is 64k-1), we will perform
1318 * multiple reads, but each read must be in multiples of
1319 * a sector. Luckily the sector size is in srb->transfersize
1320 * (see linux/drivers/scsi/sr.c).
1323 if (data
[7+0] == GPCMD_READ_CD
) {
1324 len
= short_pack(data
[7+9], data
[7+8]);
1327 usb_stor_dbg(us
, "GPCMD_READ_CD: len %d\n", len
);
1328 srb
->transfersize
= scsi_bufflen(srb
)/len
;
1331 if (!srb
->transfersize
) {
1332 srb
->transfersize
= 2048; /* A guess */
1333 usb_stor_dbg(us
, "transfersize 0, forcing %d\n",
1338 * Since we only read in one block at a time, we have to create
1339 * a bounce buffer and move the data a piece at a time between the
1340 * bounce buffer and the actual transfer buffer.
1343 len
= (65535/srb
->transfersize
) * srb
->transfersize
;
1344 usb_stor_dbg(us
, "Max read is %d bytes\n", len
);
1345 len
= min(len
, scsi_bufflen(srb
));
1346 buffer
= kmalloc(len
, GFP_NOIO
);
1347 if (buffer
== NULL
) /* bloody hell! */
1348 return USB_STOR_TRANSPORT_FAILED
;
1349 sector
= short_pack(data
[7+3], data
[7+2]);
1351 sector
|= short_pack(data
[7+5], data
[7+4]);
1354 while (transferred
!= scsi_bufflen(srb
)) {
1356 if (len
> scsi_bufflen(srb
) - transferred
)
1357 len
= scsi_bufflen(srb
) - transferred
;
1359 data
[3] = len
&0xFF; /* (cylL) = expected length (L) */
1360 data
[4] = (len
>>8)&0xFF; /* (cylH) = expected length (H) */
1362 /* Fix up the SCSI command sector and num sectors */
1364 data
[7+2] = MSB_of(sector
>>16); /* SCSI command sector */
1365 data
[7+3] = LSB_of(sector
>>16);
1366 data
[7+4] = MSB_of(sector
&0xFFFF);
1367 data
[7+5] = LSB_of(sector
&0xFFFF);
1368 if (data
[7+0] == GPCMD_READ_CD
)
1370 data
[7+7] = MSB_of(len
/ srb
->transfersize
); /* SCSI command */
1371 data
[7+8] = LSB_of(len
/ srb
->transfersize
); /* num sectors */
1373 result
= usbat_hp8200e_rw_block_test(us
, USBAT_ATA
,
1374 registers
, data
, 19,
1375 USBAT_ATA_DATA
, USBAT_ATA_STATUS
, 0xFD,
1376 (USBAT_QUAL_FCQ
| USBAT_QUAL_ALQ
),
1381 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1384 /* Store the data in the transfer buffer */
1385 usb_stor_access_xfer_buf(buffer
, len
, srb
,
1386 &sg
, &sg_offset
, TO_XFER_BUF
);
1388 /* Update the amount transferred and the sector number */
1391 sector
+= len
/ srb
->transfersize
;
1393 } /* while transferred != scsi_bufflen(srb) */
1399 static int usbat_select_and_test_registers(struct us_data
*us
)
1402 unsigned char *status
= us
->iobuf
;
1404 /* try device = master, then device = slave. */
1405 for (selector
= 0xA0; selector
<= 0xB0; selector
+= 0x10) {
1406 if (usbat_write(us
, USBAT_ATA
, USBAT_ATA_DEVICE
, selector
) !=
1408 return USB_STOR_TRANSPORT_ERROR
;
1410 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_STATUS
, status
) !=
1412 return USB_STOR_TRANSPORT_ERROR
;
1414 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_DEVICE
, status
) !=
1416 return USB_STOR_TRANSPORT_ERROR
;
1418 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_LBA_ME
, status
) !=
1420 return USB_STOR_TRANSPORT_ERROR
;
1422 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_LBA_HI
, status
) !=
1424 return USB_STOR_TRANSPORT_ERROR
;
1426 if (usbat_write(us
, USBAT_ATA
, USBAT_ATA_LBA_ME
, 0x55) !=
1428 return USB_STOR_TRANSPORT_ERROR
;
1430 if (usbat_write(us
, USBAT_ATA
, USBAT_ATA_LBA_HI
, 0xAA) !=
1432 return USB_STOR_TRANSPORT_ERROR
;
1434 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_LBA_ME
, status
) !=
1436 return USB_STOR_TRANSPORT_ERROR
;
1438 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_LBA_ME
, status
) !=
1440 return USB_STOR_TRANSPORT_ERROR
;
1443 return USB_STOR_TRANSPORT_GOOD
;
1447 * Initialize the USBAT processor and the storage device
1449 static int init_usbat(struct us_data
*us
, int devicetype
)
1452 struct usbat_info
*info
;
1453 unsigned char subcountH
= USBAT_ATA_LBA_HI
;
1454 unsigned char subcountL
= USBAT_ATA_LBA_ME
;
1455 unsigned char *status
= us
->iobuf
;
1457 us
->extra
= kzalloc(sizeof(struct usbat_info
), GFP_NOIO
);
1461 info
= (struct usbat_info
*) (us
->extra
);
1463 /* Enable peripheral control signals */
1464 rc
= usbat_write_user_io(us
,
1465 USBAT_UIO_OE1
| USBAT_UIO_OE0
,
1466 USBAT_UIO_EPAD
| USBAT_UIO_1
);
1467 if (rc
!= USB_STOR_XFER_GOOD
)
1468 return USB_STOR_TRANSPORT_ERROR
;
1470 usb_stor_dbg(us
, "INIT 1\n");
1474 rc
= usbat_read_user_io(us
, status
);
1475 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1478 usb_stor_dbg(us
, "INIT 2\n");
1480 rc
= usbat_read_user_io(us
, status
);
1481 if (rc
!= USB_STOR_XFER_GOOD
)
1482 return USB_STOR_TRANSPORT_ERROR
;
1484 rc
= usbat_read_user_io(us
, status
);
1485 if (rc
!= USB_STOR_XFER_GOOD
)
1486 return USB_STOR_TRANSPORT_ERROR
;
1488 usb_stor_dbg(us
, "INIT 3\n");
1490 rc
= usbat_select_and_test_registers(us
);
1491 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1494 usb_stor_dbg(us
, "INIT 4\n");
1496 rc
= usbat_read_user_io(us
, status
);
1497 if (rc
!= USB_STOR_XFER_GOOD
)
1498 return USB_STOR_TRANSPORT_ERROR
;
1500 usb_stor_dbg(us
, "INIT 5\n");
1502 /* Enable peripheral control signals and card detect */
1503 rc
= usbat_device_enable_cdt(us
);
1504 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1507 usb_stor_dbg(us
, "INIT 6\n");
1509 rc
= usbat_read_user_io(us
, status
);
1510 if (rc
!= USB_STOR_XFER_GOOD
)
1511 return USB_STOR_TRANSPORT_ERROR
;
1513 usb_stor_dbg(us
, "INIT 7\n");
1517 rc
= usbat_read_user_io(us
, status
);
1518 if (rc
!= USB_STOR_XFER_GOOD
)
1519 return USB_STOR_TRANSPORT_ERROR
;
1521 usb_stor_dbg(us
, "INIT 8\n");
1523 rc
= usbat_select_and_test_registers(us
);
1524 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1527 usb_stor_dbg(us
, "INIT 9\n");
1529 /* At this point, we need to detect which device we are using */
1530 if (usbat_set_transport(us
, info
, devicetype
))
1531 return USB_STOR_TRANSPORT_ERROR
;
1533 usb_stor_dbg(us
, "INIT 10\n");
1535 if (usbat_get_device_type(us
) == USBAT_DEV_FLASH
) {
1539 rc
= usbat_set_shuttle_features(us
, (USBAT_FEAT_ETEN
| USBAT_FEAT_ET2
| USBAT_FEAT_ET1
),
1540 0x00, 0x88, 0x08, subcountH
, subcountL
);
1541 if (rc
!= USB_STOR_XFER_GOOD
)
1542 return USB_STOR_TRANSPORT_ERROR
;
1544 usb_stor_dbg(us
, "INIT 11\n");
1546 return USB_STOR_TRANSPORT_GOOD
;
1550 * Transport for the HP 8200e
1552 static int usbat_hp8200e_transport(struct scsi_cmnd
*srb
, struct us_data
*us
)
1555 unsigned char *status
= us
->iobuf
;
1556 unsigned char registers
[32];
1557 unsigned char data
[32];
1561 len
= scsi_bufflen(srb
);
1564 * Send A0 (ATA PACKET COMMAND).
1565 * Note: I guess we're never going to get any of the ATA
1566 * commands... just ATA Packet Commands.
1569 registers
[0] = USBAT_ATA_FEATURES
;
1570 registers
[1] = USBAT_ATA_SECCNT
;
1571 registers
[2] = USBAT_ATA_SECNUM
;
1572 registers
[3] = USBAT_ATA_LBA_ME
;
1573 registers
[4] = USBAT_ATA_LBA_HI
;
1574 registers
[5] = USBAT_ATA_DEVICE
;
1575 registers
[6] = USBAT_ATA_CMD
;
1579 data
[3] = len
&0xFF; /* (cylL) = expected length (L) */
1580 data
[4] = (len
>>8)&0xFF; /* (cylH) = expected length (H) */
1581 data
[5] = 0xB0; /* (device sel) = slave */
1582 data
[6] = 0xA0; /* (command) = ATA PACKET COMMAND */
1584 for (i
=7; i
<19; i
++) {
1585 registers
[i
] = 0x10;
1586 data
[i
] = (i
-7 >= srb
->cmd_len
) ? 0 : srb
->cmnd
[i
-7];
1589 result
= usbat_get_status(us
, status
);
1590 usb_stor_dbg(us
, "Status = %02X\n", *status
);
1591 if (result
!= USB_STOR_XFER_GOOD
)
1592 return USB_STOR_TRANSPORT_ERROR
;
1593 if (srb
->cmnd
[0] == TEST_UNIT_READY
)
1596 if (srb
->sc_data_direction
== DMA_TO_DEVICE
) {
1598 result
= usbat_hp8200e_rw_block_test(us
, USBAT_ATA
,
1599 registers
, data
, 19,
1600 USBAT_ATA_DATA
, USBAT_ATA_STATUS
, 0xFD,
1601 (USBAT_QUAL_FCQ
| USBAT_QUAL_ALQ
),
1604 len
, scsi_sg_count(srb
), 10);
1606 if (result
== USB_STOR_TRANSPORT_GOOD
) {
1608 usb_stor_dbg(us
, "Wrote %08X bytes\n", transferred
);
1613 } else if (srb
->cmnd
[0] == READ_10
||
1614 srb
->cmnd
[0] == GPCMD_READ_CD
) {
1616 return usbat_hp8200e_handle_read10(us
, registers
, data
, srb
);
1621 usb_stor_dbg(us
, "Error: len = %08X... what do I do now?\n",
1623 return USB_STOR_TRANSPORT_ERROR
;
1626 result
= usbat_multiple_write(us
, registers
, data
, 7);
1628 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1632 * Write the 12-byte command header.
1634 * If the command is BLANK then set the timer for 75 minutes.
1635 * Otherwise set it for 10 minutes.
1637 * NOTE: THE 8200 DOCUMENTATION STATES THAT BLANKING A CDRW
1638 * AT SPEED 4 IS UNRELIABLE!!!
1641 result
= usbat_write_block(us
, USBAT_ATA
, srb
->cmnd
, 12,
1642 srb
->cmnd
[0] == GPCMD_BLANK
? 75 : 10, 0);
1644 if (result
!= USB_STOR_TRANSPORT_GOOD
)
1647 /* If there is response data to be read in then do it here. */
1649 if (len
!= 0 && (srb
->sc_data_direction
== DMA_FROM_DEVICE
)) {
1651 /* How many bytes to read in? Check cylL register */
1653 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_LBA_ME
, status
) !=
1654 USB_STOR_XFER_GOOD
) {
1655 return USB_STOR_TRANSPORT_ERROR
;
1658 if (len
> 0xFF) { /* need to read cylH also */
1660 if (usbat_read(us
, USBAT_ATA
, USBAT_ATA_LBA_HI
, status
) !=
1661 USB_STOR_XFER_GOOD
) {
1662 return USB_STOR_TRANSPORT_ERROR
;
1664 len
+= ((unsigned int) *status
)<<8;
1670 result
= usbat_read_block(us
, scsi_sglist(srb
), len
,
1671 scsi_sg_count(srb
));
1678 * Transport for USBAT02-based CompactFlash and similar storage devices
1680 static int usbat_flash_transport(struct scsi_cmnd
* srb
, struct us_data
*us
)
1683 struct usbat_info
*info
= (struct usbat_info
*) (us
->extra
);
1684 unsigned long block
, blocks
;
1685 unsigned char *ptr
= us
->iobuf
;
1686 static unsigned char inquiry_response
[36] = {
1687 0x00, 0x80, 0x00, 0x01, 0x1F, 0x00, 0x00, 0x00
1690 if (srb
->cmnd
[0] == INQUIRY
) {
1691 usb_stor_dbg(us
, "INQUIRY - Returning bogus response\n");
1692 memcpy(ptr
, inquiry_response
, sizeof(inquiry_response
));
1693 fill_inquiry_response(us
, ptr
, 36);
1694 return USB_STOR_TRANSPORT_GOOD
;
1697 if (srb
->cmnd
[0] == READ_CAPACITY
) {
1698 rc
= usbat_flash_check_media(us
, info
);
1699 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1702 rc
= usbat_flash_get_sector_count(us
, info
);
1703 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1706 /* hard coded 512 byte sectors as per ATA spec */
1707 info
->ssize
= 0x200;
1708 usb_stor_dbg(us
, "READ_CAPACITY: %ld sectors, %ld bytes per sector\n",
1709 info
->sectors
, info
->ssize
);
1713 * note: must return the sector number of the last sector,
1714 * *not* the total number of sectors
1716 ((__be32
*) ptr
)[0] = cpu_to_be32(info
->sectors
- 1);
1717 ((__be32
*) ptr
)[1] = cpu_to_be32(info
->ssize
);
1718 usb_stor_set_xfer_buf(ptr
, 8, srb
);
1720 return USB_STOR_TRANSPORT_GOOD
;
1723 if (srb
->cmnd
[0] == MODE_SELECT_10
) {
1724 usb_stor_dbg(us
, "Gah! MODE_SELECT_10\n");
1725 return USB_STOR_TRANSPORT_ERROR
;
1728 if (srb
->cmnd
[0] == READ_10
) {
1729 block
= ((u32
)(srb
->cmnd
[2]) << 24) | ((u32
)(srb
->cmnd
[3]) << 16) |
1730 ((u32
)(srb
->cmnd
[4]) << 8) | ((u32
)(srb
->cmnd
[5]));
1732 blocks
= ((u32
)(srb
->cmnd
[7]) << 8) | ((u32
)(srb
->cmnd
[8]));
1734 usb_stor_dbg(us
, "READ_10: read block 0x%04lx count %ld\n",
1736 return usbat_flash_read_data(us
, info
, block
, blocks
);
1739 if (srb
->cmnd
[0] == READ_12
) {
1741 * I don't think we'll ever see a READ_12 but support it anyway
1743 block
= ((u32
)(srb
->cmnd
[2]) << 24) | ((u32
)(srb
->cmnd
[3]) << 16) |
1744 ((u32
)(srb
->cmnd
[4]) << 8) | ((u32
)(srb
->cmnd
[5]));
1746 blocks
= ((u32
)(srb
->cmnd
[6]) << 24) | ((u32
)(srb
->cmnd
[7]) << 16) |
1747 ((u32
)(srb
->cmnd
[8]) << 8) | ((u32
)(srb
->cmnd
[9]));
1749 usb_stor_dbg(us
, "READ_12: read block 0x%04lx count %ld\n",
1751 return usbat_flash_read_data(us
, info
, block
, blocks
);
1754 if (srb
->cmnd
[0] == WRITE_10
) {
1755 block
= ((u32
)(srb
->cmnd
[2]) << 24) | ((u32
)(srb
->cmnd
[3]) << 16) |
1756 ((u32
)(srb
->cmnd
[4]) << 8) | ((u32
)(srb
->cmnd
[5]));
1758 blocks
= ((u32
)(srb
->cmnd
[7]) << 8) | ((u32
)(srb
->cmnd
[8]));
1760 usb_stor_dbg(us
, "WRITE_10: write block 0x%04lx count %ld\n",
1762 return usbat_flash_write_data(us
, info
, block
, blocks
);
1765 if (srb
->cmnd
[0] == WRITE_12
) {
1767 * I don't think we'll ever see a WRITE_12 but support it anyway
1769 block
= ((u32
)(srb
->cmnd
[2]) << 24) | ((u32
)(srb
->cmnd
[3]) << 16) |
1770 ((u32
)(srb
->cmnd
[4]) << 8) | ((u32
)(srb
->cmnd
[5]));
1772 blocks
= ((u32
)(srb
->cmnd
[6]) << 24) | ((u32
)(srb
->cmnd
[7]) << 16) |
1773 ((u32
)(srb
->cmnd
[8]) << 8) | ((u32
)(srb
->cmnd
[9]));
1775 usb_stor_dbg(us
, "WRITE_12: write block 0x%04lx count %ld\n",
1777 return usbat_flash_write_data(us
, info
, block
, blocks
);
1781 if (srb
->cmnd
[0] == TEST_UNIT_READY
) {
1782 usb_stor_dbg(us
, "TEST_UNIT_READY\n");
1784 rc
= usbat_flash_check_media(us
, info
);
1785 if (rc
!= USB_STOR_TRANSPORT_GOOD
)
1788 return usbat_check_status(us
);
1791 if (srb
->cmnd
[0] == REQUEST_SENSE
) {
1792 usb_stor_dbg(us
, "REQUEST_SENSE\n");
1796 ptr
[2] = info
->sense_key
;
1798 ptr
[12] = info
->sense_asc
;
1799 ptr
[13] = info
->sense_ascq
;
1800 usb_stor_set_xfer_buf(ptr
, 18, srb
);
1802 return USB_STOR_TRANSPORT_GOOD
;
1805 if (srb
->cmnd
[0] == ALLOW_MEDIUM_REMOVAL
) {
1807 * sure. whatever. not like we can stop the user from popping
1808 * the media out of the device (no locking doors, etc)
1810 return USB_STOR_TRANSPORT_GOOD
;
1813 usb_stor_dbg(us
, "Gah! Unknown command: %d (0x%x)\n",
1814 srb
->cmnd
[0], srb
->cmnd
[0]);
1815 info
->sense_key
= 0x05;
1816 info
->sense_asc
= 0x20;
1817 info
->sense_ascq
= 0x00;
1818 return USB_STOR_TRANSPORT_FAILED
;
1821 static int init_usbat_cd(struct us_data
*us
)
1823 return init_usbat(us
, USBAT_DEV_HP8200
);
1826 static int init_usbat_flash(struct us_data
*us
)
1828 return init_usbat(us
, USBAT_DEV_FLASH
);
1831 static struct scsi_host_template usbat_host_template
;
1833 static int usbat_probe(struct usb_interface
*intf
,
1834 const struct usb_device_id
*id
)
1839 result
= usb_stor_probe1(&us
, intf
, id
,
1840 (id
- usbat_usb_ids
) + usbat_unusual_dev_list
,
1841 &usbat_host_template
);
1846 * The actual transport will be determined later by the
1847 * initialization routine; this is just a placeholder.
1849 us
->transport_name
= "Shuttle USBAT";
1850 us
->transport
= usbat_flash_transport
;
1851 us
->transport_reset
= usb_stor_CB_reset
;
1854 result
= usb_stor_probe2(us
);
1858 static struct usb_driver usbat_driver
= {
1860 .probe
= usbat_probe
,
1861 .disconnect
= usb_stor_disconnect
,
1862 .suspend
= usb_stor_suspend
,
1863 .resume
= usb_stor_resume
,
1864 .reset_resume
= usb_stor_reset_resume
,
1865 .pre_reset
= usb_stor_pre_reset
,
1866 .post_reset
= usb_stor_post_reset
,
1867 .id_table
= usbat_usb_ids
,
1872 module_usb_stor_driver(usbat_driver
, usbat_host_template
, DRV_NAME
);