[PATCH] UFS: inode->i_sem is not released in error path
[linux-2.6/verdex.git] / drivers / usb / storage / usb.c
blobdbcf23980ff13f3f305857b78f297c1838940d69
1 /* Driver for USB Mass Storage compliant devices
3 * $Id: usb.c,v 1.75 2002/04/22 03:39:43 mdharm Exp $
5 * Current development and maintenance by:
6 * (c) 1999-2003 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
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)
12 * Initial work by:
13 * (c) 1999 Michael Gee (michael@linuxspecific.com)
15 * usb_device_id support by Adam J. Richter (adam@yggdrasil.com):
16 * (c) 2000 Yggdrasil Computing, Inc.
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.
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.
29 * Also, for certain devices, the interrupt endpoint is used to convey
30 * status of a command.
32 * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more
33 * information about this driver.
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.
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.
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.
50 #include <linux/config.h>
51 #include <linux/sched.h>
52 #include <linux/errno.h>
53 #include <linux/suspend.h>
54 #include <linux/module.h>
55 #include <linux/init.h>
56 #include <linux/slab.h>
57 #include <linux/kthread.h>
59 #include <scsi/scsi.h>
60 #include <scsi/scsi_cmnd.h>
61 #include <scsi/scsi_device.h>
63 #include "usb.h"
64 #include "scsiglue.h"
65 #include "transport.h"
66 #include "protocol.h"
67 #include "debug.h"
68 #include "initializers.h"
70 #ifdef CONFIG_USB_STORAGE_USBAT
71 #include "shuttle_usbat.h"
72 #endif
73 #ifdef CONFIG_USB_STORAGE_SDDR09
74 #include "sddr09.h"
75 #endif
76 #ifdef CONFIG_USB_STORAGE_SDDR55
77 #include "sddr55.h"
78 #endif
79 #ifdef CONFIG_USB_STORAGE_DPCM
80 #include "dpcm.h"
81 #endif
82 #ifdef CONFIG_USB_STORAGE_FREECOM
83 #include "freecom.h"
84 #endif
85 #ifdef CONFIG_USB_STORAGE_ISD200
86 #include "isd200.h"
87 #endif
88 #ifdef CONFIG_USB_STORAGE_DATAFAB
89 #include "datafab.h"
90 #endif
91 #ifdef CONFIG_USB_STORAGE_JUMPSHOT
92 #include "jumpshot.h"
93 #endif
94 #ifdef CONFIG_USB_STORAGE_ONETOUCH
95 #include "onetouch.h"
96 #endif
97 #ifdef CONFIG_USB_STORAGE_ALAUDA
98 #include "alauda.h"
99 #endif
101 /* Some informational data */
102 MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
103 MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
104 MODULE_LICENSE("GPL");
106 static unsigned int delay_use = 5;
107 module_param(delay_use, uint, S_IRUGO | S_IWUSR);
108 MODULE_PARM_DESC(delay_use, "seconds to delay before using a new device");
111 /* These are used to make sure the module doesn't unload before all the
112 * threads have exited.
114 static atomic_t total_threads = ATOMIC_INIT(0);
115 static DECLARE_COMPLETION(threads_gone);
119 * The entries in this table correspond, line for line,
120 * with the entries of us_unusual_dev_list[].
122 #ifndef CONFIG_USB_LIBUSUAL
124 #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
125 vendorName, productName,useProtocol, useTransport, \
126 initFunction, flags) \
127 { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin,bcdDeviceMax), \
128 .driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
130 #define USUAL_DEV(useProto, useTrans, useType) \
131 { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans), \
132 .driver_info = (USB_US_TYPE_STOR<<24) }
134 static struct usb_device_id storage_usb_ids [] = {
136 # include "unusual_devs.h"
137 #undef UNUSUAL_DEV
138 #undef USUAL_DEV
139 /* Terminating entry */
143 MODULE_DEVICE_TABLE (usb, storage_usb_ids);
144 #endif /* CONFIG_USB_LIBUSUAL */
146 /* This is the list of devices we recognize, along with their flag data */
148 /* The vendor name should be kept at eight characters or less, and
149 * the product name should be kept at 16 characters or less. If a device
150 * has the US_FL_FIX_INQUIRY flag, then the vendor and product names
151 * normally generated by a device thorugh the INQUIRY response will be
152 * taken from this list, and this is the reason for the above size
153 * restriction. However, if the flag is not present, then you
154 * are free to use as many characters as you like.
157 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
158 vendor_name, product_name, use_protocol, use_transport, \
159 init_function, Flags) \
161 .vendorName = vendor_name, \
162 .productName = product_name, \
163 .useProtocol = use_protocol, \
164 .useTransport = use_transport, \
165 .initFunction = init_function, \
168 #define USUAL_DEV(use_protocol, use_transport, use_type) \
170 .useProtocol = use_protocol, \
171 .useTransport = use_transport, \
174 static struct us_unusual_dev us_unusual_dev_list[] = {
175 # include "unusual_devs.h"
176 # undef UNUSUAL_DEV
177 # undef USUAL_DEV
179 /* Terminating entry */
180 { NULL }
184 #ifdef CONFIG_PM /* Minimal support for suspend and resume */
186 static int storage_suspend(struct usb_interface *iface, pm_message_t message)
188 struct us_data *us = usb_get_intfdata(iface);
190 /* Wait until no command is running */
191 down(&us->dev_semaphore);
193 US_DEBUGP("%s\n", __FUNCTION__);
194 if (us->suspend_resume_hook)
195 (us->suspend_resume_hook)(us, US_SUSPEND);
196 iface->dev.power.power_state.event = message.event;
198 /* When runtime PM is working, we'll set a flag to indicate
199 * whether we should autoresume when a SCSI request arrives. */
201 up(&us->dev_semaphore);
202 return 0;
205 static int storage_resume(struct usb_interface *iface)
207 struct us_data *us = usb_get_intfdata(iface);
209 down(&us->dev_semaphore);
211 US_DEBUGP("%s\n", __FUNCTION__);
212 if (us->suspend_resume_hook)
213 (us->suspend_resume_hook)(us, US_RESUME);
214 iface->dev.power.power_state.event = PM_EVENT_ON;
216 up(&us->dev_semaphore);
217 return 0;
220 #endif /* CONFIG_PM */
223 * fill_inquiry_response takes an unsigned char array (which must
224 * be at least 36 characters) and populates the vendor name,
225 * product name, and revision fields. Then the array is copied
226 * into the SCSI command's response buffer (oddly enough
227 * called request_buffer). data_len contains the length of the
228 * data array, which again must be at least 36.
231 void fill_inquiry_response(struct us_data *us, unsigned char *data,
232 unsigned int data_len)
234 if (data_len<36) // You lose.
235 return;
237 if(data[0]&0x20) { /* USB device currently not connected. Return
238 peripheral qualifier 001b ("...however, the
239 physical device is not currently connected
240 to this logical unit") and leave vendor and
241 product identification empty. ("If the target
242 does store some of the INQUIRY data on the
243 device, it may return zeros or ASCII spaces
244 (20h) in those fields until the data is
245 available from the device."). */
246 memset(data+8,0,28);
247 } else {
248 u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice);
249 memcpy(data+8, us->unusual_dev->vendorName,
250 strlen(us->unusual_dev->vendorName) > 8 ? 8 :
251 strlen(us->unusual_dev->vendorName));
252 memcpy(data+16, us->unusual_dev->productName,
253 strlen(us->unusual_dev->productName) > 16 ? 16 :
254 strlen(us->unusual_dev->productName));
255 data[32] = 0x30 + ((bcdDevice>>12) & 0x0F);
256 data[33] = 0x30 + ((bcdDevice>>8) & 0x0F);
257 data[34] = 0x30 + ((bcdDevice>>4) & 0x0F);
258 data[35] = 0x30 + ((bcdDevice) & 0x0F);
261 usb_stor_set_xfer_buf(data, data_len, us->srb);
264 static int usb_stor_control_thread(void * __us)
266 struct us_data *us = (struct us_data *)__us;
267 struct Scsi_Host *host = us_to_host(us);
269 current->flags |= PF_NOFREEZE;
271 for(;;) {
272 US_DEBUGP("*** thread sleeping.\n");
273 if(down_interruptible(&us->sema))
274 break;
276 US_DEBUGP("*** thread awakened.\n");
278 /* lock the device pointers */
279 down(&(us->dev_semaphore));
281 /* if the device has disconnected, we are free to exit */
282 if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
283 US_DEBUGP("-- exiting\n");
284 up(&(us->dev_semaphore));
285 break;
288 /* lock access to the state */
289 scsi_lock(host);
291 /* has the command timed out *already* ? */
292 if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) {
293 us->srb->result = DID_ABORT << 16;
294 goto SkipForAbort;
297 scsi_unlock(host);
299 /* reject the command if the direction indicator
300 * is UNKNOWN
302 if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
303 US_DEBUGP("UNKNOWN data direction\n");
304 us->srb->result = DID_ERROR << 16;
307 /* reject if target != 0 or if LUN is higher than
308 * the maximum known LUN
310 else if (us->srb->device->id &&
311 !(us->flags & US_FL_SCM_MULT_TARG)) {
312 US_DEBUGP("Bad target number (%d:%d)\n",
313 us->srb->device->id, us->srb->device->lun);
314 us->srb->result = DID_BAD_TARGET << 16;
317 else if (us->srb->device->lun > us->max_lun) {
318 US_DEBUGP("Bad LUN (%d:%d)\n",
319 us->srb->device->id, us->srb->device->lun);
320 us->srb->result = DID_BAD_TARGET << 16;
323 /* Handle those devices which need us to fake
324 * their inquiry data */
325 else if ((us->srb->cmnd[0] == INQUIRY) &&
326 (us->flags & US_FL_FIX_INQUIRY)) {
327 unsigned char data_ptr[36] = {
328 0x00, 0x80, 0x02, 0x02,
329 0x1F, 0x00, 0x00, 0x00};
331 US_DEBUGP("Faking INQUIRY command\n");
332 fill_inquiry_response(us, data_ptr, 36);
333 us->srb->result = SAM_STAT_GOOD;
336 /* we've got a command, let's do it! */
337 else {
338 US_DEBUG(usb_stor_show_command(us->srb));
339 us->proto_handler(us->srb, us);
342 /* lock access to the state */
343 scsi_lock(host);
345 /* indicate that the command is done */
346 if (us->srb->result != DID_ABORT << 16) {
347 US_DEBUGP("scsi cmd done, result=0x%x\n",
348 us->srb->result);
349 us->srb->scsi_done(us->srb);
350 } else {
351 SkipForAbort:
352 US_DEBUGP("scsi command aborted\n");
355 /* If an abort request was received we need to signal that
356 * the abort has finished. The proper test for this is
357 * the TIMED_OUT flag, not srb->result == DID_ABORT, because
358 * the timeout might have occurred after the command had
359 * already completed with a different result code. */
360 if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) {
361 complete(&(us->notify));
363 /* Allow USB transfers to resume */
364 clear_bit(US_FLIDX_ABORTING, &us->flags);
365 clear_bit(US_FLIDX_TIMED_OUT, &us->flags);
368 /* finished working on this command */
369 us->srb = NULL;
370 scsi_unlock(host);
372 /* unlock the device pointers */
373 up(&(us->dev_semaphore));
374 } /* for (;;) */
376 scsi_host_put(host);
378 /* notify the exit routine that we're actually exiting now
380 * complete()/wait_for_completion() is similar to up()/down(),
381 * except that complete() is safe in the case where the structure
382 * is getting deleted in a parallel mode of execution (i.e. just
383 * after the down() -- that's necessary for the thread-shutdown
384 * case.
386 * complete_and_exit() goes even further than this -- it is safe in
387 * the case that the thread of the caller is going away (not just
388 * the structure) -- this is necessary for the module-remove case.
389 * This is important in preemption kernels, which transfer the flow
390 * of execution immediately upon a complete().
392 complete_and_exit(&threads_gone, 0);
395 /***********************************************************************
396 * Device probing and disconnecting
397 ***********************************************************************/
399 /* Associate our private data with the USB device */
400 static int associate_dev(struct us_data *us, struct usb_interface *intf)
402 US_DEBUGP("-- %s\n", __FUNCTION__);
404 /* Fill in the device-related fields */
405 us->pusb_dev = interface_to_usbdev(intf);
406 us->pusb_intf = intf;
407 us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
408 US_DEBUGP("Vendor: 0x%04x, Product: 0x%04x, Revision: 0x%04x\n",
409 le16_to_cpu(us->pusb_dev->descriptor.idVendor),
410 le16_to_cpu(us->pusb_dev->descriptor.idProduct),
411 le16_to_cpu(us->pusb_dev->descriptor.bcdDevice));
412 US_DEBUGP("Interface Subclass: 0x%02x, Protocol: 0x%02x\n",
413 intf->cur_altsetting->desc.bInterfaceSubClass,
414 intf->cur_altsetting->desc.bInterfaceProtocol);
416 /* Store our private data in the interface */
417 usb_set_intfdata(intf, us);
419 /* Allocate the device-related DMA-mapped buffers */
420 us->cr = usb_buffer_alloc(us->pusb_dev, sizeof(*us->cr),
421 GFP_KERNEL, &us->cr_dma);
422 if (!us->cr) {
423 US_DEBUGP("usb_ctrlrequest allocation failed\n");
424 return -ENOMEM;
427 us->iobuf = usb_buffer_alloc(us->pusb_dev, US_IOBUF_SIZE,
428 GFP_KERNEL, &us->iobuf_dma);
429 if (!us->iobuf) {
430 US_DEBUGP("I/O buffer allocation failed\n");
431 return -ENOMEM;
434 us->sensebuf = kmalloc(US_SENSE_SIZE, GFP_KERNEL);
435 if (!us->sensebuf) {
436 US_DEBUGP("Sense buffer allocation failed\n");
437 return -ENOMEM;
439 return 0;
442 /* Find an unusual_dev descriptor (always succeeds in the current code) */
443 static struct us_unusual_dev *find_unusual(const struct usb_device_id *id)
445 const int id_index = id - storage_usb_ids;
446 return &us_unusual_dev_list[id_index];
449 /* Get the unusual_devs entries and the string descriptors */
450 static void get_device_info(struct us_data *us, const struct usb_device_id *id)
452 struct usb_device *dev = us->pusb_dev;
453 struct usb_interface_descriptor *idesc =
454 &us->pusb_intf->cur_altsetting->desc;
455 struct us_unusual_dev *unusual_dev = find_unusual(id);
457 /* Store the entries */
458 us->unusual_dev = unusual_dev;
459 us->subclass = (unusual_dev->useProtocol == US_SC_DEVICE) ?
460 idesc->bInterfaceSubClass :
461 unusual_dev->useProtocol;
462 us->protocol = (unusual_dev->useTransport == US_PR_DEVICE) ?
463 idesc->bInterfaceProtocol :
464 unusual_dev->useTransport;
465 us->flags = USB_US_ORIG_FLAGS(id->driver_info);
468 * This flag is only needed when we're in high-speed, so let's
469 * disable it if we're in full-speed
471 if (dev->speed != USB_SPEED_HIGH)
472 us->flags &= ~US_FL_GO_SLOW;
474 /* Log a message if a non-generic unusual_dev entry contains an
475 * unnecessary subclass or protocol override. This may stimulate
476 * reports from users that will help us remove unneeded entries
477 * from the unusual_devs.h table.
479 if (id->idVendor || id->idProduct) {
480 static const char *msgs[3] = {
481 "an unneeded SubClass entry",
482 "an unneeded Protocol entry",
483 "unneeded SubClass and Protocol entries"};
484 struct usb_device_descriptor *ddesc = &dev->descriptor;
485 int msg = -1;
487 if (unusual_dev->useProtocol != US_SC_DEVICE &&
488 us->subclass == idesc->bInterfaceSubClass)
489 msg += 1;
490 if (unusual_dev->useTransport != US_PR_DEVICE &&
491 us->protocol == idesc->bInterfaceProtocol)
492 msg += 2;
493 if (msg >= 0 && !(us->flags & US_FL_NEED_OVERRIDE))
494 printk(KERN_NOTICE USB_STORAGE "This device "
495 "(%04x,%04x,%04x S %02x P %02x)"
496 " has %s in unusual_devs.h\n"
497 " Please send a copy of this message to "
498 "<linux-usb-devel@lists.sourceforge.net>\n",
499 le16_to_cpu(ddesc->idVendor),
500 le16_to_cpu(ddesc->idProduct),
501 le16_to_cpu(ddesc->bcdDevice),
502 idesc->bInterfaceSubClass,
503 idesc->bInterfaceProtocol,
504 msgs[msg]);
508 /* Get the transport settings */
509 static int get_transport(struct us_data *us)
511 switch (us->protocol) {
512 case US_PR_CB:
513 us->transport_name = "Control/Bulk";
514 us->transport = usb_stor_CB_transport;
515 us->transport_reset = usb_stor_CB_reset;
516 us->max_lun = 7;
517 break;
519 case US_PR_CBI:
520 us->transport_name = "Control/Bulk/Interrupt";
521 us->transport = usb_stor_CBI_transport;
522 us->transport_reset = usb_stor_CB_reset;
523 us->max_lun = 7;
524 break;
526 case US_PR_BULK:
527 us->transport_name = "Bulk";
528 us->transport = usb_stor_Bulk_transport;
529 us->transport_reset = usb_stor_Bulk_reset;
530 break;
532 #ifdef CONFIG_USB_STORAGE_USBAT
533 case US_PR_USBAT:
534 us->transport_name = "Shuttle USBAT";
535 us->transport = usbat_transport;
536 us->transport_reset = usb_stor_CB_reset;
537 us->max_lun = 1;
538 break;
539 #endif
541 #ifdef CONFIG_USB_STORAGE_SDDR09
542 case US_PR_EUSB_SDDR09:
543 us->transport_name = "EUSB/SDDR09";
544 us->transport = sddr09_transport;
545 us->transport_reset = usb_stor_CB_reset;
546 us->max_lun = 0;
547 break;
548 #endif
550 #ifdef CONFIG_USB_STORAGE_SDDR55
551 case US_PR_SDDR55:
552 us->transport_name = "SDDR55";
553 us->transport = sddr55_transport;
554 us->transport_reset = sddr55_reset;
555 us->max_lun = 0;
556 break;
557 #endif
559 #ifdef CONFIG_USB_STORAGE_DPCM
560 case US_PR_DPCM_USB:
561 us->transport_name = "Control/Bulk-EUSB/SDDR09";
562 us->transport = dpcm_transport;
563 us->transport_reset = usb_stor_CB_reset;
564 us->max_lun = 1;
565 break;
566 #endif
568 #ifdef CONFIG_USB_STORAGE_FREECOM
569 case US_PR_FREECOM:
570 us->transport_name = "Freecom";
571 us->transport = freecom_transport;
572 us->transport_reset = usb_stor_freecom_reset;
573 us->max_lun = 0;
574 break;
575 #endif
577 #ifdef CONFIG_USB_STORAGE_DATAFAB
578 case US_PR_DATAFAB:
579 us->transport_name = "Datafab Bulk-Only";
580 us->transport = datafab_transport;
581 us->transport_reset = usb_stor_Bulk_reset;
582 us->max_lun = 1;
583 break;
584 #endif
586 #ifdef CONFIG_USB_STORAGE_JUMPSHOT
587 case US_PR_JUMPSHOT:
588 us->transport_name = "Lexar Jumpshot Control/Bulk";
589 us->transport = jumpshot_transport;
590 us->transport_reset = usb_stor_Bulk_reset;
591 us->max_lun = 1;
592 break;
593 #endif
595 default:
596 return -EIO;
598 US_DEBUGP("Transport: %s\n", us->transport_name);
600 /* fix for single-lun devices */
601 if (us->flags & US_FL_SINGLE_LUN)
602 us->max_lun = 0;
603 return 0;
606 /* Get the protocol settings */
607 static int get_protocol(struct us_data *us)
609 switch (us->subclass) {
610 case US_SC_RBC:
611 us->protocol_name = "Reduced Block Commands (RBC)";
612 us->proto_handler = usb_stor_transparent_scsi_command;
613 break;
615 case US_SC_8020:
616 us->protocol_name = "8020i";
617 us->proto_handler = usb_stor_ATAPI_command;
618 us->max_lun = 0;
619 break;
621 case US_SC_QIC:
622 us->protocol_name = "QIC-157";
623 us->proto_handler = usb_stor_qic157_command;
624 us->max_lun = 0;
625 break;
627 case US_SC_8070:
628 us->protocol_name = "8070i";
629 us->proto_handler = usb_stor_ATAPI_command;
630 us->max_lun = 0;
631 break;
633 case US_SC_SCSI:
634 us->protocol_name = "Transparent SCSI";
635 us->proto_handler = usb_stor_transparent_scsi_command;
636 break;
638 case US_SC_UFI:
639 us->protocol_name = "Uniform Floppy Interface (UFI)";
640 us->proto_handler = usb_stor_ufi_command;
641 break;
643 #ifdef CONFIG_USB_STORAGE_ISD200
644 case US_SC_ISD200:
645 us->protocol_name = "ISD200 ATA/ATAPI";
646 us->proto_handler = isd200_ata_command;
647 break;
648 #endif
650 #ifdef CONFIG_USB_STORAGE_ALAUDA
651 case US_PR_ALAUDA:
652 us->transport_name = "Alauda Control/Bulk";
653 us->transport = alauda_transport;
654 us->transport_reset = usb_stor_Bulk_reset;
655 us->max_lun = 1;
656 break;
657 #endif
659 default:
660 return -EIO;
662 US_DEBUGP("Protocol: %s\n", us->protocol_name);
663 return 0;
666 /* Get the pipe settings */
667 static int get_pipes(struct us_data *us)
669 struct usb_host_interface *altsetting =
670 us->pusb_intf->cur_altsetting;
671 int i;
672 struct usb_endpoint_descriptor *ep;
673 struct usb_endpoint_descriptor *ep_in = NULL;
674 struct usb_endpoint_descriptor *ep_out = NULL;
675 struct usb_endpoint_descriptor *ep_int = NULL;
678 * Find the endpoints we need.
679 * We are expecting a minimum of 2 endpoints - in and out (bulk).
680 * An optional interrupt is OK (necessary for CBI protocol).
681 * We will ignore any others.
683 for (i = 0; i < altsetting->desc.bNumEndpoints; i++) {
684 ep = &altsetting->endpoint[i].desc;
686 /* Is it a BULK endpoint? */
687 if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
688 == USB_ENDPOINT_XFER_BULK) {
689 /* BULK in or out? */
690 if (ep->bEndpointAddress & USB_DIR_IN)
691 ep_in = ep;
692 else
693 ep_out = ep;
696 /* Is it an interrupt endpoint? */
697 else if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
698 == USB_ENDPOINT_XFER_INT) {
699 ep_int = ep;
703 if (!ep_in || !ep_out || (us->protocol == US_PR_CBI && !ep_int)) {
704 US_DEBUGP("Endpoint sanity check failed! Rejecting dev.\n");
705 return -EIO;
708 /* Calculate and store the pipe values */
709 us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0);
710 us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0);
711 us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev,
712 ep_out->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
713 us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev,
714 ep_in->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
715 if (ep_int) {
716 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
717 ep_int->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
718 us->ep_bInterval = ep_int->bInterval;
720 return 0;
723 /* Initialize all the dynamic resources we need */
724 static int usb_stor_acquire_resources(struct us_data *us)
726 int p;
727 struct task_struct *th;
729 us->current_urb = usb_alloc_urb(0, GFP_KERNEL);
730 if (!us->current_urb) {
731 US_DEBUGP("URB allocation failed\n");
732 return -ENOMEM;
735 /* Just before we start our control thread, initialize
736 * the device if it needs initialization */
737 if (us->unusual_dev->initFunction) {
738 p = us->unusual_dev->initFunction(us);
739 if (p)
740 return p;
743 /* Start up our control thread */
744 th = kthread_create(usb_stor_control_thread, us, "usb-storage");
745 if (IS_ERR(th)) {
746 printk(KERN_WARNING USB_STORAGE
747 "Unable to start control thread\n");
748 return PTR_ERR(th);
751 /* Take a reference to the host for the control thread and
752 * count it among all the threads we have launched. Then
753 * start it up. */
754 scsi_host_get(us_to_host(us));
755 atomic_inc(&total_threads);
756 wake_up_process(th);
758 return 0;
761 /* Release all our dynamic resources */
762 static void usb_stor_release_resources(struct us_data *us)
764 US_DEBUGP("-- %s\n", __FUNCTION__);
766 /* Tell the control thread to exit. The SCSI host must
767 * already have been removed so it won't try to queue
768 * any more commands.
770 US_DEBUGP("-- sending exit command to thread\n");
771 set_bit(US_FLIDX_DISCONNECTING, &us->flags);
772 up(&us->sema);
774 /* Call the destructor routine, if it exists */
775 if (us->extra_destructor) {
776 US_DEBUGP("-- calling extra_destructor()\n");
777 us->extra_destructor(us->extra);
780 /* Free the extra data and the URB */
781 kfree(us->extra);
782 usb_free_urb(us->current_urb);
785 /* Dissociate from the USB device */
786 static void dissociate_dev(struct us_data *us)
788 US_DEBUGP("-- %s\n", __FUNCTION__);
790 kfree(us->sensebuf);
792 /* Free the device-related DMA-mapped buffers */
793 if (us->cr)
794 usb_buffer_free(us->pusb_dev, sizeof(*us->cr), us->cr,
795 us->cr_dma);
796 if (us->iobuf)
797 usb_buffer_free(us->pusb_dev, US_IOBUF_SIZE, us->iobuf,
798 us->iobuf_dma);
800 /* Remove our private data from the interface */
801 usb_set_intfdata(us->pusb_intf, NULL);
804 /* First stage of disconnect processing: stop all commands and remove
805 * the host */
806 static void quiesce_and_remove_host(struct us_data *us)
808 /* Prevent new USB transfers, stop the current command, and
809 * interrupt a SCSI-scan or device-reset delay */
810 set_bit(US_FLIDX_DISCONNECTING, &us->flags);
811 usb_stor_stop_transport(us);
812 wake_up(&us->delay_wait);
814 /* It doesn't matter if the SCSI-scanning thread is still running.
815 * The thread will exit when it sees the DISCONNECTING flag. */
817 /* Wait for the current command to finish, then remove the host */
818 down(&us->dev_semaphore);
819 up(&us->dev_semaphore);
821 /* queuecommand won't accept any new commands and the control
822 * thread won't execute a previously-queued command. If there
823 * is such a command pending, complete it with an error. */
824 if (us->srb) {
825 us->srb->result = DID_NO_CONNECT << 16;
826 scsi_lock(us_to_host(us));
827 us->srb->scsi_done(us->srb);
828 us->srb = NULL;
829 scsi_unlock(us_to_host(us));
832 /* Now we own no commands so it's safe to remove the SCSI host */
833 scsi_remove_host(us_to_host(us));
836 /* Second stage of disconnect processing: deallocate all resources */
837 static void release_everything(struct us_data *us)
839 usb_stor_release_resources(us);
840 dissociate_dev(us);
842 /* Drop our reference to the host; the SCSI core will free it
843 * (and "us" along with it) when the refcount becomes 0. */
844 scsi_host_put(us_to_host(us));
847 /* Thread to carry out delayed SCSI-device scanning */
848 static int usb_stor_scan_thread(void * __us)
850 struct us_data *us = (struct us_data *)__us;
852 printk(KERN_DEBUG
853 "usb-storage: device found at %d\n", us->pusb_dev->devnum);
855 /* Wait for the timeout to expire or for a disconnect */
856 if (delay_use > 0) {
857 printk(KERN_DEBUG "usb-storage: waiting for device "
858 "to settle before scanning\n");
859 retry:
860 wait_event_interruptible_timeout(us->delay_wait,
861 test_bit(US_FLIDX_DISCONNECTING, &us->flags),
862 delay_use * HZ);
863 if (try_to_freeze())
864 goto retry;
867 /* If the device is still connected, perform the scanning */
868 if (!test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
870 /* For bulk-only devices, determine the max LUN value */
871 if (us->protocol == US_PR_BULK &&
872 !(us->flags & US_FL_SINGLE_LUN)) {
873 down(&us->dev_semaphore);
874 us->max_lun = usb_stor_Bulk_max_lun(us);
875 up(&us->dev_semaphore);
877 scsi_scan_host(us_to_host(us));
878 printk(KERN_DEBUG "usb-storage: device scan complete\n");
880 /* Should we unbind if no devices were detected? */
883 scsi_host_put(us_to_host(us));
884 complete_and_exit(&threads_gone, 0);
888 /* Probe to see if we can drive a newly-connected USB device */
889 static int storage_probe(struct usb_interface *intf,
890 const struct usb_device_id *id)
892 struct Scsi_Host *host;
893 struct us_data *us;
894 int result;
895 struct task_struct *th;
897 if (usb_usual_check_type(id, USB_US_TYPE_STOR))
898 return -ENXIO;
900 US_DEBUGP("USB Mass Storage device detected\n");
903 * Ask the SCSI layer to allocate a host structure, with extra
904 * space at the end for our private us_data structure.
906 host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us));
907 if (!host) {
908 printk(KERN_WARNING USB_STORAGE
909 "Unable to allocate the scsi host\n");
910 return -ENOMEM;
913 us = host_to_us(host);
914 memset(us, 0, sizeof(struct us_data));
915 init_MUTEX(&(us->dev_semaphore));
916 init_MUTEX_LOCKED(&(us->sema));
917 init_completion(&(us->notify));
918 init_waitqueue_head(&us->delay_wait);
920 /* Associate the us_data structure with the USB device */
921 result = associate_dev(us, intf);
922 if (result)
923 goto BadDevice;
926 * Get the unusual_devs entries and the descriptors
928 * id_index is calculated in the declaration to be the index number
929 * of the match from the usb_device_id table, so we can find the
930 * corresponding entry in the private table.
932 get_device_info(us, id);
934 /* Get the transport, protocol, and pipe settings */
935 result = get_transport(us);
936 if (result)
937 goto BadDevice;
938 result = get_protocol(us);
939 if (result)
940 goto BadDevice;
941 result = get_pipes(us);
942 if (result)
943 goto BadDevice;
945 /* Acquire all the other resources and add the host */
946 result = usb_stor_acquire_resources(us);
947 if (result)
948 goto BadDevice;
949 result = scsi_add_host(host, &intf->dev);
950 if (result) {
951 printk(KERN_WARNING USB_STORAGE
952 "Unable to add the scsi host\n");
953 goto BadDevice;
956 /* Start up the thread for delayed SCSI-device scanning */
957 th = kthread_create(usb_stor_scan_thread, us, "usb-stor-scan");
958 if (IS_ERR(th)) {
959 printk(KERN_WARNING USB_STORAGE
960 "Unable to start the device-scanning thread\n");
961 quiesce_and_remove_host(us);
962 result = PTR_ERR(th);
963 goto BadDevice;
966 /* Take a reference to the host for the scanning thread and
967 * count it among all the threads we have launched. Then
968 * start it up. */
969 scsi_host_get(us_to_host(us));
970 atomic_inc(&total_threads);
971 wake_up_process(th);
973 return 0;
975 /* We come here if there are any problems */
976 BadDevice:
977 US_DEBUGP("storage_probe() failed\n");
978 release_everything(us);
979 return result;
982 /* Handle a disconnect event from the USB core */
983 static void storage_disconnect(struct usb_interface *intf)
985 struct us_data *us = usb_get_intfdata(intf);
987 US_DEBUGP("storage_disconnect() called\n");
988 quiesce_and_remove_host(us);
989 release_everything(us);
992 /***********************************************************************
993 * Initialization and registration
994 ***********************************************************************/
996 static struct usb_driver usb_storage_driver = {
997 .name = "usb-storage",
998 .probe = storage_probe,
999 .disconnect = storage_disconnect,
1000 #ifdef CONFIG_PM
1001 .suspend = storage_suspend,
1002 .resume = storage_resume,
1003 #endif
1004 .id_table = storage_usb_ids,
1007 static int __init usb_stor_init(void)
1009 int retval;
1010 printk(KERN_INFO "Initializing USB Mass Storage driver...\n");
1012 /* register the driver, return usb_register return code if error */
1013 retval = usb_register(&usb_storage_driver);
1014 if (retval == 0) {
1015 printk(KERN_INFO "USB Mass Storage support registered.\n");
1016 usb_usual_set_present(USB_US_TYPE_STOR);
1018 return retval;
1021 static void __exit usb_stor_exit(void)
1023 US_DEBUGP("usb_stor_exit() called\n");
1025 /* Deregister the driver
1026 * This will cause disconnect() to be called for each
1027 * attached unit
1029 US_DEBUGP("-- calling usb_deregister()\n");
1030 usb_deregister(&usb_storage_driver) ;
1032 /* Don't return until all of our control and scanning threads
1033 * have exited. Since each thread signals threads_gone as its
1034 * last act, we have to call wait_for_completion the right number
1035 * of times.
1037 while (atomic_read(&total_threads) > 0) {
1038 wait_for_completion(&threads_gone);
1039 atomic_dec(&total_threads);
1042 usb_usual_clear_present(USB_US_TYPE_STOR);
1045 module_init(usb_stor_init);
1046 module_exit(usb_stor_exit);