Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

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