f_mass_storage.c 84.8 KB
Newer Older
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 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The names of the above-listed copyright holders may not be used
 *    to endorse or promote products derived from this software without
 *    specific prior written permission.
 *
 * ALTERNATIVELY, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") as published by the Free Software
 * Foundation, either version 2 of that License or (at your option) any
 * later version.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
41 42 43 44 45
 * The Mass Storage Function acts as a USB Mass Storage device,
 * appearing to the host as a disk drive or as a CD-ROM drive.  In
 * addition to providing an example of a genuinely useful composite
 * function for a USB device, it also illustrates a technique of
 * double-buffering for increased throughput.
46
 *
47 48 49 50 51 52
 * For more information about MSF and in particular its module
 * parameters and sysfs interface read the
 * <Documentation/usb/mass-storage.txt> file.
 */

/*
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
 * MSF is configured by specifying a fsg_config structure.  It has the
 * following fields:
 *
 *	nluns		Number of LUNs function have (anywhere from 1
 *				to FSG_MAX_LUNS which is 8).
 *	luns		An array of LUN configuration values.  This
 *				should be filled for each LUN that
 *				function will include (ie. for "nluns"
 *				LUNs).  Each element of the array has
 *				the following fields:
 *	->filename	The path to the backing file for the LUN.
 *				Required if LUN is not marked as
 *				removable.
 *	->ro		Flag specifying access to the LUN shall be
 *				read-only.  This is implied if CD-ROM
 *				emulation is enabled as well as when
 *				it was impossible to open "filename"
 *				in R/W mode.
 *	->removable	Flag specifying that LUN shall be indicated as
 *				being removable.
 *	->cdrom		Flag specifying that LUN shall be reported as
 *				being a CD-ROM.
75 76
 *	->nofua		Flag specifying that FUA flag in SCSI WRITE(10,12)
 *				commands for this LUN shall be ignored.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
 *
 *	vendor_name
 *	product_name
 *	release		Information used as a reply to INQUIRY
 *				request.  To use default set to NULL,
 *				NULL, 0xffff respectively.  The first
 *				field should be 8 and the second 16
 *				characters or less.
 *
 *	can_stall	Set to permit function to halt bulk endpoints.
 *				Disabled on some USB devices known not
 *				to work correctly.  You should set it
 *				to true.
 *
 * If "removable" is not set for a LUN then a backing file must be
 * specified.  If it is set, then NULL filename means the LUN's medium
 * is not loaded (an empty string as "filename" in the fsg_config
 * structure causes error).  The CD-ROM emulation includes a single
 * data track and no audio tracks; hence there need be only one
96
 * backing file per LUN.
97 98 99 100 101 102 103 104 105 106 107
 *
 * This function is heavily based on "File-backed Storage Gadget" by
 * Alan Stern which in turn is heavily based on "Gadget Zero" by David
 * Brownell.  The driver's SCSI command interface was based on the
 * "Information technology - Small Computer System Interface - 2"
 * document from X3T9.2 Project 375D, Revision 10L, 7-SEP-93,
 * available at <http://www.t10.org/ftp/t10/drafts/s2/s2-r10l.pdf>.
 * The single exception is opcode 0x23 (READ FORMAT CAPACITIES), which
 * was based on the "Universal Serial Bus Mass Storage Class UFI
 * Command Specification" document, Revision 1.0, December 14, 1998,
 * available at
108 109 110 111 112 113
 * <http://www.usb.org/developers/devclass_docs/usbmass-ufi10.pdf>.
 */

/*
 *				Driver Design
 *
114
 * The MSF is fairly straightforward.  There is a main kernel
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
 * thread that handles most of the work.  Interrupt routines field
 * callbacks from the controller driver: bulk- and interrupt-request
 * completion notifications, endpoint-0 events, and disconnect events.
 * Completion events are passed to the main thread by wakeup calls.  Many
 * ep0 requests are handled at interrupt time, but SetInterface,
 * SetConfiguration, and device reset requests are forwarded to the
 * thread in the form of "exceptions" using SIGUSR1 signals (since they
 * should interrupt any ongoing file I/O operations).
 *
 * The thread's main routine implements the standard command/data/status
 * parts of a SCSI interaction.  It and its subroutines are full of tests
 * for pending signals/exceptions -- all this polling is necessary since
 * the kernel has no setjmp/longjmp equivalents.  (Maybe this is an
 * indication that the driver really wants to be running in userspace.)
 * An important point is that so long as the thread is alive it keeps an
 * open reference to the backing file.  This will prevent unmounting
 * the backing file's underlying filesystem and could cause problems
 * during system shutdown, for example.  To prevent such problems, the
 * thread catches INT, TERM, and KILL signals and converts them into
 * an EXIT exception.
 *
 * In normal operation the main thread is started during the gadget's
137 138
 * fsg_bind() callback and stopped during fsg_unbind().  But it can
 * 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 141
 * provides no way to deregister the gadget when thread dies -- maybe
 * a callback functions is needed.
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
 *
 * To provide maximum throughput, the driver uses a circular pipeline of
 * buffer heads (struct fsg_buffhd).  In principle the pipeline can be
 * arbitrarily long; in practice the benefits don't justify having more
 * than 2 stages (i.e., double buffering).  But it helps to think of the
 * pipeline as being a long one.  Each buffer head contains a bulk-in and
 * a bulk-out request pointer (since the buffer can be used for both
 * output and input -- directions always are given from the host's
 * point of view) as well as a pointer to the buffer and various state
 * variables.
 *
 * Use of the pipeline follows a simple protocol.  There is a variable
 * (fsg->next_buffhd_to_fill) that points to the next buffer head to use.
 * At any time that buffer head may still be in use from an earlier
 * request, so each buffer head has a state variable indicating whether
 * it is EMPTY, FULL, or BUSY.  Typical use involves waiting for the
 * buffer head to be EMPTY, filling the buffer either by file I/O or by
 * USB I/O (during which the buffer head is BUSY), and marking the buffer
 * head FULL when the I/O is complete.  Then the buffer will be emptied
 * (again possibly by USB I/O, during which it is marked BUSY) and
 * finally marked EMPTY again (possibly by a completion routine).
 *
 * A module parameter tells the driver to avoid stalling the bulk
 * endpoints wherever the transport specification allows.  This is
 * necessary for some UDCs like the SuperH, which cannot reliably clear a
 * halt on a bulk endpoint.  However, under certain circumstances the
 * Bulk-only specification requires a stall.  In such cases the driver
 * will halt the endpoint and set a flag indicating that it should clear
 * the halt in software during the next device reset.  Hopefully this
 * will permit everything to work correctly.  Furthermore, although the
 * specification allows the bulk-out endpoint to halt when the host sends
 * too much data, implementing this would cause an unavoidable race.
 * The driver will always use the "no-stall" approach for OUT transfers.
 *
 * One subtle point concerns sending status-stage responses for ep0
 * requests.  Some of these requests, such as device reset, can involve
 * interrupting an ongoing file I/O operation, which might take an
 * arbitrarily long time.  During that delay the host might give up on
 * the original ep0 request and issue a new one.  When that happens the
 * driver should not notify the host about completion of the original
 * request, as the host will no longer be waiting for it.  So the driver
 * assigns to each ep0 request a unique tag, and it keeps track of the
 * tag value of the request associated with a long-running exception
 * (device-reset, interface-change, or configuration-change).  When the
 * exception handler is finished, the status-stage response is submitted
 * only if the current ep0 request tag is equal to the exception request
 * tag.  Thus only the most recently received ep0 request will get a
 * status-stage response.
 *
 * Warning: This driver source file is too long.  It ought to be split up
 * into a header file plus about 3 separate .c files, to handle the details
 * of the Gadget, USB Mass Storage, and SCSI protocols.
 */


/* #define VERBOSE_DEBUG */
/* #define DUMP_MSGS */

#include <linux/blkdev.h>
#include <linux/completion.h>
#include <linux/dcache.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/fcntl.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/kref.h>
#include <linux/kthread.h>
#include <linux/limits.h>
#include <linux/rwsem.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/freezer.h>

#include <linux/usb/ch9.h>
#include <linux/usb/gadget.h>
219
#include <linux/usb/composite.h>
220 221 222 223

#include "gadget_chips.h"


224
/*------------------------------------------------------------------------*/
225

226
#define FSG_DRIVER_DESC		"Mass Storage Function"
227
#define FSG_DRIVER_VERSION	"2009/09/11"
228 229 230

static const char fsg_string_interface[] = "Mass Storage";

231
#include "storage_common.h"
232
#include "f_mass_storage.h"
233

234 235 236 237 238 239 240 241 242 243
/* Static strings, in UTF-8 (for simplicity we use only ASCII characters) */
static struct usb_string		fsg_strings[] = {
	{FSG_STRING_INTERFACE,		fsg_string_interface},
	{}
};

static struct usb_gadget_strings	fsg_stringtab = {
	.language	= 0x0409,		/* en-us */
	.strings	= fsg_strings,
};
244

245 246 247 248 249
static struct usb_gadget_strings *fsg_strings_array[] = {
	&fsg_stringtab,
	NULL,
};

250 251
/*-------------------------------------------------------------------------*/

252
struct fsg_dev;
253 254
struct fsg_common;

255 256
/* Data shared by all the FSG instances. */
struct fsg_common {
257
	struct usb_gadget	*gadget;
258
	struct usb_composite_dev *cdev;
259 260
	struct fsg_dev		*fsg, *new_fsg;
	wait_queue_head_t	fsg_wait;
261

262 263 264
	/* filesem protects: backing files in use */
	struct rw_semaphore	filesem;

265 266 267 268 269 270 271
	/* lock protects: state, all the req_busy's */
	spinlock_t		lock;

	struct usb_ep		*ep0;		/* Copy of gadget->ep0 */
	struct usb_request	*ep0req;	/* Copy of cdev->req */
	unsigned int		ep0_req_tag;

272 273
	struct fsg_buffhd	*next_buffhd_to_fill;
	struct fsg_buffhd	*next_buffhd_to_drain;
274
	struct fsg_buffhd	*buffhds;
275
	unsigned int		fsg_num_buffers;
276 277 278 279 280 281

	int			cmnd_size;
	u8			cmnd[MAX_COMMAND_SIZE];

	unsigned int		nluns;
	unsigned int		lun;
282
	struct fsg_lun		**luns;
283
	struct fsg_lun		*curlun;
284

285 286 287 288 289 290 291 292 293 294 295
	unsigned int		bulk_out_maxpacket;
	enum fsg_state		state;		/* For exception handling */
	unsigned int		exception_req_tag;

	enum data_direction	data_dir;
	u32			data_size;
	u32			data_size_from_cmnd;
	u32			tag;
	u32			residue;
	u32			usb_amount_left;

296
	unsigned int		can_stall:1;
297
	unsigned int		free_storage_on_release:1;
298 299 300 301
	unsigned int		phase_error:1;
	unsigned int		short_packet_received:1;
	unsigned int		bad_lun_okay:1;
	unsigned int		running:1;
302
	unsigned int		sysfs:1;
303

304 305 306
	int			thread_wakeup_needed;
	struct completion	thread_notifier;
	struct task_struct	*thread_task;
307

308 309
	/* Callback functions. */
	const struct fsg_operations	*ops;
310 311 312
	/* Gadget's private data. */
	void			*private_data;

313 314 315 316
	/*
	 * Vendor (8 chars), product (16 chars), release (4
	 * hexadecimal digits) and NUL byte
	 */
317 318
	char inquiry_string[8 + 16 + 4 + 1];

319
	struct kref		ref;
320 321
};

322
struct fsg_dev {
323 324
	struct usb_function	function;
	struct usb_gadget	*gadget;	/* Copy of cdev->gadget */
325 326
	struct fsg_common	*common;

327 328
	u16			interface_number;

329 330
	unsigned int		bulk_in_enabled:1;
	unsigned int		bulk_out_enabled:1;
331 332

	unsigned long		atomic_bitflags;
333
#define IGNORE_BULK_OUT		0
334 335 336

	struct usb_ep		*bulk_in;
	struct usb_ep		*bulk_out;
337
};
338

339 340 341 342 343 344
static inline int __fsg_is_set(struct fsg_common *common,
			       const char *func, unsigned line)
{
	if (common->fsg)
		return 1;
	ERROR(common, "common->fsg is NULL in %s at %u\n", func, line);
345
	WARN_ON(1);
346 347 348 349
	return 0;
}

#define fsg_is_set(common) likely(__fsg_is_set(common, __func__, __LINE__))
350

351 352 353 354 355
static inline struct fsg_dev *fsg_from_func(struct usb_function *f)
{
	return container_of(f, struct fsg_dev, function);
}

356 357
typedef void (*fsg_routine_t)(struct fsg_dev *);

358
static int exception_in_progress(struct fsg_common *common)
359
{
360
	return common->state > FSG_STATE_IDLE;
361 362
}

363 364 365 366 367 368 369 370 371 372 373 374 375 376
/* Make bulk-out requests be divisible by the maxpacket size */
static void set_bulk_out_req_length(struct fsg_common *common,
				    struct fsg_buffhd *bh, unsigned int length)
{
	unsigned int	rem;

	bh->bulk_out_intended_length = length;
	rem = length % common->bulk_out_maxpacket;
	if (rem > 0)
		length += common->bulk_out_maxpacket - rem;
	bh->outreq->length = length;
}


377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398
/*-------------------------------------------------------------------------*/

static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
{
	const char	*name;

	if (ep == fsg->bulk_in)
		name = "bulk-in";
	else if (ep == fsg->bulk_out)
		name = "bulk-out";
	else
		name = ep->name;
	DBG(fsg, "%s set halt\n", name);
	return usb_ep_set_halt(ep);
}


/*-------------------------------------------------------------------------*/

/* These routines may be called in process context or in_irq */

/* Caller must hold fsg->lock */
399
static void wakeup_thread(struct fsg_common *common)
400
{
401
	smp_wmb();	/* ensure the write of bh->state is complete */
402
	/* Tell the main thread that something has happened */
403 404 405
	common->thread_wakeup_needed = 1;
	if (common->thread_task)
		wake_up_process(common->thread_task);
406 407
}

