Pull vector-domain into release branch
[sfrench/cifs-2.6.git] / 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         for(;;) {
315                 US_DEBUGP("*** thread sleeping.\n");
316                 if(down_interruptible(&us->sema))
317                         break;
318                         
319                 US_DEBUGP("*** thread awakened.\n");
320
321                 /* Autoresume the device */
322                 autopm_rc = usb_autopm_get_interface(us->pusb_intf);
323
324                 /* lock the device pointers */
325                 mutex_lock(&(us->dev_mutex));
326
327                 /* if the device has disconnected, we are free to exit */
328                 if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
329                         US_DEBUGP("-- exiting\n");
330                         mutex_unlock(&us->dev_mutex);
331                         break;
332                 }
333
334                 /* lock access to the state */
335                 scsi_lock(host);
336
337                 /* has the command timed out *already* ? */
338                 if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) {
339                         us->srb->result = DID_ABORT << 16;
340                         goto SkipForAbort;
341                 }
342
343                 scsi_unlock(host);
344
345                 /* reject the command if the direction indicator 
346                  * is UNKNOWN
347                  */
348                 if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
349                         US_DEBUGP("UNKNOWN data direction\n");
350                         us->srb->result = DID_ERROR << 16;
351                 }
352
353                 /* reject if target != 0 or if LUN is higher than
354                  * the maximum known LUN
355                  */
356                 else if (us->srb->device->id && 
357                                 !(us->flags & US_FL_SCM_MULT_TARG)) {
358                         US_DEBUGP("Bad target number (%d:%d)\n",
359                                   us->srb->device->id, us->srb->device->lun);
360                         us->srb->result = DID_BAD_TARGET << 16;
361                 }
362
363                 else if (us->srb->device->lun > us->max_lun) {
364                         US_DEBUGP("Bad LUN (%d:%d)\n",
365                                   us->srb->device->id, us->srb->device->lun);
366                         us->srb->result = DID_BAD_TARGET << 16;
367                 }
368
369                 /* Handle those devices which need us to fake 
370                  * their inquiry data */
371                 else if ((us->srb->cmnd[0] == INQUIRY) &&
372                             (us->flags & US_FL_FIX_INQUIRY)) {
373                         unsigned char data_ptr[36] = {
374                             0x00, 0x80, 0x02, 0x02,
375                             0x1F, 0x00, 0x00, 0x00};
376
377                         US_DEBUGP("Faking INQUIRY command\n");
378                         fill_inquiry_response(us, data_ptr, 36);
379                         us->srb->result = SAM_STAT_GOOD;
380                 }
381
382                 /* Did the autoresume fail? */
383                 else if (autopm_rc < 0) {
384                         US_DEBUGP("Could not wake device\n");
385                         us->srb->result = DID_ERROR << 16;
386                 }
387
388                 /* we've got a command, let's do it! */
389                 else {
390                         US_DEBUG(usb_stor_show_command(us->srb));
391                         us->proto_handler(us->srb, us);
392                 }
393
394                 /* lock access to the state */
395                 scsi_lock(host);
396
397                 /* did the command already complete because of a disconnect? */
398                 if (!us->srb)
399                         ;               /* nothing to do */
400
401                 /* indicate that the command is done */
402                 else if (us->srb->result != DID_ABORT << 16) {
403                         US_DEBUGP("scsi cmd done, result=0x%x\n", 
404                                    us->srb->result);
405                         us->srb->scsi_done(us->srb);
406                 } else {
407 SkipForAbort:
408                         US_DEBUGP("scsi command aborted\n");
409                 }
410
411                 /* If an abort request was received we need to signal that
412                  * the abort has finished.  The proper test for this is
413                  * the TIMED_OUT flag, not srb->result == DID_ABORT, because
414                  * the timeout might have occurred after the command had
415                  * already completed with a different result code. */
416                 if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) {
417                         complete(&(us->notify));
418
419                         /* Allow USB transfers to resume */
420                         clear_bit(US_FLIDX_ABORTING, &us->flags);
421                         clear_bit(US_FLIDX_TIMED_OUT, &us->flags);
422                 }
423
424                 /* finished working on this command */
425                 us->srb = NULL;
426                 scsi_unlock(host);
427
428                 /* unlock the device pointers */
429                 mutex_unlock(&us->dev_mutex);
430
431                 /* Start an autosuspend */
432                 if (autopm_rc == 0)
433                         usb_autopm_put_interface(us->pusb_intf);
434         } /* for (;;) */
435
436         /* Wait until we are told to stop */
437         for (;;) {
438                 set_current_state(TASK_INTERRUPTIBLE);
439                 if (kthread_should_stop())
440                         break;
441                 schedule();
442         }
443         __set_current_state(TASK_RUNNING);
444         return 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_run(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         us->ctl_thread = th;
819
820         return 0;
821 }
822
823 /* Release all our dynamic resources */
824 static void usb_stor_release_resources(struct us_data *us)
825 {
826         US_DEBUGP("-- %s\n", __FUNCTION__);
827
828         /* Tell the control thread to exit.  The SCSI host must
829          * already have been removed so it won't try to queue
830          * any more commands.
831          */
832         US_DEBUGP("-- sending exit command to thread\n");
833         set_bit(US_FLIDX_DISCONNECTING, &us->flags);
834         up(&us->sema);
835         if (us->ctl_thread)
836                 kthread_stop(us->ctl_thread);
837
838         /* Call the destructor routine, if it exists */
839         if (us->extra_destructor) {
840                 US_DEBUGP("-- calling extra_destructor()\n");
841                 us->extra_destructor(us->extra);
842         }
843
844         /* Free the extra data and the URB */
845         kfree(us->extra);
846         usb_free_urb(us->current_urb);
847 }
848
849 /* Dissociate from the USB device */
850 static void dissociate_dev(struct us_data *us)
851 {
852         US_DEBUGP("-- %s\n", __FUNCTION__);
853
854         kfree(us->sensebuf);
855
856         /* Free the device-related DMA-mapped buffers */
857         if (us->cr)
858                 usb_buffer_free(us->pusb_dev, sizeof(*us->cr), us->cr,
859                                 us->cr_dma);
860         if (us->iobuf)
861                 usb_buffer_free(us->pusb_dev, US_IOBUF_SIZE, us->iobuf,
862                                 us->iobuf_dma);
863
864         /* Remove our private data from the interface */
865         usb_set_intfdata(us->pusb_intf, NULL);
866 }
867
868 /* First stage of disconnect processing: stop all commands and remove
869  * the host */
870 static void quiesce_and_remove_host(struct us_data *us)
871 {
872         struct Scsi_Host *host = us_to_host(us);
873
874         /* Prevent new USB transfers, stop the current command, and
875          * interrupt a SCSI-scan or device-reset delay */
876         scsi_lock(host);
877         set_bit(US_FLIDX_DISCONNECTING, &us->flags);
878         scsi_unlock(host);
879         usb_stor_stop_transport(us);
880         wake_up(&us->delay_wait);
881
882         /* It doesn't matter if the SCSI-scanning thread is still running.
883          * The thread will exit when it sees the DISCONNECTING flag. */
884
885         /* queuecommand won't accept any new commands and the control
886          * thread won't execute a previously-queued command.  If there
887          * is such a command pending, complete it with an error. */
888         mutex_lock(&us->dev_mutex);
889         if (us->srb) {
890                 us->srb->result = DID_NO_CONNECT << 16;
891                 scsi_lock(host);
892                 us->srb->scsi_done(us->srb);
893                 us->srb = NULL;
894                 scsi_unlock(host);
895         }
896         mutex_unlock(&us->dev_mutex);
897
898         /* Now we own no commands so it's safe to remove the SCSI host */
899         scsi_remove_host(host);
900 }
901
902 /* Second stage of disconnect processing: deallocate all resources */
903 static void release_everything(struct us_data *us)
904 {
905         usb_stor_release_resources(us);
906         dissociate_dev(us);
907
908         /* Drop our reference to the host; the SCSI core will free it
909          * (and "us" along with it) when the refcount becomes 0. */
910         scsi_host_put(us_to_host(us));
911 }
912
913 /* Thread to carry out delayed SCSI-device scanning */
914 static int usb_stor_scan_thread(void * __us)
915 {
916         struct us_data *us = (struct us_data *)__us;
917
918         printk(KERN_DEBUG
919                 "usb-storage: device found at %d\n", us->pusb_dev->devnum);
920
921         set_freezable();
922         /* Wait for the timeout to expire or for a disconnect */
923         if (delay_use > 0) {
924                 printk(KERN_DEBUG "usb-storage: waiting for device "
925                                 "to settle before scanning\n");
926 retry:
927                 wait_event_interruptible_timeout(us->delay_wait,
928                                 test_bit(US_FLIDX_DISCONNECTING, &us->flags),
929                                 delay_use * HZ);
930                 if (try_to_freeze())
931                         goto retry;
932         }
933
934         /* If the device is still connected, perform the scanning */
935         if (!test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
936
937                 /* For bulk-only devices, determine the max LUN value */
938                 if (us->protocol == US_PR_BULK &&
939                                 !(us->flags & US_FL_SINGLE_LUN)) {
940                         mutex_lock(&us->dev_mutex);
941                         us->max_lun = usb_stor_Bulk_max_lun(us);
942                         mutex_unlock(&us->dev_mutex);
943                 }
944                 scsi_scan_host(us_to_host(us));
945                 printk(KERN_DEBUG "usb-storage: device scan complete\n");
946
947                 /* Should we unbind if no devices were detected? */
948         }
949
950         scsi_host_put(us_to_host(us));
951         usb_autopm_put_interface(us->pusb_intf);
952         complete_and_exit(&threads_gone, 0);
953 }
954
955
956 /* Probe to see if we can drive a newly-connected USB device */
957 static int storage_probe(struct usb_interface *intf,
958                          const struct usb_device_id *id)
959 {
960         struct Scsi_Host *host;
961         struct us_data *us;
962         int result;
963         struct task_struct *th;
964
965         if (usb_usual_check_type(id, USB_US_TYPE_STOR))
966                 return -ENXIO;
967
968         US_DEBUGP("USB Mass Storage device detected\n");
969
970         /*
971          * Ask the SCSI layer to allocate a host structure, with extra
972          * space at the end for our private us_data structure.
973          */
974         host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us));
975         if (!host) {
976                 printk(KERN_WARNING USB_STORAGE
977                         "Unable to allocate the scsi host\n");
978                 return -ENOMEM;
979         }
980
981         us = host_to_us(host);
982         memset(us, 0, sizeof(struct us_data));
983         mutex_init(&(us->dev_mutex));
984         init_MUTEX_LOCKED(&(us->sema));
985         init_completion(&(us->notify));
986         init_waitqueue_head(&us->delay_wait);
987
988         /* Associate the us_data structure with the USB device */
989         result = associate_dev(us, intf);
990         if (result)
991                 goto BadDevice;
992
993         /*
994          * Get the unusual_devs entries and the descriptors
995          *
996          * id_index is calculated in the declaration to be the index number
997          * of the match from the usb_device_id table, so we can find the
998          * corresponding entry in the private table.
999          */
1000         result = get_device_info(us, id);
1001         if (result)
1002                 goto BadDevice;
1003
1004         /* Get the transport, protocol, and pipe settings */
1005         result = get_transport(us);
1006         if (result)
1007                 goto BadDevice;
1008         result = get_protocol(us);
1009         if (result)
1010                 goto BadDevice;
1011         result = get_pipes(us);
1012         if (result)
1013                 goto BadDevice;
1014
1015         /* Acquire all the other resources and add the host */
1016         result = usb_stor_acquire_resources(us);
1017         if (result)
1018                 goto BadDevice;
1019         result = scsi_add_host(host, &intf->dev);
1020         if (result) {
1021                 printk(KERN_WARNING USB_STORAGE
1022                         "Unable to add the scsi host\n");
1023                 goto BadDevice;
1024         }
1025
1026         /* Start up the thread for delayed SCSI-device scanning */
1027         th = kthread_create(usb_stor_scan_thread, us, "usb-stor-scan");
1028         if (IS_ERR(th)) {
1029                 printk(KERN_WARNING USB_STORAGE 
1030                        "Unable to start the device-scanning thread\n");
1031                 quiesce_and_remove_host(us);
1032                 result = PTR_ERR(th);
1033                 goto BadDevice;
1034         }
1035
1036         /* Take a reference to the host for the scanning thread and
1037          * count it among all the threads we have launched.  Then
1038          * start it up. */
1039         scsi_host_get(us_to_host(us));
1040         atomic_inc(&total_threads);
1041         usb_autopm_get_interface(intf); /* dropped in the scanning thread */
1042         wake_up_process(th);
1043
1044         return 0;
1045
1046         /* We come here if there are any problems */
1047 BadDevice:
1048         US_DEBUGP("storage_probe() failed\n");
1049         release_everything(us);
1050         return result;
1051 }
1052
1053 /* Handle a disconnect event from the USB core */
1054 static void storage_disconnect(struct usb_interface *intf)
1055 {
1056         struct us_data *us = usb_get_intfdata(intf);
1057
1058         US_DEBUGP("storage_disconnect() called\n");
1059         quiesce_and_remove_host(us);
1060         release_everything(us);
1061 }
1062
1063 /***********************************************************************
1064  * Initialization and registration
1065  ***********************************************************************/
1066
1067 static struct usb_driver usb_storage_driver = {
1068         .name =         "usb-storage",
1069         .probe =        storage_probe,
1070         .disconnect =   storage_disconnect,
1071 #ifdef CONFIG_PM
1072         .suspend =      storage_suspend,
1073         .resume =       storage_resume,
1074         .reset_resume = storage_reset_resume,
1075 #endif
1076         .pre_reset =    storage_pre_reset,
1077         .post_reset =   storage_post_reset,
1078         .id_table =     storage_usb_ids,
1079         .supports_autosuspend = 1,
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);