MdeModulePkg: Add TraceHubDebugSysTLib library

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4144

This Library provides API to dump Trace Hub message.

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Guo Gua <gua.guo@intel.com>
Cc: Chan Laura <laura.chan@intel.com>
Cc: Prakashan Krishnadas Veliyathuparambil <krishnadas.veliyathuparambil.prakashan@intel.com>
Cc: K N Karthik <karthik.k.n@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Signed-off-by: Guo Gua <gua.guo@intel.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: K N Karthik <karthik.k.n@intel.com>
Reviewed-by: Chan Laura <laura.chan@intel.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
Gua Guo 2023-05-10 10:15:35 +08:00 committed by mergify[bot]
parent 3d50fdc5c6
commit 0f0422cedc
15 changed files with 1457 additions and 0 deletions

View File

@ -0,0 +1,24 @@
/** @file
This header file declares Trace Hub related structure.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef TRACE_HUB_DEBUG_INFO_HOB_H_
#define TRACE_HUB_DEBUG_INFO_HOB_H_
#define TRACEHUB_DEBUG_INFO_HOB_REVISION 1
typedef struct {
UINT16 Revision; // Structure revision
BOOLEAN Flag; // Flag to enable or disable Trace Hub debug message.
UINT8 DebugLevel; // Debug level for Trace Hub.
UINT8 Rvsd[4]; // Reserved for future use
UINT64 TraceHubMmioAddress; // MMIO address where Trace Hub debug message output to.
} TRACEHUB_DEBUG_INFO_HOB;
extern GUID gTraceHubDebugInfoHobGuid;
#endif // TRACE_HUB_DEBUG_INFO_HOB_H_

View File

@ -0,0 +1,245 @@
/** @file
System prints Trace Hub message in SEC/PEI/DXE/SMM based on fixed PCDs.
Only support single Trace Hub debug instance.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Base.h>
#include <Library/BaseLib.h>
#include <Library/PcdLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/TraceHubDebugSysTLib.h>
#include <Library/MipiSysTLib.h>
#include <Library/MipiSysTLib/mipi_syst.h>
#include <Guid/TraceHubDebugInfoHob.h>
#include "InternalTraceHubApiCommon.h"
#include "InternalTraceHubApi.h"
/**
Write debug string to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Buffer A pointer to the data buffer.
@param[in] NumberOfBytes The size of data buffer.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTDebugWrite (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
RETURN_STATUS Status;
UINT32 DbgInstCount;
UINT16 Index;
if (NumberOfBytes == 0) {
//
// No data need to be written to Trace Hub
//
return RETURN_SUCCESS;
}
if (Buffer == NULL) {
return RETURN_INVALID_PARAMETER;
}
DbgInstCount = CountThDebugInstance ();
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
for (Index = 0; Index < DbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
NULL,
SeverityType,
TraceHubDebugType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteDebug (
&MipiSystHandle,
SeverityType,
(UINT16)NumberOfBytes,
(CHAR8 *)Buffer
);
if (RETURN_ERROR (Status)) {
break;
}
}
}
return Status;
}
/**
Write catalog status code message to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Id Catalog ID.
@param[in] Guid Driver Guid.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTWriteCataLog64StatusCode (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT64 Id,
IN GUID *Guid
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
RETURN_STATUS Status;
UINT32 DbgInstCount;
UINT16 Index;
if (Guid == NULL) {
return RETURN_INVALID_PARAMETER;
}
DbgInstCount = CountThDebugInstance ();
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
SwapBytesGuid (Guid, (GUID *)(VOID *)&MipiSystHandle.systh_guid);
MipiSystHandle.systh_tag.et_guid = 1;
for (Index = 0; Index < DbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
NULL,
SeverityType,
TraceHubCatalogType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteCatalog (
&MipiSystHandle,
SeverityType,
Id
);
if (RETURN_ERROR (Status)) {
break;
}
}
}
return Status;
}
/**
Write catalog message to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Id Catalog ID.
@param[in] NumberOfParams Number of entries in argument list.
@param[in] ... Catalog message parameters.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTWriteCataLog64 (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT64 Id,
IN UINTN NumberOfParams,
...
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
VA_LIST Args;
UINTN Index;
RETURN_STATUS Status;
UINT32 DbgInstCount;
DbgInstCount = 0;
if (NumberOfParams > sizeof (MipiSystHandle.systh_param) / sizeof (UINT32)) {
return RETURN_INVALID_PARAMETER;
}
DbgInstCount = CountThDebugInstance ();
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
MipiSystHandle.systh_param_count = (UINT32)NumberOfParams;
VA_START (Args, NumberOfParams);
for (Index = 0; Index < NumberOfParams; Index++) {
MipiSystHandle.systh_param[Index] = VA_ARG (Args, UINT32);
}
VA_END (Args);
for (Index = 0; Index < DbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
NULL,
SeverityType,
TraceHubCatalogType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteCatalog (
&MipiSystHandle,
SeverityType,
Id
);
if (RETURN_ERROR (Status)) {
break;
}
}
}
return Status;
}
/**
Collect the total number of Trace Hub debug instance in the system.
@retval UINT32 The total number of Trace Hub debug instance in the system.
**/
UINT32
EFIAPI
CountThDebugInstance (
VOID
)
{
UINT32 DbgInstCount;
//
// 1 from PCD.
//
DbgInstCount = 1;
return DbgInstCount;
}