408
static void raise_exception(struct fsg_common *common, enum fsg_state new_state)
409 410 411
{
	unsigned long		flags;

412 413
	/*
	 * Do nothing if a higher-priority exception is already in progress.
414
	 * If a lower-or-equal priority exception is in progress, preempt it
415 416
	 * and notify the main thread by sending it a signal.
	 */
417 418 419 420 421
	spin_lock_irqsave(&common->lock, flags);
	if (common->state <= new_state) {
		common->exception_req_tag = common->ep0_req_tag;
		common->state = new_state;
		if (common->thread_task)
422
			send_sig_info(SIGUSR1, SEND_SIG_FORCED,
423
				      common->thread_task);
424
	}
425
	spin_unlock_irqrestore(&common->lock, flags);
426 427 428 429 430
}


/*-------------------------------------------------------------------------*/

431
static int ep0_queue(struct fsg_common *common)
432 433 434
{
	int	rc;

435 436
	rc = usb_ep_queue(common->ep0, common->ep0req, GFP_ATOMIC);
	common->ep0->driver_data = common;
437 438
	if (rc != 0 && rc != -ESHUTDOWN) {
		/* We can't do much more than wait for a reset */
439 440
		WARNING(common, "error in submission: %s --> %d\n",
			common->ep0->name, rc);
441 442 443 444
	}
	return rc;
}

445

446 447
/*-------------------------------------------------------------------------*/

448
/* Completion handlers. These always run in_irq. */
449 450 451

static void bulk_in_complete(struct usb_ep *ep, struct usb_request *req)
{
452
	struct fsg_common	*common = ep->driver_data;
453 454 455
	struct fsg_buffhd	*bh = req->context;

	if (req->status || req->actual != req->length)
456
		DBG(common, "%s --> %d, %u/%u\n", __func__,
457
		    req->status, req->actual, req->length);
458
	if (req->status == -ECONNRESET)		/* Request was cancelled */
459 460 461 462
		usb_ep_fifo_flush(ep);

	/* Hold the lock while we update the request and buffer states */
	smp_wmb();
463
	spin_lock(&common->lock);
464 465
	bh->inreq_busy = 0;
	bh->state = BUF_STATE_EMPTY;
466 467
	wakeup_thread(common);
	spin_unlock(&common->lock);
468 469 470 471
}

static void bulk_out_complete(struct usb_ep *ep, struct usb_request *req)
{
472
	struct fsg_common	*common = ep->driver_data;
473 474
	struct fsg_buffhd	*bh = req->context;

475
	dump_msg(common, "bulk-out", req->buf, req->actual);
476
	if (req->status || req->actual != bh->bulk_out_intended_length)
477
		DBG(common, "%s --> %d, %u/%u\n", __func__,
478
		    req->status, req->actual, bh->bulk_out_intended_length);
479
	if (req->status == -ECONNRESET)		/* Request was cancelled */
480 481 482 483
		usb_ep_fifo_flush(ep);

	/* Hold the lock while we update the request and buffer states */
	smp_wmb();
484
	spin_lock(&common->lock);
485 486
	bh->outreq_busy = 0;
	bh->state = BUF_STATE_FULL;
487 488
	wakeup_thread(common);
	spin_unlock(&common->lock);
489 490
}

491
static int fsg_setup(struct usb_function *f,
492
		     const struct usb_ctrlrequest *ctrl)
493
{
494
	struct fsg_dev		*fsg = fsg_from_func(f);
495
	struct usb_request	*req = fsg->common->ep0req;
496
	u16			w_index = le16_to_cpu(ctrl->wIndex);
497
	u16			w_value = le16_to_cpu(ctrl->wValue);
498 499
	u16			w_length = le16_to_cpu(ctrl->wLength);

500
	if (!fsg_is_set(fsg->common))
501
		return -EOPNOTSUPP;
502

503 504 505 506 507
	++fsg->common->ep0_req_tag;	/* Record arrival of a new request */
	req->context = NULL;
	req->length = 0;
	dump_msg(fsg, "ep0-setup", (u8 *) ctrl, sizeof(*ctrl));

508
	switch (ctrl->bRequest) {
509

510
	case US_BULK_RESET_REQUEST:
511 512
		if (ctrl->bRequestType !=
		    (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
513
			break;
514 515
		if (w_index != fsg->interface_number || w_value != 0 ||
				w_length != 0)
516
			return -EDOM;
517

518 519 520 521
		/*
		 * Raise an exception to stop the current operation
		 * and reinitialize our state.
		 */
522
		DBG(fsg, "bulk reset request\n");
523
		raise_exception(fsg->common, FSG_STATE_RESET);
524
		return DELAYED_STATUS;
525

526
	case US_BULK_GET_MAX_LUN:
527 528
		if (ctrl->bRequestType !=
		    (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
529
			break;
530 531
		if (w_index != fsg->interface_number || w_value != 0 ||
				w_length != 1)
532 533
			return -EDOM;
		VDBG(fsg, "get max LUN\n");
534
		*(u8 *)req->buf = fsg->common->nluns - 1;
535 536

		/* Respond with data/status */
537
		req->length = min((u16)1, w_length);
538
		return ep0_queue(fsg->common);
539 540 541
	}

	VDBG(fsg,
542
	     "unknown class-specific control req %02x.%02x v%04x i%04x l%u\n",
543 544 545
	     ctrl->bRequestType, ctrl->bRequest,
	     le16_to_cpu(ctrl->wValue), w_index, w_length);
	return -EOPNOTSUPP;
546 547 548 549 550 551 552 553 554
}


/*-------------------------------------------------------------------------*/

/* All the following routines run in process context */

/* Use this for bulk or interrupt transfers, not ep0 */
static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep,
555 556
			   struct usb_request *req, int *pbusy,
			   enum fsg_buffer_state *state)
557 558 559 560 561 562
{
	int	rc;

	if (ep == fsg->bulk_in)
		dump_msg(fsg, "bulk-in", req->buf, req->length);

563
	spin_lock_irq(&fsg->common->lock);
564 565
	*pbusy = 1;
	*state = BUF_STATE_BUSY;
566
	spin_unlock_irq(&fsg->common->lock);
567 568 569 570 571 572 573
	rc = usb_ep_queue(ep, req, GFP_KERNEL);
	if (rc != 0) {
		*pbusy = 0;
		*state = BUF_STATE_EMPTY;

		/* We can't do much more than wait for a reset */

574 575 576 577 578 579
		/*
		 * Note: currently the net2280 driver fails zero-length
		 * submissions if DMA is enabled.
		 */
		if (rc != -ESHUTDOWN &&
		    !(rc == -EOPNOTSUPP && req->length == 0))
580
			WARNING(fsg, "error in submission: %s --> %d\n",
581
				ep->name, rc);
582 583 584
	}
}

585 586 587 588 589 590 591 592
static bool start_in_transfer(struct fsg_common *common, struct fsg_buffhd *bh)
{
	if (!fsg_is_set(common))
		return false;
	start_transfer(common->fsg, common->fsg->bulk_in,
		       bh->inreq, &bh->inreq_busy, &bh->state);
	return true;
}
593

594 595 596 597 598 599 600 601
static bool start_out_transfer(struct fsg_common *common, struct fsg_buffhd *bh)
{
	if (!fsg_is_set(common))
		return false;
	start_transfer(common->fsg, common->fsg->bulk_out,
		       bh->outreq, &bh->outreq_busy, &bh->state);
	return true;
}
602

603
static int sleep_thread(struct fsg_common *common)
604 605 606 607 608 609 610 611 612 613 614
{
	int	rc = 0;

	/* Wait until a signal arrives or we are woken up */
	for (;;) {
		try_to_freeze();
		set_current_state(TASK_INTERRUPTIBLE);
		if (signal_pending(current)) {
			rc = -EINTR;
			break;
		}
615
		if (common->thread_wakeup_needed)
616 617 618 619
			break;
		schedule();
	}
	__set_current_state(TASK_RUNNING);
620
	common->thread_wakeup_needed = 0;
621
	smp_rmb();	/* ensure the latest bh->state is visible */
622 623 624 625 626 627
	return rc;
}


/*-------------------------------------------------------------------------*/

628
static int do_read(struct fsg_common *common)
629
{
630
	struct fsg_lun		*curlun = common->curlun;
631 632 633 634 635 636 637 638
	u32			lba;
	struct fsg_buffhd	*bh;
	int			rc;
	u32			amount_left;
	loff_t			file_offset, file_offset_tmp;
	unsigned int		amount;
	ssize_t			nread;

639 640 641 642
	/*
	 * Get the starting Logical Block Address and check that it's
	 * not too big.
	 */
643
	if (common->cmnd[0] == READ_6)
644
		lba = get_unaligned_be24(&common->cmnd[1]);
645
	else {
646
		lba = get_unaligned_be32(&common->cmnd[2]);
647

648 649
		/*
		 * We allow DPO (Disable Page Out = don't save data in the
650
		 * cache) and FUA (Force Unit Access = don't read from the
651 652
		 * cache), but we don't implement them.
		 */
653
		if ((common->cmnd[1] & ~0x18) != 0) {
654 655 656 657 658 659 660 661
			curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
			return -EINVAL;
		}
	}
	if (lba >= curlun->num_sectors) {
		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
		return -EINVAL;
	}
662
	file_offset = ((loff_t) lba) << curlun->blkbits;
663 664

	/* Carry out the file reads */
665
	amount_left = common->data_size_from_cmnd;
666
	if (unlikely(amount_left == 0))
667
		return -EIO;		/* No default reply */
668 669

	for (;;) {
670 671
		/*
		 * Figure out how much we need to read:
672 673 674
		 * Try to read the remaining amount.
		 * But don't read more than the buffer size.
		 * And don't try to read past the end of the file.
675
		 */
676
		amount = min(amount_left, FSG_BUFLEN);
677 678
		amount = min((loff_t)amount,
			     curlun->file_length - file_offset);
679 680

		/* Wait for the next buffer to become available */
681
		bh = common->next_buffhd_to_fill;
682
		while (bh->state != BUF_STATE_EMPTY) {
683
			rc = sleep_thread(common);
684 685 686 687
			if (rc)
				return rc;
		}

688 689 690 691
		/*
		 * If we were asked to read past the end of file,
		 * end with an empty buffer.
		 */
692 693 694
		if (amount == 0) {
			curlun->sense_data =
					SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
695 696
			curlun->sense_data_info =
					file_offset >> curlun->blkbits;
697 698 699 700 701 702 703 704 705
			curlun->info_valid = 1;
			bh->inreq->length = 0;
			bh->state = BUF_STATE_FULL;
			break;
		}

		/* Perform the read */
		file_offset_tmp = file_offset;
		nread = vfs_read(curlun->filp,
706 707
				 (char __user *)bh->buf,
				 amount, &file_offset_tmp);
708
		VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
709
		      (unsigned long long)file_offset, (int)nread);
710 711 712 713
		if (signal_pending(current))
			return -EINTR;

		if (nread < 0) {
714
			LDBG(curlun, "error in file read: %d\n", (int)nread);
715 716 717
			nread = 0;
		} else if (nread < amount) {
			LDBG(curlun, "partial file read: %d/%u\n",
718
			     (int)nread, amount);
719
			nread = round_down(nread, curlun->blksize);
720 721 722
		}
		file_offset  += nread;
		amount_left  -= nread;
723
		common->residue -= nread;
724 725 726 727 728 729

		/*
		 * Except at the end of the transfer, nread will be
		 * equal to the buffer size, which is divisible by the
		 * bulk-in maxpacket size.
		 */
730 731 732 733 734 735
		bh->inreq->length = nread;
		bh->state = BUF_STATE_FULL;

		/* If an error occurred, report it and its position */
		if (nread < amount) {
			curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
736 737
			curlun->sense_data_info =
					file_offset >> curlun->blkbits;
738 739 740 741 742
			curlun->info_valid = 1;
			break;
		}

		if (amount_left == 0)
743
			break;		/* No more left to read */
744 745 746

		/* Send this buffer and go read some more */
		bh->inreq->zero = 0;
747 748
		if (!start_in_transfer(common, bh))
			/* Don't know what to do if common->fsg is NULL */
749 750
			return -EIO;
		common->next_buffhd_to_fill = bh->next;
751 752
	}

753
	return -EIO;		/* No default reply */
754 755 756 757 758
}


/*-------------------------------------------------------------------------*/

759
static int do_write(struct fsg_common *common)
760
{
761
	struct fsg_lun		*curlun = common->curlun;
762 763 764 765 766 767 768 769 770 771 772 773 774 775
	u32			lba;
	struct fsg_buffhd	*bh;
	int			get_some_more;
	u32			amount_left_to_req, amount_left_to_write;
	loff_t			usb_offset, file_offset, file_offset_tmp;
	unsigned int		amount;
	ssize_t			nwritten;
	int			rc;

	if (curlun->ro) {
		curlun->sense_data = SS_WRITE_PROTECTED;
		return -EINVAL;
	}
	spin_lock(&curlun->filp->f_lock);
776
	curlun->filp->f_flags &= ~O_SYNC;	/* Default is not to wait */
777 778
	spin_unlock(&curlun->filp->f_lock);

779 780 781 782
	/*
	 * Get the starting Logical Block Address and check that it's
	 * not too big
	 */
783
	if (common->cmnd[0] == WRITE_6)
784
		lba = get_unaligned_be24(&common->cmnd[1]);
785
	else {
786
		lba = get_unaligned_be32(&common->cmnd[2]);
787

788 789
		/*
		 * We allow DPO (Disable Page Out = don't save data in the
790 791
		 * cache) and FUA (Force Unit Access = write directly to the
		 * medium).  We don't implement DPO; we implement FUA by
792 793
		 * performing synchronous output.
		 */
794
		if (common->cmnd[1] & ~0x18) {
795 796 797
			curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
			return -EINVAL;
		}
798
		if (!curlun->nofua && (common->cmnd[1] & 0x08)) { /* FUA */
799 800 801 802 803 804 805 806 807 808 809 810
			spin_lock(&curlun->filp->f_lock);
			curlun->filp->f_flags |= O_SYNC;
			spin_unlock(&curlun->filp->f_lock);
		}
	}
	if (lba >= curlun->num_sectors) {
		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
		return -EINVAL;
	}

	/* Carry out the file writes */
	get_some_more = 1;
811
	file_offset = usb_offset = ((loff_t) lba) << curlun->blkbits;
812 813
	amount_left_to_req = common->data_size_from_cmnd;
	amount_left_to_write = common->data_size_from_cmnd;
814 815 816 817

	while (amount_left_to_write > 0) {

		/* Queue a request for more data from the host */
818
		bh = common->next_buffhd_to_fill;
819 820
		if (bh->state == BUF_STATE_EMPTY && get_some_more) {

821 822
			/*
			 * Figure out how much we want to get:
823 824
			 * Try to get the remaining amount,
			 * but not more than the buffer size.
825
			 */
826
			amount = min(amount_left_to_req, FSG_BUFLEN);
827 828 829

			/* Beyond the end of the backing file? */
			if (usb_offset >= curlun->file_length) {
830 831 832
				get_some_more = 0;
				curlun->sense_data =
					SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
833 834
				curlun->sense_data_info =
					usb_offset >> curlun->blkbits;
835 836 837 838 839 840
				curlun->info_valid = 1;
				continue;
			}

			/* Get the next buffer */
			usb_offset += amount;
841
			common->usb_amount_left -= amount;
842 843 844 845
			amount_left_to_req -= amount;
			if (amount_left_to_req == 0)
				get_some_more = 0;

846
			/*
847 848 849
			 * Except at the end of the transfer, amount will be
			 * equal to the buffer size, which is divisible by
			 * the bulk-out maxpacket size.
850
			 */
851
			set_bulk_out_req_length(common, bh, amount);
852
			if (!start_out_transfer(common, bh))
853
				/* Dunno what to do if common->fsg is NULL */
854 855
				return -EIO;
			common->next_buffhd_to_fill = bh->next;
856 857 858 859
			continue;
		}

		/* Write the received data to the backing file */
860
		bh = common->next_buffhd_to_drain;
861
		if (bh->state == BUF_STATE_EMPTY && !get_some_more)
862
			break;			/* We stopped early */
863 864
		if (bh->state == BUF_STATE_FULL) {
			smp_rmb();
865
			common->next_buffhd_to_drain = bh->next;
866 867 868 869 870
			bh->state = BUF_STATE_EMPTY;

			/* Did something go wrong with the transfer? */
			if (bh->outreq->status != 0) {
				curlun->sense_data = SS_COMMUNICATION_FAILURE;
871 872
				curlun->sense_data_info =
					file_offset >> curlun->blkbits;
873 874 875 876 877 878 879
				curlun->info_valid = 1;
				break;
			}

			amount = bh->outreq->actual;
			if (curlun->file_length - file_offset < amount) {
				LERROR(curlun,
880 881 882
				       "write %u @ %llu beyond end %llu\n",
				       amount, (unsigned long long)file_offset,
				       (unsigned long long)curlun->file_length);
883 884 885
				amount = curlun->file_length - file_offset;
			}

886 887 888 889 890
			/* Don't accept excess data.  The spec doesn't say
			 * what to do in this case.  We'll ignore the error.
			 */
			amount = min(amount, bh->bulk_out_intended_length);

891 892 893 894 895
			/* Don't write a partial block */
			amount = round_down(amount, curlun->blksize);
			if (amount == 0)
				goto empty_write;

896 897 898
			/* Perform the write */
			file_offset_tmp = file_offset;
			nwritten = vfs_write(curlun->filp,
899 900
					     (char __user *)bh->buf,
					     amount, &file_offset_tmp);
901
			VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
902
			      (unsigned long long)file_offset, (int)nwritten);
903
			if (signal_pending(current))
904
				return -EINTR;		/* Interrupted! */
905 906 907

			if (nwritten < 0) {
				LDBG(curlun, "error in file write: %d\n",
908
				     (int)nwritten);
909 910 911
				nwritten = 0;
			} else if (nwritten < amount) {
				LDBG(curlun, "partial file write: %d/%u\n",
912
				     (int)nwritten, amount);
913
				nwritten = round_down(nwritten, curlun->blksize);
914 915 916
			}
			file_offset += nwritten;
			amount_left_to_write -= nwritten;
917
			common->residue -= nwritten;
918 919 920 921

			/* If an error occurred, report it and its position */
			if (nwritten < amount) {
				curlun->sense_data = SS_WRITE_ERROR;
922 923
				curlun->sense_data_info =
					file_offset >> curlun->blkbits;
924 925 926 927
				curlun->info_valid = 1;
				break;
			}

928
 empty_write:
929
			/* Did the host decide to stop early? */
930
			if (bh->outreq->actual < bh->bulk_out_intended_length) {
931
				common->short_packet_received = 1;
932 933 934 935 936 937
				break;
			}
			continue;
		}

		/* Wait for something to happen */
938
		rc = sleep_thread(common);
939 940 941 942
		if (rc)
			return rc;
	}

943
	return -EIO;		/* No default reply */
944 945 946 947 948
}


/*-------------------------------------------------------------------------*/

949
static int do_synchronize_cache(struct fsg_common *common)
950
{
951
	struct fsg_lun	*curlun = common->curlun;
952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967
	int		rc;

	/* We ignore the requested LBA and write out all file's
	 * dirty data buffers. */
	rc = fsg_lun_fsync_sub(curlun);
	if (rc)
		curlun->sense_data = SS_WRITE_ERROR;
	return 0;
}


/*-------------------------------------------------------------------------*/

static void invalidate_sub(struct fsg_lun *curlun)
{
	struct file	*filp = curlun->filp;
A
Al Viro 已提交
968
	struct inode	*inode = file_inode(filp);
969 970 971
	unsigned long	rc;

	rc = invalidate_mapping_pages(inode->i_mapping, 0, -1);
972
	VLDBG(curlun, "invalidate_mapping_pages -> %ld\n", rc);
973 974
}

975
static int do_verify(struct fsg_common *common)
976
{
977
	struct fsg_lun		*curlun = common->curlun;
978 979
	u32			lba;
	u32			verification_length;
980
	struct fsg_buffhd	*bh = common->next_buffhd_to_fill;
981 982 983 984 985
	loff_t			file_offset, file_offset_tmp;
	u32			amount_left;
	unsigned int		amount;
	ssize_t			nread;

986 987 988 989
	/*
	 * Get the starting Logical Block Address and check that it's
	 * not too big.
	 */
990
	lba = get_unaligned_be32(&common->cmnd[2]);
991 992 993 994 995
	if (lba >= curlun->num_sectors) {
		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
		return -EINVAL;
	}

996 997 998 999
	/*
	 * We allow DPO (Disable Page Out = don't save data in the
	 * cache) but we don't implement it.
	 */
1000
	if (common->cmnd[1] & ~0x10) {
1001 1002 1003 1004
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}

1005
	verification_length = get_unaligned_be16(&common->cmnd[7]);
1006
	if (unlikely(verification_length == 0))
1007
		return -EIO;		/* No default reply */
1008 1009

	/* Prepare to carry out the file verify */
1010 1011
	amount_left = verification_length << curlun->blkbits;
	file_offset = ((loff_t) lba) << curlun->blkbits;
1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023

	/* Write out all the dirty buffers before invalidating them */
	fsg_lun_fsync_sub(curlun);
	if (signal_pending(current))
		return -EINTR;

	invalidate_sub(curlun);
	if (signal_pending(current))
		return -EINTR;

	/* Just try to read the requested blocks */
	while (amount_left > 0) {
1024 1025
		/*
		 * Figure out how much we need to read:
1026 1027 1028
		 * Try to read the remaining amount, but not more than
		 * the buffer size.
		 * And don't try to read past the end of the file.
1029
		 */
1030
		amount = min(amount_left, FSG_BUFLEN);
1031 1032
		amount = min((loff_t)amount,
			     curlun->file_length - file_offset);
1033 1034 1035
		if (amount == 0) {
			curlun->sense_data =
					SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
1036 1037
			curlun->sense_data_info =
				file_offset >> curlun->blkbits;
1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053
			curlun->info_valid = 1;
			break;
		}

		/* Perform the read */
		file_offset_tmp = file_offset;
		nread = vfs_read(curlun->filp,
				(char __user *) bh->buf,
				amount, &file_offset_tmp);
		VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
				(unsigned long long) file_offset,
				(int) nread);
		if (signal_pending(current))
			return -EINTR;

		if (nread < 0) {
1054
			LDBG(curlun, "error in file verify: %d\n", (int)nread);
1055 1056 1057
			nread = 0;
		} else if (nread < amount) {
			LDBG(curlun, "partial file verify: %d/%u\n",
1058
			     (int)nread, amount);
1059
			nread = round_down(nread, curlun->blksize);
1060 1061 1062
		}
		if (nread == 0) {
			curlun->sense_data = SS_UNRECOVERED_READ_ERROR;
1063 1064
			curlun->sense_data_info =
				file_offset >> curlun->blkbits;
1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076
			curlun->info_valid = 1;
			break;
		}
		file_offset += nread;
		amount_left -= nread;
	}
	return 0;
}


/*-------------------------------------------------------------------------*/

1077
static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
1078
{
1079
	struct fsg_lun *curlun = common->curlun;
1080 1081
	u8	*buf = (u8 *) bh->buf;

1082
	if (!curlun) {		/* Unsupported LUNs are okay */
1083
		common->bad_lun_okay = 1;
1084
		memset(buf, 0, 36);
1085 1086
		buf[0] = 0x7f;		/* Unsupported, no device-type */
		buf[4] = 31;		/* Additional length */
1087 1088 1089
		return 36;
	}

1090
	buf[0] = curlun->cdrom ? TYPE_ROM : TYPE_DISK;
1091
	buf[1] = curlun->removable ? 0x80 : 0;
1092 1093 1094 1095
	buf[2] = 2;		/* ANSI SCSI level 2 */
	buf[3] = 2;		/* SCSI-2 INQUIRY data format */
	buf[4] = 31;		/* Additional length */
	buf[5] = 0;		/* No special options */
1096 1097
	buf[6] = 0;
	buf[7] = 0;
1098
	memcpy(buf + 8, common->inquiry_string, sizeof common->inquiry_string);
1099 1100 1101
	return 36;
}

1102
static int do_request_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1103
{
1104
	struct fsg_lun	*curlun = common->curlun;
1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130
	u8		*buf = (u8 *) bh->buf;
	u32		sd, sdinfo;
	int		valid;

	/*
	 * From the SCSI-2 spec., section 7.9 (Unit attention condition):
	 *
	 * If a REQUEST SENSE command is received from an initiator
	 * with a pending unit attention condition (before the target
	 * generates the contingent allegiance condition), then the
	 * target shall either:
	 *   a) report any pending sense data and preserve the unit
	 *	attention condition on the logical unit, or,
	 *   b) report the unit attention condition, may discard any
	 *	pending sense data, and clear the unit attention
	 *	condition on the logical unit for that initiator.
	 *
	 * FSG normally uses option a); enable this code to use option b).
	 */
#if 0
	if (curlun && curlun->unit_attention_data != SS_NO_SENSE) {
		curlun->sense_data = curlun->unit_attention_data;
		curlun->unit_attention_data = SS_NO_SENSE;
	}
#endif

1131
	if (!curlun) {		/* Unsupported LUNs are okay */
1132
		common->bad_lun_okay = 1;
1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145
		sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;
		sdinfo = 0;
		valid = 0;
	} else {
		sd = curlun->sense_data;
		sdinfo = curlun->sense_data_info;
		valid = curlun->info_valid << 7;
		curlun->sense_data = SS_NO_SENSE;
		curlun->sense_data_info = 0;
		curlun->info_valid = 0;
	}

	memset(buf, 0, 18);
1146
	buf[0] = valid | 0x70;			/* Valid, current error */
1147 1148
	buf[2] = SK(sd);
	put_unaligned_be32(sdinfo, &buf[3]);	/* Sense information */
1149
	buf[7] = 18 - 8;			/* Additional sense length */
1150 1151 1152 1153 1154
	buf[12] = ASC(sd);
	buf[13] = ASCQ(sd);
	return 18;
}

1155
static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh)
1156
{
1157 1158 1159
	struct fsg_lun	*curlun = common->curlun;
	u32		lba = get_unaligned_be32(&common->cmnd[2]);
	int		pmi = common->cmnd[8];
1160
	u8		*buf = (u8 *)bh->buf;
1161 1162 1163 1164 1165 1166 1167 1168 1169

	/* Check the PMI and LBA fields */
	if (pmi > 1 || (pmi == 0 && lba != 0)) {
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}

	put_unaligned_be32(curlun->num_sectors - 1, &buf[0]);
						/* Max logical block */
1170
	put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */
1171 1172 1173
	return 8;
}

1174
static int do_read_header(struct fsg_common *common, struct fsg_buffhd *bh)
1175
{
1176 1177 1178
	struct fsg_lun	*curlun = common->curlun;
	int		msf = common->cmnd[1] & 0x02;
	u32		lba = get_unaligned_be32(&common->cmnd[2]);
1179
	u8		*buf = (u8 *)bh->buf;
1180

1181
	if (common->cmnd[1] & ~0x02) {		/* Mask away MSF */
1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}
	if (lba >= curlun->num_sectors) {
		curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
		return -EINVAL;
	}

	memset(buf, 0, 8);
	buf[0] = 0x01;		/* 2048 bytes of user data, rest is EC */
	store_cdrom_address(&buf[4], msf, lba);
	return 8;
}

1196
static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh)
1197
{
1198 1199 1200
	struct fsg_lun	*curlun = common->curlun;
	int		msf = common->cmnd[1] & 0x02;
	int		start_track = common->cmnd[6];
1201
	u8		*buf = (u8 *)bh->buf;
1202

1203
	if ((common->cmnd[1] & ~0x02) != 0 ||	/* Mask away MSF */
1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222
			start_track > 1) {
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}

	memset(buf, 0, 20);
	buf[1] = (20-2);		/* TOC data length */
	buf[2] = 1;			/* First track number */
	buf[3] = 1;			/* Last track number */
	buf[5] = 0x16;			/* Data track, copying allowed */
	buf[6] = 0x01;			/* Only track is number 1 */
	store_cdrom_address(&buf[8], msf, 0);

	buf[13] = 0x16;			/* Lead-out track is data */
	buf[14] = 0xAA;			/* Lead-out track number */
	store_cdrom_address(&buf[16], msf, curlun->num_sectors);
	return 20;
}

