tizen 2.4 release
[profile/mobile/platform/kernel/linux-3.10-sc7730.git] / drivers / usb / gadget / f_mass_storage.c
1 /*
2  * f_mass_storage.c -- Mass Storage USB Composite Function
3  *
4  * Copyright (C) 2003-2008 Alan Stern
5  * Copyright (C) 2009 Samsung Electronics
6  *                    Author: Michal Nazarewicz <mina86@mina86.com>
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions, and the following disclaimer,
14  *    without modification.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. The names of the above-listed copyright holders may not be used
19  *    to endorse or promote products derived from this software without
20  *    specific prior written permission.
21  *
22  * ALTERNATIVELY, this software may be distributed under the terms of the
23  * GNU General Public License ("GPL") as published by the Free Software
24  * Foundation, either version 2 of that License or (at your option) any
25  * later version.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
28  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
29  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
31  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38  */
39
40 /*
41  * The Mass Storage Function acts as a USB Mass Storage device,
42  * appearing to the host as a disk drive or as a CD-ROM drive.  In
43  * addition to providing an example of a genuinely useful composite
44  * function for a USB device, it also illustrates a technique of
45  * double-buffering for increased throughput.
46  *
47  * For more information about MSF and in particular its module
48  * parameters and sysfs interface read the
49  * <Documentation/usb/mass-storage.txt> file.
50  */
51
52 /*
53  * MSF is configured by specifying a fsg_config structure.  It has the
54  * following fields:
55  *
56  *      nluns           Number of LUNs function have (anywhere from 1
57  *                              to FSG_MAX_LUNS which is 8).
58  *      luns            An array of LUN configuration values.  This
59  *                              should be filled for each LUN that
60  *                              function will include (ie. for "nluns"
61  *                              LUNs).  Each element of the array has
62  *                              the following fields:
63  *      ->filename      The path to the backing file for the LUN.
64  *                              Required if LUN is not marked as
65  *                              removable.
66  *      ->ro            Flag specifying access to the LUN shall be
67  *                              read-only.  This is implied if CD-ROM
68  *                              emulation is enabled as well as when
69  *                              it was impossible to open "filename"
70  *                              in R/W mode.
71  *      ->removable     Flag specifying that LUN shall be indicated as
72  *                              being removable.
73  *      ->cdrom         Flag specifying that LUN shall be reported as
74  *                              being a CD-ROM.
75  *      ->nofua         Flag specifying that FUA flag in SCSI WRITE(10,12)
76  *                              commands for this LUN shall be ignored.
77  *
78  *      vendor_name
79  *      product_name
80  *      release         Information used as a reply to INQUIRY
81  *                              request.  To use default set to NULL,
82  *                              NULL, 0xffff respectively.  The first
83  *                              field should be 8 and the second 16
84  *                              characters or less.
85  *
86  *      can_stall       Set to permit function to halt bulk endpoints.
87  *                              Disabled on some USB devices known not
88  *                              to work correctly.  You should set it
89  *                              to true.
90  *
91  * If "removable" is not set for a LUN then a backing file must be
92  * specified.  If it is set, then NULL filename means the LUN's medium
93  * is not loaded (an empty string as "filename" in the fsg_config
94  * structure causes error).  The CD-ROM emulation includes a single
95  * data track and no audio tracks; hence there need be only one
96  * backing file per LUN.
97  *
98  * This function is heavily based on "File-backed Storage Gadget" by
99  * Alan Stern which in turn is heavily based on "Gadget Zero" by David
100  * Brownell.  The driver's SCSI command interface was based on the
101  * "Information technology - Small Computer System Interface - 2"
102  * document from X3T9.2 Project 375D, Revision 10L, 7-SEP-93,
103  * available at <http://www.t10.org/ftp/t10/drafts/s2/s2-r10l.pdf>.
104  * The single exception is opcode 0x23 (READ FORMAT CAPACITIES), which
105  * was based on the "Universal Serial Bus Mass Storage Class UFI
106  * Command Specification" document, Revision 1.0, December 14, 1998,
107  * available at
108  * <http://www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf>.
109  */
110
111 /*
112  *                              Driver Design
113  *
114  * The MSF is fairly straightforward.  There is a main kernel
115  * thread that handles most of the work.  Interrupt routines field
116  * callbacks from the controller driver: bulk- and interrupt-request
117  * completion notifications, endpoint-0 events, and disconnect events.
118  * Completion events are passed to the main thread by wakeup calls.  Many
119  * ep0 requests are handled at interrupt time, but SetInterface,
120  * SetConfiguration, and device reset requests are forwarded to the
121  * thread in the form of "exceptions" using SIGUSR1 signals (since they
122  * should interrupt any ongoing file I/O operations).
123  *
124  * The thread's main routine implements the standard command/data/status
125  * parts of a SCSI interaction.  It and its subroutines are full of tests
126  * for pending signals/exceptions -- all this polling is necessary since
127  * the kernel has no setjmp/longjmp equivalents.  (Maybe this is an
128  * indication that the driver really wants to be running in userspace.)
129  * An important point is that so long as the thread is alive it keeps an
130  * open reference to the backing file.  This will prevent unmounting
131  * the backing file's underlying filesystem and could cause problems
132  * during system shutdown, for example.  To prevent such problems, the
133  * thread catches INT, TERM, and KILL signals and converts them into
134  * an EXIT exception.
135  *
136  * In normal operation the main thread is started during the gadget's
137  * fsg_bind() callback and stopped during fsg_unbind().  But it can
138  * also exit when it receives a signal, and there's no point leaving
139  * the gadget running when the thread is dead.  As of this moment, MSF
140  * provides no way to deregister the gadget when thread dies -- maybe
141  * a callback functions is needed.
142  *
143  * To provide maximum throughput, the driver uses a circular pipeline of
144  * buffer heads (struct fsg_buffhd).  In principle the pipeline can be
145  * arbitrarily long; in practice the benefits don't justify having more
146  * than 2 stages (i.e., double buffering).  But it helps to think of the
147  * pipeline as being a long one.  Each buffer head contains a bulk-in and
148  * a bulk-out request pointer (since the buffer can be used for both
149  * output and input -- directions always are given from the host's
150  * point of view) as well as a pointer to the buffer and various state
151  * variables.
152  *
153  * Use of the pipeline follows a simple protocol.  There is a variable
154  * (fsg->next_buffhd_to_fill) that points to the next buffer head to use.
155  * At any time that buffer head may still be in use from an earlier
156  * request, so each buffer head has a state variable indicating whether
157  * it is EMPTY, FULL, or BUSY.  Typical use involves waiting for the
158  * buffer head to be EMPTY, filling the buffer either by file I/O or by
159  * USB I/O (during which the buffer head is BUSY), and marking the buffer
160  * head FULL when the I/O is complete.  Then the buffer will be emptied
161  * (again possibly by USB I/O, during which it is marked BUSY) and
162  * finally marked EMPTY again (possibly by a completion routine).
163  *
164  * A module parameter tells the driver to avoid stalling the bulk
165  * endpoints wherever the transport specification allows.  This is
166  * necessary for some UDCs like the SuperH, which cannot reliably clear a
167  * halt on a bulk endpoint.  However, under certain circumstances the
168  * Bulk-only specification requires a stall.  In such cases the driver
169  * will halt the endpoint and set a flag indicating that it should clear
170  * the halt in software during the next device reset.  Hopefully this
171  * will permit everything to work correctly.  Furthermore, although the
172  * specification allows the bulk-out endpoint to halt when the host sends
173  * too much data, implementing this would cause an unavoidable race.
174  * The driver will always use the "no-stall" approach for OUT transfers.
175  *
176  * One subtle point concerns sending status-stage responses for ep0
177  * requests.  Some of these requests, such as device reset, can involve
178  * interrupting an ongoing file I/O operation, which might take an
179  * arbitrarily long time.  During that delay the host might give up on
180  * the original ep0 request and issue a new one.  When that happens the
181  * driver should not notify the host about completion of the original
182  * request, as the host will no longer be waiting for it.  So the driver
183  * assigns to each ep0 request a unique tag, and it keeps track of the
184  * tag value of the request associated with a long-running exception
185  * (device-reset, interface-change, or configuration-change).  When the
186  * exception handler is finished, the status-stage response is submitted
187  * only if the current ep0 request tag is equal to the exception request
188  * tag.  Thus only the most recently received ep0 request will get a
189  * status-stage response.
190  *
191  * Warning: This driver source file is too long.  It ought to be split up
192  * into a header file plus about 3 separate .c files, to handle the details
193  * of the Gadget, USB Mass Storage, and SCSI protocols.
194  */
195
196
197 /* #define VERBOSE_DEBUG */
198 /* #define DUMP_MSGS */
199
200 #include <linux/blkdev.h>
201 #include <linux/completion.h>
202 #include <linux/dcache.h>
203 #include <linux/delay.h>
204 #include <linux/device.h>
205 #include <linux/fcntl.h>
206 #include <linux/file.h>
207 #include <linux/fs.h>
208 #include <linux/kref.h>
209 #include <linux/kthread.h>
210 #include <linux/limits.h>
211 #include <linux/rwsem.h>
212 #include <linux/slab.h>
213 #include <linux/spinlock.h>
214 #include <linux/string.h>
215 #include <linux/freezer.h>
216
217 #include <linux/usb/ch9.h>
218 #include <linux/usb/gadget.h>
219 #include <linux/usb/composite.h>
220
221 #include "gadget_chips.h"
222
223
224 /*------------------------------------------------------------------------*/
225
226 #define FSG_DRIVER_DESC         "Mass Storage Function"
227 #define FSG_DRIVER_VERSION      "2009/09/11"
228
229 static const char fsg_string_interface[] = "Mass Storage";
230
231 #include "storage_common.c"
232
233
234 /*-------------------------------------------------------------------------*/
235
236 struct fsg_dev;
237 struct fsg_common;
238
239 /* FSF callback functions */
240 struct fsg_operations {
241         /*
242          * Callback function to call when thread exits.  If no
243          * callback is set or it returns value lower then zero MSF
244          * will force eject all LUNs it operates on (including those
245          * marked as non-removable or with prevent_medium_removal flag
246          * set).
247          */
248         int (*thread_exits)(struct fsg_common *common);
249 };
250
251 /* Data shared by all the FSG instances. */
252 struct fsg_common {
253         struct usb_gadget       *gadget;
254         struct usb_composite_dev *cdev;
255         struct fsg_dev          *fsg, *new_fsg;
256         wait_queue_head_t       fsg_wait;
257
258         /* filesem protects: backing files in use */
259         struct rw_semaphore     filesem;
260
261         /* lock protects: state, all the req_busy's */
262         spinlock_t              lock;
263
264         struct usb_ep           *ep0;           /* Copy of gadget->ep0 */
265         struct usb_request      *ep0req;        /* Copy of cdev->req */
266         unsigned int            ep0_req_tag;
267
268         struct fsg_buffhd       *next_buffhd_to_fill;
269         struct fsg_buffhd       *next_buffhd_to_drain;
270         struct fsg_buffhd       *buffhds;
271
272         int                     cmnd_size;
273         u8                      cmnd[MAX_COMMAND_SIZE];
274
275         unsigned int            nluns;
276         unsigned int            board_support_luns;
277         unsigned int            lun;
278         struct fsg_lun          *luns;
279         struct fsg_lun          *curlun;
280
281         unsigned int            bulk_out_maxpacket;
282         enum fsg_state          state;          /* For exception handling */
283         unsigned int            exception_req_tag;
284
285         enum data_direction     data_dir;
286         u32                     data_size;
287         u32                     data_size_from_cmnd;
288         u32                     tag;
289         u32                     residue;
290         u32                     usb_amount_left;
291
292         unsigned int            can_stall:1;
293         unsigned int            free_storage_on_release:1;
294         unsigned int            phase_error:1;
295         unsigned int            short_packet_received:1;
296         unsigned int            bad_lun_okay:1;
297         unsigned int            running:1;
298
299         int                     thread_wakeup_needed;
300         struct completion       thread_notifier;
301         struct task_struct      *thread_task;
302
303         /* Callback functions. */
304         const struct fsg_operations     *ops;
305         /* Gadget's private data. */
306         void                    *private_data;
307
308         /*
309          * Vendor (8 chars), product (16 chars), release (4
310          * hexadecimal digits) and NUL byte
311          */
312         char inquiry_string[8 + 16 + 4 + 1];
313
314         struct kref             ref;
315         struct work_struct fsync_work;
316 };
317
318 struct fsg_config {
319         unsigned nluns;
320         struct fsg_lun_config {
321                 const char *filename;
322                 char ro;
323                 char removable;
324                 char cdrom;
325                 char nofua;
326         } luns[FSG_MAX_LUNS];
327
328         /* Callback functions. */
329         const struct fsg_operations     *ops;
330         /* Gadget's private data. */
331         void                    *private_data;
332
333         const char *vendor_name;                /*  8 characters or less */
334         const char *product_name;               /* 16 characters or less */
335
336         char                    can_stall;
337 };
338
339 struct fsg_dev {
340         struct usb_function     function;
341         struct usb_gadget       *gadget;        /* Copy of cdev->gadget */
342         struct fsg_common       *common;
343
344         u16                     interface_number;
345
346         unsigned int            bulk_in_enabled:1;
347         unsigned int            bulk_out_enabled:1;
348
349         unsigned long           atomic_bitflags;
350 #define IGNORE_BULK_OUT         0
351
352         struct usb_ep           *bulk_in;
353         struct usb_ep           *bulk_out;
354 };
355
356 static inline int __fsg_is_set(struct fsg_common *common,
357                                const char *func, unsigned line)
358 {
359         if (common->fsg)
360                 return 1;
361         ERROR(common, "common->fsg is NULL in %s at %u\n", func, line);
362         WARN_ON(1);
363         return 0;
364 }
365
366 #define fsg_is_set(common) likely(__fsg_is_set(common, __func__, __LINE__))
367
368 static inline struct fsg_dev *fsg_from_func(struct usb_function *f)
369 {
370         return container_of(f, struct fsg_dev, function);
371 }
372
373 typedef void (*fsg_routine_t)(struct fsg_dev *);
374
375 static int exception_in_progress(struct fsg_common *common)
376 {
377         return common->state > FSG_STATE_IDLE;
378 }
379
380 /* Make bulk-out requests be divisible by the maxpacket size */
381 static void set_bulk_out_req_length(struct fsg_common *common,
382                                     struct fsg_buffhd *bh, unsigned int length)
383 {
384         unsigned int    rem;
385
386         bh->bulk_out_intended_length = length;
387         rem = length % common->bulk_out_maxpacket;
388         if (rem > 0)
389                 length += common->bulk_out_maxpacket - rem;
390         bh->outreq->length = length;
391 }
392
393
394 /*-------------------------------------------------------------------------*/
395
396 static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
397 {
398         const char      *name;
399
400         if (ep == fsg->bulk_in)
401                 name = "bulk-in";
402         else if (ep == fsg->bulk_out)
403                 name = "bulk-out";
404         else
405                 name = ep->name;
406         DBG(fsg, "%s set halt\n", name);
407         return usb_ep_set_halt(ep);
408 }
409
410
411 /*-------------------------------------------------------------------------*/
412
413 /* These routines may be called in process context or in_irq */
414
415 /* Caller must hold fsg->lock */
416 static void wakeup_thread(struct fsg_common *common)
417 {
418         smp_wmb();      /* ensure the write of bh->state is complete */
419         /* Tell the main thread that something has happened */
420         common->thread_wakeup_needed = 1;
421         if (common->thread_task)
422                 wake_up_process(common->thread_task);
423 }
424
425 static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
426 {
427         unsigned long           flags;
428
429         /*
430          * Do nothing if a higher-priority exception is already in progress.
431          * If a lower-or-equal priority exception is in progress, preempt it
432          * and notify the main thread by sending it a signal.
433          */
434         printk("%s:state=%d,%d fsg=%p \n",__func__,common->state,new_state,common->new_fsg);
435         spin_lock_irqsave(&common->lock, flags);
436         if (common->state <= new_state) {
437                 common->exception_req_tag = common->ep0_req_tag;
438                 common->state = new_state;
439                 if (common->thread_task)
440                         send_sig_info(SIGUSR1, SEND_SIG_FORCED,
441                                       common->thread_task);
442         }
443         spin_unlock_irqrestore(&common->lock, flags);
444 }
445
446
447 /*-------------------------------------------------------------------------*/
448
449 static int ep0_queue(struct fsg_common *common)
450 {
451         int     rc;
452
453         rc = usb_ep_queue(common->ep0, common->ep0req, GFP_ATOMIC);
454         common->ep0->driver_data = common;
455         if (rc != 0 && rc != -ESHUTDOWN) {
456                 /* We can't do much more than wait for a reset */
457                 WARNING(common, "error in submission: %s --> %d\n",
458                         common->ep0->name, rc);
459         }
460         return rc;
461 }
462
463
464 /*-------------------------------------------------------------------------*/
465
466 /* Completion handlers. These always run in_irq. */
467
468 static void bulk_in_complete(struct usb_ep *ep, struct usb_request *req)
469 {
470         struct fsg_common       *common = ep->driver_data;
471         struct fsg_buffhd       *bh = req->context;
472
473         if (req->status || req->actual != req->length)
474                 DBG(common, "%s --> %d, %u/%u\n", __func__,
475                     req->status, req->actual, req->length);
476         if (req->status == -ECONNRESET)         /* Request was cancelled */
477                 usb_ep_fifo_flush(ep);
478
479         /* Hold the lock while we update the request and buffer states */
480         smp_wmb();
481         spin_lock(&common->lock);
482         bh->inreq_busy = 0;
483         bh->state = BUF_STATE_EMPTY;
484         wakeup_thread(common);
485         spin_unlock(&common->lock);
486 }
487
488 static void bulk_out_complete(struct usb_ep *ep, struct usb_request *req)
489 {
490         struct fsg_common       *common = ep->driver_data;
491         struct fsg_buffhd       *bh = req->context;
492
493         dump_msg(common, "bulk-out", req->buf, req->actual);
494         if (req->status || req->actual != bh->bulk_out_intended_length)
495                 DBG(common, "%s --> %d, %u/%u\n", __func__,
496                     req->status, req->actual, bh->bulk_out_intended_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         smp_wmb();
502         spin_lock(&common->lock);
503         bh->outreq_busy = 0;
504         bh->state = BUF_STATE_FULL;
505         wakeup_thread(common);
506         spin_unlock(&common->lock);
507 }
508
509 static int fsg_setup(struct usb_function *f,
510                      const struct usb_ctrlrequest *ctrl)
511 {
512         struct fsg_dev          *fsg = fsg_from_func(f);
513         struct usb_request      *req = fsg->common->ep0req;
514         u16                     w_index = le16_to_cpu(ctrl->wIndex);
515         u16                     w_value = le16_to_cpu(ctrl->wValue);
516         u16                     w_length = le16_to_cpu(ctrl->wLength);
517
518         if (!fsg_is_set(fsg->common))
519                 return -EOPNOTSUPP;
520
521         ++fsg->common->ep0_req_tag;     /* Record arrival of a new request */
522         req->context = NULL;
523         req->length = 0;
524         dump_msg(fsg, "ep0-setup", (u8 *) ctrl, sizeof(*ctrl));
525
526         switch (ctrl->bRequest) {
527
528         case US_BULK_RESET_REQUEST:
529                 if (ctrl->bRequestType !=
530                     (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
531                         break;
532                 if (w_index != fsg->interface_number || w_value != 0 ||
533                                 w_length != 0)
534                         return -EDOM;
535
536                 /*
537                  * Raise an exception to stop the current operation
538                  * and reinitialize our state.
539                  */
540                 DBG(fsg, "bulk reset request\n");
541                 raise_exception(fsg->common, FSG_STATE_RESET);
542                 return DELAYED_STATUS;
543
544         case US_BULK_GET_MAX_LUN:
545                 if (ctrl->bRequestType !=
546                     (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
547                         break;
548                 if (w_index != fsg->interface_number || w_value != 0 ||
549                                 w_length != 1)
550                         return -EDOM;
551                 VDBG(fsg, "get max LUN\n");
552                 *(u8 *)req->buf = fsg->common->board_support_luns - 1;
553
554                 /* Respond with data/status */
555                 req->length = min((u16)1, w_length);
556                 return ep0_queue(fsg->common);
557         }
558
559         VDBG(fsg,
560              "unknown class-specific control req %02x.%02x v%04x i%04x l%u\n",
561              ctrl->bRequestType, ctrl->bRequest,
562              le16_to_cpu(ctrl->wValue), w_index, w_length);
563         return -EOPNOTSUPP;
564 }
565
566
567 /*-------------------------------------------------------------------------*/
568
569 /* All the following routines run in process context */
570
571 /* Use this for bulk or interrupt transfers, not ep0 */
572 static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep,
573                            struct usb_request *req, int *pbusy,
574                            enum fsg_buffer_state *state)
575 {
576         int     rc;
577
578         if (ep == fsg->bulk_in)
579                 dump_msg(fsg, "bulk-in", req->buf, req->length);
580
581         spin_lock_irq(&fsg->common->lock);
582         *pbusy = 1;
583         *state = BUF_STATE_BUSY;
584         spin_unlock_irq(&fsg->common->lock);
585         rc = usb_ep_queue(ep, req, GFP_KERNEL);
586         if (rc != 0) {
587                 *pbusy = 0;
588                 *state = BUF_STATE_EMPTY;
589
590                 /* We can't do much more than wait for a reset */
591
592                 /*
593                  * Note: currently the net2280 driver fails zero-length
594                  * submissions if DMA is enabled.
595                  */
596                 if (rc != -ESHUTDOWN &&
597                     !(rc == -EOPNOTSUPP && req->length == 0))
598                         WARNING(fsg, "error in submission: %s --> %d\n",
599                                 ep->name, rc);
600         }
601 }
602
603 static bool start_in_transfer(struct fsg_common *common, struct fsg_buffhd *bh)
604 {
605         if (!fsg_is_set(common))
606                 return false;
607         start_transfer(common->fsg, common->fsg->bulk_in,
608                        bh->inreq, &bh->inreq_busy, &bh->state);
609         return true;
610 }
611
612 static bool start_out_transfer(struct fsg_common *common, struct fsg_buffhd *bh)
613 {
614         if (!fsg_is_set(common))
615                 return false;
616         start_transfer(common->fsg, common->fsg->bulk_out,
617                        bh->outreq, &bh->outreq_busy, &bh->state);
618         return true;
619 }
620
621 static int sleep_thread(struct fsg_common *common)
622 {
623         int     rc = 0;
624
625         /* Wait until a signal arrives or we are woken up */
626         for (;;) {
627                 try_to_freeze();
628                 set_current_state(TASK_INTERRUPTIBLE);
629                 if (signal_pending(current)) {
630                         rc = -EINTR;
631                         break;
632                 }
633                 if (common->thread_wakeup_needed)
634                         break;
635                 schedule();
636         }
637         __set_current_state(TASK_RUNNING);
638         common->thread_wakeup_needed = 0;
639         smp_rmb();      /* ensure the latest bh->state is visible */
640         return rc;
641 }
642
643
644 /*-------------------------------------------------------------------------*/
645
646 static int do_read(struct fsg_common *common)
647 {
648         struct fsg_lun          *curlun = common->curlun;
649         u32                     lba;
650         struct fsg_buffhd       *bh;
651         int                     rc;
652         u32                     amount_left;
653         loff_t                  file_offset, file_offset_tmp;
654         unsigned int            amount;
655         ssize_t                 nread;
656
657         /*
658          * Get the starting Logical Block Address and check that it's
659          * not too big.
660          */
661         if (common->cmnd[0] == READ_6)
662                 lba = get_unaligned_be24(&common->cmnd[1]);
663         else {
664                 lba = get_unaligned_be32(&common->cmnd[2]);
665
666                 /*
667                  * We allow DPO (Disable Page Out = don't save data in the
668                  * cache) and FUA (Force Unit Access = don't read from the
669                  * cache), but we don't implement them.
670                  */
671                 if ((common->cmnd[1] & ~0x18) != 0) {
672                         curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
673                         return -EINVAL;
674                 }
675         }
676         if (lba >= curlun->num_sectors) {
677                 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
678                 return -EINVAL;
679         }
680         file_offset = ((loff_t) lba) << curlun->blkbits;
681
682         /* Carry out the file reads */
683         amount_left = common->data_size_from_cmnd;
684         if (unlikely(amount_left == 0))
685                 return -EIO;            /* No default reply */
686
687         for (;;) {
688                 /*
689                  * Figure out how much we need to read:
690                  * Try to read the remaining amount.
691                  * But don't read more than the buffer size.
692                  * And don't try to read past the end of the file.
693                  */
694                 amount = min(amount_left, FSG_BUFLEN);
695                 amount = min((loff_t)amount,
696                              curlun->file_length - file_offset);
697
698                 /* Wait for the next buffer to become available */
699                 bh = common->next_buffhd_to_fill;
700                 while (bh->state != BUF_STATE_EMPTY) {
701                         rc = sleep_thread(common);
702                         if (rc)
703                                 return rc;
704                 }
705
706                 /*
707                  * If we were asked to read past the end of file,
708                  * end with an empty buffer.
709                  */
710                 if (amount == 0) {
711                         curlun->sense_data =
712                                         SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
713                         curlun->sense_data_info =
714                                         file_offset >> curlun->blkbits;
715                         curlun->info_valid = 1;
716                         bh->inreq->length = 0;
717                         bh->state = BUF_STATE_FULL;
718                         break;
719                 }
720
721                 /* Perform the read */
722                 file_offset_tmp = file_offset;
723                 nread = vfs_read(curlun->filp,
724                                  (char __user *)bh->buf,
725                                  amount, &file_offset_tmp);
726                 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
727                       (unsigned long long)file_offset, (int)nread);
728                 if (signal_pending(current))
729                         return -EINTR;
730
731                 if (nread < 0) {
732                         LDBG(curlun, "error in file read: %d\n", (int)nread);
733                         nread = 0;
734                 } else if (nread < amount) {
735                         LDBG(curlun, "partial file read: %d/%u\n",
736                              (int)nread, amount);
737                         nread = round_down(nread, curlun->blksize);
738                 }
739                 file_offset  += nread;
740                 amount_left  -= nread;
741                 common->residue -= nread;
742
743                 /*
744                  * Except at the end of the transfer, nread will be
745                  * equal to the buffer size, which is divisible by the
746                  * bulk-in maxpacket size.
747                  */
748                 bh->inreq->length = nread;
749                 bh->state = BUF_STATE_FULL;
750
751                 /* If an error occurred, report it and its position */
752                 if (nread < amount) {
753                         curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
754                         curlun->sense_data_info =
755                                         file_offset >> curlun->blkbits;
756                         curlun->info_valid = 1;
757                         break;
758                 }
759
760                 if (amount_left == 0)
761                         break;          /* No more left to read */
762
763                 /* Send this buffer and go read some more */
764                 bh->inreq->zero = 0;
765                 if (!start_in_transfer(common, bh))
766                         /* Don't know what to do if common->fsg is NULL */
767                         return -EIO;
768                 common->next_buffhd_to_fill = bh->next;
769         }
770
771         return -EIO;            /* No default reply */
772 }
773
774
775 /*-------------------------------------------------------------------------*/
776
777 static int do_write(struct fsg_common *common)
778 {
779         struct fsg_lun          *curlun = common->curlun;
780         u32                     lba;
781         struct fsg_buffhd       *bh;
782         int                     get_some_more;
783         u32                     amount_left_to_req, amount_left_to_write;
784         loff_t                  usb_offset, file_offset, file_offset_tmp;
785         unsigned int            amount;
786         ssize_t                 nwritten;
787         int                     rc;
788
789         if (curlun->ro) {
790                 curlun->sense_data = SS_WRITE_PROTECTED;
791                 return -EINVAL;
792         }
793         spin_lock(&curlun->filp->f_lock);
794         curlun->filp->f_flags &= ~O_SYNC;       /* Default is not to wait */
795         spin_unlock(&curlun->filp->f_lock);
796
797         /*
798          * Get the starting Logical Block Address and check that it's
799          * not too big
800          */
801         if (common->cmnd[0] == WRITE_6)
802                 lba = get_unaligned_be24(&common->cmnd[1]);
803         else {
804                 lba = get_unaligned_be32(&common->cmnd[2]);
805
806                 /*
807                  * We allow DPO (Disable Page Out = don't save data in the
808                  * cache) and FUA (Force Unit Access = write directly to the
809                  * medium).  We don't implement DPO; we implement FUA by
810                  * performing synchronous output.
811                  */
812                 if (common->cmnd[1] & ~0x18) {
813                         curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
814                         return -EINVAL;
815                 }
816                 if (!curlun->nofua && (common->cmnd[1] & 0x08)) { /* FUA */
817                         spin_lock(&curlun->filp->f_lock);
818                         curlun->filp->f_flags |= O_SYNC;
819                         spin_unlock(&curlun->filp->f_lock);
820                 }
821         }
822         if (lba >= curlun->num_sectors) {
823                 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
824                 return -EINVAL;
825         }
826
827         /* Carry out the file writes */
828         get_some_more = 1;
829         file_offset = usb_offset = ((loff_t) lba) << curlun->blkbits;
830         amount_left_to_req = common->data_size_from_cmnd;
831         amount_left_to_write = common->data_size_from_cmnd;
832
833         while (amount_left_to_write > 0) {
834
835                 /* Queue a request for more data from the host */
836                 bh = common->next_buffhd_to_fill;
837                 if (bh->state == BUF_STATE_EMPTY && get_some_more) {
838
839                         /*
840                          * Figure out how much we want to get:
841                          * Try to get the remaining amount,
842                          * but not more than the buffer size.
843                          */
844                         amount = min(amount_left_to_req, FSG_BUFLEN);
845
846                         /* Beyond the end of the backing file? */
847                         if (usb_offset >= curlun->file_length) {
848                                 get_some_more = 0;
849                                 curlun->sense_data =
850                                         SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
851                                 curlun->sense_data_info =
852                                         usb_offset >> curlun->blkbits;
853                                 curlun->info_valid = 1;
854                                 continue;
855                         }
856
857                         /* Get the next buffer */
858                         usb_offset += amount;
859                         common->usb_amount_left -= amount;
860                         amount_left_to_req -= amount;
861                         if (amount_left_to_req == 0)
862                                 get_some_more = 0;
863
864                         /*
865                          * Except at the end of the transfer, amount will be
866                          * equal to the buffer size, which is divisible by
867                          * the bulk-out maxpacket size.
868                          */
869                         set_bulk_out_req_length(common, bh, amount);
870                         if (!start_out_transfer(common, bh))
871                                 /* Dunno what to do if common->fsg is NULL */
872                                 return -EIO;
873                         common->next_buffhd_to_fill = bh->next;
874                         continue;
875                 }
876
877                 /* Write the received data to the backing file */
878                 bh = common->next_buffhd_to_drain;
879                 if (bh->state == BUF_STATE_EMPTY && !get_some_more)
880                         break;                  /* We stopped early */
881                 if (bh->state == BUF_STATE_FULL) {
882                         smp_rmb();
883                         common->next_buffhd_to_drain = bh->next;
884                         bh->state = BUF_STATE_EMPTY;
885
886                         /* Did something go wrong with the transfer? */
887                         if (bh->outreq->status != 0) {
888                                 curlun->sense_data = SS_COMMUNICATION_FAILURE;
889                                 curlun->sense_data_info =
890                                         file_offset >> curlun->blkbits;
891                                 curlun->info_valid = 1;
892                                 break;
893                         }
894
895                         amount = bh->outreq->actual;
896                         if (curlun->file_length - file_offset < amount) {
897                                 LERROR(curlun,
898                                        "write %u @ %llu beyond end %llu\n",
899                                        amount, (unsigned long long)file_offset,
900                                        (unsigned long long)curlun->file_length);
901                                 amount = curlun->file_length - file_offset;
902                         }
903
904                         /* Don't accept excess data.  The spec doesn't say
905                          * what to do in this case.  We'll ignore the error.
906                          */
907                         amount = min(amount, bh->bulk_out_intended_length);
908
909                         /* Don't write a partial block */
910                         amount = round_down(amount, curlun->blksize);
911                         if (amount == 0)
912                                 goto empty_write;
913
914                         /* Perform the write */
915                         file_offset_tmp = file_offset;
916                         nwritten = vfs_write(curlun->filp,
917                                              (char __user *)bh->buf,
918                                              amount, &file_offset_tmp);
919                         VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
920                               (unsigned long long)file_offset, (int)nwritten);
921                         if (signal_pending(current))
922                                 return -EINTR;          /* Interrupted! */
923
924                         if (nwritten < 0) {
925                                 LDBG(curlun, "error in file write: %d\n",
926                                      (int)nwritten);
927                                 nwritten = 0;
928                         } else if (nwritten < amount) {
929                                 LDBG(curlun, "partial file write: %d/%u\n",
930                                      (int)nwritten, amount);
931                                 nwritten = round_down(nwritten, curlun->blksize);
932                         }
933                         file_offset += nwritten;
934                         amount_left_to_write -= nwritten;
935                         common->residue -= nwritten;
936
937                         /* If an error occurred, report it and its position */
938                         if (nwritten < amount) {
939                                 curlun->sense_data = SS_WRITE_ERROR;
940                                 curlun->sense_data_info =
941                                         file_offset >> curlun->blkbits;
942                                 curlun->info_valid = 1;
943                                 break;
944                         }
945
946  empty_write:
947                         /* Did the host decide to stop early? */
948                         if (bh->outreq->actual < bh->bulk_out_intended_length) {
949                                 common->short_packet_received = 1;
950                                 break;
951                         }
952                         continue;
953                 }
954
955                 /* Wait for something to happen */
956                 rc = sleep_thread(common);
957                 if (rc)
958                         return rc;
959         }
960
961         return -EIO;            /* No default reply */
962 }
963
964
965 /*-------------------------------------------------------------------------*/
966
967 static int do_synchronize_cache(struct fsg_common *common)
968 {
969         struct fsg_lun  *curlun = common->curlun;
970         int             rc;
971
972         /* We ignore the requested LBA and write out all file's
973          * dirty data buffers. */
974         rc = fsg_lun_fsync_sub(curlun);
975         if (rc)
976                 curlun->sense_data = SS_WRITE_ERROR;
977         return 0;
978 }
979
980
981 /*-------------------------------------------------------------------------*/
982
983 static void invalidate_sub(struct fsg_lun *curlun)
984 {
985         struct file     *filp = curlun->filp;
986         struct inode    *inode = file_inode(filp);
987         unsigned long   rc;
988
989         rc = invalidate_mapping_pages(inode->i_mapping, 0, -1);
990         VLDBG(curlun, "invalidate_mapping_pages -> %ld\n", rc);
991 }
992
993 static int do_verify(struct fsg_common *common)
994 {
995         struct fsg_lun          *curlun = common->curlun;
996         u32                     lba;
997         u32                     verification_length;
998         struct fsg_buffhd       *bh = common->next_buffhd_to_fill;
999         loff_t                  file_offset, file_offset_tmp;
1000         u32                     amount_left;
1001         unsigned int            amount;
1002         ssize_t                 nread;
1003
1004         /*
1005          * Get the starting Logical Block Address and check that it's
1006          * not too big.
1007          */
1008         lba = get_unaligned_be32(&common->cmnd[2]);
1009         if (lba >= curlun->num_sectors) {
1010                 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1011                 return -EINVAL;
1012         }
1013
1014         /*
1015          * We allow DPO (Disable Page Out = don't save data in the
1016          * cache) but we don't implement it.
1017          */
1018         if (common->cmnd[1] & ~0x10) {
1019                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1020                 return -EINVAL;
1021         }
1022
1023         verification_length = get_unaligned_be16(&common->cmnd[7]);
1024         if (unlikely(verification_length == 0))
1025                 return -EIO;            /* No default reply */
1026
1027         /* Prepare to carry out the file verify */
1028         amount_left = verification_length << curlun->blkbits;
1029         file_offset = ((loff_t) lba) << curlun->blkbits;
1030
1031         /* Write out all the dirty buffers before invalidating them */
1032         fsg_lun_fsync_sub(curlun);
1033         if (signal_pending(current))
1034                 return -EINTR;
1035
1036         invalidate_sub(curlun);
1037         if (signal_pending(current))
1038                 return -EINTR;
1039
1040         /* Just try to read the requested blocks */
1041         while (amount_left > 0) {
1042                 /*
1043                  * Figure out how much we need to read:
1044                  * Try to read the remaining amount, but not more than
1045                  * the buffer size.
1046                  * And don't try to read past the end of the file.
1047                  */
1048                 amount = min(amount_left, FSG_BUFLEN);
1049                 amount = min((loff_t)amount,
1050                              curlun->file_length - file_offset);
1051                 if (amount == 0) {
1052                         curlun->sense_data =
1053                                         SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1054                         curlun->sense_data_info =
1055                                 file_offset >> curlun->blkbits;
1056                         curlun->info_valid = 1;
1057                         break;
1058                 }
1059
1060                 /* Perform the read */
1061                 file_offset_tmp = file_offset;
1062                 nread = vfs_read(curlun->filp,
1063                                 (char __user *) bh->buf,
1064                                 amount, &file_offset_tmp);
1065                 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
1066                                 (unsigned long long) file_offset,
1067                                 (int) nread);
1068                 if (signal_pending(current))
1069                         return -EINTR;
1070
1071                 if (nread < 0) {
1072                         LDBG(curlun, "error in file verify: %d\n", (int)nread);
1073                         nread = 0;
1074                 } else if (nread < amount) {
1075                         LDBG(curlun, "partial file verify: %d/%u\n",
1076                              (int)nread, amount);
1077                         nread = round_down(nread, curlun->blksize);
1078                 }
1079                 if (nread == 0) {
1080                         curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
1081                         curlun->sense_data_info =
1082                                 file_offset >> curlun->blkbits;
1083                         curlun->info_valid = 1;
1084                         break;
1085                 }
1086                 file_offset += nread;
1087                 amount_left -= nread;
1088         }
1089         return 0;
1090 }
1091
1092
1093 /*-------------------------------------------------------------------------*/
1094
1095 static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
1096 {
1097         struct fsg_lun *curlun = common->curlun;
1098         u8      *buf = (u8 *) bh->buf;
1099
1100         if (!curlun) {          /* Unsupported LUNs are okay */
1101                 common->bad_lun_okay = 1;
1102                 memset(buf, 0, 36);
1103                 buf[0] = 0x7f;          /* Unsupported, no device-type */
1104                 buf[4] = 31;            /* Additional length */
1105                 return 36;
1106         }
1107
1108         buf[0] = curlun->cdrom ? TYPE_ROM : TYPE_DISK;
1109         buf[1] = curlun->removable ? 0x80 : 0;
1110         buf[2] = 2;             /* ANSI SCSI level 2 */
1111         buf[3] = 2;             /* SCSI-2 INQUIRY data format */
1112         buf[4] = 31;            /* Additional length */
1113         buf[5] = 0;             /* No special options */
1114         buf[6] = 0;
1115         buf[7] = 0;
1116         memcpy(buf + 8, common->inquiry_string, sizeof common->inquiry_string);
1117         return 36;
1118 }
1119
1120 static int do_request_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1121 {
1122         struct fsg_lun  *curlun = common->curlun;
1123         u8              *buf = (u8 *) bh->buf;
1124         u32             sd, sdinfo;
1125         int             valid;
1126
1127         /*
1128          * From the SCSI-2 spec., section 7.9 (Unit attention condition):
1129          *
1130          * If a REQUEST SENSE command is received from an initiator
1131          * with a pending unit attention condition (before the target
1132          * generates the contingent allegiance condition), then the
1133          * target shall either:
1134          *   a) report any pending sense data and preserve the unit
1135          *      attention condition on the logical unit, or,
1136          *   b) report the unit attention condition, may discard any
1137          *      pending sense data, and clear the unit attention
1138          *      condition on the logical unit for that initiator.
1139          *
1140          * FSG normally uses option a); enable this code to use option b).
1141          */
1142 #if 0
1143         if (curlun && curlun->unit_attention_data != SS_NO_SENSE) {
1144                 curlun->sense_data = curlun->unit_attention_data;
1145                 curlun->unit_attention_data = SS_NO_SENSE;
1146         }
1147 #endif
1148
1149         if (!curlun) {          /* Unsupported LUNs are okay */
1150                 common->bad_lun_okay = 1;
1151                 sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
1152                 sdinfo = 0;
1153                 valid = 0;
1154         } else {
1155                 sd = curlun->sense_data;
1156                 sdinfo = curlun->sense_data_info;
1157                 valid = curlun->info_valid << 7;
1158                 curlun->sense_data = SS_NO_SENSE;
1159                 curlun->sense_data_info = 0;
1160                 curlun->info_valid = 0;
1161         }
1162
1163         memset(buf, 0, 18);
1164         buf[0] = valid | 0x70;                  /* Valid, current error */
1165         buf[2] = SK(sd);
1166         put_unaligned_be32(sdinfo, &buf[3]);    /* Sense information */
1167         buf[7] = 18 - 8;                        /* Additional sense length */
1168         buf[12] = ASC(sd);
1169         buf[13] = ASCQ(sd);
1170         return 18;
1171 }
1172
1173 static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh)
1174 {
1175         struct fsg_lun  *curlun = common->curlun;
1176         u32             lba = get_unaligned_be32(&common->cmnd[2]);
1177         int             pmi = common->cmnd[8];
1178         u8              *buf = (u8 *)bh->buf;
1179
1180         /* Check the PMI and LBA fields */
1181         if (pmi > 1 || (pmi == 0 && lba != 0)) {
1182                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1183                 return -EINVAL;
1184         }
1185
1186         put_unaligned_be32(curlun->num_sectors - 1, &buf[0]);
1187                                                 /* Max logical block */
1188         put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */
1189         return 8;
1190 }
1191
1192 static int do_read_header(struct fsg_common *common, struct fsg_buffhd *bh)
1193 {
1194         struct fsg_lun  *curlun = common->curlun;
1195         int             msf = common->cmnd[1] & 0x02;
1196         u32             lba = get_unaligned_be32(&common->cmnd[2]);
1197         u8              *buf = (u8 *)bh->buf;
1198
1199         if (common->cmnd[1] & ~0x02) {          /* Mask away MSF */
1200                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1201                 return -EINVAL;
1202         }
1203         if (lba >= curlun->num_sectors) {
1204                 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1205                 return -EINVAL;
1206         }
1207
1208         memset(buf, 0, 8);
1209         buf[0] = 0x01;          /* 2048 bytes of user data, rest is EC */
1210         store_cdrom_address(&buf[4], msf, lba);
1211         return 8;
1212 }
1213
1214 static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
1215 {
1216         struct fsg_lun  *curlun = common->curlun;
1217         int             msf = common->cmnd[1] & 0x02;
1218         int             start_track = common->cmnd[6];
1219         u8              *buf = (u8 *)bh->buf;
1220 #ifdef CONFIG_USB_SPRD_DWC
1221         // Seen in MMC5RC01 6.32 READ TOC/PMA/ATIP Command
1222         u8 toc_response_data1[] = {
1223                 0x00, 0x12, 0x01, 0x01, 0x00, 0x14, 0x01, 0x00,
1224                 0x00, 0x00, 0x00, 0x00
1225         };
1226         u8 toc_response_data2[] = {
1227                 0x00, 0x2e, 0x01, 0x01, 0x01, 0x14, 0x00, 0xa0,
1228                 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
1229                 0x14, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01,
1230                 0x00, 0x00, 0x01, 0x14, 0x00, 0xa2, 0x00, 0x00,
1231                 0x00, 0x00, 0x09, 0x0c, 0x94, 0x14, 0xf2, 0x00,
1232                 0xa8, 0x14, 0xf2, 0x00, 0xbc, 0x14, 0xf2, 0x00
1233         };
1234         u8 toc_response_data3[] = {
1235                 0x00, 0x2e, 0x01, 0x01, 0x01, 0x14, 0x00, 0xa0,
1236                 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01,
1237                 0x14, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x01,
1238                 0x00, 0x00, 0x01, 0x14, 0x00, 0xa2, 0x00, 0x00,
1239                 0x00, 0x00, 0x09, 0x0c, 0x94, 0x14, 0xf2, 0x00,
1240                 0xa8, 0x14, 0xf2, 0x00, 0xbc, 0x14, 0xf2, 0x00,
1241                 0xd0, 0x14, 0xf2, 0x00, 0xe4, 0x14, 0xf2, 0x00,
1242                 0x12, 0x00, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00,
1243                 0x12, 0x00, 0x34, 0x35, 0x33, 0x32, 0x33, 0x32,
1244                 0x33, 0x38, 0x00, 0x00, 0xf0, 0x00, 0x05, 0x00,
1245                 0x00, 0x00, 0x00, 0x0a
1246         };
1247         int rc = 0;
1248         u8* data;
1249         if(common->data_size_from_cmnd == 0xc){
1250                 rc = sizeof toc_response_data1;
1251                 data = toc_response_data1;
1252         }else if(msf == 0x1){
1253                 rc = sizeof toc_response_data2;
1254                 data = toc_response_data2;
1255         }else{
1256                 rc = sizeof toc_response_data3;
1257                 data = toc_response_data3;
1258         }
1259         rc = rc < common->data_size_from_cmnd ? rc : common->data_size_from_cmnd;
1260         memcpy(buf, data, rc);
1261         return rc;
1262
1263 #else
1264         if ((common->cmnd[1] & ~0x02) != 0 ||   /* Mask away MSF */
1265                         start_track > 1) {
1266                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1267                 return -EINVAL;
1268         }
1269
1270         memset(buf, 0, 20);
1271         buf[1] = (20-2);                /* TOC data length */
1272         buf[2] = 1;                     /* First track number */
1273         buf[3] = 1;                     /* Last track number */
1274         buf[5] = 0x16;                  /* Data track, copying allowed */
1275         buf[6] = 0x01;                  /* Only track is number 1 */
1276         store_cdrom_address(&buf[8], msf, 0);
1277
1278         buf[13] = 0x16;                 /* Lead-out track is data */
1279         buf[14] = 0xAA;                 /* Lead-out track number */
1280         store_cdrom_address(&buf[16], msf, curlun->num_sectors);
1281         return 20;
1282
1283 #endif
1284 }
1285
1286 static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1287 {
1288         struct fsg_lun  *curlun = common->curlun;
1289         int             mscmnd = common->cmnd[0];
1290         u8              *buf = (u8 *) bh->buf;
1291         u8              *buf0 = buf;
1292         int             pc, page_code;
1293         int             changeable_values, all_pages;
1294         int             valid_page = 0;
1295         int             len, limit;
1296
1297         if ((common->cmnd[1] & ~0x08) != 0) {   /* Mask away DBD */
1298                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1299                 return -EINVAL;
1300         }
1301         pc = common->cmnd[2] >> 6;
1302         page_code = common->cmnd[2] & 0x3f;
1303         if (pc == 3) {
1304                 curlun->sense_data = SS_SAVING_PARAMETERS_NOT_SUPPORTED;
1305                 return -EINVAL;
1306         }
1307         changeable_values = (pc == 1);
1308         all_pages = (page_code == 0x3f);
1309
1310         /*
1311          * Write the mode parameter header.  Fixed values are: default
1312          * medium type, no cache control (DPOFUA), and no block descriptors.
1313          * The only variable value is the WriteProtect bit.  We will fill in
1314          * the mode data length later.
1315          */
1316         memset(buf, 0, 8);
1317         if (mscmnd == MODE_SENSE) {
1318                 buf[2] = (curlun->ro ? 0x80 : 0x00);            /* WP, DPOFUA */
1319                 buf += 4;
1320                 limit = 255;
1321         } else {                        /* MODE_SENSE_10 */
1322                 buf[3] = (curlun->ro ? 0x80 : 0x00);            /* WP, DPOFUA */
1323                 buf += 8;
1324                 limit = 65535;          /* Should really be FSG_BUFLEN */
1325         }
1326
1327         /* No block descriptors */
1328
1329         /*
1330          * The mode pages, in numerical order.  The only page we support
1331          * is the Caching page.
1332          */
1333         if (page_code == 0x08 || all_pages) {
1334                 valid_page = 1;
1335                 buf[0] = 0x08;          /* Page code */
1336                 buf[1] = 10;            /* Page length */
1337                 memset(buf+2, 0, 10);   /* None of the fields are changeable */
1338
1339                 if (!changeable_values) {
1340                         buf[2] = 0x04;  /* Write cache enable, */
1341                                         /* Read cache not disabled */
1342                                         /* No cache retention priorities */
1343                         put_unaligned_be16(0xffff, &buf[4]);
1344                                         /* Don't disable prefetch */
1345                                         /* Minimum prefetch = 0 */
1346                         put_unaligned_be16(0xffff, &buf[8]);
1347                                         /* Maximum prefetch */
1348                         put_unaligned_be16(0xffff, &buf[10]);
1349                                         /* Maximum prefetch ceiling */
1350                 }
1351                 buf += 12;
1352         }
1353
1354         /*
1355          * Check that a valid page was requested and the mode data length
1356          * isn't too long.
1357          */
1358         len = buf - buf0;
1359         if (!valid_page || len > limit) {
1360                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1361                 return -EINVAL;
1362         }
1363
1364         /*  Store the mode data length */
1365         if (mscmnd == MODE_SENSE)
1366                 buf0[0] = len - 1;
1367         else
1368                 put_unaligned_be16(len - 2, buf0);
1369         return len;
1370 }
1371
1372 static int do_start_stop(struct fsg_common *common)
1373 {
1374         struct fsg_lun  *curlun = common->curlun;
1375         int             loej, start;
1376
1377         if (!curlun) {
1378                 return -EINVAL;
1379         } else if (!curlun->removable) {
1380                 curlun->sense_data = SS_INVALID_COMMAND;
1381                 return -EINVAL;
1382         } else if ((common->cmnd[1] & ~0x01) != 0 || /* Mask away Immed */
1383                    (common->cmnd[4] & ~0x03) != 0) { /* Mask LoEj, Start */
1384                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1385                 return -EINVAL;
1386         }
1387
1388         loej  = common->cmnd[4] & 0x02;
1389         start = common->cmnd[4] & 0x01;
1390
1391         /*
1392          * Our emulation doesn't support mounting; the medium is
1393          * available for use as soon as it is loaded.
1394          */
1395         if (start) {
1396                 if (!fsg_lun_is_open(curlun)) {
1397                         curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
1398                         return -EINVAL;
1399                 }
1400                 return 0;
1401         }
1402
1403         /* Are we allowed to unload the media? */
1404         if (curlun->prevent_medium_removal) {
1405                 LDBG(curlun, "unload attempt prevented\n");
1406                 curlun->sense_data = SS_MEDIUM_REMOVAL_PREVENTED;
1407                 return -EINVAL;
1408         }
1409
1410         if (!loej)
1411                 return 0;
1412
1413         up_read(&common->filesem);
1414         down_write(&common->filesem);
1415         fsg_lun_close(curlun);
1416         up_write(&common->filesem);
1417         down_read(&common->filesem);
1418
1419         return 0;
1420 }
1421
1422 static int do_prevent_allow(struct fsg_common *common)
1423 {
1424         struct fsg_lun  *curlun = common->curlun;
1425         int             prevent;
1426
1427         if (!common->curlun) {
1428                 return -EINVAL;
1429         } else if (!common->curlun->removable) {
1430                 common->curlun->sense_data = SS_INVALID_COMMAND;
1431                 return -EINVAL;
1432         }
1433
1434         prevent = common->cmnd[4] & 0x01;
1435         if ((common->cmnd[4] & ~0x01) != 0) {   /* Mask away Prevent */
1436                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1437                 return -EINVAL;
1438         }
1439
1440         if (!curlun->nofua && curlun->prevent_medium_removal && !prevent)
1441                 fsg_lun_fsync_sub(curlun);
1442         else
1443                 schedule_work(&common->fsync_work);
1444
1445         curlun->prevent_medium_removal = prevent;
1446         return 0;
1447 }
1448
1449 static void do_fsync(struct work_struct *work)
1450 {
1451         struct fsg_common *common =
1452                 container_of(work, struct fsg_common, fsync_work);
1453
1454         struct file     *filp = common->curlun->filp;
1455         static int syncing = 0;
1456
1457         if (common->curlun->ro || !filp)
1458                 return;
1459
1460         if(!syncing) {
1461                 syncing = 1;
1462                 printk("ums sync 1\n");
1463                 vfs_fsync(filp, 1);
1464                 printk("ums sync 0\n");
1465                 syncing = 0;
1466         }
1467 }
1468
1469 static int do_read_format_capacities(struct fsg_common *common,
1470                         struct fsg_buffhd *bh)
1471 {
1472         struct fsg_lun  *curlun = common->curlun;
1473         u8              *buf = (u8 *) bh->buf;
1474
1475         buf[0] = buf[1] = buf[2] = 0;
1476         buf[3] = 8;     /* Only the Current/Maximum Capacity Descriptor */
1477         buf += 4;
1478
1479         put_unaligned_be32(curlun->num_sectors, &buf[0]);
1480                                                 /* Number of blocks */
1481         put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */
1482         buf[4] = 0x02;                          /* Current capacity */
1483         return 12;
1484 }
1485
1486 static int do_mode_select(struct fsg_common *common, struct fsg_buffhd *bh)
1487 {
1488         struct fsg_lun  *curlun = common->curlun;
1489
1490         /* We don't support MODE SELECT */
1491         if (curlun)
1492                 curlun->sense_data = SS_INVALID_COMMAND;
1493         return -EINVAL;
1494 }
1495
1496
1497 /*-------------------------------------------------------------------------*/
1498
1499 static int halt_bulk_in_endpoint(struct fsg_dev *fsg)
1500 {
1501         int     rc;
1502
1503         rc = fsg_set_halt(fsg, fsg->bulk_in);
1504         if (rc == -EAGAIN)
1505                 VDBG(fsg, "delayed bulk-in endpoint halt\n");
1506         while (rc != 0) {
1507                 if (rc != -EAGAIN) {
1508                         WARNING(fsg, "usb_ep_set_halt -> %d\n", rc);
1509                         rc = 0;
1510                         break;
1511                 }
1512
1513                 /* Wait for a short time and then try again */
1514                 if (msleep_interruptible(100) != 0)
1515                         return -EINTR;
1516                 rc = usb_ep_set_halt(fsg->bulk_in);
1517         }
1518         return rc;
1519 }
1520
1521 static int wedge_bulk_in_endpoint(struct fsg_dev *fsg)
1522 {
1523         int     rc;
1524
1525         DBG(fsg, "bulk-in set wedge\n");
1526         rc = usb_ep_set_wedge(fsg->bulk_in);
1527         if (rc == -EAGAIN)
1528                 VDBG(fsg, "delayed bulk-in endpoint wedge\n");
1529         while (rc != 0) {
1530                 if (rc != -EAGAIN) {
1531                         WARNING(fsg, "usb_ep_set_wedge -> %d\n", rc);
1532                         rc = 0;
1533                         break;
1534                 }
1535
1536                 /* Wait for a short time and then try again */
1537                 if (msleep_interruptible(100) != 0)
1538                         return -EINTR;
1539                 rc = usb_ep_set_wedge(fsg->bulk_in);
1540         }
1541         return rc;
1542 }
1543
1544 static int throw_away_data(struct fsg_common *common)
1545 {
1546         struct fsg_buffhd       *bh;
1547         u32                     amount;
1548         int                     rc;
1549
1550         for (bh = common->next_buffhd_to_drain;
1551              bh->state != BUF_STATE_EMPTY || common->usb_amount_left > 0;
1552              bh = common->next_buffhd_to_drain) {
1553
1554                 /* Throw away the data in a filled buffer */
1555                 if (bh->state == BUF_STATE_FULL) {
1556                         smp_rmb();
1557                         bh->state = BUF_STATE_EMPTY;
1558                         common->next_buffhd_to_drain = bh->next;
1559
1560                         /* A short packet or an error ends everything */
1561                         if (bh->outreq->actual < bh->bulk_out_intended_length ||
1562                             bh->outreq->status != 0) {
1563                                 raise_exception(common,
1564                                                 FSG_STATE_ABORT_BULK_OUT);
1565                                 return -EINTR;
1566                         }
1567                         continue;
1568                 }
1569
1570                 /* Try to submit another request if we need one */
1571                 bh = common->next_buffhd_to_fill;
1572                 if (bh->state == BUF_STATE_EMPTY
1573                  && common->usb_amount_left > 0) {
1574                         amount = min(common->usb_amount_left, FSG_BUFLEN);
1575
1576                         /*
1577                          * Except at the end of the transfer, amount will be
1578                          * equal to the buffer size, which is divisible by
1579                          * the bulk-out maxpacket size.
1580                          */
1581                         set_bulk_out_req_length(common, bh, amount);
1582                         if (!start_out_transfer(common, bh))
1583                                 /* Dunno what to do if common->fsg is NULL */
1584                                 return -EIO;
1585                         common->next_buffhd_to_fill = bh->next;
1586                         common->usb_amount_left -= amount;
1587                         continue;
1588                 }
1589
1590                 /* Otherwise wait for something to happen */
1591                 rc = sleep_thread(common);
1592                 if (rc)
1593                         return rc;
1594         }
1595         return 0;
1596 }
1597
1598 static int finish_reply(struct fsg_common *common)
1599 {
1600         struct fsg_buffhd       *bh = common->next_buffhd_to_fill;
1601         int                     rc = 0;
1602
1603         switch (common->data_dir) {
1604         case DATA_DIR_NONE:
1605                 break;                  /* Nothing to send */
1606
1607         /*
1608          * If we don't know whether the host wants to read or write,
1609          * this must be CB or CBI with an unknown command.  We mustn't
1610          * try to send or receive any data.  So stall both bulk pipes
1611          * if we can and wait for a reset.
1612          */
1613         case DATA_DIR_UNKNOWN:
1614                 if (!common->can_stall) {
1615                         /* Nothing */
1616                 } else if (fsg_is_set(common)) {
1617                         fsg_set_halt(common->fsg, common->fsg->bulk_out);
1618                         rc = halt_bulk_in_endpoint(common->fsg);
1619                 } else {
1620                         /* Don't know what to do if common->fsg is NULL */
1621                         rc = -EIO;
1622                 }
1623                 break;
1624
1625         /* All but the last buffer of data must have already been sent */
1626         case DATA_DIR_TO_HOST:
1627                 if (common->data_size == 0) {
1628                         /* Nothing to send */
1629
1630                 /* Don't know what to do if common->fsg is NULL */
1631                 } else if (!fsg_is_set(common)) {
1632                         rc = -EIO;
1633
1634                 /* If there's no residue, simply send the last buffer */
1635                 } else if (common->residue == 0) {
1636                         bh->inreq->zero = 0;
1637                         if (!start_in_transfer(common, bh))
1638                                 return -EIO;
1639                         common->next_buffhd_to_fill = bh->next;
1640
1641                 /*
1642                  * For Bulk-only, mark the end of the data with a short
1643                  * packet.  If we are allowed to stall, halt the bulk-in
1644                  * endpoint.  (Note: This violates the Bulk-Only Transport
1645                  * specification, which requires us to pad the data if we
1646                  * don't halt the endpoint.  Presumably nobody will mind.)
1647                  */
1648                 } else {
1649                         bh->inreq->zero = 1;
1650 #ifdef CONFIG_USB_SPRD_DWC
1651                         if (common->curlun->sense_data && common->can_stall 
1652                                 && common->cmnd[0] != INQUIRY && common->cmnd[0] != REQUEST_SENSE){
1653                                 rc = halt_bulk_in_endpoint(common->fsg);
1654                                 bh->inreq_busy = 0;
1655                                 bh->state = BUF_STATE_EMPTY;
1656                                 common->next_buffhd_to_fill = bh->next;
1657                                 common->state = FSG_STATE_IDLE;
1658                                 return 0;
1659                         }
1660 #endif
1661                         if (!start_in_transfer(common, bh))
1662                                 rc = -EIO;
1663                         common->next_buffhd_to_fill = bh->next;
1664                         if (common->can_stall)
1665                                 rc = halt_bulk_in_endpoint(common->fsg);
1666                 }
1667                 break;
1668
1669         /*
1670          * We have processed all we want from the data the host has sent.
1671          * There may still be outstanding bulk-out requests.
1672          */
1673         case DATA_DIR_FROM_HOST:
1674                 if (common->residue == 0) {
1675                         /* Nothing to receive */
1676
1677                 /* Did the host stop sending unexpectedly early? */
1678                 } else if (common->short_packet_received) {
1679                         raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1680                         rc = -EINTR;
1681
1682                 /*
1683                  * We haven't processed all the incoming data.  Even though
1684                  * we may be allowed to stall, doing so would cause a race.
1685                  * The controller may already have ACK'ed all the remaining
1686                  * bulk-out packets, in which case the host wouldn't see a
1687                  * STALL.  Not realizing the endpoint was halted, it wouldn't
1688                  * clear the halt -- leading to problems later on.
1689                  */
1690 #if 0
1691                 } else if (common->can_stall) {
1692                         if (fsg_is_set(common))
1693                                 fsg_set_halt(common->fsg,
1694                                              common->fsg->bulk_out);
1695                         raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1696                         rc = -EINTR;
1697 #endif
1698
1699                 /*
1700                  * We can't stall.  Read in the excess data and throw it
1701                  * all away.
1702                  */
1703                 } else {
1704                         rc = throw_away_data(common);
1705                 }
1706                 break;
1707         }
1708         return rc;
1709 }
1710
1711 static int send_status(struct fsg_common *common)
1712 {
1713         struct fsg_lun          *curlun = common->curlun;
1714         struct fsg_buffhd       *bh;
1715         struct bulk_cs_wrap     *csw;
1716         int                     rc;
1717         u8                      status = US_BULK_STAT_OK;
1718         u32                     sd, sdinfo = 0;
1719
1720         /* Wait for the next buffer to become available */
1721         bh = common->next_buffhd_to_fill;
1722         while (bh->state != BUF_STATE_EMPTY) {
1723                 rc = sleep_thread(common);
1724                 if (rc)
1725                         return rc;
1726         }
1727
1728         if (curlun) {
1729                 sd = curlun->sense_data;
1730                 sdinfo = curlun->sense_data_info;
1731         } else if (common->bad_lun_okay)
1732                 sd = SS_NO_SENSE;
1733         else
1734                 sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
1735
1736         if (common->phase_error) {
1737                 DBG(common, "sending phase-error status\n");
1738                 status = US_BULK_STAT_PHASE;
1739                 sd = SS_INVALID_COMMAND;
1740         } else if (sd != SS_NO_SENSE) {
1741                 DBG(common, "sending command-failure status\n");
1742                 status = US_BULK_STAT_FAIL;
1743                 VDBG(common, "  sense data: SK x%02x, ASC x%02x, ASCQ x%02x;"
1744                                 "  info x%x\n",
1745                                 SK(sd), ASC(sd), ASCQ(sd), sdinfo);
1746         }
1747
1748         /* Store and send the Bulk-only CSW */
1749         csw = (void *)bh->buf;
1750
1751         csw->Signature = cpu_to_le32(US_BULK_CS_SIGN);
1752         csw->Tag = common->tag;
1753         csw->Residue = cpu_to_le32(common->residue);
1754         csw->Status = status;
1755
1756         bh->inreq->length = US_BULK_CS_WRAP_LEN;
1757         bh->inreq->zero = 0;
1758         if (!start_in_transfer(common, bh))
1759                 /* Don't know what to do if common->fsg is NULL */
1760                 return -EIO;
1761
1762         common->next_buffhd_to_fill = bh->next;
1763         return 0;
1764 }
1765
1766
1767 /*-------------------------------------------------------------------------*/
1768
1769 /*
1770  * Check whether the command is properly formed and whether its data size
1771  * and direction agree with the values we already have.
1772  */
1773 static int check_command(struct fsg_common *common, int cmnd_size,
1774                          enum data_direction data_dir, unsigned int mask,
1775                          int needs_medium, const char *name)
1776 {
1777         int                     i;
1778         unsigned int            lun = common->cmnd[1] >> 5;
1779         static const char       dirletter[4] = {'u', 'o', 'i', 'n'};
1780         char                    hdlen[20];
1781         struct fsg_lun          *curlun;
1782
1783         hdlen[0] = 0;
1784         if (common->data_dir != DATA_DIR_UNKNOWN)
1785                 sprintf(hdlen, ", H%c=%u", dirletter[(int) common->data_dir],
1786                         common->data_size);
1787         VDBG(common, "SCSI command: %s;  Dc=%d, D%c=%u;  Hc=%d%s\n",
1788              name, cmnd_size, dirletter[(int) data_dir],
1789              common->data_size_from_cmnd, common->cmnd_size, hdlen);
1790
1791         /*
1792          * We can't reply at all until we know the correct data direction
1793          * and size.
1794          */
1795         if (common->data_size_from_cmnd == 0)
1796                 data_dir = DATA_DIR_NONE;
1797         if (common->data_size < common->data_size_from_cmnd) {
1798                 /*
1799                  * Host data size < Device data size is a phase error.
1800                  * Carry out the command, but only transfer as much as
1801                  * we are allowed.
1802                  */
1803                 common->data_size_from_cmnd = common->data_size;
1804                 common->phase_error = 1;
1805         }
1806         common->residue = common->data_size;
1807         common->usb_amount_left = common->data_size;
1808
1809         /* Conflicting data directions is a phase error */
1810         if (common->data_dir != data_dir && common->data_size_from_cmnd > 0) {
1811                 common->phase_error = 1;
1812                 return -EINVAL;
1813         }
1814
1815         /* Verify the length of the command itself */
1816         if (cmnd_size != common->cmnd_size) {
1817
1818                 /*
1819                  * Special case workaround: There are plenty of buggy SCSI
1820                  * implementations. Many have issues with cbw->Length
1821                  * field passing a wrong command size. For those cases we
1822                  * always try to work around the problem by using the length
1823                  * sent by the host side provided it is at least as large
1824                  * as the correct command length.
1825                  * Examples of such cases would be MS-Windows, which issues
1826                  * REQUEST SENSE with cbw->Length == 12 where it should
1827                  * be 6, and xbox360 issuing INQUIRY, TEST UNIT READY and
1828                  * REQUEST SENSE with cbw->Length == 10 where it should
1829                  * be 6 as well.
1830                  */
1831                 if (cmnd_size <= common->cmnd_size) {
1832                         DBG(common, "%s is buggy! Expected length %d "
1833                             "but we got %d\n", name,
1834                             cmnd_size, common->cmnd_size);
1835                         cmnd_size = common->cmnd_size;
1836                 } else {
1837                         common->phase_error = 1;
1838                         return -EINVAL;
1839                 }
1840         }
1841
1842         /* Check that the LUN values are consistent */
1843         if (common->lun != lun)
1844                 DBG(common, "using LUN %u from CBW, not LUN %u from CDB\n",
1845                     common->lun, lun);
1846
1847         /* Check the LUN */
1848         curlun = common->curlun;
1849         if (curlun) {
1850                 if (common->cmnd[0] != REQUEST_SENSE) {
1851                         curlun->sense_data = SS_NO_SENSE;
1852                         curlun->sense_data_info = 0;
1853                         curlun->info_valid = 0;
1854                 }
1855         } else {
1856                 common->bad_lun_okay = 0;
1857
1858                 /*
1859                  * INQUIRY and REQUEST SENSE commands are explicitly allowed
1860                  * to use unsupported LUNs; all others may not.
1861                  */
1862                 if (common->cmnd[0] != INQUIRY &&
1863                     common->cmnd[0] != REQUEST_SENSE) {
1864                         DBG(common, "unsupported LUN %u\n", common->lun);
1865                         return -EINVAL;
1866                 }
1867         }
1868
1869         /*
1870          * If a unit attention condition exists, only INQUIRY and
1871          * REQUEST SENSE commands are allowed; anything else must fail.
1872          */
1873         if (curlun && curlun->unit_attention_data != SS_NO_SENSE &&
1874             common->cmnd[0] != INQUIRY &&
1875             common->cmnd[0] != REQUEST_SENSE) {
1876                 curlun->sense_data = curlun->unit_attention_data;
1877                 curlun->unit_attention_data = SS_NO_SENSE;
1878                 return -EINVAL;
1879         }
1880
1881         /* Check that only command bytes listed in the mask are non-zero */
1882         common->cmnd[1] &= 0x1f;                        /* Mask away the LUN */
1883         for (i = 1; i < cmnd_size; ++i) {
1884                 if (common->cmnd[i] && !(mask & (1 << i))) {
1885                         if (curlun)
1886                                 curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
1887                         return -EINVAL;
1888                 }
1889         }
1890
1891         /* If the medium isn't mounted and the command needs to access
1892          * it, return an error. */
1893         if (curlun && !fsg_lun_is_open(curlun) && needs_medium) {
1894                 curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
1895                 return -EINVAL;
1896         }
1897
1898         return 0;
1899 }
1900
1901 /* wrapper of check_command for data size in blocks handling */
1902 static int check_command_size_in_blocks(struct fsg_common *common,
1903                 int cmnd_size, enum data_direction data_dir,
1904                 unsigned int mask, int needs_medium, const char *name)
1905 {
1906         if (common->curlun)
1907                 common->data_size_from_cmnd <<= common->curlun->blkbits;
1908         return check_command(common, cmnd_size, data_dir,
1909                         mask, needs_medium, name);
1910 }
1911
1912 static int do_scsi_command(struct fsg_common *common)
1913 {
1914         struct fsg_buffhd       *bh;
1915         int                     rc;
1916         int                     reply = -EINVAL;
1917         int                     i;
1918         static char             unknown[16];
1919
1920         dump_cdb(common);
1921
1922         /* Wait for the next buffer to become available for data or status */
1923         bh = common->next_buffhd_to_fill;
1924         common->next_buffhd_to_drain = bh;
1925         while (bh->state != BUF_STATE_EMPTY) {
1926                 rc = sleep_thread(common);
1927                 if (rc)
1928                         return rc;
1929         }
1930         common->phase_error = 0;
1931         common->short_packet_received = 0;
1932
1933         down_read(&common->filesem);    /* We're using the backing file */
1934         switch (common->cmnd[0]) {
1935
1936         case INQUIRY:
1937                 common->data_size_from_cmnd = common->cmnd[4];
1938                 reply = check_command(common, 6, DATA_DIR_TO_HOST,
1939                                       (1<<4), 0,
1940                                       "INQUIRY");
1941                 if (reply == 0)
1942                         reply = do_inquiry(common, bh);
1943                 break;
1944
1945         case MODE_SELECT:
1946                 common->data_size_from_cmnd = common->cmnd[4];
1947                 reply = check_command(common, 6, DATA_DIR_FROM_HOST,
1948                                       (1<<1) | (1<<4), 0,
1949                                       "MODE SELECT(6)");
1950                 if (reply == 0)
1951                         reply = do_mode_select(common, bh);
1952                 break;
1953
1954         case MODE_SELECT_10:
1955                 common->data_size_from_cmnd =
1956                         get_unaligned_be16(&common->cmnd[7]);
1957                 reply = check_command(common, 10, DATA_DIR_FROM_HOST,
1958                                       (1<<1) | (3<<7), 0,
1959                                       "MODE SELECT(10)");
1960                 if (reply == 0)
1961                         reply = do_mode_select(common, bh);
1962                 break;
1963
1964         case MODE_SENSE:
1965                 common->data_size_from_cmnd = common->cmnd[4];
1966                 reply = check_command(common, 6, DATA_DIR_TO_HOST,
1967                                       (1<<1) | (1<<2) | (1<<4), 0,
1968                                       "MODE SENSE(6)");
1969                 if (reply == 0)
1970                         reply = do_mode_sense(common, bh);
1971                 break;
1972
1973         case MODE_SENSE_10:
1974                 common->data_size_from_cmnd =
1975                         get_unaligned_be16(&common->cmnd[7]);
1976                 reply = check_command(common, 10, DATA_DIR_TO_HOST,
1977                                       (1<<1) | (1<<2) | (3<<7), 0,
1978                                       "MODE SENSE(10)");
1979                 if (reply == 0)
1980                         reply = do_mode_sense(common, bh);
1981                 break;
1982
1983         case ALLOW_MEDIUM_REMOVAL:
1984                 common->data_size_from_cmnd = 0;
1985                 reply = check_command(common, 6, DATA_DIR_NONE,
1986                                       (1<<4), 0,
1987                                       "PREVENT-ALLOW MEDIUM REMOVAL");
1988                 if (reply == 0)
1989                         reply = do_prevent_allow(common);
1990                 break;
1991
1992         case READ_6:
1993                 i = common->cmnd[4];
1994                 common->data_size_from_cmnd = (i == 0) ? 256 : i;
1995                 reply = check_command_size_in_blocks(common, 6,
1996                                       DATA_DIR_TO_HOST,
1997                                       (7<<1) | (1<<4), 1,
1998                                       "READ(6)");
1999                 if (reply == 0)
2000                         reply = do_read(common);
2001                 break;
2002
2003         case READ_10:
2004                 common->data_size_from_cmnd =
2005                                 get_unaligned_be16(&common->cmnd[7]);
2006                 reply = check_command_size_in_blocks(common, 10,
2007                                       DATA_DIR_TO_HOST,
2008                                       (1<<1) | (0xf<<2) | (3<<7), 1,
2009                                       "READ(10)");
2010                 if (reply == 0)
2011                         reply = do_read(common);
2012                 break;
2013
2014         case READ_12:
2015                 common->data_size_from_cmnd =
2016                                 get_unaligned_be32(&common->cmnd[6]);
2017                 reply = check_command_size_in_blocks(common, 12,
2018                                       DATA_DIR_TO_HOST,
2019                                       (1<<1) | (0xf<<2) | (0xf<<6), 1,
2020                                       "READ(12)");
2021                 if (reply == 0)
2022                         reply = do_read(common);
2023                 break;
2024
2025         case READ_CAPACITY:
2026                 common->data_size_from_cmnd = 8;
2027                 reply = check_command(common, 10, DATA_DIR_TO_HOST,
2028                                       (0xf<<2) | (1<<8), 1,
2029                                       "READ CAPACITY");
2030                 if (reply == 0)
2031                         reply = do_read_capacity(common, bh);
2032                 break;
2033
2034         case READ_HEADER:
2035                 if (!common->curlun || !common->curlun->cdrom)
2036                         goto unknown_cmnd;
2037                 common->data_size_from_cmnd =
2038                         get_unaligned_be16(&common->cmnd[7]);
2039                 reply = check_command(common, 10, DATA_DIR_TO_HOST,
2040                                       (3<<7) | (0x1f<<1), 1,
2041                                       "READ HEADER");
2042                 if (reply == 0)
2043                         reply = do_read_header(common, bh);
2044                 break;
2045
2046         case READ_TOC:
2047                 if (!common->curlun || !common->curlun->cdrom)
2048                         goto unknown_cmnd;
2049                 common->data_size_from_cmnd =
2050                         get_unaligned_be16(&common->cmnd[7]);
2051                 reply = check_command(common, 10, DATA_DIR_TO_HOST,
2052                                       (0xf<<6) | (3<<1), 1,
2053                                       "READ TOC");
2054                 if (reply == 0)
2055                         reply = do_read_toc(common, bh);
2056                 break;
2057
2058         case READ_FORMAT_CAPACITIES:
2059                 common->data_size_from_cmnd =
2060                         get_unaligned_be16(&common->cmnd[7]);
2061                 reply = check_command(common, 10, DATA_DIR_TO_HOST,
2062                                       (3<<7), 1,
2063                                       "READ FORMAT CAPACITIES");
2064                 if (reply == 0)
2065                         reply = do_read_format_capacities(common, bh);
2066                 break;
2067
2068         case REQUEST_SENSE:
2069                 common->data_size_from_cmnd = common->cmnd[4];
2070                 reply = check_command(common, 6, DATA_DIR_TO_HOST,
2071                                       (1<<4), 0,
2072                                       "REQUEST SENSE");
2073                 if (reply == 0)
2074                         reply = do_request_sense(common, bh);
2075                 break;
2076
2077         case START_STOP:
2078                 common->data_size_from_cmnd = 0;
2079                 reply = check_command(common, 6, DATA_DIR_NONE,
2080                                       (1<<1) | (1<<4), 0,
2081                                       "START-STOP UNIT");
2082                 if (reply == 0)
2083                         reply = do_start_stop(common);
2084                 break;
2085
2086         case SYNCHRONIZE_CACHE:
2087                 common->data_size_from_cmnd = 0;
2088                 reply = check_command(common, 10, DATA_DIR_NONE,
2089                                       (0xf<<2) | (3<<7), 1,
2090                                       "SYNCHRONIZE CACHE");
2091                 if (reply == 0)
2092                         reply = do_synchronize_cache(common);
2093                 break;
2094
2095         case TEST_UNIT_READY:
2096                 common->data_size_from_cmnd = 0;
2097                 reply = check_command(common, 6, DATA_DIR_NONE,
2098                                 0, 1,
2099                                 "TEST UNIT READY");
2100                 break;
2101
2102         /*
2103          * Although optional, this command is used by MS-Windows.  We
2104          * support a minimal version: BytChk must be 0.
2105          */
2106         case VERIFY:
2107                 common->data_size_from_cmnd = 0;
2108                 reply = check_command(common, 10, DATA_DIR_NONE,
2109                                       (1<<1) | (0xf<<2) | (3<<7), 1,
2110                                       "VERIFY");
2111                 if (reply == 0)
2112                         reply = do_verify(common);
2113                 break;
2114
2115         case WRITE_6:
2116                 i = common->cmnd[4];
2117                 common->data_size_from_cmnd = (i == 0) ? 256 : i;
2118                 reply = check_command_size_in_blocks(common, 6,
2119                                       DATA_DIR_FROM_HOST,
2120                                       (7<<1) | (1<<4), 1,
2121                                       "WRITE(6)");
2122                 if (reply == 0)
2123                         reply = do_write(common);
2124                 break;
2125
2126         case WRITE_10:
2127                 common->data_size_from_cmnd =
2128                                 get_unaligned_be16(&common->cmnd[7]);
2129                 reply = check_command_size_in_blocks(common, 10,
2130                                       DATA_DIR_FROM_HOST,
2131                                       (1<<1) | (0xf<<2) | (3<<7), 1,
2132                                       "WRITE(10)");
2133                 if (reply == 0)
2134                         reply = do_write(common);
2135                 break;
2136
2137         case WRITE_12:
2138                 common->data_size_from_cmnd =
2139                                 get_unaligned_be32(&common->cmnd[6]);
2140                 reply = check_command_size_in_blocks(common, 12,
2141                                       DATA_DIR_FROM_HOST,
2142                                       (1<<1) | (0xf<<2) | (0xf<<6), 1,
2143                                       "WRITE(12)");
2144                 if (reply == 0)
2145                         reply = do_write(common);
2146                 break;
2147
2148         /*
2149          * Some mandatory commands that we recognize but don't implement.
2150          * They don't mean much in this setting.  It's left as an exercise
2151          * for anyone interested to implement RESERVE and RELEASE in terms
2152          * of Posix locks.
2153          */
2154         case FORMAT_UNIT:
2155         case RELEASE:
2156         case RESERVE:
2157         case SEND_DIAGNOSTIC:
2158                 /* Fall through */
2159
2160         default:
2161 unknown_cmnd:
2162                 common->data_size_from_cmnd = 0;
2163                 sprintf(unknown, "Unknown x%02x", common->cmnd[0]);
2164                 reply = check_command(common, common->cmnd_size,
2165                                       DATA_DIR_UNKNOWN, ~0, 0, unknown);
2166                 if (reply == 0) {
2167                         common->curlun->sense_data = SS_INVALID_COMMAND;
2168                         reply = -EINVAL;
2169                 }
2170                 break;
2171         }
2172         up_read(&common->filesem);
2173
2174         if (reply == -EINTR || signal_pending(current))
2175                 return -EINTR;
2176
2177         /* Set up the single reply buffer for finish_reply() */
2178         if (reply == -EINVAL)
2179                 reply = 0;              /* Error reply length */
2180         if (reply >= 0 && common->data_dir == DATA_DIR_TO_HOST) {
2181                 reply = min((u32)reply, common->data_size_from_cmnd);
2182                 bh->inreq->length = reply;
2183                 bh->state = BUF_STATE_FULL;
2184                 common->residue -= reply;
2185         }                               /* Otherwise it's already set */
2186
2187         return 0;
2188 }
2189
2190
2191 /*-------------------------------------------------------------------------*/
2192
2193 static int received_cbw(struct fsg_dev *fsg, struct fsg_buffhd *bh)
2194 {
2195         struct usb_request      *req = bh->outreq;
2196         struct bulk_cb_wrap     *cbw = req->buf;
2197         struct fsg_common       *common = fsg->common;
2198
2199         /* Was this a real packet?  Should it be ignored? */
2200         if (req->status || test_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags))
2201                 return -EINVAL;
2202
2203         /* Is the CBW valid? */
2204         if (req->actual != US_BULK_CB_WRAP_LEN ||
2205                         cbw->Signature != cpu_to_le32(
2206                                 US_BULK_CB_SIGN)) {
2207                 DBG(fsg, "invalid CBW: len %u sig 0x%x\n",
2208                                 req->actual,
2209                                 le32_to_cpu(cbw->Signature));
2210
2211                 /*
2212                  * The Bulk-only spec says we MUST stall the IN endpoint
2213                  * (6.6.1), so it's unavoidable.  It also says we must
2214                  * retain this state until the next reset, but there's
2215                  * no way to tell the controller driver it should ignore
2216                  * Clear-Feature(HALT) requests.
2217                  *
2218                  * We aren't required to halt the OUT endpoint; instead
2219                  * we can simply accept and discard any data received
2220                  * until the next reset.
2221                  */
2222                 wedge_bulk_in_endpoint(fsg);
2223                 set_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
2224                 return -EINVAL;
2225         }
2226
2227         /* Is the CBW meaningful? */
2228         if (cbw->Lun >= FSG_MAX_LUNS || cbw->Flags & ~US_BULK_FLAG_IN ||
2229                         cbw->Length <= 0 || cbw->Length > MAX_COMMAND_SIZE) {
2230                 DBG(fsg, "non-meaningful CBW: lun = %u, flags = 0x%x, "
2231                                 "cmdlen %u\n",
2232                                 cbw->Lun, cbw->Flags, cbw->Length);
2233
2234                 /*
2235                  * We can do anything we want here, so let's stall the
2236                  * bulk pipes if we are allowed to.
2237                  */
2238                 if (common->can_stall) {
2239                         fsg_set_halt(fsg, fsg->bulk_out);
2240                         halt_bulk_in_endpoint(fsg);
2241                 }
2242                 return -EINVAL;
2243         }
2244
2245         /* Save the command for later */
2246         common->cmnd_size = cbw->Length;
2247         memcpy(common->cmnd, cbw->CDB, common->cmnd_size);
2248         if (cbw->Flags & US_BULK_FLAG_IN)
2249                 common->data_dir = DATA_DIR_TO_HOST;
2250         else
2251                 common->data_dir = DATA_DIR_FROM_HOST;
2252         common->data_size = le32_to_cpu(cbw->DataTransferLength);
2253         if (common->data_size == 0)
2254                 common->data_dir = DATA_DIR_NONE;
2255         common->lun = cbw->Lun;
2256         if (common->lun < common->nluns)
2257                 common->curlun = &common->luns[common->lun];
2258         else
2259                 common->curlun = NULL;
2260         common->tag = cbw->Tag;
2261         return 0;
2262 }
2263
2264 static int get_next_command(struct fsg_common *common)
2265 {
2266         struct fsg_buffhd       *bh;
2267         int                     rc = 0;
2268
2269         /* Wait for the next buffer to become available */
2270         bh = common->next_buffhd_to_fill;
2271         while (bh->state != BUF_STATE_EMPTY) {
2272                 rc = sleep_thread(common);
2273                 if (rc)
2274                         return rc;
2275         }
2276
2277         /* Queue a request to read a Bulk-only CBW */
2278         set_bulk_out_req_length(common, bh, US_BULK_CB_WRAP_LEN);
2279         if (!start_out_transfer(common, bh))
2280                 /* Don't know what to do if common->fsg is NULL */
2281                 return -EIO;
2282
2283         /*
2284          * We will drain the buffer in software, which means we
2285          * can reuse it for the next filling.  No need to advance
2286          * next_buffhd_to_fill.
2287          */
2288
2289         /* Wait for the CBW to arrive */
2290         while (bh->state != BUF_STATE_FULL) {
2291                 rc = sleep_thread(common);
2292                 if (rc)
2293                         return rc;
2294         }
2295         smp_rmb();
2296         rc = fsg_is_set(common) ? received_cbw(common->fsg, bh) : -EIO;
2297         bh->state = BUF_STATE_EMPTY;
2298
2299         return rc;
2300 }
2301
2302
2303 /*-------------------------------------------------------------------------*/
2304
2305 static int alloc_request(struct fsg_common *common, struct usb_ep *ep,
2306                 struct usb_request **preq)
2307 {
2308         *preq = usb_ep_alloc_request(ep, GFP_ATOMIC);
2309         if (*preq)
2310                 return 0;
2311         ERROR(common, "can't allocate request for %s\n", ep->name);
2312         return -ENOMEM;
2313 }
2314
2315 /* Reset interface setting and re-init endpoint state (toggle etc). */
2316 static int do_set_interface(struct fsg_common *common, struct fsg_dev *new_fsg)
2317 {
2318         struct fsg_dev *fsg;
2319         int i, rc = 0;
2320
2321         if (common->running)
2322                 DBG(common, "reset interface\n");
2323
2324 reset:
2325         /* Deallocate the requests */
2326         if (common->fsg) {
2327                 fsg = common->fsg;
2328
2329                 for (i = 0; i < fsg_num_buffers; ++i) {
2330                         struct fsg_buffhd *bh = &common->buffhds[i];
2331
2332                         if (bh->inreq) {
2333                                 usb_ep_free_request(fsg->bulk_in, bh->inreq);
2334                                 bh->inreq = NULL;
2335                         }
2336                         if (bh->outreq) {
2337                                 usb_ep_free_request(fsg->bulk_out, bh->outreq);
2338                                 bh->outreq = NULL;
2339                         }
2340                 }
2341
2342                 /* Disable the endpoints */
2343                 if (fsg->bulk_in_enabled) {
2344                         usb_ep_disable(fsg->bulk_in);
2345                         fsg->bulk_in_enabled = 0;
2346                 }
2347                 if (fsg->bulk_out_enabled) {
2348                         usb_ep_disable(fsg->bulk_out);
2349                         fsg->bulk_out_enabled = 0;
2350                 }
2351
2352                 common->fsg = NULL;
2353                 wake_up(&common->fsg_wait);
2354         }
2355
2356         common->running = 0;
2357         if (!new_fsg || rc)
2358                 return rc;
2359
2360         if(new_fsg->common != common){
2361                 printk("%s new_fsg->common = 0x%x common = 0x%x\n",__func__,new_fsg->common,common);
2362                 return rc;
2363         }
2364         common->fsg = new_fsg;
2365         fsg = common->fsg;
2366
2367         /* Enable the endpoints */
2368         rc = config_ep_by_speed(common->gadget, &(fsg->function), fsg->bulk_in);
2369         if (rc)
2370                 goto reset;
2371         rc = usb_ep_enable(fsg->bulk_in);
2372         if (rc)
2373                 goto reset;
2374         fsg->bulk_in->driver_data = common;
2375         fsg->bulk_in_enabled = 1;
2376
2377         rc = config_ep_by_speed(common->gadget, &(fsg->function),
2378                                 fsg->bulk_out);
2379         if (rc)
2380                 goto reset;
2381         rc = usb_ep_enable(fsg->bulk_out);
2382         if (rc)
2383                 goto reset;
2384         fsg->bulk_out->driver_data = common;
2385         fsg->bulk_out_enabled = 1;
2386         common->bulk_out_maxpacket = usb_endpoint_maxp(fsg->bulk_out->desc);
2387         clear_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
2388
2389         /* Allocate the requests */
2390         for (i = 0; i < fsg_num_buffers; ++i) {
2391                 struct fsg_buffhd       *bh = &common->buffhds[i];
2392
2393                 rc = alloc_request(common, fsg->bulk_in, &bh->inreq);
2394                 if (rc)
2395                         goto reset;
2396                 rc = alloc_request(common, fsg->bulk_out, &bh->outreq);
2397                 if (rc)
2398                         goto reset;
2399                 bh->inreq->buf = bh->outreq->buf = bh->buf;
2400                 bh->inreq->context = bh->outreq->context = bh;
2401                 bh->inreq->complete = bulk_in_complete;
2402                 bh->outreq->complete = bulk_out_complete;
2403         }
2404
2405         common->running = 1;
2406         for (i = 0; i < common->nluns; ++i)
2407                 common->luns[i].unit_attention_data = SS_RESET_OCCURRED;
2408         return rc;
2409 }
2410
2411
2412 /****************************** ALT CONFIGS ******************************/
2413
2414 static int fsg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
2415 {
2416         struct fsg_dev *fsg = fsg_from_func(f);
2417
2418         fsg->common->new_fsg = fsg;
2419         printk("%s f=%p,fsg=%p\n",__func__,f,fsg);
2420         raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2421         return USB_GADGET_DELAYED_STATUS;
2422 }
2423
2424 static void fsg_disable(struct usb_function *f)
2425 {
2426         struct fsg_dev *fsg = fsg_from_func(f);
2427         printk("%s f=%p\n",__func__,f);
2428         fsg->common->new_fsg = NULL;
2429         raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2430 }
2431
2432
2433 /*-------------------------------------------------------------------------*/
2434
2435 static void handle_exception(struct fsg_common *common)
2436 {
2437         siginfo_t               info;
2438         int                     i;
2439         struct fsg_buffhd       *bh;
2440         enum fsg_state          old_state;
2441         struct fsg_lun          *curlun;
2442         unsigned int            exception_req_tag;
2443
2444         /*
2445          * Clear the existing signals.  Anything but SIGUSR1 is converted
2446          * into a high-priority EXIT exception.
2447          */
2448         for (;;) {
2449                 int sig =
2450                         dequeue_signal_lock(current, &current->blocked, &info);
2451                 if (!sig)
2452                         break;
2453                 if (sig != SIGUSR1) {
2454                         if (common->state < FSG_STATE_EXIT)
2455                                 DBG(common, "Main thread exiting on signal\n");
2456                         raise_exception(common, FSG_STATE_EXIT);
2457                 }
2458         }
2459
2460         /* Cancel all the pending transfers */
2461         if (likely(common->fsg)) {
2462                 for (i = 0; i < fsg_num_buffers; ++i) {
2463                         bh = &common->buffhds[i];
2464                         if (bh->inreq_busy)
2465                                 usb_ep_dequeue(common->fsg->bulk_in, bh->inreq);
2466                         if (bh->outreq_busy)
2467                                 usb_ep_dequeue(common->fsg->bulk_out,
2468                                                bh->outreq);
2469                 }
2470
2471                 /* Wait until everything is idle */
2472                 for (;;) {
2473                         int num_active = 0;
2474                         for (i = 0; i < fsg_num_buffers; ++i) {
2475                                 bh = &common->buffhds[i];
2476                                 num_active += bh->inreq_busy + bh->outreq_busy;
2477                         }
2478                         if (num_active == 0)
2479                                 break;
2480                         if (sleep_thread(common))
2481                                 return;
2482                 }
2483
2484                 /* Clear out the controller's fifos */
2485                 if (common->fsg->bulk_in_enabled)
2486                         usb_ep_fifo_flush(common->fsg->bulk_in);
2487                 if (common->fsg->bulk_out_enabled)
2488                         usb_ep_fifo_flush(common->fsg->bulk_out);
2489         }
2490
2491         /*
2492          * Reset the I/O buffer states and pointers, the SCSI
2493          * state, and the exception.  Then invoke the handler.
2494          */
2495         spin_lock_irq(&common->lock);
2496
2497         for (i = 0; i < fsg_num_buffers; ++i) {
2498                 bh = &common->buffhds[i];
2499                 bh->state = BUF_STATE_EMPTY;
2500         }
2501         common->next_buffhd_to_fill = &common->buffhds[0];
2502         common->next_buffhd_to_drain = &common->buffhds[0];
2503         exception_req_tag = common->exception_req_tag;
2504         old_state = common->state;
2505
2506         if (old_state == FSG_STATE_ABORT_BULK_OUT)
2507                 common->state = FSG_STATE_STATUS_PHASE;
2508         else {
2509                 for (i = 0; i < common->nluns; ++i) {
2510                         curlun = &common->luns[i];
2511                         curlun->prevent_medium_removal = 0;
2512                         curlun->sense_data = SS_NO_SENSE;
2513                         curlun->unit_attention_data = SS_NO_SENSE;
2514                         curlun->sense_data_info = 0;
2515                         curlun->info_valid = 0;
2516                 }
2517                 common->state = FSG_STATE_IDLE;
2518         }
2519         spin_unlock_irq(&common->lock);
2520
2521         /* Carry out any extra actions required for the exception */
2522         switch (old_state) {
2523         case FSG_STATE_ABORT_BULK_OUT:
2524                 send_status(common);
2525                 spin_lock_irq(&common->lock);
2526                 if (common->state == FSG_STATE_STATUS_PHASE)
2527                         common->state = FSG_STATE_IDLE;
2528                 spin_unlock_irq(&common->lock);
2529                 break;
2530
2531         case FSG_STATE_RESET:
2532                 /*
2533                  * In case we were forced against our will to halt a
2534                  * bulk endpoint, clear the halt now.  (The SuperH UDC
2535                  * requires this.)
2536                  */
2537                 if (!fsg_is_set(common))
2538                         break;
2539                 if (test_and_clear_bit(IGNORE_BULK_OUT,
2540                                        &common->fsg->atomic_bitflags))
2541                         usb_ep_clear_halt(common->fsg->bulk_in);
2542
2543                 if (common->ep0_req_tag == exception_req_tag)
2544                         ep0_queue(common);      /* Complete the status stage */
2545
2546                 /*
2547                  * Technically this should go here, but it would only be
2548                  * a waste of time.  Ditto for the INTERFACE_CHANGE and
2549                  * CONFIG_CHANGE cases.
2550                  */
2551                 /* for (i = 0; i < common->nluns; ++i) */
2552                 /*      common->luns[i].unit_attention_data = */
2553                 /*              SS_RESET_OCCURRED;  */
2554                 break;
2555
2556         case FSG_STATE_CONFIG_CHANGE:
2557                 do_set_interface(common, common->new_fsg);
2558                 if (common->new_fsg)
2559                         usb_composite_setup_continue(common->cdev);
2560                 break;
2561
2562         case FSG_STATE_EXIT:
2563         case FSG_STATE_TERMINATED:
2564                 do_set_interface(common, NULL);         /* Free resources */
2565                 spin_lock_irq(&common->lock);
2566                 common->state = FSG_STATE_TERMINATED;   /* Stop the thread */
2567                 spin_unlock_irq(&common->lock);
2568                 break;
2569
2570         case FSG_STATE_INTERFACE_CHANGE:
2571         case FSG_STATE_DISCONNECT:
2572         case FSG_STATE_COMMAND_PHASE:
2573         case FSG_STATE_DATA_PHASE:
2574         case FSG_STATE_STATUS_PHASE:
2575         case FSG_STATE_IDLE:
2576                 break;
2577         }
2578 }
2579
2580
2581 /*-------------------------------------------------------------------------*/
2582
2583 static int fsg_main_thread(void *common_)
2584 {
2585         struct fsg_common       *common = common_;
2586
2587         /*
2588          * Allow the thread to be killed by a signal, but set the signal mask
2589          * to block everything but INT, TERM, KILL, and USR1.
2590          */
2591         allow_signal(SIGINT);
2592         allow_signal(SIGTERM);
2593         allow_signal(SIGKILL);
2594         allow_signal(SIGUSR1);
2595
2596         /* Allow the thread to be frozen */
2597         set_freezable();
2598
2599         /*
2600          * Arrange for userspace references to be interpreted as kernel
2601          * pointers.  That way we can pass a kernel pointer to a routine
2602          * that expects a __user pointer and it will work okay.
2603          */
2604         set_fs(get_ds());
2605
2606         /* The main loop */
2607         while (common->state != FSG_STATE_TERMINATED) {
2608                 if (exception_in_progress(common) || signal_pending(current)) {
2609                         handle_exception(common);
2610                         continue;
2611                 }
2612
2613                 if (!common->running) {
2614                         sleep_thread(common);
2615                         continue;
2616                 }
2617
2618                 if (get_next_command(common))
2619                         continue;
2620
2621                 spin_lock_irq(&common->lock);
2622                 if (!exception_in_progress(common))
2623                         common->state = FSG_STATE_DATA_PHASE;
2624                 spin_unlock_irq(&common->lock);
2625
2626                 if (do_scsi_command(common) || finish_reply(common))
2627                         continue;
2628
2629                 spin_lock_irq(&common->lock);
2630                 if (!exception_in_progress(common))
2631                         common->state = FSG_STATE_STATUS_PHASE;
2632                 spin_unlock_irq(&common->lock);
2633
2634                 if (send_status(common))
2635                         continue;
2636
2637                 spin_lock_irq(&common->lock);
2638                 if (!exception_in_progress(common))
2639                         common->state = FSG_STATE_IDLE;
2640                 spin_unlock_irq(&common->lock);
2641         }
2642
2643         spin_lock_irq(&common->lock);
2644         common->thread_task = NULL;
2645         spin_unlock_irq(&common->lock);
2646
2647         if (!common->ops || !common->ops->thread_exits
2648          || common->ops->thread_exits(common) < 0) {
2649                 struct fsg_lun *curlun = common->luns;
2650                 unsigned i = common->nluns;
2651
2652                 down_write(&common->filesem);
2653                 for (; i--; ++curlun) {
2654                         if (!fsg_lun_is_open(curlun))
2655                                 continue;
2656
2657                         fsg_lun_close(curlun);
2658                         curlun->unit_attention_data = SS_MEDIUM_NOT_PRESENT;
2659                 }
2660                 up_write(&common->filesem);
2661         }
2662
2663         /* Let fsg_unbind() know the thread has exited */
2664         complete_and_exit(&common->thread_notifier, 0);
2665 }
2666
2667
2668 /*************************** DEVICE ATTRIBUTES ***************************/
2669
2670 static DEVICE_ATTR(ro, 0644, fsg_show_ro, fsg_store_ro);
2671 static DEVICE_ATTR(nofua, 0644, fsg_show_nofua, fsg_store_nofua);
2672 static DEVICE_ATTR(file, 0644, fsg_show_file, fsg_store_file);
2673 static DEVICE_ATTR(cdrom, 0644, fsg_show_cdrom, fsg_store_cdrom);
2674
2675 static struct device_attribute dev_attr_ro_cdrom =
2676         __ATTR(ro, 0444, fsg_show_ro, NULL);
2677 static struct device_attribute dev_attr_file_nonremovable =
2678         __ATTR(file, 0444, fsg_show_file, NULL);
2679
2680
2681 /****************************** FSG COMMON ******************************/
2682
2683 static void fsg_common_release(struct kref *ref);
2684
2685 static void fsg_lun_release(struct device *dev)
2686 {
2687         /* Nothing needs to be done */
2688 }
2689
2690 static inline void fsg_common_get(struct fsg_common *common)
2691 {
2692         kref_get(&common->ref);
2693 }
2694
2695 static inline void fsg_common_put(struct fsg_common *common)
2696 {
2697         kref_put(&common->ref, fsg_common_release);
2698 }
2699
2700 static struct fsg_common *fsg_common_init(struct fsg_common *common,
2701                                           struct usb_composite_dev *cdev,
2702                                           struct fsg_config *cfg)
2703 {
2704         struct usb_gadget *gadget = cdev->gadget;
2705         struct fsg_buffhd *bh;
2706         struct fsg_lun *curlun;
2707         struct fsg_lun_config *lcfg;
2708         int nluns, i, rc;
2709         char *pathbuf;
2710
2711         rc = fsg_num_buffers_validate();
2712         if (rc != 0)
2713                 return ERR_PTR(rc);
2714
2715         /* Find out how many LUNs there should be */
2716         nluns = cfg->nluns;
2717         if (nluns < 1 || nluns > FSG_MAX_LUNS) {
2718                 dev_err(&gadget->dev, "invalid number of LUNs: %u\n", nluns);
2719                 return ERR_PTR(-EINVAL);
2720         }
2721
2722         /* Allocate? */
2723         if (!common) {
2724                 common = kzalloc(sizeof *common, GFP_KERNEL);
2725                 if (!common)
2726                         return ERR_PTR(-ENOMEM);
2727                 common->free_storage_on_release = 1;
2728         } else {
2729                 memset(common, 0, sizeof *common);
2730                 common->free_storage_on_release = 0;
2731         }
2732
2733         common->buffhds = kcalloc(fsg_num_buffers,
2734                                   sizeof *(common->buffhds), GFP_KERNEL);
2735         if (!common->buffhds) {
2736                 if (common->free_storage_on_release)
2737                         kfree(common);
2738                 return ERR_PTR(-ENOMEM);
2739         }
2740
2741         common->ops = cfg->ops;
2742         common->private_data = cfg->private_data;
2743
2744         common->gadget = gadget;
2745         common->ep0 = gadget->ep0;
2746         common->ep0req = cdev->req;
2747         common->cdev = cdev;
2748 #ifdef CONFIG_USB_SPRD_DWC
2749         common->can_stall = 1;
2750 #endif
2751         /* Maybe allocate device-global string IDs, and patch descriptors */
2752         if (fsg_strings[FSG_STRING_INTERFACE].id == 0) {
2753                 rc = usb_string_id(cdev);
2754                 if (unlikely(rc < 0))
2755                         goto error_release;
2756                 fsg_strings[FSG_STRING_INTERFACE].id = rc;
2757                 fsg_intf_desc.iInterface = rc;
2758         }
2759
2760         /*
2761          * Create the LUNs, open their backing files, and register the
2762          * LUN devices in sysfs.
2763          */
2764         curlun = kcalloc(nluns, sizeof(*curlun), GFP_KERNEL);
2765         if (unlikely(!curlun)) {
2766                 rc = -ENOMEM;
2767                 goto error_release;
2768         }
2769         common->luns = curlun;
2770
2771         init_rwsem(&common->filesem);
2772
2773         for (i = 0, lcfg = cfg->luns; i < nluns; ++i, ++curlun, ++lcfg) {
2774                 curlun->cdrom = !!lcfg->cdrom;
2775                 curlun->ro = lcfg->cdrom || lcfg->ro;
2776                 curlun->initially_ro = curlun->ro;
2777                 curlun->removable = lcfg->removable;
2778                 curlun->nofua = lcfg->nofua;
2779                 curlun->dev.release = fsg_lun_release;
2780                 curlun->dev.parent = &gadget->dev;
2781                 /* curlun->dev.driver = &fsg_driver.driver; XXX */
2782                 dev_set_drvdata(&curlun->dev, &common->filesem);
2783                 dev_set_name(&curlun->dev, "lun%d", i);
2784
2785                 rc = device_register(&curlun->dev);
2786                 if (rc) {
2787                         INFO(common, "failed to register LUN%d: %d\n", i, rc);
2788                         common->nluns = i;
2789                         put_device(&curlun->dev);
2790                         goto error_release;
2791                 }
2792
2793                 rc = device_create_file(&curlun->dev,
2794                                         curlun->cdrom
2795                                       ? &dev_attr_ro_cdrom
2796                                       : &dev_attr_ro);
2797                 if (rc)
2798                         goto error_luns;
2799                 rc = device_create_file(&curlun->dev,
2800                                         curlun->removable
2801                                       ? &dev_attr_file
2802                                       : &dev_attr_file_nonremovable);
2803                 if (rc)
2804                         goto error_luns;
2805                 rc = device_create_file(&curlun->dev, &dev_attr_nofua);
2806                 if (rc)
2807                         goto error_luns;
2808                 rc = device_create_file(&curlun->dev, &dev_attr_cdrom);
2809                 if (rc)
2810                         goto error_luns;
2811
2812                 if (lcfg->filename) {
2813                         rc = fsg_lun_open(curlun, lcfg->filename);
2814                         if (rc)
2815                                 goto error_luns;
2816                 } else if (!curlun->removable) {
2817                         ERROR(common, "no file given for LUN%d\n", i);
2818                         rc = -EINVAL;
2819                         goto error_luns;
2820                 }
2821         }
2822         common->nluns = nluns;
2823         common->board_support_luns = nluns;
2824
2825         /* Data buffers cyclic list */
2826         bh = common->buffhds;
2827         i = fsg_num_buffers;
2828         goto buffhds_first_it;
2829         do {
2830                 bh->next = bh + 1;
2831                 ++bh;
2832 buffhds_first_it:
2833                 bh->buf = kmalloc(FSG_BUFLEN, GFP_KERNEL);
2834                 if (unlikely(!bh->buf)) {
2835                         rc = -ENOMEM;
2836                         goto error_release;
2837                 }
2838         } while (--i);
2839         bh->next = common->buffhds;
2840
2841         /* Prepare inquiryString */
2842         i = get_default_bcdDevice();
2843         snprintf(common->inquiry_string, sizeof common->inquiry_string,
2844                  "%-8s%-16s%04x", cfg->vendor_name ?: "Linux",
2845                  /* Assume product name dependent on the first LUN */
2846                  cfg->product_name ?: (common->luns->cdrom
2847                                      ? "File-Stor Gadget"
2848                                      : "File-CD Gadget"),
2849                  i);
2850
2851         /*
2852          * Some peripheral controllers are known not to be able to
2853          * halt bulk endpoints correctly.  If one of them is present,
2854          * disable stalls.
2855          */
2856         common->can_stall = cfg->can_stall &&
2857                 !(gadget_is_at91(common->gadget));
2858
2859         spin_lock_init(&common->lock);
2860         kref_init(&common->ref);
2861
2862         /* Tell the thread to start working */
2863         common->thread_task =
2864                 kthread_create(fsg_main_thread, common, "file-storage");
2865         if (IS_ERR(common->thread_task)) {
2866                 rc = PTR_ERR(common->thread_task);
2867                 goto error_release;
2868         }
2869         init_completion(&common->thread_notifier);
2870         init_waitqueue_head(&common->fsg_wait);
2871
2872         INIT_WORK(&common->fsync_work, &do_fsync);
2873
2874         /* Information */
2875         INFO(common, FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
2876         INFO(common, "Number of LUNs=%d\n", common->nluns);
2877
2878         pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
2879         for (i = 0, nluns = common->nluns, curlun = common->luns;
2880              i < nluns;
2881              ++curlun, ++i) {
2882                 char *p = "(no medium)";
2883                 if (fsg_lun_is_open(curlun)) {
2884                         p = "(error)";
2885                         if (pathbuf) {
2886                                 p = d_path(&curlun->filp->f_path,
2887                                            pathbuf, PATH_MAX);
2888                                 if (IS_ERR(p))
2889                                         p = "(error)";
2890                         }
2891                 }
2892                 LINFO(curlun, "LUN: %s%s%sfile: %s\n",
2893                       curlun->removable ? "removable " : "",
2894                       curlun->ro ? "read only " : "",
2895                       curlun->cdrom ? "CD-ROM " : "",
2896                       p);
2897         }
2898         kfree(pathbuf);
2899
2900         DBG(common, "I/O thread pid: %d\n", task_pid_nr(common->thread_task));
2901
2902         wake_up_process(common->thread_task);
2903
2904         return common;
2905
2906 error_luns:
2907         common->nluns = i + 1;
2908 error_release:
2909         common->state = FSG_STATE_TERMINATED;   /* The thread is dead */
2910         /* Call fsg_common_release() directly, ref might be not initialised. */
2911         fsg_common_release(&common->ref);
2912         return ERR_PTR(rc);
2913 }
2914
2915 static void fsg_common_release(struct kref *ref)
2916 {
2917         struct fsg_common *common = container_of(ref, struct fsg_common, ref);
2918
2919         /* If the thread isn't already dead, tell it to exit now */
2920         if (common->state != FSG_STATE_TERMINATED) {
2921                 raise_exception(common, FSG_STATE_EXIT);
2922                 wait_for_completion(&common->thread_notifier);
2923         }
2924
2925         if (likely(common->luns)) {
2926                 struct fsg_lun *lun = common->luns;
2927                 unsigned i = common->nluns;
2928
2929                 /* In error recovery common->nluns may be zero. */
2930                 for (; i; --i, ++lun) {
2931                         device_remove_file(&lun->dev, &dev_attr_nofua);
2932                         device_remove_file(&lun->dev,
2933                                            lun->cdrom
2934                                          ? &dev_attr_ro_cdrom
2935                                          : &dev_attr_ro);
2936                         device_remove_file(&lun->dev,
2937                                            lun->removable
2938                                          ? &dev_attr_file
2939                                          : &dev_attr_file_nonremovable);
2940                         device_remove_file(&lun->dev, &dev_attr_cdrom);
2941                         fsg_lun_close(lun);
2942                         device_unregister(&lun->dev);
2943                 }
2944
2945                 kfree(common->luns);
2946         }
2947
2948         {
2949                 struct fsg_buffhd *bh = common->buffhds;
2950                 unsigned i = fsg_num_buffers;
2951                 do {
2952                         kfree(bh->buf);
2953                 } while (++bh, --i);
2954         }
2955
2956         kfree(common->buffhds);
2957         if (common->free_storage_on_release)
2958                 kfree(common);
2959 }
2960
2961
2962 /*-------------------------------------------------------------------------*/
2963
2964 static void fsg_unbind(struct usb_configuration *c, struct usb_function *f)
2965 {
2966         struct fsg_dev          *fsg = fsg_from_func(f);
2967         struct fsg_common       *common = fsg->common;
2968
2969         DBG(fsg, "unbind\n");
2970         if (fsg->common->fsg == fsg) {
2971                 fsg->common->new_fsg = NULL;
2972                 raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2973                 /* FIXME: make interruptible or killable somehow? */
2974                 wait_event(common->fsg_wait, common->fsg != fsg);
2975         }
2976
2977         fsg_common_put(common);
2978         usb_free_all_descriptors(&fsg->function);
2979         kfree(fsg);
2980 }
2981
2982 static int fsg_bind(struct usb_configuration *c, struct usb_function *f)
2983 {
2984         struct fsg_dev          *fsg = fsg_from_func(f);
2985         struct usb_gadget       *gadget = c->cdev->gadget;
2986         int                     i;
2987         struct usb_ep           *ep;
2988         unsigned                max_burst;
2989         int                     ret;
2990
2991         fsg->gadget = gadget;
2992
2993         /* New interface */
2994         i = usb_interface_id(c, f);
2995         if (i < 0)
2996                 return i;
2997         fsg_intf_desc.bInterfaceNumber = i;
2998         fsg->interface_number = i;
2999
3000         /* Find all the endpoints we will use */
3001         ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_in_desc);
3002         if (!ep)
3003                 goto autoconf_fail;
3004         ep->driver_data = fsg->common;  /* claim the endpoint */
3005         fsg->bulk_in = ep;
3006
3007         ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_out_desc);
3008         if (!ep)
3009                 goto autoconf_fail;
3010         ep->driver_data = fsg->common;  /* claim the endpoint */
3011         fsg->bulk_out = ep;
3012
3013         /* Assume endpoint addresses are the same for both speeds */
3014         fsg_hs_bulk_in_desc.bEndpointAddress =
3015                 fsg_fs_bulk_in_desc.bEndpointAddress;
3016         fsg_hs_bulk_out_desc.bEndpointAddress =
3017                 fsg_fs_bulk_out_desc.bEndpointAddress;
3018
3019         /* Calculate bMaxBurst, we know packet size is 1024 */
3020         max_burst = min_t(unsigned, FSG_BUFLEN / 1024, 15);
3021
3022         fsg_ss_bulk_in_desc.bEndpointAddress =
3023                 fsg_fs_bulk_in_desc.bEndpointAddress;
3024         fsg_ss_bulk_in_comp_desc.bMaxBurst = max_burst;
3025
3026         fsg_ss_bulk_out_desc.bEndpointAddress =
3027                 fsg_fs_bulk_out_desc.bEndpointAddress;
3028         fsg_ss_bulk_out_comp_desc.bMaxBurst = max_burst;
3029
3030         ret = usb_assign_descriptors(f, fsg_fs_function, fsg_hs_function,
3031                         fsg_ss_function);
3032         if (ret)
3033                 goto autoconf_fail;
3034
3035         return 0;
3036
3037 autoconf_fail:
3038         ERROR(fsg, "unable to autoconfigure all endpoints\n");
3039         return -ENOTSUPP;
3040 }
3041
3042 /****************************** ADD FUNCTION ******************************/
3043
3044 static struct usb_gadget_strings *fsg_strings_array[] = {
3045         &fsg_stringtab,
3046         NULL,
3047 };
3048
3049 static int fsg_bind_config(struct usb_composite_dev *cdev,
3050                            struct usb_configuration *c,
3051                            struct fsg_common *common)
3052 {
3053         struct fsg_dev *fsg;
3054         int rc;
3055
3056         fsg = kzalloc(sizeof *fsg, GFP_KERNEL);
3057         if (unlikely(!fsg))
3058                 return -ENOMEM;
3059
3060         fsg->function.name        = FSG_DRIVER_DESC;
3061         fsg->function.strings     = fsg_strings_array;
3062         fsg->function.bind        = fsg_bind;
3063         fsg->function.unbind      = fsg_unbind;
3064         fsg->function.setup       = fsg_setup;
3065         fsg->function.set_alt     = fsg_set_alt;
3066         fsg->function.disable     = fsg_disable;
3067
3068         fsg->common               = common;
3069         /*
3070          * Our caller holds a reference to common structure so we
3071          * don't have to be worry about it being freed until we return
3072          * from this function.  So instead of incrementing counter now
3073          * and decrement in error recovery we increment it only when
3074          * call to usb_add_function() was successful.
3075          */
3076
3077         rc = usb_add_function(c, &fsg->function);
3078         if (unlikely(rc))
3079                 kfree(fsg);
3080         else
3081                 fsg_common_get(fsg->common);
3082         return rc;
3083 }
3084
3085
3086 /************************* Module parameters *************************/
3087
3088 struct fsg_module_parameters {
3089         char            *file[FSG_MAX_LUNS];
3090         bool            ro[FSG_MAX_LUNS];
3091         bool            removable[FSG_MAX_LUNS];
3092         bool            cdrom[FSG_MAX_LUNS];
3093         bool            nofua[FSG_MAX_LUNS];
3094
3095         unsigned int    file_count, ro_count, removable_count, cdrom_count;
3096         unsigned int    nofua_count;
3097         unsigned int    luns;   /* nluns */
3098         bool            stall;  /* can_stall */
3099 };
3100
3101 #define _FSG_MODULE_PARAM_ARRAY(prefix, params, name, type, desc)       \
3102         module_param_array_named(prefix ## name, params.name, type,     \
3103                                  &prefix ## params.name ## _count,      \
3104                                  S_IRUGO);                              \
3105         MODULE_PARM_DESC(prefix ## name, desc)
3106
3107 #define _FSG_MODULE_PARAM(prefix, params, name, type, desc)             \
3108         module_param_named(prefix ## name, params.name, type,           \
3109                            S_IRUGO);                                    \
3110         MODULE_PARM_DESC(prefix ## name, desc)
3111
3112 #define FSG_MODULE_PARAMETERS(prefix, params)                           \
3113         _FSG_MODULE_PARAM_ARRAY(prefix, params, file, charp,            \
3114                                 "names of backing files or devices");   \
3115         _FSG_MODULE_PARAM_ARRAY(prefix, params, ro, bool,               \
3116                                 "true to force read-only");             \
3117         _FSG_MODULE_PARAM_ARRAY(prefix, params, removable, bool,        \
3118                                 "true to simulate removable media");    \
3119         _FSG_MODULE_PARAM_ARRAY(prefix, params, cdrom, bool,            \
3120                                 "true to simulate CD-ROM instead of disk"); \
3121         _FSG_MODULE_PARAM_ARRAY(prefix, params, nofua, bool,            \
3122                                 "true to ignore SCSI WRITE(10,12) FUA bit"); \
3123         _FSG_MODULE_PARAM(prefix, params, luns, uint,                   \
3124                           "number of LUNs");                            \
3125         _FSG_MODULE_PARAM(prefix, params, stall, bool,                  \
3126                           "false to prevent bulk stalls")
3127
3128 static void
3129 fsg_config_from_params(struct fsg_config *cfg,
3130                        const struct fsg_module_parameters *params)
3131 {
3132         struct fsg_lun_config *lun;
3133         unsigned i;
3134
3135         /* Configure LUNs */
3136         cfg->nluns =
3137                 min(params->luns ?: (params->file_count ?: 1u),
3138                     (unsigned)FSG_MAX_LUNS);
3139         for (i = 0, lun = cfg->luns; i < cfg->nluns; ++i, ++lun) {
3140                 lun->ro = !!params->ro[i];
3141                 lun->cdrom = !!params->cdrom[i];
3142                 lun->removable = !!params->removable[i];
3143                 lun->filename =
3144                         params->file_count > i && params->file[i][0]
3145                         ? params->file[i]
3146                         : 0;
3147         }
3148
3149         /* Let MSF use defaults */
3150         cfg->vendor_name = 0;
3151         cfg->product_name = 0;
3152
3153         cfg->ops = NULL;
3154         cfg->private_data = NULL;
3155
3156         /* Finalise */
3157         cfg->can_stall = params->stall;
3158 }
3159
3160 static inline struct fsg_common *
3161 fsg_common_from_params(struct fsg_common *common,
3162                        struct usb_composite_dev *cdev,
3163                        const struct fsg_module_parameters *params)
3164         __attribute__((unused));
3165 static inline struct fsg_common *
3166 fsg_common_from_params(struct fsg_common *common,
3167                        struct usb_composite_dev *cdev,
3168                        const struct fsg_module_parameters *params)
3169 {
3170         struct fsg_config cfg;
3171         fsg_config_from_params(&cfg, params);
3172         return fsg_common_init(common, cdev, &cfg);
3173 }