View File

@ -0,0 +1,44 @@
## @file
# Debug library to output Trace Hub message.
# Support SEC/PEI/DXE/SMM phase TraceHub debug message based on fixed settings.
#
# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = BaseTraceHubDebugSysTLib
FILE_GUID = 336DA571-AD65-423C-9A43-E0056E5B2D8D
MODULE_TYPE = BASE
VERSION_STRING = 1.0
LIBRARY_CLASS = TraceHubDebugSysTLib
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64
#
[LibraryClasses]
BaseLib
PcdLib
BaseMemoryLib
MipiSysTLib
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
[Sources]
BaseTraceHubDebugSysTLib.c
InternalTraceHubApiCommon.c
InternalTraceHubApiCommon.h
InternalTraceHubApi.h
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugLevel
gEfiMdeModulePkgTokenSpaceGuid.PcdEnableTraceHubDebugMsg
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugMmioAddress

View File

@ -0,0 +1,263 @@
/** @file
System prints Trace Hub message in DXE/SMM based on fixed PCDs and HOB.
Trace Hub PCDs will be applied if no HOB exist.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Base.h>
#include <Library/BaseLib.h>
#include <Library/PcdLib.h>
#include <Library/HobLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/TraceHubDebugSysTLib.h>
#include <Library/MipiSysTLib.h>
#include <Library/MipiSysTLib/mipi_syst.h>
#include <Guid/TraceHubDebugInfoHob.h>
#include "InternalTraceHubApiCommon.h"
#include "InternalTraceHubApi.h"
GLOBAL_REMOVE_IF_UNREFERENCED TRACEHUB_DEBUG_INFO_HOB *mThDebugInstArray = NULL;
GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mDbgInstCount = 0;
/**
Write debug string to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Buffer A pointer to the data buffer.
@param[in] NumberOfBytes The size of data buffer.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTDebugWrite (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
RETURN_STATUS Status;
UINT16 Index;
if ((mDbgInstCount == 0) || (mThDebugInstArray == NULL)) {
return RETURN_ABORTED;
}
if (NumberOfBytes == 0) {
//
// No data need to be written to Trace Hub
//
return RETURN_SUCCESS;
}
if (Buffer == NULL) {
return RETURN_INVALID_PARAMETER;
}
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
for (Index = 0; Index < mDbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
(UINT8 *)&mThDebugInstArray[Index],
SeverityType,
TraceHubDebugType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteDebug (
&MipiSystHandle,
SeverityType,
(UINT16)NumberOfBytes,
(CHAR8 *)Buffer
);
if (RETURN_ERROR (Status)) {
break;
}
}
}
return Status;
}
/**
Write catalog status code message to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Id Catalog ID.
@param[in] Guid Driver Guid.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTWriteCataLog64StatusCode (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT64 Id,
IN GUID *Guid
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
UINTN Index;
RETURN_STATUS Status;
if ((mDbgInstCount == 0) || (mThDebugInstArray == NULL)) {
return RETURN_ABORTED;
}
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
if (Guid != NULL) {
SwapBytesGuid (Guid, (GUID *)(VOID *)&MipiSystHandle.systh_guid);
MipiSystHandle.systh_tag.et_guid = 1;
} else {
MipiSystHandle.systh_tag.et_modunit = 2;
MipiSystHandle.systh_tag.et_guid = 0;
}
for (Index = 0; Index < mDbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
(UINT8 *)&mThDebugInstArray[Index],
SeverityType,
TraceHubCatalogType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteCatalog (
&MipiSystHandle,
SeverityType,
Id
);
if (RETURN_ERROR (Status)) {
break;
}
}
}
return Status;
}
/**
Write catalog message to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Id Catalog ID.
@param[in] NumberOfParams Number of entries in argument list.
@param[in] ... Catalog message parameters.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTWriteCataLog64 (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT64 Id,
IN UINTN NumberOfParams,
...
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
VA_LIST Args;
UINTN Index;
RETURN_STATUS Status;
if (NumberOfParams > sizeof (MipiSystHandle.systh_param) / sizeof (UINT32)) {
return RETURN_INVALID_PARAMETER;
}
if ((mDbgInstCount == 0) || (mThDebugInstArray == NULL)) {
return RETURN_ABORTED;
}
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
MipiSystHandle.systh_param_count = (UINT32)NumberOfParams;
VA_START (Args, NumberOfParams);
for (Index = 0; Index < NumberOfParams; Index++) {
MipiSystHandle.systh_param[Index] = VA_ARG (Args, UINT32);
}
VA_END (Args);
for (Index = 0; Index < mDbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
(UINT8 *)&mThDebugInstArray[Index],
SeverityType,
TraceHubCatalogType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteCatalog (
&MipiSystHandle,
SeverityType,
Id
);
if (RETURN_ERROR (Status)) {
break;
}
}
}
return Status;
}
/**
Constructor to get TraceHob configuration data
@param ImageHandle The firmware allocated handle for the EFI image.
@param SystemTable A pointer to the EFI System Table.
@retval RETURN_SUCCESS The constructor always returns EFI_SUCCESS.
@retval RETURN_OUT_OF_RESOURCES There are not enough resources available to retrieve the matching FFS section.
**/
RETURN_STATUS
EFIAPI
DxeSmmTraceHubDebugSysTLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
if (mDbgInstCount == 0) {
mDbgInstCount = CountThDebugInstance ();
}
mThDebugInstArray = AllocateZeroPool (mDbgInstCount * sizeof (TRACEHUB_DEBUG_INFO_HOB));
if (mThDebugInstArray != NULL) {
PackThDebugInstance (mThDebugInstArray, mDbgInstCount);
} else {
return RETURN_OUT_OF_RESOURCES;
}
return RETURN_SUCCESS;
}

