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