1223
static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh)
1224
{
1225 1226
	struct fsg_lun	*curlun = common->curlun;
	int		mscmnd = common->cmnd[0];
1227 1228 1229 1230 1231 1232 1233
	u8		*buf = (u8 *) bh->buf;
	u8		*buf0 = buf;
	int		pc, page_code;
	int		changeable_values, all_pages;
	int		valid_page = 0;
	int		len, limit;

1234
	if ((common->cmnd[1] & ~0x08) != 0) {	/* Mask away DBD */
1235 1236 1237
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}
1238 1239
	pc = common->cmnd[2] >> 6;
	page_code = common->cmnd[2] & 0x3f;
1240 1241 1242 1243 1244 1245 1246
	if (pc == 3) {
		curlun->sense_data = SS_SAVING_PARAMETERS_NOT_SUPPORTED;
		return -EINVAL;
	}
	changeable_values = (pc == 1);
	all_pages = (page_code == 0x3f);

1247 1248
	/*
	 * Write the mode parameter header.  Fixed values are: default
1249 1250
	 * medium type, no cache control (DPOFUA), and no block descriptors.
	 * The only variable value is the WriteProtect bit.  We will fill in
1251 1252
	 * the mode data length later.
	 */
1253
	memset(buf, 0, 8);
1254
	if (mscmnd == MODE_SENSE) {
1255
		buf[2] = (curlun->ro ? 0x80 : 0x00);		/* WP, DPOFUA */
1256 1257
		buf += 4;
		limit = 255;
1258
	} else {			/* MODE_SENSE_10 */
1259
		buf[3] = (curlun->ro ? 0x80 : 0x00);		/* WP, DPOFUA */
1260
		buf += 8;
1261
		limit = 65535;		/* Should really be FSG_BUFLEN */
1262 1263 1264 1265
	}

	/* No block descriptors */

1266 1267 1268 1269
	/*
	 * The mode pages, in numerical order.  The only page we support
	 * is the Caching page.
	 */
1270 1271
	if (page_code == 0x08 || all_pages) {
		valid_page = 1;
1272 1273 1274
		buf[0] = 0x08;		/* Page code */
		buf[1] = 10;		/* Page length */
		memset(buf+2, 0, 10);	/* None of the fields are changeable */
1275 1276

		if (!changeable_values) {
1277 1278 1279
			buf[2] = 0x04;	/* Write cache enable, */
					/* Read cache not disabled */
					/* No cache retention priorities */
1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290
			put_unaligned_be16(0xffff, &buf[4]);
					/* Don't disable prefetch */
					/* Minimum prefetch = 0 */
			put_unaligned_be16(0xffff, &buf[8]);
					/* Maximum prefetch */
			put_unaligned_be16(0xffff, &buf[10]);
					/* Maximum prefetch ceiling */
		}
		buf += 12;
	}

1291 1292 1293 1294
	/*
	 * Check that a valid page was requested and the mode data length
	 * isn't too long.
	 */
1295 1296 1297 1298 1299 1300 1301
	len = buf - buf0;
	if (!valid_page || len > limit) {
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}

	/*  Store the mode data length */
1302
	if (mscmnd == MODE_SENSE)
1303 1304 1305 1306 1307 1308
		buf0[0] = len - 1;
	else
		put_unaligned_be16(len - 2, buf0);
	return len;
}

1309
static int do_start_stop(struct fsg_common *common)
1310
{
1311 1312 1313 1314
	struct fsg_lun	*curlun = common->curlun;
	int		loej, start;

	if (!curlun) {
1315
		return -EINVAL;
1316 1317
	} else if (!curlun->removable) {
		curlun->sense_data = SS_INVALID_COMMAND;
1318
		return -EINVAL;
1319 1320
	} else if ((common->cmnd[1] & ~0x01) != 0 || /* Mask away Immed */
		   (common->cmnd[4] & ~0x03) != 0) { /* Mask LoEj, Start */
1321 1322 1323 1324
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}

1325 1326
	loej  = common->cmnd[4] & 0x02;
	start = common->cmnd[4] & 0x01;
1327

1328 1329 1330 1331
	/*
	 * Our emulation doesn't support mounting; the medium is
	 * available for use as soon as it is loaded.
	 */
1332
	if (start) {
1333 1334 1335 1336
		if (!fsg_lun_is_open(curlun)) {
			curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
			return -EINVAL;
		}
1337
		return 0;
1338
	}
1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355

	/* Are we allowed to unload the media? */
	if (curlun->prevent_medium_removal) {
		LDBG(curlun, "unload attempt prevented\n");
		curlun->sense_data = SS_MEDIUM_REMOVAL_PREVENTED;
		return -EINVAL;
	}

	if (!loej)
		return 0;

	up_read(&common->filesem);
	down_write(&common->filesem);
	fsg_lun_close(curlun);
	up_write(&common->filesem);
	down_read(&common->filesem);

1356
	return 0;
1357 1358
}

1359
static int do_prevent_allow(struct fsg_common *common)
1360
{
1361
	struct fsg_lun	*curlun = common->curlun;
1362 1363
	int		prevent;

1364
	if (!common->curlun) {
1365
		return -EINVAL;
1366 1367
	} else if (!common->curlun->removable) {
		common->curlun->sense_data = SS_INVALID_COMMAND;
1368 1369 1370
		return -EINVAL;
	}

1371 1372
	prevent = common->cmnd[4] & 0x01;
	if ((common->cmnd[4] & ~0x01) != 0) {	/* Mask away Prevent */
1373 1374 1375 1376 1377 1378 1379 1380 1381 1382
		curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
		return -EINVAL;
	}

	if (curlun->prevent_medium_removal && !prevent)
		fsg_lun_fsync_sub(curlun);
	curlun->prevent_medium_removal = prevent;
	return 0;
}

1383
static int do_read_format_capacities(struct fsg_common *common,
1384 1385
			struct fsg_buffhd *bh)
{
1386
	struct fsg_lun	*curlun = common->curlun;
1387 1388 1389
	u8		*buf = (u8 *) bh->buf;

	buf[0] = buf[1] = buf[2] = 0;
1390
	buf[3] = 8;	/* Only the Current/Maximum Capacity Descriptor */
1391 1392 1393 1394
	buf += 4;

	put_unaligned_be32(curlun->num_sectors, &buf[0]);
						/* Number of blocks */
1395
	put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */
1396 1397 1398 1399
	buf[4] = 0x02;				/* Current capacity */
	return 12;
}

1400
static int do_mode_select(struct fsg_common *common, struct fsg_buffhd *bh)
1401
{
1402
	struct fsg_lun	*curlun = common->curlun;
1403 1404

	/* We don't support MODE SELECT */
1405 1406
	if (curlun)
		curlun->sense_data = SS_INVALID_COMMAND;
1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457
	return -EINVAL;
}


/*-------------------------------------------------------------------------*/

static int halt_bulk_in_endpoint(struct fsg_dev *fsg)
{
	int	rc;

	rc = fsg_set_halt(fsg, fsg->bulk_in);
	if (rc == -EAGAIN)
		VDBG(fsg, "delayed bulk-in endpoint halt\n");
	while (rc != 0) {
		if (rc != -EAGAIN) {
			WARNING(fsg, "usb_ep_set_halt -> %d\n", rc);
			rc = 0;
			break;
		}

		/* Wait for a short time and then try again */
		if (msleep_interruptible(100) != 0)
			return -EINTR;
		rc = usb_ep_set_halt(fsg->bulk_in);
	}
	return rc;
}

static int wedge_bulk_in_endpoint(struct fsg_dev *fsg)
{
	int	rc;

	DBG(fsg, "bulk-in set wedge\n");
	rc = usb_ep_set_wedge(fsg->bulk_in);
	if (rc == -EAGAIN)
		VDBG(fsg, "delayed bulk-in endpoint wedge\n");
	while (rc != 0) {
		if (rc != -EAGAIN) {
			WARNING(fsg, "usb_ep_set_wedge -> %d\n", rc);
			rc = 0;
			break;
		}

		/* Wait for a short time and then try again */
		if (msleep_interruptible(100) != 0)
			return -EINTR;
		rc = usb_ep_set_wedge(fsg->bulk_in);
	}
	return rc;
}

1458
static int throw_away_data(struct fsg_common *common)
1459 1460 1461 1462 1463
{
	struct fsg_buffhd	*bh;
	u32			amount;
	int			rc;

1464 1465 1466
	for (bh = common->next_buffhd_to_drain;
	     bh->state != BUF_STATE_EMPTY || common->usb_amount_left > 0;
	     bh = common->next_buffhd_to_drain) {
1467 1468 1469 1470 1471

		/* Throw away the data in a filled buffer */
		if (bh->state == BUF_STATE_FULL) {
			smp_rmb();
			bh->state = BUF_STATE_EMPTY;
1472
			common->next_buffhd_to_drain = bh->next;
1473 1474

			/* A short packet or an error ends everything */
1475
			if (bh->outreq->actual < bh->bulk_out_intended_length ||
1476
			    bh->outreq->status != 0) {
1477 1478
				raise_exception(common,
						FSG_STATE_ABORT_BULK_OUT);
1479 1480 1481 1482 1483 1484
				return -EINTR;
			}
			continue;
		}

		/* Try to submit another request if we need one */
1485 1486 1487 1488
		bh = common->next_buffhd_to_fill;
		if (bh->state == BUF_STATE_EMPTY
		 && common->usb_amount_left > 0) {
			amount = min(common->usb_amount_left, FSG_BUFLEN);
1489

1490
			/*
1491 1492
			 * Except at the end of the transfer, amount will be
			 * equal to the buffer size, which is divisible by
1493 1494
			 * the bulk-out maxpacket size.
			 */
1495
			set_bulk_out_req_length(common, bh, amount);
1496
			if (!start_out_transfer(common, bh))
1497
				/* Dunno what to do if common->fsg is NULL */
1498 1499 1500
				return -EIO;
			common->next_buffhd_to_fill = bh->next;
			common->usb_amount_left -= amount;
1501 1502 1503 1504
			continue;
		}

		/* Otherwise wait for something to happen */
1505
		rc = sleep_thread(common);
1506 1507 1508 1509 1510 1511
		if (rc)
			return rc;
	}
	return 0;
}

1512
static int finish_reply(struct fsg_common *common)
1513
{
1514
	struct fsg_buffhd	*bh = common->next_buffhd_to_fill;
1515 1516
	int			rc = 0;

1517
	switch (common->data_dir) {
1518
	case DATA_DIR_NONE:
1519
		break;			/* Nothing to send */
1520

1521 1522
	/*
	 * If we don't know whether the host wants to read or write,
1523 1524
	 * this must be CB or CBI with an unknown command.  We mustn't
	 * try to send or receive any data.  So stall both bulk pipes
1525 1526
	 * if we can and wait for a reset.
	 */
1527
	case DATA_DIR_UNKNOWN:
1528 1529 1530 1531 1532 1533 1534 1535
		if (!common->can_stall) {
			/* Nothing */
		} else if (fsg_is_set(common)) {
			fsg_set_halt(common->fsg, common->fsg->bulk_out);
			rc = halt_bulk_in_endpoint(common->fsg);
		} else {
			/* Don't know what to do if common->fsg is NULL */
			rc = -EIO;
1536 1537 1538 1539 1540
		}
		break;

	/* All but the last buffer of data must have already been sent */
	case DATA_DIR_TO_HOST:
1541
		if (common->data_size == 0) {
1542
			/* Nothing to send */
1543

1544 1545 1546 1547
		/* Don't know what to do if common->fsg is NULL */
		} else if (!fsg_is_set(common)) {
			rc = -EIO;

1548
		/* If there's no residue, simply send the last buffer */
1549
		} else if (common->residue == 0) {
1550
			bh->inreq->zero = 0;
1551
			if (!start_in_transfer(common, bh))
1552 1553
				return -EIO;
			common->next_buffhd_to_fill = bh->next;
1554

1555
		/*
1556 1557 1558 1559 1560
		 * For Bulk-only, mark the end of the data with a short
		 * packet.  If we are allowed to stall, halt the bulk-in
		 * endpoint.  (Note: This violates the Bulk-Only Transport
		 * specification, which requires us to pad the data if we
		 * don't halt the endpoint.  Presumably nobody will mind.)
1561
		 */
1562
		} else {
1563
			bh->inreq->zero = 1;
1564
			if (!start_in_transfer(common, bh))
1565 1566
				rc = -EIO;
			common->next_buffhd_to_fill = bh->next;
1567
			if (common->can_stall)
1568
				rc = halt_bulk_in_endpoint(common->fsg);
1569 1570 1571
		}
		break;

1572 1573 1574 1575
	/*
	 * We have processed all we want from the data the host has sent.
	 * There may still be outstanding bulk-out requests.
	 */
1576
	case DATA_DIR_FROM_HOST:
1577
		if (common->residue == 0) {
1578
			/* Nothing to receive */
1579 1580

		/* Did the host stop sending unexpectedly early? */
1581 1582
		} else if (common->short_packet_received) {
			raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1583 1584
			rc = -EINTR;

1585 1586
		/*
		 * We haven't processed all the incoming data.  Even though
1587 1588 1589 1590
		 * we may be allowed to stall, doing so would cause a race.
		 * The controller may already have ACK'ed all the remaining
		 * bulk-out packets, in which case the host wouldn't see a
		 * STALL.  Not realizing the endpoint was halted, it wouldn't
1591 1592
		 * clear the halt -- leading to problems later on.
		 */
1593
#if 0
1594 1595 1596 1597 1598
		} else if (common->can_stall) {
			if (fsg_is_set(common))
				fsg_set_halt(common->fsg,
					     common->fsg->bulk_out);
			raise_exception(common, FSG_STATE_ABORT_BULK_OUT);
1599 1600 1601
			rc = -EINTR;
#endif

1602 1603 1604 1605
		/*
		 * We can't stall.  Read in the excess data and throw it
		 * all away.
		 */
1606
		} else {
1607
			rc = throw_away_data(common);
1608
		}
1609 1610 1611 1612 1613
		break;
	}
	return rc;
}

