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