View File

@ -0,0 +1,51 @@
## @file
# Debug library to output Trace Hub message.
# Support DXE/SMM phase TraceHub debug message based on fixed or dynamic settings.
#
# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = DxeSmmTraceHubDebugSysTLib
FILE_GUID = A9B7B825-7902-4616-8556-085DA4DFEC72
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
LIBRARY_CLASS = TraceHubDebugSysTLib|DXE_CORE DXE_DRIVER SMM_CORE DXE_SMM_DRIVER UEFI_DRIVER UEFI_APPLICATION
CONSTRUCTOR = DxeSmmTraceHubDebugSysTLibConstructor
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64
#
[LibraryClasses]
BaseLib
PcdLib
HobLib
BaseMemoryLib
MemoryAllocationLib
MipiSysTLib
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
[Sources]
DxeSmmTraceHubDebugSysTLib.c
InternalTraceHubApiCommon.c
InternalTraceHubApiCommon.h
InternalTraceHubApi.h
InternalTraceHubApi.c
[Guids]
gTraceHubDebugInfoHobGuid
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugLevel
gEfiMdeModulePkgTokenSpaceGuid.PcdEnableTraceHubDebugMsg
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugMmioAddress

View File

@ -0,0 +1,74 @@
/** @file
Functions implementation in this file are not common for all type of TraceHubDebugSysTLib.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Base.h>
#include <Guid/TraceHubDebugInfoHob.h>
#include <Library/BaseMemoryLib.h>
#include <Library/HobLib.h>
#include "InternalTraceHubApi.h"
/**
Count the total number of Trace Hub debug instance in the system.
@retval UINT32 The total number of Trace Hub debug instance in the system.
**/
UINT32
EFIAPI
CountThDebugInstance (
VOID
)
{
UINT8 *DbgContext;
UINT32 DbgInstCount;
DbgInstCount = 0;
DbgContext = (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid);
if (DbgContext != NULL) {
while (DbgContext != NULL) {
DbgInstCount++;
DbgContext = (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, GET_NEXT_HOB (DbgContext));
}
} else {
DbgInstCount++;
}
return DbgInstCount;
}
/**
Pack Trace Hub debug instances in the system.
@param[in, out] ThPtr A pointer to TRACEHUB_DEBUG_INFO_HOB structure.
@param[in] Count Number of Trace Hub HOBs.
**/
VOID
EFIAPI
PackThDebugInstance (
IN OUT TRACEHUB_DEBUG_INFO_HOB *ThPtr,
IN UINT32 Count
)
{
UINT8 *DbgContext;
UINT16 Index;
DbgContext = GetFirstGuidHob (&gTraceHubDebugInfoHobGuid);
if (DbgContext != NULL) {
for (Index = 0; Index < Count; Index++) {
CopyMem (&ThPtr[Index], GET_GUID_HOB_DATA (DbgContext), sizeof (TRACEHUB_DEBUG_INFO_HOB));
DbgContext = GetNextGuidHob (&gTraceHubDebugInfoHobGuid, GET_NEXT_HOB (DbgContext));
}
} else {
for (Index = 0; Index < Count; Index++) {
ThPtr[Index].TraceHubMmioAddress = FixedPcdGet64 (PcdTraceHubDebugMmioAddress);
ThPtr[Index].Flag = FixedPcdGetBool (PcdEnableTraceHubDebugMsg);
ThPtr[Index].DebugLevel = FixedPcdGet8 (PcdTraceHubDebugLevel);
}
}
}

