1 /* Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable 2 * 3 * Current development and maintenance by: 4 * (c) 2000, 2001 Robert Baruch (autophile@starband.net) 5 * (c) 2004, 2005 Daniel Drake <dsd@gentoo.org> 6 * 7 * Developed with the assistance of: 8 * (c) 2002 Alan Stern <stern@rowland.org> 9 * 10 * Flash support based on earlier work by: 11 * (c) 2002 Thomas Kreiling <usbdev@sm04.de> 12 * 13 * Many originally ATAPI devices were slightly modified to meet the USB 14 * market by using some kind of translation from ATAPI to USB on the host, 15 * and the peripheral would translate from USB back to ATAPI. 16 * 17 * SCM Microsystems (www.scmmicro.com) makes a device, sold to OEM's only, 18 * which does the USB-to-ATAPI conversion. By obtaining the data sheet on 19 * their device under nondisclosure agreement, I have been able to write 20 * this driver for Linux. 21 * 22 * The chip used in the device can also be used for EPP and ISA translation 23 * as well. This driver is only guaranteed to work with the ATAPI 24 * translation. 25 * 26 * See the Kconfig help text for a list of devices known to be supported by 27 * this driver. 28 * 29 * This program is free software; you can redistribute it and/or modify it 30 * under the terms of the GNU General Public License as published by the 31 * Free Software Foundation; either version 2, or (at your option) any 32 * later version. 33 * 34 * This program is distributed in the hope that it will be useful, but 35 * WITHOUT ANY WARRANTY; without even the implied warranty of 36 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 37 * General Public License for more details. 38 * 39 * You should have received a copy of the GNU General Public License along 40 * with this program; if not, write to the Free Software Foundation, Inc., 41 * 675 Mass Ave, Cambridge, MA 02139, USA. 42 */ 43 44 #include <linux/errno.h> 45 #include <linux/module.h> 46 #include <linux/slab.h> 47 #include <linux/cdrom.h> 48 49 #include <scsi/scsi.h> 50 #include <scsi/scsi_cmnd.h> 51 52 #include "usb.h" 53 #include "transport.h" 54 #include "protocol.h" 55 #include "debug.h" 56 57 MODULE_DESCRIPTION("Driver for SCM Microsystems (a.k.a. Shuttle) USB-ATAPI cable"); 58 MODULE_AUTHOR("Daniel Drake <dsd@gentoo.org>, Robert Baruch <autophile@starband.net>"); 59 MODULE_LICENSE("GPL"); 60 61 /* Supported device types */ 62 #define USBAT_DEV_HP8200 0x01 63 #define USBAT_DEV_FLASH 0x02 64 65 #define USBAT_EPP_PORT 0x10 66 #define USBAT_EPP_REGISTER 0x30 67 #define USBAT_ATA 0x40 68 #define USBAT_ISA 0x50 69 70 /* Commands (need to be logically OR'd with an access type */ 71 #define USBAT_CMD_READ_REG 0x00 72 #define USBAT_CMD_WRITE_REG 0x01 73 #define USBAT_CMD_READ_BLOCK 0x02 74 #define USBAT_CMD_WRITE_BLOCK 0x03 75 #define USBAT_CMD_COND_READ_BLOCK 0x04 76 #define USBAT_CMD_COND_WRITE_BLOCK 0x05 77 #define USBAT_CMD_WRITE_REGS 0x07 78 79 /* Commands (these don't need an access type) */ 80 #define USBAT_CMD_EXEC_CMD 0x80 81 #define USBAT_CMD_SET_FEAT 0x81 82 #define USBAT_CMD_UIO 0x82 83 84 /* Methods of accessing UIO register */ 85 #define USBAT_UIO_READ 1 86 #define USBAT_UIO_WRITE 0 87 88 /* Qualifier bits */ 89 #define USBAT_QUAL_FCQ 0x20 /* full compare */ 90 #define USBAT_QUAL_ALQ 0x10 /* auto load subcount */ 91 92 /* USBAT Flash Media status types */ 93 #define USBAT_FLASH_MEDIA_NONE 0 94 #define USBAT_FLASH_MEDIA_CF 1 95 96 /* USBAT Flash Media change types */ 97 #define USBAT_FLASH_MEDIA_SAME 0 98 #define USBAT_FLASH_MEDIA_CHANGED 1 99 100 /* USBAT ATA registers */ 101 #define USBAT_ATA_DATA 0x10 /* read/write data (R/W) */ 102 #define USBAT_ATA_FEATURES 0x11 /* set features (W) */ 103 #define USBAT_ATA_ERROR 0x11 /* error (R) */ 104 #define USBAT_ATA_SECCNT 0x12 /* sector count (R/W) */ 105 #define USBAT_ATA_SECNUM 0x13 /* sector number (R/W) */ 106 #define USBAT_ATA_LBA_ME 0x14 /* cylinder low (R/W) */ 107 #define USBAT_ATA_LBA_HI 0x15 /* cylinder high (R/W) */ 108 #define USBAT_ATA_DEVICE 0x16 /* head/device selection (R/W) */ 109 #define USBAT_ATA_STATUS 0x17 /* device status (R) */ 110 #define USBAT_ATA_CMD 0x17 /* device command (W) */ 111 #define USBAT_ATA_ALTSTATUS 0x0E /* status (no clear IRQ) (R) */ 112 113 /* USBAT User I/O Data registers */ 114 #define USBAT_UIO_EPAD 0x80 /* Enable Peripheral Control Signals */ 115 #define USBAT_UIO_CDT 0x40 /* Card Detect (Read Only) */ 116 /* CDT = ACKD & !UI1 & !UI0 */ 117 #define USBAT_UIO_1 0x20 /* I/O 1 */ 118 #define USBAT_UIO_0 0x10 /* I/O 0 */ 119 #define USBAT_UIO_EPP_ATA 0x08 /* 1=EPP mode, 0=ATA mode */ 120 #define USBAT_UIO_UI1 0x04 /* Input 1 */ 121 #define USBAT_UIO_UI0 0x02 /* Input 0 */ 122 #define USBAT_UIO_INTR_ACK 0x01 /* Interrupt (ATA/ISA)/Acknowledge (EPP) */ 123 124 /* USBAT User I/O Enable registers */ 125 #define USBAT_UIO_DRVRST 0x80 /* Reset Peripheral */ 126 #define USBAT_UIO_ACKD 0x40 /* Enable Card Detect */ 127 #define USBAT_UIO_OE1 0x20 /* I/O 1 set=output/clr=input */ 128 /* If ACKD=1, set OE1 to 1 also. */ 129 #define USBAT_UIO_OE0 0x10 /* I/O 0 set=output/clr=input */ 130 #define USBAT_UIO_ADPRST 0x01 /* Reset SCM chip */ 131 132 /* USBAT Features */ 133 #define USBAT_FEAT_ETEN 0x80 /* External trigger enable */ 134 #define USBAT_FEAT_U1 0x08 135 #define USBAT_FEAT_U0 0x04 136 #define USBAT_FEAT_ET1 0x02 137 #define USBAT_FEAT_ET2 0x01 138 139 struct usbat_info { 140 int devicetype; 141 142 /* Used for Flash readers only */ 143 unsigned long sectors; /* total sector count */ 144 unsigned long ssize; /* sector size in bytes */ 145 146 unsigned char sense_key; 147 unsigned long sense_asc; /* additional sense code */ 148 unsigned long sense_ascq; /* additional sense code qualifier */ 149 }; 150 151 #define short_pack(LSB,MSB) ( ((u16)(LSB)) | ( ((u16)(MSB))<<8 ) ) 152 #define LSB_of(s) ((s)&0xFF) 153 #define MSB_of(s) ((s)>>8) 154 155 static int transferred = 0; 156 157 static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us); 158 static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us); 159 160 static int init_usbat_cd(struct us_data *us); 161 static int init_usbat_flash(struct us_data *us); 162 163 164 /* 165 * The table of devices 166 */ 167 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \ 168 vendorName, productName, useProtocol, useTransport, \ 169 initFunction, flags) \ 170 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \ 171 .driver_info = (flags)|(USB_US_TYPE_STOR<<24) } 172 173 struct usb_device_id usbat_usb_ids[] = { 174 # include "unusual_usbat.h" 175 { } /* Terminating entry */ 176 }; 177 MODULE_DEVICE_TABLE(usb, usbat_usb_ids); 178 179 #undef UNUSUAL_DEV 180 181 /* 182 * The flags table 183 */ 184 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \ 185 vendor_name, product_name, use_protocol, use_transport, \ 186 init_function, Flags) \ 187 { \ 188 .vendorName = vendor_name, \ 189 .productName = product_name, \ 190 .useProtocol = use_protocol, \ 191 .useTransport = use_transport, \ 192 .initFunction = init_function, \ 193 } 194 195 static struct us_unusual_dev usbat_unusual_dev_list[] = { 196 # include "unusual_usbat.h" 197 { } /* Terminating entry */ 198 }; 199 200 #undef UNUSUAL_DEV 201 202 /* 203 * Convenience function to produce an ATA read/write sectors command 204 * Use cmd=0x20 for read, cmd=0x30 for write 205 */ 206 static void usbat_pack_ata_sector_cmd(unsigned char *buf, 207 unsigned char thistime, 208 u32 sector, unsigned char cmd) 209 { 210 buf[0] = 0; 211 buf[1] = thistime; 212 buf[2] = sector & 0xFF; 213 buf[3] = (sector >> 8) & 0xFF; 214 buf[4] = (sector >> 16) & 0xFF; 215 buf[5] = 0xE0 | ((sector >> 24) & 0x0F); 216 buf[6] = cmd; 217 } 218 219 /* 220 * Convenience function to get the device type (flash or hp8200) 221 */ 222 static int usbat_get_device_type(struct us_data *us) 223 { 224 return ((struct usbat_info*)us->extra)->devicetype; 225 } 226 227 /* 228 * Read a register from the device 229 */ 230 static int usbat_read(struct us_data *us, 231 unsigned char access, 232 unsigned char reg, 233 unsigned char *content) 234 { 235 return usb_stor_ctrl_transfer(us, 236 us->recv_ctrl_pipe, 237 access | USBAT_CMD_READ_REG, 238 0xC0, 239 (u16)reg, 240 0, 241 content, 242 1); 243 } 244 245 /* 246 * Write to a register on the device 247 */ 248 static int usbat_write(struct us_data *us, 249 unsigned char access, 250 unsigned char reg, 251 unsigned char content) 252 { 253 return usb_stor_ctrl_transfer(us, 254 us->send_ctrl_pipe, 255 access | USBAT_CMD_WRITE_REG, 256 0x40, 257 short_pack(reg, content), 258 0, 259 NULL, 260 0); 261 } 262 263 /* 264 * Convenience function to perform a bulk read 265 */ 266 static int usbat_bulk_read(struct us_data *us, 267 void* buf, 268 unsigned int len, 269 int use_sg) 270 { 271 if (len == 0) 272 return USB_STOR_XFER_GOOD; 273 274 US_DEBUGP("usbat_bulk_read: len = %d\n", len); 275 return usb_stor_bulk_transfer_sg(us, us->recv_bulk_pipe, buf, len, use_sg, NULL); 276 } 277 278 /* 279 * Convenience function to perform a bulk write 280 */ 281 static int usbat_bulk_write(struct us_data *us, 282 void* buf, 283 unsigned int len, 284 int use_sg) 285 { 286 if (len == 0) 287 return USB_STOR_XFER_GOOD; 288 289 US_DEBUGP("usbat_bulk_write: len = %d\n", len); 290 return usb_stor_bulk_transfer_sg(us, us->send_bulk_pipe, buf, len, use_sg, NULL); 291 } 292 293 /* 294 * Some USBAT-specific commands can only be executed over a command transport 295 * This transport allows one (len=8) or two (len=16) vendor-specific commands 296 * to be executed. 297 */ 298 static int usbat_execute_command(struct us_data *us, 299 unsigned char *commands, 300 unsigned int len) 301 { 302 return usb_stor_ctrl_transfer(us, us->send_ctrl_pipe, 303 USBAT_CMD_EXEC_CMD, 0x40, 0, 0, 304 commands, len); 305 } 306 307 /* 308 * Read the status register 309 */ 310 static int usbat_get_status(struct us_data *us, unsigned char *status) 311 { 312 int rc; 313 rc = usbat_read(us, USBAT_ATA, USBAT_ATA_STATUS, status); 314 315 US_DEBUGP("usbat_get_status: 0x%02X\n", (unsigned short) (*status)); 316 return rc; 317 } 318 319 /* 320 * Check the device status 321 */ 322 static int usbat_check_status(struct us_data *us) 323 { 324 unsigned char *reply = us->iobuf; 325 int rc; 326 327 rc = usbat_get_status(us, reply); 328 if (rc != USB_STOR_XFER_GOOD) 329 return USB_STOR_TRANSPORT_FAILED; 330 331 /* error/check condition (0x51 is ok) */ 332 if (*reply & 0x01 && *reply != 0x51) 333 return USB_STOR_TRANSPORT_FAILED; 334 335 /* device fault */ 336 if (*reply & 0x20) 337 return USB_STOR_TRANSPORT_FAILED; 338 339 return USB_STOR_TRANSPORT_GOOD; 340 } 341 342 /* 343 * Stores critical information in internal registers in prepartion for the execution 344 * of a conditional usbat_read_blocks or usbat_write_blocks call. 345 */ 346 static int usbat_set_shuttle_features(struct us_data *us, 347 unsigned char external_trigger, 348 unsigned char epp_control, 349 unsigned char mask_byte, 350 unsigned char test_pattern, 351 unsigned char subcountH, 352 unsigned char subcountL) 353 { 354 unsigned char *command = us->iobuf; 355 356 command[0] = 0x40; 357 command[1] = USBAT_CMD_SET_FEAT; 358 359 /* 360 * The only bit relevant to ATA access is bit 6 361 * which defines 8 bit data access (set) or 16 bit (unset) 362 */ 363 command[2] = epp_control; 364 365 /* 366 * If FCQ is set in the qualifier (defined in R/W cmd), then bits U0, U1, 367 * ET1 and ET2 define an external event to be checked for on event of a 368 * _read_blocks or _write_blocks operation. The read/write will not take 369 * place unless the defined trigger signal is active. 370 */ 371 command[3] = external_trigger; 372 373 /* 374 * The resultant byte of the mask operation (see mask_byte) is compared for 375 * equivalence with this test pattern. If equal, the read/write will take 376 * place. 377 */ 378 command[4] = test_pattern; 379 380 /* 381 * This value is logically ANDed with the status register field specified 382 * in the read/write command. 383 */ 384 command[5] = mask_byte; 385 386 /* 387 * If ALQ is set in the qualifier, this field contains the address of the 388 * registers where the byte count should be read for transferring the data. 389 * If ALQ is not set, then this field contains the number of bytes to be 390 * transferred. 391 */ 392 command[6] = subcountL; 393 command[7] = subcountH; 394 395 return usbat_execute_command(us, command, 8); 396 } 397 398 /* 399 * Block, waiting for an ATA device to become not busy or to report 400 * an error condition. 401 */ 402 static int usbat_wait_not_busy(struct us_data *us, int minutes) 403 { 404 int i; 405 int result; 406 unsigned char *status = us->iobuf; 407 408 /* Synchronizing cache on a CDR could take a heck of a long time, 409 * but probably not more than 10 minutes or so. On the other hand, 410 * doing a full blank on a CDRW at speed 1 will take about 75 411 * minutes! 412 */ 413 414 for (i=0; i<1200+minutes*60; i++) { 415 416 result = usbat_get_status(us, status); 417 418 if (result!=USB_STOR_XFER_GOOD) 419 return USB_STOR_TRANSPORT_ERROR; 420 if (*status & 0x01) { /* check condition */ 421 result = usbat_read(us, USBAT_ATA, 0x10, status); 422 return USB_STOR_TRANSPORT_FAILED; 423 } 424 if (*status & 0x20) /* device fault */ 425 return USB_STOR_TRANSPORT_FAILED; 426 427 if ((*status & 0x80)==0x00) { /* not busy */ 428 US_DEBUGP("Waited not busy for %d steps\n", i); 429 return USB_STOR_TRANSPORT_GOOD; 430 } 431 432 if (i<500) 433 msleep(10); /* 5 seconds */ 434 else if (i<700) 435 msleep(50); /* 10 seconds */ 436 else if (i<1200) 437 msleep(100); /* 50 seconds */ 438 else 439 msleep(1000); /* X minutes */ 440 } 441 442 US_DEBUGP("Waited not busy for %d minutes, timing out.\n", 443 minutes); 444 return USB_STOR_TRANSPORT_FAILED; 445 } 446 447 /* 448 * Read block data from the data register 449 */ 450 static int usbat_read_block(struct us_data *us, 451 void* buf, 452 unsigned short len, 453 int use_sg) 454 { 455 int result; 456 unsigned char *command = us->iobuf; 457 458 if (!len) 459 return USB_STOR_TRANSPORT_GOOD; 460 461 command[0] = 0xC0; 462 command[1] = USBAT_ATA | USBAT_CMD_READ_BLOCK; 463 command[2] = USBAT_ATA_DATA; 464 command[3] = 0; 465 command[4] = 0; 466 command[5] = 0; 467 command[6] = LSB_of(len); 468 command[7] = MSB_of(len); 469 470 result = usbat_execute_command(us, command, 8); 471 if (result != USB_STOR_XFER_GOOD) 472 return USB_STOR_TRANSPORT_ERROR; 473 474 result = usbat_bulk_read(us, buf, len, use_sg); 475 return (result == USB_STOR_XFER_GOOD ? 476 USB_STOR_TRANSPORT_GOOD : USB_STOR_TRANSPORT_ERROR); 477 } 478 479 /* 480 * Write block data via the data register 481 */ 482 static int usbat_write_block(struct us_data *us, 483 unsigned char access, 484 void* buf, 485 unsigned short len, 486 int minutes, 487 int use_sg) 488 { 489 int result; 490 unsigned char *command = us->iobuf; 491 492 if (!len) 493 return USB_STOR_TRANSPORT_GOOD; 494 495 command[0] = 0x40; 496 command[1] = access | USBAT_CMD_WRITE_BLOCK; 497 command[2] = USBAT_ATA_DATA; 498 command[3] = 0; 499 command[4] = 0; 500 command[5] = 0; 501 command[6] = LSB_of(len); 502 command[7] = MSB_of(len); 503 504 result = usbat_execute_command(us, command, 8); 505 506 if (result != USB_STOR_XFER_GOOD) 507 return USB_STOR_TRANSPORT_ERROR; 508 509 result = usbat_bulk_write(us, buf, len, use_sg); 510 if (result != USB_STOR_XFER_GOOD) 511 return USB_STOR_TRANSPORT_ERROR; 512 513 return usbat_wait_not_busy(us, minutes); 514 } 515 516 /* 517 * Process read and write requests 518 */ 519 static int usbat_hp8200e_rw_block_test(struct us_data *us, 520 unsigned char access, 521 unsigned char *registers, 522 unsigned char *data_out, 523 unsigned short num_registers, 524 unsigned char data_reg, 525 unsigned char status_reg, 526 unsigned char timeout, 527 unsigned char qualifier, 528 int direction, 529 void *buf, 530 unsigned short len, 531 int use_sg, 532 int minutes) 533 { 534 int result; 535 unsigned int pipe = (direction == DMA_FROM_DEVICE) ? 536 us->recv_bulk_pipe : us->send_bulk_pipe; 537 538 unsigned char *command = us->iobuf; 539 int i, j; 540 int cmdlen; 541 unsigned char *data = us->iobuf; 542 unsigned char *status = us->iobuf; 543 544 BUG_ON(num_registers > US_IOBUF_SIZE/2); 545 546 for (i=0; i<20; i++) { 547 548 /* 549 * The first time we send the full command, which consists 550 * of downloading the SCSI command followed by downloading 551 * the data via a write-and-test. Any other time we only 552 * send the command to download the data -- the SCSI command 553 * is still 'active' in some sense in the device. 554 * 555 * We're only going to try sending the data 10 times. After 556 * that, we just return a failure. 557 */ 558 559 if (i==0) { 560 cmdlen = 16; 561 /* 562 * Write to multiple registers 563 * Not really sure the 0x07, 0x17, 0xfc, 0xe7 is 564 * necessary here, but that's what came out of the 565 * trace every single time. 566 */ 567 command[0] = 0x40; 568 command[1] = access | USBAT_CMD_WRITE_REGS; 569 command[2] = 0x07; 570 command[3] = 0x17; 571 command[4] = 0xFC; 572 command[5] = 0xE7; 573 command[6] = LSB_of(num_registers*2); 574 command[7] = MSB_of(num_registers*2); 575 } else 576 cmdlen = 8; 577 578 /* Conditionally read or write blocks */ 579 command[cmdlen-8] = (direction==DMA_TO_DEVICE ? 0x40 : 0xC0); 580 command[cmdlen-7] = access | 581 (direction==DMA_TO_DEVICE ? 582 USBAT_CMD_COND_WRITE_BLOCK : USBAT_CMD_COND_READ_BLOCK); 583 command[cmdlen-6] = data_reg; 584 command[cmdlen-5] = status_reg; 585 command[cmdlen-4] = timeout; 586 command[cmdlen-3] = qualifier; 587 command[cmdlen-2] = LSB_of(len); 588 command[cmdlen-1] = MSB_of(len); 589 590 result = usbat_execute_command(us, command, cmdlen); 591 592 if (result != USB_STOR_XFER_GOOD) 593 return USB_STOR_TRANSPORT_ERROR; 594 595 if (i==0) { 596 597 for (j=0; j<num_registers; j++) { 598 data[j<<1] = registers[j]; 599 data[1+(j<<1)] = data_out[j]; 600 } 601 602 result = usbat_bulk_write(us, data, num_registers*2, 0); 603 if (result != USB_STOR_XFER_GOOD) 604 return USB_STOR_TRANSPORT_ERROR; 605 606 } 607 608 result = usb_stor_bulk_transfer_sg(us, 609 pipe, buf, len, use_sg, NULL); 610 611 /* 612 * If we get a stall on the bulk download, we'll retry 613 * the bulk download -- but not the SCSI command because 614 * in some sense the SCSI command is still 'active' and 615 * waiting for the data. Don't ask me why this should be; 616 * I'm only following what the Windoze driver did. 617 * 618 * Note that a stall for the test-and-read/write command means 619 * that the test failed. In this case we're testing to make 620 * sure that the device is error-free 621 * (i.e. bit 0 -- CHK -- of status is 0). The most likely 622 * hypothesis is that the USBAT chip somehow knows what 623 * the device will accept, but doesn't give the device any 624 * data until all data is received. Thus, the device would 625 * still be waiting for the first byte of data if a stall 626 * occurs, even if the stall implies that some data was 627 * transferred. 628 */ 629 630 if (result == USB_STOR_XFER_SHORT || 631 result == USB_STOR_XFER_STALLED) { 632 633 /* 634 * If we're reading and we stalled, then clear 635 * the bulk output pipe only the first time. 636 */ 637 638 if (direction==DMA_FROM_DEVICE && i==0) { 639 if (usb_stor_clear_halt(us, 640 us->send_bulk_pipe) < 0) 641 return USB_STOR_TRANSPORT_ERROR; 642 } 643 644 /* 645 * Read status: is the device angry, or just busy? 646 */ 647 648 result = usbat_read(us, USBAT_ATA, 649 direction==DMA_TO_DEVICE ? 650 USBAT_ATA_STATUS : USBAT_ATA_ALTSTATUS, 651 status); 652 653 if (result!=USB_STOR_XFER_GOOD) 654 return USB_STOR_TRANSPORT_ERROR; 655 if (*status & 0x01) /* check condition */ 656 return USB_STOR_TRANSPORT_FAILED; 657 if (*status & 0x20) /* device fault */ 658 return USB_STOR_TRANSPORT_FAILED; 659 660 US_DEBUGP("Redoing %s\n", 661 direction==DMA_TO_DEVICE ? "write" : "read"); 662 663 } else if (result != USB_STOR_XFER_GOOD) 664 return USB_STOR_TRANSPORT_ERROR; 665 else 666 return usbat_wait_not_busy(us, minutes); 667 668 } 669 670 US_DEBUGP("Bummer! %s bulk data 20 times failed.\n", 671 direction==DMA_TO_DEVICE ? "Writing" : "Reading"); 672 673 return USB_STOR_TRANSPORT_FAILED; 674 } 675 676 /* 677 * Write to multiple registers: 678 * Allows us to write specific data to any registers. The data to be written 679 * gets packed in this sequence: reg0, data0, reg1, data1, ..., regN, dataN 680 * which gets sent through bulk out. 681 * Not designed for large transfers of data! 682 */ 683 static int usbat_multiple_write(struct us_data *us, 684 unsigned char *registers, 685 unsigned char *data_out, 686 unsigned short num_registers) 687 { 688 int i, result; 689 unsigned char *data = us->iobuf; 690 unsigned char *command = us->iobuf; 691 692 BUG_ON(num_registers > US_IOBUF_SIZE/2); 693 694 /* Write to multiple registers, ATA access */ 695 command[0] = 0x40; 696 command[1] = USBAT_ATA | USBAT_CMD_WRITE_REGS; 697 698 /* No relevance */ 699 command[2] = 0; 700 command[3] = 0; 701 command[4] = 0; 702 command[5] = 0; 703 704 /* Number of bytes to be transferred (incl. addresses and data) */ 705 command[6] = LSB_of(num_registers*2); 706 command[7] = MSB_of(num_registers*2); 707 708 /* The setup command */ 709 result = usbat_execute_command(us, command, 8); 710 if (result != USB_STOR_XFER_GOOD) 711 return USB_STOR_TRANSPORT_ERROR; 712 713 /* Create the reg/data, reg/data sequence */ 714 for (i=0; i<num_registers; i++) { 715 data[i<<1] = registers[i]; 716 data[1+(i<<1)] = data_out[i]; 717 } 718 719 /* Send the data */ 720 result = usbat_bulk_write(us, data, num_registers*2, 0); 721 if (result != USB_STOR_XFER_GOOD) 722 return USB_STOR_TRANSPORT_ERROR; 723 724 if (usbat_get_device_type(us) == USBAT_DEV_HP8200) 725 return usbat_wait_not_busy(us, 0); 726 else 727 return USB_STOR_TRANSPORT_GOOD; 728 } 729 730 /* 731 * Conditionally read blocks from device: 732 * Allows us to read blocks from a specific data register, based upon the 733 * condition that a status register can be successfully masked with a status 734 * qualifier. If this condition is not initially met, the read will wait 735 * up until a maximum amount of time has elapsed, as specified by timeout. 736 * The read will start when the condition is met, otherwise the command aborts. 737 * 738 * The qualifier defined here is not the value that is masked, it defines 739 * conditions for the write to take place. The actual masked qualifier (and 740 * other related details) are defined beforehand with _set_shuttle_features(). 741 */ 742 static int usbat_read_blocks(struct us_data *us, 743 void* buffer, 744 int len, 745 int use_sg) 746 { 747 int result; 748 unsigned char *command = us->iobuf; 749 750 command[0] = 0xC0; 751 command[1] = USBAT_ATA | USBAT_CMD_COND_READ_BLOCK; 752 command[2] = USBAT_ATA_DATA; 753 command[3] = USBAT_ATA_STATUS; 754 command[4] = 0xFD; /* Timeout (ms); */ 755 command[5] = USBAT_QUAL_FCQ; 756 command[6] = LSB_of(len); 757 command[7] = MSB_of(len); 758 759 /* Multiple block read setup command */ 760 result = usbat_execute_command(us, command, 8); 761 if (result != USB_STOR_XFER_GOOD) 762 return USB_STOR_TRANSPORT_FAILED; 763 764 /* Read the blocks we just asked for */ 765 result = usbat_bulk_read(us, buffer, len, use_sg); 766 if (result != USB_STOR_XFER_GOOD) 767 return USB_STOR_TRANSPORT_FAILED; 768 769 return USB_STOR_TRANSPORT_GOOD; 770 } 771 772 /* 773 * Conditionally write blocks to device: 774 * Allows us to write blocks to a specific data register, based upon the 775 * condition that a status register can be successfully masked with a status 776 * qualifier. If this condition is not initially met, the write will wait 777 * up until a maximum amount of time has elapsed, as specified by timeout. 778 * The read will start when the condition is met, otherwise the command aborts. 779 * 780 * The qualifier defined here is not the value that is masked, it defines 781 * conditions for the write to take place. The actual masked qualifier (and 782 * other related details) are defined beforehand with _set_shuttle_features(). 783 */ 784 static int usbat_write_blocks(struct us_data *us, 785 void* buffer, 786 int len, 787 int use_sg) 788 { 789 int result; 790 unsigned char *command = us->iobuf; 791 792 command[0] = 0x40; 793 command[1] = USBAT_ATA | USBAT_CMD_COND_WRITE_BLOCK; 794 command[2] = USBAT_ATA_DATA; 795 command[3] = USBAT_ATA_STATUS; 796 command[4] = 0xFD; /* Timeout (ms) */ 797 command[5] = USBAT_QUAL_FCQ; 798 command[6] = LSB_of(len); 799 command[7] = MSB_of(len); 800 801 /* Multiple block write setup command */ 802 result = usbat_execute_command(us, command, 8); 803 if (result != USB_STOR_XFER_GOOD) 804 return USB_STOR_TRANSPORT_FAILED; 805 806 /* Write the data */ 807 result = usbat_bulk_write(us, buffer, len, use_sg); 808 if (result != USB_STOR_XFER_GOOD) 809 return USB_STOR_TRANSPORT_FAILED; 810 811 return USB_STOR_TRANSPORT_GOOD; 812 } 813 814 /* 815 * Read the User IO register 816 */ 817 static int usbat_read_user_io(struct us_data *us, unsigned char *data_flags) 818 { 819 int result; 820 821 result = usb_stor_ctrl_transfer(us, 822 us->recv_ctrl_pipe, 823 USBAT_CMD_UIO, 824 0xC0, 825 0, 826 0, 827 data_flags, 828 USBAT_UIO_READ); 829 830 US_DEBUGP("usbat_read_user_io: UIO register reads %02X\n", (unsigned short) (*data_flags)); 831 832 return result; 833 } 834 835 /* 836 * Write to the User IO register 837 */ 838 static int usbat_write_user_io(struct us_data *us, 839 unsigned char enable_flags, 840 unsigned char data_flags) 841 { 842 return usb_stor_ctrl_transfer(us, 843 us->send_ctrl_pipe, 844 USBAT_CMD_UIO, 845 0x40, 846 short_pack(enable_flags, data_flags), 847 0, 848 NULL, 849 USBAT_UIO_WRITE); 850 } 851 852 /* 853 * Reset the device 854 * Often needed on media change. 855 */ 856 static int usbat_device_reset(struct us_data *us) 857 { 858 int rc; 859 860 /* 861 * Reset peripheral, enable peripheral control signals 862 * (bring reset signal up) 863 */ 864 rc = usbat_write_user_io(us, 865 USBAT_UIO_DRVRST | USBAT_UIO_OE1 | USBAT_UIO_OE0, 866 USBAT_UIO_EPAD | USBAT_UIO_1); 867 if (rc != USB_STOR_XFER_GOOD) 868 return USB_STOR_TRANSPORT_ERROR; 869 870 /* 871 * Enable peripheral control signals 872 * (bring reset signal down) 873 */ 874 rc = usbat_write_user_io(us, 875 USBAT_UIO_OE1 | USBAT_UIO_OE0, 876 USBAT_UIO_EPAD | USBAT_UIO_1); 877 if (rc != USB_STOR_XFER_GOOD) 878 return USB_STOR_TRANSPORT_ERROR; 879 880 return USB_STOR_TRANSPORT_GOOD; 881 } 882 883 /* 884 * Enable card detect 885 */ 886 static int usbat_device_enable_cdt(struct us_data *us) 887 { 888 int rc; 889 890 /* Enable peripheral control signals and card detect */ 891 rc = usbat_write_user_io(us, 892 USBAT_UIO_ACKD | USBAT_UIO_OE1 | USBAT_UIO_OE0, 893 USBAT_UIO_EPAD | USBAT_UIO_1); 894 if (rc != USB_STOR_XFER_GOOD) 895 return USB_STOR_TRANSPORT_ERROR; 896 897 return USB_STOR_TRANSPORT_GOOD; 898 } 899 900 /* 901 * Determine if media is present. 902 */ 903 static int usbat_flash_check_media_present(unsigned char *uio) 904 { 905 if (*uio & USBAT_UIO_UI0) { 906 US_DEBUGP("usbat_flash_check_media_present: no media detected\n"); 907 return USBAT_FLASH_MEDIA_NONE; 908 } 909 910 return USBAT_FLASH_MEDIA_CF; 911 } 912 913 /* 914 * Determine if media has changed since last operation 915 */ 916 static int usbat_flash_check_media_changed(unsigned char *uio) 917 { 918 if (*uio & USBAT_UIO_0) { 919 US_DEBUGP("usbat_flash_check_media_changed: media change detected\n"); 920 return USBAT_FLASH_MEDIA_CHANGED; 921 } 922 923 return USBAT_FLASH_MEDIA_SAME; 924 } 925 926 /* 927 * Check for media change / no media and handle the situation appropriately 928 */ 929 static int usbat_flash_check_media(struct us_data *us, 930 struct usbat_info *info) 931 { 932 int rc; 933 unsigned char *uio = us->iobuf; 934 935 rc = usbat_read_user_io(us, uio); 936 if (rc != USB_STOR_XFER_GOOD) 937 return USB_STOR_TRANSPORT_ERROR; 938 939 /* Check for media existence */ 940 rc = usbat_flash_check_media_present(uio); 941 if (rc == USBAT_FLASH_MEDIA_NONE) { 942 info->sense_key = 0x02; 943 info->sense_asc = 0x3A; 944 info->sense_ascq = 0x00; 945 return USB_STOR_TRANSPORT_FAILED; 946 } 947 948 /* Check for media change */ 949 rc = usbat_flash_check_media_changed(uio); 950 if (rc == USBAT_FLASH_MEDIA_CHANGED) { 951 952 /* Reset and re-enable card detect */ 953 rc = usbat_device_reset(us); 954 if (rc != USB_STOR_TRANSPORT_GOOD) 955 return rc; 956 rc = usbat_device_enable_cdt(us); 957 if (rc != USB_STOR_TRANSPORT_GOOD) 958 return rc; 959 960 msleep(50); 961 962 rc = usbat_read_user_io(us, uio); 963 if (rc != USB_STOR_XFER_GOOD) 964 return USB_STOR_TRANSPORT_ERROR; 965 966 info->sense_key = UNIT_ATTENTION; 967 info->sense_asc = 0x28; 968 info->sense_ascq = 0x00; 969 return USB_STOR_TRANSPORT_FAILED; 970 } 971 972 return USB_STOR_TRANSPORT_GOOD; 973 } 974 975 /* 976 * Determine whether we are controlling a flash-based reader/writer, 977 * or a HP8200-based CD drive. 978 * Sets transport functions as appropriate. 979 */ 980 static int usbat_identify_device(struct us_data *us, 981 struct usbat_info *info) 982 { 983 int rc; 984 unsigned char status; 985 986 if (!us || !info) 987 return USB_STOR_TRANSPORT_ERROR; 988 989 rc = usbat_device_reset(us); 990 if (rc != USB_STOR_TRANSPORT_GOOD) 991 return rc; 992 msleep(500); 993 994 /* 995 * In attempt to distinguish between HP CDRW's and Flash readers, we now 996 * execute the IDENTIFY PACKET DEVICE command. On ATA devices (i.e. flash 997 * readers), this command should fail with error. On ATAPI devices (i.e. 998 * CDROM drives), it should succeed. 999 */ 1000 rc = usbat_write(us, USBAT_ATA, USBAT_ATA_CMD, 0xA1); 1001 if (rc != USB_STOR_XFER_GOOD) 1002 return USB_STOR_TRANSPORT_ERROR; 1003 1004 rc = usbat_get_status(us, &status); 1005 if (rc != USB_STOR_XFER_GOOD) 1006 return USB_STOR_TRANSPORT_ERROR; 1007 1008 /* Check for error bit, or if the command 'fell through' */ 1009 if (status == 0xA1 || !(status & 0x01)) { 1010 /* Device is HP 8200 */ 1011 US_DEBUGP("usbat_identify_device: Detected HP8200 CDRW\n"); 1012 info->devicetype = USBAT_DEV_HP8200; 1013 } else { 1014 /* Device is a CompactFlash reader/writer */ 1015 US_DEBUGP("usbat_identify_device: Detected Flash reader/writer\n"); 1016 info->devicetype = USBAT_DEV_FLASH; 1017 } 1018 1019 return USB_STOR_TRANSPORT_GOOD; 1020 } 1021 1022 /* 1023 * Set the transport function based on the device type 1024 */ 1025 static int usbat_set_transport(struct us_data *us, 1026 struct usbat_info *info, 1027 int devicetype) 1028 { 1029 1030 if (!info->devicetype) 1031 info->devicetype = devicetype; 1032 1033 if (!info->devicetype) 1034 usbat_identify_device(us, info); 1035 1036 switch (info->devicetype) { 1037 default: 1038 return USB_STOR_TRANSPORT_ERROR; 1039 1040 case USBAT_DEV_HP8200: 1041 us->transport = usbat_hp8200e_transport; 1042 break; 1043 1044 case USBAT_DEV_FLASH: 1045 us->transport = usbat_flash_transport; 1046 break; 1047 } 1048 1049 return 0; 1050 } 1051 1052 /* 1053 * Read the media capacity 1054 */ 1055 static int usbat_flash_get_sector_count(struct us_data *us, 1056 struct usbat_info *info) 1057 { 1058 unsigned char registers[3] = { 1059 USBAT_ATA_SECCNT, 1060 USBAT_ATA_DEVICE, 1061 USBAT_ATA_CMD, 1062 }; 1063 unsigned char command[3] = { 0x01, 0xA0, 0xEC }; 1064 unsigned char *reply; 1065 unsigned char status; 1066 int rc; 1067 1068 if (!us || !info) 1069 return USB_STOR_TRANSPORT_ERROR; 1070 1071 reply = kmalloc(512, GFP_NOIO); 1072 if (!reply) 1073 return USB_STOR_TRANSPORT_ERROR; 1074 1075 /* ATA command : IDENTIFY DEVICE */ 1076 rc = usbat_multiple_write(us, registers, command, 3); 1077 if (rc != USB_STOR_XFER_GOOD) { 1078 US_DEBUGP("usbat_flash_get_sector_count: Gah! identify_device failed\n"); 1079 rc = USB_STOR_TRANSPORT_ERROR; 1080 goto leave; 1081 } 1082 1083 /* Read device status */ 1084 if (usbat_get_status(us, &status) != USB_STOR_XFER_GOOD) { 1085 rc = USB_STOR_TRANSPORT_ERROR; 1086 goto leave; 1087 } 1088 1089 msleep(100); 1090 1091 /* Read the device identification data */ 1092 rc = usbat_read_block(us, reply, 512, 0); 1093 if (rc != USB_STOR_TRANSPORT_GOOD) 1094 goto leave; 1095 1096 info->sectors = ((u32)(reply[117]) << 24) | 1097 ((u32)(reply[116]) << 16) | 1098 ((u32)(reply[115]) << 8) | 1099 ((u32)(reply[114]) ); 1100 1101 rc = USB_STOR_TRANSPORT_GOOD; 1102 1103 leave: 1104 kfree(reply); 1105 return rc; 1106 } 1107 1108 /* 1109 * Read data from device 1110 */ 1111 static int usbat_flash_read_data(struct us_data *us, 1112 struct usbat_info *info, 1113 u32 sector, 1114 u32 sectors) 1115 { 1116 unsigned char registers[7] = { 1117 USBAT_ATA_FEATURES, 1118 USBAT_ATA_SECCNT, 1119 USBAT_ATA_SECNUM, 1120 USBAT_ATA_LBA_ME, 1121 USBAT_ATA_LBA_HI, 1122 USBAT_ATA_DEVICE, 1123 USBAT_ATA_STATUS, 1124 }; 1125 unsigned char command[7]; 1126 unsigned char *buffer; 1127 unsigned char thistime; 1128 unsigned int totallen, alloclen; 1129 int len, result; 1130 unsigned int sg_offset = 0; 1131 struct scatterlist *sg = NULL; 1132 1133 result = usbat_flash_check_media(us, info); 1134 if (result != USB_STOR_TRANSPORT_GOOD) 1135 return result; 1136 1137 /* 1138 * we're working in LBA mode. according to the ATA spec, 1139 * we can support up to 28-bit addressing. I don't know if Jumpshot 1140 * supports beyond 24-bit addressing. It's kind of hard to test 1141 * since it requires > 8GB CF card. 1142 */ 1143 1144 if (sector > 0x0FFFFFFF) 1145 return USB_STOR_TRANSPORT_ERROR; 1146 1147 totallen = sectors * info->ssize; 1148 1149 /* 1150 * Since we don't read more than 64 KB at a time, we have to create 1151 * a bounce buffer and move the data a piece at a time between the 1152 * bounce buffer and the actual transfer buffer. 1153 */ 1154 1155 alloclen = min(totallen, 65536u); 1156 buffer = kmalloc(alloclen, GFP_NOIO); 1157 if (buffer == NULL) 1158 return USB_STOR_TRANSPORT_ERROR; 1159 1160 do { 1161 /* 1162 * loop, never allocate or transfer more than 64k at once 1163 * (min(128k, 255*info->ssize) is the real limit) 1164 */ 1165 len = min(totallen, alloclen); 1166 thistime = (len / info->ssize) & 0xff; 1167 1168 /* ATA command 0x20 (READ SECTORS) */ 1169 usbat_pack_ata_sector_cmd(command, thistime, sector, 0x20); 1170 1171 /* Write/execute ATA read command */ 1172 result = usbat_multiple_write(us, registers, command, 7); 1173 if (result != USB_STOR_TRANSPORT_GOOD) 1174 goto leave; 1175 1176 /* Read the data we just requested */ 1177 result = usbat_read_blocks(us, buffer, len, 0); 1178 if (result != USB_STOR_TRANSPORT_GOOD) 1179 goto leave; 1180 1181 US_DEBUGP("usbat_flash_read_data: %d bytes\n", len); 1182 1183 /* Store the data in the transfer buffer */ 1184 usb_stor_access_xfer_buf(buffer, len, us->srb, 1185 &sg, &sg_offset, TO_XFER_BUF); 1186 1187 sector += thistime; 1188 totallen -= len; 1189 } while (totallen > 0); 1190 1191 kfree(buffer); 1192 return USB_STOR_TRANSPORT_GOOD; 1193 1194 leave: 1195 kfree(buffer); 1196 return USB_STOR_TRANSPORT_ERROR; 1197 } 1198 1199 /* 1200 * Write data to device 1201 */ 1202 static int usbat_flash_write_data(struct us_data *us, 1203 struct usbat_info *info, 1204 u32 sector, 1205 u32 sectors) 1206 { 1207 unsigned char registers[7] = { 1208 USBAT_ATA_FEATURES, 1209 USBAT_ATA_SECCNT, 1210 USBAT_ATA_SECNUM, 1211 USBAT_ATA_LBA_ME, 1212 USBAT_ATA_LBA_HI, 1213 USBAT_ATA_DEVICE, 1214 USBAT_ATA_STATUS, 1215 }; 1216 unsigned char command[7]; 1217 unsigned char *buffer; 1218 unsigned char thistime; 1219 unsigned int totallen, alloclen; 1220 int len, result; 1221 unsigned int sg_offset = 0; 1222 struct scatterlist *sg = NULL; 1223 1224 result = usbat_flash_check_media(us, info); 1225 if (result != USB_STOR_TRANSPORT_GOOD) 1226 return result; 1227 1228 /* 1229 * we're working in LBA mode. according to the ATA spec, 1230 * we can support up to 28-bit addressing. I don't know if the device 1231 * supports beyond 24-bit addressing. It's kind of hard to test 1232 * since it requires > 8GB media. 1233 */ 1234 1235 if (sector > 0x0FFFFFFF) 1236 return USB_STOR_TRANSPORT_ERROR; 1237 1238 totallen = sectors * info->ssize; 1239 1240 /* 1241 * Since we don't write more than 64 KB at a time, we have to create 1242 * a bounce buffer and move the data a piece at a time between the 1243 * bounce buffer and the actual transfer buffer. 1244 */ 1245 1246 alloclen = min(totallen, 65536u); 1247 buffer = kmalloc(alloclen, GFP_NOIO); 1248 if (buffer == NULL) 1249 return USB_STOR_TRANSPORT_ERROR; 1250 1251 do { 1252 /* 1253 * loop, never allocate or transfer more than 64k at once 1254 * (min(128k, 255*info->ssize) is the real limit) 1255 */ 1256 len = min(totallen, alloclen); 1257 thistime = (len / info->ssize) & 0xff; 1258 1259 /* Get the data from the transfer buffer */ 1260 usb_stor_access_xfer_buf(buffer, len, us->srb, 1261 &sg, &sg_offset, FROM_XFER_BUF); 1262 1263 /* ATA command 0x30 (WRITE SECTORS) */ 1264 usbat_pack_ata_sector_cmd(command, thistime, sector, 0x30); 1265 1266 /* Write/execute ATA write command */ 1267 result = usbat_multiple_write(us, registers, command, 7); 1268 if (result != USB_STOR_TRANSPORT_GOOD) 1269 goto leave; 1270 1271 /* Write the data */ 1272 result = usbat_write_blocks(us, buffer, len, 0); 1273 if (result != USB_STOR_TRANSPORT_GOOD) 1274 goto leave; 1275 1276 sector += thistime; 1277 totallen -= len; 1278 } while (totallen > 0); 1279 1280 kfree(buffer); 1281 return result; 1282 1283 leave: 1284 kfree(buffer); 1285 return USB_STOR_TRANSPORT_ERROR; 1286 } 1287 1288 /* 1289 * Squeeze a potentially huge (> 65535 byte) read10 command into 1290 * a little ( <= 65535 byte) ATAPI pipe 1291 */ 1292 static int usbat_hp8200e_handle_read10(struct us_data *us, 1293 unsigned char *registers, 1294 unsigned char *data, 1295 struct scsi_cmnd *srb) 1296 { 1297 int result = USB_STOR_TRANSPORT_GOOD; 1298 unsigned char *buffer; 1299 unsigned int len; 1300 unsigned int sector; 1301 unsigned int sg_offset = 0; 1302 struct scatterlist *sg = NULL; 1303 1304 US_DEBUGP("handle_read10: transfersize %d\n", 1305 srb->transfersize); 1306 1307 if (scsi_bufflen(srb) < 0x10000) { 1308 1309 result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, 1310 registers, data, 19, 1311 USBAT_ATA_DATA, USBAT_ATA_STATUS, 0xFD, 1312 (USBAT_QUAL_FCQ | USBAT_QUAL_ALQ), 1313 DMA_FROM_DEVICE, 1314 scsi_sglist(srb), 1315 scsi_bufflen(srb), scsi_sg_count(srb), 1); 1316 1317 return result; 1318 } 1319 1320 /* 1321 * Since we're requesting more data than we can handle in 1322 * a single read command (max is 64k-1), we will perform 1323 * multiple reads, but each read must be in multiples of 1324 * a sector. Luckily the sector size is in srb->transfersize 1325 * (see linux/drivers/scsi/sr.c). 1326 */ 1327 1328 if (data[7+0] == GPCMD_READ_CD) { 1329 len = short_pack(data[7+9], data[7+8]); 1330 len <<= 16; 1331 len |= data[7+7]; 1332 US_DEBUGP("handle_read10: GPCMD_READ_CD: len %d\n", len); 1333 srb->transfersize = scsi_bufflen(srb)/len; 1334 } 1335 1336 if (!srb->transfersize) { 1337 srb->transfersize = 2048; /* A guess */ 1338 US_DEBUGP("handle_read10: transfersize 0, forcing %d\n", 1339 srb->transfersize); 1340 } 1341 1342 /* 1343 * Since we only read in one block at a time, we have to create 1344 * a bounce buffer and move the data a piece at a time between the 1345 * bounce buffer and the actual transfer buffer. 1346 */ 1347 1348 len = (65535/srb->transfersize) * srb->transfersize; 1349 US_DEBUGP("Max read is %d bytes\n", len); 1350 len = min(len, scsi_bufflen(srb)); 1351 buffer = kmalloc(len, GFP_NOIO); 1352 if (buffer == NULL) /* bloody hell! */ 1353 return USB_STOR_TRANSPORT_FAILED; 1354 sector = short_pack(data[7+3], data[7+2]); 1355 sector <<= 16; 1356 sector |= short_pack(data[7+5], data[7+4]); 1357 transferred = 0; 1358 1359 while (transferred != scsi_bufflen(srb)) { 1360 1361 if (len > scsi_bufflen(srb) - transferred) 1362 len = scsi_bufflen(srb) - transferred; 1363 1364 data[3] = len&0xFF; /* (cylL) = expected length (L) */ 1365 data[4] = (len>>8)&0xFF; /* (cylH) = expected length (H) */ 1366 1367 /* Fix up the SCSI command sector and num sectors */ 1368 1369 data[7+2] = MSB_of(sector>>16); /* SCSI command sector */ 1370 data[7+3] = LSB_of(sector>>16); 1371 data[7+4] = MSB_of(sector&0xFFFF); 1372 data[7+5] = LSB_of(sector&0xFFFF); 1373 if (data[7+0] == GPCMD_READ_CD) 1374 data[7+6] = 0; 1375 data[7+7] = MSB_of(len / srb->transfersize); /* SCSI command */ 1376 data[7+8] = LSB_of(len / srb->transfersize); /* num sectors */ 1377 1378 result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, 1379 registers, data, 19, 1380 USBAT_ATA_DATA, USBAT_ATA_STATUS, 0xFD, 1381 (USBAT_QUAL_FCQ | USBAT_QUAL_ALQ), 1382 DMA_FROM_DEVICE, 1383 buffer, 1384 len, 0, 1); 1385 1386 if (result != USB_STOR_TRANSPORT_GOOD) 1387 break; 1388 1389 /* Store the data in the transfer buffer */ 1390 usb_stor_access_xfer_buf(buffer, len, srb, 1391 &sg, &sg_offset, TO_XFER_BUF); 1392 1393 /* Update the amount transferred and the sector number */ 1394 1395 transferred += len; 1396 sector += len / srb->transfersize; 1397 1398 } /* while transferred != scsi_bufflen(srb) */ 1399 1400 kfree(buffer); 1401 return result; 1402 } 1403 1404 static int usbat_select_and_test_registers(struct us_data *us) 1405 { 1406 int selector; 1407 unsigned char *status = us->iobuf; 1408 1409 /* try device = master, then device = slave. */ 1410 for (selector = 0xA0; selector <= 0xB0; selector += 0x10) { 1411 if (usbat_write(us, USBAT_ATA, USBAT_ATA_DEVICE, selector) != 1412 USB_STOR_XFER_GOOD) 1413 return USB_STOR_TRANSPORT_ERROR; 1414 1415 if (usbat_read(us, USBAT_ATA, USBAT_ATA_STATUS, status) != 1416 USB_STOR_XFER_GOOD) 1417 return USB_STOR_TRANSPORT_ERROR; 1418 1419 if (usbat_read(us, USBAT_ATA, USBAT_ATA_DEVICE, status) != 1420 USB_STOR_XFER_GOOD) 1421 return USB_STOR_TRANSPORT_ERROR; 1422 1423 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != 1424 USB_STOR_XFER_GOOD) 1425 return USB_STOR_TRANSPORT_ERROR; 1426 1427 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_HI, status) != 1428 USB_STOR_XFER_GOOD) 1429 return USB_STOR_TRANSPORT_ERROR; 1430 1431 if (usbat_write(us, USBAT_ATA, USBAT_ATA_LBA_ME, 0x55) != 1432 USB_STOR_XFER_GOOD) 1433 return USB_STOR_TRANSPORT_ERROR; 1434 1435 if (usbat_write(us, USBAT_ATA, USBAT_ATA_LBA_HI, 0xAA) != 1436 USB_STOR_XFER_GOOD) 1437 return USB_STOR_TRANSPORT_ERROR; 1438 1439 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != 1440 USB_STOR_XFER_GOOD) 1441 return USB_STOR_TRANSPORT_ERROR; 1442 1443 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != 1444 USB_STOR_XFER_GOOD) 1445 return USB_STOR_TRANSPORT_ERROR; 1446 } 1447 1448 return USB_STOR_TRANSPORT_GOOD; 1449 } 1450 1451 /* 1452 * Initialize the USBAT processor and the storage device 1453 */ 1454 static int init_usbat(struct us_data *us, int devicetype) 1455 { 1456 int rc; 1457 struct usbat_info *info; 1458 unsigned char subcountH = USBAT_ATA_LBA_HI; 1459 unsigned char subcountL = USBAT_ATA_LBA_ME; 1460 unsigned char *status = us->iobuf; 1461 1462 us->extra = kzalloc(sizeof(struct usbat_info), GFP_NOIO); 1463 if (!us->extra) { 1464 US_DEBUGP("init_usbat: Gah! Can't allocate storage for usbat info struct!\n"); 1465 return 1; 1466 } 1467 info = (struct usbat_info *) (us->extra); 1468 1469 /* Enable peripheral control signals */ 1470 rc = usbat_write_user_io(us, 1471 USBAT_UIO_OE1 | USBAT_UIO_OE0, 1472 USBAT_UIO_EPAD | USBAT_UIO_1); 1473 if (rc != USB_STOR_XFER_GOOD) 1474 return USB_STOR_TRANSPORT_ERROR; 1475 1476 US_DEBUGP("INIT 1\n"); 1477 1478 msleep(2000); 1479 1480 rc = usbat_read_user_io(us, status); 1481 if (rc != USB_STOR_TRANSPORT_GOOD) 1482 return rc; 1483 1484 US_DEBUGP("INIT 2\n"); 1485 1486 rc = usbat_read_user_io(us, status); 1487 if (rc != USB_STOR_XFER_GOOD) 1488 return USB_STOR_TRANSPORT_ERROR; 1489 1490 rc = usbat_read_user_io(us, status); 1491 if (rc != USB_STOR_XFER_GOOD) 1492 return USB_STOR_TRANSPORT_ERROR; 1493 1494 US_DEBUGP("INIT 3\n"); 1495 1496 rc = usbat_select_and_test_registers(us); 1497 if (rc != USB_STOR_TRANSPORT_GOOD) 1498 return rc; 1499 1500 US_DEBUGP("INIT 4\n"); 1501 1502 rc = usbat_read_user_io(us, status); 1503 if (rc != USB_STOR_XFER_GOOD) 1504 return USB_STOR_TRANSPORT_ERROR; 1505 1506 US_DEBUGP("INIT 5\n"); 1507 1508 /* Enable peripheral control signals and card detect */ 1509 rc = usbat_device_enable_cdt(us); 1510 if (rc != USB_STOR_TRANSPORT_GOOD) 1511 return rc; 1512 1513 US_DEBUGP("INIT 6\n"); 1514 1515 rc = usbat_read_user_io(us, status); 1516 if (rc != USB_STOR_XFER_GOOD) 1517 return USB_STOR_TRANSPORT_ERROR; 1518 1519 US_DEBUGP("INIT 7\n"); 1520 1521 msleep(1400); 1522 1523 rc = usbat_read_user_io(us, status); 1524 if (rc != USB_STOR_XFER_GOOD) 1525 return USB_STOR_TRANSPORT_ERROR; 1526 1527 US_DEBUGP("INIT 8\n"); 1528 1529 rc = usbat_select_and_test_registers(us); 1530 if (rc != USB_STOR_TRANSPORT_GOOD) 1531 return rc; 1532 1533 US_DEBUGP("INIT 9\n"); 1534 1535 /* At this point, we need to detect which device we are using */ 1536 if (usbat_set_transport(us, info, devicetype)) 1537 return USB_STOR_TRANSPORT_ERROR; 1538 1539 US_DEBUGP("INIT 10\n"); 1540 1541 if (usbat_get_device_type(us) == USBAT_DEV_FLASH) { 1542 subcountH = 0x02; 1543 subcountL = 0x00; 1544 } 1545 rc = usbat_set_shuttle_features(us, (USBAT_FEAT_ETEN | USBAT_FEAT_ET2 | USBAT_FEAT_ET1), 1546 0x00, 0x88, 0x08, subcountH, subcountL); 1547 if (rc != USB_STOR_XFER_GOOD) 1548 return USB_STOR_TRANSPORT_ERROR; 1549 1550 US_DEBUGP("INIT 11\n"); 1551 1552 return USB_STOR_TRANSPORT_GOOD; 1553 } 1554 1555 /* 1556 * Transport for the HP 8200e 1557 */ 1558 static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us) 1559 { 1560 int result; 1561 unsigned char *status = us->iobuf; 1562 unsigned char registers[32]; 1563 unsigned char data[32]; 1564 unsigned int len; 1565 int i; 1566 1567 len = scsi_bufflen(srb); 1568 1569 /* Send A0 (ATA PACKET COMMAND). 1570 Note: I guess we're never going to get any of the ATA 1571 commands... just ATA Packet Commands. 1572 */ 1573 1574 registers[0] = USBAT_ATA_FEATURES; 1575 registers[1] = USBAT_ATA_SECCNT; 1576 registers[2] = USBAT_ATA_SECNUM; 1577 registers[3] = USBAT_ATA_LBA_ME; 1578 registers[4] = USBAT_ATA_LBA_HI; 1579 registers[5] = USBAT_ATA_DEVICE; 1580 registers[6] = USBAT_ATA_CMD; 1581 data[0] = 0x00; 1582 data[1] = 0x00; 1583 data[2] = 0x00; 1584 data[3] = len&0xFF; /* (cylL) = expected length (L) */ 1585 data[4] = (len>>8)&0xFF; /* (cylH) = expected length (H) */ 1586 data[5] = 0xB0; /* (device sel) = slave */ 1587 data[6] = 0xA0; /* (command) = ATA PACKET COMMAND */ 1588 1589 for (i=7; i<19; i++) { 1590 registers[i] = 0x10; 1591 data[i] = (i-7 >= srb->cmd_len) ? 0 : srb->cmnd[i-7]; 1592 } 1593 1594 result = usbat_get_status(us, status); 1595 US_DEBUGP("Status = %02X\n", *status); 1596 if (result != USB_STOR_XFER_GOOD) 1597 return USB_STOR_TRANSPORT_ERROR; 1598 if (srb->cmnd[0] == TEST_UNIT_READY) 1599 transferred = 0; 1600 1601 if (srb->sc_data_direction == DMA_TO_DEVICE) { 1602 1603 result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, 1604 registers, data, 19, 1605 USBAT_ATA_DATA, USBAT_ATA_STATUS, 0xFD, 1606 (USBAT_QUAL_FCQ | USBAT_QUAL_ALQ), 1607 DMA_TO_DEVICE, 1608 scsi_sglist(srb), 1609 len, scsi_sg_count(srb), 10); 1610 1611 if (result == USB_STOR_TRANSPORT_GOOD) { 1612 transferred += len; 1613 US_DEBUGP("Wrote %08X bytes\n", transferred); 1614 } 1615 1616 return result; 1617 1618 } else if (srb->cmnd[0] == READ_10 || 1619 srb->cmnd[0] == GPCMD_READ_CD) { 1620 1621 return usbat_hp8200e_handle_read10(us, registers, data, srb); 1622 1623 } 1624 1625 if (len > 0xFFFF) { 1626 US_DEBUGP("Error: len = %08X... what do I do now?\n", 1627 len); 1628 return USB_STOR_TRANSPORT_ERROR; 1629 } 1630 1631 if ( (result = usbat_multiple_write(us, 1632 registers, data, 7)) != USB_STOR_TRANSPORT_GOOD) { 1633 return result; 1634 } 1635 1636 /* 1637 * Write the 12-byte command header. 1638 * 1639 * If the command is BLANK then set the timer for 75 minutes. 1640 * Otherwise set it for 10 minutes. 1641 * 1642 * NOTE: THE 8200 DOCUMENTATION STATES THAT BLANKING A CDRW 1643 * AT SPEED 4 IS UNRELIABLE!!! 1644 */ 1645 1646 if ((result = usbat_write_block(us, 1647 USBAT_ATA, srb->cmnd, 12, 1648 (srb->cmnd[0]==GPCMD_BLANK ? 75 : 10), 0) != 1649 USB_STOR_TRANSPORT_GOOD)) { 1650 return result; 1651 } 1652 1653 /* If there is response data to be read in then do it here. */ 1654 1655 if (len != 0 && (srb->sc_data_direction == DMA_FROM_DEVICE)) { 1656 1657 /* How many bytes to read in? Check cylL register */ 1658 1659 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != 1660 USB_STOR_XFER_GOOD) { 1661 return USB_STOR_TRANSPORT_ERROR; 1662 } 1663 1664 if (len > 0xFF) { /* need to read cylH also */ 1665 len = *status; 1666 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_HI, status) != 1667 USB_STOR_XFER_GOOD) { 1668 return USB_STOR_TRANSPORT_ERROR; 1669 } 1670 len += ((unsigned int) *status)<<8; 1671 } 1672 else 1673 len = *status; 1674 1675 1676 result = usbat_read_block(us, scsi_sglist(srb), len, 1677 scsi_sg_count(srb)); 1678 } 1679 1680 return result; 1681 } 1682 1683 /* 1684 * Transport for USBAT02-based CompactFlash and similar storage devices 1685 */ 1686 static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) 1687 { 1688 int rc; 1689 struct usbat_info *info = (struct usbat_info *) (us->extra); 1690 unsigned long block, blocks; 1691 unsigned char *ptr = us->iobuf; 1692 static unsigned char inquiry_response[36] = { 1693 0x00, 0x80, 0x00, 0x01, 0x1F, 0x00, 0x00, 0x00 1694 }; 1695 1696 if (srb->cmnd[0] == INQUIRY) { 1697 US_DEBUGP("usbat_flash_transport: INQUIRY. Returning bogus response.\n"); 1698 memcpy(ptr, inquiry_response, sizeof(inquiry_response)); 1699 fill_inquiry_response(us, ptr, 36); 1700 return USB_STOR_TRANSPORT_GOOD; 1701 } 1702 1703 if (srb->cmnd[0] == READ_CAPACITY) { 1704 rc = usbat_flash_check_media(us, info); 1705 if (rc != USB_STOR_TRANSPORT_GOOD) 1706 return rc; 1707 1708 rc = usbat_flash_get_sector_count(us, info); 1709 if (rc != USB_STOR_TRANSPORT_GOOD) 1710 return rc; 1711 1712 /* hard coded 512 byte sectors as per ATA spec */ 1713 info->ssize = 0x200; 1714 US_DEBUGP("usbat_flash_transport: READ_CAPACITY: %ld sectors, %ld bytes per sector\n", 1715 info->sectors, info->ssize); 1716 1717 /* 1718 * build the reply 1719 * note: must return the sector number of the last sector, 1720 * *not* the total number of sectors 1721 */ 1722 ((__be32 *) ptr)[0] = cpu_to_be32(info->sectors - 1); 1723 ((__be32 *) ptr)[1] = cpu_to_be32(info->ssize); 1724 usb_stor_set_xfer_buf(ptr, 8, srb); 1725 1726 return USB_STOR_TRANSPORT_GOOD; 1727 } 1728 1729 if (srb->cmnd[0] == MODE_SELECT_10) { 1730 US_DEBUGP("usbat_flash_transport: Gah! MODE_SELECT_10.\n"); 1731 return USB_STOR_TRANSPORT_ERROR; 1732 } 1733 1734 if (srb->cmnd[0] == READ_10) { 1735 block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | 1736 ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); 1737 1738 blocks = ((u32)(srb->cmnd[7]) << 8) | ((u32)(srb->cmnd[8])); 1739 1740 US_DEBUGP("usbat_flash_transport: READ_10: read block 0x%04lx count %ld\n", block, blocks); 1741 return usbat_flash_read_data(us, info, block, blocks); 1742 } 1743 1744 if (srb->cmnd[0] == READ_12) { 1745 /* 1746 * I don't think we'll ever see a READ_12 but support it anyway 1747 */ 1748 block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | 1749 ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); 1750 1751 blocks = ((u32)(srb->cmnd[6]) << 24) | ((u32)(srb->cmnd[7]) << 16) | 1752 ((u32)(srb->cmnd[8]) << 8) | ((u32)(srb->cmnd[9])); 1753 1754 US_DEBUGP("usbat_flash_transport: READ_12: read block 0x%04lx count %ld\n", block, blocks); 1755 return usbat_flash_read_data(us, info, block, blocks); 1756 } 1757 1758 if (srb->cmnd[0] == WRITE_10) { 1759 block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | 1760 ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); 1761 1762 blocks = ((u32)(srb->cmnd[7]) << 8) | ((u32)(srb->cmnd[8])); 1763 1764 US_DEBUGP("usbat_flash_transport: WRITE_10: write block 0x%04lx count %ld\n", block, blocks); 1765 return usbat_flash_write_data(us, info, block, blocks); 1766 } 1767 1768 if (srb->cmnd[0] == WRITE_12) { 1769 /* 1770 * I don't think we'll ever see a WRITE_12 but support it anyway 1771 */ 1772 block = ((u32)(srb->cmnd[2]) << 24) | ((u32)(srb->cmnd[3]) << 16) | 1773 ((u32)(srb->cmnd[4]) << 8) | ((u32)(srb->cmnd[5])); 1774 1775 blocks = ((u32)(srb->cmnd[6]) << 24) | ((u32)(srb->cmnd[7]) << 16) | 1776 ((u32)(srb->cmnd[8]) << 8) | ((u32)(srb->cmnd[9])); 1777 1778 US_DEBUGP("usbat_flash_transport: WRITE_12: write block 0x%04lx count %ld\n", block, blocks); 1779 return usbat_flash_write_data(us, info, block, blocks); 1780 } 1781 1782 1783 if (srb->cmnd[0] == TEST_UNIT_READY) { 1784 US_DEBUGP("usbat_flash_transport: TEST_UNIT_READY.\n"); 1785 1786 rc = usbat_flash_check_media(us, info); 1787 if (rc != USB_STOR_TRANSPORT_GOOD) 1788 return rc; 1789 1790 return usbat_check_status(us); 1791 } 1792 1793 if (srb->cmnd[0] == REQUEST_SENSE) { 1794 US_DEBUGP("usbat_flash_transport: REQUEST_SENSE.\n"); 1795 1796 memset(ptr, 0, 18); 1797 ptr[0] = 0xF0; 1798 ptr[2] = info->sense_key; 1799 ptr[7] = 11; 1800 ptr[12] = info->sense_asc; 1801 ptr[13] = info->sense_ascq; 1802 usb_stor_set_xfer_buf(ptr, 18, srb); 1803 1804 return USB_STOR_TRANSPORT_GOOD; 1805 } 1806 1807 if (srb->cmnd[0] == ALLOW_MEDIUM_REMOVAL) { 1808 /* 1809 * sure. whatever. not like we can stop the user from popping 1810 * the media out of the device (no locking doors, etc) 1811 */ 1812 return USB_STOR_TRANSPORT_GOOD; 1813 } 1814 1815 US_DEBUGP("usbat_flash_transport: Gah! Unknown command: %d (0x%x)\n", 1816 srb->cmnd[0], srb->cmnd[0]); 1817 info->sense_key = 0x05; 1818 info->sense_asc = 0x20; 1819 info->sense_ascq = 0x00; 1820 return USB_STOR_TRANSPORT_FAILED; 1821 } 1822 1823 static int init_usbat_cd(struct us_data *us) 1824 { 1825 return init_usbat(us, USBAT_DEV_HP8200); 1826 } 1827 1828 static int init_usbat_flash(struct us_data *us) 1829 { 1830 return init_usbat(us, USBAT_DEV_FLASH); 1831 } 1832 1833 static int usbat_probe(struct usb_interface *intf, 1834 const struct usb_device_id *id) 1835 { 1836 struct us_data *us; 1837 int result; 1838 1839 result = usb_stor_probe1(&us, intf, id, 1840 (id - usbat_usb_ids) + usbat_unusual_dev_list); 1841 if (result) 1842 return result; 1843 1844 /* The actual transport will be determined later by the 1845 * initialization routine; this is just a placeholder. 1846 */ 1847 us->transport_name = "Shuttle USBAT"; 1848 us->transport = usbat_flash_transport; 1849 us->transport_reset = usb_stor_CB_reset; 1850 us->max_lun = 1; 1851 1852 result = usb_stor_probe2(us); 1853 return result; 1854 } 1855 1856 static struct usb_driver usbat_driver = { 1857 .name = "ums-usbat", 1858 .probe = usbat_probe, 1859 .disconnect = usb_stor_disconnect, 1860 .suspend = usb_stor_suspend, 1861 .resume = usb_stor_resume, 1862 .reset_resume = usb_stor_reset_resume, 1863 .pre_reset = usb_stor_pre_reset, 1864 .post_reset = usb_stor_post_reset, 1865 .id_table = usbat_usb_ids, 1866 .soft_unbind = 1, 1867 }; 1868 1869 static int __init usbat_init(void) 1870 { 1871 return usb_register(&usbat_driver); 1872 } 1873 1874 static void __exit usbat_exit(void) 1875 { 1876 usb_deregister(&usbat_driver); 1877 } 1878 1879 module_init(usbat_init); 1880 module_exit(usbat_exit); 1881