xref: /linux/drivers/usb/gadget/udc/dummy_hcd.c (revision a126eca844353360ebafa9088d22865cb8e022e3)
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 <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 
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), HRTIMER_MODE_REL);
1308 
1309  done:
1310 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1311 	return rc;
1312 }
1313 
1314 static int dummy_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1315 {
1316 	struct dummy_hcd *dum_hcd;
1317 	unsigned long	flags;
1318 	int		rc;
1319 
1320 	/* giveback happens automatically in timer callback,
1321 	 * so make sure the callback happens */
1322 	dum_hcd = hcd_to_dummy_hcd(hcd);
1323 	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
1324 
1325 	rc = usb_hcd_check_unlink_urb(hcd, urb, status);
1326 	if (!rc && dum_hcd->rh_state != DUMMY_RH_RUNNING &&
1327 			!list_empty(&dum_hcd->urbp_list))
1328 		hrtimer_start(&dum_hcd->timer, ns_to_ktime(0), HRTIMER_MODE_REL);
1329 
1330 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
1331 	return rc;
1332 }
1333 
1334 static int dummy_perform_transfer(struct urb *urb, struct dummy_request *req,
1335 		u32 len)
1336 {
1337 	void *ubuf, *rbuf;
1338 	struct urbp *urbp = urb->hcpriv;
1339 	int to_host;
1340 	struct sg_mapping_iter *miter = &urbp->miter;
1341 	u32 trans = 0;
1342 	u32 this_sg;
1343 	bool next_sg;
1344 
1345 	to_host = usb_urb_dir_in(urb);
1346 	rbuf = req->req.buf + req->req.actual;
1347 
1348 	if (!urb->num_sgs) {
1349 		ubuf = urb->transfer_buffer + urb->actual_length;
1350 		if (to_host)
1351 			memcpy(ubuf, rbuf, len);
1352 		else
1353 			memcpy(rbuf, ubuf, len);
1354 		return len;
1355 	}
1356 
1357 	if (!urbp->miter_started) {
1358 		u32 flags = SG_MITER_ATOMIC;
1359 
1360 		if (to_host)
1361 			flags |= SG_MITER_TO_SG;
1362 		else
1363 			flags |= SG_MITER_FROM_SG;
1364 
1365 		sg_miter_start(miter, urb->sg, urb->num_sgs, flags);
1366 		urbp->miter_started = 1;
1367 	}
1368 	next_sg = sg_miter_next(miter);
1369 	if (next_sg == false) {
1370 		WARN_ON_ONCE(1);
1371 		return -EINVAL;
1372 	}
1373 	do {
1374 		ubuf = miter->addr;
1375 		this_sg = min_t(u32, len, miter->length);
1376 		miter->consumed = this_sg;
1377 		trans += this_sg;
1378 
1379 		if (to_host)
1380 			memcpy(ubuf, rbuf, this_sg);
1381 		else
1382 			memcpy(rbuf, ubuf, this_sg);
1383 		len -= this_sg;
1384 
1385 		if (!len)
1386 			break;
1387 		next_sg = sg_miter_next(miter);
1388 		if (next_sg == false) {
1389 			WARN_ON_ONCE(1);
1390 			return -EINVAL;
1391 		}
1392 
1393 		rbuf += this_sg;
1394 	} while (1);
1395 
1396 	sg_miter_stop(miter);
1397 	return trans;
1398 }
1399 
1400 /* transfer up to a frame's worth; caller must own lock */
1401 static int transfer(struct dummy_hcd *dum_hcd, struct urb *urb,
1402 		struct dummy_ep *ep, int limit, int *status)
1403 {
1404 	struct dummy		*dum = dum_hcd->dum;
1405 	struct dummy_request	*req;
1406 	int			sent = 0;
1407 
1408 top:
1409 	/* if there's no request queued, the device is NAKing; return */
1410 	list_for_each_entry(req, &ep->queue, queue) {
1411 		unsigned	host_len, dev_len, len;
1412 		int		is_short, to_host;
1413 		int		rescan = 0;
1414 
1415 		if (dummy_ep_stream_en(dum_hcd, urb)) {
1416 			if ((urb->stream_id != req->req.stream_id))
1417 				continue;
1418 		}
1419 
1420 		/* 1..N packets of ep->ep.maxpacket each ... the last one
1421 		 * may be short (including zero length).
1422 		 *
1423 		 * writer can send a zlp explicitly (length 0) or implicitly
1424 		 * (length mod maxpacket zero, and 'zero' flag); they always
1425 		 * terminate reads.
1426 		 */
1427 		host_len = urb->transfer_buffer_length - urb->actual_length;
1428 		dev_len = req->req.length - req->req.actual;
1429 		len = min(host_len, dev_len);
1430 
1431 		/* FIXME update emulated data toggle too */
1432 
1433 		to_host = usb_urb_dir_in(urb);
1434 		if (unlikely(len == 0))
1435 			is_short = 1;
1436 		else {
1437 			/* not enough bandwidth left? */
1438 			if (limit < ep->ep.maxpacket && limit < len)
1439 				break;
1440 			len = min_t(unsigned, len, limit);
1441 			if (len == 0)
1442 				break;
1443 
1444 			/* send multiple of maxpacket first, then remainder */
1445 			if (len >= ep->ep.maxpacket) {
1446 				is_short = 0;
1447 				if (len % ep->ep.maxpacket)
1448 					rescan = 1;
1449 				len -= len % ep->ep.maxpacket;
1450 			} else {
1451 				is_short = 1;
1452 			}
1453 
1454 			len = dummy_perform_transfer(urb, req, len);
1455 
1456 			ep->last_io = jiffies;
1457 			if ((int)len < 0) {
1458 				req->req.status = len;
1459 			} else {
1460 				limit -= len;
1461 				sent += len;
1462 				urb->actual_length += len;
1463 				req->req.actual += len;
1464 			}
1465 		}
1466 
1467 		/* short packets terminate, maybe with overflow/underflow.
1468 		 * it's only really an error to write too much.
1469 		 *
1470 		 * partially filling a buffer optionally blocks queue advances
1471 		 * (so completion handlers can clean up the queue) but we don't
1472 		 * need to emulate such data-in-flight.
1473 		 */
1474 		if (is_short) {
1475 			if (host_len == dev_len) {
1476 				req->req.status = 0;
1477 				*status = 0;
1478 			} else if (to_host) {
1479 				req->req.status = 0;
1480 				if (dev_len > host_len)
1481 					*status = -EOVERFLOW;
1482 				else
1483 					*status = 0;
1484 			} else {
1485 				*status = 0;
1486 				if (host_len > dev_len)
1487 					req->req.status = -EOVERFLOW;
1488 				else
1489 					req->req.status = 0;
1490 			}
1491 
1492 		/*
1493 		 * many requests terminate without a short packet.
1494 		 * send a zlp if demanded by flags.
1495 		 */
1496 		} else {
1497 			if (req->req.length == req->req.actual) {
1498 				if (req->req.zero && to_host)
1499 					rescan = 1;
1500 				else
1501 					req->req.status = 0;
1502 			}
1503 			if (urb->transfer_buffer_length == urb->actual_length) {
1504 				if (urb->transfer_flags & URB_ZERO_PACKET &&
1505 				    !to_host)
1506 					rescan = 1;
1507 				else
1508 					*status = 0;
1509 			}
1510 		}
1511 
1512 		/* device side completion --> continuable */
1513 		if (req->req.status != -EINPROGRESS) {
1514 			list_del_init(&req->queue);
1515 
1516 			spin_unlock(&dum->lock);
1517 			usb_gadget_giveback_request(&ep->ep, &req->req);
1518 			spin_lock(&dum->lock);
1519 
1520 			/* requests might have been unlinked... */
1521 			rescan = 1;
1522 		}
1523 
1524 		/* host side completion --> terminate */
1525 		if (*status != -EINPROGRESS)
1526 			break;
1527 
1528 		/* rescan to continue with any other queued i/o */
1529 		if (rescan)
1530 			goto top;
1531 	}
1532 	return sent;
1533 }
1534 
1535 static int periodic_bytes(struct dummy *dum, struct dummy_ep *ep)
1536 {
1537 	int	limit = ep->ep.maxpacket;
1538 
1539 	if (dum->gadget.speed == USB_SPEED_HIGH) {
1540 		int	tmp;
1541 
1542 		/* high bandwidth mode */
1543 		tmp = usb_endpoint_maxp_mult(ep->desc);
1544 		tmp *= 8 /* applies to entire frame */;
1545 		limit += limit * tmp;
1546 	}
1547 	if (dum->gadget.speed == USB_SPEED_SUPER) {
1548 		switch (usb_endpoint_type(ep->desc)) {
1549 		case USB_ENDPOINT_XFER_ISOC:
1550 			/* Sec. 4.4.8.2 USB3.0 Spec */
1551 			limit = 3 * 16 * 1024 * 8;
1552 			break;
1553 		case USB_ENDPOINT_XFER_INT:
1554 			/* Sec. 4.4.7.2 USB3.0 Spec */
1555 			limit = 3 * 1024 * 8;
1556 			break;
1557 		case USB_ENDPOINT_XFER_BULK:
1558 		default:
1559 			break;
1560 		}
1561 	}
1562 	return limit;
1563 }
1564 
1565 #define is_active(dum_hcd)	((dum_hcd->port_status & \
1566 		(USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE | \
1567 			USB_PORT_STAT_SUSPEND)) \
1568 		== (USB_PORT_STAT_CONNECTION | USB_PORT_STAT_ENABLE))
1569 
1570 static struct dummy_ep *find_endpoint(struct dummy *dum, u8 address)
1571 {
1572 	int		i;
1573 
1574 	if (!is_active((dum->gadget.speed == USB_SPEED_SUPER ?
1575 			dum->ss_hcd : dum->hs_hcd)))
1576 		return NULL;
1577 	if (!dum->ints_enabled)
1578 		return NULL;
1579 	if ((address & ~USB_DIR_IN) == 0)
1580 		return &dum->ep[0];
1581 	for (i = 1; i < DUMMY_ENDPOINTS; i++) {
1582 		struct dummy_ep	*ep = &dum->ep[i];
1583 
1584 		if (!ep->desc)
1585 			continue;
1586 		if (ep->desc->bEndpointAddress == address)
1587 			return ep;
1588 	}
1589 	return NULL;
1590 }
1591 
1592 #undef is_active
1593 
1594 #define Dev_Request	(USB_TYPE_STANDARD | USB_RECIP_DEVICE)
1595 #define Dev_InRequest	(Dev_Request | USB_DIR_IN)
1596 #define Intf_Request	(USB_TYPE_STANDARD | USB_RECIP_INTERFACE)
1597 #define Intf_InRequest	(Intf_Request | USB_DIR_IN)
1598 #define Ep_Request	(USB_TYPE_STANDARD | USB_RECIP_ENDPOINT)
1599 #define Ep_InRequest	(Ep_Request | USB_DIR_IN)
1600 
1601 
1602 /**
1603  * handle_control_request() - handles all control transfers
1604  * @dum_hcd: pointer to dummy (the_controller)
1605  * @urb: the urb request to handle
1606  * @setup: pointer to the setup data for a USB device control
1607  *	 request
1608  * @status: pointer to request handling status
1609  *
1610  * Return 0 - if the request was handled
1611  *	  1 - if the request wasn't handles
1612  *	  error code on error
1613  */
1614 static int handle_control_request(struct dummy_hcd *dum_hcd, struct urb *urb,
1615 				  struct usb_ctrlrequest *setup,
1616 				  int *status)
1617 {
1618 	struct dummy_ep		*ep2;
1619 	struct dummy		*dum = dum_hcd->dum;
1620 	int			ret_val = 1;
1621 	unsigned	w_index;
1622 	unsigned	w_value;
1623 
1624 	w_index = le16_to_cpu(setup->wIndex);
1625 	w_value = le16_to_cpu(setup->wValue);
1626 	switch (setup->bRequest) {
1627 	case USB_REQ_SET_ADDRESS:
1628 		if (setup->bRequestType != Dev_Request)
1629 			break;
1630 		dum->address = w_value;
1631 		*status = 0;
1632 		dev_dbg(udc_dev(dum), "set_address = %d\n",
1633 				w_value);
1634 		ret_val = 0;
1635 		break;
1636 	case USB_REQ_SET_FEATURE:
1637 		if (setup->bRequestType == Dev_Request) {
1638 			ret_val = 0;
1639 			switch (w_value) {
1640 			case USB_DEVICE_REMOTE_WAKEUP:
1641 				break;
1642 			case USB_DEVICE_B_HNP_ENABLE:
1643 				dum->gadget.b_hnp_enable = 1;
1644 				break;
1645 			case USB_DEVICE_A_HNP_SUPPORT:
1646 				dum->gadget.a_hnp_support = 1;
1647 				break;
1648 			case USB_DEVICE_A_ALT_HNP_SUPPORT:
1649 				dum->gadget.a_alt_hnp_support = 1;
1650 				break;
1651 			case USB_DEVICE_U1_ENABLE:
1652 				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1653 				    HCD_USB3)
1654 					w_value = USB_DEV_STAT_U1_ENABLED;
1655 				else
1656 					ret_val = -EOPNOTSUPP;
1657 				break;
1658 			case USB_DEVICE_U2_ENABLE:
1659 				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1660 				    HCD_USB3)
1661 					w_value = USB_DEV_STAT_U2_ENABLED;
1662 				else
1663 					ret_val = -EOPNOTSUPP;
1664 				break;
1665 			case USB_DEVICE_LTM_ENABLE:
1666 				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1667 				    HCD_USB3)
1668 					w_value = USB_DEV_STAT_LTM_ENABLED;
1669 				else
1670 					ret_val = -EOPNOTSUPP;
1671 				break;
1672 			default:
1673 				ret_val = -EOPNOTSUPP;
1674 			}
1675 			if (ret_val == 0) {
1676 				dum->devstatus |= (1 << w_value);
1677 				*status = 0;
1678 			}
1679 		} else if (setup->bRequestType == Ep_Request) {
1680 			/* endpoint halt */
1681 			ep2 = find_endpoint(dum, w_index);
1682 			if (!ep2 || ep2->ep.name == ep0name) {
1683 				ret_val = -EOPNOTSUPP;
1684 				break;
1685 			}
1686 			ep2->halted = 1;
1687 			ret_val = 0;
1688 			*status = 0;
1689 		}
1690 		break;
1691 	case USB_REQ_CLEAR_FEATURE:
1692 		if (setup->bRequestType == Dev_Request) {
1693 			ret_val = 0;
1694 			switch (w_value) {
1695 			case USB_DEVICE_REMOTE_WAKEUP:
1696 				w_value = USB_DEVICE_REMOTE_WAKEUP;
1697 				break;
1698 			case USB_DEVICE_U1_ENABLE:
1699 				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1700 				    HCD_USB3)
1701 					w_value = USB_DEV_STAT_U1_ENABLED;
1702 				else
1703 					ret_val = -EOPNOTSUPP;
1704 				break;
1705 			case USB_DEVICE_U2_ENABLE:
1706 				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1707 				    HCD_USB3)
1708 					w_value = USB_DEV_STAT_U2_ENABLED;
1709 				else
1710 					ret_val = -EOPNOTSUPP;
1711 				break;
1712 			case USB_DEVICE_LTM_ENABLE:
1713 				if (dummy_hcd_to_hcd(dum_hcd)->speed ==
1714 				    HCD_USB3)
1715 					w_value = USB_DEV_STAT_LTM_ENABLED;
1716 				else
1717 					ret_val = -EOPNOTSUPP;
1718 				break;
1719 			default:
1720 				ret_val = -EOPNOTSUPP;
1721 				break;
1722 			}
1723 			if (ret_val == 0) {
1724 				dum->devstatus &= ~(1 << w_value);
1725 				*status = 0;
1726 			}
1727 		} else if (setup->bRequestType == Ep_Request) {
1728 			/* endpoint halt */
1729 			ep2 = find_endpoint(dum, w_index);
1730 			if (!ep2) {
1731 				ret_val = -EOPNOTSUPP;
1732 				break;
1733 			}
1734 			if (!ep2->wedged)
1735 				ep2->halted = 0;
1736 			ret_val = 0;
1737 			*status = 0;
1738 		}
1739 		break;
1740 	case USB_REQ_GET_STATUS:
1741 		if (setup->bRequestType == Dev_InRequest
1742 				|| setup->bRequestType == Intf_InRequest
1743 				|| setup->bRequestType == Ep_InRequest) {
1744 			char *buf;
1745 			/*
1746 			 * device: remote wakeup, selfpowered
1747 			 * interface: nothing
1748 			 * endpoint: halt
1749 			 */
1750 			buf = (char *)urb->transfer_buffer;
1751 			if (urb->transfer_buffer_length > 0) {
1752 				if (setup->bRequestType == Ep_InRequest) {
1753 					ep2 = find_endpoint(dum, w_index);
1754 					if (!ep2) {
1755 						ret_val = -EOPNOTSUPP;
1756 						break;
1757 					}
1758 					buf[0] = ep2->halted;
1759 				} else if (setup->bRequestType ==
1760 					   Dev_InRequest) {
1761 					buf[0] = (u8)dum->devstatus;
1762 				} else
1763 					buf[0] = 0;
1764 			}
1765 			if (urb->transfer_buffer_length > 1)
1766 				buf[1] = 0;
1767 			urb->actual_length = min_t(u32, 2,
1768 				urb->transfer_buffer_length);
1769 			ret_val = 0;
1770 			*status = 0;
1771 		}
1772 		break;
1773 	}
1774 	return ret_val;
1775 }
1776 
1777 /*
1778  * Drive both sides of the transfers; looks like irq handlers to both
1779  * drivers except that the callbacks are invoked from soft interrupt
1780  * context.
1781  */
1782 static enum hrtimer_restart dummy_timer(struct hrtimer *t)
1783 {
1784 	struct dummy_hcd	*dum_hcd = from_timer(dum_hcd, t, timer);
1785 	struct dummy		*dum = dum_hcd->dum;
1786 	struct urbp		*urbp, *tmp;
1787 	unsigned long		flags;
1788 	int			limit, total;
1789 	int			i;
1790 
1791 	/* simplistic model for one frame's bandwidth */
1792 	/* FIXME: account for transaction and packet overhead */
1793 	switch (dum->gadget.speed) {
1794 	case USB_SPEED_LOW:
1795 		total = 8/*bytes*/ * 12/*packets*/;
1796 		break;
1797 	case USB_SPEED_FULL:
1798 		total = 64/*bytes*/ * 19/*packets*/;
1799 		break;
1800 	case USB_SPEED_HIGH:
1801 		total = 512/*bytes*/ * 13/*packets*/ * 8/*uframes*/;
1802 		break;
1803 	case USB_SPEED_SUPER:
1804 		/* Bus speed is 500000 bytes/ms, so use a little less */
1805 		total = 490000;
1806 		break;
1807 	default:	/* Can't happen */
1808 		dev_err(dummy_dev(dum_hcd), "bogus device speed\n");
1809 		total = 0;
1810 		break;
1811 	}
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 HRTIMER_NORESTART;
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 
1830 restart:
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:
1969 treat_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 
1979 return_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 		hrtimer_start(&dum_hcd->timer, ns_to_ktime(DUMMY_TIMER_INT_NSECS), HRTIMER_MODE_REL);
1999 	}
2000 
2001 	spin_unlock_irqrestore(&dum->lock, flags);
2002 
2003 	return HRTIMER_NORESTART;
2004 }
2005 
2006 /*-------------------------------------------------------------------------*/
2007 
2008 #define PORT_C_MASK \
2009 	((USB_PORT_STAT_C_CONNECTION \
2010 	| USB_PORT_STAT_C_ENABLE \
2011 	| USB_PORT_STAT_C_SUSPEND \
2012 	| USB_PORT_STAT_C_OVERCURRENT \
2013 	| USB_PORT_STAT_C_RESET) << 16)
2014 
2015 static int dummy_hub_status(struct usb_hcd *hcd, char *buf)
2016 {
2017 	struct dummy_hcd	*dum_hcd;
2018 	unsigned long		flags;
2019 	int			retval = 0;
2020 
2021 	dum_hcd = hcd_to_dummy_hcd(hcd);
2022 
2023 	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2024 	if (!HCD_HW_ACCESSIBLE(hcd))
2025 		goto done;
2026 
2027 	if (dum_hcd->resuming && time_after_eq(jiffies, dum_hcd->re_timeout)) {
2028 		dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2029 		dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2030 		set_link_state(dum_hcd);
2031 	}
2032 
2033 	if ((dum_hcd->port_status & PORT_C_MASK) != 0) {
2034 		*buf = (1 << 1);
2035 		dev_dbg(dummy_dev(dum_hcd), "port status 0x%08x has changes\n",
2036 				dum_hcd->port_status);
2037 		retval = 1;
2038 		if (dum_hcd->rh_state == DUMMY_RH_SUSPENDED)
2039 			usb_hcd_resume_root_hub(hcd);
2040 	}
2041 done:
2042 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2043 	return retval;
2044 }
2045 
2046 /* usb 3.0 root hub device descriptor */
2047 static struct {
2048 	struct usb_bos_descriptor bos;
2049 	struct usb_ss_cap_descriptor ss_cap;
2050 } __packed usb3_bos_desc = {
2051 
2052 	.bos = {
2053 		.bLength		= USB_DT_BOS_SIZE,
2054 		.bDescriptorType	= USB_DT_BOS,
2055 		.wTotalLength		= cpu_to_le16(sizeof(usb3_bos_desc)),
2056 		.bNumDeviceCaps		= 1,
2057 	},
2058 	.ss_cap = {
2059 		.bLength		= USB_DT_USB_SS_CAP_SIZE,
2060 		.bDescriptorType	= USB_DT_DEVICE_CAPABILITY,
2061 		.bDevCapabilityType	= USB_SS_CAP_TYPE,
2062 		.wSpeedSupported	= cpu_to_le16(USB_5GBPS_OPERATION),
2063 		.bFunctionalitySupport	= ilog2(USB_5GBPS_OPERATION),
2064 	},
2065 };
2066 
2067 static inline void
2068 ss_hub_descriptor(struct usb_hub_descriptor *desc)
2069 {
2070 	memset(desc, 0, sizeof *desc);
2071 	desc->bDescriptorType = USB_DT_SS_HUB;
2072 	desc->bDescLength = 12;
2073 	desc->wHubCharacteristics = cpu_to_le16(
2074 			HUB_CHAR_INDV_PORT_LPSM |
2075 			HUB_CHAR_COMMON_OCPM);
2076 	desc->bNbrPorts = 1;
2077 	desc->u.ss.bHubHdrDecLat = 0x04; /* Worst case: 0.4 micro sec*/
2078 	desc->u.ss.DeviceRemovable = 0;
2079 }
2080 
2081 static inline void hub_descriptor(struct usb_hub_descriptor *desc)
2082 {
2083 	memset(desc, 0, sizeof *desc);
2084 	desc->bDescriptorType = USB_DT_HUB;
2085 	desc->bDescLength = 9;
2086 	desc->wHubCharacteristics = cpu_to_le16(
2087 			HUB_CHAR_INDV_PORT_LPSM |
2088 			HUB_CHAR_COMMON_OCPM);
2089 	desc->bNbrPorts = 1;
2090 	desc->u.hs.DeviceRemovable[0] = 0;
2091 	desc->u.hs.DeviceRemovable[1] = 0xff;	/* PortPwrCtrlMask */
2092 }
2093 
2094 static int dummy_hub_control(
2095 	struct usb_hcd	*hcd,
2096 	u16		typeReq,
2097 	u16		wValue,
2098 	u16		wIndex,
2099 	char		*buf,
2100 	u16		wLength
2101 ) {
2102 	struct dummy_hcd *dum_hcd;
2103 	int		retval = 0;
2104 	unsigned long	flags;
2105 
2106 	if (!HCD_HW_ACCESSIBLE(hcd))
2107 		return -ETIMEDOUT;
2108 
2109 	dum_hcd = hcd_to_dummy_hcd(hcd);
2110 
2111 	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2112 	switch (typeReq) {
2113 	case ClearHubFeature:
2114 		break;
2115 	case ClearPortFeature:
2116 		switch (wValue) {
2117 		case USB_PORT_FEAT_SUSPEND:
2118 			if (hcd->speed == HCD_USB3) {
2119 				dev_dbg(dummy_dev(dum_hcd),
2120 					 "USB_PORT_FEAT_SUSPEND req not "
2121 					 "supported for USB 3.0 roothub\n");
2122 				goto error;
2123 			}
2124 			if (dum_hcd->port_status & USB_PORT_STAT_SUSPEND) {
2125 				/* 20msec resume signaling */
2126 				dum_hcd->resuming = 1;
2127 				dum_hcd->re_timeout = jiffies +
2128 						msecs_to_jiffies(20);
2129 			}
2130 			break;
2131 		case USB_PORT_FEAT_POWER:
2132 			dev_dbg(dummy_dev(dum_hcd), "power-off\n");
2133 			if (hcd->speed == HCD_USB3)
2134 				dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
2135 			else
2136 				dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
2137 			set_link_state(dum_hcd);
2138 			break;
2139 		case USB_PORT_FEAT_ENABLE:
2140 		case USB_PORT_FEAT_C_ENABLE:
2141 		case USB_PORT_FEAT_C_SUSPEND:
2142 			/* Not allowed for USB-3 */
2143 			if (hcd->speed == HCD_USB3)
2144 				goto error;
2145 			fallthrough;
2146 		case USB_PORT_FEAT_C_CONNECTION:
2147 		case USB_PORT_FEAT_C_RESET:
2148 			dum_hcd->port_status &= ~(1 << wValue);
2149 			set_link_state(dum_hcd);
2150 			break;
2151 		default:
2152 		/* Disallow INDICATOR and C_OVER_CURRENT */
2153 			goto error;
2154 		}
2155 		break;
2156 	case GetHubDescriptor:
2157 		if (hcd->speed == HCD_USB3 &&
2158 				(wLength < USB_DT_SS_HUB_SIZE ||
2159 				 wValue != (USB_DT_SS_HUB << 8))) {
2160 			dev_dbg(dummy_dev(dum_hcd),
2161 				"Wrong hub descriptor type for "
2162 				"USB 3.0 roothub.\n");
2163 			goto error;
2164 		}
2165 		if (hcd->speed == HCD_USB3)
2166 			ss_hub_descriptor((struct usb_hub_descriptor *) buf);
2167 		else
2168 			hub_descriptor((struct usb_hub_descriptor *) buf);
2169 		break;
2170 
2171 	case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
2172 		if (hcd->speed != HCD_USB3)
2173 			goto error;
2174 
2175 		if ((wValue >> 8) != USB_DT_BOS)
2176 			goto error;
2177 
2178 		memcpy(buf, &usb3_bos_desc, sizeof(usb3_bos_desc));
2179 		retval = sizeof(usb3_bos_desc);
2180 		break;
2181 
2182 	case GetHubStatus:
2183 		*(__le32 *) buf = cpu_to_le32(0);
2184 		break;
2185 	case GetPortStatus:
2186 		if (wIndex != 1)
2187 			retval = -EPIPE;
2188 
2189 		/* whoever resets or resumes must GetPortStatus to
2190 		 * complete it!!
2191 		 */
2192 		if (dum_hcd->resuming &&
2193 				time_after_eq(jiffies, dum_hcd->re_timeout)) {
2194 			dum_hcd->port_status |= (USB_PORT_STAT_C_SUSPEND << 16);
2195 			dum_hcd->port_status &= ~USB_PORT_STAT_SUSPEND;
2196 		}
2197 		if ((dum_hcd->port_status & USB_PORT_STAT_RESET) != 0 &&
2198 				time_after_eq(jiffies, dum_hcd->re_timeout)) {
2199 			dum_hcd->port_status |= (USB_PORT_STAT_C_RESET << 16);
2200 			dum_hcd->port_status &= ~USB_PORT_STAT_RESET;
2201 			if (dum_hcd->dum->pullup) {
2202 				dum_hcd->port_status |= USB_PORT_STAT_ENABLE;
2203 
2204 				if (hcd->speed < HCD_USB3) {
2205 					switch (dum_hcd->dum->gadget.speed) {
2206 					case USB_SPEED_HIGH:
2207 						dum_hcd->port_status |=
2208 						      USB_PORT_STAT_HIGH_SPEED;
2209 						break;
2210 					case USB_SPEED_LOW:
2211 						dum_hcd->dum->gadget.ep0->
2212 							maxpacket = 8;
2213 						dum_hcd->port_status |=
2214 							USB_PORT_STAT_LOW_SPEED;
2215 						break;
2216 					default:
2217 						break;
2218 					}
2219 				}
2220 			}
2221 		}
2222 		set_link_state(dum_hcd);
2223 		((__le16 *) buf)[0] = cpu_to_le16(dum_hcd->port_status);
2224 		((__le16 *) buf)[1] = cpu_to_le16(dum_hcd->port_status >> 16);
2225 		break;
2226 	case SetHubFeature:
2227 		retval = -EPIPE;
2228 		break;
2229 	case SetPortFeature:
2230 		switch (wValue) {
2231 		case USB_PORT_FEAT_LINK_STATE:
2232 			if (hcd->speed != HCD_USB3) {
2233 				dev_dbg(dummy_dev(dum_hcd),
2234 					 "USB_PORT_FEAT_LINK_STATE req not "
2235 					 "supported for USB 2.0 roothub\n");
2236 				goto error;
2237 			}
2238 			/*
2239 			 * Since this is dummy we don't have an actual link so
2240 			 * there is nothing to do for the SET_LINK_STATE cmd
2241 			 */
2242 			break;
2243 		case USB_PORT_FEAT_U1_TIMEOUT:
2244 		case USB_PORT_FEAT_U2_TIMEOUT:
2245 			/* TODO: add suspend/resume support! */
2246 			if (hcd->speed != HCD_USB3) {
2247 				dev_dbg(dummy_dev(dum_hcd),
2248 					 "USB_PORT_FEAT_U1/2_TIMEOUT req not "
2249 					 "supported for USB 2.0 roothub\n");
2250 				goto error;
2251 			}
2252 			break;
2253 		case USB_PORT_FEAT_SUSPEND:
2254 			/* Applicable only for USB2.0 hub */
2255 			if (hcd->speed == HCD_USB3) {
2256 				dev_dbg(dummy_dev(dum_hcd),
2257 					 "USB_PORT_FEAT_SUSPEND req not "
2258 					 "supported for USB 3.0 roothub\n");
2259 				goto error;
2260 			}
2261 			if (dum_hcd->active) {
2262 				dum_hcd->port_status |= USB_PORT_STAT_SUSPEND;
2263 
2264 				/* HNP would happen here; for now we
2265 				 * assume b_bus_req is always true.
2266 				 */
2267 				set_link_state(dum_hcd);
2268 				if (((1 << USB_DEVICE_B_HNP_ENABLE)
2269 						& dum_hcd->dum->devstatus) != 0)
2270 					dev_dbg(dummy_dev(dum_hcd),
2271 							"no HNP yet!\n");
2272 			}
2273 			break;
2274 		case USB_PORT_FEAT_POWER:
2275 			if (hcd->speed == HCD_USB3)
2276 				dum_hcd->port_status |= USB_SS_PORT_STAT_POWER;
2277 			else
2278 				dum_hcd->port_status |= USB_PORT_STAT_POWER;
2279 			set_link_state(dum_hcd);
2280 			break;
2281 		case USB_PORT_FEAT_BH_PORT_RESET:
2282 			/* Applicable only for USB3.0 hub */
2283 			if (hcd->speed != HCD_USB3) {
2284 				dev_dbg(dummy_dev(dum_hcd),
2285 					 "USB_PORT_FEAT_BH_PORT_RESET req not "
2286 					 "supported for USB 2.0 roothub\n");
2287 				goto error;
2288 			}
2289 			fallthrough;
2290 		case USB_PORT_FEAT_RESET:
2291 			if (!(dum_hcd->port_status & USB_PORT_STAT_CONNECTION))
2292 				break;
2293 			/* if it's already enabled, disable */
2294 			if (hcd->speed == HCD_USB3) {
2295 				dum_hcd->port_status =
2296 					(USB_SS_PORT_STAT_POWER |
2297 					 USB_PORT_STAT_CONNECTION |
2298 					 USB_PORT_STAT_RESET);
2299 			} else {
2300 				dum_hcd->port_status &= ~(USB_PORT_STAT_ENABLE
2301 					| USB_PORT_STAT_LOW_SPEED
2302 					| USB_PORT_STAT_HIGH_SPEED);
2303 				dum_hcd->port_status |= USB_PORT_STAT_RESET;
2304 			}
2305 			/*
2306 			 * We want to reset device status. All but the
2307 			 * Self powered feature
2308 			 */
2309 			dum_hcd->dum->devstatus &=
2310 				(1 << USB_DEVICE_SELF_POWERED);
2311 			/*
2312 			 * FIXME USB3.0: what is the correct reset signaling
2313 			 * interval? Is it still 50msec as for HS?
2314 			 */
2315 			dum_hcd->re_timeout = jiffies + msecs_to_jiffies(50);
2316 			set_link_state(dum_hcd);
2317 			break;
2318 		case USB_PORT_FEAT_C_CONNECTION:
2319 		case USB_PORT_FEAT_C_RESET:
2320 		case USB_PORT_FEAT_C_ENABLE:
2321 		case USB_PORT_FEAT_C_SUSPEND:
2322 			/* Not allowed for USB-3, and ignored for USB-2 */
2323 			if (hcd->speed == HCD_USB3)
2324 				goto error;
2325 			break;
2326 		default:
2327 		/* Disallow TEST, INDICATOR, and C_OVER_CURRENT */
2328 			goto error;
2329 		}
2330 		break;
2331 	case GetPortErrorCount:
2332 		if (hcd->speed != HCD_USB3) {
2333 			dev_dbg(dummy_dev(dum_hcd),
2334 				 "GetPortErrorCount req not "
2335 				 "supported for USB 2.0 roothub\n");
2336 			goto error;
2337 		}
2338 		/* We'll always return 0 since this is a dummy hub */
2339 		*(__le32 *) buf = cpu_to_le32(0);
2340 		break;
2341 	case SetHubDepth:
2342 		if (hcd->speed != HCD_USB3) {
2343 			dev_dbg(dummy_dev(dum_hcd),
2344 				 "SetHubDepth req not supported for "
2345 				 "USB 2.0 roothub\n");
2346 			goto error;
2347 		}
2348 		break;
2349 	default:
2350 		dev_dbg(dummy_dev(dum_hcd),
2351 			"hub control req%04x v%04x i%04x l%d\n",
2352 			typeReq, wValue, wIndex, wLength);
2353 error:
2354 		/* "protocol stall" on error */
2355 		retval = -EPIPE;
2356 	}
2357 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2358 
2359 	if ((dum_hcd->port_status & PORT_C_MASK) != 0)
2360 		usb_hcd_poll_rh_status(hcd);
2361 	return retval;
2362 }
2363 
2364 static int dummy_bus_suspend(struct usb_hcd *hcd)
2365 {
2366 	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2367 
2368 	dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2369 
2370 	spin_lock_irq(&dum_hcd->dum->lock);
2371 	dum_hcd->rh_state = DUMMY_RH_SUSPENDED;
2372 	set_link_state(dum_hcd);
2373 	hcd->state = HC_STATE_SUSPENDED;
2374 	spin_unlock_irq(&dum_hcd->dum->lock);
2375 	return 0;
2376 }
2377 
2378 static int dummy_bus_resume(struct usb_hcd *hcd)
2379 {
2380 	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2381 	int rc = 0;
2382 
2383 	dev_dbg(&hcd->self.root_hub->dev, "%s\n", __func__);
2384 
2385 	spin_lock_irq(&dum_hcd->dum->lock);
2386 	if (!HCD_HW_ACCESSIBLE(hcd)) {
2387 		rc = -ESHUTDOWN;
2388 	} else {
2389 		dum_hcd->rh_state = DUMMY_RH_RUNNING;
2390 		set_link_state(dum_hcd);
2391 		if (!list_empty(&dum_hcd->urbp_list))
2392 			hrtimer_start(&dum_hcd->timer, ns_to_ktime(0), HRTIMER_MODE_REL);
2393 		hcd->state = HC_STATE_RUNNING;
2394 	}
2395 	spin_unlock_irq(&dum_hcd->dum->lock);
2396 	return rc;
2397 }
2398 
2399 /*-------------------------------------------------------------------------*/
2400 
2401 static inline ssize_t show_urb(char *buf, size_t size, struct urb *urb)
2402 {
2403 	int ep = usb_pipeendpoint(urb->pipe);
2404 
2405 	return scnprintf(buf, size,
2406 		"urb/%p %s ep%d%s%s len %d/%d\n",
2407 		urb,
2408 		({ char *s;
2409 		switch (urb->dev->speed) {
2410 		case USB_SPEED_LOW:
2411 			s = "ls";
2412 			break;
2413 		case USB_SPEED_FULL:
2414 			s = "fs";
2415 			break;
2416 		case USB_SPEED_HIGH:
2417 			s = "hs";
2418 			break;
2419 		case USB_SPEED_SUPER:
2420 			s = "ss";
2421 			break;
2422 		default:
2423 			s = "?";
2424 			break;
2425 		 } s; }),
2426 		ep, ep ? (usb_urb_dir_in(urb) ? "in" : "out") : "",
2427 		({ char *s; \
2428 		switch (usb_pipetype(urb->pipe)) { \
2429 		case PIPE_CONTROL: \
2430 			s = ""; \
2431 			break; \
2432 		case PIPE_BULK: \
2433 			s = "-bulk"; \
2434 			break; \
2435 		case PIPE_INTERRUPT: \
2436 			s = "-int"; \
2437 			break; \
2438 		default: \
2439 			s = "-iso"; \
2440 			break; \
2441 		} s; }),
2442 		urb->actual_length, urb->transfer_buffer_length);
2443 }
2444 
2445 static ssize_t urbs_show(struct device *dev, struct device_attribute *attr,
2446 		char *buf)
2447 {
2448 	struct usb_hcd		*hcd = dev_get_drvdata(dev);
2449 	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2450 	struct urbp		*urbp;
2451 	size_t			size = 0;
2452 	unsigned long		flags;
2453 
2454 	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2455 	list_for_each_entry(urbp, &dum_hcd->urbp_list, urbp_list) {
2456 		size_t		temp;
2457 
2458 		temp = show_urb(buf, PAGE_SIZE - size, urbp->urb);
2459 		buf += temp;
2460 		size += temp;
2461 	}
2462 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2463 
2464 	return size;
2465 }
2466 static DEVICE_ATTR_RO(urbs);
2467 
2468 static int dummy_start_ss(struct dummy_hcd *dum_hcd)
2469 {
2470 	hrtimer_init(&dum_hcd->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2471 	dum_hcd->timer.function = dummy_timer;
2472 	dum_hcd->rh_state = DUMMY_RH_RUNNING;
2473 	dum_hcd->stream_en_ep = 0;
2474 	INIT_LIST_HEAD(&dum_hcd->urbp_list);
2475 	dummy_hcd_to_hcd(dum_hcd)->power_budget = POWER_BUDGET_3;
2476 	dummy_hcd_to_hcd(dum_hcd)->state = HC_STATE_RUNNING;
2477 	dummy_hcd_to_hcd(dum_hcd)->uses_new_polling = 1;
2478 #ifdef CONFIG_USB_OTG
2479 	dummy_hcd_to_hcd(dum_hcd)->self.otg_port = 1;
2480 #endif
2481 	return 0;
2482 
2483 	/* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2484 	return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2485 }
2486 
2487 static int dummy_start(struct usb_hcd *hcd)
2488 {
2489 	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2490 
2491 	/*
2492 	 * HOST side init ... we emulate a root hub that'll only ever
2493 	 * talk to one device (the gadget side).  Also appears in sysfs,
2494 	 * just like more familiar pci-based HCDs.
2495 	 */
2496 	if (!usb_hcd_is_primary_hcd(hcd))
2497 		return dummy_start_ss(dum_hcd);
2498 
2499 	spin_lock_init(&dum_hcd->dum->lock);
2500 	hrtimer_init(&dum_hcd->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
2501 	dum_hcd->timer.function = dummy_timer;
2502 	dum_hcd->rh_state = DUMMY_RH_RUNNING;
2503 
2504 	INIT_LIST_HEAD(&dum_hcd->urbp_list);
2505 
2506 	hcd->power_budget = POWER_BUDGET;
2507 	hcd->state = HC_STATE_RUNNING;
2508 	hcd->uses_new_polling = 1;
2509 
2510 #ifdef CONFIG_USB_OTG
2511 	hcd->self.otg_port = 1;
2512 #endif
2513 
2514 	/* FIXME 'urbs' should be a per-device thing, maybe in usbcore */
2515 	return device_create_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2516 }
2517 
2518 static void dummy_stop(struct usb_hcd *hcd)
2519 {
2520 	struct dummy_hcd	*dum_hcd = hcd_to_dummy_hcd(hcd);
2521 
2522 	hrtimer_cancel(&dum_hcd->timer);
2523 	device_remove_file(dummy_dev(dum_hcd), &dev_attr_urbs);
2524 	dev_info(dummy_dev(dum_hcd), "stopped\n");
2525 }
2526 
2527 /*-------------------------------------------------------------------------*/
2528 
2529 static int dummy_h_get_frame(struct usb_hcd *hcd)
2530 {
2531 	return dummy_g_get_frame(NULL);
2532 }
2533 
2534 static int dummy_setup(struct usb_hcd *hcd)
2535 {
2536 	struct dummy *dum;
2537 
2538 	dum = *((void **)dev_get_platdata(hcd->self.controller));
2539 	hcd->self.sg_tablesize = ~0;
2540 	if (usb_hcd_is_primary_hcd(hcd)) {
2541 		dum->hs_hcd = hcd_to_dummy_hcd(hcd);
2542 		dum->hs_hcd->dum = dum;
2543 		/*
2544 		 * Mark the first roothub as being USB 2.0.
2545 		 * The USB 3.0 roothub will be registered later by
2546 		 * dummy_hcd_probe()
2547 		 */
2548 		hcd->speed = HCD_USB2;
2549 		hcd->self.root_hub->speed = USB_SPEED_HIGH;
2550 	} else {
2551 		dum->ss_hcd = hcd_to_dummy_hcd(hcd);
2552 		dum->ss_hcd->dum = dum;
2553 		hcd->speed = HCD_USB3;
2554 		hcd->self.root_hub->speed = USB_SPEED_SUPER;
2555 	}
2556 	return 0;
2557 }
2558 
2559 /* Change a group of bulk endpoints to support multiple stream IDs */
2560 static int dummy_alloc_streams(struct usb_hcd *hcd, struct usb_device *udev,
2561 	struct usb_host_endpoint **eps, unsigned int num_eps,
2562 	unsigned int num_streams, gfp_t mem_flags)
2563 {
2564 	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2565 	unsigned long flags;
2566 	int max_stream;
2567 	int ret_streams = num_streams;
2568 	unsigned int index;
2569 	unsigned int i;
2570 
2571 	if (!num_eps)
2572 		return -EINVAL;
2573 
2574 	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2575 	for (i = 0; i < num_eps; i++) {
2576 		index = dummy_get_ep_idx(&eps[i]->desc);
2577 		if ((1 << index) & dum_hcd->stream_en_ep) {
2578 			ret_streams = -EINVAL;
2579 			goto out;
2580 		}
2581 		max_stream = usb_ss_max_streams(&eps[i]->ss_ep_comp);
2582 		if (!max_stream) {
2583 			ret_streams = -EINVAL;
2584 			goto out;
2585 		}
2586 		if (max_stream < ret_streams) {
2587 			dev_dbg(dummy_dev(dum_hcd), "Ep 0x%x only supports %u "
2588 					"stream IDs.\n",
2589 					eps[i]->desc.bEndpointAddress,
2590 					max_stream);
2591 			ret_streams = max_stream;
2592 		}
2593 	}
2594 
2595 	for (i = 0; i < num_eps; i++) {
2596 		index = dummy_get_ep_idx(&eps[i]->desc);
2597 		dum_hcd->stream_en_ep |= 1 << index;
2598 		set_max_streams_for_pipe(dum_hcd,
2599 				usb_endpoint_num(&eps[i]->desc), ret_streams);
2600 	}
2601 out:
2602 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2603 	return ret_streams;
2604 }
2605 
2606 /* Reverts a group of bulk endpoints back to not using stream IDs. */
2607 static int dummy_free_streams(struct usb_hcd *hcd, struct usb_device *udev,
2608 	struct usb_host_endpoint **eps, unsigned int num_eps,
2609 	gfp_t mem_flags)
2610 {
2611 	struct dummy_hcd *dum_hcd = hcd_to_dummy_hcd(hcd);
2612 	unsigned long flags;
2613 	int ret;
2614 	unsigned int index;
2615 	unsigned int i;
2616 
2617 	spin_lock_irqsave(&dum_hcd->dum->lock, flags);
2618 	for (i = 0; i < num_eps; i++) {
2619 		index = dummy_get_ep_idx(&eps[i]->desc);
2620 		if (!((1 << index) & dum_hcd->stream_en_ep)) {
2621 			ret = -EINVAL;
2622 			goto out;
2623 		}
2624 	}
2625 
2626 	for (i = 0; i < num_eps; i++) {
2627 		index = dummy_get_ep_idx(&eps[i]->desc);
2628 		dum_hcd->stream_en_ep &= ~(1 << index);
2629 		set_max_streams_for_pipe(dum_hcd,
2630 				usb_endpoint_num(&eps[i]->desc), 0);
2631 	}
2632 	ret = 0;
2633 out:
2634 	spin_unlock_irqrestore(&dum_hcd->dum->lock, flags);
2635 	return ret;
2636 }
2637 
2638 static struct hc_driver dummy_hcd = {
2639 	.description =		(char *) driver_name,
2640 	.product_desc =		"Dummy host controller",
2641 	.hcd_priv_size =	sizeof(struct dummy_hcd),
2642 
2643 	.reset =		dummy_setup,
2644 	.start =		dummy_start,
2645 	.stop =			dummy_stop,
2646 
2647 	.urb_enqueue =		dummy_urb_enqueue,
2648 	.urb_dequeue =		dummy_urb_dequeue,
2649 
2650 	.get_frame_number =	dummy_h_get_frame,
2651 
2652 	.hub_status_data =	dummy_hub_status,
2653 	.hub_control =		dummy_hub_control,
2654 	.bus_suspend =		dummy_bus_suspend,
2655 	.bus_resume =		dummy_bus_resume,
2656 
2657 	.alloc_streams =	dummy_alloc_streams,
2658 	.free_streams =		dummy_free_streams,
2659 };
2660 
2661 static int dummy_hcd_probe(struct platform_device *pdev)
2662 {
2663 	struct dummy		*dum;
2664 	struct usb_hcd		*hs_hcd;
2665 	struct usb_hcd		*ss_hcd;
2666 	int			retval;
2667 
2668 	dev_info(&pdev->dev, "%s, driver " DRIVER_VERSION "\n", driver_desc);
2669 	dum = *((void **)dev_get_platdata(&pdev->dev));
2670 
2671 	if (mod_data.is_super_speed)
2672 		dummy_hcd.flags = HCD_USB3 | HCD_SHARED;
2673 	else if (mod_data.is_high_speed)
2674 		dummy_hcd.flags = HCD_USB2;
2675 	else
2676 		dummy_hcd.flags = HCD_USB11;
2677 	hs_hcd = usb_create_hcd(&dummy_hcd, &pdev->dev, dev_name(&pdev->dev));
2678 	if (!hs_hcd)
2679 		return -ENOMEM;
2680 	hs_hcd->has_tt = 1;
2681 
2682 	retval = usb_add_hcd(hs_hcd, 0, 0);
2683 	if (retval)
2684 		goto put_usb2_hcd;
2685 
2686 	if (mod_data.is_super_speed) {
2687 		ss_hcd = usb_create_shared_hcd(&dummy_hcd, &pdev->dev,
2688 					dev_name(&pdev->dev), hs_hcd);
2689 		if (!ss_hcd) {
2690 			retval = -ENOMEM;
2691 			goto dealloc_usb2_hcd;
2692 		}
2693 
2694 		retval = usb_add_hcd(ss_hcd, 0, 0);
2695 		if (retval)
2696 			goto put_usb3_hcd;
2697 	}
2698 	return 0;
2699 
2700 put_usb3_hcd:
2701 	usb_put_hcd(ss_hcd);
2702 dealloc_usb2_hcd:
2703 	usb_remove_hcd(hs_hcd);
2704 put_usb2_hcd:
2705 	usb_put_hcd(hs_hcd);
2706 	dum->hs_hcd = dum->ss_hcd = NULL;
2707 	return retval;
2708 }
2709 
2710 static void dummy_hcd_remove(struct platform_device *pdev)
2711 {
2712 	struct dummy		*dum;
2713 
2714 	dum = hcd_to_dummy_hcd(platform_get_drvdata(pdev))->dum;
2715 
2716 	if (dum->ss_hcd) {
2717 		usb_remove_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2718 		usb_put_hcd(dummy_hcd_to_hcd(dum->ss_hcd));
2719 	}
2720 
2721 	usb_remove_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2722 	usb_put_hcd(dummy_hcd_to_hcd(dum->hs_hcd));
2723 
2724 	dum->hs_hcd = NULL;
2725 	dum->ss_hcd = NULL;
2726 }
2727 
2728 static int dummy_hcd_suspend(struct platform_device *pdev, pm_message_t state)
2729 {
2730 	struct usb_hcd		*hcd;
2731 	struct dummy_hcd	*dum_hcd;
2732 	int			rc = 0;
2733 
2734 	dev_dbg(&pdev->dev, "%s\n", __func__);
2735 
2736 	hcd = platform_get_drvdata(pdev);
2737 	dum_hcd = hcd_to_dummy_hcd(hcd);
2738 	if (dum_hcd->rh_state == DUMMY_RH_RUNNING) {
2739 		dev_warn(&pdev->dev, "Root hub isn't suspended!\n");
2740 		rc = -EBUSY;
2741 	} else
2742 		clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2743 	return rc;
2744 }
2745 
2746 static int dummy_hcd_resume(struct platform_device *pdev)
2747 {
2748 	struct usb_hcd		*hcd;
2749 
2750 	dev_dbg(&pdev->dev, "%s\n", __func__);
2751 
2752 	hcd = platform_get_drvdata(pdev);
2753 	set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
2754 	usb_hcd_poll_rh_status(hcd);
2755 	return 0;
2756 }
2757 
2758 static struct platform_driver dummy_hcd_driver = {
2759 	.probe		= dummy_hcd_probe,
2760 	.remove_new	= dummy_hcd_remove,
2761 	.suspend	= dummy_hcd_suspend,
2762 	.resume		= dummy_hcd_resume,
2763 	.driver		= {
2764 		.name	= driver_name,
2765 	},
2766 };
2767 
2768 /*-------------------------------------------------------------------------*/
2769 #define MAX_NUM_UDC	32
2770 static struct platform_device *the_udc_pdev[MAX_NUM_UDC];
2771 static struct platform_device *the_hcd_pdev[MAX_NUM_UDC];
2772 
2773 static int __init dummy_hcd_init(void)
2774 {
2775 	int	retval = -ENOMEM;
2776 	int	i;
2777 	struct	dummy *dum[MAX_NUM_UDC] = {};
2778 
2779 	if (usb_disabled())
2780 		return -ENODEV;
2781 
2782 	if (!mod_data.is_high_speed && mod_data.is_super_speed)
2783 		return -EINVAL;
2784 
2785 	if (mod_data.num < 1 || mod_data.num > MAX_NUM_UDC) {
2786 		pr_err("Number of emulated UDC must be in range of 1...%d\n",
2787 				MAX_NUM_UDC);
2788 		return -EINVAL;
2789 	}
2790 
2791 	for (i = 0; i < mod_data.num; i++) {
2792 		the_hcd_pdev[i] = platform_device_alloc(driver_name, i);
2793 		if (!the_hcd_pdev[i]) {
2794 			i--;
2795 			while (i >= 0)
2796 				platform_device_put(the_hcd_pdev[i--]);
2797 			return retval;
2798 		}
2799 	}
2800 	for (i = 0; i < mod_data.num; i++) {
2801 		the_udc_pdev[i] = platform_device_alloc(gadget_name, i);
2802 		if (!the_udc_pdev[i]) {
2803 			i--;
2804 			while (i >= 0)
2805 				platform_device_put(the_udc_pdev[i--]);
2806 			goto err_alloc_udc;
2807 		}
2808 	}
2809 	for (i = 0; i < mod_data.num; i++) {
2810 		dum[i] = kzalloc(sizeof(struct dummy), GFP_KERNEL);
2811 		if (!dum[i]) {
2812 			retval = -ENOMEM;
2813 			goto err_add_pdata;
2814 		}
2815 		retval = platform_device_add_data(the_hcd_pdev[i], &dum[i],
2816 				sizeof(void *));
2817 		if (retval)
2818 			goto err_add_pdata;
2819 		retval = platform_device_add_data(the_udc_pdev[i], &dum[i],
2820 				sizeof(void *));
2821 		if (retval)
2822 			goto err_add_pdata;
2823 	}
2824 
2825 	retval = platform_driver_register(&dummy_hcd_driver);
2826 	if (retval < 0)
2827 		goto err_add_pdata;
2828 	retval = platform_driver_register(&dummy_udc_driver);
2829 	if (retval < 0)
2830 		goto err_register_udc_driver;
2831 
2832 	for (i = 0; i < mod_data.num; i++) {
2833 		retval = platform_device_add(the_hcd_pdev[i]);
2834 		if (retval < 0) {
2835 			i--;
2836 			while (i >= 0)
2837 				platform_device_del(the_hcd_pdev[i--]);
2838 			goto err_add_hcd;
2839 		}
2840 	}
2841 	for (i = 0; i < mod_data.num; i++) {
2842 		if (!dum[i]->hs_hcd ||
2843 				(!dum[i]->ss_hcd && mod_data.is_super_speed)) {
2844 			/*
2845 			 * The hcd was added successfully but its probe
2846 			 * function failed for some reason.
2847 			 */
2848 			retval = -EINVAL;
2849 			goto err_add_udc;
2850 		}
2851 	}
2852 
2853 	for (i = 0; i < mod_data.num; i++) {
2854 		retval = platform_device_add(the_udc_pdev[i]);
2855 		if (retval < 0) {
2856 			i--;
2857 			while (i >= 0)
2858 				platform_device_del(the_udc_pdev[i--]);
2859 			goto err_add_udc;
2860 		}
2861 	}
2862 
2863 	for (i = 0; i < mod_data.num; i++) {
2864 		if (!platform_get_drvdata(the_udc_pdev[i])) {
2865 			/*
2866 			 * The udc was added successfully but its probe
2867 			 * function failed for some reason.
2868 			 */
2869 			retval = -EINVAL;
2870 			goto err_probe_udc;
2871 		}
2872 	}
2873 	return retval;
2874 
2875 err_probe_udc:
2876 	for (i = 0; i < mod_data.num; i++)
2877 		platform_device_del(the_udc_pdev[i]);
2878 err_add_udc:
2879 	for (i = 0; i < mod_data.num; i++)
2880 		platform_device_del(the_hcd_pdev[i]);
2881 err_add_hcd:
2882 	platform_driver_unregister(&dummy_udc_driver);
2883 err_register_udc_driver:
2884 	platform_driver_unregister(&dummy_hcd_driver);
2885 err_add_pdata:
2886 	for (i = 0; i < mod_data.num; i++)
2887 		kfree(dum[i]);
2888 	for (i = 0; i < mod_data.num; i++)
2889 		platform_device_put(the_udc_pdev[i]);
2890 err_alloc_udc:
2891 	for (i = 0; i < mod_data.num; i++)
2892 		platform_device_put(the_hcd_pdev[i]);
2893 	return retval;
2894 }
2895 module_init(dummy_hcd_init);
2896 
2897 static void __exit dummy_hcd_cleanup(void)
2898 {
2899 	int i;
2900 
2901 	for (i = 0; i < mod_data.num; i++) {
2902 		struct dummy *dum;
2903 
2904 		dum = *((void **)dev_get_platdata(&the_udc_pdev[i]->dev));
2905 
2906 		platform_device_unregister(the_udc_pdev[i]);
2907 		platform_device_unregister(the_hcd_pdev[i]);
2908 		kfree(dum);
2909 	}
2910 	platform_driver_unregister(&dummy_udc_driver);
2911 	platform_driver_unregister(&dummy_hcd_driver);
2912 }
2913 module_exit(dummy_hcd_cleanup);
2914