Lines Matching +full:boot +full:- +full:blks

4  *   (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
5 * (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org)
10 * Adapted for U-Boot:
21 * SPDX-License-Identifier: GPL-2.0+
45 #include <dm/device-internal.h>
55 /* direction table -- this indicates the direction of the data
56 * transfer for each command code -- a 1 indicates input
109 #define USB_STOR_TRANSPORT_FAILED -1
110 #define USB_STOR_TRANSPORT_ERROR -2
149 printf(" Device %d: ", desc->devnum); in usb_stor_info()
176 len = usb_control_msg(us->pusb_dev, in usb_get_max_lun()
177 usb_rcvctrlpipe(us->pusb_dev, 0), in usb_get_max_lun()
180 0, us->ifnum, in usb_get_max_lun()
183 debug("Get Max LUN -> len = %i, result = %i\n", len, (int) *result); in usb_get_max_lun()
198 return -ENOENT; /* no more devices available */ in usb_stor_probe_device()
208 data = dev_get_platdata(udev->dev); in usb_stor_probe_device()
218 ret = blk_create_devicef(udev->dev, "usb_storage_blk", str, in usb_stor_probe_device()
227 blkdev->target = 0xff; in usb_stor_probe_device()
228 blkdev->lun = lun; in usb_stor_probe_device()
248 return -ENOSPC; in usb_stor_probe_device()
267 blkdev->if_type = IF_TYPE_USB; in usb_stor_probe_device()
268 blkdev->devnum = usb_max_devs; in usb_stor_probe_device()
269 blkdev->part_type = PART_TYPE_UNKNOWN; in usb_stor_probe_device()
270 blkdev->target = 0xff; in usb_stor_probe_device()
271 blkdev->type = DEV_TYPE_UNKNOWN; in usb_stor_probe_device()
272 blkdev->block_read = usb_stor_read; in usb_stor_probe_device()
273 blkdev->block_write = usb_stor_write; in usb_stor_probe_device()
274 blkdev->lun = lun; in usb_stor_probe_device()
275 blkdev->priv = udev; in usb_stor_probe_device()
279 debug("partype: %d\n", blkdev->part_type); in usb_stor_probe_device()
281 debug("partype: %d\n", blkdev->part_type); in usb_stor_probe_device()
299 * returns current device or -1 if no
326 return -1; in usb_stor_scan()
332 us = (struct us_data *)dev->privptr; in usb_stor_irq()
334 if (us->ip_wanted) in usb_stor_irq()
335 us->ip_wanted = 0; in usb_stor_irq()
345 printf("SRB: len %d datalen 0x%lX\n ", pccb->cmdlen, pccb->datalen); in usb_show_srb()
347 printf("%02X ", pccb->cmd[i]); in usb_show_srb()
377 max_size = usb_maxpacket(us->pusb_dev, pipe) * 16; in us_one_transfer()
382 /* calculate how long this will be -- maximum or a remainder */ in us_one_transfer()
384 length -= this_xfer; in us_one_transfer()
394 11 - maxtry); in us_one_transfer()
395 result = usb_bulk_msg(us->pusb_dev, pipe, buf, in us_one_transfer()
400 if (us->pusb_dev->status != 0) { in us_one_transfer()
405 display_int_status(us->pusb_dev->status); in us_one_transfer()
407 if (us->pusb_dev->status & USB_ST_STALLED) { in us_one_transfer()
408 debug("stalled ->clearing endpoint" \ in us_one_transfer()
410 stat = us->pusb_dev->status; in us_one_transfer()
411 usb_clear_halt(us->pusb_dev, pipe); in us_one_transfer()
412 us->pusb_dev->status = stat; in us_one_transfer()
417 us->pusb_dev->status); in us_one_transfer()
423 if (us->pusb_dev->status & USB_ST_NAK_REC) { in us_one_transfer()
430 us->pusb_dev->status); in us_one_transfer()
435 us->pusb_dev->status, partial); in us_one_transfer()
436 if (!maxtry--) in us_one_transfer()
440 this_xfer -= partial; in us_one_transfer()
459 * a) a Bulk-Only Mass Storage Reset in usb_stor_BBB_reset()
460 * b) a Clear Feature HALT to the Bulk-In endpoint in usb_stor_BBB_reset()
461 * c) a Clear Feature HALT to the Bulk-Out endpoint in usb_stor_BBB_reset()
470 result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), in usb_stor_BBB_reset()
473 0, us->ifnum, NULL, 0, USB_CNTL_TIMEOUT * 5); in usb_stor_BBB_reset()
475 if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) { in usb_stor_BBB_reset()
477 return -1; in usb_stor_BBB_reset()
483 result, us->pusb_dev->status); in usb_stor_BBB_reset()
484 pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); in usb_stor_BBB_reset()
485 result = usb_clear_halt(us->pusb_dev, pipe); in usb_stor_BBB_reset()
489 result, us->pusb_dev->status); in usb_stor_BBB_reset()
491 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); in usb_stor_BBB_reset()
492 result = usb_clear_halt(us->pusb_dev, pipe); in usb_stor_BBB_reset()
495 result, us->pusb_dev->status); in usb_stor_BBB_reset()
513 result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), in usb_stor_CB_reset()
516 0, us->ifnum, cmd, sizeof(cmd), in usb_stor_CB_reset()
522 result, us->pusb_dev->status); in usb_stor_CB_reset()
523 usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_in)); in usb_stor_CB_reset()
524 usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_out)); in usb_stor_CB_reset()
542 dir_in = US_DIRECTION(srb->cmd[0]); in usb_stor_BBB_comdat()
546 dir_in, srb->lun, srb->cmdlen, srb->cmd, srb->datalen, in usb_stor_BBB_comdat()
547 srb->pdata); in usb_stor_BBB_comdat()
548 if (srb->cmdlen) { in usb_stor_BBB_comdat()
549 for (result = 0; result < srb->cmdlen; result++) in usb_stor_BBB_comdat()
550 printf("cmd[%d] %#x ", result, srb->cmd[result]); in usb_stor_BBB_comdat()
555 if (!(srb->cmdlen <= CBWCDBLENGTH)) { in usb_stor_BBB_comdat()
557 return -1; in usb_stor_BBB_comdat()
561 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); in usb_stor_BBB_comdat()
563 cbw->dCBWSignature = cpu_to_le32(CBWSIGNATURE); in usb_stor_BBB_comdat()
564 cbw->dCBWTag = cpu_to_le32(CBWTag++); in usb_stor_BBB_comdat()
565 cbw->dCBWDataTransferLength = cpu_to_le32(srb->datalen); in usb_stor_BBB_comdat()
566 cbw->bCBWFlags = (dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT); in usb_stor_BBB_comdat()
567 cbw->bCBWLUN = srb->lun; in usb_stor_BBB_comdat()
568 cbw->bCDBLength = srb->cmdlen; in usb_stor_BBB_comdat()
572 memcpy(cbw->CBWCDB, srb->cmd, srb->cmdlen); in usb_stor_BBB_comdat()
573 result = usb_bulk_msg(us->pusb_dev, pipe, cbw, UMASS_BBB_CBW_SIZE, in usb_stor_BBB_comdat()
591 dir_in = US_DIRECTION(srb->cmd[0]); in usb_stor_CB_comdat()
594 pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); in usb_stor_CB_comdat()
596 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); in usb_stor_CB_comdat()
598 while (retry--) { in usb_stor_CB_comdat()
599 debug("CBI gets a command: Try %d\n", 5 - retry); in usb_stor_CB_comdat()
604 result = usb_control_msg(us->pusb_dev, in usb_stor_CB_comdat()
605 usb_sndctrlpipe(us->pusb_dev , 0), in usb_stor_CB_comdat()
608 0, us->ifnum, in usb_stor_CB_comdat()
609 srb->cmd, srb->cmdlen, in usb_stor_CB_comdat()
612 result, us->pusb_dev->status); in usb_stor_CB_comdat()
615 if (us->pusb_dev->status & USB_ST_STALLED) { in usb_stor_CB_comdat()
616 status = us->pusb_dev->status; in usb_stor_CB_comdat()
619 usb_clear_halt(us->pusb_dev, in usb_stor_CB_comdat()
620 usb_sndctrlpipe(us->pusb_dev, 0)); in usb_stor_CB_comdat()
621 us->pusb_dev->status = status; in usb_stor_CB_comdat()
624 " Stat = %lX\n", srb->cmd[0], in usb_stor_CB_comdat()
625 us->pusb_dev->status); in usb_stor_CB_comdat()
632 dir_in ? "IN" : "OUT", srb->datalen); in usb_stor_CB_comdat()
633 if (srb->datalen) { in usb_stor_CB_comdat()
634 result = us_one_transfer(us, pipe, (char *)srb->pdata, in usb_stor_CB_comdat()
635 srb->datalen); in usb_stor_CB_comdat()
638 result, us->pusb_dev->status, in usb_stor_CB_comdat()
639 us->pusb_dev->act_len); in usb_stor_CB_comdat()
640 if (!(us->pusb_dev->status & USB_ST_NAK_REC)) in usb_stor_CB_comdat()
642 } /* if (srb->datalen) */ in usb_stor_CB_comdat()
656 us->ip_wanted = 1; in usb_stor_CBI_get_status()
657 usb_int_msg(us->pusb_dev, us->irqpipe, in usb_stor_CBI_get_status()
658 (void *)&us->ip_data, us->irqmaxp, us->irqinterval, false); in usb_stor_CBI_get_status()
660 while (timeout--) { in usb_stor_CBI_get_status()
661 if (us->ip_wanted == 0) in usb_stor_CBI_get_status()
665 if (us->ip_wanted) { in usb_stor_CBI_get_status()
667 us->ip_wanted = 0; in usb_stor_CBI_get_status()
671 us->ip_data, us->pusb_dev->irq_act_len, in usb_stor_CBI_get_status()
672 us->pusb_dev->irq_status); in usb_stor_CBI_get_status()
674 if (us->subclass == US_SC_UFI) { in usb_stor_CBI_get_status()
675 if (srb->cmd[0] == SCSI_REQ_SENSE || in usb_stor_CBI_get_status()
676 srb->cmd[0] == SCSI_INQUIRY) in usb_stor_CBI_get_status()
678 else if (us->ip_data) in usb_stor_CBI_get_status()
684 switch (us->ip_data) { in usb_stor_CBI_get_status()
698 /* clear a stall on an endpoint - special for BBB devices */
702 return usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), in usb_stor_BBB_clear_endpt_stall()
719 dir_in = US_DIRECTION(srb->cmd[0]); in usb_stor_BBB_transport()
726 us->pusb_dev->status); in usb_stor_BBB_transport()
730 if (!(us->flags & USB_READY)) in usb_stor_BBB_transport()
732 pipein = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); in usb_stor_BBB_transport()
733 pipeout = usb_sndbulkpipe(us->pusb_dev, us->ep_out); in usb_stor_BBB_transport()
737 if (srb->datalen == 0) in usb_stor_BBB_transport()
745 result = usb_bulk_msg(us->pusb_dev, pipe, srb->pdata, srb->datalen, in usb_stor_BBB_transport()
748 if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) { in usb_stor_BBB_transport()
752 dir_in ? us->ep_in : us->ep_out); in usb_stor_BBB_transport()
759 us->pusb_dev->status); in usb_stor_BBB_transport()
765 printf("pdata[%d] %#x ", index, srb->pdata[index]); in usb_stor_BBB_transport()
773 result = usb_bulk_msg(us->pusb_dev, pipein, csw, UMASS_BBB_CSW_SIZE, in usb_stor_BBB_transport()
778 (us->pusb_dev->status & USB_ST_STALLED)) { in usb_stor_BBB_transport()
781 result = usb_stor_BBB_clear_endpt_stall(us, us->ep_in); in usb_stor_BBB_transport()
788 us->pusb_dev->status); in usb_stor_BBB_transport()
799 pipe = le32_to_cpu(csw->dCSWDataResidue); in usb_stor_BBB_transport()
800 if (pipe == 0 && srb->datalen != 0 && srb->datalen - data_actlen != 0) in usb_stor_BBB_transport()
801 pipe = srb->datalen - data_actlen; in usb_stor_BBB_transport()
802 if (CSWSIGNATURE != le32_to_cpu(csw->dCSWSignature)) { in usb_stor_BBB_transport()
806 } else if ((CBWTag - 1) != le32_to_cpu(csw->dCSWTag)) { in usb_stor_BBB_transport()
810 } else if (csw->bCSWStatus > CSWSTATUS_PHASE) { in usb_stor_BBB_transport()
814 } else if (csw->bCSWStatus == CSWSTATUS_PHASE) { in usb_stor_BBB_transport()
818 } else if (data_actlen > srb->datalen) { in usb_stor_BBB_transport()
820 data_actlen, srb->datalen); in usb_stor_BBB_transport()
822 } else if (csw->bCSWStatus == CSWSTATUS_FAILED) { in usb_stor_BBB_transport()
845 result, us->pusb_dev->status); in usb_stor_CB_transport()
847 if (us->protocol == US_PR_CBI) { in usb_stor_CB_transport()
854 srb->sense_buf[12] = (unsigned char)(us->ip_data >> 8); in usb_stor_CB_transport()
855 srb->sense_buf[13] = (unsigned char)(us->ip_data & 0xff); in usb_stor_CB_transport()
856 if (!us->ip_data) { in usb_stor_CB_transport()
866 if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) { in usb_stor_CB_transport()
867 debug("ERROR %lX\n", us->pusb_dev->status); in usb_stor_CB_transport()
868 us->transport_reset(us); in usb_stor_CB_transport()
871 if ((us->protocol == US_PR_CBI) && in usb_stor_CB_transport()
872 ((srb->cmd[0] == SCSI_REQ_SENSE) || in usb_stor_CB_transport()
873 (srb->cmd[0] == SCSI_INQUIRY))) { in usb_stor_CB_transport()
879 memset(&psrb->cmd[0], 0, 12); in usb_stor_CB_transport()
880 psrb->cmd[0] = SCSI_REQ_SENSE; in usb_stor_CB_transport()
881 psrb->cmd[1] = srb->lun << 5; in usb_stor_CB_transport()
882 psrb->cmd[4] = 18; in usb_stor_CB_transport()
883 psrb->datalen = 18; in usb_stor_CB_transport()
884 psrb->pdata = &srb->sense_buf[0]; in usb_stor_CB_transport()
885 psrb->cmdlen = 12; in usb_stor_CB_transport()
890 if (us->protocol == US_PR_CBI) in usb_stor_CB_transport()
893 if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) { in usb_stor_CB_transport()
895 us->pusb_dev->status); in usb_stor_CB_transport()
899 srb->sense_buf[0], srb->sense_buf[2], in usb_stor_CB_transport()
900 srb->sense_buf[12], srb->sense_buf[13]); in usb_stor_CB_transport()
902 if ((srb->sense_buf[2] == 0) && in usb_stor_CB_transport()
903 (srb->sense_buf[12] == 0) && in usb_stor_CB_transport()
904 (srb->sense_buf[13] == 0)) { in usb_stor_CB_transport()
910 switch (srb->sense_buf[2]) { in usb_stor_CB_transport()
919 " 0x%02X (NOT READY)\n", srb->cmd[0], in usb_stor_CB_transport()
920 srb->sense_buf[0], srb->sense_buf[2], in usb_stor_CB_transport()
921 srb->sense_buf[12], srb->sense_buf[13]); in usb_stor_CB_transport()
931 " 0x%02X\n", srb->cmd[0], srb->sense_buf[0], in usb_stor_CB_transport()
932 srb->sense_buf[2], srb->sense_buf[12], in usb_stor_CB_transport()
933 srb->sense_buf[13]); in usb_stor_CB_transport()
950 * only an 8-bit register to hold the number of sectors in one transfer in usb_stor_set_max_xfer_blk()
973 us->max_xfer_blk = blk; in usb_stor_set_max_xfer_blk()
981 memset(&srb->cmd[0], 0, 12); in usb_inquiry()
982 srb->cmd[0] = SCSI_INQUIRY; in usb_inquiry()
983 srb->cmd[1] = srb->lun << 5; in usb_inquiry()
984 srb->cmd[4] = 36; in usb_inquiry()
985 srb->datalen = 36; in usb_inquiry()
986 srb->cmdlen = 12; in usb_inquiry()
987 i = ss->transport(srb, ss); in usb_inquiry()
991 } while (--retry); in usb_inquiry()
995 return -1; in usb_inquiry()
1004 ptr = (char *)srb->pdata; in usb_request_sense()
1005 memset(&srb->cmd[0], 0, 12); in usb_request_sense()
1006 srb->cmd[0] = SCSI_REQ_SENSE; in usb_request_sense()
1007 srb->cmd[1] = srb->lun << 5; in usb_request_sense()
1008 srb->cmd[4] = 18; in usb_request_sense()
1009 srb->datalen = 18; in usb_request_sense()
1010 srb->pdata = &srb->sense_buf[0]; in usb_request_sense()
1011 srb->cmdlen = 12; in usb_request_sense()
1012 ss->transport(srb, ss); in usb_request_sense()
1014 srb->sense_buf[2], srb->sense_buf[12], in usb_request_sense()
1015 srb->sense_buf[13]); in usb_request_sense()
1016 srb->pdata = (uchar *)ptr; in usb_request_sense()
1025 memset(&srb->cmd[0], 0, 12); in usb_test_unit_ready()
1026 srb->cmd[0] = SCSI_TST_U_RDY; in usb_test_unit_ready()
1027 srb->cmd[1] = srb->lun << 5; in usb_test_unit_ready()
1028 srb->datalen = 0; in usb_test_unit_ready()
1029 srb->cmdlen = 12; in usb_test_unit_ready()
1030 if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD) { in usb_test_unit_ready()
1031 ss->flags |= USB_READY; in usb_test_unit_ready()
1037 * "Not Ready - medium not present" in usb_test_unit_ready()
1042 if ((srb->sense_buf[2] == 0x02) && in usb_test_unit_ready()
1043 (srb->sense_buf[12] == 0x3a)) in usb_test_unit_ready()
1044 return -1; in usb_test_unit_ready()
1046 } while (retries--); in usb_test_unit_ready()
1048 return -1; in usb_test_unit_ready()
1057 memset(&srb->cmd[0], 0, 12); in usb_read_capacity()
1058 srb->cmd[0] = SCSI_RD_CAPAC; in usb_read_capacity()
1059 srb->cmd[1] = srb->lun << 5; in usb_read_capacity()
1060 srb->datalen = 8; in usb_read_capacity()
1061 srb->cmdlen = 12; in usb_read_capacity()
1062 if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD) in usb_read_capacity()
1064 } while (retry--); in usb_read_capacity()
1066 return -1; in usb_read_capacity()
1072 memset(&srb->cmd[0], 0, 12); in usb_read_10()
1073 srb->cmd[0] = SCSI_READ10; in usb_read_10()
1074 srb->cmd[1] = srb->lun << 5; in usb_read_10()
1075 srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff; in usb_read_10()
1076 srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff; in usb_read_10()
1077 srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff; in usb_read_10()
1078 srb->cmd[5] = ((unsigned char) (start)) & 0xff; in usb_read_10()
1079 srb->cmd[7] = ((unsigned char) (blocks >> 8)) & 0xff; in usb_read_10()
1080 srb->cmd[8] = (unsigned char) blocks & 0xff; in usb_read_10()
1081 srb->cmdlen = 12; in usb_read_10()
1083 return ss->transport(srb, ss); in usb_read_10()
1089 memset(&srb->cmd[0], 0, 12); in usb_write_10()
1090 srb->cmd[0] = SCSI_WRITE10; in usb_write_10()
1091 srb->cmd[1] = srb->lun << 5; in usb_write_10()
1092 srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff; in usb_write_10()
1093 srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff; in usb_write_10()
1094 srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff; in usb_write_10()
1095 srb->cmd[5] = ((unsigned char) (start)) & 0xff; in usb_write_10()
1096 srb->cmd[7] = ((unsigned char) (blocks >> 8)) & 0xff; in usb_write_10()
1097 srb->cmd[8] = (unsigned char) blocks & 0xff; in usb_write_10()
1098 srb->cmdlen = 12; in usb_write_10()
1100 return ss->transport(srb, ss); in usb_write_10()
1135 lbaint_t start, blks; in usb_stor_read() local
1152 debug("\nusb_read: udev %d\n", block_dev->devnum); in usb_stor_read()
1154 debug("\nusb_read: udev %d\n", block_dev->devnum); in usb_stor_read()
1155 udev = usb_dev_desc[block_dev->devnum].priv; in usb_stor_read()
1161 ss = (struct us_data *)udev->privptr; in usb_stor_read()
1164 srb->lun = block_dev->lun; in usb_stor_read()
1167 blks = blkcnt; in usb_stor_read()
1170 PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr); in usb_stor_read()
1175 srb->pdata = (unsigned char *)buf_addr; in usb_stor_read()
1176 if (blks > ss->max_xfer_blk) in usb_stor_read()
1177 smallblks = ss->max_xfer_blk; in usb_stor_read()
1179 smallblks = (unsigned short) blks; in usb_stor_read()
1181 if (smallblks == ss->max_xfer_blk) in usb_stor_read()
1183 srb->datalen = block_dev->blksz * smallblks; in usb_stor_read()
1184 srb->pdata = (unsigned char *)buf_addr; in usb_stor_read()
1188 if (retry--) in usb_stor_read()
1190 blkcnt -= blks; in usb_stor_read()
1194 blks -= smallblks; in usb_stor_read()
1195 buf_addr += srb->datalen; in usb_stor_read()
1196 } while (blks != 0); in usb_stor_read()
1197 ss->flags &= ~USB_READY; in usb_stor_read()
1204 if (blkcnt >= ss->max_xfer_blk) in usb_stor_read()
1217 lbaint_t start, blks; in usb_stor_write() local
1235 debug("\nusb_read: udev %d\n", block_dev->devnum); in usb_stor_write()
1237 debug("\nusb_read: udev %d\n", block_dev->devnum); in usb_stor_write()
1238 udev = usb_dev_desc[block_dev->devnum].priv; in usb_stor_write()
1244 ss = (struct us_data *)udev->privptr; in usb_stor_write()
1248 srb->lun = block_dev->lun; in usb_stor_write()
1251 blks = blkcnt; in usb_stor_write()
1254 PRIxPTR "\n", block_dev->devnum, start, blks, buf_addr); in usb_stor_write()
1261 srb->pdata = (unsigned char *)buf_addr; in usb_stor_write()
1262 if (blks > ss->max_xfer_blk) in usb_stor_write()
1263 smallblks = ss->max_xfer_blk; in usb_stor_write()
1265 smallblks = (unsigned short) blks; in usb_stor_write()
1267 if (smallblks == ss->max_xfer_blk) in usb_stor_write()
1269 srb->datalen = block_dev->blksz * smallblks; in usb_stor_write()
1270 srb->pdata = (unsigned char *)buf_addr; in usb_stor_write()
1274 if (retry--) in usb_stor_write()
1276 blkcnt -= blks; in usb_stor_write()
1280 blks -= smallblks; in usb_stor_write()
1281 buf_addr += srb->datalen; in usb_stor_write()
1282 } while (blks != 0); in usb_stor_write()
1283 ss->flags &= ~USB_READY; in usb_stor_write()
1289 if (blkcnt >= ss->max_xfer_blk) in usb_stor_write()
1305 iface = &dev->config.if_desc[ifnum]; in usb_storage_probe()
1307 if (dev->descriptor.bDeviceClass != 0 || in usb_storage_probe()
1308 iface->desc.bInterfaceClass != USB_CLASS_MASS_STORAGE || in usb_storage_probe()
1309 iface->desc.bInterfaceSubClass < US_SC_MIN || in usb_storage_probe()
1310 iface->desc.bInterfaceSubClass > US_SC_MAX) { in usb_storage_probe()
1322 ss->flags = flags; in usb_storage_probe()
1323 ss->ifnum = ifnum; in usb_storage_probe()
1324 ss->pusb_dev = dev; in usb_storage_probe()
1325 ss->attention_done = 0; in usb_storage_probe()
1326 ss->subclass = iface->desc.bInterfaceSubClass; in usb_storage_probe()
1327 ss->protocol = iface->desc.bInterfaceProtocol; in usb_storage_probe()
1331 switch (ss->protocol) { in usb_storage_probe()
1334 ss->transport = usb_stor_CB_transport; in usb_storage_probe()
1335 ss->transport_reset = usb_stor_CB_reset; in usb_storage_probe()
1340 ss->transport = usb_stor_CB_transport; in usb_storage_probe()
1341 ss->transport_reset = usb_stor_CB_reset; in usb_storage_probe()
1345 ss->transport = usb_stor_BBB_transport; in usb_storage_probe()
1346 ss->transport_reset = usb_stor_BBB_reset; in usb_storage_probe()
1355 * We are expecting a minimum of 2 endpoints - in and out (bulk). in usb_storage_probe()
1359 for (i = 0; i < iface->desc.bNumEndpoints; i++) { in usb_storage_probe()
1360 ep_desc = &iface->ep_desc[i]; in usb_storage_probe()
1362 if ((ep_desc->bmAttributes & in usb_storage_probe()
1364 if (ep_desc->bEndpointAddress & USB_DIR_IN) in usb_storage_probe()
1365 ss->ep_in = ep_desc->bEndpointAddress & in usb_storage_probe()
1368 ss->ep_out = in usb_storage_probe()
1369 ep_desc->bEndpointAddress & in usb_storage_probe()
1374 if ((ep_desc->bmAttributes & in usb_storage_probe()
1376 ss->ep_int = ep_desc->bEndpointAddress & in usb_storage_probe()
1378 ss->irqinterval = ep_desc->bInterval; in usb_storage_probe()
1382 ss->ep_in, ss->ep_out, ss->ep_int); in usb_storage_probe()
1385 if (usb_set_interface(dev, iface->desc.bInterfaceNumber, 0) || in usb_storage_probe()
1386 !ss->ep_in || !ss->ep_out || in usb_storage_probe()
1387 (ss->protocol == US_PR_CBI && ss->ep_int == 0)) { in usb_storage_probe()
1394 * The SFF8070 accepts the requests used in u-boot in usb_storage_probe()
1396 if (ss->subclass != US_SC_UFI && ss->subclass != US_SC_SCSI && in usb_storage_probe()
1397 ss->subclass != US_SC_8070) { in usb_storage_probe()
1398 printf("Sorry, protocol %d not yet supported.\n", ss->subclass); in usb_storage_probe()
1401 if (ss->ep_int) { in usb_storage_probe()
1405 ss->irqinterval = (ss->irqinterval > 0) ? ss->irqinterval : 255; in usb_storage_probe()
1406 ss->irqpipe = usb_rcvintpipe(ss->pusb_dev, ss->ep_int); in usb_storage_probe()
1407 ss->irqmaxp = usb_maxpacket(dev, ss->irqpipe); in usb_storage_probe()
1408 dev->irq_handle = usb_stor_irq; in usb_storage_probe()
1414 dev->privptr = (void *)ss; in usb_storage_probe()
1427 pccb->pdata = usb_stor_buf; in usb_stor_get_info()
1429 dev_desc->target = dev->devnum; in usb_stor_get_info()
1430 pccb->lun = dev_desc->lun; in usb_stor_get_info()
1431 debug(" address %d\n", dev_desc->target); in usb_stor_get_info()
1435 return -1; in usb_stor_get_info()
1451 dev_desc->removable = 1; in usb_stor_get_info()
1453 memcpy(dev_desc->vendor, (const void *)&usb_stor_buf[8], 8); in usb_stor_get_info()
1454 memcpy(dev_desc->product, (const void *)&usb_stor_buf[16], 16); in usb_stor_get_info()
1455 memcpy(dev_desc->revision, (const void *)&usb_stor_buf[32], 4); in usb_stor_get_info()
1456 dev_desc->vendor[8] = 0; in usb_stor_get_info()
1457 dev_desc->product[16] = 0; in usb_stor_get_info()
1458 dev_desc->revision[4] = 0; in usb_stor_get_info()
1460 usb_bin_fixup(dev->descriptor, (uchar *)dev_desc->vendor, in usb_stor_get_info()
1461 (uchar *)dev_desc->product); in usb_stor_get_info()
1468 pccb->sense_buf[2], pccb->sense_buf[12], in usb_stor_get_info()
1469 pccb->sense_buf[13]); in usb_stor_get_info()
1470 if (dev_desc->removable == 1) in usb_stor_get_info()
1471 dev_desc->type = perq; in usb_stor_get_info()
1474 pccb->pdata = (unsigned char *)cap; in usb_stor_get_info()
1475 memset(pccb->pdata, 0, 8); in usb_stor_get_info()
1481 ss->flags &= ~USB_READY; in usb_stor_get_info()
1495 dev_desc->lba = capacity; in usb_stor_get_info()
1496 dev_desc->blksz = blksz; in usb_stor_get_info()
1497 dev_desc->log2blksz = LOG2(dev_desc->blksz); in usb_stor_get_info()
1498 dev_desc->type = perq; in usb_stor_get_info()
1499 debug(" address %d\n", dev_desc->target); in usb_stor_get_info()
1519 { .compatible = "usb-mass-storage" },