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