STRUCT USB_FUNCTION(9) | Kernel Mode Gadget API | STRUCT USB_FUNCTION(9) |
NAME¶
struct_usb_function - describes one function of a configuration
SYNOPSIS¶
struct usb_function {
const char * name;
struct usb_gadget_strings ** strings;
struct usb_descriptor_header ** descriptors;
struct usb_descriptor_header ** hs_descriptors;
struct usb_configuration * config;
int (* bind) (struct usb_configuration *,struct usb_function *);
void (* unbind) (struct usb_configuration *,struct usb_function *);
int (* set_alt) (struct usb_function *,unsigned interface, unsigned alt);
int (* get_alt) (struct usb_function *,unsigned interface);
void (* disable) (struct usb_function *);
int (* setup) (struct usb_function *,const struct usb_ctrlrequest *);
void (* suspend) (struct usb_function *);
void (* resume) (struct usb_function *); };
MEMBERS¶
name
strings
descriptors
hs_descriptors
config
bind
unbind
set_alt
get_alt
disable
setup
suspend
resume
DESCRIPTION¶
A single USB function uses one or more interfaces, and should in most cases support operation at both full and high speeds. Each function is associated by usb_add_function() with a one configuration; that function causes bind() to be called so resources can be allocated as part of setting up a gadget driver. Those resources include endpoints, which should be allocated using usb_ep_autoconfig().
To support dual speed operation, a function driver provides descriptors for both high and full speed operation. Except in rare cases that don´t involve bulk endpoints, each speed needs different endpoint descriptors.
Function drivers choose their own strategies for managing instance data. The simplest strategy just declares it "static´, which means the function can only be activated once. If the function needs to be exposed in more than one configuration at a given speed, it needs to support multiple usb_function structures (one for each configuration).
A more complex strategy might encapsulate a usb_function structure inside a driver-specific instance structure to allows multiple activations. An example of multiple activations might be a CDC ACM function that supports two or more distinct instances within the same configuration, providing several independent logical data links to a USB host.
AUTHOR¶
David Brownell <dbrownell@users.sourceforge.net>
COPYRIGHT¶
May 2024 | Kernel Hackers Manual 2.6. |