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