Home | History | Annotate | Download | only in UsbBusDxe
      1 /** @file
      2 
      3     USB bus enumeration interface.
      4 
      5 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef _USB_ENUMERATION_H_
     17 #define _USB_ENUMERATION_H_
     18 
     19 //
     20 // Advance the byte and bit to the next bit, adjust byte accordingly.
     21 //
     22 #define USB_NEXT_BIT(Byte, Bit)   \
     23           do {                \
     24             (Bit)++;          \
     25             if ((Bit) > 7) {  \
     26               (Byte)++;       \
     27               (Bit) = 0;      \
     28             }                 \
     29           } while (0)
     30 
     31 
     32 //
     33 // Common interface used by usb bus enumeration process.
     34 // This interface is defined to mask the difference between
     35 // the root hub and normal hub. So, bus enumeration code
     36 // can be shared by both root hub and normal hub
     37 //
     38 typedef
     39 EFI_STATUS
     40 (*USB_HUB_INIT) (
     41   IN USB_INTERFACE        *UsbIf
     42   );
     43 
     44 //
     45 // Get the port status. This function is required to
     46 // ACK the port change bits although it will return
     47 // the port changes in PortState. Bus enumeration code
     48 // doesn't need to ACK the port change bits.
     49 //
     50 typedef
     51 EFI_STATUS
     52 (*USB_HUB_GET_PORT_STATUS) (
     53   IN  USB_INTERFACE       *UsbIf,
     54   IN  UINT8               Port,
     55   OUT EFI_USB_PORT_STATUS *PortState
     56   );
     57 
     58 typedef
     59 VOID
     60 (*USB_HUB_CLEAR_PORT_CHANGE) (
     61   IN USB_INTERFACE        *HubIf,
     62   IN UINT8                Port
     63   );
     64 
     65 typedef
     66 EFI_STATUS
     67 (*USB_HUB_SET_PORT_FEATURE) (
     68   IN USB_INTERFACE        *UsbIf,
     69   IN UINT8                Port,
     70   IN EFI_USB_PORT_FEATURE Feature
     71   );
     72 
     73 typedef
     74 EFI_STATUS
     75 (*USB_HUB_CLEAR_PORT_FEATURE) (
     76   IN USB_INTERFACE        *UsbIf,
     77   IN UINT8                Port,
     78   IN EFI_USB_PORT_FEATURE Feature
     79   );
     80 
     81 typedef
     82 EFI_STATUS
     83 (*USB_HUB_RESET_PORT) (
     84   IN USB_INTERFACE        *UsbIf,
     85   IN UINT8                Port
     86   );
     87 
     88 typedef
     89 EFI_STATUS
     90 (*USB_HUB_RELEASE) (
     91   IN USB_INTERFACE        *UsbIf
     92   );
     93 
     94 /**
     95   Return the endpoint descriptor in this interface.
     96 
     97   @param  UsbIf                 The interface to search in.
     98   @param  EpAddr                The address of the endpoint to return.
     99 
    100   @return The endpoint descriptor or NULL.
    101 
    102 **/
    103 USB_ENDPOINT_DESC*
    104 UsbGetEndpointDesc (
    105   IN USB_INTERFACE        *UsbIf,
    106   IN UINT8                EpAddr
    107   );
    108 
    109 /**
    110   Select an alternate setting for the interface.
    111   Each interface can have several mutually exclusive
    112   settings. Only one setting is active. It will
    113   also reset its endpoints' toggle to zero.
    114 
    115   @param  IfDesc                The interface descriptor to set.
    116   @param  Alternate             The alternate setting number to locate.
    117 
    118   @retval EFI_NOT_FOUND         There is no setting with this alternate index.
    119   @retval EFI_SUCCESS           The interface is set to Alternate setting.
    120 
    121 **/
    122 EFI_STATUS
    123 UsbSelectSetting (
    124   IN USB_INTERFACE_DESC   *IfDesc,
    125   IN UINT8                Alternate
    126   );
    127 
    128 /**
    129   Select a new configuration for the device. Each
    130   device may support several configurations.
    131 
    132   @param  Device                The device to select configuration.
    133   @param  ConfigIndex           The index of the configuration ( != 0).
    134 
    135   @retval EFI_NOT_FOUND         There is no configuration with the index.
    136   @retval EFI_OUT_OF_RESOURCES  Failed to allocate resource.
    137   @retval EFI_SUCCESS           The configuration is selected.
    138 
    139 **/
    140 EFI_STATUS
    141 UsbSelectConfig (
    142   IN USB_DEVICE           *Device,
    143   IN UINT8                ConfigIndex
    144   );
    145 
    146 /**
    147   Remove the current device configuration.
    148 
    149   @param  Device                The USB device to remove configuration from.
    150 
    151   @return None.
    152 
    153 **/
    154 EFI_STATUS
    155 UsbRemoveConfig (
    156   IN USB_DEVICE           *Device
    157   );
    158 
    159 /**
    160   Remove the device and all its children from the bus.
    161 
    162   @param  Device                The device to remove.
    163 
    164   @retval EFI_SUCCESS           The device is removed.
    165 
    166 **/
    167 EFI_STATUS
    168 UsbRemoveDevice (
    169   IN USB_DEVICE           *Device
    170   );
    171 
    172 /**
    173   Enumerate all the changed hub ports.
    174 
    175   @param  Event                 The event that is triggered.
    176   @param  Context               The context to the event.
    177 
    178   @return None.
    179 
    180 **/
    181 VOID
    182 EFIAPI
    183 UsbHubEnumeration (
    184   IN EFI_EVENT            Event,
    185   IN VOID                 *Context
    186   );
    187 
    188 /**
    189   Enumerate all the changed hub ports.
    190 
    191   @param  Event                 The event that is triggered.
    192   @param  Context               The context to the event.
    193 
    194   @return None.
    195 
    196 **/
    197 VOID
    198 EFIAPI
    199 UsbRootHubEnumeration (
    200   IN EFI_EVENT            Event,
    201   IN VOID                 *Context
    202   );
    203 #endif
    204