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