1614
static int send_status(struct fsg_common *common)
1615
{
1616
	struct fsg_lun		*curlun = common->curlun;
1617
	struct fsg_buffhd	*bh;
1618
	struct bulk_cs_wrap	*csw;
1619
	int			rc;
1620
	u8			status = US_BULK_STAT_OK;
1621 1622 1623
	u32			sd, sdinfo = 0;

	/* Wait for the next buffer to become available */
1624
	bh = common->next_buffhd_to_fill;
1625
	while (bh->state != BUF_STATE_EMPTY) {
1626
		rc = sleep_thread(common);
1627 1628 1629 1630 1631 1632 1633
		if (rc)
			return rc;
	}

	if (curlun) {
		sd = curlun->sense_data;
		sdinfo = curlun->sense_data_info;
1634
	} else if (common->bad_lun_okay)
1635 1636 1637 1638
		sd = SS_NO_SENSE;
	else
		sd = SS_LOGICAL_UNIT_NOT_SUPPORTED;

1639 1640
	if (common->phase_error) {
		DBG(common, "sending phase-error status\n");
1641
		status = US_BULK_STAT_PHASE;
1642 1643
		sd = SS_INVALID_COMMAND;
	} else if (sd != SS_NO_SENSE) {
1644
		DBG(common, "sending command-failure status\n");
1645
		status = US_BULK_STAT_FAIL;
1646
		VDBG(common, "  sense data: SK x%02x, ASC x%02x, ASCQ x%02x;"
1647 1648 1649 1650
				"  info x%x\n",
				SK(sd), ASC(sd), ASCQ(sd), sdinfo);
	}

1651
	/* Store and send the Bulk-only CSW */
1652
	csw = (void *)bh->buf;
1653

1654
	csw->Signature = cpu_to_le32(US_BULK_CS_SIGN);
1655 1656
	csw->Tag = common->tag;
	csw->Residue = cpu_to_le32(common->residue);
1657
	csw->Status = status;
1658

1659
	bh->inreq->length = US_BULK_CS_WRAP_LEN;
1660
	bh->inreq->zero = 0;
1661
	if (!start_in_transfer(common, bh))
1662 1663
		/* Don't know what to do if common->fsg is NULL */
		return -EIO;
1664

1665
	common->next_buffhd_to_fill = bh->next;
1666 1667 1668 1669 1670 1671
	return 0;
}


/*-------------------------------------------------------------------------*/

1672 1673 1674 1675
/*
 * Check whether the command is properly formed and whether its data size
 * and direction agree with the values we already have.
 */
1676
static int check_command(struct fsg_common *common, int cmnd_size,
1677 1678
			 enum data_direction data_dir, unsigned int mask,
			 int needs_medium, const char *name)
1679 1680
{
	int			i;
1681
	unsigned int		lun = common->cmnd[1] >> 5;
1682 1683 1684 1685 1686
	static const char	dirletter[4] = {'u', 'o', 'i', 'n'};
	char			hdlen[20];
	struct fsg_lun		*curlun;

	hdlen[0] = 0;
1687 1688
	if (common->data_dir != DATA_DIR_UNKNOWN)
		sprintf(hdlen, ", H%c=%u", dirletter[(int) common->data_dir],
1689
			common->data_size);
1690
	VDBG(common, "SCSI command: %s;  Dc=%d, D%c=%u;  Hc=%d%s\n",
1691
	     name, cmnd_size, dirletter[(int) data_dir],
1692
	     common->data_size_from_cmnd, common->cmnd_size, hdlen);
1693

1694 1695 1696 1697
	/*
	 * We can't reply at all until we know the correct data direction
	 * and size.
	 */
1698
	if (common->data_size_from_cmnd == 0)
1699
		data_dir = DATA_DIR_NONE;
1700
	if (common->data_size < common->data_size_from_cmnd) {
1701 1702
		/*
		 * Host data size < Device data size is a phase error.
1703
		 * Carry out the command, but only transfer as much as
1704 1705
		 * we are allowed.
		 */
1706 1707
		common->data_size_from_cmnd = common->data_size;
		common->phase_error = 1;
1708
	}
1709 1710
	common->residue = common->data_size;
	common->usb_amount_left = common->data_size;
1711 1712

	/* Conflicting data directions is a phase error */
1713
	if (common->data_dir != data_dir && common->data_size_from_cmnd > 0) {
1714
		common->phase_error = 1;
1715 1716 1717 1718
		return -EINVAL;
	}

	/* Verify the length of the command itself */
1719
	if (cmnd_size != common->cmnd_size) {
1720

1721 1722
		/*
		 * Special case workaround: There are plenty of buggy SCSI
1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733
		 * implementations. Many have issues with cbw->Length
		 * field passing a wrong command size. For those cases we
		 * always try to work around the problem by using the length
		 * sent by the host side provided it is at least as large
		 * as the correct command length.
		 * Examples of such cases would be MS-Windows, which issues
		 * REQUEST SENSE with cbw->Length == 12 where it should
		 * be 6, and xbox360 issuing INQUIRY, TEST UNIT READY and
		 * REQUEST SENSE with cbw->Length == 10 where it should
		 * be 6 as well.
		 */
1734 1735
		if (cmnd_size <= common->cmnd_size) {
			DBG(common, "%s is buggy! Expected length %d "
1736
			    "but we got %d\n", name,
1737 1738
			    cmnd_size, common->cmnd_size);
			cmnd_size = common->cmnd_size;
1739
		} else {
1740
			common->phase_error = 1;
1741 1742 1743 1744 1745
			return -EINVAL;
		}
	}

	/* Check that the LUN values are consistent */
1746
	if (common->lun != lun)
1747
		DBG(common, "using LUN %u from CBW, not LUN %u from CDB\n",
1748
		    common->lun, lun);
1749 1750

	/* Check the LUN */
1751 1752
	curlun = common->curlun;
	if (curlun) {
1753
		if (common->cmnd[0] != REQUEST_SENSE) {
1754 1755 1756 1757 1758
			curlun->sense_data = SS_NO_SENSE;
			curlun->sense_data_info = 0;
			curlun->info_valid = 0;
		}
	} else {
1759
		common->bad_lun_okay = 0;
1760

1761 1762 1763 1764
		/*
		 * INQUIRY and REQUEST SENSE commands are explicitly allowed
		 * to use unsupported LUNs; all others may not.
		 */
1765 1766
		if (common->cmnd[0] != INQUIRY &&
		    common->cmnd[0] != REQUEST_SENSE) {
1767
			DBG(common, "unsupported LUN %u\n", common->lun);
1768 1769 1770 1771
			return -EINVAL;
		}
	}

1772 1773 1774 1775
	/*
	 * If a unit attention condition exists, only INQUIRY and
	 * REQUEST SENSE commands are allowed; anything else must fail.
	 */
1776
	if (curlun && curlun->unit_attention_data != SS_NO_SENSE &&
1777 1778
	    common->cmnd[0] != INQUIRY &&
	    common->cmnd[0] != REQUEST_SENSE) {
1779 1780 1781 1782 1783 1784
		curlun->sense_data = curlun->unit_attention_data;
		curlun->unit_attention_data = SS_NO_SENSE;
		return -EINVAL;
	}

	/* Check that only command bytes listed in the mask are non-zero */
1785
	common->cmnd[1] &= 0x1f;			/* Mask away the LUN */
1786
	for (i = 1; i < cmnd_size; ++i) {
1787
		if (common->cmnd[i] && !(mask & (1 << i))) {
1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803
			if (curlun)
				curlun->sense_data = SS_INVALID_FIELD_IN_CDB;
			return -EINVAL;
		}
	}

	/* If the medium isn't mounted and the command needs to access
	 * it, return an error. */
	if (curlun && !fsg_lun_is_open(curlun) && needs_medium) {
		curlun->sense_data = SS_MEDIUM_NOT_PRESENT;
		return -EINVAL;
	}

	return 0;
}

1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814
/* wrapper of check_command for data size in blocks handling */
static int check_command_size_in_blocks(struct fsg_common *common,
		int cmnd_size, enum data_direction data_dir,
		unsigned int mask, int needs_medium, const char *name)
{
	if (common->curlun)
		common->data_size_from_cmnd <<= common->curlun->blkbits;
	return check_command(common, cmnd_size, data_dir,
			mask, needs_medium, name);
}

1815
static int do_scsi_command(struct fsg_common *common)
1816 1817 1818 1819 1820 1821 1822
{
	struct fsg_buffhd	*bh;
	int			rc;
	int			reply = -EINVAL;
	int			i;
	static char		unknown[16];

1823
	dump_cdb(common);
1824 1825

	/* Wait for the next buffer to become available for data or status */
1826 1827
	bh = common->next_buffhd_to_fill;
	common->next_buffhd_to_drain = bh;
1828
	while (bh->state != BUF_STATE_EMPTY) {
1829
		rc = sleep_thread(common);
1830 1831 1832
		if (rc)
			return rc;
	}
1833 1834
	common->phase_error = 0;
	common->short_packet_received = 0;
1835

1836 1837
	down_read(&common->filesem);	/* We're using the backing file */
	switch (common->cmnd[0]) {
1838

1839
	case INQUIRY:
1840 1841
		common->data_size_from_cmnd = common->cmnd[4];
		reply = check_command(common, 6, DATA_DIR_TO_HOST,
1842 1843 1844
				      (1<<4), 0,
				      "INQUIRY");
		if (reply == 0)
1845
			reply = do_inquiry(common, bh);
1846 1847
		break;

1848
	case MODE_SELECT:
1849 1850
		common->data_size_from_cmnd = common->cmnd[4];
		reply = check_command(common, 6, DATA_DIR_FROM_HOST,
1851 1852 1853
				      (1<<1) | (1<<4), 0,
				      "MODE SELECT(6)");
		if (reply == 0)
1854
			reply = do_mode_select(common, bh);
1855 1856
		break;

1857
	case MODE_SELECT_10:
1858 1859 1860
		common->data_size_from_cmnd =
			get_unaligned_be16(&common->cmnd[7]);
		reply = check_command(common, 10, DATA_DIR_FROM_HOST,
1861 1862 1863
				      (1<<1) | (3<<7), 0,
				      "MODE SELECT(10)");
		if (reply == 0)
1864
			reply = do_mode_select(common, bh);
1865 1866
		break;

1867
	case MODE_SENSE:
1868 1869
		common->data_size_from_cmnd = common->cmnd[4];
		reply = check_command(common, 6, DATA_DIR_TO_HOST,
1870 1871 1872
				      (1<<1) | (1<<2) | (1<<4), 0,
				      "MODE SENSE(6)");
		if (reply == 0)
1873
			reply = do_mode_sense(common, bh);
1874 1875
		break;

1876
	case MODE_SENSE_10:
1877 1878 1879
		common->data_size_from_cmnd =
			get_unaligned_be16(&common->cmnd[7]);
		reply = check_command(common, 10, DATA_DIR_TO_HOST,
1880 1881 1882
				      (1<<1) | (1<<2) | (3<<7), 0,
				      "MODE SENSE(10)");
		if (reply == 0)
1883
			reply = do_mode_sense(common, bh);
1884 1885
		break;

1886
	case ALLOW_MEDIUM_REMOVAL:
1887 1888
		common->data_size_from_cmnd = 0;
		reply = check_command(common, 6, DATA_DIR_NONE,
1889 1890 1891
				      (1<<4), 0,
				      "PREVENT-ALLOW MEDIUM REMOVAL");
		if (reply == 0)
1892
			reply = do_prevent_allow(common);
1893 1894
		break;

1895
	case READ_6:
1896
		i = common->cmnd[4];
1897 1898 1899
		common->data_size_from_cmnd = (i == 0) ? 256 : i;
		reply = check_command_size_in_blocks(common, 6,
				      DATA_DIR_TO_HOST,
1900 1901 1902
				      (7<<1) | (1<<4), 1,
				      "READ(6)");
		if (reply == 0)
1903
			reply = do_read(common);
1904 1905
		break;

1906
	case READ_10:
1907
		common->data_size_from_cmnd =
1908 1909 1910
				get_unaligned_be16(&common->cmnd[7]);
		reply = check_command_size_in_blocks(common, 10,
				      DATA_DIR_TO_HOST,
1911 1912 1913
				      (1<<1) | (0xf<<2) | (3<<7), 1,
				      "READ(10)");
		if (reply == 0)
1914
			reply = do_read(common);
1915 1916
		break;

1917
	case READ_12:
1918
		common->data_size_from_cmnd =
1919 1920 1921
				get_unaligned_be32(&common->cmnd[6]);
		reply = check_command_size_in_blocks(common, 12,
				      DATA_DIR_TO_HOST,
1922 1923 1924
				      (1<<1) | (0xf<<2) | (0xf<<6), 1,
				      "READ(12)");
		if (reply == 0)
1925
			reply = do_read(common);
1926 1927
		break;

1928
	case READ_CAPACITY:
1929 1930
		common->data_size_from_cmnd = 8;
		reply = check_command(common, 10, DATA_DIR_TO_HOST,
1931 1932 1933
				      (0xf<<2) | (1<<8), 1,
				      "READ CAPACITY");
		if (reply == 0)
1934
			reply = do_read_capacity(common, bh);
1935 1936
		break;

1937
	case READ_HEADER:
1938
		if (!common->curlun || !common->curlun->cdrom)
1939
			goto unknown_cmnd;
1940 1941 1942
		common->data_size_from_cmnd =
			get_unaligned_be16(&common->cmnd[7]);
		reply = check_command(common, 10, DATA_DIR_TO_HOST,
1943 1944 1945
				      (3<<7) | (0x1f<<1), 1,
				      "READ HEADER");
		if (reply == 0)
1946
			reply = do_read_header(common, bh);
1947 1948
		break;

1949
	case READ_TOC:
1950
		if (!common->curlun || !common->curlun->cdrom)
1951
			goto unknown_cmnd;
1952 1953 1954
		common->data_size_from_cmnd =
			get_unaligned_be16(&common->cmnd[7]);
		reply = check_command(common, 10, DATA_DIR_TO_HOST,
1955 1956 1957
				      (7<<6) | (1<<1), 1,
				      "READ TOC");
		if (reply == 0)
1958
			reply = do_read_toc(common, bh);
1959 1960
		break;

1961
	case READ_FORMAT_CAPACITIES:
1962 1963 1964
		common->data_size_from_cmnd =
			get_unaligned_be16(&common->cmnd[7]);
		reply = check_command(common, 10, DATA_DIR_TO_HOST,
1965 1966 1967
				      (3<<7), 1,
				      "READ FORMAT CAPACITIES");
		if (reply == 0)
1968
			reply = do_read_format_capacities(common, bh);
1969 1970
		break;

1971
	case REQUEST_SENSE:
1972 1973
		common->data_size_from_cmnd = common->cmnd[4];
		reply = check_command(common, 6, DATA_DIR_TO_HOST,
1974 1975 1976
				      (1<<4), 0,
				      "REQUEST SENSE");
		if (reply == 0)
1977
			reply = do_request_sense(common, bh);
1978 1979
		break;

1980
	case START_STOP:
1981 1982
		common->data_size_from_cmnd = 0;
		reply = check_command(common, 6, DATA_DIR_NONE,
1983 1984 1985
				      (1<<1) | (1<<4), 0,
				      "START-STOP UNIT");
		if (reply == 0)
1986
			reply = do_start_stop(common);
1987 1988
		break;

1989
	case SYNCHRONIZE_CACHE:
1990 1991
		common->data_size_from_cmnd = 0;
		reply = check_command(common, 10, DATA_DIR_NONE,
1992 1993 1994
				      (0xf<<2) | (3<<7), 1,
				      "SYNCHRONIZE CACHE");
		if (reply == 0)
1995
			reply = do_synchronize_cache(common);
1996 1997
		break;

1998
	case TEST_UNIT_READY:
1999 2000
		common->data_size_from_cmnd = 0;
		reply = check_command(common, 6, DATA_DIR_NONE,
2001 2002 2003 2004
				0, 1,
				"TEST UNIT READY");
		break;

2005 2006 2007 2008
	/*
	 * Although optional, this command is used by MS-Windows.  We
	 * support a minimal version: BytChk must be 0.
	 */
2009
	case VERIFY:
2010 2011
		common->data_size_from_cmnd = 0;
		reply = check_command(common, 10, DATA_DIR_NONE,
2012 2013 2014
				      (1<<1) | (0xf<<2) | (3<<7), 1,
				      "VERIFY");
		if (reply == 0)
2015
			reply = do_verify(common);
2016 2017
		break;

2018
	case WRITE_6:
2019
		i = common->cmnd[4];
2020 2021 2022
		common->data_size_from_cmnd = (i == 0) ? 256 : i;
		reply = check_command_size_in_blocks(common, 6,
				      DATA_DIR_FROM_HOST,
2023 2024 2025
				      (7<<1) | (1<<4), 1,
				      "WRITE(6)");
		if (reply == 0)
2026
			reply = do_write(common);
2027 2028
		break;

2029
	case WRITE_10:
2030
		common->data_size_from_cmnd =
2031 2032 2033
				get_unaligned_be16(&common->cmnd[7]);
		reply = check_command_size_in_blocks(common, 10,
				      DATA_DIR_FROM_HOST,
2034 2035 2036
				      (1<<1) | (0xf<<2) | (3<<7), 1,
				      "WRITE(10)");
		if (reply == 0)
2037
			reply = do_write(common);
2038 2039
		break;

2040
	case WRITE_12:
2041
		common->data_size_from_cmnd =
2042 2043 2044
				get_unaligned_be32(&common->cmnd[6]);
		reply = check_command_size_in_blocks(common, 12,
				      DATA_DIR_FROM_HOST,
2045 2046 2047
				      (1<<1) | (0xf<<2) | (0xf<<6), 1,
				      "WRITE(12)");
		if (reply == 0)
2048
			reply = do_write(common);
2049 2050
		break;

2051 2052
	/*
	 * Some mandatory commands that we recognize but don't implement.
2053 2054
	 * They don't mean much in this setting.  It's left as an exercise
	 * for anyone interested to implement RESERVE and RELEASE in terms
2055 2056
	 * of Posix locks.
	 */
2057 2058 2059 2060
	case FORMAT_UNIT:
	case RELEASE:
	case RESERVE:
	case SEND_DIAGNOSTIC:
2061
		/* Fall through */
2062 2063

	default:
2064
unknown_cmnd:
2065 2066 2067
		common->data_size_from_cmnd = 0;
		sprintf(unknown, "Unknown x%02x", common->cmnd[0]);
		reply = check_command(common, common->cmnd_size,
2068
				      DATA_DIR_UNKNOWN, ~0, 0, unknown);
2069
		if (reply == 0) {
2070
			common->curlun->sense_data = SS_INVALID_COMMAND;
2071 2072 2073 2074
			reply = -EINVAL;
		}
		break;
	}
2075
	up_read(&common->filesem);
2076 2077 2078 2079 2080 2081

	if (reply == -EINTR || signal_pending(current))
		return -EINTR;

	/* Set up the single reply buffer for finish_reply() */
	if (reply == -EINVAL)
2082
		reply = 0;		/* Error reply length */
2083
	if (reply >= 0 && common->data_dir == DATA_DIR_TO_HOST) {
2084
		reply = min((u32)reply, common->data_size_from_cmnd);
2085 2086
		bh->inreq->length = reply;
		bh->state = BUF_STATE_FULL;
2087
		common->residue -= reply;
2088
	}				/* Otherwise it's already set */
2089 2090 2091 2092 2093 2094 2095 2096 2097

	return 0;
}


