0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 #ifdef CONFIG_USB_STORAGE_DEBUG
0034 #define DEBUG
0035 #endif
0036
0037 #include <linux/sched.h>
0038 #include <linux/errno.h>
0039 #include <linux/module.h>
0040 #include <linux/slab.h>
0041 #include <linux/kthread.h>
0042 #include <linux/mutex.h>
0043 #include <linux/utsname.h>
0044
0045 #include <scsi/scsi.h>
0046 #include <scsi/scsi_cmnd.h>
0047 #include <scsi/scsi_device.h>
0048
0049 #include "usb.h"
0050 #include "scsiglue.h"
0051 #include "transport.h"
0052 #include "protocol.h"
0053 #include "debug.h"
0054 #include "initializers.h"
0055
0056 #include "sierra_ms.h"
0057 #include "option_ms.h"
0058
0059 #if IS_ENABLED(CONFIG_USB_UAS)
0060 #include "uas-detect.h"
0061 #endif
0062
0063 #define DRV_NAME "usb-storage"
0064
0065
0066 MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
0067 MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
0068 MODULE_LICENSE("GPL");
0069
0070 static unsigned int delay_use = 1;
0071 module_param(delay_use, uint, S_IRUGO | S_IWUSR);
0072 MODULE_PARM_DESC(delay_use, "seconds to delay before using a new device");
0073
0074 static char quirks[128];
0075 module_param_string(quirks, quirks, sizeof(quirks), S_IRUGO | S_IWUSR);
0076 MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
0095 vendor_name, product_name, use_protocol, use_transport, \
0096 init_function, Flags) \
0097 { \
0098 .vendorName = vendor_name, \
0099 .productName = product_name, \
0100 .useProtocol = use_protocol, \
0101 .useTransport = use_transport, \
0102 .initFunction = init_function, \
0103 }
0104
0105 #define COMPLIANT_DEV UNUSUAL_DEV
0106
0107 #define USUAL_DEV(use_protocol, use_transport) \
0108 { \
0109 .useProtocol = use_protocol, \
0110 .useTransport = use_transport, \
0111 }
0112
0113 #define UNUSUAL_VENDOR_INTF(idVendor, cl, sc, pr, \
0114 vendor_name, product_name, use_protocol, use_transport, \
0115 init_function, Flags) \
0116 { \
0117 .vendorName = vendor_name, \
0118 .productName = product_name, \
0119 .useProtocol = use_protocol, \
0120 .useTransport = use_transport, \
0121 .initFunction = init_function, \
0122 }
0123
0124 static const struct us_unusual_dev us_unusual_dev_list[] = {
0125 # include "unusual_devs.h"
0126 { }
0127 };
0128
0129 static const struct us_unusual_dev for_dynamic_ids =
0130 USUAL_DEV(USB_SC_SCSI, USB_PR_BULK);
0131
0132 #undef UNUSUAL_DEV
0133 #undef COMPLIANT_DEV
0134 #undef USUAL_DEV
0135 #undef UNUSUAL_VENDOR_INTF
0136
0137 #ifdef CONFIG_LOCKDEP
0138
0139 static struct lock_class_key us_interface_key[USB_MAXINTERFACES];
0140
0141 static void us_set_lock_class(struct mutex *mutex,
0142 struct usb_interface *intf)
0143 {
0144 struct usb_device *udev = interface_to_usbdev(intf);
0145 struct usb_host_config *config = udev->actconfig;
0146 int i;
0147
0148 for (i = 0; i < config->desc.bNumInterfaces; i++) {
0149 if (config->interface[i] == intf)
0150 break;
0151 }
0152
0153 BUG_ON(i == config->desc.bNumInterfaces);
0154
0155 lockdep_set_class(mutex, &us_interface_key[i]);
0156 }
0157
0158 #else
0159
0160 static void us_set_lock_class(struct mutex *mutex,
0161 struct usb_interface *intf)
0162 {
0163 }
0164
0165 #endif
0166
0167 #ifdef CONFIG_PM
0168
0169 int usb_stor_suspend(struct usb_interface *iface, pm_message_t message)
0170 {
0171 struct us_data *us = usb_get_intfdata(iface);
0172
0173
0174 mutex_lock(&us->dev_mutex);
0175
0176 if (us->suspend_resume_hook)
0177 (us->suspend_resume_hook)(us, US_SUSPEND);
0178
0179
0180
0181
0182
0183
0184 mutex_unlock(&us->dev_mutex);
0185 return 0;
0186 }
0187 EXPORT_SYMBOL_GPL(usb_stor_suspend);
0188
0189 int usb_stor_resume(struct usb_interface *iface)
0190 {
0191 struct us_data *us = usb_get_intfdata(iface);
0192
0193 mutex_lock(&us->dev_mutex);
0194
0195 if (us->suspend_resume_hook)
0196 (us->suspend_resume_hook)(us, US_RESUME);
0197
0198 mutex_unlock(&us->dev_mutex);
0199 return 0;
0200 }
0201 EXPORT_SYMBOL_GPL(usb_stor_resume);
0202
0203 int usb_stor_reset_resume(struct usb_interface *iface)
0204 {
0205 struct us_data *us = usb_get_intfdata(iface);
0206
0207
0208 usb_stor_report_bus_reset(us);
0209
0210
0211
0212
0213
0214 return 0;
0215 }
0216 EXPORT_SYMBOL_GPL(usb_stor_reset_resume);
0217
0218 #endif
0219
0220
0221
0222
0223
0224
0225 int usb_stor_pre_reset(struct usb_interface *iface)
0226 {
0227 struct us_data *us = usb_get_intfdata(iface);
0228
0229
0230 mutex_lock(&us->dev_mutex);
0231 return 0;
0232 }
0233 EXPORT_SYMBOL_GPL(usb_stor_pre_reset);
0234
0235 int usb_stor_post_reset(struct usb_interface *iface)
0236 {
0237 struct us_data *us = usb_get_intfdata(iface);
0238
0239
0240 usb_stor_report_bus_reset(us);
0241
0242
0243
0244
0245
0246
0247 mutex_unlock(&us->dev_mutex);
0248 return 0;
0249 }
0250 EXPORT_SYMBOL_GPL(usb_stor_post_reset);
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261 void fill_inquiry_response(struct us_data *us, unsigned char *data,
0262 unsigned int data_len)
0263 {
0264 if (data_len < 36)
0265 return;
0266
0267 memset(data+8, ' ', 28);
0268 if (data[0]&0x20) {
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279 } else {
0280 u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice);
0281 int n;
0282
0283 n = strlen(us->unusual_dev->vendorName);
0284 memcpy(data+8, us->unusual_dev->vendorName, min(8, n));
0285 n = strlen(us->unusual_dev->productName);
0286 memcpy(data+16, us->unusual_dev->productName, min(16, n));
0287
0288 data[32] = 0x30 + ((bcdDevice>>12) & 0x0F);
0289 data[33] = 0x30 + ((bcdDevice>>8) & 0x0F);
0290 data[34] = 0x30 + ((bcdDevice>>4) & 0x0F);
0291 data[35] = 0x30 + ((bcdDevice) & 0x0F);
0292 }
0293
0294 usb_stor_set_xfer_buf(data, data_len, us->srb);
0295 }
0296 EXPORT_SYMBOL_GPL(fill_inquiry_response);
0297
0298 static int usb_stor_control_thread(void * __us)
0299 {
0300 struct us_data *us = (struct us_data *)__us;
0301 struct Scsi_Host *host = us_to_host(us);
0302 struct scsi_cmnd *srb;
0303
0304 for (;;) {
0305 usb_stor_dbg(us, "*** thread sleeping\n");
0306 if (wait_for_completion_interruptible(&us->cmnd_ready))
0307 break;
0308
0309 usb_stor_dbg(us, "*** thread awakened\n");
0310
0311
0312 mutex_lock(&(us->dev_mutex));
0313
0314
0315 scsi_lock(host);
0316
0317
0318 srb = us->srb;
0319 if (srb == NULL) {
0320 scsi_unlock(host);
0321 mutex_unlock(&us->dev_mutex);
0322 usb_stor_dbg(us, "-- exiting\n");
0323 break;
0324 }
0325
0326
0327 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
0328 srb->result = DID_ABORT << 16;
0329 goto SkipForAbort;
0330 }
0331
0332 scsi_unlock(host);
0333
0334
0335
0336
0337
0338 if (srb->sc_data_direction == DMA_BIDIRECTIONAL) {
0339 usb_stor_dbg(us, "UNKNOWN data direction\n");
0340 srb->result = DID_ERROR << 16;
0341 }
0342
0343
0344
0345
0346
0347 else if (srb->device->id &&
0348 !(us->fflags & US_FL_SCM_MULT_TARG)) {
0349 usb_stor_dbg(us, "Bad target number (%d:%llu)\n",
0350 srb->device->id,
0351 srb->device->lun);
0352 srb->result = DID_BAD_TARGET << 16;
0353 }
0354
0355 else if (srb->device->lun > us->max_lun) {
0356 usb_stor_dbg(us, "Bad LUN (%d:%llu)\n",
0357 srb->device->id,
0358 srb->device->lun);
0359 srb->result = DID_BAD_TARGET << 16;
0360 }
0361
0362
0363
0364
0365
0366 else if ((srb->cmnd[0] == INQUIRY) &&
0367 (us->fflags & US_FL_FIX_INQUIRY)) {
0368 unsigned char data_ptr[36] = {
0369 0x00, 0x80, 0x02, 0x02,
0370 0x1F, 0x00, 0x00, 0x00};
0371
0372 usb_stor_dbg(us, "Faking INQUIRY command\n");
0373 fill_inquiry_response(us, data_ptr, 36);
0374 srb->result = SAM_STAT_GOOD;
0375 }
0376
0377
0378 else {
0379 US_DEBUG(usb_stor_show_command(us, srb));
0380 us->proto_handler(srb, us);
0381 usb_mark_last_busy(us->pusb_dev);
0382 }
0383
0384
0385 scsi_lock(host);
0386
0387
0388 if (srb->result == DID_ABORT << 16) {
0389 SkipForAbort:
0390 usb_stor_dbg(us, "scsi command aborted\n");
0391 srb = NULL;
0392 }
0393
0394
0395
0396
0397
0398
0399
0400
0401 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
0402 complete(&(us->notify));
0403
0404
0405 clear_bit(US_FLIDX_ABORTING, &us->dflags);
0406 clear_bit(US_FLIDX_TIMED_OUT, &us->dflags);
0407 }
0408
0409
0410 us->srb = NULL;
0411 scsi_unlock(host);
0412
0413
0414 mutex_unlock(&us->dev_mutex);
0415
0416
0417 if (srb) {
0418 usb_stor_dbg(us, "scsi cmd done, result=0x%x\n",
0419 srb->result);
0420 scsi_done_direct(srb);
0421 }
0422 }
0423
0424
0425 for (;;) {
0426 set_current_state(TASK_INTERRUPTIBLE);
0427 if (kthread_should_stop())
0428 break;
0429 schedule();
0430 }
0431 __set_current_state(TASK_RUNNING);
0432 return 0;
0433 }
0434
0435
0436
0437
0438
0439
0440 static int associate_dev(struct us_data *us, struct usb_interface *intf)
0441 {
0442
0443 us->pusb_dev = interface_to_usbdev(intf);
0444 us->pusb_intf = intf;
0445 us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
0446 usb_stor_dbg(us, "Vendor: 0x%04x, Product: 0x%04x, Revision: 0x%04x\n",
0447 le16_to_cpu(us->pusb_dev->descriptor.idVendor),
0448 le16_to_cpu(us->pusb_dev->descriptor.idProduct),
0449 le16_to_cpu(us->pusb_dev->descriptor.bcdDevice));
0450 usb_stor_dbg(us, "Interface Subclass: 0x%02x, Protocol: 0x%02x\n",
0451 intf->cur_altsetting->desc.bInterfaceSubClass,
0452 intf->cur_altsetting->desc.bInterfaceProtocol);
0453
0454
0455 usb_set_intfdata(intf, us);
0456
0457
0458 us->cr = kmalloc(sizeof(*us->cr), GFP_KERNEL);
0459 if (!us->cr)
0460 return -ENOMEM;
0461
0462 us->iobuf = usb_alloc_coherent(us->pusb_dev, US_IOBUF_SIZE,
0463 GFP_KERNEL, &us->iobuf_dma);
0464 if (!us->iobuf) {
0465 usb_stor_dbg(us, "I/O buffer allocation failed\n");
0466 return -ENOMEM;
0467 }
0468 return 0;
0469 }
0470
0471
0472 #define TOLOWER(x) ((x) | 0x20)
0473
0474
0475 void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
0476 {
0477 char *p;
0478 u16 vid = le16_to_cpu(udev->descriptor.idVendor);
0479 u16 pid = le16_to_cpu(udev->descriptor.idProduct);
0480 unsigned f = 0;
0481 unsigned int mask = (US_FL_SANE_SENSE | US_FL_BAD_SENSE |
0482 US_FL_FIX_CAPACITY | US_FL_IGNORE_UAS |
0483 US_FL_CAPACITY_HEURISTICS | US_FL_IGNORE_DEVICE |
0484 US_FL_NOT_LOCKABLE | US_FL_MAX_SECTORS_64 |
0485 US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE |
0486 US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT |
0487 US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 |
0488 US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE |
0489 US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES |
0490 US_FL_MAX_SECTORS_240 | US_FL_NO_REPORT_LUNS |
0491 US_FL_ALWAYS_SYNC);
0492
0493 p = quirks;
0494 while (*p) {
0495
0496 if (vid == simple_strtoul(p, &p, 16) &&
0497 *p == ':' &&
0498 pid == simple_strtoul(p+1, &p, 16) &&
0499 *p == ':')
0500 break;
0501
0502
0503 while (*p) {
0504 if (*p++ == ',')
0505 break;
0506 }
0507 }
0508 if (!*p)
0509 return;
0510
0511
0512 while (*++p && *p != ',') {
0513 switch (TOLOWER(*p)) {
0514 case 'a':
0515 f |= US_FL_SANE_SENSE;
0516 break;
0517 case 'b':
0518 f |= US_FL_BAD_SENSE;
0519 break;
0520 case 'c':
0521 f |= US_FL_FIX_CAPACITY;
0522 break;
0523 case 'd':
0524 f |= US_FL_NO_READ_DISC_INFO;
0525 break;
0526 case 'e':
0527 f |= US_FL_NO_READ_CAPACITY_16;
0528 break;
0529 case 'f':
0530 f |= US_FL_NO_REPORT_OPCODES;
0531 break;
0532 case 'g':
0533 f |= US_FL_MAX_SECTORS_240;
0534 break;
0535 case 'h':
0536 f |= US_FL_CAPACITY_HEURISTICS;
0537 break;
0538 case 'i':
0539 f |= US_FL_IGNORE_DEVICE;
0540 break;
0541 case 'j':
0542 f |= US_FL_NO_REPORT_LUNS;
0543 break;
0544 case 'k':
0545 f |= US_FL_NO_SAME;
0546 break;
0547 case 'l':
0548 f |= US_FL_NOT_LOCKABLE;
0549 break;
0550 case 'm':
0551 f |= US_FL_MAX_SECTORS_64;
0552 break;
0553 case 'n':
0554 f |= US_FL_INITIAL_READ10;
0555 break;
0556 case 'o':
0557 f |= US_FL_CAPACITY_OK;
0558 break;
0559 case 'p':
0560 f |= US_FL_WRITE_CACHE;
0561 break;
0562 case 'r':
0563 f |= US_FL_IGNORE_RESIDUE;
0564 break;
0565 case 's':
0566 f |= US_FL_SINGLE_LUN;
0567 break;
0568 case 't':
0569 f |= US_FL_NO_ATA_1X;
0570 break;
0571 case 'u':
0572 f |= US_FL_IGNORE_UAS;
0573 break;
0574 case 'w':
0575 f |= US_FL_NO_WP_DETECT;
0576 break;
0577 case 'y':
0578 f |= US_FL_ALWAYS_SYNC;
0579 break;
0580
0581 }
0582 }
0583 *fflags = (*fflags & ~mask) | f;
0584 }
0585 EXPORT_SYMBOL_GPL(usb_stor_adjust_quirks);
0586
0587
0588 static int get_device_info(struct us_data *us, const struct usb_device_id *id,
0589 const struct us_unusual_dev *unusual_dev)
0590 {
0591 struct usb_device *dev = us->pusb_dev;
0592 struct usb_interface_descriptor *idesc =
0593 &us->pusb_intf->cur_altsetting->desc;
0594 struct device *pdev = &us->pusb_intf->dev;
0595
0596
0597 us->unusual_dev = unusual_dev;
0598 us->subclass = (unusual_dev->useProtocol == USB_SC_DEVICE) ?
0599 idesc->bInterfaceSubClass :
0600 unusual_dev->useProtocol;
0601 us->protocol = (unusual_dev->useTransport == USB_PR_DEVICE) ?
0602 idesc->bInterfaceProtocol :
0603 unusual_dev->useTransport;
0604 us->fflags = id->driver_info;
0605 usb_stor_adjust_quirks(us->pusb_dev, &us->fflags);
0606
0607 if (us->fflags & US_FL_IGNORE_DEVICE) {
0608 dev_info(pdev, "device ignored\n");
0609 return -ENODEV;
0610 }
0611
0612
0613
0614
0615
0616 if (dev->speed != USB_SPEED_HIGH)
0617 us->fflags &= ~US_FL_GO_SLOW;
0618
0619 if (us->fflags)
0620 dev_info(pdev, "Quirks match for vid %04x pid %04x: %lx\n",
0621 le16_to_cpu(dev->descriptor.idVendor),
0622 le16_to_cpu(dev->descriptor.idProduct),
0623 us->fflags);
0624
0625
0626
0627
0628
0629
0630
0631 if (id->idVendor || id->idProduct) {
0632 static const char *msgs[3] = {
0633 "an unneeded SubClass entry",
0634 "an unneeded Protocol entry",
0635 "unneeded SubClass and Protocol entries"};
0636 struct usb_device_descriptor *ddesc = &dev->descriptor;
0637 int msg = -1;
0638
0639 if (unusual_dev->useProtocol != USB_SC_DEVICE &&
0640 us->subclass == idesc->bInterfaceSubClass)
0641 msg += 1;
0642 if (unusual_dev->useTransport != USB_PR_DEVICE &&
0643 us->protocol == idesc->bInterfaceProtocol)
0644 msg += 2;
0645 if (msg >= 0 && !(us->fflags & US_FL_NEED_OVERRIDE))
0646 dev_notice(pdev, "This device "
0647 "(%04x,%04x,%04x S %02x P %02x)"
0648 " has %s in unusual_devs.h (kernel"
0649 " %s)\n"
0650 " Please send a copy of this message to "
0651 "<linux-usb@vger.kernel.org> and "
0652 "<usb-storage@lists.one-eyed-alien.net>\n",
0653 le16_to_cpu(ddesc->idVendor),
0654 le16_to_cpu(ddesc->idProduct),
0655 le16_to_cpu(ddesc->bcdDevice),
0656 idesc->bInterfaceSubClass,
0657 idesc->bInterfaceProtocol,
0658 msgs[msg],
0659 utsname()->release);
0660 }
0661
0662 return 0;
0663 }
0664
0665
0666 static void get_transport(struct us_data *us)
0667 {
0668 switch (us->protocol) {
0669 case USB_PR_CB:
0670 us->transport_name = "Control/Bulk";
0671 us->transport = usb_stor_CB_transport;
0672 us->transport_reset = usb_stor_CB_reset;
0673 us->max_lun = 7;
0674 break;
0675
0676 case USB_PR_CBI:
0677 us->transport_name = "Control/Bulk/Interrupt";
0678 us->transport = usb_stor_CB_transport;
0679 us->transport_reset = usb_stor_CB_reset;
0680 us->max_lun = 7;
0681 break;
0682
0683 case USB_PR_BULK:
0684 us->transport_name = "Bulk";
0685 us->transport = usb_stor_Bulk_transport;
0686 us->transport_reset = usb_stor_Bulk_reset;
0687 break;
0688 }
0689 }
0690
0691
0692 static void get_protocol(struct us_data *us)
0693 {
0694 switch (us->subclass) {
0695 case USB_SC_RBC:
0696 us->protocol_name = "Reduced Block Commands (RBC)";
0697 us->proto_handler = usb_stor_transparent_scsi_command;
0698 break;
0699
0700 case USB_SC_8020:
0701 us->protocol_name = "8020i";
0702 us->proto_handler = usb_stor_pad12_command;
0703 us->max_lun = 0;
0704 break;
0705
0706 case USB_SC_QIC:
0707 us->protocol_name = "QIC-157";
0708 us->proto_handler = usb_stor_pad12_command;
0709 us->max_lun = 0;
0710 break;
0711
0712 case USB_SC_8070:
0713 us->protocol_name = "8070i";
0714 us->proto_handler = usb_stor_pad12_command;
0715 us->max_lun = 0;
0716 break;
0717
0718 case USB_SC_SCSI:
0719 us->protocol_name = "Transparent SCSI";
0720 us->proto_handler = usb_stor_transparent_scsi_command;
0721 break;
0722
0723 case USB_SC_UFI:
0724 us->protocol_name = "Uniform Floppy Interface (UFI)";
0725 us->proto_handler = usb_stor_ufi_command;
0726 break;
0727 }
0728 }
0729
0730
0731 static int get_pipes(struct us_data *us)
0732 {
0733 struct usb_host_interface *alt = us->pusb_intf->cur_altsetting;
0734 struct usb_endpoint_descriptor *ep_in;
0735 struct usb_endpoint_descriptor *ep_out;
0736 struct usb_endpoint_descriptor *ep_int;
0737 int res;
0738
0739
0740
0741
0742
0743
0744
0745 res = usb_find_common_endpoints(alt, &ep_in, &ep_out, NULL, NULL);
0746 if (res) {
0747 usb_stor_dbg(us, "bulk endpoints not found\n");
0748 return res;
0749 }
0750
0751 res = usb_find_int_in_endpoint(alt, &ep_int);
0752 if (res && us->protocol == USB_PR_CBI) {
0753 usb_stor_dbg(us, "interrupt endpoint not found\n");
0754 return res;
0755 }
0756
0757
0758 us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0);
0759 us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0);
0760 us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev,
0761 usb_endpoint_num(ep_out));
0762 us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev,
0763 usb_endpoint_num(ep_in));
0764 if (ep_int) {
0765 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
0766 usb_endpoint_num(ep_int));
0767 us->ep_bInterval = ep_int->bInterval;
0768 }
0769 return 0;
0770 }
0771
0772
0773 static int usb_stor_acquire_resources(struct us_data *us)
0774 {
0775 int p;
0776 struct task_struct *th;
0777
0778 us->current_urb = usb_alloc_urb(0, GFP_KERNEL);
0779 if (!us->current_urb)
0780 return -ENOMEM;
0781
0782
0783
0784
0785
0786 if (us->unusual_dev->initFunction) {
0787 p = us->unusual_dev->initFunction(us);
0788 if (p)
0789 return p;
0790 }
0791
0792
0793 th = kthread_run(usb_stor_control_thread, us, "usb-storage");
0794 if (IS_ERR(th)) {
0795 dev_warn(&us->pusb_intf->dev,
0796 "Unable to start control thread\n");
0797 return PTR_ERR(th);
0798 }
0799 us->ctl_thread = th;
0800
0801 return 0;
0802 }
0803
0804
0805 static void usb_stor_release_resources(struct us_data *us)
0806 {
0807
0808
0809
0810
0811
0812 usb_stor_dbg(us, "-- sending exit command to thread\n");
0813 complete(&us->cmnd_ready);
0814 if (us->ctl_thread)
0815 kthread_stop(us->ctl_thread);
0816
0817
0818 if (us->extra_destructor) {
0819 usb_stor_dbg(us, "-- calling extra_destructor()\n");
0820 us->extra_destructor(us->extra);
0821 }
0822
0823
0824 kfree(us->extra);
0825 usb_free_urb(us->current_urb);
0826 }
0827
0828
0829 static void dissociate_dev(struct us_data *us)
0830 {
0831
0832 kfree(us->cr);
0833 usb_free_coherent(us->pusb_dev, US_IOBUF_SIZE, us->iobuf, us->iobuf_dma);
0834
0835
0836 usb_set_intfdata(us->pusb_intf, NULL);
0837 }
0838
0839
0840
0841
0842
0843 static void quiesce_and_remove_host(struct us_data *us)
0844 {
0845 struct Scsi_Host *host = us_to_host(us);
0846
0847
0848 if (us->pusb_dev->state == USB_STATE_NOTATTACHED) {
0849 set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
0850 wake_up(&us->delay_wait);
0851 }
0852
0853
0854
0855
0856
0857 cancel_delayed_work_sync(&us->scan_dwork);
0858
0859
0860 if (test_bit(US_FLIDX_SCAN_PENDING, &us->dflags))
0861 usb_autopm_put_interface_no_suspend(us->pusb_intf);
0862
0863
0864
0865
0866
0867 scsi_remove_host(host);
0868
0869
0870
0871
0872
0873 scsi_lock(host);
0874 set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
0875 scsi_unlock(host);
0876 wake_up(&us->delay_wait);
0877 }
0878
0879
0880 static void release_everything(struct us_data *us)
0881 {
0882 usb_stor_release_resources(us);
0883 dissociate_dev(us);
0884
0885
0886
0887
0888
0889 scsi_host_put(us_to_host(us));
0890 }
0891
0892
0893 static void usb_stor_scan_dwork(struct work_struct *work)
0894 {
0895 struct us_data *us = container_of(work, struct us_data,
0896 scan_dwork.work);
0897 struct device *dev = &us->pusb_intf->dev;
0898
0899 dev_dbg(dev, "starting scan\n");
0900
0901
0902 if (us->protocol == USB_PR_BULK &&
0903 !(us->fflags & US_FL_SINGLE_LUN) &&
0904 !(us->fflags & US_FL_SCM_MULT_TARG)) {
0905 mutex_lock(&us->dev_mutex);
0906 us->max_lun = usb_stor_Bulk_max_lun(us);
0907
0908
0909
0910
0911
0912 if (us->max_lun >= 8)
0913 us_to_host(us)->max_lun = us->max_lun+1;
0914 mutex_unlock(&us->dev_mutex);
0915 }
0916 scsi_scan_host(us_to_host(us));
0917 dev_dbg(dev, "scan complete\n");
0918
0919
0920
0921 usb_autopm_put_interface(us->pusb_intf);
0922 clear_bit(US_FLIDX_SCAN_PENDING, &us->dflags);
0923 }
0924
0925 static unsigned int usb_stor_sg_tablesize(struct usb_interface *intf)
0926 {
0927 struct usb_device *usb_dev = interface_to_usbdev(intf);
0928
0929 if (usb_dev->bus->sg_tablesize) {
0930 return usb_dev->bus->sg_tablesize;
0931 }
0932 return SG_ALL;
0933 }
0934
0935
0936 int usb_stor_probe1(struct us_data **pus,
0937 struct usb_interface *intf,
0938 const struct usb_device_id *id,
0939 const struct us_unusual_dev *unusual_dev,
0940 struct scsi_host_template *sht)
0941 {
0942 struct Scsi_Host *host;
0943 struct us_data *us;
0944 int result;
0945
0946 dev_info(&intf->dev, "USB Mass Storage device detected\n");
0947
0948
0949
0950
0951
0952 host = scsi_host_alloc(sht, sizeof(*us));
0953 if (!host) {
0954 dev_warn(&intf->dev, "Unable to allocate the scsi host\n");
0955 return -ENOMEM;
0956 }
0957
0958
0959
0960
0961 host->max_cmd_len = 16;
0962 host->sg_tablesize = usb_stor_sg_tablesize(intf);
0963 *pus = us = host_to_us(host);
0964 mutex_init(&(us->dev_mutex));
0965 us_set_lock_class(&us->dev_mutex, intf);
0966 init_completion(&us->cmnd_ready);
0967 init_completion(&(us->notify));
0968 init_waitqueue_head(&us->delay_wait);
0969 INIT_DELAYED_WORK(&us->scan_dwork, usb_stor_scan_dwork);
0970
0971
0972 result = associate_dev(us, intf);
0973 if (result)
0974 goto BadDevice;
0975
0976
0977 result = get_device_info(us, id, unusual_dev);
0978 if (result)
0979 goto BadDevice;
0980
0981
0982 get_transport(us);
0983 get_protocol(us);
0984
0985
0986
0987
0988
0989 return 0;
0990
0991 BadDevice:
0992 usb_stor_dbg(us, "storage_probe() failed\n");
0993 release_everything(us);
0994 return result;
0995 }
0996 EXPORT_SYMBOL_GPL(usb_stor_probe1);
0997
0998
0999 int usb_stor_probe2(struct us_data *us)
1000 {
1001 int result;
1002 struct device *dev = &us->pusb_intf->dev;
1003
1004
1005 if (!us->transport || !us->proto_handler) {
1006 result = -ENXIO;
1007 goto BadDevice;
1008 }
1009 usb_stor_dbg(us, "Transport: %s\n", us->transport_name);
1010 usb_stor_dbg(us, "Protocol: %s\n", us->protocol_name);
1011
1012 if (us->fflags & US_FL_SCM_MULT_TARG) {
1013
1014
1015
1016
1017 us->max_lun = 7;
1018
1019 us_to_host(us)->this_id = 7;
1020
1021 } else {
1022
1023 us_to_host(us)->max_id = 1;
1024
1025
1026
1027
1028
1029 if (us->transport == usb_stor_Bulk_transport)
1030 us_to_host(us)->no_scsi2_lun_in_cdb = 1;
1031 }
1032
1033
1034 if (us->fflags & US_FL_SINGLE_LUN)
1035 us->max_lun = 0;
1036
1037
1038 result = get_pipes(us);
1039 if (result)
1040 goto BadDevice;
1041
1042
1043
1044
1045
1046 if (us->fflags & US_FL_INITIAL_READ10)
1047 set_bit(US_FLIDX_REDO_READ10, &us->dflags);
1048
1049
1050 result = usb_stor_acquire_resources(us);
1051 if (result)
1052 goto BadDevice;
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);
1057 if (result) {
1058 dev_warn(dev,
1059 "Unable to add the scsi host\n");
1060 goto HostAddErr;
1061 }
1062
1063
1064 set_bit(US_FLIDX_SCAN_PENDING, &us->dflags);
1065
1066 if (delay_use > 0)
1067 dev_dbg(dev, "waiting for device to settle before scanning\n");
1068 queue_delayed_work(system_freezable_wq, &us->scan_dwork,
1069 delay_use * HZ);
1070 return 0;
1071
1072
1073 HostAddErr:
1074 usb_autopm_put_interface_no_suspend(us->pusb_intf);
1075 BadDevice:
1076 usb_stor_dbg(us, "storage_probe() failed\n");
1077 release_everything(us);
1078 return result;
1079 }
1080 EXPORT_SYMBOL_GPL(usb_stor_probe2);
1081
1082
1083 void usb_stor_disconnect(struct usb_interface *intf)
1084 {
1085 struct us_data *us = usb_get_intfdata(intf);
1086
1087 quiesce_and_remove_host(us);
1088 release_everything(us);
1089 }
1090 EXPORT_SYMBOL_GPL(usb_stor_disconnect);
1091
1092 static struct scsi_host_template usb_stor_host_template;
1093
1094
1095 static int storage_probe(struct usb_interface *intf,
1096 const struct usb_device_id *id)
1097 {
1098 const struct us_unusual_dev *unusual_dev;
1099 struct us_data *us;
1100 int result;
1101 int size;
1102
1103
1104 #if IS_ENABLED(CONFIG_USB_UAS)
1105 if (uas_use_uas_driver(intf, id, NULL))
1106 return -ENXIO;
1107 #endif
1108
1109
1110
1111
1112
1113 if (usb_usual_ignore_device(intf))
1114 return -ENXIO;
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124 size = ARRAY_SIZE(us_unusual_dev_list);
1125 if (id >= usb_storage_usb_ids && id < usb_storage_usb_ids + size) {
1126 unusual_dev = (id - usb_storage_usb_ids) + us_unusual_dev_list;
1127 } else {
1128 unusual_dev = &for_dynamic_ids;
1129
1130 dev_dbg(&intf->dev, "Use Bulk-Only transport with the Transparent SCSI protocol for dynamic id: 0x%04x 0x%04x\n",
1131 id->idVendor, id->idProduct);
1132 }
1133
1134 result = usb_stor_probe1(&us, intf, id, unusual_dev,
1135 &usb_stor_host_template);
1136 if (result)
1137 return result;
1138
1139
1140
1141 result = usb_stor_probe2(us);
1142 return result;
1143 }
1144
1145 static struct usb_driver usb_storage_driver = {
1146 .name = DRV_NAME,
1147 .probe = storage_probe,
1148 .disconnect = usb_stor_disconnect,
1149 .suspend = usb_stor_suspend,
1150 .resume = usb_stor_resume,
1151 .reset_resume = usb_stor_reset_resume,
1152 .pre_reset = usb_stor_pre_reset,
1153 .post_reset = usb_stor_post_reset,
1154 .id_table = usb_storage_usb_ids,
1155 .supports_autosuspend = 1,
1156 .soft_unbind = 1,
1157 };
1158
1159 module_usb_stor_driver(usb_storage_driver, usb_stor_host_template, DRV_NAME);