Home | History | Annotate | Download | only in IndustryStandard
      1 /*++
      2 
      3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14     usb.h
     15 
     16 Abstract:
     17     Support for USB standard.
     18 
     19 
     20 
     21 
     22 Revision History
     23 
     24 --*/
     25 
     26 #ifndef _USB_INDUSTRY_H_
     27 #define _USB_INDUSTRY_H_
     28 
     29 //
     30 // USB Transfer Results
     31 //
     32 #define EFI_USB_NOERROR             0x00
     33 #define EFI_USB_ERR_NOTEXECUTE      0x01
     34 #define EFI_USB_ERR_STALL           0x02
     35 #define EFI_USB_ERR_BUFFER          0x04
     36 #define EFI_USB_ERR_BABBLE          0x08
     37 #define EFI_USB_ERR_NAK             0x10
     38 #define EFI_USB_ERR_CRC             0x20
     39 #define EFI_USB_ERR_TIMEOUT         0x40
     40 #define EFI_USB_ERR_BITSTUFF        0x80
     41 #define EFI_USB_ERR_SYSTEM          0x100
     42 
     43 //
     44 // Constant value for Port Status & Port Change Status
     45 //
     46 #define USB_PORT_STAT_CONNECTION    0x0001
     47 #define USB_PORT_STAT_ENABLE        0x0002
     48 #define USB_PORT_STAT_SUSPEND       0x0004
     49 #define USB_PORT_STAT_OVERCURRENT   0x0008
     50 #define USB_PORT_STAT_RESET         0x0010
     51 #define USB_PORT_STAT_POWER         0x0100
     52 #define USB_PORT_STAT_LOW_SPEED     0x0200
     53 #define USB_PORT_STAT_HIGH_SPEED    0x0400
     54 #define USB_PORT_STAT_OWNER         0x2000
     55 
     56 #define USB_PORT_STAT_C_CONNECTION  0x0001
     57 #define USB_PORT_STAT_C_ENABLE      0x0002
     58 #define USB_PORT_STAT_C_SUSPEND     0x0004
     59 #define USB_PORT_STAT_C_OVERCURRENT 0x0008
     60 #define USB_PORT_STAT_C_RESET       0x0010
     61 
     62 //
     63 // Usb data transfer direction
     64 //
     65 typedef enum {
     66   EfiUsbDataIn,
     67   EfiUsbDataOut,
     68   EfiUsbNoData
     69 } EFI_USB_DATA_DIRECTION;
     70 
     71 //
     72 // Usb data recipient type
     73 //
     74 typedef enum {
     75   EfiUsbDevice,
     76   EfiUsbInterface,
     77   EfiUsbEndpoint
     78 } EFI_USB_RECIPIENT;
     79 
     80 //
     81 // Usb port features
     82 //
     83 typedef enum {
     84   EfiUsbPortEnable            = 1,
     85   EfiUsbPortSuspend           = 2,
     86   EfiUsbPortReset             = 4,
     87   EfiUsbPortPower             = 8,
     88   EfiUsbPortOwner             = 13,
     89   EfiUsbPortConnectChange     = 16,
     90   EfiUsbPortEnableChange      = 17,
     91   EfiUsbPortSuspendChange     = 18,
     92   EfiUsbPortOverCurrentChange = 19,
     93   EfiUsbPortResetChange       = 20
     94 } EFI_USB_PORT_FEATURE;
     95 
     96 //
     97 // Following are definitions not specified by UEFI spec.
     98 // Add new definitions below this line
     99 //
    100 enum {
    101   //
    102   // USB request type
    103   //
    104   USB_REQ_TYPE_STANDARD   = (0x00 << 5),
    105   USB_REQ_TYPE_CLASS      = (0x01 << 5),
    106   USB_REQ_TYPE_VENDOR     = (0x02 << 5),
    107 
    108   //
    109   // Standard control transfer request type, or the value
    110   // to fill in EFI_USB_DEVICE_REQUEST.Request
    111   //
    112   USB_REQ_GET_STATUS      = 0x00,
    113   USB_REQ_CLEAR_FEATURE   = 0x01,
    114   USB_REQ_SET_FEATURE     = 0x03,
    115   USB_REQ_SET_ADDRESS     = 0x05,
    116   USB_REQ_GET_DESCRIPTOR  = 0x06,
    117   USB_REQ_SET_DESCRIPTOR  = 0x07,
    118   USB_REQ_GET_CONFIG      = 0x08,
    119   USB_REQ_SET_CONFIG      = 0x09,
    120   USB_REQ_GET_INTERFACE   = 0x0A,
    121   USB_REQ_SET_INTERFACE   = 0x0B,
    122   USB_REQ_SYNCH_FRAME     = 0x0C,
    123 
    124   //
    125   // Usb control transfer target
    126   //
    127   USB_TARGET_DEVICE       = 0,
    128   USB_TARGET_INTERFACE    = 0x01,
    129   USB_TARGET_ENDPOINT     = 0x02,
    130   USB_TARGET_OTHER        = 0x03,
    131 
    132   //
    133   // USB Descriptor types
    134   //
    135   USB_DESC_TYPE_DEVICE    = 0x01,
    136   USB_DESC_TYPE_CONFIG    = 0x02,
    137   USB_DESC_TYPE_STRING    = 0x03,
    138   USB_DESC_TYPE_INTERFACE = 0x04,
    139   USB_DESC_TYPE_ENDPOINT  = 0x05,
    140   USB_DESC_TYPE_HID       = 0x21,
    141 
    142   //
    143   // Features to be cleared by CLEAR_FEATURE requests
    144   //
    145   USB_FEATURE_ENDPOINT_HALT = 0,
    146 
    147   //
    148   // USB endpoint types: 00: control, 01: isochronous, 10: bulk, 11: interrupt
    149   //
    150   USB_ENDPOINT_CONTROL    = 0x00,
    151   USB_ENDPOINT_ISO        = 0x01,
    152   USB_ENDPOINT_BULK       = 0x02,
    153   USB_ENDPOINT_INTERRUPT  = 0x03,
    154 
    155   USB_ENDPOINT_TYPE_MASK  = 0x03,
    156   USB_ENDPOINT_DIR_IN     = 0x80,
    157 
    158   MAXBYTES                = 8,
    159 
    160   //
    161   //Use 200 ms to increase the error handling response time
    162   //
    163   EFI_USB_INTERRUPT_DELAY = 2000000
    164 };
    165 
    166 
    167 //
    168 // USB standard descriptors and reqeust
    169 //
    170 #pragma pack(1)
    171 
    172 typedef struct {
    173   UINT8           RequestType;
    174   UINT8           Request;
    175   UINT16          Value;
    176   UINT16          Index;
    177   UINT16          Length;
    178 } EFI_USB_DEVICE_REQUEST;
    179 
    180 typedef struct {
    181   UINT8           Length;
    182   UINT8           DescriptorType;
    183   UINT16          BcdUSB;
    184   UINT8           DeviceClass;
    185   UINT8           DeviceSubClass;
    186   UINT8           DeviceProtocol;
    187   UINT8           MaxPacketSize0;
    188   UINT16          IdVendor;
    189   UINT16          IdProduct;
    190   UINT16          BcdDevice;
    191   UINT8           StrManufacturer;
    192   UINT8           StrProduct;
    193   UINT8           StrSerialNumber;
    194   UINT8           NumConfigurations;
    195 } EFI_USB_DEVICE_DESCRIPTOR;
    196 
    197 typedef struct {
    198   UINT8           Length;
    199   UINT8           DescriptorType;
    200   UINT16          TotalLength;
    201   UINT8           NumInterfaces;
    202   UINT8           ConfigurationValue;
    203   UINT8           Configuration;
    204   UINT8           Attributes;
    205   UINT8           MaxPower;
    206 } EFI_USB_CONFIG_DESCRIPTOR;
    207 
    208 typedef struct {
    209   UINT8           Length;
    210   UINT8           DescriptorType;
    211   UINT8           InterfaceNumber;
    212   UINT8           AlternateSetting;
    213   UINT8           NumEndpoints;
    214   UINT8           InterfaceClass;
    215   UINT8           InterfaceSubClass;
    216   UINT8           InterfaceProtocol;
    217   UINT8           Interface;
    218 } EFI_USB_INTERFACE_DESCRIPTOR;
    219 
    220 typedef struct {
    221   UINT8           Length;
    222   UINT8           DescriptorType;
    223   UINT8           EndpointAddress;
    224   UINT8           Attributes;
    225   UINT16          MaxPacketSize;
    226   UINT8           Interval;
    227 } EFI_USB_ENDPOINT_DESCRIPTOR;
    228 
    229 typedef struct {
    230   UINT8           Length;
    231   UINT8           DescriptorType;
    232   CHAR16          String[1];
    233 } EFI_USB_STRING_DESCRIPTOR;
    234 
    235 typedef struct {
    236   UINT16          PortStatus;
    237   UINT16          PortChangeStatus;
    238 } EFI_USB_PORT_STATUS;
    239 
    240 typedef struct {
    241   UINT8           Length;
    242   UINT8           DescriptorType;
    243   UINT8           NbrPorts;
    244   UINT8           HubCharacteristics[2];
    245   UINT8           PwrOn2PwrGood;
    246   UINT8           HubContrCurrent;
    247   UINT8           Filler[MAXBYTES];
    248 } EFI_USB_HUB_DESCRIPTOR;
    249 
    250 #pragma pack()
    251 
    252 
    253 ///////////////////////////////////////////////////////////////////////////
    254 ///////////////////      Backward Compatibility         ///////////////////
    255 ///////////////////////////////////////////////////////////////////////////
    256 
    257 //
    258 // USB Descriptor types
    259 //
    260 #define USB_DT_DEVICE     0x01
    261 #define USB_DT_CONFIG     0x02
    262 #define USB_DT_STRING     0x03
    263 #define USB_DT_INTERFACE  0x04
    264 #define USB_DT_ENDPOINT   0x05
    265 #define USB_DT_HUB        0x29
    266 #define USB_DT_HID        0x21
    267 
    268 //
    269 // USB request type
    270 //
    271 #define USB_TYPE_STANDARD (0x00 << 5)
    272 #define USB_TYPE_CLASS    (0x01 << 5)
    273 #define USB_TYPE_VENDOR   (0x02 << 5)
    274 #define USB_TYPE_RESERVED (0x03 << 5)
    275 
    276 //
    277 // USB request targer device
    278 //
    279 #define USB_RECIP_DEVICE    0x00
    280 #define USB_RECIP_INTERFACE 0x01
    281 #define USB_RECIP_ENDPOINT  0x02
    282 #define USB_RECIP_OTHER     0x03
    283 
    284 //
    285 // Request target types.
    286 //
    287 #define USB_RT_DEVICE     0x00
    288 #define USB_RT_INTERFACE  0x01
    289 #define USB_RT_ENDPOINT   0x02
    290 #define USB_RT_HUB        (USB_TYPE_CLASS | USB_RECIP_DEVICE)
    291 #define USB_RT_PORT       (USB_TYPE_CLASS | USB_RECIP_OTHER)
    292 
    293 typedef enum {
    294   EfiUsbEndpointHalt,
    295   EfiUsbDeviceRemoteWakeup
    296 } EFI_USB_STANDARD_FEATURE_SELECTOR;
    297 
    298 //
    299 // Standard USB request
    300 //
    301 #define USB_DEV_GET_STATUS                  0x00
    302 #define USB_DEV_CLEAR_FEATURE               0x01
    303 #define USB_DEV_SET_FEATURE                 0x03
    304 #define USB_DEV_SET_ADDRESS                 0x05
    305 #define USB_DEV_SET_ADDRESS_REQ_TYPE        0x00
    306 #define USB_DEV_GET_DESCRIPTOR              0x06
    307 #define USB_DEV_GET_DESCRIPTOR_REQ_TYPE     0x80
    308 #define USB_DEV_SET_DESCRIPTOR              0x07
    309 #define USB_DEV_SET_DESCRIPTOR_REQ_TYPE     0x00
    310 #define USB_DEV_GET_CONFIGURATION           0x08
    311 #define USB_DEV_GET_CONFIGURATION_REQ_TYPE  0x80
    312 #define USB_DEV_SET_CONFIGURATION           0x09
    313 #define USB_DEV_SET_CONFIGURATION_REQ_TYPE  0x00
    314 #define USB_DEV_GET_INTERFACE               0x0A
    315 #define USB_DEV_GET_INTERFACE_REQ_TYPE      0x81
    316 #define USB_DEV_SET_INTERFACE               0x0B
    317 #define USB_DEV_SET_INTERFACE_REQ_TYPE      0x01
    318 #define USB_DEV_SYNCH_FRAME                 0x0C
    319 #define USB_DEV_SYNCH_FRAME_REQ_TYPE        0x82
    320 
    321 #pragma pack(1)
    322 //
    323 // Supported String Languages
    324 //
    325 typedef struct {
    326   UINT8   Length;
    327   UINT8   DescriptorType;
    328   UINT16  SupportedLanID[1];
    329 } EFI_USB_SUPPORTED_LANGUAGES;
    330 
    331 //
    332 // USB alternate setting
    333 //
    334 typedef struct {
    335   EFI_USB_INTERFACE_DESCRIPTOR  *Interface;
    336 } USB_ALT_SETTING;
    337 
    338 #pragma pack()
    339 
    340 ///////////////////////////////////////////////////////////////////////////
    341 ///////////////////////////////////////////////////////////////////////////
    342 ///////////////////////////////////////////////////////////////////////////
    343 
    344 #endif
    345