1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * composite.c - infrastructure for Composite USB Gadgets 4 * 5 * Copyright (C) 2006-2008 David Brownell 6 * U-Boot porting: Lukasz Majewski <l.majewski@samsung.com> 7 */ 8 #undef DEBUG 9 10 #include <linux/bitops.h> 11 #include <linux/usb/composite.h> 12 13 #define USB_BUFSIZ 4096 14 15 static struct usb_composite_driver *composite; 16 17 /** 18 * usb_add_function() - add a function to a configuration 19 * @config: the configuration 20 * @function: the function being added 21 * Context: single threaded during gadget setup 22 * 23 * After initialization, each configuration must have one or more 24 * functions added to it. Adding a function involves calling its @bind() 25 * method to allocate resources such as interface and string identifiers 26 * and endpoints. 27 * 28 * This function returns the value of the function's bind(), which is 29 * zero for success else a negative errno value. 30 */ 31 int usb_add_function(struct usb_configuration *config, 32 struct usb_function *function) 33 { 34 int value = -EINVAL; 35 36 debug("adding '%s'/%p to config '%s'/%p\n", 37 function->name, function, 38 config->label, config); 39 40 if (!function->set_alt || !function->disable) 41 goto done; 42 43 function->config = config; 44 list_add_tail(&function->list, &config->functions); 45 46 if (function->bind) { 47 value = function->bind(config, function); 48 if (value < 0) { 49 list_del(&function->list); 50 function->config = NULL; 51 } 52 } else 53 value = 0; 54 55 if (!config->fullspeed && function->descriptors) 56 config->fullspeed = 1; 57 if (!config->highspeed && function->hs_descriptors) 58 config->highspeed = 1; 59 60 done: 61 if (value) 62 debug("adding '%s'/%p --> %d\n", 63 function->name, function, value); 64 return value; 65 } 66 67 /** 68 * usb_function_deactivate - prevent function and gadget enumeration 69 * @function: the function that isn't yet ready to respond 70 * 71 * Blocks response of the gadget driver to host enumeration by 72 * preventing the data line pullup from being activated. This is 73 * normally called during @bind() processing to change from the 74 * initial "ready to respond" state, or when a required resource 75 * becomes available. 76 * 77 * For example, drivers that serve as a passthrough to a userspace 78 * daemon can block enumeration unless that daemon (such as an OBEX, 79 * MTP, or print server) is ready to handle host requests. 80 * 81 * Not all systems support software control of their USB peripheral 82 * data pullups. 83 * 84 * Returns zero on success, else negative errno. 85 */ 86 int usb_function_deactivate(struct usb_function *function) 87 { 88 struct usb_composite_dev *cdev = function->config->cdev; 89 int status = 0; 90 91 if (cdev->deactivations == 0) 92 status = usb_gadget_disconnect(cdev->gadget); 93 if (status == 0) 94 cdev->deactivations++; 95 96 return status; 97 } 98 99 /** 100 * usb_function_activate - allow function and gadget enumeration 101 * @function: function on which usb_function_activate() was called 102 * 103 * Reverses effect of usb_function_deactivate(). If no more functions 104 * are delaying their activation, the gadget driver will respond to 105 * host enumeration procedures. 106 * 107 * Returns zero on success, else negative errno. 108 */ 109 int usb_function_activate(struct usb_function *function) 110 { 111 struct usb_composite_dev *cdev = function->config->cdev; 112 int status = 0; 113 114 if (cdev->deactivations == 0) 115 status = -EINVAL; 116 else { 117 cdev->deactivations--; 118 if (cdev->deactivations == 0) 119 status = usb_gadget_connect(cdev->gadget); 120 } 121 122 return status; 123 } 124 125 /** 126 * usb_interface_id() - allocate an unused interface ID 127 * @config: configuration associated with the interface 128 * @function: function handling the interface 129 * Context: single threaded during gadget setup 130 * 131 * usb_interface_id() is called from usb_function.bind() callbacks to 132 * allocate new interface IDs. The function driver will then store that 133 * ID in interface, association, CDC union, and other descriptors. It 134 * will also handle any control requests targetted at that interface, 135 * particularly changing its altsetting via set_alt(). There may 136 * also be class-specific or vendor-specific requests to handle. 137 * 138 * All interface identifier should be allocated using this routine, to 139 * ensure that for example different functions don't wrongly assign 140 * different meanings to the same identifier. Note that since interface 141 * identifers are configuration-specific, functions used in more than 142 * one configuration (or more than once in a given configuration) need 143 * multiple versions of the relevant descriptors. 144 * 145 * Returns the interface ID which was allocated; or -ENODEV if no 146 * more interface IDs can be allocated. 147 */ 148 int usb_interface_id(struct usb_configuration *config, 149 struct usb_function *function) 150 { 151 unsigned char id = config->next_interface_id; 152 153 if (id < MAX_CONFIG_INTERFACES) { 154 config->interface[id] = function; 155 config->next_interface_id = id + 1; 156 return id; 157 } 158 return -ENODEV; 159 } 160 161 static int config_buf(struct usb_configuration *config, 162 enum usb_device_speed speed, void *buf, u8 type) 163 { 164 int len = USB_BUFSIZ - USB_DT_CONFIG_SIZE; 165 void *next = buf + USB_DT_CONFIG_SIZE; 166 struct usb_descriptor_header **descriptors; 167 struct usb_config_descriptor *c; 168 int status; 169 struct usb_function *f; 170 171 /* write the config descriptor */ 172 c = buf; 173 c->bLength = USB_DT_CONFIG_SIZE; 174 c->bDescriptorType = type; 175 176 c->bNumInterfaces = config->next_interface_id; 177 c->bConfigurationValue = config->bConfigurationValue; 178 c->iConfiguration = config->iConfiguration; 179 c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes; 180 c->bMaxPower = config->bMaxPower ? : (CONFIG_USB_GADGET_VBUS_DRAW / 2); 181 182 /* There may be e.g. OTG descriptors */ 183 if (config->descriptors) { 184 status = usb_descriptor_fillbuf(next, len, 185 config->descriptors); 186 if (status < 0) 187 return status; 188 len -= status; 189 next += status; 190 } 191 192 /* add each function's descriptors */ 193 list_for_each_entry(f, &config->functions, list) { 194 if (speed == USB_SPEED_HIGH) 195 descriptors = f->hs_descriptors; 196 else 197 descriptors = f->descriptors; 198 if (!descriptors) 199 continue; 200 status = usb_descriptor_fillbuf(next, len, 201 (const struct usb_descriptor_header **) descriptors); 202 if (status < 0) 203 return status; 204 len -= status; 205 next += status; 206 } 207 208 len = next - buf; 209 c->wTotalLength = cpu_to_le16(len); 210 return len; 211 } 212 213 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value) 214 { 215 enum usb_device_speed speed = USB_SPEED_UNKNOWN; 216 struct usb_gadget *gadget = cdev->gadget; 217 u8 type = w_value >> 8; 218 int hs = 0; 219 struct usb_configuration *c; 220 221 if (gadget_is_dualspeed(gadget)) { 222 if (gadget->speed == USB_SPEED_HIGH) 223 hs = 1; 224 if (type == USB_DT_OTHER_SPEED_CONFIG) 225 hs = !hs; 226 if (hs) 227 speed = USB_SPEED_HIGH; 228 } 229 230 w_value &= 0xff; 231 list_for_each_entry(c, &cdev->configs, list) { 232 if (speed == USB_SPEED_HIGH) { 233 if (!c->highspeed) 234 continue; 235 } else { 236 if (!c->fullspeed) 237 continue; 238 } 239 if (w_value == 0) 240 return config_buf(c, speed, cdev->req->buf, type); 241 w_value--; 242 } 243 return -EINVAL; 244 } 245 246 static int count_configs(struct usb_composite_dev *cdev, unsigned type) 247 { 248 struct usb_gadget *gadget = cdev->gadget; 249 unsigned count = 0; 250 int hs = 0; 251 struct usb_configuration *c; 252 253 if (gadget_is_dualspeed(gadget)) { 254 if (gadget->speed == USB_SPEED_HIGH) 255 hs = 1; 256 if (type == USB_DT_DEVICE_QUALIFIER) 257 hs = !hs; 258 } 259 list_for_each_entry(c, &cdev->configs, list) { 260 /* ignore configs that won't work at this speed */ 261 if (hs) { 262 if (!c->highspeed) 263 continue; 264 } else { 265 if (!c->fullspeed) 266 continue; 267 } 268 count++; 269 } 270 return count; 271 } 272 273 static void device_qual(struct usb_composite_dev *cdev) 274 { 275 struct usb_qualifier_descriptor *qual = cdev->req->buf; 276 277 qual->bLength = sizeof(*qual); 278 qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER; 279 /* POLICY: same bcdUSB and device type info at both speeds */ 280 qual->bcdUSB = cdev->desc.bcdUSB; 281 qual->bDeviceClass = cdev->desc.bDeviceClass; 282 qual->bDeviceSubClass = cdev->desc.bDeviceSubClass; 283 qual->bDeviceProtocol = cdev->desc.bDeviceProtocol; 284 /* ASSUME same EP0 fifo size at both speeds */ 285 qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket; 286 qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER); 287 qual->bRESERVED = 0; 288 } 289 290 static void reset_config(struct usb_composite_dev *cdev) 291 { 292 struct usb_function *f; 293 294 debug("%s:\n", __func__); 295 296 list_for_each_entry(f, &cdev->config->functions, list) { 297 if (f->disable) 298 f->disable(f); 299 300 bitmap_zero(f->endpoints, 32); 301 } 302 cdev->config = NULL; 303 } 304 305 static int set_config(struct usb_composite_dev *cdev, 306 const struct usb_ctrlrequest *ctrl, unsigned number) 307 { 308 struct usb_gadget *gadget = cdev->gadget; 309 unsigned power = gadget_is_otg(gadget) ? 8 : 100; 310 struct usb_descriptor_header **descriptors; 311 int result = -EINVAL; 312 struct usb_endpoint_descriptor *ep; 313 struct usb_configuration *c = NULL; 314 int addr; 315 int tmp; 316 struct usb_function *f; 317 318 if (cdev->config) 319 reset_config(cdev); 320 321 if (number) { 322 list_for_each_entry(c, &cdev->configs, list) { 323 if (c->bConfigurationValue == number) { 324 result = 0; 325 break; 326 } 327 } 328 if (result < 0) 329 goto done; 330 } else 331 result = 0; 332 333 debug("%s: %s speed config #%d: %s\n", __func__, 334 ({ char *speed; 335 switch (gadget->speed) { 336 case USB_SPEED_LOW: 337 speed = "low"; 338 break; 339 case USB_SPEED_FULL: 340 speed = "full"; 341 break; 342 case USB_SPEED_HIGH: 343 speed = "high"; 344 break; 345 default: 346 speed = "?"; 347 break; 348 }; 349 speed; 350 }), number, c ? c->label : "unconfigured"); 351 352 if (!c) 353 goto done; 354 355 cdev->config = c; 356 357 /* Initialize all interfaces by setting them to altsetting zero. */ 358 for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) { 359 f = c->interface[tmp]; 360 if (!f) 361 break; 362 363 /* 364 * Record which endpoints are used by the function. This is used 365 * to dispatch control requests targeted at that endpoint to the 366 * function's setup callback instead of the current 367 * configuration's setup callback. 368 */ 369 if (gadget->speed == USB_SPEED_HIGH) 370 descriptors = f->hs_descriptors; 371 else 372 descriptors = f->descriptors; 373 374 for (; *descriptors; ++descriptors) { 375 if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT) 376 continue; 377 378 ep = (struct usb_endpoint_descriptor *)*descriptors; 379 addr = ((ep->bEndpointAddress & 0x80) >> 3) 380 | (ep->bEndpointAddress & 0x0f); 381 generic_set_bit(addr, f->endpoints); 382 } 383 384 result = f->set_alt(f, tmp, 0); 385 if (result < 0) { 386 debug("interface %d (%s/%p) alt 0 --> %d\n", 387 tmp, f->name, f, result); 388 389 reset_config(cdev); 390 goto done; 391 } 392 } 393 394 /* when we return, be sure our power usage is valid */ 395 power = c->bMaxPower ? (2 * c->bMaxPower) : CONFIG_USB_GADGET_VBUS_DRAW; 396 done: 397 usb_gadget_vbus_draw(gadget, power); 398 return result; 399 } 400 401 /** 402 * usb_add_config() - add a configuration to a device. 403 * @cdev: wraps the USB gadget 404 * @config: the configuration, with bConfigurationValue assigned 405 * Context: single threaded during gadget setup 406 * 407 * One of the main tasks of a composite driver's bind() routine is to 408 * add each of the configurations it supports, using this routine. 409 * 410 * This function returns the value of the configuration's bind(), which 411 * is zero for success else a negative errno value. Binding configurations 412 * assigns global resources including string IDs, and per-configuration 413 * resources such as interface IDs and endpoints. 414 */ 415 int usb_add_config(struct usb_composite_dev *cdev, 416 struct usb_configuration *config) 417 { 418 int status = -EINVAL; 419 struct usb_configuration *c; 420 struct usb_function *f; 421 unsigned int i; 422 423 debug("%s: adding config #%u '%s'/%p\n", __func__, 424 config->bConfigurationValue, 425 config->label, config); 426 427 if (!config->bConfigurationValue || !config->bind) 428 goto done; 429 430 /* Prevent duplicate configuration identifiers */ 431 list_for_each_entry(c, &cdev->configs, list) { 432 if (c->bConfigurationValue == config->bConfigurationValue) { 433 status = -EBUSY; 434 goto done; 435 } 436 } 437 438 config->cdev = cdev; 439 list_add_tail(&config->list, &cdev->configs); 440 441 INIT_LIST_HEAD(&config->functions); 442 config->next_interface_id = 0; 443 444 status = config->bind(config); 445 if (status < 0) { 446 list_del(&config->list); 447 config->cdev = NULL; 448 } else { 449 debug("cfg %d/%p speeds:%s%s\n", 450 config->bConfigurationValue, config, 451 config->highspeed ? " high" : "", 452 config->fullspeed 453 ? (gadget_is_dualspeed(cdev->gadget) 454 ? " full" 455 : " full/low") 456 : ""); 457 458 for (i = 0; i < MAX_CONFIG_INTERFACES; i++) { 459 f = config->interface[i]; 460 if (!f) 461 continue; 462 debug("%s: interface %d = %s/%p\n", 463 __func__, i, f->name, f); 464 } 465 } 466 467 usb_ep_autoconfig_reset(cdev->gadget); 468 469 done: 470 if (status) 471 debug("added config '%s'/%u --> %d\n", config->label, 472 config->bConfigurationValue, status); 473 return status; 474 } 475 476 /* 477 * We support strings in multiple languages ... string descriptor zero 478 * says which languages are supported. The typical case will be that 479 * only one language (probably English) is used, with I18N handled on 480 * the host side. 481 */ 482 483 static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf) 484 { 485 const struct usb_gadget_strings *s; 486 u16 language; 487 __le16 *tmp; 488 489 while (*sp) { 490 s = *sp; 491 language = cpu_to_le16(s->language); 492 for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) { 493 if (*tmp == language) 494 goto repeat; 495 } 496 *tmp++ = language; 497 repeat: 498 sp++; 499 } 500 } 501 502 static int lookup_string( 503 struct usb_gadget_strings **sp, 504 void *buf, 505 u16 language, 506 int id 507 ) 508 { 509 int value; 510 struct usb_gadget_strings *s; 511 512 while (*sp) { 513 s = *sp++; 514 if (s->language != language) 515 continue; 516 value = usb_gadget_get_string(s, id, buf); 517 if (value > 0) 518 return value; 519 } 520 return -EINVAL; 521 } 522 523 static int get_string(struct usb_composite_dev *cdev, 524 void *buf, u16 language, int id) 525 { 526 struct usb_string_descriptor *s = buf; 527 struct usb_gadget_strings **sp; 528 int len; 529 struct usb_configuration *c; 530 struct usb_function *f; 531 532 /* 533 * Yes, not only is USB's I18N support probably more than most 534 * folk will ever care about ... also, it's all supported here. 535 * (Except for UTF8 support for Unicode's "Astral Planes".) 536 */ 537 538 /* 0 == report all available language codes */ 539 if (id == 0) { 540 memset(s, 0, 256); 541 s->bDescriptorType = USB_DT_STRING; 542 543 sp = composite->strings; 544 if (sp) 545 collect_langs(sp, s->wData); 546 547 list_for_each_entry(c, &cdev->configs, list) { 548 sp = c->strings; 549 if (sp) 550 collect_langs(sp, s->wData); 551 552 list_for_each_entry(f, &c->functions, list) { 553 sp = f->strings; 554 if (sp) 555 collect_langs(sp, s->wData); 556 } 557 } 558 559 for (len = 0; len <= 126 && s->wData[len]; len++) 560 continue; 561 if (!len) 562 return -EINVAL; 563 564 s->bLength = 2 * (len + 1); 565 return s->bLength; 566 } 567 568 /* 569 * Otherwise, look up and return a specified string. String IDs 570 * are device-scoped, so we look up each string table we're told 571 * about. These lookups are infrequent; simpler-is-better here. 572 */ 573 if (composite->strings) { 574 len = lookup_string(composite->strings, buf, language, id); 575 if (len > 0) 576 return len; 577 } 578 list_for_each_entry(c, &cdev->configs, list) { 579 if (c->strings) { 580 len = lookup_string(c->strings, buf, language, id); 581 if (len > 0) 582 return len; 583 } 584 list_for_each_entry(f, &c->functions, list) { 585 if (!f->strings) 586 continue; 587 len = lookup_string(f->strings, buf, language, id); 588 if (len > 0) 589 return len; 590 } 591 } 592 return -EINVAL; 593 } 594 595 /** 596 * usb_string_id() - allocate an unused string ID 597 * @cdev: the device whose string descriptor IDs are being allocated 598 * Context: single threaded during gadget setup 599 * 600 * @usb_string_id() is called from bind() callbacks to allocate 601 * string IDs. Drivers for functions, configurations, or gadgets will 602 * then store that ID in the appropriate descriptors and string table. 603 * 604 * All string identifier should be allocated using this, 605 * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure 606 * that for example different functions don't wrongly assign different 607 * meanings to the same identifier. 608 */ 609 int usb_string_id(struct usb_composite_dev *cdev) 610 { 611 if (cdev->next_string_id < 254) { 612 /* 613 * string id 0 is reserved by USB spec for list of 614 * supported languages 615 * 255 reserved as well? -- mina86 616 */ 617 cdev->next_string_id++; 618 return cdev->next_string_id; 619 } 620 return -ENODEV; 621 } 622 623 /** 624 * usb_string_ids() - allocate unused string IDs in batch 625 * @cdev: the device whose string descriptor IDs are being allocated 626 * @str: an array of usb_string objects to assign numbers to 627 * Context: single threaded during gadget setup 628 * 629 * @usb_string_ids() is called from bind() callbacks to allocate 630 * string IDs. Drivers for functions, configurations, or gadgets will 631 * then copy IDs from the string table to the appropriate descriptors 632 * and string table for other languages. 633 * 634 * All string identifier should be allocated using this, 635 * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for 636 * example different functions don't wrongly assign different meanings 637 * to the same identifier. 638 */ 639 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str) 640 { 641 u8 next = cdev->next_string_id; 642 643 for (; str->s; ++str) { 644 if (next >= 254) 645 return -ENODEV; 646 str->id = ++next; 647 } 648 649 cdev->next_string_id = next; 650 651 return 0; 652 } 653 654 /** 655 * usb_string_ids_n() - allocate unused string IDs in batch 656 * @c: the device whose string descriptor IDs are being allocated 657 * @n: number of string IDs to allocate 658 * Context: single threaded during gadget setup 659 * 660 * Returns the first requested ID. This ID and next @n-1 IDs are now 661 * valid IDs. At least provided that @n is non-zero because if it 662 * is, returns last requested ID which is now very useful information. 663 * 664 * @usb_string_ids_n() is called from bind() callbacks to allocate 665 * string IDs. Drivers for functions, configurations, or gadgets will 666 * then store that ID in the appropriate descriptors and string table. 667 * 668 * All string identifier should be allocated using this, 669 * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for 670 * example different functions don't wrongly assign different meanings 671 * to the same identifier. 672 */ 673 int usb_string_ids_n(struct usb_composite_dev *c, unsigned n) 674 { 675 u8 next = c->next_string_id; 676 677 if (n > 254 || next + n > 254) 678 return -ENODEV; 679 680 c->next_string_id += n; 681 return next + 1; 682 } 683 684 static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req) 685 { 686 if (req->status || req->actual != req->length) 687 debug("%s: setup complete --> %d, %d/%d\n", __func__, 688 req->status, req->actual, req->length); 689 } 690 691 /* 692 * The setup() callback implements all the ep0 functionality that's 693 * not handled lower down, in hardware or the hardware driver(like 694 * device and endpoint feature flags, and their status). It's all 695 * housekeeping for the gadget function we're implementing. Most of 696 * the work is in config and function specific setup. 697 */ 698 static int 699 composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) 700 { 701 u16 w_length = le16_to_cpu(ctrl->wLength); 702 u16 w_index = le16_to_cpu(ctrl->wIndex); 703 u16 w_value = le16_to_cpu(ctrl->wValue); 704 struct usb_composite_dev *cdev = get_gadget_data(gadget); 705 u8 intf = w_index & 0xFF; 706 int value = -EOPNOTSUPP; 707 struct usb_request *req = cdev->req; 708 struct usb_function *f = NULL; 709 int standard; 710 u8 endp; 711 struct usb_configuration *c; 712 713 /* 714 * partial re-init of the response message; the function or the 715 * gadget might need to intercept e.g. a control-OUT completion 716 * when we delegate to it. 717 */ 718 req->zero = 0; 719 req->complete = composite_setup_complete; 720 req->length = USB_BUFSIZ; 721 gadget->ep0->driver_data = cdev; 722 standard = (ctrl->bRequestType & USB_TYPE_MASK) 723 == USB_TYPE_STANDARD; 724 if (!standard) 725 goto unknown; 726 727 switch (ctrl->bRequest) { 728 729 /* we handle all standard USB descriptors */ 730 case USB_REQ_GET_DESCRIPTOR: 731 if (ctrl->bRequestType != USB_DIR_IN) 732 goto unknown; 733 switch (w_value >> 8) { 734 735 case USB_DT_DEVICE: 736 cdev->desc.bNumConfigurations = 737 count_configs(cdev, USB_DT_DEVICE); 738 739 /* 740 * If the speed is Super speed, then the supported 741 * max packet size is 512 and it should be sent as 742 * exponent of 2. So, 9(2^9=512) should be filled in 743 * bMaxPacketSize0. Also fill USB version as 3.0 744 * if speed is Super speed. 745 */ 746 if (cdev->gadget->speed == USB_SPEED_SUPER) { 747 cdev->desc.bMaxPacketSize0 = 9; 748 cdev->desc.bcdUSB = cpu_to_le16(0x0300); 749 } else { 750 cdev->desc.bMaxPacketSize0 = 751 cdev->gadget->ep0->maxpacket; 752 } 753 value = min(w_length, (u16) sizeof cdev->desc); 754 memcpy(req->buf, &cdev->desc, value); 755 break; 756 case USB_DT_DEVICE_QUALIFIER: 757 if (!gadget_is_dualspeed(gadget)) 758 break; 759 device_qual(cdev); 760 value = min_t(int, w_length, 761 sizeof(struct usb_qualifier_descriptor)); 762 break; 763 case USB_DT_OTHER_SPEED_CONFIG: 764 if (!gadget_is_dualspeed(gadget)) 765 break; 766 767 case USB_DT_CONFIG: 768 value = config_desc(cdev, w_value); 769 if (value >= 0) 770 value = min(w_length, (u16) value); 771 break; 772 case USB_DT_STRING: 773 value = get_string(cdev, req->buf, 774 w_index, w_value & 0xff); 775 if (value >= 0) 776 value = min(w_length, (u16) value); 777 break; 778 case USB_DT_BOS: 779 /* 780 * The USB compliance test (USB 2.0 Command Verifier) 781 * issues this request. We should not run into the 782 * default path here. But return for now until 783 * the superspeed support is added. 784 */ 785 break; 786 default: 787 goto unknown; 788 } 789 break; 790 791 /* any number of configs can work */ 792 case USB_REQ_SET_CONFIGURATION: 793 if (ctrl->bRequestType != 0) 794 goto unknown; 795 if (gadget_is_otg(gadget)) { 796 if (gadget->a_hnp_support) 797 debug("HNP available\n"); 798 else if (gadget->a_alt_hnp_support) 799 debug("HNP on another port\n"); 800 else 801 debug("HNP inactive\n"); 802 } 803 804 value = set_config(cdev, ctrl, w_value); 805 break; 806 case USB_REQ_GET_CONFIGURATION: 807 if (ctrl->bRequestType != USB_DIR_IN) 808 goto unknown; 809 if (cdev->config) 810 *(u8 *)req->buf = cdev->config->bConfigurationValue; 811 else 812 *(u8 *)req->buf = 0; 813 value = min(w_length, (u16) 1); 814 break; 815 816 /* 817 * function drivers must handle get/set altsetting; if there's 818 * no get() method, we know only altsetting zero works. 819 */ 820 case USB_REQ_SET_INTERFACE: 821 if (ctrl->bRequestType != USB_RECIP_INTERFACE) 822 goto unknown; 823 if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES) 824 break; 825 f = cdev->config->interface[intf]; 826 if (!f) 827 break; 828 if (w_value && !f->set_alt) 829 break; 830 value = f->set_alt(f, w_index, w_value); 831 break; 832 case USB_REQ_GET_INTERFACE: 833 if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE)) 834 goto unknown; 835 if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES) 836 break; 837 f = cdev->config->interface[intf]; 838 if (!f) 839 break; 840 /* lots of interfaces only need altsetting zero... */ 841 value = f->get_alt ? f->get_alt(f, w_index) : 0; 842 if (value < 0) 843 break; 844 *((u8 *)req->buf) = value; 845 value = min(w_length, (u16) 1); 846 break; 847 default: 848 unknown: 849 debug("non-core control req%02x.%02x v%04x i%04x l%d\n", 850 ctrl->bRequestType, ctrl->bRequest, 851 w_value, w_index, w_length); 852 853 if (!cdev->config) 854 goto done; 855 856 /* 857 * functions always handle their interfaces and endpoints... 858 * punt other recipients (other, WUSB, ...) to the current 859 * configuration code. 860 */ 861 switch (ctrl->bRequestType & USB_RECIP_MASK) { 862 case USB_RECIP_INTERFACE: 863 f = cdev->config->interface[intf]; 864 break; 865 866 case USB_RECIP_ENDPOINT: 867 endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f); 868 list_for_each_entry(f, &cdev->config->functions, list) { 869 if (test_bit(endp, f->endpoints)) 870 break; 871 } 872 if (&f->list == &cdev->config->functions) 873 f = NULL; 874 break; 875 /* 876 * dfu-util (version 0.5) sets bmRequestType.Receipent = Device 877 * for non-standard request (w_value = 0x21, 878 * bRequest = GET_DESCRIPTOR in this case). 879 * When only one interface is registered (as it is done now), 880 * then this request shall be handled as it was requested for 881 * interface. 882 * 883 * In the below code it is checked if only one interface is 884 * present and proper function for it is extracted. Due to that 885 * function's setup (f->setup) is called to handle this 886 * special non-standard request. 887 */ 888 case USB_RECIP_DEVICE: 889 debug("cdev->config->next_interface_id: %d intf: %d\n", 890 cdev->config->next_interface_id, intf); 891 if (cdev->config->next_interface_id == 1) 892 f = cdev->config->interface[intf]; 893 break; 894 } 895 896 if (f && f->setup) 897 value = f->setup(f, ctrl); 898 else { 899 c = cdev->config; 900 if (c->setup) 901 value = c->setup(c, ctrl); 902 } 903 904 goto done; 905 } 906 907 /* respond with data transfer before status phase? */ 908 if (value >= 0) { 909 req->length = value; 910 req->zero = value < w_length; 911 value = usb_ep_queue(gadget->ep0, req, GFP_KERNEL); 912 if (value < 0) { 913 debug("ep_queue --> %d\n", value); 914 req->status = 0; 915 composite_setup_complete(gadget->ep0, req); 916 } 917 } 918 919 done: 920 /* device either stalls (value < 0) or reports success */ 921 return value; 922 } 923 924 static void composite_disconnect(struct usb_gadget *gadget) 925 { 926 struct usb_composite_dev *cdev = get_gadget_data(gadget); 927 928 if (cdev->config) 929 reset_config(cdev); 930 if (composite->disconnect) 931 composite->disconnect(cdev); 932 } 933 934 static void composite_unbind(struct usb_gadget *gadget) 935 { 936 struct usb_composite_dev *cdev = get_gadget_data(gadget); 937 struct usb_configuration *c; 938 struct usb_function *f; 939 940 /* 941 * composite_disconnect() must already have been called 942 * by the underlying peripheral controller driver! 943 * so there's no i/o concurrency that could affect the 944 * state protected by cdev->lock. 945 */ 946 BUG_ON(cdev->config); 947 948 while (!list_empty(&cdev->configs)) { 949 c = list_first_entry(&cdev->configs, 950 struct usb_configuration, list); 951 while (!list_empty(&c->functions)) { 952 f = list_first_entry(&c->functions, 953 struct usb_function, list); 954 list_del(&f->list); 955 if (f->unbind) { 956 debug("unbind function '%s'/%p\n", 957 f->name, f); 958 f->unbind(c, f); 959 } 960 } 961 list_del(&c->list); 962 if (c->unbind) { 963 debug("unbind config '%s'/%p\n", c->label, c); 964 c->unbind(c); 965 } 966 free(c); 967 } 968 if (composite->unbind) 969 composite->unbind(cdev); 970 971 if (cdev->req) { 972 kfree(cdev->req->buf); 973 usb_ep_free_request(gadget->ep0, cdev->req); 974 } 975 kfree(cdev); 976 set_gadget_data(gadget, NULL); 977 978 composite = NULL; 979 } 980 981 static int composite_bind(struct usb_gadget *gadget) 982 { 983 int status = -ENOMEM; 984 struct usb_composite_dev *cdev; 985 986 cdev = calloc(sizeof *cdev, 1); 987 if (!cdev) 988 return status; 989 990 cdev->gadget = gadget; 991 set_gadget_data(gadget, cdev); 992 INIT_LIST_HEAD(&cdev->configs); 993 994 /* preallocate control response and buffer */ 995 cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL); 996 if (!cdev->req) 997 goto fail; 998 cdev->req->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, USB_BUFSIZ); 999 if (!cdev->req->buf) 1000 goto fail; 1001 cdev->req->complete = composite_setup_complete; 1002 gadget->ep0->driver_data = cdev; 1003 1004 cdev->bufsiz = USB_BUFSIZ; 1005 cdev->driver = composite; 1006 1007 usb_gadget_set_selfpowered(gadget); 1008 usb_ep_autoconfig_reset(cdev->gadget); 1009 1010 status = composite->bind(cdev); 1011 if (status < 0) 1012 goto fail; 1013 1014 memcpy(&cdev->desc, composite->dev, 1015 sizeof(struct usb_device_descriptor)); 1016 cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket; 1017 1018 debug("%s: ready\n", composite->name); 1019 return 0; 1020 1021 fail: 1022 composite_unbind(gadget); 1023 return status; 1024 } 1025 1026 static void 1027 composite_suspend(struct usb_gadget *gadget) 1028 { 1029 struct usb_composite_dev *cdev = get_gadget_data(gadget); 1030 struct usb_function *f; 1031 1032 debug("%s: suspend\n", __func__); 1033 if (cdev->config) { 1034 list_for_each_entry(f, &cdev->config->functions, list) { 1035 if (f->suspend) 1036 f->suspend(f); 1037 } 1038 } 1039 if (composite->suspend) 1040 composite->suspend(cdev); 1041 1042 cdev->suspended = 1; 1043 } 1044 1045 static void 1046 composite_resume(struct usb_gadget *gadget) 1047 { 1048 struct usb_composite_dev *cdev = get_gadget_data(gadget); 1049 struct usb_function *f; 1050 1051 debug("%s: resume\n", __func__); 1052 if (composite->resume) 1053 composite->resume(cdev); 1054 if (cdev->config) { 1055 list_for_each_entry(f, &cdev->config->functions, list) { 1056 if (f->resume) 1057 f->resume(f); 1058 } 1059 } 1060 1061 cdev->suspended = 0; 1062 } 1063 1064 static struct usb_gadget_driver composite_driver = { 1065 .speed = USB_SPEED_HIGH, 1066 1067 .bind = composite_bind, 1068 .unbind = composite_unbind, 1069 1070 .setup = composite_setup, 1071 .reset = composite_disconnect, 1072 .disconnect = composite_disconnect, 1073 1074 .suspend = composite_suspend, 1075 .resume = composite_resume, 1076 }; 1077 1078 /** 1079 * usb_composite_register() - register a composite driver 1080 * @driver: the driver to register 1081 * Context: single threaded during gadget setup 1082 * 1083 * This function is used to register drivers using the composite driver 1084 * framework. The return value is zero, or a negative errno value. 1085 * Those values normally come from the driver's @bind method, which does 1086 * all the work of setting up the driver to match the hardware. 1087 * 1088 * On successful return, the gadget is ready to respond to requests from 1089 * the host, unless one of its components invokes usb_gadget_disconnect() 1090 * while it was binding. That would usually be done in order to wait for 1091 * some userspace participation. 1092 */ 1093 int usb_composite_register(struct usb_composite_driver *driver) 1094 { 1095 int res; 1096 1097 if (!driver || !driver->dev || !driver->bind || composite) 1098 return -EINVAL; 1099 1100 if (!driver->name) 1101 driver->name = "composite"; 1102 composite = driver; 1103 1104 res = usb_gadget_register_driver(&composite_driver); 1105 if (res != 0) 1106 composite = NULL; 1107 1108 return res; 1109 } 1110 1111 /** 1112 * usb_composite_unregister() - unregister a composite driver 1113 * @driver: the driver to unregister 1114 * 1115 * This function is used to unregister drivers using the composite 1116 * driver framework. 1117 */ 1118 void usb_composite_unregister(struct usb_composite_driver *driver) 1119 { 1120 if (composite != driver) 1121 return; 1122 usb_gadget_unregister_driver(&composite_driver); 1123 composite = NULL; 1124 } 1125