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