struct usb_gadget — represents a usb slave device
struct usb_gadget { struct work_struct work; struct usb_udc * udc; const struct usb_gadget_ops * ops; struct usb_ep * ep0; struct list_head ep_list; enum usb_device_speed speed; enum usb_device_speed max_speed; enum usb_device_state state; const char * name; struct device dev; unsigned out_epnum; unsigned in_epnum; unsigned mA; struct usb_otg_caps * otg_caps; unsigned sg_supported:1; unsigned is_otg:1; unsigned is_a_peripheral:1; unsigned b_hnp_enable:1; unsigned a_hnp_support:1; unsigned a_alt_hnp_support:1; unsigned hnp_polling_support:1; unsigned host_request_flag:1; unsigned quirk_ep_out_aligned_size:1; unsigned quirk_avoids_skb_reserve:1; unsigned is_selfpowered:1; unsigned deactivated:1; unsigned connected:1; };
struct work_struct work
(internal use) Workqueue to be used for sysfs_notify
struct usb_udc * udc
struct usb_udc pointer for this gadget
const struct usb_gadget_ops * ops
Function pointers used to access hardware-specific operations.
struct usb_ep * ep0
Endpoint zero, used when reading or writing responses to
driver setup
requests
struct list_head ep_list
List of other endpoints supported by the device.
enum usb_device_speed speed
Speed of current connection to USB host.
enum usb_device_speed max_speed
Maximal speed the UDC can handle. UDC must support this and all slower speeds.
enum usb_device_state state
the state we are now (attached, suspended, configured, etc)
const char * name
Identifies the controller hardware type. Used in diagnostics and sometimes configuration.
struct device dev
Driver model state for this abstract device.
unsigned out_epnum
last used out ep number
unsigned in_epnum
last used in ep number
unsigned mA
last set mA value
struct usb_otg_caps * otg_caps
OTG capabilities of this gadget.
unsigned:1 sg_supported
true if we can handle scatter-gather
unsigned:1 is_otg
True if the USB device port uses a Mini-AB jack, so that the gadget driver must provide a USB OTG descriptor.
unsigned:1 is_a_peripheral
False unless is_otg, the “A” end of a USB cable is in the Mini-AB jack, and HNP has been used to switch roles so that the “A” device currently acts as A-Peripheral, not A-Host.
unsigned:1 b_hnp_enable
OTG device feature flag, indicating that the A-Host enabled HNP support.
unsigned:1 a_hnp_support
OTG device feature flag, indicating that the A-Host supports HNP at this port.
unsigned:1 a_alt_hnp_support
OTG device feature flag, indicating that the A-Host only supports HNP on a different root port.
unsigned:1 hnp_polling_support
OTG device feature flag, indicating if the OTG device in peripheral mode can support HNP polling.
unsigned:1 host_request_flag
OTG device feature flag, indicating if A-Peripheral or B-Peripheral wants to take host role.
unsigned:1 quirk_ep_out_aligned_size
epout requires buffer size to be aligned to MaxPacketSize.
unsigned:1 quirk_avoids_skb_reserve
udc/platform wants to avoid skb_reserve
in
u_ether.c to improve performance.
unsigned:1 is_selfpowered
if the gadget is self-powered.
unsigned:1 deactivated
True if gadget is deactivated - in deactivated state it cannot be connected.
unsigned:1 connected
True if gadget is connected.
Gadgets have a mostly-portable “gadget driver” implementing device functions, handling all usb configurations and interfaces. Gadget drivers talk to hardware-specific code indirectly, through ops vectors. That insulates the gadget driver from hardware details, and packages the hardware endpoints through generic i/o queues. The “usb_gadget” and “usb_ep” interfaces provide that insulation from the hardware.
Except for the driver data, all fields in this structure are read-only to the gadget driver. That driver data is part of the “driver model” infrastructure in 2.6 (and later) kernels, and for earlier systems is grouped in a similar structure that's not known to the rest of the kernel.
Values of the three OTG device feature flags are updated before the
setup
call corresponding to USB_REQ_SET_CONFIGURATION, and before
driver suspend
calls. They are valid only when is_otg, and when the
device is acting as a B-Peripheral (so is_a_peripheral is false).