From: "Kubacki, Michael A" <michael.a.kubacki@intel.com>
To: devel@edk2.groups.io
Cc: Eric Dong <eric.dong@intel.com>, Liming Gao <liming.gao@intel.com>
Subject: [edk2-platforms][PATCH V1 24/49] DebugFeaturePkg: Remove the USB3 Debug feature
Date: Tue, 12 Nov 2019 20:37:33 -0800 [thread overview]
Message-ID: <20191113043742.23488-1-michael.a.kubacki@intel.com> (raw)
Removes the USB Debug feature from DebugFeaturePkg. The feature
does not follow the advanced feature design. A future change will
add the feature back following the advanced feature design.
Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
---
Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dec | 66 --
Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dsc | 110 ---
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.inf | 55 --
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.inf | 63 --
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.inf | 28 -
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.inf | 48 --
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.inf | 51 --
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.inf | 31 -
Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortLib.h | 71 --
Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortParameterLib.h | 56 --
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibInternal.h | 887 -------------------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/MiscServices.c | 385 ---------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortDataTransfer.c | 892 --------------------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortInitialize.c | 726 ----------------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.c | 454 ----------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.c | 828 ------------------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.c | 103 ---
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.c | 236 ------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.c | 440 ----------
Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.c | 58 --
20 files changed, 5588 deletions(-)
diff --git a/Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dec b/Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dec
deleted file mode 100644
index 37ebe6da4d..0000000000
--- a/Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dec
+++ /dev/null
@@ -1,66 +0,0 @@
-## @file
-# This package provides the modules that build for debug feature.
-# This DebugFeaturePkg should only depend on EDKII Core packages and MinPlatformPkg.
-#
-# The DEC files are used by the utilities that parse DSC and
-# INF files to generate AutoGen.c and AutoGen.h files
-# for the build infrastructure.
-#
-# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- DEC_SPECIFICATION = 0x00010005
- PACKAGE_NAME = DebugFeaturePkg
- PACKAGE_GUID = 58B6F2BB-A94F-4EB9-89DA-2F06ED59CE39
- PACKAGE_VERSION = 0.1
-
-[Includes]
- Include
-
-[LibraryClasses]
- ## @libraryclass Provide capability to get/set USB3 debug port parameter.
- Usb3DebugPortParameterLib|Include/Library/Usb3DebugPortParameterLib.h
-
- ## @libraryclass Provide common USB3 debug port functions.
- Usb3DebugPortLib|Include/Library/Usb3DebugPortLib.h
-
-[Guids]
- gDebugFeaturePkgTokenSpaceGuid = { 0xdbf3ac70, 0x3f73, 0x40aa, { 0xbd, 0xd6, 0xac, 0xf2, 0x1a, 0x1b, 0x2f, 0xe2 } }
-
-[PcdsFixedAtBuild]
- ## These PCD specify XHCI controller Bus/Device/Function, which are used to enable
- # XHCI debug device.
- gDebugFeaturePkgTokenSpaceGuid.PcdUsbSerialXhciBus|0x00|UINT8|0x00000001
- gDebugFeaturePkgTokenSpaceGuid.PcdUsbSerialXhciDev|0x14|UINT8|0x00000002
- gDebugFeaturePkgTokenSpaceGuid.PcdUsbSerialXhciFunc|0x00|UINT8|0x00000003
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciDefaultBaseAddress|0xFEA10000|UINT32|0x00000004
-
- ## This PCD specifies the wait timeout value in microsecond if USB debug cable is detected but host not connected.
- # Default timeout value is 2000000 microseconds.
- # If user does not want system stall for long time, it can be set to small value.
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciHostWaitTimeout|2000000|UINT64|0x00000005
-
- ## This PCD sepcifies the start index in CMOS, it will occupy 1 bytes space.
- gDebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugPortBusIndex|0x59|UINT8|0x00000006
- ## This PCD sepcifies the start index in CMOS, it will occupy 1 bytes space.
- gDebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugPortDeviceIndex|0x5A|UINT8|0x00000007
- ## This PCD sepcifies the start index in CMOS, it will occupy 1 bytes space.
- gDebugFeaturePkgTokenSpaceGuid.PcdUsb3DebugPortFunctionIndex|0x5B|UINT8|0x00000008
-
-[PcdsFixedAtBuild,PcdsPatchableInModule,PcdsDynamic,PcdsDynamicEx]
- ## This PCD specifies AcpiDebug feature is enable/disable.
- gDebugFeaturePkgTokenSpaceGuid.PcdAcpiDebugEnable|FALSE|BOOLEAN|0x00000009
- ## This PCD specifies AcpiDebug buffer size.
- gDebugFeaturePkgTokenSpaceGuid.PcdAcpiDebugBufferSize|0x10000|UINT32|0x0000000A
-
-[PcdsDynamic, PcdsDynamicEx]
- ## This PCD specifies AcpiDebug buffer address
- gDebugFeaturePkgTokenSpaceGuid.PcdAcpiDebugAddress|0|UINT32|0x0000000B
-
-[PcdsFeatureFlag]
- ## This PCD specifies whether StatusCode is reported via USB3 Serial port.
- gDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseUsb3Serial|TRUE|BOOLEAN|0x0000000C
diff --git a/Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dsc b/Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dsc
deleted file mode 100644
index c43dd63a06..0000000000
--- a/Platform/Intel/DebugFeaturePkg/DebugFeaturePkg.dsc
+++ /dev/null
@@ -1,110 +0,0 @@
-## @file
-# This package provides the modules that build for debug feature.
-# This package should only depend on EDKII Core packages and MinPlatformPkg.
-#
-# The DEC files are used by the utilities that parse DSC and
-# INF files to generate AutoGen.c and AutoGen.h files
-# for the build infrastructure.
-#
-# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- PLATFORM_NAME = DebugFeaturePkg
- PLATFORM_GUID = 3A0DBEF4-3C16-4F6B-8B55-BABB260D30B9
- PLATFORM_VERSION = 0.1
- DSC_SPECIFICATION = 0x00010005
- OUTPUT_DIRECTORY = Build/DebugFeaturePkg
- SUPPORTED_ARCHITECTURES = IA32|X64
- BUILD_TARGETS = DEBUG|RELEASE|NOOPT
- SKUID_IDENTIFIER = DEFAULT
-
-[LibraryClasses]
- #######################################
- # Edk2 Packages
- #######################################
- BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
- BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
- DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
- DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
- IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
- PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
- PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
- TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
- UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
- UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
- UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
- UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
-
-[LibraryClasses.common.PEIM]
- #######################################
- # Edk2 Packages
- #######################################
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerLibIdt.inf
-
-[LibraryClasses.common.DXE_DRIVER]
- #######################################
- # Edk2 Packages
- #######################################
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
-
-[LibraryClasses.common.UEFI_DRIVER]
- #######################################
- # Edk2 Packages
- #######################################
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
-
-[LibraryClasses.common.DXE_RUNTIME_DRIVER]
- #######################################
- # Edk2 Packages
- #######################################
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
-
-###################################################################################################
-#
-# Components Section - list of the modules and components that will be processed by compilation
-# tools and the EDK II tools to generate PE32/PE32+/Coff image files.
-#
-# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
-# into firmware volume images. This section is just a list of modules to compile from
-# source into UEFI-compliant binaries.
-# It is the FDF file that contains information on combining binary files into firmware
-# volume images, whose concept is beyond UEFI and is described in PI specification.
-# Binary modules do not need to be listed in this section, as they should be
-# specified in the FDF file. For example: Shell binary (Shell_Full.efi), FAT binary (Fat.efi),
-# Logo (Logo.bmp), and etc.
-# There may also be modules listed in this section that are not required in the FDF file,
-# When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
-# generated for it, but the binary will not be put into any firmware volume.
-#
-###################################################################################################
-
-[Components]
- #######################################
- # Debug Feature Package
- #######################################
-
- # Add library instances here that are not included in package components and should be tested
- # in the package build.
- DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.inf
- DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.inf
- DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.inf
- DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.inf
- DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.inf
- DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.inf
-
- # Add components here that should be included in the package build.
-
-[BuildOptions]
- *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.inf b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.inf
deleted file mode 100644
index e238fa0de9..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.inf
+++ /dev/null
@@ -1,55 +0,0 @@
-## @file
-# Usb3 debug port library.
-#
-# Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = Usb3DebugPortLibDxe
- FILE_GUID = 08A575C4-D962-4ca5-8855-D3B4AE93A141
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = Usb3DebugPortLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER SMM_CORE
- CONSTRUCTOR = Usb3DebugPortLibDxeConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Usb3DebugPortLibDxe.c
- Usb3DebugPortDataTransfer.c
- Usb3DebugPortInitialize.c
- MiscServices.c
- Usb3DebugPortLibInternal.h
-
-[Packages]
- MdePkg/MdePkg.dec
- DebugFeaturePkg/DebugFeaturePkg.dec
-
-[LibraryClasses]
- BaseLib
- PcdLib
- IoLib
- PciLib
- TimerLib
- UefiBootServicesTableLib
- UefiLib
- HobLib
- Usb3DebugPortParameterLib
-
-[Protocols]
- gEfiSmmAccess2ProtocolGuid ## CONSUMES
- gEfiSmmBase2ProtocolGuid ## CONSUMES
-
-[Pcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciDefaultBaseAddress ## SOMETIMES_CONSUMES
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciHostWaitTimeout ## CONSUMES
-
-[FeaturePcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseUsb3Serial ## CONSUMES
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.inf b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.inf
deleted file mode 100644
index c9c56d7ade..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.inf
+++ /dev/null
@@ -1,63 +0,0 @@
-## @file
-# Usb3 debug port library.
-#
-# Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = Usb3DebugPortLibDxeIoMmu
- FILE_GUID = BC48A65D-5E5E-4512-8ACC-90E79E2D80C2
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- LIBRARY_CLASS = Usb3DebugPortLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER SMM_CORE
- CONSTRUCTOR = Usb3DebugPortLibDxeConstructor
- DESTRUCTOR = Usb3DebugPortLibDxeDestructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Usb3DebugPortLibDxeIoMmu.c
- Usb3DebugPortDataTransfer.c
- Usb3DebugPortInitialize.c
- MiscServices.c
- Usb3DebugPortLibInternal.h
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- DebugFeaturePkg/DebugFeaturePkg.dec
-
-[LibraryClasses]
- BaseLib
- PcdLib
- IoLib
- PciLib
- TimerLib
- UefiBootServicesTableLib
- UefiLib
- HobLib
- Usb3DebugPortParameterLib
-
-[Protocols]
- gEfiSmmAccess2ProtocolGuid ## CONSUMES
- gEfiSmmBase2ProtocolGuid ## CONSUMES
- ## NOTIFY
- ## SOMETIMES_CONSUMES
- gEfiPciIoProtocolGuid
- gEdkiiIoMmuProtocolGuid ## SOMETIMES_CONSUMES
- ## NOTIFY
- gEfiDxeSmmReadyToLockProtocolGuid
-
-[Pcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciDefaultBaseAddress ## SOMETIMES_CONSUMES
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciHostWaitTimeout ## CONSUMES
-
-[FeaturePcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdStatusCodeUseUsb3Serial ## CONSUMES
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.inf b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.inf
deleted file mode 100644
index f632150c26..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.inf
+++ /dev/null
@@ -1,28 +0,0 @@
-## @file
-# Usb3 debug port library.
-#
-# Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = USB3DebugPortLibNull
- FILE_GUID = 3E895F08-0A69-42a2-AF4A-3E9EFAA40361
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = Usb3DebugPortLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Usb3DebugPortLibNull.c
-
-[Packages]
- MdePkg/MdePkg.dec
-
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.inf b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.inf
deleted file mode 100644
index 0edde82769..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.inf
+++ /dev/null
@@ -1,48 +0,0 @@
-## @file
-# Usb3 debug port library.
-#
-# Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = USB3DebugPortLibPei
- FILE_GUID = 62C974F0-D0E0-4963-B93A-22FBCEB69AB4
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- LIBRARY_CLASS = Usb3DebugPortLib|PEIM PEI_CORE
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Usb3DebugPortLibPei.c
- Usb3DebugPortDataTransfer.c
- Usb3DebugPortInitialize.c
- MiscServices.c
- Usb3DebugPortLibInternal.h
-
-[Packages]
- MdePkg/MdePkg.dec
- DebugFeaturePkg/DebugFeaturePkg.dec
-
-[LibraryClasses]
- BaseLib
- PcdLib
- IoLib
- PciLib
- TimerLib
- HobLib
- Usb3DebugPortParameterLib
- PeiServicesTablePointerLib
-
-[Ppis]
- gEfiPeiMemoryDiscoveredPpiGuid ## CONSUMES
-
-[Pcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciDefaultBaseAddress ## SOMETIMES_CONSUMES
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciHostWaitTimeout ## CONSUMES
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.inf b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.inf
deleted file mode 100644
index f27c23faab..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.inf
+++ /dev/null
@@ -1,51 +0,0 @@
-## @file
-# Usb3 debug port library.
-#
-# Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = USB3DebugPortLibPeiIoMmu
- FILE_GUID = C973C5E8-A0D8-4FEE-A0F0-7DA6C3C72451
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- LIBRARY_CLASS = Usb3DebugPortLib|PEIM PEI_CORE
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 IPF
-#
-
-[Sources]
- Usb3DebugPortLibPeiIoMmu.c
- Usb3DebugPortDataTransfer.c
- Usb3DebugPortInitialize.c
- MiscServices.c
- Usb3DebugPortLibInternal.h
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- DebugFeaturePkg/DebugFeaturePkg.dec
-
-[LibraryClasses]
- BaseLib
- PcdLib
- IoLib
- PciLib
- TimerLib
- HobLib
- Usb3DebugPortParameterLib
- PeiServicesTablePointerLib
-
-[Ppis]
- gEfiPeiMemoryDiscoveredPpiGuid ## CONSUMES
- gEdkiiIoMmuPpiGuid ## SOMETIMES_CONSUMES
-
-[Pcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciDefaultBaseAddress ## SOMETIMES_CONSUMES
- gDebugFeaturePkgTokenSpaceGuid.PcdXhciHostWaitTimeout ## CONSUMES
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.inf b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.inf
deleted file mode 100644
index 09f44920f6..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.inf
+++ /dev/null
@@ -1,31 +0,0 @@
-## @file
-# USB3 debug Port Parameter library instance based on PCD.
-#
-# Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = Usb3DebugPortParameterLibPcd
- FILE_GUID = 4990A700-4002-4d08-8E00-622720032662
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = Usb3DebugPortParameterLib
-
-[Sources]
- Usb3DebugPortParameterLibPcd.c
-
-[LibraryClasses]
- BaseLib
- DebugLib
-
-[Packages]
- MdePkg/MdePkg.dec
- DebugFeaturePkg/DebugFeaturePkg.dec
-
-[Pcd]
- gDebugFeaturePkgTokenSpaceGuid.PcdUsbSerialXhciBus ## CONSUMES
- gDebugFeaturePkgTokenSpaceGuid.PcdUsbSerialXhciDev ## CONSUMES
- gDebugFeaturePkgTokenSpaceGuid.PcdUsbSerialXhciFunc ## CONSUMES
diff --git a/Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortLib.h b/Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortLib.h
deleted file mode 100644
index 0bee2b63dd..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortLib.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/** @file
- This library class provides common USB3 debug port functions.
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __USB3_DEBUG_PORT_LIB__
-#define __USB3_DEBUG_PORT_LIB__
-
-/**
- Initialize the USB3 debug port hardware.
-
- If no initialization is required, then return RETURN_SUCCESS.
- If the serial device was successfully initialized, then return RETURN_SUCCESS.
- If the serial device could not be initialized, then return RETURN_DEVICE_ERROR.
-
- @retval RETURN_SUCCESS The serial device was initialized.
- @retval RETURN_DEVICE_ERROR The serial device could not be initialized.
-
-**/
-RETURN_STATUS
-EFIAPI
-Usb3DebugPortInitialize (
- VOID
- );
-
-/**
- Write data from buffer to USB3 debug port.
-
- Writes NumberOfBytes data bytes from Buffer to the serial device.
- The number of bytes actually written to the serial device is returned.
- If the return value is less than NumberOfBytes, then the write operation failed.
- If Buffer is NULL, then ASSERT().
- If NumberOfBytes is zero, then return 0.
-
- @param Buffer Pointer to the data buffer to be written.
- @param NumberOfBytes Number of bytes to written to the serial device.
-
- @retval 0 NumberOfBytes is 0.
- @retval >0 The number of bytes written to the serial device.
- If this value is less than NumberOfBytes, then the read operation failed.
-
-**/
-UINTN
-EFIAPI
-Usb3DebugPortWrite (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
- );
-
-
-/**
- Polls a USB3 debug port to see if there is any data waiting to be read.
-
- Polls a serial device to see if there is any data waiting to be read.
- If there is data waiting to be read from the serial device, then TRUE is returned.
- If there is no data waiting to be read from the serial device, then FALSE is returned.
-
- @retval TRUE Data is waiting to be read from the serial device.
- @retval FALSE There is no data waiting to be read from the serial device.
-
-**/
-BOOLEAN
-EFIAPI
-Usb3DebugPortPoll (
- VOID
- );
-
-#endif
diff --git a/Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortParameterLib.h b/Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortParameterLib.h
deleted file mode 100644
index 167c607e9f..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Include/Library/Usb3DebugPortParameterLib.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/** @file
- This library class provides capability to get/set usb3 debug port parameter.
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __USB3_DEBUG_PORT_PARAMETER_LIB__
-#define __USB3_DEBUG_PORT_PARAMETER_LIB__
-
-typedef struct {
- UINT8 Function;
- UINT8 Device;
- UINT8 Bus;
-} PCI_ADDRESS;
-
-typedef union {
- UINT32 Controller;
- PCI_ADDRESS PciAddress;
-} USB3_DEBUG_PORT_CONTROLLER;
-
-/**
- Returns the USB debug port controller.
- bit: 0~ 7: Function
- bit: 8~15: Device
- bit: 16~24: Bus
-
- @return Controller information of USB debug port.
-
-**/
-UINT32
-EFIAPI
-GetUsb3DebugPortController (
- VOID
- );
-
-/**
- Sets the USB debug port controller.
- bit: 0~ 7: Function
- bit: 8~15: Device
- bit: 16~24: Bus
-
- @param[in] Controller information of USB debug port value to be set.
-
- @retval TRUE The controller of USB debug port was sucessfully set.
- @retval FALSE The controller of USB debug port could not be set.
-
-**/
-BOOLEAN
-EFIAPI
-SetUsb3DebugPortController (
- UINT32 Controller
- );
-
-#endif
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibInternal.h b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibInternal.h
deleted file mode 100644
index 3641cc1d52..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibInternal.h
+++ /dev/null
@@ -1,887 +0,0 @@
-/** @file
- This library class provides common Usb debug port functions.
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef __USB3_DEBUG_PORT_LIB_INTERNAL__
-#define __USB3_DEBUG_PORT_LIB_INTERNAL__
-
-#include <Uefi.h>
-#include <IndustryStandard/Usb.h>
-#include <Library/IoLib.h>
-#include <IndustryStandard/Pci.h>
-#include <Library/PcdLib.h>
-#include <Library/UefiLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/BaseLib.h>
-#include <Library/TimerLib.h>
-
-//
-// USB Debug GUID value
-//
-#define USB3_DBG_GUID \
- { \
- 0xb2a56f4d, 0x9177, 0x4fc8, { 0xa6, 0x77, 0xdd, 0x96, 0x3e, 0xb4, 0xcb, 0x1b } \
- }
-
-//
-// Define the maximum of SMRAM ranges
-//
-#define MAX_SMRAM_RANGE 8
-
-#define XHCI_DEBUG_DEVICE_VENDOR_ID 0x8086
-#define XHCI_DEBUG_DEVICE_PRODUCT_ID 0x1234
-#define XHCI_DEBUG_DEVICE_PROTOCOL 0xFF
-#define XHCI_DEBUG_DEVICE_REVISION 0x00
-
-#define XHCI_BASE_ADDRESS_64_BIT_MASK 0xFFFFFFFFFFFF0000ULL
-#define XHCI_BASE_ADDRESS_32_BIT_MASK 0xFFFF0000
-
-#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
-#define XHC_HCCPARAMS_OFFSET 0x10
-#define XHC_CAPABILITY_ID_MASK 0xFF
-#define XHC_NEXT_CAPABILITY_MASK 0xFF00
-
-#define XHC_USBCMD_OFFSET 0x0 // USB Command Register Offset
-#define XHC_USBSTS_OFFSET 0x4 // USB Status Register Offset
-
-#define XHC_USBCMD_RUN BIT0 // Run/Stop
-#define XHC_USBCMD_RESET BIT1 // Host Controller Reset
-
-#define XHC_USBSTS_HALT BIT0
-
-//
-// Transfer the data of 8 bytes each time
-//
-#define XHC_DEBUG_PORT_DATA_LENGTH 8
-
-//
-// Indicate the timeout when data is transferred. 0 means infinite timeout.
-//
-#define DATA_TRANSFER_TIME_OUT 0
-
-//
-// USB debug device string descritpor (header size + unicode string length)
-//
-#define STRING0_DESC_LEN 4
-#define MANU_DESC_LEN 12
-#define PRODUCT_DESC_LEN 40
-#define SERIAL_DESC_LEN 4
-
-//
-// Debug Capability Register Offset
-//
-#define XHC_DC_DCID 0x0
-#define XHC_DC_DCDB 0x4
-#define XHC_DC_DCERSTSZ 0x8
-#define XHC_DC_DCERSTBA 0x10
-#define XHC_DC_DCERDP 0x18
-#define XHC_DC_DCCTRL 0x20
-#define XHC_DC_DCST 0x24
-#define XHC_DC_DCPORTSC 0x28
-#define XHC_DC_DCCP 0x30
-#define XHC_DC_DCDDI1 0x38
-#define XHC_DC_DCDDI2 0x3C
-
-#define TRB_TYPE_LINK 6
-
-#define ERST_NUMBER 0x01
-#define TR_RING_TRB_NUMBER 0x100
-#define EVENT_RING_TRB_NUMBER 0x200
-#define CMD_RING_TRB_NUMBER 0x100
-
-#define ED_BULK_OUT 2
-#define ED_BULK_IN 6
-
-#define XHC_LOW_32BIT(Addr64) ((UINT32)(((UINTN)(Addr64)) & 0xFFFFFFFF))
-#define XHC_HIGH_32BIT(Addr64) ((UINT32)(RShiftU64((UINT64)(UINTN)(Addr64), 32) & 0xFFFFFFFF))
-#define XHC_BIT_IS_SET(Data, Bit) ((BOOLEAN)(((Data) & (Bit)) == (Bit)))
-
-#define XHC_REG_BIT_IS_SET(Xhc, Offset, Bit) \
- (XHC_BIT_IS_SET(XhcReadMmioReg ((Xhc), (Offset)), (Bit)))
-
-//
-// Endpoint Type (EP Type).
-//
-#define ED_NOT_VALID 0
-#define ED_ISOCH_OUT 1
-#define ED_BULK_OUT 2
-#define ED_INTERRUPT_OUT 3
-#define ED_CONTROL_BIDIR 4
-#define ED_ISOCH_IN 5
-#define ED_BULK_IN 6
-#define ED_INTERRUPT_IN 7
-
-//
-// 6.4.5 TRB Completion Codes
-//
-#define TRB_COMPLETION_INVALID 0
-#define TRB_COMPLETION_SUCCESS 1
-#define TRB_COMPLETION_DATA_BUFFER_ERROR 2
-#define TRB_COMPLETION_BABBLE_ERROR 3
-#define TRB_COMPLETION_USB_TRANSACTION_ERROR 4
-#define TRB_COMPLETION_TRB_ERROR 5
-#define TRB_COMPLETION_STALL_ERROR 6
-#define TRB_COMPLETION_SHORT_PACKET 13
-
-//
-// 6.4.6 TRB Types
-//
-#define TRB_TYPE_NORMAL 1
-#define TRB_TYPE_SETUP_STAGE 2
-#define TRB_TYPE_DATA_STAGE 3
-#define TRB_TYPE_STATUS_STAGE 4
-#define TRB_TYPE_ISOCH 5
-#define TRB_TYPE_LINK 6
-#define TRB_TYPE_EVENT_DATA 7
-#define TRB_TYPE_NO_OP 8
-#define TRB_TYPE_EN_SLOT 9
-#define TRB_TYPE_DIS_SLOT 10
-#define TRB_TYPE_ADDRESS_DEV 11
-#define TRB_TYPE_CON_ENDPOINT 12
-#define TRB_TYPE_EVALU_CONTXT 13
-#define TRB_TYPE_RESET_ENDPOINT 14
-#define TRB_TYPE_STOP_ENDPOINT 15
-#define TRB_TYPE_SET_TR_DEQUE 16
-#define TRB_TYPE_RESET_DEV 17
-#define TRB_TYPE_GET_PORT_BANW 21
-#define TRB_TYPE_FORCE_HEADER 22
-#define TRB_TYPE_NO_OP_COMMAND 23
-#define TRB_TYPE_TRANS_EVENT 32
-#define TRB_TYPE_COMMAND_COMPLT_EVENT 33
-#define TRB_TYPE_PORT_STATUS_CHANGE_EVENT 34
-#define TRB_TYPE_HOST_CONTROLLER_EVENT 37
-#define TRB_TYPE_DEVICE_NOTIFI_EVENT 38
-#define TRB_TYPE_MFINDEX_WRAP_EVENT 39
-
-//
-// Convert millisecond to microsecond.
-//
-#define XHC_1_MILLISECOND (1000)
-#define XHC_POLL_DELAY (1000)
-#define XHC_GENERIC_TIMEOUT (10 * 1000)
-
-#define EFI_USB_SPEED_FULL 0x0000 ///< 12 Mb/s, USB 1.1 OHCI and UHCI HC.
-#define EFI_USB_SPEED_LOW 0x0001 ///< 1 Mb/s, USB 1.1 OHCI and UHCI HC.
-#define EFI_USB_SPEED_HIGH 0x0002 ///< 480 Mb/s, USB 2.0 EHCI HC.
-#define EFI_USB_SPEED_SUPER 0x0003 ///< 4.8 Gb/s, USB 3.0 XHCI HC.
-
-//
-// Transfer types, used in URB to identify the transfer type
-//
-#define XHC_CTRL_TRANSFER 0x01
-#define XHC_BULK_TRANSFER 0x02
-#define XHC_INT_TRANSFER_SYNC 0x04
-#define XHC_INT_TRANSFER_ASYNC 0x08
-#define XHC_INT_ONLY_TRANSFER_ASYNC 0x10
-
-//
-// USB Transfer Results
-//
-#define EFI_USB_NOERROR 0x00
-#define EFI_USB_ERR_NOTEXECUTE 0x01
-#define EFI_USB_ERR_STALL 0x02
-#define EFI_USB_ERR_BUFFER 0x04
-#define EFI_USB_ERR_BABBLE 0x08
-#define EFI_USB_ERR_NAK 0x10
-#define EFI_USB_ERR_CRC 0x20
-#define EFI_USB_ERR_TIMEOUT 0x40
-#define EFI_USB_ERR_BITSTUFF 0x80
-#define EFI_USB_ERR_SYSTEM 0x100
-
-#define USB3_DEBUG_PORT_INSTANCE_SIGNATURE SIGNATURE_32('D', 'B', 'G', 'P')
-
-#pragma pack(1)
-
-//
-// 7.6.9 OUT/IN EP Context: 64 bytes
-// 7.6.9.2 When used by the DbC it is always a 64 byte data structure
-//
-typedef struct _ENDPOINT_CONTEXT_64 {
- UINT32 EPState:3;
- UINT32 RsvdZ1:5;
- UINT32 Mult:2; // set to 0
- UINT32 MaxPStreams:5; // set to 0
- UINT32 LSA:1; // set to 0
- UINT32 Interval:8; // set to 0
- UINT32 RsvdZ2:8;
-
- UINT32 RsvdZ3:1;
- UINT32 CErr:2;
- UINT32 EPType:3;
- UINT32 RsvdZ4:1;
- UINT32 HID:1; // set to 0
- UINT32 MaxBurstSize:8;
- UINT32 MaxPacketSize:16;
-
- UINT32 PtrLo;
-
- UINT32 PtrHi;
-
- UINT32 AverageTRBLength:16;
- UINT32 MaxESITPayload:16; // set to 0
-
- UINT32 RsvdZ5; // Reserved
- UINT32 RsvdZ6;
- UINT32 RsvdZ7;
-
- UINT32 RsvdZ8;
- UINT32 RsvdZ9;
- UINT32 RsvdZ10;
- UINT32 RsvdZ11;
-
- UINT32 RsvdZ12;
- UINT32 RsvdZ13;
- UINT32 RsvdZ14;
- UINT32 RsvdZ15;
-} ENDPOINT_CONTEXT_64;
-
-//
-// 6.4.1.1 Normal TRB: 16 bytes
-// A Normal TRB is used in several ways; exclusively on Bulk and Interrupt Transfer Rings for normal and
-// Scatter/Gather operations, to define additional data buffers for Scatter/Gather operations on Isoch Transfer
-// Rings, and to define the Data stage information for Control Transfer Rings.
-//
-typedef struct _TRANSFER_TRB_NORMAL {
- UINT32 TRBPtrLo;
-
- UINT32 TRBPtrHi;
-
- UINT32 Length:17;
- UINT32 TDSize:5;
- UINT32 IntTarget:10;
-
- UINT32 CycleBit:1;
- UINT32 ENT:1;
- UINT32 ISP:1;
- UINT32 NS:1;
- UINT32 CH:1;
- UINT32 IOC:1;
- UINT32 IDT:1;
- UINT32 RsvdZ1:2;
- UINT32 BEI:1;
- UINT32 Type:6;
- UINT32 RsvdZ2:16;
-} TRANSFER_TRB_NORMAL;
-
-//
-// 6.4.2.1 Transfer Event TRB: 16 bytes
-// A Transfer Event provides the completion status associated with a Transfer TRB. Refer to section 4.11.3.1
-// for more information on the use and operation of Transfer Events.
-//
-typedef struct _EVT_TRB_TRANSFER {
- UINT32 TRBPtrLo;
-
- UINT32 TRBPtrHi;
-
- UINT32 Length:24;
- UINT32 Completecode:8;
-
- UINT32 CycleBit:1;
- UINT32 RsvdZ1:1;
- UINT32 ED:1;
- UINT32 RsvdZ2:7;
- UINT32 Type:6;
- UINT32 EndpointId:5;
- UINT32 RsvdZ3:3;
- UINT32 SlotId:8;
-} EVT_TRB_TRANSFER;
-
-//
-// 6.4.4.1 Link TRB: 16 bytes
-// A Link TRB provides support for non-contiguous TRB Rings.
-//
-typedef struct _LINK_TRB {
- UINT32 PtrLo;
-
- UINT32 PtrHi;
-
- UINT32 RsvdZ1:22;
- UINT32 InterTarget:10;
-
- UINT32 CycleBit:1;
- UINT32 TC:1;
- UINT32 RsvdZ2:2;
- UINT32 CH:1;
- UINT32 IOC:1;
- UINT32 RsvdZ3:4;
- UINT32 Type:6;
- UINT32 RsvdZ4:16;
-} LINK_TRB;
-
-//
-// TRB Template: 16 bytes
-//
-typedef struct _TRB_TEMPLATE {
- UINT32 Parameter1;
-
- UINT32 Parameter2;
-
- UINT32 Status;
-
- UINT32 CycleBit:1;
- UINT32 RsvdZ1:9;
- UINT32 Type:6;
- UINT32 Control:16;
-} TRB_TEMPLATE;
-
-//
-// Refer to XHCI 6.5 Event Ring Segment Table: 16 bytes
-//
-typedef struct _EVENT_RING_SEG_TABLE_ENTRY {
- UINT32 PtrLo;
- UINT32 PtrHi;
- UINT32 RingTrbSize:16;
- UINT32 RsvdZ1:16;
- UINT32 RsvdZ2;
-} EVENT_RING_SEG_TABLE_ENTRY;
-
-//
-// Size: 40 bytes
-//
-typedef struct _EVENT_RING {
- EFI_PHYSICAL_ADDRESS ERSTBase;
- EFI_PHYSICAL_ADDRESS EventRingSeg0;
- UINT32 TrbNumber;
- EFI_PHYSICAL_ADDRESS EventRingEnqueue;
- EFI_PHYSICAL_ADDRESS EventRingDequeue;
- UINT32 EventRingCCS;
-} EVENT_RING;
-
-// Size: 32 bytes
-typedef struct _TRANSFER_RING {
- EFI_PHYSICAL_ADDRESS RingSeg0;
- UINT32 TrbNumber;
- EFI_PHYSICAL_ADDRESS RingEnqueue;
- EFI_PHYSICAL_ADDRESS RingDequeue;
- UINT32 RingPCS;
-} TRANSFER_RING;
-
-//
-// Size: 64 bytes
-//
-typedef struct _DBC_INFO_CONTEXT {
- UINT64 String0DescAddress;
- UINT64 ManufacturerStrDescAddress;
- UINT64 ProductStrDescAddress;
- UINT64 SerialNumberStrDescAddress;
- UINT64 String0Length:8;
- UINT64 ManufacturerStrLength:8;
- UINT64 ProductStrLength:8;
- UINT64 SerialNumberStrLength:8;
- UINT64 RsvdZ1:32;
- UINT64 RsvdZ2;
- UINT64 RsvdZ3;
- UINT64 RsvdZ4;
-} DBC_INFO_CONTEXT;
-
-//
-// Debug Capability Context Data Structure: 192 bytes
-//
-typedef struct _XHC_DC_CONTEXT {
- DBC_INFO_CONTEXT DbcInfoContext;
- ENDPOINT_CONTEXT_64 EpOutContext;
- ENDPOINT_CONTEXT_64 EpInContext;
-} XHC_DC_CONTEXT;
-
-//
-// Size: 16 bytes
-//
-typedef union _TRB {
- TRB_TEMPLATE TrbTemplate;
- TRANSFER_TRB_NORMAL TrbNormal;
-} TRB;
-
-///
-/// USB data transfer direction
-///
-typedef enum {
- EfiUsbDataIn,
- EfiUsbDataOut,
- EfiUsbNoData
-} EFI_USB_DATA_DIRECTION;
-
-//
-// URB (Usb Request Block) contains information for all kinds of
-// usb requests.
-//
-typedef struct _URB {
- UINT32 Signature;
- //
- // Transfer data
- //
- EFI_PHYSICAL_ADDRESS Data;
- UINT32 DataLen;
- //
- // Execute result
- //
- UINT32 Result;
- //
- // Completed data length
- //
- UINT32 Completed;
- //
- // Tranfer Ring info
- //
- EFI_PHYSICAL_ADDRESS Ring;
- EFI_PHYSICAL_ADDRESS TrbStart;
- EFI_PHYSICAL_ADDRESS TrbEnd;
- UINT32 TrbNum;
- BOOLEAN StartDone;
- BOOLEAN EndDone;
- BOOLEAN Finished;
- EFI_USB_DATA_DIRECTION Direction;
-} URB;
-
-//
-// Size: 90 bytes
-//
-typedef struct _USB3_DEBUG_PORT_INSTANCE {
- UINT32 Signature;
-
- UINT8 PciBusNumber;
- UINT8 PciDeviceNumber;
- UINT8 PciFunctionNumber;
-
- //
- // The flag indicates debug capability is supported
- //
- BOOLEAN DebugSupport;
-
- //
- // The flag indicates debug device is ready
- //
- BOOLEAN Ready;
-
- //
- // The flag indicates the instance is from HOB
- //
- BOOLEAN FromHob;
-
- //
- // PciIo protocol event
- //
- EFI_PHYSICAL_ADDRESS PciIoEvent;
-
- //
- // XHCI MMIO Base address
- //
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
-
- //
- // XHCI OP RegisterBase address
- //
- EFI_PHYSICAL_ADDRESS XhciOpRegister;
-
- //
- // XHCI Debug Register Base Address
- //
- EFI_PHYSICAL_ADDRESS DebugCapabilityBase;
-
- //
- // XHCI Debug Capability offset
- //
- UINT64 DebugCapabilityOffset;
-
- //
- // XHCI Debug Context Address
- //
- EFI_PHYSICAL_ADDRESS DebugCapabilityContext;
-
- //
- // Transfer Ring
- //
- TRANSFER_RING TransferRingOut;
- TRANSFER_RING TransferRingIn;
-
- //
- // EventRing
- //
- EVENT_RING EventRing;
-
- //
- // URB
- //
- URB Urb;
-} USB3_DEBUG_PORT_INSTANCE;
-
-#pragma pack()
-
-/**
- Clear one bit of the debug register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcClearDebugRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- );
-
-/**
- Clear one bit of the MMIO register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the MMIO register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcClearMmioRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- );
-
-/**
- Read XHCI debug register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
-
- @return The register content read
-
-**/
-UINT32
-XhcReadDebugReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset
- );
-
-/**
- Read XHCI MMIO register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the MMIO register.
-
- @return The register content read
-
-**/
-UINT32
-XhcReadMmioReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset
- );
-
-/**
- Set one bit of the debug register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcSetDebugRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- );
-
-/**
- Set one bit of the MMIO register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the MMIO register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcSetMmioRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- );
-
-/**
- Wait the MMIO register's bit as specified by Bit
- to be set (or clear).
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the MMIO register.
- @param Bit The bit of the register to wait for.
- @param WaitToSet Wait the bit to set or clear.
- @param Timeout The time to wait before abort (in millisecond, ms).
-
- @retval EFI_SUCCESS The bit successfully changed by host controller.
- @retval EFI_TIMEOUT The time out occurred.
-
-**/
-EFI_STATUS
-XhcWaitMmioRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit,
- IN BOOLEAN WaitToSet,
- IN UINT32 Timeout
- );
-
-/**
- Write the data to the debug register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
- @param Data The data to write.
-
-**/
-VOID
-XhcWriteDebugReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Data
- );
-
-/**
- Write the data to the MMIO register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the MMIO register.
- @param Data The data to write.
-
-**/
-VOID
-XhcWriteMmioReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Data
- );
-
-/**
- Discover the USB3 debug device.
-
- @param[in] Instance Pointer to USB3 debug port object instance.
-
- @retval RETURN_SUCCESS The USB3 debug device was found.
- @retval RETURN_DEVICE_ERROR The USB3 debug device was not found.
-
-**/
-RETURN_STATUS
-DiscoverUsb3DebugPort(
- IN USB3_DEBUG_PORT_INSTANCE *Instance
- );
-
-/**
- Initialize the USB3 debug Device hardware.
-
- @param[in] Instance Pointer to USB3 debug port object instance.
-
- @retval RETURN_SUCCESS The USB3 debug device was initialized successfully.
- @retval !RETURN_SUCCESS Error.
-
-**/
-RETURN_STATUS
-InitializeUsb3DebugPort (
- IN USB3_DEBUG_PORT_INSTANCE *Instance
- );
-
-/**
- Return XHCI MMIO base address.
-
-**/
-EFI_PHYSICAL_ADDRESS
-GetXhciBaseAddress (
- VOID
- );
-
-/**
- Return XHCI debug instance address.
-
-**/
-USB3_DEBUG_PORT_INSTANCE *
-GetUsb3DebugPortInstance (
- VOID
- );
-
-/**
- Send data over the USB3 debug cable.
-
- @param[out] Data Pointer to data
- @param[in, out] Length Pointer to data length
-
-**/
-VOID
-Usb3DbgOut (
- OUT UINT8 *Data,
- IN OUT UINTN *Length
- );
-
-/**
- Receive data over the USB3 debug cable.
-
- @param[out] Data Pointer to data
- @param[in, out] Length Pointer to data length
-
-**/
-RETURN_STATUS
-Usb3DbgIn (
- OUT UINT8 *Data,
- IN OUT UINTN *Length
- );
-
-/**
- Verifies if the bit positions specified by a mask are set in a register.
-
- @param[in, out] Register UNITN register
- @param[in] BitMask 32-bit mask
-
- @return BOOLEAN - TRUE if all bits specified by the mask are enabled.
- - FALSE even if one of the bits specified by the mask
- is not enabled.
-**/
-BOOLEAN
-XhcIsBitSet(
- UINTN Register,
- UINT32 BitMask
- );
-
-/**
- Sets bits as per the enabled bit positions in the mask.
-
- @param[in, out] Register UINTN register
- @param[in] BitMask 32-bit mask
-**/
-VOID
-XhcSetR32Bit(
- UINTN Register,
- UINT32 BitMask
- );
-
-/**
- Clears bits as per the enabled bit positions in the mask.
-
- @param[in, out] Register UINTN register
- @param[in] BitMask 32-bit mask
-**/
-VOID
-XhcClrR32Bit(
- UINTN Register,
- UINT32 BitMask
- );
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3Initialize (
- VOID
- );
-
-/**
- Return command register value in XHCI controller.
-
-**/
-UINT16
-GetXhciPciCommand (
- VOID
- );
-
-/**
- Allocate aligned memory for XHC's usage.
-
- @param BufferSize The size, in bytes, of the Buffer.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID*
-AllocateAlignBuffer (
- IN UINTN BufferSize
- );
-
-/**
- Check whether AllocatePages in permanent memory is ready.
-
- @retval TRUE AllocatePages in permanent memory is ready.
- @retval FALSE AllocatePages in permanent memory is not ready.
-
-**/
-BOOLEAN
-IsAllocatePagesReady (
- VOID
- );
-
-/**
- The real function to initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3InitializeReal (
- VOID
- );
-
-/**
- Update XHC hardware address when MMIO base is changed.
-
- @param Instance The XHCI Instance.
- @param XhcMmioBase XHCI MMIO base address.
-
-**/
-VOID
-FixUsb3InstanceResource (
- IN OUT USB3_DEBUG_PORT_INSTANCE *Instance,
- IN EFI_PHYSICAL_ADDRESS XhcMmioBase
- );
-
-/**
- Save USB3 instance address.
-
- @param[in] Instance The XHCI Instance.
-
-**/
-VOID
-SaveUsb3InstanceAddress (
- IN USB3_DEBUG_PORT_INSTANCE *Instance
- );
-
-/**
- Submits bulk transfer to a bulk endpoint of a USB device.
-
- @param Xhc The instance of debug device.
- @param Direction The direction of data transfer.
- @param Data Array of pointers to the buffers of data to transmit
- from or receive into.
- @param DataLength The lenght of the data buffer.
- @param Timeout Indicates the maximum time, in millisecond, which
- the transfer is allowed to complete.
- @param TransferResult Transfer result.
-
- @retval EFI_SUCCESS The transfer was completed successfully.
- @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
- @retval EFI_INVALID_PARAMETER Some parameters are invalid.
- @retval EFI_TIMEOUT The transfer failed due to timeout.
- @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
-
-**/
-EFI_STATUS
-EFIAPI
-XhcDataTransfer (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN OUT VOID *Data,
- IN OUT UINTN *DataLength,
- IN UINTN Timeout,
- OUT UINT32 *TransferResult
- );
-
-#endif //__SERIAL_PORT_LIB_USB__
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/MiscServices.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/MiscServices.c
deleted file mode 100644
index cb29a880e6..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/MiscServices.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/** @file
- Miscellaneous services internal to USB debug port implementation.
-
- Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "Usb3DebugPortLibInternal.h"
-
-/**
- Verifies if the bit positions specified by a mask are set in a register.
-
- @param[in, out] Register UNITN register
- @param[in] BitMask 32-bit mask
-
- @return BOOLEAN - TRUE if all bits specified by the mask are enabled.
- - FALSE even if one of the bits specified by the mask
- is not enabled.
-**/
-BOOLEAN
-XhcIsBitSet(
- IN OUT UINTN Register,
- IN UINT32 BitMask
- )
-{
- if ((MmioRead32 (Register) & (BitMask)) != 0) {
- return TRUE;
- }
- return FALSE;
-}
-
-/**
- Sets bits as per the enabled bit positions in the mask.
-
- @param[in, out] Register UINTN register
- @param[in] BitMask 32-bit mask
-**/
-VOID
-XhcSetR32Bit(
- IN OUT UINTN Register,
- IN UINT32 BitMask
- )
-{
- UINT32 RegisterValue;
-
- RegisterValue = MmioRead32 (Register);
- RegisterValue |= (UINT32)(BitMask);
- MmioWrite32 (Register, RegisterValue);
-}
-
-/**
- Clears bits as per the enabled bit positions in the mask.
-
- @param[in, out] Register UINTN register
- @param[in] BitMask 32-bit mask
-**/
-VOID
-XhcClrR32Bit(
- IN OUT UINTN Register,
- IN UINT32 BitMask
- )
-{
- UINT32 RegisterValue;
-
- RegisterValue = MmioRead32 (Register);
- RegisterValue &= (UINT32)(~(BitMask));
- MmioWrite32 (Register, RegisterValue);
-}
-
-/**
- Initialize the USB debug port hardware.
-
- If no initialization is required, then return RETURN_SUCCESS.
- If the serial device was successfully initialized, then return RETURN_SUCCESS.
- If the serial device could not be initialized, then return RETURN_DEVICE_ERROR.
-
- @retval RETURN_SUCCESS The serial device was initialized.
- @retval RETURN_DEVICE_ERROR The serial device could not be initialized.
-**/
-RETURN_STATUS
-EFIAPI
-Usb3DebugPortInitialize (
- VOID
- )
-{
- USB3Initialize ();
- return RETURN_SUCCESS;
-}
-
-/**
- Write data from buffer to USB debug port.
-
- Writes NumberOfBytes data bytes from Buffer to the serial device.
- The number of bytes actually written to the serial device is returned.
- If the return value is less than NumberOfBytes, then the write operation failed.
- If Buffer is NULL, then ASSERT().
- If NumberOfBytes is zero, then return 0.
-
- @param Buffer Pointer to the data buffer to be written.
- @param NumberOfBytes Number of bytes to written to the serial device.
-
- @retval 0 NumberOfBytes is 0.
- @retval >0 The number of bytes written to the serial device.
- If this value is less than NumberOfBytes, then the read operation failed.
-**/
-UINTN
-EFIAPI
-Usb3DebugPortWrite (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
- )
-{
- Usb3DbgOut (Buffer, &NumberOfBytes);
- return NumberOfBytes;
-}
-
-/**
- Read data from USB debug port and save the datas in buffer.
-
- Reads NumberOfBytes data bytes from a serial device into the buffer
- specified by Buffer. The number of bytes actually read is returned.
- If the return value is less than NumberOfBytes, then the rest operation failed.
- If Buffer is NULL, then ASSERT().
- If NumberOfBytes is zero, then return 0.
-
- @param Buffer Pointer to the data buffer to store the data read from the serial device.
- @param NumberOfBytes Number of bytes which will be read.
-
- @retval 0 Read data failed, no data is to be read.
- @retval >0 Actual number of bytes read from serial device.
-**/
-UINTN
-EFIAPI
-Usb3DebugPortRead (
- OUT UINT8 *Buffer,
- IN UINTN NumberOfBytes
- )
-{
- Usb3DbgIn (Buffer, &NumberOfBytes);
- return NumberOfBytes;
-}
-
-/**
- Polls a USB debug port to see if there is any data waiting to be read.
-
- Polls a serial device to see if there is any data waiting to be read.
- If there is data waiting to be read from the serial device, then TRUE is returned.
- If there is no data waiting to be read from the serial device, then FALSE is returned.
-
- @retval TRUE Data is waiting to be read from the serial device.
- @retval FALSE There is no data waiting to be read from the serial device.
-**/
-BOOLEAN
-EFIAPI
-Usb3DebugPortPoll (
- VOID
- )
-{
- return FALSE;
-}
-
-/**
- Write the data to the XHCI debug register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the runtime register.
- @param Data The data to write.
-
-**/
-VOID
-XhcWriteDebugReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Data
- )
-{
- EFI_PHYSICAL_ADDRESS DebugCapabilityBase;
-
- DebugCapabilityBase = Xhc->DebugCapabilityBase;
-
- MmioWrite32 ((UINTN)(DebugCapabilityBase + Offset), Data);
-
- return;
-}
-
-/**
- Read XHCI debug register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
-
- @return The register content read
-
-**/
-UINT32
-XhcReadDebugReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset
- )
-{
- UINT32 Data;
- EFI_PHYSICAL_ADDRESS DebugCapabilityBase;
-
- DebugCapabilityBase = Xhc->DebugCapabilityBase;
-
- Data = MmioRead32 ((UINTN)(DebugCapabilityBase + Offset));
-
- return Data;
-}
-
-/**
- Set one bit of the debug register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcSetDebugRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- )
-{
- UINT32 Data;
-
- Data = XhcReadDebugReg (Xhc, Offset);
- Data |= Bit;
- XhcWriteDebugReg (Xhc, Offset, Data);
-}
-
-/**
- Clear one bit of the debug register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the debug register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcClearDebugRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- )
-{
- UINT32 Data;
-
- Data = XhcReadDebugReg (Xhc, Offset);
- Data &= ~Bit;
- XhcWriteDebugReg (Xhc, Offset, Data);
-}
-
-/**
- Write the data to the XHCI MMIO register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the runtime register.
- @param Data The data to write.
-
-**/
-VOID
-XhcWriteMmioReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Data
- )
-{
- EFI_PHYSICAL_ADDRESS MmioBase;
-
- MmioBase = Xhc->XhcMmioBase;
- MmioWrite32 ((UINTN)(MmioBase + Offset), Data);
-
- return;
-}
-
-/**
- Read XHCI MMIO register.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the runtime register.
-
- @return The register content read
-
-**/
-UINT32
-XhcReadMmioReg (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset
- )
-{
- UINT32 Data;
- EFI_PHYSICAL_ADDRESS MmioBase;
-
- MmioBase = Xhc->XhcMmioBase;
-
- Data = MmioRead32 ((UINTN)(MmioBase + Offset));
-
- return Data;
-}
-
-/**
- Set one bit of the operational register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the runtime register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcSetMmioRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- )
-{
- UINT32 Data;
-
- Data = XhcReadMmioReg (Xhc, Offset);
- Data |= Bit;
- XhcWriteMmioReg (Xhc, Offset, Data);
-}
-
-/**
- Clear one bit of the operational register while keeping other bits.
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the runtime register.
- @param Bit The bit mask of the register to set.
-
-**/
-VOID
-XhcClearMmioRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit
- )
-{
- UINT32 Data;
-
- Data = XhcReadMmioReg (Xhc, Offset);
- Data &= ~Bit;
- XhcWriteMmioReg (Xhc, Offset, Data);
-}
-
-/**
- Wait the operation register's bit as specified by Bit
- to be set (or clear).
-
- @param Xhc The XHCI Instance.
- @param Offset The offset of the operational register.
- @param Bit The bit of the register to wait for.
- @param WaitToSet Wait the bit to set or clear.
- @param Timeout The time to wait before abort (in millisecond, ms).
-
- @retval EFI_SUCCESS The bit successfully changed by host controller.
- @retval EFI_TIMEOUT The time out occurred.
-
-**/
-EFI_STATUS
-XhcWaitMmioRegBit (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 Offset,
- IN UINT32 Bit,
- IN BOOLEAN WaitToSet,
- IN UINT32 Timeout
- )
-{
- UINT32 Index;
- UINTN Loop;
-
- Loop = (Timeout * XHC_1_MILLISECOND / XHC_POLL_DELAY) + 1;
-
- for (Index = 0; Index < Loop; Index++) {
- if (XHC_REG_BIT_IS_SET (Xhc, Offset, Bit) == WaitToSet) {
- return EFI_SUCCESS;
- }
-
- MicroSecondDelay (XHC_POLL_DELAY);
- }
-
- return EFI_TIMEOUT;
-}
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortDataTransfer.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortDataTransfer.c
deleted file mode 100644
index 53478a49b8..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortDataTransfer.c
+++ /dev/null
@@ -1,892 +0,0 @@
-/** @file
- Usb3 Debug Port library instance
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-#include <PiPei.h>
-#include <Library/SerialPortLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PciLib.h>
-#include <Library/PcdLib.h>
-#include <Library/TimerLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-#include "Usb3DebugPortLibInternal.h"
-
-EFI_SMRAM_DESCRIPTOR mSmramCheckRanges[MAX_SMRAM_RANGE];
-UINTN mSmramCheckRangeCount = 0;
-BOOLEAN mUsb3InSmm = FALSE;
-UINT64 mUsb3MmioSize = 0;
-
-/**
- Synchronize the specified transfer ring to update the enqueue and dequeue pointer.
-
- @param Xhc The XHCI Instance.
- @param TrsRing The transfer ring to sync.
-
- @retval EFI_SUCCESS The transfer ring is synchronized successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-XhcSyncTrsRing (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN TRANSFER_RING *TrsRing
- )
-{
- UINTN Index;
- TRB_TEMPLATE *TrsTrb;
-
- ASSERT (TrsRing != NULL);
-
- //
- // Calculate the latest RingEnqueue and RingPCS
- //
- TrsTrb = (TRB_TEMPLATE *)(UINTN) TrsRing->RingEnqueue;
-
- ASSERT (TrsTrb != NULL);
-
- for (Index = 0; Index < TrsRing->TrbNumber; Index++) {
- if (TrsTrb->CycleBit != (TrsRing->RingPCS & BIT0)) {
- break;
- }
- TrsTrb++;
- if ((UINT8) TrsTrb->Type == TRB_TYPE_LINK) {
- ASSERT (((LINK_TRB*)TrsTrb)->TC != 0);
- //
- // set cycle bit in Link TRB as normal
- //
- ((LINK_TRB*)TrsTrb)->CycleBit = TrsRing->RingPCS & BIT0;
- //
- // Toggle PCS maintained by software
- //
- TrsRing->RingPCS = (TrsRing->RingPCS & BIT0) ? 0 : 1;
- TrsTrb = (TRB_TEMPLATE *)(UINTN)((TrsTrb->Parameter1 | LShiftU64 ((UINT64)TrsTrb->Parameter2, 32)) & ~0x0F);
- }
- }
- ASSERT (Index != TrsRing->TrbNumber);
-
- if ((EFI_PHYSICAL_ADDRESS)(UINTN) TrsTrb != TrsRing->RingEnqueue) {
- TrsRing->RingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN) TrsTrb;
- }
-
- //
- // Clear the Trb context for enqueue, but reserve the PCS bit
- //
- TrsTrb->Parameter1 = 0;
- TrsTrb->Parameter2 = 0;
- TrsTrb->Status = 0;
- TrsTrb->RsvdZ1 = 0;
- TrsTrb->Type = 0;
- TrsTrb->Control = 0;
-
- return EFI_SUCCESS;
-}
-
-/**
- Synchronize the specified event ring to update the enqueue and dequeue pointer.
-
- @param Xhc The XHCI Instance.
- @param EvtRing The event ring to sync.
-
- @retval EFI_SUCCESS The event ring is synchronized successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-XhcSyncEventRing (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN EVENT_RING *EvtRing
- )
-{
- UINTN Index;
- TRB_TEMPLATE *EvtTrb1;
-
- ASSERT (EvtRing != NULL);
-
- //
- // Calculate the EventRingEnqueue and EventRingCCS.
- // Note: only support single Segment
- //
- EvtTrb1 = (TRB_TEMPLATE *)(UINTN) EvtRing->EventRingDequeue;
-
- for (Index = 0; Index < EvtRing->TrbNumber; Index++) {
- if (EvtTrb1->CycleBit != EvtRing->EventRingCCS) {
- break;
- }
-
- EvtTrb1++;
-
- if ((UINTN)EvtTrb1 >= ((UINTN) EvtRing->EventRingSeg0 + sizeof (TRB_TEMPLATE) * EvtRing->TrbNumber)) {
- EvtTrb1 = (TRB_TEMPLATE *)(UINTN) EvtRing->EventRingSeg0;
- EvtRing->EventRingCCS = (EvtRing->EventRingCCS) ? 0 : 1;
- }
- }
-
- if (Index < EvtRing->TrbNumber) {
- EvtRing->EventRingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN)EvtTrb1;
- } else {
- ASSERT (FALSE);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Check if there is a new generated event.
-
- @param Xhc The XHCI Instance.
- @param EvtRing The event ring to check.
- @param NewEvtTrb The new event TRB found.
-
- @retval EFI_SUCCESS Found a new event TRB at the event ring.
- @retval EFI_NOT_READY The event ring has no new event.
-
-**/
-EFI_STATUS
-EFIAPI
-XhcCheckNewEvent (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN EVENT_RING *EvtRing,
- OUT TRB_TEMPLATE **NewEvtTrb
- )
-{
- EFI_STATUS Status;
-
- ASSERT (EvtRing != NULL);
-
- *NewEvtTrb = (TRB_TEMPLATE *)(UINTN) EvtRing->EventRingDequeue;
-
- if (EvtRing->EventRingDequeue == EvtRing->EventRingEnqueue) {
- return EFI_NOT_READY;
- }
-
- Status = EFI_SUCCESS;
-
- EvtRing->EventRingDequeue += sizeof (TRB_TEMPLATE);
- //
- // If the dequeue pointer is beyond the ring, then roll-back it to the begining of the ring.
- //
- if ((UINTN)EvtRing->EventRingDequeue >= ((UINTN) EvtRing->EventRingSeg0 + sizeof (TRB_TEMPLATE) * EvtRing->TrbNumber)) {
- EvtRing->EventRingDequeue = EvtRing->EventRingSeg0;
- }
-
- return Status;
-}
-
-/**
- Check if the Trb is a transaction of the URB.
-
- @param Trb The TRB to be checked
- @param Urb The transfer ring to be checked.
-
- @retval TRUE It is a transaction of the URB.
- @retval FALSE It is not any transaction of the URB.
-
-**/
-BOOLEAN
-IsTransferRingTrb (
- IN TRB_TEMPLATE *Trb,
- IN URB *Urb
- )
-{
- TRB_TEMPLATE *CheckedTrb;
- TRANSFER_RING *Ring;
- UINTN Index;
-
- Ring = (TRANSFER_RING *)(UINTN) Urb->Ring;
- CheckedTrb = (TRB_TEMPLATE *)(UINTN) Ring->RingSeg0;
-
- ASSERT (Ring->TrbNumber == CMD_RING_TRB_NUMBER || Ring->TrbNumber == TR_RING_TRB_NUMBER);
-
- for (Index = 0; Index < Ring->TrbNumber; Index++) {
- if (Trb == CheckedTrb) {
- return TRUE;
- }
- CheckedTrb++;
- }
-
- return FALSE;
-}
-
-/**
- Check the URB's execution result and update the URB's
- result accordingly.
-
- @param Xhc The XHCI Instance.
- @param Urb The URB to check result.
-
- @return Whether the result of URB transfer is finialized.
-
-**/
-EFI_STATUS
-XhcCheckUrbResult (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN URB *Urb
- )
-{
- EVT_TRB_TRANSFER *EvtTrb;
- TRB_TEMPLATE *TRBPtr;
- UINTN Index;
- UINT8 TRBType;
- EFI_STATUS Status;
- URB *CheckedUrb;
- UINT64 XhcDequeue;
- UINT32 High;
- UINT32 Low;
-
- ASSERT ((Xhc != NULL) && (Urb != NULL));
-
- Status = EFI_SUCCESS;
-
- if (Urb->Finished) {
- goto EXIT;
- }
-
- EvtTrb = NULL;
-
- //
- // Traverse the event ring to find out all new events from the previous check.
- //
- XhcSyncEventRing (Xhc, &Xhc->EventRing);
-
- for (Index = 0; Index < Xhc->EventRing.TrbNumber; Index++) {
- Status = XhcCheckNewEvent (Xhc, &Xhc->EventRing, ((TRB_TEMPLATE **)&EvtTrb));
- if (Status == EFI_NOT_READY) {
- //
- // All new events are handled, return directly.
- //
- goto EXIT;
- }
- //
- // Only handle COMMAND_COMPLETETION_EVENT and TRANSFER_EVENT.
- //
- if ((EvtTrb->Type != TRB_TYPE_COMMAND_COMPLT_EVENT) && (EvtTrb->Type != TRB_TYPE_TRANS_EVENT)) {
- continue;
- }
-
- TRBPtr = (TRB_TEMPLATE *)(UINTN)(EvtTrb->TRBPtrLo | LShiftU64 ((UINT64) EvtTrb->TRBPtrHi, 32));
-
- //
- // Update the status of Urb according to the finished event regardless of whether
- // the urb is current checked one or in the XHCI's async transfer list.
- // This way is used to avoid that those completed async transfer events don't get
- // handled in time and are flushed by newer coming events.
- //
- if (IsTransferRingTrb (TRBPtr, Urb)) {
- CheckedUrb = Urb;
- } else {
- continue;
- }
- switch (EvtTrb->Completecode) {
- case TRB_COMPLETION_STALL_ERROR:
- CheckedUrb->Result |= EFI_USB_ERR_STALL;
- CheckedUrb->Finished = TRUE;
- break;
-
- case TRB_COMPLETION_BABBLE_ERROR:
- CheckedUrb->Result |= EFI_USB_ERR_BABBLE;
- CheckedUrb->Finished = TRUE;
- break;
-
- case TRB_COMPLETION_DATA_BUFFER_ERROR:
- CheckedUrb->Result |= EFI_USB_ERR_BUFFER;
- CheckedUrb->Finished = TRUE;
- break;
-
- case TRB_COMPLETION_USB_TRANSACTION_ERROR:
- CheckedUrb->Result |= EFI_USB_ERR_TIMEOUT;
- CheckedUrb->Finished = TRUE;
- break;
-
- case TRB_COMPLETION_SHORT_PACKET:
- case TRB_COMPLETION_SUCCESS:
- if (EvtTrb->Completecode == TRB_COMPLETION_SHORT_PACKET) {
- }
-
- TRBType = (UINT8) (TRBPtr->Type);
- if ((TRBType == TRB_TYPE_DATA_STAGE) ||
- (TRBType == TRB_TYPE_NORMAL) ||
- (TRBType == TRB_TYPE_ISOCH)) {
- CheckedUrb->Completed += (CheckedUrb->DataLen - EvtTrb->Length);
- }
-
- break;
-
- default:
- CheckedUrb->Result |= EFI_USB_ERR_TIMEOUT;
- CheckedUrb->Finished = TRUE;
- break;
- }
-
- //
- // Only check first and end Trb event address
- //
-
- if ((EFI_PHYSICAL_ADDRESS)(UINTN) TRBPtr == CheckedUrb->TrbStart) {
- CheckedUrb->StartDone = TRUE;
- }
-
- if ((EFI_PHYSICAL_ADDRESS)(UINTN) TRBPtr == CheckedUrb->TrbEnd) {
- CheckedUrb->EndDone = TRUE;
- }
-
- if (CheckedUrb->StartDone && CheckedUrb->EndDone) {
- CheckedUrb->Finished = TRUE;
- }
-
- }
-
-EXIT:
- //
- // Advance event ring to last available entry
- //
- // Some 3rd party XHCI external cards don't support single 64-bytes width register access,
- // So divide it to two 32-bytes width register access.
- //
- Low = XhcReadDebugReg (Xhc, XHC_DC_DCERDP);
- High = XhcReadDebugReg (Xhc, XHC_DC_DCERDP + 4);
- XhcDequeue = (UINT64)(LShiftU64((UINT64)High, 32) | Low);
-
- if ((XhcDequeue & (~0x0F)) != ((UINT64)(UINTN)Xhc->EventRing.EventRingDequeue & (~0x0F))) {
- //
- // Some 3rd party XHCI external cards don't support single 64-bytes width register access,
- // So divide it to two 32-bytes width register access.
- //
- XhcWriteDebugReg (Xhc, XHC_DC_DCERDP, XHC_LOW_32BIT (Xhc->EventRing.EventRingDequeue));
- XhcWriteDebugReg (Xhc, XHC_DC_DCERDP + 4, XHC_HIGH_32BIT (Xhc->EventRing.EventRingDequeue));
- }
-
- return Status;
-}
-
-/**
- Ring the door bell to notify XHCI there is a transaction to be executed.
-
- @param Xhc The XHCI Instance.
- @param Urb The pointer to URB.
-
- @retval EFI_SUCCESS Successfully ring the door bell.
-
-**/
-EFI_STATUS
-EFIAPI
-XhcRingDoorBell (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN URB *Urb
- )
-{
- UINT32 Dcdb;
-
- //
- // 7.6.8.2 DCDB Register
- //
- if (Urb->Direction == EfiUsbDataIn) {
- Dcdb = 0x100;
- } else {
- Dcdb = 0x0;
- }
-
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCDB,
- Dcdb
- );
-
- return EFI_SUCCESS;
-}
-
-/**
- Execute the transfer by polling the URB. This is a synchronous operation.
-
- @param Xhc The XHCI Instance.
- @param Urb The URB to execute.
- @param Timeout The time to wait before abort, in millisecond.
-
- @return EFI_DEVICE_ERROR The transfer failed due to transfer error.
- @return EFI_TIMEOUT The transfer failed due to time out.
- @return EFI_SUCCESS The transfer finished OK.
-
-**/
-EFI_STATUS
-XhcExecTransfer (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN URB *Urb,
- IN UINTN Timeout
- )
-{
- EFI_STATUS Status;
- UINTN Index;
- UINTN Loop;
- TRB_TEMPLATE *Trb;
- TRANSFER_RING *Ring;
- TRB_TEMPLATE *TrbStart;
- TRB_TEMPLATE *TrbEnd;
-
- Status = EFI_SUCCESS;
-
- Loop = (Timeout * XHC_1_MILLISECOND / XHC_POLL_DELAY) + 1;
- if (Timeout == 0) {
- Loop = 0xFFFFFFFF;
- }
- XhcRingDoorBell (Xhc, Urb);
- //
- // DSCT BIT0: Event Ring Not Empty bit can only be set to 1 by XHC after ringing door bell with some delay.
- //
-
- for (Index = 0; Index < Loop; Index++) {
- Status = XhcCheckUrbResult (Xhc, Urb);
- if (Urb->Finished) {
- break;
- }
- MicroSecondDelay (XHC_POLL_DELAY);
- }
- if (Index == Loop) {
- Urb->Result = EFI_USB_ERR_TIMEOUT;
- }
-
- //
- // If URB transfer is error, restore transfer ring to original value before URB transfer
- // This will make the current transfer TRB is always at the latest unused one in transfer ring.
- // Without this code, when there is read TRB from target, but host does not write anything, this TRB (A)
- // will be still here, next read TRB (B) will be put next to TRB (A), when host write then, the TRB (A)
- // will be used to contain data, not TRB(B), this will cause Finished flag will not be set and return error in this function.
- //
- Ring = (TRANSFER_RING *)(UINTN) Urb->Ring;
- if (Urb->Result != EFI_USB_NOERROR) {
- Ring->RingEnqueue = Urb->TrbStart;
- //
- // Clear CCS flag for next use
- //
- TrbStart = (TRB_TEMPLATE *)(UINTN) Urb->TrbStart;
- TrbEnd = (TRB_TEMPLATE *)(UINTN) Urb->TrbEnd;
- for (Trb = TrbStart; Trb <= TrbEnd; Trb++) {
- Trb->CycleBit = ((~Ring->RingPCS) & BIT0);
- }
- }
- return Status;
-}
-
-/**
- Create a transfer TRB.
-
- @param Xhc The XHCI Instance
- @param Urb The urb used to construct the transfer TRB.
-
- @return Created TRB or NULL
-
-**/
-EFI_STATUS
-XhcCreateTransferTrb (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN URB *Urb
- )
-{
- TRANSFER_RING *EPRing;
- TRB *TrbStart;
- UINT32 TotalLen;
- UINT32 Len;
- UINT32 TrbNum;
-
- Urb->Finished = FALSE;
- Urb->StartDone = FALSE;
- Urb->EndDone = FALSE;
- Urb->Completed = 0;
- Urb->Result = EFI_USB_NOERROR;
-
- if (Urb->Direction == EfiUsbDataIn) {
- EPRing = &Xhc->TransferRingIn;
- } else {
- EPRing = &Xhc->TransferRingOut;
- }
-
- Urb->Ring = (EFI_PHYSICAL_ADDRESS)(UINTN) EPRing;
- //
- // Construct the TRB for ED_BULK_OUT and ED_BULK_IN
- //
- XhcSyncTrsRing (Xhc, EPRing);
-
- Urb->TrbStart = EPRing->RingEnqueue;
-
- TotalLen = 0;
- Len = 0;
- TrbNum = 0;
- TrbStart = (TRB *)(UINTN)EPRing->RingEnqueue;
-
- while (TotalLen < Urb->DataLen) {
- if ((TotalLen + 0x10000) >= Urb->DataLen) {
- Len = Urb->DataLen - TotalLen;
- } else {
- Len = 0x10000;
- }
- TrbStart = (TRB *)(UINTN)EPRing->RingEnqueue;
- TrbStart->TrbNormal.TRBPtrLo = XHC_LOW_32BIT(Urb->Data + TotalLen);
- TrbStart->TrbNormal.TRBPtrHi = XHC_HIGH_32BIT(Urb->Data + TotalLen);
- TrbStart->TrbNormal.Length = Len;
- TrbStart->TrbNormal.TDSize = 0;
- TrbStart->TrbNormal.IntTarget = 0;
- TrbStart->TrbNormal.ISP = 1;
- TrbStart->TrbNormal.IOC = 1;
- TrbStart->TrbNormal.Type = TRB_TYPE_NORMAL;
-
- //
- // Update the cycle bit
- //
- TrbStart->TrbNormal.CycleBit = EPRing->RingPCS & BIT0;
-
- XhcSyncTrsRing (Xhc, EPRing);
- TrbNum++;
- TotalLen += Len;
- }
-
- Urb->TrbNum = TrbNum;
-
- //
- // Update to the last TRB
- //
- Urb->TrbEnd = (EFI_PHYSICAL_ADDRESS)(UINTN) TrbStart;
- return EFI_SUCCESS;
-}
-
-/**
- Create a new URB for a new transaction.
-
- @param Xhc The XHCI Instance
- @param Direction The direction of data flow.
- @param Data The user data to transfer
- @param DataLen The length of data buffer
-
- @return Created URB or NULL
-
-**/
-URB*
-XhcCreateUrb (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN VOID *Data,
- IN UINTN DataLen
- )
-{
- EFI_STATUS Status;
- URB *Urb;
- EFI_PHYSICAL_ADDRESS DataAddress;
-
- Urb = &Xhc->Urb;
- ASSERT (Urb->Data != 0);
- DataAddress = Urb->Data;
- ZeroMem (Urb, sizeof (URB));
-
- Urb->Signature = USB3_DEBUG_PORT_INSTANCE_SIGNATURE;
- Urb->Direction = Direction;
- Urb->Data = DataAddress;
-
- ZeroMem ((VOID*)(UINTN) Urb->Data, DataLen);
- CopyMem ((VOID*)(UINTN) Urb->Data, Data, DataLen);
-
- Urb->DataLen = (UINT32) DataLen;
- Status = XhcCreateTransferTrb (Xhc, Urb);
- ASSERT_EFI_ERROR (Status);
-
- return Urb;
-}
-
-/**
- Submits bulk transfer to a bulk endpoint of a USB device.
-
- @param Xhc The instance of debug device.
- @param Direction The direction of data transfer.
- @param Data Array of pointers to the buffers of data to transmit
- from or receive into.
- @param DataLength The lenght of the data buffer.
- @param Timeout Indicates the maximum time, in millisecond, which
- the transfer is allowed to complete.
- @param TransferResult Transfer result.
-
- @retval EFI_SUCCESS The transfer was completed successfully.
- @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
- @retval EFI_INVALID_PARAMETER Some parameters are invalid.
- @retval EFI_TIMEOUT The transfer failed due to timeout.
- @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
-
-**/
-EFI_STATUS
-EFIAPI
-XhcDataTransfer (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN EFI_USB_DATA_DIRECTION Direction,
- IN OUT VOID *Data,
- IN OUT UINTN *DataLength,
- IN UINTN Timeout,
- OUT UINT32 *TransferResult
- )
-{
- URB *Urb;
- EFI_STATUS Status;
-
- //
- // Validate the parameters
- //
- if ((DataLength == NULL) || (*DataLength == 0) ||
- (Data == NULL) || (TransferResult == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- *TransferResult = EFI_USB_ERR_SYSTEM;
- Status = EFI_DEVICE_ERROR;
-
- //
- // Create a new URB, insert it into the asynchronous
- // schedule list, then poll the execution status.
- //
- Urb = XhcCreateUrb (Xhc, Direction, Data, *DataLength);
-
- if (Urb == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- goto ON_EXIT;
- }
-
- Status = XhcExecTransfer (Xhc, Urb, Timeout);
-
- *TransferResult = Urb->Result;
- *DataLength = Urb->Completed;
-
- if (*TransferResult == EFI_USB_NOERROR) {
- Status = EFI_SUCCESS;
- }
-
-ON_EXIT:
-
- return Status;
-}
-
-/**
- Check whether the MMIO Bar is within any of the SMRAM ranges.
-
- @param[in] XhcMmioBase The address of the MMIO to be checked.
-
- @retval TURE The XHCI MMIO is in SMRAM ranges.
- @retval FALSE The XHCI MMIO is out of SMRAM ranges.
-**/
-BOOLEAN
-EFIAPI
-Usb3DebugIsAddressInSmram (
- IN EFI_PHYSICAL_ADDRESS XhcMmioBase
- )
-{
- UINTN Index;
-
- if (mSmramCheckRangeCount == 0) {
- //
- // When we invoke this function, we are already in SMM mode,
- // but SmmAccess->GetCapabilities failed which kept mSmramCheckRanges as 0.
- //
- return TRUE;
- }
-
- for (Index = 0; Index < mSmramCheckRangeCount; Index ++) {
- if (((XhcMmioBase >= mSmramCheckRanges[Index].CpuStart) && (XhcMmioBase < mSmramCheckRanges[Index].CpuStart + mSmramCheckRanges[Index].PhysicalSize)) ||
- ((mSmramCheckRanges[Index].CpuStart >= XhcMmioBase) && (mSmramCheckRanges[Index].CpuStart < XhcMmioBase + mUsb3MmioSize))) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-/**
- Transfer data via XHC controller.
-
- @param Data Data buffer.
- @param Length Data length.
- @param Direction Transfer direction.
-
-**/
-VOID
-Usb3DebugPortDataTransfer (
- UINT8 *Data,
- UINTN *Length,
- EFI_USB_DATA_DIRECTION Direction
- )
-{
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
- UINT16 Command;
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT32 TransferResult;
- UINT32 Dcctrl;
- EFI_PHYSICAL_ADDRESS UsbBase;
- UINTN BytesToSend;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- EFI_STATUS Status;
- USB3_DEBUG_PORT_INSTANCE UsbDbgInstance;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
-
- //
- // MMIO base address is possible to clear, set it if it is cleared. (XhciMemorySpaceClose in PchUsbCommon.c)
- //
- XhcMmioBase = GetXhciBaseAddress ();
- Command = GetXhciPciCommand ();
-
- if ((XhcMmioBase == 0) || (XhcMmioBase == XHCI_BASE_ADDRESS_64_BIT_MASK)) {
- //
- // XHCI device MMIO base is cleared by someone, set it again
- //
- UsbBase = PcdGet32 (PcdXhciDefaultBaseAddress);
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET), (UINT32)UsbBase);
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4), 0x0);
- UsbBase = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET)) & XHCI_BASE_ADDRESS_32_BIT_MASK;
- if (UsbBase == 0 || UsbBase == XHCI_BASE_ADDRESS_32_BIT_MASK) {
- return;
- }
- }
-
- //
- // Check if XHC debug MMIO range is in SMRAM
- //
- if ((mUsb3InSmm) && (Usb3DebugIsAddressInSmram (XhcMmioBase))) {
- return;
- }
-
- //
- // Save and set Command Register
- //
- if (((Command & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) || ((Command & EFI_PCI_COMMAND_BUS_MASTER) == 0)) {
- PciWrite16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER);
- PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- }
-
- Instance = GetUsb3DebugPortInstance ();
-
- if (Instance != NULL) {
- if (!Instance->DebugSupport) {
- //
- // Debug device is not supported by XHCI, return
- //
- goto Done;
- }
- }
-
- if ((Instance != NULL) && (Instance->Ready)) {
- //
- // Debug device is broken suddently (e.g. Windows OS), return
- //
- Dcctrl = XhcReadDebugReg (Instance, XHC_DC_DCCTRL);
- if ((Dcctrl & BIT0) == 0) {
- goto Done;
- }
- }
-
- if ((Instance != NULL) && (!Instance->Ready)) {
- //
- // Debug host does not connect with target
- //
- goto Done;
- }
-
- if (Instance == NULL) {
- ZeroMem (&UsbDbgInstance, sizeof (USB3_DEBUG_PORT_INSTANCE));
- DiscoverUsb3DebugPort (&UsbDbgInstance);
- if (UsbDbgInstance.DebugSupport) {
- if (!IsAllocatePagesReady ()) {
- //
- // AllocatePages can not work, return
- //
- goto Done;
- }
- }
- Status = USB3InitializeReal ();
- if (EFI_ERROR (Status)) {
- //
- // Debug device is failed to initialize
- //
- goto Done;
- }
-
- //
- // Update instance
- //
- Instance = GetUsb3DebugPortInstance ();
-
- if (Instance == NULL) {
- //
- // Debug device instance is failed to create
- //
- goto Done;
- }
-
- if ((!Instance->Ready) || (!Instance->DebugSupport)) {
- //
- // Debug host does not connect at first or is not supported
- //
- goto Done;
- }
- }
-
- BytesToSend = 0;
- while (*Length > 0) {
- BytesToSend = ((*Length) > XHC_DEBUG_PORT_DATA_LENGTH) ? XHC_DEBUG_PORT_DATA_LENGTH : *Length;
- XhcDataTransfer (
- Instance,
- Direction,
- Data,
- &BytesToSend,
- DATA_TRANSFER_TIME_OUT,
- &TransferResult
- );
- if (TransferResult != EFI_USB_NOERROR) {
- break;
- }
- *Length -= BytesToSend;
- Data += BytesToSend;
- }
-
-Done:
- //
- // Restore Command Register
- //
- PciWrite16(PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command);
-
-}
-
-/**
- Receive data over the USB3 debug cable.
-
- @param[out] Data Pointer to data
- @param[in, out] Length Pointer to data length
-
-**/
-RETURN_STATUS
-Usb3DbgIn (
- OUT UINT8 *Data,
- IN OUT UINTN *Length
- )
-{
- Usb3DebugPortDataTransfer (Data, Length, EfiUsbDataIn);
- return EFI_SUCCESS;
-}
-
-/**
- Send data over the USB3 debug cable.
-
- @param[out] Data Pointer to data
- @param[in, out] Length Pointer to data length
-
-**/
-VOID
-Usb3DbgOut (
- OUT UINT8 *Data,
- IN OUT UINTN *Length
- )
-{
- Usb3DebugPortDataTransfer (Data, Length, EfiUsbDataOut);
-}
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortInitialize.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortInitialize.c
deleted file mode 100644
index dbdae59253..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortInitialize.c
+++ /dev/null
@@ -1,726 +0,0 @@
-/** @file
- Usb3 Debug Port initialization
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-#include <PiPei.h>
-#include <Library/SerialPortLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PciLib.h>
-#include <Library/PcdLib.h>
-#include <Library/TimerLib.h>
-#include <Library/HobLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-#include "Usb3DebugPortLibInternal.h"
-
-UINT16 mString0Desc[] = {
- // String Descriptor Type + Length
- ( USB_DESC_TYPE_STRING << 8 ) + STRING0_DESC_LEN,
- 0x0409
-};
-
-UINT16 mManufacturerStrDesc[] = {
- // String Descriptor Type + Length
- ( USB_DESC_TYPE_STRING << 8 ) + MANU_DESC_LEN,
- 'I', 'n', 't', 'e', 'l'
-};
-
-//USB 3.0 Debug Cable
-UINT16 mProductStrDesc[] = {
- // String Descriptor Type + Length
- ( USB_DESC_TYPE_STRING << 8 ) + PRODUCT_DESC_LEN,
- 'U', 'S', 'B', ' ', '3', '.', '0', ' ', 'D', 'e', 'b', 'u', 'g', ' ', 'C', 'a', 'b', 'l', 'e'
-};
-
-UINT16 mSerialNumberStrDesc[] = {
- // String Descriptor Type + Length
- ( USB_DESC_TYPE_STRING << 8 ) + SERIAL_DESC_LEN,
- '1'
-};
-
-XHC_DC_CONTEXT DebugCapabilityContextTemplate = {
- {
- 0,
- 0,
- 0,
- 0,
- STRING0_DESC_LEN,
- MANU_DESC_LEN,
- PRODUCT_DESC_LEN,
- SERIAL_DESC_LEN,
- 0,
- 0,
- 0,
- 0
- },
- {
- 0, // EPState
- 0, // RsvdZ1
- 0, // Mult
- 0, // MaxPStreams
- 0, // LSA
- 0, // Interval
- 0, // RsvdZ2
- 0, // RsvdZ3
- 3, // CERR
- ED_BULK_OUT, // EPType
- 0, // RsvdZ4
- 0, // HID
- 0, // MaxBurstSize
- 1024, // MaxPacketSize
- 0, // PtrLo
- 0, // PtrHi
- 0x1000, // AverageTRBLength
- 0, // MaxESITPayload
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- },
- {
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 3, //CERR
- ED_BULK_IN,
- 0,
- 0,
- 0,
- 1024, //MaxPacketSize
- 0,
- 0,
- 0x1000,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0
- }
-};
-
-/**
- Return command register value in XHCI controller.
-
-**/
-UINT16
-GetXhciPciCommand (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT16 Command;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
-
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
- Command = PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- return Command;
-}
-
-/**
- Discover the USB3 debug device.
-
- @param[in] Instance Pointer to USB3 debug port object instance.
-
- @retval RETURN_SUCCESS The USB3 debug device was found.
- @retval RETURN_DEVICE_ERROR The USB3 debug device was not found.
-
-**/
-RETURN_STATUS
-DiscoverUsb3DebugPort(
- IN USB3_DEBUG_PORT_INSTANCE *Instance
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT16 Command;
- EFI_PHYSICAL_ADDRESS UsbBase;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- EFI_PHYSICAL_ADDRESS CapabilityPointer;
- UINT32 Capability;
- BOOLEAN Flag;
- UINT8 CapLength;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
- if ((PciRead8(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_CLASSCODE_OFFSET + 2)) != PCI_CLASS_SERIAL) ||
- (PciRead8(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_CLASSCODE_OFFSET + 1)) != PCI_CLASS_SERIAL_USB) ||
- (PciRead8(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_CLASSCODE_OFFSET)) != 0x30)) {
- //
- // The device is not XHCI controller
- //
- return RETURN_NOT_FOUND;
- }
-
- //
- // USBBASE is at 10-13h, i.e. the first BAR, clear the low bits which is not part of base address
- //
- UsbBase = GetXhciBaseAddress ();
-
- //
- // Set XHCI MMIO base address if necessary
- //
- if ((UsbBase == 0) || (UsbBase == XHCI_BASE_ADDRESS_64_BIT_MASK)) {
- UsbBase = PcdGet32 (PcdXhciDefaultBaseAddress);
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET), (UINT32)UsbBase);
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4), 0x0);
- UsbBase = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET)) & XHCI_BASE_ADDRESS_32_BIT_MASK;
- if (UsbBase == 0 || UsbBase == XHCI_BASE_ADDRESS_32_BIT_MASK) {
- return RETURN_DEVICE_ERROR;
- }
- }
-
- //
- // Set MSE and BME bit - enable the address space
- //
- Command = PciRead16 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- if ((Command & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) {
- PciWrite16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE);
- PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- }
-
- CapLength = MmioRead8 ((UINTN) UsbBase);
-
- //
- // Get capability pointer from HCCPARAMS at offset 0x10
- //
- CapabilityPointer = UsbBase + (MmioRead32 ((UINTN)(UsbBase + XHC_HCCPARAMS_OFFSET)) >> 16) * 4;
-
- //
- // Search XHCI debug capability
- //
- Flag = FALSE;
- Capability = MmioRead32 ((UINTN)CapabilityPointer);
- while (TRUE) {
- if ((Capability & XHC_CAPABILITY_ID_MASK) == PCI_CAPABILITY_ID_DEBUG_PORT) {
- Flag = TRUE;
- break;
- }
- if ((((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) & XHC_CAPABILITY_ID_MASK) == 0) {
- //
- // Reach the end of capability list, quit
- //
- break;
- }
- CapabilityPointer += ((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) * 4;
- Capability = MmioRead32 ((UINTN)CapabilityPointer);
- }
-
- Instance->Signature = USB3_DEBUG_PORT_INSTANCE_SIGNATURE;
-
- if (Flag) {
- Instance->DebugSupport = TRUE;
- Instance->DebugCapabilityBase = CapabilityPointer;
- Instance->DebugCapabilityOffset = CapabilityPointer - UsbBase;
-
- Instance->XhciOpRegister = UsbBase + CapLength;
- Instance->XhcMmioBase = UsbBase;
-
- Instance->PciBusNumber = Bus;
- Instance->PciDeviceNumber = Device;
- Instance->PciFunctionNumber = Function;
- }
-
- //
- // Restore Command Register
- //
- PciWrite16(PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command);
-
- return RETURN_SUCCESS;
-}
-
-/**
- Create XHCI event ring.
-
- @param Xhc The XHCI Instance.
- @param EventRing The created event ring.
-
-**/
-EFI_STATUS
-CreateEventRing (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- OUT EVENT_RING *EventRing
- )
-{
- VOID *Buf;
- EVENT_RING_SEG_TABLE_ENTRY *ERSTBase;
-
- ASSERT (EventRing != NULL);
-
- //
- // Allocate Event Ring
- //
- Buf = AllocateAlignBuffer (sizeof (TRB_TEMPLATE) * EVENT_RING_TRB_NUMBER);
- ASSERT (Buf != NULL);
- ASSERT (((UINTN) Buf & 0x3F) == 0);
- ZeroMem (Buf, sizeof (TRB_TEMPLATE) * EVENT_RING_TRB_NUMBER);
-
- EventRing->EventRingSeg0 = (EFI_PHYSICAL_ADDRESS)(UINTN) Buf;
- EventRing->TrbNumber = EVENT_RING_TRB_NUMBER;
- EventRing->EventRingDequeue = (EFI_PHYSICAL_ADDRESS)(UINTN) EventRing->EventRingSeg0;
- EventRing->EventRingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN) EventRing->EventRingSeg0;
-
- //
- // Software maintains an Event Ring Consumer Cycle State (CCS) bit, initializing it to '1'
- // and toggling it every time the Event Ring Dequeue Pointer wraps back to the beginning of the Event Ring.
- //
- EventRing->EventRingCCS = 1;
-
- //
- // Allocate Event Ring Segment Table Entry 0 in Event Ring Segment Table
- //
- Buf = AllocateAlignBuffer (sizeof (EVENT_RING_SEG_TABLE_ENTRY) * ERST_NUMBER);
- ASSERT (Buf != NULL);
- ASSERT (((UINTN) Buf & 0x3F) == 0);
- ZeroMem (Buf, sizeof (EVENT_RING_SEG_TABLE_ENTRY) * ERST_NUMBER);
-
- ERSTBase = (EVENT_RING_SEG_TABLE_ENTRY *) Buf;
- EventRing->ERSTBase = (EFI_PHYSICAL_ADDRESS)(UINTN) ERSTBase;
-
- //
- // Fill Event Segment address
- //
- ERSTBase->PtrLo = XHC_LOW_32BIT (EventRing->EventRingSeg0);
- ERSTBase->PtrHi = XHC_HIGH_32BIT (EventRing->EventRingSeg0);
- ERSTBase->RingTrbSize = EVENT_RING_TRB_NUMBER;
-
- //
- // Program the Interrupter Event Ring Dequeue Pointer (DCERDP) register (7.6.4.1)
- //
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCERDP,
- XHC_LOW_32BIT((UINT64)(UINTN)EventRing->EventRingDequeue)
- );
-
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCERDP + 4,
- XHC_HIGH_32BIT((UINT64)(UINTN)EventRing->EventRingDequeue)
- );
-
- //
- // Program the Debug Capability Event Ring Segment Table Base Address (DCERSTBA) register(7.6.4.1)
- //
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCERSTBA,
- XHC_LOW_32BIT((UINT64)(UINTN)ERSTBase)
- );
-
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCERSTBA + 4,
- XHC_HIGH_32BIT((UINT64)(UINTN)ERSTBase)
- );
-
- //
- // Program the Debug Capability Event Ring Segment Table Size (DCERSTSZ) register(7.6.4.1)
- //
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCERSTSZ,
- ERST_NUMBER
- );
- return EFI_SUCCESS;
-}
-
-/**
- Create XHCI transfer ring.
-
- @param Xhc The XHCI Instance.
- @param TrbNum The number of TRB in the ring.
- @param TransferRing The created transfer ring.
-
-**/
-VOID
-CreateTransferRing (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc,
- IN UINT32 TrbNum,
- OUT TRANSFER_RING *TransferRing
- )
-{
- VOID *Buf;
- LINK_TRB *EndTrb;
-
- Buf = AllocateAlignBuffer (sizeof (TRB_TEMPLATE) * TrbNum);
- ASSERT (Buf != NULL);
- ASSERT (((UINTN) Buf & 0xF) == 0);
- ZeroMem (Buf, sizeof (TRB_TEMPLATE) * TrbNum);
-
- TransferRing->RingSeg0 = (EFI_PHYSICAL_ADDRESS)(UINTN) Buf;
- TransferRing->TrbNumber = TrbNum;
- TransferRing->RingEnqueue = TransferRing->RingSeg0;
- TransferRing->RingDequeue = TransferRing->RingSeg0;
- TransferRing->RingPCS = 1;
- //
- // 4.9.2 Transfer Ring Management
- // To form a ring (or circular queue) a Link TRB may be inserted at the end of a ring to
- // point to the first TRB in the ring.
- //
- EndTrb = (LINK_TRB *) ((UINTN)Buf + sizeof (TRB_TEMPLATE) * (TrbNum - 1));
- EndTrb->Type = TRB_TYPE_LINK;
- EndTrb->PtrLo = XHC_LOW_32BIT (Buf);
- EndTrb->PtrHi = XHC_HIGH_32BIT (Buf);
- //
- // Toggle Cycle (TC). When set to '1', the xHC shall toggle its interpretation of the Cycle bit.
- //
- EndTrb->TC = 1;
- //
- // Set Cycle bit as other TRB PCS init value
- //
- EndTrb->CycleBit = 0;
-}
-
-/**
- Create debug capability context for XHC debug device.
-
- @param Xhc The XHCI Instance.
-
- @retval EFI_SUCCESS The bit successfully changed by host controller.
- @retval EFI_TIMEOUT The time out occurred.
-
-**/
-EFI_STATUS
-CreateDebugCapabilityContext (
- IN USB3_DEBUG_PORT_INSTANCE *Xhc
- )
-{
- VOID *Buf;
- XHC_DC_CONTEXT *DebugCapabilityContext;
- UINT8 *String0Desc;
- UINT8 *ManufacturerStrDesc;
- UINT8 *ProductStrDesc;
- UINT8 *SerialNumberStrDesc;
-
- //
- // Allocate debug device context
- //
- Buf = AllocateAlignBuffer (sizeof (XHC_DC_CONTEXT));
- ASSERT (Buf != NULL);
- ASSERT (((UINTN) Buf & 0xF) == 0);
- ZeroMem (Buf, sizeof (XHC_DC_CONTEXT));
-
- DebugCapabilityContext = (XHC_DC_CONTEXT *)(UINTN) Buf;
- Xhc->DebugCapabilityContext = (EFI_PHYSICAL_ADDRESS)(UINTN) DebugCapabilityContext;
-
- CopyMem (DebugCapabilityContext, &DebugCapabilityContextTemplate, sizeof (XHC_DC_CONTEXT));
-
- //
- // Update string descriptor address
- //
- String0Desc = (UINT8 *) AllocateAlignBuffer (STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN);
- ASSERT (String0Desc != NULL);
- ZeroMem (String0Desc, STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN);
- CopyMem (String0Desc, mString0Desc, STRING0_DESC_LEN);
- DebugCapabilityContext->DbcInfoContext.String0DescAddress = (UINT64)(UINTN)String0Desc;
-
- ManufacturerStrDesc = String0Desc + STRING0_DESC_LEN;
- CopyMem (ManufacturerStrDesc, mManufacturerStrDesc, MANU_DESC_LEN);
- DebugCapabilityContext->DbcInfoContext.ManufacturerStrDescAddress = (UINT64)(UINTN)ManufacturerStrDesc;
-
- ProductStrDesc = ManufacturerStrDesc + MANU_DESC_LEN;
- CopyMem (ProductStrDesc, mProductStrDesc, PRODUCT_DESC_LEN);
- DebugCapabilityContext->DbcInfoContext.ProductStrDescAddress = (UINT64)(UINTN)ProductStrDesc;
-
- SerialNumberStrDesc = ProductStrDesc + PRODUCT_DESC_LEN;
- CopyMem (SerialNumberStrDesc, mSerialNumberStrDesc, SERIAL_DESC_LEN);
- DebugCapabilityContext->DbcInfoContext.SerialNumberStrDescAddress = (UINT64)(UINTN)SerialNumberStrDesc;
-
- //
- // Allocate and initialize the Transfer Ring for the Input Endpoint Context.
- //
- ZeroMem (&Xhc->TransferRingIn, sizeof (TRANSFER_RING));
- CreateTransferRing (Xhc, TR_RING_TRB_NUMBER, &Xhc->TransferRingIn);
-
- //
- // Can not set BIT0, otherwise there is no transfer ring detected.
- //
- DebugCapabilityContext->EpInContext.PtrLo = XHC_LOW_32BIT (Xhc->TransferRingIn.RingSeg0) | BIT0;
- DebugCapabilityContext->EpInContext.PtrHi = XHC_HIGH_32BIT (Xhc->TransferRingIn.RingSeg0);
-
- //
- // Allocate and initialize the Transfer Ring for the Output Endpoint Context.
- //
- ZeroMem (&Xhc->TransferRingOut, sizeof (TRANSFER_RING));
- CreateTransferRing (Xhc, TR_RING_TRB_NUMBER, &Xhc->TransferRingOut);
-
- //
- // Can not set BIT0, otherwise there is no transfer ring detected.
- //
- DebugCapabilityContext->EpOutContext.PtrLo = XHC_LOW_32BIT (Xhc->TransferRingOut.RingSeg0) | BIT0;
- DebugCapabilityContext->EpOutContext.PtrHi = XHC_HIGH_32BIT (Xhc->TransferRingOut.RingSeg0);
-
- //
- // Program the Debug Capability Context Pointer (DCCP) register(7.6.8.7)
- //
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCCP,
- XHC_LOW_32BIT((UINT64)(UINTN)DebugCapabilityContext)
- );
- XhcWriteDebugReg (
- Xhc,
- XHC_DC_DCCP + 4,
- XHC_HIGH_32BIT((UINT64)(UINTN)DebugCapabilityContext)
- );
- return EFI_SUCCESS;
-}
-
-/**
- Initialize the USB3 debug Device hardware.
-
- @param[in] Instance Pointer to USB3 debug port object instance.
-
- @retval RETURN_SUCCESS The USB3 debug device was initialized successfully.
- @retval !RETURN_SUCCESS Error.
-
-**/
-RETURN_STATUS
-InitializeUsb3DebugPort (
- IN USB3_DEBUG_PORT_INSTANCE *Instance
- )
-{
- RETURN_STATUS Status;
- UINT64 XhciOpRegister;
- volatile UINT32 Dcctrl;
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT16 Command;
- EFI_BOOT_MODE BootMode;
- UINT64 TimeOut;
- CHAR8 *TestString;
- UINTN Length;
- UINT32 TransferResult;
-
- Bus = Instance->PciBusNumber;
- Device = Instance->PciDeviceNumber;
- Function = Instance->PciFunctionNumber;
-
- Command = GetXhciPciCommand ();
-
- //
- // Save and set Command Register
- //
- if (((Command & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) || ((Command & EFI_PCI_COMMAND_BUS_MASTER) == 0)) {
- PciWrite16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER);
- PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- }
-
- //
- // Clear DCE bit and LSE bit in DCCTRL
- //
- if ((XhcReadDebugReg (Instance, XHC_DC_DCCTRL) & (BIT1|BIT31)) == (BIT1|BIT31)) {
- XhcClearDebugRegBit (Instance, XHC_DC_DCCTRL, BIT1|BIT31);
- }
-
- XhciOpRegister = Instance->XhciOpRegister;
-
- //
- // Get current Boot Mode
- //
- BootMode = GetBootModeHob ();
-
- if (BootMode != BOOT_ON_S3_RESUME) {
- if (!XhcIsBitSet((UINTN)(XhciOpRegister + XHC_USBSTS_OFFSET), XHC_USBSTS_HALT)) {
- XhcClrR32Bit((UINTN) XhciOpRegister + XHC_USBCMD_OFFSET, XHC_USBCMD_RUN);
- while (!XhcIsBitSet((UINTN)(XhciOpRegister + XHC_USBSTS_OFFSET), XHC_USBSTS_HALT)) {
- MicroSecondDelay (10);
- }
- }
-
- //
- // Reset host controller
- //
- XhcSetR32Bit((UINTN)XhciOpRegister + XHC_USBCMD_OFFSET, XHC_USBCMD_RESET);
-
- //
- // Ensure that the host controller is reset (RESET bit must be cleared after reset)
- //
- while (XhcIsBitSet((UINTN)XhciOpRegister + XHC_USBCMD_OFFSET, XHC_USBCMD_RESET)) {
- MicroSecondDelay (10);
- }
- }
-
- //
- // Initialize event ring
- //
- ZeroMem (&Instance->EventRing, sizeof (EVENT_RING));
- Status = CreateEventRing (Instance, &Instance->EventRing);
- ASSERT_EFI_ERROR (Status);
-
- //
- // Init IN and OUT endpoint context
- //
- Status = CreateDebugCapabilityContext (Instance);
- ASSERT_EFI_ERROR (Status);
-
- //
- // Init data buffer used to transfer
- //
- Instance->Urb.Data = (EFI_PHYSICAL_ADDRESS) (UINTN) AllocateAlignBuffer (XHC_DEBUG_PORT_DATA_LENGTH);
-
- //
- // Init DCDDI1 and DCDDI2
- //
- XhcWriteDebugReg (
- Instance,
- XHC_DC_DCDDI1,
- (UINT32)((XHCI_DEBUG_DEVICE_VENDOR_ID << 16) | XHCI_DEBUG_DEVICE_PROTOCOL)
- );
-
- XhcWriteDebugReg (
- Instance,
- XHC_DC_DCDDI2,
- (UINT32)((XHCI_DEBUG_DEVICE_REVISION << 16) | XHCI_DEBUG_DEVICE_PRODUCT_ID)
- );
-
- //
- // Set DCE bit and LSE bit to "1" in DCCTRL
- //
- XhcSetDebugRegBit (Instance, XHC_DC_DCCTRL, BIT1|BIT31);
-
- TimeOut = DivU64x32 (PcdGet64 (PcdXhciHostWaitTimeout), XHC_POLL_DELAY) + 1;
- while (TimeOut != 0) {
- //
- // Check if debug device is in configured state
- //
- Dcctrl = XhcReadDebugReg (Instance, XHC_DC_DCCTRL);
- if ((Dcctrl & BIT0) != 0) {
- //
- // Set the flag to indicate debug device is ready
- //
- Instance->Ready = TRUE;
- break;
- }
- MicroSecondDelay (XHC_POLL_DELAY);
- TimeOut--;
- }
-
- if (!Instance->Ready) {
- XhcClearDebugRegBit (Instance, XHC_DC_DCCTRL, BIT1|BIT31);
- } else {
- TestString = "Usb 3.0 Debug Message Start\n";
- Length = AsciiStrLen (TestString);
- XhcDataTransfer (
- Instance,
- EfiUsbDataOut,
- TestString,
- &Length,
- 0,
- &TransferResult
- );
- }
-
- //
- // Restore Command Register
- //
- PciWrite16 (PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command);
-
- return EFI_SUCCESS;
-}
-
-/**
- Update XHC hardware address when MMIO base is changed.
-
- @param Instance The XHCI Instance.
- @param XhcMmioBase XHCI MMIO base address.
-
-**/
-VOID
-FixUsb3InstanceResource (
- IN OUT USB3_DEBUG_PORT_INSTANCE *Instance,
- IN EFI_PHYSICAL_ADDRESS XhcMmioBase
- )
-{
- if ((Instance == NULL) || (Instance->XhcMmioBase == XhcMmioBase)) {
- return;
- }
-
- //
- // Need fix Instance data according to PCI resource
- //
- Instance->XhcMmioBase = XhcMmioBase;
- Instance->DebugCapabilityBase = XhcMmioBase + Instance->DebugCapabilityOffset;
- Instance->XhciOpRegister = XhcMmioBase + MmioRead8 ((UINTN)XhcMmioBase);
-}
-
-/**
- Save USB3 instance address.
-
- @param[in] Instance The XHCI Instance.
-
-**/
-VOID
-SaveUsb3InstanceAddress (
- IN USB3_DEBUG_PORT_INSTANCE *Instance
- )
-{
- UINT16 Command;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
-
- Command = GetXhciPciCommand ();
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
-
- //
- // Set Command Register
- //
- if ((Command & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) {
- PciWrite16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE);
- PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- }
-
- //
- // After debug device is finished to enumerate, use DCDDI2 register to store instance address
- //
- XhcWriteDebugReg (
- Instance,
- XHC_DC_DCDDI2,
- (UINT32)(UINTN)Instance
- );
-
- //
- // Restore Command Register
- //
- PciWrite16 (PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command);
-}
-
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.c
deleted file mode 100644
index 8c3dd999db..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxe.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/** @file
- Usb3 Debug Port library instance
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-#include <PiDxe.h>
-#include <Library/SerialPortLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-#include <Library/PciLib.h>
-#include <Library/PcdLib.h>
-#include <Library/TimerLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-#include <Protocol/SmmBase2.h>
-#include <Protocol/SmmAccess2.h>
-#include "Usb3DebugPortLibInternal.h"
-
-extern EFI_SMRAM_DESCRIPTOR mSmramCheckRanges[MAX_SMRAM_RANGE];
-extern UINTN mSmramCheckRangeCount;
-extern BOOLEAN mUsb3InSmm;
-extern UINT64 mUsb3MmioSize;
-extern BOOLEAN mUsb3GetCapSuccess;
-
-GUID gUsb3DbgGuid = USB3_DBG_GUID;
-
-USB3_DEBUG_PORT_CONTROLLER mUsb3DebugPort;
-USB3_DEBUG_PORT_INSTANCE *mUsb3Instance = NULL;
-
-/**
- Return XHCI MMIO base address.
-
-**/
-EFI_PHYSICAL_ADDRESS
-GetXhciBaseAddress (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- EFI_PHYSICAL_ADDRESS Address;
- UINT32 Low;
- UINT32 High;
-
- if (mUsb3DebugPort.Controller == 0) {
- mUsb3DebugPort.Controller = GetUsb3DebugPortController();
- }
-
- Bus = mUsb3DebugPort.PciAddress.Bus;
- Device = mUsb3DebugPort.PciAddress.Device;
- Function = mUsb3DebugPort.PciAddress.Function;
-
- Low = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET));
- High = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4));
- Address = (EFI_PHYSICAL_ADDRESS) (LShiftU64 ((UINT64) High, 32) | Low);
- //
- // Mask other parts which are not part of base address
- //
- Address &= XHCI_BASE_ADDRESS_64_BIT_MASK;
- return Address;
-}
-
-/**
- Return XHCI debug instance address.
-
-**/
-USB3_DEBUG_PORT_INSTANCE *
-GetUsb3DebugPortInstance (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
- UINT64 CapabilityPointer;
- UINT32 Capability;
- BOOLEAN Flag;
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT16 Command;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
-
- Instance = NULL;
-
- XhcMmioBase = GetXhciBaseAddress ();
-
- if ((XhcMmioBase == 0) || (XhcMmioBase == XHCI_BASE_ADDRESS_64_BIT_MASK)) {
- return NULL;
- }
-
- if (mUsb3Instance != NULL) {
- FixUsb3InstanceResource (mUsb3Instance, XhcMmioBase);
- return mUsb3Instance;
- }
-
- Command = GetXhciPciCommand ();
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
-
- //
- // Set Command Register
- //
- if ((Command & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) {
- PciWrite16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE);
- PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- }
-
- //
- // Calculate capability offset from HCCPARAMS [16:31], in 32-bit words
- //
- CapabilityPointer = XhcMmioBase + (MmioRead32 ((UINTN)(XhcMmioBase + XHC_HCCPARAMS_OFFSET)) >> 16) * 4;
-
- //
- // Search XHCI debug capability
- //
- Flag = FALSE;
- Capability = MmioRead32 ((UINTN)CapabilityPointer);
- while (TRUE) {
- if ((Capability & XHC_CAPABILITY_ID_MASK) == PCI_CAPABILITY_ID_DEBUG_PORT) {
- Flag = TRUE;
- break;
- }
- if ((((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) & XHC_CAPABILITY_ID_MASK) == 0) {
- //
- // Reach the end of list, quit
- //
- break;
- }
- CapabilityPointer += ((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) * 4;
- Capability = MmioRead32 ((UINTN)CapabilityPointer);
- }
-
- if (Flag) {
- Instance = (USB3_DEBUG_PORT_INSTANCE *)(UINTN) MmioRead32 ((UINTN) (CapabilityPointer + XHC_DC_DCDDI2));
-
- if (Instance != NULL) {
- FixUsb3InstanceResource (Instance, XhcMmioBase);
- }
- }
-
- //
- // Restore Command Register
- //
- PciWrite16(PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command);
-
- return Instance;
-}
-
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The USB3 debug port was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3Initialize (
- VOID
- )
-{
- //
- // Leave it empty, we assume PEI phase already do initialization
- //
- return RETURN_SUCCESS;
-}
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3InitializeReal (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE UsbDbg;
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PHYSICAL_ADDRESS Address;
- EFI_STATUS Status;
-
- if ((gST == NULL) || (gBS == NULL)) {
- //
- // gST and gBS have not been initialized yet
- //
- return EFI_DEVICE_ERROR;
- }
-
- Status = EfiGetSystemConfigurationTable (&gUsb3DbgGuid, (VOID **) &mUsb3Instance);
- if (!EFI_ERROR (Status)) {
- return RETURN_SUCCESS;
- }
-
- //
- // It is first time to run DXE instance, copy Instance from Hob to ACPINvs
- // NOTE: Hob is not ready at this time, so copy it from XHCI register.
- //
- Instance = GetUsb3DebugPortInstance ();
- if (Instance == NULL) {
- //
- // Initialize USB debug
- //
- SetMem (&UsbDbg, sizeof(UsbDbg), 0);
- DiscoverUsb3DebugPort (&UsbDbg);
- if (UsbDbg.DebugSupport) {
- InitializeUsb3DebugPort (&UsbDbg);
- }
- Instance = &UsbDbg;
- }
- Address = SIZE_4GB;
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (sizeof (USB3_DEBUG_PORT_INSTANCE)),
- &Address
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- CopyMem (
- (VOID *)(UINTN)Address,
- Instance,
- sizeof (USB3_DEBUG_PORT_INSTANCE)
- );
- mUsb3Instance = (USB3_DEBUG_PORT_INSTANCE *)(UINTN)Address;
-
- Status = gBS->InstallConfigurationTable (&gUsb3DbgGuid, mUsb3Instance);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- if (mUsb3Instance->DebugSupport) {
- SaveUsb3InstanceAddress (mUsb3Instance);
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Calculate the size of XHCI MMIO space.
-
- @retval TURE The XHCI MMIO is in SMRAM ranges.
- @retval FALSE The XHCI MMIO is out of SMRAM ranges.
-**/
-UINT64
-CalculateMmioSize (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT32 Value;
- UINT32 Mask;
- UINT64 MmioSize;
- UINT16 Command;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
-
- Mask = 0xFFFFFFF0;
- MmioSize = 0;
-
- XhcMmioBase = GetXhciBaseAddress ();
-
- //
- // Disable MSE
- //
- Command = PciRead16 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- PciWrite16 (PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command & ~(EFI_PCI_COMMAND_MEMORY_SPACE));
-
- //
- // Get Mmio Size
- //
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET), 0xFFFFFFFF);
- Value = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET));
-
- switch (Value & 0x07) {
- case 0x0:
- //
- // Memory space: anywhere in 32 bit address space
- //
- MmioSize = (~(Value & Mask)) + 1;
- break;
- case 0x4:
- //
- // Memory space: anywhere in 64 bit address space
- //
- MmioSize = Value & Mask;
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4), 0xFFFFFFFF);
- Value = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4));
- //
- // Fix the length to support some spefic 64 bit BAR
- //
- Value |= ((UINT32)(-1) << HighBitSet32 (Value));
- //
- // Calculate the size of 64bit bar
- //
- MmioSize |= LShiftU64 ((UINT64) Value, 32);
- MmioSize = (~(MmioSize)) + 1;
- break;
- default:
- //
- // Unknown BAR type
- //
- MmioSize = (~(Value & Mask)) + 1;
- break;
- };
-
-
- //
- // Restore MMIO address
- //
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET), (UINT32)XhcMmioBase);
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4), (UINT32) (XhcMmioBase >> 32));
-
- PciWrite16 (PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE);
-
- return MmioSize;
-}
-
-/**
- The constructor function initialize USB3 debug port.
-
- @param ImageHandle The firmware allocated handle for the EFI image.
- @param SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
-
-**/
-EFI_STATUS
-EFIAPI
-Usb3DebugPortLibDxeConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_SMM_BASE2_PROTOCOL *SmmBase;
- EFI_SMM_ACCESS2_PROTOCOL *SmmAccess;
- UINTN Size;
- EFI_STATUS Status;
-
- //
- // Do real initialization here, because we need copy data from Hob to ACPINvs.
- // We must do it in constructor because it depends on UefiBootServicesTableLib.
- //
- if (FeaturePcdGet (PcdStatusCodeUseUsb3Serial)) {
- USB3InitializeReal ();
- }
-
- mUsb3MmioSize = CalculateMmioSize ();
-
- if (gBS != NULL) {
- SmmBase = NULL;
- Status = gBS->LocateProtocol (&gEfiSmmBase2ProtocolGuid, NULL, (VOID **)&SmmBase);
- if (!EFI_ERROR (Status)) {
- SmmBase->InSmm(SmmBase, &mUsb3InSmm);
- }
-
- if (mUsb3InSmm) {
- //
- // Get SMRAM information
- //
- SmmAccess = NULL;
- Status = gBS->LocateProtocol (&gEfiSmmAccess2ProtocolGuid, NULL, (VOID **)&SmmAccess);
- if (!EFI_ERROR (Status)) {
- Size = sizeof (mSmramCheckRanges);
-
- Status = SmmAccess->GetCapabilities (SmmAccess, &Size, mSmramCheckRanges);
- if (!EFI_ERROR (Status)) {
- mSmramCheckRangeCount = Size / sizeof (EFI_SMRAM_DESCRIPTOR);
- }
- }
- }
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Allocate aligned memory for XHC's usage.
-
- @param BufferSize The size, in bytes, of the Buffer.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID*
-AllocateAlignBuffer (
- IN UINTN BufferSize
- )
-{
- VOID *Buf;
- EFI_PHYSICAL_ADDRESS Address;
- EFI_STATUS Status;
-
- Buf = NULL;
-
- if (gBS != NULL) {
- Address = 0xFFFFFFFF;
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (BufferSize),
- &Address
- );
- if (!EFI_ERROR (Status)) {
- Buf = (VOID *)(UINTN)Address;
- }
- }
-
- return Buf;
-}
-
-/**
- Check whether AllocatePages in permanent memory is ready.
-
- @retval TRUE AllocatePages in permanent memory is ready.
- @retval FALSE AllocatePages in permanent memory is not ready.
-
-**/
-BOOLEAN
-IsAllocatePagesReady (
- VOID
- )
-{
- if (gBS != NULL) {
- return TRUE;
- }
-
- return FALSE;
-}
-
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.c
deleted file mode 100644
index 97c3f88113..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibDxeIoMmu.c
+++ /dev/null
@@ -1,828 +0,0 @@
-/** @file
- Usb3 Debug Port library instance
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-#include <PiDxe.h>
-#include <Library/SerialPortLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/UefiLib.h>
-#include <Library/PciLib.h>
-#include <Library/PcdLib.h>
-#include <Library/TimerLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-#include <Protocol/SmmBase2.h>
-#include <Protocol/SmmAccess2.h>
-#include <Protocol/IoMmu.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/DxeSmmReadyToLock.h>
-#include "Usb3DebugPortLibInternal.h"
-
-extern EFI_SMRAM_DESCRIPTOR mSmramCheckRanges[MAX_SMRAM_RANGE];
-extern UINTN mSmramCheckRangeCount;
-extern BOOLEAN mUsb3InSmm;
-extern UINT64 mUsb3MmioSize;
-extern BOOLEAN mUsb3GetCapSuccess;
-
-GUID gUsb3DbgGuid = USB3_DBG_GUID;
-
-USB3_DEBUG_PORT_CONTROLLER mUsb3DebugPort;
-USB3_DEBUG_PORT_INSTANCE *mUsb3Instance = NULL;
-EFI_PCI_IO_PROTOCOL *mUsb3PciIo = NULL;
-
-/**
- Creates a named event that can be signaled.
-
- This function creates an event using NotifyTpl, NoifyFunction.
- If Name is NULL, then ASSERT().
- If NotifyTpl is not a legal TPL value, then ASSERT().
- If NotifyFunction is NULL, then ASSERT().
-
- @param Name Supplies the GUID name of the event.
- @param NotifyTpl Supplies the task priority level of the event notifications.
- @param NotifyFunction Supplies the function to notify when the event is signaled.
- @param Event A pointer to the event created.
-
- @retval EFI_SUCCESS A named event was created.
- @retval EFI_OUT_OF_RESOURCES There are not enough resource to create the named event.
-
-**/
-EFI_STATUS
-EFIAPI
-Usb3NamedEventListen (
- IN CONST EFI_GUID *Name,
- IN EFI_TPL NotifyTpl,
- IN EFI_EVENT_NOTIFY NotifyFunction,
- IN EFI_EVENT *Event
- )
-{
- EFI_STATUS Status;
- VOID *RegistrationLocal;
-
- ASSERT (Name != NULL);
- ASSERT (NotifyFunction != NULL);
- ASSERT (NotifyTpl <= TPL_HIGH_LEVEL);
-
- //
- // Create event
- //
- Status = gBS->CreateEvent (
- EVT_NOTIFY_SIGNAL,
- NotifyTpl,
- NotifyFunction,
- NULL,
- Event
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Register for an installation of protocol interface
- //
- Status = gBS->RegisterProtocolNotify (
- (EFI_GUID *) Name,
- *Event,
- &RegistrationLocal
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-
-/**
- USB3 map one DMA buffer.
-
- @param PciIo Pointer to PciIo for USB3 debug port.
- @param Address DMA buffer address to be mapped.
- @param NumberOfBytes Number of bytes to be mapped.
-
-**/
-VOID
-Usb3MapOneDmaBuffer (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN EFI_PHYSICAL_ADDRESS Address,
- IN UINTN NumberOfBytes
- )
-{
- EFI_STATUS Status;
- VOID *HostAddress;
- EFI_PHYSICAL_ADDRESS DeviceAddress;
- VOID *Mapping;
-
- HostAddress = (VOID *) (UINTN) Address;
- Status = PciIo->Map (
- PciIo,
- EfiPciIoOperationBusMasterCommonBuffer,
- HostAddress,
- &NumberOfBytes,
- &DeviceAddress,
- &Mapping
- );
- ASSERT_EFI_ERROR (Status);
- ASSERT (DeviceAddress == ((EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress));
-}
-
-/**
- USB3 map DMA buffers.
-
- @param Instance Pointer to USB3 debug port instance.
- @param PciIo Pointer to PciIo for USB3 debug port.
-
-**/
-VOID
-Usb3MapDmaBuffers (
- IN USB3_DEBUG_PORT_INSTANCE *Instance,
- IN EFI_PCI_IO_PROTOCOL *PciIo
- )
-{
- Usb3MapOneDmaBuffer (
- PciIo,
- Instance->Urb.Data,
- XHC_DEBUG_PORT_DATA_LENGTH
- );
-
- Usb3MapOneDmaBuffer (
- PciIo,
- Instance->TransferRingIn.RingSeg0,
- sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER
- );
-
- Usb3MapOneDmaBuffer (
- PciIo,
- Instance->TransferRingOut.RingSeg0,
- sizeof (TRB_TEMPLATE) * TR_RING_TRB_NUMBER
- );
-
- Usb3MapOneDmaBuffer (
- PciIo,
- Instance->EventRing.EventRingSeg0,
- sizeof (TRB_TEMPLATE) * EVENT_RING_TRB_NUMBER
- );
-
- Usb3MapOneDmaBuffer (
- PciIo,
- Instance->EventRing.ERSTBase,
- sizeof (EVENT_RING_SEG_TABLE_ENTRY) * ERST_NUMBER
- );
-
- Usb3MapOneDmaBuffer (
- PciIo,
- Instance->DebugCapabilityContext,
- sizeof (XHC_DC_CONTEXT)
- );
-
- Usb3MapOneDmaBuffer (
- PciIo,
- ((XHC_DC_CONTEXT *) (UINTN) Instance->DebugCapabilityContext)->DbcInfoContext.String0DescAddress,
- STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN
- );
-}
-
-/**
- Invoke a notification event
-
- @param[in] Event Event whose notification function is being invoked.
- @param[in] Context The pointer to the notification function's context,
- which is implementation-dependent.
-
-**/
-VOID
-EFIAPI
-Usb3DxeSmmReadyToLockNotify (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- ASSERT (mUsb3Instance != NULL);
-
- //
- // For the case that the USB3 debug port instance and DMA buffers are
- // from PEI HOB with IOMMU enabled.
- // Reinitialize USB3 debug port with granted DXE DMA buffer accessible
- // by SMM environment.
- //
- InitializeUsb3DebugPort (mUsb3Instance);
-
- SaveUsb3InstanceAddress (mUsb3Instance);
-
- gBS->CloseEvent (Event);
-}
-
-/**
- USB3 get IOMMU protocol.
-
- @return Pointer to IOMMU protocol.
-
-**/
-EDKII_IOMMU_PROTOCOL *
-Usb3GetIoMmu (
- VOID
- )
-{
- EFI_STATUS Status;
- EDKII_IOMMU_PROTOCOL *IoMmu;
-
- IoMmu = NULL;
- Status = gBS->LocateProtocol (
- &gEdkiiIoMmuProtocolGuid,
- NULL,
- (VOID **) &IoMmu
- );
- if (!EFI_ERROR (Status) && (IoMmu != NULL)) {
- return IoMmu;
- }
-
- return NULL;
-}
-
-/**
- Invoke a notification event
-
- @param[in] Event Event whose notification function is being invoked.
- @param[in] Context The pointer to the notification function's context,
- which is implementation-dependent.
-
-**/
-VOID
-EFIAPI
-Usb3PciIoNotify (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-{
- EFI_STATUS Status;
- UINTN PciIoHandleCount;
- EFI_HANDLE *PciIoHandleBuffer;
- UINTN Index;
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINTN PciSegment;
- UINTN PciBusNumber;
- UINTN PciDeviceNumber;
- UINTN PciFunctionNumber;
- EFI_EVENT SmmReadyToLockEvent;
-
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiPciIoProtocolGuid,
- NULL,
- &PciIoHandleCount,
- &PciIoHandleBuffer
- );
- if (!EFI_ERROR (Status) &&
- (PciIoHandleBuffer != NULL) &&
- (PciIoHandleCount != 0)) {
- for (Index = 0; Index < PciIoHandleCount; Index++) {
- Status = gBS->HandleProtocol (
- PciIoHandleBuffer[Index],
- &gEfiPciIoProtocolGuid,
- (VOID **) &PciIo
- );
- ASSERT_EFI_ERROR (Status);
- Status = PciIo->GetLocation (PciIo, &PciSegment, &PciBusNumber, &PciDeviceNumber, &PciFunctionNumber);
- ASSERT_EFI_ERROR (Status);
- if ((PciBusNumber == mUsb3DebugPort.PciAddress.Bus) &&
- (PciDeviceNumber == mUsb3DebugPort.PciAddress.Device) &&
- (PciFunctionNumber == mUsb3DebugPort.PciAddress.Function)) {
- //
- // Found the PciIo for USB3 debug port.
- //
- ASSERT (mUsb3Instance != NULL);
- if (Usb3GetIoMmu () != NULL) {
- Usb3MapDmaBuffers (mUsb3Instance, PciIo);
-
- if (mUsb3Instance->FromHob) {
- mUsb3PciIo = PciIo;
- Usb3NamedEventListen (
- &gEfiDxeSmmReadyToLockProtocolGuid,
- TPL_NOTIFY,
- Usb3DxeSmmReadyToLockNotify,
- &SmmReadyToLockEvent
- );
- }
- }
- gBS->CloseEvent (Event);
- break;
- }
- }
-
- gBS->FreePool (PciIoHandleBuffer);
- }
-}
-
-/**
- Return XHCI MMIO base address.
-
-**/
-EFI_PHYSICAL_ADDRESS
-GetXhciBaseAddress (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- EFI_PHYSICAL_ADDRESS Address;
- UINT32 Low;
- UINT32 High;
-
- if (mUsb3DebugPort.Controller == 0) {
- mUsb3DebugPort.Controller = GetUsb3DebugPortController();
- }
-
- Bus = mUsb3DebugPort.PciAddress.Bus;
- Device = mUsb3DebugPort.PciAddress.Device;
- Function = mUsb3DebugPort.PciAddress.Function;
-
- Low = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET));
- High = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4));
- Address = (EFI_PHYSICAL_ADDRESS) (LShiftU64 ((UINT64) High, 32) | Low);
- //
- // Mask other parts which are not part of base address
- //
- Address &= XHCI_BASE_ADDRESS_64_BIT_MASK;
- return Address;
-}
-
-/**
- Return XHCI debug instance address.
-
-**/
-USB3_DEBUG_PORT_INSTANCE *
-GetUsb3DebugPortInstance (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
- UINT64 CapabilityPointer;
- UINT32 Capability;
- BOOLEAN Flag;
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT16 Command;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
-
- Instance = NULL;
-
- XhcMmioBase = GetXhciBaseAddress ();
-
- if ((XhcMmioBase == 0) || (XhcMmioBase == XHCI_BASE_ADDRESS_64_BIT_MASK)) {
- return NULL;
- }
-
- if (mUsb3Instance != NULL) {
- FixUsb3InstanceResource (mUsb3Instance, XhcMmioBase);
- return mUsb3Instance;
- }
-
- Command = GetXhciPciCommand ();
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
-
- //
- // Set Command Register
- //
- if ((Command & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) {
- PciWrite16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE);
- PciRead16(PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- }
-
- //
- // Calculate capability offset from HCCPARAMS [16:31], in 32-bit words
- //
- CapabilityPointer = XhcMmioBase + (MmioRead32 ((UINTN)(XhcMmioBase + XHC_HCCPARAMS_OFFSET)) >> 16) * 4;
-
- //
- // Search XHCI debug capability
- //
- Flag = FALSE;
- Capability = MmioRead32 ((UINTN)CapabilityPointer);
- while (TRUE) {
- if ((Capability & XHC_CAPABILITY_ID_MASK) == PCI_CAPABILITY_ID_DEBUG_PORT) {
- Flag = TRUE;
- break;
- }
- if ((((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) & XHC_CAPABILITY_ID_MASK) == 0) {
- //
- // Reach the end of list, quit
- //
- break;
- }
- CapabilityPointer += ((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) * 4;
- Capability = MmioRead32 ((UINTN)CapabilityPointer);
- }
-
- if (Flag) {
- Instance = (USB3_DEBUG_PORT_INSTANCE *)(UINTN) MmioRead32 ((UINTN) (CapabilityPointer + XHC_DC_DCDDI2));
-
- if (Instance != NULL) {
- FixUsb3InstanceResource (Instance, XhcMmioBase);
- }
- }
-
- //
- // Restore Command Register
- //
- PciWrite16(PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command);
-
- return Instance;
-}
-
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The USB3 debug port was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3Initialize (
- VOID
- )
-{
- //
- // Leave it empty, we assume PEI phase already do initialization
- //
- return RETURN_SUCCESS;
-}
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3InitializeReal (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE UsbDbg;
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PHYSICAL_ADDRESS Address;
- EFI_STATUS Status;
- EFI_EVENT Event;
-
- if ((gST == NULL) || (gBS == NULL)) {
- //
- // gST and gBS have not been initialized yet
- //
- return EFI_DEVICE_ERROR;
- }
-
- Status = EfiGetSystemConfigurationTable (&gUsb3DbgGuid, (VOID **) &mUsb3Instance);
- if (!EFI_ERROR (Status)) {
- goto Done;
- }
-
- //
- // It is first time to run DXE instance, copy Instance from Hob to ACPINvs
- // NOTE: Hob is not ready at this time, so copy it from XHCI register.
- //
- Instance = GetUsb3DebugPortInstance ();
- if (Instance == NULL) {
- //
- // Initialize USB debug
- //
- SetMem (&UsbDbg, sizeof(UsbDbg), 0);
- DiscoverUsb3DebugPort (&UsbDbg);
- if (UsbDbg.DebugSupport) {
- InitializeUsb3DebugPort (&UsbDbg);
- }
- Instance = &UsbDbg;
- }
- Address = SIZE_4GB;
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (sizeof (USB3_DEBUG_PORT_INSTANCE)),
- &Address
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- CopyMem (
- (VOID *)(UINTN)Address,
- Instance,
- sizeof (USB3_DEBUG_PORT_INSTANCE)
- );
- mUsb3Instance = (USB3_DEBUG_PORT_INSTANCE *)(UINTN)Address;
-
- Status = gBS->InstallConfigurationTable (&gUsb3DbgGuid, mUsb3Instance);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- if (mUsb3Instance->DebugSupport) {
- SaveUsb3InstanceAddress (mUsb3Instance);
- }
-
-Done:
- if ((mUsb3Instance != NULL) && mUsb3Instance->Ready && (mUsb3Instance->PciIoEvent == 0)) {
- Status = Usb3NamedEventListen (
- &gEfiPciIoProtocolGuid,
- TPL_NOTIFY,
- Usb3PciIoNotify,
- &Event
- );
- if (!EFI_ERROR (Status)) {
- mUsb3Instance->PciIoEvent = (EFI_PHYSICAL_ADDRESS) (UINTN) Event;
- }
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Calculate the size of XHCI MMIO space.
-
- @retval TURE The XHCI MMIO is in SMRAM ranges.
- @retval FALSE The XHCI MMIO is out of SMRAM ranges.
-**/
-UINT64
-CalculateMmioSize (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- UINT32 Value;
- UINT32 Mask;
- UINT64 MmioSize;
- UINT16 Command;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
-
- Mask = 0xFFFFFFF0;
- MmioSize = 0;
-
- XhcMmioBase = GetXhciBaseAddress ();
-
- //
- // Disable MSE
- //
- Command = PciRead16 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_COMMAND_OFFSET));
- PciWrite16 (PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command & ~(EFI_PCI_COMMAND_MEMORY_SPACE));
-
- //
- // Get Mmio Size
- //
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET), 0xFFFFFFFF);
- Value = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET));
-
- switch (Value & 0x07) {
- case 0x0:
- //
- // Memory space: anywhere in 32 bit address space
- //
- MmioSize = (~(Value & Mask)) + 1;
- break;
- case 0x4:
- //
- // Memory space: anywhere in 64 bit address space
- //
- MmioSize = Value & Mask;
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4), 0xFFFFFFFF);
- Value = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4));
- //
- // Fix the length to support some spefic 64 bit BAR
- //
- Value |= ((UINT32)(-1) << HighBitSet32 (Value));
- //
- // Calculate the size of 64bit bar
- //
- MmioSize |= LShiftU64 ((UINT64) Value, 32);
- MmioSize = (~(MmioSize)) + 1;
- break;
- default:
- //
- // Unknown BAR type
- //
- MmioSize = (~(Value & Mask)) + 1;
- break;
- };
-
-
- //
- // Restore MMIO address
- //
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET), (UINT32)XhcMmioBase);
- PciWrite32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4), (UINT32) (XhcMmioBase >> 32));
-
- PciWrite16 (PCI_LIB_ADDRESS (Bus, Device, Function, PCI_COMMAND_OFFSET), Command | EFI_PCI_COMMAND_MEMORY_SPACE);
-
- return MmioSize;
-}
-
-/**
- The constructor function initialize USB3 debug port.
-
- @param ImageHandle The firmware allocated handle for the EFI image.
- @param SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
-
-**/
-EFI_STATUS
-EFIAPI
-Usb3DebugPortLibDxeConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_SMM_BASE2_PROTOCOL *SmmBase;
- EFI_SMM_ACCESS2_PROTOCOL *SmmAccess;
- UINTN Size;
- EFI_STATUS Status;
-
- //
- // Do real initialization here, because we need copy data from Hob to ACPINvs.
- // We must do it in constructor because it depends on UefiBootServicesTableLib.
- //
- if (FeaturePcdGet (PcdStatusCodeUseUsb3Serial)) {
- USB3InitializeReal ();
- }
-
- mUsb3MmioSize = CalculateMmioSize ();
-
- if (gBS != NULL) {
- SmmBase = NULL;
- Status = gBS->LocateProtocol (&gEfiSmmBase2ProtocolGuid, NULL, (VOID **)&SmmBase);
- if (!EFI_ERROR (Status)) {
- SmmBase->InSmm(SmmBase, &mUsb3InSmm);
- }
-
- if (mUsb3InSmm) {
- //
- // Get SMRAM information
- //
- SmmAccess = NULL;
- Status = gBS->LocateProtocol (&gEfiSmmAccess2ProtocolGuid, NULL, (VOID **)&SmmAccess);
- if (!EFI_ERROR (Status)) {
- Size = sizeof (mSmramCheckRanges);
-
- Status = SmmAccess->GetCapabilities (SmmAccess, &Size, mSmramCheckRanges);
- if (!EFI_ERROR (Status)) {
- mSmramCheckRangeCount = Size / sizeof (EFI_SMRAM_DESCRIPTOR);
- }
- }
- }
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- The destructor function.
-
- @param ImageHandle The firmware allocated handle for the EFI image.
- @param SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS The destructor always returns EFI_SUCCESS.
-
-**/
-EFI_STATUS
-EFIAPI
-Usb3DebugPortLibDxeDestructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- if ((mUsb3Instance != NULL) && (mUsb3Instance->PciIoEvent != 0)) {
- //
- // Close the event created.
- //
- gBS->CloseEvent ((EFI_EVENT) (UINTN) mUsb3Instance->PciIoEvent);
- mUsb3Instance->PciIoEvent = 0;
- }
- return EFI_SUCCESS;
-}
-
-/**
- Allocates pages that are suitable for an OperationBusMasterCommonBuffer or
- OperationBusMasterCommonBuffer64 mapping.
-
- @param PciIo Pointer to PciIo for USB3 debug port.
- @param Pages The number of pages to allocate.
- @param Address A pointer to store the base system memory address of the
- allocated range.
-
- @retval EFI_SUCCESS The requested memory pages were allocated.
- @retval EFI_UNSUPPORTED Attributes is unsupported. The only legal attribute bits are
- MEMORY_WRITE_COMBINE and MEMORY_CACHED.
- @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
- @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
-
-**/
-EFI_STATUS
-Usb3AllocateDmaBuffer (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINTN Pages,
- OUT VOID **Address
- )
-{
- EFI_STATUS Status;
-
- *Address = NULL;
- Status = PciIo->AllocateBuffer (
- PciIo,
- AllocateAnyPages,
- EfiRuntimeServicesData,
- Pages,
- Address,
- 0
- );
- if (!EFI_ERROR (Status)) {
- Usb3MapOneDmaBuffer (
- PciIo,
- (EFI_PHYSICAL_ADDRESS) (UINTN) *Address,
- EFI_PAGES_TO_SIZE (Pages)
- );
- }
- return Status;
-}
-
-/**
- Allocate aligned memory for XHC's usage.
-
- @param BufferSize The size, in bytes, of the Buffer.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID*
-AllocateAlignBuffer (
- IN UINTN BufferSize
- )
-{
- VOID *Buf;
- EFI_PHYSICAL_ADDRESS Address;
- EFI_STATUS Status;
-
- Buf = NULL;
-
- if (gBS != NULL) {
- if (mUsb3PciIo != NULL) {
- Usb3AllocateDmaBuffer (
- mUsb3PciIo,
- EFI_SIZE_TO_PAGES (BufferSize),
- &Buf
- );
- } else {
- Address = 0xFFFFFFFF;
- Status = gBS->AllocatePages (
- AllocateMaxAddress,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (BufferSize),
- &Address
- );
- if (!EFI_ERROR (Status)) {
- Buf = (VOID *)(UINTN)Address;
- }
- }
- }
-
- return Buf;
-}
-
-/**
- Check whether AllocatePages in permanent memory is ready.
-
- @retval TRUE AllocatePages in permanent memory is ready.
- @retval FALSE AllocatePages in permanent memory is not ready.
-
-**/
-BOOLEAN
-IsAllocatePagesReady (
- VOID
- )
-{
- if (gBS != NULL) {
- return TRUE;
- }
-
- return FALSE;
-}
-
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.c
deleted file mode 100644
index 319cebecbb..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibNull.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/** @file
- Usb Debug Port library NULL instance
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-/**
- Initialize the USB3 debug port hardware.
-
- If no initialization is required, then return RETURN_SUCCESS.
- If the serial device was successfully initialized, then return RETURN_SUCCESS.
- If the serial device could not be initialized, then return RETURN_DEVICE_ERROR.
-
- @retval RETURN_SUCCESS The serial device was initialized.
- @retval RETURN_DEVICE_ERROR The serial device could not be initialized.
-
-**/
-RETURN_STATUS
-EFIAPI
-Usb3DebugPortInitialize (
- VOID
- )
-{
- return RETURN_SUCCESS;
-}
-
-/**
- Write data from buffer to USB3 debug port.
-
- Writes NumberOfBytes data bytes from Buffer to the serial device.
- The number of bytes actually written to the serial device is returned.
- If the return value is less than NumberOfBytes, then the write operation failed.
- If Buffer is NULL, then ASSERT().
- If NumberOfBytes is zero, then return 0.
-
- @param Buffer Pointer to the data buffer to be written.
- @param NumberOfBytes Number of bytes to written to the serial device.
-
- @retval 0 NumberOfBytes is 0.
- @retval >0 The number of bytes written to the serial device.
- If this value is less than NumberOfBytes, then the read operation failed.
-
-**/
-UINTN
-EFIAPI
-Usb3DebugPortWrite (
- IN UINT8 *Buffer,
- IN UINTN NumberOfBytes
- )
-{
- return 0;
-}
-
-
-/**
- Read data from USB3 debug port and save the datas in buffer.
-
- Reads NumberOfBytes data bytes from a serial device into the buffer
- specified by Buffer. The number of bytes actually read is returned.
- If the return value is less than NumberOfBytes, then the rest operation failed.
- If Buffer is NULL, then ASSERT().
- If NumberOfBytes is zero, then return 0.
-
- @param Buffer Pointer to the data buffer to store the data read from the serial device.
- @param NumberOfBytes Number of bytes which will be read.
-
- @retval 0 Read data failed, no data is to be read.
- @retval >0 Actual number of bytes read from serial device.
-
-**/
-UINTN
-EFIAPI
-Usb3DebugPortRead (
- OUT UINT8 *Buffer,
- IN UINTN NumberOfBytes
- )
-{
- return 0;
-}
-
-/**
- Polls a USB3 debug port to see if there is any data waiting to be read.
-
- Polls a serial device to see if there is any data waiting to be read.
- If there is data waiting to be read from the serial device, then TRUE is returned.
- If there is no data waiting to be read from the serial device, then FALSE is returned.
-
- @retval TRUE Data is waiting to be read from the serial device.
- @retval FALSE There is no data waiting to be read from the serial device.
-
-**/
-BOOLEAN
-EFIAPI
-Usb3DebugPortPoll (
- VOID
- )
-{
- return FALSE;
-}
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.c
deleted file mode 100644
index a1e0bdbf6d..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPei.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/** @file
- Usb Debug Port library instance
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-#include <PiPei.h>
-#include <Library/SerialPortLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PciLib.h>
-#include <Library/HobLib.h>
-#include <Library/PcdLib.h>
-#include <Library/TimerLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Ppi/MemoryDiscovered.h>
-#include "Usb3DebugPortLibInternal.h"
-
-GUID gUsb3DbgGuid = USB3_DBG_GUID;
-
-/**
- Return XHCI MMIO base address.
-
-**/
-EFI_PHYSICAL_ADDRESS
-GetXhciBaseAddress (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- EFI_PHYSICAL_ADDRESS Address;
- UINT32 Low;
- UINT32 High;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
- Low = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET));
- High = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4));
- Address = (EFI_PHYSICAL_ADDRESS) (LShiftU64 ((UINT64) High, 32) | Low);
-
- //
- // Mask other parts which are not part of base address
- //
- Address &= XHCI_BASE_ADDRESS_64_BIT_MASK;
- return Address;
-}
-
-/**
- Return XHCI debug instance address.
-
-**/
-USB3_DEBUG_PORT_INSTANCE *
-GetUsb3DebugPortInstance (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
-
- Hob.Raw = GetFirstGuidHob (&gUsb3DbgGuid);
- if (Hob.Raw == NULL) {
- return NULL;
- }
- Instance = GET_GUID_HOB_DATA (Hob.Guid);
-
- //
- // Update XHCI MMIO base address
- //
- XhcMmioBase = GetXhciBaseAddress ();
-
- FixUsb3InstanceResource (Instance, XhcMmioBase);
-
- return Instance;
-}
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3Initialize (
- VOID
- )
-{
- return EFI_SUCCESS;
-}
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3InitializeReal (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE UsbDbg;
- VOID *DataPtr;
- EFI_PEI_HOB_POINTERS Hob;
-
- //
- // USB Initilization has to be done only once. So this function should just return when
- // it is called more than once.
- //
- Hob.Raw = GetFirstGuidHob (&gUsb3DbgGuid);
- if (Hob.Raw != NULL) {
- return RETURN_SUCCESS;
- }
-
- //
- // Initialize USB debug for PEI at the first time
- //
- SetMem (&UsbDbg, sizeof(UsbDbg), 0);
- UsbDbg.FromHob = TRUE;
- DiscoverUsb3DebugPort (&UsbDbg);
- if (UsbDbg.DebugSupport) {
- InitializeUsb3DebugPort (&UsbDbg);
- }
-
- //
- // Save Instance into HOB
- //
- DataPtr = BuildGuidDataHob (
- &gUsb3DbgGuid,
- (VOID*) &UsbDbg,
- sizeof (UsbDbg)
- );
-
- if (UsbDbg.DebugSupport) {
- SaveUsb3InstanceAddress ((USB3_DEBUG_PORT_INSTANCE *) DataPtr);
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Allocate aligned memory for XHC's usage.
-
- @param BufferSize The size, in bytes, of the Buffer.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID*
-AllocateAlignBuffer (
- IN UINTN BufferSize
- )
-{
- VOID *Buf;
- EFI_PHYSICAL_ADDRESS Address;
- CONST EFI_PEI_SERVICES **PeiServices;
- EFI_STATUS Status;
- VOID *MemoryDiscoveredPpi;
-
- Buf = NULL;
- PeiServices = GetPeiServicesTablePointer ();
-
- //
- // Make sure the allocated memory is physical memory.
- //
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gEfiPeiMemoryDiscoveredPpiGuid,
- 0,
- NULL,
- (VOID **) &MemoryDiscoveredPpi
- );
- if (!EFI_ERROR (Status)) {
- Status = (*PeiServices)->AllocatePages (
- PeiServices,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (BufferSize),
- &Address
- );
- if (!EFI_ERROR (Status)) {
- Buf = (VOID *)(UINTN) Address;
- }
- }
- return Buf;
-}
-
-/**
- Check whether AllocatePages in permanent memory is ready.
-
- @retval TRUE AllocatePages in permanent memory is ready.
- @retval FALSE AllocatePages in permanent memory is not ready.
-
-**/
-BOOLEAN
-IsAllocatePagesReady (
- VOID
- )
-{
- CONST EFI_PEI_SERVICES **PeiServices;
- EFI_STATUS Status;
- VOID *MemoryDiscoveredPpi;
-
- PeiServices = GetPeiServicesTablePointer ();
-
- //
- // Make sure the allocated memory is physical memory.
- //
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gEfiPeiMemoryDiscoveredPpiGuid,
- 0,
- NULL,
- (VOID **) &MemoryDiscoveredPpi
- );
- if (!EFI_ERROR (Status)) {
- return TRUE;
- }
-
- return FALSE;
-}
-
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.c
deleted file mode 100644
index 68543c8562..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortLib/Usb3DebugPortLibPeiIoMmu.c
+++ /dev/null
@@ -1,440 +0,0 @@
-/** @file
- Usb Debug Port library instance
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-#include <PiPei.h>
-#include <Library/SerialPortLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/PciLib.h>
-#include <Library/HobLib.h>
-#include <Library/PcdLib.h>
-#include <Library/TimerLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-#include <Library/PeiServicesTablePointerLib.h>
-#include <Ppi/MemoryDiscovered.h>
-#include <Ppi/IoMmu.h>
-#include "Usb3DebugPortLibInternal.h"
-
-GUID gUsb3DbgGuid = USB3_DBG_GUID;
-
-/**
- USB3 IOMMU PPI notify.
-
- @param[in] PeiServices Pointer to PEI Services Table.
- @param[in] NotifyDesc Pointer to the descriptor for the Notification event that
- caused this function to execute.
- @param[in] Ppi Pointer to the PPI data associated with this function.
-
- @retval EFI_STATUS Always return EFI_SUCCESS
-**/
-EFI_STATUS
-EFIAPI
-Usb3IoMmuPpiNotify (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc,
- IN VOID *Ppi
- )
-{
- USB3_DEBUG_PORT_INSTANCE *Instance;
-
- Instance = GetUsb3DebugPortInstance ();
- ASSERT (Instance != NULL);
- //
- // Reinitialize USB3 debug port with granted DMA buffer from IOMMU PPI.
- //
- InitializeUsb3DebugPort (Instance);
-
- SaveUsb3InstanceAddress (Instance);
-
- return EFI_SUCCESS;
-}
-
-EFI_PEI_NOTIFY_DESCRIPTOR mUsb3IoMmuPpiNotifyDesc = {
- (EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gEdkiiIoMmuPpiGuid,
- Usb3IoMmuPpiNotify
-};
-
-/**
- Allocates pages that are suitable for an OperationBusMasterCommonBuffer or
- OperationBusMasterCommonBuffer64 mapping.
-
- @param IoMmu Pointer to IOMMU PPI.
- @param Pages The number of pages to allocate.
- @param HostAddress A pointer to store the base system memory address of the
- allocated range.
- @param DeviceAddress The resulting map address for the bus master PCI controller to use to
- access the hosts HostAddress.
- @param Mapping A resulting value to pass to Unmap().
-
- @retval EFI_SUCCESS The requested memory pages were allocated.
- @retval EFI_UNSUPPORTED Attributes is unsupported. The only legal attribute bits are
- MEMORY_WRITE_COMBINE and MEMORY_CACHED.
- @retval EFI_INVALID_PARAMETER One or more parameters are invalid.
- @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
-
-**/
-EFI_STATUS
-IoMmuAllocateBuffer (
- IN EDKII_IOMMU_PPI *IoMmu,
- IN UINTN Pages,
- OUT VOID **HostAddress,
- OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
- OUT VOID **Mapping
- )
-{
- EFI_STATUS Status;
- UINTN NumberOfBytes;
-
- *HostAddress = NULL;
- *DeviceAddress = 0;
- *Mapping = NULL;
-
- Status = IoMmu->AllocateBuffer (
- IoMmu,
- EfiRuntimeServicesData,
- Pages,
- HostAddress,
- 0
- );
- if (EFI_ERROR (Status)) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- NumberOfBytes = EFI_PAGES_TO_SIZE (Pages);
- Status = IoMmu->Map (
- IoMmu,
- EdkiiIoMmuOperationBusMasterCommonBuffer,
- *HostAddress,
- &NumberOfBytes,
- DeviceAddress,
- Mapping
- );
- if (EFI_ERROR (Status)) {
- IoMmu->FreeBuffer (IoMmu, Pages, *HostAddress);
- *HostAddress = NULL;
- return EFI_OUT_OF_RESOURCES;
- }
- Status = IoMmu->SetAttribute (
- IoMmu,
- *Mapping,
- EDKII_IOMMU_ACCESS_READ | EDKII_IOMMU_ACCESS_WRITE
- );
- if (EFI_ERROR (Status)) {
- IoMmu->Unmap (IoMmu, *Mapping);
- IoMmu->FreeBuffer (IoMmu, Pages, *HostAddress);
- *Mapping = NULL;
- *HostAddress = NULL;
- return Status;
- }
-
- return Status;
-}
-
-/**
- USB3 get IOMMU PPI.
-
- @return Pointer to IOMMU PPI.
-
-**/
-EDKII_IOMMU_PPI *
-Usb3GetIoMmu (
- VOID
- )
-{
- EFI_STATUS Status;
- EDKII_IOMMU_PPI *IoMmu;
- CONST EFI_PEI_SERVICES **PeiServices;
-
- PeiServices = GetPeiServicesTablePointer ();
-
- IoMmu = NULL;
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gEdkiiIoMmuPpiGuid,
- 0,
- NULL,
- (VOID **) &IoMmu
- );
- if (!EFI_ERROR (Status) && (IoMmu != NULL)) {
- return IoMmu;
- }
-
- return NULL;
-}
-
-/**
- Return XHCI MMIO base address.
-
-**/
-EFI_PHYSICAL_ADDRESS
-GetXhciBaseAddress (
- VOID
- )
-{
- UINT8 Bus;
- UINT8 Device;
- UINT8 Function;
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
- EFI_PHYSICAL_ADDRESS Address;
- UINT32 Low;
- UINT32 High;
-
- UsbDebugPort.Controller = GetUsb3DebugPortController();
- Bus = UsbDebugPort.PciAddress.Bus;
- Device = UsbDebugPort.PciAddress.Device;
- Function = UsbDebugPort.PciAddress.Function;
- Low = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET));
- High = PciRead32 (PCI_LIB_ADDRESS(Bus, Device, Function, PCI_BASE_ADDRESSREG_OFFSET + 4));
- Address = (EFI_PHYSICAL_ADDRESS) (LShiftU64 ((UINT64) High, 32) | Low);
-
- //
- // Mask other parts which are not part of base address
- //
- Address &= XHCI_BASE_ADDRESS_64_BIT_MASK;
- return Address;
-}
-
-/**
- Return XHCI debug instance address.
-
-**/
-USB3_DEBUG_PORT_INSTANCE *
-GetUsb3DebugPortInstance (
- VOID
- )
-{
- USB3_DEBUG_PORT_INSTANCE *Instance;
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PHYSICAL_ADDRESS XhcMmioBase;
-
- Hob.Raw = GetFirstGuidHob (&gUsb3DbgGuid);
- if (Hob.Raw == NULL) {
- return NULL;
- }
- Instance = GET_GUID_HOB_DATA (Hob.Guid);
-
- //
- // Update XHCI MMIO base address
- //
- XhcMmioBase = GetXhciBaseAddress ();
-
- FixUsb3InstanceResource (Instance, XhcMmioBase);
-
- return Instance;
-}
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3Initialize (
- VOID
- )
-{
- return EFI_SUCCESS;
-}
-
-/**
- Initialize USB3 debug port.
-
- This method invokes various internal functions to facilitate
- detection and initialization of USB3 debug port.
-
- @retval RETURN_SUCCESS The serial device was initialized.
-**/
-RETURN_STATUS
-EFIAPI
-USB3InitializeReal (
- VOID
- )
-{
- EFI_STATUS Status;
- USB3_DEBUG_PORT_INSTANCE UsbDbg;
- VOID *DataPtr;
- EFI_PEI_HOB_POINTERS Hob;
- CONST EFI_PEI_SERVICES **PeiServices;
-
- PeiServices = GetPeiServicesTablePointer ();
-
- //
- // USB Initilization has to be done only once. So this function should just return when
- // it is called more than once.
- //
- Hob.Raw = GetFirstGuidHob (&gUsb3DbgGuid);
- if (Hob.Raw != NULL) {
- return RETURN_SUCCESS;
- }
-
- //
- // Initialize USB debug for PEI at the first time
- //
- SetMem (&UsbDbg, sizeof(UsbDbg), 0);
- UsbDbg.FromHob = TRUE;
- DiscoverUsb3DebugPort (&UsbDbg);
- if (UsbDbg.DebugSupport) {
- InitializeUsb3DebugPort (&UsbDbg);
- }
-
- if (UsbDbg.Ready && (Usb3GetIoMmu () == NULL)) {
- Status = (*PeiServices)->NotifyPpi (PeiServices, &mUsb3IoMmuPpiNotifyDesc);
- ASSERT_EFI_ERROR (Status);
- }
-
- //
- // Save Instance into HOB
- //
- DataPtr = BuildGuidDataHob (
- &gUsb3DbgGuid,
- (VOID*) &UsbDbg,
- sizeof (UsbDbg)
- );
-
- if (UsbDbg.DebugSupport) {
- SaveUsb3InstanceAddress ((USB3_DEBUG_PORT_INSTANCE *) DataPtr);
- }
-
- return RETURN_SUCCESS;
-}
-
-/**
- Allocate aligned memory for XHC's usage.
-
- @param BufferSize The size, in bytes, of the Buffer.
-
- @return A pointer to the allocated buffer or NULL if allocation fails.
-
-**/
-VOID*
-AllocateAlignBuffer (
- IN UINTN BufferSize
- )
-{
- VOID *Buf;
- EFI_PHYSICAL_ADDRESS Address;
- CONST EFI_PEI_SERVICES **PeiServices;
- EFI_STATUS Status;
- VOID *MemoryDiscoveredPpi;
- EDKII_IOMMU_PPI *IoMmu;
- VOID *HostAddress;
- VOID *Mapping;
-
- Buf = NULL;
- PeiServices = GetPeiServicesTablePointer ();
-
- //
- // Make sure the allocated memory is physical memory.
- //
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gEfiPeiMemoryDiscoveredPpiGuid,
- 0,
- NULL,
- (VOID **) &MemoryDiscoveredPpi
- );
- if (!EFI_ERROR (Status)) {
- IoMmu = Usb3GetIoMmu ();
- if (IoMmu != NULL) {
- Status = IoMmuAllocateBuffer (
- IoMmu,
- EFI_SIZE_TO_PAGES (BufferSize),
- &HostAddress,
- &Address,
- &Mapping
- );
- if (!EFI_ERROR (Status)) {
- ASSERT (Address == ((EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress));
- Buf = (VOID *)(UINTN) Address;
- }
- } else {
- Status = (*PeiServices)->AllocatePages (
- PeiServices,
- EfiACPIMemoryNVS,
- EFI_SIZE_TO_PAGES (BufferSize),
- &Address
- );
- if (!EFI_ERROR (Status)) {
- Buf = (VOID *)(UINTN) Address;
- }
- }
- }
- return Buf;
-}
-
-/**
- Check whether AllocatePages in permanent memory is ready.
-
- @retval TRUE AllocatePages in permanent memory is ready.
- @retval FALSE AllocatePages in permanent memory is not ready.
-
-**/
-BOOLEAN
-IsAllocatePagesReady (
- VOID
- )
-{
- CONST EFI_PEI_SERVICES **PeiServices;
- EFI_STATUS Status;
- VOID *MemoryDiscoveredPpi;
- EDKII_IOMMU_PPI *IoMmu;
- VOID *HostAddress;
-
- PeiServices = GetPeiServicesTablePointer ();
-
- //
- // Make sure the allocated memory is physical memory.
- //
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gEfiPeiMemoryDiscoveredPpiGuid,
- 0,
- NULL,
- (VOID **) &MemoryDiscoveredPpi
- );
- if (!EFI_ERROR (Status)) {
- Status = (*PeiServices)->LocatePpi (
- PeiServices,
- &gEdkiiIoMmuPpiGuid,
- 0,
- NULL,
- (VOID **) &IoMmu
- );
- if (!EFI_ERROR (Status)) {
- Status = IoMmu->AllocateBuffer (
- IoMmu,
- EfiRuntimeServicesData,
- 1,
- &HostAddress,
- 0
- );
- if (EFI_ERROR (Status)) {
- //
- // DMA protection has been enabled,
- // but DMA buffer could not be allocated yet.
- //
- return FALSE;
- }
- IoMmu->FreeBuffer (
- IoMmu,
- 1,
- HostAddress
- );
- }
- return TRUE;
- }
-
- return FALSE;
-}
-
diff --git a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.c b/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.c
deleted file mode 100644
index 747c5dccc9..0000000000
--- a/Platform/Intel/DebugFeaturePkg/Library/Usb3DebugPortParameterLibPcd/Usb3DebugPortParameterLibPcd.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/** @file
- USB3 debug Port Parameter library instance based on PCD.
-
- Copyright (c) 2013 - 2019, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-#include <Library/DebugLib.h>
-#include <Library/PcdLib.h>
-#include <Library/Usb3DebugPortParameterLib.h>
-
-/**
- Returns the USB3 debug port controller.
- bit: 0~ 7: Function
- bit: 8~15: Device
- bit: 16~24: Bus
-
- @return Controller information of USB debug port.
-
-**/
-UINT32
-EFIAPI
-GetUsb3DebugPortController (
- VOID
- )
-{
- USB3_DEBUG_PORT_CONTROLLER UsbDebugPort;
-
- UsbDebugPort.Controller = 0;
- UsbDebugPort.PciAddress.Bus = PcdGet8(PcdUsbSerialXhciBus);
- UsbDebugPort.PciAddress.Device = PcdGet8(PcdUsbSerialXhciDev);
- UsbDebugPort.PciAddress.Function = PcdGet8(PcdUsbSerialXhciFunc);
-
- return UsbDebugPort.Controller;
-}
-
-/**
- Sets the USB debug port controller.
- bit: 0~ 7: Function
- bit: 8~15: Device
- bit: 16~24: Bus
-
- @param[in] Controller information of USB debug port value to be set.
-
- @retval TRUE The controller of USB debug port was sucessfully set.
- @retval FALSE The controller of USB debug port could not be set.
-
-**/
-BOOLEAN
-EFIAPI
-SetUsb3DebugPortController (
- UINT32 Controller
- )
-{
- return FALSE;
-}
--
2.16.2.windows.1
next reply other threads:[~2019-11-13 4:37 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-13 4:37 Kubacki, Michael A [this message]
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 41/49] WhiskeylakeOpenBoardPkg/WhiskeylakeURvp: Add FvAdvancedPreMemory Kubacki, Michael A
2019-11-16 0:35 ` Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 42/49] Platform/Intel: Add advanced feature build support Kubacki, Michael A
2019-11-16 0:35 ` [edk2-devel] " Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 43/49] Platform/Intel/Readme.md Content update Kubacki, Michael A
2019-11-16 0:36 ` Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 44/49] KabylakeOpenBoardPkg/GalagoPro3: Enable advanced features Kubacki, Michael A
2019-11-16 0:37 ` Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 45/49] KabylakeOpenBoardPkg/KabylakeRvp3: " Kubacki, Michael A
2019-11-16 0:37 ` [edk2-devel] " Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 46/49] WhiskeylakeOpenBoardPkg/WhiskeylakeURvp: " Kubacki, Michael A
2019-11-16 0:37 ` Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 47/49] SimicsOpenBoardPkg: " Kubacki, Michael A
2019-11-16 0:34 ` [edk2-devel] " Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 48/49] MinPlatformPkg: Install advanced feature FVs by stage enabled Kubacki, Michael A
2019-11-16 0:37 ` Nate DeSimone
2019-11-13 4:37 ` [edk2-platforms][PATCH V1 49/49] Maintainers.txt: Update Intel feature maintainers Kubacki, Michael A
2019-11-16 0:37 ` [edk2-devel] " Nate DeSimone
2019-11-16 0:35 ` [edk2-devel] [edk2-platforms][PATCH V1 24/49] DebugFeaturePkg: Remove the USB3 Debug feature Nate DeSimone
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191113043742.23488-1-michael.a.kubacki@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox