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