Lines Matching defs:devinfo

77 				struct uas_dev_info *devinfo);
80 static void uas_free_streams(struct uas_dev_info *devinfo);
99 struct uas_dev_info *devinfo =
106 spin_lock_irqsave(&devinfo->lock, flags);
108 if (devinfo->resetting)
111 for (i = 0; i < devinfo->qdepth; i++) {
112 if (!devinfo->cmnd[i])
115 cmnd = devinfo->cmnd[i];
125 queue_work(workqueue, &devinfo->work);
128 spin_unlock_irqrestore(&devinfo->lock, flags);
133 struct uas_dev_info *devinfo =
135 struct Scsi_Host *shost = usb_get_intfdata(devinfo->intf);
137 dev_dbg(&devinfo->intf->dev, "starting scan\n");
139 dev_dbg(&devinfo->intf->dev, "scan complete\n");
145 struct uas_dev_info *devinfo = cmnd->device->hostdata;
147 lockdep_assert_held(&devinfo->lock);
149 queue_work(workqueue, &devinfo->work);
152 static void uas_zap_pending(struct uas_dev_info *devinfo, int result)
159 spin_lock_irqsave(&devinfo->lock, flags);
160 for (i = 0; i < devinfo->qdepth; i++) {
161 if (!devinfo->cmnd[i])
164 cmnd = devinfo->cmnd[i];
173 spin_unlock_irqrestore(&devinfo->lock, flags);
247 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
249 lockdep_assert_held(&devinfo->lock);
255 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
301 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
311 spin_lock_irqsave(&devinfo->lock, flags);
313 if (devinfo->resetting)
323 if (idx >= MAX_CMNDS || !devinfo->cmnd[idx]) {
329 cmnd = devinfo->cmnd[idx];
379 spin_unlock_irqrestore(&devinfo->lock, flags);
396 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
401 spin_lock_irqsave(&devinfo->lock, flags);
411 if (devinfo->resetting)
431 spin_unlock_irqrestore(&devinfo->lock, flags);
442 static struct urb *uas_alloc_data_urb(struct uas_dev_info *devinfo, gfp_t gfp,
446 struct usb_device *udev = devinfo->udev;
451 ? devinfo->data_in_pipe : devinfo->data_out_pipe;
457 if (devinfo->use_streams)
465 static struct urb *uas_alloc_sense_urb(struct uas_dev_info *devinfo, gfp_t gfp,
468 struct usb_device *udev = devinfo->udev;
480 usb_fill_bulk_urb(urb, udev, devinfo->status_pipe, iu, sizeof(*iu),
482 if (devinfo->use_streams)
492 static struct urb *uas_alloc_cmd_urb(struct uas_dev_info *devinfo, gfp_t gfp,
495 struct usb_device *udev = devinfo->udev;
520 usb_fill_bulk_urb(urb, udev, devinfo->cmd_pipe, iu, sizeof(*iu) + len,
538 struct uas_dev_info *devinfo = cmnd->device->hostdata;
542 urb = uas_alloc_sense_urb(devinfo, gfp, cmnd);
545 usb_anchor_urb(urb, &devinfo->sense_urbs);
556 struct uas_dev_info *devinfo)
561 lockdep_assert_held(&devinfo->lock);
570 cmdinfo->data_in_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC,
578 usb_anchor_urb(cmdinfo->data_in_urb, &devinfo->data_urbs);
590 cmdinfo->data_out_urb = uas_alloc_data_urb(devinfo, GFP_ATOMIC,
598 usb_anchor_urb(cmdinfo->data_out_urb, &devinfo->data_urbs);
610 cmdinfo->cmd_urb = uas_alloc_cmd_urb(devinfo, GFP_ATOMIC, cmnd);
617 usb_anchor_urb(cmdinfo->cmd_urb, &devinfo->cmd_urbs);
635 struct uas_dev_info *devinfo = sdev->hostdata;
644 if ((devinfo->flags & US_FL_NO_ATA_1X) &&
653 spin_lock_irqsave(&devinfo->lock, flags);
655 if (devinfo->resetting) {
662 for (idx = 0; idx < devinfo->qdepth; idx++) {
663 if (!devinfo->cmnd[idx])
666 if (idx == devinfo->qdepth) {
667 spin_unlock_irqrestore(&devinfo->lock, flags);
689 if (!devinfo->use_streams)
692 err = uas_submit_urbs(cmnd, devinfo);
706 spin_unlock_irqrestore(&devinfo->lock, flags);
712 devinfo->cmnd[idx] = cmnd;
714 spin_unlock_irqrestore(&devinfo->lock, flags);
728 struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
733 spin_lock_irqsave(&devinfo->lock, flags);
741 devinfo->cmnd[cmdinfo->uas_tag - 1] = NULL;
749 spin_unlock_irqrestore(&devinfo->lock, flags);
766 struct uas_dev_info *devinfo = sdev->hostdata;
767 struct usb_device *udev = devinfo->udev;
771 err = usb_lock_device_for_reset(udev, devinfo->intf);
780 spin_lock_irqsave(&devinfo->lock, flags);
781 devinfo->resetting = 1;
782 spin_unlock_irqrestore(&devinfo->lock, flags);
784 usb_kill_anchored_urbs(&devinfo->cmd_urbs);
785 usb_kill_anchored_urbs(&devinfo->sense_urbs);
786 usb_kill_anchored_urbs(&devinfo->data_urbs);
787 uas_zap_pending(devinfo, DID_RESET);
791 spin_lock_irqsave(&devinfo->lock, flags);
792 devinfo->resetting = 0;
793 spin_unlock_irqrestore(&devinfo->lock, flags);
809 struct uas_dev_info *devinfo = (struct uas_dev_info *)
812 if (devinfo->flags & US_FL_NO_REPORT_LUNS)
820 struct uas_dev_info *devinfo =
823 sdev->hostdata = devinfo;
832 if (devinfo->flags & US_FL_MAX_SECTORS_64)
834 else if (devinfo->flags & US_FL_MAX_SECTORS_240)
842 struct uas_dev_info *devinfo = sdev->hostdata;
844 if (devinfo->flags & US_FL_NO_REPORT_OPCODES)
848 if (devinfo->flags & US_FL_BROKEN_FUA)
852 if (devinfo->flags & US_FL_ALWAYS_SYNC) {
859 if (devinfo->flags & US_FL_NO_READ_CAPACITY_16)
863 if (devinfo->flags & US_FL_NO_SAME)
870 if (devinfo->flags & US_FL_FIX_CAPACITY)
876 if (devinfo->flags & US_FL_CAPACITY_HEURISTICS)
895 if (devinfo->flags & US_FL_NO_WP_DETECT)
898 scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
946 static int uas_configure_endpoints(struct uas_dev_info *devinfo)
949 struct usb_device *udev = devinfo->udev;
952 r = uas_find_endpoints(devinfo->intf->cur_altsetting, eps);
956 devinfo->cmd_pipe = usb_sndbulkpipe(udev,
958 devinfo->status_pipe = usb_rcvbulkpipe(udev,
960 devinfo->data_in_pipe = usb_rcvbulkpipe(udev,
962 devinfo->data_out_pipe = usb_sndbulkpipe(udev,
966 devinfo->qdepth = 32;
967 devinfo->use_streams = 0;
969 devinfo->qdepth = usb_alloc_streams(devinfo->intf, eps + 1,
971 if (devinfo->qdepth < 0)
972 return devinfo->qdepth;
973 devinfo->use_streams = 1;
979 static void uas_free_streams(struct uas_dev_info *devinfo)
981 struct usb_device *udev = devinfo->udev;
984 eps[0] = usb_pipe_endpoint(udev, devinfo->status_pipe);
985 eps[1] = usb_pipe_endpoint(udev, devinfo->data_in_pipe);
986 eps[2] = usb_pipe_endpoint(udev, devinfo->data_out_pipe);
987 usb_free_streams(devinfo->intf, eps, 3, GFP_NOIO);
994 struct uas_dev_info *devinfo;
1015 devinfo = (struct uas_dev_info *)shost->hostdata;
1016 devinfo->intf = intf;
1017 devinfo->udev = udev;
1018 devinfo->resetting = 0;
1019 devinfo->shutdown = 0;
1020 devinfo->flags = dev_flags;
1021 init_usb_anchor(&devinfo->cmd_urbs);
1022 init_usb_anchor(&devinfo->sense_urbs);
1023 init_usb_anchor(&devinfo->data_urbs);
1024 spin_lock_init(&devinfo->lock);
1025 INIT_WORK(&devinfo->work, uas_do_work);
1026 INIT_WORK(&devinfo->scan_work, uas_scan_work);
1028 result = uas_configure_endpoints(devinfo);
1036 shost->can_queue = devinfo->qdepth - 2;
1044 schedule_work(&devinfo->scan_work);
1049 uas_free_streams(devinfo);
1058 static int uas_cmnd_list_empty(struct uas_dev_info *devinfo)
1063 spin_lock_irqsave(&devinfo->lock, flags);
1065 for (i = 0; i < devinfo->qdepth; i++) {
1066 if (devinfo->cmnd[i]) {
1072 spin_unlock_irqrestore(&devinfo->lock, flags);
1082 static int uas_wait_for_pending_cmnds(struct uas_dev_info *devinfo)
1089 flush_work(&devinfo->work);
1091 r = usb_wait_anchor_empty_timeout(&devinfo->sense_urbs, 5000);
1095 r = usb_wait_anchor_empty_timeout(&devinfo->data_urbs, 500);
1101 } while (!uas_cmnd_list_empty(devinfo));
1109 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1112 if (devinfo->shutdown)
1120 if (uas_wait_for_pending_cmnds(devinfo) != 0) {
1126 uas_free_streams(devinfo);
1134 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1138 if (devinfo->shutdown)
1141 err = uas_configure_endpoints(devinfo);
1160 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1162 if (uas_wait_for_pending_cmnds(devinfo) != 0) {
1178 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1182 err = uas_configure_endpoints(devinfo);
1200 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1203 spin_lock_irqsave(&devinfo->lock, flags);
1204 devinfo->resetting = 1;
1205 spin_unlock_irqrestore(&devinfo->lock, flags);
1207 cancel_work_sync(&devinfo->work);
1208 usb_kill_anchored_urbs(&devinfo->cmd_urbs);
1209 usb_kill_anchored_urbs(&devinfo->sense_urbs);
1210 usb_kill_anchored_urbs(&devinfo->data_urbs);
1211 uas_zap_pending(devinfo, DID_NO_CONNECT);
1217 cancel_work_sync(&devinfo->scan_work);
1220 uas_free_streams(devinfo);
1234 struct uas_dev_info *devinfo = (struct uas_dev_info *)shost->hostdata;
1239 devinfo->shutdown = 1;
1240 uas_free_streams(devinfo);