--- /dev/null
+/** @file\r
+\r
+Copyright (c) 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+ Module Name:\r
+\r
+ UsbHub.h\r
+\r
+ Abstract:\r
+\r
+ The definition for USB hub\r
+\r
+ Revision History\r
+\r
+\r
+**/\r
+\r
+#ifndef _USB_HUB_H_\r
+#define _USB_HUB_H_\r
+\r
+#define USB_ENDPOINT_ADDR(EpAddr) ((EpAddr) & 0x7F)\r
+#define USB_ENDPOINT_TYPE(Desc) ((Desc)->Attributes & USB_ENDPOINT_TYPE_MASK)\r
+\r
+enum {\r
+ USB_DESC_TYPE_HUB = 0x29,\r
+\r
+ //\r
+ // Hub class control transfer target\r
+ //\r
+ USB_HUB_TARGET_HUB = 0,\r
+ USB_HUB_TARGET_PORT = 3,\r
+\r
+ //\r
+ // HUB class specific contrl transfer request type\r
+ //\r
+ USB_HUB_REQ_GET_STATUS = 0,\r
+ USB_HUB_REQ_CLEAR_FEATURE = 1,\r
+ USB_HUB_REQ_SET_FEATURE = 3,\r
+ USB_HUB_REQ_GET_DESC = 6,\r
+ USB_HUB_REQ_SET_DESC = 7,\r
+ USB_HUB_REQ_CLEAR_TT = 8,\r
+ USB_HUB_REQ_RESET_TT = 9,\r
+ USB_HUB_REQ_GET_TT_STATE = 10,\r
+ USB_HUB_REQ_STOP_TT = 11,\r
+\r
+\r
+ //\r
+ // USB hub class feature selector\r
+ //\r
+ USB_HUB_C_HUB_LOCAL_POWER = 0,\r
+ USB_HUB_C_HUB_OVER_CURRENT = 1,\r
+ USB_HUB_PORT_CONNECTION = 0,\r
+ USB_HUB_PORT_ENABLE = 1,\r
+ USB_HUB_PORT_SUSPEND = 2,\r
+ USB_HUB_PORT_OVER_CURRENT = 3,\r
+ USB_HUB_PORT_RESET = 4,\r
+ USB_HUB_PORT_POWER = 8,\r
+ USB_HUB_PORT_LOW_SPEED = 9,\r
+ USB_HUB_C_PORT_CONNECT = 16,\r
+ USB_HUB_C_PORT_ENABLE = 17,\r
+ USB_HUB_C_PORT_SUSPEND = 18,\r
+ USB_HUB_C_PORT_OVER_CURRENT = 19,\r
+ USB_HUB_C_PORT_RESET = 20,\r
+ USB_HUB_PORT_TEST = 21,\r
+ USB_HUB_PORT_INDICATOR = 22,\r
+\r
+ //\r
+ // USB hub power control method. In gang power control\r
+ //\r
+ USB_HUB_GANG_POWER_CTRL = 0,\r
+ USB_HUB_PORT_POWER_CTRL = 0x01,\r
+\r
+ //\r
+ // USB hub status bits\r
+ //\r
+ USB_HUB_STAT_LOCAL_POWER = 0x01,\r
+ USB_HUB_STAT_OVER_CURRENT = 0x02,\r
+ USB_HUB_STAT_C_LOCAL_POWER = 0x01,\r
+ USB_HUB_STAT_C_OVER_CURRENT = 0x02,\r
+\r
+ USB_HUB_CLASS_CODE = 0x09,\r
+ USB_HUB_SUBCLASS_CODE = 0x00,\r
+\r
+\r
+ USB_HUB_LOOP = 50,\r
+};\r
+\r
+#pragma pack(1)\r
+//\r
+// Hub descriptor, the last two fields are of variable lenght.\r
+//\r
+typedef struct {\r
+ UINT8 Length;\r
+ UINT8 DescType;\r
+ UINT8 NumPorts;\r
+ UINT16 HubCharacter;\r
+ UINT8 PwrOn2PwrGood;\r
+ UINT8 HubContrCurrent;\r
+ UINT8 Filler[16];\r
+} EFI_USB_HUB_DESCRIPTOR;\r
+#pragma pack()\r
+\r
+\r
+typedef struct {\r
+ UINT16 ChangedBit;\r
+ EFI_USB_PORT_FEATURE Feature;\r
+} USB_CHANGE_FEATURE_MAP;\r
+\r
+\r
+EFI_STATUS\r
+UsbHubCtrlClearTTBuffer (\r
+ IN USB_DEVICE *UsbDev,\r
+ IN UINT8 Port,\r
+ IN UINT16 DevAddr,\r
+ IN UINT16 EpNum,\r
+ IN UINT16 EpType\r
+ );\r
+\r
+\r
+BOOLEAN\r
+UsbIsHubInterface (\r
+ IN USB_INTERFACE *UsbIf\r
+ );\r
+\r
+EFI_STATUS\r
+UsbHubAckHubStatus (\r
+ IN USB_DEVICE *UsbDev\r
+ );\r
+\r
+extern USB_HUB_API mUsbHubApi;\r
+extern USB_HUB_API mUsbRootHubApi;\r
+#endif\r
+\r