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