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