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