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
261 spin_lock_irqsave(&devinfo->lock, flags); in uas_stat_cmplt()
263 if (devinfo->resetting) in uas_stat_cmplt()
275 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) { in uas_stat_cmplt()
281 cmnd = devinfo->cmnd[idx]; in uas_stat_cmplt()
331 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_stat_cmplt()
348 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()
814 scsi_change_queue_depth(sdev, devinfo->qdepth - 2); in uas_slave_configure()
864 static int uas_configure_endpoints(struct uas_dev_info *devinfo) in uas_configure_endpoints() argument
867 struct usb_device *udev = devinfo->udev; in uas_configure_endpoints()
870 r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps); in uas_configure_endpoints()
874 devinfo->cmd_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
876 devinfo->status_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
878 devinfo->data_in_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
880 devinfo->data_out_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
884 devinfo->qdepth = 32; in uas_configure_endpoints()
885 devinfo->use_streams = 0; in uas_configure_endpoints()
887 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1, in uas_configure_endpoints()
889 if (devinfo->qdepth < 0) in uas_configure_endpoints()
890 return devinfo->qdepth; in uas_configure_endpoints()
891 devinfo->use_streams = 1; in uas_configure_endpoints()
897 static void uas_free_streams(struct uas_dev_info *devinfo) in uas_free_streams() argument
899 struct usb_device *udev = devinfo->udev; in uas_free_streams()
902 eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe); in uas_free_streams()
903 eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe); in uas_free_streams()
904 eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe); in uas_free_streams()
905 usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO); in uas_free_streams()
912 struct uas_dev_info *devinfo; in uas_probe() local
933 devinfo = (struct uas_dev_info *)shost->hostdata; in uas_probe()
934 devinfo->intf = intf; in uas_probe()
935 devinfo->udev = udev; in uas_probe()
936 devinfo->resetting = 0; in uas_probe()
937 devinfo->shutdown = 0; in uas_probe()
938 devinfo->flags = dev_flags; in uas_probe()
939 init_usb_anchor(&devinfo->cmd_urbs); in uas_probe()
940 init_usb_anchor(&devinfo->sense_urbs); in uas_probe()
941 init_usb_anchor(&devinfo->data_urbs); in uas_probe()
942 spin_lock_init(&devinfo->lock); in uas_probe()
943 INIT_WORK(&devinfo->work, uas_do_work); in uas_probe()
945 result = uas_configure_endpoints(devinfo); in uas_probe()
949 result = scsi_init_shared_tag_map(shost, devinfo->qdepth - 2); in uas_probe()
962 uas_free_streams(devinfo); in uas_probe()
971 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo) in uas_cmnd_list_empty() argument
976 spin_lock_irqsave(&devinfo->lock, flags); in uas_cmnd_list_empty()
978 for (i = 0; i < devinfo->qdepth; i++) { in uas_cmnd_list_empty()
979 if (devinfo->cmnd[i]) { in uas_cmnd_list_empty()
985 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_cmnd_list_empty()
995 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo) in uas_wait_for_pending_cmnds() argument
1002 flush_work(&devinfo->work); in uas_wait_for_pending_cmnds()
1004 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000); in uas_wait_for_pending_cmnds()
1008 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500); in uas_wait_for_pending_cmnds()
1014 } while (!uas_cmnd_list_empty(devinfo)); in uas_wait_for_pending_cmnds()
1022 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_pre_reset() local
1025 if (devinfo->shutdown) in uas_pre_reset()
1033 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_pre_reset()
1039 uas_free_streams(devinfo); in uas_pre_reset()
1047 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_post_reset() local
1051 if (devinfo->shutdown) in uas_post_reset()
1054 err = uas_configure_endpoints(devinfo); in uas_post_reset()
1074 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_suspend() local
1076 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_suspend()
1092 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_reset_resume() local
1096 err = uas_configure_endpoints(devinfo); in uas_reset_resume()
1114 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_disconnect() local
1117 spin_lock_irqsave(&devinfo->lock, flags); in uas_disconnect()
1118 devinfo->resetting = 1; in uas_disconnect()
1119 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_disconnect()
1121 cancel_work_sync(&devinfo->work); in uas_disconnect()
1122 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_disconnect()
1123 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_disconnect()
1124 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_disconnect()
1125 uas_zap_pending(devinfo, DID_NO_CONNECT); in uas_disconnect()
1128 uas_free_streams(devinfo); in uas_disconnect()
1142 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_shutdown() local
1147 devinfo->shutdown = 1; in uas_shutdown()
1148 uas_free_streams(devinfo); in uas_shutdown()