View File

@ -0,0 +1,37 @@
/** @file
This header file declares functions that are not for common use.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef INTERNAL_TRACE_HUB_API_H_
#define INTERNAL_TRACE_HUB_API_H_
/**
Count the total number of Trace Hub debug instance in the system.
@retval UINT32 The total number of Trace Hub debug instance in the system.
**/
UINT32
EFIAPI
CountThDebugInstance (
VOID
);
/**
Pack Trace Hub debug instances in the system.
@param[in, out] ThPtr A pointer to TRACEHUB_DEBUG_INFO_HOB structure.
@param[in] Count Number of Trace Hub HOBs.
**/
VOID
EFIAPI
PackThDebugInstance (
IN OUT TRACEHUB_DEBUG_INFO_HOB *ThPtr,
IN UINT32 Count
);
#endif // INTERNAL_TRACE_HUB_API_H_

View File

@ -0,0 +1,200 @@
/** @file
Functions implementation defined in this file are common for all type of TraceHubDebugSysTLib
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Base.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/TraceHubDebugSysTLib.h>
#include <Library/MipiSysTLib/mipi_syst.h>
#include <Guid/TraceHubDebugInfoHob.h>
#include "InternalTraceHubApiCommon.h"
#include "InternalTraceHubApi.h"
/**
Conditionally determine whether to enable Trace Hub message.
@param[in] Flag Flag to enable or disable Trace Hub message.
@param[in] DbgLevel Debug Level of Trace Hub.
@param[in] SeverityType Severity type of input message.
@retval TRUE Enable trace hub message.
@retval FALSE Disable trace hub message.
**/
BOOLEAN
EFIAPI
TraceHubDataEnabled (
IN BOOLEAN Flag,
IN UINT8 DbgLevel,
IN TRACE_HUB_SEVERITY_TYPE SeverityType
)
{
if (Flag == TraceHubRoutingDisable) {
return FALSE;
}
if (DbgLevel == TraceHubDebugLevelError) {
if (((SeverityType == SeverityFatal) || (SeverityType == SeverityError))) {
return TRUE;
}
} else if (DbgLevel == TraceHubDebugLevelErrorWarning) {
if (((SeverityType == SeverityFatal) || (SeverityType == SeverityError) || (SeverityType == SeverityWarning))) {
return TRUE;
}
} else if (DbgLevel == TraceHubDebugLevelErrorWarningInfo) {
if (((SeverityType == SeverityFatal) || (SeverityType == SeverityError) || (SeverityType == SeverityWarning) || (SeverityType == SeverityNormal))) {
return TRUE;
}
} else if (DbgLevel == TraceHubDebugLevelErrorWarningInfoVerbose) {
return TRUE;
}
return FALSE;
}
/**
Convert GUID from LE to BE or BE to LE.
@param[in] Guid GUID that need to be converted.
@param[out] ConvertedGuid GUID that is converted.
**/
VOID
EFIAPI
SwapBytesGuid (
IN GUID *Guid,
OUT GUID *ConvertedGuid
)
{
CopyGuid (ConvertedGuid, Guid);
ConvertedGuid->Data1 = SwapBytes32 (ConvertedGuid->Data1);
ConvertedGuid->Data2 = SwapBytes16 (ConvertedGuid->Data2);
ConvertedGuid->Data3 = SwapBytes16 (ConvertedGuid->Data3);
}
/**
Check whether to output Trace Hub message according to some conditions.
Trace Hub message will be disabled if TraceHubDataEnabled() return FALSE
or Trace Hub MMIO address is 0.
@param[in, out] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.
@param[in] DbgContext A pointer to Trace Hub debug instance.
@param[in] SeverityType Severity type of input message.
@param[in] PrintType Either catalog print or debug print.
@retval RETURN_SUCCESS Current Trace Hub message need to be output.
@retval Other Current Trace Hub message will be disabled.
**/
RETURN_STATUS
EFIAPI
CheckWhetherToOutputMsg (
IN OUT MIPI_SYST_HANDLE *MipiSystHandle,
IN UINT8 *DbgContext,
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN TRACEHUB_PRINTTYPE PrintType
)
{
UINT8 DbgLevel;
BOOLEAN Flag;
UINT64 Addr;
RETURN_STATUS Status;
if (MipiSystHandle == NULL) {
return RETURN_INVALID_PARAMETER;
}
if (PrintType == TraceHubDebugType) {
Status = GetTraceHubMsgVisibility (DbgContext, &Flag, &DbgLevel);
if (RETURN_ERROR (Status)) {
return Status;
}
if (!TraceHubDataEnabled (Flag, DbgLevel, SeverityType)) {
return RETURN_ABORTED;
}
}
Status = GetTraceHubMmioAddress (DbgContext, &Addr);
if (RETURN_ERROR (Status)) {
return Status;
}
MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr = Addr;
if (MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr == 0) {
return RETURN_ABORTED;
}
return RETURN_SUCCESS;
}
/**
Get Trace Hub MMIO Address.
@param[in] DbgContext A pointer to Trace Hub debug instance.
@param[in, out] TraceAddress Trace Hub MMIO Address.
@retval RETURN_SUCCESS Operation is successfully.
@retval Other Operation is failed.
**/
RETURN_STATUS
EFIAPI
GetTraceHubMmioAddress (
IN UINT8 *DbgContext,
IN OUT UINT64 *TraceAddress
)
{
TRACEHUB_DEBUG_INFO_HOB *ThDbgContext;
if (TraceAddress == NULL) {
return RETURN_INVALID_PARAMETER;
}
if (DbgContext != NULL) {
ThDbgContext = (TRACEHUB_DEBUG_INFO_HOB *)DbgContext;
*TraceAddress = ThDbgContext->TraceHubMmioAddress;
} else {
*TraceAddress = FixedPcdGet64 (PcdTraceHubDebugMmioAddress);
}
return RETURN_SUCCESS;
}
/**
Get visibility of Trace Hub Msg.
@param[in] DbgContext A pointer to Trace Hub debug instance.
@param[in, out] Flag Flag to enable or disable Trace Hub message.
@param[in, out] DbgLevel Debug Level of Trace Hub.
@retval RETURN_SUCCESS Operation is successfully.
@retval Other Operation is failed.
**/
RETURN_STATUS
EFIAPI
GetTraceHubMsgVisibility (
IN UINT8 *DbgContext,
IN OUT BOOLEAN *Flag,
IN OUT UINT8 *DbgLevel
)
{
TRACEHUB_DEBUG_INFO_HOB *ThDbgContext;
if ((Flag == NULL) || (DbgLevel == NULL)) {
return RETURN_INVALID_PARAMETER;
}
if (DbgContext != NULL) {
ThDbgContext = (TRACEHUB_DEBUG_INFO_HOB *)DbgContext;
*Flag = ThDbgContext->Flag;
*DbgLevel = ThDbgContext->DebugLevel;
} else {
*DbgLevel = FixedPcdGet8 (PcdTraceHubDebugLevel);
*Flag = FixedPcdGetBool (PcdEnableTraceHubDebugMsg);
}
return RETURN_SUCCESS;
}

