diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h new file mode 100644 index 00000000..86cbf986 --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h @@ -0,0 +1,181 @@ +/** @file + + The definition for USB hub. + +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _USB_HUB_H_ +#define _USB_HUB_H_ + +#include <IndustryStandard/Usb.h> + +#define USB_ENDPOINT_ADDR(EpAddr) ((EpAddr) & 0x7F) +#define USB_ENDPOINT_TYPE(Desc) ((Desc)->Attributes & USB_ENDPOINT_TYPE_MASK) + + +#define USB_DESC_TYPE_HUB 0x29 + +#define USB_DESC_TYPE_HUB_SUPER_SPEED 0x2a + +// +// Hub class control transfer target +// +#define USB_HUB_TARGET_HUB 0 +#define USB_HUB_TARGET_PORT 3 +// +// HUB class specific contrl transfer request type +// +#define USB_HUB_REQ_GET_STATUS 0 +#define USB_HUB_REQ_CLEAR_FEATURE 1 +#define USB_HUB_REQ_SET_FEATURE 3 +#define USB_HUB_REQ_GET_DESC 6 +#define USB_HUB_REQ_SET_DESC 7 +#define USB_HUB_REQ_CLEAR_TT 8 +#define USB_HUB_REQ_RESET_TT 9 +#define USB_HUB_REQ_GET_TT_STATE 10 +#define USB_HUB_REQ_STOP_TT 11 + +#define USB_HUB_REQ_SET_DEPTH 12 + +// +// USB hub class feature selector +// +#define USB_HUB_C_HUB_LOCAL_POWER 0 +#define USB_HUB_C_HUB_OVER_CURRENT 1 +#define USB_HUB_PORT_CONNECTION 0 +#define USB_HUB_PORT_ENABLE 1 +#define USB_HUB_PORT_SUSPEND 2 +#define USB_HUB_PORT_OVER_CURRENT 3 +#define USB_HUB_PORT_RESET 4 + +#define USB_HUB_PORT_LINK_STATE 5 + +#define USB_HUB_PORT_POWER 8 +#define USB_HUB_PORT_LOW_SPEED 9 +#define USB_HUB_C_PORT_CONNECT 16 +#define USB_HUB_C_PORT_ENABLE 17 +#define USB_HUB_C_PORT_SUSPEND 18 +#define USB_HUB_C_PORT_OVER_CURRENT 19 +#define USB_HUB_C_PORT_RESET 20 +#define USB_HUB_PORT_TEST 21 +#define USB_HUB_PORT_INDICATOR 22 + +#define USB_HUB_C_PORT_LINK_STATE 25 +#define USB_HUB_PORT_REMOTE_WAKE_MASK 27 +#define USB_HUB_BH_PORT_RESET 28 +#define USB_HUB_C_BH_PORT_RESET 29 + +// +// Constant value for Port Status & Port Change Status of SuperSpeed port +// +#define USB_SS_PORT_STAT_C_BH_RESET 0x0020 +#define USB_SS_PORT_STAT_C_PORT_LINK_STATE 0x0040 +// +// USB hub power control method. In gang power control +// +#define USB_HUB_GANG_POWER_CTRL 0 +#define USB_HUB_PORT_POWER_CTRL 0x01 +// +// USB hub status bits +// +#define USB_HUB_STAT_LOCAL_POWER 0x01 +#define USB_HUB_STAT_OVER_CURRENT 0x02 +#define USB_HUB_STAT_C_LOCAL_POWER 0x01 +#define USB_HUB_STAT_C_OVER_CURRENT 0x02 + +#define USB_HUB_CLASS_CODE 0x09 +#define USB_HUB_SUBCLASS_CODE 0x00 + +// +// Host software return timeout if port status doesn't change +// after 500ms(LOOP * STALL = 5000 * 0.1ms), set by experience +// +#define USB_WAIT_PORT_STS_CHANGE_LOOP 5000 + +#pragma pack(1) +// +// Hub descriptor, the last two fields are of variable length. +// +typedef struct { + UINT8 Length; + UINT8 DescType; + UINT8 NumPorts; + UINT16 HubCharacter; + UINT8 PwrOn2PwrGood; + UINT8 HubContrCurrent; + UINT8 Filler[16]; +} EFI_USB_HUB_DESCRIPTOR; + +#pragma pack() + + +typedef struct { + UINT16 ChangedBit; + EFI_USB_PORT_FEATURE Feature; +} USB_CHANGE_FEATURE_MAP; + + +/** + Clear the transaction translate buffer if full/low + speed control/bulk transfer failed and the transfer + uses this hub as translator.Remember to clear the TT + buffer of transaction translator, not that of the + parent. + + @param UsbDev The Usb device. + @param Port The port of the hub. + @param DevAddr Address of the failed transaction. + @param EpNum The endpoint number of the failed transaction. + @param EpType The type of failed transaction. + + @retval EFI_SUCCESS The TT buffer is cleared. + @retval Others Failed to clear the TT buffer. + +**/ +EFI_STATUS +UsbHubCtrlClearTTBuffer ( + IN USB_DEVICE *UsbDev, + IN UINT8 Port, + IN UINT16 DevAddr, + IN UINT16 EpNum, + IN UINT16 EpType + ); + + +/** + Test whether the interface is a hub interface. + + @param UsbIf The interface to test. + + @retval TRUE The interface is a hub interface. + @retval FALSE The interface isn't a hub interface. + +**/ +BOOLEAN +UsbIsHubInterface ( + IN USB_INTERFACE *UsbIf + ); + + +/** + Ack the hub change bits. If these bits are not ACKed, Hub will + always return changed bit map from its interrupt endpoint. + + @param UsbDev The Usb device. + + @retval EFI_SUCCESS The hub change status is ACKed. + @retval Others Failed to ACK the hub status. + +**/ +EFI_STATUS +UsbHubAckHubStatus ( + IN USB_DEVICE *UsbDev + ); + +extern USB_HUB_API mUsbHubApi; +extern USB_HUB_API mUsbRootHubApi; +#endif + |