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