/** @file | |
USB bus enumeration interface. | |
Copyright (c) 2007, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _USB_ENUMERATION_H_ | |
#define _USB_ENUMERATION_H_ | |
// | |
// Advance the byte and bit to the next bit, adjust byte accordingly. | |
// | |
#define USB_NEXT_BIT(Byte, Bit) \ | |
do { \ | |
(Bit)++; \ | |
if ((Bit) > 7) { \ | |
(Byte)++; \ | |
(Bit) = 0; \ | |
} \ | |
} while (0) | |
// | |
// Common interface used by usb bus enumeration process. | |
// This interface is defined to mask the difference between | |
// the root hub and normal hub. So, bus enumeration code | |
// can be shared by both root hub and normal hub | |
// | |
typedef | |
EFI_STATUS | |
(*USB_HUB_INIT) ( | |
IN USB_INTERFACE *UsbIf | |
); | |
// | |
// Get the port status. This function is required to | |
// ACK the port change bits although it will return | |
// the port changes in PortState. Bus enumeration code | |
// doesn't need to ACK the port change bits. | |
// | |
typedef | |
EFI_STATUS | |
(*USB_HUB_GET_PORT_STATUS) ( | |
IN USB_INTERFACE *UsbIf, | |
IN UINT8 Port, | |
OUT EFI_USB_PORT_STATUS *PortState | |
); | |
typedef | |
VOID | |
(*USB_HUB_CLEAR_PORT_CHANGE) ( | |
IN USB_INTERFACE *HubIf, | |
IN UINT8 Port | |
); | |
typedef | |
EFI_STATUS | |
(*USB_HUB_SET_PORT_FEATURE) ( | |
IN USB_INTERFACE *UsbIf, | |
IN UINT8 Port, | |
IN EFI_USB_PORT_FEATURE Feature | |
); | |
typedef | |
EFI_STATUS | |
(*USB_HUB_CLEAR_PORT_FEATURE) ( | |
IN USB_INTERFACE *UsbIf, | |
IN UINT8 Port, | |
IN EFI_USB_PORT_FEATURE Feature | |
); | |
typedef | |
EFI_STATUS | |
(*USB_HUB_RESET_PORT) ( | |
IN USB_INTERFACE *UsbIf, | |
IN UINT8 Port | |
); | |
typedef | |
EFI_STATUS | |
(*USB_HUB_RELEASE) ( | |
IN USB_INTERFACE *UsbIf | |
); | |
/** | |
Return the endpoint descriptor in this interface. | |
@param UsbIf The interface to search in. | |
@param EpAddr The address of the endpoint to return. | |
@return The endpoint descriptor or NULL. | |
**/ | |
USB_ENDPOINT_DESC * | |
UsbGetEndpointDesc ( | |
IN USB_INTERFACE *UsbIf, | |
IN UINT8 EpAddr | |
); | |
/** | |
Select an alternate setting for the interface. | |
Each interface can have several mutually exclusive | |
settings. Only one setting is active. It will | |
also reset its endpoints' toggle to zero. | |
@param IfDesc The interface descriptor to set. | |
@param Alternate The alternate setting number to locate. | |
@retval EFI_NOT_FOUND There is no setting with this alternate index. | |
@retval EFI_SUCCESS The interface is set to Alternate setting. | |
**/ | |
EFI_STATUS | |
UsbSelectSetting ( | |
IN USB_INTERFACE_DESC *IfDesc, | |
IN UINT8 Alternate | |
); | |
/** | |
Select a new configuration for the device. Each | |
device may support several configurations. | |
@param Device The device to select configuration. | |
@param ConfigIndex The index of the configuration ( != 0). | |
@retval EFI_NOT_FOUND There is no configuration with the index. | |
@retval EFI_OUT_OF_RESOURCES Failed to allocate resource. | |
@retval EFI_SUCCESS The configuration is selected. | |
**/ | |
EFI_STATUS | |
UsbSelectConfig ( | |
IN USB_DEVICE *Device, | |
IN UINT8 ConfigIndex | |
); | |
/** | |
Remove the current device configuration. | |
@param Device The USB device to remove configuration from. | |
@return None. | |
**/ | |
EFI_STATUS | |
UsbRemoveConfig ( | |
IN USB_DEVICE *Device | |
); | |
/** | |
Remove the device and all its children from the bus. | |
@param Device The device to remove. | |
@retval EFI_SUCCESS The device is removed. | |
**/ | |
EFI_STATUS | |
UsbRemoveDevice ( | |
IN USB_DEVICE *Device | |
); | |
/** | |
Enumerate all the changed hub ports. | |
@param Event The event that is triggered. | |
@param Context The context to the event. | |
@return None. | |
**/ | |
VOID | |
EFIAPI | |
UsbHubEnumeration ( | |
IN EFI_EVENT Event, | |
IN VOID *Context | |
); | |
/** | |
Enumerate all the changed hub ports. | |
@param Event The event that is triggered. | |
@param Context The context to the event. | |
@return None. | |
**/ | |
VOID | |
EFIAPI | |
UsbRootHubEnumeration ( | |
IN EFI_EVENT Event, | |
IN VOID *Context | |
); | |
#endif |