Provided by: linux-doc-2.6.15_2.6.15-23.39_all bug


       struct usb_gadget - represents a usb slave device


       struct usb_gadget {
         const struct usb_gadget_ops * ops;
         struct usb_ep * ep0;
         struct list_head ep_list;
         enum usb_device_speed speed;
         unsigned is_dualspeed: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;
         const char * name;
         struct device dev;


       ops    Function pointers used to access hardware-specific operations.

       ep0    Endpoint  zero, used when reading or writing responses to driver
              setup requests

              List of other endpoints supported by the device.

       speed  Speed of current connection to USB host.

              True if  the  controller  supports  both  high  and  full  speed
              operation. If it does, the gadget driver must also support both.

       is_otg True if the USB device port uses a Mini-AB  jack,  so  that  the
              gadget driver must provide a USB OTG descriptor.

              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.

              OTG  device feature flag, indicating that the A-Host enabled HNP

              OTG device feature flag, indicating that the A-Host supports HNP
              at this port.

              OTG  device  feature  flag,  indicating  that  the  A-Host  only
              supports HNP on a different root port.

       name   Identifies the controller hardware type. Used in diagnostics and
              sometimes configuration.

       dev    Driver model state for this abstract device.


       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

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


       David Brownell <>.