Merge branch 'ioat-md-accel-for-linus' of git://lost.foo-projects.org/~dwillia2/git/iop
[linux-2.6] / drivers / usb / storage / usb.c
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         current->flags |= PF_NOFREEZE;
315
316         for(;;) {
317                 US_DEBUGP("*** thread sleeping.\n");
318                 if(down_interruptible(&us->sema))
319                         break;
320                         
321                 US_DEBUGP("*** thread awakened.\n");
322
323                 /* Autoresume the device */
324                 autopm_rc = usb_autopm_get_interface(us->pusb_intf);
325
326                 /* lock the device pointers */
327                 mutex_lock(&(us->dev_mutex));
328
329                 /* if the device has disconnected, we are free to exit */
330                 if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
331                         US_DEBUGP("-- exiting\n");
332                         mutex_unlock(&us->dev_mutex);
333                         break;
334                 }
335
336                 /* lock access to the state */
337                 scsi_lock(host);
338
339                 /* has the command timed out *already* ? */
340                 if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) {
341                         us->srb->result = DID_ABORT << 16;
342                         goto SkipForAbort;
343                 }
344
345                 scsi_unlock(host);
346
347                 /* reject the command if the direction indicator 
348                  * is UNKNOWN
349                  */
350                 if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
351                         US_DEBUGP("UNKNOWN data direction\n");
352                         us->srb->result = DID_ERROR << 16;
353                 }
354
355                 /* reject if target != 0 or if LUN is higher than
356                  * the maximum known LUN
357                  */
358                 else if (us->srb->device->id && 
359                                 !(us->flags & US_FL_SCM_MULT_TARG)) {
360                         US_DEBUGP("Bad target number (%d:%d)\n",
361                                   us->srb->device->id, us->srb->device->lun);
362                         us->srb->result = DID_BAD_TARGET << 16;
363                 }
364
365                 else if (us->srb->device->lun > us->max_lun) {
366                         US_DEBUGP("Bad LUN (%d:%d)\n",
367                                   us->srb->device->id, us->srb->device->lun);
368                         us->srb->result = DID_BAD_TARGET << 16;
369                 }
370
371                 /* Handle those devices which need us to fake 
372                  * their inquiry data */
373                 else if ((us->srb->cmnd[0] == INQUIRY) &&
374                             (us->flags & US_FL_FIX_INQUIRY)) {
375                         unsigned char data_ptr[36] = {
376                             0x00, 0x80, 0x02, 0x02,
377                             0x1F, 0x00, 0x00, 0x00};
378
379                         US_DEBUGP("Faking INQUIRY command\n");
380                         fill_inquiry_response(us, data_ptr, 36);
381                         us->srb->result = SAM_STAT_GOOD;
382                 }
383
384                 /* Did the autoresume fail? */
385                 else if (autopm_rc < 0) {
386                         US_DEBUGP("Could not wake device\n");
387                         us->srb->result = DID_ERROR << 16;
388                 }
389
390                 /* we've got a command, let's do it! */
391                 else {
392                         US_DEBUG(usb_stor_show_command(us->srb));
393                         us->proto_handler(us->srb, us);
394                 }
395
396                 /* lock access to the state */
397                 scsi_lock(host);
398
399                 /* did the command already complete because of a disconnect? */
400                 if (!us->srb)
401                         ;               /* nothing to do */
402
403                 /* indicate that the command is done */
404                 else if (us->srb->result != DID_ABORT << 16) {
405                         US_DEBUGP("scsi cmd done, result=0x%x\n", 
406                                    us->srb->result);
407                         us->srb->scsi_done(us->srb);
408                 } else {
409 SkipForAbort:
410                         US_DEBUGP("scsi command aborted\n");
411                 }
412
413                 /* If an abort request was received we need to signal that
414                  * the abort has finished.  The proper test for this is
415                  * the TIMED_OUT flag, not srb->result == DID_ABORT, because
416                  * the timeout might have occurred after the command had
417                  * already completed with a different result code. */
418                 if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) {
419                         complete(&(us->notify));
420
421                         /* Allow USB transfers to resume */
422                         clear_bit(US_FLIDX_ABORTING, &us->flags);
423                         clear_bit(US_FLIDX_TIMED_OUT, &us->flags);
424                 }
425
426                 /* finished working on this command */
427                 us->srb = NULL;
428                 scsi_unlock(host);
429
430                 /* unlock the device pointers */
431                 mutex_unlock(&us->dev_mutex);
432
433                 /* Start an autosuspend */
434                 if (autopm_rc == 0)
435                         usb_autopm_put_interface(us->pusb_intf);
436         } /* for (;;) */
437
438         /* Wait until we are told to stop */
439         for (;;) {
440                 set_current_state(TASK_INTERRUPTIBLE);
441                 if (kthread_should_stop())
442                         break;
443                 schedule();
444         }
445         __set_current_state(TASK_RUNNING);
446         return 0;
447 }       
448
449 /***********************************************************************
450  * Device probing and disconnecting
451  ***********************************************************************/
452
453 /* Associate our private data with the USB device */
454 static int associate_dev(struct us_data *us, struct usb_interface *intf)
455 {
456         US_DEBUGP("-- %s\n", __FUNCTION__);
457
458         /* Fill in the device-related fields */
459         us->pusb_dev = interface_to_usbdev(intf);
460         us->pusb_intf = intf;
461         us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
462         US_DEBUGP("Vendor: 0x%04x, Product: 0x%04x, Revision: 0x%04x\n",
463                         le16_to_cpu(us->pusb_dev->descriptor.idVendor),
464                         le16_to_cpu(us->pusb_dev->descriptor.idProduct),
465                         le16_to_cpu(us->pusb_dev->descriptor.bcdDevice));
466         US_DEBUGP("Interface Subclass: 0x%02x, Protocol: 0x%02x\n",
467                         intf->cur_altsetting->desc.bInterfaceSubClass,
468                         intf->cur_altsetting->desc.bInterfaceProtocol);
469
470         /* Store our private data in the interface */
471         usb_set_intfdata(intf, us);
472
473         /* Allocate the device-related DMA-mapped buffers */
474         us->cr = usb_buffer_alloc(us->pusb_dev, sizeof(*us->cr),
475                         GFP_KERNEL, &us->cr_dma);
476         if (!us->cr) {
477                 US_DEBUGP("usb_ctrlrequest allocation failed\n");
478                 return -ENOMEM;
479         }
480
481         us->iobuf = usb_buffer_alloc(us->pusb_dev, US_IOBUF_SIZE,
482                         GFP_KERNEL, &us->iobuf_dma);
483         if (!us->iobuf) {
484                 US_DEBUGP("I/O buffer allocation failed\n");
485                 return -ENOMEM;
486         }
487
488         us->sensebuf = kmalloc(US_SENSE_SIZE, GFP_KERNEL);
489         if (!us->sensebuf) {
490                 US_DEBUGP("Sense buffer allocation failed\n");
491                 return -ENOMEM;
492         }
493         return 0;
494 }
495
496 /* Find an unusual_dev descriptor (always succeeds in the current code) */
497 static struct us_unusual_dev *find_unusual(const struct usb_device_id *id)
498 {
499         const int id_index = id - storage_usb_ids;
500         return &us_unusual_dev_list[id_index];
501 }
502
503 /* Get the unusual_devs entries and the string descriptors */
504 static int get_device_info(struct us_data *us, const struct usb_device_id *id)
505 {
506         struct usb_device *dev = us->pusb_dev;
507         struct usb_interface_descriptor *idesc =
508                 &us->pusb_intf->cur_altsetting->desc;
509         struct us_unusual_dev *unusual_dev = find_unusual(id);
510
511         /* Store the entries */
512         us->unusual_dev = unusual_dev;
513         us->subclass = (unusual_dev->useProtocol == US_SC_DEVICE) ?
514                         idesc->bInterfaceSubClass :
515                         unusual_dev->useProtocol;
516         us->protocol = (unusual_dev->useTransport == US_PR_DEVICE) ?
517                         idesc->bInterfaceProtocol :
518                         unusual_dev->useTransport;
519         us->flags = USB_US_ORIG_FLAGS(id->driver_info);
520
521         if (us->flags & US_FL_IGNORE_DEVICE) {
522                 printk(KERN_INFO USB_STORAGE "device ignored\n");
523                 return -ENODEV;
524         }
525
526         /*
527          * This flag is only needed when we're in high-speed, so let's
528          * disable it if we're in full-speed
529          */
530         if (dev->speed != USB_SPEED_HIGH)
531                 us->flags &= ~US_FL_GO_SLOW;
532
533         /* Log a message if a non-generic unusual_dev entry contains an
534          * unnecessary subclass or protocol override.  This may stimulate
535          * reports from users that will help us remove unneeded entries
536          * from the unusual_devs.h table.
537          */
538         if (id->idVendor || id->idProduct) {
539                 static const char *msgs[3] = {
540                         "an unneeded SubClass entry",
541                         "an unneeded Protocol entry",
542                         "unneeded SubClass and Protocol entries"};
543                 struct usb_device_descriptor *ddesc = &dev->descriptor;
544                 int msg = -1;
545
546                 if (unusual_dev->useProtocol != US_SC_DEVICE &&
547                         us->subclass == idesc->bInterfaceSubClass)
548                         msg += 1;
549                 if (unusual_dev->useTransport != US_PR_DEVICE &&
550                         us->protocol == idesc->bInterfaceProtocol)
551                         msg += 2;
552                 if (msg >= 0 && !(us->flags & US_FL_NEED_OVERRIDE))
553                         printk(KERN_NOTICE USB_STORAGE "This device "
554                                 "(%04x,%04x,%04x S %02x P %02x)"
555                                 " has %s in unusual_devs.h (kernel"
556                                 " %s)\n"
557                                 "   Please send a copy of this message to "
558                                 "<linux-usb-devel@lists.sourceforge.net>\n",
559                                 le16_to_cpu(ddesc->idVendor),
560                                 le16_to_cpu(ddesc->idProduct),
561                                 le16_to_cpu(ddesc->bcdDevice),
562                                 idesc->bInterfaceSubClass,
563                                 idesc->bInterfaceProtocol,
564                                 msgs[msg],
565                                 utsname()->release);
566         }
567
568         return 0;
569 }
570
571 /* Get the transport settings */
572 static int get_transport(struct us_data *us)
573 {
574         switch (us->protocol) {
575         case US_PR_CB:
576                 us->transport_name = "Control/Bulk";
577                 us->transport = usb_stor_CB_transport;
578                 us->transport_reset = usb_stor_CB_reset;
579                 us->max_lun = 7;
580                 break;
581
582         case US_PR_CBI:
583                 us->transport_name = "Control/Bulk/Interrupt";
584                 us->transport = usb_stor_CBI_transport;
585                 us->transport_reset = usb_stor_CB_reset;
586                 us->max_lun = 7;
587                 break;
588
589         case US_PR_BULK:
590                 us->transport_name = "Bulk";
591                 us->transport = usb_stor_Bulk_transport;
592                 us->transport_reset = usb_stor_Bulk_reset;
593                 break;
594
595 #ifdef CONFIG_USB_STORAGE_USBAT
596         case US_PR_USBAT:
597                 us->transport_name = "Shuttle USBAT";
598                 us->transport = usbat_transport;
599                 us->transport_reset = usb_stor_CB_reset;
600                 us->max_lun = 1;
601                 break;
602 #endif
603
604 #ifdef CONFIG_USB_STORAGE_SDDR09
605         case US_PR_EUSB_SDDR09:
606                 us->transport_name = "EUSB/SDDR09";
607                 us->transport = sddr09_transport;
608                 us->transport_reset = usb_stor_CB_reset;
609                 us->max_lun = 0;
610                 break;
611 #endif
612
613 #ifdef CONFIG_USB_STORAGE_SDDR55
614         case US_PR_SDDR55:
615                 us->transport_name = "SDDR55";
616                 us->transport = sddr55_transport;
617                 us->transport_reset = sddr55_reset;
618                 us->max_lun = 0;
619                 break;
620 #endif
621
622 #ifdef CONFIG_USB_STORAGE_DPCM
623         case US_PR_DPCM_USB:
624                 us->transport_name = "Control/Bulk-EUSB/SDDR09";
625                 us->transport = dpcm_transport;
626                 us->transport_reset = usb_stor_CB_reset;
627                 us->max_lun = 1;
628                 break;
629 #endif
630
631 #ifdef CONFIG_USB_STORAGE_FREECOM
632         case US_PR_FREECOM:
633                 us->transport_name = "Freecom";
634                 us->transport = freecom_transport;
635                 us->transport_reset = usb_stor_freecom_reset;
636                 us->max_lun = 0;
637                 break;
638 #endif
639
640 #ifdef CONFIG_USB_STORAGE_DATAFAB
641         case US_PR_DATAFAB:
642                 us->transport_name  = "Datafab Bulk-Only";
643                 us->transport = datafab_transport;
644                 us->transport_reset = usb_stor_Bulk_reset;
645                 us->max_lun = 1;
646                 break;
647 #endif
648
649 #ifdef CONFIG_USB_STORAGE_JUMPSHOT
650         case US_PR_JUMPSHOT:
651                 us->transport_name  = "Lexar Jumpshot Control/Bulk";
652                 us->transport = jumpshot_transport;
653                 us->transport_reset = usb_stor_Bulk_reset;
654                 us->max_lun = 1;
655                 break;
656 #endif
657
658 #ifdef CONFIG_USB_STORAGE_ALAUDA
659         case US_PR_ALAUDA:
660                 us->transport_name  = "Alauda Control/Bulk";
661                 us->transport = alauda_transport;
662                 us->transport_reset = usb_stor_Bulk_reset;
663                 us->max_lun = 1;
664                 break;
665 #endif
666
667 #ifdef CONFIG_USB_STORAGE_KARMA
668         case US_PR_KARMA:
669                 us->transport_name = "Rio Karma/Bulk";
670                 us->transport = rio_karma_transport;
671                 us->transport_reset = usb_stor_Bulk_reset;
672                 break;
673 #endif
674
675         default:
676                 return -EIO;
677         }
678         US_DEBUGP("Transport: %s\n", us->transport_name);
679
680         /* fix for single-lun devices */
681         if (us->flags & US_FL_SINGLE_LUN)
682                 us->max_lun = 0;
683         return 0;
684 }
685
686 /* Get the protocol settings */
687 static int get_protocol(struct us_data *us)
688 {
689         switch (us->subclass) {
690         case US_SC_RBC:
691                 us->protocol_name = "Reduced Block Commands (RBC)";
692                 us->proto_handler = usb_stor_transparent_scsi_command;
693                 break;
694
695         case US_SC_8020:
696                 us->protocol_name = "8020i";
697                 us->proto_handler = usb_stor_ATAPI_command;
698                 us->max_lun = 0;
699                 break;
700
701         case US_SC_QIC:
702                 us->protocol_name = "QIC-157";
703                 us->proto_handler = usb_stor_qic157_command;
704                 us->max_lun = 0;
705                 break;
706
707         case US_SC_8070:
708                 us->protocol_name = "8070i";
709                 us->proto_handler = usb_stor_ATAPI_command;
710                 us->max_lun = 0;
711                 break;
712
713         case US_SC_SCSI:
714                 us->protocol_name = "Transparent SCSI";
715                 us->proto_handler = usb_stor_transparent_scsi_command;
716                 break;
717
718         case US_SC_UFI:
719                 us->protocol_name = "Uniform Floppy Interface (UFI)";
720                 us->proto_handler = usb_stor_ufi_command;
721                 break;
722
723 #ifdef CONFIG_USB_STORAGE_ISD200
724         case US_SC_ISD200:
725                 us->protocol_name = "ISD200 ATA/ATAPI";
726                 us->proto_handler = isd200_ata_command;
727                 break;
728 #endif
729
730         default:
731                 return -EIO;
732         }
733         US_DEBUGP("Protocol: %s\n", us->protocol_name);
734         return 0;
735 }
736
737 /* Get the pipe settings */
738 static int get_pipes(struct us_data *us)
739 {
740         struct usb_host_interface *altsetting =
741                 us->pusb_intf->cur_altsetting;
742         int i;
743         struct usb_endpoint_descriptor *ep;
744         struct usb_endpoint_descriptor *ep_in = NULL;
745         struct usb_endpoint_descriptor *ep_out = NULL;
746         struct usb_endpoint_descriptor *ep_int = NULL;
747
748         /*
749          * Find the first endpoint of each type we need.
750          * We are expecting a minimum of 2 endpoints - in and out (bulk).
751          * An optional interrupt-in is OK (necessary for CBI protocol).
752          * We will ignore any others.
753          */
754         for (i = 0; i < altsetting->desc.bNumEndpoints; i++) {
755                 ep = &altsetting->endpoint[i].desc;
756
757                 if (usb_endpoint_xfer_bulk(ep)) {
758                         if (usb_endpoint_dir_in(ep)) {
759                                 if (!ep_in)
760                                         ep_in = ep;
761                         } else {
762                                 if (!ep_out)
763                                         ep_out = ep;
764                         }
765                 }
766
767                 else if (usb_endpoint_is_int_in(ep)) {
768                         if (!ep_int)
769                                 ep_int = ep;
770                 }
771         }
772
773         if (!ep_in || !ep_out || (us->protocol == US_PR_CBI && !ep_int)) {
774                 US_DEBUGP("Endpoint sanity check failed! Rejecting dev.\n");
775                 return -EIO;
776         }
777
778         /* Calculate and store the pipe values */
779         us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0);
780         us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0);
781         us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev,
782                 ep_out->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
783         us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev, 
784                 ep_in->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
785         if (ep_int) {
786                 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
787                         ep_int->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
788                 us->ep_bInterval = ep_int->bInterval;
789         }
790         return 0;
791 }
792
793 /* Initialize all the dynamic resources we need */
794 static int usb_stor_acquire_resources(struct us_data *us)
795 {
796         int p;
797         struct task_struct *th;
798
799         us->current_urb = usb_alloc_urb(0, GFP_KERNEL);
800         if (!us->current_urb) {
801                 US_DEBUGP("URB allocation failed\n");
802                 return -ENOMEM;
803         }
804
805         /* Just before we start our control thread, initialize
806          * the device if it needs initialization */
807         if (us->unusual_dev->initFunction) {
808                 p = us->unusual_dev->initFunction(us);
809                 if (p)
810                         return p;
811         }
812
813         /* Start up our control thread */
814         th = kthread_run(usb_stor_control_thread, us, "usb-storage");
815         if (IS_ERR(th)) {
816                 printk(KERN_WARNING USB_STORAGE 
817                        "Unable to start control thread\n");
818                 return PTR_ERR(th);
819         }
820         us->ctl_thread = th;
821
822         return 0;
823 }
824
825 /* Release all our dynamic resources */
826 static void usb_stor_release_resources(struct us_data *us)
827 {
828         US_DEBUGP("-- %s\n", __FUNCTION__);
829
830         /* Tell the control thread to exit.  The SCSI host must
831          * already have been removed so it won't try to queue
832          * any more commands.
833          */
834         US_DEBUGP("-- sending exit command to thread\n");
835         set_bit(US_FLIDX_DISCONNECTING, &us->flags);
836         up(&us->sema);
837         if (us->ctl_thread)
838                 kthread_stop(us->ctl_thread);
839
840         /* Call the destructor routine, if it exists */
841         if (us->extra_destructor) {
842                 US_DEBUGP("-- calling extra_destructor()\n");
843                 us->extra_destructor(us->extra);
844         }
845
846         /* Free the extra data and the URB */
847         kfree(us->extra);
848         usb_free_urb(us->current_urb);
849 }
850
851 /* Dissociate from the USB device */
852 static void dissociate_dev(struct us_data *us)
853 {
854         US_DEBUGP("-- %s\n", __FUNCTION__);
855
856         kfree(us->sensebuf);
857
858         /* Free the device-related DMA-mapped buffers */
859         if (us->cr)
860                 usb_buffer_free(us->pusb_dev, sizeof(*us->cr), us->cr,
861                                 us->cr_dma);
862         if (us->iobuf)
863                 usb_buffer_free(us->pusb_dev, US_IOBUF_SIZE, us->iobuf,
864                                 us->iobuf_dma);
865
866         /* Remove our private data from the interface */
867         usb_set_intfdata(us->pusb_intf, NULL);
868 }
869
870 /* First stage of disconnect processing: stop all commands and remove
871  * the host */
872 static void quiesce_and_remove_host(struct us_data *us)
873 {
874         struct Scsi_Host *host = us_to_host(us);
875
876         /* Prevent new USB transfers, stop the current command, and
877          * interrupt a SCSI-scan or device-reset delay */
878         scsi_lock(host);
879         set_bit(US_FLIDX_DISCONNECTING, &us->flags);
880         scsi_unlock(host);
881         usb_stor_stop_transport(us);
882         wake_up(&us->delay_wait);
883
884         /* It doesn't matter if the SCSI-scanning thread is still running.
885          * The thread will exit when it sees the DISCONNECTING flag. */
886
887         /* queuecommand won't accept any new commands and the control
888          * thread won't execute a previously-queued command.  If there
889          * is such a command pending, complete it with an error. */
890         mutex_lock(&us->dev_mutex);
891         if (us->srb) {
892                 us->srb->result = DID_NO_CONNECT << 16;
893                 scsi_lock(host);
894                 us->srb->scsi_done(us->srb);
895                 us->srb = NULL;
896                 scsi_unlock(host);
897         }
898         mutex_unlock(&us->dev_mutex);
899
900         /* Now we own no commands so it's safe to remove the SCSI host */
901         scsi_remove_host(host);
902 }
903
904 /* Second stage of disconnect processing: deallocate all resources */
905 static void release_everything(struct us_data *us)
906 {
907         usb_stor_release_resources(us);
908         dissociate_dev(us);
909
910         /* Drop our reference to the host; the SCSI core will free it
911          * (and "us" along with it) when the refcount becomes 0. */
912         scsi_host_put(us_to_host(us));
913 }
914
915 /* Thread to carry out delayed SCSI-device scanning */
916 static int usb_stor_scan_thread(void * __us)
917 {
918         struct us_data *us = (struct us_data *)__us;
919
920         printk(KERN_DEBUG
921                 "usb-storage: device found at %d\n", us->pusb_dev->devnum);
922
923         /* Wait for the timeout to expire or for a disconnect */
924         if (delay_use > 0) {
925                 printk(KERN_DEBUG "usb-storage: waiting for device "
926                                 "to settle before scanning\n");
927 retry:
928                 wait_event_interruptible_timeout(us->delay_wait,
929                                 test_bit(US_FLIDX_DISCONNECTING, &us->flags),
930                                 delay_use * HZ);
931                 if (try_to_freeze())
932                         goto retry;
933         }
934
935         /* If the device is still connected, perform the scanning */
936         if (!test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
937
938                 /* For bulk-only devices, determine the max LUN value */
939                 if (us->protocol == US_PR_BULK &&
940                                 !(us->flags & US_FL_SINGLE_LUN)) {
941                         mutex_lock(&us->dev_mutex);
942                         us->max_lun = usb_stor_Bulk_max_lun(us);
943                         mutex_unlock(&us->dev_mutex);
944                 }
945                 scsi_scan_host(us_to_host(us));
946                 printk(KERN_DEBUG "usb-storage: device scan complete\n");
947
948                 /* Should we unbind if no devices were detected? */
949         }
950
951         scsi_host_put(us_to_host(us));
952         usb_autopm_put_interface(us->pusb_intf);
953         complete_and_exit(&threads_gone, 0);
954 }
955
956
957 /* Probe to see if we can drive a newly-connected USB device */
958 static int storage_probe(struct usb_interface *intf,
959                          const struct usb_device_id *id)
960 {
961         struct Scsi_Host *host;
962         struct us_data *us;
963         int result;
964         struct task_struct *th;
965
966         if (usb_usual_check_type(id, USB_US_TYPE_STOR))
967                 return -ENXIO;
968
969         US_DEBUGP("USB Mass Storage device detected\n");
970
971         /*
972          * Ask the SCSI layer to allocate a host structure, with extra
973          * space at the end for our private us_data structure.
974          */
975         host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us));
976         if (!host) {
977                 printk(KERN_WARNING USB_STORAGE
978                         "Unable to allocate the scsi host\n");
979                 return -ENOMEM;
980         }
981
982         us = host_to_us(host);
983         memset(us, 0, sizeof(struct us_data));
984         mutex_init(&(us->dev_mutex));
985         init_MUTEX_LOCKED(&(us->sema));
986         init_completion(&(us->notify));
987         init_waitqueue_head(&us->delay_wait);
988
989         /* Associate the us_data structure with the USB device */
990         result = associate_dev(us, intf);
991         if (result)
992                 goto BadDevice;
993
994         /*
995          * Get the unusual_devs entries and the descriptors
996          *
997          * id_index is calculated in the declaration to be the index number
998          * of the match from the usb_device_id table, so we can find the
999          * corresponding entry in the private table.
1000          */
1001         result = get_device_info(us, id);
1002         if (result)
1003                 goto BadDevice;
1004
1005         /* Get the transport, protocol, and pipe settings */
1006         result = get_transport(us);
1007         if (result)
1008                 goto BadDevice;
1009         result = get_protocol(us);
1010         if (result)
1011                 goto BadDevice;
1012         result = get_pipes(us);
1013         if (result)
1014                 goto BadDevice;
1015
1016         /* Acquire all the other resources and add the host */
1017         result = usb_stor_acquire_resources(us);
1018         if (result)
1019                 goto BadDevice;
1020         result = scsi_add_host(host, &intf->dev);
1021         if (result) {
1022                 printk(KERN_WARNING USB_STORAGE
1023                         "Unable to add the scsi host\n");
1024                 goto BadDevice;
1025         }
1026
1027         /* Start up the thread for delayed SCSI-device scanning */
1028         th = kthread_create(usb_stor_scan_thread, us, "usb-stor-scan");
1029         if (IS_ERR(th)) {
1030                 printk(KERN_WARNING USB_STORAGE 
1031                        "Unable to start the device-scanning thread\n");
1032                 quiesce_and_remove_host(us);
1033                 result = PTR_ERR(th);
1034                 goto BadDevice;
1035         }
1036
1037         /* Take a reference to the host for the scanning thread and
1038          * count it among all the threads we have launched.  Then
1039          * start it up. */
1040         scsi_host_get(us_to_host(us));
1041         atomic_inc(&total_threads);
1042         usb_autopm_get_interface(intf); /* dropped in the scanning thread */
1043         wake_up_process(th);
1044
1045         return 0;
1046
1047         /* We come here if there are any problems */
1048 BadDevice:
1049         US_DEBUGP("storage_probe() failed\n");
1050         release_everything(us);
1051         return result;
1052 }
1053
1054 /* Handle a disconnect event from the USB core */
1055 static void storage_disconnect(struct usb_interface *intf)
1056 {
1057         struct us_data *us = usb_get_intfdata(intf);
1058
1059         US_DEBUGP("storage_disconnect() called\n");
1060         quiesce_and_remove_host(us);
1061         release_everything(us);
1062 }
1063
1064 /***********************************************************************
1065  * Initialization and registration
1066  ***********************************************************************/
1067
1068 static struct usb_driver usb_storage_driver = {
1069         .name =         "usb-storage",
1070         .probe =        storage_probe,
1071         .disconnect =   storage_disconnect,
1072 #ifdef CONFIG_PM
1073         .suspend =      storage_suspend,
1074         .resume =       storage_resume,
1075         .reset_resume = storage_reset_resume,
1076 #endif
1077         .pre_reset =    storage_pre_reset,
1078         .post_reset =   storage_post_reset,
1079         .id_table =     storage_usb_ids,
1080         .supports_autosuspend = 1,
1081 };
1082
1083 static int __init usb_stor_init(void)
1084 {
1085         int retval;
1086         printk(KERN_INFO "Initializing USB Mass Storage driver...\n");
1087
1088         /* register the driver, return usb_register return code if error */
1089         retval = usb_register(&usb_storage_driver);
1090         if (retval == 0) {
1091                 printk(KERN_INFO "USB Mass Storage support registered.\n");
1092                 usb_usual_set_present(USB_US_TYPE_STOR);
1093         }
1094         return retval;
1095 }
1096
1097 static void __exit usb_stor_exit(void)
1098 {
1099         US_DEBUGP("usb_stor_exit() called\n");
1100
1101         /* Deregister the driver
1102          * This will cause disconnect() to be called for each
1103          * attached unit
1104          */
1105         US_DEBUGP("-- calling usb_deregister()\n");
1106         usb_deregister(&usb_storage_driver) ;
1107
1108         /* Don't return until all of our control and scanning threads
1109          * have exited.  Since each thread signals threads_gone as its
1110          * last act, we have to call wait_for_completion the right number
1111          * of times.
1112          */
1113         while (atomic_read(&total_threads) > 0) {
1114                 wait_for_completion(&threads_gone);
1115                 atomic_dec(&total_threads);
1116         }
1117
1118         usb_usual_clear_present(USB_US_TYPE_STOR);
1119 }
1120
1121 module_init(usb_stor_init);
1122 module_exit(usb_stor_exit);