Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * Driver for USB Mass Storage compliant devices
0004  *
0005  * Current development and maintenance by:
0006  *   (c) 1999-2003 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
0007  *
0008  * Developed with the assistance of:
0009  *   (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org)
0010  *   (c) 2003-2009 Alan Stern (stern@rowland.harvard.edu)
0011  *
0012  * Initial work by:
0013  *   (c) 1999 Michael Gee (michael@linuxspecific.com)
0014  *
0015  * usb_device_id support by Adam J. Richter (adam@yggdrasil.com):
0016  *   (c) 2000 Yggdrasil Computing, Inc.
0017  *
0018  * This driver is based on the 'USB Mass Storage Class' document. This
0019  * describes in detail the protocol used to communicate with such
0020  * devices.  Clearly, the designers had SCSI and ATAPI commands in
0021  * mind when they created this document.  The commands are all very
0022  * similar to commands in the SCSI-II and ATAPI specifications.
0023  *
0024  * It is important to note that in a number of cases this class
0025  * exhibits class-specific exemptions from the USB specification.
0026  * Notably the usage of NAK, STALL and ACK differs from the norm, in
0027  * that they are used to communicate wait, failed and OK on commands.
0028  *
0029  * Also, for certain devices, the interrupt endpoint is used to convey
0030  * status of a command.
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 /* Some informational data */
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  * The entries in this table correspond, line for line,
0081  * with the entries in usb_storage_usb_ids[], defined in usual-tables.c.
0082  */
0083 
0084 /*
0085  *The vendor name should be kept at eight characters or less, and
0086  * the product name should be kept at 16 characters or less. If a device
0087  * has the US_FL_FIX_INQUIRY flag, then the vendor and product names
0088  * normally generated by a device through the INQUIRY response will be
0089  * taken from this list, and this is the reason for the above size
0090  * restriction. However, if the flag is not present, then you
0091  * are free to use as many characters as you like.
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     { }     /* Terminating entry */
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    /* Minimal support for suspend and resume */
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     /* Wait until no command is running */
0174     mutex_lock(&us->dev_mutex);
0175 
0176     if (us->suspend_resume_hook)
0177         (us->suspend_resume_hook)(us, US_SUSPEND);
0178 
0179     /*
0180      * When runtime PM is working, we'll set a flag to indicate
0181      * whether we should autoresume when a SCSI request arrives.
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     /* Report the reset to the SCSI core */
0208     usb_stor_report_bus_reset(us);
0209 
0210     /*
0211      * If any of the subdrivers implemented a reinitialization scheme,
0212      * this is where the callback would be invoked.
0213      */
0214     return 0;
0215 }
0216 EXPORT_SYMBOL_GPL(usb_stor_reset_resume);
0217 
0218 #endif /* CONFIG_PM */
0219 
0220 /*
0221  * The next two routines get called just before and just after
0222  * a USB port reset, whether from this driver or a different one.
0223  */
0224 
0225 int usb_stor_pre_reset(struct usb_interface *iface)
0226 {
0227     struct us_data *us = usb_get_intfdata(iface);
0228 
0229     /* Make sure no command runs during the reset */
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     /* Report the reset to the SCSI core */
0240     usb_stor_report_bus_reset(us);
0241 
0242     /*
0243      * If any of the subdrivers implemented a reinitialization scheme,
0244      * this is where the callback would be invoked.
0245      */
0246 
0247     mutex_unlock(&us->dev_mutex);
0248     return 0;
0249 }
0250 EXPORT_SYMBOL_GPL(usb_stor_post_reset);
0251 
0252 /*
0253  * fill_inquiry_response takes an unsigned char array (which must
0254  * be at least 36 characters) and populates the vendor name,
0255  * product name, and revision fields. Then the array is copied
0256  * into the SCSI command's response buffer (oddly enough
0257  * called request_buffer). data_len contains the length of the
0258  * data array, which again must be at least 36.
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) /* You lose. */
0265         return;
0266 
0267     memset(data+8, ' ', 28);
0268     if (data[0]&0x20) { /*
0269                  * USB device currently not connected. Return
0270                  * peripheral qualifier 001b ("...however, the
0271                  * physical device is not currently connected
0272                  * to this logical unit") and leave vendor and
0273                  * product identification empty. ("If the target
0274                  * does store some of the INQUIRY data on the
0275                  * device, it may return zeros or ASCII spaces
0276                  * (20h) in those fields until the data is
0277                  * available from the device.").
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         /* lock the device pointers */
0312         mutex_lock(&(us->dev_mutex));
0313 
0314         /* lock access to the state */
0315         scsi_lock(host);
0316 
0317         /* When we are called with no command pending, we're done */
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         /* has the command timed out *already* ? */
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          * reject the command if the direction indicator
0336          * is UNKNOWN
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          * reject if target != 0 or if LUN is higher than
0345          * the maximum known LUN
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          * Handle those devices which need us to fake
0364          * their inquiry data
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         /* we've got a command, let's do it! */
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         /* lock access to the state */
0385         scsi_lock(host);
0386 
0387         /* was the command aborted? */
0388         if (srb->result == DID_ABORT << 16) {
0389 SkipForAbort:
0390             usb_stor_dbg(us, "scsi command aborted\n");
0391             srb = NULL; /* Don't call scsi_done() */
0392         }
0393 
0394         /*
0395          * If an abort request was received we need to signal that
0396          * the abort has finished.  The proper test for this is
0397          * the TIMED_OUT flag, not srb->result == DID_ABORT, because
0398          * the timeout might have occurred after the command had
0399          * already completed with a different result code.
0400          */
0401         if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
0402             complete(&(us->notify));
0403 
0404             /* Allow USB transfers to resume */
0405             clear_bit(US_FLIDX_ABORTING, &us->dflags);
0406             clear_bit(US_FLIDX_TIMED_OUT, &us->dflags);
0407         }
0408 
0409         /* finished working on this command */
0410         us->srb = NULL;
0411         scsi_unlock(host);
0412 
0413         /* unlock the device pointers */
0414         mutex_unlock(&us->dev_mutex);
0415 
0416         /* now that the locks are released, notify the SCSI core */
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     } /* for (;;) */
0423 
0424     /* Wait until we are told to stop */
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  * Device probing and disconnecting
0437  ***********************************************************************/
0438 
0439 /* Associate our private data with the USB device */
0440 static int associate_dev(struct us_data *us, struct usb_interface *intf)
0441 {
0442     /* Fill in the device-related fields */
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     /* Store our private data in the interface */
0455     usb_set_intfdata(intf, us);
0456 
0457     /* Allocate the control/setup and DMA-mapped buffers */
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 /* Works only for digits and letters, but small and fast */
0472 #define TOLOWER(x) ((x) | 0x20)
0473 
0474 /* Adjust device flags based on the "quirks=" module parameter */
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         /* Each entry consists of VID:PID:flags */
0496         if (vid == simple_strtoul(p, &p, 16) &&
0497                 *p == ':' &&
0498                 pid == simple_strtoul(p+1, &p, 16) &&
0499                 *p == ':')
0500             break;
0501 
0502         /* Move forward to the next entry */
0503         while (*p) {
0504             if (*p++ == ',')
0505                 break;
0506         }
0507     }
0508     if (!*p)    /* No match */
0509         return;
0510 
0511     /* Collect the flags */
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         /* Ignore unrecognized flag characters */
0581         }
0582     }
0583     *fflags = (*fflags & ~mask) | f;
0584 }
0585 EXPORT_SYMBOL_GPL(usb_stor_adjust_quirks);
0586 
0587 /* Get the unusual_devs entries and the string descriptors */
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     /* Store the entries */
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      * This flag is only needed when we're in high-speed, so let's
0614      * disable it if we're in full-speed
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      * Log a message if a non-generic unusual_dev entry contains an
0627      * unnecessary subclass or protocol override.  This may stimulate
0628      * reports from users that will help us remove unneeded entries
0629      * from the unusual_devs.h table.
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 /* Get the transport settings */
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 /* Get the protocol settings */
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 /* Get the pipe settings */
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      * Find the first endpoint of each type we need.
0741      * We are expecting a minimum of 2 endpoints - in and out (bulk).
0742      * An optional interrupt-in is OK (necessary for CBI protocol).
0743      * We will ignore any others.
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     /* Calculate and store the pipe values */
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 /* Initialize all the dynamic resources we need */
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      * Just before we start our control thread, initialize
0784      * the device if it needs initialization
0785      */
0786     if (us->unusual_dev->initFunction) {
0787         p = us->unusual_dev->initFunction(us);
0788         if (p)
0789             return p;
0790     }
0791 
0792     /* Start up our control thread */
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 /* Release all our dynamic resources */
0805 static void usb_stor_release_resources(struct us_data *us)
0806 {
0807     /*
0808      * Tell the control thread to exit.  The SCSI host must
0809      * already have been removed and the DISCONNECTING flag set
0810      * so that we won't accept any more commands.
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     /* Call the destructor routine, if it exists */
0818     if (us->extra_destructor) {
0819         usb_stor_dbg(us, "-- calling extra_destructor()\n");
0820         us->extra_destructor(us->extra);
0821     }
0822 
0823     /* Free the extra data and the URB */
0824     kfree(us->extra);
0825     usb_free_urb(us->current_urb);
0826 }
0827 
0828 /* Dissociate from the USB device */
0829 static void dissociate_dev(struct us_data *us)
0830 {
0831     /* Free the buffers */
0832     kfree(us->cr);
0833     usb_free_coherent(us->pusb_dev, US_IOBUF_SIZE, us->iobuf, us->iobuf_dma);
0834 
0835     /* Remove our private data from the interface */
0836     usb_set_intfdata(us->pusb_intf, NULL);
0837 }
0838 
0839 /*
0840  * First stage of disconnect processing: stop SCSI scanning,
0841  * remove the host, and stop accepting new commands
0842  */
0843 static void quiesce_and_remove_host(struct us_data *us)
0844 {
0845     struct Scsi_Host *host = us_to_host(us);
0846 
0847     /* If the device is really gone, cut short reset delays */
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      * Prevent SCSI scanning (if it hasn't started yet)
0855      * or wait for the SCSI-scanning routine to stop.
0856      */
0857     cancel_delayed_work_sync(&us->scan_dwork);
0858 
0859     /* Balance autopm calls if scanning was cancelled */
0860     if (test_bit(US_FLIDX_SCAN_PENDING, &us->dflags))
0861         usb_autopm_put_interface_no_suspend(us->pusb_intf);
0862 
0863     /*
0864      * Removing the host will perform an orderly shutdown: caches
0865      * synchronized, disks spun down, etc.
0866      */
0867     scsi_remove_host(host);
0868 
0869     /*
0870      * Prevent any new commands from being accepted and cut short
0871      * reset delays.
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 /* Second stage of disconnect processing: deallocate all resources */
0880 static void release_everything(struct us_data *us)
0881 {
0882     usb_stor_release_resources(us);
0883     dissociate_dev(us);
0884 
0885     /*
0886      * Drop our reference to the host; the SCSI core will free it
0887      * (and "us" along with it) when the refcount becomes 0.
0888      */
0889     scsi_host_put(us_to_host(us));
0890 }
0891 
0892 /* Delayed-work routine to carry out SCSI-device scanning */
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     /* For bulk-only devices, determine the max LUN value */
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          * Allow proper scanning of devices that present more than 8 LUNs
0909          * While not affecting other devices that may need the previous
0910          * behavior
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     /* Should we unbind if no devices were detected? */
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 /* First part of general USB mass-storage probing */
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      * Ask the SCSI layer to allocate a host structure, with extra
0950      * space at the end for our private us_data structure.
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      * Allow 16-byte CDBs and thus > 2TB
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     /* Associate the us_data structure with the USB device */
0972     result = associate_dev(us, intf);
0973     if (result)
0974         goto BadDevice;
0975 
0976     /* Get the unusual_devs entries and the descriptors */
0977     result = get_device_info(us, id, unusual_dev);
0978     if (result)
0979         goto BadDevice;
0980 
0981     /* Get standard transport and protocol settings */
0982     get_transport(us);
0983     get_protocol(us);
0984 
0985     /*
0986      * Give the caller a chance to fill in specialized transport
0987      * or protocol settings.
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 /* Second part of general USB mass-storage probing */
0999 int usb_stor_probe2(struct us_data *us)
1000 {
1001     int result;
1002     struct device *dev = &us->pusb_intf->dev;
1003 
1004     /* Make sure the transport and protocol have both been set */
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          * SCM eUSCSI bridge devices can have different numbers
1015          * of LUNs on different targets; allow all to be probed.
1016          */
1017         us->max_lun = 7;
1018         /* The eUSCSI itself has ID 7, so avoid scanning that */
1019         us_to_host(us)->this_id = 7;
1020         /* max_id is 8 initially, so no need to set it here */
1021     } else {
1022         /* In the normal case there is only a single target */
1023         us_to_host(us)->max_id = 1;
1024         /*
1025          * Like Windows, we won't store the LUN bits in CDB[1] for
1026          * SCSI-2 devices using the Bulk-Only transport (even though
1027          * this violates the SCSI spec).
1028          */
1029         if (us->transport == usb_stor_Bulk_transport)
1030             us_to_host(us)->no_scsi2_lun_in_cdb = 1;
1031     }
1032 
1033     /* fix for single-lun devices */
1034     if (us->fflags & US_FL_SINGLE_LUN)
1035         us->max_lun = 0;
1036 
1037     /* Find the endpoints and calculate pipe values */
1038     result = get_pipes(us);
1039     if (result)
1040         goto BadDevice;
1041 
1042     /*
1043      * If the device returns invalid data for the first READ(10)
1044      * command, indicate the command should be retried.
1045      */
1046     if (us->fflags & US_FL_INITIAL_READ10)
1047         set_bit(US_FLIDX_REDO_READ10, &us->dflags);
1048 
1049     /* Acquire all the other resources and add the host */
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     /* Submit the delayed_work for SCSI-device scanning */
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     /* We come here if there are any problems */
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 /* Handle a USB mass-storage disconnect */
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 /* The main probe routine for standard devices */
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     /* If uas is enabled and this device can do uas then ignore it. */
1104 #if IS_ENABLED(CONFIG_USB_UAS)
1105     if (uas_use_uas_driver(intf, id, NULL))
1106         return -ENXIO;
1107 #endif
1108 
1109     /*
1110      * If the device isn't standard (is handled by a subdriver
1111      * module) then don't accept it.
1112      */
1113     if (usb_usual_ignore_device(intf))
1114         return -ENXIO;
1115 
1116     /*
1117      * Call the general probe procedures.
1118      *
1119      * The unusual_dev_list array is parallel to the usb_storage_usb_ids
1120      * table, so we use the index of the id entry to find the
1121      * corresponding unusual_devs entry.
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     /* No special transport or protocol settings in the main module */
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);