diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/storage/shuttle_usbat.c | 306 | ||||
-rw-r--r-- | drivers/usb/storage/shuttle_usbat.h | 66 | ||||
-rw-r--r-- | drivers/usb/storage/transport.h | 2 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_devs.h | 10 | ||||
-rw-r--r-- | drivers/usb/storage/usb.c | 4 |
5 files changed, 213 insertions, 175 deletions
diff --git a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c index bd448d6c3185..33c55a6261bb 100644 --- a/drivers/usb/storage/shuttle_usbat.c +++ b/drivers/usb/storage/shuttle_usbat.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* Driver for SCM Microsystems USB-ATAPI cable | 1 | /* Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable |
2 | * | 2 | * |
3 | * $Id: shuttle_usbat.c,v 1.17 2002/04/22 03:39:43 mdharm Exp $ | 3 | * $Id: shuttle_usbat.c,v 1.17 2002/04/22 03:39:43 mdharm Exp $ |
4 | * | 4 | * |
@@ -67,10 +67,10 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us); | |||
67 | static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us); | 67 | static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us); |
68 | 68 | ||
69 | /* | 69 | /* |
70 | * Convenience function to produce an ATAPI read/write sectors command | 70 | * Convenience function to produce an ATA read/write sectors command |
71 | * Use cmd=0x20 for read, cmd=0x30 for write | 71 | * Use cmd=0x20 for read, cmd=0x30 for write |
72 | */ | 72 | */ |
73 | static void usbat_pack_atapi_sector_cmd(unsigned char *buf, | 73 | static void usbat_pack_ata_sector_cmd(unsigned char *buf, |
74 | unsigned char thistime, | 74 | unsigned char thistime, |
75 | u32 sector, unsigned char cmd) | 75 | u32 sector, unsigned char cmd) |
76 | { | 76 | { |
@@ -196,10 +196,12 @@ static int usbat_check_status(struct us_data *us) | |||
196 | if (rc != USB_STOR_XFER_GOOD) | 196 | if (rc != USB_STOR_XFER_GOOD) |
197 | return USB_STOR_TRANSPORT_FAILED; | 197 | return USB_STOR_TRANSPORT_FAILED; |
198 | 198 | ||
199 | if (*reply & 0x01 && *reply != 0x51) // error/check condition (0x51 is ok) | 199 | /* error/check condition (0x51 is ok) */ |
200 | if (*reply & 0x01 && *reply != 0x51) | ||
200 | return USB_STOR_TRANSPORT_FAILED; | 201 | return USB_STOR_TRANSPORT_FAILED; |
201 | 202 | ||
202 | if (*reply & 0x20) // device fault | 203 | /* device fault */ |
204 | if (*reply & 0x20) | ||
203 | return USB_STOR_TRANSPORT_FAILED; | 205 | return USB_STOR_TRANSPORT_FAILED; |
204 | 206 | ||
205 | return USB_STOR_TRANSPORT_GOOD; | 207 | return USB_STOR_TRANSPORT_GOOD; |
@@ -222,29 +224,39 @@ static int usbat_set_shuttle_features(struct us_data *us, | |||
222 | command[0] = 0x40; | 224 | command[0] = 0x40; |
223 | command[1] = USBAT_CMD_SET_FEAT; | 225 | command[1] = USBAT_CMD_SET_FEAT; |
224 | 226 | ||
225 | // The only bit relevant to ATA access is bit 6 | 227 | /* |
226 | // which defines 8 bit data access (set) or 16 bit (unset) | 228 | * The only bit relevant to ATA access is bit 6 |
229 | * which defines 8 bit data access (set) or 16 bit (unset) | ||
230 | */ | ||
227 | command[2] = epp_control; | 231 | command[2] = epp_control; |
228 | 232 | ||
229 | // If FCQ is set in the qualifier (defined in R/W cmd), then bits U0, U1, | 233 | /* |
230 | // ET1 and ET2 define an external event to be checked for on event of a | 234 | * If FCQ is set in the qualifier (defined in R/W cmd), then bits U0, U1, |
231 | // _read_blocks or _write_blocks operation. The read/write will not take | 235 | * ET1 and ET2 define an external event to be checked for on event of a |
232 | // place unless the defined trigger signal is active. | 236 | * _read_blocks or _write_blocks operation. The read/write will not take |
237 | * place unless the defined trigger signal is active. | ||
238 | */ | ||
233 | command[3] = external_trigger; | 239 | command[3] = external_trigger; |
234 | 240 | ||
235 | // The resultant byte of the mask operation (see mask_byte) is compared for | 241 | /* |
236 | // equivalence with this test pattern. If equal, the read/write will take | 242 | * The resultant byte of the mask operation (see mask_byte) is compared for |
237 | // place. | 243 | * equivalence with this test pattern. If equal, the read/write will take |
244 | * place. | ||
245 | */ | ||
238 | command[4] = test_pattern; | 246 | command[4] = test_pattern; |
239 | 247 | ||
240 | // This value is logically ANDed with the status register field specified | 248 | /* |
241 | // in the read/write command. | 249 | * This value is logically ANDed with the status register field specified |
250 | * in the read/write command. | ||
251 | */ | ||
242 | command[5] = mask_byte; | 252 | command[5] = mask_byte; |
243 | 253 | ||
244 | // If ALQ is set in the qualifier, this field contains the address of the | 254 | /* |
245 | // registers where the byte count should be read for transferring the data. | 255 | * If ALQ is set in the qualifier, this field contains the address of the |
246 | // If ALQ is not set, then this field contains the number of bytes to be | 256 | * registers where the byte count should be read for transferring the data. |
247 | // transferred. | 257 | * If ALQ is not set, then this field contains the number of bytes to be |
258 | * transferred. | ||
259 | */ | ||
248 | command[6] = subcountL; | 260 | command[6] = subcountL; |
249 | command[7] = subcountH; | 261 | command[7] = subcountH; |
250 | 262 | ||
@@ -273,26 +285,26 @@ static int usbat_wait_not_busy(struct us_data *us, int minutes) | |||
273 | 285 | ||
274 | if (result!=USB_STOR_XFER_GOOD) | 286 | if (result!=USB_STOR_XFER_GOOD) |
275 | return USB_STOR_TRANSPORT_ERROR; | 287 | return USB_STOR_TRANSPORT_ERROR; |
276 | if (*status & 0x01) { // check condition | 288 | if (*status & 0x01) { /* check condition */ |
277 | result = usbat_read(us, USBAT_ATA, 0x10, status); | 289 | result = usbat_read(us, USBAT_ATA, 0x10, status); |
278 | return USB_STOR_TRANSPORT_FAILED; | 290 | return USB_STOR_TRANSPORT_FAILED; |
279 | } | 291 | } |
280 | if (*status & 0x20) // device fault | 292 | if (*status & 0x20) /* device fault */ |
281 | return USB_STOR_TRANSPORT_FAILED; | 293 | return USB_STOR_TRANSPORT_FAILED; |
282 | 294 | ||
283 | if ((*status & 0x80)==0x00) { // not busy | 295 | if ((*status & 0x80)==0x00) { /* not busy */ |
284 | US_DEBUGP("Waited not busy for %d steps\n", i); | 296 | US_DEBUGP("Waited not busy for %d steps\n", i); |
285 | return USB_STOR_TRANSPORT_GOOD; | 297 | return USB_STOR_TRANSPORT_GOOD; |
286 | } | 298 | } |
287 | 299 | ||
288 | if (i<500) | 300 | if (i<500) |
289 | msleep(10); // 5 seconds | 301 | msleep(10); /* 5 seconds */ |
290 | else if (i<700) | 302 | else if (i<700) |
291 | msleep(50); // 10 seconds | 303 | msleep(50); /* 10 seconds */ |
292 | else if (i<1200) | 304 | else if (i<1200) |
293 | msleep(100); // 50 seconds | 305 | msleep(100); /* 50 seconds */ |
294 | else | 306 | else |
295 | msleep(1000); // X minutes | 307 | msleep(1000); /* X minutes */ |
296 | } | 308 | } |
297 | 309 | ||
298 | US_DEBUGP("Waited not busy for %d minutes, timing out.\n", | 310 | US_DEBUGP("Waited not busy for %d minutes, timing out.\n", |
@@ -412,9 +424,12 @@ static int usbat_hp8200e_rw_block_test(struct us_data *us, | |||
412 | 424 | ||
413 | if (i==0) { | 425 | if (i==0) { |
414 | cmdlen = 16; | 426 | cmdlen = 16; |
415 | // Write to multiple registers | 427 | /* |
416 | // Not really sure the 0x07, 0x17, 0xfc, 0xe7 is necessary here, | 428 | * Write to multiple registers |
417 | // but that's what came out of the trace every single time. | 429 | * Not really sure the 0x07, 0x17, 0xfc, 0xe7 is |
430 | * necessary here, but that's what came out of the | ||
431 | * trace every single time. | ||
432 | */ | ||
418 | command[0] = 0x40; | 433 | command[0] = 0x40; |
419 | command[1] = access | USBAT_CMD_WRITE_REGS; | 434 | command[1] = access | USBAT_CMD_WRITE_REGS; |
420 | command[2] = 0x07; | 435 | command[2] = 0x07; |
@@ -426,7 +441,7 @@ static int usbat_hp8200e_rw_block_test(struct us_data *us, | |||
426 | } else | 441 | } else |
427 | cmdlen = 8; | 442 | cmdlen = 8; |
428 | 443 | ||
429 | // Conditionally read or write blocks | 444 | /* Conditionally read or write blocks */ |
430 | command[cmdlen-8] = (direction==DMA_TO_DEVICE ? 0x40 : 0xC0); | 445 | command[cmdlen-8] = (direction==DMA_TO_DEVICE ? 0x40 : 0xC0); |
431 | command[cmdlen-7] = access | | 446 | command[cmdlen-7] = access | |
432 | (direction==DMA_TO_DEVICE ? | 447 | (direction==DMA_TO_DEVICE ? |
@@ -456,11 +471,6 @@ static int usbat_hp8200e_rw_block_test(struct us_data *us, | |||
456 | 471 | ||
457 | } | 472 | } |
458 | 473 | ||
459 | |||
460 | //US_DEBUGP("Transfer %s %d bytes, sg buffers %d\n", | ||
461 | // direction == DMA_TO_DEVICE ? "out" : "in", | ||
462 | // len, use_sg); | ||
463 | |||
464 | result = usb_stor_bulk_transfer_sg(us, | 474 | result = usb_stor_bulk_transfer_sg(us, |
465 | pipe, content, len, use_sg, NULL); | 475 | pipe, content, len, use_sg, NULL); |
466 | 476 | ||
@@ -508,9 +518,9 @@ static int usbat_hp8200e_rw_block_test(struct us_data *us, | |||
508 | 518 | ||
509 | if (result!=USB_STOR_XFER_GOOD) | 519 | if (result!=USB_STOR_XFER_GOOD) |
510 | return USB_STOR_TRANSPORT_ERROR; | 520 | return USB_STOR_TRANSPORT_ERROR; |
511 | if (*status & 0x01) // check condition | 521 | if (*status & 0x01) /* check condition */ |
512 | return USB_STOR_TRANSPORT_FAILED; | 522 | return USB_STOR_TRANSPORT_FAILED; |
513 | if (*status & 0x20) // device fault | 523 | if (*status & 0x20) /* device fault */ |
514 | return USB_STOR_TRANSPORT_FAILED; | 524 | return USB_STOR_TRANSPORT_FAILED; |
515 | 525 | ||
516 | US_DEBUGP("Redoing %s\n", | 526 | US_DEBUGP("Redoing %s\n", |
@@ -547,32 +557,32 @@ static int usbat_multiple_write(struct us_data *us, | |||
547 | 557 | ||
548 | BUG_ON(num_registers > US_IOBUF_SIZE/2); | 558 | BUG_ON(num_registers > US_IOBUF_SIZE/2); |
549 | 559 | ||
550 | // Write to multiple registers, ATA access | 560 | /* Write to multiple registers, ATA access */ |
551 | command[0] = 0x40; | 561 | command[0] = 0x40; |
552 | command[1] = USBAT_ATA | USBAT_CMD_WRITE_REGS; | 562 | command[1] = USBAT_ATA | USBAT_CMD_WRITE_REGS; |
553 | 563 | ||
554 | // No relevance | 564 | /* No relevance */ |
555 | command[2] = 0; | 565 | command[2] = 0; |
556 | command[3] = 0; | 566 | command[3] = 0; |
557 | command[4] = 0; | 567 | command[4] = 0; |
558 | command[5] = 0; | 568 | command[5] = 0; |
559 | 569 | ||
560 | // Number of bytes to be transferred (incl. addresses and data) | 570 | /* Number of bytes to be transferred (incl. addresses and data) */ |
561 | command[6] = LSB_of(num_registers*2); | 571 | command[6] = LSB_of(num_registers*2); |
562 | command[7] = MSB_of(num_registers*2); | 572 | command[7] = MSB_of(num_registers*2); |
563 | 573 | ||
564 | // The setup command | 574 | /* The setup command */ |
565 | result = usbat_execute_command(us, command, 8); | 575 | result = usbat_execute_command(us, command, 8); |
566 | if (result != USB_STOR_XFER_GOOD) | 576 | if (result != USB_STOR_XFER_GOOD) |
567 | return USB_STOR_TRANSPORT_ERROR; | 577 | return USB_STOR_TRANSPORT_ERROR; |
568 | 578 | ||
569 | // Create the reg/data, reg/data sequence | 579 | /* Create the reg/data, reg/data sequence */ |
570 | for (i=0; i<num_registers; i++) { | 580 | for (i=0; i<num_registers; i++) { |
571 | data[i<<1] = registers[i]; | 581 | data[i<<1] = registers[i]; |
572 | data[1+(i<<1)] = data_out[i]; | 582 | data[1+(i<<1)] = data_out[i]; |
573 | } | 583 | } |
574 | 584 | ||
575 | // Send the data | 585 | /* Send the data */ |
576 | result = usbat_bulk_write(us, data, num_registers*2); | 586 | result = usbat_bulk_write(us, data, num_registers*2); |
577 | if (result != USB_STOR_XFER_GOOD) | 587 | if (result != USB_STOR_XFER_GOOD) |
578 | return USB_STOR_TRANSPORT_ERROR; | 588 | return USB_STOR_TRANSPORT_ERROR; |
@@ -606,17 +616,17 @@ static int usbat_read_blocks(struct us_data *us, | |||
606 | command[1] = USBAT_ATA | USBAT_CMD_COND_READ_BLOCK; | 616 | command[1] = USBAT_ATA | USBAT_CMD_COND_READ_BLOCK; |
607 | command[2] = USBAT_ATA_DATA; | 617 | command[2] = USBAT_ATA_DATA; |
608 | command[3] = USBAT_ATA_STATUS; | 618 | command[3] = USBAT_ATA_STATUS; |
609 | command[4] = 0xFD; // Timeout (ms); | 619 | command[4] = 0xFD; /* Timeout (ms); */ |
610 | command[5] = USBAT_QUAL_FCQ; | 620 | command[5] = USBAT_QUAL_FCQ; |
611 | command[6] = LSB_of(len); | 621 | command[6] = LSB_of(len); |
612 | command[7] = MSB_of(len); | 622 | command[7] = MSB_of(len); |
613 | 623 | ||
614 | // Multiple block read setup command | 624 | /* Multiple block read setup command */ |
615 | result = usbat_execute_command(us, command, 8); | 625 | result = usbat_execute_command(us, command, 8); |
616 | if (result != USB_STOR_XFER_GOOD) | 626 | if (result != USB_STOR_XFER_GOOD) |
617 | return USB_STOR_TRANSPORT_FAILED; | 627 | return USB_STOR_TRANSPORT_FAILED; |
618 | 628 | ||
619 | // Read the blocks we just asked for | 629 | /* Read the blocks we just asked for */ |
620 | result = usbat_bulk_read(us, buffer, len); | 630 | result = usbat_bulk_read(us, buffer, len); |
621 | if (result != USB_STOR_XFER_GOOD) | 631 | if (result != USB_STOR_XFER_GOOD) |
622 | return USB_STOR_TRANSPORT_FAILED; | 632 | return USB_STOR_TRANSPORT_FAILED; |
@@ -647,17 +657,17 @@ static int usbat_write_blocks(struct us_data *us, | |||
647 | command[1] = USBAT_ATA | USBAT_CMD_COND_WRITE_BLOCK; | 657 | command[1] = USBAT_ATA | USBAT_CMD_COND_WRITE_BLOCK; |
648 | command[2] = USBAT_ATA_DATA; | 658 | command[2] = USBAT_ATA_DATA; |
649 | command[3] = USBAT_ATA_STATUS; | 659 | command[3] = USBAT_ATA_STATUS; |
650 | command[4] = 0xFD; // Timeout (ms) | 660 | command[4] = 0xFD; /* Timeout (ms) */ |
651 | command[5] = USBAT_QUAL_FCQ; | 661 | command[5] = USBAT_QUAL_FCQ; |
652 | command[6] = LSB_of(len); | 662 | command[6] = LSB_of(len); |
653 | command[7] = MSB_of(len); | 663 | command[7] = MSB_of(len); |
654 | 664 | ||
655 | // Multiple block write setup command | 665 | /* Multiple block write setup command */ |
656 | result = usbat_execute_command(us, command, 8); | 666 | result = usbat_execute_command(us, command, 8); |
657 | if (result != USB_STOR_XFER_GOOD) | 667 | if (result != USB_STOR_XFER_GOOD) |
658 | return USB_STOR_TRANSPORT_FAILED; | 668 | return USB_STOR_TRANSPORT_FAILED; |
659 | 669 | ||
660 | // Write the data | 670 | /* Write the data */ |
661 | result = usbat_bulk_write(us, buffer, len); | 671 | result = usbat_bulk_write(us, buffer, len); |
662 | if (result != USB_STOR_XFER_GOOD) | 672 | if (result != USB_STOR_XFER_GOOD) |
663 | return USB_STOR_TRANSPORT_FAILED; | 673 | return USB_STOR_TRANSPORT_FAILED; |
@@ -711,16 +721,20 @@ static int usbat_device_reset(struct us_data *us) | |||
711 | { | 721 | { |
712 | int rc; | 722 | int rc; |
713 | 723 | ||
714 | // Reset peripheral, enable peripheral control signals | 724 | /* |
715 | // (bring reset signal up) | 725 | * Reset peripheral, enable peripheral control signals |
726 | * (bring reset signal up) | ||
727 | */ | ||
716 | rc = usbat_write_user_io(us, | 728 | rc = usbat_write_user_io(us, |
717 | USBAT_UIO_DRVRST | USBAT_UIO_OE1 | USBAT_UIO_OE0, | 729 | USBAT_UIO_DRVRST | USBAT_UIO_OE1 | USBAT_UIO_OE0, |
718 | USBAT_UIO_EPAD | USBAT_UIO_1); | 730 | USBAT_UIO_EPAD | USBAT_UIO_1); |
719 | if (rc != USB_STOR_XFER_GOOD) | 731 | if (rc != USB_STOR_XFER_GOOD) |
720 | return USB_STOR_TRANSPORT_ERROR; | 732 | return USB_STOR_TRANSPORT_ERROR; |
721 | 733 | ||
722 | // Enable peripheral control signals | 734 | /* |
723 | // (bring reset signal down) | 735 | * Enable peripheral control signals |
736 | * (bring reset signal down) | ||
737 | */ | ||
724 | rc = usbat_write_user_io(us, | 738 | rc = usbat_write_user_io(us, |
725 | USBAT_UIO_OE1 | USBAT_UIO_OE0, | 739 | USBAT_UIO_OE1 | USBAT_UIO_OE0, |
726 | USBAT_UIO_EPAD | USBAT_UIO_1); | 740 | USBAT_UIO_EPAD | USBAT_UIO_1); |
@@ -737,7 +751,7 @@ static int usbat_device_enable_cdt(struct us_data *us) | |||
737 | { | 751 | { |
738 | int rc; | 752 | int rc; |
739 | 753 | ||
740 | // Enable peripheral control signals and card detect | 754 | /* Enable peripheral control signals and card detect */ |
741 | rc = usbat_write_user_io(us, | 755 | rc = usbat_write_user_io(us, |
742 | USBAT_UIO_ACKD | USBAT_UIO_OE1 | USBAT_UIO_OE0, | 756 | USBAT_UIO_ACKD | USBAT_UIO_OE1 | USBAT_UIO_OE0, |
743 | USBAT_UIO_EPAD | USBAT_UIO_1); | 757 | USBAT_UIO_EPAD | USBAT_UIO_1); |
@@ -786,7 +800,7 @@ static int usbat_flash_check_media(struct us_data *us, | |||
786 | if (rc != USB_STOR_XFER_GOOD) | 800 | if (rc != USB_STOR_XFER_GOOD) |
787 | return USB_STOR_TRANSPORT_ERROR; | 801 | return USB_STOR_TRANSPORT_ERROR; |
788 | 802 | ||
789 | // Check for media existence | 803 | /* Check for media existence */ |
790 | rc = usbat_flash_check_media_present(uio); | 804 | rc = usbat_flash_check_media_present(uio); |
791 | if (rc == USBAT_FLASH_MEDIA_NONE) { | 805 | if (rc == USBAT_FLASH_MEDIA_NONE) { |
792 | info->sense_key = 0x02; | 806 | info->sense_key = 0x02; |
@@ -795,11 +809,11 @@ static int usbat_flash_check_media(struct us_data *us, | |||
795 | return USB_STOR_TRANSPORT_FAILED; | 809 | return USB_STOR_TRANSPORT_FAILED; |
796 | } | 810 | } |
797 | 811 | ||
798 | // Check for media change | 812 | /* Check for media change */ |
799 | rc = usbat_flash_check_media_changed(uio); | 813 | rc = usbat_flash_check_media_changed(uio); |
800 | if (rc == USBAT_FLASH_MEDIA_CHANGED) { | 814 | if (rc == USBAT_FLASH_MEDIA_CHANGED) { |
801 | 815 | ||
802 | // Reset and re-enable card detect | 816 | /* Reset and re-enable card detect */ |
803 | rc = usbat_device_reset(us); | 817 | rc = usbat_device_reset(us); |
804 | if (rc != USB_STOR_TRANSPORT_GOOD) | 818 | if (rc != USB_STOR_TRANSPORT_GOOD) |
805 | return rc; | 819 | return rc; |
@@ -855,13 +869,13 @@ static int usbat_identify_device(struct us_data *us, | |||
855 | if (rc != USB_STOR_XFER_GOOD) | 869 | if (rc != USB_STOR_XFER_GOOD) |
856 | return USB_STOR_TRANSPORT_ERROR; | 870 | return USB_STOR_TRANSPORT_ERROR; |
857 | 871 | ||
858 | // Check for error bit, or if the command 'fell through' | 872 | /* Check for error bit, or if the command 'fell through' */ |
859 | if (status == 0xA1 || !(status & 0x01)) { | 873 | if (status == 0xA1 || !(status & 0x01)) { |
860 | // Device is HP 8200 | 874 | /* Device is HP 8200 */ |
861 | US_DEBUGP("usbat_identify_device: Detected HP8200 CDRW\n"); | 875 | US_DEBUGP("usbat_identify_device: Detected HP8200 CDRW\n"); |
862 | info->devicetype = USBAT_DEV_HP8200; | 876 | info->devicetype = USBAT_DEV_HP8200; |
863 | } else { | 877 | } else { |
864 | // Device is a CompactFlash reader/writer | 878 | /* Device is a CompactFlash reader/writer */ |
865 | US_DEBUGP("usbat_identify_device: Detected Flash reader/writer\n"); | 879 | US_DEBUGP("usbat_identify_device: Detected Flash reader/writer\n"); |
866 | info->devicetype = USBAT_DEV_FLASH; | 880 | info->devicetype = USBAT_DEV_FLASH; |
867 | } | 881 | } |
@@ -916,7 +930,7 @@ static int usbat_flash_get_sector_count(struct us_data *us, | |||
916 | if (!reply) | 930 | if (!reply) |
917 | return USB_STOR_TRANSPORT_ERROR; | 931 | return USB_STOR_TRANSPORT_ERROR; |
918 | 932 | ||
919 | // ATAPI command : IDENTIFY DEVICE | 933 | /* ATA command : IDENTIFY DEVICE */ |
920 | rc = usbat_multiple_write(us, registers, command, 3); | 934 | rc = usbat_multiple_write(us, registers, command, 3); |
921 | if (rc != USB_STOR_XFER_GOOD) { | 935 | if (rc != USB_STOR_XFER_GOOD) { |
922 | US_DEBUGP("usbat_flash_get_sector_count: Gah! identify_device failed\n"); | 936 | US_DEBUGP("usbat_flash_get_sector_count: Gah! identify_device failed\n"); |
@@ -924,7 +938,7 @@ static int usbat_flash_get_sector_count(struct us_data *us, | |||
924 | goto leave; | 938 | goto leave; |
925 | } | 939 | } |
926 | 940 | ||
927 | // Read device status | 941 | /* Read device status */ |
928 | if (usbat_get_status(us, &status) != USB_STOR_XFER_GOOD) { | 942 | if (usbat_get_status(us, &status) != USB_STOR_XFER_GOOD) { |
929 | rc = USB_STOR_TRANSPORT_ERROR; | 943 | rc = USB_STOR_TRANSPORT_ERROR; |
930 | goto leave; | 944 | goto leave; |
@@ -932,7 +946,7 @@ static int usbat_flash_get_sector_count(struct us_data *us, | |||
932 | 946 | ||
933 | msleep(100); | 947 | msleep(100); |
934 | 948 | ||
935 | // Read the device identification data | 949 | /* Read the device identification data */ |
936 | rc = usbat_read_block(us, reply, 512); | 950 | rc = usbat_read_block(us, reply, 512); |
937 | if (rc != USB_STOR_TRANSPORT_GOOD) | 951 | if (rc != USB_STOR_TRANSPORT_GOOD) |
938 | goto leave; | 952 | goto leave; |
@@ -977,19 +991,23 @@ static int usbat_flash_read_data(struct us_data *us, | |||
977 | if (result != USB_STOR_TRANSPORT_GOOD) | 991 | if (result != USB_STOR_TRANSPORT_GOOD) |
978 | return result; | 992 | return result; |
979 | 993 | ||
980 | // we're working in LBA mode. according to the ATA spec, | 994 | /* |
981 | // we can support up to 28-bit addressing. I don't know if Jumpshot | 995 | * we're working in LBA mode. according to the ATA spec, |
982 | // supports beyond 24-bit addressing. It's kind of hard to test | 996 | * we can support up to 28-bit addressing. I don't know if Jumpshot |
983 | // since it requires > 8GB CF card. | 997 | * supports beyond 24-bit addressing. It's kind of hard to test |
998 | * since it requires > 8GB CF card. | ||
999 | */ | ||
984 | 1000 | ||
985 | if (sector > 0x0FFFFFFF) | 1001 | if (sector > 0x0FFFFFFF) |
986 | return USB_STOR_TRANSPORT_ERROR; | 1002 | return USB_STOR_TRANSPORT_ERROR; |
987 | 1003 | ||
988 | totallen = sectors * info->ssize; | 1004 | totallen = sectors * info->ssize; |
989 | 1005 | ||
990 | // Since we don't read more than 64 KB at a time, we have to create | 1006 | /* |
991 | // a bounce buffer and move the data a piece at a time between the | 1007 | * Since we don't read more than 64 KB at a time, we have to create |
992 | // bounce buffer and the actual transfer buffer. | 1008 | * a bounce buffer and move the data a piece at a time between the |
1009 | * bounce buffer and the actual transfer buffer. | ||
1010 | */ | ||
993 | 1011 | ||
994 | alloclen = min(totallen, 65536u); | 1012 | alloclen = min(totallen, 65536u); |
995 | buffer = kmalloc(alloclen, GFP_NOIO); | 1013 | buffer = kmalloc(alloclen, GFP_NOIO); |
@@ -997,27 +1015,29 @@ static int usbat_flash_read_data(struct us_data *us, | |||
997 | return USB_STOR_TRANSPORT_ERROR; | 1015 | return USB_STOR_TRANSPORT_ERROR; |
998 | 1016 | ||
999 | do { | 1017 | do { |
1000 | // loop, never allocate or transfer more than 64k at once | 1018 | /* |
1001 | // (min(128k, 255*info->ssize) is the real limit) | 1019 | * loop, never allocate or transfer more than 64k at once |
1020 | * (min(128k, 255*info->ssize) is the real limit) | ||
1021 | */ | ||
1002 | len = min(totallen, alloclen); | 1022 | len = min(totallen, alloclen); |
1003 | thistime = (len / info->ssize) & 0xff; | 1023 | thistime = (len / info->ssize) & 0xff; |
1004 | 1024 | ||
1005 | // ATAPI command 0x20 (READ SECTORS) | 1025 | /* ATA command 0x20 (READ SECTORS) */ |
1006 | usbat_pack_atapi_sector_cmd(command, thistime, sector, 0x20); | 1026 | usbat_pack_ata_sector_cmd(command, thistime, sector, 0x20); |
1007 | 1027 | ||
1008 | // Write/execute ATAPI read command | 1028 | /* Write/execute ATA read command */ |
1009 | result = usbat_multiple_write(us, registers, command, 7); | 1029 | result = usbat_multiple_write(us, registers, command, 7); |
1010 | if (result != USB_STOR_TRANSPORT_GOOD) | 1030 | if (result != USB_STOR_TRANSPORT_GOOD) |
1011 | goto leave; | 1031 | goto leave; |
1012 | 1032 | ||
1013 | // Read the data we just requested | 1033 | /* Read the data we just requested */ |
1014 | result = usbat_read_blocks(us, buffer, len); | 1034 | result = usbat_read_blocks(us, buffer, len); |
1015 | if (result != USB_STOR_TRANSPORT_GOOD) | 1035 | if (result != USB_STOR_TRANSPORT_GOOD) |
1016 | goto leave; | 1036 | goto leave; |
1017 | 1037 | ||
1018 | US_DEBUGP("usbat_flash_read_data: %d bytes\n", len); | 1038 | US_DEBUGP("usbat_flash_read_data: %d bytes\n", len); |
1019 | 1039 | ||
1020 | // Store the data in the transfer buffer | 1040 | /* Store the data in the transfer buffer */ |
1021 | usb_stor_access_xfer_buf(buffer, len, us->srb, | 1041 | usb_stor_access_xfer_buf(buffer, len, us->srb, |
1022 | &sg_idx, &sg_offset, TO_XFER_BUF); | 1042 | &sg_idx, &sg_offset, TO_XFER_BUF); |
1023 | 1043 | ||
@@ -1061,19 +1081,23 @@ static int usbat_flash_write_data(struct us_data *us, | |||
1061 | if (result != USB_STOR_TRANSPORT_GOOD) | 1081 | if (result != USB_STOR_TRANSPORT_GOOD) |
1062 | return result; | 1082 | return result; |
1063 | 1083 | ||
1064 | // we're working in LBA mode. according to the ATA spec, | 1084 | /* |
1065 | // we can support up to 28-bit addressing. I don't know if Jumpshot | 1085 | * we're working in LBA mode. according to the ATA spec, |
1066 | // supports beyond 24-bit addressing. It's kind of hard to test | 1086 | * we can support up to 28-bit addressing. I don't know if the device |
1067 | // since it requires > 8GB CF card. | 1087 | * supports beyond 24-bit addressing. It's kind of hard to test |
1088 | * since it requires > 8GB media. | ||
1089 | */ | ||
1068 | 1090 | ||
1069 | if (sector > 0x0FFFFFFF) | 1091 | if (sector > 0x0FFFFFFF) |
1070 | return USB_STOR_TRANSPORT_ERROR; | 1092 | return USB_STOR_TRANSPORT_ERROR; |
1071 | 1093 | ||
1072 | totallen = sectors * info->ssize; | 1094 | totallen = sectors * info->ssize; |
1073 | 1095 | ||
1074 | // Since we don't write more than 64 KB at a time, we have to create | 1096 | /* |
1075 | // a bounce buffer and move the data a piece at a time between the | 1097 | * Since we don't write more than 64 KB at a time, we have to create |
1076 | // bounce buffer and the actual transfer buffer. | 1098 | * a bounce buffer and move the data a piece at a time between the |
1099 | * bounce buffer and the actual transfer buffer. | ||
1100 | */ | ||
1077 | 1101 | ||
1078 | alloclen = min(totallen, 65536u); | 1102 | alloclen = min(totallen, 65536u); |
1079 | buffer = kmalloc(alloclen, GFP_NOIO); | 1103 | buffer = kmalloc(alloclen, GFP_NOIO); |
@@ -1081,24 +1105,26 @@ static int usbat_flash_write_data(struct us_data *us, | |||
1081 | return USB_STOR_TRANSPORT_ERROR; | 1105 | return USB_STOR_TRANSPORT_ERROR; |
1082 | 1106 | ||
1083 | do { | 1107 | do { |
1084 | // loop, never allocate or transfer more than 64k at once | 1108 | /* |
1085 | // (min(128k, 255*info->ssize) is the real limit) | 1109 | * loop, never allocate or transfer more than 64k at once |
1110 | * (min(128k, 255*info->ssize) is the real limit) | ||
1111 | */ | ||
1086 | len = min(totallen, alloclen); | 1112 | len = min(totallen, alloclen); |
1087 | thistime = (len / info->ssize) & 0xff; | 1113 | thistime = (len / info->ssize) & 0xff; |
1088 | 1114 | ||
1089 | // Get the data from the transfer buffer | 1115 | /* Get the data from the transfer buffer */ |
1090 | usb_stor_access_xfer_buf(buffer, len, us->srb, | 1116 | usb_stor_access_xfer_buf(buffer, len, us->srb, |
1091 | &sg_idx, &sg_offset, FROM_XFER_BUF); | 1117 | &sg_idx, &sg_offset, FROM_XFER_BUF); |
1092 | 1118 | ||
1093 | // ATAPI command 0x30 (WRITE SECTORS) | 1119 | /* ATA command 0x30 (WRITE SECTORS) */ |
1094 | usbat_pack_atapi_sector_cmd(command, thistime, sector, 0x30); | 1120 | usbat_pack_ata_sector_cmd(command, thistime, sector, 0x30); |
1095 | 1121 | ||
1096 | // Write/execute ATAPI write command | 1122 | /* Write/execute ATA write command */ |
1097 | result = usbat_multiple_write(us, registers, command, 7); | 1123 | result = usbat_multiple_write(us, registers, command, 7); |
1098 | if (result != USB_STOR_TRANSPORT_GOOD) | 1124 | if (result != USB_STOR_TRANSPORT_GOOD) |
1099 | goto leave; | 1125 | goto leave; |
1100 | 1126 | ||
1101 | // Write the data | 1127 | /* Write the data */ |
1102 | result = usbat_write_blocks(us, buffer, len); | 1128 | result = usbat_write_blocks(us, buffer, len); |
1103 | if (result != USB_STOR_TRANSPORT_GOOD) | 1129 | if (result != USB_STOR_TRANSPORT_GOOD) |
1104 | goto leave; | 1130 | goto leave; |
@@ -1169,42 +1195,44 @@ static int usbat_hp8200e_handle_read10(struct us_data *us, | |||
1169 | srb->transfersize); | 1195 | srb->transfersize); |
1170 | } | 1196 | } |
1171 | 1197 | ||
1172 | // Since we only read in one block at a time, we have to create | 1198 | /* |
1173 | // a bounce buffer and move the data a piece at a time between the | 1199 | * Since we only read in one block at a time, we have to create |
1174 | // bounce buffer and the actual transfer buffer. | 1200 | * a bounce buffer and move the data a piece at a time between the |
1201 | * bounce buffer and the actual transfer buffer. | ||
1202 | */ | ||
1175 | 1203 | ||
1176 | len = (65535/srb->transfersize) * srb->transfersize; | 1204 | len = (65535/srb->transfersize) * srb->transfersize; |
1177 | US_DEBUGP("Max read is %d bytes\n", len); | 1205 | US_DEBUGP("Max read is %d bytes\n", len); |
1178 | len = min(len, srb->request_bufflen); | 1206 | len = min(len, srb->request_bufflen); |
1179 | buffer = kmalloc(len, GFP_NOIO); | 1207 | buffer = kmalloc(len, GFP_NOIO); |
1180 | if (buffer == NULL) // bloody hell! | 1208 | if (buffer == NULL) /* bloody hell! */ |
1181 | return USB_STOR_TRANSPORT_FAILED; | 1209 | return USB_STOR_TRANSPORT_FAILED; |
1182 | sector = short_pack(data[7+3], data[7+2]); | 1210 | sector = short_pack(data[7+3], data[7+2]); |
1183 | sector <<= 16; | 1211 | sector <<= 16; |
1184 | sector |= short_pack(data[7+5], data[7+4]); | 1212 | sector |= short_pack(data[7+5], data[7+4]); |
1185 | transferred = 0; | 1213 | transferred = 0; |
1186 | 1214 | ||
1187 | sg_segment = 0; // for keeping track of where we are in | 1215 | sg_segment = 0; /* for keeping track of where we are in */ |
1188 | sg_offset = 0; // the scatter/gather list | 1216 | sg_offset = 0; /* the scatter/gather list */ |
1189 | 1217 | ||
1190 | while (transferred != srb->request_bufflen) { | 1218 | while (transferred != srb->request_bufflen) { |
1191 | 1219 | ||
1192 | if (len > srb->request_bufflen - transferred) | 1220 | if (len > srb->request_bufflen - transferred) |
1193 | len = srb->request_bufflen - transferred; | 1221 | len = srb->request_bufflen - transferred; |
1194 | 1222 | ||
1195 | data[3] = len&0xFF; // (cylL) = expected length (L) | 1223 | data[3] = len&0xFF; /* (cylL) = expected length (L) */ |
1196 | data[4] = (len>>8)&0xFF; // (cylH) = expected length (H) | 1224 | data[4] = (len>>8)&0xFF; /* (cylH) = expected length (H) */ |
1197 | 1225 | ||
1198 | // Fix up the SCSI command sector and num sectors | 1226 | /* Fix up the SCSI command sector and num sectors */ |
1199 | 1227 | ||
1200 | data[7+2] = MSB_of(sector>>16); // SCSI command sector | 1228 | data[7+2] = MSB_of(sector>>16); /* SCSI command sector */ |
1201 | data[7+3] = LSB_of(sector>>16); | 1229 | data[7+3] = LSB_of(sector>>16); |
1202 | data[7+4] = MSB_of(sector&0xFFFF); | 1230 | data[7+4] = MSB_of(sector&0xFFFF); |
1203 | data[7+5] = LSB_of(sector&0xFFFF); | 1231 | data[7+5] = LSB_of(sector&0xFFFF); |
1204 | if (data[7+0] == GPCMD_READ_CD) | 1232 | if (data[7+0] == GPCMD_READ_CD) |
1205 | data[7+6] = 0; | 1233 | data[7+6] = 0; |
1206 | data[7+7] = MSB_of(len / srb->transfersize); // SCSI command | 1234 | data[7+7] = MSB_of(len / srb->transfersize); /* SCSI command */ |
1207 | data[7+8] = LSB_of(len / srb->transfersize); // num sectors | 1235 | data[7+8] = LSB_of(len / srb->transfersize); /* num sectors */ |
1208 | 1236 | ||
1209 | result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, | 1237 | result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, |
1210 | registers, data, 19, | 1238 | registers, data, 19, |
@@ -1217,16 +1245,16 @@ static int usbat_hp8200e_handle_read10(struct us_data *us, | |||
1217 | if (result != USB_STOR_TRANSPORT_GOOD) | 1245 | if (result != USB_STOR_TRANSPORT_GOOD) |
1218 | break; | 1246 | break; |
1219 | 1247 | ||
1220 | // Store the data in the transfer buffer | 1248 | /* Store the data in the transfer buffer */ |
1221 | usb_stor_access_xfer_buf(buffer, len, srb, | 1249 | usb_stor_access_xfer_buf(buffer, len, srb, |
1222 | &sg_segment, &sg_offset, TO_XFER_BUF); | 1250 | &sg_segment, &sg_offset, TO_XFER_BUF); |
1223 | 1251 | ||
1224 | // Update the amount transferred and the sector number | 1252 | /* Update the amount transferred and the sector number */ |
1225 | 1253 | ||
1226 | transferred += len; | 1254 | transferred += len; |
1227 | sector += len / srb->transfersize; | 1255 | sector += len / srb->transfersize; |
1228 | 1256 | ||
1229 | } // while transferred != srb->request_bufflen | 1257 | } /* while transferred != srb->request_bufflen */ |
1230 | 1258 | ||
1231 | kfree(buffer); | 1259 | kfree(buffer); |
1232 | return result; | 1260 | return result; |
@@ -1237,7 +1265,7 @@ static int usbat_select_and_test_registers(struct us_data *us) | |||
1237 | int selector; | 1265 | int selector; |
1238 | unsigned char *status = us->iobuf; | 1266 | unsigned char *status = us->iobuf; |
1239 | 1267 | ||
1240 | // try device = master, then device = slave. | 1268 | /* try device = master, then device = slave. */ |
1241 | for (selector = 0xA0; selector <= 0xB0; selector += 0x10) { | 1269 | for (selector = 0xA0; selector <= 0xB0; selector += 0x10) { |
1242 | if (usbat_write(us, USBAT_ATA, USBAT_ATA_DEVICE, selector) != | 1270 | if (usbat_write(us, USBAT_ATA, USBAT_ATA_DEVICE, selector) != |
1243 | USB_STOR_XFER_GOOD) | 1271 | USB_STOR_XFER_GOOD) |
@@ -1298,7 +1326,7 @@ int init_usbat(struct us_data *us) | |||
1298 | memset(us->extra, 0, sizeof(struct usbat_info)); | 1326 | memset(us->extra, 0, sizeof(struct usbat_info)); |
1299 | info = (struct usbat_info *) (us->extra); | 1327 | info = (struct usbat_info *) (us->extra); |
1300 | 1328 | ||
1301 | // Enable peripheral control signals | 1329 | /* Enable peripheral control signals */ |
1302 | rc = usbat_write_user_io(us, | 1330 | rc = usbat_write_user_io(us, |
1303 | USBAT_UIO_OE1 | USBAT_UIO_OE0, | 1331 | USBAT_UIO_OE1 | USBAT_UIO_OE0, |
1304 | USBAT_UIO_EPAD | USBAT_UIO_1); | 1332 | USBAT_UIO_EPAD | USBAT_UIO_1); |
@@ -1337,7 +1365,7 @@ int init_usbat(struct us_data *us) | |||
1337 | 1365 | ||
1338 | US_DEBUGP("INIT 5\n"); | 1366 | US_DEBUGP("INIT 5\n"); |
1339 | 1367 | ||
1340 | // Enable peripheral control signals and card detect | 1368 | /* Enable peripheral control signals and card detect */ |
1341 | rc = usbat_device_enable_cdt(us); | 1369 | rc = usbat_device_enable_cdt(us); |
1342 | if (rc != USB_STOR_TRANSPORT_GOOD) | 1370 | if (rc != USB_STOR_TRANSPORT_GOOD) |
1343 | return rc; | 1371 | return rc; |
@@ -1364,7 +1392,7 @@ int init_usbat(struct us_data *us) | |||
1364 | 1392 | ||
1365 | US_DEBUGP("INIT 9\n"); | 1393 | US_DEBUGP("INIT 9\n"); |
1366 | 1394 | ||
1367 | // At this point, we need to detect which device we are using | 1395 | /* At this point, we need to detect which device we are using */ |
1368 | if (usbat_set_transport(us, info)) | 1396 | if (usbat_set_transport(us, info)) |
1369 | return USB_STOR_TRANSPORT_ERROR; | 1397 | return USB_STOR_TRANSPORT_ERROR; |
1370 | 1398 | ||
@@ -1414,10 +1442,10 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us) | |||
1414 | data[0] = 0x00; | 1442 | data[0] = 0x00; |
1415 | data[1] = 0x00; | 1443 | data[1] = 0x00; |
1416 | data[2] = 0x00; | 1444 | data[2] = 0x00; |
1417 | data[3] = len&0xFF; // (cylL) = expected length (L) | 1445 | data[3] = len&0xFF; /* (cylL) = expected length (L) */ |
1418 | data[4] = (len>>8)&0xFF; // (cylH) = expected length (H) | 1446 | data[4] = (len>>8)&0xFF; /* (cylH) = expected length (H) */ |
1419 | data[5] = 0xB0; // (device sel) = slave | 1447 | data[5] = 0xB0; /* (device sel) = slave */ |
1420 | data[6] = 0xA0; // (command) = ATA PACKET COMMAND | 1448 | data[6] = 0xA0; /* (command) = ATA PACKET COMMAND */ |
1421 | 1449 | ||
1422 | for (i=7; i<19; i++) { | 1450 | for (i=7; i<19; i++) { |
1423 | registers[i] = 0x10; | 1451 | registers[i] = 0x10; |
@@ -1466,13 +1494,15 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us) | |||
1466 | return result; | 1494 | return result; |
1467 | } | 1495 | } |
1468 | 1496 | ||
1469 | // Write the 12-byte command header. | 1497 | /* |
1470 | 1498 | * Write the 12-byte command header. | |
1471 | // If the command is BLANK then set the timer for 75 minutes. | 1499 | * |
1472 | // Otherwise set it for 10 minutes. | 1500 | * If the command is BLANK then set the timer for 75 minutes. |
1473 | 1501 | * Otherwise set it for 10 minutes. | |
1474 | // NOTE: THE 8200 DOCUMENTATION STATES THAT BLANKING A CDRW | 1502 | * |
1475 | // AT SPEED 4 IS UNRELIABLE!!! | 1503 | * NOTE: THE 8200 DOCUMENTATION STATES THAT BLANKING A CDRW |
1504 | * AT SPEED 4 IS UNRELIABLE!!! | ||
1505 | */ | ||
1476 | 1506 | ||
1477 | if ( (result = usbat_write_block(us, | 1507 | if ( (result = usbat_write_block(us, |
1478 | USBAT_ATA, srb->cmnd, 12, | 1508 | USBAT_ATA, srb->cmnd, 12, |
@@ -1481,19 +1511,18 @@ static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us) | |||
1481 | return result; | 1511 | return result; |
1482 | } | 1512 | } |
1483 | 1513 | ||
1484 | // If there is response data to be read in | 1514 | /* If there is response data to be read in then do it here. */ |
1485 | // then do it here. | ||
1486 | 1515 | ||
1487 | if (len != 0 && (srb->sc_data_direction == DMA_FROM_DEVICE)) { | 1516 | if (len != 0 && (srb->sc_data_direction == DMA_FROM_DEVICE)) { |
1488 | 1517 | ||
1489 | // How many bytes to read in? Check cylL register | 1518 | /* How many bytes to read in? Check cylL register */ |
1490 | 1519 | ||
1491 | if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != | 1520 | if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != |
1492 | USB_STOR_XFER_GOOD) { | 1521 | USB_STOR_XFER_GOOD) { |
1493 | return USB_STOR_TRANSPORT_ERROR; | 1522 | return USB_STOR_TRANSPORT_ERROR; |
1494 | } | 1523 | } |
1495 | 1524 | ||
1496 | if (len > 0xFF) { // need to read cylH also | 1525 | if (len > 0xFF) { /* need to read cylH also */ |
1497 | len = *status; | 1526 | len = *status; |
1498 | if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_HI, status) != | 1527 | if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_HI, status) != |
1499 | USB_STOR_XFER_GOOD) { | 1528 | USB_STOR_XFER_GOOD) { |
@@ -1556,13 +1585,16 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) | |||
1556 | if (rc != USB_STOR_TRANSPORT_GOOD) | 1585 | if (rc != USB_STOR_TRANSPORT_GOOD) |
1557 | return rc; | 1586 | return rc; |
1558 | 1587 | ||
1559 | info->ssize = 0x200; // hard coded 512 byte sectors as per ATA spec | 1588 | /* hard coded 512 byte sectors as per ATA spec */ |
1589 | info->ssize = 0x200; | ||
1560 | US_DEBUGP("usbat_flash_transport: READ_CAPACITY: %ld sectors, %ld bytes per sector\n", | 1590 | US_DEBUGP("usbat_flash_transport: READ_CAPACITY: %ld sectors, %ld bytes per sector\n", |
1561 | info->sectors, info->ssize); | 1591 | info->sectors, info->ssize); |
1562 | 1592 | ||
1563 | // build the reply | 1593 | /* |
1564 | // note: must return the sector number of the last sector, | 1594 | * build the reply |
1565 | // *not* the total number of sectors | 1595 | * note: must return the sector number of the last sector, |
1596 | * *not* the total number of sectors | ||
1597 | */ | ||
1566 | ((__be32 *) ptr)[0] = cpu_to_be32(info->sectors - 1); | 1598 | ((__be32 *) ptr)[0] = cpu_to_be32(info->sectors - 1); |
1567 | ((__be32 *) ptr)[1] = cpu_to_be32(info->ssize); | 1599 | ((__be32 *) ptr)[1] = cpu_to_be32(info->ssize); |
1568 | usb_stor_set_xfer_buf(ptr, 8, srb); | 1600 | usb_stor_set_xfer_buf(ptr, 8, srb); |
@@ -1586,7 +1618,9 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) | |||
1586 | } | 1618 | } |
1587 | 1619 | ||
1588 | if (srb->cmnd[0] == READ_12) { | 1620 | if (srb->cmnd[0] == READ_12) { |
1589 | // I don't think we'll ever see a READ_12 but support it anyway... | 1621 | /* |
1622 | * I don't think we'll ever see a READ_12 but support it anyway | ||
1623 | */ | ||
1590 | block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | | 1624 | block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | |
1591 | ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); | 1625 | ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); |
1592 | 1626 | ||
@@ -1608,7 +1642,9 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) | |||
1608 | } | 1642 | } |
1609 | 1643 | ||
1610 | if (srb->cmnd[0] == WRITE_12) { | 1644 | if (srb->cmnd[0] == WRITE_12) { |
1611 | // I don't think we'll ever see a WRITE_12 but support it anyway... | 1645 | /* |
1646 | * I don't think we'll ever see a WRITE_12 but support it anyway | ||
1647 | */ | ||
1612 | block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | | 1648 | block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | |
1613 | ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); | 1649 | ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); |
1614 | 1650 | ||
@@ -1645,8 +1681,10 @@ static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) | |||
1645 | } | 1681 | } |
1646 | 1682 | ||
1647 | if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) { | 1683 | if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) { |
1648 | // sure. whatever. not like we can stop the user from popping | 1684 | /* |
1649 | // the media out of the device (no locking doors, etc) | 1685 | * sure. whatever. not like we can stop the user from popping |
1686 | * the media out of the device (no locking doors, etc) | ||
1687 | */ | ||
1650 | return USB_STOR_TRANSPORT_GOOD; | 1688 | return USB_STOR_TRANSPORT_GOOD; |
1651 | } | 1689 | } |
1652 | 1690 | ||
diff --git a/drivers/usb/storage/shuttle_usbat.h b/drivers/usb/storage/shuttle_usbat.h index 5b8e867e2ae5..25e7d8b340b8 100644 --- a/drivers/usb/storage/shuttle_usbat.h +++ b/drivers/usb/storage/shuttle_usbat.h | |||
@@ -55,8 +55,8 @@ | |||
55 | #define USBAT_UIO_WRITE 0 | 55 | #define USBAT_UIO_WRITE 0 |
56 | 56 | ||
57 | /* Qualifier bits */ | 57 | /* Qualifier bits */ |
58 | #define USBAT_QUAL_FCQ 0x20 // full compare | 58 | #define USBAT_QUAL_FCQ 0x20 /* full compare */ |
59 | #define USBAT_QUAL_ALQ 0x10 // auto load subcount | 59 | #define USBAT_QUAL_ALQ 0x10 /* auto load subcount */ |
60 | 60 | ||
61 | /* USBAT Flash Media status types */ | 61 | /* USBAT Flash Media status types */ |
62 | #define USBAT_FLASH_MEDIA_NONE 0 | 62 | #define USBAT_FLASH_MEDIA_NONE 0 |
@@ -67,39 +67,39 @@ | |||
67 | #define USBAT_FLASH_MEDIA_CHANGED 1 | 67 | #define USBAT_FLASH_MEDIA_CHANGED 1 |
68 | 68 | ||
69 | /* USBAT ATA registers */ | 69 | /* USBAT ATA registers */ |
70 | #define USBAT_ATA_DATA 0x10 // read/write data (R/W) | 70 | #define USBAT_ATA_DATA 0x10 /* read/write data (R/W) */ |
71 | #define USBAT_ATA_FEATURES 0x11 // set features (W) | 71 | #define USBAT_ATA_FEATURES 0x11 /* set features (W) */ |
72 | #define USBAT_ATA_ERROR 0x11 // error (R) | 72 | #define USBAT_ATA_ERROR 0x11 /* error (R) */ |
73 | #define USBAT_ATA_SECCNT 0x12 // sector count (R/W) | 73 | #define USBAT_ATA_SECCNT 0x12 /* sector count (R/W) */ |
74 | #define USBAT_ATA_SECNUM 0x13 // sector number (R/W) | 74 | #define USBAT_ATA_SECNUM 0x13 /* sector number (R/W) */ |
75 | #define USBAT_ATA_LBA_ME 0x14 // cylinder low (R/W) | 75 | #define USBAT_ATA_LBA_ME 0x14 /* cylinder low (R/W) */ |
76 | #define USBAT_ATA_LBA_HI 0x15 // cylinder high (R/W) | 76 | #define USBAT_ATA_LBA_HI 0x15 /* cylinder high (R/W) */ |
77 | #define USBAT_ATA_DEVICE 0x16 // head/device selection (R/W) | 77 | #define USBAT_ATA_DEVICE 0x16 /* head/device selection (R/W) */ |
78 | #define USBAT_ATA_STATUS 0x17 // device status (R) | 78 | #define USBAT_ATA_STATUS 0x17 /* device status (R) */ |
79 | #define USBAT_ATA_CMD 0x17 // device command (W) | 79 | #define USBAT_ATA_CMD 0x17 /* device command (W) */ |
80 | #define USBAT_ATA_ALTSTATUS 0x0E // status (no clear IRQ) (R) | 80 | #define USBAT_ATA_ALTSTATUS 0x0E /* status (no clear IRQ) (R) */ |
81 | 81 | ||
82 | /* USBAT User I/O Data registers */ | 82 | /* USBAT User I/O Data registers */ |
83 | #define USBAT_UIO_EPAD 0x80 // Enable Peripheral Control Signals | 83 | #define USBAT_UIO_EPAD 0x80 /* Enable Peripheral Control Signals */ |
84 | #define USBAT_UIO_CDT 0x40 // Card Detect (Read Only) | 84 | #define USBAT_UIO_CDT 0x40 /* Card Detect (Read Only) */ |
85 | // CDT = ACKD & !UI1 & !UI0 | 85 | /* CDT = ACKD & !UI1 & !UI0 */ |
86 | #define USBAT_UIO_1 0x20 // I/O 1 | 86 | #define USBAT_UIO_1 0x20 /* I/O 1 */ |
87 | #define USBAT_UIO_0 0x10 // I/O 0 | 87 | #define USBAT_UIO_0 0x10 /* I/O 0 */ |
88 | #define USBAT_UIO_EPP_ATA 0x08 // 1=EPP mode, 0=ATA mode | 88 | #define USBAT_UIO_EPP_ATA 0x08 /* 1=EPP mode, 0=ATA mode */ |
89 | #define USBAT_UIO_UI1 0x04 // Input 1 | 89 | #define USBAT_UIO_UI1 0x04 /* Input 1 */ |
90 | #define USBAT_UIO_UI0 0x02 // Input 0 | 90 | #define USBAT_UIO_UI0 0x02 /* Input 0 */ |
91 | #define USBAT_UIO_INTR_ACK 0x01 // Interrupt (ATA & ISA)/Acknowledge (EPP) | 91 | #define USBAT_UIO_INTR_ACK 0x01 /* Interrupt (ATA/ISA)/Acknowledge (EPP) */ |
92 | 92 | ||
93 | /* USBAT User I/O Enable registers */ | 93 | /* USBAT User I/O Enable registers */ |
94 | #define USBAT_UIO_DRVRST 0x80 // Reset Peripheral | 94 | #define USBAT_UIO_DRVRST 0x80 /* Reset Peripheral */ |
95 | #define USBAT_UIO_ACKD 0x40 // Enable Card Detect | 95 | #define USBAT_UIO_ACKD 0x40 /* Enable Card Detect */ |
96 | #define USBAT_UIO_OE1 0x20 // I/O 1 set=output/clr=input | 96 | #define USBAT_UIO_OE1 0x20 /* I/O 1 set=output/clr=input */ |
97 | // If ACKD=1, set OE1 to 1 also. | 97 | /* If ACKD=1, set OE1 to 1 also. */ |
98 | #define USBAT_UIO_OE0 0x10 // I/O 0 set=output/clr=input | 98 | #define USBAT_UIO_OE0 0x10 /* I/O 0 set=output/clr=input */ |
99 | #define USBAT_UIO_ADPRST 0x01 // Reset SCM chip | 99 | #define USBAT_UIO_ADPRST 0x01 /* Reset SCM chip */ |
100 | 100 | ||
101 | /* USBAT Features */ | 101 | /* USBAT Features */ |
102 | #define USBAT_FEAT_ETEN 0x80 // External trigger enable | 102 | #define USBAT_FEAT_ETEN 0x80 /* External trigger enable */ |
103 | #define USBAT_FEAT_U1 0x08 | 103 | #define USBAT_FEAT_U1 0x08 |
104 | #define USBAT_FEAT_U0 0x04 | 104 | #define USBAT_FEAT_U0 0x04 |
105 | #define USBAT_FEAT_ET1 0x02 | 105 | #define USBAT_FEAT_ET1 0x02 |
@@ -112,12 +112,12 @@ struct usbat_info { | |||
112 | int devicetype; | 112 | int devicetype; |
113 | 113 | ||
114 | /* Used for Flash readers only */ | 114 | /* Used for Flash readers only */ |
115 | unsigned long sectors; // total sector count | 115 | unsigned long sectors; /* total sector count */ |
116 | unsigned long ssize; // sector size in bytes | 116 | unsigned long ssize; /* sector size in bytes */ |
117 | 117 | ||
118 | unsigned char sense_key; | 118 | unsigned char sense_key; |
119 | unsigned long sense_asc; // additional sense code | 119 | unsigned long sense_asc; /* additional sense code */ |
120 | unsigned long sense_ascq; // additional sense code qualifier | 120 | unsigned long sense_ascq; /* additional sense code qualifier */ |
121 | }; | 121 | }; |
122 | 122 | ||
123 | #endif | 123 | #endif |
diff --git a/drivers/usb/storage/transport.h b/drivers/usb/storage/transport.h index 8d9e0663f8fe..0a362cc781ad 100644 --- a/drivers/usb/storage/transport.h +++ b/drivers/usb/storage/transport.h | |||
@@ -50,7 +50,7 @@ | |||
50 | #define US_PR_CB 0x01 /* Control/Bulk w/o interrupt */ | 50 | #define US_PR_CB 0x01 /* Control/Bulk w/o interrupt */ |
51 | #define US_PR_BULK 0x50 /* bulk only */ | 51 | #define US_PR_BULK 0x50 /* bulk only */ |
52 | #ifdef CONFIG_USB_STORAGE_USBAT | 52 | #ifdef CONFIG_USB_STORAGE_USBAT |
53 | #define US_PR_SCM_ATAPI 0x80 /* SCM-ATAPI bridge */ | 53 | #define US_PR_USBAT 0x80 /* SCM-ATAPI bridge */ |
54 | #endif | 54 | #endif |
55 | #ifdef CONFIG_USB_STORAGE_SDDR09 | 55 | #ifdef CONFIG_USB_STORAGE_SDDR09 |
56 | #define US_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ | 56 | #define US_PR_EUSB_SDDR09 0x81 /* SCM-SCSI bridge for SDDR-09 */ |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index b79dad1b598c..71d051d97b77 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
@@ -71,12 +71,12 @@ UNUSUAL_DEV( 0x03f0, 0x0107, 0x0200, 0x0200, | |||
71 | UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001, | 71 | UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001, |
72 | "HP", | 72 | "HP", |
73 | "CD-Writer+ 8200e", | 73 | "CD-Writer+ 8200e", |
74 | US_SC_8070, US_PR_SCM_ATAPI, init_usbat, 0), | 74 | US_SC_8070, US_PR_USBAT, init_usbat, 0), |
75 | 75 | ||
76 | UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, | 76 | UNUSUAL_DEV( 0x03f0, 0x0307, 0x0001, 0x0001, |
77 | "HP", | 77 | "HP", |
78 | "CD-Writer+ CD-4e", | 78 | "CD-Writer+ CD-4e", |
79 | US_SC_8070, US_PR_SCM_ATAPI, init_usbat, 0), | 79 | US_SC_8070, US_PR_USBAT, init_usbat, 0), |
80 | #endif | 80 | #endif |
81 | 81 | ||
82 | /* Patch submitted by Mihnea-Costin Grigore <mihnea@zulu.ro> */ | 82 | /* Patch submitted by Mihnea-Costin Grigore <mihnea@zulu.ro> */ |
@@ -333,9 +333,9 @@ UNUSUAL_DEV( 0x04fc, 0x80c2, 0x0100, 0x0100, | |||
333 | 333 | ||
334 | #ifdef CONFIG_USB_STORAGE_USBAT | 334 | #ifdef CONFIG_USB_STORAGE_USBAT |
335 | UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999, | 335 | UNUSUAL_DEV( 0x04e6, 0x1010, 0x0000, 0x9999, |
336 | "SCM", | 336 | "Shuttle/SCM", |
337 | "SCM USBAT-02", | 337 | "USBAT-02", |
338 | US_SC_SCSI, US_PR_SCM_ATAPI, init_usbat, | 338 | US_SC_SCSI, US_PR_USBAT, init_usbat, |
339 | US_FL_SINGLE_LUN), | 339 | US_FL_SINGLE_LUN), |
340 | #endif | 340 | #endif |
341 | 341 | ||
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c index f9a9bfa1aef5..5164900e40c1 100644 --- a/drivers/usb/storage/usb.c +++ b/drivers/usb/storage/usb.c | |||
@@ -555,8 +555,8 @@ static int get_transport(struct us_data *us) | |||
555 | break; | 555 | break; |
556 | 556 | ||
557 | #ifdef CONFIG_USB_STORAGE_USBAT | 557 | #ifdef CONFIG_USB_STORAGE_USBAT |
558 | case US_PR_SCM_ATAPI: | 558 | case US_PR_USBAT: |
559 | us->transport_name = "SCM/ATAPI"; | 559 | us->transport_name = "Shuttle USBAT"; |
560 | us->transport = usbat_transport; | 560 | us->transport = usbat_transport; |
561 | us->transport_reset = usb_stor_CB_reset; | 561 | us->transport_reset = usb_stor_CB_reset; |
562 | us->max_lun = 1; | 562 | us->max_lun = 1; |