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