cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

gadget.h (36413B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * <linux/usb/gadget.h>
      4 *
      5 * We call the USB code inside a Linux-based peripheral device a "gadget"
      6 * driver, except for the hardware-specific bus glue.  One USB host can
      7 * talk to many USB gadgets, but the gadgets are only able to communicate
      8 * to one host.
      9 *
     10 *
     11 * (C) Copyright 2002-2004 by David Brownell
     12 * All Rights Reserved.
     13 *
     14 * This software is licensed under the GNU GPL version 2.
     15 */
     16
     17#ifndef __LINUX_USB_GADGET_H
     18#define __LINUX_USB_GADGET_H
     19
     20#include <linux/device.h>
     21#include <linux/errno.h>
     22#include <linux/init.h>
     23#include <linux/list.h>
     24#include <linux/slab.h>
     25#include <linux/scatterlist.h>
     26#include <linux/types.h>
     27#include <linux/workqueue.h>
     28#include <linux/usb/ch9.h>
     29
     30#define UDC_TRACE_STR_MAX	512
     31
     32struct usb_ep;
     33
     34/**
     35 * struct usb_request - describes one i/o request
     36 * @buf: Buffer used for data.  Always provide this; some controllers
     37 *	only use PIO, or don't use DMA for some endpoints.
     38 * @dma: DMA address corresponding to 'buf'.  If you don't set this
     39 *	field, and the usb controller needs one, it is responsible
     40 *	for mapping and unmapping the buffer.
     41 * @sg: a scatterlist for SG-capable controllers.
     42 * @num_sgs: number of SG entries
     43 * @num_mapped_sgs: number of SG entries mapped to DMA (internal)
     44 * @length: Length of that data
     45 * @stream_id: The stream id, when USB3.0 bulk streams are being used
     46 * @is_last: Indicates if this is the last request of a stream_id before
     47 *	switching to a different stream (required for DWC3 controllers).
     48 * @no_interrupt: If true, hints that no completion irq is needed.
     49 *	Helpful sometimes with deep request queues that are handled
     50 *	directly by DMA controllers.
     51 * @zero: If true, when writing data, makes the last packet be "short"
     52 *     by adding a zero length packet as needed;
     53 * @short_not_ok: When reading data, makes short packets be
     54 *     treated as errors (queue stops advancing till cleanup).
     55 * @dma_mapped: Indicates if request has been mapped to DMA (internal)
     56 * @complete: Function called when request completes, so this request and
     57 *	its buffer may be re-used.  The function will always be called with
     58 *	interrupts disabled, and it must not sleep.
     59 *	Reads terminate with a short packet, or when the buffer fills,
     60 *	whichever comes first.  When writes terminate, some data bytes
     61 *	will usually still be in flight (often in a hardware fifo).
     62 *	Errors (for reads or writes) stop the queue from advancing
     63 *	until the completion function returns, so that any transfers
     64 *	invalidated by the error may first be dequeued.
     65 * @context: For use by the completion callback
     66 * @list: For use by the gadget driver.
     67 * @frame_number: Reports the interval number in (micro)frame in which the
     68 *	isochronous transfer was transmitted or received.
     69 * @status: Reports completion code, zero or a negative errno.
     70 *	Normally, faults block the transfer queue from advancing until
     71 *	the completion callback returns.
     72 *	Code "-ESHUTDOWN" indicates completion caused by device disconnect,
     73 *	or when the driver disabled the endpoint.
     74 * @actual: Reports bytes transferred to/from the buffer.  For reads (OUT
     75 *	transfers) this may be less than the requested length.  If the
     76 *	short_not_ok flag is set, short reads are treated as errors
     77 *	even when status otherwise indicates successful completion.
     78 *	Note that for writes (IN transfers) some data bytes may still
     79 *	reside in a device-side FIFO when the request is reported as
     80 *	complete.
     81 *
     82 * These are allocated/freed through the endpoint they're used with.  The
     83 * hardware's driver can add extra per-request data to the memory it returns,
     84 * which often avoids separate memory allocations (potential failures),
     85 * later when the request is queued.
     86 *
     87 * Request flags affect request handling, such as whether a zero length
     88 * packet is written (the "zero" flag), whether a short read should be
     89 * treated as an error (blocking request queue advance, the "short_not_ok"
     90 * flag), or hinting that an interrupt is not required (the "no_interrupt"
     91 * flag, for use with deep request queues).
     92 *
     93 * Bulk endpoints can use any size buffers, and can also be used for interrupt
     94 * transfers. interrupt-only endpoints can be much less functional.
     95 *
     96 * NOTE:  this is analogous to 'struct urb' on the host side, except that
     97 * it's thinner and promotes more pre-allocation.
     98 */
     99
    100struct usb_request {
    101	void			*buf;
    102	unsigned		length;
    103	dma_addr_t		dma;
    104
    105	struct scatterlist	*sg;
    106	unsigned		num_sgs;
    107	unsigned		num_mapped_sgs;
    108
    109	unsigned		stream_id:16;
    110	unsigned		is_last:1;
    111	unsigned		no_interrupt:1;
    112	unsigned		zero:1;
    113	unsigned		short_not_ok:1;
    114	unsigned		dma_mapped:1;
    115
    116	void			(*complete)(struct usb_ep *ep,
    117					struct usb_request *req);
    118	void			*context;
    119	struct list_head	list;
    120
    121	unsigned		frame_number;		/* ISO ONLY */
    122
    123	int			status;
    124	unsigned		actual;
    125};
    126
    127/*-------------------------------------------------------------------------*/
    128
    129/* endpoint-specific parts of the api to the usb controller hardware.
    130 * unlike the urb model, (de)multiplexing layers are not required.
    131 * (so this api could slash overhead if used on the host side...)
    132 *
    133 * note that device side usb controllers commonly differ in how many
    134 * endpoints they support, as well as their capabilities.
    135 */
    136struct usb_ep_ops {
    137	int (*enable) (struct usb_ep *ep,
    138		const struct usb_endpoint_descriptor *desc);
    139	int (*disable) (struct usb_ep *ep);
    140	void (*dispose) (struct usb_ep *ep);
    141
    142	struct usb_request *(*alloc_request) (struct usb_ep *ep,
    143		gfp_t gfp_flags);
    144	void (*free_request) (struct usb_ep *ep, struct usb_request *req);
    145
    146	int (*queue) (struct usb_ep *ep, struct usb_request *req,
    147		gfp_t gfp_flags);
    148	int (*dequeue) (struct usb_ep *ep, struct usb_request *req);
    149
    150	int (*set_halt) (struct usb_ep *ep, int value);
    151	int (*set_wedge) (struct usb_ep *ep);
    152
    153	int (*fifo_status) (struct usb_ep *ep);
    154	void (*fifo_flush) (struct usb_ep *ep);
    155};
    156
    157/**
    158 * struct usb_ep_caps - endpoint capabilities description
    159 * @type_control:Endpoint supports control type (reserved for ep0).
    160 * @type_iso:Endpoint supports isochronous transfers.
    161 * @type_bulk:Endpoint supports bulk transfers.
    162 * @type_int:Endpoint supports interrupt transfers.
    163 * @dir_in:Endpoint supports IN direction.
    164 * @dir_out:Endpoint supports OUT direction.
    165 */
    166struct usb_ep_caps {
    167	unsigned type_control:1;
    168	unsigned type_iso:1;
    169	unsigned type_bulk:1;
    170	unsigned type_int:1;
    171	unsigned dir_in:1;
    172	unsigned dir_out:1;
    173};
    174
    175#define USB_EP_CAPS_TYPE_CONTROL     0x01
    176#define USB_EP_CAPS_TYPE_ISO         0x02
    177#define USB_EP_CAPS_TYPE_BULK        0x04
    178#define USB_EP_CAPS_TYPE_INT         0x08
    179#define USB_EP_CAPS_TYPE_ALL \
    180	(USB_EP_CAPS_TYPE_ISO | USB_EP_CAPS_TYPE_BULK | USB_EP_CAPS_TYPE_INT)
    181#define USB_EP_CAPS_DIR_IN           0x01
    182#define USB_EP_CAPS_DIR_OUT          0x02
    183#define USB_EP_CAPS_DIR_ALL  (USB_EP_CAPS_DIR_IN | USB_EP_CAPS_DIR_OUT)
    184
    185#define USB_EP_CAPS(_type, _dir) \
    186	{ \
    187		.type_control = !!(_type & USB_EP_CAPS_TYPE_CONTROL), \
    188		.type_iso = !!(_type & USB_EP_CAPS_TYPE_ISO), \
    189		.type_bulk = !!(_type & USB_EP_CAPS_TYPE_BULK), \
    190		.type_int = !!(_type & USB_EP_CAPS_TYPE_INT), \
    191		.dir_in = !!(_dir & USB_EP_CAPS_DIR_IN), \
    192		.dir_out = !!(_dir & USB_EP_CAPS_DIR_OUT), \
    193	}
    194
    195/**
    196 * struct usb_ep - device side representation of USB endpoint
    197 * @name:identifier for the endpoint, such as "ep-a" or "ep9in-bulk"
    198 * @ops: Function pointers used to access hardware-specific operations.
    199 * @ep_list:the gadget's ep_list holds all of its endpoints
    200 * @caps:The structure describing types and directions supported by endpoint.
    201 * @enabled: The current endpoint enabled/disabled state.
    202 * @claimed: True if this endpoint is claimed by a function.
    203 * @maxpacket:The maximum packet size used on this endpoint.  The initial
    204 *	value can sometimes be reduced (hardware allowing), according to
    205 *	the endpoint descriptor used to configure the endpoint.
    206 * @maxpacket_limit:The maximum packet size value which can be handled by this
    207 *	endpoint. It's set once by UDC driver when endpoint is initialized, and
    208 *	should not be changed. Should not be confused with maxpacket.
    209 * @max_streams: The maximum number of streams supported
    210 *	by this EP (0 - 16, actual number is 2^n)
    211 * @mult: multiplier, 'mult' value for SS Isoc EPs
    212 * @maxburst: the maximum number of bursts supported by this EP (for usb3)
    213 * @driver_data:for use by the gadget driver.
    214 * @address: used to identify the endpoint when finding descriptor that
    215 *	matches connection speed
    216 * @desc: endpoint descriptor.  This pointer is set before the endpoint is
    217 *	enabled and remains valid until the endpoint is disabled.
    218 * @comp_desc: In case of SuperSpeed support, this is the endpoint companion
    219 *	descriptor that is used to configure the endpoint
    220 *
    221 * the bus controller driver lists all the general purpose endpoints in
    222 * gadget->ep_list.  the control endpoint (gadget->ep0) is not in that list,
    223 * and is accessed only in response to a driver setup() callback.
    224 */
    225
    226struct usb_ep {
    227	void			*driver_data;
    228
    229	const char		*name;
    230	const struct usb_ep_ops	*ops;
    231	struct list_head	ep_list;
    232	struct usb_ep_caps	caps;
    233	bool			claimed;
    234	bool			enabled;
    235	unsigned		maxpacket:16;
    236	unsigned		maxpacket_limit:16;
    237	unsigned		max_streams:16;
    238	unsigned		mult:2;
    239	unsigned		maxburst:5;
    240	u8			address;
    241	const struct usb_endpoint_descriptor	*desc;
    242	const struct usb_ss_ep_comp_descriptor	*comp_desc;
    243};
    244
    245/*-------------------------------------------------------------------------*/
    246
    247#if IS_ENABLED(CONFIG_USB_GADGET)
    248void usb_ep_set_maxpacket_limit(struct usb_ep *ep, unsigned maxpacket_limit);
    249int usb_ep_enable(struct usb_ep *ep);
    250int usb_ep_disable(struct usb_ep *ep);
    251struct usb_request *usb_ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags);
    252void usb_ep_free_request(struct usb_ep *ep, struct usb_request *req);
    253int usb_ep_queue(struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags);
    254int usb_ep_dequeue(struct usb_ep *ep, struct usb_request *req);
    255int usb_ep_set_halt(struct usb_ep *ep);
    256int usb_ep_clear_halt(struct usb_ep *ep);
    257int usb_ep_set_wedge(struct usb_ep *ep);
    258int usb_ep_fifo_status(struct usb_ep *ep);
    259void usb_ep_fifo_flush(struct usb_ep *ep);
    260#else
    261static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep,
    262		unsigned maxpacket_limit)
    263{ }
    264static inline int usb_ep_enable(struct usb_ep *ep)
    265{ return 0; }
    266static inline int usb_ep_disable(struct usb_ep *ep)
    267{ return 0; }
    268static inline struct usb_request *usb_ep_alloc_request(struct usb_ep *ep,
    269		gfp_t gfp_flags)
    270{ return NULL; }
    271static inline void usb_ep_free_request(struct usb_ep *ep,
    272		struct usb_request *req)
    273{ }
    274static inline int usb_ep_queue(struct usb_ep *ep, struct usb_request *req,
    275		gfp_t gfp_flags)
    276{ return 0; }
    277static inline int usb_ep_dequeue(struct usb_ep *ep, struct usb_request *req)
    278{ return 0; }
    279static inline int usb_ep_set_halt(struct usb_ep *ep)
    280{ return 0; }
    281static inline int usb_ep_clear_halt(struct usb_ep *ep)
    282{ return 0; }
    283static inline int usb_ep_set_wedge(struct usb_ep *ep)
    284{ return 0; }
    285static inline int usb_ep_fifo_status(struct usb_ep *ep)
    286{ return 0; }
    287static inline void usb_ep_fifo_flush(struct usb_ep *ep)
    288{ }
    289#endif /* USB_GADGET */
    290
    291/*-------------------------------------------------------------------------*/
    292
    293struct usb_dcd_config_params {
    294	__u8  bU1devExitLat;	/* U1 Device exit Latency */
    295#define USB_DEFAULT_U1_DEV_EXIT_LAT	0x01	/* Less then 1 microsec */
    296	__le16 bU2DevExitLat;	/* U2 Device exit Latency */
    297#define USB_DEFAULT_U2_DEV_EXIT_LAT	0x1F4	/* Less then 500 microsec */
    298	__u8 besl_baseline;	/* Recommended baseline BESL (0-15) */
    299	__u8 besl_deep;		/* Recommended deep BESL (0-15) */
    300#define USB_DEFAULT_BESL_UNSPECIFIED	0xFF	/* No recommended value */
    301};
    302
    303
    304struct usb_gadget;
    305struct usb_gadget_driver;
    306struct usb_udc;
    307
    308/* the rest of the api to the controller hardware: device operations,
    309 * which don't involve endpoints (or i/o).
    310 */
    311struct usb_gadget_ops {
    312	int	(*get_frame)(struct usb_gadget *);
    313	int	(*wakeup)(struct usb_gadget *);
    314	int	(*set_selfpowered) (struct usb_gadget *, int is_selfpowered);
    315	int	(*vbus_session) (struct usb_gadget *, int is_active);
    316	int	(*vbus_draw) (struct usb_gadget *, unsigned mA);
    317	int	(*pullup) (struct usb_gadget *, int is_on);
    318	int	(*ioctl)(struct usb_gadget *,
    319				unsigned code, unsigned long param);
    320	void	(*get_config_params)(struct usb_gadget *,
    321				     struct usb_dcd_config_params *);
    322	int	(*udc_start)(struct usb_gadget *,
    323			struct usb_gadget_driver *);
    324	int	(*udc_stop)(struct usb_gadget *);
    325	void	(*udc_set_speed)(struct usb_gadget *, enum usb_device_speed);
    326	void	(*udc_set_ssp_rate)(struct usb_gadget *gadget,
    327			enum usb_ssp_rate rate);
    328	void	(*udc_async_callbacks)(struct usb_gadget *gadget, bool enable);
    329	struct usb_ep *(*match_ep)(struct usb_gadget *,
    330			struct usb_endpoint_descriptor *,
    331			struct usb_ss_ep_comp_descriptor *);
    332	int	(*check_config)(struct usb_gadget *gadget);
    333};
    334
    335/**
    336 * struct usb_gadget - represents a usb device
    337 * @work: (internal use) Workqueue to be used for sysfs_notify()
    338 * @udc: struct usb_udc pointer for this gadget
    339 * @ops: Function pointers used to access hardware-specific operations.
    340 * @ep0: Endpoint zero, used when reading or writing responses to
    341 *	driver setup() requests
    342 * @ep_list: List of other endpoints supported by the device.
    343 * @speed: Speed of current connection to USB host.
    344 * @max_speed: Maximal speed the UDC can handle.  UDC must support this
    345 *      and all slower speeds.
    346 * @ssp_rate: Current connected SuperSpeed Plus signaling rate and lane count.
    347 * @max_ssp_rate: Maximum SuperSpeed Plus signaling rate and lane count the UDC
    348 *	can handle. The UDC must support this and all slower speeds and lower
    349 *	number of lanes.
    350 * @state: the state we are now (attached, suspended, configured, etc)
    351 * @name: Identifies the controller hardware type.  Used in diagnostics
    352 *	and sometimes configuration.
    353 * @dev: Driver model state for this abstract device.
    354 * @isoch_delay: value from Set Isoch Delay request. Only valid on SS/SSP
    355 * @out_epnum: last used out ep number
    356 * @in_epnum: last used in ep number
    357 * @mA: last set mA value
    358 * @otg_caps: OTG capabilities of this gadget.
    359 * @sg_supported: true if we can handle scatter-gather
    360 * @is_otg: True if the USB device port uses a Mini-AB jack, so that the
    361 *	gadget driver must provide a USB OTG descriptor.
    362 * @is_a_peripheral: False unless is_otg, the "A" end of a USB cable
    363 *	is in the Mini-AB jack, and HNP has been used to switch roles
    364 *	so that the "A" device currently acts as A-Peripheral, not A-Host.
    365 * @a_hnp_support: OTG device feature flag, indicating that the A-Host
    366 *	supports HNP at this port.
    367 * @a_alt_hnp_support: OTG device feature flag, indicating that the A-Host
    368 *	only supports HNP on a different root port.
    369 * @b_hnp_enable: OTG device feature flag, indicating that the A-Host
    370 *	enabled HNP support.
    371 * @hnp_polling_support: OTG device feature flag, indicating if the OTG device
    372 *	in peripheral mode can support HNP polling.
    373 * @host_request_flag: OTG device feature flag, indicating if A-Peripheral
    374 *	or B-Peripheral wants to take host role.
    375 * @quirk_ep_out_aligned_size: epout requires buffer size to be aligned to
    376 *	MaxPacketSize.
    377 * @quirk_altset_not_supp: UDC controller doesn't support alt settings.
    378 * @quirk_stall_not_supp: UDC controller doesn't support stalling.
    379 * @quirk_zlp_not_supp: UDC controller doesn't support ZLP.
    380 * @quirk_avoids_skb_reserve: udc/platform wants to avoid skb_reserve() in
    381 *	u_ether.c to improve performance.
    382 * @is_selfpowered: if the gadget is self-powered.
    383 * @deactivated: True if gadget is deactivated - in deactivated state it cannot
    384 *	be connected.
    385 * @connected: True if gadget is connected.
    386 * @lpm_capable: If the gadget max_speed is FULL or HIGH, this flag
    387 *	indicates that it supports LPM as per the LPM ECN & errata.
    388 * @irq: the interrupt number for device controller.
    389 * @id_number: a unique ID number for ensuring that gadget names are distinct
    390 *
    391 * Gadgets have a mostly-portable "gadget driver" implementing device
    392 * functions, handling all usb configurations and interfaces.  Gadget
    393 * drivers talk to hardware-specific code indirectly, through ops vectors.
    394 * That insulates the gadget driver from hardware details, and packages
    395 * the hardware endpoints through generic i/o queues.  The "usb_gadget"
    396 * and "usb_ep" interfaces provide that insulation from the hardware.
    397 *
    398 * Except for the driver data, all fields in this structure are
    399 * read-only to the gadget driver.  That driver data is part of the
    400 * "driver model" infrastructure in 2.6 (and later) kernels, and for
    401 * earlier systems is grouped in a similar structure that's not known
    402 * to the rest of the kernel.
    403 *
    404 * Values of the three OTG device feature flags are updated before the
    405 * setup() call corresponding to USB_REQ_SET_CONFIGURATION, and before
    406 * driver suspend() calls.  They are valid only when is_otg, and when the
    407 * device is acting as a B-Peripheral (so is_a_peripheral is false).
    408 */
    409struct usb_gadget {
    410	struct work_struct		work;
    411	struct usb_udc			*udc;
    412	/* readonly to gadget driver */
    413	const struct usb_gadget_ops	*ops;
    414	struct usb_ep			*ep0;
    415	struct list_head		ep_list;	/* of usb_ep */
    416	enum usb_device_speed		speed;
    417	enum usb_device_speed		max_speed;
    418
    419	/* USB SuperSpeed Plus only */
    420	enum usb_ssp_rate		ssp_rate;
    421	enum usb_ssp_rate		max_ssp_rate;
    422
    423	enum usb_device_state		state;
    424	const char			*name;
    425	struct device			dev;
    426	unsigned			isoch_delay;
    427	unsigned			out_epnum;
    428	unsigned			in_epnum;
    429	unsigned			mA;
    430	struct usb_otg_caps		*otg_caps;
    431
    432	unsigned			sg_supported:1;
    433	unsigned			is_otg:1;
    434	unsigned			is_a_peripheral:1;
    435	unsigned			b_hnp_enable:1;
    436	unsigned			a_hnp_support:1;
    437	unsigned			a_alt_hnp_support:1;
    438	unsigned			hnp_polling_support:1;
    439	unsigned			host_request_flag:1;
    440	unsigned			quirk_ep_out_aligned_size:1;
    441	unsigned			quirk_altset_not_supp:1;
    442	unsigned			quirk_stall_not_supp:1;
    443	unsigned			quirk_zlp_not_supp:1;
    444	unsigned			quirk_avoids_skb_reserve:1;
    445	unsigned			is_selfpowered:1;
    446	unsigned			deactivated:1;
    447	unsigned			connected:1;
    448	unsigned			lpm_capable:1;
    449	int				irq;
    450	int				id_number;
    451};
    452#define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
    453
    454/* Interface to the device model */
    455static inline void set_gadget_data(struct usb_gadget *gadget, void *data)
    456	{ dev_set_drvdata(&gadget->dev, data); }
    457static inline void *get_gadget_data(struct usb_gadget *gadget)
    458	{ return dev_get_drvdata(&gadget->dev); }
    459static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
    460{
    461	return container_of(dev, struct usb_gadget, dev);
    462}
    463static inline struct usb_gadget *usb_get_gadget(struct usb_gadget *gadget)
    464{
    465	get_device(&gadget->dev);
    466	return gadget;
    467}
    468static inline void usb_put_gadget(struct usb_gadget *gadget)
    469{
    470	put_device(&gadget->dev);
    471}
    472extern void usb_initialize_gadget(struct device *parent,
    473		struct usb_gadget *gadget, void (*release)(struct device *dev));
    474extern int usb_add_gadget(struct usb_gadget *gadget);
    475extern void usb_del_gadget(struct usb_gadget *gadget);
    476
    477/* Legacy device-model interface */
    478extern int usb_add_gadget_udc_release(struct device *parent,
    479		struct usb_gadget *gadget, void (*release)(struct device *dev));
    480extern int usb_add_gadget_udc(struct device *parent, struct usb_gadget *gadget);
    481extern void usb_del_gadget_udc(struct usb_gadget *gadget);
    482extern char *usb_get_gadget_udc_name(void);
    483
    484/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */
    485#define gadget_for_each_ep(tmp, gadget) \
    486	list_for_each_entry(tmp, &(gadget)->ep_list, ep_list)
    487
    488/**
    489 * usb_ep_align - returns @len aligned to ep's maxpacketsize.
    490 * @ep: the endpoint whose maxpacketsize is used to align @len
    491 * @len: buffer size's length to align to @ep's maxpacketsize
    492 *
    493 * This helper is used to align buffer's size to an ep's maxpacketsize.
    494 */
    495static inline size_t usb_ep_align(struct usb_ep *ep, size_t len)
    496{
    497	int max_packet_size = (size_t)usb_endpoint_maxp(ep->desc);
    498
    499	return round_up(len, max_packet_size);
    500}
    501
    502/**
    503 * usb_ep_align_maybe - returns @len aligned to ep's maxpacketsize if gadget
    504 *	requires quirk_ep_out_aligned_size, otherwise returns len.
    505 * @g: controller to check for quirk
    506 * @ep: the endpoint whose maxpacketsize is used to align @len
    507 * @len: buffer size's length to align to @ep's maxpacketsize
    508 *
    509 * This helper is used in case it's required for any reason to check and maybe
    510 * align buffer's size to an ep's maxpacketsize.
    511 */
    512static inline size_t
    513usb_ep_align_maybe(struct usb_gadget *g, struct usb_ep *ep, size_t len)
    514{
    515	return g->quirk_ep_out_aligned_size ? usb_ep_align(ep, len) : len;
    516}
    517
    518/**
    519 * gadget_is_altset_supported - return true iff the hardware supports
    520 *	altsettings
    521 * @g: controller to check for quirk
    522 */
    523static inline int gadget_is_altset_supported(struct usb_gadget *g)
    524{
    525	return !g->quirk_altset_not_supp;
    526}
    527
    528/**
    529 * gadget_is_stall_supported - return true iff the hardware supports stalling
    530 * @g: controller to check for quirk
    531 */
    532static inline int gadget_is_stall_supported(struct usb_gadget *g)
    533{
    534	return !g->quirk_stall_not_supp;
    535}
    536
    537/**
    538 * gadget_is_zlp_supported - return true iff the hardware supports zlp
    539 * @g: controller to check for quirk
    540 */
    541static inline int gadget_is_zlp_supported(struct usb_gadget *g)
    542{
    543	return !g->quirk_zlp_not_supp;
    544}
    545
    546/**
    547 * gadget_avoids_skb_reserve - return true iff the hardware would like to avoid
    548 *	skb_reserve to improve performance.
    549 * @g: controller to check for quirk
    550 */
    551static inline int gadget_avoids_skb_reserve(struct usb_gadget *g)
    552{
    553	return g->quirk_avoids_skb_reserve;
    554}
    555
    556/**
    557 * gadget_is_dualspeed - return true iff the hardware handles high speed
    558 * @g: controller that might support both high and full speeds
    559 */
    560static inline int gadget_is_dualspeed(struct usb_gadget *g)
    561{
    562	return g->max_speed >= USB_SPEED_HIGH;
    563}
    564
    565/**
    566 * gadget_is_superspeed() - return true if the hardware handles superspeed
    567 * @g: controller that might support superspeed
    568 */
    569static inline int gadget_is_superspeed(struct usb_gadget *g)
    570{
    571	return g->max_speed >= USB_SPEED_SUPER;
    572}
    573
    574/**
    575 * gadget_is_superspeed_plus() - return true if the hardware handles
    576 *	superspeed plus
    577 * @g: controller that might support superspeed plus
    578 */
    579static inline int gadget_is_superspeed_plus(struct usb_gadget *g)
    580{
    581	return g->max_speed >= USB_SPEED_SUPER_PLUS;
    582}
    583
    584/**
    585 * gadget_is_otg - return true iff the hardware is OTG-ready
    586 * @g: controller that might have a Mini-AB connector
    587 *
    588 * This is a runtime test, since kernels with a USB-OTG stack sometimes
    589 * run on boards which only have a Mini-B (or Mini-A) connector.
    590 */
    591static inline int gadget_is_otg(struct usb_gadget *g)
    592{
    593#ifdef CONFIG_USB_OTG
    594	return g->is_otg;
    595#else
    596	return 0;
    597#endif
    598}
    599
    600/*-------------------------------------------------------------------------*/
    601
    602#if IS_ENABLED(CONFIG_USB_GADGET)
    603int usb_gadget_frame_number(struct usb_gadget *gadget);
    604int usb_gadget_wakeup(struct usb_gadget *gadget);
    605int usb_gadget_set_selfpowered(struct usb_gadget *gadget);
    606int usb_gadget_clear_selfpowered(struct usb_gadget *gadget);
    607int usb_gadget_vbus_connect(struct usb_gadget *gadget);
    608int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA);
    609int usb_gadget_vbus_disconnect(struct usb_gadget *gadget);
    610int usb_gadget_connect(struct usb_gadget *gadget);
    611int usb_gadget_disconnect(struct usb_gadget *gadget);
    612int usb_gadget_deactivate(struct usb_gadget *gadget);
    613int usb_gadget_activate(struct usb_gadget *gadget);
    614int usb_gadget_check_config(struct usb_gadget *gadget);
    615#else
    616static inline int usb_gadget_frame_number(struct usb_gadget *gadget)
    617{ return 0; }
    618static inline int usb_gadget_wakeup(struct usb_gadget *gadget)
    619{ return 0; }
    620static inline int usb_gadget_set_selfpowered(struct usb_gadget *gadget)
    621{ return 0; }
    622static inline int usb_gadget_clear_selfpowered(struct usb_gadget *gadget)
    623{ return 0; }
    624static inline int usb_gadget_vbus_connect(struct usb_gadget *gadget)
    625{ return 0; }
    626static inline int usb_gadget_vbus_draw(struct usb_gadget *gadget, unsigned mA)
    627{ return 0; }
    628static inline int usb_gadget_vbus_disconnect(struct usb_gadget *gadget)
    629{ return 0; }
    630static inline int usb_gadget_connect(struct usb_gadget *gadget)
    631{ return 0; }
    632static inline int usb_gadget_disconnect(struct usb_gadget *gadget)
    633{ return 0; }
    634static inline int usb_gadget_deactivate(struct usb_gadget *gadget)
    635{ return 0; }
    636static inline int usb_gadget_activate(struct usb_gadget *gadget)
    637{ return 0; }
    638static inline int usb_gadget_check_config(struct usb_gadget *gadget)
    639{ return 0; }
    640#endif /* CONFIG_USB_GADGET */
    641
    642/*-------------------------------------------------------------------------*/
    643
    644/**
    645 * struct usb_gadget_driver - driver for usb gadget devices
    646 * @function: String describing the gadget's function
    647 * @max_speed: Highest speed the driver handles.
    648 * @setup: Invoked for ep0 control requests that aren't handled by
    649 *	the hardware level driver. Most calls must be handled by
    650 *	the gadget driver, including descriptor and configuration
    651 *	management.  The 16 bit members of the setup data are in
    652 *	USB byte order. Called in_interrupt; this may not sleep.  Driver
    653 *	queues a response to ep0, or returns negative to stall.
    654 * @disconnect: Invoked after all transfers have been stopped,
    655 *	when the host is disconnected.  May be called in_interrupt; this
    656 *	may not sleep.  Some devices can't detect disconnect, so this might
    657 *	not be called except as part of controller shutdown.
    658 * @bind: the driver's bind callback
    659 * @unbind: Invoked when the driver is unbound from a gadget,
    660 *	usually from rmmod (after a disconnect is reported).
    661 *	Called in a context that permits sleeping.
    662 * @suspend: Invoked on USB suspend.  May be called in_interrupt.
    663 * @resume: Invoked on USB resume.  May be called in_interrupt.
    664 * @reset: Invoked on USB bus reset. It is mandatory for all gadget drivers
    665 *	and should be called in_interrupt.
    666 * @driver: Driver model state for this driver.
    667 * @udc_name: A name of UDC this driver should be bound to. If udc_name is NULL,
    668 *	this driver will be bound to any available UDC.
    669 * @match_existing_only: If udc is not found, return an error and fail
    670 *	the driver registration
    671 * @is_bound: Allow a driver to be bound to only one gadget
    672 *
    673 * Devices are disabled till a gadget driver successfully bind()s, which
    674 * means the driver will handle setup() requests needed to enumerate (and
    675 * meet "chapter 9" requirements) then do some useful work.
    676 *
    677 * If gadget->is_otg is true, the gadget driver must provide an OTG
    678 * descriptor during enumeration, or else fail the bind() call.  In such
    679 * cases, no USB traffic may flow until both bind() returns without
    680 * having called usb_gadget_disconnect(), and the USB host stack has
    681 * initialized.
    682 *
    683 * Drivers use hardware-specific knowledge to configure the usb hardware.
    684 * endpoint addressing is only one of several hardware characteristics that
    685 * are in descriptors the ep0 implementation returns from setup() calls.
    686 *
    687 * Except for ep0 implementation, most driver code shouldn't need change to
    688 * run on top of different usb controllers.  It'll use endpoints set up by
    689 * that ep0 implementation.
    690 *
    691 * The usb controller driver handles a few standard usb requests.  Those
    692 * include set_address, and feature flags for devices, interfaces, and
    693 * endpoints (the get_status, set_feature, and clear_feature requests).
    694 *
    695 * Accordingly, the driver's setup() callback must always implement all
    696 * get_descriptor requests, returning at least a device descriptor and
    697 * a configuration descriptor.  Drivers must make sure the endpoint
    698 * descriptors match any hardware constraints. Some hardware also constrains
    699 * other descriptors. (The pxa250 allows only configurations 1, 2, or 3).
    700 *
    701 * The driver's setup() callback must also implement set_configuration,
    702 * and should also implement set_interface, get_configuration, and
    703 * get_interface.  Setting a configuration (or interface) is where
    704 * endpoints should be activated or (config 0) shut down.
    705 *
    706 * (Note that only the default control endpoint is supported.  Neither
    707 * hosts nor devices generally support control traffic except to ep0.)
    708 *
    709 * Most devices will ignore USB suspend/resume operations, and so will
    710 * not provide those callbacks.  However, some may need to change modes
    711 * when the host is not longer directing those activities.  For example,
    712 * local controls (buttons, dials, etc) may need to be re-enabled since
    713 * the (remote) host can't do that any longer; or an error state might
    714 * be cleared, to make the device behave identically whether or not
    715 * power is maintained.
    716 */
    717struct usb_gadget_driver {
    718	char			*function;
    719	enum usb_device_speed	max_speed;
    720	int			(*bind)(struct usb_gadget *gadget,
    721					struct usb_gadget_driver *driver);
    722	void			(*unbind)(struct usb_gadget *);
    723	int			(*setup)(struct usb_gadget *,
    724					const struct usb_ctrlrequest *);
    725	void			(*disconnect)(struct usb_gadget *);
    726	void			(*suspend)(struct usb_gadget *);
    727	void			(*resume)(struct usb_gadget *);
    728	void			(*reset)(struct usb_gadget *);
    729
    730	/* FIXME support safe rmmod */
    731	struct device_driver	driver;
    732
    733	char			*udc_name;
    734	unsigned                match_existing_only:1;
    735	bool			is_bound:1;
    736};
    737
    738
    739
    740/*-------------------------------------------------------------------------*/
    741
    742/* driver modules register and unregister, as usual.
    743 * these calls must be made in a context that can sleep.
    744 *
    745 * A gadget driver can be bound to only one gadget at a time.
    746 */
    747
    748/**
    749 * usb_gadget_register_driver_owner - register a gadget driver
    750 * @driver: the driver being registered
    751 * @owner: the driver module
    752 * @mod_name: the driver module's build name
    753 * Context: can sleep
    754 *
    755 * Call this in your gadget driver's module initialization function,
    756 * to tell the underlying UDC controller driver about your driver.
    757 * The @bind() function will be called to bind it to a gadget before this
    758 * registration call returns.  It's expected that the @bind() function will
    759 * be in init sections.
    760 *
    761 * Use the macro defined below instead of calling this directly.
    762 */
    763int usb_gadget_register_driver_owner(struct usb_gadget_driver *driver,
    764		struct module *owner, const char *mod_name);
    765
    766/* use a define to avoid include chaining to get THIS_MODULE & friends */
    767#define usb_gadget_register_driver(driver) \
    768	usb_gadget_register_driver_owner(driver, THIS_MODULE, KBUILD_MODNAME)
    769
    770/**
    771 * usb_gadget_unregister_driver - unregister a gadget driver
    772 * @driver:the driver being unregistered
    773 * Context: can sleep
    774 *
    775 * Call this in your gadget driver's module cleanup function,
    776 * to tell the underlying usb controller that your driver is
    777 * going away.  If the controller is connected to a USB host,
    778 * it will first disconnect().  The driver is also requested
    779 * to unbind() and clean up any device state, before this procedure
    780 * finally returns.  It's expected that the unbind() functions
    781 * will be in exit sections, so may not be linked in some kernels.
    782 */
    783int usb_gadget_unregister_driver(struct usb_gadget_driver *driver);
    784
    785/*-------------------------------------------------------------------------*/
    786
    787/* utility to simplify dealing with string descriptors */
    788
    789/**
    790 * struct usb_string - wraps a C string and its USB id
    791 * @id:the (nonzero) ID for this string
    792 * @s:the string, in UTF-8 encoding
    793 *
    794 * If you're using usb_gadget_get_string(), use this to wrap a string
    795 * together with its ID.
    796 */
    797struct usb_string {
    798	u8			id;
    799	const char		*s;
    800};
    801
    802/**
    803 * struct usb_gadget_strings - a set of USB strings in a given language
    804 * @language:identifies the strings' language (0x0409 for en-us)
    805 * @strings:array of strings with their ids
    806 *
    807 * If you're using usb_gadget_get_string(), use this to wrap all the
    808 * strings for a given language.
    809 */
    810struct usb_gadget_strings {
    811	u16			language;	/* 0x0409 for en-us */
    812	struct usb_string	*strings;
    813};
    814
    815struct usb_gadget_string_container {
    816	struct list_head        list;
    817	u8                      *stash[];
    818};
    819
    820/* put descriptor for string with that id into buf (buflen >= 256) */
    821int usb_gadget_get_string(const struct usb_gadget_strings *table, int id, u8 *buf);
    822
    823/* check if the given language identifier is valid */
    824bool usb_validate_langid(u16 langid);
    825
    826/*-------------------------------------------------------------------------*/
    827
    828/* utility to simplify managing config descriptors */
    829
    830/* write vector of descriptors into buffer */
    831int usb_descriptor_fillbuf(void *, unsigned,
    832		const struct usb_descriptor_header **);
    833
    834/* build config descriptor from single descriptor vector */
    835int usb_gadget_config_buf(const struct usb_config_descriptor *config,
    836	void *buf, unsigned buflen, const struct usb_descriptor_header **desc);
    837
    838/* copy a NULL-terminated vector of descriptors */
    839struct usb_descriptor_header **usb_copy_descriptors(
    840		struct usb_descriptor_header **);
    841
    842/**
    843 * usb_free_descriptors - free descriptors returned by usb_copy_descriptors()
    844 * @v: vector of descriptors
    845 */
    846static inline void usb_free_descriptors(struct usb_descriptor_header **v)
    847{
    848	kfree(v);
    849}
    850
    851struct usb_function;
    852int usb_assign_descriptors(struct usb_function *f,
    853		struct usb_descriptor_header **fs,
    854		struct usb_descriptor_header **hs,
    855		struct usb_descriptor_header **ss,
    856		struct usb_descriptor_header **ssp);
    857void usb_free_all_descriptors(struct usb_function *f);
    858
    859struct usb_descriptor_header *usb_otg_descriptor_alloc(
    860				struct usb_gadget *gadget);
    861int usb_otg_descriptor_init(struct usb_gadget *gadget,
    862		struct usb_descriptor_header *otg_desc);
    863/*-------------------------------------------------------------------------*/
    864
    865/* utility to simplify map/unmap of usb_requests to/from DMA */
    866
    867#ifdef	CONFIG_HAS_DMA
    868extern int usb_gadget_map_request_by_dev(struct device *dev,
    869		struct usb_request *req, int is_in);
    870extern int usb_gadget_map_request(struct usb_gadget *gadget,
    871		struct usb_request *req, int is_in);
    872
    873extern void usb_gadget_unmap_request_by_dev(struct device *dev,
    874		struct usb_request *req, int is_in);
    875extern void usb_gadget_unmap_request(struct usb_gadget *gadget,
    876		struct usb_request *req, int is_in);
    877#else /* !CONFIG_HAS_DMA */
    878static inline int usb_gadget_map_request_by_dev(struct device *dev,
    879		struct usb_request *req, int is_in) { return -ENOSYS; }
    880static inline int usb_gadget_map_request(struct usb_gadget *gadget,
    881		struct usb_request *req, int is_in) { return -ENOSYS; }
    882
    883static inline void usb_gadget_unmap_request_by_dev(struct device *dev,
    884		struct usb_request *req, int is_in) { }
    885static inline void usb_gadget_unmap_request(struct usb_gadget *gadget,
    886		struct usb_request *req, int is_in) { }
    887#endif /* !CONFIG_HAS_DMA */
    888
    889/*-------------------------------------------------------------------------*/
    890
    891/* utility to set gadget state properly */
    892
    893extern void usb_gadget_set_state(struct usb_gadget *gadget,
    894		enum usb_device_state state);
    895
    896/*-------------------------------------------------------------------------*/
    897
    898/* utility to tell udc core that the bus reset occurs */
    899extern void usb_gadget_udc_reset(struct usb_gadget *gadget,
    900		struct usb_gadget_driver *driver);
    901
    902/*-------------------------------------------------------------------------*/
    903
    904/* utility to give requests back to the gadget layer */
    905
    906extern void usb_gadget_giveback_request(struct usb_ep *ep,
    907		struct usb_request *req);
    908
    909/*-------------------------------------------------------------------------*/
    910
    911/* utility to find endpoint by name */
    912
    913extern struct usb_ep *gadget_find_ep_by_name(struct usb_gadget *g,
    914		const char *name);
    915
    916/*-------------------------------------------------------------------------*/
    917
    918/* utility to check if endpoint caps match descriptor needs */
    919
    920extern int usb_gadget_ep_match_desc(struct usb_gadget *gadget,
    921		struct usb_ep *ep, struct usb_endpoint_descriptor *desc,
    922		struct usb_ss_ep_comp_descriptor *ep_comp);
    923
    924/*-------------------------------------------------------------------------*/
    925
    926/* utility to update vbus status for udc core, it may be scheduled */
    927extern void usb_udc_vbus_handler(struct usb_gadget *gadget, bool status);
    928
    929/*-------------------------------------------------------------------------*/
    930
    931/* utility wrapping a simple endpoint selection policy */
    932
    933extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *,
    934			struct usb_endpoint_descriptor *);
    935
    936
    937extern struct usb_ep *usb_ep_autoconfig_ss(struct usb_gadget *,
    938			struct usb_endpoint_descriptor *,
    939			struct usb_ss_ep_comp_descriptor *);
    940
    941extern void usb_ep_autoconfig_release(struct usb_ep *);
    942
    943extern void usb_ep_autoconfig_reset(struct usb_gadget *);
    944
    945#endif /* __LINUX_USB_GADGET_H */