/*-------------------------------------------------------------------------*/

static int received_cbw(struct fsg_dev *fsg, struct fsg_buffhd *bh)
{
2098
	struct usb_request	*req = bh->outreq;
2099
	struct bulk_cb_wrap	*cbw = req->buf;
2100
	struct fsg_common	*common = fsg->common;
2101 2102 2103 2104 2105 2106

	/* Was this a real packet?  Should it be ignored? */
	if (req->status || test_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags))
		return -EINVAL;

	/* Is the CBW valid? */
2107
	if (req->actual != US_BULK_CB_WRAP_LEN ||
2108
			cbw->Signature != cpu_to_le32(
2109
				US_BULK_CB_SIGN)) {
2110 2111 2112 2113
		DBG(fsg, "invalid CBW: len %u sig 0x%x\n",
				req->actual,
				le32_to_cpu(cbw->Signature));

2114 2115
		/*
		 * The Bulk-only spec says we MUST stall the IN endpoint
2116 2117 2118 2119 2120 2121 2122
		 * (6.6.1), so it's unavoidable.  It also says we must
		 * retain this state until the next reset, but there's
		 * no way to tell the controller driver it should ignore
		 * Clear-Feature(HALT) requests.
		 *
		 * We aren't required to halt the OUT endpoint; instead
		 * we can simply accept and discard any data received
2123 2124
		 * until the next reset.
		 */
2125 2126 2127 2128 2129 2130
		wedge_bulk_in_endpoint(fsg);
		set_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);
		return -EINVAL;
	}

	/* Is the CBW meaningful? */
2131
	if (cbw->Lun >= FSG_MAX_LUNS || cbw->Flags & ~US_BULK_FLAG_IN ||
2132 2133 2134 2135 2136
			cbw->Length <= 0 || cbw->Length > MAX_COMMAND_SIZE) {
		DBG(fsg, "non-meaningful CBW: lun = %u, flags = 0x%x, "
				"cmdlen %u\n",
				cbw->Lun, cbw->Flags, cbw->Length);

2137 2138 2139 2140
		/*
		 * We can do anything we want here, so let's stall the
		 * bulk pipes if we are allowed to.
		 */
2141
		if (common->can_stall) {
2142 2143 2144 2145 2146 2147 2148
			fsg_set_halt(fsg, fsg->bulk_out);
			halt_bulk_in_endpoint(fsg);
		}
		return -EINVAL;
	}

	/* Save the command for later */
2149 2150
	common->cmnd_size = cbw->Length;
	memcpy(common->cmnd, cbw->CDB, common->cmnd_size);
2151
	if (cbw->Flags & US_BULK_FLAG_IN)
2152
		common->data_dir = DATA_DIR_TO_HOST;
2153
	else
2154 2155 2156 2157 2158
		common->data_dir = DATA_DIR_FROM_HOST;
	common->data_size = le32_to_cpu(cbw->DataTransferLength);
	if (common->data_size == 0)
		common->data_dir = DATA_DIR_NONE;
	common->lun = cbw->Lun;
2159
	if (common->lun < common->nluns)
2160
		common->curlun = common->luns[common->lun];
2161 2162
	else
		common->curlun = NULL;
2163
	common->tag = cbw->Tag;
2164 2165 2166
	return 0;
}

2167
static int get_next_command(struct fsg_common *common)
2168 2169 2170 2171
{
	struct fsg_buffhd	*bh;
	int			rc = 0;

2172
	/* Wait for the next buffer to become available */
2173
	bh = common->next_buffhd_to_fill;
2174
	while (bh->state != BUF_STATE_EMPTY) {
2175
		rc = sleep_thread(common);
2176 2177 2178
		if (rc)
			return rc;
	}
2179

2180
	/* Queue a request to read a Bulk-only CBW */
2181
	set_bulk_out_req_length(common, bh, US_BULK_CB_WRAP_LEN);
2182
	if (!start_out_transfer(common, bh))
2183 2184
		/* Don't know what to do if common->fsg is NULL */
		return -EIO;
2185

2186 2187
	/*
	 * We will drain the buffer in software, which means we
2188
	 * can reuse it for the next filling.  No need to advance
2189 2190
	 * next_buffhd_to_fill.
	 */
2191

2192 2193
	/* Wait for the CBW to arrive */
	while (bh->state != BUF_STATE_FULL) {
2194
		rc = sleep_thread(common);
2195 2196
		if (rc)
			return rc;
2197
	}
2198
	smp_rmb();
2199
	rc = fsg_is_set(common) ? received_cbw(common->fsg, bh) : -EIO;
2200 2201
	bh->state = BUF_STATE_EMPTY;

2202 2203 2204 2205 2206 2207
	return rc;
}


/*-------------------------------------------------------------------------*/

2208
static int alloc_request(struct fsg_common *common, struct usb_ep *ep,
2209 2210 2211 2212 2213
		struct usb_request **preq)
{
	*preq = usb_ep_alloc_request(ep, GFP_ATOMIC);
	if (*preq)
		return 0;
2214
	ERROR(common, "can't allocate request for %s\n", ep->name);
2215 2216 2217
	return -ENOMEM;
}

2218 2219
/* Reset interface setting and re-init endpoint state (toggle etc). */
static int do_set_interface(struct fsg_common *common, struct fsg_dev *new_fsg)
2220
{
2221 2222
	struct fsg_dev *fsg;
	int i, rc = 0;
2223

2224 2225
	if (common->running)
		DBG(common, "reset interface\n");
2226 2227 2228

reset:
	/* Deallocate the requests */
2229 2230
	if (common->fsg) {
		fsg = common->fsg;
2231

2232
		for (i = 0; i < common->fsg_num_buffers; ++i) {
2233
			struct fsg_buffhd *bh = &common->buffhds[i];
2234

2235 2236 2237 2238 2239 2240 2241 2242
			if (bh->inreq) {
				usb_ep_free_request(fsg->bulk_in, bh->inreq);
				bh->inreq = NULL;
			}
			if (bh->outreq) {
				usb_ep_free_request(fsg->bulk_out, bh->outreq);
				bh->outreq = NULL;
			}
2243
		}
2244 2245 2246 2247

		/* Disable the endpoints */
		if (fsg->bulk_in_enabled) {
			usb_ep_disable(fsg->bulk_in);
2248
			fsg->bulk_in->driver_data = NULL;
2249 2250 2251 2252
			fsg->bulk_in_enabled = 0;
		}
		if (fsg->bulk_out_enabled) {
			usb_ep_disable(fsg->bulk_out);
2253
			fsg->bulk_out->driver_data = NULL;
2254
			fsg->bulk_out_enabled = 0;
2255 2256
		}

2257 2258
		common->fsg = NULL;
		wake_up(&common->fsg_wait);
2259 2260
	}

2261
	common->running = 0;
2262
	if (!new_fsg || rc)
2263 2264
		return rc;

2265 2266
	common->fsg = new_fsg;
	fsg = common->fsg;
2267

2268
	/* Enable the endpoints */
2269 2270 2271 2272
	rc = config_ep_by_speed(common->gadget, &(fsg->function), fsg->bulk_in);
	if (rc)
		goto reset;
	rc = usb_ep_enable(fsg->bulk_in);
2273 2274
	if (rc)
		goto reset;
2275
	fsg->bulk_in->driver_data = common;
2276
	fsg->bulk_in_enabled = 1;
2277

2278 2279 2280 2281 2282
	rc = config_ep_by_speed(common->gadget, &(fsg->function),
				fsg->bulk_out);
	if (rc)
		goto reset;
	rc = usb_ep_enable(fsg->bulk_out);
2283 2284
	if (rc)
		goto reset;
2285
	fsg->bulk_out->driver_data = common;
2286
	fsg->bulk_out_enabled = 1;
2287
	common->bulk_out_maxpacket = usb_endpoint_maxp(fsg->bulk_out->desc);
2288 2289 2290
	clear_bit(IGNORE_BULK_OUT, &fsg->atomic_bitflags);

	/* Allocate the requests */
2291
	for (i = 0; i < common->fsg_num_buffers; ++i) {
2292 2293 2294
		struct fsg_buffhd	*bh = &common->buffhds[i];

		rc = alloc_request(common, fsg->bulk_in, &bh->inreq);
2295
		if (rc)
2296
			goto reset;
2297
		rc = alloc_request(common, fsg->bulk_out, &bh->outreq);
2298
		if (rc)
2299
			goto reset;
2300 2301 2302 2303
		bh->inreq->buf = bh->outreq->buf = bh->buf;
		bh->inreq->context = bh->outreq->context = bh;
		bh->inreq->complete = bulk_in_complete;
		bh->outreq->complete = bulk_out_complete;
2304
	}
2305

2306 2307
	common->running = 1;
	for (i = 0; i < common->nluns; ++i)
2308 2309 2310
		if (common->luns[i])
			common->luns[i]->unit_attention_data =
				SS_RESET_OCCURRED;
2311 2312 2313 2314
	return rc;
}


2315 2316 2317 2318 2319
/****************************** ALT CONFIGS ******************************/

static int fsg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
{
	struct fsg_dev *fsg = fsg_from_func(f);
2320
	fsg->common->new_fsg = fsg;
2321
	raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2322
	return USB_GADGET_DELAYED_STATUS;
2323 2324 2325 2326 2327
}

static void fsg_disable(struct usb_function *f)
{
	struct fsg_dev *fsg = fsg_from_func(f);
2328
	fsg->common->new_fsg = NULL;
2329
	raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
2330 2331 2332
}


2333 2334
/*-------------------------------------------------------------------------*/