View File

@ -0,0 +1,119 @@
/** @file
This header file declares functions and type for common use.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef INTERNAL_TRACE_HUB_API_COMMON_H_
#define INTERNAL_TRACE_HUB_API_COMMON_H_
typedef enum {
TraceHubDebugType = 0,
TraceHubCatalogType
} TRACEHUB_PRINTTYPE;
typedef enum {
TraceHubRoutingDisable = 0,
TraceHubRoutingEnable,
TraceHubRoutingMax
} TRACE_HUB_ROUTING;
typedef enum {
TraceHubDebugLevelError = 0,
TraceHubDebugLevelErrorWarning,
TraceHubDebugLevelErrorWarningInfo,
TraceHubDebugLevelErrorWarningInfoVerbose,
TraceHubDebugLevelMax
} TRACE_HUB_DEBUG_LEVEL;
/**
Conditionally determine whether to enable Trace Hub message.
@param[in] Flag Flag to enable or disable Trace Hub message.
@param[in] DbgLevel Debug Level of Trace Hub.
@param[in] SeverityType Severity type of input message.
@retval TRUE Enable trace hub message.
@retval FALSE Disable trace hub message.
**/
BOOLEAN
EFIAPI
TraceHubDataEnabled (
IN BOOLEAN Flag,
IN UINT8 DbgLevel,
IN TRACE_HUB_SEVERITY_TYPE SeverityType
);
/**
Convert GUID from LE to BE or BE to LE.
@param[in] Guid GUID that need to be converted.
@param[out] ConvertedGuid GUID that is converted.
**/
VOID
EFIAPI
SwapBytesGuid (
IN GUID *Guid,
OUT GUID *ConvertedGuid
);
/**
Check whether to output Trace Hub message according to some conditions.
Trace Hub message will be disabled if TraceHubDataEnabled() return FALSE
or Trace Hub MMIO address is 0.
@param[in, out] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure.
@param[in] DbgContext A pointer to Trace Hub debug instance.
@param[in] SeverityType Severity type of input message.
@param[in] PrintType Either catalog print or debug print.
@retval RETURN_SUCCESS Current Trace Hub message need to be output.
@retval Other Current Trace Hub message will be disabled.
**/
RETURN_STATUS
EFIAPI
CheckWhetherToOutputMsg (
IN OUT MIPI_SYST_HANDLE *MipiSystHandle,
IN UINT8 *DbgContext,
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN TRACEHUB_PRINTTYPE PrintType
);
/**
Get Trace Hub MMIO Address.
@param[in] DbgContext A pointer to Trace Hub debug instance.
@param[in, out] TraceAddress Trace Hub MMIO Address.
@retval RETURN_SUCCESS Operation is successfully.
@retval Other Operation is failed.
**/
RETURN_STATUS
EFIAPI
GetTraceHubMmioAddress (
IN UINT8 *DbgContext,
IN OUT UINT64 *TraceAddress
);
/**
Get visibility of Trace Hub Msg.
@param[in] DbgContext A pointer to Trace Hub debug instance.
@param[in, out] Flag Flag to enable or disable Trace Hub message.
@param[in, out] DbgLevel Debug Level of Trace Hub.
@retval RETURN_SUCCESS Operation is successfully.
@retval Other Operation is failed.
**/
RETURN_STATUS
EFIAPI
GetTraceHubMsgVisibility (
IN UINT8 *DbgContext,
IN OUT BOOLEAN *Flag,
IN OUT UINT8 *DbgLevel
);
#endif // INTERNAL_TRACE_HUB_API_COMMON_H_

