1 // SPDX-License-Identifier: GPL-2.0 2 #include <linux/configfs.h> 3 #include <linux/module.h> 4 #include <linux/slab.h> 5 #include <linux/device.h> 6 #include <linux/kstrtox.h> 7 #include <linux/nls.h> 8 #include <linux/usb/composite.h> 9 #include <linux/usb/gadget_configfs.h> 10 #include "configfs.h" 11 #include "u_f.h" 12 #include "u_os_desc.h" 13 14 int check_user_usb_string(const char *name, 15 struct usb_gadget_strings *stringtab_dev) 16 { 17 u16 num; 18 int ret; 19 20 ret = kstrtou16(name, 0, &num); 21 if (ret) 22 return ret; 23 24 if (!usb_validate_langid(num)) 25 return -EINVAL; 26 27 stringtab_dev->language = num; 28 return 0; 29 } 30 31 #define MAX_NAME_LEN 40 32 #define MAX_USB_STRING_LANGS 2 33 34 static const struct usb_descriptor_header *otg_desc[2]; 35 36 struct gadget_info { 37 struct config_group group; 38 struct config_group functions_group; 39 struct config_group configs_group; 40 struct config_group strings_group; 41 struct config_group os_desc_group; 42 43 struct mutex lock; 44 struct usb_gadget_strings *gstrings[MAX_USB_STRING_LANGS + 1]; 45 struct list_head string_list; 46 struct list_head available_func; 47 48 struct usb_composite_driver composite; 49 struct usb_composite_dev cdev; 50 bool use_os_desc; 51 char b_vendor_code; 52 char qw_sign[OS_STRING_QW_SIGN_LEN]; 53 spinlock_t spinlock; 54 bool unbind; 55 }; 56 57 static inline struct gadget_info *to_gadget_info(struct config_item *item) 58 { 59 return container_of(to_config_group(item), struct gadget_info, group); 60 } 61 62 struct config_usb_cfg { 63 struct config_group group; 64 struct config_group strings_group; 65 struct list_head string_list; 66 struct usb_configuration c; 67 struct list_head func_list; 68 struct usb_gadget_strings *gstrings[MAX_USB_STRING_LANGS + 1]; 69 }; 70 71 static inline struct config_usb_cfg *to_config_usb_cfg(struct config_item *item) 72 { 73 return container_of(to_config_group(item), struct config_usb_cfg, 74 group); 75 } 76 77 static inline struct gadget_info *cfg_to_gadget_info(struct config_usb_cfg *cfg) 78 { 79 return container_of(cfg->c.cdev, struct gadget_info, cdev); 80 } 81 82 struct gadget_strings { 83 struct usb_gadget_strings stringtab_dev; 84 struct usb_string strings[USB_GADGET_FIRST_AVAIL_IDX]; 85 char *manufacturer; 86 char *product; 87 char *serialnumber; 88 89 struct config_group group; 90 struct list_head list; 91 }; 92 93 struct gadget_config_name { 94 struct usb_gadget_strings stringtab_dev; 95 struct usb_string strings; 96 char *configuration; 97 98 struct config_group group; 99 struct list_head list; 100 }; 101 102 #define USB_MAX_STRING_WITH_NULL_LEN (USB_MAX_STRING_LEN+1) 103 104 static int usb_string_copy(const char *s, char **s_copy) 105 { 106 int ret; 107 char *str; 108 char *copy = *s_copy; 109 ret = strlen(s); 110 if (ret > USB_MAX_STRING_LEN) 111 return -EOVERFLOW; 112 113 if (copy) { 114 str = copy; 115 } else { 116 str = kmalloc(USB_MAX_STRING_WITH_NULL_LEN, GFP_KERNEL); 117 if (!str) 118 return -ENOMEM; 119 } 120 strcpy(str, s); 121 if (str[ret - 1] == '\n') 122 str[ret - 1] = '\0'; 123 *s_copy = str; 124 return 0; 125 } 126 127 #define GI_DEVICE_DESC_SIMPLE_R_u8(__name) \ 128 static ssize_t gadget_dev_desc_##__name##_show(struct config_item *item, \ 129 char *page) \ 130 { \ 131 return sprintf(page, "0x%02x\n", \ 132 to_gadget_info(item)->cdev.desc.__name); \ 133 } 134 135 #define GI_DEVICE_DESC_SIMPLE_R_u16(__name) \ 136 static ssize_t gadget_dev_desc_##__name##_show(struct config_item *item, \ 137 char *page) \ 138 { \ 139 return sprintf(page, "0x%04x\n", \ 140 le16_to_cpup(&to_gadget_info(item)->cdev.desc.__name)); \ 141 } 142 143 144 #define GI_DEVICE_DESC_SIMPLE_W_u8(_name) \ 145 static ssize_t gadget_dev_desc_##_name##_store(struct config_item *item, \ 146 const char *page, size_t len) \ 147 { \ 148 u8 val; \ 149 int ret; \ 150 ret = kstrtou8(page, 0, &val); \ 151 if (ret) \ 152 return ret; \ 153 to_gadget_info(item)->cdev.desc._name = val; \ 154 return len; \ 155 } 156 157 #define GI_DEVICE_DESC_SIMPLE_W_u16(_name) \ 158 static ssize_t gadget_dev_desc_##_name##_store(struct config_item *item, \ 159 const char *page, size_t len) \ 160 { \ 161 u16 val; \ 162 int ret; \ 163 ret = kstrtou16(page, 0, &val); \ 164 if (ret) \ 165 return ret; \ 166 to_gadget_info(item)->cdev.desc._name = cpu_to_le16p(&val); \ 167 return len; \ 168 } 169 170 #define GI_DEVICE_DESC_SIMPLE_RW(_name, _type) \ 171 GI_DEVICE_DESC_SIMPLE_R_##_type(_name) \ 172 GI_DEVICE_DESC_SIMPLE_W_##_type(_name) 173 174 GI_DEVICE_DESC_SIMPLE_R_u16(bcdUSB); 175 GI_DEVICE_DESC_SIMPLE_RW(bDeviceClass, u8); 176 GI_DEVICE_DESC_SIMPLE_RW(bDeviceSubClass, u8); 177 GI_DEVICE_DESC_SIMPLE_RW(bDeviceProtocol, u8); 178 GI_DEVICE_DESC_SIMPLE_RW(bMaxPacketSize0, u8); 179 GI_DEVICE_DESC_SIMPLE_RW(idVendor, u16); 180 GI_DEVICE_DESC_SIMPLE_RW(idProduct, u16); 181 GI_DEVICE_DESC_SIMPLE_R_u16(bcdDevice); 182 183 static ssize_t is_valid_bcd(u16 bcd_val) 184 { 185 if ((bcd_val & 0xf) > 9) 186 return -EINVAL; 187 if (((bcd_val >> 4) & 0xf) > 9) 188 return -EINVAL; 189 if (((bcd_val >> 8) & 0xf) > 9) 190 return -EINVAL; 191 if (((bcd_val >> 12) & 0xf) > 9) 192 return -EINVAL; 193 return 0; 194 } 195 196 static ssize_t gadget_dev_desc_bcdDevice_store(struct config_item *item, 197 const char *page, size_t len) 198 { 199 u16 bcdDevice; 200 int ret; 201 202 ret = kstrtou16(page, 0, &bcdDevice); 203 if (ret) 204 return ret; 205 ret = is_valid_bcd(bcdDevice); 206 if (ret) 207 return ret; 208 209 to_gadget_info(item)->cdev.desc.bcdDevice = cpu_to_le16(bcdDevice); 210 return len; 211 } 212 213 static ssize_t gadget_dev_desc_bcdUSB_store(struct config_item *item, 214 const char *page, size_t len) 215 { 216 u16 bcdUSB; 217 int ret; 218 219 ret = kstrtou16(page, 0, &bcdUSB); 220 if (ret) 221 return ret; 222 ret = is_valid_bcd(bcdUSB); 223 if (ret) 224 return ret; 225 226 to_gadget_info(item)->cdev.desc.bcdUSB = cpu_to_le16(bcdUSB); 227 return len; 228 } 229 230 static ssize_t gadget_dev_desc_UDC_show(struct config_item *item, char *page) 231 { 232 struct gadget_info *gi = to_gadget_info(item); 233 char *udc_name; 234 int ret; 235 236 mutex_lock(&gi->lock); 237 udc_name = gi->composite.gadget_driver.udc_name; 238 ret = sprintf(page, "%s\n", udc_name ?: ""); 239 mutex_unlock(&gi->lock); 240 241 return ret; 242 } 243 244 static int unregister_gadget(struct gadget_info *gi) 245 { 246 int ret; 247 248 if (!gi->composite.gadget_driver.udc_name) 249 return -ENODEV; 250 251 ret = usb_gadget_unregister_driver(&gi->composite.gadget_driver); 252 if (ret) 253 return ret; 254 kfree(gi->composite.gadget_driver.udc_name); 255 gi->composite.gadget_driver.udc_name = NULL; 256 return 0; 257 } 258 259 static ssize_t gadget_dev_desc_UDC_store(struct config_item *item, 260 const char *page, size_t len) 261 { 262 struct gadget_info *gi = to_gadget_info(item); 263 char *name; 264 int ret; 265 266 if (strlen(page) < len) 267 return -EOVERFLOW; 268 269 name = kstrdup(page, GFP_KERNEL); 270 if (!name) 271 return -ENOMEM; 272 if (name[len - 1] == '\n') 273 name[len - 1] = '\0'; 274 275 mutex_lock(&gi->lock); 276 277 if (!strlen(name)) { 278 ret = unregister_gadget(gi); 279 if (ret) 280 goto err; 281 kfree(name); 282 } else { 283 if (gi->composite.gadget_driver.udc_name) { 284 ret = -EBUSY; 285 goto err; 286 } 287 gi->composite.gadget_driver.udc_name = name; 288 ret = usb_gadget_register_driver(&gi->composite.gadget_driver); 289 if (ret) { 290 gi->composite.gadget_driver.udc_name = NULL; 291 goto err; 292 } 293 } 294 mutex_unlock(&gi->lock); 295 return len; 296 err: 297 kfree(name); 298 mutex_unlock(&gi->lock); 299 return ret; 300 } 301 302 static ssize_t gadget_dev_desc_max_speed_show(struct config_item *item, 303 char *page) 304 { 305 enum usb_device_speed speed = to_gadget_info(item)->composite.max_speed; 306 307 return sprintf(page, "%s\n", usb_speed_string(speed)); 308 } 309 310 static ssize_t gadget_dev_desc_max_speed_store(struct config_item *item, 311 const char *page, size_t len) 312 { 313 struct gadget_info *gi = to_gadget_info(item); 314 315 mutex_lock(&gi->lock); 316 317 /* Prevent changing of max_speed after the driver is binded */ 318 if (gi->composite.gadget_driver.udc_name) 319 goto err; 320 321 if (strncmp(page, "super-speed-plus", 16) == 0) 322 gi->composite.max_speed = USB_SPEED_SUPER_PLUS; 323 else if (strncmp(page, "super-speed", 11) == 0) 324 gi->composite.max_speed = USB_SPEED_SUPER; 325 else if (strncmp(page, "high-speed", 10) == 0) 326 gi->composite.max_speed = USB_SPEED_HIGH; 327 else if (strncmp(page, "full-speed", 10) == 0) 328 gi->composite.max_speed = USB_SPEED_FULL; 329 else if (strncmp(page, "low-speed", 9) == 0) 330 gi->composite.max_speed = USB_SPEED_LOW; 331 else 332 goto err; 333 334 gi->composite.gadget_driver.max_speed = gi->composite.max_speed; 335 336 mutex_unlock(&gi->lock); 337 return len; 338 err: 339 mutex_unlock(&gi->lock); 340 return -EINVAL; 341 } 342 343 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass); 344 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass); 345 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol); 346 CONFIGFS_ATTR(gadget_dev_desc_, bMaxPacketSize0); 347 CONFIGFS_ATTR(gadget_dev_desc_, idVendor); 348 CONFIGFS_ATTR(gadget_dev_desc_, idProduct); 349 CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice); 350 CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB); 351 CONFIGFS_ATTR(gadget_dev_desc_, UDC); 352 CONFIGFS_ATTR(gadget_dev_desc_, max_speed); 353 354 static struct configfs_attribute *gadget_root_attrs[] = { 355 &gadget_dev_desc_attr_bDeviceClass, 356 &gadget_dev_desc_attr_bDeviceSubClass, 357 &gadget_dev_desc_attr_bDeviceProtocol, 358 &gadget_dev_desc_attr_bMaxPacketSize0, 359 &gadget_dev_desc_attr_idVendor, 360 &gadget_dev_desc_attr_idProduct, 361 &gadget_dev_desc_attr_bcdDevice, 362 &gadget_dev_desc_attr_bcdUSB, 363 &gadget_dev_desc_attr_UDC, 364 &gadget_dev_desc_attr_max_speed, 365 NULL, 366 }; 367 368 static inline struct gadget_strings *to_gadget_strings(struct config_item *item) 369 { 370 return container_of(to_config_group(item), struct gadget_strings, 371 group); 372 } 373 374 static inline struct gadget_config_name *to_gadget_config_name( 375 struct config_item *item) 376 { 377 return container_of(to_config_group(item), struct gadget_config_name, 378 group); 379 } 380 381 static inline struct usb_function_instance *to_usb_function_instance( 382 struct config_item *item) 383 { 384 return container_of(to_config_group(item), 385 struct usb_function_instance, group); 386 } 387 388 static void gadget_info_attr_release(struct config_item *item) 389 { 390 struct gadget_info *gi = to_gadget_info(item); 391 392 WARN_ON(!list_empty(&gi->cdev.configs)); 393 WARN_ON(!list_empty(&gi->string_list)); 394 WARN_ON(!list_empty(&gi->available_func)); 395 kfree(gi->composite.gadget_driver.function); 396 kfree(gi->composite.gadget_driver.driver.name); 397 kfree(gi); 398 } 399 400 static struct configfs_item_operations gadget_root_item_ops = { 401 .release = gadget_info_attr_release, 402 }; 403 404 static void gadget_config_attr_release(struct config_item *item) 405 { 406 struct config_usb_cfg *cfg = to_config_usb_cfg(item); 407 408 WARN_ON(!list_empty(&cfg->c.functions)); 409 list_del(&cfg->c.list); 410 kfree(cfg->c.label); 411 kfree(cfg); 412 } 413 414 static int config_usb_cfg_link( 415 struct config_item *usb_cfg_ci, 416 struct config_item *usb_func_ci) 417 { 418 struct config_usb_cfg *cfg = to_config_usb_cfg(usb_cfg_ci); 419 struct gadget_info *gi = cfg_to_gadget_info(cfg); 420 421 struct usb_function_instance *fi = 422 to_usb_function_instance(usb_func_ci); 423 struct usb_function_instance *a_fi = NULL, *iter; 424 struct usb_function *f; 425 int ret; 426 427 mutex_lock(&gi->lock); 428 /* 429 * Make sure this function is from within our _this_ gadget and not 430 * from another gadget or a random directory. 431 * Also a function instance can only be linked once. 432 */ 433 list_for_each_entry(iter, &gi->available_func, cfs_list) { 434 if (iter != fi) 435 continue; 436 a_fi = iter; 437 break; 438 } 439 if (!a_fi) { 440 ret = -EINVAL; 441 goto out; 442 } 443 444 list_for_each_entry(f, &cfg->func_list, list) { 445 if (f->fi == fi) { 446 ret = -EEXIST; 447 goto out; 448 } 449 } 450 451 f = usb_get_function(fi); 452 if (IS_ERR(f)) { 453 ret = PTR_ERR(f); 454 goto out; 455 } 456 457 /* stash the function until we bind it to the gadget */ 458 list_add_tail(&f->list, &cfg->func_list); 459 ret = 0; 460 out: 461 mutex_unlock(&gi->lock); 462 return ret; 463 } 464 465 static void config_usb_cfg_unlink( 466 struct config_item *usb_cfg_ci, 467 struct config_item *usb_func_ci) 468 { 469 struct config_usb_cfg *cfg = to_config_usb_cfg(usb_cfg_ci); 470 struct gadget_info *gi = cfg_to_gadget_info(cfg); 471 472 struct usb_function_instance *fi = 473 to_usb_function_instance(usb_func_ci); 474 struct usb_function *f; 475 476 /* 477 * ideally I would like to forbid to unlink functions while a gadget is 478 * bound to an UDC. Since this isn't possible at the moment, we simply 479 * force an unbind, the function is available here and then we can 480 * remove the function. 481 */ 482 mutex_lock(&gi->lock); 483 if (gi->composite.gadget_driver.udc_name) 484 unregister_gadget(gi); 485 WARN_ON(gi->composite.gadget_driver.udc_name); 486 487 list_for_each_entry(f, &cfg->func_list, list) { 488 if (f->fi == fi) { 489 list_del(&f->list); 490 usb_put_function(f); 491 mutex_unlock(&gi->lock); 492 return; 493 } 494 } 495 mutex_unlock(&gi->lock); 496 WARN(1, "Unable to locate function to unbind\n"); 497 } 498 499 static struct configfs_item_operations gadget_config_item_ops = { 500 .release = gadget_config_attr_release, 501 .allow_link = config_usb_cfg_link, 502 .drop_link = config_usb_cfg_unlink, 503 }; 504 505 506 static ssize_t gadget_config_desc_MaxPower_show(struct config_item *item, 507 char *page) 508 { 509 struct config_usb_cfg *cfg = to_config_usb_cfg(item); 510 511 return sprintf(page, "%u\n", cfg->c.MaxPower); 512 } 513 514 static ssize_t gadget_config_desc_MaxPower_store(struct config_item *item, 515 const char *page, size_t len) 516 { 517 struct config_usb_cfg *cfg = to_config_usb_cfg(item); 518 u16 val; 519 int ret; 520 ret = kstrtou16(page, 0, &val); 521 if (ret) 522 return ret; 523 if (DIV_ROUND_UP(val, 8) > 0xff) 524 return -ERANGE; 525 cfg->c.MaxPower = val; 526 return len; 527 } 528 529 static ssize_t gadget_config_desc_bmAttributes_show(struct config_item *item, 530 char *page) 531 { 532 struct config_usb_cfg *cfg = to_config_usb_cfg(item); 533 534 return sprintf(page, "0x%02x\n", cfg->c.bmAttributes); 535 } 536 537 static ssize_t gadget_config_desc_bmAttributes_store(struct config_item *item, 538 const char *page, size_t len) 539 { 540 struct config_usb_cfg *cfg = to_config_usb_cfg(item); 541 u8 val; 542 int ret; 543 ret = kstrtou8(page, 0, &val); 544 if (ret) 545 return ret; 546 if (!(val & USB_CONFIG_ATT_ONE)) 547 return -EINVAL; 548 if (val & ~(USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER | 549 USB_CONFIG_ATT_WAKEUP)) 550 return -EINVAL; 551 cfg->c.bmAttributes = val; 552 return len; 553 } 554 555 CONFIGFS_ATTR(gadget_config_desc_, MaxPower); 556 CONFIGFS_ATTR(gadget_config_desc_, bmAttributes); 557 558 static struct configfs_attribute *gadget_config_attrs[] = { 559 &gadget_config_desc_attr_MaxPower, 560 &gadget_config_desc_attr_bmAttributes, 561 NULL, 562 }; 563 564 static const struct config_item_type gadget_config_type = { 565 .ct_item_ops = &gadget_config_item_ops, 566 .ct_attrs = gadget_config_attrs, 567 .ct_owner = THIS_MODULE, 568 }; 569 570 static const struct config_item_type gadget_root_type = { 571 .ct_item_ops = &gadget_root_item_ops, 572 .ct_attrs = gadget_root_attrs, 573 .ct_owner = THIS_MODULE, 574 }; 575 576 static void composite_init_dev(struct usb_composite_dev *cdev) 577 { 578 spin_lock_init(&cdev->lock); 579 INIT_LIST_HEAD(&cdev->configs); 580 INIT_LIST_HEAD(&cdev->gstrings); 581 } 582 583 static struct config_group *function_make( 584 struct config_group *group, 585 const char *name) 586 { 587 struct gadget_info *gi; 588 struct usb_function_instance *fi; 589 char buf[MAX_NAME_LEN]; 590 char *func_name; 591 char *instance_name; 592 int ret; 593 594 ret = snprintf(buf, MAX_NAME_LEN, "%s", name); 595 if (ret >= MAX_NAME_LEN) 596 return ERR_PTR(-ENAMETOOLONG); 597 598 func_name = buf; 599 instance_name = strchr(func_name, '.'); 600 if (!instance_name) { 601 pr_err("Unable to locate . in FUNC.INSTANCE\n"); 602 return ERR_PTR(-EINVAL); 603 } 604 *instance_name = '\0'; 605 instance_name++; 606 607 fi = usb_get_function_instance(func_name); 608 if (IS_ERR(fi)) 609 return ERR_CAST(fi); 610 611 ret = config_item_set_name(&fi->group.cg_item, "%s", name); 612 if (ret) { 613 usb_put_function_instance(fi); 614 return ERR_PTR(ret); 615 } 616 if (fi->set_inst_name) { 617 ret = fi->set_inst_name(fi, instance_name); 618 if (ret) { 619 usb_put_function_instance(fi); 620 return ERR_PTR(ret); 621 } 622 } 623 624 gi = container_of(group, struct gadget_info, functions_group); 625 626 mutex_lock(&gi->lock); 627 list_add_tail(&fi->cfs_list, &gi->available_func); 628 mutex_unlock(&gi->lock); 629 return &fi->group; 630 } 631 632 static void function_drop( 633 struct config_group *group, 634 struct config_item *item) 635 { 636 struct usb_function_instance *fi = to_usb_function_instance(item); 637 struct gadget_info *gi; 638 639 gi = container_of(group, struct gadget_info, functions_group); 640 641 mutex_lock(&gi->lock); 642 list_del(&fi->cfs_list); 643 mutex_unlock(&gi->lock); 644 config_item_put(item); 645 } 646 647 static struct configfs_group_operations functions_ops = { 648 .make_group = &function_make, 649 .drop_item = &function_drop, 650 }; 651 652 static const struct config_item_type functions_type = { 653 .ct_group_ops = &functions_ops, 654 .ct_owner = THIS_MODULE, 655 }; 656 657 GS_STRINGS_RW(gadget_config_name, configuration); 658 659 static struct configfs_attribute *gadget_config_name_langid_attrs[] = { 660 &gadget_config_name_attr_configuration, 661 NULL, 662 }; 663 664 static void gadget_config_name_attr_release(struct config_item *item) 665 { 666 struct gadget_config_name *cn = to_gadget_config_name(item); 667 668 kfree(cn->configuration); 669 670 list_del(&cn->list); 671 kfree(cn); 672 } 673 674 USB_CONFIG_STRING_RW_OPS(gadget_config_name); 675 USB_CONFIG_STRINGS_LANG(gadget_config_name, config_usb_cfg); 676 677 static struct config_group *config_desc_make( 678 struct config_group *group, 679 const char *name) 680 { 681 struct gadget_info *gi; 682 struct config_usb_cfg *cfg; 683 char buf[MAX_NAME_LEN]; 684 char *num_str; 685 u8 num; 686 int ret; 687 688 gi = container_of(group, struct gadget_info, configs_group); 689 ret = snprintf(buf, MAX_NAME_LEN, "%s", name); 690 if (ret >= MAX_NAME_LEN) 691 return ERR_PTR(-ENAMETOOLONG); 692 693 num_str = strchr(buf, '.'); 694 if (!num_str) { 695 pr_err("Unable to locate . in name.bConfigurationValue\n"); 696 return ERR_PTR(-EINVAL); 697 } 698 699 *num_str = '\0'; 700 num_str++; 701 702 if (!strlen(buf)) 703 return ERR_PTR(-EINVAL); 704 705 ret = kstrtou8(num_str, 0, &num); 706 if (ret) 707 return ERR_PTR(ret); 708 709 cfg = kzalloc(sizeof(*cfg), GFP_KERNEL); 710 if (!cfg) 711 return ERR_PTR(-ENOMEM); 712 cfg->c.label = kstrdup(buf, GFP_KERNEL); 713 if (!cfg->c.label) { 714 ret = -ENOMEM; 715 goto err; 716 } 717 cfg->c.bConfigurationValue = num; 718 cfg->c.MaxPower = CONFIG_USB_GADGET_VBUS_DRAW; 719 cfg->c.bmAttributes = USB_CONFIG_ATT_ONE; 720 INIT_LIST_HEAD(&cfg->string_list); 721 INIT_LIST_HEAD(&cfg->func_list); 722 723 config_group_init_type_name(&cfg->group, name, 724 &gadget_config_type); 725 726 config_group_init_type_name(&cfg->strings_group, "strings", 727 &gadget_config_name_strings_type); 728 configfs_add_default_group(&cfg->strings_group, &cfg->group); 729 730 ret = usb_add_config_only(&gi->cdev, &cfg->c); 731 if (ret) 732 goto err; 733 734 return &cfg->group; 735 err: 736 kfree(cfg->c.label); 737 kfree(cfg); 738 return ERR_PTR(ret); 739 } 740 741 static void config_desc_drop( 742 struct config_group *group, 743 struct config_item *item) 744 { 745 config_item_put(item); 746 } 747 748 static struct configfs_group_operations config_desc_ops = { 749 .make_group = &config_desc_make, 750 .drop_item = &config_desc_drop, 751 }; 752 753 static const struct config_item_type config_desc_type = { 754 .ct_group_ops = &config_desc_ops, 755 .ct_owner = THIS_MODULE, 756 }; 757 758 GS_STRINGS_RW(gadget_strings, manufacturer); 759 GS_STRINGS_RW(gadget_strings, product); 760 GS_STRINGS_RW(gadget_strings, serialnumber); 761 762 static struct configfs_attribute *gadget_strings_langid_attrs[] = { 763 &gadget_strings_attr_manufacturer, 764 &gadget_strings_attr_product, 765 &gadget_strings_attr_serialnumber, 766 NULL, 767 }; 768 769 static void gadget_strings_attr_release(struct config_item *item) 770 { 771 struct gadget_strings *gs = to_gadget_strings(item); 772 773 kfree(gs->manufacturer); 774 kfree(gs->product); 775 kfree(gs->serialnumber); 776 777 list_del(&gs->list); 778 kfree(gs); 779 } 780 781 USB_CONFIG_STRING_RW_OPS(gadget_strings); 782 USB_CONFIG_STRINGS_LANG(gadget_strings, gadget_info); 783 784 static inline struct gadget_info *os_desc_item_to_gadget_info( 785 struct config_item *item) 786 { 787 return container_of(to_config_group(item), 788 struct gadget_info, os_desc_group); 789 } 790 791 static ssize_t os_desc_use_show(struct config_item *item, char *page) 792 { 793 return sprintf(page, "%d\n", 794 os_desc_item_to_gadget_info(item)->use_os_desc); 795 } 796 797 static ssize_t os_desc_use_store(struct config_item *item, const char *page, 798 size_t len) 799 { 800 struct gadget_info *gi = os_desc_item_to_gadget_info(item); 801 int ret; 802 bool use; 803 804 mutex_lock(&gi->lock); 805 ret = kstrtobool(page, &use); 806 if (!ret) { 807 gi->use_os_desc = use; 808 ret = len; 809 } 810 mutex_unlock(&gi->lock); 811 812 return ret; 813 } 814 815 static ssize_t os_desc_b_vendor_code_show(struct config_item *item, char *page) 816 { 817 return sprintf(page, "0x%02x\n", 818 os_desc_item_to_gadget_info(item)->b_vendor_code); 819 } 820 821 static ssize_t os_desc_b_vendor_code_store(struct config_item *item, 822 const char *page, size_t len) 823 { 824 struct gadget_info *gi = os_desc_item_to_gadget_info(item); 825 int ret; 826 u8 b_vendor_code; 827 828 mutex_lock(&gi->lock); 829 ret = kstrtou8(page, 0, &b_vendor_code); 830 if (!ret) { 831 gi->b_vendor_code = b_vendor_code; 832 ret = len; 833 } 834 mutex_unlock(&gi->lock); 835 836 return ret; 837 } 838 839 static ssize_t os_desc_qw_sign_show(struct config_item *item, char *page) 840 { 841 struct gadget_info *gi = os_desc_item_to_gadget_info(item); 842 int res; 843 844 res = utf16s_to_utf8s((wchar_t *) gi->qw_sign, OS_STRING_QW_SIGN_LEN, 845 UTF16_LITTLE_ENDIAN, page, PAGE_SIZE - 1); 846 page[res++] = '\n'; 847 848 return res; 849 } 850 851 static ssize_t os_desc_qw_sign_store(struct config_item *item, const char *page, 852 size_t len) 853 { 854 struct gadget_info *gi = os_desc_item_to_gadget_info(item); 855 int res, l; 856 857 l = min((int)len, OS_STRING_QW_SIGN_LEN >> 1); 858 if (page[l - 1] == '\n') 859 --l; 860 861 mutex_lock(&gi->lock); 862 res = utf8s_to_utf16s(page, l, 863 UTF16_LITTLE_ENDIAN, (wchar_t *) gi->qw_sign, 864 OS_STRING_QW_SIGN_LEN); 865 if (res > 0) 866 res = len; 867 mutex_unlock(&gi->lock); 868 869 return res; 870 } 871 872 CONFIGFS_ATTR(os_desc_, use); 873 CONFIGFS_ATTR(os_desc_, b_vendor_code); 874 CONFIGFS_ATTR(os_desc_, qw_sign); 875 876 static struct configfs_attribute *os_desc_attrs[] = { 877 &os_desc_attr_use, 878 &os_desc_attr_b_vendor_code, 879 &os_desc_attr_qw_sign, 880 NULL, 881 }; 882 883 static int os_desc_link(struct config_item *os_desc_ci, 884 struct config_item *usb_cfg_ci) 885 { 886 struct gadget_info *gi = os_desc_item_to_gadget_info(os_desc_ci); 887 struct usb_composite_dev *cdev = &gi->cdev; 888 struct config_usb_cfg *c_target = to_config_usb_cfg(usb_cfg_ci); 889 struct usb_configuration *c = NULL, *iter; 890 int ret; 891 892 mutex_lock(&gi->lock); 893 list_for_each_entry(iter, &cdev->configs, list) { 894 if (iter != &c_target->c) 895 continue; 896 c = iter; 897 break; 898 } 899 if (!c) { 900 ret = -EINVAL; 901 goto out; 902 } 903 904 if (cdev->os_desc_config) { 905 ret = -EBUSY; 906 goto out; 907 } 908 909 cdev->os_desc_config = &c_target->c; 910 ret = 0; 911 912 out: 913 mutex_unlock(&gi->lock); 914 return ret; 915 } 916 917 static void os_desc_unlink(struct config_item *os_desc_ci, 918 struct config_item *usb_cfg_ci) 919 { 920 struct gadget_info *gi = os_desc_item_to_gadget_info(os_desc_ci); 921 struct usb_composite_dev *cdev = &gi->cdev; 922 923 mutex_lock(&gi->lock); 924 if (gi->composite.gadget_driver.udc_name) 925 unregister_gadget(gi); 926 cdev->os_desc_config = NULL; 927 WARN_ON(gi->composite.gadget_driver.udc_name); 928 mutex_unlock(&gi->lock); 929 } 930 931 static struct configfs_item_operations os_desc_ops = { 932 .allow_link = os_desc_link, 933 .drop_link = os_desc_unlink, 934 }; 935 936 static struct config_item_type os_desc_type = { 937 .ct_item_ops = &os_desc_ops, 938 .ct_attrs = os_desc_attrs, 939 .ct_owner = THIS_MODULE, 940 }; 941 942 static inline struct usb_os_desc_ext_prop 943 *to_usb_os_desc_ext_prop(struct config_item *item) 944 { 945 return container_of(item, struct usb_os_desc_ext_prop, item); 946 } 947 948 static ssize_t ext_prop_type_show(struct config_item *item, char *page) 949 { 950 return sprintf(page, "%d\n", to_usb_os_desc_ext_prop(item)->type); 951 } 952 953 static ssize_t ext_prop_type_store(struct config_item *item, 954 const char *page, size_t len) 955 { 956 struct usb_os_desc_ext_prop *ext_prop = to_usb_os_desc_ext_prop(item); 957 struct usb_os_desc *desc = to_usb_os_desc(ext_prop->item.ci_parent); 958 u8 type; 959 int ret; 960 961 if (desc->opts_mutex) 962 mutex_lock(desc->opts_mutex); 963 ret = kstrtou8(page, 0, &type); 964 if (ret) 965 goto end; 966 if (type < USB_EXT_PROP_UNICODE || type > USB_EXT_PROP_UNICODE_MULTI) { 967 ret = -EINVAL; 968 goto end; 969 } 970 971 if ((ext_prop->type == USB_EXT_PROP_BINARY || 972 ext_prop->type == USB_EXT_PROP_LE32 || 973 ext_prop->type == USB_EXT_PROP_BE32) && 974 (type == USB_EXT_PROP_UNICODE || 975 type == USB_EXT_PROP_UNICODE_ENV || 976 type == USB_EXT_PROP_UNICODE_LINK)) 977 ext_prop->data_len <<= 1; 978 else if ((ext_prop->type == USB_EXT_PROP_UNICODE || 979 ext_prop->type == USB_EXT_PROP_UNICODE_ENV || 980 ext_prop->type == USB_EXT_PROP_UNICODE_LINK) && 981 (type == USB_EXT_PROP_BINARY || 982 type == USB_EXT_PROP_LE32 || 983 type == USB_EXT_PROP_BE32)) 984 ext_prop->data_len >>= 1; 985 ext_prop->type = type; 986 ret = len; 987 988 end: 989 if (desc->opts_mutex) 990 mutex_unlock(desc->opts_mutex); 991 return ret; 992 } 993 994 static ssize_t ext_prop_data_show(struct config_item *item, char *page) 995 { 996 struct usb_os_desc_ext_prop *ext_prop = to_usb_os_desc_ext_prop(item); 997 int len = ext_prop->data_len; 998 999 if (ext_prop->type == USB_EXT_PROP_UNICODE || 1000 ext_prop->type == USB_EXT_PROP_UNICODE_ENV || 1001 ext_prop->type == USB_EXT_PROP_UNICODE_LINK) 1002 len >>= 1; 1003 memcpy(page, ext_prop->data, len); 1004 1005 return len; 1006 } 1007 1008 static ssize_t ext_prop_data_store(struct config_item *item, 1009 const char *page, size_t len) 1010 { 1011 struct usb_os_desc_ext_prop *ext_prop = to_usb_os_desc_ext_prop(item); 1012 struct usb_os_desc *desc = to_usb_os_desc(ext_prop->item.ci_parent); 1013 char *new_data; 1014 size_t ret_len = len; 1015 1016 if (page[len - 1] == '\n' || page[len - 1] == '\0') 1017 --len; 1018 new_data = kmemdup(page, len, GFP_KERNEL); 1019 if (!new_data) 1020 return -ENOMEM; 1021 1022 if (desc->opts_mutex) 1023 mutex_lock(desc->opts_mutex); 1024 kfree(ext_prop->data); 1025 ext_prop->data = new_data; 1026 desc->ext_prop_len -= ext_prop->data_len; 1027 ext_prop->data_len = len; 1028 desc->ext_prop_len += ext_prop->data_len; 1029 if (ext_prop->type == USB_EXT_PROP_UNICODE || 1030 ext_prop->type == USB_EXT_PROP_UNICODE_ENV || 1031 ext_prop->type == USB_EXT_PROP_UNICODE_LINK) { 1032 desc->ext_prop_len -= ext_prop->data_len; 1033 ext_prop->data_len <<= 1; 1034 ext_prop->data_len += 2; 1035 desc->ext_prop_len += ext_prop->data_len; 1036 } 1037 if (desc->opts_mutex) 1038 mutex_unlock(desc->opts_mutex); 1039 return ret_len; 1040 } 1041 1042 CONFIGFS_ATTR(ext_prop_, type); 1043 CONFIGFS_ATTR(ext_prop_, data); 1044 1045 static struct configfs_attribute *ext_prop_attrs[] = { 1046 &ext_prop_attr_type, 1047 &ext_prop_attr_data, 1048 NULL, 1049 }; 1050 1051 static void usb_os_desc_ext_prop_release(struct config_item *item) 1052 { 1053 struct usb_os_desc_ext_prop *ext_prop = to_usb_os_desc_ext_prop(item); 1054 1055 kfree(ext_prop); /* frees a whole chunk */ 1056 } 1057 1058 static struct configfs_item_operations ext_prop_ops = { 1059 .release = usb_os_desc_ext_prop_release, 1060 }; 1061 1062 static struct config_item *ext_prop_make( 1063 struct config_group *group, 1064 const char *name) 1065 { 1066 struct usb_os_desc_ext_prop *ext_prop; 1067 struct config_item_type *ext_prop_type; 1068 struct usb_os_desc *desc; 1069 char *vlabuf; 1070 1071 vla_group(data_chunk); 1072 vla_item(data_chunk, struct usb_os_desc_ext_prop, ext_prop, 1); 1073 vla_item(data_chunk, struct config_item_type, ext_prop_type, 1); 1074 1075 vlabuf = kzalloc(vla_group_size(data_chunk), GFP_KERNEL); 1076 if (!vlabuf) 1077 return ERR_PTR(-ENOMEM); 1078 1079 ext_prop = vla_ptr(vlabuf, data_chunk, ext_prop); 1080 ext_prop_type = vla_ptr(vlabuf, data_chunk, ext_prop_type); 1081 1082 desc = container_of(group, struct usb_os_desc, group); 1083 ext_prop_type->ct_item_ops = &ext_prop_ops; 1084 ext_prop_type->ct_attrs = ext_prop_attrs; 1085 ext_prop_type->ct_owner = desc->owner; 1086 1087 config_item_init_type_name(&ext_prop->item, name, ext_prop_type); 1088 1089 ext_prop->name = kstrdup(name, GFP_KERNEL); 1090 if (!ext_prop->name) { 1091 kfree(vlabuf); 1092 return ERR_PTR(-ENOMEM); 1093 } 1094 desc->ext_prop_len += 14; 1095 ext_prop->name_len = 2 * strlen(ext_prop->name) + 2; 1096 if (desc->opts_mutex) 1097 mutex_lock(desc->opts_mutex); 1098 desc->ext_prop_len += ext_prop->name_len; 1099 list_add_tail(&ext_prop->entry, &desc->ext_prop); 1100 ++desc->ext_prop_count; 1101 if (desc->opts_mutex) 1102 mutex_unlock(desc->opts_mutex); 1103 1104 return &ext_prop->item; 1105 } 1106 1107 static void ext_prop_drop(struct config_group *group, struct config_item *item) 1108 { 1109 struct usb_os_desc_ext_prop *ext_prop = to_usb_os_desc_ext_prop(item); 1110 struct usb_os_desc *desc = to_usb_os_desc(&group->cg_item); 1111 1112 if (desc->opts_mutex) 1113 mutex_lock(desc->opts_mutex); 1114 list_del(&ext_prop->entry); 1115 --desc->ext_prop_count; 1116 kfree(ext_prop->name); 1117 desc->ext_prop_len -= (ext_prop->name_len + ext_prop->data_len + 14); 1118 if (desc->opts_mutex) 1119 mutex_unlock(desc->opts_mutex); 1120 config_item_put(item); 1121 } 1122 1123 static struct configfs_group_operations interf_grp_ops = { 1124 .make_item = &ext_prop_make, 1125 .drop_item = &ext_prop_drop, 1126 }; 1127 1128 static ssize_t interf_grp_compatible_id_show(struct config_item *item, 1129 char *page) 1130 { 1131 memcpy(page, to_usb_os_desc(item)->ext_compat_id, 8); 1132 return 8; 1133 } 1134 1135 static ssize_t interf_grp_compatible_id_store(struct config_item *item, 1136 const char *page, size_t len) 1137 { 1138 struct usb_os_desc *desc = to_usb_os_desc(item); 1139 int l; 1140 1141 l = min_t(int, 8, len); 1142 if (page[l - 1] == '\n') 1143 --l; 1144 if (desc->opts_mutex) 1145 mutex_lock(desc->opts_mutex); 1146 memcpy(desc->ext_compat_id, page, l); 1147 1148 if (desc->opts_mutex) 1149 mutex_unlock(desc->opts_mutex); 1150 1151 return len; 1152 } 1153 1154 static ssize_t interf_grp_sub_compatible_id_show(struct config_item *item, 1155 char *page) 1156 { 1157 memcpy(page, to_usb_os_desc(item)->ext_compat_id + 8, 8); 1158 return 8; 1159 } 1160 1161 static ssize_t interf_grp_sub_compatible_id_store(struct config_item *item, 1162 const char *page, size_t len) 1163 { 1164 struct usb_os_desc *desc = to_usb_os_desc(item); 1165 int l; 1166 1167 l = min_t(int, 8, len); 1168 if (page[l - 1] == '\n') 1169 --l; 1170 if (desc->opts_mutex) 1171 mutex_lock(desc->opts_mutex); 1172 memcpy(desc->ext_compat_id + 8, page, l); 1173 1174 if (desc->opts_mutex) 1175 mutex_unlock(desc->opts_mutex); 1176 1177 return len; 1178 } 1179 1180 CONFIGFS_ATTR(interf_grp_, compatible_id); 1181 CONFIGFS_ATTR(interf_grp_, sub_compatible_id); 1182 1183 static struct configfs_attribute *interf_grp_attrs[] = { 1184 &interf_grp_attr_compatible_id, 1185 &interf_grp_attr_sub_compatible_id, 1186 NULL 1187 }; 1188 1189 struct config_group *usb_os_desc_prepare_interf_dir( 1190 struct config_group *parent, 1191 int n_interf, 1192 struct usb_os_desc **desc, 1193 char **names, 1194 struct module *owner) 1195 { 1196 struct config_group *os_desc_group; 1197 struct config_item_type *os_desc_type, *interface_type; 1198 1199 vla_group(data_chunk); 1200 vla_item(data_chunk, struct config_group, os_desc_group, 1); 1201 vla_item(data_chunk, struct config_item_type, os_desc_type, 1); 1202 vla_item(data_chunk, struct config_item_type, interface_type, 1); 1203 1204 char *vlabuf = kzalloc(vla_group_size(data_chunk), GFP_KERNEL); 1205 if (!vlabuf) 1206 return ERR_PTR(-ENOMEM); 1207 1208 os_desc_group = vla_ptr(vlabuf, data_chunk, os_desc_group); 1209 os_desc_type = vla_ptr(vlabuf, data_chunk, os_desc_type); 1210 interface_type = vla_ptr(vlabuf, data_chunk, interface_type); 1211 1212 os_desc_type->ct_owner = owner; 1213 config_group_init_type_name(os_desc_group, "os_desc", os_desc_type); 1214 configfs_add_default_group(os_desc_group, parent); 1215 1216 interface_type->ct_group_ops = &interf_grp_ops; 1217 interface_type->ct_attrs = interf_grp_attrs; 1218 interface_type->ct_owner = owner; 1219 1220 while (n_interf--) { 1221 struct usb_os_desc *d; 1222 1223 d = desc[n_interf]; 1224 d->owner = owner; 1225 config_group_init_type_name(&d->group, "", interface_type); 1226 config_item_set_name(&d->group.cg_item, "interface.%s", 1227 names[n_interf]); 1228 configfs_add_default_group(&d->group, os_desc_group); 1229 } 1230 1231 return os_desc_group; 1232 } 1233 EXPORT_SYMBOL(usb_os_desc_prepare_interf_dir); 1234 1235 static int configfs_do_nothing(struct usb_composite_dev *cdev) 1236 { 1237 WARN_ON(1); 1238 return -EINVAL; 1239 } 1240 1241 int composite_dev_prepare(struct usb_composite_driver *composite, 1242 struct usb_composite_dev *dev); 1243 1244 int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, 1245 struct usb_ep *ep0); 1246 1247 static void purge_configs_funcs(struct gadget_info *gi) 1248 { 1249 struct usb_configuration *c; 1250 1251 list_for_each_entry(c, &gi->cdev.configs, list) { 1252 struct usb_function *f, *tmp; 1253 struct config_usb_cfg *cfg; 1254 1255 cfg = container_of(c, struct config_usb_cfg, c); 1256 1257 list_for_each_entry_safe_reverse(f, tmp, &c->functions, list) { 1258 1259 list_move(&f->list, &cfg->func_list); 1260 if (f->unbind) { 1261 dev_dbg(&gi->cdev.gadget->dev, 1262 "unbind function '%s'/%p\n", 1263 f->name, f); 1264 f->unbind(c, f); 1265 } 1266 } 1267 c->next_interface_id = 0; 1268 memset(c->interface, 0, sizeof(c->interface)); 1269 c->superspeed_plus = 0; 1270 c->superspeed = 0; 1271 c->highspeed = 0; 1272 c->fullspeed = 0; 1273 } 1274 } 1275 1276 static int configfs_composite_bind(struct usb_gadget *gadget, 1277 struct usb_gadget_driver *gdriver) 1278 { 1279 struct usb_composite_driver *composite = to_cdriver(gdriver); 1280 struct gadget_info *gi = container_of(composite, 1281 struct gadget_info, composite); 1282 struct usb_composite_dev *cdev = &gi->cdev; 1283 struct usb_configuration *c; 1284 struct usb_string *s; 1285 unsigned i; 1286 int ret; 1287 1288 /* the gi->lock is hold by the caller */ 1289 gi->unbind = 0; 1290 cdev->gadget = gadget; 1291 set_gadget_data(gadget, cdev); 1292 ret = composite_dev_prepare(composite, cdev); 1293 if (ret) 1294 return ret; 1295 /* and now the gadget bind */ 1296 ret = -EINVAL; 1297 1298 if (list_empty(&gi->cdev.configs)) { 1299 pr_err("Need at least one configuration in %s.\n", 1300 gi->composite.name); 1301 goto err_comp_cleanup; 1302 } 1303 1304 1305 list_for_each_entry(c, &gi->cdev.configs, list) { 1306 struct config_usb_cfg *cfg; 1307 1308 cfg = container_of(c, struct config_usb_cfg, c); 1309 if (list_empty(&cfg->func_list)) { 1310 pr_err("Config %s/%d of %s needs at least one function.\n", 1311 c->label, c->bConfigurationValue, 1312 gi->composite.name); 1313 goto err_comp_cleanup; 1314 } 1315 } 1316 1317 /* init all strings */ 1318 if (!list_empty(&gi->string_list)) { 1319 struct gadget_strings *gs; 1320 1321 i = 0; 1322 list_for_each_entry(gs, &gi->string_list, list) { 1323 1324 gi->gstrings[i] = &gs->stringtab_dev; 1325 gs->stringtab_dev.strings = gs->strings; 1326 gs->strings[USB_GADGET_MANUFACTURER_IDX].s = 1327 gs->manufacturer; 1328 gs->strings[USB_GADGET_PRODUCT_IDX].s = gs->product; 1329 gs->strings[USB_GADGET_SERIAL_IDX].s = gs->serialnumber; 1330 i++; 1331 } 1332 gi->gstrings[i] = NULL; 1333 s = usb_gstrings_attach(&gi->cdev, gi->gstrings, 1334 USB_GADGET_FIRST_AVAIL_IDX); 1335 if (IS_ERR(s)) { 1336 ret = PTR_ERR(s); 1337 goto err_comp_cleanup; 1338 } 1339 1340 gi->cdev.desc.iManufacturer = s[USB_GADGET_MANUFACTURER_IDX].id; 1341 gi->cdev.desc.iProduct = s[USB_GADGET_PRODUCT_IDX].id; 1342 gi->cdev.desc.iSerialNumber = s[USB_GADGET_SERIAL_IDX].id; 1343 } 1344 1345 if (gi->use_os_desc) { 1346 cdev->use_os_string = true; 1347 cdev->b_vendor_code = gi->b_vendor_code; 1348 memcpy(cdev->qw_sign, gi->qw_sign, OS_STRING_QW_SIGN_LEN); 1349 } 1350 1351 if (gadget_is_otg(gadget) && !otg_desc[0]) { 1352 struct usb_descriptor_header *usb_desc; 1353 1354 usb_desc = usb_otg_descriptor_alloc(gadget); 1355 if (!usb_desc) { 1356 ret = -ENOMEM; 1357 goto err_comp_cleanup; 1358 } 1359 usb_otg_descriptor_init(gadget, usb_desc); 1360 otg_desc[0] = usb_desc; 1361 otg_desc[1] = NULL; 1362 } 1363 1364 /* Go through all configs, attach all functions */ 1365 list_for_each_entry(c, &gi->cdev.configs, list) { 1366 struct config_usb_cfg *cfg; 1367 struct usb_function *f; 1368 struct usb_function *tmp; 1369 struct gadget_config_name *cn; 1370 1371 if (gadget_is_otg(gadget)) 1372 c->descriptors = otg_desc; 1373 1374 cfg = container_of(c, struct config_usb_cfg, c); 1375 if (!list_empty(&cfg->string_list)) { 1376 i = 0; 1377 list_for_each_entry(cn, &cfg->string_list, list) { 1378 cfg->gstrings[i] = &cn->stringtab_dev; 1379 cn->stringtab_dev.strings = &cn->strings; 1380 cn->strings.s = cn->configuration; 1381 i++; 1382 } 1383 cfg->gstrings[i] = NULL; 1384 s = usb_gstrings_attach(&gi->cdev, cfg->gstrings, 1); 1385 if (IS_ERR(s)) { 1386 ret = PTR_ERR(s); 1387 goto err_comp_cleanup; 1388 } 1389 c->iConfiguration = s[0].id; 1390 } 1391 1392 list_for_each_entry_safe(f, tmp, &cfg->func_list, list) { 1393 list_del(&f->list); 1394 ret = usb_add_function(c, f); 1395 if (ret) { 1396 list_add(&f->list, &cfg->func_list); 1397 goto err_purge_funcs; 1398 } 1399 } 1400 ret = usb_gadget_check_config(cdev->gadget); 1401 if (ret) 1402 goto err_purge_funcs; 1403 1404 usb_ep_autoconfig_reset(cdev->gadget); 1405 } 1406 if (cdev->use_os_string) { 1407 ret = composite_os_desc_req_prepare(cdev, gadget->ep0); 1408 if (ret) 1409 goto err_purge_funcs; 1410 } 1411 1412 usb_ep_autoconfig_reset(cdev->gadget); 1413 return 0; 1414 1415 err_purge_funcs: 1416 purge_configs_funcs(gi); 1417 err_comp_cleanup: 1418 composite_dev_cleanup(cdev); 1419 return ret; 1420 } 1421 1422 static void configfs_composite_unbind(struct usb_gadget *gadget) 1423 { 1424 struct usb_composite_dev *cdev; 1425 struct gadget_info *gi; 1426 unsigned long flags; 1427 1428 /* the gi->lock is hold by the caller */ 1429 1430 cdev = get_gadget_data(gadget); 1431 gi = container_of(cdev, struct gadget_info, cdev); 1432 spin_lock_irqsave(&gi->spinlock, flags); 1433 gi->unbind = 1; 1434 spin_unlock_irqrestore(&gi->spinlock, flags); 1435 1436 kfree(otg_desc[0]); 1437 otg_desc[0] = NULL; 1438 purge_configs_funcs(gi); 1439 composite_dev_cleanup(cdev); 1440 usb_ep_autoconfig_reset(cdev->gadget); 1441 spin_lock_irqsave(&gi->spinlock, flags); 1442 cdev->gadget = NULL; 1443 cdev->deactivations = 0; 1444 gadget->deactivated = false; 1445 set_gadget_data(gadget, NULL); 1446 spin_unlock_irqrestore(&gi->spinlock, flags); 1447 } 1448 1449 static int configfs_composite_setup(struct usb_gadget *gadget, 1450 const struct usb_ctrlrequest *ctrl) 1451 { 1452 struct usb_composite_dev *cdev; 1453 struct gadget_info *gi; 1454 unsigned long flags; 1455 int ret; 1456 1457 cdev = get_gadget_data(gadget); 1458 if (!cdev) 1459 return 0; 1460 1461 gi = container_of(cdev, struct gadget_info, cdev); 1462 spin_lock_irqsave(&gi->spinlock, flags); 1463 cdev = get_gadget_data(gadget); 1464 if (!cdev || gi->unbind) { 1465 spin_unlock_irqrestore(&gi->spinlock, flags); 1466 return 0; 1467 } 1468 1469 ret = composite_setup(gadget, ctrl); 1470 spin_unlock_irqrestore(&gi->spinlock, flags); 1471 return ret; 1472 } 1473 1474 static void configfs_composite_disconnect(struct usb_gadget *gadget) 1475 { 1476 struct usb_composite_dev *cdev; 1477 struct gadget_info *gi; 1478 unsigned long flags; 1479 1480 cdev = get_gadget_data(gadget); 1481 if (!cdev) 1482 return; 1483 1484 gi = container_of(cdev, struct gadget_info, cdev); 1485 spin_lock_irqsave(&gi->spinlock, flags); 1486 cdev = get_gadget_data(gadget); 1487 if (!cdev || gi->unbind) { 1488 spin_unlock_irqrestore(&gi->spinlock, flags); 1489 return; 1490 } 1491 1492 composite_disconnect(gadget); 1493 spin_unlock_irqrestore(&gi->spinlock, flags); 1494 } 1495 1496 static void configfs_composite_reset(struct usb_gadget *gadget) 1497 { 1498 struct usb_composite_dev *cdev; 1499 struct gadget_info *gi; 1500 unsigned long flags; 1501 1502 cdev = get_gadget_data(gadget); 1503 if (!cdev) 1504 return; 1505 1506 gi = container_of(cdev, struct gadget_info, cdev); 1507 spin_lock_irqsave(&gi->spinlock, flags); 1508 cdev = get_gadget_data(gadget); 1509 if (!cdev || gi->unbind) { 1510 spin_unlock_irqrestore(&gi->spinlock, flags); 1511 return; 1512 } 1513 1514 composite_reset(gadget); 1515 spin_unlock_irqrestore(&gi->spinlock, flags); 1516 } 1517 1518 static void configfs_composite_suspend(struct usb_gadget *gadget) 1519 { 1520 struct usb_composite_dev *cdev; 1521 struct gadget_info *gi; 1522 unsigned long flags; 1523 1524 cdev = get_gadget_data(gadget); 1525 if (!cdev) 1526 return; 1527 1528 gi = container_of(cdev, struct gadget_info, cdev); 1529 spin_lock_irqsave(&gi->spinlock, flags); 1530 cdev = get_gadget_data(gadget); 1531 if (!cdev || gi->unbind) { 1532 spin_unlock_irqrestore(&gi->spinlock, flags); 1533 return; 1534 } 1535 1536 composite_suspend(gadget); 1537 spin_unlock_irqrestore(&gi->spinlock, flags); 1538 } 1539 1540 static void configfs_composite_resume(struct usb_gadget *gadget) 1541 { 1542 struct usb_composite_dev *cdev; 1543 struct gadget_info *gi; 1544 unsigned long flags; 1545 1546 cdev = get_gadget_data(gadget); 1547 if (!cdev) 1548 return; 1549 1550 gi = container_of(cdev, struct gadget_info, cdev); 1551 spin_lock_irqsave(&gi->spinlock, flags); 1552 cdev = get_gadget_data(gadget); 1553 if (!cdev || gi->unbind) { 1554 spin_unlock_irqrestore(&gi->spinlock, flags); 1555 return; 1556 } 1557 1558 composite_resume(gadget); 1559 spin_unlock_irqrestore(&gi->spinlock, flags); 1560 } 1561 1562 static const struct usb_gadget_driver configfs_driver_template = { 1563 .bind = configfs_composite_bind, 1564 .unbind = configfs_composite_unbind, 1565 1566 .setup = configfs_composite_setup, 1567 .reset = configfs_composite_reset, 1568 .disconnect = configfs_composite_disconnect, 1569 1570 .suspend = configfs_composite_suspend, 1571 .resume = configfs_composite_resume, 1572 1573 .max_speed = USB_SPEED_SUPER_PLUS, 1574 .driver = { 1575 .owner = THIS_MODULE, 1576 }, 1577 .match_existing_only = 1, 1578 }; 1579 1580 static struct config_group *gadgets_make( 1581 struct config_group *group, 1582 const char *name) 1583 { 1584 struct gadget_info *gi; 1585 1586 gi = kzalloc(sizeof(*gi), GFP_KERNEL); 1587 if (!gi) 1588 return ERR_PTR(-ENOMEM); 1589 1590 config_group_init_type_name(&gi->group, name, &gadget_root_type); 1591 1592 config_group_init_type_name(&gi->functions_group, "functions", 1593 &functions_type); 1594 configfs_add_default_group(&gi->functions_group, &gi->group); 1595 1596 config_group_init_type_name(&gi->configs_group, "configs", 1597 &config_desc_type); 1598 configfs_add_default_group(&gi->configs_group, &gi->group); 1599 1600 config_group_init_type_name(&gi->strings_group, "strings", 1601 &gadget_strings_strings_type); 1602 configfs_add_default_group(&gi->strings_group, &gi->group); 1603 1604 config_group_init_type_name(&gi->os_desc_group, "os_desc", 1605 &os_desc_type); 1606 configfs_add_default_group(&gi->os_desc_group, &gi->group); 1607 1608 gi->composite.bind = configfs_do_nothing; 1609 gi->composite.unbind = configfs_do_nothing; 1610 gi->composite.suspend = NULL; 1611 gi->composite.resume = NULL; 1612 gi->composite.max_speed = USB_SPEED_SUPER_PLUS; 1613 1614 spin_lock_init(&gi->spinlock); 1615 mutex_init(&gi->lock); 1616 INIT_LIST_HEAD(&gi->string_list); 1617 INIT_LIST_HEAD(&gi->available_func); 1618 1619 composite_init_dev(&gi->cdev); 1620 gi->cdev.desc.bLength = USB_DT_DEVICE_SIZE; 1621 gi->cdev.desc.bDescriptorType = USB_DT_DEVICE; 1622 gi->cdev.desc.bcdDevice = cpu_to_le16(get_default_bcdDevice()); 1623 1624 gi->composite.gadget_driver = configfs_driver_template; 1625 1626 gi->composite.gadget_driver.driver.name = kasprintf(GFP_KERNEL, 1627 "configfs-gadget.%s", name); 1628 if (!gi->composite.gadget_driver.driver.name) 1629 goto err; 1630 1631 gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); 1632 gi->composite.name = gi->composite.gadget_driver.function; 1633 1634 if (!gi->composite.gadget_driver.function) 1635 goto out_free_driver_name; 1636 1637 return &gi->group; 1638 1639 out_free_driver_name: 1640 kfree(gi->composite.gadget_driver.driver.name); 1641 err: 1642 kfree(gi); 1643 return ERR_PTR(-ENOMEM); 1644 } 1645 1646 static void gadgets_drop(struct config_group *group, struct config_item *item) 1647 { 1648 config_item_put(item); 1649 } 1650 1651 static struct configfs_group_operations gadgets_ops = { 1652 .make_group = &gadgets_make, 1653 .drop_item = &gadgets_drop, 1654 }; 1655 1656 static const struct config_item_type gadgets_type = { 1657 .ct_group_ops = &gadgets_ops, 1658 .ct_owner = THIS_MODULE, 1659 }; 1660 1661 static struct configfs_subsystem gadget_subsys = { 1662 .su_group = { 1663 .cg_item = { 1664 .ci_namebuf = "usb_gadget", 1665 .ci_type = &gadgets_type, 1666 }, 1667 }, 1668 .su_mutex = __MUTEX_INITIALIZER(gadget_subsys.su_mutex), 1669 }; 1670 1671 void unregister_gadget_item(struct config_item *item) 1672 { 1673 struct gadget_info *gi = to_gadget_info(item); 1674 1675 mutex_lock(&gi->lock); 1676 unregister_gadget(gi); 1677 mutex_unlock(&gi->lock); 1678 } 1679 EXPORT_SYMBOL_GPL(unregister_gadget_item); 1680 1681 static int __init gadget_cfs_init(void) 1682 { 1683 int ret; 1684 1685 config_group_init(&gadget_subsys.su_group); 1686 1687 ret = configfs_register_subsystem(&gadget_subsys); 1688 return ret; 1689 } 1690 module_init(gadget_cfs_init); 1691 1692 static void __exit gadget_cfs_exit(void) 1693 { 1694 configfs_unregister_subsystem(&gadget_subsys); 1695 } 1696 module_exit(gadget_cfs_exit); 1697