uboot/drivers/usb/gadget/f_mass_storage.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause
   2/*
   3 * f_mass_storage.c -- Mass Storage USB Composite Function
   4 *
   5 * Copyright (C) 2003-2008 Alan Stern
   6 * Copyright (C) 2009 Samsung Electronics
   7 *                    Author: Michal Nazarewicz <m.nazarewicz@samsung.com>
   8 * All rights reserved.
   9 */
  10
  11/*
  12 * The Mass Storage Function acts as a USB Mass Storage device,
  13 * appearing to the host as a disk drive or as a CD-ROM drive.  In
  14 * addition to providing an example of a genuinely useful composite
  15 * function for a USB device, it also illustrates a technique of
  16 * double-buffering for increased throughput.
  17 *
  18 * Function supports multiple logical units (LUNs).  Backing storage
  19 * for each LUN is provided by a regular file or a block device.
  20 * Access for each LUN can be limited to read-only.  Moreover, the
  21 * function can indicate that LUN is removable and/or CD-ROM.  (The
  22 * later implies read-only access.)
  23 *
  24 * MSF is configured by specifying a fsg_config structure.  It has the
  25 * following fields:
  26 *
  27 *      nluns           Number of LUNs function have (anywhere from 1
  28 *                              to FSG_MAX_LUNS which is 8).
  29 *      luns            An array of LUN configuration values.  This
  30 *                              should be filled for each LUN that
  31 *                              function will include (ie. for "nluns"
  32 *                              LUNs).  Each element of the array has
  33 *                              the following fields:
  34 *      ->filename      The path to the backing file for the LUN.
  35 *                              Required if LUN is not marked as
  36 *                              removable.
  37 *      ->ro            Flag specifying access to the LUN shall be
  38 *                              read-only.  This is implied if CD-ROM
  39 *                              emulation is enabled as well as when
  40 *                              it was impossible to open "filename"
  41 *                              in R/W mode.
  42 *      ->removable     Flag specifying that LUN shall be indicated as
  43 *                              being removable.
  44 *      ->cdrom         Flag specifying that LUN shall be reported as
  45 *                              being a CD-ROM.
  46 *
  47 *      lun_name_format A printf-like format for names of the LUN
  48 *                              devices.  This determines how the
  49 *                              directory in sysfs will be named.
  50 *                              Unless you are using several MSFs in
  51 *                              a single gadget (as opposed to single
  52 *                              MSF in many configurations) you may
  53 *                              leave it as NULL (in which case
  54 *                              "lun%d" will be used).  In the format
  55 *                              you can use "%d" to index LUNs for
  56 *                              MSF's with more than one LUN.  (Beware
  57 *                              that there is only one integer given
  58 *                              as an argument for the format and
  59 *                              specifying invalid format may cause
  60 *                              unspecified behaviour.)
  61 *      thread_name     Name of the kernel thread process used by the
  62 *                              MSF.  You can safely set it to NULL
  63 *                              (in which case default "file-storage"
  64 *                              will be used).
  65 *
  66 *      vendor_name
  67 *      product_name
  68 *      release         Information used as a reply to INQUIRY
  69 *                              request.  To use default set to NULL,
  70 *                              NULL, 0xffff respectively.  The first
  71 *                              field should be 8 and the second 16
  72 *                              characters or less.
  73 *
  74 *      can_stall       Set to permit function to halt bulk endpoints.
  75 *                              Disabled on some USB devices known not
  76 *                              to work correctly.  You should set it
  77 *                              to true.
  78 *
  79 * If "removable" is not set for a LUN then a backing file must be
  80 * specified.  If it is set, then NULL filename means the LUN's medium
  81 * is not loaded (an empty string as "filename" in the fsg_config
  82 * structure causes error).  The CD-ROM emulation includes a single
  83 * data track and no audio tracks; hence there need be only one
  84 * backing file per LUN.  Note also that the CD-ROM block length is
  85 * set to 512 rather than the more common value 2048.
  86 *
  87 *
  88 * MSF includes support for module parameters.  If gadget using it
  89 * decides to use it, the following module parameters will be
  90 * available:
  91 *
  92 *      file=filename[,filename...]
  93 *                      Names of the files or block devices used for
  94 *                              backing storage.
  95 *      ro=b[,b...]     Default false, boolean for read-only access.
  96 *      removable=b[,b...]
  97 *                      Default true, boolean for removable media.
  98 *      cdrom=b[,b...]  Default false, boolean for whether to emulate
  99 *                              a CD-ROM drive.
 100 *      luns=N          Default N = number of filenames, number of
 101 *                              LUNs to support.
 102 *      stall           Default determined according to the type of
 103 *                              USB device controller (usually true),
 104 *                              boolean to permit the driver to halt
 105 *                              bulk endpoints.
 106 *
 107 * The module parameters may be prefixed with some string.  You need
 108 * to consult gadget's documentation or source to verify whether it is
 109 * using those module parameters and if it does what are the prefixes
 110 * (look for FSG_MODULE_PARAMETERS() macro usage, what's inside it is
 111 * the prefix).
 112 *
 113 *
 114 * Requirements are modest; only a bulk-in and a bulk-out endpoint are
 115 * needed.  The memory requirement amounts to two 16K buffers, size
 116 * configurable by a parameter.  Support is included for both
 117 * full-speed and high-speed operation.
 118 *
 119 * Note that the driver is slightly non-portable in that it assumes a
 120 * single memory/DMA buffer will be useable for bulk-in, bulk-out, and
 121 * interrupt-in endpoints.  With most device controllers this isn't an
 122 * issue, but there may be some with hardware restrictions that prevent
 123 * a buffer from being used by more than one endpoint.
 124 *
 125 *
 126 * The pathnames of the backing files and the ro settings are
 127 * available in the attribute files "file" and "ro" in the lun<n> (or
 128 * to be more precise in a directory which name comes from
 129 * "lun_name_format" option!) subdirectory of the gadget's sysfs
 130 * directory.  If the "removable" option is set, writing to these
 131 * files will simulate ejecting/loading the medium (writing an empty
 132 * line means eject) and adjusting a write-enable tab.  Changes to the
 133 * ro setting are not allowed when the medium is loaded or if CD-ROM
 134 * emulation is being used.
 135 *
 136 * When a LUN receive an "eject" SCSI request (Start/Stop Unit),
 137 * if the LUN is removable, the backing file is released to simulate
 138 * ejection.
 139 *
 140 *
 141 * This function is heavily based on "File-backed Storage Gadget" by
 142 * Alan Stern which in turn is heavily based on "Gadget Zero" by David
 143 * Brownell.  The driver's SCSI command interface was based on the
 144 * "Information technology - Small Computer System Interface - 2"
 145 * document from X3T9.2 Project 375D, Revision 10L, 7-SEP-93,
 146 * available at <http://www.t10.org/ftp/t10/drafts/s2/s2-r10l.pdf>.
 147 * The single exception is opcode 0x23 (READ FORMAT CAPACITIES), which
 148 * was based on the "Universal Serial Bus Mass Storage Class UFI
 149 * Command Specification" document, Revision 1.0, December 14, 1998,
 150 * available at
 151 * <http://www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf>.
 152 */
 153
 154/*
 155 *                              Driver Design
 156 *
 157 * The MSF is fairly straightforward.  There is a main kernel
 158 * thread that handles most of the work.  Interrupt routines field
 159 * callbacks from the controller driver: bulk- and interrupt-request
 160 * completion notifications, endpoint-0 events, and disconnect events.
 161 * Completion events are passed to the main thread by wakeup calls.  Many
 162 * ep0 requests are handled at interrupt time, but SetInterface,
 163 * SetConfiguration, and device reset requests are forwarded to the
 164 * thread in the form of "exceptions" using SIGUSR1 signals (since they
 165 * should interrupt any ongoing file I/O operations).
 166 *
 167 * The thread's main routine implements the standard command/data/status
 168 * parts of a SCSI interaction.  It and its subroutines are full of tests
 169 * for pending signals/exceptions -- all this polling is necessary since
 170 * the kernel has no setjmp/longjmp equivalents.  (Maybe this is an
 171 * indication that the driver really wants to be running in userspace.)
 172 * An important point is that so long as the thread is alive it keeps an
 173 * open reference to the backing file.  This will prevent unmounting
 174 * the backing file's underlying filesystem and could cause problems
 175 * during system shutdown, for example.  To prevent such problems, the
 176 * thread catches INT, TERM, and KILL signals and converts them into
 177 * an EXIT exception.
 178 *
 179 * In normal operation the main thread is started during the gadget's
 180 * fsg_bind() callback and stopped during fsg_unbind().  But it can
 181 * also exit when it receives a signal, and there's no point leaving
 182 * the gadget running when the thread is dead.  At of this moment, MSF
 183 * provides no way to deregister the gadget when thread dies -- maybe
 184 * a callback functions is needed.
 185 *
 186 * To provide maximum throughput, the driver uses a circular pipeline of
 187 * buffer heads (struct fsg_buffhd).  In principle the pipeline can be
 188 * arbitrarily long; in practice the benefits don't justify having more
 189 * than 2 stages (i.e., double buffering).  But it helps to think of the
 190 * pipeline as being a long one.  Each buffer head contains a bulk-in and
 191 * a bulk-out request pointer (since the buffer can be used for both
 192 * output and input -- directions always are given from the host's
 193 * point of view) as well as a pointer to the buffer and various state
 194 * variables.
 195 *
 196 * Use of the pipeline follows a simple protocol.  There is a variable
 197 * (fsg->next_buffhd_to_fill) that points to the next buffer head to use.
 198 * At any time that buffer head may still be in use from an earlier
 199 * request, so each buffer head has a state variable indicating whether
 200 * it is EMPTY, FULL, or BUSY.  Typical use involves waiting for the
 201 * buffer head to be EMPTY, filling the buffer either by file I/O or by
 202 * USB I/O (during which the buffer head is BUSY), and marking the buffer
 203 * head FULL when the I/O is complete.  Then the buffer will be emptied
 204 * (again possibly by USB I/O, during which it is marked BUSY) and
 205 * finally marked EMPTY again (possibly by a completion routine).
 206 *
 207 * A module parameter tells the driver to avoid stalling the bulk
 208 * endpoints wherever the transport specification allows.  This is
 209 * necessary for some UDCs like the SuperH, which cannot reliably clear a
 210 * halt on a bulk endpoint.  However, under certain circumstances the
 211 * Bulk-only specification requires a stall.  In such cases the driver
 212 * will halt the endpoint and set a flag indicating that it should clear
 213 * the halt in software during the next device reset.  Hopefully this
 214 * will permit everything to work correctly.  Furthermore, although the
 215 * specification allows the bulk-out endpoint to halt when the host sends
 216 * too much data, implementing this would cause an unavoidable race.
 217 * The driver will always use the "no-stall" approach for OUT transfers.
 218 *
 219 * One subtle point concerns sending status-stage responses for ep0
 220 * requests.  Some of these requests, such as device reset, can involve
 221 * interrupting an ongoing file I/O operation, which might take an
 222 * arbitrarily long time.  During that delay the host might give up on
 223 * the original ep0 request and issue a new one.  When that happens the
 224 * driver should not notify the host about completion of the original
 225 * request, as the host will no longer be waiting for it.  So the driver
 226 * assigns to each ep0 request a unique tag, and it keeps track of the
 227 * tag value of the request associated with a long-running exception
 228 * (device-reset, interface-change, or configuration-change).  When the
 229 * exception handler is finished, the status-stage response is submitted
 230 * only if the current ep0 request tag is equal to the exception request
 231 * tag.  Thus only the most recently received ep0 request will get a
 232 * status-stage response.
 233 *
 234 * Warning: This driver source file is too long.  It ought to be split up
 235 * into a header file plus about 3 separate .c files, to handle the details
 236 * of the Gadget, USB Mass Storage, and SCSI protocols.
 237 */
 238
 239/* #define VERBOSE_DEBUG */
 240/* #define DUMP_MSGS */
 241
 242#include <config.h>
 243#include <hexdump.h>
 244#include <malloc.h>
 245#include <common.h>
 246#include <console.h>
 247#include <g_dnl.h>
 248
 249#include <linux/err.h>
 250#include <linux/usb/ch9.h>
 251#include <linux/usb/gadget.h>
 252#include <usb_mass_storage.h>
 253
 254#include <asm/unaligned.h>
 255#include <linux/bitops.h>
 256#include <linux/usb/gadget.h>
 257#include <linux/usb/gadget.h>
 258#include <linux/usb/composite.h>
 259#include <linux/bitmap.h>
 260#include <g_dnl.h>
 261
 262/*------------------------------------------------------------------------*/
 263
 264#define FSG_DRIVER_DESC "Mass Storage Function"
 265#define FSG_DRIVER_VERSION      "2012/06/5"
 266
 267static const char fsg_string_interface[] = "Mass Storage";
 268
 269#define FSG_NO_INTR_EP 1
 270#define FSG_NO_DEVICE_STRINGS    1
 271#define FSG_NO_OTG               1
 272#define FSG_NO_INTR_EP           1
 273
 274#include "storage_common.c"
 275
 276/*-------------------------------------------------------------------------*/
 277
 278#define GFP_ATOMIC ((gfp_t) 0)
 279#define PAGE_CACHE_SHIFT        12
 280#define PAGE_CACHE_SIZE         (1 << PAGE_CACHE_SHIFT)
 281#define kthread_create(...)     __builtin_return_address(0)
 282#define wait_for_completion(...) do {} while (0)
 283
 284struct kref {int x; };
 285struct completion {int x; };
 286
 287struct fsg_dev;
 288struct fsg_common;
 289
 290/* Data shared by all the FSG instances. */
 291struct fsg_common {
 292        struct usb_gadget       *gadget;
 293        struct fsg_dev          *fsg, *new_fsg;
 294
 295        struct usb_ep           *ep0;           /* Copy of gadget->ep0 */
 296        struct usb_request      *ep0req;        /* Copy of cdev->req */
 297        unsigned int            ep0_req_tag;
 298
 299        struct fsg_buffhd       *next_buffhd_to_fill;
 300        struct fsg_buffhd       *next_buffhd_to_drain;
 301        struct fsg_buffhd       buffhds[FSG_NUM_BUFFERS];
 302
 303        int                     cmnd_size;
 304        u8                      cmnd[MAX_COMMAND_SIZE];
 305
 306        unsigned int            nluns;
 307        unsigned int            lun;
 308        struct fsg_lun          luns[FSG_MAX_LUNS];
 309
 310        unsigned int            bulk_out_maxpacket;
 311        enum fsg_state          state;          /* For exception handling */
 312        unsigned int            exception_req_tag;
 313
 314        enum data_direction     data_dir;
 315        u32                     data_size;
 316        u32                     data_size_from_cmnd;
 317        u32                     tag;
 318        u32                     residue;
 319        u32                     usb_amount_left;
 320
 321        unsigned int            can_stall:1;
 322        unsigned int            free_storage_on_release:1;
 323        unsigned int            phase_error:1;
 324        unsigned int            short_packet_received:1;
 325        unsigned int            bad_lun_okay:1;
 326        unsigned int            running:1;
 327
 328        int                     thread_wakeup_needed;
 329        struct completion       thread_notifier;
 330        struct task_struct      *thread_task;
 331
 332        /* Callback functions. */
 333        const struct fsg_operations     *ops;
 334        /* Gadget's private data. */
 335        void                    *private_data;
 336
 337        const char *vendor_name;                /*  8 characters or less */
 338        const char *product_name;               /* 16 characters or less */
 339        u16 release;
 340
 341        /* Vendor (8 chars), product (16 chars), release (4
 342         * hexadecimal digits) and NUL byte */
 343        char inquiry_string[8 + 16 + 4 + 1];
 344
 345        struct kref             ref;
 346};
 347
 348struct fsg_config {
 349        unsigned nluns;
 350        struct fsg_lun_config {
 351                const char *filename;
 352                char ro;
 353                char removable;
 354                char cdrom;
 355                char nofua;
 356        } luns[FSG_MAX_LUNS];
 357
 358        /* Callback functions. */
 359        const struct fsg_operations     *ops;
 360        /* Gadget's private data. */
 361        void                    *private_data;
 362
 363        const char *vendor_name;                /*  8 characters or less */
 364        const char *product_name;               /* 16 characters or less */
 365
 366        char                    can_stall;
 367};
 368
 369struct fsg_dev {
 370        struct usb_function     function;
 371        struct usb_gadget       *gadget;        /* Copy of cdev->gadget */
 372        struct fsg_common       *common;
 373
 374        u16                     interface_number;
 375
 376        unsigned int            bulk_in_enabled:1;
 377        unsigned int            bulk_out_enabled:1;
 378
 379        unsigned long           atomic_bitflags;
 380#define IGNORE_BULK_OUT         0
 381
 382        struct usb_ep           *bulk_in;
 383        struct usb_ep           *bulk_out;
 384};
 385
 386
 387static inline int __fsg_is_set(struct fsg_common *common,
 388                               const char *func, unsigned line)
 389{
 390        if (common->fsg)
 391                return 1;
 392        ERROR(common, "common->fsg is NULL in %s at %u\n", func, line);
 393        WARN_ON(1);
 394        return 0;
 395}
 396
 397#define fsg_is_set(common) likely(__fsg_is_set(common, __func__, __LINE__))
 398
 399
 400static inline struct fsg_dev *fsg_from_func(struct usb_function *f)
 401{
 402        return container_of(f, struct fsg_dev, function);
 403}
 404
 405
 406typedef void (*fsg_routine_t)(struct fsg_dev *);
 407
 408static int exception_in_progress(struct fsg_common *common)
 409{
 410        return common->state > FSG_STATE_IDLE;
 411}
 412
 413/* Make bulk-out requests be divisible by the maxpacket size */
 414static void set_bulk_out_req_length(struct fsg_common *common,
 415                struct fsg_buffhd *bh, unsigned int length)
 416{
 417        unsigned int    rem;
 418
 419        bh->bulk_out_intended_length = length;
 420        rem = length % common->bulk_out_maxpacket;
 421        if (rem > 0)
 422                length += common->bulk_out_maxpacket - rem;
 423        bh->outreq->length = length;
 424}
 425
 426/*-------------------------------------------------------------------------*/
 427
 428static struct ums *ums;
 429static int ums_count;
 430static struct fsg_common *the_fsg_common;
 431
 432static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
 433{
 434        const char      *name;
 435
 436        if (ep == fsg->bulk_in)
 437                name = "bulk-in";
 438        else if (ep == fsg->bulk_out)
 439                name = "bulk-out";
 440        else
 441                name = ep->name;
 442        DBG(fsg, "%s set halt\n", name);
 443        return usb_ep_set_halt(ep);
 444}
 445
 446/*-------------------------------------------------------------------------*/
 447
 448/* These routines may be called in process context or in_irq */
 449
 450/* Caller must hold fsg->lock */
 451static void wakeup_thread(struct fsg_common *common)
 452{
 453        common->thread_wakeup_needed = 1;
 454}
 455
 456static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
 457{
 458        /* Do nothing if a higher-priority exception is already in progress.
 459         * If a lower-or-equal priority exception is in progress, preempt it
 460         * and notify the main thread by sending it a signal. */
 461        if (common->state <= new_state) {
 462                common->exception_req_tag = common->ep0_req_tag;
 463                common->state = new_state;
 464                common->thread_wakeup_needed = 1;
 465        }
 466}
 467
 468/*-------------------------------------------------------------------------*/
 469
 470static int ep0_queue(struct fsg_common *common)
 471{
 472        int     rc;
 473
 474        rc = usb_ep_queue(common->ep0, common->ep0req, GFP_ATOMIC);
 475        common->ep0->driver_data = common;
 476        if (rc != 0 && rc != -ESHUTDOWN) {
 477                /* We can't do much more than wait for a reset */
 478                WARNING(common, "error in submission: %s --> %d\n",
 479                        common->ep0->name, rc);
 480        }
 481        return rc;
 482}
 483
 484/*-------------------------------------------------------------------------*/
 485
 486/* Bulk and interrupt endpoint completion handlers.
 487 * These always run in_irq. */
 488
 489static void bulk_in_complete(struct usb_ep *ep, struct usb_request *req)
 490{
 491        struct fsg_common       *common = ep->driver_data;
 492        struct fsg_buffhd       *bh = req->context;
 493
 494        if (req->status || req->actual != req->length)
 495                DBG(common, "%s --> %d, %u/%u\n", __func__,
 496                                req->status, req->actual, req->length);
 497        if (req->status == -ECONNRESET)         /* Request was cancelled */
 498                usb_ep_fifo_flush(ep);
 499
 500        /* Hold the lock while we update the request and buffer states */
 501        bh->inreq_busy = 0;
 502        bh->state = BUF_STATE_EMPTY;
 503        wakeup_thread(common);
 504}
 505
 506static void bulk_out_complete(struct usb_ep *ep, struct usb_request *req)
 507{
 508        struct fsg_common       *common = ep->driver_data;
 509        struct fsg_buffhd       *bh = req->context;
 510
 511        dump_msg(common, "bulk-out", req->buf, req->actual);
 512        if (req->status || req->actual != bh->bulk_out_intended_length)
 513                DBG(common, "%s --> %d, %u/%u\n", __func__,
 514                                req->status, req->actual,
 515                                bh->bulk_out_intended_length);
 516        if (req->status == -ECONNRESET)         /* Request was cancelled */
 517                usb_ep_fifo_flush(ep);
 518
 519        /* Hold the lock while we update the request and buffer states */
 520        bh->outreq_busy = 0;
 521        bh->state = BUF_STATE_FULL;
 522        wakeup_thread(common);
 523}
 524
 525/*-------------------------------------------------------------------------*/
 526
 527/* Ep0 class-specific handlers.  These always run in_irq. */
 528
 529static int fsg_setup(struct usb_function *f,
 530                const struct usb_ctrlrequest *ctrl)
 531{
 532        struct fsg_dev          *fsg = fsg_from_func(f);
 533        struct usb_request      *req = fsg->common->ep0req;
 534        u16                     w_index = get_unaligned_le16(&ctrl->wIndex);
 535        u16                     w_value = get_unaligned_le16(&ctrl->wValue);
 536        u16                     w_length = get_unaligned_le16(&ctrl->wLength);
 537
 538        if (!fsg_is_set(fsg->common))
 539                return -EOPNOTSUPP;
 540
 541        switch (ctrl->bRequest) {
 542
 543        case USB_BULK_RESET_REQUEST:
 544                if (ctrl->bRequestType !=
 545                    (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
 546                        break;
 547                if (w_index != fsg->interface_number || w_value != 0)
 548                        return -EDOM;
 549
 550                /* Raise an exception to stop the current operation
 551                 * and reinitialize our state. */
 552                DBG(fsg, "bulk reset request\n");
 553                raise_exception(fsg->common, FSG_STATE_RESET);
 554                return DELAYED_STATUS;
 555
 556        case USB_BULK_GET_MAX_LUN_REQUEST:
 557                if (ctrl->bRequestType !=
 558                    (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
 559                        break;
 560                if (w_index != fsg->interface_number || w_value != 0)
 561                        return -EDOM;
 562                VDBG(fsg, "get max LUN\n");
 563                *(u8 *) req->buf = fsg->common->nluns - 1;
 564
 565                /* Respond with data/status */
 566                req->length = min((u16)1, w_length);
 567                return ep0_queue(fsg->common);
 568        }
 569
 570        VDBG(fsg,
 571             "unknown class-specific control req "
 572             "%02x.%02x v%04x i%04x l%u\n",
 573             ctrl->bRequestType, ctrl->bRequest,
 574             get_unaligned_le16(&ctrl->wValue), w_index, w_length);
 575        return -EOPNOTSUPP;
 576}
 577
 578/*-------------------------------------------------------------------------*/
 579
 580/* All the following routines run in process context */
 581
 582/* Use this for bulk or interrupt transfers, not ep0 */
 583static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep,
 584                struct usb_request *req, int *pbusy,
 585                enum fsg_buffer_state *state)
 586{
 587        int     rc;
 588
 589        if (ep == fsg->bulk_in)
 590                dump_msg(fsg, "bulk-in", req->buf, req->length);
 591
 592        *pbusy = 1;
 593        *state = BUF_STATE_BUSY;
 594        rc = usb_ep_queue(ep, req, GFP_KERNEL);
 595        if (rc != 0) {
 596                *pbusy = 0;
 597                *state = BUF_STATE_EMPTY;
 598
 599                /* We can't do much more than wait for a reset */
 600
 601                /* Note: currently the net2280 driver fails zero-length
 602                 * submissions if DMA is enabled. */
 603                if (rc != -ESHUTDOWN && !(rc == -EOPNOTSUPP &&
 604                                                req->length == 0))
 605                        WARNING(fsg, "error in submission: %s --> %d\n",
 606                                        ep->name, rc);
 607        }
 608}
 609
 610#define START_TRANSFER_OR(common, ep_name, req, pbusy, state)           \
 611        if (fsg_is_set(common))                                         \
 612                start_transfer((common)->fsg, (common)->fsg->ep_name,   \
 613                               req, pbusy, state);                      \
 614        else
 615
 616#define START_TRANSFER(common, ep_name, req, pbusy, state)              \
 617        START_TRANSFER_OR(common, ep_name, req, pbusy, state) (void)0
 618
 619static void busy_indicator(void)
 620{
 621        static int state;
 622
 623        switch (state) {
 624        case 0:
 625                puts("\r|"); break;
 626        case 1:
 627                puts("\r/"); break;
 628        case 2:
 629                puts("\r-"); break;
 630        case 3:
 631                puts("\r\\"); break;
 632        case 4:
 633                puts("\r|"); break;
 634        case 5:
 635                puts("\r/"); break;
 636        case 6:
 637                puts("\r-"); break;
 638        case 7:
 639                puts("\r\\"); break;
 640        default:
 641                state = 0;
 642        }
 643        if (state++ == 8)
 644                state = 0;
 645}
 646
 647static int sleep_thread(struct fsg_common *common)
 648{
 649        int     rc = 0;
 650        int i = 0, k = 0;
 651
 652        /* Wait until a signal arrives or we are woken up */
 653        for (;;) {
 654                if (common->thread_wakeup_needed)
 655                        break;
 656
 657                if (++i == 20000) {
 658                        busy_indicator();
 659                        i = 0;
 660                        k++;
 661                }
 662
 663                if (k == 10) {
 664                        /* Handle CTRL+C */
 665                        if (ctrlc())
 666                                return -EPIPE;
 667
 668                        /* Check cable connection */
 669                        if (!g_dnl_board_usb_cable_connected())
 670                                return -EIO;
 671
 672                        k = 0;
 673                }
 674
 675                usb_gadget_handle_interrupts(0);
 676        }
 677        common->thread_wakeup_needed = 0;
 678        return rc;
 679}
 680
 681/*-------------------------------------------------------------------------*/
 682
 683static int do_read(struct fsg_common *common)
 684{
 685        struct fsg_lun          *curlun = &common->luns[common->lun];
 686        u32                     lba;
 687        struct fsg_buffhd       *bh;
 688        int                     rc;
 689        u32                     amount_left;
 690        loff_t                  file_offset;
 691        unsigned int            amount;
 692        unsigned int            partial_page;
 693        ssize_t                 nread;
 694
 695        /* Get the starting Logical Block Address and check that it's
 696         * not too big */
 697        if (common->cmnd[0] == SC_READ_6)
 698                lba = get_unaligned_be24(&common->cmnd[1]);
 699        else {
 700                lba = get_unaligned_be32(&common->cmnd[2]);
 701
 702                /* We allow DPO (Disable Page Out = don't save data in the
 703                 * cache) and FUA (Force Unit Access = don't read from the
 704                 * cache), but we don't implement them. */
 705                if ((common->cmnd[1] & ~0x18) != 0) {
 706                        curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
 707                        return -EINVAL;
 708                }
 709        }
 710        if (lba >= curlun->num_sectors) {
 711                curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
 712                return -EINVAL;
 713        }
 714        file_offset = ((loff_t) lba) << 9;
 715
 716        /* Carry out the file reads */
 717        amount_left = common->data_size_from_cmnd;
 718        if (unlikely(amount_left == 0))
 719                return -EIO;            /* No default reply */
 720
 721        for (;;) {
 722
 723                /* Figure out how much we need to read:
 724                 * Try to read the remaining amount.
 725                 * But don't read more than the buffer size.
 726                 * And don't try to read past the end of the file.
 727                 * Finally, if we're not at a page boundary, don't read past
 728                 *      the next page.
 729                 * If this means reading 0 then we were asked to read past
 730                 *      the end of file. */
 731                amount = min(amount_left, FSG_BUFLEN);
 732                partial_page = file_offset & (PAGE_CACHE_SIZE - 1);
 733                if (partial_page > 0)
 734                        amount = min(amount, (unsigned int) PAGE_CACHE_SIZE -
 735                                        partial_page);
 736
 737                /* Wait for the next buffer to become available */
 738                bh = common->next_buffhd_to_fill;
 739                while (bh->state != BUF_STATE_EMPTY) {
 740                        rc = sleep_thread(common);
 741                        if (rc)
 742                                return rc;
 743                }
 744
 745                /* If we were asked to read past the end of file,
 746                 * end with an empty buffer. */
 747                if (amount == 0) {
 748                        curlun->sense_data =
 749                                        SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
 750                        curlun->info_valid = 1;
 751                        bh->inreq->length = 0;
 752                        bh->state = BUF_STATE_FULL;
 753                        break;
 754                }
 755
 756                /* Perform the read */
 757                rc = ums[common->lun].read_sector(&ums[common->lun],
 758                                      file_offset / SECTOR_SIZE,
 759                                      amount / SECTOR_SIZE,
 760                                      (char __user *)bh->buf);
 761                if (!rc)
 762                        return -EIO;
 763
 764                nread = rc * SECTOR_SIZE;
 765
 766                VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
 767                                (unsigned long long) file_offset,
 768                                (int) nread);
 769
 770                if (nread < 0) {
 771                        LDBG(curlun, "error in file read: %d\n",
 772                                        (int) nread);
 773                        nread = 0;
 774                } else if (nread < amount) {
 775                        LDBG(curlun, "partial file read: %d/%u\n",
 776                                        (int) nread, amount);
 777                        nread -= (nread & 511); /* Round down to a block */
 778                }
 779                file_offset  += nread;
 780                amount_left  -= nread;
 781                common->residue -= nread;
 782                bh->inreq->length = nread;
 783                bh->state = BUF_STATE_FULL;
 784
 785                /* If an error occurred, report it and its position */
 786                if (nread < amount) {
 787                        curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
 788                        curlun->info_valid = 1;
 789                        break;
 790                }
 791
 792                if (amount_left == 0)
 793                        break;          /* No more left to read */
 794
 795                /* Send this buffer and go read some more */
 796                bh->inreq->zero = 0;
 797                START_TRANSFER_OR(common, bulk_in, bh->inreq,
 798                               &bh->inreq_busy, &bh->state)
 799                        /* Don't know what to do if
 800                         * common->fsg is NULL */
 801                        return -EIO;
 802                common->next_buffhd_to_fill = bh->next;
 803        }
 804
 805        return -EIO;            /* No default reply */
 806}
 807
 808/*-------------------------------------------------------------------------*/
 809
 810static int do_write(struct fsg_common *common)
 811{
 812        struct fsg_lun          *curlun = &common->luns[common->lun];
 813        u32                     lba;
 814        struct fsg_buffhd       *bh;
 815        int                     get_some_more;
 816        u32                     amount_left_to_req, amount_left_to_write;
 817        loff_t                  usb_offset, file_offset;
 818        unsigned int            amount;
 819        unsigned int            partial_page;
 820        ssize_t                 nwritten;
 821        int                     rc;
 822
 823        if (curlun->ro) {
 824                curlun->sense_data = SS_WRITE_PROTECTED;
 825                return -EINVAL;
 826        }
 827
 828        /* Get the starting Logical Block Address and check that it's
 829         * not too big */
 830        if (common->cmnd[0] == SC_WRITE_6)
 831                lba = get_unaligned_be24(&common->cmnd[1]);
 832        else {
 833                lba = get_unaligned_be32(&common->cmnd[2]);
 834
 835                /* We allow DPO (Disable Page Out = don't save data in the
 836                 * cache) and FUA (Force Unit Access = write directly to the
 837                 * medium).  We don't implement DPO; we implement FUA by
 838                 * performing synchronous output. */
 839                if (common->cmnd[1] & ~0x18) {
 840                        curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
 841                        return -EINVAL;
 842                }
 843        }
 844        if (lba >= curlun->num_sectors) {
 845                curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
 846                return -EINVAL;
 847        }
 848
 849        /* Carry out the file writes */
 850        get_some_more = 1;
 851        file_offset = usb_offset = ((loff_t) lba) << 9;
 852        amount_left_to_req = common->data_size_from_cmnd;
 853        amount_left_to_write = common->data_size_from_cmnd;
 854
 855        while (amount_left_to_write > 0) {
 856
 857                /* Queue a request for more data from the host */
 858                bh = common->next_buffhd_to_fill;
 859                if (bh->state == BUF_STATE_EMPTY && get_some_more) {
 860
 861                        /* Figure out how much we want to get:
 862                         * Try to get the remaining amount.
 863                         * But don't get more than the buffer size.
 864                         * And don't try to go past the end of the file.
 865                         * If we're not at a page boundary,
 866                         *      don't go past the next page.
 867                         * If this means getting 0, then we were asked
 868                         *      to write past the end of file.
 869                         * Finally, round down to a block boundary. */
 870                        amount = min(amount_left_to_req, FSG_BUFLEN);
 871                        partial_page = usb_offset & (PAGE_CACHE_SIZE - 1);
 872                        if (partial_page > 0)
 873                                amount = min(amount,
 874        (unsigned int) PAGE_CACHE_SIZE - partial_page);
 875
 876                        if (amount == 0) {
 877                                get_some_more = 0;
 878                                curlun->sense_data =
 879                                        SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
 880                                curlun->info_valid = 1;
 881                                continue;
 882                        }
 883                        amount -= (amount & 511);
 884                        if (amount == 0) {
 885
 886                                /* Why were we were asked to transfer a
 887                                 * partial block? */
 888                                get_some_more = 0;
 889                                continue;
 890                        }
 891
 892                        /* Get the next buffer */
 893                        usb_offset += amount;
 894                        common->usb_amount_left -= amount;
 895                        amount_left_to_req -= amount;
 896                        if (amount_left_to_req == 0)
 897                                get_some_more = 0;
 898
 899                        /* amount is always divisible by 512, hence by
 900                         * the bulk-out maxpacket size */
 901                        bh->outreq->length = amount;
 902                        bh->bulk_out_intended_length = amount;
 903                        bh->outreq->short_not_ok = 1;
 904                        START_TRANSFER_OR(common, bulk_out, bh->outreq,
 905                                          &bh->outreq_busy, &bh->state)
 906                                /* Don't know what to do if
 907                                 * common->fsg is NULL */
 908                                return -EIO;
 909                        common->next_buffhd_to_fill = bh->next;
 910                        continue;
 911                }
 912
 913                /* Write the received data to the backing file */
 914                bh = common->next_buffhd_to_drain;
 915                if (bh->state == BUF_STATE_EMPTY && !get_some_more)
 916                        break;                  /* We stopped early */
 917                if (bh->state == BUF_STATE_FULL) {
 918                        common->next_buffhd_to_drain = bh->next;
 919                        bh->state = BUF_STATE_EMPTY;
 920
 921                        /* Did something go wrong with the transfer? */
 922                        if (bh->outreq->status != 0) {
 923                                curlun->sense_data = SS_COMMUNICATION_FAILURE;
 924                                curlun->info_valid = 1;
 925                                break;
 926                        }
 927
 928                        amount = bh->outreq->actual;
 929
 930                        /* Perform the write */
 931                        rc = ums[common->lun].write_sector(&ums[common->lun],
 932                                               file_offset / SECTOR_SIZE,
 933                                               amount / SECTOR_SIZE,
 934                                               (char __user *)bh->buf);
 935                        if (!rc)
 936                                return -EIO;
 937                        nwritten = rc * SECTOR_SIZE;
 938
 939                        VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
 940                                        (unsigned long long) file_offset,
 941                                        (int) nwritten);
 942
 943                        if (nwritten < 0) {
 944                                LDBG(curlun, "error in file write: %d\n",
 945                                                (int) nwritten);
 946                                nwritten = 0;
 947                        } else if (nwritten < amount) {
 948                                LDBG(curlun, "partial file write: %d/%u\n",
 949                                                (int) nwritten, amount);
 950                                nwritten -= (nwritten & 511);
 951                                /* Round down to a block */
 952                        }
 953                        file_offset += nwritten;
 954                        amount_left_to_write -= nwritten;
 955                        common->residue -= nwritten;
 956
 957                        /* If an error occurred, report it and its position */
 958                        if (nwritten < amount) {
 959                                printf("nwritten:%zd amount:%u\n", nwritten,
 960                                       amount);
 961                                curlun->sense_data = SS_WRITE_ERROR;
 962                                curlun->info_valid = 1;
 963                                break;
 964                        }
 965
 966                        /* Did the host decide to stop early? */
 967                        if (bh->outreq->actual != bh->outreq->length) {
 968                                common->short_packet_received = 1;
 969                                break;
 970                        }
 971                        continue;
 972                }
 973
 974                /* Wait for something to happen */
 975                rc = sleep_thread(common);
 976                if (rc)
 977                        return rc;
 978        }
 979
 980        return -EIO;            /* No default reply */
 981}
 982
 983/*-------------------------------------------------------------------------*/
 984
 985static int do_synchronize_cache(struct fsg_common *common)
 986{
 987        return 0;
 988}
 989
 990/*-------------------------------------------------------------------------*/
 991
 992static int do_verify(struct fsg_common *common)
 993{
 994        struct fsg_lun          *curlun = &common->luns[common->lun];
 995        u32                     lba;
 996        u32                     verification_length;
 997        struct fsg_buffhd       *bh = common->next_buffhd_to_fill;
 998        loff_t                  file_offset;
 999        u32                     amount_left;
1000        unsigned int            amount;
1001        ssize_t                 nread;
1002        int                     rc;
1003
1004        /* Get the starting Logical Block Address and check that it's
1005         * not too big */
1006        lba = get_unaligned_be32(&common->cmnd[2]);
1007        if (lba >= curlun->num_sectors) {
1008                curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1009                return -EINVAL;
1010        }
1011
1012        /* We allow DPO (Disable Page Out = don't save data in the
1013         * cache) but we don't implement it. */
1014        if (common->cmnd[1] & ~0x10) {
1015                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1016                return -EINVAL;
1017        }
1018
1019        verification_length = get_unaligned_be16(&common->cmnd[7]);
1020        if (unlikely(verification_length == 0))
1021                return -EIO;            /* No default reply */
1022
1023        /* Prepare to carry out the file verify */
1024        amount_left = verification_length << 9;
1025        file_offset = ((loff_t) lba) << 9;
1026
1027        /* Write out all the dirty buffers before invalidating them */
1028
1029        /* Just try to read the requested blocks */
1030        while (amount_left > 0) {
1031
1032                /* Figure out how much we need to read:
1033                 * Try to read the remaining amount, but not more than
1034                 * the buffer size.
1035                 * And don't try to read past the end of the file.
1036                 * If this means reading 0 then we were asked to read
1037                 * past the end of file. */
1038                amount = min(amount_left, FSG_BUFLEN);
1039                if (amount == 0) {
1040                        curlun->sense_data =
1041                                        SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1042                        curlun->info_valid = 1;
1043                        break;
1044                }
1045
1046                /* Perform the read */
1047                rc = ums[common->lun].read_sector(&ums[common->lun],
1048                                      file_offset / SECTOR_SIZE,
1049                                      amount / SECTOR_SIZE,
1050                                      (char __user *)bh->buf);
1051                if (!rc)
1052                        return -EIO;
1053                nread = rc * SECTOR_SIZE;
1054
1055                VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
1056                                (unsigned long long) file_offset,
1057                                (int) nread);
1058                if (nread < 0) {
1059                        LDBG(curlun, "error in file verify: %d\n",
1060                                        (int) nread);
1061                        nread = 0;
1062                } else if (nread < amount) {
1063                        LDBG(curlun, "partial file verify: %d/%u\n",
1064                                        (int) nread, amount);
1065                        nread -= (nread & 511); /* Round down to a sector */
1066                }
1067                if (nread == 0) {
1068                        curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
1069                        curlun->info_valid = 1;
1070                        break;
1071                }
1072                file_offset += nread;
1073                amount_left -= nread;
1074        }
1075        return 0;
1076}
1077
1078/*-------------------------------------------------------------------------*/
1079
1080static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
1081{
1082        struct fsg_lun *curlun = &common->luns[common->lun];
1083        static const char vendor_id[] = "Linux   ";
1084        u8      *buf = (u8 *) bh->buf;
1085
1086        if (!curlun) {          /* Unsupported LUNs are okay */
1087                common->bad_lun_okay = 1;
1088                memset(buf, 0, 36);
1089                buf[0] = 0x7f;          /* Unsupported, no device-type */
1090                buf[4] = 31;            /* Additional length */
1091                return 36;
1092        }
1093
1094        memset(buf, 0, 8);
1095        buf[0] = TYPE_DISK;
1096        buf[1] = curlun->removable ? 0x80 : 0;
1097        buf[2] = 2;             /* ANSI SCSI level 2 */
1098        buf[3] = 2;             /* SCSI-2 INQUIRY data format */
1099        buf[4] = 31;            /* Additional length */
1100                                /* No special options */
1101        sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id ,
1102                        ums[common->lun].name, (u16) 0xffff);
1103
1104        return 36;
1105}
1106
1107
1108static int do_request_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1109{
1110        struct fsg_lun  *curlun = &common->luns[common->lun];
1111        u8              *buf = (u8 *) bh->buf;
1112        u32             sd, sdinfo;
1113        int             valid;
1114
1115        /*
1116         * From the SCSI-2 spec., section 7.9 (Unit attention condition):
1117         *
1118         * If a REQUEST SENSE command is received from an initiator
1119         * with a pending unit attention condition (before the target
1120         * generates the contingent allegiance condition), then the
1121         * target shall either:
1122         *   a) report any pending sense data and preserve the unit
1123         *      attention condition on the logical unit, or,
1124         *   b) report the unit attention condition, may discard any
1125         *      pending sense data, and clear the unit attention
1126         *      condition on the logical unit for that initiator.
1127         *
1128         * FSG normally uses option a); enable this code to use option b).
1129         */
1130#if 0
1131        if (curlun && curlun->unit_attention_data != SS_NO_SENSE) {
1132                curlun->sense_data = curlun->unit_attention_data;
1133                curlun->unit_attention_data = SS_NO_SENSE;
1134        }
1135#endif
1136
1137        if (!curlun) {          /* Unsupported LUNs are okay */
1138                common->bad_lun_okay = 1;
1139                sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
1140                sdinfo = 0;
1141                valid = 0;
1142        } else {
1143                sd = curlun->sense_data;
1144                valid = curlun->info_valid << 7;
1145                curlun->sense_data = SS_NO_SENSE;
1146                curlun->info_valid = 0;
1147        }
1148
1149        memset(buf, 0, 18);
1150        buf[0] = valid | 0x70;                  /* Valid, current error */
1151        buf[2] = SK(sd);
1152        put_unaligned_be32(sdinfo, &buf[3]);    /* Sense information */
1153        buf[7] = 18 - 8;                        /* Additional sense length */
1154        buf[12] = ASC(sd);
1155        buf[13] = ASCQ(sd);
1156        return 18;
1157}
1158
1159static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh)
1160{
1161        struct fsg_lun  *curlun = &common->luns[common->lun];
1162        u32             lba = get_unaligned_be32(&common->cmnd[2]);
1163        int             pmi = common->cmnd[8];
1164        u8              *buf = (u8 *) bh->buf;
1165
1166        /* Check the PMI and LBA fields */
1167        if (pmi > 1 || (pmi == 0 && lba != 0)) {
1168                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1169                return -EINVAL;
1170        }
1171
1172        put_unaligned_be32(curlun->num_sectors - 1, &buf[0]);
1173                                                /* Max logical block */
1174        put_unaligned_be32(512, &buf[4]);       /* Block length */
1175        return 8;
1176}
1177
1178static int do_read_header(struct fsg_common *common, struct fsg_buffhd *bh)
1179{
1180        struct fsg_lun  *curlun = &common->luns[common->lun];
1181        int             msf = common->cmnd[1] & 0x02;
1182        u32             lba = get_unaligned_be32(&common->cmnd[2]);
1183        u8              *buf = (u8 *) bh->buf;
1184
1185        if (common->cmnd[1] & ~0x02) {          /* Mask away MSF */
1186                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1187                return -EINVAL;
1188        }
1189        if (lba >= curlun->num_sectors) {
1190                curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1191                return -EINVAL;
1192        }
1193
1194        memset(buf, 0, 8);
1195        buf[0] = 0x01;          /* 2048 bytes of user data, rest is EC */
1196        store_cdrom_address(&buf[4], msf, lba);
1197        return 8;
1198}
1199
1200
1201static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
1202{
1203        struct fsg_lun  *curlun = &common->luns[common->lun];
1204        int             msf = common->cmnd[1] & 0x02;
1205        int             start_track = common->cmnd[6];
1206        u8              *buf = (u8 *) bh->buf;
1207
1208        if ((common->cmnd[1] & ~0x02) != 0 ||   /* Mask away MSF */
1209                        start_track > 1) {
1210                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1211                return -EINVAL;
1212        }
1213
1214        memset(buf, 0, 20);
1215        buf[1] = (20-2);                /* TOC data length */
1216        buf[2] = 1;                     /* First track number */
1217        buf[3] = 1;                     /* Last track number */
1218        buf[5] = 0x16;                  /* Data track, copying allowed */
1219        buf[6] = 0x01;                  /* Only track is number 1 */
1220        store_cdrom_address(&buf[8], msf, 0);
1221
1222        buf[13] = 0x16;                 /* Lead-out track is data */
1223        buf[14] = 0xAA;                 /* Lead-out track number */
1224        store_cdrom_address(&buf[16], msf, curlun->num_sectors);
1225
1226        return 20;
1227}
1228
1229static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1230{
1231        struct fsg_lun  *curlun = &common->luns[common->lun];
1232        int             mscmnd = common->cmnd[0];
1233        u8              *buf = (u8 *) bh->buf;
1234        u8              *buf0 = buf;
1235        int             pc, page_code;
1236        int             changeable_values, all_pages;
1237        int             valid_page = 0;
1238        int             len, limit;
1239
1240        if ((common->cmnd[1] & ~0x08) != 0) {   /* Mask away DBD */
1241                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1242                return -EINVAL;
1243        }
1244        pc = common->cmnd[2] >> 6;
1245        page_code = common->cmnd[2] & 0x3f;
1246        if (pc == 3) {
1247                curlun->sense_data = SS_SAVING_PARAMETERS_NOT_SUPPORTED;
1248                return -EINVAL;
1249        }
1250        changeable_values = (pc == 1);
1251        all_pages = (page_code == 0x3f);
1252
1253        /* Write the mode parameter header.  Fixed values are: default
1254         * medium type, no cache control (DPOFUA), and no block descriptors.
1255         * The only variable value is the WriteProtect bit.  We will fill in
1256         * the mode data length later. */
1257        memset(buf, 0, 8);
1258        if (mscmnd == SC_MODE_SENSE_6) {
1259                buf[2] = (curlun->ro ? 0x80 : 0x00);            /* WP, DPOFUA */
1260                buf += 4;
1261                limit = 255;
1262        } else {                        /* SC_MODE_SENSE_10 */
1263                buf[3] = (curlun->ro ? 0x80 : 0x00);            /* WP, DPOFUA */
1264                buf += 8;
1265                limit = 65535;          /* Should really be FSG_BUFLEN */
1266        }
1267
1268        /* No block descriptors */
1269
1270        /* The mode pages, in numerical order.  The only page we support
1271         * is the Caching page. */
1272        if (page_code == 0x08 || all_pages) {
1273                valid_page = 1;
1274                buf[0] = 0x08;          /* Page code */
1275                buf[1] = 10;            /* Page length */
1276                memset(buf+2, 0, 10);   /* None of the fields are changeable */
1277
1278                if (!changeable_values) {
1279                        buf[2] = 0x04;  /* Write cache enable, */
1280                                        /* Read cache not disabled */
1281                                        /* No cache retention priorities */
1282                        put_unaligned_be16(0xffff, &buf[4]);
1283                                        /* Don't disable prefetch */
1284                                        /* Minimum prefetch = 0 */
1285                        put_unaligned_be16(0xffff, &buf[8]);
1286                                        /* Maximum prefetch */
1287                        put_unaligned_be16(0xffff, &buf[10]);
1288                                        /* Maximum prefetch ceiling */
1289                }
1290                buf += 12;
1291        }
1292
1293        /* Check that a valid page was requested and the mode data length
1294         * isn't too long. */
1295        len = buf - buf0;
1296        if (!valid_page || len > limit) {
1297                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1298                return -EINVAL;
1299        }
1300
1301        /*  Store the mode data length */
1302        if (mscmnd == SC_MODE_SENSE_6)
1303                buf0[0] = len - 1;
1304        else
1305                put_unaligned_be16(len - 2, buf0);
1306        return len;
1307}
1308
1309
1310static int do_start_stop(struct fsg_common *common)
1311{
1312        struct fsg_lun  *curlun = &common->luns[common->lun];
1313
1314        if (!curlun) {
1315                return -EINVAL;
1316        } else if (!curlun->removable) {
1317                curlun->sense_data = SS_INVALID_COMMAND;
1318                return -EINVAL;
1319        }
1320
1321        return 0;
1322}
1323
1324static int do_prevent_allow(struct fsg_common *common)
1325{
1326        struct fsg_lun  *curlun = &common->luns[common->lun];
1327        int             prevent;
1328
1329        if (!curlun->removable) {
1330                curlun->sense_data = SS_INVALID_COMMAND;
1331                return -EINVAL;
1332        }
1333
1334        prevent = common->cmnd[4] & 0x01;
1335        if ((common->cmnd[4] & ~0x01) != 0) {   /* Mask away Prevent */
1336                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1337                return -EINVAL;
1338        }
1339
1340        if (curlun->prevent_medium_removal && !prevent)
1341                fsg_lun_fsync_sub(curlun);
1342        curlun->prevent_medium_removal = prevent;
1343        return 0;
1344}
1345
1346
1347static int do_read_format_capacities(struct fsg_common *common,
1348                        struct fsg_buffhd *bh)
1349{
1350        struct fsg_lun  *curlun = &common->luns[common->lun];
1351        u8              *buf = (u8 *) bh->buf;
1352
1353        buf[0] = buf[1] = buf[2] = 0;
1354        buf[3] = 8;     /* Only the Current/Maximum Capacity Descriptor */
1355        buf += 4;
1356
1357        put_unaligned_be32(curlun->num_sectors, &buf[0]);
1358                                                /* Number of blocks */
1359        put_unaligned_be32(512, &buf[4]);       /* Block length */
1360        buf[4] = 0x02;                          /* Current capacity */
1361        return 12;
1362}
1363
1364
1365static int do_mode_select(struct fsg_common *common, struct fsg_buffhd *bh)
1366{
1367        struct fsg_lun  *curlun = &common->luns[common->lun];
1368
1369        /* We don't support MODE SELECT */
1370        if (curlun)
1371                curlun->sense_data = SS_INVALID_COMMAND;
1372        return -EINVAL;
1373}
1374
1375
1376/*-------------------------------------------------------------------------*/
1377
1378static int halt_bulk_in_endpoint(struct fsg_dev *fsg)
1379{
1380        int     rc;
1381
1382        rc = fsg_set_halt(fsg, fsg->bulk_in);
1383        if (rc == -EAGAIN)
1384                VDBG(fsg, "delayed bulk-in endpoint halt\n");
1385        while (rc != 0) {
1386                if (rc != -EAGAIN) {
1387                        WARNING(fsg, "usb_ep_set_halt -> %d\n", rc);
1388                        rc = 0;
1389                        break;
1390                }
1391
1392                rc = usb_ep_set_halt(fsg->bulk_in);
1393        }
1394        return rc;
1395}
1396
1397static int wedge_bulk_in_endpoint(struct fsg_dev *fsg)
1398{
1399        int     rc;
1400
1401        DBG(fsg, "bulk-in set wedge\n");
1402        rc = 0; /* usb_ep_set_wedge(fsg->bulk_in); */
1403        if (rc == -EAGAIN)
1404                VDBG(fsg, "delayed bulk-in endpoint wedge\n");
1405        while (rc != 0) {
1406                if (rc != -EAGAIN) {
1407                        WARNING(fsg, "usb_ep_set_wedge -> %d\n", rc);
1408                        rc = 0;
1409                        break;
1410                }
1411        }
1412        return rc;
1413}
1414
1415static int pad_with_zeros(struct fsg_dev *fsg)
1416{
1417        struct fsg_buffhd       *bh = fsg->common->next_buffhd_to_fill;
1418        u32                     nkeep = bh->inreq->length;
1419        u32                     nsend;
1420        int                     rc;
1421
1422        bh->state = BUF_STATE_EMPTY;            /* For the first iteration */
1423        fsg->common->usb_amount_left = nkeep + fsg->common->residue;
1424        while (fsg->common->usb_amount_left > 0) {
1425
1426                /* Wait for the next buffer to be free */
1427                while (bh->state != BUF_STATE_EMPTY) {
1428                        rc = sleep_thread(fsg->common);
1429                        if (rc)
1430                                return rc;
1431                }
1432
1433                nsend = min(fsg->common->usb_amount_left, FSG_BUFLEN);
1434                memset(bh->buf + nkeep, 0, nsend - nkeep);
1435                bh->inreq->length = nsend;
1436                bh->inreq->zero = 0;
1437                start_transfer(fsg, fsg->bulk_in, bh->inreq,
1438                                &bh->inreq_busy, &bh->state);
1439                bh = fsg->common->next_buffhd_to_fill = bh->next;
1440                fsg->common->usb_amount_left -= nsend;
1441                nkeep = 0;
1442        }
1443        return 0;
1444}
1445
1446static int throw_away_data(struct fsg_common *common)
1447{
1448        struct fsg_buffhd       *bh;
1449        u32                     amount;
1450        int                     rc;
1451
1452        for (bh = common->next_buffhd_to_drain;
1453             bh->state != BUF_STATE_EMPTY || common->usb_amount_left > 0;
1454             bh = common->next_buffhd_to_drain) {
1455
1456                /* Throw away the data in a filled buffer */
1457                if (bh->state == BUF_STATE_FULL) {
1458                        bh->state = BUF_STATE_EMPTY;
1459                        common->next_buffhd_to_drain = bh->next;
1460
1461                        /* A short packet or an error ends everything */
1462                        if (bh->outreq->actual != bh->outreq->length ||
1463                                        bh->outreq->status != 0) {
1464                                raise_exception(common,
1465                                                FSG_STATE_ABORT_BULK_OUT);
1466                                return -EINTR;
1467                        }
1468                        continue;
1469                }
1470
1471                /* Try to submit another request if we need one */
1472                bh = common->next_buffhd_to_fill;
1473                if (bh->state == BUF_STATE_EMPTY
1474                 && common->usb_amount_left > 0) {
1475                        amount = min(common->usb_amount_left, FSG_BUFLEN);
1476
1477                        /* amount is always divisible by 512, hence by
1478                         * the bulk-out maxpacket size */
1479                        bh->outreq->length = amount;
1480                        bh->bulk_out_intended_length = amount;
1481                        bh->outreq->short_not_ok = 1;
1482                        START_TRANSFER_OR(common, bulk_out, bh->outreq,
1483                                          &bh->outreq_busy, &bh->state)
1484                                /* Don't know what to do if
1485                                 * common->fsg is NULL */
1486                                return -EIO;
1487                        common->next_buffhd_to_fill = bh->next;
1488                        common->usb_amount_left -= amount;
1489                        continue;
1490                }
1491
1492                /* Otherwise wait for something to happen */
1493                rc = sleep_thread(common);
1494                if (rc)
1495                        return rc;
1496        }
1497        return 0;
1498}
1499
1500
1501static int finish_reply(struct fsg_common *common)
1502{
1503        struct fsg_buffhd       *bh = common->next_buffhd_to_fill;
1504        int                     rc = 0;
1505
1506        switch (common->data_dir) {
1507        case DATA_DIR_NONE:
1508                break;                  /* Nothing to send */
1509
1510        /* If we don't know whether the host wants to read or write,
1511         * this must be CB or CBI with an unknown command.  We mustn't
1512         * try to send or receive any data.  So stall both bulk pipes
1513         * if we can and wait for a reset. */
1514        case DATA_DIR_UNKNOWN:
1515                if (!common->can_stall) {
1516                        /* Nothing */
1517                } else if (fsg_is_set(common)) {
1518                        fsg_set_halt(common->fsg, common->fsg->bulk_out);
1519                        rc = halt_bulk_in_endpoint(common->fsg);
1520                } else {
1521                        /* Don't know what to do if common->fsg is NULL */
1522                        rc = -EIO;
1523                }
1524                break;
1525
1526        /* All but the last buffer of data must have already been sent */
1527        case DATA_DIR_TO_HOST:
1528                if (common->data_size == 0) {
1529                        /* Nothing to send */
1530
1531                /* If there's no residue, simply send the last buffer */
1532                } else if (common->residue == 0) {
1533                        bh->inreq->zero = 0;
1534                        START_TRANSFER_OR(common, bulk_in, bh->inreq,
1535                                          &bh->inreq_busy, &bh->state)
1536                                return -EIO;
1537                        common->next_buffhd_to_fill = bh->next;
1538
1539                /* For Bulk-only, if we're allowed to stall then send the
1540                 * short packet and halt the bulk-in endpoint.  If we can't
1541                 * stall, pad out the remaining data with 0's. */
1542                } else if (common->can_stall) {
1543                        bh->inreq->zero = 1;
1544                        START_TRANSFER_OR(common, bulk_in, bh->inreq,
1545                                          &bh->inreq_busy, &bh->state)
1546                                /* Don't know what to do if
1547                                 * common->fsg is NULL */
1548                                rc = -EIO;
1549                        common->next_buffhd_to_fill = bh->next;
1550                        if (common->fsg)
1551                                rc = halt_bulk_in_endpoint(common->fsg);
1552                } else if (fsg_is_set(common)) {
1553                        rc = pad_with_zeros(common->fsg);
1554                } else {
1555                        /* Don't know what to do if common->fsg is NULL */
1556                        rc = -EIO;
1557                }
1558                break;
1559
1560        /* We have processed all we want from the data the host has sent.
1561         * There may still be outstanding bulk-out requests. */
1562        case DATA_DIR_FROM_HOST:
1563                if (common->residue == 0) {
1564                        /* Nothing to receive */
1565
1566                /* Did the host stop sending unexpectedly early? */
1567                } else if (common->short_packet_received) {
1568                        raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1569                        rc = -EINTR;
1570
1571                /* We haven't processed all the incoming data.  Even though
1572                 * we may be allowed to stall, doing so would cause a race.
1573                 * The controller may already have ACK'ed all the remaining
1574                 * bulk-out packets, in which case the host wouldn't see a
1575                 * STALL.  Not realizing the endpoint was halted, it wouldn't
1576                 * clear the halt -- leading to problems later on. */
1577#if 0
1578                } else if (common->can_stall) {
1579                        if (fsg_is_set(common))
1580                                fsg_set_halt(common->fsg,
1581                                             common->fsg->bulk_out);
1582                        raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1583                        rc = -EINTR;
1584#endif
1585
1586                /* We can't stall.  Read in the excess data and throw it
1587                 * all away. */
1588                } else {
1589                        rc = throw_away_data(common);
1590                }
1591                break;
1592        }
1593        return rc;
1594}
1595
1596
1597static int send_status(struct fsg_common *common)
1598{
1599        struct fsg_lun          *curlun = &common->luns[common->lun];
1600        struct fsg_buffhd       *bh;
1601        struct bulk_cs_wrap     *csw;
1602        int                     rc;
1603        u8                      status = USB_STATUS_PASS;
1604        u32                     sd, sdinfo = 0;
1605
1606        /* Wait for the next buffer to become available */
1607        bh = common->next_buffhd_to_fill;
1608        while (bh->state != BUF_STATE_EMPTY) {
1609                rc = sleep_thread(common);
1610                if (rc)
1611                        return rc;
1612        }
1613
1614        if (curlun)
1615                sd = curlun->sense_data;
1616        else if (common->bad_lun_okay)
1617                sd = SS_NO_SENSE;
1618        else
1619                sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
1620
1621        if (common->phase_error) {
1622                DBG(common, "sending phase-error status\n");
1623                status = USB_STATUS_PHASE_ERROR;
1624                sd = SS_INVALID_COMMAND;
1625        } else if (sd != SS_NO_SENSE) {
1626                DBG(common, "sending command-failure status\n");
1627                status = USB_STATUS_FAIL;
1628                VDBG(common, "  sense data: SK x%02x, ASC x%02x, ASCQ x%02x;"
1629                        "  info x%x\n",
1630                        SK(sd), ASC(sd), ASCQ(sd), sdinfo);
1631        }
1632
1633        /* Store and send the Bulk-only CSW */
1634        csw = (void *)bh->buf;
1635
1636        csw->Signature = cpu_to_le32(USB_BULK_CS_SIG);
1637        csw->Tag = common->tag;
1638        csw->Residue = cpu_to_le32(common->residue);
1639        csw->Status = status;
1640
1641        bh->inreq->length = USB_BULK_CS_WRAP_LEN;
1642        bh->inreq->zero = 0;
1643        START_TRANSFER_OR(common, bulk_in, bh->inreq,
1644                          &bh->inreq_busy, &bh->state)
1645                /* Don't know what to do if common->fsg is NULL */
1646                return -EIO;
1647
1648        common->next_buffhd_to_fill = bh->next;
1649        return 0;
1650}
1651
1652
1653/*-------------------------------------------------------------------------*/
1654
1655/* Check whether the command is properly formed and whether its data size
1656 * and direction agree with the values we already have. */
1657static int check_command(struct fsg_common *common, int cmnd_size,
1658                enum data_direction data_dir, unsigned int mask,
1659                int needs_medium, const char *name)
1660{
1661        int                     i;
1662        int                     lun = common->cmnd[1] >> 5;
1663        static const char       dirletter[4] = {'u', 'o', 'i', 'n'};
1664        char                    hdlen[20];
1665        struct fsg_lun          *curlun;
1666
1667        hdlen[0] = 0;
1668        if (common->data_dir != DATA_DIR_UNKNOWN)
1669                sprintf(hdlen, ", H%c=%u", dirletter[(int) common->data_dir],
1670                                common->data_size);
1671        VDBG(common, "SCSI command: %s;  Dc=%d, D%c=%u;  Hc=%d%s\n",
1672             name, cmnd_size, dirletter[(int) data_dir],
1673             common->data_size_from_cmnd, common->cmnd_size, hdlen);
1674
1675        /* We can't reply at all until we know the correct data direction
1676         * and size. */
1677        if (common->data_size_from_cmnd == 0)
1678                data_dir = DATA_DIR_NONE;
1679        if (common->data_size < common->data_size_from_cmnd) {
1680                /* Host data size < Device data size is a phase error.
1681                 * Carry out the command, but only transfer as much as
1682                 * we are allowed. */
1683                common->data_size_from_cmnd = common->data_size;
1684                common->phase_error = 1;
1685        }
1686        common->residue = common->data_size;
1687        common->usb_amount_left = common->data_size;
1688
1689        /* Conflicting data directions is a phase error */
1690        if (common->data_dir != data_dir
1691         && common->data_size_from_cmnd > 0) {
1692                common->phase_error = 1;
1693                return -EINVAL;
1694        }
1695
1696        /* Verify the length of the command itself */
1697        if (cmnd_size != common->cmnd_size) {
1698
1699                /* Special case workaround: There are plenty of buggy SCSI
1700                 * implementations. Many have issues with cbw->Length
1701                 * field passing a wrong command size. For those cases we
1702                 * always try to work around the problem by using the length
1703                 * sent by the host side provided it is at least as large
1704                 * as the correct command length.
1705                 * Examples of such cases would be MS-Windows, which issues
1706                 * REQUEST SENSE with cbw->Length == 12 where it should
1707                 * be 6, and xbox360 issuing INQUIRY, TEST UNIT READY and
1708                 * REQUEST SENSE with cbw->Length == 10 where it should
1709                 * be 6 as well.
1710                 */
1711                if (cmnd_size <= common->cmnd_size) {
1712                        DBG(common, "%s is buggy! Expected length %d "
1713                            "but we got %d\n", name,
1714                            cmnd_size, common->cmnd_size);
1715                        cmnd_size = common->cmnd_size;
1716                } else {
1717                        common->phase_error = 1;
1718                        return -EINVAL;
1719                }
1720        }
1721
1722        /* Check that the LUN values are consistent */
1723        if (common->lun != lun)
1724                DBG(common, "using LUN %d from CBW, not LUN %d from CDB\n",
1725                    common->lun, lun);
1726
1727        /* Check the LUN */
1728        if (common->lun < common->nluns) {
1729                curlun = &common->luns[common->lun];
1730                if (common->cmnd[0] != SC_REQUEST_SENSE) {
1731                        curlun->sense_data = SS_NO_SENSE;
1732                        curlun->info_valid = 0;
1733                }
1734        } else {
1735                curlun = NULL;
1736                common->bad_lun_okay = 0;
1737
1738                /* INQUIRY and REQUEST SENSE commands are explicitly allowed
1739                 * to use unsupported LUNs; all others may not. */
1740                if (common->cmnd[0] != SC_INQUIRY &&
1741                    common->cmnd[0] != SC_REQUEST_SENSE) {
1742                        DBG(common, "unsupported LUN %d\n", common->lun);
1743                        return -EINVAL;
1744                }
1745        }
1746#if 0
1747        /* If a unit attention condition exists, only INQUIRY and
1748         * REQUEST SENSE commands are allowed; anything else must fail. */
1749        if (curlun && curlun->unit_attention_data != SS_NO_SENSE &&
1750                        common->cmnd[0] != SC_INQUIRY &&
1751                        common->cmnd[0] != SC_REQUEST_SENSE) {
1752                curlun->sense_data = curlun->unit_attention_data;
1753                curlun->unit_attention_data = SS_NO_SENSE;
1754                return -EINVAL;
1755        }
1756#endif
1757        /* Check that only command bytes listed in the mask are non-zero */
1758        common->cmnd[1] &= 0x1f;                        /* Mask away the LUN */
1759        for (i = 1; i < cmnd_size; ++i) {
1760                if (common->cmnd[i] && !(mask & (1 << i))) {
1761                        if (curlun)
1762                                curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1763                        return -EINVAL;
1764                }
1765        }
1766
1767        return 0;
1768}
1769
1770
1771static int do_scsi_command(struct fsg_common *common)
1772{
1773        struct fsg_buffhd       *bh;
1774        int                     rc;
1775        int                     reply = -EINVAL;
1776        int                     i;
1777        static char             unknown[16];
1778        struct fsg_lun          *curlun = &common->luns[common->lun];
1779
1780        dump_cdb(common);
1781
1782        /* Wait for the next buffer to become available for data or status */
1783        bh = common->next_buffhd_to_fill;
1784        common->next_buffhd_to_drain = bh;
1785        while (bh->state != BUF_STATE_EMPTY) {
1786                rc = sleep_thread(common);
1787                if (rc)
1788                        return rc;
1789        }
1790        common->phase_error = 0;
1791        common->short_packet_received = 0;
1792
1793        down_read(&common->filesem);    /* We're using the backing file */
1794        switch (common->cmnd[0]) {
1795
1796        case SC_INQUIRY:
1797                common->data_size_from_cmnd = common->cmnd[4];
1798                reply = check_command(common, 6, DATA_DIR_TO_HOST,
1799                                      (1<<4), 0,
1800                                      "INQUIRY");
1801                if (reply == 0)
1802                        reply = do_inquiry(common, bh);
1803                break;
1804
1805        case SC_MODE_SELECT_6:
1806                common->data_size_from_cmnd = common->cmnd[4];
1807                reply = check_command(common, 6, DATA_DIR_FROM_HOST,
1808                                      (1<<1) | (1<<4), 0,
1809                                      "MODE SELECT(6)");
1810                if (reply == 0)
1811                        reply = do_mode_select(common, bh);
1812                break;
1813
1814        case SC_MODE_SELECT_10:
1815                common->data_size_from_cmnd =
1816                        get_unaligned_be16(&common->cmnd[7]);
1817                reply = check_command(common, 10, DATA_DIR_FROM_HOST,
1818                                      (1<<1) | (3<<7), 0,
1819                                      "MODE SELECT(10)");
1820                if (reply == 0)
1821                        reply = do_mode_select(common, bh);
1822                break;
1823
1824        case SC_MODE_SENSE_6:
1825                common->data_size_from_cmnd = common->cmnd[4];
1826                reply = check_command(common, 6, DATA_DIR_TO_HOST,
1827                                      (1<<1) | (1<<2) | (1<<4), 0,
1828                                      "MODE SENSE(6)");
1829                if (reply == 0)
1830                        reply = do_mode_sense(common, bh);
1831                break;
1832
1833        case SC_MODE_SENSE_10:
1834                common->data_size_from_cmnd =
1835                        get_unaligned_be16(&common->cmnd[7]);
1836                reply = check_command(common, 10, DATA_DIR_TO_HOST,
1837                                      (1<<1) | (1<<2) | (3<<7), 0,
1838                                      "MODE SENSE(10)");
1839                if (reply == 0)
1840                        reply = do_mode_sense(common, bh);
1841                break;
1842
1843        case SC_PREVENT_ALLOW_MEDIUM_REMOVAL:
1844                common->data_size_from_cmnd = 0;
1845                reply = check_command(common, 6, DATA_DIR_NONE,
1846                                      (1<<4), 0,
1847                                      "PREVENT-ALLOW MEDIUM REMOVAL");
1848                if (reply == 0)
1849                        reply = do_prevent_allow(common);
1850                break;
1851
1852        case SC_READ_6:
1853                i = common->cmnd[4];
1854                common->data_size_from_cmnd = (i == 0 ? 256 : i) << 9;
1855                reply = check_command(common, 6, DATA_DIR_TO_HOST,
1856                                      (7<<1) | (1<<4), 1,
1857                                      "READ(6)");
1858                if (reply == 0)
1859                        reply = do_read(common);
1860                break;
1861
1862        case SC_READ_10:
1863                common->data_size_from_cmnd =
1864                                get_unaligned_be16(&common->cmnd[7]) << 9;
1865                reply = check_command(common, 10, DATA_DIR_TO_HOST,
1866                                      (1<<1) | (0xf<<2) | (3<<7), 1,
1867                                      "READ(10)");
1868                if (reply == 0)
1869                        reply = do_read(common);
1870                break;
1871
1872        case SC_READ_12:
1873                common->data_size_from_cmnd =
1874                                get_unaligned_be32(&common->cmnd[6]) << 9;
1875                reply = check_command(common, 12, DATA_DIR_TO_HOST,
1876                                      (1<<1) | (0xf<<2) | (0xf<<6), 1,
1877                                      "READ(12)");
1878                if (reply == 0)
1879                        reply = do_read(common);
1880                break;
1881
1882        case SC_READ_CAPACITY:
1883                common->data_size_from_cmnd = 8;
1884                reply = check_command(common, 10, DATA_DIR_TO_HOST,
1885                                      (0xf<<2) | (1<<8), 1,
1886                                      "READ CAPACITY");
1887                if (reply == 0)
1888                        reply = do_read_capacity(common, bh);
1889                break;
1890
1891        case SC_READ_HEADER:
1892                if (!common->luns[common->lun].cdrom)
1893                        goto unknown_cmnd;
1894                common->data_size_from_cmnd =
1895                        get_unaligned_be16(&common->cmnd[7]);
1896                reply = check_command(common, 10, DATA_DIR_TO_HOST,
1897                                      (3<<7) | (0x1f<<1), 1,
1898                                      "READ HEADER");
1899                if (reply == 0)
1900                        reply = do_read_header(common, bh);
1901                break;
1902
1903        case SC_READ_TOC:
1904                if (!common->luns[common->lun].cdrom)
1905                        goto unknown_cmnd;
1906                common->data_size_from_cmnd =
1907                        get_unaligned_be16(&common->cmnd[7]);
1908                reply = check_command(common, 10, DATA_DIR_TO_HOST,
1909                                      (7<<6) | (1<<1), 1,
1910                                      "READ TOC");
1911                if (reply == 0)
1912                        reply = do_read_toc(common, bh);
1913                break;
1914
1915        case SC_READ_FORMAT_CAPACITIES:
1916                common->data_size_from_cmnd =
1917                        get_unaligned_be16(&common->cmnd[7]);
1918                reply = check_command(common, 10, DATA_DIR_TO_HOST,
1919                                      (3<<7), 1,
1920                                      "READ FORMAT CAPACITIES");
1921                if (reply == 0)
1922                        reply = do_read_format_capacities(common, bh);
1923                break;
1924
1925        case SC_REQUEST_SENSE:
1926                common->data_size_from_cmnd = common->cmnd[4];
1927                reply = check_command(common, 6, DATA_DIR_TO_HOST,
1928                                      (1<<4), 0,
1929                                      "REQUEST SENSE");
1930                if (reply == 0)
1931                        reply = do_request_sense(common, bh);
1932                break;
1933
1934        case SC_START_STOP_UNIT:
1935                common->data_size_from_cmnd = 0;
1936                reply = check_command(common, 6, DATA_DIR_NONE,
1937                                      (1<<1) | (1<<4), 0,
1938                                      "START-STOP UNIT");
1939                if (reply == 0)
1940                        reply = do_start_stop(common);
1941                break;
1942
1943        case SC_SYNCHRONIZE_CACHE:
1944                common->data_size_from_cmnd = 0;
1945                reply = check_command(common, 10, DATA_DIR_NONE,
1946                                      (0xf<<2) | (3<<7), 1,
1947                                      "SYNCHRONIZE CACHE");
1948                if (reply == 0)
1949                        reply = do_synchronize_cache(common);
1950                break;
1951
1952        case SC_TEST_UNIT_READY:
1953                common->data_size_from_cmnd = 0;
1954                reply = check_command(common, 6, DATA_DIR_NONE,
1955                                0, 1,
1956                                "TEST UNIT READY");
1957                break;
1958
1959        /* Although optional, this command is used by MS-Windows.  We
1960         * support a minimal version: BytChk must be 0. */
1961        case SC_VERIFY:
1962                common->data_size_from_cmnd = 0;
1963                reply = check_command(common, 10, DATA_DIR_NONE,
1964                                      (1<<1) | (0xf<<2) | (3<<7), 1,
1965                                      "VERIFY");
1966                if (reply == 0)
1967                        reply = do_verify(common);
1968                break;
1969
1970        case SC_WRITE_6:
1971                i = common->cmnd[4];
1972                common->data_size_from_cmnd = (i == 0 ? 256 : i) << 9;
1973                reply = check_command(common, 6, DATA_DIR_FROM_HOST,
1974                                      (7<<1) | (1<<4), 1,
1975                                      "WRITE(6)");
1976                if (reply == 0)
1977                        reply = do_write(common);
1978                break;
1979
1980        case SC_WRITE_10:
1981                common->data_size_from_cmnd =
1982                                get_unaligned_be16(&common->cmnd[7]) << 9;
1983                reply = check_command(common, 10, DATA_DIR_FROM_HOST,
1984                                      (1<<1) | (0xf<<2) | (3<<7), 1,
1985                                      "WRITE(10)");
1986                if (reply == 0)
1987                        reply = do_write(common);
1988                break;
1989
1990        case SC_WRITE_12:
1991                common->data_size_from_cmnd =
1992                                get_unaligned_be32(&common->cmnd[6]) << 9;
1993                reply = check_command(common, 12, DATA_DIR_FROM_HOST,
1994                                      (1<<1) | (0xf<<2) | (0xf<<6), 1,
1995                                      "WRITE(12)");
1996                if (reply == 0)
1997                        reply = do_write(common);
1998                break;
1999
2000        /* Some mandatory commands that we recognize but don't implement.
2001         * They don't mean much in this setting.  It's left as an exercise
2002         * for anyone interested to implement RESERVE and RELEASE in terms
2003         * of Posix locks. */
2004        case SC_FORMAT_UNIT:
2005        case SC_RELEASE:
2006        case SC_RESERVE:
2007        case SC_SEND_DIAGNOSTIC:
2008                /* Fall through */
2009
2010        default:
2011unknown_cmnd:
2012                common->data_size_from_cmnd = 0;
2013                sprintf(unknown, "Unknown x%02x", common->cmnd[0]);
2014                reply = check_command(common, common->cmnd_size,
2015                                      DATA_DIR_UNKNOWN, 0xff, 0, unknown);
2016                if (reply == 0) {
2017                        curlun->sense_data = SS_INVALID_COMMAND;
2018                        reply = -EINVAL;
2019                }
2020                break;
2021        }
2022        up_read(&common->filesem);
2023
2024        if (reply == -EINTR)
2025                return -EINTR;
2026
2027        /* Set up the single reply buffer for finish_reply() */
2028        if (reply == -EINVAL)
2029                reply = 0;              /* Error reply length */
2030        if (reply >= 0 && common->data_dir == DATA_DIR_TO_HOST) {
2031                reply = min((u32) reply, common->data_size_from_cmnd);
2032                bh->inreq->length = reply;
2033                bh->state = BUF_STATE_FULL;
2034                common->residue -= reply;
2035        }                               /* Otherwise it's already set */
2036
2037        return 0;
2038}
2039
2040/*-------------------------------------------------------------------------*/
2041
2042static int received_cbw(struct fsg_dev *fsg, struct fsg_buffhd *bh)
2043{
2044        struct usb_request      *req = bh->outreq;
2045        struct fsg_bulk_cb_wrap *cbw = req->buf;
2046        struct fsg_common       *common = fsg->common;
2047
2048        /* Was this a real packet?  Should it be ignored? */
2049        if (req->status || test_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags))
2050                return -EINVAL;
2051
2052        /* Is the CBW valid? */
2053        if (req->actual != USB_BULK_CB_WRAP_LEN ||
2054                        cbw->Signature != cpu_to_le32(
2055                                USB_BULK_CB_SIG)) {
2056                DBG(fsg, "invalid CBW: len %u sig 0x%x\n",
2057                                req->actual,
2058                                le32_to_cpu(cbw->Signature));
2059
2060                /* The Bulk-only spec says we MUST stall the IN endpoint
2061                 * (6.6.1), so it's unavoidable.  It also says we must
2062                 * retain this state until the next reset, but there's
2063                 * no way to tell the controller driver it should ignore
2064                 * Clear-Feature(HALT) requests.
2065                 *
2066                 * We aren't required to halt the OUT endpoint; instead
2067                 * we can simply accept and discard any data received
2068                 * until the next reset. */
2069                wedge_bulk_in_endpoint(fsg);
2070                generic_set_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
2071                return -EINVAL;
2072        }
2073
2074        /* Is the CBW meaningful? */
2075        if (cbw->Lun >= FSG_MAX_LUNS || cbw->Flags & ~USB_BULK_IN_FLAG ||
2076                        cbw->Length <= 0 || cbw->Length > MAX_COMMAND_SIZE) {
2077                DBG(fsg, "non-meaningful CBW: lun = %u, flags = 0x%x, "
2078                                "cmdlen %u\n",
2079                                cbw->Lun, cbw->Flags, cbw->Length);
2080
2081                /* We can do anything we want here, so let's stall the
2082                 * bulk pipes if we are allowed to. */
2083                if (common->can_stall) {
2084                        fsg_set_halt(fsg, fsg->bulk_out);
2085                        halt_bulk_in_endpoint(fsg);
2086                }
2087                return -EINVAL;
2088        }
2089
2090        /* Save the command for later */
2091        common->cmnd_size = cbw->Length;
2092        memcpy(common->cmnd, cbw->CDB, common->cmnd_size);
2093        if (cbw->Flags & USB_BULK_IN_FLAG)
2094                common->data_dir = DATA_DIR_TO_HOST;
2095        else
2096                common->data_dir = DATA_DIR_FROM_HOST;
2097        common->data_size = le32_to_cpu(cbw->DataTransferLength);
2098        if (common->data_size == 0)
2099                common->data_dir = DATA_DIR_NONE;
2100        common->lun = cbw->Lun;
2101        common->tag = cbw->Tag;
2102        return 0;
2103}
2104
2105
2106static int get_next_command(struct fsg_common *common)
2107{
2108        struct fsg_buffhd       *bh;
2109        int                     rc = 0;
2110
2111        /* Wait for the next buffer to become available */
2112        bh = common->next_buffhd_to_fill;
2113        while (bh->state != BUF_STATE_EMPTY) {
2114                rc = sleep_thread(common);
2115                if (rc)
2116                        return rc;
2117        }
2118
2119        /* Queue a request to read a Bulk-only CBW */
2120        set_bulk_out_req_length(common, bh, USB_BULK_CB_WRAP_LEN);
2121        bh->outreq->short_not_ok = 1;
2122        START_TRANSFER_OR(common, bulk_out, bh->outreq,
2123                          &bh->outreq_busy, &bh->state)
2124                /* Don't know what to do if common->fsg is NULL */
2125                return -EIO;
2126
2127        /* We will drain the buffer in software, which means we
2128         * can reuse it for the next filling.  No need to advance
2129         * next_buffhd_to_fill. */
2130
2131        /* Wait for the CBW to arrive */
2132        while (bh->state != BUF_STATE_FULL) {
2133                rc = sleep_thread(common);
2134                if (rc)
2135                        return rc;
2136        }
2137
2138        rc = fsg_is_set(common) ? received_cbw(common->fsg, bh) : -EIO;
2139        bh->state = BUF_STATE_EMPTY;
2140
2141        return rc;
2142}
2143
2144
2145/*-------------------------------------------------------------------------*/
2146
2147static int enable_endpoint(struct fsg_common *common, struct usb_ep *ep,
2148                const struct usb_endpoint_descriptor *d)
2149{
2150        int     rc;
2151
2152        ep->driver_data = common;
2153        rc = usb_ep_enable(ep, d);
2154        if (rc)
2155                ERROR(common, "can't enable %s, result %d\n", ep->name, rc);
2156        return rc;
2157}
2158
2159static int alloc_request(struct fsg_common *common, struct usb_ep *ep,
2160                struct usb_request **preq)
2161{
2162        *preq = usb_ep_alloc_request(ep, GFP_ATOMIC);
2163        if (*preq)
2164                return 0;
2165        ERROR(common, "can't allocate request for %s\n", ep->name);
2166        return -ENOMEM;
2167}
2168
2169/* Reset interface setting and re-init endpoint state (toggle etc). */
2170static int do_set_interface(struct fsg_common *common, struct fsg_dev *new_fsg)
2171{
2172        const struct usb_endpoint_descriptor *d;
2173        struct fsg_dev *fsg;
2174        int i, rc = 0;
2175
2176        if (common->running)
2177                DBG(common, "reset interface\n");
2178
2179reset:
2180        /* Deallocate the requests */
2181        if (common->fsg) {
2182                fsg = common->fsg;
2183
2184                for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2185                        struct fsg_buffhd *bh = &common->buffhds[i];
2186
2187                        if (bh->inreq) {
2188                                usb_ep_free_request(fsg->bulk_in, bh->inreq);
2189                                bh->inreq = NULL;
2190                        }
2191                        if (bh->outreq) {
2192                                usb_ep_free_request(fsg->bulk_out, bh->outreq);
2193                                bh->outreq = NULL;
2194                        }
2195                }
2196
2197                /* Disable the endpoints */
2198                if (fsg->bulk_in_enabled) {
2199                        usb_ep_disable(fsg->bulk_in);
2200                        fsg->bulk_in_enabled = 0;
2201                }
2202                if (fsg->bulk_out_enabled) {
2203                        usb_ep_disable(fsg->bulk_out);
2204                        fsg->bulk_out_enabled = 0;
2205                }
2206
2207                common->fsg = NULL;
2208                /* wake_up(&common->fsg_wait); */
2209        }
2210
2211        common->running = 0;
2212        if (!new_fsg || rc)
2213                return rc;
2214
2215        common->fsg = new_fsg;
2216        fsg = common->fsg;
2217
2218        /* Enable the endpoints */
2219        d = fsg_ep_desc(common->gadget,
2220                        &fsg_fs_bulk_in_desc, &fsg_hs_bulk_in_desc);
2221        rc = enable_endpoint(common, fsg->bulk_in, d);
2222        if (rc)
2223                goto reset;
2224        fsg->bulk_in_enabled = 1;
2225
2226        d = fsg_ep_desc(common->gadget,
2227                        &fsg_fs_bulk_out_desc, &fsg_hs_bulk_out_desc);
2228        rc = enable_endpoint(common, fsg->bulk_out, d);
2229        if (rc)
2230                goto reset;
2231        fsg->bulk_out_enabled = 1;
2232        common->bulk_out_maxpacket =
2233                                le16_to_cpu(get_unaligned(&d->wMaxPacketSize));
2234        generic_clear_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
2235
2236        /* Allocate the requests */
2237        for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2238                struct fsg_buffhd       *bh = &common->buffhds[i];
2239
2240                rc = alloc_request(common, fsg->bulk_in, &bh->inreq);
2241                if (rc)
2242                        goto reset;
2243                rc = alloc_request(common, fsg->bulk_out, &bh->outreq);
2244                if (rc)
2245                        goto reset;
2246                bh->inreq->buf = bh->outreq->buf = bh->buf;
2247                bh->inreq->context = bh->outreq->context = bh;
2248                bh->inreq->complete = bulk_in_complete;
2249                bh->outreq->complete = bulk_out_complete;
2250        }
2251
2252        common->running = 1;
2253
2254        return rc;
2255}
2256
2257
2258/****************************** ALT CONFIGS ******************************/
2259
2260
2261static int fsg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
2262{
2263        struct fsg_dev *fsg = fsg_from_func(f);
2264        fsg->common->new_fsg = fsg;
2265        raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2266        return 0;
2267}
2268
2269static void fsg_disable(struct usb_function *f)
2270{
2271        struct fsg_dev *fsg = fsg_from_func(f);
2272        fsg->common->new_fsg = NULL;
2273        raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2274}
2275
2276/*-------------------------------------------------------------------------*/
2277
2278static void handle_exception(struct fsg_common *common)
2279{
2280        int                     i;
2281        struct fsg_buffhd       *bh;
2282        enum fsg_state          old_state;
2283        struct fsg_lun          *curlun;
2284        unsigned int            exception_req_tag;
2285
2286        /* Cancel all the pending transfers */
2287        if (common->fsg) {
2288                for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2289                        bh = &common->buffhds[i];
2290                        if (bh->inreq_busy)
2291                                usb_ep_dequeue(common->fsg->bulk_in, bh->inreq);
2292                        if (bh->outreq_busy)
2293                                usb_ep_dequeue(common->fsg->bulk_out,
2294                                               bh->outreq);
2295                }
2296
2297                /* Wait until everything is idle */
2298                for (;;) {
2299                        int num_active = 0;
2300                        for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2301                                bh = &common->buffhds[i];
2302                                num_active += bh->inreq_busy + bh->outreq_busy;
2303                        }
2304                        if (num_active == 0)
2305                                break;
2306                        if (sleep_thread(common))
2307                                return;
2308                }
2309
2310                /* Clear out the controller's fifos */
2311                if (common->fsg->bulk_in_enabled)
2312                        usb_ep_fifo_flush(common->fsg->bulk_in);
2313                if (common->fsg->bulk_out_enabled)
2314                        usb_ep_fifo_flush(common->fsg->bulk_out);
2315        }
2316
2317        /* Reset the I/O buffer states and pointers, the SCSI
2318         * state, and the exception.  Then invoke the handler. */
2319
2320        for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
2321                bh = &common->buffhds[i];
2322                bh->state = BUF_STATE_EMPTY;
2323        }
2324        common->next_buffhd_to_fill = &common->buffhds[0];
2325        common->next_buffhd_to_drain = &common->buffhds[0];
2326        exception_req_tag = common->exception_req_tag;
2327        old_state = common->state;
2328
2329        if (old_state == FSG_STATE_ABORT_BULK_OUT)
2330                common->state = FSG_STATE_STATUS_PHASE;
2331        else {
2332                for (i = 0; i < common->nluns; ++i) {
2333                        curlun = &common->luns[i];
2334                        curlun->sense_data = SS_NO_SENSE;
2335                        curlun->info_valid = 0;
2336                }
2337                common->state = FSG_STATE_IDLE;
2338        }
2339
2340        /* Carry out any extra actions required for the exception */
2341        switch (old_state) {
2342        case FSG_STATE_ABORT_BULK_OUT:
2343                send_status(common);
2344
2345                if (common->state == FSG_STATE_STATUS_PHASE)
2346                        common->state = FSG_STATE_IDLE;
2347                break;
2348
2349        case FSG_STATE_RESET:
2350                /* In case we were forced against our will to halt a
2351                 * bulk endpoint, clear the halt now.  (The SuperH UDC
2352                 * requires this.) */
2353                if (!fsg_is_set(common))
2354                        break;
2355                if (test_and_clear_bit(IGNORE_BULK_OUT,
2356                                       &common->fsg->atomic_bitflags))
2357                        usb_ep_clear_halt(common->fsg->bulk_in);
2358
2359                if (common->ep0_req_tag == exception_req_tag)
2360                        ep0_queue(common);      /* Complete the status stage */
2361
2362                break;
2363
2364        case FSG_STATE_CONFIG_CHANGE:
2365                do_set_interface(common, common->new_fsg);
2366                break;
2367
2368        case FSG_STATE_EXIT:
2369        case FSG_STATE_TERMINATED:
2370                do_set_interface(common, NULL);         /* Free resources */
2371                common->state = FSG_STATE_TERMINATED;   /* Stop the thread */
2372                break;
2373
2374        case FSG_STATE_INTERFACE_CHANGE:
2375        case FSG_STATE_DISCONNECT:
2376        case FSG_STATE_COMMAND_PHASE:
2377        case FSG_STATE_DATA_PHASE:
2378        case FSG_STATE_STATUS_PHASE:
2379        case FSG_STATE_IDLE:
2380                break;
2381        }
2382}
2383
2384/*-------------------------------------------------------------------------*/
2385
2386int fsg_main_thread(void *common_)
2387{
2388        int ret;
2389        struct fsg_common       *common = the_fsg_common;
2390        /* The main loop */
2391        do {
2392                if (exception_in_progress(common)) {
2393                        handle_exception(common);
2394                        continue;
2395                }
2396
2397                if (!common->running) {
2398                        ret = sleep_thread(common);
2399                        if (ret)
2400                                return ret;
2401
2402                        continue;
2403                }
2404
2405                ret = get_next_command(common);
2406                if (ret)
2407                        return ret;
2408
2409                if (!exception_in_progress(common))
2410                        common->state = FSG_STATE_DATA_PHASE;
2411
2412                if (do_scsi_command(common) || finish_reply(common))
2413                        continue;
2414
2415                if (!exception_in_progress(common))
2416                        common->state = FSG_STATE_STATUS_PHASE;
2417
2418                if (send_status(common))
2419                        continue;
2420
2421                if (!exception_in_progress(common))
2422                        common->state = FSG_STATE_IDLE;
2423        } while (0);
2424
2425        common->thread_task = NULL;
2426
2427        return 0;
2428}
2429
2430static void fsg_common_release(struct kref *ref);
2431
2432static struct fsg_common *fsg_common_init(struct fsg_common *common,
2433                                          struct usb_composite_dev *cdev)
2434{
2435        struct usb_gadget *gadget = cdev->gadget;
2436        struct fsg_buffhd *bh;
2437        struct fsg_lun *curlun;
2438        int nluns, i, rc;
2439
2440        /* Find out how many LUNs there should be */
2441        nluns = ums_count;
2442        if (nluns < 1 || nluns > FSG_MAX_LUNS) {
2443                printf("invalid number of LUNs: %u\n", nluns);
2444                return ERR_PTR(-EINVAL);
2445        }
2446
2447        /* Allocate? */
2448        if (!common) {
2449                common = calloc(sizeof(*common), 1);
2450                if (!common)
2451                        return ERR_PTR(-ENOMEM);
2452                common->free_storage_on_release = 1;
2453        } else {
2454                memset(common, 0, sizeof(*common));
2455                common->free_storage_on_release = 0;
2456        }
2457
2458        common->ops = NULL;
2459        common->private_data = NULL;
2460
2461        common->gadget = gadget;
2462        common->ep0 = gadget->ep0;
2463        common->ep0req = cdev->req;
2464
2465        /* Maybe allocate device-global string IDs, and patch descriptors */
2466        if (fsg_strings[FSG_STRING_INTERFACE].id == 0) {
2467                rc = usb_string_id(cdev);
2468                if (unlikely(rc < 0))
2469                        goto error_release;
2470                fsg_strings[FSG_STRING_INTERFACE].id = rc;
2471                fsg_intf_desc.iInterface = rc;
2472        }
2473
2474        /* Create the LUNs, open their backing files, and register the
2475         * LUN devices in sysfs. */
2476        curlun = calloc(nluns, sizeof *curlun);
2477        if (!curlun) {
2478                rc = -ENOMEM;
2479                goto error_release;
2480        }
2481        common->nluns = nluns;
2482
2483        for (i = 0; i < nluns; i++) {
2484                common->luns[i].removable = 1;
2485
2486                rc = fsg_lun_open(&common->luns[i], ums[i].num_sectors, "");
2487                if (rc)
2488                        goto error_luns;
2489        }
2490        common->lun = 0;
2491
2492        /* Data buffers cyclic list */
2493        bh = common->buffhds;
2494
2495        i = FSG_NUM_BUFFERS;
2496        goto buffhds_first_it;
2497        do {
2498                bh->next = bh + 1;
2499                ++bh;
2500buffhds_first_it:
2501                bh->inreq_busy = 0;
2502                bh->outreq_busy = 0;
2503                bh->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, FSG_BUFLEN);
2504                if (unlikely(!bh->buf)) {
2505                        rc = -ENOMEM;
2506                        goto error_release;
2507                }
2508        } while (--i);
2509        bh->next = common->buffhds;
2510
2511        snprintf(common->inquiry_string, sizeof common->inquiry_string,
2512                 "%-8s%-16s%04x",
2513                 "Linux   ",
2514                 "File-Store Gadget",
2515                 0xffff);
2516
2517        /* Some peripheral controllers are known not to be able to
2518         * halt bulk endpoints correctly.  If one of them is present,
2519         * disable stalls.
2520         */
2521
2522        /* Tell the thread to start working */
2523        common->thread_task =
2524                kthread_create(fsg_main_thread, common,
2525                               OR(cfg->thread_name, "file-storage"));
2526        if (IS_ERR(common->thread_task)) {
2527                rc = PTR_ERR(common->thread_task);
2528                goto error_release;
2529        }
2530
2531#undef OR
2532        /* Information */
2533        INFO(common, FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
2534        INFO(common, "Number of LUNs=%d\n", common->nluns);
2535
2536        return common;
2537
2538error_luns:
2539        common->nluns = i + 1;
2540error_release:
2541        common->state = FSG_STATE_TERMINATED;   /* The thread is dead */
2542        /* Call fsg_common_release() directly, ref might be not
2543         * initialised */
2544        fsg_common_release(&common->ref);
2545        return ERR_PTR(rc);
2546}
2547
2548static void fsg_common_release(struct kref *ref)
2549{
2550        struct fsg_common *common = container_of(ref, struct fsg_common, ref);
2551
2552        /* If the thread isn't already dead, tell it to exit now */
2553        if (common->state != FSG_STATE_TERMINATED) {
2554                raise_exception(common, FSG_STATE_EXIT);
2555                wait_for_completion(&common->thread_notifier);
2556        }
2557
2558        if (likely(common->luns)) {
2559                struct fsg_lun *lun = common->luns;
2560                unsigned i = common->nluns;
2561
2562                /* In error recovery common->nluns may be zero. */
2563                for (; i; --i, ++lun)
2564                        fsg_lun_close(lun);
2565
2566                kfree(common->luns);
2567        }
2568
2569        {
2570                struct fsg_buffhd *bh = common->buffhds;
2571                unsigned i = FSG_NUM_BUFFERS;
2572                do {
2573                        kfree(bh->buf);
2574                } while (++bh, --i);
2575        }
2576
2577        if (common->free_storage_on_release)
2578                kfree(common);
2579}
2580
2581
2582/*-------------------------------------------------------------------------*/
2583
2584/**
2585 * usb_copy_descriptors - copy a vector of USB descriptors
2586 * @src: null-terminated vector to copy
2587 * Context: initialization code, which may sleep
2588 *
2589 * This makes a copy of a vector of USB descriptors.  Its primary use
2590 * is to support usb_function objects which can have multiple copies,
2591 * each needing different descriptors.  Functions may have static
2592 * tables of descriptors, which are used as templates and customized
2593 * with identifiers (for interfaces, strings, endpoints, and more)
2594 * as needed by a given function instance.
2595 */
2596struct usb_descriptor_header **
2597usb_copy_descriptors(struct usb_descriptor_header **src)
2598{
2599        struct usb_descriptor_header **tmp;
2600        unsigned bytes;
2601        unsigned n_desc;
2602        void *mem;
2603        struct usb_descriptor_header **ret;
2604
2605        /* count descriptors and their sizes; then add vector size */
2606        for (bytes = 0, n_desc = 0, tmp = src; *tmp; tmp++, n_desc++)
2607                bytes += (*tmp)->bLength;
2608        bytes += (n_desc + 1) * sizeof(*tmp);
2609
2610        mem = memalign(CONFIG_SYS_CACHELINE_SIZE, bytes);
2611        if (!mem)
2612                return NULL;
2613
2614        /* fill in pointers starting at "tmp",
2615         * to descriptors copied starting at "mem";
2616         * and return "ret"
2617         */
2618        tmp = mem;
2619        ret = mem;
2620        mem += (n_desc + 1) * sizeof(*tmp);
2621        while (*src) {
2622                memcpy(mem, *src, (*src)->bLength);
2623                *tmp = mem;
2624                tmp++;
2625                mem += (*src)->bLength;
2626                src++;
2627        }
2628        *tmp = NULL;
2629
2630        return ret;
2631}
2632
2633static void fsg_unbind(struct usb_configuration *c, struct usb_function *f)
2634{
2635        struct fsg_dev          *fsg = fsg_from_func(f);
2636
2637        DBG(fsg, "unbind\n");
2638        if (fsg->common->fsg == fsg) {
2639                fsg->common->new_fsg = NULL;
2640                raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2641        }
2642
2643        free(fsg->function.descriptors);
2644        free(fsg->function.hs_descriptors);
2645        kfree(fsg);
2646}
2647
2648static int fsg_bind(struct usb_configuration *c, struct usb_function *f)
2649{
2650        struct fsg_dev          *fsg = fsg_from_func(f);
2651        struct usb_gadget       *gadget = c->cdev->gadget;
2652        int                     i;
2653        struct usb_ep           *ep;
2654        fsg->gadget = gadget;
2655
2656        /* New interface */
2657        i = usb_interface_id(c, f);
2658        if (i < 0)
2659                return i;
2660        fsg_intf_desc.bInterfaceNumber = i;
2661        fsg->interface_number = i;
2662
2663        /* Find all the endpoints we will use */
2664        ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_in_desc);
2665        if (!ep)
2666                goto autoconf_fail;
2667        ep->driver_data = fsg->common;  /* claim the endpoint */
2668        fsg->bulk_in = ep;
2669
2670        ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_out_desc);
2671        if (!ep)
2672                goto autoconf_fail;
2673        ep->driver_data = fsg->common;  /* claim the endpoint */
2674        fsg->bulk_out = ep;
2675
2676        /* Copy descriptors */
2677        f->descriptors = usb_copy_descriptors(fsg_fs_function);
2678        if (unlikely(!f->descriptors))
2679                return -ENOMEM;
2680
2681        if (gadget_is_dualspeed(gadget)) {
2682                /* Assume endpoint addresses are the same for both speeds */
2683                fsg_hs_bulk_in_desc.bEndpointAddress =
2684                        fsg_fs_bulk_in_desc.bEndpointAddress;
2685                fsg_hs_bulk_out_desc.bEndpointAddress =
2686                        fsg_fs_bulk_out_desc.bEndpointAddress;
2687                f->hs_descriptors = usb_copy_descriptors(fsg_hs_function);
2688                if (unlikely(!f->hs_descriptors)) {
2689                        free(f->descriptors);
2690                        return -ENOMEM;
2691                }
2692        }
2693        return 0;
2694
2695autoconf_fail:
2696        ERROR(fsg, "unable to autoconfigure all endpoints\n");
2697        return -ENOTSUPP;
2698}
2699
2700
2701/****************************** ADD FUNCTION ******************************/
2702
2703static struct usb_gadget_strings *fsg_strings_array[] = {
2704        &fsg_stringtab,
2705        NULL,
2706};
2707
2708static int fsg_bind_config(struct usb_composite_dev *cdev,
2709                           struct usb_configuration *c,
2710                           struct fsg_common *common)
2711{
2712        struct fsg_dev *fsg;
2713        int rc;
2714
2715        fsg = calloc(1, sizeof *fsg);
2716        if (!fsg)
2717                return -ENOMEM;
2718        fsg->function.name        = FSG_DRIVER_DESC;
2719        fsg->function.strings     = fsg_strings_array;
2720        fsg->function.bind        = fsg_bind;
2721        fsg->function.unbind      = fsg_unbind;
2722        fsg->function.setup       = fsg_setup;
2723        fsg->function.set_alt     = fsg_set_alt;
2724        fsg->function.disable     = fsg_disable;
2725
2726        fsg->common               = common;
2727        common->fsg               = fsg;
2728        /* Our caller holds a reference to common structure so we
2729         * don't have to be worry about it being freed until we return
2730         * from this function.  So instead of incrementing counter now
2731         * and decrement in error recovery we increment it only when
2732         * call to usb_add_function() was successful. */
2733
2734        rc = usb_add_function(c, &fsg->function);
2735
2736        if (rc)
2737                kfree(fsg);
2738
2739        return rc;
2740}
2741
2742int fsg_add(struct usb_configuration *c)
2743{
2744        struct fsg_common *fsg_common;
2745
2746        fsg_common = fsg_common_init(NULL, c->cdev);
2747
2748        fsg_common->vendor_name = 0;
2749        fsg_common->product_name = 0;
2750        fsg_common->release = 0xffff;
2751
2752        fsg_common->ops = NULL;
2753        fsg_common->private_data = NULL;
2754
2755        the_fsg_common = fsg_common;
2756
2757        return fsg_bind_config(c->cdev, c, fsg_common);
2758}
2759
2760int fsg_init(struct ums *ums_devs, int count)
2761{
2762        ums = ums_devs;
2763        ums_count = count;
2764
2765        return 0;
2766}
2767
2768DECLARE_GADGET_BIND_CALLBACK(usb_dnl_ums, fsg_add);
2769