Lines Matching refs:devinfo

77 				struct uas_dev_info *devinfo, gfp_t gfp);
80 static void uas_free_streams(struct uas_dev_info *devinfo);
86 struct uas_dev_info *devinfo = in uas_do_work() local
93 spin_lock_irqsave(&devinfo->lock, flags); in uas_do_work()
95 if (devinfo->resetting) in uas_do_work()
98 for (i = 0; i < devinfo->qdepth; i++) { in uas_do_work()
99 if (!devinfo->cmnd[i]) in uas_do_work()
102 cmnd = devinfo->cmnd[i]; in uas_do_work()
112 schedule_work(&devinfo->work); in uas_do_work()
115 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_do_work()
122 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_add_work() local
124 lockdep_assert_held(&devinfo->lock); in uas_add_work()
126 schedule_work(&devinfo->work); in uas_add_work()
129 static void uas_zap_pending(struct uas_dev_info *devinfo, int result) in uas_zap_pending() argument
136 spin_lock_irqsave(&devinfo->lock, flags); in uas_zap_pending()
137 for (i = 0; i < devinfo->qdepth; i++) { in uas_zap_pending()
138 if (!devinfo->cmnd[i]) in uas_zap_pending()
141 cmnd = devinfo->cmnd[i]; in uas_zap_pending()
150 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_zap_pending()
222 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_try_complete() local
224 lockdep_assert_held(&devinfo->lock); in uas_try_complete()
230 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in uas_try_complete()
253 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_stat_cmplt() local
262 spin_lock_irqsave(&devinfo->lock, flags); in uas_stat_cmplt()
264 if (devinfo->resetting) in uas_stat_cmplt()
274 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) { in uas_stat_cmplt()
280 cmnd = devinfo->cmnd[idx]; in uas_stat_cmplt()
330 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_stat_cmplt()
347 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_data_cmplt() local
352 spin_lock_irqsave(&devinfo->lock, flags); in uas_data_cmplt()
368 if (devinfo->resetting) in uas_data_cmplt()
388 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_data_cmplt()
399 static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_data_urb() argument
403 struct usb_device *udev = devinfo->udev; in uas_alloc_data_urb()
409 ? devinfo->data_in_pipe : devinfo->data_out_pipe; in uas_alloc_data_urb()
415 if (devinfo->use_streams) in uas_alloc_data_urb()
423 static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_sense_urb() argument
426 struct usb_device *udev = devinfo->udev; in uas_alloc_sense_urb()
438 usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu), in uas_alloc_sense_urb()
440 if (devinfo->use_streams) in uas_alloc_sense_urb()
450 static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_cmd_urb() argument
453 struct usb_device *udev = devinfo->udev; in uas_alloc_cmd_urb()
478 usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len, in uas_alloc_cmd_urb()
496 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_submit_sense_urb() local
500 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd); in uas_submit_sense_urb()
503 usb_anchor_urb(urb, &devinfo->sense_urbs); in uas_submit_sense_urb()
515 struct uas_dev_info *devinfo, gfp_t gfp) in uas_submit_urbs() argument
521 lockdep_assert_held(&devinfo->lock); in uas_submit_urbs()
530 cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, gfp, in uas_submit_urbs()
538 usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs); in uas_submit_urbs()
550 cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, gfp, in uas_submit_urbs()
558 usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs); in uas_submit_urbs()
570 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, gfp, cmnd); in uas_submit_urbs()
577 usb_anchor_urb(cmdinfo->cmd_urb, &devinfo->cmd_urbs); in uas_submit_urbs()
596 struct uas_dev_info *devinfo = sdev->hostdata; in uas_queuecommand_lck() local
607 if ((devinfo->flags & US_FL_NO_ATA_1X) && in uas_queuecommand_lck()
616 spin_lock_irqsave(&devinfo->lock, flags); in uas_queuecommand_lck()
618 if (devinfo->resetting) { in uas_queuecommand_lck()
621 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
626 for (idx = 0; idx < devinfo->qdepth; idx++) { in uas_queuecommand_lck()
627 if (!devinfo->cmnd[idx]) in uas_queuecommand_lck()
630 if (idx == devinfo->qdepth) { in uas_queuecommand_lck()
631 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
653 if (!devinfo->use_streams) in uas_queuecommand_lck()
656 err = uas_submit_urbs(cmnd, devinfo, GFP_ATOMIC); in uas_queuecommand_lck()
660 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
666 devinfo->cmnd[idx] = cmnd; in uas_queuecommand_lck()
667 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
681 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in DEF_SCSI_QCMD() local
686 spin_lock_irqsave(&devinfo->lock, flags); in DEF_SCSI_QCMD()
694 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in DEF_SCSI_QCMD()
702 spin_unlock_irqrestore(&devinfo->lock, flags); in DEF_SCSI_QCMD()
719 struct uas_dev_info *devinfo = sdev->hostdata; in uas_eh_bus_reset_handler() local
720 struct usb_device *udev = devinfo->udev; in uas_eh_bus_reset_handler()
724 err = usb_lock_device_for_reset(udev, devinfo->intf); in uas_eh_bus_reset_handler()
733 spin_lock_irqsave(&devinfo->lock, flags); in uas_eh_bus_reset_handler()
734 devinfo->resetting = 1; in uas_eh_bus_reset_handler()
735 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_eh_bus_reset_handler()
737 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_eh_bus_reset_handler()
738 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_eh_bus_reset_handler()
739 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_eh_bus_reset_handler()
740 uas_zap_pending(devinfo, DID_RESET); in uas_eh_bus_reset_handler()
744 spin_lock_irqsave(&devinfo->lock, flags); in uas_eh_bus_reset_handler()
745 devinfo->resetting = 0; in uas_eh_bus_reset_handler()
746 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_eh_bus_reset_handler()
762 struct uas_dev_info *devinfo = (struct uas_dev_info *) in uas_target_alloc() local
765 if (devinfo->flags & US_FL_NO_REPORT_LUNS) in uas_target_alloc()
773 struct uas_dev_info *devinfo = in uas_slave_alloc() local
776 sdev->hostdata = devinfo; in uas_slave_alloc()
795 if (devinfo->flags & US_FL_MAX_SECTORS_64) in uas_slave_alloc()
797 else if (devinfo->flags & US_FL_MAX_SECTORS_240) in uas_slave_alloc()
805 struct uas_dev_info *devinfo = sdev->hostdata; in uas_slave_configure() local
807 if (devinfo->flags & US_FL_NO_REPORT_OPCODES) in uas_slave_configure()
811 if (devinfo->flags & US_FL_BROKEN_FUA) in uas_slave_configure()
861 static int uas_configure_endpoints(struct uas_dev_info *devinfo) in uas_configure_endpoints() argument
864 struct usb_device *udev = devinfo->udev; in uas_configure_endpoints()
867 r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps); in uas_configure_endpoints()
871 devinfo->cmd_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
873 devinfo->status_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
875 devinfo->data_in_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
877 devinfo->data_out_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
881 devinfo->qdepth = 32; in uas_configure_endpoints()
882 devinfo->use_streams = 0; in uas_configure_endpoints()
884 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1, in uas_configure_endpoints()
886 if (devinfo->qdepth < 0) in uas_configure_endpoints()
887 return devinfo->qdepth; in uas_configure_endpoints()
888 devinfo->use_streams = 1; in uas_configure_endpoints()
894 static void uas_free_streams(struct uas_dev_info *devinfo) in uas_free_streams() argument
896 struct usb_device *udev = devinfo->udev; in uas_free_streams()
899 eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe); in uas_free_streams()
900 eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe); in uas_free_streams()
901 eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe); in uas_free_streams()
902 usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO); in uas_free_streams()
909 struct uas_dev_info *devinfo; in uas_probe() local
930 devinfo = (struct uas_dev_info *)shost->hostdata; in uas_probe()
931 devinfo->intf = intf; in uas_probe()
932 devinfo->udev = udev; in uas_probe()
933 devinfo->resetting = 0; in uas_probe()
934 devinfo->shutdown = 0; in uas_probe()
935 devinfo->flags = dev_flags; in uas_probe()
936 init_usb_anchor(&devinfo->cmd_urbs); in uas_probe()
937 init_usb_anchor(&devinfo->sense_urbs); in uas_probe()
938 init_usb_anchor(&devinfo->data_urbs); in uas_probe()
939 spin_lock_init(&devinfo->lock); in uas_probe()
940 INIT_WORK(&devinfo->work, uas_do_work); in uas_probe()
942 result = uas_configure_endpoints(devinfo); in uas_probe()
950 shost->can_queue = devinfo->qdepth - 2; in uas_probe()
961 uas_free_streams(devinfo); in uas_probe()
970 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo) in uas_cmnd_list_empty() argument
975 spin_lock_irqsave(&devinfo->lock, flags); in uas_cmnd_list_empty()
977 for (i = 0; i < devinfo->qdepth; i++) { in uas_cmnd_list_empty()
978 if (devinfo->cmnd[i]) { in uas_cmnd_list_empty()
984 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_cmnd_list_empty()
994 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo) in uas_wait_for_pending_cmnds() argument
1001 flush_work(&devinfo->work); in uas_wait_for_pending_cmnds()
1003 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000); in uas_wait_for_pending_cmnds()
1007 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500); in uas_wait_for_pending_cmnds()
1013 } while (!uas_cmnd_list_empty(devinfo)); in uas_wait_for_pending_cmnds()
1021 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_pre_reset() local
1024 if (devinfo->shutdown) in uas_pre_reset()
1032 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_pre_reset()
1038 uas_free_streams(devinfo); in uas_pre_reset()
1046 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_post_reset() local
1050 if (devinfo->shutdown) in uas_post_reset()
1053 err = uas_configure_endpoints(devinfo); in uas_post_reset()
1073 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_suspend() local
1075 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_suspend()
1091 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_reset_resume() local
1095 err = uas_configure_endpoints(devinfo); in uas_reset_resume()
1113 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_disconnect() local
1116 spin_lock_irqsave(&devinfo->lock, flags); in uas_disconnect()
1117 devinfo->resetting = 1; in uas_disconnect()
1118 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_disconnect()
1120 cancel_work_sync(&devinfo->work); in uas_disconnect()
1121 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_disconnect()
1122 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_disconnect()
1123 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_disconnect()
1124 uas_zap_pending(devinfo, DID_NO_CONNECT); in uas_disconnect()
1127 uas_free_streams(devinfo); in uas_disconnect()
1141 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_shutdown() local
1146 devinfo->shutdown = 1; in uas_shutdown()
1147 uas_free_streams(devinfo); in uas_shutdown()