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