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