2335
static void handle_exception(struct fsg_common *common)
2336 2337 2338 2339 2340 2341 2342 2343
{
	siginfo_t		info;
	int			i;
	struct fsg_buffhd	*bh;
	enum fsg_state		old_state;
	struct fsg_lun		*curlun;
	unsigned int		exception_req_tag;

2344 2345 2346 2347
	/*
	 * Clear the existing signals.  Anything but SIGUSR1 is converted
	 * into a high-priority EXIT exception.
	 */
2348
	for (;;) {
2349 2350
		int sig =
			dequeue_signal_lock(current, &current->blocked, &info);
2351 2352 2353
		if (!sig)
			break;
		if (sig != SIGUSR1) {
2354 2355 2356
			if (common->state < FSG_STATE_EXIT)
				DBG(common, "Main thread exiting on signal\n");
			raise_exception(common, FSG_STATE_EXIT);
2357 2358 2359 2360
		}
	}

	/* Cancel all the pending transfers */
2361
	if (likely(common->fsg)) {
2362
		for (i = 0; i < common->fsg_num_buffers; ++i) {
2363 2364 2365 2366 2367 2368
			bh = &common->buffhds[i];
			if (bh->inreq_busy)
				usb_ep_dequeue(common->fsg->bulk_in, bh->inreq);
			if (bh->outreq_busy)
				usb_ep_dequeue(common->fsg->bulk_out,
					       bh->outreq);
2369 2370
		}

2371 2372 2373
		/* Wait until everything is idle */
		for (;;) {
			int num_active = 0;
2374
			for (i = 0; i < common->fsg_num_buffers; ++i) {
2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389
				bh = &common->buffhds[i];
				num_active += bh->inreq_busy + bh->outreq_busy;
			}
			if (num_active == 0)
				break;
			if (sleep_thread(common))
				return;
		}

		/* Clear out the controller's fifos */
		if (common->fsg->bulk_in_enabled)
			usb_ep_fifo_flush(common->fsg->bulk_in);
		if (common->fsg->bulk_out_enabled)
			usb_ep_fifo_flush(common->fsg->bulk_out);
	}
2390

2391 2392 2393 2394
	/*
	 * Reset the I/O buffer states and pointers, the SCSI
	 * state, and the exception.  Then invoke the handler.
	 */
2395
	spin_lock_irq(&common->lock);
2396

2397
	for (i = 0; i < common->fsg_num_buffers; ++i) {
2398
		bh = &common->buffhds[i];
2399 2400
		bh->state = BUF_STATE_EMPTY;
	}
2401 2402 2403 2404
	common->next_buffhd_to_fill = &common->buffhds[0];
	common->next_buffhd_to_drain = &common->buffhds[0];
	exception_req_tag = common->exception_req_tag;
	old_state = common->state;
2405 2406

	if (old_state == FSG_STATE_ABORT_BULK_OUT)
2407
		common->state = FSG_STATE_STATUS_PHASE;
2408
	else {
2409
		for (i = 0; i < common->nluns; ++i) {
2410 2411 2412
			curlun = common->luns[i];
			if (!curlun)
				continue;
2413
			curlun->prevent_medium_removal = 0;
2414 2415
			curlun->sense_data = SS_NO_SENSE;
			curlun->unit_attention_data = SS_NO_SENSE;
2416 2417 2418
			curlun->sense_data_info = 0;
			curlun->info_valid = 0;
		}
2419
		common->state = FSG_STATE_IDLE;
2420
	}
2421
	spin_unlock_irq(&common->lock);
2422 2423 2424 2425

	/* Carry out any extra actions required for the exception */
	switch (old_state) {
	case FSG_STATE_ABORT_BULK_OUT:
2426 2427 2428 2429 2430
		send_status(common);
		spin_lock_irq(&common->lock);
		if (common->state == FSG_STATE_STATUS_PHASE)
			common->state = FSG_STATE_IDLE;
		spin_unlock_irq(&common->lock);
2431 2432 2433
		break;

	case FSG_STATE_RESET:
2434 2435
		/*
		 * In case we were forced against our will to halt a
2436
		 * bulk endpoint, clear the halt now.  (The SuperH UDC
2437 2438
		 * requires this.)
		 */
2439 2440 2441 2442 2443
		if (!fsg_is_set(common))
			break;
		if (test_and_clear_bit(IGNORE_BULK_OUT,
				       &common->fsg->atomic_bitflags))
			usb_ep_clear_halt(common->fsg->bulk_in);
2444

2445 2446
		if (common->ep0_req_tag == exception_req_tag)
			ep0_queue(common);	/* Complete the status stage */
2447

2448 2449
		/*
		 * Technically this should go here, but it would only be
2450
		 * a waste of time.  Ditto for the INTERFACE_CHANGE and
2451 2452
		 * CONFIG_CHANGE cases.
		 */
2453
		/* for (i = 0; i < common->nluns; ++i) */
2454 2455 2456
		/*	if (common->luns[i]) */
		/*		common->luns[i]->unit_attention_data = */
		/*			SS_RESET_OCCURRED;  */
2457 2458 2459
		break;

	case FSG_STATE_CONFIG_CHANGE:
2460
		do_set_interface(common, common->new_fsg);
2461 2462
		if (common->new_fsg)
			usb_composite_setup_continue(common->cdev);
2463 2464 2465 2466
		break;

	case FSG_STATE_EXIT:
	case FSG_STATE_TERMINATED:
2467
		do_set_interface(common, NULL);		/* Free resources */
2468 2469 2470
		spin_lock_irq(&common->lock);
		common->state = FSG_STATE_TERMINATED;	/* Stop the thread */
		spin_unlock_irq(&common->lock);
2471
		break;
2472 2473 2474 2475 2476 2477 2478 2479

	case FSG_STATE_INTERFACE_CHANGE:
	case FSG_STATE_DISCONNECT:
	case FSG_STATE_COMMAND_PHASE:
	case FSG_STATE_DATA_PHASE:
	case FSG_STATE_STATUS_PHASE:
	case FSG_STATE_IDLE:
		break;
2480 2481 2482 2483 2484 2485
	}
}


/*-------------------------------------------------------------------------*/

2486
static int fsg_main_thread(void *common_)
2487
{
2488
	struct fsg_common	*common = common_;
2489

2490 2491 2492 2493
	/*
	 * Allow the thread to be killed by a signal, but set the signal mask
	 * to block everything but INT, TERM, KILL, and USR1.
	 */
2494 2495 2496 2497 2498 2499 2500 2501
	allow_signal(SIGINT);
	allow_signal(SIGTERM);
	allow_signal(SIGKILL);
	allow_signal(SIGUSR1);

	/* Allow the thread to be frozen */
	set_freezable();

2502 2503
	/*
	 * Arrange for userspace references to be interpreted as kernel
2504
	 * pointers.  That way we can pass a kernel pointer to a routine
2505 2506
	 * that expects a __user pointer and it will work okay.
	 */
2507 2508 2509
	set_fs(get_ds());

	/* The main loop */
2510 2511 2512
	while (common->state != FSG_STATE_TERMINATED) {
		if (exception_in_progress(common) || signal_pending(current)) {
			handle_exception(common);
2513 2514 2515
			continue;
		}

2516 2517
		if (!common->running) {
			sleep_thread(common);
2518 2519 2520
			continue;
		}

2521
		if (get_next_command(common))
2522 2523
			continue;

2524 2525 2526 2527
		spin_lock_irq(&common->lock);
		if (!exception_in_progress(common))
			common->state = FSG_STATE_DATA_PHASE;
		spin_unlock_irq(&common->lock);
2528

2529
		if (do_scsi_command(common) || finish_reply(common))
2530 2531
			continue;

2532 2533 2534 2535
		spin_lock_irq(&common->lock);
		if (!exception_in_progress(common))
			common->state = FSG_STATE_STATUS_PHASE;
		spin_unlock_irq(&common->lock);
2536

2537
		if (send_status(common))
2538 2539
			continue;

2540 2541 2542 2543
		spin_lock_irq(&common->lock);
		if (!exception_in_progress(common))
			common->state = FSG_STATE_IDLE;
		spin_unlock_irq(&common->lock);
2544
	}
2545

2546 2547 2548
	spin_lock_irq(&common->lock);
	common->thread_task = NULL;
	spin_unlock_irq(&common->lock);
2549

2550 2551
	if (!common->ops || !common->ops->thread_exits
	 || common->ops->thread_exits(common) < 0) {
2552
		struct fsg_lun **curlun_it = common->luns;
2553 2554 2555
		unsigned i = common->nluns;

		down_write(&common->filesem);
2556 2557 2558
		for (; i--; ++curlun_it) {
			struct fsg_lun *curlun = *curlun_it;
			if (!curlun || !fsg_lun_is_open(curlun))
2559 2560 2561 2562 2563 2564 2565
				continue;

			fsg_lun_close(curlun);
			curlun->unit_attention_data = SS_MEDIUM_NOT_PRESENT;
		}
		up_write(&common->filesem);
	}
2566

2567
	/* Let fsg_unbind() know the thread has exited */
2568
	complete_and_exit(&common->thread_notifier, 0);
2569 2570 2571
}


2572
/*************************** DEVICE ATTRIBUTES ***************************/
2573

2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608
static ssize_t ro_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	return fsg_show_ro(dev, attr, buf);
}

static ssize_t nofua_show(struct device *dev, struct device_attribute *attr,
			  char *buf)
{
	return fsg_show_nofua(dev, attr, buf);
}

static ssize_t file_show(struct device *dev, struct device_attribute *attr,
			 char *buf)
{
	return fsg_show_file(dev, attr, buf);
}

static ssize_t ro_store(struct device *dev, struct device_attribute *attr,
			const char *buf, size_t count)
{
	return fsg_store_ro(dev, attr, buf, count);
}

static ssize_t nofua_store(struct device *dev, struct device_attribute *attr,
			   const char *buf, size_t count)
{
	return fsg_store_nofua(dev, attr, buf, count);
}

static ssize_t file_store(struct device *dev, struct device_attribute *attr,
			  const char *buf, size_t count)
{
	return fsg_store_file(dev, attr, buf, count);
}

2609 2610 2611 2612 2613 2614
static DEVICE_ATTR_RW(ro);
static DEVICE_ATTR_RW(nofua);
static DEVICE_ATTR_RW(file);

static struct device_attribute dev_attr_ro_cdrom = __ATTR_RO(ro);
static struct device_attribute dev_attr_file_nonremovable = __ATTR_RO(file);
2615

2616

2617 2618 2619
/****************************** FSG COMMON ******************************/

static void fsg_common_release(struct kref *ref);
2620

2621
static void fsg_lun_release(struct device *dev)
2622
{
2623
	/* Nothing needs to be done */
2624 2625
}

2626
void fsg_common_get(struct fsg_common *common)
2627
{
2628
	kref_get(&common->ref);
2629 2630
}

2631
void fsg_common_put(struct fsg_common *common)
2632 2633 2634 2635
{
	kref_put(&common->ref, fsg_common_release);
}

2636 2637 2638 2639 2640 2641 2642 2643 2644 2645
/* check if fsg_num_buffers is within a valid range */
static inline int fsg_num_buffers_validate(unsigned int fsg_num_buffers)
{
	if (fsg_num_buffers >= 2 && fsg_num_buffers <= 4)
		return 0;
	pr_err("fsg_num_buffers %u is out of range (%d to %d)\n",
	       fsg_num_buffers, 2, 4);
	return -EINVAL;
}

2646 2647 2648 2649 2650
void fsg_common_set_sysfs(struct fsg_common *common, bool sysfs)
{
	common->sysfs = sysfs;
}

2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662
static void _fsg_common_free_buffers(struct fsg_buffhd *buffhds, unsigned n)
{
	if (buffhds) {
		struct fsg_buffhd *bh = buffhds;
		while (n--) {
			kfree(bh->buf);
			++bh;
		}
		kfree(buffhds);
	}
}

2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690
static inline void fsg_common_remove_sysfs(struct fsg_lun *lun)
{
	device_remove_file(&lun->dev, &dev_attr_nofua);
	/*
	 * device_remove_file() =>
	 *
	 * here the attr (e.g. dev_attr_ro) is only used to be passed to:
	 *
	 *	sysfs_remove_file() =>
	 *
	 *	here e.g. both dev_attr_ro_cdrom and dev_attr_ro are in
	 *	the same namespace and
	 *	from here only attr->name is passed to:
	 *
	 *		sysfs_hash_and_remove()
	 *
	 *		attr->name is the same for dev_attr_ro_cdrom and
	 *		dev_attr_ro
	 *		attr->name is the same for dev_attr_file and
	 *		dev_attr_file_nonremovable
	 *
	 * so we don't differentiate between removing e.g. dev_attr_ro_cdrom
	 * and dev_attr_ro
	 */
	device_remove_file(&lun->dev, &dev_attr_ro);
	device_remove_file(&lun->dev, &dev_attr_file);
}

2691 2692 2693
struct fsg_common *fsg_common_init(struct fsg_common *common,
				   struct usb_composite_dev *cdev,
				   struct fsg_config *cfg)
