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