Lines Matching refs:devinfo

77 				struct uas_dev_info *devinfo);
80 static void uas_free_streams(struct uas_dev_info *devinfo);
99 struct uas_dev_info *devinfo = in uas_do_work() local
106 spin_lock_irqsave(&devinfo->lock, flags); in uas_do_work()
108 if (devinfo->resetting) in uas_do_work()
111 for (i = 0; i < devinfo->qdepth; i++) { in uas_do_work()
112 if (!devinfo->cmnd[i]) in uas_do_work()
115 cmnd = devinfo->cmnd[i]; in uas_do_work()
125 queue_work(workqueue, &devinfo->work); in uas_do_work()
128 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_do_work()
133 struct uas_dev_info *devinfo = in uas_scan_work() local
135 struct Scsi_Host *shost = usb_get_intfdata(devinfo->intf); in uas_scan_work()
137 dev_dbg(&devinfo->intf->dev, "starting scan\n"); in uas_scan_work()
139 dev_dbg(&devinfo->intf->dev, "scan complete\n"); in uas_scan_work()
146 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_add_work() local
148 lockdep_assert_held(&devinfo->lock); in uas_add_work()
150 queue_work(workqueue, &devinfo->work); in uas_add_work()
153 static void uas_zap_pending(struct uas_dev_info *devinfo, int result) in uas_zap_pending() argument
160 spin_lock_irqsave(&devinfo->lock, flags); in uas_zap_pending()
161 for (i = 0; i < devinfo->qdepth; i++) { in uas_zap_pending()
162 if (!devinfo->cmnd[i]) in uas_zap_pending()
165 cmnd = devinfo->cmnd[i]; in uas_zap_pending()
174 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_zap_pending()
249 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_try_complete() local
251 lockdep_assert_held(&devinfo->lock); in uas_try_complete()
257 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in uas_try_complete()
303 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_stat_cmplt() local
313 spin_lock_irqsave(&devinfo->lock, flags); in uas_stat_cmplt()
315 if (devinfo->resetting) in uas_stat_cmplt()
325 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) { in uas_stat_cmplt()
331 cmnd = devinfo->cmnd[idx]; in uas_stat_cmplt()
381 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_stat_cmplt()
398 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in uas_data_cmplt() local
403 spin_lock_irqsave(&devinfo->lock, flags); in uas_data_cmplt()
413 if (devinfo->resetting) in uas_data_cmplt()
433 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_data_cmplt()
444 static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_data_urb() argument
448 struct usb_device *udev = devinfo->udev; in uas_alloc_data_urb()
453 ? devinfo->data_in_pipe : devinfo->data_out_pipe; in uas_alloc_data_urb()
459 if (devinfo->use_streams) in uas_alloc_data_urb()
467 static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_sense_urb() argument
470 struct usb_device *udev = devinfo->udev; in uas_alloc_sense_urb()
482 usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu), in uas_alloc_sense_urb()
484 if (devinfo->use_streams) in uas_alloc_sense_urb()
494 static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp, in uas_alloc_cmd_urb() argument
497 struct usb_device *udev = devinfo->udev; in uas_alloc_cmd_urb()
522 usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len, in uas_alloc_cmd_urb()
540 struct uas_dev_info *devinfo = cmnd->device->hostdata; in uas_submit_sense_urb() local
544 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd); in uas_submit_sense_urb()
547 usb_anchor_urb(urb, &devinfo->sense_urbs); in uas_submit_sense_urb()
559 struct uas_dev_info *devinfo) in uas_submit_urbs() argument
565 lockdep_assert_held(&devinfo->lock); in uas_submit_urbs()
574 cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC, in uas_submit_urbs()
582 usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs); in uas_submit_urbs()
594 cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC, in uas_submit_urbs()
602 usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs); in uas_submit_urbs()
614 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd); in uas_submit_urbs()
621 usb_anchor_urb(cmdinfo->cmd_urb, &devinfo->cmd_urbs); in uas_submit_urbs()
639 struct uas_dev_info *devinfo = sdev->hostdata; in uas_queuecommand_lck() local
650 if ((devinfo->flags & US_FL_NO_ATA_1X) && in uas_queuecommand_lck()
659 spin_lock_irqsave(&devinfo->lock, flags); in uas_queuecommand_lck()
661 if (devinfo->resetting) { in uas_queuecommand_lck()
668 for (idx = 0; idx < devinfo->qdepth; idx++) { in uas_queuecommand_lck()
669 if (!devinfo->cmnd[idx]) in uas_queuecommand_lck()
672 if (idx == devinfo->qdepth) { in uas_queuecommand_lck()
673 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
695 if (!devinfo->use_streams) in uas_queuecommand_lck()
698 err = uas_submit_urbs(cmnd, devinfo); in uas_queuecommand_lck()
712 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
718 devinfo->cmnd[idx] = cmnd; in uas_queuecommand_lck()
720 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_queuecommand_lck()
734 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata; in DEF_SCSI_QCMD() local
739 spin_lock_irqsave(&devinfo->lock, flags); in DEF_SCSI_QCMD()
747 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL; in DEF_SCSI_QCMD()
755 spin_unlock_irqrestore(&devinfo->lock, flags); in DEF_SCSI_QCMD()
772 struct uas_dev_info *devinfo = sdev->hostdata; in uas_eh_device_reset_handler() local
773 struct usb_device *udev = devinfo->udev; in uas_eh_device_reset_handler()
777 err = usb_lock_device_for_reset(udev, devinfo->intf); in uas_eh_device_reset_handler()
786 spin_lock_irqsave(&devinfo->lock, flags); in uas_eh_device_reset_handler()
787 devinfo->resetting = 1; in uas_eh_device_reset_handler()
788 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_eh_device_reset_handler()
790 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_eh_device_reset_handler()
791 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_eh_device_reset_handler()
792 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_eh_device_reset_handler()
793 uas_zap_pending(devinfo, DID_RESET); in uas_eh_device_reset_handler()
797 spin_lock_irqsave(&devinfo->lock, flags); in uas_eh_device_reset_handler()
798 devinfo->resetting = 0; in uas_eh_device_reset_handler()
799 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_eh_device_reset_handler()
815 struct uas_dev_info *devinfo = (struct uas_dev_info *) in uas_target_alloc() local
818 if (devinfo->flags & US_FL_NO_REPORT_LUNS) in uas_target_alloc()
826 struct uas_dev_info *devinfo = in uas_slave_alloc() local
829 sdev->hostdata = devinfo; in uas_slave_alloc()
838 if (devinfo->flags & US_FL_MAX_SECTORS_64) in uas_slave_alloc()
840 else if (devinfo->flags & US_FL_MAX_SECTORS_240) in uas_slave_alloc()
848 struct uas_dev_info *devinfo = sdev->hostdata; in uas_slave_configure() local
850 if (devinfo->flags & US_FL_NO_REPORT_OPCODES) in uas_slave_configure()
854 if (devinfo->flags & US_FL_BROKEN_FUA) in uas_slave_configure()
858 if (devinfo->flags & US_FL_ALWAYS_SYNC) { in uas_slave_configure()
865 if (devinfo->flags & US_FL_NO_READ_CAPACITY_16) in uas_slave_configure()
869 if (devinfo->flags & US_FL_NO_SAME) in uas_slave_configure()
876 if (devinfo->flags & US_FL_FIX_CAPACITY) in uas_slave_configure()
882 if (devinfo->flags & US_FL_CAPACITY_HEURISTICS) in uas_slave_configure()
894 if (devinfo->flags & US_FL_NO_WP_DETECT) in uas_slave_configure()
897 scsi_change_queue_depth(sdev, devinfo->qdepth - 2); in uas_slave_configure()
944 static int uas_configure_endpoints(struct uas_dev_info *devinfo) in uas_configure_endpoints() argument
947 struct usb_device *udev = devinfo->udev; in uas_configure_endpoints()
950 r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps); in uas_configure_endpoints()
954 devinfo->cmd_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
956 devinfo->status_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
958 devinfo->data_in_pipe = usb_rcvbulkpipe(udev, in uas_configure_endpoints()
960 devinfo->data_out_pipe = usb_sndbulkpipe(udev, in uas_configure_endpoints()
964 devinfo->qdepth = 32; in uas_configure_endpoints()
965 devinfo->use_streams = 0; in uas_configure_endpoints()
967 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1, in uas_configure_endpoints()
969 if (devinfo->qdepth < 0) in uas_configure_endpoints()
970 return devinfo->qdepth; in uas_configure_endpoints()
971 devinfo->use_streams = 1; in uas_configure_endpoints()
977 static void uas_free_streams(struct uas_dev_info *devinfo) in uas_free_streams() argument
979 struct usb_device *udev = devinfo->udev; in uas_free_streams()
982 eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe); in uas_free_streams()
983 eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe); in uas_free_streams()
984 eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe); in uas_free_streams()
985 usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO); in uas_free_streams()
992 struct uas_dev_info *devinfo; in uas_probe() local
1013 devinfo = (struct uas_dev_info *)shost->hostdata; in uas_probe()
1014 devinfo->intf = intf; in uas_probe()
1015 devinfo->udev = udev; in uas_probe()
1016 devinfo->resetting = 0; in uas_probe()
1017 devinfo->shutdown = 0; in uas_probe()
1018 devinfo->flags = dev_flags; in uas_probe()
1019 init_usb_anchor(&devinfo->cmd_urbs); in uas_probe()
1020 init_usb_anchor(&devinfo->sense_urbs); in uas_probe()
1021 init_usb_anchor(&devinfo->data_urbs); in uas_probe()
1022 spin_lock_init(&devinfo->lock); in uas_probe()
1023 INIT_WORK(&devinfo->work, uas_do_work); in uas_probe()
1024 INIT_WORK(&devinfo->scan_work, uas_scan_work); in uas_probe()
1026 result = uas_configure_endpoints(devinfo); in uas_probe()
1034 shost->can_queue = devinfo->qdepth - 2; in uas_probe()
1042 schedule_work(&devinfo->scan_work); in uas_probe()
1047 uas_free_streams(devinfo); in uas_probe()
1056 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo) in uas_cmnd_list_empty() argument
1061 spin_lock_irqsave(&devinfo->lock, flags); in uas_cmnd_list_empty()
1063 for (i = 0; i < devinfo->qdepth; i++) { in uas_cmnd_list_empty()
1064 if (devinfo->cmnd[i]) { in uas_cmnd_list_empty()
1070 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_cmnd_list_empty()
1080 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo) in uas_wait_for_pending_cmnds() argument
1087 flush_work(&devinfo->work); in uas_wait_for_pending_cmnds()
1089 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000); in uas_wait_for_pending_cmnds()
1093 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500); in uas_wait_for_pending_cmnds()
1099 } while (!uas_cmnd_list_empty(devinfo)); in uas_wait_for_pending_cmnds()
1107 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_pre_reset() local
1110 if (devinfo->shutdown) in uas_pre_reset()
1118 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_pre_reset()
1124 uas_free_streams(devinfo); in uas_pre_reset()
1132 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_post_reset() local
1136 if (devinfo->shutdown) in uas_post_reset()
1139 err = uas_configure_endpoints(devinfo); in uas_post_reset()
1158 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_suspend() local
1160 if (uas_wait_for_pending_cmnds(devinfo) != 0) { in uas_suspend()
1176 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_reset_resume() local
1180 err = uas_configure_endpoints(devinfo); in uas_reset_resume()
1198 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_disconnect() local
1201 spin_lock_irqsave(&devinfo->lock, flags); in uas_disconnect()
1202 devinfo->resetting = 1; in uas_disconnect()
1203 spin_unlock_irqrestore(&devinfo->lock, flags); in uas_disconnect()
1205 cancel_work_sync(&devinfo->work); in uas_disconnect()
1206 usb_kill_anchored_urbs(&devinfo->cmd_urbs); in uas_disconnect()
1207 usb_kill_anchored_urbs(&devinfo->sense_urbs); in uas_disconnect()
1208 usb_kill_anchored_urbs(&devinfo->data_urbs); in uas_disconnect()
1209 uas_zap_pending(devinfo, DID_NO_CONNECT); in uas_disconnect()
1215 cancel_work_sync(&devinfo->scan_work); in uas_disconnect()
1218 uas_free_streams(devinfo); in uas_disconnect()
1232 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata; in uas_shutdown() local
1237 devinfo->shutdown = 1; in uas_shutdown()
1238 uas_free_streams(devinfo); in uas_shutdown()