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