Lines Matching full:us

112 int usb_stor_get_info(struct usb_device *dev, struct us_data *us,
172 static unsigned int usb_get_max_lun(struct us_data *us) in usb_get_max_lun() argument
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()
331 struct us_data *us; in usb_stor_irq() local
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()
367 static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length) in us_one_transfer() argument
377 max_size = usb_maxpacket(us->pusb_dev, pipe) * 16; 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()
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()
450 static int usb_stor_BBB_reset(struct us_data *us) in usb_stor_BBB_reset() argument
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()
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()
504 static int usb_stor_CB_reset(struct us_data *us) in usb_stor_CB_reset() argument
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()
534 static int usb_stor_BBB_comdat(struct scsi_cmd *srb, struct us_data *us) in usb_stor_BBB_comdat() argument
561 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); in usb_stor_BBB_comdat()
573 result = usb_bulk_msg(us->pusb_dev, pipe, cbw, UMASS_BBB_CBW_SIZE, in usb_stor_BBB_comdat()
583 static int usb_stor_CB_comdat(struct scsi_cmd *srb, struct us_data *us) in usb_stor_CB_comdat() argument
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()
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()
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()
625 us->pusb_dev->status); in usb_stor_CB_comdat()
634 result = us_one_transfer(us, pipe, (char *)srb->pdata, 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()
652 static int usb_stor_CBI_get_status(struct scsi_cmd *srb, struct us_data *us) in usb_stor_CBI_get_status() argument
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()
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()
673 /* UFI gives us ASC and ASCQ, like a request sense */ in usb_stor_CBI_get_status()
674 if (us->subclass == US_SC_UFI) { 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()
699 static int usb_stor_BBB_clear_endpt_stall(struct us_data *us, __u8 endpt) in usb_stor_BBB_clear_endpt_stall() argument
702 return usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), in usb_stor_BBB_clear_endpt_stall()
707 static int usb_stor_BBB_transport(struct scsi_cmd *srb, struct us_data *us) in usb_stor_BBB_transport() argument
723 result = usb_stor_BBB_comdat(srb, us); in usb_stor_BBB_transport()
726 us->pusb_dev->status); in usb_stor_BBB_transport()
727 usb_stor_BBB_reset(us); 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()
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()
751 result = usb_stor_BBB_clear_endpt_stall(us, 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()
760 usb_stor_BBB_reset(us); 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()
789 usb_stor_BBB_reset(us); in usb_stor_BBB_transport()
804 usb_stor_BBB_reset(us); in usb_stor_BBB_transport()
808 usb_stor_BBB_reset(us); in usb_stor_BBB_transport()
812 usb_stor_BBB_reset(us); in usb_stor_BBB_transport()
816 usb_stor_BBB_reset(us); in usb_stor_BBB_transport()
830 static int usb_stor_CB_transport(struct scsi_cmd *srb, struct us_data *us) in usb_stor_CB_transport() argument
843 result = usb_stor_CB_comdat(srb, us); in usb_stor_CB_transport()
845 result, us->pusb_dev->status); in usb_stor_CB_transport()
847 if (us->protocol == US_PR_CBI) { in usb_stor_CB_transport()
848 status = usb_stor_CBI_get_status(srb, us); 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()
887 result = usb_stor_CB_comdat(psrb, us); in usb_stor_CB_transport()
890 if (us->protocol == US_PR_CBI) in usb_stor_CB_transport()
891 status = usb_stor_CBI_get_status(psrb, us); 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()
943 struct us_data *us) in usb_stor_set_max_xfer_blk() argument
973 us->max_xfer_blk = blk; in usb_stor_set_max_xfer_blk()