Home | History | Annotate | Download | only in UsbBusPei
      1 /** @file
      2 Constants definitions for Usb Hub Peim
      3 
      4 Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
      5 
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions
      8 of the BSD License which accompanies this distribution.  The
      9 full text of the license may be found at
     10 http://opensource.org/licenses/bsd-license.php
     11 
     12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 
     15 **/
     16 
     17 #ifndef _PEI_HUB_PEIM_H_
     18 #define _PEI_HUB_PEIM_H_
     19 
     20 
     21 //
     22 // Hub feature numbers
     23 //
     24 #define C_HUB_LOCAL_POWER   0
     25 #define C_HUB_OVER_CURRENT  1
     26 
     27 //
     28 // Hub class code & sub class code
     29 //
     30 #define CLASS_CODE_HUB      0x09
     31 #define SUB_CLASS_CODE_HUB  0
     32 
     33 //
     34 // Hub Status & Hub Change bit masks
     35 //
     36 #define HUB_STATUS_LOCAL_POWER  0x0001
     37 #define HUB_STATUS_OVERCURRENT  0x0002
     38 
     39 #define HUB_CHANGE_LOCAL_POWER  0x0001
     40 #define HUB_CHANGE_OVERCURRENT  0x0002
     41 
     42 //
     43 // Hub Characteristics
     44 //
     45 #define HUB_CHAR_LPSM     0x0003
     46 #define HUB_CHAR_COMPOUND 0x0004
     47 #define HUB_CHAR_OCPM     0x0018
     48 
     49 //
     50 // Standard hub request and request type
     51 // By [Spec-USB20/Chapter-11.24]
     52 //
     53 #define USB_HUB_CLEAR_FEATURE               0x01
     54 #define USB_HUB_CLEAR_FEATURE_REQ_TYPE      0x20
     55 
     56 #define USB_HUB_CLEAR_FEATURE_PORT          0x01
     57 #define USB_HUB_CLEAR_FEATURE_PORT_REQ_TYPE 0x23
     58 
     59 #define USB_HUB_GET_BUS_STATE               0x02
     60 #define USB_HUB_GET_BUS_STATE_REQ_TYPE      0xA3
     61 
     62 #define USB_HUB_GET_DESCRIPTOR              0x06
     63 #define USB_HUB_GET_DESCRIPTOR_REQ_TYPE     0xA0
     64 
     65 #define USB_HUB_GET_HUB_STATUS              0x00
     66 #define USB_HUB_GET_HUB_STATUS_REQ_TYPE     0xA0
     67 
     68 #define USB_HUB_GET_PORT_STATUS             0x00
     69 #define USB_HUB_GET_PORT_STATUS_REQ_TYPE    0xA3
     70 
     71 #define USB_HUB_SET_DESCRIPTOR              0x07
     72 #define USB_HUB_SET_DESCRIPTOR_REQ_TYPE     0x20
     73 
     74 #define USB_HUB_SET_HUB_FEATURE             0x03
     75 #define USB_HUB_SET_HUB_FEATURE_REQ_TYPE    0x20
     76 
     77 #define USB_HUB_SET_PORT_FEATURE            0x03
     78 #define USB_HUB_SET_PORT_FEATURE_REQ_TYPE   0x23
     79 
     80 #define USB_RT_HUB        (USB_TYPE_CLASS | USB_RECIP_DEVICE)
     81 #define USB_RT_PORT       (USB_TYPE_CLASS | USB_RECIP_OTHER)
     82 
     83 #define USB_HUB_REQ_SET_DEPTH               12
     84 
     85 #define MAXBYTES  8
     86 #pragma pack(1)
     87 //
     88 // Hub descriptor, the last two fields are of variable lenght.
     89 //
     90 typedef struct {
     91   UINT8 Length;
     92   UINT8 DescriptorType;
     93   UINT8 NbrPorts;
     94   UINT8 HubCharacteristics[2];
     95   UINT8 PwrOn2PwrGood;
     96   UINT8 HubContrCurrent;
     97   UINT8 Filler[MAXBYTES];
     98 } EFI_USB_HUB_DESCRIPTOR;
     99 
    100 typedef struct {
    101   UINT16  HubStatus;
    102   UINT16  HubChangeStatus;
    103 } EFI_USB_HUB_STATUS;
    104 
    105 #pragma pack()
    106 /**
    107   Get a given hub port status.
    108 
    109   @param  PeiServices   General-purpose services that are available to every PEIM.
    110   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
    111   @param  Port          Usb hub port number (starting from 1).
    112   @param  PortStatus    Current Hub port status and change status.
    113 
    114   @retval EFI_SUCCESS       Port status is obtained successfully.
    115   @retval EFI_DEVICE_ERROR  Cannot get the port status due to a hardware error.
    116   @retval Others            Other failure occurs.
    117 
    118 **/
    119 EFI_STATUS
    120 PeiHubGetPortStatus (
    121   IN EFI_PEI_SERVICES       **PeiServices,
    122   IN PEI_USB_IO_PPI         *UsbIoPpi,
    123   IN  UINT8                 Port,
    124   OUT UINT32                *PortStatus
    125   );
    126 
    127 /**
    128   Set specified feature to a given hub port.
    129 
    130   @param  PeiServices   General-purpose services that are available to every PEIM.
    131   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
    132   @param  Port          Usb hub port number (starting from 1).
    133   @param  Value         New feature value.
    134 
    135   @retval EFI_SUCCESS       Port feature is set successfully.
    136   @retval EFI_DEVICE_ERROR  Cannot set the port feature due to a hardware error.
    137   @retval Others            Other failure occurs.
    138 
    139 **/
    140 EFI_STATUS
    141 PeiHubSetPortFeature (
    142   IN EFI_PEI_SERVICES       **PeiServices,
    143   IN PEI_USB_IO_PPI         *UsbIoPpi,
    144   IN  UINT8                 Port,
    145   IN  UINT8                 Value
    146   );
    147 
    148 /**
    149   Set specified feature to a given hub.
    150 
    151   @param  PeiServices   General-purpose services that are available to every PEIM.
    152   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
    153   @param  Value         New feature value.
    154 
    155   @retval EFI_SUCCESS       Port feature is set successfully.
    156   @retval EFI_DEVICE_ERROR  Cannot set the port feature due to a hardware error.
    157   @retval Others            Other failure occurs.
    158 
    159 **/
    160 EFI_STATUS
    161 PeiHubSetHubFeature (
    162   IN EFI_PEI_SERVICES       **PeiServices,
    163   IN PEI_USB_IO_PPI         *UsbIoPpi,
    164   IN  UINT8                 Value
    165   );
    166 
    167 /**
    168   Get a given hub status.
    169 
    170   @param  PeiServices   General-purpose services that are available to every PEIM.
    171   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
    172   @param  HubStatus     Current Hub status and change status.
    173 
    174   @retval EFI_SUCCESS       Hub status is obtained successfully.
    175   @retval EFI_DEVICE_ERROR  Cannot get the hub status due to a hardware error.
    176   @retval Others            Other failure occurs.
    177 
    178 **/
    179 EFI_STATUS
    180 PeiHubGetHubStatus (
    181   IN EFI_PEI_SERVICES       **PeiServices,
    182   IN PEI_USB_IO_PPI         *UsbIoPpi,
    183   OUT UINT32                *HubStatus
    184   );
    185 
    186 /**
    187   Clear specified feature on a given hub port.
    188 
    189   @param  PeiServices   General-purpose services that are available to every PEIM.
    190   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
    191   @param  Port          Usb hub port number (starting from 1).
    192   @param  Value         Feature value that will be cleared from the hub port.
    193 
    194   @retval EFI_SUCCESS       Port feature is cleared successfully.
    195   @retval EFI_DEVICE_ERROR  Cannot clear the port feature due to a hardware error.
    196   @retval Others            Other failure occurs.
    197 
    198 **/
    199 EFI_STATUS
    200 PeiHubClearPortFeature (
    201   IN EFI_PEI_SERVICES       **PeiServices,
    202   IN PEI_USB_IO_PPI         *UsbIoPpi,
    203   IN  UINT8                 Port,
    204   IN  UINT8                 Value
    205   );
    206 
    207 /**
    208   Clear specified feature on a given hub.
    209 
    210   @param  PeiServices   General-purpose services that are available to every PEIM.
    211   @param  UsbIoPpi      Indicates the PEI_USB_IO_PPI instance.
    212   @param  Value         Feature value that will be cleared from the hub port.
    213 
    214   @retval EFI_SUCCESS       Hub feature is cleared successfully.
    215   @retval EFI_DEVICE_ERROR  Cannot clear the hub feature due to a hardware error.
    216   @retval Others            Other failure occurs.
    217 
    218 **/
    219 EFI_STATUS
    220 PeiHubClearHubFeature (
    221   IN EFI_PEI_SERVICES       **PeiServices,
    222   IN PEI_USB_IO_PPI         *UsbIoPpi,
    223   IN  UINT8                 Value
    224   );
    225 
    226 /**
    227   Get a given hub descriptor.
    228 
    229   @param  PeiServices    General-purpose services that are available to every PEIM.
    230   @param  UsbIoPpi       Indicates the PEI_USB_IO_PPI instance.
    231   @param  DescriptorSize The length of Hub Descriptor buffer.
    232   @param  HubDescriptor  Caller allocated buffer to store the hub descriptor if
    233                          successfully returned.
    234 
    235   @retval EFI_SUCCESS       Hub descriptor is obtained successfully.
    236   @retval EFI_DEVICE_ERROR  Cannot get the hub descriptor due to a hardware error.
    237   @retval Others            Other failure occurs.
    238 
    239 **/
    240 EFI_STATUS
    241 PeiGetHubDescriptor (
    242   IN EFI_PEI_SERVICES         **PeiServices,
    243   IN PEI_USB_IO_PPI           *UsbIoPpi,
    244   IN UINTN                    DescriptorSize,
    245   OUT EFI_USB_HUB_DESCRIPTOR  *HubDescriptor
    246   );
    247 
    248 /**
    249   Configure a given hub.
    250 
    251   @param  PeiServices    General-purpose services that are available to every PEIM.
    252   @param  PeiUsbDevice   Indicating the hub controller device that will be configured
    253 
    254   @retval EFI_SUCCESS       Hub configuration is done successfully.
    255   @retval EFI_DEVICE_ERROR  Cannot configure the hub due to a hardware error.
    256 
    257 **/
    258 EFI_STATUS
    259 PeiDoHubConfig (
    260   IN EFI_PEI_SERVICES         **PeiServices,
    261   IN PEI_USB_DEVICE           *PeiUsbDevice
    262   );
    263 
    264 /**
    265   Send reset signal over the given root hub port.
    266 
    267   @param  PeiServices    General-purpose services that are available to every PEIM.
    268   @param  UsbIoPpi       Indicates the PEI_USB_IO_PPI instance.
    269   @param  PortNum        Usb hub port number (starting from 1).
    270 
    271 **/
    272 VOID
    273 PeiResetHubPort (
    274   IN EFI_PEI_SERVICES    **PeiServices,
    275   IN PEI_USB_IO_PPI      *UsbIoPpi,
    276   IN UINT8               PortNum
    277   );
    278 
    279 #endif
    280 
    281 
    282