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