View File

@ -0,0 +1,282 @@
/** @file
System prints Trace Hub message in PEI based on fixed PCDs and HOB.
System applies Trace Hub HOB once it detect gTraceHubDebugInfoHobGuid HOB.
Trace Hub PCDs will be applied if no HOB exist.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Base.h>
#include <Library/BaseLib.h>
#include <Library/PcdLib.h>
#include <Library/HobLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/TraceHubDebugSysTLib.h>
#include <Library/MipiSysTLib.h>
#include <Library/MipiSysTLib/mipi_syst.h>
#include <Guid/TraceHubDebugInfoHob.h>
#include "InternalTraceHubApiCommon.h"
#include "InternalTraceHubApi.h"
/**
Write debug string to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Buffer A pointer to the data buffer.
@param[in] NumberOfBytes The size of data buffer.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTDebugWrite (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT8 *Buffer,
IN UINTN NumberOfBytes
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
RETURN_STATUS Status;
UINT8 *DbgContext;
UINTN Index;
UINT32 DbgInstCount;
UINT8 *ThDebugInfo;
if (NumberOfBytes == 0) {
//
// No data need to be written to Trace Hub
//
return RETURN_SUCCESS;
}
if (Buffer == NULL) {
return RETURN_INVALID_PARAMETER;
}
DbgInstCount = CountThDebugInstance ();
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
DbgContext = (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid);
if (DbgContext != NULL) {
ThDebugInfo = GET_GUID_HOB_DATA (DbgContext);
} else {
ThDebugInfo = NULL;
}
for (Index = 0; Index < DbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
ThDebugInfo,
SeverityType,
TraceHubDebugType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteDebug (
&MipiSystHandle,
SeverityType,
(UINT16)NumberOfBytes,
(CHAR8 *)Buffer
);
if (RETURN_ERROR (Status)) {
break;
}
}
if (DbgContext != NULL) {
DbgContext = (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, GET_NEXT_HOB (DbgContext));
if (DbgContext == NULL) {
break;
}
ThDebugInfo = GET_GUID_HOB_DATA (DbgContext);
}
}
return Status;
}
/**
Write catalog status code message to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Id Catalog ID.
@param[in] Guid Driver Guid.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTWriteCataLog64StatusCode (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT64 Id,
IN GUID *Guid
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
UINT32 DbgInstCount;
UINT8 *DbgContext;
RETURN_STATUS Status;
UINTN Index;
UINT8 *ThDebugInfo;
DbgInstCount = CountThDebugInstance ();
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
if (Guid != NULL) {
SwapBytesGuid (Guid, (GUID *)(VOID *)&MipiSystHandle.systh_guid);
MipiSystHandle.systh_tag.et_guid = 1;
} else {
MipiSystHandle.systh_tag.et_modunit = 2;
MipiSystHandle.systh_tag.et_guid = 0;
}
DbgContext = (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid);
if (DbgContext != NULL) {
ThDebugInfo = GET_GUID_HOB_DATA (DbgContext);
} else {
ThDebugInfo = NULL;
}
for (Index = 0; Index < DbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
ThDebugInfo,
SeverityType,
TraceHubCatalogType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteCatalog (
&MipiSystHandle,
SeverityType,
Id
);
if (RETURN_ERROR (Status)) {
break;
}
}
if (DbgContext != NULL) {
DbgContext = (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, GET_NEXT_HOB (DbgContext));
if (DbgContext == NULL) {
break;
}
ThDebugInfo = GET_GUID_HOB_DATA (DbgContext);
}
}
return Status;
}
/**
Write catalog message to specified Trace Hub MMIO address.
@param[in] SeverityType Severity type of input message.
@param[in] Id Catalog ID.
@param[in] NumberOfParams Number of entries in argument list.
@param[in] ... Catalog message parameters.
@retval RETURN_SUCCESS Data was written to Trace Hub.
@retval Other Failed to output Trace Hub message.
**/
RETURN_STATUS
EFIAPI
TraceHubSysTWriteCataLog64 (
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
IN UINT64 Id,
IN UINTN NumberOfParams,
...
)
{
MIPI_SYST_HANDLE MipiSystHandle;
MIPI_SYST_HEADER MipiSystHeader;
VA_LIST Args;
UINTN Index;
UINT32 DbgInstCount;
UINT8 *DbgContext;
RETURN_STATUS Status;
UINT8 *ThDebugInfo;
DbgInstCount = 0;
if (NumberOfParams > sizeof (MipiSystHandle.systh_param) / sizeof (UINT32)) {
return RETURN_INVALID_PARAMETER;
}
DbgInstCount = CountThDebugInstance ();
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
MipiSystHandle.systh_header = &MipiSystHeader;
Status = InitMipiSystHandle (&MipiSystHandle);
if (RETURN_ERROR (Status)) {
return Status;
}
MipiSystHandle.systh_param_count = (UINT32)NumberOfParams;
VA_START (Args, NumberOfParams);
for (Index = 0; Index < NumberOfParams; Index++) {
MipiSystHandle.systh_param[Index] = VA_ARG (Args, UINT32);
}
VA_END (Args);
DbgContext = (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid);
if (DbgContext != NULL) {
ThDebugInfo = GET_GUID_HOB_DATA (DbgContext);
} else {
ThDebugInfo = NULL;
}
for (Index = 0; Index < DbgInstCount; Index++) {
Status = CheckWhetherToOutputMsg (
&MipiSystHandle,
ThDebugInfo,
SeverityType,
TraceHubCatalogType
);
if (!RETURN_ERROR (Status)) {
Status = MipiSystWriteCatalog (
&MipiSystHandle,
SeverityType,
Id
);
if (RETURN_ERROR (Status)) {
break;
}
}
if (DbgContext != NULL) {
DbgContext = (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, GET_NEXT_HOB (DbgContext));
if (DbgContext == NULL) {
break;
}
ThDebugInfo = GET_GUID_HOB_DATA (DbgContext);
}
}
return Status;
}

