1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * composite.c - infrastructure for Composite USB Gadgets
4  *
5  * Copyright (C) 2006-2008 David Brownell
6  * U-Boot porting: Lukasz Majewski <l.majewski@samsung.com>
7  */
8 #undef DEBUG
9 
10 #include <log.h>
11 #include <dm/devres.h>
12 #include <linux/bitops.h>
13 #include <linux/bug.h>
14 #include <linux/usb/composite.h>
15 #include "u_os_desc.h"
16 
17 #define USB_BUFSIZ	4096
18 
19 /* Helper type for accessing packed u16 pointers */
20 typedef struct { __le16 val; } __packed __le16_packed;
21 
22 static struct usb_composite_driver *composite;
23 static struct usb_configuration *os_desc_config;
24 
25 /* Microsoft OS String Descriptor */
26 static char qw_sign_buf[OS_STRING_QW_SIGN_LEN / 2] = {'M', 'S', 'F', 'T', '1', '0', '0'};
27 
le16_add_cpu_packed(__le16_packed * var,u16 val)28 static inline void le16_add_cpu_packed(__le16_packed *var, u16 val)
29 {
30 	var->val = cpu_to_le16(le16_to_cpu(var->val) + val);
31 }
32 
33 /**
34  * struct usb_os_string - represents OS String to be reported by a gadget
35  * @bLength: total length of the entire descritor, always 0x12
36  * @bDescriptorType: USB_DT_STRING
37  * @qwSignature: the OS String proper
38  * @bMS_VendorCode: code used by the host for subsequent requests
39  * @bPad: not used, must be zero
40  */
41 struct usb_os_string {
42 	__u8	bLength;
43 	__u8	bDescriptorType;
44 	__u8	qwSignature[OS_STRING_QW_SIGN_LEN];
45 	__u8	bMS_VendorCode;
46 	__u8	bPad;
47 } __packed;
48 
49 /**
50  * usb_add_function() - add a function to a configuration
51  * @config: the configuration
52  * @function: the function being added
53  * Context: single threaded during gadget setup
54  *
55  * After initialization, each configuration must have one or more
56  * functions added to it.  Adding a function involves calling its @bind()
57  * method to allocate resources such as interface and string identifiers
58  * and endpoints.
59  *
60  * This function returns the value of the function's bind(), which is
61  * zero for success else a negative errno value.
62  */
usb_add_function(struct usb_configuration * config,struct usb_function * function)63 int usb_add_function(struct usb_configuration *config,
64 		struct usb_function *function)
65 {
66 	int	value = -EINVAL;
67 
68 	debug("adding '%s'/%p to config '%s'/%p\n",
69 			function->name, function,
70 			config->label, config);
71 
72 	if (!function->set_alt || !function->disable)
73 		goto done;
74 
75 	function->config = config;
76 	list_add_tail(&function->list, &config->functions);
77 
78 	if (function->bind) {
79 		value = function->bind(config, function);
80 		if (value < 0) {
81 			list_del(&function->list);
82 			function->config = NULL;
83 		}
84 	} else
85 		value = 0;
86 
87 	if (!config->fullspeed && function->descriptors)
88 		config->fullspeed = 1;
89 	if (!config->highspeed && function->hs_descriptors)
90 		config->highspeed = 1;
91 	if (!config->superspeed && function->ss_descriptors)
92 		config->superspeed = 1;
93 
94 done:
95 	if (value)
96 		debug("adding '%s'/%p --> %d\n",
97 				function->name, function, value);
98 	return value;
99 }
100 
101 /**
102  * usb_function_deactivate - prevent function and gadget enumeration
103  * @function: the function that isn't yet ready to respond
104  *
105  * Blocks response of the gadget driver to host enumeration by
106  * preventing the data line pullup from being activated.  This is
107  * normally called during @bind() processing to change from the
108  * initial "ready to respond" state, or when a required resource
109  * becomes available.
110  *
111  * For example, drivers that serve as a passthrough to a userspace
112  * daemon can block enumeration unless that daemon (such as an OBEX,
113  * MTP, or print server) is ready to handle host requests.
114  *
115  * Not all systems support software control of their USB peripheral
116  * data pullups.
117  *
118  * Returns zero on success, else negative errno.
119  */
usb_function_deactivate(struct usb_function * function)120 int usb_function_deactivate(struct usb_function *function)
121 {
122 	struct usb_composite_dev	*cdev = function->config->cdev;
123 	int				status = 0;
124 
125 	if (cdev->deactivations == 0)
126 		status = usb_gadget_disconnect(cdev->gadget);
127 	if (status == 0)
128 		cdev->deactivations++;
129 
130 	return status;
131 }
132 
133 /**
134  * usb_function_activate - allow function and gadget enumeration
135  * @function: function on which usb_function_activate() was called
136  *
137  * Reverses effect of usb_function_deactivate().  If no more functions
138  * are delaying their activation, the gadget driver will respond to
139  * host enumeration procedures.
140  *
141  * Returns zero on success, else negative errno.
142  */
usb_function_activate(struct usb_function * function)143 int usb_function_activate(struct usb_function *function)
144 {
145 	struct usb_composite_dev	*cdev = function->config->cdev;
146 	int				status = 0;
147 
148 	if (cdev->deactivations == 0)
149 		status = -EINVAL;
150 	else {
151 		cdev->deactivations--;
152 		if (cdev->deactivations == 0)
153 			status = usb_gadget_connect(cdev->gadget);
154 	}
155 
156 	return status;
157 }
158 
159 /**
160  * usb_interface_id() - allocate an unused interface ID
161  * @config: configuration associated with the interface
162  * @function: function handling the interface
163  * Context: single threaded during gadget setup
164  *
165  * usb_interface_id() is called from usb_function.bind() callbacks to
166  * allocate new interface IDs.  The function driver will then store that
167  * ID in interface, association, CDC union, and other descriptors.  It
168  * will also handle any control requests targetted at that interface,
169  * particularly changing its altsetting via set_alt().  There may
170  * also be class-specific or vendor-specific requests to handle.
171  *
172  * All interface identifier should be allocated using this routine, to
173  * ensure that for example different functions don't wrongly assign
174  * different meanings to the same identifier.  Note that since interface
175  * identifers are configuration-specific, functions used in more than
176  * one configuration (or more than once in a given configuration) need
177  * multiple versions of the relevant descriptors.
178  *
179  * Returns the interface ID which was allocated; or -ENODEV if no
180  * more interface IDs can be allocated.
181  */
usb_interface_id(struct usb_configuration * config,struct usb_function * function)182 int usb_interface_id(struct usb_configuration *config,
183 		struct usb_function *function)
184 {
185 	unsigned char id = config->next_interface_id;
186 
187 	if (id < MAX_CONFIG_INTERFACES) {
188 		config->interface[id] = function;
189 		config->next_interface_id = id + 1;
190 		return id;
191 	}
192 	return -ENODEV;
193 }
194 
config_buf(struct usb_configuration * config,enum usb_device_speed speed,void * buf,u8 type)195 static int config_buf(struct usb_configuration *config,
196 		enum usb_device_speed speed, void *buf, u8 type)
197 {
198 	int				len = USB_BUFSIZ - USB_DT_CONFIG_SIZE;
199 	void				*next = buf + USB_DT_CONFIG_SIZE;
200 	struct usb_descriptor_header    **descriptors;
201 	struct usb_config_descriptor	*c;
202 	int				status;
203 	struct usb_function		*f;
204 
205 	/* write the config descriptor */
206 	c = buf;
207 	c->bLength = USB_DT_CONFIG_SIZE;
208 	c->bDescriptorType = type;
209 
210 	c->bNumInterfaces = config->next_interface_id;
211 	c->bConfigurationValue = config->bConfigurationValue;
212 	c->iConfiguration = config->iConfiguration;
213 	c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
214 	c->bMaxPower = config->bMaxPower ? : (CONFIG_USB_GADGET_VBUS_DRAW / 2);
215 
216 	/* There may be e.g. OTG descriptors */
217 	if (config->descriptors) {
218 		status = usb_descriptor_fillbuf(next, len,
219 				config->descriptors);
220 		if (status < 0)
221 			return status;
222 		len -= status;
223 		next += status;
224 	}
225 
226 	/* add each function's descriptors */
227 	list_for_each_entry(f, &config->functions, list) {
228 		if (speed == USB_SPEED_SUPER)
229 			descriptors = f->ss_descriptors;
230 		else if (speed == USB_SPEED_HIGH)
231 			descriptors = f->hs_descriptors;
232 		else
233 			descriptors = f->descriptors;
234 		if (!descriptors)
235 			continue;
236 		status = usb_descriptor_fillbuf(next, len,
237 			(const struct usb_descriptor_header **) descriptors);
238 		if (status < 0)
239 			return status;
240 		len -= status;
241 		next += status;
242 	}
243 
244 	len = next - buf;
245 	c->wTotalLength = cpu_to_le16(len);
246 	return len;
247 }
248 
config_desc(struct usb_composite_dev * cdev,unsigned w_value)249 static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
250 {
251 	enum usb_device_speed		speed = USB_SPEED_UNKNOWN;
252 	struct usb_gadget		*gadget = cdev->gadget;
253 	u8				type = w_value >> 8;
254 	int                             hs = 0;
255 	struct usb_configuration	*c;
256 	struct list_head		*pos;
257 
258 	if (gadget_is_superspeed(gadget)) {
259 		speed = gadget->speed;
260 	} else if (gadget_is_dualspeed(gadget)) {
261 		if (gadget->speed == USB_SPEED_HIGH)
262 			hs = 1;
263 		if (type == USB_DT_OTHER_SPEED_CONFIG)
264 			hs = !hs;
265 		if (hs)
266 			speed = USB_SPEED_HIGH;
267 	}
268 
269 	w_value &= 0xff;
270 
271 	pos = &cdev->configs;
272 	c = cdev->os_desc_config;
273 	if (c)
274 		goto check_config;
275 
276 	while ((pos = pos->next) !=  &cdev->configs) {
277 		c = list_entry(pos, typeof(*c), list);
278 
279 		/* skip OS Descriptors config which is handled separately */
280 		if (c == cdev->os_desc_config)
281 			continue;
282 
283 check_config:
284 		if (speed == USB_SPEED_SUPER) {
285 			if (!c->superspeed)
286 				continue;
287 		} else if (speed == USB_SPEED_HIGH) {
288 			if (!c->highspeed)
289 				continue;
290 		} else {
291 			if (!c->fullspeed)
292 				continue;
293 		}
294 		if (w_value == 0)
295 			return config_buf(c, speed, cdev->req->buf, type);
296 		w_value--;
297 	}
298 	return -EINVAL;
299 }
300 
count_configs(struct usb_composite_dev * cdev,unsigned type)301 static int count_configs(struct usb_composite_dev *cdev, unsigned type)
302 {
303 	struct usb_gadget		*gadget = cdev->gadget;
304 	unsigned			count = 0;
305 	int				hs = 0;
306 	int				ss = 0;
307 	struct usb_configuration	*c;
308 
309 	if (gadget->speed == USB_SPEED_SUPER)
310 		ss = 1;
311 
312 	if (gadget_is_dualspeed(gadget)) {
313 		if (gadget->speed == USB_SPEED_HIGH)
314 			hs = 1;
315 		if (type == USB_DT_DEVICE_QUALIFIER)
316 			hs = !hs;
317 	}
318 	list_for_each_entry(c, &cdev->configs, list) {
319 		/* ignore configs that won't work at this speed */
320 		if (ss) {
321 			if (!c->superspeed)
322 				continue;
323 		} else if (hs) {
324 			if (!c->highspeed)
325 				continue;
326 		} else {
327 			if (!c->fullspeed)
328 				continue;
329 		}
330 		count++;
331 	}
332 	return count;
333 }
334 
device_qual(struct usb_composite_dev * cdev)335 static void device_qual(struct usb_composite_dev *cdev)
336 {
337 	struct usb_qualifier_descriptor	*qual = cdev->req->buf;
338 
339 	qual->bLength = sizeof(*qual);
340 	qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER;
341 	/* POLICY: same bcdUSB and device type info at both speeds */
342 	qual->bcdUSB = cdev->desc.bcdUSB;
343 	qual->bDeviceClass = cdev->desc.bDeviceClass;
344 	qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
345 	qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
346 	/* ASSUME same EP0 fifo size at both speeds */
347 	qual->bMaxPacketSize0 = cdev->gadget->ep0->maxpacket;
348 	qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
349 	qual->bRESERVED = 0;
350 }
351 
reset_config(struct usb_composite_dev * cdev)352 static void reset_config(struct usb_composite_dev *cdev)
353 {
354 	struct usb_function		*f;
355 
356 	debug("%s:\n", __func__);
357 
358 	list_for_each_entry(f, &cdev->config->functions, list) {
359 		if (f->disable)
360 			f->disable(f);
361 
362 		bitmap_zero(f->endpoints, 32);
363 	}
364 	cdev->config = NULL;
365 }
366 
set_config(struct usb_composite_dev * cdev,const struct usb_ctrlrequest * ctrl,unsigned number)367 static int set_config(struct usb_composite_dev *cdev,
368 		const struct usb_ctrlrequest *ctrl, unsigned number)
369 {
370 	struct usb_gadget	*gadget = cdev->gadget;
371 	unsigned		power = gadget_is_otg(gadget) ? 8 : 100;
372 	struct usb_descriptor_header **descriptors;
373 	int			result = -EINVAL;
374 	struct usb_endpoint_descriptor *ep;
375 	struct usb_configuration *c = NULL;
376 	int                     addr;
377 	int			tmp;
378 	struct usb_function	*f;
379 
380 	if (cdev->config)
381 		reset_config(cdev);
382 
383 	if (number) {
384 		list_for_each_entry(c, &cdev->configs, list) {
385 			if (c->bConfigurationValue == number) {
386 				result = 0;
387 				break;
388 			}
389 		}
390 		if (result < 0)
391 			goto done;
392 	} else
393 		result = 0;
394 
395 	debug("%s: %s speed config #%d: %s\n", __func__,
396 	     ({ char *speed;
397 		     switch (gadget->speed) {
398 		     case USB_SPEED_LOW:
399 			     speed = "low";
400 			     break;
401 		     case USB_SPEED_FULL:
402 			     speed = "full";
403 			     break;
404 		     case USB_SPEED_HIGH:
405 			     speed = "high";
406 			     break;
407 		     case USB_SPEED_SUPER:
408 			     speed = "super";
409 			     break;
410 		     default:
411 			     speed = "?";
412 			     break;
413 		     };
414 		     speed;
415 	     }), number, c ? c->label : "unconfigured");
416 
417 	if (!c)
418 		goto done;
419 
420 	cdev->config = c;
421 
422 	/* Initialize all interfaces by setting them to altsetting zero. */
423 	for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) {
424 		f = c->interface[tmp];
425 		if (!f)
426 			break;
427 
428 		/*
429 		 * Record which endpoints are used by the function. This is used
430 		 * to dispatch control requests targeted at that endpoint to the
431 		 * function's setup callback instead of the current
432 		 * configuration's setup callback.
433 		 */
434 		if (gadget->speed == USB_SPEED_SUPER)
435 			descriptors = f->ss_descriptors;
436 		else if (gadget->speed == USB_SPEED_HIGH)
437 			descriptors = f->hs_descriptors;
438 		else
439 			descriptors = f->descriptors;
440 
441 		for (; *descriptors; ++descriptors) {
442 			if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT)
443 				continue;
444 
445 			ep = (struct usb_endpoint_descriptor *)*descriptors;
446 			addr = ((ep->bEndpointAddress & 0x80) >> 3)
447 			     |	(ep->bEndpointAddress & 0x0f);
448 			generic_set_bit(addr, f->endpoints);
449 		}
450 
451 		result = f->set_alt(f, tmp, 0);
452 		if (result < 0) {
453 			debug("interface %d (%s/%p) alt 0 --> %d\n",
454 					tmp, f->name, f, result);
455 
456 			reset_config(cdev);
457 			goto done;
458 		}
459 	}
460 
461 	/* when we return, be sure our power usage is valid */
462 	power = c->bMaxPower ? (2 * c->bMaxPower) : CONFIG_USB_GADGET_VBUS_DRAW;
463 done:
464 	usb_gadget_vbus_draw(gadget, power);
465 	return result;
466 }
467 
468 /**
469  * usb_add_config() - add a configuration to a device.
470  * @cdev: wraps the USB gadget
471  * @config: the configuration, with bConfigurationValue assigned
472  * Context: single threaded during gadget setup
473  *
474  * One of the main tasks of a composite driver's bind() routine is to
475  * add each of the configurations it supports, using this routine.
476  *
477  * This function returns the value of the configuration's bind(), which
478  * is zero for success else a negative errno value.  Binding configurations
479  * assigns global resources including string IDs, and per-configuration
480  * resources such as interface IDs and endpoints.
481  */
usb_add_config(struct usb_composite_dev * cdev,struct usb_configuration * config)482 int usb_add_config(struct usb_composite_dev *cdev,
483 		struct usb_configuration *config)
484 {
485 	int				status = -EINVAL;
486 	struct usb_configuration	*c;
487 	struct usb_function		*f;
488 	unsigned int			i;
489 
490 	debug("%s: adding config #%u '%s'/%p\n", __func__,
491 			config->bConfigurationValue,
492 			config->label, config);
493 
494 	if (!config->bConfigurationValue || !config->bind)
495 		goto done;
496 
497 	/* Prevent duplicate configuration identifiers */
498 	list_for_each_entry(c, &cdev->configs, list) {
499 		if (c->bConfigurationValue == config->bConfigurationValue) {
500 			status = -EBUSY;
501 			goto done;
502 		}
503 	}
504 
505 	config->cdev = cdev;
506 	list_add_tail(&config->list, &cdev->configs);
507 
508 	INIT_LIST_HEAD(&config->functions);
509 	config->next_interface_id = 0;
510 
511 	status = config->bind(config);
512 	if (status < 0) {
513 		list_del(&config->list);
514 		config->cdev = NULL;
515 	} else {
516 		debug("cfg %d/%p speeds:%s%s%s\n",
517 			config->bConfigurationValue, config,
518 			config->superspeed ? " super" : "",
519 			config->highspeed ? " high" : "",
520 			config->fullspeed
521 				? (gadget_is_dualspeed(cdev->gadget)
522 					? " full"
523 					: " full/low")
524 				: "");
525 
526 		for (i = 0; i < MAX_CONFIG_INTERFACES; i++) {
527 			f = config->interface[i];
528 			if (!f)
529 				continue;
530 			debug("%s: interface %d = %s/%p\n",
531 			      __func__, i, f->name, f);
532 		}
533 	}
534 
535 	/*
536 	 * If one function of config is not super speed capable,
537 	 * force the gadget to be high speed so controller driver
538 	 * can init HW to be USB 2.0
539 	 */
540 	if (gadget_is_superspeed(cdev->gadget)) {
541 		list_for_each_entry(f, &config->functions, list) {
542 			if (!f->ss_descriptors)
543 				cdev->gadget->max_speed =
544 					USB_SPEED_HIGH;
545 		}
546 	}
547 
548 	usb_ep_autoconfig_reset(cdev->gadget);
549 
550 	os_desc_config = config;
551 	cdev->os_desc_config = os_desc_config;
552 
553 done:
554 	if (status)
555 		debug("added config '%s'/%u --> %d\n", config->label,
556 				config->bConfigurationValue, status);
557 	return status;
558 }
559 
560 /*
561  * We support strings in multiple languages ... string descriptor zero
562  * says which languages are supported.	The typical case will be that
563  * only one language (probably English) is used, with I18N handled on
564  * the host side.
565  */
566 
collect_langs(struct usb_gadget_strings ** sp,void * buf)567 static void collect_langs(struct usb_gadget_strings **sp, void *buf)
568 {
569 	const struct usb_gadget_strings	*s;
570 	u16				language;
571 	__le16_packed			*tmp;
572 	__le16_packed			*end = (buf + 252);
573 
574 	while (*sp) {
575 		s = *sp;
576 		language = cpu_to_le16(s->language);
577 		for (tmp = buf; tmp->val && tmp < end; tmp++) {
578 			if (tmp->val == language)
579 				goto repeat;
580 		}
581 		tmp->val = language;
582 repeat:
583 		sp++;
584 	}
585 }
586 
lookup_string(struct usb_gadget_strings ** sp,void * buf,u16 language,int id)587 static int lookup_string(
588 	struct usb_gadget_strings	**sp,
589 	void				*buf,
590 	u16				language,
591 	int				id
592 )
593 {
594 	int				value;
595 	struct usb_gadget_strings	*s;
596 
597 	while (*sp) {
598 		s = *sp++;
599 		if (s->language != language)
600 			continue;
601 		value = usb_gadget_get_string(s, id, buf);
602 		if (value > 0)
603 			return value;
604 	}
605 	return -EINVAL;
606 }
607 
get_string(struct usb_composite_dev * cdev,void * buf,u16 language,int id)608 static int get_string(struct usb_composite_dev *cdev,
609 		void *buf, u16 language, int id)
610 {
611 	struct usb_string_descriptor	*s = buf;
612 	struct usb_gadget_strings	**sp;
613 	int				len;
614 	struct usb_configuration	*c;
615 	struct usb_function		*f;
616 
617 	/*
618 	 * Yes, not only is USB's I18N support probably more than most
619 	 * folk will ever care about ... also, it's all supported here.
620 	 * (Except for UTF8 support for Unicode's "Astral Planes".)
621 	 */
622 
623 	/* 0 == report all available language codes */
624 	if (id == 0) {
625 		memset(s, 0, 256);
626 		s->bDescriptorType = USB_DT_STRING;
627 
628 		sp = composite->strings;
629 		if (sp)
630 			collect_langs(sp, s->wData);
631 
632 		list_for_each_entry(c, &cdev->configs, list) {
633 			sp = c->strings;
634 			if (sp)
635 				collect_langs(sp, s->wData);
636 
637 			list_for_each_entry(f, &c->functions, list) {
638 				sp = f->strings;
639 				if (sp)
640 					collect_langs(sp, s->wData);
641 			}
642 		}
643 
644 		for (len = 0; len <= 126 && s->wData[len]; len++)
645 			continue;
646 		if (!len)
647 			return -EINVAL;
648 
649 		s->bLength = 2 * (len + 1);
650 		return s->bLength;
651 	}
652 
653 	if (cdev->use_os_string && language == 0 && id == OS_STRING_IDX) {
654 		struct usb_os_string *b = buf;
655 		b->bLength = sizeof(*b);
656 		b->bDescriptorType = USB_DT_STRING;
657 		memcpy(&b->qwSignature, cdev->qw_sign, sizeof(b->qwSignature));
658 		b->bMS_VendorCode = cdev->b_vendor_code;
659 		b->bPad = 0;
660 		return sizeof(*b);
661 	}
662 
663 	/*
664 	 * Otherwise, look up and return a specified string.  String IDs
665 	 * are device-scoped, so we look up each string table we're told
666 	 * about.  These lookups are infrequent; simpler-is-better here.
667 	 */
668 	if (composite->strings) {
669 		len = lookup_string(composite->strings, buf, language, id);
670 		if (len > 0)
671 			return len;
672 	}
673 	list_for_each_entry(c, &cdev->configs, list) {
674 		if (c->strings) {
675 			len = lookup_string(c->strings, buf, language, id);
676 			if (len > 0)
677 				return len;
678 		}
679 		list_for_each_entry(f, &c->functions, list) {
680 			if (!f->strings)
681 				continue;
682 			len = lookup_string(f->strings, buf, language, id);
683 			if (len > 0)
684 				return len;
685 		}
686 	}
687 	return -EINVAL;
688 }
689 
690 /**
691  * usb_string_id() - allocate an unused string ID
692  * @cdev: the device whose string descriptor IDs are being allocated
693  * Context: single threaded during gadget setup
694  *
695  * @usb_string_id() is called from bind() callbacks to allocate
696  * string IDs.	Drivers for functions, configurations, or gadgets will
697  * then store that ID in the appropriate descriptors and string table.
698  *
699  * All string identifier should be allocated using this,
700  * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure
701  * that for example different functions don't wrongly assign different
702  * meanings to the same identifier.
703  */
usb_string_id(struct usb_composite_dev * cdev)704 int usb_string_id(struct usb_composite_dev *cdev)
705 {
706 	if (cdev->next_string_id < 254) {
707 		/*
708 		 * string id 0 is reserved by USB spec for list of
709 		 * supported languages
710 		 * 255 reserved as well? -- mina86
711 		 */
712 		cdev->next_string_id++;
713 		return cdev->next_string_id;
714 	}
715 	return -ENODEV;
716 }
717 
718 /**
719  * usb_string_ids() - allocate unused string IDs in batch
720  * @cdev: the device whose string descriptor IDs are being allocated
721  * @str: an array of usb_string objects to assign numbers to
722  * Context: single threaded during gadget setup
723  *
724  * @usb_string_ids() is called from bind() callbacks to allocate
725  * string IDs.	Drivers for functions, configurations, or gadgets will
726  * then copy IDs from the string table to the appropriate descriptors
727  * and string table for other languages.
728  *
729  * All string identifier should be allocated using this,
730  * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
731  * example different functions don't wrongly assign different meanings
732  * to the same identifier.
733  */
usb_string_ids_tab(struct usb_composite_dev * cdev,struct usb_string * str)734 int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
735 {
736 	u8 next = cdev->next_string_id;
737 
738 	for (; str->s; ++str) {
739 		if (next >= 254)
740 			return -ENODEV;
741 		str->id = ++next;
742 	}
743 
744 	cdev->next_string_id = next;
745 
746 	return 0;
747 }
748 
749 /**
750  * usb_string_ids_n() - allocate unused string IDs in batch
751  * @c: the device whose string descriptor IDs are being allocated
752  * @n: number of string IDs to allocate
753  * Context: single threaded during gadget setup
754  *
755  * Returns the first requested ID.  This ID and next @n-1 IDs are now
756  * valid IDs.  At least provided that @n is non-zero because if it
757  * is, returns last requested ID which is now very useful information.
758  *
759  * @usb_string_ids_n() is called from bind() callbacks to allocate
760  * string IDs.	Drivers for functions, configurations, or gadgets will
761  * then store that ID in the appropriate descriptors and string table.
762  *
763  * All string identifier should be allocated using this,
764  * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
765  * example different functions don't wrongly assign different meanings
766  * to the same identifier.
767  */
usb_string_ids_n(struct usb_composite_dev * c,unsigned n)768 int usb_string_ids_n(struct usb_composite_dev *c, unsigned n)
769 {
770 	u8 next = c->next_string_id;
771 
772 	if (n > 254 || next + n > 254)
773 		return -ENODEV;
774 
775 	c->next_string_id += n;
776 	return next + 1;
777 }
778 
composite_setup_complete(struct usb_ep * ep,struct usb_request * req)779 static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
780 {
781 	if (req->status || req->actual != req->length)
782 		debug("%s: setup complete --> %d, %d/%d\n", __func__,
783 				req->status, req->actual, req->length);
784 }
785 
bos_desc(struct usb_composite_dev * cdev)786 static int bos_desc(struct usb_composite_dev *cdev)
787 {
788 	struct usb_ext_cap_descriptor   *usb_ext;
789 	struct usb_dcd_config_params	dcd_config_params;
790 	struct usb_bos_descriptor       *bos = cdev->req->buf;
791 
792 	bos->bLength = USB_DT_BOS_SIZE;
793 	bos->bDescriptorType = USB_DT_BOS;
794 
795 	bos->wTotalLength = cpu_to_le16(USB_DT_BOS_SIZE);
796 	bos->bNumDeviceCaps = 0;
797 
798 	/*
799 	 * A SuperSpeed device shall include the USB2.0 extension descriptor
800 	 * and shall support LPM when operating in USB2.0 HS mode.
801 	 */
802 	usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
803 	bos->bNumDeviceCaps++;
804 	le16_add_cpu_packed((__le16_packed *)&bos->wTotalLength,
805 			    USB_DT_USB_EXT_CAP_SIZE);
806 	usb_ext->bLength = USB_DT_USB_EXT_CAP_SIZE;
807 	usb_ext->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
808 	usb_ext->bDevCapabilityType = USB_CAP_TYPE_EXT;
809 	usb_ext->bmAttributes =
810 		cpu_to_le32(USB_LPM_SUPPORT | USB_BESL_SUPPORT);
811 
812 	/*
813 	 * The Superspeed USB Capability descriptor shall be implemented
814 	 * by all SuperSpeed devices.
815 	 */
816 	if (gadget_is_superspeed(cdev->gadget)) {
817 		struct usb_ss_cap_descriptor *ss_cap;
818 
819 		ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
820 		bos->bNumDeviceCaps++;
821 		le16_add_cpu_packed((__le16_packed *)&bos->wTotalLength,
822 				    USB_DT_USB_SS_CAP_SIZE);
823 		ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
824 		ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
825 		ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;
826 		ss_cap->bmAttributes = 0; /* LTM is not supported yet */
827 		ss_cap->wSpeedSupported =
828 			cpu_to_le16(USB_LOW_SPEED_OPERATION |
829 				    USB_FULL_SPEED_OPERATION |
830 				    USB_HIGH_SPEED_OPERATION |
831 				    USB_5GBPS_OPERATION);
832 		ss_cap->bFunctionalitySupport = USB_LOW_SPEED_OPERATION;
833 
834 		/* Get Controller configuration */
835 		if (cdev->gadget->ops->get_config_params) {
836 			cdev->gadget->ops->get_config_params(
837 				&dcd_config_params);
838 		} else {
839 			dcd_config_params.bU1devExitLat =
840 				USB_DEFAULT_U1_DEV_EXIT_LAT;
841 			dcd_config_params.bU2DevExitLat =
842 				cpu_to_le16(USB_DEFAULT_U2_DEV_EXIT_LAT);
843 		}
844 		ss_cap->bU1devExitLat = dcd_config_params.bU1devExitLat;
845 		ss_cap->bU2DevExitLat = dcd_config_params.bU2DevExitLat;
846 	}
847 	return le16_to_cpu(bos->wTotalLength);
848 }
849 
count_ext_compat(struct usb_configuration * c)850 static int count_ext_compat(struct usb_configuration *c)
851 {
852 	int i, res;
853 
854 	res = 0;
855 	for (i = 0; i < c->next_interface_id; ++i) {
856 		struct usb_function *f;
857 		int j;
858 
859 		f = c->interface[i];
860 		for (j = 0; j < f->os_desc_n; ++j) {
861 			struct usb_os_desc *d;
862 
863 			if (i != f->os_desc_table[j].if_id)
864 				continue;
865 			d = f->os_desc_table[j].os_desc;
866 			if (d && d->ext_compat_id)
867 				++res;
868 		}
869 	}
870 	BUG_ON(res > 255);
871 	return res;
872 }
873 
fill_ext_compat(struct usb_configuration * c,u8 * buf)874 static void fill_ext_compat(struct usb_configuration *c, u8 *buf)
875 {
876 	int i, count;
877 
878 	count = 16;
879 	for (i = 0; i < c->next_interface_id; ++i) {
880 		struct usb_function *f;
881 		int j;
882 
883 		f = c->interface[i];
884 		for (j = 0; j < f->os_desc_n; ++j) {
885 			struct usb_os_desc *d;
886 
887 			if (i != f->os_desc_table[j].if_id)
888 				continue;
889 			d = f->os_desc_table[j].os_desc;
890 			if (d && d->ext_compat_id) {
891 				*buf++ = i;
892 				*buf++ = 0x01;
893 				memcpy(buf, d->ext_compat_id, 16);
894 				buf += 22;
895 			} else {
896 				++buf;
897 				*buf = 0x01;
898 				buf += 23;
899 			}
900 			count += 24;
901 			if (count >= 4096)
902 				return;
903 		}
904 	}
905 }
906 
count_ext_prop(struct usb_configuration * c,int interface)907 static int count_ext_prop(struct usb_configuration *c, int interface)
908 {
909 	struct usb_function *f;
910 	int j;
911 
912 	f = c->interface[interface];
913 	for (j = 0; j < f->os_desc_n; ++j) {
914 		struct usb_os_desc *d;
915 
916 		if (interface != f->os_desc_table[j].if_id)
917 			continue;
918 		d = f->os_desc_table[j].os_desc;
919 		if (d && d->ext_compat_id)
920 			return d->ext_prop_count;
921 	}
922 	return 0;
923 }
924 
len_ext_prop(struct usb_configuration * c,int interface)925 static int len_ext_prop(struct usb_configuration *c, int interface)
926 {
927 	struct usb_function *f;
928 	struct usb_os_desc *d;
929 	int j, res;
930 
931 	res = 10; /* header length */
932 	f = c->interface[interface];
933 	for (j = 0; j < f->os_desc_n; ++j) {
934 		if (interface != f->os_desc_table[j].if_id)
935 			continue;
936 		d = f->os_desc_table[j].os_desc;
937 		if (d)
938 			return min(res + d->ext_prop_len, 4096);
939 	}
940 	return res;
941 }
942 
fill_ext_prop(struct usb_configuration * c,int interface,u8 * buf)943 static int fill_ext_prop(struct usb_configuration *c, int interface, u8 *buf)
944 {
945 	struct usb_function *f;
946 	struct usb_os_desc *d;
947 	struct usb_os_desc_ext_prop *ext_prop;
948 	int j, count, n, ret;
949 	u8 *start = buf;
950 
951 	f = c->interface[interface];
952 	for (j = 0; j < f->os_desc_n; ++j) {
953 		if (interface != f->os_desc_table[j].if_id)
954 			continue;
955 		d = f->os_desc_table[j].os_desc;
956 		if (d)
957 			list_for_each_entry(ext_prop, &d->ext_prop, entry) {
958 				/* 4kB minus header length */
959 				n = buf - start;
960 				if (n >= 4086)
961 					return 0;
962 
963 				count = ext_prop->data_len +
964 					ext_prop->name_len + 14;
965 				if (count > 4086 - n)
966 					return -EINVAL;
967 				usb_ext_prop_put_size(buf, count);
968 				usb_ext_prop_put_type(buf, ext_prop->type);
969 				ret = usb_ext_prop_put_name(buf, ext_prop->name,
970 							    ext_prop->name_len);
971 				if (ret < 0)
972 					return ret;
973 				switch (ext_prop->type) {
974 				case USB_EXT_PROP_UNICODE:
975 				case USB_EXT_PROP_UNICODE_ENV:
976 				case USB_EXT_PROP_UNICODE_LINK:
977 					usb_ext_prop_put_unicode(buf, ret,
978 							 ext_prop->data,
979 							 ext_prop->data_len);
980 					break;
981 				case USB_EXT_PROP_BINARY:
982 					usb_ext_prop_put_binary(buf, ret,
983 							ext_prop->data,
984 							ext_prop->data_len);
985 					break;
986 				case USB_EXT_PROP_LE32:
987 					/* not implemented */
988 				case USB_EXT_PROP_BE32:
989 					/* not implemented */
990 				default:
991 					return -EINVAL;
992 				}
993 				buf += count;
994 			}
995 	}
996 
997 	return 0;
998 }
999 
1000 /*
1001  * The setup() callback implements all the ep0 functionality that's
1002  * not handled lower down, in hardware or the hardware driver(like
1003  * device and endpoint feature flags, and their status).  It's all
1004  * housekeeping for the gadget function we're implementing.  Most of
1005  * the work is in config and function specific setup.
1006  */
1007 static int
composite_setup(struct usb_gadget * gadget,const struct usb_ctrlrequest * ctrl)1008 composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
1009 {
1010 	u16				w_length = le16_to_cpu(ctrl->wLength);
1011 	u16				w_index = le16_to_cpu(ctrl->wIndex);
1012 	u16				w_value = le16_to_cpu(ctrl->wValue);
1013 	struct usb_composite_dev	*cdev = get_gadget_data(gadget);
1014 	u8				intf = w_index & 0xFF;
1015 	int				value = -EOPNOTSUPP;
1016 	struct usb_request		*req = cdev->req;
1017 	struct usb_function		*f = NULL;
1018 	int				standard;
1019 	u8				endp;
1020 	struct usb_configuration	*c;
1021 
1022 	/*
1023 	 * partial re-init of the response message; the function or the
1024 	 * gadget might need to intercept e.g. a control-OUT completion
1025 	 * when we delegate to it.
1026 	 */
1027 	req->zero = 0;
1028 	req->complete = composite_setup_complete;
1029 	req->length = USB_BUFSIZ;
1030 	gadget->ep0->driver_data = cdev;
1031 	standard = (ctrl->bRequestType & USB_TYPE_MASK)
1032 						== USB_TYPE_STANDARD;
1033 	if (!standard)
1034 		goto unknown;
1035 
1036 	switch (ctrl->bRequest) {
1037 
1038 	/* we handle all standard USB descriptors */
1039 	case USB_REQ_GET_DESCRIPTOR:
1040 		if (ctrl->bRequestType != USB_DIR_IN)
1041 			goto unknown;
1042 		switch (w_value >> 8) {
1043 
1044 		case USB_DT_DEVICE:
1045 			cdev->desc.bNumConfigurations =
1046 				count_configs(cdev, USB_DT_DEVICE);
1047 
1048 			cdev->desc.bMaxPacketSize0 =
1049 				cdev->gadget->ep0->maxpacket;
1050 			if (gadget->speed >= USB_SPEED_SUPER) {
1051 				cdev->desc.bcdUSB = cpu_to_le16(0x0310);
1052 				cdev->desc.bMaxPacketSize0 = 9;
1053 			} else {
1054 				cdev->desc.bcdUSB = cpu_to_le16(0x0200);
1055 			}
1056 			value = min(w_length, (u16) sizeof cdev->desc);
1057 			memcpy(req->buf, &cdev->desc, value);
1058 			break;
1059 		case USB_DT_DEVICE_QUALIFIER:
1060 			if (!gadget_is_dualspeed(gadget) ||
1061 			    gadget->speed >= USB_SPEED_SUPER)
1062 				break;
1063 			device_qual(cdev);
1064 			value = min_t(int, w_length,
1065 				      sizeof(struct usb_qualifier_descriptor));
1066 			break;
1067 		case USB_DT_OTHER_SPEED_CONFIG:
1068 			if (!gadget_is_dualspeed(gadget) ||
1069 			    gadget->speed >= USB_SPEED_SUPER)
1070 				break;
1071 
1072 		case USB_DT_CONFIG:
1073 			value = config_desc(cdev, w_value);
1074 			if (value >= 0)
1075 				value = min(w_length, (u16) value);
1076 			break;
1077 		case USB_DT_STRING:
1078 			value = get_string(cdev, req->buf,
1079 					w_index, w_value & 0xff);
1080 			if (value >= 0)
1081 				value = min(w_length, (u16) value);
1082 			break;
1083 		case USB_DT_BOS:
1084 			/*
1085 			 * Super speed connection should support BOS, and
1086 			 * USB compliance test (USB 2.0 Command Verifier)
1087 			 * also issues this request, return for now for
1088 			 * USB 2.0 connection.
1089 			 */
1090 			if (gadget->speed >= USB_SPEED_SUPER) {
1091 				value = bos_desc(cdev);
1092 				value = min(w_length, (u16)value);
1093 			}
1094 			break;
1095 		default:
1096 			goto unknown;
1097 		}
1098 		break;
1099 
1100 	/* any number of configs can work */
1101 	case USB_REQ_SET_CONFIGURATION:
1102 		if (ctrl->bRequestType != 0)
1103 			goto unknown;
1104 		if (gadget_is_otg(gadget)) {
1105 			if (gadget->a_hnp_support)
1106 				debug("HNP available\n");
1107 			else if (gadget->a_alt_hnp_support)
1108 				debug("HNP on another port\n");
1109 			else
1110 				debug("HNP inactive\n");
1111 		}
1112 
1113 		value = set_config(cdev, ctrl, w_value);
1114 		break;
1115 	case USB_REQ_GET_CONFIGURATION:
1116 		if (ctrl->bRequestType != USB_DIR_IN)
1117 			goto unknown;
1118 		if (cdev->config)
1119 			*(u8 *)req->buf = cdev->config->bConfigurationValue;
1120 		else
1121 			*(u8 *)req->buf = 0;
1122 		value = min(w_length, (u16) 1);
1123 		break;
1124 
1125 	/*
1126 	 * function drivers must handle get/set altsetting; if there's
1127 	 * no get() method, we know only altsetting zero works.
1128 	 */
1129 	case USB_REQ_SET_INTERFACE:
1130 		if (ctrl->bRequestType != USB_RECIP_INTERFACE)
1131 			goto unknown;
1132 		if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES)
1133 			break;
1134 		f = cdev->config->interface[intf];
1135 		if (!f)
1136 			break;
1137 		if (w_value && !f->set_alt)
1138 			break;
1139 		value = f->set_alt(f, w_index, w_value);
1140 		break;
1141 	case USB_REQ_GET_INTERFACE:
1142 		if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
1143 			goto unknown;
1144 		if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES)
1145 			break;
1146 		f = cdev->config->interface[intf];
1147 		if (!f)
1148 			break;
1149 		/* lots of interfaces only need altsetting zero... */
1150 		value = f->get_alt ? f->get_alt(f, w_index) : 0;
1151 		if (value < 0)
1152 			break;
1153 		*((u8 *)req->buf) = value;
1154 		value = min(w_length, (u16) 1);
1155 		break;
1156 	default:
1157 unknown:
1158 		/*
1159 		 * OS descriptors handling
1160 		 */
1161 		if (CONFIG_IS_ENABLED(USB_GADGET_OS_DESCRIPTORS) && cdev->use_os_string &&
1162 		    cdev->os_desc_config && (ctrl->bRequestType & USB_TYPE_VENDOR) &&
1163 		    ctrl->bRequest == cdev->b_vendor_code) {
1164 			struct usb_configuration	*os_desc_cfg;
1165 			u8				*buf;
1166 			int				interface;
1167 			int				count = 0;
1168 
1169 			buf = req->buf;
1170 			os_desc_cfg = cdev->os_desc_config;
1171 			memset(buf, 0, w_length);
1172 			buf[5] = 0x01;
1173 			switch (ctrl->bRequestType & USB_RECIP_MASK) {
1174 			case USB_RECIP_DEVICE:
1175 				if (w_index != 0x4 || (w_value >> 8))
1176 					break;
1177 				buf[6] = w_index;
1178 				if (w_length == 0x10) {
1179 					/* Number of ext compat interfaces */
1180 					count = count_ext_compat(os_desc_cfg);
1181 					buf[8] = count;
1182 					count *= 24; /* 24 B/ext compat desc */
1183 					count += 16; /* header */
1184 					put_unaligned_le32(count, buf);
1185 					value = w_length;
1186 				} else {
1187 					/* "extended compatibility ID"s */
1188 					count = count_ext_compat(os_desc_cfg);
1189 					buf[8] = count;
1190 					count *= 24; /* 24 B/ext compat desc */
1191 					count += 16; /* header */
1192 					put_unaligned_le32(count, buf);
1193 					buf += 16;
1194 					fill_ext_compat(os_desc_cfg, buf);
1195 					value = w_length;
1196 				}
1197 				break;
1198 			case USB_RECIP_INTERFACE:
1199 				if (w_index != 0x5 || (w_value >> 8))
1200 					break;
1201 				interface = w_value & 0xFF;
1202 				buf[6] = w_index;
1203 				if (w_length == 0x0A) {
1204 					count = count_ext_prop(os_desc_cfg,
1205 						interface);
1206 					put_unaligned_le16(count, buf + 8);
1207 					count = len_ext_prop(os_desc_cfg,
1208 						interface);
1209 					put_unaligned_le32(count, buf);
1210 
1211 					value = w_length;
1212 				} else {
1213 					count = count_ext_prop(os_desc_cfg,
1214 						interface);
1215 					put_unaligned_le16(count, buf + 8);
1216 					count = len_ext_prop(os_desc_cfg,
1217 						interface);
1218 					put_unaligned_le32(count, buf);
1219 					buf += 10;
1220 					value = fill_ext_prop(os_desc_cfg,
1221 							      interface, buf);
1222 					if (value < 0)
1223 						return value;
1224 
1225 					value = w_length;
1226 				}
1227 				break;
1228 			}
1229 
1230 			if (value >= 0) {
1231 				req->length = value;
1232 				req->zero = value < w_length;
1233 				value = usb_ep_queue(gadget->ep0, req, GFP_KERNEL);
1234 				if (value < 0) {
1235 					debug("ep_queue --> %d\n", value);
1236 					req->status = 0;
1237 					composite_setup_complete(gadget->ep0, req);
1238 				}
1239 			}
1240 			return value;
1241 		}
1242 
1243 		debug("non-core control req%02x.%02x v%04x i%04x l%d\n",
1244 			ctrl->bRequestType, ctrl->bRequest,
1245 			w_value, w_index, w_length);
1246 
1247 		if (!cdev->config)
1248 			goto done;
1249 
1250 		/*
1251 		 * functions always handle their interfaces and endpoints...
1252 		 * punt other recipients (other, WUSB, ...) to the current
1253 		 * configuration code.
1254 		 */
1255 		switch (ctrl->bRequestType & USB_RECIP_MASK) {
1256 		case USB_RECIP_INTERFACE:
1257 			f = cdev->config->interface[intf];
1258 			break;
1259 
1260 		case USB_RECIP_ENDPOINT:
1261 			endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
1262 			list_for_each_entry(f, &cdev->config->functions, list) {
1263 				if (test_bit(endp, f->endpoints))
1264 					break;
1265 			}
1266 			if (&f->list == &cdev->config->functions)
1267 				f = NULL;
1268 			break;
1269 		/*
1270 		 * dfu-util (version 0.5) sets bmRequestType.Receipent = Device
1271 		 * for non-standard request (w_value = 0x21,
1272 		 * bRequest = GET_DESCRIPTOR in this case).
1273 		 * When only one interface is registered (as it is done now),
1274 		 * then this request shall be handled as it was requested for
1275 		 * interface.
1276 		 *
1277 		 * In the below code it is checked if only one interface is
1278 		 * present and proper function for it is extracted. Due to that
1279 		 * function's setup (f->setup) is called to handle this
1280 		 * special non-standard request.
1281 		 */
1282 		case USB_RECIP_DEVICE:
1283 			debug("cdev->config->next_interface_id: %d intf: %d\n",
1284 			       cdev->config->next_interface_id, intf);
1285 			if (cdev->config->next_interface_id == 1)
1286 				f = cdev->config->interface[intf];
1287 			break;
1288 		}
1289 
1290 		if (f && f->setup)
1291 			value = f->setup(f, ctrl);
1292 		else {
1293 			c = cdev->config;
1294 			if (c->setup)
1295 				value = c->setup(c, ctrl);
1296 		}
1297 
1298 		goto done;
1299 	}
1300 
1301 	/* respond with data transfer before status phase? */
1302 	if (value >= 0) {
1303 		req->length = value;
1304 		req->zero = value < w_length;
1305 		value = usb_ep_queue(gadget->ep0, req, GFP_KERNEL);
1306 		if (value < 0) {
1307 			debug("ep_queue --> %d\n", value);
1308 			req->status = 0;
1309 			composite_setup_complete(gadget->ep0, req);
1310 		}
1311 	}
1312 
1313 done:
1314 	/* device either stalls (value < 0) or reports success */
1315 	return value;
1316 }
1317 
composite_disconnect(struct usb_gadget * gadget)1318 static void composite_disconnect(struct usb_gadget *gadget)
1319 {
1320 	struct usb_composite_dev	*cdev = get_gadget_data(gadget);
1321 
1322 	if (cdev->config)
1323 		reset_config(cdev);
1324 	if (composite->disconnect)
1325 		composite->disconnect(cdev);
1326 }
1327 
composite_unbind(struct usb_gadget * gadget)1328 static void composite_unbind(struct usb_gadget *gadget)
1329 {
1330 	struct usb_composite_dev	*cdev = get_gadget_data(gadget);
1331 	struct usb_configuration	*c;
1332 	struct usb_function		*f;
1333 
1334 	/*
1335 	 * composite_disconnect() must already have been called
1336 	 * by the underlying peripheral controller driver!
1337 	 * so there's no i/o concurrency that could affect the
1338 	 * state protected by cdev->lock.
1339 	 */
1340 #ifdef __UBOOT__
1341 	assert_noisy(!cdev->config);
1342 #else
1343 	BUG_ON(cdev->config);
1344 #endif
1345 
1346 	while (!list_empty(&cdev->configs)) {
1347 		c = list_first_entry(&cdev->configs,
1348 				struct usb_configuration, list);
1349 		while (!list_empty(&c->functions)) {
1350 			f = list_first_entry(&c->functions,
1351 					struct usb_function, list);
1352 			list_del(&f->list);
1353 			if (f->unbind) {
1354 				debug("unbind function '%s'/%p\n",
1355 						f->name, f);
1356 				f->unbind(c, f);
1357 			}
1358 		}
1359 		list_del(&c->list);
1360 		if (c->unbind) {
1361 			debug("unbind config '%s'/%p\n", c->label, c);
1362 			c->unbind(c);
1363 		}
1364 		free(c);
1365 	}
1366 	if (composite->unbind)
1367 		composite->unbind(cdev);
1368 
1369 	if (cdev->req) {
1370 		kfree(cdev->req->buf);
1371 		usb_ep_free_request(gadget->ep0, cdev->req);
1372 	}
1373 	kfree(cdev);
1374 	set_gadget_data(gadget, NULL);
1375 
1376 	composite = NULL;
1377 }
1378 
composite_bind(struct usb_gadget * gadget)1379 static int composite_bind(struct usb_gadget *gadget)
1380 {
1381 	int				status = -ENOMEM;
1382 	struct usb_composite_dev	*cdev;
1383 
1384 	cdev = calloc(sizeof *cdev, 1);
1385 	if (!cdev)
1386 		return status;
1387 
1388 	cdev->gadget = gadget;
1389 	set_gadget_data(gadget, cdev);
1390 	INIT_LIST_HEAD(&cdev->configs);
1391 
1392 	/* preallocate control response and buffer */
1393 	cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
1394 	if (!cdev->req)
1395 		goto fail;
1396 	cdev->req->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, USB_BUFSIZ);
1397 	if (!cdev->req->buf)
1398 		goto fail;
1399 	cdev->req->complete = composite_setup_complete;
1400 	gadget->ep0->driver_data = cdev;
1401 
1402 	cdev->bufsiz = USB_BUFSIZ;
1403 	cdev->driver = composite;
1404 
1405 	usb_gadget_set_selfpowered(gadget);
1406 	usb_ep_autoconfig_reset(cdev->gadget);
1407 
1408 	status = composite->bind(cdev);
1409 	if (status < 0)
1410 		goto fail;
1411 
1412 	memcpy(&cdev->desc, composite->dev,
1413 	       sizeof(struct usb_device_descriptor));
1414 	cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
1415 
1416 	if (cdev->use_os_string) {
1417 		/* TODO: Do we want to pass this via platform? */
1418 		cdev->b_vendor_code = 0x40;
1419 
1420 		/* Microsoft OS String Descriptor */
1421 		utf8_to_utf16le(qw_sign_buf, (__le16 *)cdev->qw_sign,
1422 				OS_STRING_QW_SIGN_LEN / 2);
1423 	}
1424 
1425 	debug("%s: ready\n", composite->name);
1426 	return 0;
1427 
1428 fail:
1429 	composite_unbind(gadget);
1430 	return status;
1431 }
1432 
1433 static void
composite_suspend(struct usb_gadget * gadget)1434 composite_suspend(struct usb_gadget *gadget)
1435 {
1436 	struct usb_composite_dev	*cdev = get_gadget_data(gadget);
1437 	struct usb_function		*f;
1438 
1439 	debug("%s: suspend\n", __func__);
1440 	if (cdev->config) {
1441 		list_for_each_entry(f, &cdev->config->functions, list) {
1442 			if (f->suspend)
1443 				f->suspend(f);
1444 		}
1445 	}
1446 	if (composite->suspend)
1447 		composite->suspend(cdev);
1448 
1449 	cdev->suspended = 1;
1450 }
1451 
1452 static void
composite_resume(struct usb_gadget * gadget)1453 composite_resume(struct usb_gadget *gadget)
1454 {
1455 	struct usb_composite_dev	*cdev = get_gadget_data(gadget);
1456 	struct usb_function		*f;
1457 
1458 	debug("%s: resume\n", __func__);
1459 	if (composite->resume)
1460 		composite->resume(cdev);
1461 	if (cdev->config) {
1462 		list_for_each_entry(f, &cdev->config->functions, list) {
1463 			if (f->resume)
1464 				f->resume(f);
1465 		}
1466 	}
1467 
1468 	cdev->suspended = 0;
1469 }
1470 
1471 static struct usb_gadget_driver composite_driver = {
1472 	.speed		= USB_SPEED_SUPER,
1473 
1474 	.bind		= composite_bind,
1475 	.unbind         = composite_unbind,
1476 
1477 	.setup		= composite_setup,
1478 	.reset          = composite_disconnect,
1479 	.disconnect	= composite_disconnect,
1480 
1481 	.suspend        = composite_suspend,
1482 	.resume         = composite_resume,
1483 };
1484 
1485 /**
1486  * usb_composite_register() - register a composite driver
1487  * @driver: the driver to register
1488  * Context: single threaded during gadget setup
1489  *
1490  * This function is used to register drivers using the composite driver
1491  * framework.  The return value is zero, or a negative errno value.
1492  * Those values normally come from the driver's @bind method, which does
1493  * all the work of setting up the driver to match the hardware.
1494  *
1495  * On successful return, the gadget is ready to respond to requests from
1496  * the host, unless one of its components invokes usb_gadget_disconnect()
1497  * while it was binding.  That would usually be done in order to wait for
1498  * some userspace participation.
1499  */
usb_composite_register(struct usb_composite_driver * driver)1500 int usb_composite_register(struct usb_composite_driver *driver)
1501 {
1502 	int res;
1503 
1504 	if (!driver || !driver->dev || !driver->bind || composite)
1505 		return -EINVAL;
1506 
1507 	if (!driver->name)
1508 		driver->name = "composite";
1509 	composite = driver;
1510 
1511 	res = usb_gadget_register_driver(&composite_driver);
1512 	if (res != 0)
1513 		composite = NULL;
1514 
1515 	return res;
1516 }
1517 
1518 /**
1519  * usb_composite_unregister() - unregister a composite driver
1520  * @driver: the driver to unregister
1521  *
1522  * This function is used to unregister drivers using the composite
1523  * driver framework.
1524  */
usb_composite_unregister(struct usb_composite_driver * driver)1525 void usb_composite_unregister(struct usb_composite_driver *driver)
1526 {
1527 	if (composite != driver)
1528 		return;
1529 	usb_gadget_unregister_driver(&composite_driver);
1530 	composite = NULL;
1531 }
1532