]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Usb/UsbBusDxe/UsbHub.h
MdeModulePkg UsbBusDxe: Fix wrong buffer length used to read hub desc
[mirror_edk2.git] / MdeModulePkg / Bus / Usb / UsbBusDxe / UsbHub.h
index af4897a74b5dd61b6cb3e9be82c7d56eb6abc6cf..fe9f1f74c751ccc3649644b4e184b100671cc04f 100644 (file)
@@ -2,8 +2,8 @@
 \r
     The definition for USB hub.\r
 \r
-Copyright (c) 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
+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
@@ -21,72 +21,85 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define USB_ENDPOINT_ADDR(EpAddr) ((EpAddr) & 0x7F)\r
 #define USB_ENDPOINT_TYPE(Desc)   ((Desc)->Attributes & USB_ENDPOINT_TYPE_MASK)\r
 \r
-typedef 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
-  // Host software return timeout if port status doesn't change \r
-  // after 500ms(LOOP * STALL = 100 * 5ms), set by experience\r
-  //\r
-  USB_WAIT_PORT_STS_CHANGE_LOOP   = 100\r
-}USB_HUB_FLAGS_VALUE;\r
+\r
+#define USB_DESC_TYPE_HUB     0x29\r
+\r
+#define USB_DESC_TYPE_HUB_SUPER_SPEED  0x2a\r
+\r
+//\r
+// Hub class control transfer target\r
+//\r
+#define USB_HUB_TARGET_HUB    0\r
+#define USB_HUB_TARGET_PORT   3\r
+//\r
+// HUB class specific contrl transfer request type\r
+//\r
+#define USB_HUB_REQ_GET_STATUS      0\r
+#define USB_HUB_REQ_CLEAR_FEATURE   1\r
+#define USB_HUB_REQ_SET_FEATURE     3\r
+#define USB_HUB_REQ_GET_DESC        6\r
+#define USB_HUB_REQ_SET_DESC        7\r
+#define USB_HUB_REQ_CLEAR_TT        8\r
+#define USB_HUB_REQ_RESET_TT        9\r
+#define USB_HUB_REQ_GET_TT_STATE    10\r
+#define USB_HUB_REQ_STOP_TT         11\r
+\r
+#define USB_HUB_REQ_SET_DEPTH       12\r
+\r
+//\r
+// USB hub class feature selector\r
+//\r
+#define USB_HUB_C_HUB_LOCAL_POWER   0\r
+#define USB_HUB_C_HUB_OVER_CURRENT  1\r
+#define USB_HUB_PORT_CONNECTION     0\r
+#define USB_HUB_PORT_ENABLE         1\r
+#define USB_HUB_PORT_SUSPEND        2\r
+#define USB_HUB_PORT_OVER_CURRENT   3\r
+#define USB_HUB_PORT_RESET          4\r
+\r
+#define USB_HUB_PORT_LINK_STATE     5\r
+\r
+#define USB_HUB_PORT_POWER          8\r
+#define USB_HUB_PORT_LOW_SPEED      9\r
+#define USB_HUB_C_PORT_CONNECT      16\r
+#define USB_HUB_C_PORT_ENABLE       17\r
+#define USB_HUB_C_PORT_SUSPEND      18\r
+#define USB_HUB_C_PORT_OVER_CURRENT 19\r
+#define USB_HUB_C_PORT_RESET        20\r
+#define USB_HUB_PORT_TEST           21\r
+#define USB_HUB_PORT_INDICATOR      22\r
+\r
+#define USB_HUB_C_PORT_LINK_STATE     25\r
+#define USB_HUB_PORT_REMOTE_WAKE_MASK 27\r
+#define USB_HUB_BH_PORT_RESET         28\r
+#define USB_HUB_C_BH_PORT_RESET       29\r
+\r
+//\r
+// Constant value for Port Status & Port Change Status of SuperSpeed port\r
+//\r
+#define USB_SS_PORT_STAT_C_BH_RESET         0x0020\r
+#define USB_SS_PORT_STAT_C_PORT_LINK_STATE  0x0040\r
+//\r
+// USB hub power control method. In gang power control\r
+//\r
+#define USB_HUB_GANG_POWER_CTRL     0\r
+#define USB_HUB_PORT_POWER_CTRL     0x01\r
+//\r
+// USB hub status bits\r
+//\r
+#define USB_HUB_STAT_LOCAL_POWER    0x01\r
+#define USB_HUB_STAT_OVER_CURRENT   0x02\r
+#define USB_HUB_STAT_C_LOCAL_POWER  0x01\r
+#define USB_HUB_STAT_C_OVER_CURRENT 0x02\r
+\r
+#define USB_HUB_CLASS_CODE          0x09\r
+#define USB_HUB_SUBCLASS_CODE       0x00\r
+\r
+//\r
+// Host software return timeout if port status doesn't change \r
+// after 500ms(LOOP * STALL = 5000 * 0.1ms), set by experience\r
+//\r
+#define USB_WAIT_PORT_STS_CHANGE_LOOP  5000\r
 \r
 #pragma pack(1)\r
 //\r
@@ -101,6 +114,7 @@ typedef struct {
   UINT8           HubContrCurrent;\r
   UINT8           Filler[16];\r
 } EFI_USB_HUB_DESCRIPTOR;\r
+\r
 #pragma pack()\r
 \r
 \r