Lines Matching refs:devinfo
76 struct uas_dev_info *devinfo);
79 static void uas_free_streams(struct uas_dev_info *devinfo);
85 struct uas_dev_info *devinfo = in uas_do_work() local
92 spin_lock_irqsave(&devinfo->lock, flags); in uas_do_work()
94 if (devinfo->resetting) in uas_do_work()
97 for (i = 0; i < devinfo->qdepth; i++) { in uas_do_work()
98 if (!devinfo->cmnd[i]) in uas_do_work()
101 cmnd = devinfo->cmnd[i]; in uas_do_work()
111 schedule_work(&devinfo->work); in uas_do_work()
114 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_do_work()
121 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_add_work() local
123 lockdep_assert_held(&devinfo->lock); in uas_add_work()
125 schedule_work(&devinfo->work); in uas_add_work()
128 static void uas_zap_pending(struct uas_dev_info *devinfo, int result) in uas_zap_pending() argument
135 spin_lock_irqsave(&devinfo->lock, flags); in uas_zap_pending()
136 for (i = 0; i < devinfo->qdepth; i++) { in uas_zap_pending()
137 if (!devinfo->cmnd[i]) in uas_zap_pending()
140 cmnd = devinfo->cmnd[i]; in uas_zap_pending()
149 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_zap_pending()
221 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_try_complete() local
223 lockdep_assert_held(&devinfo->lock); in uas_try_complete()
229 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in uas_try_complete()
275 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_stat_cmplt() local
285 spin_lock_irqsave(&devinfo->lock, flags); in uas_stat_cmplt()
287 if (devinfo->resetting) in uas_stat_cmplt()
297 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) { in uas_stat_cmplt()
303 cmnd = devinfo->cmnd[idx]; in uas_stat_cmplt()
353 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_stat_cmplt()
370 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_data_cmplt() local
375 spin_lock_irqsave(&devinfo->lock, flags); in uas_data_cmplt()
391 if (devinfo->resetting) in uas_data_cmplt()
411 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_data_cmplt()
422 static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_data_urb() argument
426 struct usb_device *udev = devinfo->udev; in uas_alloc_data_urb()
432 ? devinfo->data_in_pipe : devinfo->data_out_pipe; in uas_alloc_data_urb()
438 if (devinfo->use_streams) in uas_alloc_data_urb()
446 static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_sense_urb() argument
449 struct usb_device *udev = devinfo->udev; in uas_alloc_sense_urb()
461 usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu), in uas_alloc_sense_urb()
463 if (devinfo->use_streams) in uas_alloc_sense_urb()
473 static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_cmd_urb() argument
476 struct usb_device *udev = devinfo->udev; in uas_alloc_cmd_urb()
501 usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len, in uas_alloc_cmd_urb()
519 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_submit_sense_urb() local
523 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd); in uas_submit_sense_urb()
526 usb_anchor_urb(urb, &devinfo->sense_urbs); in uas_submit_sense_urb()
538 struct uas_dev_info *devinfo) in uas_submit_urbs() argument
544 lockdep_assert_held(&devinfo->lock); in uas_submit_urbs()
553 cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC, in uas_submit_urbs()
561 usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs); in uas_submit_urbs()
573 cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC, in uas_submit_urbs()
581 usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs); in uas_submit_urbs()
593 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd); in uas_submit_urbs()
600 usb_anchor_urb(cmdinfo->cmd_urb, &devinfo->cmd_urbs); in uas_submit_urbs()
619 struct uas_dev_info *devinfo = sdev->hostdata; in uas_queuecommand_lck() local
630 if ((devinfo->flags & US_FL_NO_ATA_1X) && in uas_queuecommand_lck()
639 spin_lock_irqsave(&devinfo->lock, flags); in uas_queuecommand_lck()
641 if (devinfo->resetting) { in uas_queuecommand_lck()
644 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
649 for (idx = 0; idx < devinfo->qdepth; idx++) { in uas_queuecommand_lck()
650 if (!devinfo->cmnd[idx]) in uas_queuecommand_lck()
653 if (idx == devinfo->qdepth) { in uas_queuecommand_lck()
654 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
677 if (!devinfo->use_streams) in uas_queuecommand_lck()
680 err = uas_submit_urbs(cmnd, devinfo); in uas_queuecommand_lck()
684 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
690 devinfo->cmnd[idx] = cmnd; in uas_queuecommand_lck()
691 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
705 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in DEF_SCSI_QCMD() local
710 spin_lock_irqsave(&devinfo->lock, flags); in DEF_SCSI_QCMD()
718 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in DEF_SCSI_QCMD()
726 spin_unlock_irqrestore(&devinfo->lock, flags); in DEF_SCSI_QCMD()
743 struct uas_dev_info *devinfo = sdev->hostdata; in uas_eh_device_reset_handler() local
744 struct usb_device *udev = devinfo->udev; in uas_eh_device_reset_handler()
748 err = usb_lock_device_for_reset(udev, devinfo->intf); in uas_eh_device_reset_handler()
757 spin_lock_irqsave(&devinfo->lock, flags); in uas_eh_device_reset_handler()
758 devinfo->resetting = 1; in uas_eh_device_reset_handler()
759 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_eh_device_reset_handler()
761 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_eh_device_reset_handler()
762 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_eh_device_reset_handler()
763 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_eh_device_reset_handler()
764 uas_zap_pending(devinfo, DID_RESET); in uas_eh_device_reset_handler()
768 spin_lock_irqsave(&devinfo->lock, flags); in uas_eh_device_reset_handler()
769 devinfo->resetting = 0; in uas_eh_device_reset_handler()
770 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_eh_device_reset_handler()
786 struct uas_dev_info *devinfo = (struct uas_dev_info *) in uas_target_alloc() local
789 if (devinfo->flags & US_FL_NO_REPORT_LUNS) in uas_target_alloc()
797 struct uas_dev_info *devinfo = in uas_slave_alloc() local
800 sdev->hostdata = devinfo; in uas_slave_alloc()
820 if (devinfo->flags & US_FL_MAX_SECTORS_64) in uas_slave_alloc()
822 else if (devinfo->flags & US_FL_MAX_SECTORS_240) in uas_slave_alloc()
830 struct uas_dev_info *devinfo = sdev->hostdata; in uas_slave_configure() local
832 if (devinfo->flags & US_FL_NO_REPORT_OPCODES) in uas_slave_configure()
836 if (devinfo->flags & US_FL_BROKEN_FUA) in uas_slave_configure()
840 if (devinfo->flags & US_FL_ALWAYS_SYNC) { in uas_slave_configure()
851 if (devinfo->flags & US_FL_FIX_CAPACITY) in uas_slave_configure()
863 if (devinfo->flags & US_FL_NO_WP_DETECT) in uas_slave_configure()
866 scsi_change_queue_depth(sdev, devinfo->qdepth - 2); in uas_slave_configure()
913 static int uas_configure_endpoints(struct uas_dev_info *devinfo) in uas_configure_endpoints() argument
916 struct usb_device *udev = devinfo->udev; in uas_configure_endpoints()
919 r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps); in uas_configure_endpoints()
923 devinfo->cmd_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
925 devinfo->status_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
927 devinfo->data_in_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
929 devinfo->data_out_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
933 devinfo->qdepth = 32; in uas_configure_endpoints()
934 devinfo->use_streams = 0; in uas_configure_endpoints()
936 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1, in uas_configure_endpoints()
938 if (devinfo->qdepth < 0) in uas_configure_endpoints()
939 return devinfo->qdepth; in uas_configure_endpoints()
940 devinfo->use_streams = 1; in uas_configure_endpoints()
946 static void uas_free_streams(struct uas_dev_info *devinfo) in uas_free_streams() argument
948 struct usb_device *udev = devinfo->udev; in uas_free_streams()
951 eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe); in uas_free_streams()
952 eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe); in uas_free_streams()
953 eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe); in uas_free_streams()
954 usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO); in uas_free_streams()
961 struct uas_dev_info *devinfo; in uas_probe() local
982 devinfo = (struct uas_dev_info *)shost->hostdata; in uas_probe()
983 devinfo->intf = intf; in uas_probe()
984 devinfo->udev = udev; in uas_probe()
985 devinfo->resetting = 0; in uas_probe()
986 devinfo->shutdown = 0; in uas_probe()
987 devinfo->flags = dev_flags; in uas_probe()
988 init_usb_anchor(&devinfo->cmd_urbs); in uas_probe()
989 init_usb_anchor(&devinfo->sense_urbs); in uas_probe()
990 init_usb_anchor(&devinfo->data_urbs); in uas_probe()
991 spin_lock_init(&devinfo->lock); in uas_probe()
992 INIT_WORK(&devinfo->work, uas_do_work); in uas_probe()
994 result = uas_configure_endpoints(devinfo); in uas_probe()
1002 shost->can_queue = devinfo->qdepth - 2; in uas_probe()
1013 uas_free_streams(devinfo); in uas_probe()
1022 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo) in uas_cmnd_list_empty() argument
1027 spin_lock_irqsave(&devinfo->lock, flags); in uas_cmnd_list_empty()
1029 for (i = 0; i < devinfo->qdepth; i++) { in uas_cmnd_list_empty()
1030 if (devinfo->cmnd[i]) { in uas_cmnd_list_empty()
1036 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_cmnd_list_empty()
1046 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo) in uas_wait_for_pending_cmnds() argument
1053 flush_work(&devinfo->work); in uas_wait_for_pending_cmnds()
1055 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000); in uas_wait_for_pending_cmnds()
1059 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500); in uas_wait_for_pending_cmnds()
1065 } while (!uas_cmnd_list_empty(devinfo)); in uas_wait_for_pending_cmnds()
1073 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_pre_reset() local
1076 if (devinfo->shutdown) in uas_pre_reset()
1084 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_pre_reset()
1090 uas_free_streams(devinfo); in uas_pre_reset()
1098 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_post_reset() local
1102 if (devinfo->shutdown) in uas_post_reset()
1105 err = uas_configure_endpoints(devinfo); in uas_post_reset()
1124 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_suspend() local
1126 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_suspend()
1142 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_reset_resume() local
1146 err = uas_configure_endpoints(devinfo); in uas_reset_resume()
1164 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_disconnect() local
1167 spin_lock_irqsave(&devinfo->lock, flags); in uas_disconnect()
1168 devinfo->resetting = 1; in uas_disconnect()
1169 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_disconnect()
1171 cancel_work_sync(&devinfo->work); in uas_disconnect()
1172 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_disconnect()
1173 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_disconnect()
1174 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_disconnect()
1175 uas_zap_pending(devinfo, DID_NO_CONNECT); in uas_disconnect()
1178 uas_free_streams(devinfo); in uas_disconnect()
1192 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_shutdown() local
1197 devinfo->shutdown = 1; in uas_shutdown()
1198 uas_free_streams(devinfo); in uas_shutdown()