]> bbs.cooldavid.org Git - net-next-2.6.git/blob - drivers/usb/gadget/storage_common.c
USB: g_file_storage: "fsg_" prefix added to some identifiers
[net-next-2.6.git] / drivers / usb / gadget / storage_common.c
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  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  */
22
23
24 /*
25  * This file requires the following identifiers used in USB strings to
26  * be defined (each of type pointer to char):
27  *  - fsg_string_manufacturer -- name of the manufacturer
28  *  - fsg_string_product      -- name of the product
29  *  - fsg_string_serial       -- product's serial
30  *  - fsg_string_config       -- name of the configuration
31  *  - fsg_string_interface    -- name of the interface
32  * The first four are only needed when FSG_DESCRIPTORS_DEVICE_STRINGS
33  * macro is defined prior to including this file.
34  */
35
36
37 #include <asm/unaligned.h>
38
39
40 /*-------------------------------------------------------------------------*/
41
42
43 #ifndef DEBUG
44 #undef VERBOSE_DEBUG
45 #undef DUMP_MSGS
46 #endif /* !DEBUG */
47
48 #ifdef VERBOSE_DEBUG
49 #define VLDBG   LDBG
50 #else
51 #define VLDBG(lun, fmt, args...) do { } while (0)
52 #endif /* VERBOSE_DEBUG */
53
54 #define LDBG(lun, fmt, args...)   dev_dbg (&(lun)->dev, fmt, ## args)
55 #define LERROR(lun, fmt, args...) dev_err (&(lun)->dev, fmt, ## args)
56 #define LWARN(lun, fmt, args...)  dev_warn(&(lun)->dev, fmt, ## args)
57 #define LINFO(lun, fmt, args...)  dev_info(&(lun)->dev, fmt, ## args)
58
59 #define DBG(d, fmt, args...)      dev_dbg (&(d)->gadget->dev, fmt, ## args)
60 #define VDBG(d, fmt, args...)     dev_vdbg(&(d)->gadget->dev, fmt, ## args)
61 #define ERROR(d, fmt, args...)    dev_err (&(d)->gadget->dev, fmt, ## args)
62 #define WARNING(d, fmt, args...)  dev_warn(&(d)->gadget->dev, fmt, ## args)
63 #define INFO(d, fmt, args...)     dev_info(&(d)->gadget->dev, fmt, ## args)
64
65
66
67 #ifdef DUMP_MSGS
68
69 #  define dump_msg(fsg, /* const char * */ label,                       \
70                  /* const u8 * */ buf, /* unsigned */ length) do {      \
71         if (length < 512) {                                             \
72                 DBG(fsg, "%s, length %u:\n", label, length);            \
73                 print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET,      \
74                                16, 1, buf, length, 0);                  \
75         }                                                               \
76 } while (0)
77
78 #  define dump_cdb(fsg) do { } while (0)
79
80 #else
81
82 #  define dump_msg(fsg, /* const char * */ label, \
83                  /* const u8 * */ buf, /* unsigned */ length) do { } while (0)
84
85 #  ifdef VERBOSE_DEBUG
86
87 #define dump_cdb(fsg)                                                   \
88         print_hex_dump(KERN_DEBUG, "SCSI CDB: ", DUMP_PREFIX_NONE,      \
89                        16, 1, (fsg)->cmnd, (fsg)->cmnd_size, 0)         \
90
91 #  else
92
93 #    define dump_cdb(fsg) do { } while (0)
94
95 #  endif /* VERBOSE_DEBUG */
96
97 #endif /* DUMP_MSGS */
98
99
100
101
102
103 /*-------------------------------------------------------------------------*/
104
105 /* SCSI device types */
106 #define TYPE_DISK       0x00
107 #define TYPE_CDROM      0x05
108
109 /* USB protocol value = the transport method */
110 #define USB_PR_CBI      0x00            // Control/Bulk/Interrupt
111 #define USB_PR_CB       0x01            // Control/Bulk w/o interrupt
112 #define USB_PR_BULK     0x50            // Bulk-only
113
114 /* USB subclass value = the protocol encapsulation */
115 #define USB_SC_RBC      0x01            // Reduced Block Commands (flash)
116 #define USB_SC_8020     0x02            // SFF-8020i, MMC-2, ATAPI (CD-ROM)
117 #define USB_SC_QIC      0x03            // QIC-157 (tape)
118 #define USB_SC_UFI      0x04            // UFI (floppy)
119 #define USB_SC_8070     0x05            // SFF-8070i (removable)
120 #define USB_SC_SCSI     0x06            // Transparent SCSI
121
122 /* Bulk-only data structures */
123
124 /* Command Block Wrapper */
125 struct fsg_bulk_cb_wrap {
126         __le32  Signature;              // Contains 'USBC'
127         u32     Tag;                    // Unique per command id
128         __le32  DataTransferLength;     // Size of the data
129         u8      Flags;                  // Direction in bit 7
130         u8      Lun;                    // LUN (normally 0)
131         u8      Length;                 // Of the CDB, <= MAX_COMMAND_SIZE
132         u8      CDB[16];                // Command Data Block
133 };
134
135 #define USB_BULK_CB_WRAP_LEN    31
136 #define USB_BULK_CB_SIG         0x43425355      // Spells out USBC
137 #define USB_BULK_IN_FLAG        0x80
138
139 /* Command Status Wrapper */
140 struct bulk_cs_wrap {
141         __le32  Signature;              // Should = 'USBS'
142         u32     Tag;                    // Same as original command
143         __le32  Residue;                // Amount not transferred
144         u8      Status;                 // See below
145 };
146
147 #define USB_BULK_CS_WRAP_LEN    13
148 #define USB_BULK_CS_SIG         0x53425355      // Spells out 'USBS'
149 #define USB_STATUS_PASS         0
150 #define USB_STATUS_FAIL         1
151 #define USB_STATUS_PHASE_ERROR  2
152
153 /* Bulk-only class specific requests */
154 #define USB_BULK_RESET_REQUEST          0xff
155 #define USB_BULK_GET_MAX_LUN_REQUEST    0xfe
156
157
158 /* CBI Interrupt data structure */
159 struct interrupt_data {
160         u8      bType;
161         u8      bValue;
162 };
163
164 #define CBI_INTERRUPT_DATA_LEN          2
165
166 /* CBI Accept Device-Specific Command request */
167 #define USB_CBI_ADSC_REQUEST            0x00
168
169
170 #define MAX_COMMAND_SIZE        16      // Length of a SCSI Command Data Block
171
172 /* SCSI commands that we recognize */
173 #define SC_FORMAT_UNIT                  0x04
174 #define SC_INQUIRY                      0x12
175 #define SC_MODE_SELECT_6                0x15
176 #define SC_MODE_SELECT_10               0x55
177 #define SC_MODE_SENSE_6                 0x1a
178 #define SC_MODE_SENSE_10                0x5a
179 #define SC_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
180 #define SC_READ_6                       0x08
181 #define SC_READ_10                      0x28
182 #define SC_READ_12                      0xa8
183 #define SC_READ_CAPACITY                0x25
184 #define SC_READ_FORMAT_CAPACITIES       0x23
185 #define SC_READ_HEADER                  0x44
186 #define SC_READ_TOC                     0x43
187 #define SC_RELEASE                      0x17
188 #define SC_REQUEST_SENSE                0x03
189 #define SC_RESERVE                      0x16
190 #define SC_SEND_DIAGNOSTIC              0x1d
191 #define SC_START_STOP_UNIT              0x1b
192 #define SC_SYNCHRONIZE_CACHE            0x35
193 #define SC_TEST_UNIT_READY              0x00
194 #define SC_VERIFY                       0x2f
195 #define SC_WRITE_6                      0x0a
196 #define SC_WRITE_10                     0x2a
197 #define SC_WRITE_12                     0xaa
198
199 /* SCSI Sense Key/Additional Sense Code/ASC Qualifier values */
200 #define SS_NO_SENSE                             0
201 #define SS_COMMUNICATION_FAILURE                0x040800
202 #define SS_INVALID_COMMAND                      0x052000
203 #define SS_INVALID_FIELD_IN_CDB                 0x052400
204 #define SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE   0x052100
205 #define SS_LOGICAL_UNIT_NOT_SUPPORTED           0x052500
206 #define SS_MEDIUM_NOT_PRESENT                   0x023a00
207 #define SS_MEDIUM_REMOVAL_PREVENTED             0x055302
208 #define SS_NOT_READY_TO_READY_TRANSITION        0x062800
209 #define SS_RESET_OCCURRED                       0x062900
210 #define SS_SAVING_PARAMETERS_NOT_SUPPORTED      0x053900
211 #define SS_UNRECOVERED_READ_ERROR               0x031100
212 #define SS_WRITE_ERROR                          0x030c02
213 #define SS_WRITE_PROTECTED                      0x072700
214
215 #define SK(x)           ((u8) ((x) >> 16))      // Sense Key byte, etc.
216 #define ASC(x)          ((u8) ((x) >> 8))
217 #define ASCQ(x)         ((u8) (x))
218
219
220 /*-------------------------------------------------------------------------*/
221
222
223 struct fsg_lun {
224         struct file     *filp;
225         loff_t          file_length;
226         loff_t          num_sectors;
227
228         unsigned int    ro : 1;
229         unsigned int    prevent_medium_removal : 1;
230         unsigned int    registered : 1;
231         unsigned int    info_valid : 1;
232
233         u32             sense_data;
234         u32             sense_data_info;
235         u32             unit_attention_data;
236
237         struct device   dev;
238 };
239
240 #define fsg_lun_is_open(curlun) ((curlun)->filp != NULL)
241
242 static struct fsg_lun *fsg_lun_from_dev(struct device *dev)
243 {
244         return container_of(dev, struct fsg_lun, dev);
245 }
246
247
248 /* Big enough to hold our biggest descriptor */
249 #define EP0_BUFSIZE     256
250 #define DELAYED_STATUS  (EP0_BUFSIZE + 999)     // An impossibly large value
251
252 /* Number of buffers we will use.  2 is enough for double-buffering */
253 #define FSG_NUM_BUFFERS 2
254
255 enum fsg_buffer_state {
256         BUF_STATE_EMPTY = 0,
257         BUF_STATE_FULL,
258         BUF_STATE_BUSY
259 };
260
261 struct fsg_buffhd {
262         void                            *buf;
263         enum fsg_buffer_state           state;
264         struct fsg_buffhd               *next;
265
266         /* The NetChip 2280 is faster, and handles some protocol faults
267          * better, if we don't submit any short bulk-out read requests.
268          * So we will record the intended request length here. */
269         unsigned int                    bulk_out_intended_length;
270
271         struct usb_request              *inreq;
272         int                             inreq_busy;
273         struct usb_request              *outreq;
274         int                             outreq_busy;
275 };
276
277 enum fsg_state {
278         FSG_STATE_COMMAND_PHASE = -10,          // This one isn't used anywhere
279         FSG_STATE_DATA_PHASE,
280         FSG_STATE_STATUS_PHASE,
281
282         FSG_STATE_IDLE = 0,
283         FSG_STATE_ABORT_BULK_OUT,
284         FSG_STATE_RESET,
285         FSG_STATE_INTERFACE_CHANGE,
286         FSG_STATE_CONFIG_CHANGE,
287         FSG_STATE_DISCONNECT,
288         FSG_STATE_EXIT,
289         FSG_STATE_TERMINATED
290 };
291
292 enum data_direction {
293         DATA_DIR_UNKNOWN = 0,
294         DATA_DIR_FROM_HOST,
295         DATA_DIR_TO_HOST,
296         DATA_DIR_NONE
297 };
298
299
300 /*-------------------------------------------------------------------------*/
301
302
303 static inline u32 get_unaligned_be24(u8 *buf)
304 {
305         return 0xffffff & (u32) get_unaligned_be32(buf - 1);
306 }
307
308
309 /*-------------------------------------------------------------------------*/
310
311
312 enum {
313         FSG_STRING_MANUFACTURER = 1,
314         FSG_STRING_PRODUCT,
315         FSG_STRING_SERIAL,
316         FSG_STRING_CONFIG,
317         FSG_STRING_INTERFACE
318 };
319
320
321 static struct usb_otg_descriptor
322 fsg_otg_desc = {
323         .bLength =              sizeof fsg_otg_desc,
324         .bDescriptorType =      USB_DT_OTG,
325
326         .bmAttributes =         USB_OTG_SRP,
327 };
328
329 /* There is only one interface. */
330
331 static struct usb_interface_descriptor
332 fsg_intf_desc = {
333         .bLength =              sizeof fsg_intf_desc,
334         .bDescriptorType =      USB_DT_INTERFACE,
335
336         .bNumEndpoints =        2,              // Adjusted during fsg_bind()
337         .bInterfaceClass =      USB_CLASS_MASS_STORAGE,
338         .bInterfaceSubClass =   USB_SC_SCSI,    // Adjusted during fsg_bind()
339         .bInterfaceProtocol =   USB_PR_BULK,    // Adjusted during fsg_bind()
340         .iInterface =           FSG_STRING_INTERFACE,
341 };
342
343 /* Three full-speed endpoint descriptors: bulk-in, bulk-out,
344  * and interrupt-in. */
345
346 static struct usb_endpoint_descriptor
347 fsg_fs_bulk_in_desc = {
348         .bLength =              USB_DT_ENDPOINT_SIZE,
349         .bDescriptorType =      USB_DT_ENDPOINT,
350
351         .bEndpointAddress =     USB_DIR_IN,
352         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
353         /* wMaxPacketSize set by autoconfiguration */
354 };
355
356 static struct usb_endpoint_descriptor
357 fsg_fs_bulk_out_desc = {
358         .bLength =              USB_DT_ENDPOINT_SIZE,
359         .bDescriptorType =      USB_DT_ENDPOINT,
360
361         .bEndpointAddress =     USB_DIR_OUT,
362         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
363         /* wMaxPacketSize set by autoconfiguration */
364 };
365
366 static struct usb_endpoint_descriptor
367 fsg_fs_intr_in_desc = {
368         .bLength =              USB_DT_ENDPOINT_SIZE,
369         .bDescriptorType =      USB_DT_ENDPOINT,
370
371         .bEndpointAddress =     USB_DIR_IN,
372         .bmAttributes =         USB_ENDPOINT_XFER_INT,
373         .wMaxPacketSize =       cpu_to_le16(2),
374         .bInterval =            32,     // frames -> 32 ms
375 };
376
377 static const struct usb_descriptor_header *fsg_fs_function[] = {
378         (struct usb_descriptor_header *) &fsg_otg_desc,
379         (struct usb_descriptor_header *) &fsg_intf_desc,
380         (struct usb_descriptor_header *) &fsg_fs_bulk_in_desc,
381         (struct usb_descriptor_header *) &fsg_fs_bulk_out_desc,
382         (struct usb_descriptor_header *) &fsg_fs_intr_in_desc,
383         NULL,
384 };
385 #define FSG_FS_FUNCTION_PRE_EP_ENTRIES  2
386
387
388 /*
389  * USB 2.0 devices need to expose both high speed and full speed
390  * descriptors, unless they only run at full speed.
391  *
392  * That means alternate endpoint descriptors (bigger packets)
393  * and a "device qualifier" ... plus more construction options
394  * for the config descriptor.
395  */
396 static struct usb_endpoint_descriptor
397 fsg_hs_bulk_in_desc = {
398         .bLength =              USB_DT_ENDPOINT_SIZE,
399         .bDescriptorType =      USB_DT_ENDPOINT,
400
401         /* bEndpointAddress copied from fs_bulk_in_desc during fsg_bind() */
402         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
403         .wMaxPacketSize =       cpu_to_le16(512),
404 };
405
406 static struct usb_endpoint_descriptor
407 fsg_hs_bulk_out_desc = {
408         .bLength =              USB_DT_ENDPOINT_SIZE,
409         .bDescriptorType =      USB_DT_ENDPOINT,
410
411         /* bEndpointAddress copied from fs_bulk_out_desc during fsg_bind() */
412         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
413         .wMaxPacketSize =       cpu_to_le16(512),
414         .bInterval =            1,      // NAK every 1 uframe
415 };
416
417 static struct usb_endpoint_descriptor
418 fsg_hs_intr_in_desc = {
419         .bLength =              USB_DT_ENDPOINT_SIZE,
420         .bDescriptorType =      USB_DT_ENDPOINT,
421
422         /* bEndpointAddress copied from fs_intr_in_desc during fsg_bind() */
423         .bmAttributes =         USB_ENDPOINT_XFER_INT,
424         .wMaxPacketSize =       cpu_to_le16(2),
425         .bInterval =            9,      // 2**(9-1) = 256 uframes -> 32 ms
426 };
427
428 static const struct usb_descriptor_header *fsg_hs_function[] = {
429         (struct usb_descriptor_header *) &fsg_otg_desc,
430         (struct usb_descriptor_header *) &fsg_intf_desc,
431         (struct usb_descriptor_header *) &fsg_hs_bulk_in_desc,
432         (struct usb_descriptor_header *) &fsg_hs_bulk_out_desc,
433         (struct usb_descriptor_header *) &fsg_hs_intr_in_desc,
434         NULL,
435 };
436 #define FSG_HS_FUNCTION_PRE_EP_ENTRIES  2
437
438 /* Maxpacket and other transfer characteristics vary by speed. */
439 static struct usb_endpoint_descriptor *
440 fsg_ep_desc(struct usb_gadget *g, struct usb_endpoint_descriptor *fs,
441                 struct usb_endpoint_descriptor *hs)
442 {
443         if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
444                 return hs;
445         return fs;
446 }
447
448
449 /* Static strings, in UTF-8 (for simplicity we use only ASCII characters) */
450 static struct usb_string                fsg_strings[] = {
451         {FSG_STRING_MANUFACTURER,       fsg_string_manufacturer},
452         {FSG_STRING_PRODUCT,            fsg_string_product},
453         {FSG_STRING_SERIAL,             fsg_string_serial},
454         {FSG_STRING_CONFIG,             fsg_string_config},
455         {FSG_STRING_INTERFACE,          fsg_string_interface},
456         {}
457 };
458
459 static struct usb_gadget_strings        fsg_stringtab = {
460         .language       = 0x0409,               // en-us
461         .strings        = fsg_strings,
462 };
463
464
465  /*-------------------------------------------------------------------------*/
466
467 /* If the next two routines are called while the gadget is registered,
468  * the caller must own fsg->filesem for writing. */
469
470 static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
471 {
472         int                             ro;
473         struct file                     *filp = NULL;
474         int                             rc = -EINVAL;
475         struct inode                    *inode = NULL;
476         loff_t                          size;
477         loff_t                          num_sectors;
478         loff_t                          min_sectors;
479
480         /* R/W if we can, R/O if we must */
481         ro = curlun->ro;
482         if (!ro) {
483                 filp = filp_open(filename, O_RDWR | O_LARGEFILE, 0);
484                 if (-EROFS == PTR_ERR(filp))
485                         ro = 1;
486         }
487         if (ro)
488                 filp = filp_open(filename, O_RDONLY | O_LARGEFILE, 0);
489         if (IS_ERR(filp)) {
490                 LINFO(curlun, "unable to open backing file: %s\n", filename);
491                 return PTR_ERR(filp);
492         }
493
494         if (!(filp->f_mode & FMODE_WRITE))
495                 ro = 1;
496
497         if (filp->f_path.dentry)
498                 inode = filp->f_path.dentry->d_inode;
499         if (inode && S_ISBLK(inode->i_mode)) {
500                 if (bdev_read_only(inode->i_bdev))
501                         ro = 1;
502         } else if (!inode || !S_ISREG(inode->i_mode)) {
503                 LINFO(curlun, "invalid file type: %s\n", filename);
504                 goto out;
505         }
506
507         /* If we can't read the file, it's no good.
508          * If we can't write the file, use it read-only. */
509         if (!filp->f_op || !(filp->f_op->read || filp->f_op->aio_read)) {
510                 LINFO(curlun, "file not readable: %s\n", filename);
511                 goto out;
512         }
513         if (!(filp->f_op->write || filp->f_op->aio_write))
514                 ro = 1;
515
516         size = i_size_read(inode->i_mapping->host);
517         if (size < 0) {
518                 LINFO(curlun, "unable to find file size: %s\n", filename);
519                 rc = (int) size;
520                 goto out;
521         }
522         num_sectors = size >> 9;        // File size in 512-byte blocks
523         min_sectors = 1;
524         if (mod_data.cdrom) {
525                 num_sectors &= ~3;      // Reduce to a multiple of 2048
526                 min_sectors = 300*4;    // Smallest track is 300 frames
527                 if (num_sectors >= 256*60*75*4) {
528                         num_sectors = (256*60*75 - 1) * 4;
529                         LINFO(curlun, "file too big: %s\n", filename);
530                         LINFO(curlun, "using only first %d blocks\n",
531                                         (int) num_sectors);
532                 }
533         }
534         if (num_sectors < min_sectors) {
535                 LINFO(curlun, "file too small: %s\n", filename);
536                 rc = -ETOOSMALL;
537                 goto out;
538         }
539
540         get_file(filp);
541         curlun->ro = ro;
542         curlun->filp = filp;
543         curlun->file_length = size;
544         curlun->num_sectors = num_sectors;
545         LDBG(curlun, "open backing file: %s\n", filename);
546         rc = 0;
547
548 out:
549         filp_close(filp, current->files);
550         return rc;
551 }
552
553
554 static void fsg_lun_close(struct fsg_lun *curlun)
555 {
556         if (curlun->filp) {
557                 LDBG(curlun, "close backing file\n");
558                 fput(curlun->filp);
559                 curlun->filp = NULL;
560         }
561 }
562
563
564 /*-------------------------------------------------------------------------*/
565
566 /* Sync the file data, don't bother with the metadata.
567  * This code was copied from fs/buffer.c:sys_fdatasync(). */
568 static int fsg_lun_fsync_sub(struct fsg_lun *curlun)
569 {
570         struct file     *filp = curlun->filp;
571
572         if (curlun->ro || !filp)
573                 return 0;
574         return vfs_fsync(filp, filp->f_path.dentry, 1);
575 }
576
577 static void store_cdrom_address(u8 *dest, int msf, u32 addr)
578 {
579         if (msf) {
580                 /* Convert to Minutes-Seconds-Frames */
581                 addr >>= 2;             /* Convert to 2048-byte frames */
582                 addr += 2*75;           /* Lead-in occupies 2 seconds */
583                 dest[3] = addr % 75;    /* Frames */
584                 addr /= 75;
585                 dest[2] = addr % 60;    /* Seconds */
586                 addr /= 60;
587                 dest[1] = addr;         /* Minutes */
588                 dest[0] = 0;            /* Reserved */
589         } else {
590                 /* Absolute sector */
591                 put_unaligned_be32(addr, dest);
592         }
593 }