+/**\r
+ Discover and initialize usb debug port.\r
+\r
+ @param Handle Debug port handle.\r
+\r
+**/\r
+VOID\r
+DiscoverInitializeUsbDebugPort (\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
+\r
+ //\r
+ // Read 64-bit MMIO base address\r
+ //\r
+ XhciMmioBase = ProgramXhciBaseAddress ();\r
+ Handle->XhciMmioBase = XhciMmioBase;\r
+\r
+ Status = CalculateUsbDebugPortMmioBase (Handle);\r
+ if (!RETURN_ERROR (Status)) {\r
+ UpdateXhcResource (Handle, XhciMmioBase);\r
+ if (NeedReinitializeHardware (Handle)) {\r
+ InitializeUsbDebugHardware (Handle);\r
+ }\r
+ }\r
+}\r
+\r
+/**\r
+ Set USB3 debug instance address.\r
+\r
+ @param[in] Instance Debug port instance.\r
+\r
+**/ \r
+VOID\r
+SetUsb3DebugPortInstance (\r
+ IN USB3_DEBUG_PORT_HANDLE *Instance\r
+ )\r
+{\r
+ EFI_PHYSICAL_ADDRESS *AddrPtr;\r
+\r
+ AddrPtr = GetUsb3DebugPortInstanceAddrPtr ();\r
+ ASSERT (AddrPtr != NULL);\r
+ *AddrPtr = (EFI_PHYSICAL_ADDRESS) (UINTN) Instance;\r
+}\r
+\r
+/**\r
+ Return USB3 debug instance address.\r
+\r
+**/ \r
+USB3_DEBUG_PORT_HANDLE *\r
+GetUsb3DebugPortInstance (\r
+ VOID\r
+ )\r
+{\r
+ EFI_PHYSICAL_ADDRESS *AddrPtr;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
+\r
+ AddrPtr = GetUsb3DebugPortInstanceAddrPtr ();\r
+ ASSERT (AddrPtr != NULL);\r
+\r
+ Instance = (USB3_DEBUG_PORT_HANDLE *) (UINTN) *AddrPtr;\r
+\r
+ return Instance;\r
+}\r
+\r