2694
{
2695
	struct usb_gadget *gadget = cdev->gadget;
2696
	struct fsg_buffhd *bh;
2697
	struct fsg_lun **curlun_it;
2698
	struct fsg_lun_config *lcfg;
2699
	struct usb_string *us;
2700
	int nluns, i, rc;
2701
	char *pathbuf;
2702

2703
	rc = fsg_num_buffers_validate(cfg->fsg_num_buffers);
2704 2705 2706
	if (rc != 0)
		return ERR_PTR(rc);

2707
	/* Find out how many LUNs there should be */
2708
	nluns = cfg->nluns;
2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720
	if (nluns < 1 || nluns > FSG_MAX_LUNS) {
		dev_err(&gadget->dev, "invalid number of LUNs: %u\n", nluns);
		return ERR_PTR(-EINVAL);
	}

	/* Allocate? */
	if (!common) {
		common = kzalloc(sizeof *common, GFP_KERNEL);
		if (!common)
			return ERR_PTR(-ENOMEM);
		common->free_storage_on_release = 1;
	} else {
2721
		memset(common, 0, sizeof *common);
2722 2723
		common->free_storage_on_release = 0;
	}
2724 2725
	fsg_common_set_sysfs(common, true);
	common->state = FSG_STATE_IDLE;
2726

2727 2728
	common->fsg_num_buffers = cfg->fsg_num_buffers;
	common->buffhds = kcalloc(common->fsg_num_buffers,
2729 2730 2731 2732 2733 2734 2735
				  sizeof *(common->buffhds), GFP_KERNEL);
	if (!common->buffhds) {
		if (common->free_storage_on_release)
			kfree(common);
		return ERR_PTR(-ENOMEM);
	}

2736
	common->ops = cfg->ops;
2737 2738
	common->private_data = cfg->private_data;

2739
	common->gadget = gadget;
2740 2741
	common->ep0 = gadget->ep0;
	common->ep0req = cdev->req;
2742
	common->cdev = cdev;
2743

2744 2745 2746 2747 2748
	us = usb_gstrings_attach(cdev, fsg_strings_array,
				 ARRAY_SIZE(fsg_strings));
	if (IS_ERR(us)) {
		rc = PTR_ERR(us);
		goto error_release;
2749
	}
2750
	fsg_intf_desc.iInterface = us[FSG_STRING_INTERFACE].id;
2751

2752 2753 2754 2755
	/*
	 * Create the LUNs, open their backing files, and register the
	 * LUN devices in sysfs.
	 */
2756 2757
	curlun_it = kcalloc(nluns, sizeof(*curlun_it), GFP_KERNEL);
	if (unlikely(!curlun_it)) {
2758 2759
		rc = -ENOMEM;
		goto error_release;
2760
	}
2761
	common->luns = curlun_it;
2762 2763 2764

	init_rwsem(&common->filesem);

2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775
	for (i = 0, lcfg = cfg->luns; i < nluns; ++i, ++curlun_it, ++lcfg) {
		struct fsg_lun *curlun;

		curlun = kzalloc(sizeof(*curlun), GFP_KERNEL);
		if (!curlun) {
			rc = -ENOMEM;
			common->nluns = i;
			goto error_release;
		}
		*curlun_it = curlun;

2776 2777
		curlun->cdrom = !!lcfg->cdrom;
		curlun->ro = lcfg->cdrom || lcfg->ro;
2778
		curlun->initially_ro = curlun->ro;
2779
		curlun->removable = lcfg->removable;
2780 2781
		curlun->dev.release = fsg_lun_release;
		curlun->dev.parent = &gadget->dev;
2782
		/* curlun->dev.driver = &fsg_driver.driver; XXX */
2783
		dev_set_drvdata(&curlun->dev, &common->filesem);
2784
		dev_set_name(&curlun->dev, "lun%d", i);
2785
		curlun->name = dev_name(&curlun->dev);
2786 2787 2788 2789 2790

		rc = device_register(&curlun->dev);
		if (rc) {
			INFO(common, "failed to register LUN%d: %d\n", i, rc);
			common->nluns = i;
2791
			put_device(&curlun->dev);
2792
			kfree(curlun);
2793 2794 2795
			goto error_release;
		}

2796 2797 2798 2799
		rc = device_create_file(&curlun->dev,
					curlun->cdrom
				      ? &dev_attr_ro_cdrom
				      : &dev_attr_ro);
2800 2801
		if (rc)
			goto error_luns;
2802 2803 2804 2805
		rc = device_create_file(&curlun->dev,
					curlun->removable
				      ? &dev_attr_file
				      : &dev_attr_file_nonremovable);
2806 2807 2808
		if (rc)
			goto error_luns;
		rc = device_create_file(&curlun->dev, &dev_attr_nofua);
2809 2810 2811
		if (rc)
			goto error_luns;

2812 2813
		if (lcfg->filename) {
			rc = fsg_lun_open(curlun, lcfg->filename);
2814 2815
			if (rc)
				goto error_luns;
2816
		} else if (!curlun->removable) {
2817 2818 2819 2820 2821 2822 2823 2824 2825
			ERROR(common, "no file given for LUN%d\n", i);
			rc = -EINVAL;
			goto error_luns;
		}
	}
	common->nluns = nluns;

	/* Data buffers cyclic list */
	bh = common->buffhds;
2826
	i = common->fsg_num_buffers;
2827
	goto buffhds_first_it;
2828 2829
	do {
		bh->next = bh + 1;
2830 2831 2832 2833 2834 2835 2836 2837
		++bh;
buffhds_first_it:
		bh->buf = kmalloc(FSG_BUFLEN, GFP_KERNEL);
		if (unlikely(!bh->buf)) {
			rc = -ENOMEM;
			goto error_release;
		}
	} while (--i);
2838 2839
	bh->next = common->buffhds;

2840
	/* Prepare inquiryString */
2841
	i = get_default_bcdDevice();
2842
	snprintf(common->inquiry_string, sizeof common->inquiry_string,
2843
		 "%-8s%-16s%04x", cfg->vendor_name ?: "Linux",
2844
		 /* Assume product name dependent on the first LUN */
2845
		 cfg->product_name ?: ((*common->luns)->cdrom
2846 2847
				     ? "File-CD Gadget"
				     : "File-Stor Gadget"),
2848
		 i);
2849

2850 2851
	/*
	 * Some peripheral controllers are known not to be able to
2852 2853 2854
	 * halt bulk endpoints correctly.  If one of them is present,
	 * disable stalls.
	 */
2855
	common->can_stall = cfg->can_stall &&
2856
		!(gadget_is_at91(common->gadget));
2857

2858
	spin_lock_init(&common->lock);
2859
	kref_init(&common->ref);
2860 2861 2862

	/* Tell the thread to start working */
	common->thread_task =
2863
		kthread_create(fsg_main_thread, common, "file-storage");
2864 2865 2866 2867 2868
	if (IS_ERR(common->thread_task)) {
		rc = PTR_ERR(common->thread_task);
		goto error_release;
	}
	init_completion(&common->thread_notifier);
2869
	init_waitqueue_head(&common->fsg_wait);
2870

2871 2872 2873 2874 2875
	/* Information */
	INFO(common, FSG_DRIVER_DESC ", version: " FSG_DRIVER_VERSION "\n");
	INFO(common, "Number of LUNs=%d\n", common->nluns);

	pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
2876
	for (i = 0, nluns = common->nluns, curlun_it = common->luns;
2877
	     i < nluns;
2878 2879
	     ++curlun_it, ++i) {
		struct fsg_lun *curlun = *curlun_it;
2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897
		char *p = "(no medium)";
		if (fsg_lun_is_open(curlun)) {
			p = "(error)";
			if (pathbuf) {
				p = d_path(&curlun->filp->f_path,
					   pathbuf, PATH_MAX);
				if (IS_ERR(p))
					p = "(error)";
			}
		}
		LINFO(curlun, "LUN: %s%s%sfile: %s\n",
		      curlun->removable ? "removable " : "",
		      curlun->ro ? "read only " : "",
		      curlun->cdrom ? "CD-ROM " : "",
		      p);
	}
	kfree(pathbuf);

2898 2899 2900 2901
	DBG(common, "I/O thread pid: %d\n", task_pid_nr(common->thread_task));

	wake_up_process(common->thread_task);

2902 2903 2904 2905 2906
	return common;

error_luns:
	common->nluns = i + 1;
error_release:
2907
	common->state = FSG_STATE_TERMINATED;	/* The thread is dead */
2908
	/* Call fsg_common_release() directly, ref might be not initialised. */
2909 2910 2911 2912 2913 2914
	fsg_common_release(&common->ref);
	return ERR_PTR(rc);
}

static void fsg_common_release(struct kref *ref)
{
2915
	struct fsg_common *common = container_of(ref, struct fsg_common, ref);
2916

2917 2918 2919 2920 2921 2922
	/* If the thread isn't already dead, tell it to exit now */
	if (common->state != FSG_STATE_TERMINATED) {
		raise_exception(common, FSG_STATE_EXIT);
		wait_for_completion(&common->thread_notifier);
	}

2923
	if (likely(common->luns)) {
2924
		struct fsg_lun **lun_it = common->luns;
2925 2926 2927
		unsigned i = common->nluns;

		/* In error recovery common->nluns may be zero. */
2928 2929 2930 2931
		for (; i; --i, ++lun_it) {
			struct fsg_lun *lun = *lun_it;
			if (!lun)
				continue;
2932 2933
			if (common->sysfs)
				fsg_common_remove_sysfs(lun);
2934
			fsg_lun_close(lun);
2935 2936
			if (common->sysfs)
				device_unregister(&lun->dev);
2937
			kfree(lun);
2938
		}
2939

2940
		kfree(common->luns);
2941 2942
	}

2943
	_fsg_common_free_buffers(common->buffhds, common->fsg_num_buffers);
2944 2945 2946 2947 2948 2949 2950
	if (common->free_storage_on_release)
		kfree(common);
}


/*-------------------------------------------------------------------------*/

2951
static void fsg_unbind(struct usb_configuration *c, struct usb_function *f)
2952
{
2953
	struct fsg_dev		*fsg = fsg_from_func(f);
2954
	struct fsg_common	*common = fsg->common;
2955 2956

	DBG(fsg, "unbind\n");
2957 2958 2959 2960 2961 2962 2963 2964
	if (fsg->common->fsg == fsg) {
		fsg->common->new_fsg = NULL;
		raise_exception(fsg->common, FSG_STATE_CONFIG_CHANGE);
		/* FIXME: make interruptible or killable somehow? */
		wait_event(common->fsg_wait, common->fsg != fsg);
	}

	fsg_common_put(common);
2965
	usb_free_all_descriptors(&fsg->function);
2966
	kfree(fsg);
2967 2968
}

2969
static int fsg_bind(struct usb_configuration *c, struct usb_function *f)
2970
{
2971 2972
	struct fsg_dev		*fsg = fsg_from_func(f);
	struct usb_gadget	*gadget = c->cdev->gadget;
2973 2974
	int			i;
	struct usb_ep		*ep;
2975 2976
	unsigned		max_burst;
	int			ret;
2977 2978 2979

	fsg->gadget = gadget;

2980 2981 2982 2983 2984 2985
	/* New interface */
	i = usb_interface_id(c, f);
	if (i < 0)
		return i;
	fsg_intf_desc.bInterfaceNumber = i;
	fsg->interface_number = i;
2986 2987 2988 2989 2990

	/* Find all the endpoints we will use */
	ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_in_desc);
	if (!ep)
		goto autoconf_fail;
2991
	ep->driver_data = fsg->common;	/* claim the endpoint */
2992 2993 2994 2995 2996
	fsg->bulk_in = ep;

	ep = usb_ep_autoconfig(gadget, &fsg_fs_bulk_out_desc);
	if (!ep)
		goto autoconf_fail;
2997
	ep->driver_data = fsg->common;	/* claim the endpoint */
2998 2999
	fsg->bulk_out = ep;

3000 3001 3002 3003 3004
	/* Assume endpoint addresses are the same for both speeds */
	fsg_hs_bulk_in_desc.bEndpointAddress =
		fsg_fs_bulk_in_desc.bEndpointAddress;
	fsg_hs_bulk_out_desc.bEndpointAddress =
		fsg_fs_bulk_out_desc.bEndpointAddress;
3005

3006 3007
	/* Calculate bMaxBurst, we know packet size is 1024 */
	max_burst = min_t(unsigned, FSG_BUFLEN / 1024, 15);
3008

3009 3010 3011
	fsg_ss_bulk_in_desc.bEndpointAddress =
		fsg_fs_bulk_in_desc.bEndpointAddress;
	fsg_ss_bulk_in_comp_desc.bMaxBurst = max_burst;
3012

3013 3014 3015
	fsg_ss_bulk_out_desc.bEndpointAddress =
		fsg_fs_bulk_out_desc.bEndpointAddress;
	fsg_ss_bulk_out_comp_desc.bMaxBurst = max_burst;
3016

3017 3018 3019 3020
	ret = usb_assign_descriptors(f, fsg_fs_function, fsg_hs_function,
			fsg_ss_function);
	if (ret)
		goto autoconf_fail;
3021

3022 3023 3024 3025
	return 0;

autoconf_fail:
	ERROR(fsg, "unable to autoconfigure all endpoints\n");
3026
	return -ENOTSUPP;
3027 3028
}

3029
/****************************** ADD FUNCTION ******************************/
3030

3031 3032 3033
static int fsg_bind_config(struct usb_composite_dev *cdev,
			   struct usb_configuration *c,
			   struct fsg_common *common)
3034
{
3035 3036 3037 3038 3039 3040
	struct fsg_dev *fsg;
	int rc;

	fsg = kzalloc(sizeof *fsg, GFP_KERNEL);
	if (unlikely(!fsg))
		return -ENOMEM;
3041

3042 3043 3044 3045 3046 3047 3048 3049
	fsg->function.name        = FSG_DRIVER_DESC;
	fsg->function.bind        = fsg_bind;
	fsg->function.unbind      = fsg_unbind;
	fsg->function.setup       = fsg_setup;
	fsg->function.set_alt     = fsg_set_alt;
	fsg->function.disable     = fsg_disable;

	fsg->common               = common;
3050 3051
	/*
	 * Our caller holds a reference to common structure so we
3052 3053 3054
	 * don't have to be worry about it being freed until we return
	 * from this function.  So instead of incrementing counter now
	 * and decrement in error recovery we increment it only when
3055 3056
	 * call to usb_add_function() was successful.
	 */
3057 3058

	rc = usb_add_function(c, &fsg->function);
3059
	if (unlikely(rc))
3060 3061 3062
		kfree(fsg);
	else
		fsg_common_get(fsg->common);
3063
	return rc;
3064
}
3065 3066 3067 3068


/************************* Module parameters *************************/

3069

3070
void fsg_config_from_params(struct fsg_config *cfg,
3071 3072
		       const struct fsg_module_parameters *params,
		       unsigned int fsg_num_buffers)
3073 3074
{
	struct fsg_lun_config *lun;
3075
	unsigned i;
3076 3077

	/* Configure LUNs */
3078 3079 3080 3081
	cfg->nluns =
		min(params->luns ?: (params->file_count ?: 1u),
		    (unsigned)FSG_MAX_LUNS);
	for (i = 0, lun = cfg->luns; i < cfg->nluns; ++i, ++lun) {
3082 3083
		lun->ro = !!params->ro[i];
		lun->cdrom = !!params->cdrom[i];
3084
		lun->removable = !!params->removable[i];
3085 3086 3087
		lun->filename =
			params->file_count > i && params->file[i][0]
			? params->file[i]
3088
			: NULL;
3089 3090
	}

3091
	/* Let MSF use defaults */
3092 3093
	cfg->vendor_name = NULL;
	cfg->product_name = NULL;
3094

3095 3096
	cfg->ops = NULL;
	cfg->private_data = NULL;
3097

3098 3099
	/* Finalise */
	cfg->can_stall = params->stall;
3100
	cfg->fsg_num_buffers = fsg_num_buffers;
3101 3102
}