Lines Matching refs:us

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);
160 static int init_usbat_cd(struct us_data *us);
161 static int init_usbat_flash(struct us_data *us);
222 static int usbat_get_device_type(struct us_data *us) in usbat_get_device_type() argument
224 return ((struct usbat_info*)us->extra)->devicetype; in usbat_get_device_type()
230 static int usbat_read(struct us_data *us, in usbat_read() argument
235 return usb_stor_ctrl_transfer(us, in usbat_read()
236 us->recv_ctrl_pipe, in usbat_read()
248 static int usbat_write(struct us_data *us, in usbat_write() argument
253 return usb_stor_ctrl_transfer(us, in usbat_write()
254 us->send_ctrl_pipe, in usbat_write()
266 static int usbat_bulk_read(struct us_data *us, in usbat_bulk_read() argument
274 usb_stor_dbg(us, "len = %d\n", len); in usbat_bulk_read()
275 return usb_stor_bulk_transfer_sg(us, us->recv_bulk_pipe, buf, len, use_sg, NULL); in usbat_bulk_read()
281 static int usbat_bulk_write(struct us_data *us, in usbat_bulk_write() argument
289 usb_stor_dbg(us, "len = %d\n", len); in usbat_bulk_write()
290 return usb_stor_bulk_transfer_sg(us, us->send_bulk_pipe, buf, len, use_sg, NULL); in usbat_bulk_write()
298 static int usbat_execute_command(struct us_data *us, in usbat_execute_command() argument
302 return usb_stor_ctrl_transfer(us, us->send_ctrl_pipe, in usbat_execute_command()
310 static int usbat_get_status(struct us_data *us, unsigned char *status) in usbat_get_status() argument
313 rc = usbat_read(us, USBAT_ATA, USBAT_ATA_STATUS, status); in usbat_get_status()
315 usb_stor_dbg(us, "0x%02X\n", *status); in usbat_get_status()
322 static int usbat_check_status(struct us_data *us) in usbat_check_status() argument
324 unsigned char *reply = us->iobuf; in usbat_check_status()
327 rc = usbat_get_status(us, reply); in usbat_check_status()
346 static int usbat_set_shuttle_features(struct us_data *us, in usbat_set_shuttle_features() argument
354 unsigned char *command = us->iobuf; in usbat_set_shuttle_features()
395 return usbat_execute_command(us, command, 8); in usbat_set_shuttle_features()
402 static int usbat_wait_not_busy(struct us_data *us, int minutes) in usbat_wait_not_busy() argument
406 unsigned char *status = us->iobuf; in usbat_wait_not_busy()
416 result = usbat_get_status(us, status); in usbat_wait_not_busy()
421 result = usbat_read(us, USBAT_ATA, 0x10, status); in usbat_wait_not_busy()
428 usb_stor_dbg(us, "Waited not busy for %d steps\n", i); in usbat_wait_not_busy()
442 usb_stor_dbg(us, "Waited not busy for %d minutes, timing out\n", in usbat_wait_not_busy()
450 static int usbat_read_block(struct us_data *us, in usbat_read_block() argument
456 unsigned char *command = us->iobuf; in usbat_read_block()
470 result = usbat_execute_command(us, command, 8); in usbat_read_block()
474 result = usbat_bulk_read(us, buf, len, use_sg); in usbat_read_block()
482 static int usbat_write_block(struct us_data *us, in usbat_write_block() argument
490 unsigned char *command = us->iobuf; in usbat_write_block()
504 result = usbat_execute_command(us, command, 8); in usbat_write_block()
509 result = usbat_bulk_write(us, buf, len, use_sg); in usbat_write_block()
513 return usbat_wait_not_busy(us, minutes); in usbat_write_block()
519 static int usbat_hp8200e_rw_block_test(struct us_data *us, in usbat_hp8200e_rw_block_test() argument
536 us->recv_bulk_pipe : us->send_bulk_pipe; in usbat_hp8200e_rw_block_test()
538 unsigned char *command = us->iobuf; in usbat_hp8200e_rw_block_test()
541 unsigned char *data = us->iobuf; in usbat_hp8200e_rw_block_test()
542 unsigned char *status = us->iobuf; in usbat_hp8200e_rw_block_test()
590 result = usbat_execute_command(us, command, cmdlen); in usbat_hp8200e_rw_block_test()
602 result = usbat_bulk_write(us, data, num_registers*2, 0); in usbat_hp8200e_rw_block_test()
608 result = usb_stor_bulk_transfer_sg(us, in usbat_hp8200e_rw_block_test()
639 if (usb_stor_clear_halt(us, in usbat_hp8200e_rw_block_test()
640 us->send_bulk_pipe) < 0) in usbat_hp8200e_rw_block_test()
648 result = usbat_read(us, USBAT_ATA, in usbat_hp8200e_rw_block_test()
660 usb_stor_dbg(us, "Redoing %s\n", in usbat_hp8200e_rw_block_test()
667 return usbat_wait_not_busy(us, minutes); in usbat_hp8200e_rw_block_test()
671 usb_stor_dbg(us, "Bummer! %s bulk data 20 times failed\n", in usbat_hp8200e_rw_block_test()
684 static int usbat_multiple_write(struct us_data *us, in usbat_multiple_write() argument
690 unsigned char *data = us->iobuf; in usbat_multiple_write()
691 unsigned char *command = us->iobuf; in usbat_multiple_write()
710 result = usbat_execute_command(us, command, 8); in usbat_multiple_write()
721 result = usbat_bulk_write(us, data, num_registers*2, 0); in usbat_multiple_write()
725 if (usbat_get_device_type(us) == USBAT_DEV_HP8200) in usbat_multiple_write()
726 return usbat_wait_not_busy(us, 0); in usbat_multiple_write()
743 static int usbat_read_blocks(struct us_data *us, in usbat_read_blocks() argument
749 unsigned char *command = us->iobuf; in usbat_read_blocks()
761 result = usbat_execute_command(us, command, 8); in usbat_read_blocks()
766 result = usbat_bulk_read(us, buffer, len, use_sg); in usbat_read_blocks()
785 static int usbat_write_blocks(struct us_data *us, in usbat_write_blocks() argument
791 unsigned char *command = us->iobuf; in usbat_write_blocks()
803 result = usbat_execute_command(us, command, 8); in usbat_write_blocks()
808 result = usbat_bulk_write(us, buffer, len, use_sg); in usbat_write_blocks()
818 static int usbat_read_user_io(struct us_data *us, unsigned char *data_flags) in usbat_read_user_io() argument
822 result = usb_stor_ctrl_transfer(us, in usbat_read_user_io()
823 us->recv_ctrl_pipe, in usbat_read_user_io()
831 usb_stor_dbg(us, "UIO register reads %02X\n", *data_flags); in usbat_read_user_io()
839 static int usbat_write_user_io(struct us_data *us, in usbat_write_user_io() argument
843 return usb_stor_ctrl_transfer(us, in usbat_write_user_io()
844 us->send_ctrl_pipe, in usbat_write_user_io()
857 static int usbat_device_reset(struct us_data *us) in usbat_device_reset() argument
865 rc = usbat_write_user_io(us, in usbat_device_reset()
875 rc = usbat_write_user_io(us, in usbat_device_reset()
887 static int usbat_device_enable_cdt(struct us_data *us) in usbat_device_enable_cdt() argument
892 rc = usbat_write_user_io(us, in usbat_device_enable_cdt()
904 static int usbat_flash_check_media_present(struct us_data *us, in usbat_flash_check_media_present() argument
908 usb_stor_dbg(us, "no media detected\n"); in usbat_flash_check_media_present()
918 static int usbat_flash_check_media_changed(struct us_data *us, in usbat_flash_check_media_changed() argument
922 usb_stor_dbg(us, "media change detected\n"); in usbat_flash_check_media_changed()
932 static int usbat_flash_check_media(struct us_data *us, in usbat_flash_check_media() argument
936 unsigned char *uio = us->iobuf; in usbat_flash_check_media()
938 rc = usbat_read_user_io(us, uio); in usbat_flash_check_media()
943 rc = usbat_flash_check_media_present(us, uio); in usbat_flash_check_media()
952 rc = usbat_flash_check_media_changed(us, uio); in usbat_flash_check_media()
956 rc = usbat_device_reset(us); in usbat_flash_check_media()
959 rc = usbat_device_enable_cdt(us); in usbat_flash_check_media()
965 rc = usbat_read_user_io(us, uio); in usbat_flash_check_media()
983 static int usbat_identify_device(struct us_data *us, in usbat_identify_device() argument
989 if (!us || !info) in usbat_identify_device()
992 rc = usbat_device_reset(us); in usbat_identify_device()
1003 rc = usbat_write(us, USBAT_ATA, USBAT_ATA_CMD, 0xA1); in usbat_identify_device()
1007 rc = usbat_get_status(us, &status); in usbat_identify_device()
1014 usb_stor_dbg(us, "Detected HP8200 CDRW\n"); in usbat_identify_device()
1018 usb_stor_dbg(us, "Detected Flash reader/writer\n"); in usbat_identify_device()
1028 static int usbat_set_transport(struct us_data *us, in usbat_set_transport() argument
1037 usbat_identify_device(us, info); in usbat_set_transport()
1044 us->transport = usbat_hp8200e_transport; in usbat_set_transport()
1048 us->transport = usbat_flash_transport; in usbat_set_transport()
1058 static int usbat_flash_get_sector_count(struct us_data *us, in usbat_flash_get_sector_count() argument
1071 if (!us || !info) in usbat_flash_get_sector_count()
1079 rc = usbat_multiple_write(us, registers, command, 3); in usbat_flash_get_sector_count()
1081 usb_stor_dbg(us, "Gah! identify_device failed\n"); in usbat_flash_get_sector_count()
1087 if (usbat_get_status(us, &status) != USB_STOR_XFER_GOOD) { in usbat_flash_get_sector_count()
1095 rc = usbat_read_block(us, reply, 512, 0); in usbat_flash_get_sector_count()
1114 static int usbat_flash_read_data(struct us_data *us, in usbat_flash_read_data() argument
1136 result = usbat_flash_check_media(us, info); in usbat_flash_read_data()
1175 result = usbat_multiple_write(us, registers, command, 7); in usbat_flash_read_data()
1180 result = usbat_read_blocks(us, buffer, len, 0); in usbat_flash_read_data()
1184 usb_stor_dbg(us, "%d bytes\n", len); in usbat_flash_read_data()
1187 usb_stor_access_xfer_buf(buffer, len, us->srb, in usbat_flash_read_data()
1205 static int usbat_flash_write_data(struct us_data *us, in usbat_flash_write_data() argument
1227 result = usbat_flash_check_media(us, info); in usbat_flash_write_data()
1263 usb_stor_access_xfer_buf(buffer, len, us->srb, in usbat_flash_write_data()
1270 result = usbat_multiple_write(us, registers, command, 7); in usbat_flash_write_data()
1275 result = usbat_write_blocks(us, buffer, len, 0); in usbat_flash_write_data()
1295 static int usbat_hp8200e_handle_read10(struct us_data *us, in usbat_hp8200e_handle_read10() argument
1307 usb_stor_dbg(us, "transfersize %d\n", srb->transfersize); in usbat_hp8200e_handle_read10()
1311 result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, in usbat_hp8200e_handle_read10()
1334 usb_stor_dbg(us, "GPCMD_READ_CD: len %d\n", len); in usbat_hp8200e_handle_read10()
1340 usb_stor_dbg(us, "transfersize 0, forcing %d\n", in usbat_hp8200e_handle_read10()
1351 usb_stor_dbg(us, "Max read is %d bytes\n", len); in usbat_hp8200e_handle_read10()
1380 result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, in usbat_hp8200e_handle_read10()
1406 static int usbat_select_and_test_registers(struct us_data *us) in usbat_select_and_test_registers() argument
1409 unsigned char *status = us->iobuf; in usbat_select_and_test_registers()
1413 if (usbat_write(us, USBAT_ATA, USBAT_ATA_DEVICE, selector) != in usbat_select_and_test_registers()
1417 if (usbat_read(us, USBAT_ATA, USBAT_ATA_STATUS, status) != in usbat_select_and_test_registers()
1421 if (usbat_read(us, USBAT_ATA, USBAT_ATA_DEVICE, status) != in usbat_select_and_test_registers()
1425 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != in usbat_select_and_test_registers()
1429 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_HI, status) != in usbat_select_and_test_registers()
1433 if (usbat_write(us, USBAT_ATA, USBAT_ATA_LBA_ME, 0x55) != in usbat_select_and_test_registers()
1437 if (usbat_write(us, USBAT_ATA, USBAT_ATA_LBA_HI, 0xAA) != in usbat_select_and_test_registers()
1441 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != in usbat_select_and_test_registers()
1445 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != in usbat_select_and_test_registers()
1456 static int init_usbat(struct us_data *us, int devicetype) in init_usbat() argument
1462 unsigned char *status = us->iobuf; in init_usbat()
1464 us->extra = kzalloc(sizeof(struct usbat_info), GFP_NOIO); in init_usbat()
1465 if (!us->extra) in init_usbat()
1468 info = (struct usbat_info *) (us->extra); in init_usbat()
1471 rc = usbat_write_user_io(us, in init_usbat()
1477 usb_stor_dbg(us, "INIT 1\n"); in init_usbat()
1481 rc = usbat_read_user_io(us, status); in init_usbat()
1485 usb_stor_dbg(us, "INIT 2\n"); in init_usbat()
1487 rc = usbat_read_user_io(us, status); in init_usbat()
1491 rc = usbat_read_user_io(us, status); in init_usbat()
1495 usb_stor_dbg(us, "INIT 3\n"); in init_usbat()
1497 rc = usbat_select_and_test_registers(us); in init_usbat()
1501 usb_stor_dbg(us, "INIT 4\n"); in init_usbat()
1503 rc = usbat_read_user_io(us, status); in init_usbat()
1507 usb_stor_dbg(us, "INIT 5\n"); in init_usbat()
1510 rc = usbat_device_enable_cdt(us); in init_usbat()
1514 usb_stor_dbg(us, "INIT 6\n"); in init_usbat()
1516 rc = usbat_read_user_io(us, status); in init_usbat()
1520 usb_stor_dbg(us, "INIT 7\n"); in init_usbat()
1524 rc = usbat_read_user_io(us, status); in init_usbat()
1528 usb_stor_dbg(us, "INIT 8\n"); in init_usbat()
1530 rc = usbat_select_and_test_registers(us); in init_usbat()
1534 usb_stor_dbg(us, "INIT 9\n"); in init_usbat()
1537 if (usbat_set_transport(us, info, devicetype)) in init_usbat()
1540 usb_stor_dbg(us, "INIT 10\n"); in init_usbat()
1542 if (usbat_get_device_type(us) == USBAT_DEV_FLASH) { in init_usbat()
1546 rc = usbat_set_shuttle_features(us, (USBAT_FEAT_ETEN | USBAT_FEAT_ET2 | USBAT_FEAT_ET1), in init_usbat()
1551 usb_stor_dbg(us, "INIT 11\n"); in init_usbat()
1559 static int usbat_hp8200e_transport(struct scsi_cmnd *srb, struct us_data *us) in usbat_hp8200e_transport() argument
1562 unsigned char *status = us->iobuf; in usbat_hp8200e_transport()
1595 result = usbat_get_status(us, status); in usbat_hp8200e_transport()
1596 usb_stor_dbg(us, "Status = %02X\n", *status); in usbat_hp8200e_transport()
1604 result = usbat_hp8200e_rw_block_test(us, USBAT_ATA, in usbat_hp8200e_transport()
1614 usb_stor_dbg(us, "Wrote %08X bytes\n", transferred); in usbat_hp8200e_transport()
1622 return usbat_hp8200e_handle_read10(us, registers, data, srb); in usbat_hp8200e_transport()
1627 usb_stor_dbg(us, "Error: len = %08X... what do I do now?\n", in usbat_hp8200e_transport()
1632 result = usbat_multiple_write(us, registers, data, 7); in usbat_hp8200e_transport()
1647 result = usbat_write_block(us, USBAT_ATA, srb->cmnd, 12, in usbat_hp8200e_transport()
1659 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_ME, status) != in usbat_hp8200e_transport()
1666 if (usbat_read(us, USBAT_ATA, USBAT_ATA_LBA_HI, status) != in usbat_hp8200e_transport()
1676 result = usbat_read_block(us, scsi_sglist(srb), len, in usbat_hp8200e_transport()
1686 static int usbat_flash_transport(struct scsi_cmnd * srb, struct us_data *us) in usbat_flash_transport() argument
1689 struct usbat_info *info = (struct usbat_info *) (us->extra); in usbat_flash_transport()
1691 unsigned char *ptr = us->iobuf; in usbat_flash_transport()
1697 usb_stor_dbg(us, "INQUIRY - Returning bogus response\n"); in usbat_flash_transport()
1699 fill_inquiry_response(us, ptr, 36); in usbat_flash_transport()
1704 rc = usbat_flash_check_media(us, info); in usbat_flash_transport()
1708 rc = usbat_flash_get_sector_count(us, info); in usbat_flash_transport()
1714 usb_stor_dbg(us, "READ_CAPACITY: %ld sectors, %ld bytes per sector\n", in usbat_flash_transport()
1730 usb_stor_dbg(us, "Gah! MODE_SELECT_10\n"); in usbat_flash_transport()
1740 usb_stor_dbg(us, "READ_10: read block 0x%04lx count %ld\n", in usbat_flash_transport()
1742 return usbat_flash_read_data(us, info, block, blocks); in usbat_flash_transport()
1755 usb_stor_dbg(us, "READ_12: read block 0x%04lx count %ld\n", in usbat_flash_transport()
1757 return usbat_flash_read_data(us, info, block, blocks); in usbat_flash_transport()
1766 usb_stor_dbg(us, "WRITE_10: write block 0x%04lx count %ld\n", in usbat_flash_transport()
1768 return usbat_flash_write_data(us, info, block, blocks); in usbat_flash_transport()
1781 usb_stor_dbg(us, "WRITE_12: write block 0x%04lx count %ld\n", in usbat_flash_transport()
1783 return usbat_flash_write_data(us, info, block, blocks); in usbat_flash_transport()
1788 usb_stor_dbg(us, "TEST_UNIT_READY\n"); in usbat_flash_transport()
1790 rc = usbat_flash_check_media(us, info); in usbat_flash_transport()
1794 return usbat_check_status(us); in usbat_flash_transport()
1798 usb_stor_dbg(us, "REQUEST_SENSE\n"); in usbat_flash_transport()
1819 usb_stor_dbg(us, "Gah! Unknown command: %d (0x%x)\n", in usbat_flash_transport()
1827 static int init_usbat_cd(struct us_data *us) in init_usbat_cd() argument
1829 return init_usbat(us, USBAT_DEV_HP8200); in init_usbat_cd()
1832 static int init_usbat_flash(struct us_data *us) in init_usbat_flash() argument
1834 return init_usbat(us, USBAT_DEV_FLASH); in init_usbat_flash()
1840 struct us_data *us; in usbat_probe() local
1843 result = usb_stor_probe1(&us, intf, id, in usbat_probe()
1851 us->transport_name = "Shuttle USBAT"; in usbat_probe()
1852 us->transport = usbat_flash_transport; in usbat_probe()
1853 us->transport_reset = usb_stor_CB_reset; in usbat_probe()
1854 us->max_lun = 0; in usbat_probe()
1856 result = usb_stor_probe2(us); in usbat_probe()