UINT32 TotalPort;\r
UINTN Index;\r
UINTN MapSize;\r
+ UINT8 PortSpeed;\r
EFI_STATUS Status;\r
USB_DEV_ROUTE ParentRouteChart;\r
EFI_TPL OldTpl;\r
\r
State = XhcReadOpReg (Xhc, Offset);\r
\r
+ PortSpeed = (State & XHC_PORTSC_PS) >> 10;\r
+\r
//\r
// According to XHCI 1.1 spec November 2017,\r
// Section 7.2 xHCI Support Protocol Capability\r
//\r
- PortStatus->PortStatus = XhcCheckUsbPortSpeedUsedPsic (Xhc, ((State & XHC_PORTSC_PS) >> 10));\r
- if (PortStatus->PortStatus == 0) {\r
- //\r
- // According to XHCI 1.1 spec November 2017,\r
- // bit 10~13 of the root port status register identifies the speed of the attached device.\r
- //\r
- switch ((State & XHC_PORTSC_PS) >> 10) {\r
- case 2:\r
- PortStatus->PortStatus |= USB_PORT_STAT_LOW_SPEED;\r
- break;\r
+ if (PortSpeed > 0) {\r
+ PortStatus->PortStatus = XhcCheckUsbPortSpeedUsedPsic (Xhc, PortSpeed);\r
+ // If no match found in ext cap reg, fall back to PORTSC\r
+ if (PortStatus->PortStatus == 0) {\r
+ //\r
+ // According to XHCI 1.1 spec November 2017,\r
+ // bit 10~13 of the root port status register identifies the speed of the attached device.\r
+ //\r
+ switch (PortSpeed) {\r
+ case 2:\r
+ PortStatus->PortStatus |= USB_PORT_STAT_LOW_SPEED;\r
+ break;\r
\r
- case 3:\r
- PortStatus->PortStatus |= USB_PORT_STAT_HIGH_SPEED;\r
- break;\r
+ case 3:\r
+ PortStatus->PortStatus |= USB_PORT_STAT_HIGH_SPEED;\r
+ break;\r
\r
- case 4:\r
- case 5:\r
- PortStatus->PortStatus |= USB_PORT_STAT_SUPER_SPEED;\r
- break;\r
+ case 4:\r
+ case 5:\r
+ PortStatus->PortStatus |= USB_PORT_STAT_SUPER_SPEED;\r
+ break;\r
\r
- default:\r
- break;\r
+ default:\r
+ break;\r
+ }\r
}\r
}\r
\r