View File

@ -0,0 +1,50 @@
## @file
# Debug library to output Trace Hub message.
# Support PEI phase TraceHub debug message based on fixed or dynamic settings.
#
# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = PeiTraceHubDebugSysTLib
FILE_GUID = C61E8C2E-0935-4E3D-BCBB-5ED84AFD9FD1
MODULE_TYPE = PEIM
VERSION_STRING = 1.0
LIBRARY_CLASS = TraceHubDebugSysTLib|PEI_CORE PEIM
#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = IA32 X64
#
[LibraryClasses]
BaseLib
PcdLib
HobLib
BaseMemoryLib
MemoryAllocationLib
MipiSysTLib
[Packages]
MdePkg/MdePkg.dec
MdeModulePkg/MdeModulePkg.dec
[Sources]
PeiTraceHubDebugSysTLib.c
InternalTraceHubApiCommon.c
InternalTraceHubApiCommon.h
InternalTraceHubApi.h
InternalTraceHubApi.c
[Guids]
gTraceHubDebugInfoHobGuid
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugLevel
gEfiMdeModulePkgTokenSpaceGuid.PcdEnableTraceHubDebugMsg
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugMmioAddress

View File

@ -0,0 +1,26 @@
## Introduction of TrcaceHubDebugSysTLib ##
TrcaceHubDebugSysTLib library is a top level library for dumping Trace Hub messages.
It provides Trace Hub related APIs to dump Trace Hub message via MIPI SYS-T submodule.
User need to properly configure following Trace Hub related PCDs and HOB.
(See MdeModulePkg.dec to get detailed definition for PCDs below)
- PcdTraceHubDebugLevel
- PcdEnableTraceHubDebugMsg
- PcdTraceHubDebugMmioAddress
(See TraceHubDebugInfoHob.h to get detailed definition for HOB below)
- gTraceHubDebugInfoHobGuid
## BaseTraceHubDebugSysTLib.inf ##
System prints Trace Hub message in SEC/PEI/DXE/SMM based on fixed PCDs.
Only support single Trace Hub debug instance.
## PeiTraceHubDebugSysTLib.inf ##
System prints Trace Hub message in PEI based on fixed PCDs and HOB.
System applies Trace Hub HOB once it detect gTraceHubDebugInfoHobGuid HOB.
Trace Hub PCDs will be applied if no HOB exist.
## DxeSmmTraceHubDebugSysTLib.inf ##
System prints Trace Hub message in DXE/SMM based on fixed PCDs and HOB.
Trace Hub PCDs will be applied if no HOB exist.
## Note ##
Trace Hub debug library not support DXE_RUNTIME_DRIVER type of module currently.

