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