cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

usb.c (31299B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Driver for USB Mass Storage compliant devices
      4 *
      5 * Current development and maintenance by:
      6 *   (c) 1999-2003 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
      7 *
      8 * Developed with the assistance of:
      9 *   (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org)
     10 *   (c) 2003-2009 Alan Stern (stern@rowland.harvard.edu)
     11 *
     12 * Initial work by:
     13 *   (c) 1999 Michael Gee (michael@linuxspecific.com)
     14 *
     15 * usb_device_id support by Adam J. Richter (adam@yggdrasil.com):
     16 *   (c) 2000 Yggdrasil Computing, Inc.
     17 *
     18 * This driver is based on the 'USB Mass Storage Class' document. This
     19 * describes in detail the protocol used to communicate with such
     20 * devices.  Clearly, the designers had SCSI and ATAPI commands in
     21 * mind when they created this document.  The commands are all very
     22 * similar to commands in the SCSI-II and ATAPI specifications.
     23 *
     24 * It is important to note that in a number of cases this class
     25 * exhibits class-specific exemptions from the USB specification.
     26 * Notably the usage of NAK, STALL and ACK differs from the norm, in
     27 * that they are used to communicate wait, failed and OK on commands.
     28 *
     29 * Also, for certain devices, the interrupt endpoint is used to convey
     30 * status of a command.
     31 */
     32
     33#ifdef CONFIG_USB_STORAGE_DEBUG
     34#define DEBUG
     35#endif
     36
     37#include <linux/sched.h>
     38#include <linux/errno.h>
     39#include <linux/module.h>
     40#include <linux/slab.h>
     41#include <linux/kthread.h>
     42#include <linux/mutex.h>
     43#include <linux/utsname.h>
     44
     45#include <scsi/scsi.h>
     46#include <scsi/scsi_cmnd.h>
     47#include <scsi/scsi_device.h>
     48
     49#include "usb.h"
     50#include "scsiglue.h"
     51#include "transport.h"
     52#include "protocol.h"
     53#include "debug.h"
     54#include "initializers.h"
     55
     56#include "sierra_ms.h"
     57#include "option_ms.h"
     58
     59#if IS_ENABLED(CONFIG_USB_UAS)
     60#include "uas-detect.h"
     61#endif
     62
     63#define DRV_NAME "usb-storage"
     64
     65/* Some informational data */
     66MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
     67MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
     68MODULE_LICENSE("GPL");
     69
     70static unsigned int delay_use = 1;
     71module_param(delay_use, uint, S_IRUGO | S_IWUSR);
     72MODULE_PARM_DESC(delay_use, "seconds to delay before using a new device");
     73
     74static char quirks[128];
     75module_param_string(quirks, quirks, sizeof(quirks), S_IRUGO | S_IWUSR);
     76MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
     77
     78
     79/*
     80 * The entries in this table correspond, line for line,
     81 * with the entries in usb_storage_usb_ids[], defined in usual-tables.c.
     82 */
     83
     84/*
     85 *The vendor name should be kept at eight characters or less, and
     86 * the product name should be kept at 16 characters or less. If a device
     87 * has the US_FL_FIX_INQUIRY flag, then the vendor and product names
     88 * normally generated by a device through the INQUIRY response will be
     89 * taken from this list, and this is the reason for the above size
     90 * restriction. However, if the flag is not present, then you
     91 * are free to use as many characters as you like.
     92 */
     93
     94#define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
     95		    vendor_name, product_name, use_protocol, use_transport, \
     96		    init_function, Flags) \
     97{ \
     98	.vendorName = vendor_name,	\
     99	.productName = product_name,	\
    100	.useProtocol = use_protocol,	\
    101	.useTransport = use_transport,	\
    102	.initFunction = init_function,	\
    103}
    104
    105#define COMPLIANT_DEV	UNUSUAL_DEV
    106
    107#define USUAL_DEV(use_protocol, use_transport) \
    108{ \
    109	.useProtocol = use_protocol,	\
    110	.useTransport = use_transport,	\
    111}
    112
    113#define UNUSUAL_VENDOR_INTF(idVendor, cl, sc, pr, \
    114		vendor_name, product_name, use_protocol, use_transport, \
    115		init_function, Flags) \
    116{ \
    117	.vendorName = vendor_name,	\
    118	.productName = product_name,	\
    119	.useProtocol = use_protocol,	\
    120	.useTransport = use_transport,	\
    121	.initFunction = init_function,	\
    122}
    123
    124static const struct us_unusual_dev us_unusual_dev_list[] = {
    125#	include "unusual_devs.h"
    126	{ }		/* Terminating entry */
    127};
    128
    129static const struct us_unusual_dev for_dynamic_ids =
    130		USUAL_DEV(USB_SC_SCSI, USB_PR_BULK);
    131
    132#undef UNUSUAL_DEV
    133#undef COMPLIANT_DEV
    134#undef USUAL_DEV
    135#undef UNUSUAL_VENDOR_INTF
    136
    137#ifdef CONFIG_LOCKDEP
    138
    139static struct lock_class_key us_interface_key[USB_MAXINTERFACES];
    140
    141static void us_set_lock_class(struct mutex *mutex,
    142		struct usb_interface *intf)
    143{
    144	struct usb_device *udev = interface_to_usbdev(intf);
    145	struct usb_host_config *config = udev->actconfig;
    146	int i;
    147
    148	for (i = 0; i < config->desc.bNumInterfaces; i++) {
    149		if (config->interface[i] == intf)
    150			break;
    151	}
    152
    153	BUG_ON(i == config->desc.bNumInterfaces);
    154
    155	lockdep_set_class(mutex, &us_interface_key[i]);
    156}
    157
    158#else
    159
    160static void us_set_lock_class(struct mutex *mutex,
    161		struct usb_interface *intf)
    162{
    163}
    164
    165#endif
    166
    167#ifdef CONFIG_PM	/* Minimal support for suspend and resume */
    168
    169int usb_stor_suspend(struct usb_interface *iface, pm_message_t message)
    170{
    171	struct us_data *us = usb_get_intfdata(iface);
    172
    173	/* Wait until no command is running */
    174	mutex_lock(&us->dev_mutex);
    175
    176	if (us->suspend_resume_hook)
    177		(us->suspend_resume_hook)(us, US_SUSPEND);
    178
    179	/*
    180	 * When runtime PM is working, we'll set a flag to indicate
    181	 * whether we should autoresume when a SCSI request arrives.
    182	 */
    183
    184	mutex_unlock(&us->dev_mutex);
    185	return 0;
    186}
    187EXPORT_SYMBOL_GPL(usb_stor_suspend);
    188
    189int usb_stor_resume(struct usb_interface *iface)
    190{
    191	struct us_data *us = usb_get_intfdata(iface);
    192
    193	mutex_lock(&us->dev_mutex);
    194
    195	if (us->suspend_resume_hook)
    196		(us->suspend_resume_hook)(us, US_RESUME);
    197
    198	mutex_unlock(&us->dev_mutex);
    199	return 0;
    200}
    201EXPORT_SYMBOL_GPL(usb_stor_resume);
    202
    203int usb_stor_reset_resume(struct usb_interface *iface)
    204{
    205	struct us_data *us = usb_get_intfdata(iface);
    206
    207	/* Report the reset to the SCSI core */
    208	usb_stor_report_bus_reset(us);
    209
    210	/*
    211	 * If any of the subdrivers implemented a reinitialization scheme,
    212	 * this is where the callback would be invoked.
    213	 */
    214	return 0;
    215}
    216EXPORT_SYMBOL_GPL(usb_stor_reset_resume);
    217
    218#endif /* CONFIG_PM */
    219
    220/*
    221 * The next two routines get called just before and just after
    222 * a USB port reset, whether from this driver or a different one.
    223 */
    224
    225int usb_stor_pre_reset(struct usb_interface *iface)
    226{
    227	struct us_data *us = usb_get_intfdata(iface);
    228
    229	/* Make sure no command runs during the reset */
    230	mutex_lock(&us->dev_mutex);
    231	return 0;
    232}
    233EXPORT_SYMBOL_GPL(usb_stor_pre_reset);
    234
    235int usb_stor_post_reset(struct usb_interface *iface)
    236{
    237	struct us_data *us = usb_get_intfdata(iface);
    238
    239	/* Report the reset to the SCSI core */
    240	usb_stor_report_bus_reset(us);
    241
    242	/*
    243	 * If any of the subdrivers implemented a reinitialization scheme,
    244	 * this is where the callback would be invoked.
    245	 */
    246
    247	mutex_unlock(&us->dev_mutex);
    248	return 0;
    249}
    250EXPORT_SYMBOL_GPL(usb_stor_post_reset);
    251
    252/*
    253 * fill_inquiry_response takes an unsigned char array (which must
    254 * be at least 36 characters) and populates the vendor name,
    255 * product name, and revision fields. Then the array is copied
    256 * into the SCSI command's response buffer (oddly enough
    257 * called request_buffer). data_len contains the length of the
    258 * data array, which again must be at least 36.
    259 */
    260
    261void fill_inquiry_response(struct us_data *us, unsigned char *data,
    262		unsigned int data_len)
    263{
    264	if (data_len < 36) /* You lose. */
    265		return;
    266
    267	memset(data+8, ' ', 28);
    268	if (data[0]&0x20) { /*
    269			     * USB device currently not connected. Return
    270			     * peripheral qualifier 001b ("...however, the
    271			     * physical device is not currently connected
    272			     * to this logical unit") and leave vendor and
    273			     * product identification empty. ("If the target
    274			     * does store some of the INQUIRY data on the
    275			     * device, it may return zeros or ASCII spaces
    276			     * (20h) in those fields until the data is
    277			     * available from the device.").
    278			     */
    279	} else {
    280		u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice);
    281		int n;
    282
    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));
    287
    288		data[32] = 0x30 + ((bcdDevice>>12) & 0x0F);
    289		data[33] = 0x30 + ((bcdDevice>>8) & 0x0F);
    290		data[34] = 0x30 + ((bcdDevice>>4) & 0x0F);
    291		data[35] = 0x30 + ((bcdDevice) & 0x0F);
    292	}
    293
    294	usb_stor_set_xfer_buf(data, data_len, us->srb);
    295}
    296EXPORT_SYMBOL_GPL(fill_inquiry_response);
    297
    298static int usb_stor_control_thread(void * __us)
    299{
    300	struct us_data *us = (struct us_data *)__us;
    301	struct Scsi_Host *host = us_to_host(us);
    302	struct scsi_cmnd *srb;
    303
    304	for (;;) {
    305		usb_stor_dbg(us, "*** thread sleeping\n");
    306		if (wait_for_completion_interruptible(&us->cmnd_ready))
    307			break;
    308
    309		usb_stor_dbg(us, "*** thread awakened\n");
    310
    311		/* lock the device pointers */
    312		mutex_lock(&(us->dev_mutex));
    313
    314		/* lock access to the state */
    315		scsi_lock(host);
    316
    317		/* When we are called with no command pending, we're done */
    318		srb = us->srb;
    319		if (srb == NULL) {
    320			scsi_unlock(host);
    321			mutex_unlock(&us->dev_mutex);
    322			usb_stor_dbg(us, "-- exiting\n");
    323			break;
    324		}
    325
    326		/* has the command timed out *already* ? */
    327		if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
    328			srb->result = DID_ABORT << 16;
    329			goto SkipForAbort;
    330		}
    331
    332		scsi_unlock(host);
    333
    334		/*
    335		 * reject the command if the direction indicator
    336		 * is UNKNOWN
    337		 */
    338		if (srb->sc_data_direction == DMA_BIDIRECTIONAL) {
    339			usb_stor_dbg(us, "UNKNOWN data direction\n");
    340			srb->result = DID_ERROR << 16;
    341		}
    342
    343		/*
    344		 * reject if target != 0 or if LUN is higher than
    345		 * the maximum known LUN
    346		 */
    347		else if (srb->device->id &&
    348				!(us->fflags & US_FL_SCM_MULT_TARG)) {
    349			usb_stor_dbg(us, "Bad target number (%d:%llu)\n",
    350				     srb->device->id,
    351				     srb->device->lun);
    352			srb->result = DID_BAD_TARGET << 16;
    353		}
    354
    355		else if (srb->device->lun > us->max_lun) {
    356			usb_stor_dbg(us, "Bad LUN (%d:%llu)\n",
    357				     srb->device->id,
    358				     srb->device->lun);
    359			srb->result = DID_BAD_TARGET << 16;
    360		}
    361
    362		/*
    363		 * Handle those devices which need us to fake
    364		 * their inquiry data
    365		 */
    366		else if ((srb->cmnd[0] == INQUIRY) &&
    367			    (us->fflags & US_FL_FIX_INQUIRY)) {
    368			unsigned char data_ptr[36] = {
    369			    0x00, 0x80, 0x02, 0x02,
    370			    0x1F, 0x00, 0x00, 0x00};
    371
    372			usb_stor_dbg(us, "Faking INQUIRY command\n");
    373			fill_inquiry_response(us, data_ptr, 36);
    374			srb->result = SAM_STAT_GOOD;
    375		}
    376
    377		/* we've got a command, let's do it! */
    378		else {
    379			US_DEBUG(usb_stor_show_command(us, srb));
    380			us->proto_handler(srb, us);
    381			usb_mark_last_busy(us->pusb_dev);
    382		}
    383
    384		/* lock access to the state */
    385		scsi_lock(host);
    386
    387		/* was the command aborted? */
    388		if (srb->result == DID_ABORT << 16) {
    389SkipForAbort:
    390			usb_stor_dbg(us, "scsi command aborted\n");
    391			srb = NULL;	/* Don't call scsi_done() */
    392		}
    393
    394		/*
    395		 * If an abort request was received we need to signal that
    396		 * the abort has finished.  The proper test for this is
    397		 * the TIMED_OUT flag, not srb->result == DID_ABORT, because
    398		 * the timeout might have occurred after the command had
    399		 * already completed with a different result code.
    400		 */
    401		if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
    402			complete(&(us->notify));
    403
    404			/* Allow USB transfers to resume */
    405			clear_bit(US_FLIDX_ABORTING, &us->dflags);
    406			clear_bit(US_FLIDX_TIMED_OUT, &us->dflags);
    407		}
    408
    409		/* finished working on this command */
    410		us->srb = NULL;
    411		scsi_unlock(host);
    412
    413		/* unlock the device pointers */
    414		mutex_unlock(&us->dev_mutex);
    415
    416		/* now that the locks are released, notify the SCSI core */
    417		if (srb) {
    418			usb_stor_dbg(us, "scsi cmd done, result=0x%x\n",
    419					srb->result);
    420			scsi_done_direct(srb);
    421		}
    422	} /* for (;;) */
    423
    424	/* Wait until we are told to stop */
    425	for (;;) {
    426		set_current_state(TASK_INTERRUPTIBLE);
    427		if (kthread_should_stop())
    428			break;
    429		schedule();
    430	}
    431	__set_current_state(TASK_RUNNING);
    432	return 0;
    433}
    434
    435/***********************************************************************
    436 * Device probing and disconnecting
    437 ***********************************************************************/
    438
    439/* Associate our private data with the USB device */
    440static int associate_dev(struct us_data *us, struct usb_interface *intf)
    441{
    442	/* Fill in the device-related fields */
    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",
    451		     intf->cur_altsetting->desc.bInterfaceSubClass,
    452		     intf->cur_altsetting->desc.bInterfaceProtocol);
    453
    454	/* Store our private data in the interface */
    455	usb_set_intfdata(intf, us);
    456
    457	/* Allocate the control/setup and DMA-mapped buffers */
    458	us->cr = kmalloc(sizeof(*us->cr), GFP_KERNEL);
    459	if (!us->cr)
    460		return -ENOMEM;
    461
    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");
    466		return -ENOMEM;
    467	}
    468	return 0;
    469}
    470
    471/* Works only for digits and letters, but small and fast */
    472#define TOLOWER(x) ((x) | 0x20)
    473
    474/* Adjust device flags based on the "quirks=" module parameter */
    475void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
    476{
    477	char *p;
    478	u16 vid = le16_to_cpu(udev->descriptor.idVendor);
    479	u16 pid = le16_to_cpu(udev->descriptor.idProduct);
    480	unsigned f = 0;
    481	unsigned int mask = (US_FL_SANE_SENSE | US_FL_BAD_SENSE |
    482			US_FL_FIX_CAPACITY | US_FL_IGNORE_UAS |
    483			US_FL_CAPACITY_HEURISTICS | US_FL_IGNORE_DEVICE |
    484			US_FL_NOT_LOCKABLE | US_FL_MAX_SECTORS_64 |
    485			US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE |
    486			US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT |
    487			US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 |
    488			US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE |
    489			US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES |
    490			US_FL_MAX_SECTORS_240 | US_FL_NO_REPORT_LUNS |
    491			US_FL_ALWAYS_SYNC);
    492
    493	p = quirks;
    494	while (*p) {
    495		/* Each entry consists of VID:PID:flags */
    496		if (vid == simple_strtoul(p, &p, 16) &&
    497				*p == ':' &&
    498				pid == simple_strtoul(p+1, &p, 16) &&
    499				*p == ':')
    500			break;
    501
    502		/* Move forward to the next entry */
    503		while (*p) {
    504			if (*p++ == ',')
    505				break;
    506		}
    507	}
    508	if (!*p)	/* No match */
    509		return;
    510
    511	/* Collect the flags */
    512	while (*++p && *p != ',') {
    513		switch (TOLOWER(*p)) {
    514		case 'a':
    515			f |= US_FL_SANE_SENSE;
    516			break;
    517		case 'b':
    518			f |= US_FL_BAD_SENSE;
    519			break;
    520		case 'c':
    521			f |= US_FL_FIX_CAPACITY;
    522			break;
    523		case 'd':
    524			f |= US_FL_NO_READ_DISC_INFO;
    525			break;
    526		case 'e':
    527			f |= US_FL_NO_READ_CAPACITY_16;
    528			break;
    529		case 'f':
    530			f |= US_FL_NO_REPORT_OPCODES;
    531			break;
    532		case 'g':
    533			f |= US_FL_MAX_SECTORS_240;
    534			break;
    535		case 'h':
    536			f |= US_FL_CAPACITY_HEURISTICS;
    537			break;
    538		case 'i':
    539			f |= US_FL_IGNORE_DEVICE;
    540			break;
    541		case 'j':
    542			f |= US_FL_NO_REPORT_LUNS;
    543			break;
    544		case 'k':
    545			f |= US_FL_NO_SAME;
    546			break;
    547		case 'l':
    548			f |= US_FL_NOT_LOCKABLE;
    549			break;
    550		case 'm':
    551			f |= US_FL_MAX_SECTORS_64;
    552			break;
    553		case 'n':
    554			f |= US_FL_INITIAL_READ10;
    555			break;
    556		case 'o':
    557			f |= US_FL_CAPACITY_OK;
    558			break;
    559		case 'p':
    560			f |= US_FL_WRITE_CACHE;
    561			break;
    562		case 'r':
    563			f |= US_FL_IGNORE_RESIDUE;
    564			break;
    565		case 's':
    566			f |= US_FL_SINGLE_LUN;
    567			break;
    568		case 't':
    569			f |= US_FL_NO_ATA_1X;
    570			break;
    571		case 'u':
    572			f |= US_FL_IGNORE_UAS;
    573			break;
    574		case 'w':
    575			f |= US_FL_NO_WP_DETECT;
    576			break;
    577		case 'y':
    578			f |= US_FL_ALWAYS_SYNC;
    579			break;
    580		/* Ignore unrecognized flag characters */
    581		}
    582	}
    583	*fflags = (*fflags & ~mask) | f;
    584}
    585EXPORT_SYMBOL_GPL(usb_stor_adjust_quirks);
    586
    587/* Get the unusual_devs entries and the string descriptors */
    588static int get_device_info(struct us_data *us, const struct usb_device_id *id,
    589		const struct us_unusual_dev *unusual_dev)
    590{
    591	struct usb_device *dev = us->pusb_dev;
    592	struct usb_interface_descriptor *idesc =
    593		&us->pusb_intf->cur_altsetting->desc;
    594	struct device *pdev = &us->pusb_intf->dev;
    595
    596	/* Store the entries */
    597	us->unusual_dev = unusual_dev;
    598	us->subclass = (unusual_dev->useProtocol == USB_SC_DEVICE) ?
    599			idesc->bInterfaceSubClass :
    600			unusual_dev->useProtocol;
    601	us->protocol = (unusual_dev->useTransport == USB_PR_DEVICE) ?
    602			idesc->bInterfaceProtocol :
    603			unusual_dev->useTransport;
    604	us->fflags = id->driver_info;
    605	usb_stor_adjust_quirks(us->pusb_dev, &us->fflags);
    606
    607	if (us->fflags & US_FL_IGNORE_DEVICE) {
    608		dev_info(pdev, "device ignored\n");
    609		return -ENODEV;
    610	}
    611
    612	/*
    613	 * This flag is only needed when we're in high-speed, so let's
    614	 * disable it if we're in full-speed
    615	 */
    616	if (dev->speed != USB_SPEED_HIGH)
    617		us->fflags &= ~US_FL_GO_SLOW;
    618
    619	if (us->fflags)
    620		dev_info(pdev, "Quirks match for vid %04x pid %04x: %lx\n",
    621				le16_to_cpu(dev->descriptor.idVendor),
    622				le16_to_cpu(dev->descriptor.idProduct),
    623				us->fflags);
    624
    625	/*
    626	 * Log a message if a non-generic unusual_dev entry contains an
    627	 * unnecessary subclass or protocol override.  This may stimulate
    628	 * reports from users that will help us remove unneeded entries
    629	 * from the unusual_devs.h table.
    630	 */
    631	if (id->idVendor || id->idProduct) {
    632		static const char *msgs[3] = {
    633			"an unneeded SubClass entry",
    634			"an unneeded Protocol entry",
    635			"unneeded SubClass and Protocol entries"};
    636		struct usb_device_descriptor *ddesc = &dev->descriptor;
    637		int msg = -1;
    638
    639		if (unusual_dev->useProtocol != USB_SC_DEVICE &&
    640			us->subclass == idesc->bInterfaceSubClass)
    641			msg += 1;
    642		if (unusual_dev->useTransport != USB_PR_DEVICE &&
    643			us->protocol == idesc->bInterfaceProtocol)
    644			msg += 2;
    645		if (msg >= 0 && !(us->fflags & US_FL_NEED_OVERRIDE))
    646			dev_notice(pdev, "This device "
    647					"(%04x,%04x,%04x S %02x P %02x)"
    648					" has %s in unusual_devs.h (kernel"
    649					" %s)\n"
    650					"   Please send a copy of this message to "
    651					"<linux-usb@vger.kernel.org> and "
    652					"<usb-storage@lists.one-eyed-alien.net>\n",
    653					le16_to_cpu(ddesc->idVendor),
    654					le16_to_cpu(ddesc->idProduct),
    655					le16_to_cpu(ddesc->bcdDevice),
    656					idesc->bInterfaceSubClass,
    657					idesc->bInterfaceProtocol,
    658					msgs[msg],
    659					utsname()->release);
    660	}
    661
    662	return 0;
    663}
    664
    665/* Get the transport settings */
    666static void get_transport(struct us_data *us)
    667{
    668	switch (us->protocol) {
    669	case USB_PR_CB:
    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;
    674		break;
    675
    676	case USB_PR_CBI:
    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;
    681		break;
    682
    683	case USB_PR_BULK:
    684		us->transport_name = "Bulk";
    685		us->transport = usb_stor_Bulk_transport;
    686		us->transport_reset = usb_stor_Bulk_reset;
    687		break;
    688	}
    689}
    690
    691/* Get the protocol settings */
    692static void get_protocol(struct us_data *us)
    693{
    694	switch (us->subclass) {
    695	case USB_SC_RBC:
    696		us->protocol_name = "Reduced Block Commands (RBC)";
    697		us->proto_handler = usb_stor_transparent_scsi_command;
    698		break;
    699
    700	case USB_SC_8020:
    701		us->protocol_name = "8020i";
    702		us->proto_handler = usb_stor_pad12_command;
    703		us->max_lun = 0;
    704		break;
    705
    706	case USB_SC_QIC:
    707		us->protocol_name = "QIC-157";
    708		us->proto_handler = usb_stor_pad12_command;
    709		us->max_lun = 0;
    710		break;
    711
    712	case USB_SC_8070:
    713		us->protocol_name = "8070i";
    714		us->proto_handler = usb_stor_pad12_command;
    715		us->max_lun = 0;
    716		break;
    717
    718	case USB_SC_SCSI:
    719		us->protocol_name = "Transparent SCSI";
    720		us->proto_handler = usb_stor_transparent_scsi_command;
    721		break;
    722
    723	case USB_SC_UFI:
    724		us->protocol_name = "Uniform Floppy Interface (UFI)";
    725		us->proto_handler = usb_stor_ufi_command;
    726		break;
    727	}
    728}
    729
    730/* Get the pipe settings */
    731static int get_pipes(struct us_data *us)
    732{
    733	struct usb_host_interface *alt = us->pusb_intf->cur_altsetting;
    734	struct usb_endpoint_descriptor *ep_in;
    735	struct usb_endpoint_descriptor *ep_out;
    736	struct usb_endpoint_descriptor *ep_int;
    737	int res;
    738
    739	/*
    740	 * Find the first endpoint of each type we need.
    741	 * We are expecting a minimum of 2 endpoints - in and out (bulk).
    742	 * An optional interrupt-in is OK (necessary for CBI protocol).
    743	 * We will ignore any others.
    744	 */
    745	res = usb_find_common_endpoints(alt, &ep_in, &ep_out, NULL, NULL);
    746	if (res) {
    747		usb_stor_dbg(us, "bulk endpoints not found\n");
    748		return res;
    749	}
    750
    751	res = usb_find_int_in_endpoint(alt, &ep_int);
    752	if (res && us->protocol == USB_PR_CBI) {
    753		usb_stor_dbg(us, "interrupt endpoint not found\n");
    754		return res;
    755	}
    756
    757	/* Calculate and store the pipe values */
    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,
    761		usb_endpoint_num(ep_out));
    762	us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev,
    763		usb_endpoint_num(ep_in));
    764	if (ep_int) {
    765		us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
    766			usb_endpoint_num(ep_int));
    767		us->ep_bInterval = ep_int->bInterval;
    768	}
    769	return 0;
    770}
    771
    772/* Initialize all the dynamic resources we need */
    773static int usb_stor_acquire_resources(struct us_data *us)
    774{
    775	int p;
    776	struct task_struct *th;
    777
    778	us->current_urb = usb_alloc_urb(0, GFP_KERNEL);
    779	if (!us->current_urb)
    780		return -ENOMEM;
    781
    782	/*
    783	 * Just before we start our control thread, initialize
    784	 * the device if it needs initialization
    785	 */
    786	if (us->unusual_dev->initFunction) {
    787		p = us->unusual_dev->initFunction(us);
    788		if (p)
    789			return p;
    790	}
    791
    792	/* Start up our control thread */
    793	th = kthread_run(usb_stor_control_thread, us, "usb-storage");
    794	if (IS_ERR(th)) {
    795		dev_warn(&us->pusb_intf->dev,
    796				"Unable to start control thread\n");
    797		return PTR_ERR(th);
    798	}
    799	us->ctl_thread = th;
    800
    801	return 0;
    802}
    803
    804/* Release all our dynamic resources */
    805static void usb_stor_release_resources(struct us_data *us)
    806{
    807	/*
    808	 * Tell the control thread to exit.  The SCSI host must
    809	 * already have been removed and the DISCONNECTING flag set
    810	 * so that we won't accept any more commands.
    811	 */
    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);
    816
    817	/* Call the destructor routine, if it exists */
    818	if (us->extra_destructor) {
    819		usb_stor_dbg(us, "-- calling extra_destructor()\n");
    820		us->extra_destructor(us->extra);
    821	}
    822
    823	/* Free the extra data and the URB */
    824	kfree(us->extra);
    825	usb_free_urb(us->current_urb);
    826}
    827
    828/* Dissociate from the USB device */
    829static void dissociate_dev(struct us_data *us)
    830{
    831	/* Free the buffers */
    832	kfree(us->cr);
    833	usb_free_coherent(us->pusb_dev, US_IOBUF_SIZE, us->iobuf, us->iobuf_dma);
    834
    835	/* Remove our private data from the interface */
    836	usb_set_intfdata(us->pusb_intf, NULL);
    837}
    838
    839/*
    840 * First stage of disconnect processing: stop SCSI scanning,
    841 * remove the host, and stop accepting new commands
    842 */
    843static void quiesce_and_remove_host(struct us_data *us)
    844{
    845	struct Scsi_Host *host = us_to_host(us);
    846
    847	/* If the device is really gone, cut short reset delays */
    848	if (us->pusb_dev->state == USB_STATE_NOTATTACHED) {
    849		set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
    850		wake_up(&us->delay_wait);
    851	}
    852
    853	/*
    854	 * Prevent SCSI scanning (if it hasn't started yet)
    855	 * or wait for the SCSI-scanning routine to stop.
    856	 */
    857	cancel_delayed_work_sync(&us->scan_dwork);
    858
    859	/* Balance autopm calls if scanning was cancelled */
    860	if (test_bit(US_FLIDX_SCAN_PENDING, &us->dflags))
    861		usb_autopm_put_interface_no_suspend(us->pusb_intf);
    862
    863	/*
    864	 * Removing the host will perform an orderly shutdown: caches
    865	 * synchronized, disks spun down, etc.
    866	 */
    867	scsi_remove_host(host);
    868
    869	/*
    870	 * Prevent any new commands from being accepted and cut short
    871	 * reset delays.
    872	 */
    873	scsi_lock(host);
    874	set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
    875	scsi_unlock(host);
    876	wake_up(&us->delay_wait);
    877}
    878
    879/* Second stage of disconnect processing: deallocate all resources */
    880static void release_everything(struct us_data *us)
    881{
    882	usb_stor_release_resources(us);
    883	dissociate_dev(us);
    884
    885	/*
    886	 * Drop our reference to the host; the SCSI core will free it
    887	 * (and "us" along with it) when the refcount becomes 0.
    888	 */
    889	scsi_host_put(us_to_host(us));
    890}
    891
    892/* Delayed-work routine to carry out SCSI-device scanning */
    893static void usb_stor_scan_dwork(struct work_struct *work)
    894{
    895	struct us_data *us = container_of(work, struct us_data,
    896			scan_dwork.work);
    897	struct device *dev = &us->pusb_intf->dev;
    898
    899	dev_dbg(dev, "starting scan\n");
    900
    901	/* For bulk-only devices, determine the max LUN value */
    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);
    907		/*
    908		 * Allow proper scanning of devices that present more than 8 LUNs
    909		 * While not affecting other devices that may need the previous
    910		 * behavior
    911		 */
    912		if (us->max_lun >= 8)
    913			us_to_host(us)->max_lun = us->max_lun+1;
    914		mutex_unlock(&us->dev_mutex);
    915	}
    916	scsi_scan_host(us_to_host(us));
    917	dev_dbg(dev, "scan complete\n");
    918
    919	/* Should we unbind if no devices were detected? */
    920
    921	usb_autopm_put_interface(us->pusb_intf);
    922	clear_bit(US_FLIDX_SCAN_PENDING, &us->dflags);
    923}
    924
    925static unsigned int usb_stor_sg_tablesize(struct usb_interface *intf)
    926{
    927	struct usb_device *usb_dev = interface_to_usbdev(intf);
    928
    929	if (usb_dev->bus->sg_tablesize) {
    930		return usb_dev->bus->sg_tablesize;
    931	}
    932	return SG_ALL;
    933}
    934
    935/* First part of general USB mass-storage probing */
    936int usb_stor_probe1(struct us_data **pus,
    937		struct usb_interface *intf,
    938		const struct usb_device_id *id,
    939		const struct us_unusual_dev *unusual_dev,
    940		struct scsi_host_template *sht)
    941{
    942	struct Scsi_Host *host;
    943	struct us_data *us;
    944	int result;
    945
    946	dev_info(&intf->dev, "USB Mass Storage device detected\n");
    947
    948	/*
    949	 * Ask the SCSI layer to allocate a host structure, with extra
    950	 * space at the end for our private us_data structure.
    951	 */
    952	host = scsi_host_alloc(sht, sizeof(*us));
    953	if (!host) {
    954		dev_warn(&intf->dev, "Unable to allocate the scsi host\n");
    955		return -ENOMEM;
    956	}
    957
    958	/*
    959	 * Allow 16-byte CDBs and thus > 2TB
    960	 */
    961	host->max_cmd_len = 16;
    962	host->sg_tablesize = usb_stor_sg_tablesize(intf);
    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);
    970
    971	/* Associate the us_data structure with the USB device */
    972	result = associate_dev(us, intf);
    973	if (result)
    974		goto BadDevice;
    975
    976	/* Get the unusual_devs entries and the descriptors */
    977	result = get_device_info(us, id, unusual_dev);
    978	if (result)
    979		goto BadDevice;
    980
    981	/* Get standard transport and protocol settings */
    982	get_transport(us);
    983	get_protocol(us);
    984
    985	/*
    986	 * Give the caller a chance to fill in specialized transport
    987	 * or protocol settings.
    988	 */
    989	return 0;
    990
    991BadDevice:
    992	usb_stor_dbg(us, "storage_probe() failed\n");
    993	release_everything(us);
    994	return result;
    995}
    996EXPORT_SYMBOL_GPL(usb_stor_probe1);
    997
    998/* Second part of general USB mass-storage probing */
    999int 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 */
   1073HostAddErr:
   1074	usb_autopm_put_interface_no_suspend(us->pusb_intf);
   1075BadDevice:
   1076	usb_stor_dbg(us, "storage_probe() failed\n");
   1077	release_everything(us);
   1078	return result;
   1079}
   1080EXPORT_SYMBOL_GPL(usb_stor_probe2);
   1081
   1082/* Handle a USB mass-storage disconnect */
   1083void 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}
   1090EXPORT_SYMBOL_GPL(usb_stor_disconnect);
   1091
   1092static struct scsi_host_template usb_stor_host_template;
   1093
   1094/* The main probe routine for standard devices */
   1095static 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
   1145static 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
   1159module_usb_stor_driver(usb_storage_driver, usb_stor_host_template, DRV_NAME);