Linux Audio

Check our new training course

Loading...
v6.8
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * dummy_hcd.c -- Dummy/Loopback USB host and device emulator driver.
   4 *
   5 * Maintainer: Alan Stern <stern@rowland.harvard.edu>
   6 *
   7 * Copyright (C) 2003 David Brownell
   8 * Copyright (C) 2003-2005 Alan Stern
   9 */
  10
  11
  12/*
  13 * This exposes a device side "USB gadget" API, driven by requests to a
  14 * Linux-USB host controller driver.  USB traffic is simulated; there's
  15 * no need for USB hardware.  Use this with two other drivers:
  16 *
  17 *  - Gadget driver, responding to requests (device);
  18 *  - Host-side device driver, as already familiar in Linux.
  19 *
  20 * Having this all in one kernel can help some stages of development,
  21 * bypassing some hardware (and driver) issues.  UML could help too.
  22 *
  23 * Note: The emulation does not include isochronous transfers!
  24 */
  25
  26#include <linux/module.h>
  27#include <linux/kernel.h>
  28#include <linux/delay.h>
  29#include <linux/ioport.h>
  30#include <linux/slab.h>
  31#include <linux/errno.h>
  32#include <linux/init.h>
  33#include <linux/timer.h>
  34#include <linux/list.h>
  35#include <linux/interrupt.h>
  36#include <linux/platform_device.h>
  37#include <linux/usb.h>
  38#include <linux/usb/gadget.h>
  39#include <linux/usb/hcd.h>
  40#include <linux/scatterlist.h>
  41
  42#include <asm/byteorder.h>
  43#include <linux/io.h>
  44#include <asm/irq.h>
  45#include <asm/unaligned.h>
  46
  47#define DRIVER_DESC	"USB Host+Gadget Emulator"
  48#define DRIVER_VERSION	"02 May 2005"
  49
  50#define POWER_BUDGET	500	/* in mA; use 8 for low-power port testing */
  51#define POWER_BUDGET_3	900	/* in mA */
  52
  53static const char	driver_name[] = "dummy_hcd";
  54static const char	driver_desc[] = "USB Host+Gadget Emulator";
  55
  56static const char	gadget_name[] = "dummy_udc";
  57
  58MODULE_DESCRIPTION(DRIVER_DESC);
  59MODULE_AUTHOR("David Brownell");
  60MODULE_LICENSE("GPL");
  61
  62struct dummy_hcd_module_parameters {
  63	bool is_super_speed;
  64	bool is_high_speed;
  65	unsigned int num;
  66};
  67
  68static struct dummy_hcd_module_parameters mod_data = {
  69	.is_super_speed = false,
  70	.is_high_speed = true,
  71	.num = 1,
  72};
  73module_param_named(is_super_speed, mod_data.is_super_speed, bool, S_IRUGO);
  74MODULE_PARM_DESC(is_super_speed, "true to simulate SuperSpeed connection");
  75module_param_named(is_high_speed, mod_data.is_high_speed, bool, S_IRUGO);
  76MODULE_PARM_DESC(is_high_speed, "true to simulate HighSpeed connection");
  77module_param_named(num, mod_data.num, uint, S_IRUGO);
  78MODULE_PARM_DESC(num, "number of emulated controllers");
  79/*-------------------------------------------------------------------------*/
  80
  81/* gadget side driver data structres */
  82struct dummy_ep {
  83	struct list_head		queue;
  84	unsigned long			last_io;	/* jiffies timestamp */
  85	struct usb_gadget		*gadget;
  86	const struct usb_endpoint_descriptor *desc;
  87	struct usb_ep			ep;
  88	unsigned			halted:1;
  89	unsigned			wedged:1;
  90	unsigned			already_seen:1;
  91	unsigned			setup_stage:1;
  92	unsigned			stream_en:1;
  93};
  94
  95struct dummy_request {
  96	struct list_head		queue;		/* ep's requests */
  97	struct usb_request		req;
  98};
  99
 100static inline struct dummy_ep *usb_ep_to_dummy_ep(struct usb_ep *_ep)
 101{
 102	return container_of(_ep, struct dummy_ep, ep);
 103}
 104
 105static inline struct dummy_request *usb_request_to_dummy_request
 106		(struct usb_request *_req)
 107{
 108	return container_of(_req, struct dummy_request, req);
 109}
 110
 111/*-------------------------------------------------------------------------*/
 112
 113/*
 114 * Every device has ep0 for control requests, plus up to 30 more endpoints,
 115 * in one of two types:
 116 *
 117 *   - Configurable:  direction (in/out), type (bulk, iso, etc), and endpoint
 118 *     number can be changed.  Names like "ep-a" are used for this type.
 119 *
 120 *   - Fixed Function:  in other cases.  some characteristics may be mutable;
 121 *     that'd be hardware-specific.  Names like "ep12out-bulk" are used.
 122 *
 123 * Gadget drivers are responsible for not setting up conflicting endpoint
 124 * configurations, illegal or unsupported packet lengths, and so on.
 125 */
 126
 127static const char ep0name[] = "ep0";
 128
 129static const struct {
 130	const char *name;
 131	const struct usb_ep_caps caps;
 132} ep_info[] = {
 133#define EP_INFO(_name, _caps) \
 134	{ \
 135		.name = _name, \
 136		.caps = _caps, \
 137	}
 138
 139/* we don't provide isochronous endpoints since we don't support them */
 140#define TYPE_BULK_OR_INT	(USB_EP_CAPS_TYPE_BULK | USB_EP_CAPS_TYPE_INT)
 141
 142	/* everyone has ep0 */
 143	EP_INFO(ep0name,
 144		USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL, USB_EP_CAPS_DIR_ALL)),
 145	/* act like a pxa250: fifteen fixed function endpoints */
 146	EP_INFO("ep1in-bulk",
 147		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 148	EP_INFO("ep2out-bulk",
 149		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 150/*
 151	EP_INFO("ep3in-iso",
 152		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 153	EP_INFO("ep4out-iso",
 154		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 155*/
 156	EP_INFO("ep5in-int",
 157		USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 158	EP_INFO("ep6in-bulk",
 159		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 160	EP_INFO("ep7out-bulk",
 161		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 162/*
 163	EP_INFO("ep8in-iso",
 164		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 165	EP_INFO("ep9out-iso",
 166		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 167*/
 168	EP_INFO("ep10in-int",
 169		USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 170	EP_INFO("ep11in-bulk",
 171		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 172	EP_INFO("ep12out-bulk",
 173		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 174/*
 175	EP_INFO("ep13in-iso",
 176		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 177	EP_INFO("ep14out-iso",
 178		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 179*/
 180	EP_INFO("ep15in-int",
 181		USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 182
 183	/* or like sa1100: two fixed function endpoints */
 184	EP_INFO("ep1out-bulk",
 185		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 186	EP_INFO("ep2in-bulk",
 187		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 188
 189	/* and now some generic EPs so we have enough in multi config */
 190	EP_INFO("ep-aout",
 191		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 192	EP_INFO("ep-bin",
 193		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 194	EP_INFO("ep-cout",
 195		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 196	EP_INFO("ep-dout",
 197		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 198	EP_INFO("ep-ein",
 199		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 200	EP_INFO("ep-fout",
 201		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 202	EP_INFO("ep-gin",
 203		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 204	EP_INFO("ep-hout",
 205		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 206	EP_INFO("ep-iout",
 207		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 208	EP_INFO("ep-jin",
 209		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 210	EP_INFO("ep-kout",
 211		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 212	EP_INFO("ep-lin",
 213		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 214	EP_INFO("ep-mout",
 215		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 216
 217#undef EP_INFO
 218};
 219
 220#define DUMMY_ENDPOINTS	ARRAY_SIZE(ep_info)
 221
 222/*-------------------------------------------------------------------------*/
 223
 224#define FIFO_SIZE		64
 225
 226struct urbp {
 227	struct urb		*urb;
 228	struct list_head	urbp_list;
 229	struct sg_mapping_iter	miter;
 230	u32			miter_started;
 231};
 232
 233
 234enum dummy_rh_state {
 235	DUMMY_RH_RESET,
 236	DUMMY_RH_SUSPENDED,
 237	DUMMY_RH_RUNNING
 238};
 239
 240struct dummy_hcd {
 241	struct dummy			*dum;
 242	enum dummy_rh_state		rh_state;
 243	struct timer_list		timer;
 244	u32				port_status;
 245	u32				old_status;
 246	unsigned long			re_timeout;
 247
 248	struct usb_device		*udev;
 249	struct list_head		urbp_list;
 250	struct urbp			*next_frame_urbp;
 251
 252	u32				stream_en_ep;
 253	u8				num_stream[30 / 2];
 254
 255	unsigned			active:1;
 256	unsigned			old_active:1;
 257	unsigned			resuming:1;
 258};
 259
 260struct dummy {
 261	spinlock_t			lock;
 262
 263	/*
 264	 * DEVICE/GADGET side support
 265	 */
 266	struct dummy_ep			ep[DUMMY_ENDPOINTS];
 267	int				address;
 268	int				callback_usage;
 269	struct usb_gadget		gadget;
 270	struct usb_gadget_driver	*driver;
 271	struct dummy_request		fifo_req;
 272	u8				fifo_buf[FIFO_SIZE];
 273	u16				devstatus;
 274	unsigned			ints_enabled:1;
 275	unsigned			udc_suspended:1;
 276	unsigned			pullup:1;
 277
 278	/*
 279	 * HOST side support
 280	 */
 281	struct dummy_hcd		*hs_hcd;
 282	struct dummy_hcd		*ss_hcd;
 283};
 284
 285static inline struct dummy_hcd *hcd_to_dummy_hcd(struct usb_hcd *hcd)
 286{
 287	return (struct dummy_hcd *) (hcd->hcd_priv);
 288}
 289
 290static inline struct usb_hcd *dummy_hcd_to_hcd(struct dummy_hcd *dum)
 291{
 292	return container_of((void *) dum, struct usb_hcd, hcd_priv);
 293}
 294
 295static inline struct device *dummy_dev(struct dummy_hcd *dum)
 296{
 297	return dummy_hcd_to_hcd(dum)->self.controller;
 298}
 299
 300static inline struct device *udc_dev(struct dummy *dum)
 301{
 302	return dum->gadget.dev.parent;
 303}
 304
 305static inline struct dummy *ep_to_dummy(struct dummy_ep *ep)
 306{
 307	return container_of(ep->gadget, struct dummy, gadget);
 308}
 309
 310static inline struct dummy_hcd *gadget_to_dummy_hcd(struct usb_gadget *gadget)
 311{
 312	struct dummy *dum = container_of(gadget, struct dummy, gadget);
 313	if (dum->gadget.speed == USB_SPEED_SUPER)
 314		return dum->ss_hcd;
 315	else
 316		return dum->hs_hcd;
 317}
 318
 319static inline struct dummy *gadget_dev_to_dummy(struct device *dev)
 320{
 321	return container_of(dev, struct dummy, gadget.dev);
 322}
 323
 324/*-------------------------------------------------------------------------*/
 325
 326/* DEVICE/GADGET SIDE UTILITY ROUTINES */
 327
 328/* called with spinlock held */
 329static void nuke(struct dummy *dum, struct dummy_ep *ep)
 330{
 331	while (!list_empty(&ep->queue)) {
 332		struct dummy_request	*req;
 333
 334		req = list_entry(ep->queue.next, struct dummy_request, queue);
 335		list_del_init(&req->queue);
 336		req->req.status = -ESHUTDOWN;
 337
 338		spin_unlock(&dum->lock);
 339		usb_gadget_giveback_request(&ep->ep, &req->req);
 340		spin_lock(&dum->lock);
 341	}
 342}
 343
 344/* caller must hold lock */
 345static void stop_activity(struct dummy *dum)
 346{
 347	int i;
 348
 349	/* prevent any more requests */
 350	dum->address = 0;
 351
 352	/* The timer is left running so that outstanding URBs can fail */
 353
 354	/* nuke any pending requests first, so driver i/o is quiesced */
 355	for (i = 0; i < DUMMY_ENDPOINTS; ++i)
 356		nuke(dum, &dum->ep[i]);
 357
 358	/* driver now does any non-usb quiescing necessary */
 359}
 360
 361/**
 362 * set_link_state_by_speed() - Sets the current state of the link according to
 363 *	the hcd speed
 364 * @dum_hcd: pointer to the dummy_hcd structure to update the link state for
 365 *
 366 * This function updates the port_status according to the link state and the
 367 * speed of the hcd.
 368 */
 369static void set_link_state_by_speed(struct dummy_hcd *dum_hcd)
 370{
 371	struct dummy *dum = dum_hcd->dum;
 372
 373	if (dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3) {
 374		if ((dum_hcd->port_status & USB_SS_PORT_STAT_POWER) == 0) {
 375			dum_hcd->port_status = 0;
 376		} else if (!dum->pullup || dum->udc_suspended) {
 377			/* UDC suspend must cause a disconnect */
 378			dum_hcd->port_status &= ~(USB_PORT_STAT_CONNECTION |
 379						USB_PORT_STAT_ENABLE);
 380			if ((dum_hcd->old_status &
 381			     USB_PORT_STAT_CONNECTION) != 0)
 382				dum_hcd->port_status |=
 383					(USB_PORT_STAT_C_CONNECTION << 16);
 384		} else {
 385			/* device is connected and not suspended */
 386			dum_hcd->port_status |= (USB_PORT_STAT_CONNECTION |
 387						 USB_PORT_STAT_SPEED_5GBPS) ;
 388			if ((dum_hcd->old_status &
 389			     USB_PORT_STAT_CONNECTION) == 0)
 390				dum_hcd->port_status |=
 391					(USB_PORT_STAT_C_CONNECTION << 16);
 392			if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) &&
 393			    (dum_hcd->port_status &
 394			     USB_PORT_STAT_LINK_STATE) == USB_SS_PORT_LS_U0 &&
 395			    dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 396				dum_hcd->active = 1;
 397		}
 398	} else {
 399		if ((dum_hcd->port_status & USB_PORT_STAT_POWER) == 0) {
 400			dum_hcd->port_status = 0;
 401		} else if (!dum->pullup || dum->udc_suspended) {
 402			/* UDC suspend must cause a disconnect */
 403			dum_hcd->port_status &= ~(USB_PORT_STAT_CONNECTION |
 404						USB_PORT_STAT_ENABLE |
 405						USB_PORT_STAT_LOW_SPEED |
 406						USB_PORT_STAT_HIGH_SPEED |
 407						USB_PORT_STAT_SUSPEND);
 408			if ((dum_hcd->old_status &
 409			     USB_PORT_STAT_CONNECTION) != 0)
 410				dum_hcd->port_status |=
 411					(USB_PORT_STAT_C_CONNECTION << 16);
 412		} else {
 413			dum_hcd->port_status |= USB_PORT_STAT_CONNECTION;
 414			if ((dum_hcd->old_status &
 415			     USB_PORT_STAT_CONNECTION) == 0)
 416				dum_hcd->port_status |=
 417					(USB_PORT_STAT_C_CONNECTION << 16);
 418			if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) == 0)
 419				dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
 420			else if ((dum_hcd->port_status &
 421				  USB_PORT_STAT_SUSPEND) == 0 &&
 422					dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 423				dum_hcd->active = 1;
 424		}
 425	}
 426}
 427
 428/* caller must hold lock */
 429static void set_link_state(struct dummy_hcd *dum_hcd)
 430	__must_hold(&dum->lock)
 431{
 432	struct dummy *dum = dum_hcd->dum;
 433	unsigned int power_bit;
 434
 435	dum_hcd->active = 0;
 436	if (dum->pullup)
 437		if ((dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3 &&
 438		     dum->gadget.speed != USB_SPEED_SUPER) ||
 439		    (dummy_hcd_to_hcd(dum_hcd)->speed != HCD_USB3 &&
 440		     dum->gadget.speed == USB_SPEED_SUPER))
 441			return;
 442
 443	set_link_state_by_speed(dum_hcd);
 444	power_bit = (dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3 ?
 445			USB_SS_PORT_STAT_POWER : USB_PORT_STAT_POWER);
 446
 447	if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) == 0 ||
 448	     dum_hcd->active)
 449		dum_hcd->resuming = 0;
 450
 451	/* Currently !connected or in reset */
 452	if ((dum_hcd->port_status & power_bit) == 0 ||
 453			(dum_hcd->port_status & USB_PORT_STAT_RESET) != 0) {
 454		unsigned int disconnect = power_bit &
 455				dum_hcd->old_status & (~dum_hcd->port_status);
 456		unsigned int reset = USB_PORT_STAT_RESET &
 457				(~dum_hcd->old_status) & dum_hcd->port_status;
 458
 459		/* Report reset and disconnect events to the driver */
 460		if (dum->ints_enabled && (disconnect || reset)) {
 461			stop_activity(dum);
 462			++dum->callback_usage;
 463			spin_unlock(&dum->lock);
 464			if (reset)
 465				usb_gadget_udc_reset(&dum->gadget, dum->driver);
 466			else
 467				dum->driver->disconnect(&dum->gadget);
 468			spin_lock(&dum->lock);
 469			--dum->callback_usage;
 470		}
 471	} else if (dum_hcd->active != dum_hcd->old_active &&
 472			dum->ints_enabled) {
 473		++dum->callback_usage;
 474		spin_unlock(&dum->lock);
 475		if (dum_hcd->old_active && dum->driver->suspend)
 476			dum->driver->suspend(&dum->gadget);
 477		else if (!dum_hcd->old_active &&  dum->driver->resume)
 478			dum->driver->resume(&dum->gadget);
 479		spin_lock(&dum->lock);
 480		--dum->callback_usage;
 481	}
 482
 483	dum_hcd->old_status = dum_hcd->port_status;
 484	dum_hcd->old_active = dum_hcd->active;
 485}
 486
 487/*-------------------------------------------------------------------------*/
 488
 489/* DEVICE/GADGET SIDE DRIVER
 490 *
 491 * This only tracks gadget state.  All the work is done when the host
 492 * side tries some (emulated) i/o operation.  Real device controller
 493 * drivers would do real i/o using dma, fifos, irqs, timers, etc.
 494 */
 495
 496#define is_enabled(dum) \
 497	(dum->port_status & USB_PORT_STAT_ENABLE)
 498
 499static int dummy_enable(struct usb_ep *_ep,
 500		const struct usb_endpoint_descriptor *desc)
 501{
 502	struct dummy		*dum;
 503	struct dummy_hcd	*dum_hcd;
 504	struct dummy_ep		*ep;
 505	unsigned		max;
 506	int			retval;
 507
 508	ep = usb_ep_to_dummy_ep(_ep);
 509	if (!_ep || !desc || ep->desc || _ep->name == ep0name
 510			|| desc->bDescriptorType != USB_DT_ENDPOINT)
 511		return -EINVAL;
 512	dum = ep_to_dummy(ep);
 513	if (!dum->driver)
 514		return -ESHUTDOWN;
 515
 516	dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
 517	if (!is_enabled(dum_hcd))
 518		return -ESHUTDOWN;
 519
 520	/*
 521	 * For HS/FS devices only bits 0..10 of the wMaxPacketSize represent the
 522	 * maximum packet size.
 523	 * For SS devices the wMaxPacketSize is limited by 1024.
 524	 */
 525	max = usb_endpoint_maxp(desc);
 526
 527	/* drivers must not request bad settings, since lower levels
 528	 * (hardware or its drivers) may not check.  some endpoints
 529	 * can't do iso, many have maxpacket limitations, etc.
 530	 *
 531	 * since this "hardware" driver is here to help debugging, we
 532	 * have some extra sanity checks.  (there could be more though,
 533	 * especially for "ep9out" style fixed function ones.)
 534	 */
 535	retval = -EINVAL;
 536	switch (usb_endpoint_type(desc)) {
 537	case USB_ENDPOINT_XFER_BULK:
 538		if (strstr(ep->ep.name, "-iso")
 539				|| strstr(ep->ep.name, "-int")) {
 540			goto done;
 541		}
 542		switch (dum->gadget.speed) {
 543		case USB_SPEED_SUPER:
 544			if (max == 1024)
 545				break;
 546			goto done;
 547		case USB_SPEED_HIGH:
 548			if (max == 512)
 549				break;
 550			goto done;
 551		case USB_SPEED_FULL:
 552			if (max == 8 || max == 16 || max == 32 || max == 64)
 553				/* we'll fake any legal size */
 554				break;
 555			/* save a return statement */
 556			fallthrough;
 557		default:
 558			goto done;
 559		}
 560		break;
 561	case USB_ENDPOINT_XFER_INT:
 562		if (strstr(ep->ep.name, "-iso")) /* bulk is ok */
 563			goto done;
 564		/* real hardware might not handle all packet sizes */
 565		switch (dum->gadget.speed) {
 566		case USB_SPEED_SUPER:
 567		case USB_SPEED_HIGH:
 568			if (max <= 1024)
 569				break;
 570			/* save a return statement */
 571			fallthrough;
 572		case USB_SPEED_FULL:
 573			if (max <= 64)
 574				break;
 575			/* save a return statement */
 576			fallthrough;
 577		default:
 578			if (max <= 8)
 579				break;
 580			goto done;
 581		}
 582		break;
 583	case USB_ENDPOINT_XFER_ISOC:
 584		if (strstr(ep->ep.name, "-bulk")
 585				|| strstr(ep->ep.name, "-int"))
 586			goto done;
 587		/* real hardware might not handle all packet sizes */
 588		switch (dum->gadget.speed) {
 589		case USB_SPEED_SUPER:
 590		case USB_SPEED_HIGH:
 591			if (max <= 1024)
 592				break;
 593			/* save a return statement */
 594			fallthrough;
 595		case USB_SPEED_FULL:
 596			if (max <= 1023)
 597				break;
 598			/* save a return statement */
 599			fallthrough;
 600		default:
 601			goto done;
 602		}
 603		break;
 604	default:
 605		/* few chips support control except on ep0 */
 606		goto done;
 607	}
 608
 609	_ep->maxpacket = max;
 610	if (usb_ss_max_streams(_ep->comp_desc)) {
 611		if (!usb_endpoint_xfer_bulk(desc)) {
 612			dev_err(udc_dev(dum), "Can't enable stream support on "
 613					"non-bulk ep %s\n", _ep->name);
 614			return -EINVAL;
 615		}
 616		ep->stream_en = 1;
 617	}
 618	ep->desc = desc;
 619
 620	dev_dbg(udc_dev(dum), "enabled %s (ep%d%s-%s) maxpacket %d stream %s\n",
 621		_ep->name,
 622		desc->bEndpointAddress & 0x0f,
 623		(desc->bEndpointAddress & USB_DIR_IN) ? "in" : "out",
 624		usb_ep_type_string(usb_endpoint_type(desc)),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 625		max, ep->stream_en ? "enabled" : "disabled");
 626
 627	/* at this point real hardware should be NAKing transfers
 628	 * to that endpoint, until a buffer is queued to it.
 629	 */
 630	ep->halted = ep->wedged = 0;
 631	retval = 0;
 632done:
 633	return retval;
 634}
 635
 636static int dummy_disable(struct usb_ep *_ep)
 637{
 638	struct dummy_ep		*ep;
 639	struct dummy		*dum;
 640	unsigned long		flags;
 641
 642	ep = usb_ep_to_dummy_ep(_ep);
 643	if (!_ep || !ep->desc || _ep->name == ep0name)
 644		return -EINVAL;
 645	dum = ep_to_dummy(ep);
 646
 647	spin_lock_irqsave(&dum->lock, flags);
 648	ep->desc = NULL;
 649	ep->stream_en = 0;
 650	nuke(dum, ep);
 651	spin_unlock_irqrestore(&dum->lock, flags);
 652
 653	dev_dbg(udc_dev(dum), "disabled %s\n", _ep->name);
 654	return 0;
 655}
 656
 657static struct usb_request *dummy_alloc_request(struct usb_ep *_ep,
 658		gfp_t mem_flags)
 659{
 660	struct dummy_request	*req;
 661
 662	if (!_ep)
 663		return NULL;
 664
 665	req = kzalloc(sizeof(*req), mem_flags);
 666	if (!req)
 667		return NULL;
 668	INIT_LIST_HEAD(&req->queue);
 669	return &req->req;
 670}
 671
 672static void dummy_free_request(struct usb_ep *_ep, struct usb_request *_req)
 673{
 674	struct dummy_request	*req;
 675
 676	if (!_ep || !_req) {
 677		WARN_ON(1);
 678		return;
 679	}
 680
 681	req = usb_request_to_dummy_request(_req);
 682	WARN_ON(!list_empty(&req->queue));
 683	kfree(req);
 684}
 685
 686static void fifo_complete(struct usb_ep *ep, struct usb_request *req)
 687{
 688}
 689
 690static int dummy_queue(struct usb_ep *_ep, struct usb_request *_req,
 691		gfp_t mem_flags)
 692{
 693	struct dummy_ep		*ep;
 694	struct dummy_request	*req;
 695	struct dummy		*dum;
 696	struct dummy_hcd	*dum_hcd;
 697	unsigned long		flags;
 698
 699	req = usb_request_to_dummy_request(_req);
 700	if (!_req || !list_empty(&req->queue) || !_req->complete)
 701		return -EINVAL;
 702
 703	ep = usb_ep_to_dummy_ep(_ep);
 704	if (!_ep || (!ep->desc && _ep->name != ep0name))
 705		return -EINVAL;
 706
 707	dum = ep_to_dummy(ep);
 708	dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
 709	if (!dum->driver || !is_enabled(dum_hcd))
 710		return -ESHUTDOWN;
 711
 712#if 0
 713	dev_dbg(udc_dev(dum), "ep %p queue req %p to %s, len %d buf %p\n",
 714			ep, _req, _ep->name, _req->length, _req->buf);
 715#endif
 716	_req->status = -EINPROGRESS;
 717	_req->actual = 0;
 718	spin_lock_irqsave(&dum->lock, flags);
 719
 720	/* implement an emulated single-request FIFO */
 721	if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
 722			list_empty(&dum->fifo_req.queue) &&
 723			list_empty(&ep->queue) &&
 724			_req->length <= FIFO_SIZE) {
 725		req = &dum->fifo_req;
 726		req->req = *_req;
 727		req->req.buf = dum->fifo_buf;
 728		memcpy(dum->fifo_buf, _req->buf, _req->length);
 729		req->req.context = dum;
 730		req->req.complete = fifo_complete;
 731
 732		list_add_tail(&req->queue, &ep->queue);
 733		spin_unlock(&dum->lock);
 734		_req->actual = _req->length;
 735		_req->status = 0;
 736		usb_gadget_giveback_request(_ep, _req);
 737		spin_lock(&dum->lock);
 738	}  else
 739		list_add_tail(&req->queue, &ep->queue);
 740	spin_unlock_irqrestore(&dum->lock, flags);
 741
 742	/* real hardware would likely enable transfers here, in case
 743	 * it'd been left NAKing.
 744	 */
 745	return 0;
 746}
 747
 748static int dummy_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 749{
 750	struct dummy_ep		*ep;
 751	struct dummy		*dum;
 752	int			retval = -EINVAL;
 753	unsigned long		flags;
 754	struct dummy_request	*req = NULL, *iter;
 755
 756	if (!_ep || !_req)
 757		return retval;
 758	ep = usb_ep_to_dummy_ep(_ep);
 759	dum = ep_to_dummy(ep);
 760
 761	if (!dum->driver)
 762		return -ESHUTDOWN;
 763
 764	local_irq_save(flags);
 765	spin_lock(&dum->lock);
 766	list_for_each_entry(iter, &ep->queue, queue) {
 767		if (&iter->req != _req)
 768			continue;
 769		list_del_init(&iter->queue);
 770		_req->status = -ECONNRESET;
 771		req = iter;
 772		retval = 0;
 773		break;
 774	}
 775	spin_unlock(&dum->lock);
 776
 777	if (retval == 0) {
 778		dev_dbg(udc_dev(dum),
 779				"dequeued req %p from %s, len %d buf %p\n",
 780				req, _ep->name, _req->length, _req->buf);
 781		usb_gadget_giveback_request(_ep, _req);
 782	}
 783	local_irq_restore(flags);
 784	return retval;
 785}
 786
 787static int
 788dummy_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
 789{
 790	struct dummy_ep		*ep;
 791	struct dummy		*dum;
 792
 793	if (!_ep)
 794		return -EINVAL;
 795	ep = usb_ep_to_dummy_ep(_ep);
 796	dum = ep_to_dummy(ep);
 797	if (!dum->driver)
 798		return -ESHUTDOWN;
 799	if (!value)
 800		ep->halted = ep->wedged = 0;
 801	else if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
 802			!list_empty(&ep->queue))
 803		return -EAGAIN;
 804	else {
 805		ep->halted = 1;
 806		if (wedged)
 807			ep->wedged = 1;
 808	}
 809	/* FIXME clear emulated data toggle too */
 810	return 0;
 811}
 812
 813static int
 814dummy_set_halt(struct usb_ep *_ep, int value)
 815{
 816	return dummy_set_halt_and_wedge(_ep, value, 0);
 817}
 818
 819static int dummy_set_wedge(struct usb_ep *_ep)
 820{
 821	if (!_ep || _ep->name == ep0name)
 822		return -EINVAL;
 823	return dummy_set_halt_and_wedge(_ep, 1, 1);
 824}
 825
 826static const struct usb_ep_ops dummy_ep_ops = {
 827	.enable		= dummy_enable,
 828	.disable	= dummy_disable,
 829
 830	.alloc_request	= dummy_alloc_request,
 831	.free_request	= dummy_free_request,
 832
 833	.queue		= dummy_queue,
 834	.dequeue	= dummy_dequeue,
 835
 836	.set_halt	= dummy_set_halt,
 837	.set_wedge	= dummy_set_wedge,
 838};
 839
 840/*-------------------------------------------------------------------------*/
 841
 842/* there are both host and device side versions of this call ... */
 843static int dummy_g_get_frame(struct usb_gadget *_gadget)
 844{
 845	struct timespec64 ts64;
 846
 847	ktime_get_ts64(&ts64);
 848	return ts64.tv_nsec / NSEC_PER_MSEC;
 849}
 850
 851static int dummy_wakeup(struct usb_gadget *_gadget)
 852{
 853	struct dummy_hcd *dum_hcd;
 854
 855	dum_hcd = gadget_to_dummy_hcd(_gadget);
 856	if (!(dum_hcd->dum->devstatus & ((1 << USB_DEVICE_B_HNP_ENABLE)
 857				| (1 << USB_DEVICE_REMOTE_WAKEUP))))
 858		return -EINVAL;
 859	if ((dum_hcd->port_status & USB_PORT_STAT_CONNECTION) == 0)
 860		return -ENOLINK;
 861	if ((dum_hcd->port_status & USB_PORT_STAT_SUSPEND) == 0 &&
 862			 dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 863		return -EIO;
 864
 865	/* FIXME: What if the root hub is suspended but the port isn't? */
 866
 867	/* hub notices our request, issues downstream resume, etc */
 868	dum_hcd->resuming = 1;
 869	dum_hcd->re_timeout = jiffies + msecs_to_jiffies(20);
 870	mod_timer(&dummy_hcd_to_hcd(dum_hcd)->rh_timer, dum_hcd->re_timeout);
 871	return 0;
 872}
 873
 874static int dummy_set_selfpowered(struct usb_gadget *_gadget, int value)
 875{
 876	struct dummy	*dum;
 877
 878	_gadget->is_selfpowered = (value != 0);
 879	dum = gadget_to_dummy_hcd(_gadget)->dum;
 880	if (value)
 881		dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED);
 882	else
 883		dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
 884	return 0;
 885}
 886
 887static void dummy_udc_update_ep0(struct dummy *dum)
 888{
 889	if (dum->gadget.speed == USB_SPEED_SUPER)
 890		dum->ep[0].ep.maxpacket = 9;
 891	else
 892		dum->ep[0].ep.maxpacket = 64;
 893}
 894
 895static int dummy_pullup(struct usb_gadget *_gadget, int value)
 896{
 897	struct dummy_hcd *dum_hcd;
 898	struct dummy	*dum;
 899	unsigned long	flags;
 900
 901	dum = gadget_dev_to_dummy(&_gadget->dev);
 902	dum_hcd = gadget_to_dummy_hcd(_gadget);
 903
 904	spin_lock_irqsave(&dum->lock, flags);
 905	dum->pullup = (value != 0);
 906	set_link_state(dum_hcd);
 907	if (value == 0) {
 908		/*
 909		 * Emulate synchronize_irq(): wait for callbacks to finish.
 910		 * This seems to be the best place to emulate the call to
 911		 * synchronize_irq() that's in usb_gadget_remove_driver().
 912		 * Doing it in dummy_udc_stop() would be too late since it
 913		 * is called after the unbind callback and unbind shouldn't
 914		 * be invoked until all the other callbacks are finished.
 915		 */
 916		while (dum->callback_usage > 0) {
 917			spin_unlock_irqrestore(&dum->lock, flags);
 918			usleep_range(1000, 2000);
 919			spin_lock_irqsave(&dum->lock, flags);
 920		}
 921	}
 922	spin_unlock_irqrestore(&dum->lock, flags);
 923
 924	usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
 925	return 0;
 926}
 927
 928static void dummy_udc_set_speed(struct usb_gadget *_gadget,
 929		enum usb_device_speed speed)
 930{
 931	struct dummy	*dum;
 932
 933	dum = gadget_dev_to_dummy(&_gadget->dev);
 934	dum->gadget.speed = speed;
 935	dummy_udc_update_ep0(dum);
 936}
 937
 938static void dummy_udc_async_callbacks(struct usb_gadget *_gadget, bool enable)
 939{
 940	struct dummy	*dum = gadget_dev_to_dummy(&_gadget->dev);
 941
 942	spin_lock_irq(&dum->lock);
 943	dum->ints_enabled = enable;
 944	spin_unlock_irq(&dum->lock);
 945}
 946
 947static int dummy_udc_start(struct usb_gadget *g,
 948		struct usb_gadget_driver *driver);
 949static int dummy_udc_stop(struct usb_gadget *g);
 950
 951static const struct usb_gadget_ops dummy_ops = {
 952	.get_frame	= dummy_g_get_frame,
 953	.wakeup		= dummy_wakeup,
 954	.set_selfpowered = dummy_set_selfpowered,
 955	.pullup		= dummy_pullup,
 956	.udc_start	= dummy_udc_start,
 957	.udc_stop	= dummy_udc_stop,
 958	.udc_set_speed	= dummy_udc_set_speed,
 959	.udc_async_callbacks = dummy_udc_async_callbacks,
 960};
 961
 962/*-------------------------------------------------------------------------*/
 963
 964/* "function" sysfs attribute */
 965static ssize_t function_show(struct device *dev, struct device_attribute *attr,
 966		char *buf)
 967{
 968	struct dummy	*dum = gadget_dev_to_dummy(dev);
 969
 970	if (!dum->driver || !dum->driver->function)
 971		return 0;
 972	return scnprintf(buf, PAGE_SIZE, "%s\n", dum->driver->function);
 973}
 974static DEVICE_ATTR_RO(function);
 975
 976/*-------------------------------------------------------------------------*/
 977
 978/*
 979 * Driver registration/unregistration.
 980 *
 981 * This is basically hardware-specific; there's usually only one real USB
 982 * device (not host) controller since that's how USB devices are intended
 983 * to work.  So most implementations of these api calls will rely on the
 984 * fact that only one driver will ever bind to the hardware.  But curious
 985 * hardware can be built with discrete components, so the gadget API doesn't
 986 * require that assumption.
 987 *
 988 * For this emulator, it might be convenient to create a usb device
 989 * for each driver that registers:  just add to a big root hub.
 990 */
 991
 992static int dummy_udc_start(struct usb_gadget *g,
 993		struct usb_gadget_driver *driver)
 994{
 995	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(g);
 996	struct dummy		*dum = dum_hcd->dum;
 997
 998	switch (g->speed) {
 999	/* All the speeds we support */
1000	case USB_SPEED_LOW:
1001	case USB_SPEED_FULL:
1002	case USB_SPEED_HIGH:
1003	case USB_SPEED_SUPER:
1004		break;
1005	default:
1006		dev_err(dummy_dev(dum_hcd), "Unsupported driver max speed %d\n",
1007				driver->max_speed);
1008		return -EINVAL;
1009	}
1010
1011	/*
1012	 * DEVICE side init ... the layer above hardware, which
1013	 * can't enumerate without help from the driver we're binding.
1014	 */
1015
1016	spin_lock_irq(&dum->lock);
1017	dum->devstatus = 0;
1018	dum->driver = driver;
 
1019	spin_unlock_irq(&dum->lock);
1020
1021	return 0;
1022}
1023
1024static int dummy_udc_stop(struct usb_gadget *g)
1025{
1026	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(g);
1027	struct dummy		*dum = dum_hcd->dum;
1028
1029	spin_lock_irq(&dum->lock);
1030	dum->ints_enabled = 0;
1031	stop_activity(dum);
 
 
 
 
 
 
 
 
1032	dum->driver = NULL;
1033	spin_unlock_irq(&dum->lock);
1034
1035	return 0;
1036}
1037
1038#undef is_enabled
1039
1040/* The gadget structure is stored inside the hcd structure and will be
1041 * released along with it. */
1042static void init_dummy_udc_hw(struct dummy *dum)
1043{
1044	int i;
1045
1046	INIT_LIST_HEAD(&dum->gadget.ep_list);
1047	for (i = 0; i < DUMMY_ENDPOINTS; i++) {
1048		struct dummy_ep	*ep = &dum->ep[i];
1049
1050		if (!ep_info[i].name)
1051			break;
1052		ep->ep.name = ep_info[i].name;
1053		ep->ep.caps = ep_info[i].caps;
1054		ep->ep.ops = &dummy_ep_ops;
1055		list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list);
1056		ep->halted = ep->wedged = ep->already_seen =
1057				ep->setup_stage = 0;
1058		usb_ep_set_maxpacket_limit(&ep->ep, ~0);
1059		ep->ep.max_streams = 16;
1060		ep->last_io = jiffies;
1061		ep->gadget = &dum->gadget;
1062		ep->desc = NULL;
1063		INIT_LIST_HEAD(&ep->queue);
1064	}
1065
1066	dum->gadget.ep0 = &dum->ep[0].ep;
1067	list_del_init(&dum->ep[0].ep.ep_list);
1068	INIT_LIST_HEAD(&dum->fifo_req.queue);
1069
1070#ifdef CONFIG_USB_OTG
1071	dum->gadget.is_otg = 1;
1072#endif
1073}
1074
1075static int dummy_udc_probe(struct platform_device *pdev)
1076{
1077	struct dummy	*dum;
1078	int		rc;
1079
1080	dum = *((void **)dev_get_platdata(&pdev->dev));
1081	/* Clear usb_gadget region for new registration to udc-core */
1082	memzero_explicit(&dum->gadget, sizeof(struct usb_gadget));
1083	dum->gadget.name = gadget_name;
1084	dum->gadget.ops = &dummy_ops;
1085	if (mod_data.is_super_speed)
1086		dum->gadget.max_speed = USB_SPEED_SUPER;
1087	else if (mod_data.is_high_speed)
1088		dum->gadget.max_speed = USB_SPEED_HIGH;
1089	else
1090		dum->gadget.max_speed = USB_SPEED_FULL;
1091
1092	dum->gadget.dev.parent = &pdev->dev;
1093	init_dummy_udc_hw(dum);
1094
1095	rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget);
1096	if (rc < 0)
1097		goto err_udc;
1098
1099	rc = device_create_file(&dum->gadget.dev, &dev_attr_function);
1100	if (rc < 0)
1101		goto err_dev;
1102	platform_set_drvdata(pdev, dum);
1103	return rc;
1104
1105err_dev:
1106	usb_del_gadget_udc(&dum->gadget);
1107err_udc:
1108	return rc;
1109}
1110
1111static void dummy_udc_remove(struct platform_device *pdev)
1112{
1113	struct dummy	*dum = platform_get_drvdata(pdev);
1114
1115	device_remove_file(&dum->gadget.dev, &dev_attr_function);
1116	usb_del_gadget_udc(&dum->gadget);
 
1117}
1118
1119static void dummy_udc_pm(struct dummy *dum, struct dummy_hcd *dum_hcd,
1120		int suspend)
1121{
1122	spin_lock_irq(&dum->lock);
1123	dum->udc_suspended = suspend;
1124	set_link_state(dum_hcd);
1125	spin_unlock_irq(&dum->lock);
1126}
1127
1128static int dummy_udc_suspend(struct platform_device *pdev, pm_message_t state)
1129{
1130	struct dummy		*dum = platform_get_drvdata(pdev);
1131	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
1132
1133	dev_dbg(&pdev->dev, "%s\n", __func__);
1134	dummy_udc_pm(dum, dum_hcd, 1);
1135	usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
1136	return 0;
1137}
1138
1139static int dummy_udc_resume(struct platform_device *pdev)
1140{
1141	struct dummy		*dum = platform_get_drvdata(pdev);
1142	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
1143
1144	dev_dbg(&pdev->dev, "%s\n", __func__);
1145	dummy_udc_pm(dum, dum_hcd, 0);
1146	usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
1147	return 0;
1148}
1149
1150static struct platform_driver dummy_udc_driver = {
1151	.probe		= dummy_udc_probe,
1152	.remove_new	= dummy_udc_remove,
1153	.suspend	= dummy_udc_suspend,
1154	.resume		= dummy_udc_resume,
1155	.driver		= {
1156		.name	= gadget_name,
1157	},
1158};
1159
1160/*-------------------------------------------------------------------------*/
1161
1162static unsigned int dummy_get_ep_idx(const struct usb_endpoint_descriptor *desc)
1163{
1164	unsigned int index;
1165
1166	index = usb_endpoint_num(desc) << 1;
1167	if (usb_endpoint_dir_in(desc))
1168		index |= 1;
1169	return index;
1170}
1171
1172/* HOST SIDE DRIVER
1173 *
1174 * this uses the hcd framework to hook up to host side drivers.
1175 * its root hub will only have one device, otherwise it acts like
1176 * a normal host controller.
1177 *
1178 * when urbs are queued, they're just stuck on a list that we
1179 * scan in a timer callback.  that callback connects writes from
1180 * the host with reads from the device, and so on, based on the
1181 * usb 2.0 rules.
1182 */
1183
1184static int dummy_ep_stream_en(struct dummy_hcd *dum_hcd, struct urb *urb)
1185{
1186	const struct usb_endpoint_descriptor *desc = &urb->ep->desc;
1187	u32 index;
1188
1189	if (!usb_endpoint_xfer_bulk(desc))
1190		return 0;
1191
1192	index = dummy_get_ep_idx(desc);
1193	return (1 << index) & dum_hcd->stream_en_ep;
1194}
1195
1196/*
1197 * The max stream number is saved as a nibble so for the 30 possible endpoints
1198 * we only 15 bytes of memory. Therefore we are limited to max 16 streams (0
1199 * means we use only 1 stream). The maximum according to the spec is 16bit so
1200 * if the 16 stream limit is about to go, the array size should be incremented
1201 * to 30 elements of type u16.
1202 */
1203static int get_max_streams_for_pipe(struct dummy_hcd *dum_hcd,
1204		unsigned int pipe)
1205{
1206	int max_streams;
1207
1208	max_streams = dum_hcd->num_stream[usb_pipeendpoint(pipe)];
1209	if (usb_pipeout(pipe))
1210		max_streams >>= 4;
1211	else
1212		max_streams &= 0xf;
1213	max_streams++;
1214	return max_streams;
1215}
1216
1217static void set_max_streams_for_pipe(struct dummy_hcd *dum_hcd,
1218		unsigned int pipe, unsigned int streams)
1219{
1220	int max_streams;
1221
1222	streams--;
1223	max_streams = dum_hcd->num_stream[usb_pipeendpoint(pipe)];
1224	if (usb_pipeout(pipe)) {
1225		streams <<= 4;
1226		max_streams &= 0xf;
1227	} else {
1228		max_streams &= 0xf0;
1229	}
1230	max_streams |= streams;
1231	dum_hcd->num_stream[usb_pipeendpoint(pipe)] = max_streams;
1232}
1233
1234static int dummy_validate_stream(struct dummy_hcd *dum_hcd, struct urb *urb)
1235{
1236	unsigned int max_streams;
1237	int enabled;
1238
1239	enabled = dummy_ep_stream_en(dum_hcd, urb);
1240	if (!urb->stream_id) {
1241		if (enabled)
1242			return -EINVAL;
1243		return 0;
1244	}
1245	if (!enabled)
1246		return -EINVAL;
1247
1248	max_streams = get_max_streams_for_pipe(dum_hcd,
1249			usb_pipeendpoint(urb->pipe));
1250	if (urb->stream_id > max_streams) {
1251		dev_err(dummy_dev(dum_hcd), "Stream id %d is out of range.\n",
1252				urb->stream_id);
1253		BUG();
1254		return -EINVAL;
1255	}
1256	return 0;
1257}
1258
1259static int dummy_urb_enqueue(
1260	struct usb_hcd			*hcd,
1261	struct urb			*urb,
1262	gfp_t				mem_flags
1263) {
1264	struct dummy_hcd *dum_hcd;
1265	struct urbp	*urbp;
1266	unsigned long	flags;
1267	int		rc;
1268
1269	urbp = kmalloc(sizeof *urbp, mem_flags);
1270	if (!urbp)
1271		return -ENOMEM;
1272	urbp->urb = urb;
1273	urbp->miter_started = 0;
1274
1275	dum_hcd = hcd_to_dummy_hcd(hcd);
1276	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1277
1278	rc = dummy_validate_stream(dum_hcd, urb);
1279	if (rc) {
1280		kfree(urbp);
1281		goto done;
1282	}
1283
1284	rc = usb_hcd_link_urb_to_ep(hcd, urb);
1285	if (rc) {
1286		kfree(urbp);
1287		goto done;
1288	}
1289
1290	if (!dum_hcd->udev) {
1291		dum_hcd->udev = urb->dev;
1292		usb_get_dev(dum_hcd->udev);
1293	} else if (unlikely(dum_hcd->udev != urb->dev))
1294		dev_err(dummy_dev(dum_hcd), "usb_device address has changed!\n");
1295
1296	list_add_tail(&urbp->urbp_list, &dum_hcd->urbp_list);
1297	urb->hcpriv = urbp;
1298	if (!dum_hcd->next_frame_urbp)
1299		dum_hcd->next_frame_urbp = urbp;
1300	if (usb_pipetype(urb->pipe) == PIPE_CONTROL)
1301		urb->error_count = 1;		/* mark as a new urb */
1302
1303	/* kick the scheduler, it'll do the rest */
1304	if (!timer_pending(&dum_hcd->timer))
1305		mod_timer(&dum_hcd->timer, jiffies + 1);
1306
1307 done:
1308	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1309	return rc;
1310}
1311
1312static int dummy_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1313{
1314	struct dummy_hcd *dum_hcd;
1315	unsigned long	flags;
1316	int		rc;
1317
1318	/* giveback happens automatically in timer callback,
1319	 * so make sure the callback happens */
1320	dum_hcd = hcd_to_dummy_hcd(hcd);
1321	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1322
1323	rc = usb_hcd_check_unlink_urb(hcd, urb, status);
1324	if (!rc && dum_hcd->rh_state != DUMMY_RH_RUNNING &&
1325			!list_empty(&dum_hcd->urbp_list))
1326		mod_timer(&dum_hcd->timer, jiffies);
1327
1328	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1329	return rc;
1330}
1331
1332static int dummy_perform_transfer(struct urb *urb, struct dummy_request *req,
1333		u32 len)
1334{
1335	void *ubuf, *rbuf;
1336	struct urbp *urbp = urb->hcpriv;
1337	int to_host;
1338	struct sg_mapping_iter *miter = &urbp->miter;
1339	u32 trans = 0;
1340	u32 this_sg;
1341	bool next_sg;
1342
1343	to_host = usb_urb_dir_in(urb);
1344	rbuf = req->req.buf + req->req.actual;
1345
1346	if (!urb->num_sgs) {
1347		ubuf = urb->transfer_buffer + urb->actual_length;
1348		if (to_host)
1349			memcpy(ubuf, rbuf, len);
1350		else
1351			memcpy(rbuf, ubuf, len);
1352		return len;
1353	}
1354
1355	if (!urbp->miter_started) {
1356		u32 flags = SG_MITER_ATOMIC;
1357
1358		if (to_host)
1359			flags |= SG_MITER_TO_SG;
1360		else
1361			flags |= SG_MITER_FROM_SG;
1362
1363		sg_miter_start(miter, urb->sg, urb->num_sgs, flags);
1364		urbp->miter_started = 1;
1365	}
1366	next_sg = sg_miter_next(miter);
1367	if (next_sg == false) {
1368		WARN_ON_ONCE(1);
1369		return -EINVAL;
1370	}
1371	do {
1372		ubuf = miter->addr;
1373		this_sg = min_t(u32, len, miter->length);
1374		miter->consumed = this_sg;
1375		trans += this_sg;
1376
1377		if (to_host)
1378			memcpy(ubuf, rbuf, this_sg);
1379		else
1380			memcpy(rbuf, ubuf, this_sg);
1381		len -= this_sg;
1382
1383		if (!len)
1384			break;
1385		next_sg = sg_miter_next(miter);
1386		if (next_sg == false) {
1387			WARN_ON_ONCE(1);
1388			return -EINVAL;
1389		}
1390
1391		rbuf += this_sg;
1392	} while (1);
1393
1394	sg_miter_stop(miter);
1395	return trans;
1396}
1397
1398/* transfer up to a frame's worth; caller must own lock */
1399static int transfer(struct dummy_hcd *dum_hcd, struct urb *urb,
1400		struct dummy_ep *ep, int limit, int *status)
1401{
1402	struct dummy		*dum = dum_hcd->dum;
1403	struct dummy_request	*req;
1404	int			sent = 0;
1405
1406top:
1407	/* if there's no request queued, the device is NAKing; return */
1408	list_for_each_entry(req, &ep->queue, queue) {
1409		unsigned	host_len, dev_len, len;
1410		int		is_short, to_host;
1411		int		rescan = 0;
1412
1413		if (dummy_ep_stream_en(dum_hcd, urb)) {
1414			if ((urb->stream_id != req->req.stream_id))
1415				continue;
1416		}
1417
1418		/* 1..N packets of ep->ep.maxpacket each ... the last one
1419		 * may be short (including zero length).
1420		 *
1421		 * writer can send a zlp explicitly (length 0) or implicitly
1422		 * (length mod maxpacket zero, and 'zero' flag); they always
1423		 * terminate reads.
1424		 */
1425		host_len = urb->transfer_buffer_length - urb->actual_length;
1426		dev_len = req->req.length - req->req.actual;
1427		len = min(host_len, dev_len);
1428
1429		/* FIXME update emulated data toggle too */
1430
1431		to_host = usb_urb_dir_in(urb);
1432		if (unlikely(len == 0))
1433			is_short = 1;
1434		else {
1435			/* not enough bandwidth left? */
1436			if (limit < ep->ep.maxpacket && limit < len)
1437				break;
1438			len = min_t(unsigned, len, limit);
1439			if (len == 0)
1440				break;
1441
1442			/* send multiple of maxpacket first, then remainder */
1443			if (len >= ep->ep.maxpacket) {
1444				is_short = 0;
1445				if (len % ep->ep.maxpacket)
1446					rescan = 1;
1447				len -= len % ep->ep.maxpacket;
1448			} else {
1449				is_short = 1;
1450			}
1451
1452			len = dummy_perform_transfer(urb, req, len);
1453
1454			ep->last_io = jiffies;
1455			if ((int)len < 0) {
1456				req->req.status = len;
1457			} else {
1458				limit -= len;
1459				sent += len;
1460				urb->actual_length += len;
1461				req->req.actual += len;
1462			}
1463		}
1464
1465		/* short packets terminate, maybe with overflow/underflow.
1466		 * it's only really an error to write too much.
1467		 *
1468		 * partially filling a buffer optionally blocks queue advances
1469		 * (so completion handlers can clean up the queue) but we don't
1470		 * need to emulate such data-in-flight.
1471		 */
1472		if (is_short) {
1473			if (host_len == dev_len) {
1474				req->req.status = 0;
1475				*status = 0;
1476			} else if (to_host) {
1477				req->req.status = 0;
1478				if (dev_len > host_len)
1479					*status = -EOVERFLOW;
1480				else
1481					*status = 0;
1482			} else {
1483				*status = 0;
1484				if (host_len > dev_len)
1485					req->req.status = -EOVERFLOW;
1486				else
1487					req->req.status = 0;
1488			}
1489
1490		/*
1491		 * many requests terminate without a short packet.
1492		 * send a zlp if demanded by flags.
1493		 */
1494		} else {
1495			if (req->req.length == req->req.actual) {
1496				if (req->req.zero && to_host)
1497					rescan = 1;
1498				else
1499					req->req.status = 0;
1500			}
1501			if (urb->transfer_buffer_length == urb->actual_length) {
1502				if (urb->transfer_flags & URB_ZERO_PACKET &&
1503				    !to_host)
1504					rescan = 1;
1505				else
1506					*status = 0;
1507			}
1508		}
1509
1510		/* device side completion --> continuable */
1511		if (req->req.status != -EINPROGRESS) {
1512			list_del_init(&req->queue);
1513
1514			spin_unlock(&dum->lock);
1515			usb_gadget_giveback_request(&ep->ep, &req->req);
1516			spin_lock(&dum->lock);
1517
1518			/* requests might have been unlinked... */
1519			rescan = 1;
1520		}
1521
1522		/* host side completion --> terminate */
1523		if (*status != -EINPROGRESS)
1524			break;
1525
1526		/* rescan to continue with any other queued i/o */
1527		if (rescan)
1528			goto top;
1529	}
1530	return sent;
1531}
1532
1533static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep)
1534{
1535	int	limit = ep->ep.maxpacket;
1536
1537	if (dum->gadget.speed == USB_SPEED_HIGH) {
1538		int	tmp;
1539
1540		/* high bandwidth mode */
1541		tmp = usb_endpoint_maxp_mult(ep->desc);
1542		tmp *= 8 /* applies to entire frame */;
1543		limit += limit * tmp;
1544	}
1545	if (dum->gadget.speed == USB_SPEED_SUPER) {
1546		switch (usb_endpoint_type(ep->desc)) {
1547		case USB_ENDPOINT_XFER_ISOC:
1548			/* Sec. 4.4.8.2 USB3.0 Spec */
1549			limit = 3 * 16 * 1024 * 8;
1550			break;
1551		case USB_ENDPOINT_XFER_INT:
1552			/* Sec. 4.4.7.2 USB3.0 Spec */
1553			limit = 3 * 1024 * 8;
1554			break;
1555		case USB_ENDPOINT_XFER_BULK:
1556		default:
1557			break;
1558		}
1559	}
1560	return limit;
1561}
1562
1563#define is_active(dum_hcd)	((dum_hcd->port_status & \
1564		(USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE | \
1565			USB_PORT_STAT_SUSPEND)) \
1566		== (USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE))
1567
1568static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address)
1569{
1570	int		i;
1571
1572	if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ?
1573			dum->ss_hcd : dum->hs_hcd)))
1574		return NULL;
1575	if (!dum->ints_enabled)
1576		return NULL;
1577	if ((address & ~USB_DIR_IN) == 0)
1578		return &dum->ep[0];
1579	for (i = 1; i < DUMMY_ENDPOINTS; i++) {
1580		struct dummy_ep	*ep = &dum->ep[i];
1581
1582		if (!ep->desc)
1583			continue;
1584		if (ep->desc->bEndpointAddress == address)
1585			return ep;
1586	}
1587	return NULL;
1588}
1589
1590#undef is_active
1591
1592#define Dev_Request	(USB_TYPE_STANDARD | USB_RECIP_DEVICE)
1593#define Dev_InRequest	(Dev_Request | USB_DIR_IN)
1594#define Intf_Request	(USB_TYPE_STANDARD | USB_RECIP_INTERFACE)
1595#define Intf_InRequest	(Intf_Request | USB_DIR_IN)
1596#define Ep_Request	(USB_TYPE_STANDARD | USB_RECIP_ENDPOINT)
1597#define Ep_InRequest	(Ep_Request | USB_DIR_IN)
1598
1599
1600/**
1601 * handle_control_request() - handles all control transfers
1602 * @dum_hcd: pointer to dummy (the_controller)
1603 * @urb: the urb request to handle
1604 * @setup: pointer to the setup data for a USB device control
1605 *	 request
1606 * @status: pointer to request handling status
1607 *
1608 * Return 0 - if the request was handled
1609 *	  1 - if the request wasn't handles
1610 *	  error code on error
1611 */
1612static int handle_control_request(struct dummy_hcd *dum_hcd, struct urb *urb,
1613				  struct usb_ctrlrequest *setup,
1614				  int *status)
1615{
1616	struct dummy_ep		*ep2;
1617	struct dummy		*dum = dum_hcd->dum;
1618	int			ret_val = 1;
1619	unsigned	w_index;
1620	unsigned	w_value;
1621
1622	w_index = le16_to_cpu(setup->wIndex);
1623	w_value = le16_to_cpu(setup->wValue);
1624	switch (setup->bRequest) {
1625	case USB_REQ_SET_ADDRESS:
1626		if (setup->bRequestType != Dev_Request)
1627			break;
1628		dum->address = w_value;
1629		*status = 0;
1630		dev_dbg(udc_dev(dum), "set_address = %d\n",
1631				w_value);
1632		ret_val = 0;
1633		break;
1634	case USB_REQ_SET_FEATURE:
1635		if (setup->bRequestType == Dev_Request) {
1636			ret_val = 0;
1637			switch (w_value) {
1638			case USB_DEVICE_REMOTE_WAKEUP:
1639				break;
1640			case USB_DEVICE_B_HNP_ENABLE:
1641				dum->gadget.b_hnp_enable = 1;
1642				break;
1643			case USB_DEVICE_A_HNP_SUPPORT:
1644				dum->gadget.a_hnp_support = 1;
1645				break;
1646			case USB_DEVICE_A_ALT_HNP_SUPPORT:
1647				dum->gadget.a_alt_hnp_support = 1;
1648				break;
1649			case USB_DEVICE_U1_ENABLE:
1650				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1651				    HCD_USB3)
1652					w_value = USB_DEV_STAT_U1_ENABLED;
1653				else
1654					ret_val = -EOPNOTSUPP;
1655				break;
1656			case USB_DEVICE_U2_ENABLE:
1657				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1658				    HCD_USB3)
1659					w_value = USB_DEV_STAT_U2_ENABLED;
1660				else
1661					ret_val = -EOPNOTSUPP;
1662				break;
1663			case USB_DEVICE_LTM_ENABLE:
1664				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1665				    HCD_USB3)
1666					w_value = USB_DEV_STAT_LTM_ENABLED;
1667				else
1668					ret_val = -EOPNOTSUPP;
1669				break;
1670			default:
1671				ret_val = -EOPNOTSUPP;
1672			}
1673			if (ret_val == 0) {
1674				dum->devstatus |= (1 << w_value);
1675				*status = 0;
1676			}
1677		} else if (setup->bRequestType == Ep_Request) {
1678			/* endpoint halt */
1679			ep2 = find_endpoint(dum, w_index);
1680			if (!ep2 || ep2->ep.name == ep0name) {
1681				ret_val = -EOPNOTSUPP;
1682				break;
1683			}
1684			ep2->halted = 1;
1685			ret_val = 0;
1686			*status = 0;
1687		}
1688		break;
1689	case USB_REQ_CLEAR_FEATURE:
1690		if (setup->bRequestType == Dev_Request) {
1691			ret_val = 0;
1692			switch (w_value) {
1693			case USB_DEVICE_REMOTE_WAKEUP:
1694				w_value = USB_DEVICE_REMOTE_WAKEUP;
1695				break;
1696			case USB_DEVICE_U1_ENABLE:
1697				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1698				    HCD_USB3)
1699					w_value = USB_DEV_STAT_U1_ENABLED;
1700				else
1701					ret_val = -EOPNOTSUPP;
1702				break;
1703			case USB_DEVICE_U2_ENABLE:
1704				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1705				    HCD_USB3)
1706					w_value = USB_DEV_STAT_U2_ENABLED;
1707				else
1708					ret_val = -EOPNOTSUPP;
1709				break;
1710			case USB_DEVICE_LTM_ENABLE:
1711				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1712				    HCD_USB3)
1713					w_value = USB_DEV_STAT_LTM_ENABLED;
1714				else
1715					ret_val = -EOPNOTSUPP;
1716				break;
1717			default:
1718				ret_val = -EOPNOTSUPP;
1719				break;
1720			}
1721			if (ret_val == 0) {
1722				dum->devstatus &= ~(1 << w_value);
1723				*status = 0;
1724			}
1725		} else if (setup->bRequestType == Ep_Request) {
1726			/* endpoint halt */
1727			ep2 = find_endpoint(dum, w_index);
1728			if (!ep2) {
1729				ret_val = -EOPNOTSUPP;
1730				break;
1731			}
1732			if (!ep2->wedged)
1733				ep2->halted = 0;
1734			ret_val = 0;
1735			*status = 0;
1736		}
1737		break;
1738	case USB_REQ_GET_STATUS:
1739		if (setup->bRequestType == Dev_InRequest
1740				|| setup->bRequestType == Intf_InRequest
1741				|| setup->bRequestType == Ep_InRequest) {
1742			char *buf;
1743			/*
1744			 * device: remote wakeup, selfpowered
1745			 * interface: nothing
1746			 * endpoint: halt
1747			 */
1748			buf = (char *)urb->transfer_buffer;
1749			if (urb->transfer_buffer_length > 0) {
1750				if (setup->bRequestType == Ep_InRequest) {
1751					ep2 = find_endpoint(dum, w_index);
1752					if (!ep2) {
1753						ret_val = -EOPNOTSUPP;
1754						break;
1755					}
1756					buf[0] = ep2->halted;
1757				} else if (setup->bRequestType ==
1758					   Dev_InRequest) {
1759					buf[0] = (u8)dum->devstatus;
1760				} else
1761					buf[0] = 0;
1762			}
1763			if (urb->transfer_buffer_length > 1)
1764				buf[1] = 0;
1765			urb->actual_length = min_t(u32, 2,
1766				urb->transfer_buffer_length);
1767			ret_val = 0;
1768			*status = 0;
1769		}
1770		break;
1771	}
1772	return ret_val;
1773}
1774
1775/*
1776 * Drive both sides of the transfers; looks like irq handlers to both
1777 * drivers except that the callbacks are invoked from soft interrupt
1778 * context.
1779 */
1780static void dummy_timer(struct timer_list *t)
1781{
1782	struct dummy_hcd	*dum_hcd = from_timer(dum_hcd, t, timer);
1783	struct dummy		*dum = dum_hcd->dum;
1784	struct urbp		*urbp, *tmp;
1785	unsigned long		flags;
1786	int			limit, total;
1787	int			i;
1788
1789	/* simplistic model for one frame's bandwidth */
1790	/* FIXME: account for transaction and packet overhead */
1791	switch (dum->gadget.speed) {
1792	case USB_SPEED_LOW:
1793		total = 8/*bytes*/ * 12/*packets*/;
1794		break;
1795	case USB_SPEED_FULL:
1796		total = 64/*bytes*/ * 19/*packets*/;
1797		break;
1798	case USB_SPEED_HIGH:
1799		total = 512/*bytes*/ * 13/*packets*/ * 8/*uframes*/;
1800		break;
1801	case USB_SPEED_SUPER:
1802		/* Bus speed is 500000 bytes/ms, so use a little less */
1803		total = 490000;
1804		break;
1805	default:	/* Can't happen */
1806		dev_err(dummy_dev(dum_hcd), "bogus device speed\n");
1807		total = 0;
1808		break;
1809	}
1810
1811	/* FIXME if HZ != 1000 this will probably misbehave ... */
1812
1813	/* look at each urb queued by the host side driver */
1814	spin_lock_irqsave(&dum->lock, flags);
1815
1816	if (!dum_hcd->udev) {
1817		dev_err(dummy_dev(dum_hcd),
1818				"timer fired with no URBs pending?\n");
1819		spin_unlock_irqrestore(&dum->lock, flags);
1820		return;
1821	}
1822	dum_hcd->next_frame_urbp = NULL;
1823
1824	for (i = 0; i < DUMMY_ENDPOINTS; i++) {
1825		if (!ep_info[i].name)
1826			break;
1827		dum->ep[i].already_seen = 0;
1828	}
1829
1830restart:
1831	list_for_each_entry_safe(urbp, tmp, &dum_hcd->urbp_list, urbp_list) {
1832		struct urb		*urb;
1833		struct dummy_request	*req;
1834		u8			address;
1835		struct dummy_ep		*ep = NULL;
1836		int			status = -EINPROGRESS;
1837
1838		/* stop when we reach URBs queued after the timer interrupt */
1839		if (urbp == dum_hcd->next_frame_urbp)
1840			break;
1841
1842		urb = urbp->urb;
1843		if (urb->unlinked)
1844			goto return_urb;
1845		else if (dum_hcd->rh_state != DUMMY_RH_RUNNING)
1846			continue;
1847
1848		/* Used up this frame's bandwidth? */
1849		if (total <= 0)
1850			continue;
1851
1852		/* find the gadget's ep for this request (if configured) */
1853		address = usb_pipeendpoint (urb->pipe);
1854		if (usb_urb_dir_in(urb))
1855			address |= USB_DIR_IN;
1856		ep = find_endpoint(dum, address);
1857		if (!ep) {
1858			/* set_configuration() disagreement */
1859			dev_dbg(dummy_dev(dum_hcd),
1860				"no ep configured for urb %p\n",
1861				urb);
1862			status = -EPROTO;
1863			goto return_urb;
1864		}
1865
1866		if (ep->already_seen)
1867			continue;
1868		ep->already_seen = 1;
1869		if (ep == &dum->ep[0] && urb->error_count) {
1870			ep->setup_stage = 1;	/* a new urb */
1871			urb->error_count = 0;
1872		}
1873		if (ep->halted && !ep->setup_stage) {
1874			/* NOTE: must not be iso! */
1875			dev_dbg(dummy_dev(dum_hcd), "ep %s halted, urb %p\n",
1876					ep->ep.name, urb);
1877			status = -EPIPE;
1878			goto return_urb;
1879		}
1880		/* FIXME make sure both ends agree on maxpacket */
1881
1882		/* handle control requests */
1883		if (ep == &dum->ep[0] && ep->setup_stage) {
1884			struct usb_ctrlrequest		setup;
1885			int				value;
1886
1887			setup = *(struct usb_ctrlrequest *) urb->setup_packet;
1888			/* paranoia, in case of stale queued data */
1889			list_for_each_entry(req, &ep->queue, queue) {
1890				list_del_init(&req->queue);
1891				req->req.status = -EOVERFLOW;
1892				dev_dbg(udc_dev(dum), "stale req = %p\n",
1893						req);
1894
1895				spin_unlock(&dum->lock);
1896				usb_gadget_giveback_request(&ep->ep, &req->req);
1897				spin_lock(&dum->lock);
1898				ep->already_seen = 0;
1899				goto restart;
1900			}
1901
1902			/* gadget driver never sees set_address or operations
1903			 * on standard feature flags.  some hardware doesn't
1904			 * even expose them.
1905			 */
1906			ep->last_io = jiffies;
1907			ep->setup_stage = 0;
1908			ep->halted = 0;
1909
1910			value = handle_control_request(dum_hcd, urb, &setup,
1911						       &status);
1912
1913			/* gadget driver handles all other requests.  block
1914			 * until setup() returns; no reentrancy issues etc.
1915			 */
1916			if (value > 0) {
1917				++dum->callback_usage;
1918				spin_unlock(&dum->lock);
1919				value = dum->driver->setup(&dum->gadget,
1920						&setup);
1921				spin_lock(&dum->lock);
1922				--dum->callback_usage;
1923
1924				if (value >= 0) {
1925					/* no delays (max 64KB data stage) */
1926					limit = 64*1024;
1927					goto treat_control_like_bulk;
1928				}
1929				/* error, see below */
1930			}
1931
1932			if (value < 0) {
1933				if (value != -EOPNOTSUPP)
1934					dev_dbg(udc_dev(dum),
1935						"setup --> %d\n",
1936						value);
1937				status = -EPIPE;
1938				urb->actual_length = 0;
1939			}
1940
1941			goto return_urb;
1942		}
1943
1944		/* non-control requests */
1945		limit = total;
1946		switch (usb_pipetype(urb->pipe)) {
1947		case PIPE_ISOCHRONOUS:
1948			/*
1949			 * We don't support isochronous.  But if we did,
1950			 * here are some of the issues we'd have to face:
1951			 *
1952			 * Is it urb->interval since the last xfer?
1953			 * Use urb->iso_frame_desc[i].
1954			 * Complete whether or not ep has requests queued.
1955			 * Report random errors, to debug drivers.
1956			 */
1957			limit = max(limit, periodic_bytes(dum, ep));
1958			status = -EINVAL;	/* fail all xfers */
1959			break;
1960
1961		case PIPE_INTERRUPT:
1962			/* FIXME is it urb->interval since the last xfer?
1963			 * this almost certainly polls too fast.
1964			 */
1965			limit = max(limit, periodic_bytes(dum, ep));
1966			fallthrough;
1967
1968		default:
1969treat_control_like_bulk:
1970			ep->last_io = jiffies;
1971			total -= transfer(dum_hcd, urb, ep, limit, &status);
1972			break;
1973		}
1974
1975		/* incomplete transfer? */
1976		if (status == -EINPROGRESS)
1977			continue;
1978
1979return_urb:
1980		list_del(&urbp->urbp_list);
1981		kfree(urbp);
1982		if (ep)
1983			ep->already_seen = ep->setup_stage = 0;
1984
1985		usb_hcd_unlink_urb_from_ep(dummy_hcd_to_hcd(dum_hcd), urb);
1986		spin_unlock(&dum->lock);
1987		usb_hcd_giveback_urb(dummy_hcd_to_hcd(dum_hcd), urb, status);
1988		spin_lock(&dum->lock);
1989
1990		goto restart;
1991	}
1992
1993	if (list_empty(&dum_hcd->urbp_list)) {
1994		usb_put_dev(dum_hcd->udev);
1995		dum_hcd->udev = NULL;
1996	} else if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
1997		/* want a 1 msec delay here */
1998		mod_timer(&dum_hcd->timer, jiffies + msecs_to_jiffies(1));
1999	}
2000
2001	spin_unlock_irqrestore(&dum->lock, flags);
2002}
2003
2004/*-------------------------------------------------------------------------*/
2005
2006#define PORT_C_MASK \
2007	((USB_PORT_STAT_C_CONNECTION \
2008	| USB_PORT_STAT_C_ENABLE \
2009	| USB_PORT_STAT_C_SUSPEND \
2010	| USB_PORT_STAT_C_OVERCURRENT \
2011	| USB_PORT_STAT_C_RESET) << 16)
2012
2013static int dummy_hub_status(struct usb_hcd *hcd, char *buf)
2014{
2015	struct dummy_hcd	*dum_hcd;
2016	unsigned long		flags;
2017	int			retval = 0;
2018
2019	dum_hcd = hcd_to_dummy_hcd(hcd);
2020
2021	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2022	if (!HCD_HW_ACCESSIBLE(hcd))
2023		goto done;
2024
2025	if (dum_hcd->resuming && time_after_eq(jiffies, dum_hcd->re_timeout)) {
2026		dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2027		dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2028		set_link_state(dum_hcd);
2029	}
2030
2031	if ((dum_hcd->port_status & PORT_C_MASK) != 0) {
2032		*buf = (1 << 1);
2033		dev_dbg(dummy_dev(dum_hcd), "port status 0x%08x has changes\n",
2034				dum_hcd->port_status);
2035		retval = 1;
2036		if (dum_hcd->rh_state == DUMMY_RH_SUSPENDED)
2037			usb_hcd_resume_root_hub(hcd);
2038	}
2039done:
2040	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2041	return retval;
2042}
2043
2044/* usb 3.0 root hub device descriptor */
2045static struct {
2046	struct usb_bos_descriptor bos;
2047	struct usb_ss_cap_descriptor ss_cap;
2048} __packed usb3_bos_desc = {
2049
2050	.bos = {
2051		.bLength		= USB_DT_BOS_SIZE,
2052		.bDescriptorType	= USB_DT_BOS,
2053		.wTotalLength		= cpu_to_le16(sizeof(usb3_bos_desc)),
2054		.bNumDeviceCaps		= 1,
2055	},
2056	.ss_cap = {
2057		.bLength		= USB_DT_USB_SS_CAP_SIZE,
2058		.bDescriptorType	= USB_DT_DEVICE_CAPABILITY,
2059		.bDevCapabilityType	= USB_SS_CAP_TYPE,
2060		.wSpeedSupported	= cpu_to_le16(USB_5GBPS_OPERATION),
2061		.bFunctionalitySupport	= ilog2(USB_5GBPS_OPERATION),
2062	},
2063};
2064
2065static inline void
2066ss_hub_descriptor(struct usb_hub_descriptor *desc)
2067{
2068	memset(desc, 0, sizeof *desc);
2069	desc->bDescriptorType = USB_DT_SS_HUB;
2070	desc->bDescLength = 12;
2071	desc->wHubCharacteristics = cpu_to_le16(
2072			HUB_CHAR_INDV_PORT_LPSM |
2073			HUB_CHAR_COMMON_OCPM);
2074	desc->bNbrPorts = 1;
2075	desc->u.ss.bHubHdrDecLat = 0x04; /* Worst case: 0.4 micro sec*/
2076	desc->u.ss.DeviceRemovable = 0;
2077}
2078
2079static inline void hub_descriptor(struct usb_hub_descriptor *desc)
2080{
2081	memset(desc, 0, sizeof *desc);
2082	desc->bDescriptorType = USB_DT_HUB;
2083	desc->bDescLength = 9;
2084	desc->wHubCharacteristics = cpu_to_le16(
2085			HUB_CHAR_INDV_PORT_LPSM |
2086			HUB_CHAR_COMMON_OCPM);
2087	desc->bNbrPorts = 1;
2088	desc->u.hs.DeviceRemovable[0] = 0;
2089	desc->u.hs.DeviceRemovable[1] = 0xff;	/* PortPwrCtrlMask */
2090}
2091
2092static int dummy_hub_control(
2093	struct usb_hcd	*hcd,
2094	u16		typeReq,
2095	u16		wValue,
2096	u16		wIndex,
2097	char		*buf,
2098	u16		wLength
2099) {
2100	struct dummy_hcd *dum_hcd;
2101	int		retval = 0;
2102	unsigned long	flags;
2103
2104	if (!HCD_HW_ACCESSIBLE(hcd))
2105		return -ETIMEDOUT;
2106
2107	dum_hcd = hcd_to_dummy_hcd(hcd);
2108
2109	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2110	switch (typeReq) {
2111	case ClearHubFeature:
2112		break;
2113	case ClearPortFeature:
2114		switch (wValue) {
2115		case USB_PORT_FEAT_SUSPEND:
2116			if (hcd->speed == HCD_USB3) {
2117				dev_dbg(dummy_dev(dum_hcd),
2118					 "USB_PORT_FEAT_SUSPEND req not "
2119					 "supported for USB 3.0 roothub\n");
2120				goto error;
2121			}
2122			if (dum_hcd->port_status & USB_PORT_STAT_SUSPEND) {
2123				/* 20msec resume signaling */
2124				dum_hcd->resuming = 1;
2125				dum_hcd->re_timeout = jiffies +
2126						msecs_to_jiffies(20);
2127			}
2128			break;
2129		case USB_PORT_FEAT_POWER:
2130			dev_dbg(dummy_dev(dum_hcd), "power-off\n");
2131			if (hcd->speed == HCD_USB3)
2132				dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
2133			else
2134				dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
2135			set_link_state(dum_hcd);
2136			break;
2137		case USB_PORT_FEAT_ENABLE:
2138		case USB_PORT_FEAT_C_ENABLE:
2139		case USB_PORT_FEAT_C_SUSPEND:
2140			/* Not allowed for USB-3 */
2141			if (hcd->speed == HCD_USB3)
2142				goto error;
2143			fallthrough;
2144		case USB_PORT_FEAT_C_CONNECTION:
2145		case USB_PORT_FEAT_C_RESET:
2146			dum_hcd->port_status &= ~(1 << wValue);
2147			set_link_state(dum_hcd);
2148			break;
2149		default:
2150		/* Disallow INDICATOR and C_OVER_CURRENT */
2151			goto error;
2152		}
2153		break;
2154	case GetHubDescriptor:
2155		if (hcd->speed == HCD_USB3 &&
2156				(wLength < USB_DT_SS_HUB_SIZE ||
2157				 wValue != (USB_DT_SS_HUB << 8))) {
2158			dev_dbg(dummy_dev(dum_hcd),
2159				"Wrong hub descriptor type for "
2160				"USB 3.0 roothub.\n");
2161			goto error;
2162		}
2163		if (hcd->speed == HCD_USB3)
2164			ss_hub_descriptor((struct usb_hub_descriptor *) buf);
2165		else
2166			hub_descriptor((struct usb_hub_descriptor *) buf);
2167		break;
2168
2169	case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
2170		if (hcd->speed != HCD_USB3)
2171			goto error;
2172
2173		if ((wValue >> 8) != USB_DT_BOS)
2174			goto error;
2175
2176		memcpy(buf, &usb3_bos_desc, sizeof(usb3_bos_desc));
2177		retval = sizeof(usb3_bos_desc);
2178		break;
2179
2180	case GetHubStatus:
2181		*(__le32 *) buf = cpu_to_le32(0);
2182		break;
2183	case GetPortStatus:
2184		if (wIndex != 1)
2185			retval = -EPIPE;
2186
2187		/* whoever resets or resumes must GetPortStatus to
2188		 * complete it!!
2189		 */
2190		if (dum_hcd->resuming &&
2191				time_after_eq(jiffies, dum_hcd->re_timeout)) {
2192			dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2193			dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2194		}
2195		if ((dum_hcd->port_status & USB_PORT_STAT_RESET) != 0 &&
2196				time_after_eq(jiffies, dum_hcd->re_timeout)) {
2197			dum_hcd->port_status |= (USB_PORT_STAT_C_RESET << 16);
2198			dum_hcd->port_status &= ~USB_PORT_STAT_RESET;
2199			if (dum_hcd->dum->pullup) {
2200				dum_hcd->port_status |= USB_PORT_STAT_ENABLE;
2201
2202				if (hcd->speed < HCD_USB3) {
2203					switch (dum_hcd->dum->gadget.speed) {
2204					case USB_SPEED_HIGH:
2205						dum_hcd->port_status |=
2206						      USB_PORT_STAT_HIGH_SPEED;
2207						break;
2208					case USB_SPEED_LOW:
2209						dum_hcd->dum->gadget.ep0->
2210							maxpacket = 8;
2211						dum_hcd->port_status |=
2212							USB_PORT_STAT_LOW_SPEED;
2213						break;
2214					default:
2215						break;
2216					}
2217				}
2218			}
2219		}
2220		set_link_state(dum_hcd);
2221		((__le16 *) buf)[0] = cpu_to_le16(dum_hcd->port_status);
2222		((__le16 *) buf)[1] = cpu_to_le16(dum_hcd->port_status >> 16);
2223		break;
2224	case SetHubFeature:
2225		retval = -EPIPE;
2226		break;
2227	case SetPortFeature:
2228		switch (wValue) {
2229		case USB_PORT_FEAT_LINK_STATE:
2230			if (hcd->speed != HCD_USB3) {
2231				dev_dbg(dummy_dev(dum_hcd),
2232					 "USB_PORT_FEAT_LINK_STATE req not "
2233					 "supported for USB 2.0 roothub\n");
2234				goto error;
2235			}
2236			/*
2237			 * Since this is dummy we don't have an actual link so
2238			 * there is nothing to do for the SET_LINK_STATE cmd
2239			 */
2240			break;
2241		case USB_PORT_FEAT_U1_TIMEOUT:
2242		case USB_PORT_FEAT_U2_TIMEOUT:
2243			/* TODO: add suspend/resume support! */
2244			if (hcd->speed != HCD_USB3) {
2245				dev_dbg(dummy_dev(dum_hcd),
2246					 "USB_PORT_FEAT_U1/2_TIMEOUT req not "
2247					 "supported for USB 2.0 roothub\n");
2248				goto error;
2249			}
2250			break;
2251		case USB_PORT_FEAT_SUSPEND:
2252			/* Applicable only for USB2.0 hub */
2253			if (hcd->speed == HCD_USB3) {
2254				dev_dbg(dummy_dev(dum_hcd),
2255					 "USB_PORT_FEAT_SUSPEND req not "
2256					 "supported for USB 3.0 roothub\n");
2257				goto error;
2258			}
2259			if (dum_hcd->active) {
2260				dum_hcd->port_status |= USB_PORT_STAT_SUSPEND;
2261
2262				/* HNP would happen here; for now we
2263				 * assume b_bus_req is always true.
2264				 */
2265				set_link_state(dum_hcd);
2266				if (((1 << USB_DEVICE_B_HNP_ENABLE)
2267						& dum_hcd->dum->devstatus) != 0)
2268					dev_dbg(dummy_dev(dum_hcd),
2269							"no HNP yet!\n");
2270			}
2271			break;
2272		case USB_PORT_FEAT_POWER:
2273			if (hcd->speed == HCD_USB3)
2274				dum_hcd->port_status |= USB_SS_PORT_STAT_POWER;
2275			else
2276				dum_hcd->port_status |= USB_PORT_STAT_POWER;
2277			set_link_state(dum_hcd);
2278			break;
2279		case USB_PORT_FEAT_BH_PORT_RESET:
2280			/* Applicable only for USB3.0 hub */
2281			if (hcd->speed != HCD_USB3) {
2282				dev_dbg(dummy_dev(dum_hcd),
2283					 "USB_PORT_FEAT_BH_PORT_RESET req not "
2284					 "supported for USB 2.0 roothub\n");
2285				goto error;
2286			}
2287			fallthrough;
2288		case USB_PORT_FEAT_RESET:
2289			if (!(dum_hcd->port_status & USB_PORT_STAT_CONNECTION))
2290				break;
2291			/* if it's already enabled, disable */
2292			if (hcd->speed == HCD_USB3) {
 
2293				dum_hcd->port_status =
2294					(USB_SS_PORT_STAT_POWER |
2295					 USB_PORT_STAT_CONNECTION |
2296					 USB_PORT_STAT_RESET);
2297			} else {
2298				dum_hcd->port_status &= ~(USB_PORT_STAT_ENABLE
2299					| USB_PORT_STAT_LOW_SPEED
2300					| USB_PORT_STAT_HIGH_SPEED);
2301				dum_hcd->port_status |= USB_PORT_STAT_RESET;
2302			}
2303			/*
2304			 * We want to reset device status. All but the
2305			 * Self powered feature
2306			 */
2307			dum_hcd->dum->devstatus &=
2308				(1 << USB_DEVICE_SELF_POWERED);
2309			/*
2310			 * FIXME USB3.0: what is the correct reset signaling
2311			 * interval? Is it still 50msec as for HS?
2312			 */
2313			dum_hcd->re_timeout = jiffies + msecs_to_jiffies(50);
2314			set_link_state(dum_hcd);
2315			break;
2316		case USB_PORT_FEAT_C_CONNECTION:
2317		case USB_PORT_FEAT_C_RESET:
2318		case USB_PORT_FEAT_C_ENABLE:
2319		case USB_PORT_FEAT_C_SUSPEND:
2320			/* Not allowed for USB-3, and ignored for USB-2 */
2321			if (hcd->speed == HCD_USB3)
2322				goto error;
2323			break;
2324		default:
2325		/* Disallow TEST, INDICATOR, and C_OVER_CURRENT */
2326			goto error;
 
 
 
 
 
 
 
 
 
2327		}
2328		break;
2329	case GetPortErrorCount:
2330		if (hcd->speed != HCD_USB3) {
2331			dev_dbg(dummy_dev(dum_hcd),
2332				 "GetPortErrorCount req not "
2333				 "supported for USB 2.0 roothub\n");
2334			goto error;
2335		}
2336		/* We'll always return 0 since this is a dummy hub */
2337		*(__le32 *) buf = cpu_to_le32(0);
2338		break;
2339	case SetHubDepth:
2340		if (hcd->speed != HCD_USB3) {
2341			dev_dbg(dummy_dev(dum_hcd),
2342				 "SetHubDepth req not supported for "
2343				 "USB 2.0 roothub\n");
2344			goto error;
2345		}
2346		break;
2347	default:
2348		dev_dbg(dummy_dev(dum_hcd),
2349			"hub control req%04x v%04x i%04x l%d\n",
2350			typeReq, wValue, wIndex, wLength);
2351error:
2352		/* "protocol stall" on error */
2353		retval = -EPIPE;
2354	}
2355	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2356
2357	if ((dum_hcd->port_status & PORT_C_MASK) != 0)
2358		usb_hcd_poll_rh_status(hcd);
2359	return retval;
2360}
2361
2362static int dummy_bus_suspend(struct usb_hcd *hcd)
2363{
2364	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2365
2366	dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2367
2368	spin_lock_irq(&dum_hcd->dum->lock);
2369	dum_hcd->rh_state = DUMMY_RH_SUSPENDED;
2370	set_link_state(dum_hcd);
2371	hcd->state = HC_STATE_SUSPENDED;
2372	spin_unlock_irq(&dum_hcd->dum->lock);
2373	return 0;
2374}
2375
2376static int dummy_bus_resume(struct usb_hcd *hcd)
2377{
2378	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2379	int rc = 0;
2380
2381	dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2382
2383	spin_lock_irq(&dum_hcd->dum->lock);
2384	if (!HCD_HW_ACCESSIBLE(hcd)) {
2385		rc = -ESHUTDOWN;
2386	} else {
2387		dum_hcd->rh_state = DUMMY_RH_RUNNING;
2388		set_link_state(dum_hcd);
2389		if (!list_empty(&dum_hcd->urbp_list))
2390			mod_timer(&dum_hcd->timer, jiffies);
2391		hcd->state = HC_STATE_RUNNING;
2392	}
2393	spin_unlock_irq(&dum_hcd->dum->lock);
2394	return rc;
2395}
2396
2397/*-------------------------------------------------------------------------*/
2398
2399static inline ssize_t show_urb(char *buf, size_t size, struct urb *urb)
2400{
2401	int ep = usb_pipeendpoint(urb->pipe);
2402
2403	return scnprintf(buf, size,
2404		"urb/%p %s ep%d%s%s len %d/%d\n",
2405		urb,
2406		({ char *s;
2407		switch (urb->dev->speed) {
2408		case USB_SPEED_LOW:
2409			s = "ls";
2410			break;
2411		case USB_SPEED_FULL:
2412			s = "fs";
2413			break;
2414		case USB_SPEED_HIGH:
2415			s = "hs";
2416			break;
2417		case USB_SPEED_SUPER:
2418			s = "ss";
2419			break;
2420		default:
2421			s = "?";
2422			break;
2423		 } s; }),
2424		ep, ep ? (usb_urb_dir_in(urb) ? "in" : "out") : "",
2425		({ char *s; \
2426		switch (usb_pipetype(urb->pipe)) { \
2427		case PIPE_CONTROL: \
2428			s = ""; \
2429			break; \
2430		case PIPE_BULK: \
2431			s = "-bulk"; \
2432			break; \
2433		case PIPE_INTERRUPT: \
2434			s = "-int"; \
2435			break; \
2436		default: \
2437			s = "-iso"; \
2438			break; \
2439		} s; }),
2440		urb->actual_length, urb->transfer_buffer_length);
2441}
2442
2443static ssize_t urbs_show(struct device *dev, struct device_attribute *attr,
2444		char *buf)
2445{
2446	struct usb_hcd		*hcd = dev_get_drvdata(dev);
2447	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2448	struct urbp		*urbp;
2449	size_t			size = 0;
2450	unsigned long		flags;
2451
2452	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2453	list_for_each_entry(urbp, &dum_hcd->urbp_list, urbp_list) {
2454		size_t		temp;
2455
2456		temp = show_urb(buf, PAGE_SIZE - size, urbp->urb);
2457		buf += temp;
2458		size += temp;
2459	}
2460	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2461
2462	return size;
2463}
2464static DEVICE_ATTR_RO(urbs);
2465
2466static int dummy_start_ss(struct dummy_hcd *dum_hcd)
2467{
2468	timer_setup(&dum_hcd->timer, dummy_timer, 0);
2469	dum_hcd->rh_state = DUMMY_RH_RUNNING;
2470	dum_hcd->stream_en_ep = 0;
2471	INIT_LIST_HEAD(&dum_hcd->urbp_list);
2472	dummy_hcd_to_hcd(dum_hcd)->power_budget = POWER_BUDGET_3;
2473	dummy_hcd_to_hcd(dum_hcd)->state = HC_STATE_RUNNING;
2474	dummy_hcd_to_hcd(dum_hcd)->uses_new_polling = 1;
2475#ifdef CONFIG_USB_OTG
2476	dummy_hcd_to_hcd(dum_hcd)->self.otg_port = 1;
2477#endif
2478	return 0;
2479
2480	/* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2481	return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2482}
2483
2484static int dummy_start(struct usb_hcd *hcd)
2485{
2486	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2487
2488	/*
2489	 * HOST side init ... we emulate a root hub that'll only ever
2490	 * talk to one device (the gadget side).  Also appears in sysfs,
2491	 * just like more familiar pci-based HCDs.
2492	 */
2493	if (!usb_hcd_is_primary_hcd(hcd))
2494		return dummy_start_ss(dum_hcd);
2495
2496	spin_lock_init(&dum_hcd->dum->lock);
2497	timer_setup(&dum_hcd->timer, dummy_timer, 0);
2498	dum_hcd->rh_state = DUMMY_RH_RUNNING;
2499
2500	INIT_LIST_HEAD(&dum_hcd->urbp_list);
2501
2502	hcd->power_budget = POWER_BUDGET;
2503	hcd->state = HC_STATE_RUNNING;
2504	hcd->uses_new_polling = 1;
2505
2506#ifdef CONFIG_USB_OTG
2507	hcd->self.otg_port = 1;
2508#endif
2509
2510	/* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2511	return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2512}
2513
2514static void dummy_stop(struct usb_hcd *hcd)
2515{
2516	device_remove_file(dummy_dev(hcd_to_dummy_hcd(hcd)), &dev_attr_urbs);
2517	dev_info(dummy_dev(hcd_to_dummy_hcd(hcd)), "stopped\n");
2518}
2519
2520/*-------------------------------------------------------------------------*/
2521
2522static int dummy_h_get_frame(struct usb_hcd *hcd)
2523{
2524	return dummy_g_get_frame(NULL);
2525}
2526
2527static int dummy_setup(struct usb_hcd *hcd)
2528{
2529	struct dummy *dum;
2530
2531	dum = *((void **)dev_get_platdata(hcd->self.controller));
2532	hcd->self.sg_tablesize = ~0;
2533	if (usb_hcd_is_primary_hcd(hcd)) {
2534		dum->hs_hcd = hcd_to_dummy_hcd(hcd);
2535		dum->hs_hcd->dum = dum;
2536		/*
2537		 * Mark the first roothub as being USB 2.0.
2538		 * The USB 3.0 roothub will be registered later by
2539		 * dummy_hcd_probe()
2540		 */
2541		hcd->speed = HCD_USB2;
2542		hcd->self.root_hub->speed = USB_SPEED_HIGH;
2543	} else {
2544		dum->ss_hcd = hcd_to_dummy_hcd(hcd);
2545		dum->ss_hcd->dum = dum;
2546		hcd->speed = HCD_USB3;
2547		hcd->self.root_hub->speed = USB_SPEED_SUPER;
2548	}
2549	return 0;
2550}
2551
2552/* Change a group of bulk endpoints to support multiple stream IDs */
2553static int dummy_alloc_streams(struct usb_hcd *hcd, struct usb_device *udev,
2554	struct usb_host_endpoint **eps, unsigned int num_eps,
2555	unsigned int num_streams, gfp_t mem_flags)
2556{
2557	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2558	unsigned long flags;
2559	int max_stream;
2560	int ret_streams = num_streams;
2561	unsigned int index;
2562	unsigned int i;
2563
2564	if (!num_eps)
2565		return -EINVAL;
2566
2567	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2568	for (i = 0; i < num_eps; i++) {
2569		index = dummy_get_ep_idx(&eps[i]->desc);
2570		if ((1 << index) & dum_hcd->stream_en_ep) {
2571			ret_streams = -EINVAL;
2572			goto out;
2573		}
2574		max_stream = usb_ss_max_streams(&eps[i]->ss_ep_comp);
2575		if (!max_stream) {
2576			ret_streams = -EINVAL;
2577			goto out;
2578		}
2579		if (max_stream < ret_streams) {
2580			dev_dbg(dummy_dev(dum_hcd), "Ep 0x%x only supports %u "
2581					"stream IDs.\n",
2582					eps[i]->desc.bEndpointAddress,
2583					max_stream);
2584			ret_streams = max_stream;
2585		}
2586	}
2587
2588	for (i = 0; i < num_eps; i++) {
2589		index = dummy_get_ep_idx(&eps[i]->desc);
2590		dum_hcd->stream_en_ep |= 1 << index;
2591		set_max_streams_for_pipe(dum_hcd,
2592				usb_endpoint_num(&eps[i]->desc), ret_streams);
2593	}
2594out:
2595	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2596	return ret_streams;
2597}
2598
2599/* Reverts a group of bulk endpoints back to not using stream IDs. */
2600static int dummy_free_streams(struct usb_hcd *hcd, struct usb_device *udev,
2601	struct usb_host_endpoint **eps, unsigned int num_eps,
2602	gfp_t mem_flags)
2603{
2604	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2605	unsigned long flags;
2606	int ret;
2607	unsigned int index;
2608	unsigned int i;
2609
2610	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2611	for (i = 0; i < num_eps; i++) {
2612		index = dummy_get_ep_idx(&eps[i]->desc);
2613		if (!((1 << index) & dum_hcd->stream_en_ep)) {
2614			ret = -EINVAL;
2615			goto out;
2616		}
2617	}
2618
2619	for (i = 0; i < num_eps; i++) {
2620		index = dummy_get_ep_idx(&eps[i]->desc);
2621		dum_hcd->stream_en_ep &= ~(1 << index);
2622		set_max_streams_for_pipe(dum_hcd,
2623				usb_endpoint_num(&eps[i]->desc), 0);
2624	}
2625	ret = 0;
2626out:
2627	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2628	return ret;
2629}
2630
2631static struct hc_driver dummy_hcd = {
2632	.description =		(char *) driver_name,
2633	.product_desc =		"Dummy host controller",
2634	.hcd_priv_size =	sizeof(struct dummy_hcd),
2635
2636	.reset =		dummy_setup,
2637	.start =		dummy_start,
2638	.stop =			dummy_stop,
2639
2640	.urb_enqueue =		dummy_urb_enqueue,
2641	.urb_dequeue =		dummy_urb_dequeue,
2642
2643	.get_frame_number =	dummy_h_get_frame,
2644
2645	.hub_status_data =	dummy_hub_status,
2646	.hub_control =		dummy_hub_control,
2647	.bus_suspend =		dummy_bus_suspend,
2648	.bus_resume =		dummy_bus_resume,
2649
2650	.alloc_streams =	dummy_alloc_streams,
2651	.free_streams =		dummy_free_streams,
2652};
2653
2654static int dummy_hcd_probe(struct platform_device *pdev)
2655{
2656	struct dummy		*dum;
2657	struct usb_hcd		*hs_hcd;
2658	struct usb_hcd		*ss_hcd;
2659	int			retval;
2660
2661	dev_info(&pdev->dev, "%s, driver " DRIVER_VERSION "\n", driver_desc);
2662	dum = *((void **)dev_get_platdata(&pdev->dev));
2663
2664	if (mod_data.is_super_speed)
2665		dummy_hcd.flags = HCD_USB3 | HCD_SHARED;
2666	else if (mod_data.is_high_speed)
2667		dummy_hcd.flags = HCD_USB2;
2668	else
2669		dummy_hcd.flags = HCD_USB11;
2670	hs_hcd = usb_create_hcd(&dummy_hcd, &pdev->dev, dev_name(&pdev->dev));
2671	if (!hs_hcd)
2672		return -ENOMEM;
2673	hs_hcd->has_tt = 1;
2674
2675	retval = usb_add_hcd(hs_hcd, 0, 0);
2676	if (retval)
2677		goto put_usb2_hcd;
2678
2679	if (mod_data.is_super_speed) {
2680		ss_hcd = usb_create_shared_hcd(&dummy_hcd, &pdev->dev,
2681					dev_name(&pdev->dev), hs_hcd);
2682		if (!ss_hcd) {
2683			retval = -ENOMEM;
2684			goto dealloc_usb2_hcd;
2685		}
2686
2687		retval = usb_add_hcd(ss_hcd, 0, 0);
2688		if (retval)
2689			goto put_usb3_hcd;
2690	}
2691	return 0;
2692
2693put_usb3_hcd:
2694	usb_put_hcd(ss_hcd);
2695dealloc_usb2_hcd:
2696	usb_remove_hcd(hs_hcd);
2697put_usb2_hcd:
2698	usb_put_hcd(hs_hcd);
2699	dum->hs_hcd = dum->ss_hcd = NULL;
2700	return retval;
2701}
2702
2703static void dummy_hcd_remove(struct platform_device *pdev)
2704{
2705	struct dummy		*dum;
2706
2707	dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum;
2708
2709	if (dum->ss_hcd) {
2710		usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2711		usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2712	}
2713
2714	usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2715	usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2716
2717	dum->hs_hcd = NULL;
2718	dum->ss_hcd = NULL;
 
 
2719}
2720
2721static int dummy_hcd_suspend(struct platform_device *pdev, pm_message_t state)
2722{
2723	struct usb_hcd		*hcd;
2724	struct dummy_hcd	*dum_hcd;
2725	int			rc = 0;
2726
2727	dev_dbg(&pdev->dev, "%s\n", __func__);
2728
2729	hcd = platform_get_drvdata(pdev);
2730	dum_hcd = hcd_to_dummy_hcd(hcd);
2731	if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
2732		dev_warn(&pdev->dev, "Root hub isn't suspended!\n");
2733		rc = -EBUSY;
2734	} else
2735		clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2736	return rc;
2737}
2738
2739static int dummy_hcd_resume(struct platform_device *pdev)
2740{
2741	struct usb_hcd		*hcd;
2742
2743	dev_dbg(&pdev->dev, "%s\n", __func__);
2744
2745	hcd = platform_get_drvdata(pdev);
2746	set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2747	usb_hcd_poll_rh_status(hcd);
2748	return 0;
2749}
2750
2751static struct platform_driver dummy_hcd_driver = {
2752	.probe		= dummy_hcd_probe,
2753	.remove_new	= dummy_hcd_remove,
2754	.suspend	= dummy_hcd_suspend,
2755	.resume		= dummy_hcd_resume,
2756	.driver		= {
2757		.name	= driver_name,
2758	},
2759};
2760
2761/*-------------------------------------------------------------------------*/
2762#define MAX_NUM_UDC	32
2763static struct platform_device *the_udc_pdev[MAX_NUM_UDC];
2764static struct platform_device *the_hcd_pdev[MAX_NUM_UDC];
2765
2766static int __init dummy_hcd_init(void)
2767{
2768	int	retval = -ENOMEM;
2769	int	i;
2770	struct	dummy *dum[MAX_NUM_UDC] = {};
2771
2772	if (usb_disabled())
2773		return -ENODEV;
2774
2775	if (!mod_data.is_high_speed && mod_data.is_super_speed)
2776		return -EINVAL;
2777
2778	if (mod_data.num < 1 || mod_data.num > MAX_NUM_UDC) {
2779		pr_err("Number of emulated UDC must be in range of 1...%d\n",
2780				MAX_NUM_UDC);
2781		return -EINVAL;
2782	}
2783
2784	for (i = 0; i < mod_data.num; i++) {
2785		the_hcd_pdev[i] = platform_device_alloc(driver_name, i);
2786		if (!the_hcd_pdev[i]) {
2787			i--;
2788			while (i >= 0)
2789				platform_device_put(the_hcd_pdev[i--]);
2790			return retval;
2791		}
2792	}
2793	for (i = 0; i < mod_data.num; i++) {
2794		the_udc_pdev[i] = platform_device_alloc(gadget_name, i);
2795		if (!the_udc_pdev[i]) {
2796			i--;
2797			while (i >= 0)
2798				platform_device_put(the_udc_pdev[i--]);
2799			goto err_alloc_udc;
2800		}
2801	}
2802	for (i = 0; i < mod_data.num; i++) {
2803		dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL);
2804		if (!dum[i]) {
2805			retval = -ENOMEM;
2806			goto err_add_pdata;
2807		}
2808		retval = platform_device_add_data(the_hcd_pdev[i], &dum[i],
2809				sizeof(void *));
2810		if (retval)
2811			goto err_add_pdata;
2812		retval = platform_device_add_data(the_udc_pdev[i], &dum[i],
2813				sizeof(void *));
2814		if (retval)
2815			goto err_add_pdata;
2816	}
2817
2818	retval = platform_driver_register(&dummy_hcd_driver);
2819	if (retval < 0)
2820		goto err_add_pdata;
2821	retval = platform_driver_register(&dummy_udc_driver);
2822	if (retval < 0)
2823		goto err_register_udc_driver;
2824
2825	for (i = 0; i < mod_data.num; i++) {
2826		retval = platform_device_add(the_hcd_pdev[i]);
2827		if (retval < 0) {
2828			i--;
2829			while (i >= 0)
2830				platform_device_del(the_hcd_pdev[i--]);
2831			goto err_add_hcd;
2832		}
2833	}
2834	for (i = 0; i < mod_data.num; i++) {
2835		if (!dum[i]->hs_hcd ||
2836				(!dum[i]->ss_hcd && mod_data.is_super_speed)) {
2837			/*
2838			 * The hcd was added successfully but its probe
2839			 * function failed for some reason.
2840			 */
2841			retval = -EINVAL;
2842			goto err_add_udc;
2843		}
2844	}
2845
2846	for (i = 0; i < mod_data.num; i++) {
2847		retval = platform_device_add(the_udc_pdev[i]);
2848		if (retval < 0) {
2849			i--;
2850			while (i >= 0)
2851				platform_device_del(the_udc_pdev[i--]);
2852			goto err_add_udc;
2853		}
2854	}
2855
2856	for (i = 0; i < mod_data.num; i++) {
2857		if (!platform_get_drvdata(the_udc_pdev[i])) {
2858			/*
2859			 * The udc was added successfully but its probe
2860			 * function failed for some reason.
2861			 */
2862			retval = -EINVAL;
2863			goto err_probe_udc;
2864		}
2865	}
2866	return retval;
2867
2868err_probe_udc:
2869	for (i = 0; i < mod_data.num; i++)
2870		platform_device_del(the_udc_pdev[i]);
2871err_add_udc:
2872	for (i = 0; i < mod_data.num; i++)
2873		platform_device_del(the_hcd_pdev[i]);
2874err_add_hcd:
2875	platform_driver_unregister(&dummy_udc_driver);
2876err_register_udc_driver:
2877	platform_driver_unregister(&dummy_hcd_driver);
2878err_add_pdata:
2879	for (i = 0; i < mod_data.num; i++)
2880		kfree(dum[i]);
2881	for (i = 0; i < mod_data.num; i++)
2882		platform_device_put(the_udc_pdev[i]);
2883err_alloc_udc:
2884	for (i = 0; i < mod_data.num; i++)
2885		platform_device_put(the_hcd_pdev[i]);
2886	return retval;
2887}
2888module_init(dummy_hcd_init);
2889
2890static void __exit dummy_hcd_cleanup(void)
2891{
2892	int i;
2893
2894	for (i = 0; i < mod_data.num; i++) {
2895		struct dummy *dum;
2896
2897		dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev));
2898
2899		platform_device_unregister(the_udc_pdev[i]);
2900		platform_device_unregister(the_hcd_pdev[i]);
2901		kfree(dum);
2902	}
2903	platform_driver_unregister(&dummy_udc_driver);
2904	platform_driver_unregister(&dummy_hcd_driver);
2905}
2906module_exit(dummy_hcd_cleanup);
v4.17
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * dummy_hcd.c -- Dummy/Loopback USB host and device emulator driver.
   4 *
   5 * Maintainer: Alan Stern <stern@rowland.harvard.edu>
   6 *
   7 * Copyright (C) 2003 David Brownell
   8 * Copyright (C) 2003-2005 Alan Stern
   9 */
  10
  11
  12/*
  13 * This exposes a device side "USB gadget" API, driven by requests to a
  14 * Linux-USB host controller driver.  USB traffic is simulated; there's
  15 * no need for USB hardware.  Use this with two other drivers:
  16 *
  17 *  - Gadget driver, responding to requests (slave);
  18 *  - Host-side device driver, as already familiar in Linux.
  19 *
  20 * Having this all in one kernel can help some stages of development,
  21 * bypassing some hardware (and driver) issues.  UML could help too.
  22 *
  23 * Note: The emulation does not include isochronous transfers!
  24 */
  25
  26#include <linux/module.h>
  27#include <linux/kernel.h>
  28#include <linux/delay.h>
  29#include <linux/ioport.h>
  30#include <linux/slab.h>
  31#include <linux/errno.h>
  32#include <linux/init.h>
  33#include <linux/timer.h>
  34#include <linux/list.h>
  35#include <linux/interrupt.h>
  36#include <linux/platform_device.h>
  37#include <linux/usb.h>
  38#include <linux/usb/gadget.h>
  39#include <linux/usb/hcd.h>
  40#include <linux/scatterlist.h>
  41
  42#include <asm/byteorder.h>
  43#include <linux/io.h>
  44#include <asm/irq.h>
  45#include <asm/unaligned.h>
  46
  47#define DRIVER_DESC	"USB Host+Gadget Emulator"
  48#define DRIVER_VERSION	"02 May 2005"
  49
  50#define POWER_BUDGET	500	/* in mA; use 8 for low-power port testing */
 
  51
  52static const char	driver_name[] = "dummy_hcd";
  53static const char	driver_desc[] = "USB Host+Gadget Emulator";
  54
  55static const char	gadget_name[] = "dummy_udc";
  56
  57MODULE_DESCRIPTION(DRIVER_DESC);
  58MODULE_AUTHOR("David Brownell");
  59MODULE_LICENSE("GPL");
  60
  61struct dummy_hcd_module_parameters {
  62	bool is_super_speed;
  63	bool is_high_speed;
  64	unsigned int num;
  65};
  66
  67static struct dummy_hcd_module_parameters mod_data = {
  68	.is_super_speed = false,
  69	.is_high_speed = true,
  70	.num = 1,
  71};
  72module_param_named(is_super_speed, mod_data.is_super_speed, bool, S_IRUGO);
  73MODULE_PARM_DESC(is_super_speed, "true to simulate SuperSpeed connection");
  74module_param_named(is_high_speed, mod_data.is_high_speed, bool, S_IRUGO);
  75MODULE_PARM_DESC(is_high_speed, "true to simulate HighSpeed connection");
  76module_param_named(num, mod_data.num, uint, S_IRUGO);
  77MODULE_PARM_DESC(num, "number of emulated controllers");
  78/*-------------------------------------------------------------------------*/
  79
  80/* gadget side driver data structres */
  81struct dummy_ep {
  82	struct list_head		queue;
  83	unsigned long			last_io;	/* jiffies timestamp */
  84	struct usb_gadget		*gadget;
  85	const struct usb_endpoint_descriptor *desc;
  86	struct usb_ep			ep;
  87	unsigned			halted:1;
  88	unsigned			wedged:1;
  89	unsigned			already_seen:1;
  90	unsigned			setup_stage:1;
  91	unsigned			stream_en:1;
  92};
  93
  94struct dummy_request {
  95	struct list_head		queue;		/* ep's requests */
  96	struct usb_request		req;
  97};
  98
  99static inline struct dummy_ep *usb_ep_to_dummy_ep(struct usb_ep *_ep)
 100{
 101	return container_of(_ep, struct dummy_ep, ep);
 102}
 103
 104static inline struct dummy_request *usb_request_to_dummy_request
 105		(struct usb_request *_req)
 106{
 107	return container_of(_req, struct dummy_request, req);
 108}
 109
 110/*-------------------------------------------------------------------------*/
 111
 112/*
 113 * Every device has ep0 for control requests, plus up to 30 more endpoints,
 114 * in one of two types:
 115 *
 116 *   - Configurable:  direction (in/out), type (bulk, iso, etc), and endpoint
 117 *     number can be changed.  Names like "ep-a" are used for this type.
 118 *
 119 *   - Fixed Function:  in other cases.  some characteristics may be mutable;
 120 *     that'd be hardware-specific.  Names like "ep12out-bulk" are used.
 121 *
 122 * Gadget drivers are responsible for not setting up conflicting endpoint
 123 * configurations, illegal or unsupported packet lengths, and so on.
 124 */
 125
 126static const char ep0name[] = "ep0";
 127
 128static const struct {
 129	const char *name;
 130	const struct usb_ep_caps caps;
 131} ep_info[] = {
 132#define EP_INFO(_name, _caps) \
 133	{ \
 134		.name = _name, \
 135		.caps = _caps, \
 136	}
 137
 138/* we don't provide isochronous endpoints since we don't support them */
 139#define TYPE_BULK_OR_INT	(USB_EP_CAPS_TYPE_BULK | USB_EP_CAPS_TYPE_INT)
 140
 141	/* everyone has ep0 */
 142	EP_INFO(ep0name,
 143		USB_EP_CAPS(USB_EP_CAPS_TYPE_CONTROL, USB_EP_CAPS_DIR_ALL)),
 144	/* act like a pxa250: fifteen fixed function endpoints */
 145	EP_INFO("ep1in-bulk",
 146		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 147	EP_INFO("ep2out-bulk",
 148		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 149/*
 150	EP_INFO("ep3in-iso",
 151		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 152	EP_INFO("ep4out-iso",
 153		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 154*/
 155	EP_INFO("ep5in-int",
 156		USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 157	EP_INFO("ep6in-bulk",
 158		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 159	EP_INFO("ep7out-bulk",
 160		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 161/*
 162	EP_INFO("ep8in-iso",
 163		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 164	EP_INFO("ep9out-iso",
 165		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 166*/
 167	EP_INFO("ep10in-int",
 168		USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 169	EP_INFO("ep11in-bulk",
 170		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 171	EP_INFO("ep12out-bulk",
 172		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 173/*
 174	EP_INFO("ep13in-iso",
 175		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_IN)),
 176	EP_INFO("ep14out-iso",
 177		USB_EP_CAPS(USB_EP_CAPS_TYPE_ISO, USB_EP_CAPS_DIR_OUT)),
 178*/
 179	EP_INFO("ep15in-int",
 180		USB_EP_CAPS(USB_EP_CAPS_TYPE_INT, USB_EP_CAPS_DIR_IN)),
 181
 182	/* or like sa1100: two fixed function endpoints */
 183	EP_INFO("ep1out-bulk",
 184		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_OUT)),
 185	EP_INFO("ep2in-bulk",
 186		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 187
 188	/* and now some generic EPs so we have enough in multi config */
 189	EP_INFO("ep3out",
 190		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 191	EP_INFO("ep4in",
 192		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 193	EP_INFO("ep5out",
 194		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 195	EP_INFO("ep6out",
 196		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 197	EP_INFO("ep7in",
 198		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 199	EP_INFO("ep8out",
 200		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 201	EP_INFO("ep9in",
 202		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 203	EP_INFO("ep10out",
 204		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 205	EP_INFO("ep11out",
 206		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 207	EP_INFO("ep12in",
 208		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 209	EP_INFO("ep13out",
 210		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 211	EP_INFO("ep14in",
 212		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
 213	EP_INFO("ep15out",
 214		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 215
 216#undef EP_INFO
 217};
 218
 219#define DUMMY_ENDPOINTS	ARRAY_SIZE(ep_info)
 220
 221/*-------------------------------------------------------------------------*/
 222
 223#define FIFO_SIZE		64
 224
 225struct urbp {
 226	struct urb		*urb;
 227	struct list_head	urbp_list;
 228	struct sg_mapping_iter	miter;
 229	u32			miter_started;
 230};
 231
 232
 233enum dummy_rh_state {
 234	DUMMY_RH_RESET,
 235	DUMMY_RH_SUSPENDED,
 236	DUMMY_RH_RUNNING
 237};
 238
 239struct dummy_hcd {
 240	struct dummy			*dum;
 241	enum dummy_rh_state		rh_state;
 242	struct timer_list		timer;
 243	u32				port_status;
 244	u32				old_status;
 245	unsigned long			re_timeout;
 246
 247	struct usb_device		*udev;
 248	struct list_head		urbp_list;
 249	struct urbp			*next_frame_urbp;
 250
 251	u32				stream_en_ep;
 252	u8				num_stream[30 / 2];
 253
 254	unsigned			active:1;
 255	unsigned			old_active:1;
 256	unsigned			resuming:1;
 257};
 258
 259struct dummy {
 260	spinlock_t			lock;
 261
 262	/*
 263	 * SLAVE/GADGET side support
 264	 */
 265	struct dummy_ep			ep[DUMMY_ENDPOINTS];
 266	int				address;
 267	int				callback_usage;
 268	struct usb_gadget		gadget;
 269	struct usb_gadget_driver	*driver;
 270	struct dummy_request		fifo_req;
 271	u8				fifo_buf[FIFO_SIZE];
 272	u16				devstatus;
 273	unsigned			ints_enabled:1;
 274	unsigned			udc_suspended:1;
 275	unsigned			pullup:1;
 276
 277	/*
 278	 * MASTER/HOST side support
 279	 */
 280	struct dummy_hcd		*hs_hcd;
 281	struct dummy_hcd		*ss_hcd;
 282};
 283
 284static inline struct dummy_hcd *hcd_to_dummy_hcd(struct usb_hcd *hcd)
 285{
 286	return (struct dummy_hcd *) (hcd->hcd_priv);
 287}
 288
 289static inline struct usb_hcd *dummy_hcd_to_hcd(struct dummy_hcd *dum)
 290{
 291	return container_of((void *) dum, struct usb_hcd, hcd_priv);
 292}
 293
 294static inline struct device *dummy_dev(struct dummy_hcd *dum)
 295{
 296	return dummy_hcd_to_hcd(dum)->self.controller;
 297}
 298
 299static inline struct device *udc_dev(struct dummy *dum)
 300{
 301	return dum->gadget.dev.parent;
 302}
 303
 304static inline struct dummy *ep_to_dummy(struct dummy_ep *ep)
 305{
 306	return container_of(ep->gadget, struct dummy, gadget);
 307}
 308
 309static inline struct dummy_hcd *gadget_to_dummy_hcd(struct usb_gadget *gadget)
 310{
 311	struct dummy *dum = container_of(gadget, struct dummy, gadget);
 312	if (dum->gadget.speed == USB_SPEED_SUPER)
 313		return dum->ss_hcd;
 314	else
 315		return dum->hs_hcd;
 316}
 317
 318static inline struct dummy *gadget_dev_to_dummy(struct device *dev)
 319{
 320	return container_of(dev, struct dummy, gadget.dev);
 321}
 322
 323/*-------------------------------------------------------------------------*/
 324
 325/* SLAVE/GADGET SIDE UTILITY ROUTINES */
 326
 327/* called with spinlock held */
 328static void nuke(struct dummy *dum, struct dummy_ep *ep)
 329{
 330	while (!list_empty(&ep->queue)) {
 331		struct dummy_request	*req;
 332
 333		req = list_entry(ep->queue.next, struct dummy_request, queue);
 334		list_del_init(&req->queue);
 335		req->req.status = -ESHUTDOWN;
 336
 337		spin_unlock(&dum->lock);
 338		usb_gadget_giveback_request(&ep->ep, &req->req);
 339		spin_lock(&dum->lock);
 340	}
 341}
 342
 343/* caller must hold lock */
 344static void stop_activity(struct dummy *dum)
 345{
 346	int i;
 347
 348	/* prevent any more requests */
 349	dum->address = 0;
 350
 351	/* The timer is left running so that outstanding URBs can fail */
 352
 353	/* nuke any pending requests first, so driver i/o is quiesced */
 354	for (i = 0; i < DUMMY_ENDPOINTS; ++i)
 355		nuke(dum, &dum->ep[i]);
 356
 357	/* driver now does any non-usb quiescing necessary */
 358}
 359
 360/**
 361 * set_link_state_by_speed() - Sets the current state of the link according to
 362 *	the hcd speed
 363 * @dum_hcd: pointer to the dummy_hcd structure to update the link state for
 364 *
 365 * This function updates the port_status according to the link state and the
 366 * speed of the hcd.
 367 */
 368static void set_link_state_by_speed(struct dummy_hcd *dum_hcd)
 369{
 370	struct dummy *dum = dum_hcd->dum;
 371
 372	if (dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3) {
 373		if ((dum_hcd->port_status & USB_SS_PORT_STAT_POWER) == 0) {
 374			dum_hcd->port_status = 0;
 375		} else if (!dum->pullup || dum->udc_suspended) {
 376			/* UDC suspend must cause a disconnect */
 377			dum_hcd->port_status &= ~(USB_PORT_STAT_CONNECTION |
 378						USB_PORT_STAT_ENABLE);
 379			if ((dum_hcd->old_status &
 380			     USB_PORT_STAT_CONNECTION) != 0)
 381				dum_hcd->port_status |=
 382					(USB_PORT_STAT_C_CONNECTION << 16);
 383		} else {
 384			/* device is connected and not suspended */
 385			dum_hcd->port_status |= (USB_PORT_STAT_CONNECTION |
 386						 USB_PORT_STAT_SPEED_5GBPS) ;
 387			if ((dum_hcd->old_status &
 388			     USB_PORT_STAT_CONNECTION) == 0)
 389				dum_hcd->port_status |=
 390					(USB_PORT_STAT_C_CONNECTION << 16);
 391			if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) &&
 392			    (dum_hcd->port_status &
 393			     USB_PORT_STAT_LINK_STATE) == USB_SS_PORT_LS_U0 &&
 394			    dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 395				dum_hcd->active = 1;
 396		}
 397	} else {
 398		if ((dum_hcd->port_status & USB_PORT_STAT_POWER) == 0) {
 399			dum_hcd->port_status = 0;
 400		} else if (!dum->pullup || dum->udc_suspended) {
 401			/* UDC suspend must cause a disconnect */
 402			dum_hcd->port_status &= ~(USB_PORT_STAT_CONNECTION |
 403						USB_PORT_STAT_ENABLE |
 404						USB_PORT_STAT_LOW_SPEED |
 405						USB_PORT_STAT_HIGH_SPEED |
 406						USB_PORT_STAT_SUSPEND);
 407			if ((dum_hcd->old_status &
 408			     USB_PORT_STAT_CONNECTION) != 0)
 409				dum_hcd->port_status |=
 410					(USB_PORT_STAT_C_CONNECTION << 16);
 411		} else {
 412			dum_hcd->port_status |= USB_PORT_STAT_CONNECTION;
 413			if ((dum_hcd->old_status &
 414			     USB_PORT_STAT_CONNECTION) == 0)
 415				dum_hcd->port_status |=
 416					(USB_PORT_STAT_C_CONNECTION << 16);
 417			if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) == 0)
 418				dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
 419			else if ((dum_hcd->port_status &
 420				  USB_PORT_STAT_SUSPEND) == 0 &&
 421					dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 422				dum_hcd->active = 1;
 423		}
 424	}
 425}
 426
 427/* caller must hold lock */
 428static void set_link_state(struct dummy_hcd *dum_hcd)
 
 429{
 430	struct dummy *dum = dum_hcd->dum;
 431	unsigned int power_bit;
 432
 433	dum_hcd->active = 0;
 434	if (dum->pullup)
 435		if ((dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3 &&
 436		     dum->gadget.speed != USB_SPEED_SUPER) ||
 437		    (dummy_hcd_to_hcd(dum_hcd)->speed != HCD_USB3 &&
 438		     dum->gadget.speed == USB_SPEED_SUPER))
 439			return;
 440
 441	set_link_state_by_speed(dum_hcd);
 442	power_bit = (dummy_hcd_to_hcd(dum_hcd)->speed == HCD_USB3 ?
 443			USB_SS_PORT_STAT_POWER : USB_PORT_STAT_POWER);
 444
 445	if ((dum_hcd->port_status & USB_PORT_STAT_ENABLE) == 0 ||
 446	     dum_hcd->active)
 447		dum_hcd->resuming = 0;
 448
 449	/* Currently !connected or in reset */
 450	if ((dum_hcd->port_status & power_bit) == 0 ||
 451			(dum_hcd->port_status & USB_PORT_STAT_RESET) != 0) {
 452		unsigned int disconnect = power_bit &
 453				dum_hcd->old_status & (~dum_hcd->port_status);
 454		unsigned int reset = USB_PORT_STAT_RESET &
 455				(~dum_hcd->old_status) & dum_hcd->port_status;
 456
 457		/* Report reset and disconnect events to the driver */
 458		if (dum->ints_enabled && (disconnect || reset)) {
 459			stop_activity(dum);
 460			++dum->callback_usage;
 461			spin_unlock(&dum->lock);
 462			if (reset)
 463				usb_gadget_udc_reset(&dum->gadget, dum->driver);
 464			else
 465				dum->driver->disconnect(&dum->gadget);
 466			spin_lock(&dum->lock);
 467			--dum->callback_usage;
 468		}
 469	} else if (dum_hcd->active != dum_hcd->old_active &&
 470			dum->ints_enabled) {
 471		++dum->callback_usage;
 472		spin_unlock(&dum->lock);
 473		if (dum_hcd->old_active && dum->driver->suspend)
 474			dum->driver->suspend(&dum->gadget);
 475		else if (!dum_hcd->old_active &&  dum->driver->resume)
 476			dum->driver->resume(&dum->gadget);
 477		spin_lock(&dum->lock);
 478		--dum->callback_usage;
 479	}
 480
 481	dum_hcd->old_status = dum_hcd->port_status;
 482	dum_hcd->old_active = dum_hcd->active;
 483}
 484
 485/*-------------------------------------------------------------------------*/
 486
 487/* SLAVE/GADGET SIDE DRIVER
 488 *
 489 * This only tracks gadget state.  All the work is done when the host
 490 * side tries some (emulated) i/o operation.  Real device controller
 491 * drivers would do real i/o using dma, fifos, irqs, timers, etc.
 492 */
 493
 494#define is_enabled(dum) \
 495	(dum->port_status & USB_PORT_STAT_ENABLE)
 496
 497static int dummy_enable(struct usb_ep *_ep,
 498		const struct usb_endpoint_descriptor *desc)
 499{
 500	struct dummy		*dum;
 501	struct dummy_hcd	*dum_hcd;
 502	struct dummy_ep		*ep;
 503	unsigned		max;
 504	int			retval;
 505
 506	ep = usb_ep_to_dummy_ep(_ep);
 507	if (!_ep || !desc || ep->desc || _ep->name == ep0name
 508			|| desc->bDescriptorType != USB_DT_ENDPOINT)
 509		return -EINVAL;
 510	dum = ep_to_dummy(ep);
 511	if (!dum->driver)
 512		return -ESHUTDOWN;
 513
 514	dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
 515	if (!is_enabled(dum_hcd))
 516		return -ESHUTDOWN;
 517
 518	/*
 519	 * For HS/FS devices only bits 0..10 of the wMaxPacketSize represent the
 520	 * maximum packet size.
 521	 * For SS devices the wMaxPacketSize is limited by 1024.
 522	 */
 523	max = usb_endpoint_maxp(desc);
 524
 525	/* drivers must not request bad settings, since lower levels
 526	 * (hardware or its drivers) may not check.  some endpoints
 527	 * can't do iso, many have maxpacket limitations, etc.
 528	 *
 529	 * since this "hardware" driver is here to help debugging, we
 530	 * have some extra sanity checks.  (there could be more though,
 531	 * especially for "ep9out" style fixed function ones.)
 532	 */
 533	retval = -EINVAL;
 534	switch (usb_endpoint_type(desc)) {
 535	case USB_ENDPOINT_XFER_BULK:
 536		if (strstr(ep->ep.name, "-iso")
 537				|| strstr(ep->ep.name, "-int")) {
 538			goto done;
 539		}
 540		switch (dum->gadget.speed) {
 541		case USB_SPEED_SUPER:
 542			if (max == 1024)
 543				break;
 544			goto done;
 545		case USB_SPEED_HIGH:
 546			if (max == 512)
 547				break;
 548			goto done;
 549		case USB_SPEED_FULL:
 550			if (max == 8 || max == 16 || max == 32 || max == 64)
 551				/* we'll fake any legal size */
 552				break;
 553			/* save a return statement */
 
 554		default:
 555			goto done;
 556		}
 557		break;
 558	case USB_ENDPOINT_XFER_INT:
 559		if (strstr(ep->ep.name, "-iso")) /* bulk is ok */
 560			goto done;
 561		/* real hardware might not handle all packet sizes */
 562		switch (dum->gadget.speed) {
 563		case USB_SPEED_SUPER:
 564		case USB_SPEED_HIGH:
 565			if (max <= 1024)
 566				break;
 567			/* save a return statement */
 568			/* fall through */
 569		case USB_SPEED_FULL:
 570			if (max <= 64)
 571				break;
 572			/* save a return statement */
 573			/* fall through */
 574		default:
 575			if (max <= 8)
 576				break;
 577			goto done;
 578		}
 579		break;
 580	case USB_ENDPOINT_XFER_ISOC:
 581		if (strstr(ep->ep.name, "-bulk")
 582				|| strstr(ep->ep.name, "-int"))
 583			goto done;
 584		/* real hardware might not handle all packet sizes */
 585		switch (dum->gadget.speed) {
 586		case USB_SPEED_SUPER:
 587		case USB_SPEED_HIGH:
 588			if (max <= 1024)
 589				break;
 590			/* save a return statement */
 591			/* fall through */
 592		case USB_SPEED_FULL:
 593			if (max <= 1023)
 594				break;
 595			/* save a return statement */
 
 596		default:
 597			goto done;
 598		}
 599		break;
 600	default:
 601		/* few chips support control except on ep0 */
 602		goto done;
 603	}
 604
 605	_ep->maxpacket = max;
 606	if (usb_ss_max_streams(_ep->comp_desc)) {
 607		if (!usb_endpoint_xfer_bulk(desc)) {
 608			dev_err(udc_dev(dum), "Can't enable stream support on "
 609					"non-bulk ep %s\n", _ep->name);
 610			return -EINVAL;
 611		}
 612		ep->stream_en = 1;
 613	}
 614	ep->desc = desc;
 615
 616	dev_dbg(udc_dev(dum), "enabled %s (ep%d%s-%s) maxpacket %d stream %s\n",
 617		_ep->name,
 618		desc->bEndpointAddress & 0x0f,
 619		(desc->bEndpointAddress & USB_DIR_IN) ? "in" : "out",
 620		({ char *val;
 621		 switch (usb_endpoint_type(desc)) {
 622		 case USB_ENDPOINT_XFER_BULK:
 623			 val = "bulk";
 624			 break;
 625		 case USB_ENDPOINT_XFER_ISOC:
 626			 val = "iso";
 627			 break;
 628		 case USB_ENDPOINT_XFER_INT:
 629			 val = "intr";
 630			 break;
 631		 default:
 632			 val = "ctrl";
 633			 break;
 634		 } val; }),
 635		max, ep->stream_en ? "enabled" : "disabled");
 636
 637	/* at this point real hardware should be NAKing transfers
 638	 * to that endpoint, until a buffer is queued to it.
 639	 */
 640	ep->halted = ep->wedged = 0;
 641	retval = 0;
 642done:
 643	return retval;
 644}
 645
 646static int dummy_disable(struct usb_ep *_ep)
 647{
 648	struct dummy_ep		*ep;
 649	struct dummy		*dum;
 650	unsigned long		flags;
 651
 652	ep = usb_ep_to_dummy_ep(_ep);
 653	if (!_ep || !ep->desc || _ep->name == ep0name)
 654		return -EINVAL;
 655	dum = ep_to_dummy(ep);
 656
 657	spin_lock_irqsave(&dum->lock, flags);
 658	ep->desc = NULL;
 659	ep->stream_en = 0;
 660	nuke(dum, ep);
 661	spin_unlock_irqrestore(&dum->lock, flags);
 662
 663	dev_dbg(udc_dev(dum), "disabled %s\n", _ep->name);
 664	return 0;
 665}
 666
 667static struct usb_request *dummy_alloc_request(struct usb_ep *_ep,
 668		gfp_t mem_flags)
 669{
 670	struct dummy_request	*req;
 671
 672	if (!_ep)
 673		return NULL;
 674
 675	req = kzalloc(sizeof(*req), mem_flags);
 676	if (!req)
 677		return NULL;
 678	INIT_LIST_HEAD(&req->queue);
 679	return &req->req;
 680}
 681
 682static void dummy_free_request(struct usb_ep *_ep, struct usb_request *_req)
 683{
 684	struct dummy_request	*req;
 685
 686	if (!_ep || !_req) {
 687		WARN_ON(1);
 688		return;
 689	}
 690
 691	req = usb_request_to_dummy_request(_req);
 692	WARN_ON(!list_empty(&req->queue));
 693	kfree(req);
 694}
 695
 696static void fifo_complete(struct usb_ep *ep, struct usb_request *req)
 697{
 698}
 699
 700static int dummy_queue(struct usb_ep *_ep, struct usb_request *_req,
 701		gfp_t mem_flags)
 702{
 703	struct dummy_ep		*ep;
 704	struct dummy_request	*req;
 705	struct dummy		*dum;
 706	struct dummy_hcd	*dum_hcd;
 707	unsigned long		flags;
 708
 709	req = usb_request_to_dummy_request(_req);
 710	if (!_req || !list_empty(&req->queue) || !_req->complete)
 711		return -EINVAL;
 712
 713	ep = usb_ep_to_dummy_ep(_ep);
 714	if (!_ep || (!ep->desc && _ep->name != ep0name))
 715		return -EINVAL;
 716
 717	dum = ep_to_dummy(ep);
 718	dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
 719	if (!dum->driver || !is_enabled(dum_hcd))
 720		return -ESHUTDOWN;
 721
 722#if 0
 723	dev_dbg(udc_dev(dum), "ep %p queue req %p to %s, len %d buf %p\n",
 724			ep, _req, _ep->name, _req->length, _req->buf);
 725#endif
 726	_req->status = -EINPROGRESS;
 727	_req->actual = 0;
 728	spin_lock_irqsave(&dum->lock, flags);
 729
 730	/* implement an emulated single-request FIFO */
 731	if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
 732			list_empty(&dum->fifo_req.queue) &&
 733			list_empty(&ep->queue) &&
 734			_req->length <= FIFO_SIZE) {
 735		req = &dum->fifo_req;
 736		req->req = *_req;
 737		req->req.buf = dum->fifo_buf;
 738		memcpy(dum->fifo_buf, _req->buf, _req->length);
 739		req->req.context = dum;
 740		req->req.complete = fifo_complete;
 741
 742		list_add_tail(&req->queue, &ep->queue);
 743		spin_unlock(&dum->lock);
 744		_req->actual = _req->length;
 745		_req->status = 0;
 746		usb_gadget_giveback_request(_ep, _req);
 747		spin_lock(&dum->lock);
 748	}  else
 749		list_add_tail(&req->queue, &ep->queue);
 750	spin_unlock_irqrestore(&dum->lock, flags);
 751
 752	/* real hardware would likely enable transfers here, in case
 753	 * it'd been left NAKing.
 754	 */
 755	return 0;
 756}
 757
 758static int dummy_dequeue(struct usb_ep *_ep, struct usb_request *_req)
 759{
 760	struct dummy_ep		*ep;
 761	struct dummy		*dum;
 762	int			retval = -EINVAL;
 763	unsigned long		flags;
 764	struct dummy_request	*req = NULL;
 765
 766	if (!_ep || !_req)
 767		return retval;
 768	ep = usb_ep_to_dummy_ep(_ep);
 769	dum = ep_to_dummy(ep);
 770
 771	if (!dum->driver)
 772		return -ESHUTDOWN;
 773
 774	local_irq_save(flags);
 775	spin_lock(&dum->lock);
 776	list_for_each_entry(req, &ep->queue, queue) {
 777		if (&req->req == _req) {
 778			list_del_init(&req->queue);
 779			_req->status = -ECONNRESET;
 780			retval = 0;
 781			break;
 782		}
 
 783	}
 784	spin_unlock(&dum->lock);
 785
 786	if (retval == 0) {
 787		dev_dbg(udc_dev(dum),
 788				"dequeued req %p from %s, len %d buf %p\n",
 789				req, _ep->name, _req->length, _req->buf);
 790		usb_gadget_giveback_request(_ep, _req);
 791	}
 792	local_irq_restore(flags);
 793	return retval;
 794}
 795
 796static int
 797dummy_set_halt_and_wedge(struct usb_ep *_ep, int value, int wedged)
 798{
 799	struct dummy_ep		*ep;
 800	struct dummy		*dum;
 801
 802	if (!_ep)
 803		return -EINVAL;
 804	ep = usb_ep_to_dummy_ep(_ep);
 805	dum = ep_to_dummy(ep);
 806	if (!dum->driver)
 807		return -ESHUTDOWN;
 808	if (!value)
 809		ep->halted = ep->wedged = 0;
 810	else if (ep->desc && (ep->desc->bEndpointAddress & USB_DIR_IN) &&
 811			!list_empty(&ep->queue))
 812		return -EAGAIN;
 813	else {
 814		ep->halted = 1;
 815		if (wedged)
 816			ep->wedged = 1;
 817	}
 818	/* FIXME clear emulated data toggle too */
 819	return 0;
 820}
 821
 822static int
 823dummy_set_halt(struct usb_ep *_ep, int value)
 824{
 825	return dummy_set_halt_and_wedge(_ep, value, 0);
 826}
 827
 828static int dummy_set_wedge(struct usb_ep *_ep)
 829{
 830	if (!_ep || _ep->name == ep0name)
 831		return -EINVAL;
 832	return dummy_set_halt_and_wedge(_ep, 1, 1);
 833}
 834
 835static const struct usb_ep_ops dummy_ep_ops = {
 836	.enable		= dummy_enable,
 837	.disable	= dummy_disable,
 838
 839	.alloc_request	= dummy_alloc_request,
 840	.free_request	= dummy_free_request,
 841
 842	.queue		= dummy_queue,
 843	.dequeue	= dummy_dequeue,
 844
 845	.set_halt	= dummy_set_halt,
 846	.set_wedge	= dummy_set_wedge,
 847};
 848
 849/*-------------------------------------------------------------------------*/
 850
 851/* there are both host and device side versions of this call ... */
 852static int dummy_g_get_frame(struct usb_gadget *_gadget)
 853{
 854	struct timespec64 ts64;
 855
 856	ktime_get_ts64(&ts64);
 857	return ts64.tv_nsec / NSEC_PER_MSEC;
 858}
 859
 860static int dummy_wakeup(struct usb_gadget *_gadget)
 861{
 862	struct dummy_hcd *dum_hcd;
 863
 864	dum_hcd = gadget_to_dummy_hcd(_gadget);
 865	if (!(dum_hcd->dum->devstatus & ((1 << USB_DEVICE_B_HNP_ENABLE)
 866				| (1 << USB_DEVICE_REMOTE_WAKEUP))))
 867		return -EINVAL;
 868	if ((dum_hcd->port_status & USB_PORT_STAT_CONNECTION) == 0)
 869		return -ENOLINK;
 870	if ((dum_hcd->port_status & USB_PORT_STAT_SUSPEND) == 0 &&
 871			 dum_hcd->rh_state != DUMMY_RH_SUSPENDED)
 872		return -EIO;
 873
 874	/* FIXME: What if the root hub is suspended but the port isn't? */
 875
 876	/* hub notices our request, issues downstream resume, etc */
 877	dum_hcd->resuming = 1;
 878	dum_hcd->re_timeout = jiffies + msecs_to_jiffies(20);
 879	mod_timer(&dummy_hcd_to_hcd(dum_hcd)->rh_timer, dum_hcd->re_timeout);
 880	return 0;
 881}
 882
 883static int dummy_set_selfpowered(struct usb_gadget *_gadget, int value)
 884{
 885	struct dummy	*dum;
 886
 887	_gadget->is_selfpowered = (value != 0);
 888	dum = gadget_to_dummy_hcd(_gadget)->dum;
 889	if (value)
 890		dum->devstatus |= (1 << USB_DEVICE_SELF_POWERED);
 891	else
 892		dum->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
 893	return 0;
 894}
 895
 896static void dummy_udc_update_ep0(struct dummy *dum)
 897{
 898	if (dum->gadget.speed == USB_SPEED_SUPER)
 899		dum->ep[0].ep.maxpacket = 9;
 900	else
 901		dum->ep[0].ep.maxpacket = 64;
 902}
 903
 904static int dummy_pullup(struct usb_gadget *_gadget, int value)
 905{
 906	struct dummy_hcd *dum_hcd;
 907	struct dummy	*dum;
 908	unsigned long	flags;
 909
 910	dum = gadget_dev_to_dummy(&_gadget->dev);
 911	dum_hcd = gadget_to_dummy_hcd(_gadget);
 912
 913	spin_lock_irqsave(&dum->lock, flags);
 914	dum->pullup = (value != 0);
 915	set_link_state(dum_hcd);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 916	spin_unlock_irqrestore(&dum->lock, flags);
 917
 918	usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
 919	return 0;
 920}
 921
 922static void dummy_udc_set_speed(struct usb_gadget *_gadget,
 923		enum usb_device_speed speed)
 924{
 925	struct dummy	*dum;
 926
 927	dum = gadget_dev_to_dummy(&_gadget->dev);
 928	dum->gadget.speed = speed;
 929	dummy_udc_update_ep0(dum);
 930}
 931
 
 
 
 
 
 
 
 
 
 932static int dummy_udc_start(struct usb_gadget *g,
 933		struct usb_gadget_driver *driver);
 934static int dummy_udc_stop(struct usb_gadget *g);
 935
 936static const struct usb_gadget_ops dummy_ops = {
 937	.get_frame	= dummy_g_get_frame,
 938	.wakeup		= dummy_wakeup,
 939	.set_selfpowered = dummy_set_selfpowered,
 940	.pullup		= dummy_pullup,
 941	.udc_start	= dummy_udc_start,
 942	.udc_stop	= dummy_udc_stop,
 943	.udc_set_speed	= dummy_udc_set_speed,
 
 944};
 945
 946/*-------------------------------------------------------------------------*/
 947
 948/* "function" sysfs attribute */
 949static ssize_t function_show(struct device *dev, struct device_attribute *attr,
 950		char *buf)
 951{
 952	struct dummy	*dum = gadget_dev_to_dummy(dev);
 953
 954	if (!dum->driver || !dum->driver->function)
 955		return 0;
 956	return scnprintf(buf, PAGE_SIZE, "%s\n", dum->driver->function);
 957}
 958static DEVICE_ATTR_RO(function);
 959
 960/*-------------------------------------------------------------------------*/
 961
 962/*
 963 * Driver registration/unregistration.
 964 *
 965 * This is basically hardware-specific; there's usually only one real USB
 966 * device (not host) controller since that's how USB devices are intended
 967 * to work.  So most implementations of these api calls will rely on the
 968 * fact that only one driver will ever bind to the hardware.  But curious
 969 * hardware can be built with discrete components, so the gadget API doesn't
 970 * require that assumption.
 971 *
 972 * For this emulator, it might be convenient to create a usb slave device
 973 * for each driver that registers:  just add to a big root hub.
 974 */
 975
 976static int dummy_udc_start(struct usb_gadget *g,
 977		struct usb_gadget_driver *driver)
 978{
 979	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(g);
 980	struct dummy		*dum = dum_hcd->dum;
 981
 982	if (driver->max_speed == USB_SPEED_UNKNOWN)
 
 
 
 
 
 
 
 
 
 983		return -EINVAL;
 
 984
 985	/*
 986	 * SLAVE side init ... the layer above hardware, which
 987	 * can't enumerate without help from the driver we're binding.
 988	 */
 989
 990	spin_lock_irq(&dum->lock);
 991	dum->devstatus = 0;
 992	dum->driver = driver;
 993	dum->ints_enabled = 1;
 994	spin_unlock_irq(&dum->lock);
 995
 996	return 0;
 997}
 998
 999static int dummy_udc_stop(struct usb_gadget *g)
1000{
1001	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(g);
1002	struct dummy		*dum = dum_hcd->dum;
1003
1004	spin_lock_irq(&dum->lock);
1005	dum->ints_enabled = 0;
1006	stop_activity(dum);
1007
1008	/* emulate synchronize_irq(): wait for callbacks to finish */
1009	while (dum->callback_usage > 0) {
1010		spin_unlock_irq(&dum->lock);
1011		usleep_range(1000, 2000);
1012		spin_lock_irq(&dum->lock);
1013	}
1014
1015	dum->driver = NULL;
1016	spin_unlock_irq(&dum->lock);
1017
1018	return 0;
1019}
1020
1021#undef is_enabled
1022
1023/* The gadget structure is stored inside the hcd structure and will be
1024 * released along with it. */
1025static void init_dummy_udc_hw(struct dummy *dum)
1026{
1027	int i;
1028
1029	INIT_LIST_HEAD(&dum->gadget.ep_list);
1030	for (i = 0; i < DUMMY_ENDPOINTS; i++) {
1031		struct dummy_ep	*ep = &dum->ep[i];
1032
1033		if (!ep_info[i].name)
1034			break;
1035		ep->ep.name = ep_info[i].name;
1036		ep->ep.caps = ep_info[i].caps;
1037		ep->ep.ops = &dummy_ep_ops;
1038		list_add_tail(&ep->ep.ep_list, &dum->gadget.ep_list);
1039		ep->halted = ep->wedged = ep->already_seen =
1040				ep->setup_stage = 0;
1041		usb_ep_set_maxpacket_limit(&ep->ep, ~0);
1042		ep->ep.max_streams = 16;
1043		ep->last_io = jiffies;
1044		ep->gadget = &dum->gadget;
1045		ep->desc = NULL;
1046		INIT_LIST_HEAD(&ep->queue);
1047	}
1048
1049	dum->gadget.ep0 = &dum->ep[0].ep;
1050	list_del_init(&dum->ep[0].ep.ep_list);
1051	INIT_LIST_HEAD(&dum->fifo_req.queue);
1052
1053#ifdef CONFIG_USB_OTG
1054	dum->gadget.is_otg = 1;
1055#endif
1056}
1057
1058static int dummy_udc_probe(struct platform_device *pdev)
1059{
1060	struct dummy	*dum;
1061	int		rc;
1062
1063	dum = *((void **)dev_get_platdata(&pdev->dev));
1064	/* Clear usb_gadget region for new registration to udc-core */
1065	memzero_explicit(&dum->gadget, sizeof(struct usb_gadget));
1066	dum->gadget.name = gadget_name;
1067	dum->gadget.ops = &dummy_ops;
1068	if (mod_data.is_super_speed)
1069		dum->gadget.max_speed = USB_SPEED_SUPER;
1070	else if (mod_data.is_high_speed)
1071		dum->gadget.max_speed = USB_SPEED_HIGH;
1072	else
1073		dum->gadget.max_speed = USB_SPEED_FULL;
1074
1075	dum->gadget.dev.parent = &pdev->dev;
1076	init_dummy_udc_hw(dum);
1077
1078	rc = usb_add_gadget_udc(&pdev->dev, &dum->gadget);
1079	if (rc < 0)
1080		goto err_udc;
1081
1082	rc = device_create_file(&dum->gadget.dev, &dev_attr_function);
1083	if (rc < 0)
1084		goto err_dev;
1085	platform_set_drvdata(pdev, dum);
1086	return rc;
1087
1088err_dev:
1089	usb_del_gadget_udc(&dum->gadget);
1090err_udc:
1091	return rc;
1092}
1093
1094static int dummy_udc_remove(struct platform_device *pdev)
1095{
1096	struct dummy	*dum = platform_get_drvdata(pdev);
1097
1098	device_remove_file(&dum->gadget.dev, &dev_attr_function);
1099	usb_del_gadget_udc(&dum->gadget);
1100	return 0;
1101}
1102
1103static void dummy_udc_pm(struct dummy *dum, struct dummy_hcd *dum_hcd,
1104		int suspend)
1105{
1106	spin_lock_irq(&dum->lock);
1107	dum->udc_suspended = suspend;
1108	set_link_state(dum_hcd);
1109	spin_unlock_irq(&dum->lock);
1110}
1111
1112static int dummy_udc_suspend(struct platform_device *pdev, pm_message_t state)
1113{
1114	struct dummy		*dum = platform_get_drvdata(pdev);
1115	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
1116
1117	dev_dbg(&pdev->dev, "%s\n", __func__);
1118	dummy_udc_pm(dum, dum_hcd, 1);
1119	usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
1120	return 0;
1121}
1122
1123static int dummy_udc_resume(struct platform_device *pdev)
1124{
1125	struct dummy		*dum = platform_get_drvdata(pdev);
1126	struct dummy_hcd	*dum_hcd = gadget_to_dummy_hcd(&dum->gadget);
1127
1128	dev_dbg(&pdev->dev, "%s\n", __func__);
1129	dummy_udc_pm(dum, dum_hcd, 0);
1130	usb_hcd_poll_rh_status(dummy_hcd_to_hcd(dum_hcd));
1131	return 0;
1132}
1133
1134static struct platform_driver dummy_udc_driver = {
1135	.probe		= dummy_udc_probe,
1136	.remove		= dummy_udc_remove,
1137	.suspend	= dummy_udc_suspend,
1138	.resume		= dummy_udc_resume,
1139	.driver		= {
1140		.name	= (char *) gadget_name,
1141	},
1142};
1143
1144/*-------------------------------------------------------------------------*/
1145
1146static unsigned int dummy_get_ep_idx(const struct usb_endpoint_descriptor *desc)
1147{
1148	unsigned int index;
1149
1150	index = usb_endpoint_num(desc) << 1;
1151	if (usb_endpoint_dir_in(desc))
1152		index |= 1;
1153	return index;
1154}
1155
1156/* MASTER/HOST SIDE DRIVER
1157 *
1158 * this uses the hcd framework to hook up to host side drivers.
1159 * its root hub will only have one device, otherwise it acts like
1160 * a normal host controller.
1161 *
1162 * when urbs are queued, they're just stuck on a list that we
1163 * scan in a timer callback.  that callback connects writes from
1164 * the host with reads from the device, and so on, based on the
1165 * usb 2.0 rules.
1166 */
1167
1168static int dummy_ep_stream_en(struct dummy_hcd *dum_hcd, struct urb *urb)
1169{
1170	const struct usb_endpoint_descriptor *desc = &urb->ep->desc;
1171	u32 index;
1172
1173	if (!usb_endpoint_xfer_bulk(desc))
1174		return 0;
1175
1176	index = dummy_get_ep_idx(desc);
1177	return (1 << index) & dum_hcd->stream_en_ep;
1178}
1179
1180/*
1181 * The max stream number is saved as a nibble so for the 30 possible endpoints
1182 * we only 15 bytes of memory. Therefore we are limited to max 16 streams (0
1183 * means we use only 1 stream). The maximum according to the spec is 16bit so
1184 * if the 16 stream limit is about to go, the array size should be incremented
1185 * to 30 elements of type u16.
1186 */
1187static int get_max_streams_for_pipe(struct dummy_hcd *dum_hcd,
1188		unsigned int pipe)
1189{
1190	int max_streams;
1191
1192	max_streams = dum_hcd->num_stream[usb_pipeendpoint(pipe)];
1193	if (usb_pipeout(pipe))
1194		max_streams >>= 4;
1195	else
1196		max_streams &= 0xf;
1197	max_streams++;
1198	return max_streams;
1199}
1200
1201static void set_max_streams_for_pipe(struct dummy_hcd *dum_hcd,
1202		unsigned int pipe, unsigned int streams)
1203{
1204	int max_streams;
1205
1206	streams--;
1207	max_streams = dum_hcd->num_stream[usb_pipeendpoint(pipe)];
1208	if (usb_pipeout(pipe)) {
1209		streams <<= 4;
1210		max_streams &= 0xf;
1211	} else {
1212		max_streams &= 0xf0;
1213	}
1214	max_streams |= streams;
1215	dum_hcd->num_stream[usb_pipeendpoint(pipe)] = max_streams;
1216}
1217
1218static int dummy_validate_stream(struct dummy_hcd *dum_hcd, struct urb *urb)
1219{
1220	unsigned int max_streams;
1221	int enabled;
1222
1223	enabled = dummy_ep_stream_en(dum_hcd, urb);
1224	if (!urb->stream_id) {
1225		if (enabled)
1226			return -EINVAL;
1227		return 0;
1228	}
1229	if (!enabled)
1230		return -EINVAL;
1231
1232	max_streams = get_max_streams_for_pipe(dum_hcd,
1233			usb_pipeendpoint(urb->pipe));
1234	if (urb->stream_id > max_streams) {
1235		dev_err(dummy_dev(dum_hcd), "Stream id %d is out of range.\n",
1236				urb->stream_id);
1237		BUG();
1238		return -EINVAL;
1239	}
1240	return 0;
1241}
1242
1243static int dummy_urb_enqueue(
1244	struct usb_hcd			*hcd,
1245	struct urb			*urb,
1246	gfp_t				mem_flags
1247) {
1248	struct dummy_hcd *dum_hcd;
1249	struct urbp	*urbp;
1250	unsigned long	flags;
1251	int		rc;
1252
1253	urbp = kmalloc(sizeof *urbp, mem_flags);
1254	if (!urbp)
1255		return -ENOMEM;
1256	urbp->urb = urb;
1257	urbp->miter_started = 0;
1258
1259	dum_hcd = hcd_to_dummy_hcd(hcd);
1260	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1261
1262	rc = dummy_validate_stream(dum_hcd, urb);
1263	if (rc) {
1264		kfree(urbp);
1265		goto done;
1266	}
1267
1268	rc = usb_hcd_link_urb_to_ep(hcd, urb);
1269	if (rc) {
1270		kfree(urbp);
1271		goto done;
1272	}
1273
1274	if (!dum_hcd->udev) {
1275		dum_hcd->udev = urb->dev;
1276		usb_get_dev(dum_hcd->udev);
1277	} else if (unlikely(dum_hcd->udev != urb->dev))
1278		dev_err(dummy_dev(dum_hcd), "usb_device address has changed!\n");
1279
1280	list_add_tail(&urbp->urbp_list, &dum_hcd->urbp_list);
1281	urb->hcpriv = urbp;
1282	if (!dum_hcd->next_frame_urbp)
1283		dum_hcd->next_frame_urbp = urbp;
1284	if (usb_pipetype(urb->pipe) == PIPE_CONTROL)
1285		urb->error_count = 1;		/* mark as a new urb */
1286
1287	/* kick the scheduler, it'll do the rest */
1288	if (!timer_pending(&dum_hcd->timer))
1289		mod_timer(&dum_hcd->timer, jiffies + 1);
1290
1291 done:
1292	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1293	return rc;
1294}
1295
1296static int dummy_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1297{
1298	struct dummy_hcd *dum_hcd;
1299	unsigned long	flags;
1300	int		rc;
1301
1302	/* giveback happens automatically in timer callback,
1303	 * so make sure the callback happens */
1304	dum_hcd = hcd_to_dummy_hcd(hcd);
1305	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1306
1307	rc = usb_hcd_check_unlink_urb(hcd, urb, status);
1308	if (!rc && dum_hcd->rh_state != DUMMY_RH_RUNNING &&
1309			!list_empty(&dum_hcd->urbp_list))
1310		mod_timer(&dum_hcd->timer, jiffies);
1311
1312	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1313	return rc;
1314}
1315
1316static int dummy_perform_transfer(struct urb *urb, struct dummy_request *req,
1317		u32 len)
1318{
1319	void *ubuf, *rbuf;
1320	struct urbp *urbp = urb->hcpriv;
1321	int to_host;
1322	struct sg_mapping_iter *miter = &urbp->miter;
1323	u32 trans = 0;
1324	u32 this_sg;
1325	bool next_sg;
1326
1327	to_host = usb_pipein(urb->pipe);
1328	rbuf = req->req.buf + req->req.actual;
1329
1330	if (!urb->num_sgs) {
1331		ubuf = urb->transfer_buffer + urb->actual_length;
1332		if (to_host)
1333			memcpy(ubuf, rbuf, len);
1334		else
1335			memcpy(rbuf, ubuf, len);
1336		return len;
1337	}
1338
1339	if (!urbp->miter_started) {
1340		u32 flags = SG_MITER_ATOMIC;
1341
1342		if (to_host)
1343			flags |= SG_MITER_TO_SG;
1344		else
1345			flags |= SG_MITER_FROM_SG;
1346
1347		sg_miter_start(miter, urb->sg, urb->num_sgs, flags);
1348		urbp->miter_started = 1;
1349	}
1350	next_sg = sg_miter_next(miter);
1351	if (next_sg == false) {
1352		WARN_ON_ONCE(1);
1353		return -EINVAL;
1354	}
1355	do {
1356		ubuf = miter->addr;
1357		this_sg = min_t(u32, len, miter->length);
1358		miter->consumed = this_sg;
1359		trans += this_sg;
1360
1361		if (to_host)
1362			memcpy(ubuf, rbuf, this_sg);
1363		else
1364			memcpy(rbuf, ubuf, this_sg);
1365		len -= this_sg;
1366
1367		if (!len)
1368			break;
1369		next_sg = sg_miter_next(miter);
1370		if (next_sg == false) {
1371			WARN_ON_ONCE(1);
1372			return -EINVAL;
1373		}
1374
1375		rbuf += this_sg;
1376	} while (1);
1377
1378	sg_miter_stop(miter);
1379	return trans;
1380}
1381
1382/* transfer up to a frame's worth; caller must own lock */
1383static int transfer(struct dummy_hcd *dum_hcd, struct urb *urb,
1384		struct dummy_ep *ep, int limit, int *status)
1385{
1386	struct dummy		*dum = dum_hcd->dum;
1387	struct dummy_request	*req;
1388	int			sent = 0;
1389
1390top:
1391	/* if there's no request queued, the device is NAKing; return */
1392	list_for_each_entry(req, &ep->queue, queue) {
1393		unsigned	host_len, dev_len, len;
1394		int		is_short, to_host;
1395		int		rescan = 0;
1396
1397		if (dummy_ep_stream_en(dum_hcd, urb)) {
1398			if ((urb->stream_id != req->req.stream_id))
1399				continue;
1400		}
1401
1402		/* 1..N packets of ep->ep.maxpacket each ... the last one
1403		 * may be short (including zero length).
1404		 *
1405		 * writer can send a zlp explicitly (length 0) or implicitly
1406		 * (length mod maxpacket zero, and 'zero' flag); they always
1407		 * terminate reads.
1408		 */
1409		host_len = urb->transfer_buffer_length - urb->actual_length;
1410		dev_len = req->req.length - req->req.actual;
1411		len = min(host_len, dev_len);
1412
1413		/* FIXME update emulated data toggle too */
1414
1415		to_host = usb_pipein(urb->pipe);
1416		if (unlikely(len == 0))
1417			is_short = 1;
1418		else {
1419			/* not enough bandwidth left? */
1420			if (limit < ep->ep.maxpacket && limit < len)
1421				break;
1422			len = min_t(unsigned, len, limit);
1423			if (len == 0)
1424				break;
1425
1426			/* send multiple of maxpacket first, then remainder */
1427			if (len >= ep->ep.maxpacket) {
1428				is_short = 0;
1429				if (len % ep->ep.maxpacket)
1430					rescan = 1;
1431				len -= len % ep->ep.maxpacket;
1432			} else {
1433				is_short = 1;
1434			}
1435
1436			len = dummy_perform_transfer(urb, req, len);
1437
1438			ep->last_io = jiffies;
1439			if ((int)len < 0) {
1440				req->req.status = len;
1441			} else {
1442				limit -= len;
1443				sent += len;
1444				urb->actual_length += len;
1445				req->req.actual += len;
1446			}
1447		}
1448
1449		/* short packets terminate, maybe with overflow/underflow.
1450		 * it's only really an error to write too much.
1451		 *
1452		 * partially filling a buffer optionally blocks queue advances
1453		 * (so completion handlers can clean up the queue) but we don't
1454		 * need to emulate such data-in-flight.
1455		 */
1456		if (is_short) {
1457			if (host_len == dev_len) {
1458				req->req.status = 0;
1459				*status = 0;
1460			} else if (to_host) {
1461				req->req.status = 0;
1462				if (dev_len > host_len)
1463					*status = -EOVERFLOW;
1464				else
1465					*status = 0;
1466			} else {
1467				*status = 0;
1468				if (host_len > dev_len)
1469					req->req.status = -EOVERFLOW;
1470				else
1471					req->req.status = 0;
1472			}
1473
1474		/*
1475		 * many requests terminate without a short packet.
1476		 * send a zlp if demanded by flags.
1477		 */
1478		} else {
1479			if (req->req.length == req->req.actual) {
1480				if (req->req.zero && to_host)
1481					rescan = 1;
1482				else
1483					req->req.status = 0;
1484			}
1485			if (urb->transfer_buffer_length == urb->actual_length) {
1486				if (urb->transfer_flags & URB_ZERO_PACKET &&
1487				    !to_host)
1488					rescan = 1;
1489				else
1490					*status = 0;
1491			}
1492		}
1493
1494		/* device side completion --> continuable */
1495		if (req->req.status != -EINPROGRESS) {
1496			list_del_init(&req->queue);
1497
1498			spin_unlock(&dum->lock);
1499			usb_gadget_giveback_request(&ep->ep, &req->req);
1500			spin_lock(&dum->lock);
1501
1502			/* requests might have been unlinked... */
1503			rescan = 1;
1504		}
1505
1506		/* host side completion --> terminate */
1507		if (*status != -EINPROGRESS)
1508			break;
1509
1510		/* rescan to continue with any other queued i/o */
1511		if (rescan)
1512			goto top;
1513	}
1514	return sent;
1515}
1516
1517static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep)
1518{
1519	int	limit = ep->ep.maxpacket;
1520
1521	if (dum->gadget.speed == USB_SPEED_HIGH) {
1522		int	tmp;
1523
1524		/* high bandwidth mode */
1525		tmp = usb_endpoint_maxp_mult(ep->desc);
1526		tmp *= 8 /* applies to entire frame */;
1527		limit += limit * tmp;
1528	}
1529	if (dum->gadget.speed == USB_SPEED_SUPER) {
1530		switch (usb_endpoint_type(ep->desc)) {
1531		case USB_ENDPOINT_XFER_ISOC:
1532			/* Sec. 4.4.8.2 USB3.0 Spec */
1533			limit = 3 * 16 * 1024 * 8;
1534			break;
1535		case USB_ENDPOINT_XFER_INT:
1536			/* Sec. 4.4.7.2 USB3.0 Spec */
1537			limit = 3 * 1024 * 8;
1538			break;
1539		case USB_ENDPOINT_XFER_BULK:
1540		default:
1541			break;
1542		}
1543	}
1544	return limit;
1545}
1546
1547#define is_active(dum_hcd)	((dum_hcd->port_status & \
1548		(USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE | \
1549			USB_PORT_STAT_SUSPEND)) \
1550		== (USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE))
1551
1552static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address)
1553{
1554	int		i;
1555
1556	if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ?
1557			dum->ss_hcd : dum->hs_hcd)))
1558		return NULL;
1559	if (!dum->ints_enabled)
1560		return NULL;
1561	if ((address & ~USB_DIR_IN) == 0)
1562		return &dum->ep[0];
1563	for (i = 1; i < DUMMY_ENDPOINTS; i++) {
1564		struct dummy_ep	*ep = &dum->ep[i];
1565
1566		if (!ep->desc)
1567			continue;
1568		if (ep->desc->bEndpointAddress == address)
1569			return ep;
1570	}
1571	return NULL;
1572}
1573
1574#undef is_active
1575
1576#define Dev_Request	(USB_TYPE_STANDARD | USB_RECIP_DEVICE)
1577#define Dev_InRequest	(Dev_Request | USB_DIR_IN)
1578#define Intf_Request	(USB_TYPE_STANDARD | USB_RECIP_INTERFACE)
1579#define Intf_InRequest	(Intf_Request | USB_DIR_IN)
1580#define Ep_Request	(USB_TYPE_STANDARD | USB_RECIP_ENDPOINT)
1581#define Ep_InRequest	(Ep_Request | USB_DIR_IN)
1582
1583
1584/**
1585 * handle_control_request() - handles all control transfers
1586 * @dum: pointer to dummy (the_controller)
1587 * @urb: the urb request to handle
1588 * @setup: pointer to the setup data for a USB device control
1589 *	 request
1590 * @status: pointer to request handling status
1591 *
1592 * Return 0 - if the request was handled
1593 *	  1 - if the request wasn't handles
1594 *	  error code on error
1595 */
1596static int handle_control_request(struct dummy_hcd *dum_hcd, struct urb *urb,
1597				  struct usb_ctrlrequest *setup,
1598				  int *status)
1599{
1600	struct dummy_ep		*ep2;
1601	struct dummy		*dum = dum_hcd->dum;
1602	int			ret_val = 1;
1603	unsigned	w_index;
1604	unsigned	w_value;
1605
1606	w_index = le16_to_cpu(setup->wIndex);
1607	w_value = le16_to_cpu(setup->wValue);
1608	switch (setup->bRequest) {
1609	case USB_REQ_SET_ADDRESS:
1610		if (setup->bRequestType != Dev_Request)
1611			break;
1612		dum->address = w_value;
1613		*status = 0;
1614		dev_dbg(udc_dev(dum), "set_address = %d\n",
1615				w_value);
1616		ret_val = 0;
1617		break;
1618	case USB_REQ_SET_FEATURE:
1619		if (setup->bRequestType == Dev_Request) {
1620			ret_val = 0;
1621			switch (w_value) {
1622			case USB_DEVICE_REMOTE_WAKEUP:
1623				break;
1624			case USB_DEVICE_B_HNP_ENABLE:
1625				dum->gadget.b_hnp_enable = 1;
1626				break;
1627			case USB_DEVICE_A_HNP_SUPPORT:
1628				dum->gadget.a_hnp_support = 1;
1629				break;
1630			case USB_DEVICE_A_ALT_HNP_SUPPORT:
1631				dum->gadget.a_alt_hnp_support = 1;
1632				break;
1633			case USB_DEVICE_U1_ENABLE:
1634				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1635				    HCD_USB3)
1636					w_value = USB_DEV_STAT_U1_ENABLED;
1637				else
1638					ret_val = -EOPNOTSUPP;
1639				break;
1640			case USB_DEVICE_U2_ENABLE:
1641				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1642				    HCD_USB3)
1643					w_value = USB_DEV_STAT_U2_ENABLED;
1644				else
1645					ret_val = -EOPNOTSUPP;
1646				break;
1647			case USB_DEVICE_LTM_ENABLE:
1648				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1649				    HCD_USB3)
1650					w_value = USB_DEV_STAT_LTM_ENABLED;
1651				else
1652					ret_val = -EOPNOTSUPP;
1653				break;
1654			default:
1655				ret_val = -EOPNOTSUPP;
1656			}
1657			if (ret_val == 0) {
1658				dum->devstatus |= (1 << w_value);
1659				*status = 0;
1660			}
1661		} else if (setup->bRequestType == Ep_Request) {
1662			/* endpoint halt */
1663			ep2 = find_endpoint(dum, w_index);
1664			if (!ep2 || ep2->ep.name == ep0name) {
1665				ret_val = -EOPNOTSUPP;
1666				break;
1667			}
1668			ep2->halted = 1;
1669			ret_val = 0;
1670			*status = 0;
1671		}
1672		break;
1673	case USB_REQ_CLEAR_FEATURE:
1674		if (setup->bRequestType == Dev_Request) {
1675			ret_val = 0;
1676			switch (w_value) {
1677			case USB_DEVICE_REMOTE_WAKEUP:
1678				w_value = USB_DEVICE_REMOTE_WAKEUP;
1679				break;
1680			case USB_DEVICE_U1_ENABLE:
1681				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1682				    HCD_USB3)
1683					w_value = USB_DEV_STAT_U1_ENABLED;
1684				else
1685					ret_val = -EOPNOTSUPP;
1686				break;
1687			case USB_DEVICE_U2_ENABLE:
1688				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1689				    HCD_USB3)
1690					w_value = USB_DEV_STAT_U2_ENABLED;
1691				else
1692					ret_val = -EOPNOTSUPP;
1693				break;
1694			case USB_DEVICE_LTM_ENABLE:
1695				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1696				    HCD_USB3)
1697					w_value = USB_DEV_STAT_LTM_ENABLED;
1698				else
1699					ret_val = -EOPNOTSUPP;
1700				break;
1701			default:
1702				ret_val = -EOPNOTSUPP;
1703				break;
1704			}
1705			if (ret_val == 0) {
1706				dum->devstatus &= ~(1 << w_value);
1707				*status = 0;
1708			}
1709		} else if (setup->bRequestType == Ep_Request) {
1710			/* endpoint halt */
1711			ep2 = find_endpoint(dum, w_index);
1712			if (!ep2) {
1713				ret_val = -EOPNOTSUPP;
1714				break;
1715			}
1716			if (!ep2->wedged)
1717				ep2->halted = 0;
1718			ret_val = 0;
1719			*status = 0;
1720		}
1721		break;
1722	case USB_REQ_GET_STATUS:
1723		if (setup->bRequestType == Dev_InRequest
1724				|| setup->bRequestType == Intf_InRequest
1725				|| setup->bRequestType == Ep_InRequest) {
1726			char *buf;
1727			/*
1728			 * device: remote wakeup, selfpowered
1729			 * interface: nothing
1730			 * endpoint: halt
1731			 */
1732			buf = (char *)urb->transfer_buffer;
1733			if (urb->transfer_buffer_length > 0) {
1734				if (setup->bRequestType == Ep_InRequest) {
1735					ep2 = find_endpoint(dum, w_index);
1736					if (!ep2) {
1737						ret_val = -EOPNOTSUPP;
1738						break;
1739					}
1740					buf[0] = ep2->halted;
1741				} else if (setup->bRequestType ==
1742					   Dev_InRequest) {
1743					buf[0] = (u8)dum->devstatus;
1744				} else
1745					buf[0] = 0;
1746			}
1747			if (urb->transfer_buffer_length > 1)
1748				buf[1] = 0;
1749			urb->actual_length = min_t(u32, 2,
1750				urb->transfer_buffer_length);
1751			ret_val = 0;
1752			*status = 0;
1753		}
1754		break;
1755	}
1756	return ret_val;
1757}
1758
1759/* drive both sides of the transfers; looks like irq handlers to
1760 * both drivers except the callbacks aren't in_irq().
 
 
1761 */
1762static void dummy_timer(struct timer_list *t)
1763{
1764	struct dummy_hcd	*dum_hcd = from_timer(dum_hcd, t, timer);
1765	struct dummy		*dum = dum_hcd->dum;
1766	struct urbp		*urbp, *tmp;
1767	unsigned long		flags;
1768	int			limit, total;
1769	int			i;
1770
1771	/* simplistic model for one frame's bandwidth */
1772	/* FIXME: account for transaction and packet overhead */
1773	switch (dum->gadget.speed) {
1774	case USB_SPEED_LOW:
1775		total = 8/*bytes*/ * 12/*packets*/;
1776		break;
1777	case USB_SPEED_FULL:
1778		total = 64/*bytes*/ * 19/*packets*/;
1779		break;
1780	case USB_SPEED_HIGH:
1781		total = 512/*bytes*/ * 13/*packets*/ * 8/*uframes*/;
1782		break;
1783	case USB_SPEED_SUPER:
1784		/* Bus speed is 500000 bytes/ms, so use a little less */
1785		total = 490000;
1786		break;
1787	default:
1788		dev_err(dummy_dev(dum_hcd), "bogus device speed\n");
1789		return;
 
1790	}
1791
1792	/* FIXME if HZ != 1000 this will probably misbehave ... */
1793
1794	/* look at each urb queued by the host side driver */
1795	spin_lock_irqsave(&dum->lock, flags);
1796
1797	if (!dum_hcd->udev) {
1798		dev_err(dummy_dev(dum_hcd),
1799				"timer fired with no URBs pending?\n");
1800		spin_unlock_irqrestore(&dum->lock, flags);
1801		return;
1802	}
1803	dum_hcd->next_frame_urbp = NULL;
1804
1805	for (i = 0; i < DUMMY_ENDPOINTS; i++) {
1806		if (!ep_info[i].name)
1807			break;
1808		dum->ep[i].already_seen = 0;
1809	}
1810
1811restart:
1812	list_for_each_entry_safe(urbp, tmp, &dum_hcd->urbp_list, urbp_list) {
1813		struct urb		*urb;
1814		struct dummy_request	*req;
1815		u8			address;
1816		struct dummy_ep		*ep = NULL;
1817		int			status = -EINPROGRESS;
1818
1819		/* stop when we reach URBs queued after the timer interrupt */
1820		if (urbp == dum_hcd->next_frame_urbp)
1821			break;
1822
1823		urb = urbp->urb;
1824		if (urb->unlinked)
1825			goto return_urb;
1826		else if (dum_hcd->rh_state != DUMMY_RH_RUNNING)
1827			continue;
1828
1829		/* Used up this frame's bandwidth? */
1830		if (total <= 0)
1831			break;
1832
1833		/* find the gadget's ep for this request (if configured) */
1834		address = usb_pipeendpoint (urb->pipe);
1835		if (usb_pipein(urb->pipe))
1836			address |= USB_DIR_IN;
1837		ep = find_endpoint(dum, address);
1838		if (!ep) {
1839			/* set_configuration() disagreement */
1840			dev_dbg(dummy_dev(dum_hcd),
1841				"no ep configured for urb %p\n",
1842				urb);
1843			status = -EPROTO;
1844			goto return_urb;
1845		}
1846
1847		if (ep->already_seen)
1848			continue;
1849		ep->already_seen = 1;
1850		if (ep == &dum->ep[0] && urb->error_count) {
1851			ep->setup_stage = 1;	/* a new urb */
1852			urb->error_count = 0;
1853		}
1854		if (ep->halted && !ep->setup_stage) {
1855			/* NOTE: must not be iso! */
1856			dev_dbg(dummy_dev(dum_hcd), "ep %s halted, urb %p\n",
1857					ep->ep.name, urb);
1858			status = -EPIPE;
1859			goto return_urb;
1860		}
1861		/* FIXME make sure both ends agree on maxpacket */
1862
1863		/* handle control requests */
1864		if (ep == &dum->ep[0] && ep->setup_stage) {
1865			struct usb_ctrlrequest		setup;
1866			int				value = 1;
1867
1868			setup = *(struct usb_ctrlrequest *) urb->setup_packet;
1869			/* paranoia, in case of stale queued data */
1870			list_for_each_entry(req, &ep->queue, queue) {
1871				list_del_init(&req->queue);
1872				req->req.status = -EOVERFLOW;
1873				dev_dbg(udc_dev(dum), "stale req = %p\n",
1874						req);
1875
1876				spin_unlock(&dum->lock);
1877				usb_gadget_giveback_request(&ep->ep, &req->req);
1878				spin_lock(&dum->lock);
1879				ep->already_seen = 0;
1880				goto restart;
1881			}
1882
1883			/* gadget driver never sees set_address or operations
1884			 * on standard feature flags.  some hardware doesn't
1885			 * even expose them.
1886			 */
1887			ep->last_io = jiffies;
1888			ep->setup_stage = 0;
1889			ep->halted = 0;
1890
1891			value = handle_control_request(dum_hcd, urb, &setup,
1892						       &status);
1893
1894			/* gadget driver handles all other requests.  block
1895			 * until setup() returns; no reentrancy issues etc.
1896			 */
1897			if (value > 0) {
1898				++dum->callback_usage;
1899				spin_unlock(&dum->lock);
1900				value = dum->driver->setup(&dum->gadget,
1901						&setup);
1902				spin_lock(&dum->lock);
1903				--dum->callback_usage;
1904
1905				if (value >= 0) {
1906					/* no delays (max 64KB data stage) */
1907					limit = 64*1024;
1908					goto treat_control_like_bulk;
1909				}
1910				/* error, see below */
1911			}
1912
1913			if (value < 0) {
1914				if (value != -EOPNOTSUPP)
1915					dev_dbg(udc_dev(dum),
1916						"setup --> %d\n",
1917						value);
1918				status = -EPIPE;
1919				urb->actual_length = 0;
1920			}
1921
1922			goto return_urb;
1923		}
1924
1925		/* non-control requests */
1926		limit = total;
1927		switch (usb_pipetype(urb->pipe)) {
1928		case PIPE_ISOCHRONOUS:
1929			/*
1930			 * We don't support isochronous.  But if we did,
1931			 * here are some of the issues we'd have to face:
1932			 *
1933			 * Is it urb->interval since the last xfer?
1934			 * Use urb->iso_frame_desc[i].
1935			 * Complete whether or not ep has requests queued.
1936			 * Report random errors, to debug drivers.
1937			 */
1938			limit = max(limit, periodic_bytes(dum, ep));
1939			status = -EINVAL;	/* fail all xfers */
1940			break;
1941
1942		case PIPE_INTERRUPT:
1943			/* FIXME is it urb->interval since the last xfer?
1944			 * this almost certainly polls too fast.
1945			 */
1946			limit = max(limit, periodic_bytes(dum, ep));
1947			/* FALLTHROUGH */
1948
1949		default:
1950treat_control_like_bulk:
1951			ep->last_io = jiffies;
1952			total -= transfer(dum_hcd, urb, ep, limit, &status);
1953			break;
1954		}
1955
1956		/* incomplete transfer? */
1957		if (status == -EINPROGRESS)
1958			continue;
1959
1960return_urb:
1961		list_del(&urbp->urbp_list);
1962		kfree(urbp);
1963		if (ep)
1964			ep->already_seen = ep->setup_stage = 0;
1965
1966		usb_hcd_unlink_urb_from_ep(dummy_hcd_to_hcd(dum_hcd), urb);
1967		spin_unlock(&dum->lock);
1968		usb_hcd_giveback_urb(dummy_hcd_to_hcd(dum_hcd), urb, status);
1969		spin_lock(&dum->lock);
1970
1971		goto restart;
1972	}
1973
1974	if (list_empty(&dum_hcd->urbp_list)) {
1975		usb_put_dev(dum_hcd->udev);
1976		dum_hcd->udev = NULL;
1977	} else if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
1978		/* want a 1 msec delay here */
1979		mod_timer(&dum_hcd->timer, jiffies + msecs_to_jiffies(1));
1980	}
1981
1982	spin_unlock_irqrestore(&dum->lock, flags);
1983}
1984
1985/*-------------------------------------------------------------------------*/
1986
1987#define PORT_C_MASK \
1988	((USB_PORT_STAT_C_CONNECTION \
1989	| USB_PORT_STAT_C_ENABLE \
1990	| USB_PORT_STAT_C_SUSPEND \
1991	| USB_PORT_STAT_C_OVERCURRENT \
1992	| USB_PORT_STAT_C_RESET) << 16)
1993
1994static int dummy_hub_status(struct usb_hcd *hcd, char *buf)
1995{
1996	struct dummy_hcd	*dum_hcd;
1997	unsigned long		flags;
1998	int			retval = 0;
1999
2000	dum_hcd = hcd_to_dummy_hcd(hcd);
2001
2002	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2003	if (!HCD_HW_ACCESSIBLE(hcd))
2004		goto done;
2005
2006	if (dum_hcd->resuming && time_after_eq(jiffies, dum_hcd->re_timeout)) {
2007		dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2008		dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2009		set_link_state(dum_hcd);
2010	}
2011
2012	if ((dum_hcd->port_status & PORT_C_MASK) != 0) {
2013		*buf = (1 << 1);
2014		dev_dbg(dummy_dev(dum_hcd), "port status 0x%08x has changes\n",
2015				dum_hcd->port_status);
2016		retval = 1;
2017		if (dum_hcd->rh_state == DUMMY_RH_SUSPENDED)
2018			usb_hcd_resume_root_hub(hcd);
2019	}
2020done:
2021	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2022	return retval;
2023}
2024
2025/* usb 3.0 root hub device descriptor */
2026static struct {
2027	struct usb_bos_descriptor bos;
2028	struct usb_ss_cap_descriptor ss_cap;
2029} __packed usb3_bos_desc = {
2030
2031	.bos = {
2032		.bLength		= USB_DT_BOS_SIZE,
2033		.bDescriptorType	= USB_DT_BOS,
2034		.wTotalLength		= cpu_to_le16(sizeof(usb3_bos_desc)),
2035		.bNumDeviceCaps		= 1,
2036	},
2037	.ss_cap = {
2038		.bLength		= USB_DT_USB_SS_CAP_SIZE,
2039		.bDescriptorType	= USB_DT_DEVICE_CAPABILITY,
2040		.bDevCapabilityType	= USB_SS_CAP_TYPE,
2041		.wSpeedSupported	= cpu_to_le16(USB_5GBPS_OPERATION),
2042		.bFunctionalitySupport	= ilog2(USB_5GBPS_OPERATION),
2043	},
2044};
2045
2046static inline void
2047ss_hub_descriptor(struct usb_hub_descriptor *desc)
2048{
2049	memset(desc, 0, sizeof *desc);
2050	desc->bDescriptorType = USB_DT_SS_HUB;
2051	desc->bDescLength = 12;
2052	desc->wHubCharacteristics = cpu_to_le16(
2053			HUB_CHAR_INDV_PORT_LPSM |
2054			HUB_CHAR_COMMON_OCPM);
2055	desc->bNbrPorts = 1;
2056	desc->u.ss.bHubHdrDecLat = 0x04; /* Worst case: 0.4 micro sec*/
2057	desc->u.ss.DeviceRemovable = 0;
2058}
2059
2060static inline void hub_descriptor(struct usb_hub_descriptor *desc)
2061{
2062	memset(desc, 0, sizeof *desc);
2063	desc->bDescriptorType = USB_DT_HUB;
2064	desc->bDescLength = 9;
2065	desc->wHubCharacteristics = cpu_to_le16(
2066			HUB_CHAR_INDV_PORT_LPSM |
2067			HUB_CHAR_COMMON_OCPM);
2068	desc->bNbrPorts = 1;
2069	desc->u.hs.DeviceRemovable[0] = 0;
2070	desc->u.hs.DeviceRemovable[1] = 0xff;	/* PortPwrCtrlMask */
2071}
2072
2073static int dummy_hub_control(
2074	struct usb_hcd	*hcd,
2075	u16		typeReq,
2076	u16		wValue,
2077	u16		wIndex,
2078	char		*buf,
2079	u16		wLength
2080) {
2081	struct dummy_hcd *dum_hcd;
2082	int		retval = 0;
2083	unsigned long	flags;
2084
2085	if (!HCD_HW_ACCESSIBLE(hcd))
2086		return -ETIMEDOUT;
2087
2088	dum_hcd = hcd_to_dummy_hcd(hcd);
2089
2090	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2091	switch (typeReq) {
2092	case ClearHubFeature:
2093		break;
2094	case ClearPortFeature:
2095		switch (wValue) {
2096		case USB_PORT_FEAT_SUSPEND:
2097			if (hcd->speed == HCD_USB3) {
2098				dev_dbg(dummy_dev(dum_hcd),
2099					 "USB_PORT_FEAT_SUSPEND req not "
2100					 "supported for USB 3.0 roothub\n");
2101				goto error;
2102			}
2103			if (dum_hcd->port_status & USB_PORT_STAT_SUSPEND) {
2104				/* 20msec resume signaling */
2105				dum_hcd->resuming = 1;
2106				dum_hcd->re_timeout = jiffies +
2107						msecs_to_jiffies(20);
2108			}
2109			break;
2110		case USB_PORT_FEAT_POWER:
2111			dev_dbg(dummy_dev(dum_hcd), "power-off\n");
2112			if (hcd->speed == HCD_USB3)
2113				dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
2114			else
2115				dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
2116			set_link_state(dum_hcd);
2117			break;
2118		default:
 
 
 
 
 
 
 
 
2119			dum_hcd->port_status &= ~(1 << wValue);
2120			set_link_state(dum_hcd);
 
 
 
 
2121		}
2122		break;
2123	case GetHubDescriptor:
2124		if (hcd->speed == HCD_USB3 &&
2125				(wLength < USB_DT_SS_HUB_SIZE ||
2126				 wValue != (USB_DT_SS_HUB << 8))) {
2127			dev_dbg(dummy_dev(dum_hcd),
2128				"Wrong hub descriptor type for "
2129				"USB 3.0 roothub.\n");
2130			goto error;
2131		}
2132		if (hcd->speed == HCD_USB3)
2133			ss_hub_descriptor((struct usb_hub_descriptor *) buf);
2134		else
2135			hub_descriptor((struct usb_hub_descriptor *) buf);
2136		break;
2137
2138	case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
2139		if (hcd->speed != HCD_USB3)
2140			goto error;
2141
2142		if ((wValue >> 8) != USB_DT_BOS)
2143			goto error;
2144
2145		memcpy(buf, &usb3_bos_desc, sizeof(usb3_bos_desc));
2146		retval = sizeof(usb3_bos_desc);
2147		break;
2148
2149	case GetHubStatus:
2150		*(__le32 *) buf = cpu_to_le32(0);
2151		break;
2152	case GetPortStatus:
2153		if (wIndex != 1)
2154			retval = -EPIPE;
2155
2156		/* whoever resets or resumes must GetPortStatus to
2157		 * complete it!!
2158		 */
2159		if (dum_hcd->resuming &&
2160				time_after_eq(jiffies, dum_hcd->re_timeout)) {
2161			dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2162			dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2163		}
2164		if ((dum_hcd->port_status & USB_PORT_STAT_RESET) != 0 &&
2165				time_after_eq(jiffies, dum_hcd->re_timeout)) {
2166			dum_hcd->port_status |= (USB_PORT_STAT_C_RESET << 16);
2167			dum_hcd->port_status &= ~USB_PORT_STAT_RESET;
2168			if (dum_hcd->dum->pullup) {
2169				dum_hcd->port_status |= USB_PORT_STAT_ENABLE;
2170
2171				if (hcd->speed < HCD_USB3) {
2172					switch (dum_hcd->dum->gadget.speed) {
2173					case USB_SPEED_HIGH:
2174						dum_hcd->port_status |=
2175						      USB_PORT_STAT_HIGH_SPEED;
2176						break;
2177					case USB_SPEED_LOW:
2178						dum_hcd->dum->gadget.ep0->
2179							maxpacket = 8;
2180						dum_hcd->port_status |=
2181							USB_PORT_STAT_LOW_SPEED;
2182						break;
2183					default:
2184						break;
2185					}
2186				}
2187			}
2188		}
2189		set_link_state(dum_hcd);
2190		((__le16 *) buf)[0] = cpu_to_le16(dum_hcd->port_status);
2191		((__le16 *) buf)[1] = cpu_to_le16(dum_hcd->port_status >> 16);
2192		break;
2193	case SetHubFeature:
2194		retval = -EPIPE;
2195		break;
2196	case SetPortFeature:
2197		switch (wValue) {
2198		case USB_PORT_FEAT_LINK_STATE:
2199			if (hcd->speed != HCD_USB3) {
2200				dev_dbg(dummy_dev(dum_hcd),
2201					 "USB_PORT_FEAT_LINK_STATE req not "
2202					 "supported for USB 2.0 roothub\n");
2203				goto error;
2204			}
2205			/*
2206			 * Since this is dummy we don't have an actual link so
2207			 * there is nothing to do for the SET_LINK_STATE cmd
2208			 */
2209			break;
2210		case USB_PORT_FEAT_U1_TIMEOUT:
2211		case USB_PORT_FEAT_U2_TIMEOUT:
2212			/* TODO: add suspend/resume support! */
2213			if (hcd->speed != HCD_USB3) {
2214				dev_dbg(dummy_dev(dum_hcd),
2215					 "USB_PORT_FEAT_U1/2_TIMEOUT req not "
2216					 "supported for USB 2.0 roothub\n");
2217				goto error;
2218			}
2219			break;
2220		case USB_PORT_FEAT_SUSPEND:
2221			/* Applicable only for USB2.0 hub */
2222			if (hcd->speed == HCD_USB3) {
2223				dev_dbg(dummy_dev(dum_hcd),
2224					 "USB_PORT_FEAT_SUSPEND req not "
2225					 "supported for USB 3.0 roothub\n");
2226				goto error;
2227			}
2228			if (dum_hcd->active) {
2229				dum_hcd->port_status |= USB_PORT_STAT_SUSPEND;
2230
2231				/* HNP would happen here; for now we
2232				 * assume b_bus_req is always true.
2233				 */
2234				set_link_state(dum_hcd);
2235				if (((1 << USB_DEVICE_B_HNP_ENABLE)
2236						& dum_hcd->dum->devstatus) != 0)
2237					dev_dbg(dummy_dev(dum_hcd),
2238							"no HNP yet!\n");
2239			}
2240			break;
2241		case USB_PORT_FEAT_POWER:
2242			if (hcd->speed == HCD_USB3)
2243				dum_hcd->port_status |= USB_SS_PORT_STAT_POWER;
2244			else
2245				dum_hcd->port_status |= USB_PORT_STAT_POWER;
2246			set_link_state(dum_hcd);
2247			break;
2248		case USB_PORT_FEAT_BH_PORT_RESET:
2249			/* Applicable only for USB3.0 hub */
2250			if (hcd->speed != HCD_USB3) {
2251				dev_dbg(dummy_dev(dum_hcd),
2252					 "USB_PORT_FEAT_BH_PORT_RESET req not "
2253					 "supported for USB 2.0 roothub\n");
2254				goto error;
2255			}
2256			/* FALLS THROUGH */
2257		case USB_PORT_FEAT_RESET:
 
 
2258			/* if it's already enabled, disable */
2259			if (hcd->speed == HCD_USB3) {
2260				dum_hcd->port_status = 0;
2261				dum_hcd->port_status =
2262					(USB_SS_PORT_STAT_POWER |
2263					 USB_PORT_STAT_CONNECTION |
2264					 USB_PORT_STAT_RESET);
2265			} else
2266				dum_hcd->port_status &= ~(USB_PORT_STAT_ENABLE
2267					| USB_PORT_STAT_LOW_SPEED
2268					| USB_PORT_STAT_HIGH_SPEED);
 
 
2269			/*
2270			 * We want to reset device status. All but the
2271			 * Self powered feature
2272			 */
2273			dum_hcd->dum->devstatus &=
2274				(1 << USB_DEVICE_SELF_POWERED);
2275			/*
2276			 * FIXME USB3.0: what is the correct reset signaling
2277			 * interval? Is it still 50msec as for HS?
2278			 */
2279			dum_hcd->re_timeout = jiffies + msecs_to_jiffies(50);
2280			/* FALLS THROUGH */
 
 
 
 
 
 
 
 
 
2281		default:
2282			if (hcd->speed == HCD_USB3) {
2283				if ((dum_hcd->port_status &
2284				     USB_SS_PORT_STAT_POWER) != 0) {
2285					dum_hcd->port_status |= (1 << wValue);
2286				}
2287			} else
2288				if ((dum_hcd->port_status &
2289				     USB_PORT_STAT_POWER) != 0) {
2290					dum_hcd->port_status |= (1 << wValue);
2291				}
2292			set_link_state(dum_hcd);
2293		}
2294		break;
2295	case GetPortErrorCount:
2296		if (hcd->speed != HCD_USB3) {
2297			dev_dbg(dummy_dev(dum_hcd),
2298				 "GetPortErrorCount req not "
2299				 "supported for USB 2.0 roothub\n");
2300			goto error;
2301		}
2302		/* We'll always return 0 since this is a dummy hub */
2303		*(__le32 *) buf = cpu_to_le32(0);
2304		break;
2305	case SetHubDepth:
2306		if (hcd->speed != HCD_USB3) {
2307			dev_dbg(dummy_dev(dum_hcd),
2308				 "SetHubDepth req not supported for "
2309				 "USB 2.0 roothub\n");
2310			goto error;
2311		}
2312		break;
2313	default:
2314		dev_dbg(dummy_dev(dum_hcd),
2315			"hub control req%04x v%04x i%04x l%d\n",
2316			typeReq, wValue, wIndex, wLength);
2317error:
2318		/* "protocol stall" on error */
2319		retval = -EPIPE;
2320	}
2321	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2322
2323	if ((dum_hcd->port_status & PORT_C_MASK) != 0)
2324		usb_hcd_poll_rh_status(hcd);
2325	return retval;
2326}
2327
2328static int dummy_bus_suspend(struct usb_hcd *hcd)
2329{
2330	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2331
2332	dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2333
2334	spin_lock_irq(&dum_hcd->dum->lock);
2335	dum_hcd->rh_state = DUMMY_RH_SUSPENDED;
2336	set_link_state(dum_hcd);
2337	hcd->state = HC_STATE_SUSPENDED;
2338	spin_unlock_irq(&dum_hcd->dum->lock);
2339	return 0;
2340}
2341
2342static int dummy_bus_resume(struct usb_hcd *hcd)
2343{
2344	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2345	int rc = 0;
2346
2347	dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2348
2349	spin_lock_irq(&dum_hcd->dum->lock);
2350	if (!HCD_HW_ACCESSIBLE(hcd)) {
2351		rc = -ESHUTDOWN;
2352	} else {
2353		dum_hcd->rh_state = DUMMY_RH_RUNNING;
2354		set_link_state(dum_hcd);
2355		if (!list_empty(&dum_hcd->urbp_list))
2356			mod_timer(&dum_hcd->timer, jiffies);
2357		hcd->state = HC_STATE_RUNNING;
2358	}
2359	spin_unlock_irq(&dum_hcd->dum->lock);
2360	return rc;
2361}
2362
2363/*-------------------------------------------------------------------------*/
2364
2365static inline ssize_t show_urb(char *buf, size_t size, struct urb *urb)
2366{
2367	int ep = usb_pipeendpoint(urb->pipe);
2368
2369	return scnprintf(buf, size,
2370		"urb/%p %s ep%d%s%s len %d/%d\n",
2371		urb,
2372		({ char *s;
2373		switch (urb->dev->speed) {
2374		case USB_SPEED_LOW:
2375			s = "ls";
2376			break;
2377		case USB_SPEED_FULL:
2378			s = "fs";
2379			break;
2380		case USB_SPEED_HIGH:
2381			s = "hs";
2382			break;
2383		case USB_SPEED_SUPER:
2384			s = "ss";
2385			break;
2386		default:
2387			s = "?";
2388			break;
2389		 } s; }),
2390		ep, ep ? (usb_pipein(urb->pipe) ? "in" : "out") : "",
2391		({ char *s; \
2392		switch (usb_pipetype(urb->pipe)) { \
2393		case PIPE_CONTROL: \
2394			s = ""; \
2395			break; \
2396		case PIPE_BULK: \
2397			s = "-bulk"; \
2398			break; \
2399		case PIPE_INTERRUPT: \
2400			s = "-int"; \
2401			break; \
2402		default: \
2403			s = "-iso"; \
2404			break; \
2405		} s; }),
2406		urb->actual_length, urb->transfer_buffer_length);
2407}
2408
2409static ssize_t urbs_show(struct device *dev, struct device_attribute *attr,
2410		char *buf)
2411{
2412	struct usb_hcd		*hcd = dev_get_drvdata(dev);
2413	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2414	struct urbp		*urbp;
2415	size_t			size = 0;
2416	unsigned long		flags;
2417
2418	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2419	list_for_each_entry(urbp, &dum_hcd->urbp_list, urbp_list) {
2420		size_t		temp;
2421
2422		temp = show_urb(buf, PAGE_SIZE - size, urbp->urb);
2423		buf += temp;
2424		size += temp;
2425	}
2426	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2427
2428	return size;
2429}
2430static DEVICE_ATTR_RO(urbs);
2431
2432static int dummy_start_ss(struct dummy_hcd *dum_hcd)
2433{
2434	timer_setup(&dum_hcd->timer, dummy_timer, 0);
2435	dum_hcd->rh_state = DUMMY_RH_RUNNING;
2436	dum_hcd->stream_en_ep = 0;
2437	INIT_LIST_HEAD(&dum_hcd->urbp_list);
2438	dummy_hcd_to_hcd(dum_hcd)->power_budget = POWER_BUDGET;
2439	dummy_hcd_to_hcd(dum_hcd)->state = HC_STATE_RUNNING;
2440	dummy_hcd_to_hcd(dum_hcd)->uses_new_polling = 1;
2441#ifdef CONFIG_USB_OTG
2442	dummy_hcd_to_hcd(dum_hcd)->self.otg_port = 1;
2443#endif
2444	return 0;
2445
2446	/* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2447	return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2448}
2449
2450static int dummy_start(struct usb_hcd *hcd)
2451{
2452	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2453
2454	/*
2455	 * MASTER side init ... we emulate a root hub that'll only ever
2456	 * talk to one device (the slave side).  Also appears in sysfs,
2457	 * just like more familiar pci-based HCDs.
2458	 */
2459	if (!usb_hcd_is_primary_hcd(hcd))
2460		return dummy_start_ss(dum_hcd);
2461
2462	spin_lock_init(&dum_hcd->dum->lock);
2463	timer_setup(&dum_hcd->timer, dummy_timer, 0);
2464	dum_hcd->rh_state = DUMMY_RH_RUNNING;
2465
2466	INIT_LIST_HEAD(&dum_hcd->urbp_list);
2467
2468	hcd->power_budget = POWER_BUDGET;
2469	hcd->state = HC_STATE_RUNNING;
2470	hcd->uses_new_polling = 1;
2471
2472#ifdef CONFIG_USB_OTG
2473	hcd->self.otg_port = 1;
2474#endif
2475
2476	/* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2477	return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2478}
2479
2480static void dummy_stop(struct usb_hcd *hcd)
2481{
2482	device_remove_file(dummy_dev(hcd_to_dummy_hcd(hcd)), &dev_attr_urbs);
2483	dev_info(dummy_dev(hcd_to_dummy_hcd(hcd)), "stopped\n");
2484}
2485
2486/*-------------------------------------------------------------------------*/
2487
2488static int dummy_h_get_frame(struct usb_hcd *hcd)
2489{
2490	return dummy_g_get_frame(NULL);
2491}
2492
2493static int dummy_setup(struct usb_hcd *hcd)
2494{
2495	struct dummy *dum;
2496
2497	dum = *((void **)dev_get_platdata(hcd->self.controller));
2498	hcd->self.sg_tablesize = ~0;
2499	if (usb_hcd_is_primary_hcd(hcd)) {
2500		dum->hs_hcd = hcd_to_dummy_hcd(hcd);
2501		dum->hs_hcd->dum = dum;
2502		/*
2503		 * Mark the first roothub as being USB 2.0.
2504		 * The USB 3.0 roothub will be registered later by
2505		 * dummy_hcd_probe()
2506		 */
2507		hcd->speed = HCD_USB2;
2508		hcd->self.root_hub->speed = USB_SPEED_HIGH;
2509	} else {
2510		dum->ss_hcd = hcd_to_dummy_hcd(hcd);
2511		dum->ss_hcd->dum = dum;
2512		hcd->speed = HCD_USB3;
2513		hcd->self.root_hub->speed = USB_SPEED_SUPER;
2514	}
2515	return 0;
2516}
2517
2518/* Change a group of bulk endpoints to support multiple stream IDs */
2519static int dummy_alloc_streams(struct usb_hcd *hcd, struct usb_device *udev,
2520	struct usb_host_endpoint **eps, unsigned int num_eps,
2521	unsigned int num_streams, gfp_t mem_flags)
2522{
2523	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2524	unsigned long flags;
2525	int max_stream;
2526	int ret_streams = num_streams;
2527	unsigned int index;
2528	unsigned int i;
2529
2530	if (!num_eps)
2531		return -EINVAL;
2532
2533	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2534	for (i = 0; i < num_eps; i++) {
2535		index = dummy_get_ep_idx(&eps[i]->desc);
2536		if ((1 << index) & dum_hcd->stream_en_ep) {
2537			ret_streams = -EINVAL;
2538			goto out;
2539		}
2540		max_stream = usb_ss_max_streams(&eps[i]->ss_ep_comp);
2541		if (!max_stream) {
2542			ret_streams = -EINVAL;
2543			goto out;
2544		}
2545		if (max_stream < ret_streams) {
2546			dev_dbg(dummy_dev(dum_hcd), "Ep 0x%x only supports %u "
2547					"stream IDs.\n",
2548					eps[i]->desc.bEndpointAddress,
2549					max_stream);
2550			ret_streams = max_stream;
2551		}
2552	}
2553
2554	for (i = 0; i < num_eps; i++) {
2555		index = dummy_get_ep_idx(&eps[i]->desc);
2556		dum_hcd->stream_en_ep |= 1 << index;
2557		set_max_streams_for_pipe(dum_hcd,
2558				usb_endpoint_num(&eps[i]->desc), ret_streams);
2559	}
2560out:
2561	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2562	return ret_streams;
2563}
2564
2565/* Reverts a group of bulk endpoints back to not using stream IDs. */
2566static int dummy_free_streams(struct usb_hcd *hcd, struct usb_device *udev,
2567	struct usb_host_endpoint **eps, unsigned int num_eps,
2568	gfp_t mem_flags)
2569{
2570	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2571	unsigned long flags;
2572	int ret;
2573	unsigned int index;
2574	unsigned int i;
2575
2576	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2577	for (i = 0; i < num_eps; i++) {
2578		index = dummy_get_ep_idx(&eps[i]->desc);
2579		if (!((1 << index) & dum_hcd->stream_en_ep)) {
2580			ret = -EINVAL;
2581			goto out;
2582		}
2583	}
2584
2585	for (i = 0; i < num_eps; i++) {
2586		index = dummy_get_ep_idx(&eps[i]->desc);
2587		dum_hcd->stream_en_ep &= ~(1 << index);
2588		set_max_streams_for_pipe(dum_hcd,
2589				usb_endpoint_num(&eps[i]->desc), 0);
2590	}
2591	ret = 0;
2592out:
2593	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2594	return ret;
2595}
2596
2597static struct hc_driver dummy_hcd = {
2598	.description =		(char *) driver_name,
2599	.product_desc =		"Dummy host controller",
2600	.hcd_priv_size =	sizeof(struct dummy_hcd),
2601
2602	.reset =		dummy_setup,
2603	.start =		dummy_start,
2604	.stop =			dummy_stop,
2605
2606	.urb_enqueue =		dummy_urb_enqueue,
2607	.urb_dequeue =		dummy_urb_dequeue,
2608
2609	.get_frame_number =	dummy_h_get_frame,
2610
2611	.hub_status_data =	dummy_hub_status,
2612	.hub_control =		dummy_hub_control,
2613	.bus_suspend =		dummy_bus_suspend,
2614	.bus_resume =		dummy_bus_resume,
2615
2616	.alloc_streams =	dummy_alloc_streams,
2617	.free_streams =		dummy_free_streams,
2618};
2619
2620static int dummy_hcd_probe(struct platform_device *pdev)
2621{
2622	struct dummy		*dum;
2623	struct usb_hcd		*hs_hcd;
2624	struct usb_hcd		*ss_hcd;
2625	int			retval;
2626
2627	dev_info(&pdev->dev, "%s, driver " DRIVER_VERSION "\n", driver_desc);
2628	dum = *((void **)dev_get_platdata(&pdev->dev));
2629
2630	if (mod_data.is_super_speed)
2631		dummy_hcd.flags = HCD_USB3 | HCD_SHARED;
2632	else if (mod_data.is_high_speed)
2633		dummy_hcd.flags = HCD_USB2;
2634	else
2635		dummy_hcd.flags = HCD_USB11;
2636	hs_hcd = usb_create_hcd(&dummy_hcd, &pdev->dev, dev_name(&pdev->dev));
2637	if (!hs_hcd)
2638		return -ENOMEM;
2639	hs_hcd->has_tt = 1;
2640
2641	retval = usb_add_hcd(hs_hcd, 0, 0);
2642	if (retval)
2643		goto put_usb2_hcd;
2644
2645	if (mod_data.is_super_speed) {
2646		ss_hcd = usb_create_shared_hcd(&dummy_hcd, &pdev->dev,
2647					dev_name(&pdev->dev), hs_hcd);
2648		if (!ss_hcd) {
2649			retval = -ENOMEM;
2650			goto dealloc_usb2_hcd;
2651		}
2652
2653		retval = usb_add_hcd(ss_hcd, 0, 0);
2654		if (retval)
2655			goto put_usb3_hcd;
2656	}
2657	return 0;
2658
2659put_usb3_hcd:
2660	usb_put_hcd(ss_hcd);
2661dealloc_usb2_hcd:
2662	usb_remove_hcd(hs_hcd);
2663put_usb2_hcd:
2664	usb_put_hcd(hs_hcd);
2665	dum->hs_hcd = dum->ss_hcd = NULL;
2666	return retval;
2667}
2668
2669static int dummy_hcd_remove(struct platform_device *pdev)
2670{
2671	struct dummy		*dum;
2672
2673	dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum;
2674
2675	if (dum->ss_hcd) {
2676		usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2677		usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2678	}
2679
2680	usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2681	usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2682
2683	dum->hs_hcd = NULL;
2684	dum->ss_hcd = NULL;
2685
2686	return 0;
2687}
2688
2689static int dummy_hcd_suspend(struct platform_device *pdev, pm_message_t state)
2690{
2691	struct usb_hcd		*hcd;
2692	struct dummy_hcd	*dum_hcd;
2693	int			rc = 0;
2694
2695	dev_dbg(&pdev->dev, "%s\n", __func__);
2696
2697	hcd = platform_get_drvdata(pdev);
2698	dum_hcd = hcd_to_dummy_hcd(hcd);
2699	if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
2700		dev_warn(&pdev->dev, "Root hub isn't suspended!\n");
2701		rc = -EBUSY;
2702	} else
2703		clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2704	return rc;
2705}
2706
2707static int dummy_hcd_resume(struct platform_device *pdev)
2708{
2709	struct usb_hcd		*hcd;
2710
2711	dev_dbg(&pdev->dev, "%s\n", __func__);
2712
2713	hcd = platform_get_drvdata(pdev);
2714	set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2715	usb_hcd_poll_rh_status(hcd);
2716	return 0;
2717}
2718
2719static struct platform_driver dummy_hcd_driver = {
2720	.probe		= dummy_hcd_probe,
2721	.remove		= dummy_hcd_remove,
2722	.suspend	= dummy_hcd_suspend,
2723	.resume		= dummy_hcd_resume,
2724	.driver		= {
2725		.name	= (char *) driver_name,
2726	},
2727};
2728
2729/*-------------------------------------------------------------------------*/
2730#define MAX_NUM_UDC	2
2731static struct platform_device *the_udc_pdev[MAX_NUM_UDC];
2732static struct platform_device *the_hcd_pdev[MAX_NUM_UDC];
2733
2734static int __init init(void)
2735{
2736	int	retval = -ENOMEM;
2737	int	i;
2738	struct	dummy *dum[MAX_NUM_UDC];
2739
2740	if (usb_disabled())
2741		return -ENODEV;
2742
2743	if (!mod_data.is_high_speed && mod_data.is_super_speed)
2744		return -EINVAL;
2745
2746	if (mod_data.num < 1 || mod_data.num > MAX_NUM_UDC) {
2747		pr_err("Number of emulated UDC must be in range of 1...%d\n",
2748				MAX_NUM_UDC);
2749		return -EINVAL;
2750	}
2751
2752	for (i = 0; i < mod_data.num; i++) {
2753		the_hcd_pdev[i] = platform_device_alloc(driver_name, i);
2754		if (!the_hcd_pdev[i]) {
2755			i--;
2756			while (i >= 0)
2757				platform_device_put(the_hcd_pdev[i--]);
2758			return retval;
2759		}
2760	}
2761	for (i = 0; i < mod_data.num; i++) {
2762		the_udc_pdev[i] = platform_device_alloc(gadget_name, i);
2763		if (!the_udc_pdev[i]) {
2764			i--;
2765			while (i >= 0)
2766				platform_device_put(the_udc_pdev[i--]);
2767			goto err_alloc_udc;
2768		}
2769	}
2770	for (i = 0; i < mod_data.num; i++) {
2771		dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL);
2772		if (!dum[i]) {
2773			retval = -ENOMEM;
2774			goto err_add_pdata;
2775		}
2776		retval = platform_device_add_data(the_hcd_pdev[i], &dum[i],
2777				sizeof(void *));
2778		if (retval)
2779			goto err_add_pdata;
2780		retval = platform_device_add_data(the_udc_pdev[i], &dum[i],
2781				sizeof(void *));
2782		if (retval)
2783			goto err_add_pdata;
2784	}
2785
2786	retval = platform_driver_register(&dummy_hcd_driver);
2787	if (retval < 0)
2788		goto err_add_pdata;
2789	retval = platform_driver_register(&dummy_udc_driver);
2790	if (retval < 0)
2791		goto err_register_udc_driver;
2792
2793	for (i = 0; i < mod_data.num; i++) {
2794		retval = platform_device_add(the_hcd_pdev[i]);
2795		if (retval < 0) {
2796			i--;
2797			while (i >= 0)
2798				platform_device_del(the_hcd_pdev[i--]);
2799			goto err_add_hcd;
2800		}
2801	}
2802	for (i = 0; i < mod_data.num; i++) {
2803		if (!dum[i]->hs_hcd ||
2804				(!dum[i]->ss_hcd && mod_data.is_super_speed)) {
2805			/*
2806			 * The hcd was added successfully but its probe
2807			 * function failed for some reason.
2808			 */
2809			retval = -EINVAL;
2810			goto err_add_udc;
2811		}
2812	}
2813
2814	for (i = 0; i < mod_data.num; i++) {
2815		retval = platform_device_add(the_udc_pdev[i]);
2816		if (retval < 0) {
2817			i--;
2818			while (i >= 0)
2819				platform_device_del(the_udc_pdev[i--]);
2820			goto err_add_udc;
2821		}
2822	}
2823
2824	for (i = 0; i < mod_data.num; i++) {
2825		if (!platform_get_drvdata(the_udc_pdev[i])) {
2826			/*
2827			 * The udc was added successfully but its probe
2828			 * function failed for some reason.
2829			 */
2830			retval = -EINVAL;
2831			goto err_probe_udc;
2832		}
2833	}
2834	return retval;
2835
2836err_probe_udc:
2837	for (i = 0; i < mod_data.num; i++)
2838		platform_device_del(the_udc_pdev[i]);
2839err_add_udc:
2840	for (i = 0; i < mod_data.num; i++)
2841		platform_device_del(the_hcd_pdev[i]);
2842err_add_hcd:
2843	platform_driver_unregister(&dummy_udc_driver);
2844err_register_udc_driver:
2845	platform_driver_unregister(&dummy_hcd_driver);
2846err_add_pdata:
2847	for (i = 0; i < mod_data.num; i++)
2848		kfree(dum[i]);
2849	for (i = 0; i < mod_data.num; i++)
2850		platform_device_put(the_udc_pdev[i]);
2851err_alloc_udc:
2852	for (i = 0; i < mod_data.num; i++)
2853		platform_device_put(the_hcd_pdev[i]);
2854	return retval;
2855}
2856module_init(init);
2857
2858static void __exit cleanup(void)
2859{
2860	int i;
2861
2862	for (i = 0; i < mod_data.num; i++) {
2863		struct dummy *dum;
2864
2865		dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev));
2866
2867		platform_device_unregister(the_udc_pdev[i]);
2868		platform_device_unregister(the_hcd_pdev[i]);
2869		kfree(dum);
2870	}
2871	platform_driver_unregister(&dummy_udc_driver);
2872	platform_driver_unregister(&dummy_hcd_driver);
2873}
2874module_exit(cleanup);