linux/drivers/usb/gadget/storage_common.c
<<
>>
Prefs
   1/*
   2 * storage_common.c -- Common definitions for mass storage functionality
   3 *
   4 * Copyright (C) 2003-2008 Alan Stern
   5 * Copyeight (C) 2009 Samsung Electronics
   6 * Author: Michal Nazarewicz (m.nazarewicz@samsung.com)
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation; either version 2 of the License, or
  11 * (at your option) any later version.
  12 */
  13
  14
  15/*
  16 * This file requires the following identifiers used in USB strings to
  17 * be defined (each of type pointer to char):
  18 *  - fsg_string_manufacturer -- name of the manufacturer
  19 *  - fsg_string_product      -- name of the product
  20 *  - fsg_string_config       -- name of the configuration
  21 *  - fsg_string_interface    -- name of the interface
  22 * The first four are only needed when FSG_DESCRIPTORS_DEVICE_STRINGS
  23 * macro is defined prior to including this file.
  24 */
  25
  26/*
  27 * When FSG_NO_INTR_EP is defined fsg_fs_intr_in_desc and
  28 * fsg_hs_intr_in_desc objects as well as
  29 * FSG_FS_FUNCTION_PRE_EP_ENTRIES and FSG_HS_FUNCTION_PRE_EP_ENTRIES
  30 * macros are not defined.
  31 *
  32 * When FSG_NO_DEVICE_STRINGS is defined FSG_STRING_MANUFACTURER,
  33 * FSG_STRING_PRODUCT, FSG_STRING_SERIAL and FSG_STRING_CONFIG are not
  34 * defined (as well as corresponding entries in string tables are
  35 * missing) and FSG_STRING_INTERFACE has value of zero.
  36 *
  37 * When FSG_NO_OTG is defined fsg_otg_desc won't be defined.
  38 */
  39
  40/*
  41 * When FSG_BUFFHD_STATIC_BUFFER is defined when this file is included
  42 * the fsg_buffhd structure's buf field will be an array of FSG_BUFLEN
  43 * characters rather then a pointer to void.
  44 */
  45
  46/*
  47 * When USB_GADGET_DEBUG_FILES is defined the module param num_buffers
  48 * sets the number of pipeline buffers (length of the fsg_buffhd array).
  49 * The valid range of num_buffers is: num >= 2 && num <= 4.
  50 */
  51
  52
  53#include <linux/usb/storage.h>
  54#include <scsi/scsi.h>
  55#include <asm/unaligned.h>
  56
  57
  58/*
  59 * Thanks to NetChip Technologies for donating this product ID.
  60 *
  61 * DO NOT REUSE THESE IDs with any other driver!!  Ever!!
  62 * Instead:  allocate your own, using normal USB-IF procedures.
  63 */
  64#define FSG_VENDOR_ID   0x0525  /* NetChip */
  65#define FSG_PRODUCT_ID  0xa4a5  /* Linux-USB File-backed Storage Gadget */
  66
  67
  68/*-------------------------------------------------------------------------*/
  69
  70
  71#ifndef DEBUG
  72#undef VERBOSE_DEBUG
  73#undef DUMP_MSGS
  74#endif /* !DEBUG */
  75
  76#ifdef VERBOSE_DEBUG
  77#define VLDBG   LDBG
  78#else
  79#define VLDBG(lun, fmt, args...) do { } while (0)
  80#endif /* VERBOSE_DEBUG */
  81
  82#define LDBG(lun, fmt, args...)   dev_dbg (&(lun)->dev, fmt, ## args)
  83#define LERROR(lun, fmt, args...) dev_err (&(lun)->dev, fmt, ## args)
  84#define LWARN(lun, fmt, args...)  dev_warn(&(lun)->dev, fmt, ## args)
  85#define LINFO(lun, fmt, args...)  dev_info(&(lun)->dev, fmt, ## args)
  86
  87/*
  88 * Keep those macros in sync with those in
  89 * include/linux/usb/composite.h or else GCC will complain.  If they
  90 * are identical (the same names of arguments, white spaces in the
  91 * same places) GCC will allow redefinition otherwise (even if some
  92 * white space is removed or added) warning will be issued.
  93 *
  94 * Those macros are needed here because File Storage Gadget does not
  95 * include the composite.h header.  For composite gadgets those macros
  96 * are redundant since composite.h is included any way.
  97 *
  98 * One could check whether those macros are already defined (which
  99 * would indicate composite.h had been included) or not (which would
 100 * indicate we were in FSG) but this is not done because a warning is
 101 * desired if definitions here differ from the ones in composite.h.
 102 *
 103 * We want the definitions to match and be the same in File Storage
 104 * Gadget as well as Mass Storage Function (and so composite gadgets
 105 * using MSF).  If someone changes them in composite.h it will produce
 106 * a warning in this file when building MSF.
 107 */
 108#define DBG(d, fmt, args...)     dev_dbg(&(d)->gadget->dev , fmt , ## args)
 109#define VDBG(d, fmt, args...)    dev_vdbg(&(d)->gadget->dev , fmt , ## args)
 110#define ERROR(d, fmt, args...)   dev_err(&(d)->gadget->dev , fmt , ## args)
 111#define WARNING(d, fmt, args...) dev_warn(&(d)->gadget->dev , fmt , ## args)
 112#define INFO(d, fmt, args...)    dev_info(&(d)->gadget->dev , fmt , ## args)
 113
 114
 115
 116#ifdef DUMP_MSGS
 117
 118#  define dump_msg(fsg, /* const char * */ label,                       \
 119                   /* const u8 * */ buf, /* unsigned */ length) do {    \
 120        if (length < 512) {                                             \
 121                DBG(fsg, "%s, length %u:\n", label, length);            \
 122                print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET,      \
 123                               16, 1, buf, length, 0);                  \
 124        }                                                               \
 125} while (0)
 126
 127#  define dump_cdb(fsg) do { } while (0)
 128
 129#else
 130
 131#  define dump_msg(fsg, /* const char * */ label, \
 132                   /* const u8 * */ buf, /* unsigned */ length) do { } while (0)
 133
 134#  ifdef VERBOSE_DEBUG
 135
 136#    define dump_cdb(fsg)                                               \
 137        print_hex_dump(KERN_DEBUG, "SCSI CDB: ", DUMP_PREFIX_NONE,      \
 138                       16, 1, (fsg)->cmnd, (fsg)->cmnd_size, 0)         \
 139
 140#  else
 141
 142#    define dump_cdb(fsg) do { } while (0)
 143
 144#  endif /* VERBOSE_DEBUG */
 145
 146#endif /* DUMP_MSGS */
 147
 148
 149
 150
 151
 152/*-------------------------------------------------------------------------*/
 153
 154/* Bulk-only data structures */
 155
 156/* Command Block Wrapper */
 157struct fsg_bulk_cb_wrap {
 158        __le32  Signature;              /* Contains 'USBC' */
 159        u32     Tag;                    /* Unique per command id */
 160        __le32  DataTransferLength;     /* Size of the data */
 161        u8      Flags;                  /* Direction in bit 7 */
 162        u8      Lun;                    /* LUN (normally 0) */
 163        u8      Length;                 /* Of the CDB, <= MAX_COMMAND_SIZE */
 164        u8      CDB[16];                /* Command Data Block */
 165};
 166
 167#define USB_BULK_CB_WRAP_LEN    31
 168#define USB_BULK_CB_SIG         0x43425355      /* Spells out USBC */
 169#define USB_BULK_IN_FLAG        0x80
 170
 171/* Command Status Wrapper */
 172struct bulk_cs_wrap {
 173        __le32  Signature;              /* Should = 'USBS' */
 174        u32     Tag;                    /* Same as original command */
 175        __le32  Residue;                /* Amount not transferred */
 176        u8      Status;                 /* See below */
 177};
 178
 179#define USB_BULK_CS_WRAP_LEN    13
 180#define USB_BULK_CS_SIG         0x53425355      /* Spells out 'USBS' */
 181#define USB_STATUS_PASS         0
 182#define USB_STATUS_FAIL         1
 183#define USB_STATUS_PHASE_ERROR  2
 184
 185/* Bulk-only class specific requests */
 186#define USB_BULK_RESET_REQUEST          0xff
 187#define USB_BULK_GET_MAX_LUN_REQUEST    0xfe
 188
 189
 190/* CBI Interrupt data structure */
 191struct interrupt_data {
 192        u8      bType;
 193        u8      bValue;
 194};
 195
 196#define CBI_INTERRUPT_DATA_LEN          2
 197
 198/* CBI Accept Device-Specific Command request */
 199#define USB_CBI_ADSC_REQUEST            0x00
 200
 201
 202/* Length of a SCSI Command Data Block */
 203#define MAX_COMMAND_SIZE        16
 204
 205/* SCSI Sense Key/Additional Sense Code/ASC Qualifier values */
 206#define SS_NO_SENSE                             0
 207#define SS_COMMUNICATION_FAILURE                0x040800
 208#define SS_INVALID_COMMAND                      0x052000
 209#define SS_INVALID_FIELD_IN_CDB                 0x052400
 210#define SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE   0x052100
 211#define SS_LOGICAL_UNIT_NOT_SUPPORTED           0x052500
 212#define SS_MEDIUM_NOT_PRESENT                   0x023a00
 213#define SS_MEDIUM_REMOVAL_PREVENTED             0x055302
 214#define SS_NOT_READY_TO_READY_TRANSITION        0x062800
 215#define SS_RESET_OCCURRED                       0x062900
 216#define SS_SAVING_PARAMETERS_NOT_SUPPORTED      0x053900
 217#define SS_UNRECOVERED_READ_ERROR               0x031100
 218#define SS_WRITE_ERROR                          0x030c02
 219#define SS_WRITE_PROTECTED                      0x072700
 220
 221#define SK(x)           ((u8) ((x) >> 16))      /* Sense Key byte, etc. */
 222#define ASC(x)          ((u8) ((x) >> 8))
 223#define ASCQ(x)         ((u8) (x))
 224
 225
 226/*-------------------------------------------------------------------------*/
 227
 228
 229struct fsg_lun {
 230        struct file     *filp;
 231        loff_t          file_length;
 232        loff_t          num_sectors;
 233
 234        unsigned int    initially_ro:1;
 235        unsigned int    ro:1;
 236        unsigned int    removable:1;
 237        unsigned int    cdrom:1;
 238        unsigned int    prevent_medium_removal:1;
 239        unsigned int    registered:1;
 240        unsigned int    info_valid:1;
 241        unsigned int    nofua:1;
 242
 243        u32             sense_data;
 244        u32             sense_data_info;
 245        u32             unit_attention_data;
 246
 247        unsigned int    blkbits;        /* Bits of logical block size of bound block device */
 248        unsigned int    blksize;        /* logical block size of bound block device */
 249        struct device   dev;
 250};
 251
 252#define fsg_lun_is_open(curlun) ((curlun)->filp != NULL)
 253
 254static struct fsg_lun *fsg_lun_from_dev(struct device *dev)
 255{
 256        return container_of(dev, struct fsg_lun, dev);
 257}
 258
 259
 260/* Big enough to hold our biggest descriptor */
 261#define EP0_BUFSIZE     256
 262#define DELAYED_STATUS  (EP0_BUFSIZE + 999)     /* An impossibly large value */
 263
 264#ifdef CONFIG_USB_GADGET_DEBUG_FILES
 265
 266static unsigned int fsg_num_buffers = CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS;
 267module_param_named(num_buffers, fsg_num_buffers, uint, S_IRUGO);
 268MODULE_PARM_DESC(num_buffers, "Number of pipeline buffers");
 269
 270#else
 271
 272/*
 273 * Number of buffers we will use.
 274 * 2 is usually enough for good buffering pipeline
 275 */
 276#define fsg_num_buffers CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS
 277
 278#endif /* CONFIG_USB_DEBUG */
 279
 280/* check if fsg_num_buffers is within a valid range */
 281static inline int fsg_num_buffers_validate(void)
 282{
 283        if (fsg_num_buffers >= 2 && fsg_num_buffers <= 4)
 284                return 0;
 285        pr_err("fsg_num_buffers %u is out of range (%d to %d)\n",
 286               fsg_num_buffers, 2 ,4);
 287        return -EINVAL;
 288}
 289
 290/* Default size of buffer length. */
 291#define FSG_BUFLEN      ((u32)16384)
 292
 293/* Maximal number of LUNs supported in mass storage function */
 294#define FSG_MAX_LUNS    8
 295
 296enum fsg_buffer_state {
 297        BUF_STATE_EMPTY = 0,
 298        BUF_STATE_FULL,
 299        BUF_STATE_BUSY
 300};
 301
 302struct fsg_buffhd {
 303#ifdef FSG_BUFFHD_STATIC_BUFFER
 304        char                            buf[FSG_BUFLEN];
 305#else
 306        void                            *buf;
 307#endif
 308        enum fsg_buffer_state           state;
 309        struct fsg_buffhd               *next;
 310
 311        /*
 312         * The NetChip 2280 is faster, and handles some protocol faults
 313         * better, if we don't submit any short bulk-out read requests.
 314         * So we will record the intended request length here.
 315         */
 316        unsigned int                    bulk_out_intended_length;
 317
 318        struct usb_request              *inreq;
 319        int                             inreq_busy;
 320        struct usb_request              *outreq;
 321        int                             outreq_busy;
 322};
 323
 324enum fsg_state {
 325        /* This one isn't used anywhere */
 326        FSG_STATE_COMMAND_PHASE = -10,
 327        FSG_STATE_DATA_PHASE,
 328        FSG_STATE_STATUS_PHASE,
 329
 330        FSG_STATE_IDLE = 0,
 331        FSG_STATE_ABORT_BULK_OUT,
 332        FSG_STATE_RESET,
 333        FSG_STATE_INTERFACE_CHANGE,
 334        FSG_STATE_CONFIG_CHANGE,
 335        FSG_STATE_DISCONNECT,
 336        FSG_STATE_EXIT,
 337        FSG_STATE_TERMINATED
 338};
 339
 340enum data_direction {
 341        DATA_DIR_UNKNOWN = 0,
 342        DATA_DIR_FROM_HOST,
 343        DATA_DIR_TO_HOST,
 344        DATA_DIR_NONE
 345};
 346
 347
 348/*-------------------------------------------------------------------------*/
 349
 350
 351static inline u32 get_unaligned_be24(u8 *buf)
 352{
 353        return 0xffffff & (u32) get_unaligned_be32(buf - 1);
 354}
 355
 356
 357/*-------------------------------------------------------------------------*/
 358
 359
 360enum {
 361#ifndef FSG_NO_DEVICE_STRINGS
 362        FSG_STRING_MANUFACTURER = 1,
 363        FSG_STRING_PRODUCT,
 364        FSG_STRING_SERIAL,
 365        FSG_STRING_CONFIG,
 366#endif
 367        FSG_STRING_INTERFACE
 368};
 369
 370
 371#ifndef FSG_NO_OTG
 372static struct usb_otg_descriptor
 373fsg_otg_desc = {
 374        .bLength =              sizeof fsg_otg_desc,
 375        .bDescriptorType =      USB_DT_OTG,
 376
 377        .bmAttributes =         USB_OTG_SRP,
 378};
 379#endif
 380
 381/* There is only one interface. */
 382
 383static struct usb_interface_descriptor
 384fsg_intf_desc = {
 385        .bLength =              sizeof fsg_intf_desc,
 386        .bDescriptorType =      USB_DT_INTERFACE,
 387
 388        .bNumEndpoints =        2,              /* Adjusted during fsg_bind() */
 389        .bInterfaceClass =      USB_CLASS_MASS_STORAGE,
 390        .bInterfaceSubClass =   USB_SC_SCSI,    /* Adjusted during fsg_bind() */
 391        .bInterfaceProtocol =   USB_PR_BULK,    /* Adjusted during fsg_bind() */
 392        .iInterface =           FSG_STRING_INTERFACE,
 393};
 394
 395/*
 396 * Three full-speed endpoint descriptors: bulk-in, bulk-out, and
 397 * interrupt-in.
 398 */
 399
 400static struct usb_endpoint_descriptor
 401fsg_fs_bulk_in_desc = {
 402        .bLength =              USB_DT_ENDPOINT_SIZE,
 403        .bDescriptorType =      USB_DT_ENDPOINT,
 404
 405        .bEndpointAddress =     USB_DIR_IN,
 406        .bmAttributes =         USB_ENDPOINT_XFER_BULK,
 407        /* wMaxPacketSize set by autoconfiguration */
 408};
 409
 410static struct usb_endpoint_descriptor
 411fsg_fs_bulk_out_desc = {
 412        .bLength =              USB_DT_ENDPOINT_SIZE,
 413        .bDescriptorType =      USB_DT_ENDPOINT,
 414
 415        .bEndpointAddress =     USB_DIR_OUT,
 416        .bmAttributes =         USB_ENDPOINT_XFER_BULK,
 417        /* wMaxPacketSize set by autoconfiguration */
 418};
 419
 420#ifndef FSG_NO_INTR_EP
 421
 422static struct usb_endpoint_descriptor
 423fsg_fs_intr_in_desc = {
 424        .bLength =              USB_DT_ENDPOINT_SIZE,
 425        .bDescriptorType =      USB_DT_ENDPOINT,
 426
 427        .bEndpointAddress =     USB_DIR_IN,
 428        .bmAttributes =         USB_ENDPOINT_XFER_INT,
 429        .wMaxPacketSize =       cpu_to_le16(2),
 430        .bInterval =            32,     /* frames -> 32 ms */
 431};
 432
 433#ifndef FSG_NO_OTG
 434#  define FSG_FS_FUNCTION_PRE_EP_ENTRIES        2
 435#else
 436#  define FSG_FS_FUNCTION_PRE_EP_ENTRIES        1
 437#endif
 438
 439#endif
 440
 441static struct usb_descriptor_header *fsg_fs_function[] = {
 442#ifndef FSG_NO_OTG
 443        (struct usb_descriptor_header *) &fsg_otg_desc,
 444#endif
 445        (struct usb_descriptor_header *) &fsg_intf_desc,
 446        (struct usb_descriptor_header *) &fsg_fs_bulk_in_desc,
 447        (struct usb_descriptor_header *) &fsg_fs_bulk_out_desc,
 448#ifndef FSG_NO_INTR_EP
 449        (struct usb_descriptor_header *) &fsg_fs_intr_in_desc,
 450#endif
 451        NULL,
 452};
 453
 454
 455/*
 456 * USB 2.0 devices need to expose both high speed and full speed
 457 * descriptors, unless they only run at full speed.
 458 *
 459 * That means alternate endpoint descriptors (bigger packets)
 460 * and a "device qualifier" ... plus more construction options
 461 * for the configuration descriptor.
 462 */
 463static struct usb_endpoint_descriptor
 464fsg_hs_bulk_in_desc = {
 465        .bLength =              USB_DT_ENDPOINT_SIZE,
 466        .bDescriptorType =      USB_DT_ENDPOINT,
 467
 468        /* bEndpointAddress copied from fs_bulk_in_desc during fsg_bind() */
 469        .bmAttributes =         USB_ENDPOINT_XFER_BULK,
 470        .wMaxPacketSize =       cpu_to_le16(512),
 471};
 472
 473static struct usb_endpoint_descriptor
 474fsg_hs_bulk_out_desc = {
 475        .bLength =              USB_DT_ENDPOINT_SIZE,
 476        .bDescriptorType =      USB_DT_ENDPOINT,
 477
 478        /* bEndpointAddress copied from fs_bulk_out_desc during fsg_bind() */
 479        .bmAttributes =         USB_ENDPOINT_XFER_BULK,
 480        .wMaxPacketSize =       cpu_to_le16(512),
 481        .bInterval =            1,      /* NAK every 1 uframe */
 482};
 483
 484#ifndef FSG_NO_INTR_EP
 485
 486static struct usb_endpoint_descriptor
 487fsg_hs_intr_in_desc = {
 488        .bLength =              USB_DT_ENDPOINT_SIZE,
 489        .bDescriptorType =      USB_DT_ENDPOINT,
 490
 491        /* bEndpointAddress copied from fs_intr_in_desc during fsg_bind() */
 492        .bmAttributes =         USB_ENDPOINT_XFER_INT,
 493        .wMaxPacketSize =       cpu_to_le16(2),
 494        .bInterval =            9,      /* 2**(9-1) = 256 uframes -> 32 ms */
 495};
 496
 497#ifndef FSG_NO_OTG
 498#  define FSG_HS_FUNCTION_PRE_EP_ENTRIES        2
 499#else
 500#  define FSG_HS_FUNCTION_PRE_EP_ENTRIES        1
 501#endif
 502
 503#endif
 504
 505static struct usb_descriptor_header *fsg_hs_function[] = {
 506#ifndef FSG_NO_OTG
 507        (struct usb_descriptor_header *) &fsg_otg_desc,
 508#endif
 509        (struct usb_descriptor_header *) &fsg_intf_desc,
 510        (struct usb_descriptor_header *) &fsg_hs_bulk_in_desc,
 511        (struct usb_descriptor_header *) &fsg_hs_bulk_out_desc,
 512#ifndef FSG_NO_INTR_EP
 513        (struct usb_descriptor_header *) &fsg_hs_intr_in_desc,
 514#endif
 515        NULL,
 516};
 517
 518static struct usb_endpoint_descriptor
 519fsg_ss_bulk_in_desc = {
 520        .bLength =              USB_DT_ENDPOINT_SIZE,
 521        .bDescriptorType =      USB_DT_ENDPOINT,
 522
 523        /* bEndpointAddress copied from fs_bulk_in_desc during fsg_bind() */
 524        .bmAttributes =         USB_ENDPOINT_XFER_BULK,
 525        .wMaxPacketSize =       cpu_to_le16(1024),
 526};
 527
 528static struct usb_ss_ep_comp_descriptor fsg_ss_bulk_in_comp_desc = {
 529        .bLength =              sizeof(fsg_ss_bulk_in_comp_desc),
 530        .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
 531
 532        /*.bMaxBurst =          DYNAMIC, */
 533};
 534
 535static struct usb_endpoint_descriptor
 536fsg_ss_bulk_out_desc = {
 537        .bLength =              USB_DT_ENDPOINT_SIZE,
 538        .bDescriptorType =      USB_DT_ENDPOINT,
 539
 540        /* bEndpointAddress copied from fs_bulk_out_desc during fsg_bind() */
 541        .bmAttributes =         USB_ENDPOINT_XFER_BULK,
 542        .wMaxPacketSize =       cpu_to_le16(1024),
 543};
 544
 545static struct usb_ss_ep_comp_descriptor fsg_ss_bulk_out_comp_desc = {
 546        .bLength =              sizeof(fsg_ss_bulk_in_comp_desc),
 547        .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
 548
 549        /*.bMaxBurst =          DYNAMIC, */
 550};
 551
 552#ifndef FSG_NO_INTR_EP
 553
 554static struct usb_endpoint_descriptor
 555fsg_ss_intr_in_desc = {
 556        .bLength =              USB_DT_ENDPOINT_SIZE,
 557        .bDescriptorType =      USB_DT_ENDPOINT,
 558
 559        /* bEndpointAddress copied from fs_intr_in_desc during fsg_bind() */
 560        .bmAttributes =         USB_ENDPOINT_XFER_INT,
 561        .wMaxPacketSize =       cpu_to_le16(2),
 562        .bInterval =            9,      /* 2**(9-1) = 256 uframes -> 32 ms */
 563};
 564
 565static struct usb_ss_ep_comp_descriptor fsg_ss_intr_in_comp_desc = {
 566        .bLength =              sizeof(fsg_ss_bulk_in_comp_desc),
 567        .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
 568
 569        .wBytesPerInterval =    cpu_to_le16(2),
 570};
 571
 572#ifndef FSG_NO_OTG
 573#  define FSG_SS_FUNCTION_PRE_EP_ENTRIES        2
 574#else
 575#  define FSG_SS_FUNCTION_PRE_EP_ENTRIES        1
 576#endif
 577
 578#endif
 579
 580static __maybe_unused struct usb_ext_cap_descriptor fsg_ext_cap_desc = {
 581        .bLength =              USB_DT_USB_EXT_CAP_SIZE,
 582        .bDescriptorType =      USB_DT_DEVICE_CAPABILITY,
 583        .bDevCapabilityType =   USB_CAP_TYPE_EXT,
 584
 585        .bmAttributes =         cpu_to_le32(USB_LPM_SUPPORT),
 586};
 587
 588static __maybe_unused struct usb_ss_cap_descriptor fsg_ss_cap_desc = {
 589        .bLength =              USB_DT_USB_SS_CAP_SIZE,
 590        .bDescriptorType =      USB_DT_DEVICE_CAPABILITY,
 591        .bDevCapabilityType =   USB_SS_CAP_TYPE,
 592
 593        /* .bmAttributes = LTM is not supported yet */
 594
 595        .wSpeedSupported =      cpu_to_le16(USB_LOW_SPEED_OPERATION
 596                | USB_FULL_SPEED_OPERATION
 597                | USB_HIGH_SPEED_OPERATION
 598                | USB_5GBPS_OPERATION),
 599        .bFunctionalitySupport = USB_LOW_SPEED_OPERATION,
 600        .bU1devExitLat =        USB_DEFAULT_U1_DEV_EXIT_LAT,
 601        .bU2DevExitLat =        cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT),
 602};
 603
 604static __maybe_unused struct usb_bos_descriptor fsg_bos_desc = {
 605        .bLength =              USB_DT_BOS_SIZE,
 606        .bDescriptorType =      USB_DT_BOS,
 607
 608        .wTotalLength =         cpu_to_le16(USB_DT_BOS_SIZE
 609                                + USB_DT_USB_EXT_CAP_SIZE
 610                                + USB_DT_USB_SS_CAP_SIZE),
 611
 612        .bNumDeviceCaps =       2,
 613};
 614
 615static struct usb_descriptor_header *fsg_ss_function[] = {
 616#ifndef FSG_NO_OTG
 617        (struct usb_descriptor_header *) &fsg_otg_desc,
 618#endif
 619        (struct usb_descriptor_header *) &fsg_intf_desc,
 620        (struct usb_descriptor_header *) &fsg_ss_bulk_in_desc,
 621        (struct usb_descriptor_header *) &fsg_ss_bulk_in_comp_desc,
 622        (struct usb_descriptor_header *) &fsg_ss_bulk_out_desc,
 623        (struct usb_descriptor_header *) &fsg_ss_bulk_out_comp_desc,
 624#ifndef FSG_NO_INTR_EP
 625        (struct usb_descriptor_header *) &fsg_ss_intr_in_desc,
 626        (struct usb_descriptor_header *) &fsg_ss_intr_in_comp_desc,
 627#endif
 628        NULL,
 629};
 630
 631/* Maxpacket and other transfer characteristics vary by speed. */
 632static __maybe_unused struct usb_endpoint_descriptor *
 633fsg_ep_desc(struct usb_gadget *g, struct usb_endpoint_descriptor *fs,
 634                struct usb_endpoint_descriptor *hs,
 635                struct usb_endpoint_descriptor *ss)
 636{
 637        if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
 638                return ss;
 639        else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
 640                return hs;
 641        return fs;
 642}
 643
 644
 645/* Static strings, in UTF-8 (for simplicity we use only ASCII characters) */
 646static struct usb_string                fsg_strings[] = {
 647#ifndef FSG_NO_DEVICE_STRINGS
 648        {FSG_STRING_MANUFACTURER,       fsg_string_manufacturer},
 649        {FSG_STRING_PRODUCT,            fsg_string_product},
 650        {FSG_STRING_SERIAL,             ""},
 651        {FSG_STRING_CONFIG,             fsg_string_config},
 652#endif
 653        {FSG_STRING_INTERFACE,          fsg_string_interface},
 654        {}
 655};
 656
 657static struct usb_gadget_strings        fsg_stringtab = {
 658        .language       = 0x0409,               /* en-us */
 659        .strings        = fsg_strings,
 660};
 661
 662
 663 /*-------------------------------------------------------------------------*/
 664
 665/*
 666 * If the next two routines are called while the gadget is registered,
 667 * the caller must own fsg->filesem for writing.
 668 */
 669
 670static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
 671{
 672        int                             ro;
 673        struct file                     *filp = NULL;
 674        int                             rc = -EINVAL;
 675        struct inode                    *inode = NULL;
 676        loff_t                          size;
 677        loff_t                          num_sectors;
 678        loff_t                          min_sectors;
 679
 680        /* R/W if we can, R/O if we must */
 681        ro = curlun->initially_ro;
 682        if (!ro) {
 683                filp = filp_open(filename, O_RDWR | O_LARGEFILE, 0);
 684                if (PTR_ERR(filp) == -EROFS || PTR_ERR(filp) == -EACCES)
 685                        ro = 1;
 686        }
 687        if (ro)
 688                filp = filp_open(filename, O_RDONLY | O_LARGEFILE, 0);
 689        if (IS_ERR(filp)) {
 690                LINFO(curlun, "unable to open backing file: %s\n", filename);
 691                return PTR_ERR(filp);
 692        }
 693
 694        if (!(filp->f_mode & FMODE_WRITE))
 695                ro = 1;
 696
 697        if (filp->f_path.dentry)
 698                inode = filp->f_path.dentry->d_inode;
 699        if (!inode || (!S_ISREG(inode->i_mode) && !S_ISBLK(inode->i_mode))) {
 700                LINFO(curlun, "invalid file type: %s\n", filename);
 701                goto out;
 702        }
 703
 704        /*
 705         * If we can't read the file, it's no good.
 706         * If we can't write the file, use it read-only.
 707         */
 708        if (!filp->f_op || !(filp->f_op->read || filp->f_op->aio_read)) {
 709                LINFO(curlun, "file not readable: %s\n", filename);
 710                goto out;
 711        }
 712        if (!(filp->f_op->write || filp->f_op->aio_write))
 713                ro = 1;
 714
 715        size = i_size_read(inode->i_mapping->host);
 716        if (size < 0) {
 717                LINFO(curlun, "unable to find file size: %s\n", filename);
 718                rc = (int) size;
 719                goto out;
 720        }
 721
 722        if (curlun->cdrom) {
 723                curlun->blksize = 2048;
 724                curlun->blkbits = 11;
 725        } else if (inode->i_bdev) {
 726                curlun->blksize = bdev_logical_block_size(inode->i_bdev);
 727                curlun->blkbits = blksize_bits(curlun->blksize);
 728        } else {
 729                curlun->blksize = 512;
 730                curlun->blkbits = 9;
 731        }
 732
 733        num_sectors = size >> curlun->blkbits; /* File size in logic-block-size blocks */
 734        min_sectors = 1;
 735        if (curlun->cdrom) {
 736                min_sectors = 300;      /* Smallest track is 300 frames */
 737                if (num_sectors >= 256*60*75) {
 738                        num_sectors = 256*60*75 - 1;
 739                        LINFO(curlun, "file too big: %s\n", filename);
 740                        LINFO(curlun, "using only first %d blocks\n",
 741                                        (int) num_sectors);
 742                }
 743        }
 744        if (num_sectors < min_sectors) {
 745                LINFO(curlun, "file too small: %s\n", filename);
 746                rc = -ETOOSMALL;
 747                goto out;
 748        }
 749
 750        get_file(filp);
 751        curlun->ro = ro;
 752        curlun->filp = filp;
 753        curlun->file_length = size;
 754        curlun->num_sectors = num_sectors;
 755        LDBG(curlun, "open backing file: %s\n", filename);
 756        rc = 0;
 757
 758out:
 759        filp_close(filp, current->files);
 760        return rc;
 761}
 762
 763
 764static void fsg_lun_close(struct fsg_lun *curlun)
 765{
 766        if (curlun->filp) {
 767                LDBG(curlun, "close backing file\n");
 768                fput(curlun->filp);
 769                curlun->filp = NULL;
 770        }
 771}
 772
 773
 774/*-------------------------------------------------------------------------*/
 775
 776/*
 777 * Sync the file data, don't bother with the metadata.
 778 * This code was copied from fs/buffer.c:sys_fdatasync().
 779 */
 780static int fsg_lun_fsync_sub(struct fsg_lun *curlun)
 781{
 782        struct file     *filp = curlun->filp;
 783
 784        if (curlun->ro || !filp)
 785                return 0;
 786        return vfs_fsync(filp, 1);
 787}
 788
 789static void store_cdrom_address(u8 *dest, int msf, u32 addr)
 790{
 791        if (msf) {
 792                /* Convert to Minutes-Seconds-Frames */
 793                addr >>= 2;             /* Convert to 2048-byte frames */
 794                addr += 2*75;           /* Lead-in occupies 2 seconds */
 795                dest[3] = addr % 75;    /* Frames */
 796                addr /= 75;
 797                dest[2] = addr % 60;    /* Seconds */
 798                addr /= 60;
 799                dest[1] = addr;         /* Minutes */
 800                dest[0] = 0;            /* Reserved */
 801        } else {
 802                /* Absolute sector */
 803                put_unaligned_be32(addr, dest);
 804        }
 805}
 806
 807
 808/*-------------------------------------------------------------------------*/
 809
 810
 811static ssize_t fsg_show_ro(struct device *dev, struct device_attribute *attr,
 812                           char *buf)
 813{
 814        struct fsg_lun  *curlun = fsg_lun_from_dev(dev);
 815
 816        return sprintf(buf, "%d\n", fsg_lun_is_open(curlun)
 817                                  ? curlun->ro
 818                                  : curlun->initially_ro);
 819}
 820
 821static ssize_t fsg_show_nofua(struct device *dev, struct device_attribute *attr,
 822                              char *buf)
 823{
 824        struct fsg_lun  *curlun = fsg_lun_from_dev(dev);
 825
 826        return sprintf(buf, "%u\n", curlun->nofua);
 827}
 828
 829static ssize_t fsg_show_file(struct device *dev, struct device_attribute *attr,
 830                             char *buf)
 831{
 832        struct fsg_lun  *curlun = fsg_lun_from_dev(dev);
 833        struct rw_semaphore     *filesem = dev_get_drvdata(dev);
 834        char            *p;
 835        ssize_t         rc;
 836
 837        down_read(filesem);
 838        if (fsg_lun_is_open(curlun)) {  /* Get the complete pathname */
 839                p = d_path(&curlun->filp->f_path, buf, PAGE_SIZE - 1);
 840                if (IS_ERR(p))
 841                        rc = PTR_ERR(p);
 842                else {
 843                        rc = strlen(p);
 844                        memmove(buf, p, rc);
 845                        buf[rc] = '\n';         /* Add a newline */
 846                        buf[++rc] = 0;
 847                }
 848        } else {                                /* No file, return 0 bytes */
 849                *buf = 0;
 850                rc = 0;
 851        }
 852        up_read(filesem);
 853        return rc;
 854}
 855
 856
 857static ssize_t fsg_store_ro(struct device *dev, struct device_attribute *attr,
 858                            const char *buf, size_t count)
 859{
 860        ssize_t         rc;
 861        struct fsg_lun  *curlun = fsg_lun_from_dev(dev);
 862        struct rw_semaphore     *filesem = dev_get_drvdata(dev);
 863        unsigned        ro;
 864
 865        rc = kstrtouint(buf, 2, &ro);
 866        if (rc)
 867                return rc;
 868
 869        /*
 870         * Allow the write-enable status to change only while the
 871         * backing file is closed.
 872         */
 873        down_read(filesem);
 874        if (fsg_lun_is_open(curlun)) {
 875                LDBG(curlun, "read-only status change prevented\n");
 876                rc = -EBUSY;
 877        } else {
 878                curlun->ro = ro;
 879                curlun->initially_ro = ro;
 880                LDBG(curlun, "read-only status set to %d\n", curlun->ro);
 881                rc = count;
 882        }
 883        up_read(filesem);
 884        return rc;
 885}
 886
 887static ssize_t fsg_store_nofua(struct device *dev,
 888                               struct device_attribute *attr,
 889                               const char *buf, size_t count)
 890{
 891        struct fsg_lun  *curlun = fsg_lun_from_dev(dev);
 892        unsigned        nofua;
 893        int             ret;
 894
 895        ret = kstrtouint(buf, 2, &nofua);
 896        if (ret)
 897                return ret;
 898
 899        /* Sync data when switching from async mode to sync */
 900        if (!nofua && curlun->nofua)
 901                fsg_lun_fsync_sub(curlun);
 902
 903        curlun->nofua = nofua;
 904
 905        return count;
 906}
 907
 908static ssize_t fsg_store_file(struct device *dev, struct device_attribute *attr,
 909                              const char *buf, size_t count)
 910{
 911        struct fsg_lun  *curlun = fsg_lun_from_dev(dev);
 912        struct rw_semaphore     *filesem = dev_get_drvdata(dev);
 913        int             rc = 0;
 914
 915        if (curlun->prevent_medium_removal && fsg_lun_is_open(curlun)) {
 916                LDBG(curlun, "eject attempt prevented\n");
 917                return -EBUSY;                          /* "Door is locked" */
 918        }
 919
 920        /* Remove a trailing newline */
 921        if (count > 0 && buf[count-1] == '\n')
 922                ((char *) buf)[count-1] = 0;            /* Ugh! */
 923
 924        /* Eject current medium */
 925        down_write(filesem);
 926        if (fsg_lun_is_open(curlun)) {
 927                fsg_lun_close(curlun);
 928                curlun->unit_attention_data = SS_MEDIUM_NOT_PRESENT;
 929        }
 930
 931        /* Load new medium */
 932        if (count > 0 && buf[0]) {
 933                rc = fsg_lun_open(curlun, buf);
 934                if (rc == 0)
 935                        curlun->unit_attention_data =
 936                                        SS_NOT_READY_TO_READY_TRANSITION;
 937        }
 938        up_write(filesem);
 939        return (rc < 0 ? rc : count);
 940}
 941