View File

@ -439,6 +439,9 @@
## Include/UniversalPayload/SerialPortInfo.h
gUniversalPayloadSerialPortInfoGuid = { 0xaa7e190d, 0xbe21, 0x4409, { 0x8e, 0x67, 0xa2, 0xcd, 0xf, 0x61, 0xe1, 0x70 } }
## Include/Guid/TraceHubDebugInfoHob.h
gTraceHubDebugInfoHobGuid = { 0xf88c9c23, 0x646c, 0x4f6c, { 0x8e, 0x3d, 0x36, 0xa9, 0x43, 0xc1, 0x08, 0x35 } }
## GUID used for Boot Discovery Policy FormSet guid and related variables.
gBootDiscoveryPolicyMgrFormsetGuid = { 0x5b6f7107, 0xbb3c, 0x4660, { 0x92, 0xcd, 0x54, 0x26, 0x90, 0x28, 0x0b, 0xbd } }
@ -1095,6 +1098,24 @@
# @Prompt Enable UEFI Stack Guard.
gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard|FALSE|BOOLEAN|0x30001055
## Indicate debug level of Trace Hub.
# 0x0 - TraceHubDebugLevelError.<BR>
# 0x1 - TraceHubDebugLevelErrorWarning.<BR>
# 0x2 - TraceHubDebugLevelErrorWarningInfo.<BR>
# 0x3 - TraceHubDebugLevelErrorWarningInfoVerbose.<BR>
# @Prompt Debug level of Trace Hub.
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugLevel|0|UINT8|0x30001056
## Flag to enable or disable Trace Hub message.
# FALSE - Disable Trace Hub debug message.<BR>
# TRUE - Enable Trace Hub debug message.<BR>
# @Prompt Enable or Disable Trace Hub message.
gEfiMdeModulePkgTokenSpaceGuid.PcdEnableTraceHubDebugMsg|0|BOOLEAN|0x30001057
## Indicate MMIO address where Trace Hub message output to.
# @Prompt Output MMIO address of Trace Hub message.
gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugMmioAddress|0|UINT64|0x30001058
[PcdsFixedAtBuild, PcdsPatchableInModule]
## Dynamic type PCD can be registered callback function for Pcd setting action.
# PcdMaxPeiPcdCallBackNumberPerPcdEntry indicates the maximum number of callback function

View File

@ -515,6 +515,9 @@
MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.inf
MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferDxe.inf
MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf
MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTLib.inf
MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib.inf
MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugSysTLib.inf
[Components.X64]
MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf

View File

@ -1290,6 +1290,24 @@
" TRUE - UEFI Stack Guard will be enabled.<BR>\n"
" FALSE - UEFI Stack Guard will be disabled.<BR>"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTraceHubDebugLevel_PROMPT #language en-US "Debug level of Trace Hub."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTraceHubDebugLevel_HELP #language en-US "Indicate debug level of Trace Hub"
" 0x0 - TraceHubDebugLevelError.<BR>"
" 0x1 - TraceHubDebugLevelErrorWarning.<BR>"
" 0x2 - TraceHubDebugLevelErrorWarningInfo.<BR>"
" 0x3 - TraceHubDebugLevelErrorWarningInfoVerbose.<BR>"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdEnableTraceHubDebugMsg_PROMPT #language en-US "Flag to enable or disable Trace Hub message"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdEnableTraceHubDebugMsg_HELP #language en-US "Enable or Disable Trace Hub message"
" FALSE - Disable Trace Hub debug message.<BR>"
" TRUE - Enable Trace Hub debug message.<BR>"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTraceHubDebugMmioAddress_PROMPT #language en-US "Output MMIO address of Trace Hub message"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTraceHubDebugMmioAddress_HELP #language en-US "Indicate MMIO address where Trace Hub message output to."
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSetNvStoreDefaultId_PROMPT #language en-US "NV Storage DefaultId"
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSetNvStoreDefaultId_HELP #language en-US "This dynamic PCD enables the default variable setting.\n"