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