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