usb-storage: make cypress_atacb a separate module
[pandora-kernel.git] / drivers / usb / storage / usb.c
1 /* Driver for USB Mass Storage compliant devices
2  *
3  * Current development and maintenance by:
4  *   (c) 1999-2003 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
5  *
6  * Developed with the assistance of:
7  *   (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org)
8  *   (c) 2003-2009 Alan Stern (stern@rowland.harvard.edu)
9  *
10  * Initial work by:
11  *   (c) 1999 Michael Gee (michael@linuxspecific.com)
12  *
13  * usb_device_id support by Adam J. Richter (adam@yggdrasil.com):
14  *   (c) 2000 Yggdrasil Computing, Inc.
15  *
16  * This driver is based on the 'USB Mass Storage Class' document. This
17  * describes in detail the protocol used to communicate with such
18  * devices.  Clearly, the designers had SCSI and ATAPI commands in
19  * mind when they created this document.  The commands are all very
20  * similar to commands in the SCSI-II and ATAPI specifications.
21  *
22  * It is important to note that in a number of cases this class
23  * exhibits class-specific exemptions from the USB specification.
24  * Notably the usage of NAK, STALL and ACK differs from the norm, in
25  * that they are used to communicate wait, failed and OK on commands.
26  *
27  * Also, for certain devices, the interrupt endpoint is used to convey
28  * status of a command.
29  *
30  * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more
31  * information about this driver.
32  *
33  * This program is free software; you can redistribute it and/or modify it
34  * under the terms of the GNU General Public License as published by the
35  * Free Software Foundation; either version 2, or (at your option) any
36  * later version.
37  *
38  * This program is distributed in the hope that it will be useful, but
39  * WITHOUT ANY WARRANTY; without even the implied warranty of
40  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
41  * General Public License for more details.
42  *
43  * You should have received a copy of the GNU General Public License along
44  * with this program; if not, write to the Free Software Foundation, Inc.,
45  * 675 Mass Ave, Cambridge, MA 02139, USA.
46  */
47
48 #include <linux/sched.h>
49 #include <linux/errno.h>
50 #include <linux/freezer.h>
51 #include <linux/module.h>
52 #include <linux/init.h>
53 #include <linux/slab.h>
54 #include <linux/kthread.h>
55 #include <linux/mutex.h>
56 #include <linux/utsname.h>
57
58 #include <scsi/scsi.h>
59 #include <scsi/scsi_cmnd.h>
60 #include <scsi/scsi_device.h>
61
62 #include "usb.h"
63 #include "scsiglue.h"
64 #include "transport.h"
65 #include "protocol.h"
66 #include "debug.h"
67 #include "initializers.h"
68
69 #ifdef CONFIG_USB_STORAGE_USBAT
70 #include "shuttle_usbat.h"
71 #endif
72 #ifdef CONFIG_USB_STORAGE_FREECOM
73 #include "freecom.h"
74 #endif
75 #ifdef CONFIG_USB_STORAGE_DATAFAB
76 #include "datafab.h"
77 #endif
78 #ifdef CONFIG_USB_STORAGE_JUMPSHOT
79 #include "jumpshot.h"
80 #endif
81 #ifdef CONFIG_USB_STORAGE_ONETOUCH
82 #include "onetouch.h"
83 #endif
84 #ifdef CONFIG_USB_STORAGE_ALAUDA
85 #include "alauda.h"
86 #endif
87 #ifdef CONFIG_USB_STORAGE_KARMA
88 #include "karma.h"
89 #endif
90 #include "sierra_ms.h"
91 #include "option_ms.h"
92
93 /* Some informational data */
94 MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
95 MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
96 MODULE_LICENSE("GPL");
97
98 static unsigned int delay_use = 5;
99 module_param(delay_use, uint, S_IRUGO | S_IWUSR);
100 MODULE_PARM_DESC(delay_use, "seconds to delay before using a new device");
101
102 static char quirks[128];
103 module_param_string(quirks, quirks, sizeof(quirks), S_IRUGO | S_IWUSR);
104 MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
105
106
107 /*
108  * The entries in this table correspond, line for line,
109  * with the entries in usb_storage_usb_ids[], defined in usual-tables.c.
110  */
111
112 /* The vendor name should be kept at eight characters or less, and
113  * the product name should be kept at 16 characters or less. If a device
114  * has the US_FL_FIX_INQUIRY flag, then the vendor and product names
115  * normally generated by a device thorugh the INQUIRY response will be
116  * taken from this list, and this is the reason for the above size
117  * restriction. However, if the flag is not present, then you
118  * are free to use as many characters as you like.
119  */
120
121 #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \
122                     vendor_name, product_name, use_protocol, use_transport, \
123                     init_function, Flags) \
124 { \
125         .vendorName = vendor_name,      \
126         .productName = product_name,    \
127         .useProtocol = use_protocol,    \
128         .useTransport = use_transport,  \
129         .initFunction = init_function,  \
130 }
131
132 #define COMPLIANT_DEV   UNUSUAL_DEV
133
134 #define USUAL_DEV(use_protocol, use_transport, use_type) \
135 { \
136         .useProtocol = use_protocol,    \
137         .useTransport = use_transport,  \
138 }
139
140 static struct us_unusual_dev us_unusual_dev_list[] = {
141 #       include "unusual_devs.h" 
142         { }             /* Terminating entry */
143 };
144
145 #undef UNUSUAL_DEV
146 #undef COMPLIANT_DEV
147 #undef USUAL_DEV
148
149
150 #ifdef CONFIG_PM        /* Minimal support for suspend and resume */
151
152 int usb_stor_suspend(struct usb_interface *iface, pm_message_t message)
153 {
154         struct us_data *us = usb_get_intfdata(iface);
155
156         /* Wait until no command is running */
157         mutex_lock(&us->dev_mutex);
158
159         US_DEBUGP("%s\n", __func__);
160         if (us->suspend_resume_hook)
161                 (us->suspend_resume_hook)(us, US_SUSPEND);
162
163         /* When runtime PM is working, we'll set a flag to indicate
164          * whether we should autoresume when a SCSI request arrives. */
165
166         mutex_unlock(&us->dev_mutex);
167         return 0;
168 }
169 EXPORT_SYMBOL_GPL(usb_stor_suspend);
170
171 int usb_stor_resume(struct usb_interface *iface)
172 {
173         struct us_data *us = usb_get_intfdata(iface);
174
175         mutex_lock(&us->dev_mutex);
176
177         US_DEBUGP("%s\n", __func__);
178         if (us->suspend_resume_hook)
179                 (us->suspend_resume_hook)(us, US_RESUME);
180
181         mutex_unlock(&us->dev_mutex);
182         return 0;
183 }
184 EXPORT_SYMBOL_GPL(usb_stor_resume);
185
186 int usb_stor_reset_resume(struct usb_interface *iface)
187 {
188         struct us_data *us = usb_get_intfdata(iface);
189
190         US_DEBUGP("%s\n", __func__);
191
192         /* Report the reset to the SCSI core */
193         usb_stor_report_bus_reset(us);
194
195         /* FIXME: Notify the subdrivers that they need to reinitialize
196          * the device */
197         return 0;
198 }
199 EXPORT_SYMBOL_GPL(usb_stor_reset_resume);
200
201 #endif /* CONFIG_PM */
202
203 /*
204  * The next two routines get called just before and just after
205  * a USB port reset, whether from this driver or a different one.
206  */
207
208 int usb_stor_pre_reset(struct usb_interface *iface)
209 {
210         struct us_data *us = usb_get_intfdata(iface);
211
212         US_DEBUGP("%s\n", __func__);
213
214         /* Make sure no command runs during the reset */
215         mutex_lock(&us->dev_mutex);
216         return 0;
217 }
218 EXPORT_SYMBOL_GPL(usb_stor_pre_reset);
219
220 int usb_stor_post_reset(struct usb_interface *iface)
221 {
222         struct us_data *us = usb_get_intfdata(iface);
223
224         US_DEBUGP("%s\n", __func__);
225
226         /* Report the reset to the SCSI core */
227         usb_stor_report_bus_reset(us);
228
229         /* FIXME: Notify the subdrivers that they need to reinitialize
230          * the device */
231
232         mutex_unlock(&us->dev_mutex);
233         return 0;
234 }
235 EXPORT_SYMBOL_GPL(usb_stor_post_reset);
236
237 /*
238  * fill_inquiry_response takes an unsigned char array (which must
239  * be at least 36 characters) and populates the vendor name,
240  * product name, and revision fields. Then the array is copied
241  * into the SCSI command's response buffer (oddly enough
242  * called request_buffer). data_len contains the length of the
243  * data array, which again must be at least 36.
244  */
245
246 void fill_inquiry_response(struct us_data *us, unsigned char *data,
247                 unsigned int data_len)
248 {
249         if (data_len<36) // You lose.
250                 return;
251
252         if(data[0]&0x20) { /* USB device currently not connected. Return
253                               peripheral qualifier 001b ("...however, the
254                               physical device is not currently connected
255                               to this logical unit") and leave vendor and
256                               product identification empty. ("If the target
257                               does store some of the INQUIRY data on the
258                               device, it may return zeros or ASCII spaces 
259                               (20h) in those fields until the data is
260                               available from the device."). */
261                 memset(data+8,0,28);
262         } else {
263                 u16 bcdDevice = le16_to_cpu(us->pusb_dev->descriptor.bcdDevice);
264                 memcpy(data+8, us->unusual_dev->vendorName, 
265                         strlen(us->unusual_dev->vendorName) > 8 ? 8 :
266                         strlen(us->unusual_dev->vendorName));
267                 memcpy(data+16, us->unusual_dev->productName, 
268                         strlen(us->unusual_dev->productName) > 16 ? 16 :
269                         strlen(us->unusual_dev->productName));
270                 data[32] = 0x30 + ((bcdDevice>>12) & 0x0F);
271                 data[33] = 0x30 + ((bcdDevice>>8) & 0x0F);
272                 data[34] = 0x30 + ((bcdDevice>>4) & 0x0F);
273                 data[35] = 0x30 + ((bcdDevice) & 0x0F);
274         }
275
276         usb_stor_set_xfer_buf(data, data_len, us->srb);
277 }
278 EXPORT_SYMBOL_GPL(fill_inquiry_response);
279
280 static int usb_stor_control_thread(void * __us)
281 {
282         struct us_data *us = (struct us_data *)__us;
283         struct Scsi_Host *host = us_to_host(us);
284
285         for(;;) {
286                 US_DEBUGP("*** thread sleeping.\n");
287                 if (wait_for_completion_interruptible(&us->cmnd_ready))
288                         break;
289
290                 US_DEBUGP("*** thread awakened.\n");
291
292                 /* lock the device pointers */
293                 mutex_lock(&(us->dev_mutex));
294
295                 /* lock access to the state */
296                 scsi_lock(host);
297
298                 /* When we are called with no command pending, we're done */
299                 if (us->srb == NULL) {
300                         scsi_unlock(host);
301                         mutex_unlock(&us->dev_mutex);
302                         US_DEBUGP("-- exiting\n");
303                         break;
304                 }
305
306                 /* has the command timed out *already* ? */
307                 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
308                         us->srb->result = DID_ABORT << 16;
309                         goto SkipForAbort;
310                 }
311
312                 scsi_unlock(host);
313
314                 /* reject the command if the direction indicator 
315                  * is UNKNOWN
316                  */
317                 if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {
318                         US_DEBUGP("UNKNOWN data direction\n");
319                         us->srb->result = DID_ERROR << 16;
320                 }
321
322                 /* reject if target != 0 or if LUN is higher than
323                  * the maximum known LUN
324                  */
325                 else if (us->srb->device->id && 
326                                 !(us->fflags & US_FL_SCM_MULT_TARG)) {
327                         US_DEBUGP("Bad target number (%d:%d)\n",
328                                   us->srb->device->id, us->srb->device->lun);
329                         us->srb->result = DID_BAD_TARGET << 16;
330                 }
331
332                 else if (us->srb->device->lun > us->max_lun) {
333                         US_DEBUGP("Bad LUN (%d:%d)\n",
334                                   us->srb->device->id, us->srb->device->lun);
335                         us->srb->result = DID_BAD_TARGET << 16;
336                 }
337
338                 /* Handle those devices which need us to fake 
339                  * their inquiry data */
340                 else if ((us->srb->cmnd[0] == INQUIRY) &&
341                             (us->fflags & US_FL_FIX_INQUIRY)) {
342                         unsigned char data_ptr[36] = {
343                             0x00, 0x80, 0x02, 0x02,
344                             0x1F, 0x00, 0x00, 0x00};
345
346                         US_DEBUGP("Faking INQUIRY command\n");
347                         fill_inquiry_response(us, data_ptr, 36);
348                         us->srb->result = SAM_STAT_GOOD;
349                 }
350
351                 /* we've got a command, let's do it! */
352                 else {
353                         US_DEBUG(usb_stor_show_command(us->srb));
354                         us->proto_handler(us->srb, us);
355                 }
356
357                 /* lock access to the state */
358                 scsi_lock(host);
359
360                 /* indicate that the command is done */
361                 if (us->srb->result != DID_ABORT << 16) {
362                         US_DEBUGP("scsi cmd done, result=0x%x\n", 
363                                    us->srb->result);
364                         us->srb->scsi_done(us->srb);
365                 } else {
366 SkipForAbort:
367                         US_DEBUGP("scsi command aborted\n");
368                 }
369
370                 /* If an abort request was received we need to signal that
371                  * the abort has finished.  The proper test for this is
372                  * the TIMED_OUT flag, not srb->result == DID_ABORT, because
373                  * the timeout might have occurred after the command had
374                  * already completed with a different result code. */
375                 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
376                         complete(&(us->notify));
377
378                         /* Allow USB transfers to resume */
379                         clear_bit(US_FLIDX_ABORTING, &us->dflags);
380                         clear_bit(US_FLIDX_TIMED_OUT, &us->dflags);
381                 }
382
383                 /* finished working on this command */
384                 us->srb = NULL;
385                 scsi_unlock(host);
386
387                 /* unlock the device pointers */
388                 mutex_unlock(&us->dev_mutex);
389         } /* for (;;) */
390
391         /* Wait until we are told to stop */
392         for (;;) {
393                 set_current_state(TASK_INTERRUPTIBLE);
394                 if (kthread_should_stop())
395                         break;
396                 schedule();
397         }
398         __set_current_state(TASK_RUNNING);
399         return 0;
400 }       
401
402 /***********************************************************************
403  * Device probing and disconnecting
404  ***********************************************************************/
405
406 /* Associate our private data with the USB device */
407 static int associate_dev(struct us_data *us, struct usb_interface *intf)
408 {
409         US_DEBUGP("-- %s\n", __func__);
410
411         /* Fill in the device-related fields */
412         us->pusb_dev = interface_to_usbdev(intf);
413         us->pusb_intf = intf;
414         us->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
415         US_DEBUGP("Vendor: 0x%04x, Product: 0x%04x, Revision: 0x%04x\n",
416                         le16_to_cpu(us->pusb_dev->descriptor.idVendor),
417                         le16_to_cpu(us->pusb_dev->descriptor.idProduct),
418                         le16_to_cpu(us->pusb_dev->descriptor.bcdDevice));
419         US_DEBUGP("Interface Subclass: 0x%02x, Protocol: 0x%02x\n",
420                         intf->cur_altsetting->desc.bInterfaceSubClass,
421                         intf->cur_altsetting->desc.bInterfaceProtocol);
422
423         /* Store our private data in the interface */
424         usb_set_intfdata(intf, us);
425
426         /* Allocate the device-related DMA-mapped buffers */
427         us->cr = usb_buffer_alloc(us->pusb_dev, sizeof(*us->cr),
428                         GFP_KERNEL, &us->cr_dma);
429         if (!us->cr) {
430                 US_DEBUGP("usb_ctrlrequest allocation failed\n");
431                 return -ENOMEM;
432         }
433
434         us->iobuf = usb_buffer_alloc(us->pusb_dev, US_IOBUF_SIZE,
435                         GFP_KERNEL, &us->iobuf_dma);
436         if (!us->iobuf) {
437                 US_DEBUGP("I/O buffer allocation failed\n");
438                 return -ENOMEM;
439         }
440         return 0;
441 }
442
443 /* Works only for digits and letters, but small and fast */
444 #define TOLOWER(x) ((x) | 0x20)
445
446 /* Adjust device flags based on the "quirks=" module parameter */
447 static void adjust_quirks(struct us_data *us)
448 {
449         char *p;
450         u16 vid = le16_to_cpu(us->pusb_dev->descriptor.idVendor);
451         u16 pid = le16_to_cpu(us->pusb_dev->descriptor.idProduct);
452         unsigned f = 0;
453         unsigned int mask = (US_FL_SANE_SENSE | US_FL_FIX_CAPACITY |
454                         US_FL_CAPACITY_HEURISTICS | US_FL_IGNORE_DEVICE |
455                         US_FL_NOT_LOCKABLE | US_FL_MAX_SECTORS_64 |
456                         US_FL_CAPACITY_OK | US_FL_IGNORE_RESIDUE |
457                         US_FL_SINGLE_LUN | US_FL_NO_WP_DETECT);
458
459         p = quirks;
460         while (*p) {
461                 /* Each entry consists of VID:PID:flags */
462                 if (vid == simple_strtoul(p, &p, 16) &&
463                                 *p == ':' &&
464                                 pid == simple_strtoul(p+1, &p, 16) &&
465                                 *p == ':')
466                         break;
467
468                 /* Move forward to the next entry */
469                 while (*p) {
470                         if (*p++ == ',')
471                                 break;
472                 }
473         }
474         if (!*p)        /* No match */
475                 return;
476
477         /* Collect the flags */
478         while (*++p && *p != ',') {
479                 switch (TOLOWER(*p)) {
480                 case 'a':
481                         f |= US_FL_SANE_SENSE;
482                         break;
483                 case 'c':
484                         f |= US_FL_FIX_CAPACITY;
485                         break;
486                 case 'h':
487                         f |= US_FL_CAPACITY_HEURISTICS;
488                         break;
489                 case 'i':
490                         f |= US_FL_IGNORE_DEVICE;
491                         break;
492                 case 'l':
493                         f |= US_FL_NOT_LOCKABLE;
494                         break;
495                 case 'm':
496                         f |= US_FL_MAX_SECTORS_64;
497                         break;
498                 case 'o':
499                         f |= US_FL_CAPACITY_OK;
500                         break;
501                 case 'r':
502                         f |= US_FL_IGNORE_RESIDUE;
503                         break;
504                 case 's':
505                         f |= US_FL_SINGLE_LUN;
506                         break;
507                 case 'w':
508                         f |= US_FL_NO_WP_DETECT;
509                         break;
510                 /* Ignore unrecognized flag characters */
511                 }
512         }
513         us->fflags = (us->fflags & ~mask) | f;
514         dev_info(&us->pusb_intf->dev, "Quirks match for "
515                         "vid %04x pid %04x: %x\n",
516                         vid, pid, f);
517 }
518
519 /* Get the unusual_devs entries and the string descriptors */
520 static int get_device_info(struct us_data *us, const struct usb_device_id *id,
521                 struct us_unusual_dev *unusual_dev)
522 {
523         struct usb_device *dev = us->pusb_dev;
524         struct usb_interface_descriptor *idesc =
525                 &us->pusb_intf->cur_altsetting->desc;
526
527         /* Store the entries */
528         us->unusual_dev = unusual_dev;
529         us->subclass = (unusual_dev->useProtocol == US_SC_DEVICE) ?
530                         idesc->bInterfaceSubClass :
531                         unusual_dev->useProtocol;
532         us->protocol = (unusual_dev->useTransport == US_PR_DEVICE) ?
533                         idesc->bInterfaceProtocol :
534                         unusual_dev->useTransport;
535         us->fflags = USB_US_ORIG_FLAGS(id->driver_info);
536         adjust_quirks(us);
537
538         if (us->fflags & US_FL_IGNORE_DEVICE) {
539                 printk(KERN_INFO USB_STORAGE "device ignored\n");
540                 return -ENODEV;
541         }
542
543         /*
544          * This flag is only needed when we're in high-speed, so let's
545          * disable it if we're in full-speed
546          */
547         if (dev->speed != USB_SPEED_HIGH)
548                 us->fflags &= ~US_FL_GO_SLOW;
549
550         /* Log a message if a non-generic unusual_dev entry contains an
551          * unnecessary subclass or protocol override.  This may stimulate
552          * reports from users that will help us remove unneeded entries
553          * from the unusual_devs.h table.
554          */
555         if (id->idVendor || id->idProduct) {
556                 static const char *msgs[3] = {
557                         "an unneeded SubClass entry",
558                         "an unneeded Protocol entry",
559                         "unneeded SubClass and Protocol entries"};
560                 struct usb_device_descriptor *ddesc = &dev->descriptor;
561                 int msg = -1;
562
563                 if (unusual_dev->useProtocol != US_SC_DEVICE &&
564                         us->subclass == idesc->bInterfaceSubClass)
565                         msg += 1;
566                 if (unusual_dev->useTransport != US_PR_DEVICE &&
567                         us->protocol == idesc->bInterfaceProtocol)
568                         msg += 2;
569                 if (msg >= 0 && !(us->fflags & US_FL_NEED_OVERRIDE))
570                         printk(KERN_NOTICE USB_STORAGE "This device "
571                                 "(%04x,%04x,%04x S %02x P %02x)"
572                                 " has %s in unusual_devs.h (kernel"
573                                 " %s)\n"
574                                 "   Please send a copy of this message to "
575                                 "<linux-usb@vger.kernel.org> and "
576                                 "<usb-storage@lists.one-eyed-alien.net>\n",
577                                 le16_to_cpu(ddesc->idVendor),
578                                 le16_to_cpu(ddesc->idProduct),
579                                 le16_to_cpu(ddesc->bcdDevice),
580                                 idesc->bInterfaceSubClass,
581                                 idesc->bInterfaceProtocol,
582                                 msgs[msg],
583                                 utsname()->release);
584         }
585
586         return 0;
587 }
588
589 /* Get the transport settings */
590 static void get_transport(struct us_data *us)
591 {
592         switch (us->protocol) {
593         case US_PR_CB:
594                 us->transport_name = "Control/Bulk";
595                 us->transport = usb_stor_CB_transport;
596                 us->transport_reset = usb_stor_CB_reset;
597                 us->max_lun = 7;
598                 break;
599
600         case US_PR_CBI:
601                 us->transport_name = "Control/Bulk/Interrupt";
602                 us->transport = usb_stor_CB_transport;
603                 us->transport_reset = usb_stor_CB_reset;
604                 us->max_lun = 7;
605                 break;
606
607         case US_PR_BULK:
608                 us->transport_name = "Bulk";
609                 us->transport = usb_stor_Bulk_transport;
610                 us->transport_reset = usb_stor_Bulk_reset;
611                 break;
612
613 #ifdef CONFIG_USB_STORAGE_USBAT
614         case US_PR_USBAT:
615                 us->transport_name = "Shuttle USBAT";
616                 us->transport = usbat_transport;
617                 us->transport_reset = usb_stor_CB_reset;
618                 us->max_lun = 1;
619                 break;
620 #endif
621
622 #ifdef CONFIG_USB_STORAGE_FREECOM
623         case US_PR_FREECOM:
624                 us->transport_name = "Freecom";
625                 us->transport = freecom_transport;
626                 us->transport_reset = usb_stor_freecom_reset;
627                 us->max_lun = 0;
628                 break;
629 #endif
630
631 #ifdef CONFIG_USB_STORAGE_DATAFAB
632         case US_PR_DATAFAB:
633                 us->transport_name  = "Datafab Bulk-Only";
634                 us->transport = datafab_transport;
635                 us->transport_reset = usb_stor_Bulk_reset;
636                 us->max_lun = 1;
637                 break;
638 #endif
639
640 #ifdef CONFIG_USB_STORAGE_JUMPSHOT
641         case US_PR_JUMPSHOT:
642                 us->transport_name  = "Lexar Jumpshot Control/Bulk";
643                 us->transport = jumpshot_transport;
644                 us->transport_reset = usb_stor_Bulk_reset;
645                 us->max_lun = 1;
646                 break;
647 #endif
648
649 #ifdef CONFIG_USB_STORAGE_ALAUDA
650         case US_PR_ALAUDA:
651                 us->transport_name  = "Alauda Control/Bulk";
652                 us->transport = alauda_transport;
653                 us->transport_reset = usb_stor_Bulk_reset;
654                 us->max_lun = 1;
655                 break;
656 #endif
657
658 #ifdef CONFIG_USB_STORAGE_KARMA
659         case US_PR_KARMA:
660                 us->transport_name = "Rio Karma/Bulk";
661                 us->transport = rio_karma_transport;
662                 us->transport_reset = usb_stor_Bulk_reset;
663                 break;
664 #endif
665
666         }
667 }
668
669 /* Get the protocol settings */
670 static void get_protocol(struct us_data *us)
671 {
672         switch (us->subclass) {
673         case US_SC_RBC:
674                 us->protocol_name = "Reduced Block Commands (RBC)";
675                 us->proto_handler = usb_stor_transparent_scsi_command;
676                 break;
677
678         case US_SC_8020:
679                 us->protocol_name = "8020i";
680                 us->proto_handler = usb_stor_pad12_command;
681                 us->max_lun = 0;
682                 break;
683
684         case US_SC_QIC:
685                 us->protocol_name = "QIC-157";
686                 us->proto_handler = usb_stor_pad12_command;
687                 us->max_lun = 0;
688                 break;
689
690         case US_SC_8070:
691                 us->protocol_name = "8070i";
692                 us->proto_handler = usb_stor_pad12_command;
693                 us->max_lun = 0;
694                 break;
695
696         case US_SC_SCSI:
697                 us->protocol_name = "Transparent SCSI";
698                 us->proto_handler = usb_stor_transparent_scsi_command;
699                 break;
700
701         case US_SC_UFI:
702                 us->protocol_name = "Uniform Floppy Interface (UFI)";
703                 us->proto_handler = usb_stor_ufi_command;
704                 break;
705         }
706 }
707
708 /* Get the pipe settings */
709 static int get_pipes(struct us_data *us)
710 {
711         struct usb_host_interface *altsetting =
712                 us->pusb_intf->cur_altsetting;
713         int i;
714         struct usb_endpoint_descriptor *ep;
715         struct usb_endpoint_descriptor *ep_in = NULL;
716         struct usb_endpoint_descriptor *ep_out = NULL;
717         struct usb_endpoint_descriptor *ep_int = NULL;
718
719         /*
720          * Find the first endpoint of each type we need.
721          * We are expecting a minimum of 2 endpoints - in and out (bulk).
722          * An optional interrupt-in is OK (necessary for CBI protocol).
723          * We will ignore any others.
724          */
725         for (i = 0; i < altsetting->desc.bNumEndpoints; i++) {
726                 ep = &altsetting->endpoint[i].desc;
727
728                 if (usb_endpoint_xfer_bulk(ep)) {
729                         if (usb_endpoint_dir_in(ep)) {
730                                 if (!ep_in)
731                                         ep_in = ep;
732                         } else {
733                                 if (!ep_out)
734                                         ep_out = ep;
735                         }
736                 }
737
738                 else if (usb_endpoint_is_int_in(ep)) {
739                         if (!ep_int)
740                                 ep_int = ep;
741                 }
742         }
743
744         if (!ep_in || !ep_out || (us->protocol == US_PR_CBI && !ep_int)) {
745                 US_DEBUGP("Endpoint sanity check failed! Rejecting dev.\n");
746                 return -EIO;
747         }
748
749         /* Calculate and store the pipe values */
750         us->send_ctrl_pipe = usb_sndctrlpipe(us->pusb_dev, 0);
751         us->recv_ctrl_pipe = usb_rcvctrlpipe(us->pusb_dev, 0);
752         us->send_bulk_pipe = usb_sndbulkpipe(us->pusb_dev,
753                 usb_endpoint_num(ep_out));
754         us->recv_bulk_pipe = usb_rcvbulkpipe(us->pusb_dev, 
755                 usb_endpoint_num(ep_in));
756         if (ep_int) {
757                 us->recv_intr_pipe = usb_rcvintpipe(us->pusb_dev,
758                         usb_endpoint_num(ep_int));
759                 us->ep_bInterval = ep_int->bInterval;
760         }
761         return 0;
762 }
763
764 /* Initialize all the dynamic resources we need */
765 static int usb_stor_acquire_resources(struct us_data *us)
766 {
767         int p;
768         struct task_struct *th;
769
770         us->current_urb = usb_alloc_urb(0, GFP_KERNEL);
771         if (!us->current_urb) {
772                 US_DEBUGP("URB allocation failed\n");
773                 return -ENOMEM;
774         }
775
776         /* Just before we start our control thread, initialize
777          * the device if it needs initialization */
778         if (us->unusual_dev->initFunction) {
779                 p = us->unusual_dev->initFunction(us);
780                 if (p)
781                         return p;
782         }
783
784         /* Start up our control thread */
785         th = kthread_run(usb_stor_control_thread, us, "usb-storage");
786         if (IS_ERR(th)) {
787                 printk(KERN_WARNING USB_STORAGE 
788                        "Unable to start control thread\n");
789                 return PTR_ERR(th);
790         }
791         us->ctl_thread = th;
792
793         return 0;
794 }
795
796 /* Release all our dynamic resources */
797 static void usb_stor_release_resources(struct us_data *us)
798 {
799         US_DEBUGP("-- %s\n", __func__);
800
801         /* Tell the control thread to exit.  The SCSI host must
802          * already have been removed and the DISCONNECTING flag set
803          * so that we won't accept any more commands.
804          */
805         US_DEBUGP("-- sending exit command to thread\n");
806         complete(&us->cmnd_ready);
807         if (us->ctl_thread)
808                 kthread_stop(us->ctl_thread);
809
810         /* Call the destructor routine, if it exists */
811         if (us->extra_destructor) {
812                 US_DEBUGP("-- calling extra_destructor()\n");
813                 us->extra_destructor(us->extra);
814         }
815
816         /* Free the extra data and the URB */
817         kfree(us->extra);
818         usb_free_urb(us->current_urb);
819 }
820
821 /* Dissociate from the USB device */
822 static void dissociate_dev(struct us_data *us)
823 {
824         US_DEBUGP("-- %s\n", __func__);
825
826         /* Free the device-related DMA-mapped buffers */
827         if (us->cr)
828                 usb_buffer_free(us->pusb_dev, sizeof(*us->cr), us->cr,
829                                 us->cr_dma);
830         if (us->iobuf)
831                 usb_buffer_free(us->pusb_dev, US_IOBUF_SIZE, us->iobuf,
832                                 us->iobuf_dma);
833
834         /* Remove our private data from the interface */
835         usb_set_intfdata(us->pusb_intf, NULL);
836 }
837
838 /* First stage of disconnect processing: stop SCSI scanning,
839  * remove the host, and stop accepting new commands
840  */
841 static void quiesce_and_remove_host(struct us_data *us)
842 {
843         struct Scsi_Host *host = us_to_host(us);
844
845         /* If the device is really gone, cut short reset delays */
846         if (us->pusb_dev->state == USB_STATE_NOTATTACHED)
847                 set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
848
849         /* Prevent SCSI-scanning (if it hasn't started yet)
850          * and wait for the SCSI-scanning thread to stop.
851          */
852         set_bit(US_FLIDX_DONT_SCAN, &us->dflags);
853         wake_up(&us->delay_wait);
854         wait_for_completion(&us->scanning_done);
855
856         /* Removing the host will perform an orderly shutdown: caches
857          * synchronized, disks spun down, etc.
858          */
859         scsi_remove_host(host);
860
861         /* Prevent any new commands from being accepted and cut short
862          * reset delays.
863          */
864         scsi_lock(host);
865         set_bit(US_FLIDX_DISCONNECTING, &us->dflags);
866         scsi_unlock(host);
867         wake_up(&us->delay_wait);
868 }
869
870 /* Second stage of disconnect processing: deallocate all resources */
871 static void release_everything(struct us_data *us)
872 {
873         usb_stor_release_resources(us);
874         dissociate_dev(us);
875
876         /* Drop our reference to the host; the SCSI core will free it
877          * (and "us" along with it) when the refcount becomes 0. */
878         scsi_host_put(us_to_host(us));
879 }
880
881 /* Thread to carry out delayed SCSI-device scanning */
882 static int usb_stor_scan_thread(void * __us)
883 {
884         struct us_data *us = (struct us_data *)__us;
885
886         printk(KERN_DEBUG
887                 "usb-storage: device found at %d\n", us->pusb_dev->devnum);
888
889         set_freezable();
890         /* Wait for the timeout to expire or for a disconnect */
891         if (delay_use > 0) {
892                 printk(KERN_DEBUG "usb-storage: waiting for device "
893                                 "to settle before scanning\n");
894                 wait_event_freezable_timeout(us->delay_wait,
895                                 test_bit(US_FLIDX_DONT_SCAN, &us->dflags),
896                                 delay_use * HZ);
897         }
898
899         /* If the device is still connected, perform the scanning */
900         if (!test_bit(US_FLIDX_DONT_SCAN, &us->dflags)) {
901
902                 /* For bulk-only devices, determine the max LUN value */
903                 if (us->protocol == US_PR_BULK &&
904                                 !(us->fflags & US_FL_SINGLE_LUN)) {
905                         mutex_lock(&us->dev_mutex);
906                         us->max_lun = usb_stor_Bulk_max_lun(us);
907                         mutex_unlock(&us->dev_mutex);
908                 }
909                 scsi_scan_host(us_to_host(us));
910                 printk(KERN_DEBUG "usb-storage: device scan complete\n");
911
912                 /* Should we unbind if no devices were detected? */
913         }
914
915         complete_and_exit(&us->scanning_done, 0);
916 }
917
918
919 /* First part of general USB mass-storage probing */
920 int usb_stor_probe1(struct us_data **pus,
921                 struct usb_interface *intf,
922                 const struct usb_device_id *id,
923                 struct us_unusual_dev *unusual_dev)
924 {
925         struct Scsi_Host *host;
926         struct us_data *us;
927         int result;
928
929         US_DEBUGP("USB Mass Storage device detected\n");
930
931         /*
932          * Ask the SCSI layer to allocate a host structure, with extra
933          * space at the end for our private us_data structure.
934          */
935         host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us));
936         if (!host) {
937                 printk(KERN_WARNING USB_STORAGE
938                         "Unable to allocate the scsi host\n");
939                 return -ENOMEM;
940         }
941
942         /*
943          * Allow 16-byte CDBs and thus > 2TB
944          */
945         host->max_cmd_len = 16;
946         *pus = us = host_to_us(host);
947         memset(us, 0, sizeof(struct us_data));
948         mutex_init(&(us->dev_mutex));
949         init_completion(&us->cmnd_ready);
950         init_completion(&(us->notify));
951         init_waitqueue_head(&us->delay_wait);
952         init_completion(&us->scanning_done);
953
954         /* Associate the us_data structure with the USB device */
955         result = associate_dev(us, intf);
956         if (result)
957                 goto BadDevice;
958
959         /* Get the unusual_devs entries and the descriptors */
960         result = get_device_info(us, id, unusual_dev);
961         if (result)
962                 goto BadDevice;
963
964         /* Get standard transport and protocol settings */
965         get_transport(us);
966         get_protocol(us);
967
968         /* Give the caller a chance to fill in specialized transport
969          * or protocol settings.
970          */
971         return 0;
972
973 BadDevice:
974         US_DEBUGP("storage_probe() failed\n");
975         release_everything(us);
976         return result;
977 }
978 EXPORT_SYMBOL_GPL(usb_stor_probe1);
979
980 /* Second part of general USB mass-storage probing */
981 int usb_stor_probe2(struct us_data *us)
982 {
983         struct task_struct *th;
984         int result;
985
986         /* Make sure the transport and protocol have both been set */
987         if (!us->transport || !us->proto_handler) {
988                 result = -ENXIO;
989                 goto BadDevice;
990         }
991         US_DEBUGP("Transport: %s\n", us->transport_name);
992         US_DEBUGP("Protocol: %s\n", us->protocol_name);
993
994         /* fix for single-lun devices */
995         if (us->fflags & US_FL_SINGLE_LUN)
996                 us->max_lun = 0;
997
998         /* Find the endpoints and calculate pipe values */
999         result = get_pipes(us);
1000         if (result)
1001                 goto BadDevice;
1002
1003         /* Acquire all the other resources and add the host */
1004         result = usb_stor_acquire_resources(us);
1005         if (result)
1006                 goto BadDevice;
1007         result = scsi_add_host(us_to_host(us), &us->pusb_intf->dev);
1008         if (result) {
1009                 printk(KERN_WARNING USB_STORAGE
1010                         "Unable to add the scsi host\n");
1011                 goto BadDevice;
1012         }
1013
1014         /* Start up the thread for delayed SCSI-device scanning */
1015         th = kthread_create(usb_stor_scan_thread, us, "usb-stor-scan");
1016         if (IS_ERR(th)) {
1017                 printk(KERN_WARNING USB_STORAGE 
1018                        "Unable to start the device-scanning thread\n");
1019                 complete(&us->scanning_done);
1020                 quiesce_and_remove_host(us);
1021                 result = PTR_ERR(th);
1022                 goto BadDevice;
1023         }
1024
1025         wake_up_process(th);
1026
1027         return 0;
1028
1029         /* We come here if there are any problems */
1030 BadDevice:
1031         US_DEBUGP("storage_probe() failed\n");
1032         release_everything(us);
1033         return result;
1034 }
1035 EXPORT_SYMBOL_GPL(usb_stor_probe2);
1036
1037 /* Handle a USB mass-storage disconnect */
1038 void usb_stor_disconnect(struct usb_interface *intf)
1039 {
1040         struct us_data *us = usb_get_intfdata(intf);
1041
1042         US_DEBUGP("storage_disconnect() called\n");
1043         quiesce_and_remove_host(us);
1044         release_everything(us);
1045 }
1046 EXPORT_SYMBOL_GPL(usb_stor_disconnect);
1047
1048 /* The main probe routine for standard devices */
1049 static int storage_probe(struct usb_interface *intf,
1050                          const struct usb_device_id *id)
1051 {
1052         struct us_data *us;
1053         int result;
1054
1055         /*
1056          * If libusual is configured, let it decide whether a standard
1057          * device should be handled by usb-storage or by ub.
1058          * If the device isn't standard (is handled by a subdriver
1059          * module) then don't accept it.
1060          */
1061         if (usb_usual_check_type(id, USB_US_TYPE_STOR) ||
1062                         usb_usual_ignore_device(intf))
1063                 return -ENXIO;
1064
1065         /*
1066          * Call the general probe procedures.
1067          *
1068          * The unusual_dev_list array is parallel to the usb_storage_usb_ids
1069          * table, so we use the index of the id entry to find the
1070          * corresponding unusual_devs entry.
1071          */
1072         result = usb_stor_probe1(&us, intf, id,
1073                         (id - usb_storage_usb_ids) + us_unusual_dev_list);
1074         if (result)
1075                 return result;
1076
1077         /* No special transport or protocol settings in the main module */
1078
1079         result = usb_stor_probe2(us);
1080         return result;
1081 }
1082
1083 /***********************************************************************
1084  * Initialization and registration
1085  ***********************************************************************/
1086
1087 static struct usb_driver usb_storage_driver = {
1088         .name =         "usb-storage",
1089         .probe =        storage_probe,
1090         .disconnect =   usb_stor_disconnect,
1091         .suspend =      usb_stor_suspend,
1092         .resume =       usb_stor_resume,
1093         .reset_resume = usb_stor_reset_resume,
1094         .pre_reset =    usb_stor_pre_reset,
1095         .post_reset =   usb_stor_post_reset,
1096         .id_table =     usb_storage_usb_ids,
1097         .soft_unbind =  1,
1098 };
1099
1100 static int __init usb_stor_init(void)
1101 {
1102         int retval;
1103
1104         printk(KERN_INFO "Initializing USB Mass Storage driver...\n");
1105
1106         /* register the driver, return usb_register return code if error */
1107         retval = usb_register(&usb_storage_driver);
1108         if (retval == 0) {
1109                 printk(KERN_INFO "USB Mass Storage support registered.\n");
1110                 usb_usual_set_present(USB_US_TYPE_STOR);
1111         }
1112         return retval;
1113 }
1114
1115 static void __exit usb_stor_exit(void)
1116 {
1117         US_DEBUGP("usb_stor_exit() called\n");
1118
1119         /* Deregister the driver
1120          * This will cause disconnect() to be called for each
1121          * attached unit
1122          */
1123         US_DEBUGP("-- calling usb_deregister()\n");
1124         usb_deregister(&usb_storage_driver) ;
1125
1126         usb_usual_clear_present(USB_US_TYPE_STOR);
1127 }
1128
1129 module_init(usb_stor_init);
1130 module_exit(usb_stor_exit);