Scroll to navigation

STRUCT USB_GADGET(9) Kernel Mode Gadget API STRUCT USB_GADGET(9)

NAME

struct_usb_gadget - represents a usb slave device

SYNOPSIS

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; };

MEMBERS

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.

DESCRIPTION

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).

AUTHOR

David Brownell <dbrownell@users.sourceforge.net>

Author.

COPYRIGHT

June 2017 Kernel Hackers Manual 4.11