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