Home | History | Annotate | Download | only in UsbHostController
      1 /*++
      2 
      3 Copyright (c) 2004 - 2006, 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   UsbHostController.h
     15 
     16 Abstract:
     17 
     18 
     19 --*/
     20 
     21 #ifndef _USB_HOSTCONTROLLER_H_
     22 #define _USB_HOSTCONTROLLER_H_
     23 
     24 #include "usb.h"
     25 #include EFI_PROTOCOL_DEFINITION (UsbIo)
     26 
     27 #define EFI_USB_HC_PROTOCOL_GUID \
     28   { \
     29     0xf5089266, 0x1aa0, 0x4953, {0x97, 0xd8, 0x56, 0x2f, 0x8a, 0x73, 0xb5, 0x19} \
     30   }
     31 
     32 //
     33 // Forward reference for pure ANSI compatability
     34 //
     35 EFI_FORWARD_DECLARATION (EFI_USB_HC_PROTOCOL);
     36 
     37 typedef enum {
     38   EfiUsbHcStateHalt,
     39   EfiUsbHcStateOperational,
     40   EfiUsbHcStateSuspend,
     41   EfiUsbHcStateMaximum
     42 } EFI_USB_HC_STATE;
     43 
     44 #define EFI_USB_HC_RESET_GLOBAL           0x0001
     45 #define EFI_USB_HC_RESET_HOST_CONTROLLER  0x0002
     46 #define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG  0x0004
     47 #define EFI_USB_HC_RESET_HOST_WITH_DEBUG  0x0008
     48 
     49 //
     50 // Protocol definitions
     51 //
     52 typedef
     53 EFI_STATUS
     54 (EFIAPI *EFI_USB_HC_PROTOCOL_RESET) (
     55   IN EFI_USB_HC_PROTOCOL    * This,
     56   IN UINT16                 Attributes
     57   );
     58 
     59 typedef
     60 EFI_STATUS
     61 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_STATE) (
     62   IN  EFI_USB_HC_PROTOCOL    * This,
     63   OUT EFI_USB_HC_STATE       * State
     64   );
     65 
     66 typedef
     67 EFI_STATUS
     68 (EFIAPI *EFI_USB_HC_PROTOCOL_SET_STATE) (
     69   IN EFI_USB_HC_PROTOCOL    * This,
     70   IN EFI_USB_HC_STATE       State
     71   );
     72 
     73 typedef
     74 EFI_STATUS
     75 (EFIAPI *EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER) (
     76   IN     EFI_USB_HC_PROTOCOL       * This,
     77   IN     UINT8                     DeviceAddress,
     78   IN     BOOLEAN                   IsSlowDevice,
     79   IN     UINT8                     MaximumPacketLength,
     80   IN     EFI_USB_DEVICE_REQUEST    * Request,
     81   IN     EFI_USB_DATA_DIRECTION    TransferDirection,
     82   IN OUT VOID                      *Data OPTIONAL,
     83   IN OUT UINTN                     *DataLength OPTIONAL,
     84   IN     UINTN                     TimeOut,
     85   OUT    UINT32                    *TransferResult
     86   );
     87 
     88 typedef
     89 EFI_STATUS
     90 (EFIAPI *EFI_USB_HC_PROTOCOL_BULK_TRANSFER) (
     91   IN     EFI_USB_HC_PROTOCOL    * This,
     92   IN     UINT8                  DeviceAddress,
     93   IN     UINT8                  EndPointAddress,
     94   IN     UINT8                  MaximumPacketLength,
     95   IN OUT VOID                   *Data,
     96   IN OUT UINTN                  *DataLength,
     97   IN OUT UINT8                  *DataToggle,
     98   IN     UINTN                  TimeOut,
     99   OUT    UINT32                 *TransferResult
    100   );
    101 
    102 typedef
    103 EFI_STATUS
    104 (EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) (
    105   IN     EFI_USB_HC_PROTOCOL                                 * This,
    106   IN     UINT8                                               DeviceAddress,
    107   IN     UINT8                                               EndPointAddress,
    108   IN     BOOLEAN                                             IsSlowDevice,
    109   IN     UINT8                                               MaxiumPacketLength,
    110   IN     BOOLEAN                                             IsNewTransfer,
    111   IN OUT UINT8                                               *DataToggle,
    112   IN     UINTN                                               PollingInterval  OPTIONAL,
    113   IN     UINTN                                               DataLength       OPTIONAL,
    114   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK                     CallBackFunction OPTIONAL,
    115   IN     VOID                                                *Context OPTIONAL
    116   );
    117 
    118 typedef
    119 EFI_STATUS
    120 (EFIAPI *EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) (
    121   IN     EFI_USB_HC_PROTOCOL    * This,
    122   IN     UINT8                  DeviceAddress,
    123   IN     UINT8                  EndPointAddress,
    124   IN     BOOLEAN                IsSlowDevice,
    125   IN     UINT8                  MaximumPacketLength,
    126   IN OUT VOID                   *Data,
    127   IN OUT UINTN                  *DataLength,
    128   IN OUT UINT8                  *DataToggle,
    129   IN     UINTN                  TimeOut,
    130   OUT    UINT32                 *TransferResult
    131   );
    132 
    133 typedef
    134 EFI_STATUS
    135 (EFIAPI *EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) (
    136   IN     EFI_USB_HC_PROTOCOL    * This,
    137   IN     UINT8                  DeviceAddress,
    138   IN     UINT8                  EndPointAddress,
    139   IN     UINT8                  MaximumPacketLength,
    140   IN OUT VOID                   *Data,
    141   IN     UINTN                  DataLength,
    142   OUT    UINT32                 *TransferResult
    143   );
    144 
    145 typedef
    146 EFI_STATUS
    147 (EFIAPI *EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) (
    148   IN     EFI_USB_HC_PROTOCOL                * This,
    149   IN     UINT8                              DeviceAddress,
    150   IN     UINT8                              EndPointAddress,
    151   IN     UINT8                              MaximumPacketLength,
    152   IN OUT VOID                               *Data,
    153   IN     UINTN                              DataLength,
    154   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,
    155   IN     VOID                               *Context OPTIONAL
    156   );
    157 
    158 typedef
    159 EFI_STATUS
    160 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER) (
    161   IN EFI_USB_HC_PROTOCOL    * This,
    162   OUT UINT8                 *PortNumber
    163   );
    164 
    165 typedef
    166 EFI_STATUS
    167 (EFIAPI *EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) (
    168   IN EFI_USB_HC_PROTOCOL     * This,
    169   IN  UINT8                  PortNumber,
    170   OUT EFI_USB_PORT_STATUS    * PortStatus
    171   );
    172 
    173 typedef
    174 EFI_STATUS
    175 (EFIAPI *EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) (
    176   IN EFI_USB_HC_PROTOCOL     * This,
    177   IN UINT8                   PortNumber,
    178   IN EFI_USB_PORT_FEATURE    PortFeature
    179   );
    180 
    181 typedef
    182 EFI_STATUS
    183 (EFIAPI *EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) (
    184   IN EFI_USB_HC_PROTOCOL     * This,
    185   IN UINT8                   PortNumber,
    186   IN EFI_USB_PORT_FEATURE    PortFeature
    187   );
    188 
    189 struct _EFI_USB_HC_PROTOCOL {
    190   EFI_USB_HC_PROTOCOL_RESET                       Reset;
    191   EFI_USB_HC_PROTOCOL_GET_STATE                   GetState;
    192   EFI_USB_HC_PROTOCOL_SET_STATE                   SetState;
    193   EFI_USB_HC_PROTOCOL_CONTROL_TRANSFER            ControlTransfer;
    194   EFI_USB_HC_PROTOCOL_BULK_TRANSFER               BulkTransfer;
    195   EFI_USB_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER    AsyncInterruptTransfer;
    196   EFI_USB_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER     SyncInterruptTransfer;
    197   EFI_USB_HC_PROTOCOL_ISOCHRONOUS_TRANSFER        IsochronousTransfer;
    198   EFI_USB_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER  AsyncIsochronousTransfer;
    199   EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_NUMBER     GetRootHubPortNumber;
    200   EFI_USB_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS     GetRootHubPortStatus;
    201   EFI_USB_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE    SetRootHubPortFeature;
    202   EFI_USB_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE  ClearRootHubPortFeature;
    203   UINT16                                          MajorRevision;
    204   UINT16                                          MinorRevision;
    205 };
    206 
    207 extern EFI_GUID gEfiUsbHcProtocolGuid;
    208 
    209 
    210 #define EFI_USB2_HC_PROTOCOL_GUID \
    211   { \
    212     0x3e745226, 0x9818, 0x45b6, {0xa2, 0xac, 0xd7, 0xcd, 0xe, 0x8b, 0xa2, 0xbc} \
    213   }
    214 
    215 //
    216 // Forward reference for pure ANSI compatability
    217 //
    218 EFI_FORWARD_DECLARATION (EFI_USB2_HC_PROTOCOL);
    219 
    220 #define EFI_USB_HC_RESET_GLOBAL_WITH_DEBUG 0x0004
    221 #define EFI_USB_HC_RESET_HOST_WITH_DEBUG   0x0008
    222 
    223 typedef struct {
    224   UINT8      TranslatorHubAddress;
    225   UINT8      TranslatorPortNumber;
    226 } EFI_USB2_HC_TRANSACTION_TRANSLATOR;
    227 
    228 //
    229 // Protocol definitions
    230 //
    231 typedef
    232 EFI_STATUS
    233 (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_CAPABILITY) (
    234   IN  EFI_USB2_HC_PROTOCOL  *This,
    235   OUT UINT8                 *MaxSpeed,
    236   OUT UINT8                 *PortNumber,
    237   OUT UINT8                 *Is64BitCapable
    238   );
    239 
    240 #define EFI_USB_SPEED_FULL 0x0000
    241 #define EFI_USB_SPEED_LOW  0x0001
    242 #define EFI_USB_SPEED_HIGH 0x0002
    243 
    244 typedef
    245 EFI_STATUS
    246 (EFIAPI *EFI_USB2_HC_PROTOCOL_RESET) (
    247   IN EFI_USB2_HC_PROTOCOL   *This,
    248   IN UINT16                 Attributes
    249   );
    250 
    251 typedef
    252 EFI_STATUS
    253 (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_STATE) (
    254   IN  EFI_USB2_HC_PROTOCOL    *This,
    255   OUT EFI_USB_HC_STATE        *State
    256   );
    257 
    258 typedef
    259 EFI_STATUS
    260 (EFIAPI *EFI_USB2_HC_PROTOCOL_SET_STATE) (
    261   IN EFI_USB2_HC_PROTOCOL    *This,
    262   IN EFI_USB_HC_STATE        State
    263   );
    264 
    265 typedef
    266 EFI_STATUS
    267 (EFIAPI *EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER) (
    268   IN     EFI_USB2_HC_PROTOCOL               *This,
    269   IN     UINT8                              DeviceAddress,
    270   IN     UINT8                              DeviceSpeed,
    271   IN     UINTN                              MaximumPacketLength,
    272   IN     EFI_USB_DEVICE_REQUEST             *Request,
    273   IN     EFI_USB_DATA_DIRECTION             TransferDirection,
    274   IN OUT VOID                               *Data       OPTIONAL,
    275   IN OUT UINTN                              *DataLength OPTIONAL,
    276   IN     UINTN                              TimeOut,
    277   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
    278   OUT    UINT32                             *TransferResult
    279   );
    280 
    281 #define EFI_USB_MAX_BULK_BUFFER_NUM 10
    282 
    283 typedef
    284 EFI_STATUS
    285 (EFIAPI *EFI_USB2_HC_PROTOCOL_BULK_TRANSFER) (
    286   IN     EFI_USB2_HC_PROTOCOL               *This,
    287   IN     UINT8                              DeviceAddress,
    288   IN     UINT8                              EndPointAddress,
    289   IN     UINT8                              DeviceSpeed,
    290   IN     UINTN                              MaximumPacketLength,
    291   IN     UINT8                              DataBuffersNumber,
    292   IN OUT VOID                               *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
    293   IN OUT UINTN                              *DataLength,
    294   IN OUT UINT8                              *DataToggle,
    295   IN     UINTN                              TimeOut,
    296   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
    297   OUT    UINT32                             *TransferResult
    298   );
    299 
    300 typedef
    301 EFI_STATUS
    302 (EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER) (
    303   IN     EFI_USB2_HC_PROTOCOL                                *This,
    304   IN     UINT8                                               DeviceAddress,
    305   IN     UINT8                                               EndPointAddress,
    306   IN     UINT8                                               DeviceSpeed,
    307   IN     UINTN                                               MaxiumPacketLength,
    308   IN     BOOLEAN                                             IsNewTransfer,
    309   IN OUT UINT8                                               *DataToggle,
    310   IN     UINTN                                               PollingInterval  OPTIONAL,
    311   IN     UINTN                                               DataLength       OPTIONAL,
    312   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
    313   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK                     CallBackFunction OPTIONAL,
    314   IN     VOID                                                *Context         OPTIONAL
    315   );
    316 
    317 typedef
    318 EFI_STATUS
    319 (EFIAPI *EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER) (
    320   IN     EFI_USB2_HC_PROTOCOL   *This,
    321   IN     UINT8                  DeviceAddress,
    322   IN     UINT8                  EndPointAddress,
    323   IN     UINT8                  DeviceSpeed,
    324   IN     UINTN                  MaximumPacketLength,
    325   IN OUT VOID                   *Data,
    326   IN OUT UINTN                  *DataLength,
    327   IN OUT UINT8                  *DataToggle,
    328   IN     UINTN                  TimeOut,
    329   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
    330   OUT    UINT32                 *TransferResult
    331   );
    332 
    333 #define EFI_USB_MAX_ISO_BUFFER_NUM  7
    334 #define EFI_USB_MAX_ISO_BUFFER_NUM1 2
    335 
    336 typedef
    337 EFI_STATUS
    338 (EFIAPI *EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER) (
    339   IN     EFI_USB2_HC_PROTOCOL               *This,
    340   IN     UINT8                              DeviceAddress,
    341   IN     UINT8                              EndPointAddress,
    342   IN     UINT8                              DeviceSpeed,
    343   IN     UINTN                              MaximumPacketLength,
    344   IN     UINT8                              DataBuffersNumber,
    345   IN OUT VOID                               *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
    346   IN     UINTN                              DataLength,
    347   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
    348   OUT    UINT32                             *TransferResult
    349   );
    350 
    351 typedef
    352 EFI_STATUS
    353 (EFIAPI *EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER) (
    354   IN     EFI_USB2_HC_PROTOCOL               *This,
    355   IN     UINT8                              DeviceAddress,
    356   IN     UINT8                              EndPointAddress,
    357   IN     UINT8                              DeviceSpeed,
    358   IN     UINTN                              MaximumPacketLength,
    359   IN     UINT8                              DataBuffersNumber,
    360   IN OUT VOID                               *Data[EFI_USB_MAX_ISO_BUFFER_NUM],
    361   IN     UINTN                              DataLength,
    362   IN     EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
    363   IN     EFI_ASYNC_USB_TRANSFER_CALLBACK    IsochronousCallBack,
    364   IN     VOID                               *Context OPTIONAL
    365   );
    366 
    367 typedef
    368 EFI_STATUS
    369 (EFIAPI *EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS) (
    370   IN EFI_USB2_HC_PROTOCOL    *This,
    371   IN  UINT8                  PortNumber,
    372   OUT EFI_USB_PORT_STATUS    *PortStatus
    373   );
    374 
    375 typedef
    376 EFI_STATUS
    377 (EFIAPI *EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE) (
    378   IN EFI_USB2_HC_PROTOCOL    *This,
    379   IN UINT8                   PortNumber,
    380   IN EFI_USB_PORT_FEATURE    PortFeature
    381   );
    382 
    383 typedef
    384 EFI_STATUS
    385 (EFIAPI *EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE) (
    386   IN EFI_USB2_HC_PROTOCOL    *This,
    387   IN UINT8                   PortNumber,
    388   IN EFI_USB_PORT_FEATURE    PortFeature
    389   );
    390 
    391 struct _EFI_USB2_HC_PROTOCOL {
    392   EFI_USB2_HC_PROTOCOL_GET_CAPABILITY              GetCapability;
    393   EFI_USB2_HC_PROTOCOL_RESET                       Reset;
    394   EFI_USB2_HC_PROTOCOL_GET_STATE                   GetState;
    395   EFI_USB2_HC_PROTOCOL_SET_STATE                   SetState;
    396   EFI_USB2_HC_PROTOCOL_CONTROL_TRANSFER            ControlTransfer;
    397   EFI_USB2_HC_PROTOCOL_BULK_TRANSFER               BulkTransfer;
    398   EFI_USB2_HC_PROTOCOL_ASYNC_INTERRUPT_TRANSFER    AsyncInterruptTransfer;
    399   EFI_USB2_HC_PROTOCOL_SYNC_INTERRUPT_TRANSFER     SyncInterruptTransfer;
    400   EFI_USB2_HC_PROTOCOL_ISOCHRONOUS_TRANSFER        IsochronousTransfer;
    401   EFI_USB2_HC_PROTOCOL_ASYNC_ISOCHRONOUS_TRANSFER  AsyncIsochronousTransfer;
    402   EFI_USB2_HC_PROTOCOL_GET_ROOTHUB_PORT_STATUS     GetRootHubPortStatus;
    403   EFI_USB2_HC_PROTOCOL_SET_ROOTHUB_PORT_FEATURE    SetRootHubPortFeature;
    404   EFI_USB2_HC_PROTOCOL_CLEAR_ROOTHUB_PORT_FEATURE  ClearRootHubPortFeature;
    405   UINT16                                           MajorRevision;
    406   UINT16                                           MinorRevision;
    407 };
    408 
    409 extern EFI_GUID gEfiUsb2HcProtocolGuid;
    410 
    411 #endif
    412