Lines Matching refs:us

171 	struct us_data *us = usb_get_intfdata(iface);
174 mutex_lock(&us->dev_mutex);
176 if (us->suspend_resume_hook)
177 (us->suspend_resume_hook)(us, US_SUSPEND);
184 mutex_unlock(&us->dev_mutex);
191 struct us_data *us = usb_get_intfdata(iface);
193 mutex_lock(&us->dev_mutex);
195 if (us->suspend_resume_hook)
196 (us->suspend_resume_hook)(us, US_RESUME);
198 mutex_unlock(&us->dev_mutex);
205 struct us_data *us = usb_get_intfdata(iface);
208 usb_stor_report_bus_reset(us);
227 struct us_data *us = usb_get_intfdata(iface);
230 mutex_lock(&us->dev_mutex);
237 struct us_data *us = usb_get_intfdata(iface);
240 usb_stor_report_bus_reset(us);
247 mutex_unlock(&us->dev_mutex);
261 void fill_inquiry_response(struct us_data *us, unsigned char *data,
280 u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice);
283 n = strlen(us->unusual_dev->vendorName);
284 memcpy(data+8, us->unusual_dev->vendorName, min(8, n));
285 n = strlen(us->unusual_dev->productName);
286 memcpy(data+16, us->unusual_dev->productName, min(16, n));
294 usb_stor_set_xfer_buf(data, data_len, us->srb);
300 struct us_data *us = (struct us_data *)__us;
301 struct Scsi_Host *host = us_to_host(us);
305 usb_stor_dbg(us, "*** thread sleeping\n");
306 if (wait_for_completion_interruptible(&us->cmnd_ready))
309 usb_stor_dbg(us, "*** thread awakened\n");
312 mutex_lock(&(us->dev_mutex));
318 srb = us->srb;
321 mutex_unlock(&us->dev_mutex);
322 usb_stor_dbg(us, "-- exiting\n");
327 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
339 usb_stor_dbg(us, "UNKNOWN data direction\n");
348 !(us->fflags & US_FL_SCM_MULT_TARG)) {
349 usb_stor_dbg(us, "Bad target number (%d:%llu)\n",
355 else if (srb->device->lun > us->max_lun) {
356 usb_stor_dbg(us, "Bad LUN (%d:%llu)\n",
363 * Handle those devices which need us to fake
367 (us->fflags & US_FL_FIX_INQUIRY)) {
372 usb_stor_dbg(us, "Faking INQUIRY command\n");
373 fill_inquiry_response(us, data_ptr, 36);
379 US_DEBUG(usb_stor_show_command(us, srb));
380 us->proto_handler(srb, us);
381 usb_mark_last_busy(us->pusb_dev);
390 usb_stor_dbg(us, "scsi command aborted\n");
401 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
402 complete(&(us->notify));
405 clear_bit(US_FLIDX_ABORTING, &us->dflags);
406 clear_bit(US_FLIDX_TIMED_OUT, &us->dflags);
410 us->srb = NULL;
414 mutex_unlock(&us->dev_mutex);
418 usb_stor_dbg(us, "scsi cmd done, result=0x%x\n",
440 static int associate_dev(struct us_data *us, struct usb_interface *intf)
443 us->pusb_dev = interface_to_usbdev(intf);
444 us->pusb_intf = intf;
445 us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
446 usb_stor_dbg(us, "Vendor: 0x%04x, Product: 0x%04x, Revision: 0x%04x\n",
447 le16_to_cpu(us->pusb_dev->descriptor.idVendor),
448 le16_to_cpu(us->pusb_dev->descriptor.idProduct),
449 le16_to_cpu(us->pusb_dev->descriptor.bcdDevice));
450 usb_stor_dbg(us, "Interface Subclass: 0x%02x, Protocol: 0x%02x\n",
455 usb_set_intfdata(intf, us);
458 us->cr = kmalloc(sizeof(*us->cr), GFP_KERNEL);
459 if (!us->cr)
462 us->iobuf = usb_alloc_coherent(us->pusb_dev, US_IOBUF_SIZE,
463 GFP_KERNEL, &us->iobuf_dma);
464 if (!us->iobuf) {
465 usb_stor_dbg(us, "I/O buffer allocation failed\n");
588 static int get_device_info(struct us_data *us, const struct usb_device_id *id,
591 struct usb_device *dev = us->pusb_dev;
593 &us->pusb_intf->cur_altsetting->desc;
594 struct device *pdev = &us->pusb_intf->dev;
597 us->unusual_dev = unusual_dev;
598 us->subclass = (unusual_dev->useProtocol == USB_SC_DEVICE) ?
601 us->protocol = (unusual_dev->useTransport == USB_PR_DEVICE) ?
604 us->fflags = id->driver_info;
605 usb_stor_adjust_quirks(us->pusb_dev, &us->fflags);
607 if (us->fflags & US_FL_IGNORE_DEVICE) {
617 us->fflags &= ~US_FL_GO_SLOW;
619 if (us->fflags)
623 us->fflags);
628 * reports from users that will help us remove unneeded entries
640 us->subclass == idesc->bInterfaceSubClass)
643 us->protocol == idesc->bInterfaceProtocol)
645 if (msg >= 0 && !(us->fflags & US_FL_NEED_OVERRIDE))
666 static void get_transport(struct us_data *us)
668 switch (us->protocol) {
670 us->transport_name = "Control/Bulk";
671 us->transport = usb_stor_CB_transport;
672 us->transport_reset = usb_stor_CB_reset;
673 us->max_lun = 7;
677 us->transport_name = "Control/Bulk/Interrupt";
678 us->transport = usb_stor_CB_transport;
679 us->transport_reset = usb_stor_CB_reset;
680 us->max_lun = 7;
684 us->transport_name = "Bulk";
685 us->transport = usb_stor_Bulk_transport;
686 us->transport_reset = usb_stor_Bulk_reset;
692 static void get_protocol(struct us_data *us)
694 switch (us->subclass) {
696 us->protocol_name = "Reduced Block Commands (RBC)";
697 us->proto_handler = usb_stor_transparent_scsi_command;
701 us->protocol_name = "8020i";
702 us->proto_handler = usb_stor_pad12_command;
703 us->max_lun = 0;
707 us->protocol_name = "QIC-157";
708 us->proto_handler = usb_stor_pad12_command;
709 us->max_lun = 0;
713 us->protocol_name = "8070i";
714 us->proto_handler = usb_stor_pad12_command;
715 us->max_lun = 0;
719 us->protocol_name = "Transparent SCSI";
720 us->proto_handler = usb_stor_transparent_scsi_command;
724 us->protocol_name = "Uniform Floppy Interface (UFI)";
725 us->proto_handler = usb_stor_ufi_command;
731 static int get_pipes(struct us_data *us)
733 struct usb_host_interface *alt = us->pusb_intf->cur_altsetting;
747 usb_stor_dbg(us, "bulk endpoints not found\n");
752 if (res && us->protocol == USB_PR_CBI) {
753 usb_stor_dbg(us, "interrupt endpoint not found\n");
758 us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0);
759 us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0);
760 us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev,
762 us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev,
765 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
767 us->ep_bInterval = ep_int->bInterval;
773 static int usb_stor_acquire_resources(struct us_data *us)
778 us->current_urb = usb_alloc_urb(0, GFP_KERNEL);
779 if (!us->current_urb)
786 if (us->unusual_dev->initFunction) {
787 p = us->unusual_dev->initFunction(us);
793 th = kthread_run(usb_stor_control_thread, us, "usb-storage");
795 dev_warn(&us->pusb_intf->dev,
799 us->ctl_thread = th;
805 static void usb_stor_release_resources(struct us_data *us)
812 usb_stor_dbg(us, "-- sending exit command to thread\n");
813 complete(&us->cmnd_ready);
814 if (us->ctl_thread)
815 kthread_stop(us->ctl_thread);
818 if (us->extra_destructor) {
819 usb_stor_dbg(us, "-- calling extra_destructor()\n");
820 us->extra_destructor(us->extra);
824 kfree(us->extra);
825 usb_free_urb(us->current_urb);
829 static void dissociate_dev(struct us_data *us)
832 kfree(us->cr);
833 usb_free_coherent(us->pusb_dev, US_IOBUF_SIZE, us->iobuf, us->iobuf_dma);
836 usb_set_intfdata(us->pusb_intf, NULL);
843 static void quiesce_and_remove_host(struct us_data *us)
845 struct Scsi_Host *host = us_to_host(us);
848 if (us->pusb_dev->state == USB_STATE_NOTATTACHED) {
849 set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
850 wake_up(&us->delay_wait);
857 cancel_delayed_work_sync(&us->scan_dwork);
860 if (test_bit(US_FLIDX_SCAN_PENDING, &us->dflags))
861 usb_autopm_put_interface_no_suspend(us->pusb_intf);
874 set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
876 wake_up(&us->delay_wait);
880 static void release_everything(struct us_data *us)
882 usb_stor_release_resources(us);
883 dissociate_dev(us);
887 * (and "us" along with it) when the refcount becomes 0.
889 scsi_host_put(us_to_host(us));
895 struct us_data *us = container_of(work, struct us_data,
897 struct device *dev = &us->pusb_intf->dev;
902 if (us->protocol == USB_PR_BULK &&
903 !(us->fflags & US_FL_SINGLE_LUN) &&
904 !(us->fflags & US_FL_SCM_MULT_TARG)) {
905 mutex_lock(&us->dev_mutex);
906 us->max_lun = usb_stor_Bulk_max_lun(us);
912 if (us->max_lun >= 8)
913 us_to_host(us)->max_lun = us->max_lun+1;
914 mutex_unlock(&us->dev_mutex);
916 scsi_scan_host(us_to_host(us));
921 usb_autopm_put_interface(us->pusb_intf);
922 clear_bit(US_FLIDX_SCAN_PENDING, &us->dflags);
943 struct us_data *us;
952 host = scsi_host_alloc(sht, sizeof(*us));
963 *pus = us = host_to_us(host);
964 mutex_init(&(us->dev_mutex));
965 us_set_lock_class(&us->dev_mutex, intf);
966 init_completion(&us->cmnd_ready);
967 init_completion(&(us->notify));
968 init_waitqueue_head(&us->delay_wait);
969 INIT_DELAYED_WORK(&us->scan_dwork, usb_stor_scan_dwork);
972 result = associate_dev(us, intf);
977 result = get_device_info(us, id, unusual_dev);
982 get_transport(us);
983 get_protocol(us);
992 usb_stor_dbg(us, "storage_probe() failed\n");
993 release_everything(us);
999 int usb_stor_probe2(struct us_data *us)
1002 struct device *dev = &us->pusb_intf->dev;
1005 if (!us->transport || !us->proto_handler) {
1009 usb_stor_dbg(us, "Transport: %s\n", us->transport_name);
1010 usb_stor_dbg(us, "Protocol: %s\n", us->protocol_name);
1012 if (us->fflags & US_FL_SCM_MULT_TARG) {
1017 us->max_lun = 7;
1019 us_to_host(us)->this_id = 7;
1023 us_to_host(us)->max_id = 1;
1029 if (us->transport == usb_stor_Bulk_transport)
1030 us_to_host(us)->no_scsi2_lun_in_cdb = 1;
1034 if (us->fflags & US_FL_SINGLE_LUN)
1035 us->max_lun = 0;
1038 result = get_pipes(us);
1046 if (us->fflags & US_FL_INITIAL_READ10)
1047 set_bit(US_FLIDX_REDO_READ10, &us->dflags);
1050 result = usb_stor_acquire_resources(us);
1053 usb_autopm_get_interface_no_resume(us->pusb_intf);
1054 snprintf(us->scsi_name, sizeof(us->scsi_name), "usb-storage %s",
1055 dev_name(&us->pusb_intf->dev));
1056 result = scsi_add_host(us_to_host(us), dev);
1064 set_bit(US_FLIDX_SCAN_PENDING, &us->dflags);
1068 queue_delayed_work(system_freezable_wq, &us->scan_dwork,
1074 usb_autopm_put_interface_no_suspend(us->pusb_intf);
1076 usb_stor_dbg(us, "storage_probe() failed\n");
1077 release_everything(us);
1085 struct us_data *us = usb_get_intfdata(intf);
1087 quiesce_and_remove_host(us);
1088 release_everything(us);
1099 struct us_data *us;
1134 result = usb_stor_probe1(&us, intf, id, unusual_dev,
1141 result = usb_stor_probe2(us);