From nobody Sun May 19 08:30:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104469+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104469+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1683686050; cv=none; d=zohomail.com; s=zohoarc; b=cHGJ6ufD/TUL8Ald9ff4pA1z8g5yC9rOUuYLYJZgjY/zz8CjcA3XthtW+XX3/RGr0Fb6SRg+E1sUrr+JGTvT72fgS5VbRAJnbUPpNY+IEZBc4C3iyH7MvhFn5NnwT6l44s6dvgwYYPRylOB4lVlJckoXzSArExyYhsLExcUsYMc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683686050; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=1XdZxrjnc8iLlW53v8qOeqtQ523Mw2GdzGDRtoN2HKg=; b=QfHsBu8JEzdu/i2Ncjg2qK65WwiHZTSOSS2IS7fehlIbq6NB7gQubibVH6b8ppQR0ystf5oASp7uJGSTY3w/MadciSZfgpiI/LJ7Dh5/2D+TWgsAmDALcryQHah2ihYb0WDMNqZWhjfOeg2r3WeVQO0M1c9Q8umZ31u+o6NG6gs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104469+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683686050204320.57612362516204; Tue, 9 May 2023 19:34:10 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id BIQuYY1788612xZglIx4AqKU; Tue, 09 May 2023 19:34:09 -0700 X-Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.7405.1683686045897151345 for ; Tue, 09 May 2023 19:34:09 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="378206706" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="378206706" X-Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 19:34:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="676686924" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="676686924" X-Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by orsmga006.jf.intel.com with ESMTP; 09 May 2023 19:34:05 -0700 From: "Guo, Gua" To: devel@edk2.groups.io Cc: gua.guo@intel.com, Michael D Kinney , Chan Laura , Prakashan Krishnadas Veliyathuparambil , K N Karthik , VictorX Hsu Subject: [edk2-devel] [PATCH v3 1/4] MdePkg: Add MipiSysTLib library Date: Wed, 10 May 2023 10:33:52 +0800 Message-Id: <20230510023355.1467-2-gua.guo@intel.com> In-Reply-To: <20230510023355.1467-1-gua.guo@intel.com> References: <20230510023355.1467-1-gua.guo@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gua.guo@intel.com X-Gm-Message-State: RKb0s3OZlDhL7ufaC1ZHFmATx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683686049; bh=QSB/fzAUHMpi36IHTrtdGPWfPMKL84CXovSlsIdAByY=; h=Cc:Date:From:Reply-To:Subject:To; b=r13hLDhms6iLy0Hc/FXXqwD4pibvZw76+tkyLsT+ZkzQ5MJ0+bM7Lmm/g9B8bg1tXws rJiSm3hxRbHE/Pg3vUH8RKldAykDNQ+FZifEZt06c5H9sNLNicE2vH9C6/KAvhva2+ojl flWXOQpnw62LZTuw75S2ecvtCV4HXbn5IY0= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683686050949100006 Content-Type: text/plain; charset="utf-8" From: Gua Guo REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4144 This Library provides functions consuming MIPI SYS-T submodule. Cc: Michael D Kinney Cc: Guo Gua Cc: Chan Laura Cc: Prakashan Krishnadas Veliyathuparambil Cc: K N Karthik Signed-off-by: VictorX Hsu Reviewed-by: Leif Lindholm --- .gitmodules | 11 +- .pytool/CISettings.py | 2 + MdePkg/Include/Library/MipiSysTLib.h | 66 ++ MdePkg/Library/MipiSysTLib/GenMipiSystH.py | 132 ++++ MdePkg/Library/MipiSysTLib/MipiSysTLib.c | 123 ++++ MdePkg/Library/MipiSysTLib/MipiSysTLib.inf | 52 ++ MdePkg/Library/MipiSysTLib/Platform.c | 164 +++++ MdePkg/Library/MipiSysTLib/Platform.h | 138 ++++ MdePkg/Library/MipiSysTLib/Readme.md | 25 + MdePkg/Library/MipiSysTLib/mipi_syst.h | 789 +++++++++++++++++++++ MdePkg/Library/MipiSysTLib/mipisyst | 1 + MdePkg/MdePkg.ci.yaml | 12 +- MdePkg/MdePkg.dec | 9 + MdePkg/MdePkg.dsc | 1 + ReadMe.rst | 1 + 15 files changed, 1519 insertions(+), 7 deletions(-) create mode 100644 MdePkg/Include/Library/MipiSysTLib.h create mode 100644 MdePkg/Library/MipiSysTLib/GenMipiSystH.py create mode 100644 MdePkg/Library/MipiSysTLib/MipiSysTLib.c create mode 100644 MdePkg/Library/MipiSysTLib/MipiSysTLib.inf create mode 100644 MdePkg/Library/MipiSysTLib/Platform.c create mode 100644 MdePkg/Library/MipiSysTLib/Platform.h create mode 100644 MdePkg/Library/MipiSysTLib/Readme.md create mode 100644 MdePkg/Library/MipiSysTLib/mipi_syst.h create mode 160000 MdePkg/Library/MipiSysTLib/mipisyst diff --git a/.gitmodules b/.gitmodules index 6211c59724..fb79ebfb72 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,7 +16,7 @@ [submodule "BaseTools/Source/C/BrotliCompress/brotli"] path =3D BaseTools/Source/C/BrotliCompress/brotli url =3D https://github.com/google/brotli - ignore =3D untracked + ignore =3D untracked [submodule "RedfishPkg/Library/JsonLib/jansson"] path =3D RedfishPkg/Library/JsonLib/jansson url =3D https://github.com/akheron/jansson @@ -26,6 +26,9 @@ [submodule "UnitTestFrameworkPkg/Library/SubhookLib/subhook"] path =3D UnitTestFrameworkPkg/Library/SubhookLib/subhook url =3D https://github.com/Zeex/subhook.git -[submodule "MdePkg/Library/BaseFdtLib/libfdt"] - path =3D MdePkg/Library/BaseFdtLib/libfdt - url =3D https://github.com/devicetree-org/pylibfdt.git +[submodule "MdePkg/Library/BaseFdtLib/libfdt"] + path =3D MdePkg/Library/BaseFdtLib/libfdt + url =3D https://github.com/devicetree-org/pylibfdt.git +[submodule "MdePkg/Library/MipiSysTLib/mipisyst"] + path =3D MdePkg/Library/MipiSysTLib/mipisyst + url =3D https://github.com/MIPI-Alliance/public-mipi-sys-t.git diff --git a/.pytool/CISettings.py b/.pytool/CISettings.py index 2fb99f2a17..6fb7342f81 100644 --- a/.pytool/CISettings.py +++ b/.pytool/CISettings.py @@ -197,6 +197,8 @@ class Settings(CiBuildSettingsManager, UpdateSettingsMa= nager, SetupSettingsManag "UnitTestFrameworkPkg/Library/SubhookLib/subhook", False)) rs.append(RequiredSubmodule( "MdePkg/Library/BaseFdtLib/libfdt", False)) + rs.append(RequiredSubmodule( + "MdePkg/Library/MipiSysTLib/mipisyst", False)) return rs =20 def GetName(self): diff --git a/MdePkg/Include/Library/MipiSysTLib.h b/MdePkg/Include/Library/= MipiSysTLib.h new file mode 100644 index 0000000000..4ced1c02cd --- /dev/null +++ b/MdePkg/Include/Library/MipiSysTLib.h @@ -0,0 +1,66 @@ +/** @file +This header file declares functions consuming MIPI Sys-T submodule. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef MIPI_SYST_LIB_H_ +#define MIPI_SYST_LIB_H_ + +/** + Invoke initialization function in Mipi Sys-T module to initialize Mipi S= ys-T handle. + + @param[in, out] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + + @retval RETURN_SUCCESS MIPI_SYST_HANDLE instance was initialized. + @retval Other MIPI_SYST_HANDLE instance was not initialize= d. +**/ +RETURN_STATUS +EFIAPI +InitMipiSystHandle ( + IN OUT VOID *MipiSystHandle + ); + +/** + Invoke write_debug_string function in Mipi Sys-T module. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Severity Severity type of input message. + @param[in] Len Length of data buffer. + @param[in] Str A pointer to data buffer. + + @retval RETURN_SUCCESS Data in buffer was processed. + @retval RETURN_ABORTED No data need to be written to Trace= Hub. + @retval RETURN_INVALID_PARAMETER On entry, MipiSystHandle or Str is = a NULL pointer. +**/ +RETURN_STATUS +EFIAPI +MipiSystWriteDebug ( + IN VOID *MipiSystHandle, + IN UINT32 Severity, + IN UINT16 Len, + IN CONST CHAR8 *Str + ); + +/** + Invoke catalog_write_message function in Mipi Sys-T module. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Severity Severity type of input message. + @param[in] CatId Catalog Id. + + @retval RETURN_SUCCESS Data in buffer was processed. + @retval RETURN_INVALID_PARAMETER On entry, MipiSystHandle is a NULL = pointer. +**/ +RETURN_STATUS +EFIAPI +MipiSystWriteCatalog ( + IN VOID *MipiSystHandle, + IN UINT32 Severity, + IN UINT64 CatId + ); + +#endif // MIPI_SYST_LIB_H_ diff --git a/MdePkg/Library/MipiSysTLib/GenMipiSystH.py b/MdePkg/Library/Mi= piSysTLib/GenMipiSystH.py new file mode 100644 index 0000000000..ee48285590 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/GenMipiSystH.py @@ -0,0 +1,132 @@ +## @file +# This python script update content from mipi_syst.h.in in mipi sys-T sub= module +# and generate it as mipi_syst.h. mipi_syst.h include necessary data stru= cture and +# definition that will be consumed by MipiSysTLib itself, mipi sys-T subm= odule +# and other library. +# +# This script needs to be done once by a developer when adding some +# project-relating definition or a new version of mipi_syst.h.in is relea= sed. +# Normal users do not need to do this, since the resulting file is stored +# in the EDK2 git repository. +# +# Customize structures mentioned below to generate updated mipi_syst.h fi= le: +# 1. ExistingValueToBeReplaced +# -> To replace existing value in mipi_syst.h.in to newer one. +# 2. ExistingDefinitionToBeRemoved +# -> To #undef a existing definition in mipi_syst.h.in. +# 3. NewItemToBeAdded +# -> Items in this structure will be placed at the end of mipi_syst.= h as a customized section. +# +# Run GenMipiSystH.py without any parameters as normal python script afte= r customizing. +# +# Copyright (c) 2023, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## +import os +import re + +# +# A existing value to be customized should place this structure +# Definitions in this customizable structure will be processed by ReplaceO= ldValue() +# e.g: +# Before: @SYST_CFG_VERSION_MAJOR@ +# After: 1 +# +ExistingValueToBeReplaced =3D [ + ["@SYST_CFG_VERSION_MAJOR@", "1"], # Major version + ["@SYST_CFG_VERSION_MINOR@", "0"], # Minor version + ["@SYST_CFG_VERSION_PATCH@", "0"], # Patch version + ["@SYST_CFG_CONFORMANCE_LEVEL@", "30"], # Feature level of mipi sys-T = submodule + ["mipi_syst/platform.h", "Platform.h"], +] + +# +# A existing definition to be removed should place this structure +# Definitions in this customizable structure will be processed by RemoveDe= finition() +# e.g: +# Before: +# #define MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA +# After: +# #define MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA +# #undef MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA +# +ExistingDefinitionToBeRemoved =3D [ + "MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA", + "MIPI_SYST_PCFG_ENABLE_HEAP_MEMORY", + "MIPI_SYST_PCFG_ENABLE_PRINTF_API", + "MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD", + "MIPI_SYST_PCFG_ENABLE_LOCATION_ADDRESS", +] + +# +# Items in this structure will be placed at the end of mipi_syst.h as a cu= stomized section. +# +NewItemToBeAdded =3D [ + "typedef struct mipi_syst_handle_flags MIPI_SYST_HANDLE_FLAGS;", + "typedef struct mipi_syst_msg_tag MIPI_SYST_MSG_TAG;", + "typedef struct mipi_syst_guid MIPI_SYST_GUID;", + "typedef enum mipi_syst_severity MIPI_SYST_SEVERITY;", + "typedef struct mipi_syst_handle MIPI_SYST_HANDLE;", + "typedef struct mipi_syst_header MIPI_SYST_HEADER;", +] + +def ProcessSpecialCharacter(Str): + Str =3D Str.rstrip(" \n") + Str =3D Str.replace("\t", " ") + Str +=3D "\n" + return Str + +def ReplaceOldValue(Str): + for i in range(len(ExistingValueToBeReplaced)): + Result =3D re.search(ExistingValueToBeReplaced[i][0], Str) + if Result is not None: + Str =3D Str.replace(ExistingValueToBeReplaced[i][0], ExistingV= alueToBeReplaced[i][1]) + break + return Str + +def RemoveDefinition(Str): + Result =3D re.search("\*", Str) + if Result is None: + for i in range(len(ExistingDefinitionToBeRemoved)): + Result =3D re.search(ExistingDefinitionToBeRemoved[i], Str) + if Result is not None: + Result =3D re.search("defined", Str) + if Result is None: + Str =3D Str + "#undef " + ExistingDefinitionToBeRemove= d[i] + break + return Str + +def main(): + MipiSystHSrcDir =3D "mipisyst/library/include/mipi_syst.h.in" + MipiSystHRealSrcDir =3D os.path.join(os.getcwd(), os.path.normpath(Mip= iSystHSrcDir)) + MipiSystHRealDstDir =3D os.path.join(os.getcwd(), "mipi_syst.h") + + # + # Read content from mipi_syst.h.in and process each line by demand + # + with open(MipiSystHRealSrcDir, "r") as rfObj: + SrcFile =3D rfObj.readlines() + for lineIndex in range(len(SrcFile)): + SrcFile[lineIndex] =3D ProcessSpecialCharacter(SrcFile[lineInd= ex]) + SrcFile[lineIndex] =3D ReplaceOldValue(SrcFile[lineIndex]) + SrcFile[lineIndex] =3D RemoveDefinition(SrcFile[lineIndex]) + + # + # Typedef a structure or enum type + # + i =3D -1 + for struct in NewItemToBeAdded: + struct +=3D "\n" + SrcFile.insert(i, struct) + i -=3D 1 + + # + # Save edited content to mipi_syst.h + # + with open(MipiSystHRealDstDir, "w") as wfObj: + wfObj.writelines(SrcFile) + +if __name__ =3D=3D '__main__': + main() diff --git a/MdePkg/Library/MipiSysTLib/MipiSysTLib.c b/MdePkg/Library/Mipi= SysTLib/MipiSysTLib.c new file mode 100644 index 0000000000..3a15a2af58 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/MipiSysTLib.c @@ -0,0 +1,123 @@ +/** @file +This file provide functions to communicate with mipi sys-T submodule. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include "mipi_syst.h" + +/** + Invoke initialization function in Mipi Sys-T module to initialize Mipi S= ys-T handle. + + @param[in, out] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + + @retval RETURN_SUCCESS MIPI_SYST_HANDLE instance was initialized. + @retval Other MIPI_SYST_HANDLE instance was not initialize= d. +**/ +RETURN_STATUS +EFIAPI +InitMipiSystHandle ( + IN OUT VOID *MipiSystHandle + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + if (MipiSystH =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + mipi_syst_init (MipiSystH->systh_header, 0, NULL); + + return RETURN_SUCCESS; +} + +/** + Invoke write_debug_string function in Mipi Sys-T module. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Severity Severity type of input message. + @param[in] Len Length of data buffer. + @param[in] Str A pointer to data buffer. + + @retval RETURN_SUCCESS Data in buffer was processed. + @retval RETURN_ABORTED No data need to be written to Trace= Hub. + @retval RETURN_INVALID_PARAMETER On entry, MipiSystHandle or Str is = a NULL pointer. +**/ +RETURN_STATUS +EFIAPI +MipiSystWriteDebug ( + IN MIPI_SYST_HANDLE *MipiSystHandle, + IN UINT32 Severity, + IN UINT16 Len, + IN CONST CHAR8 *Str + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + if (MipiSystH =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + if (Len =3D=3D 0) { + // + // No data need to be written to Trace Hub + // + return RETURN_ABORTED; + } + + if (Str =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + mipi_syst_write_debug_string ( + MipiSystH, + MIPI_SYST_NOLOCATION, + MIPI_SYST_STRING_GENERIC, + Severity, + Len, + Str + ); + + return RETURN_SUCCESS; +} + +/** + Invoke catalog_write_message function in Mipi Sys-T module. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Severity Severity type of input message. + @param[in] CatId Catalog Id. + + @retval RETURN_SUCCESS Data in buffer was processed. + @retval RETURN_INVALID_PARAMETER On entry, MipiSystHandle is a NULL = pointer. +**/ +RETURN_STATUS +EFIAPI +MipiSystWriteCatalog ( + IN MIPI_SYST_HANDLE *MipiSystHandle, + IN UINT32 Severity, + IN UINT64 CatId + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + if (MipiSystH =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + mipi_syst_write_catalog64_message ( + MipiSystH, + MIPI_SYST_NOLOCATION, + Severity, + CatId + ); + + return RETURN_SUCCESS; +} diff --git a/MdePkg/Library/MipiSysTLib/MipiSysTLib.inf b/MdePkg/Library/Mi= piSysTLib/MipiSysTLib.inf new file mode 100644 index 0000000000..f2e7215b5b --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/MipiSysTLib.inf @@ -0,0 +1,52 @@ +## @file +# A library providing funcitons to communicate with mipi sys-T submodule. +# +# Copyright (c) 2023, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D MipiSysTLib + FILE_GUID =3D A58B0510-9E6D-4747-95D8-E5B8AF4633E6 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D MipiSysTLib + + DEFINE MIPI_HEADER_PATH =3D mipisyst/library/include/mipi_syst + DEFINE MIPI_SOURCE_PATH =3D mipisyst/library/src + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[LibraryClasses] + IoLib + BaseMemoryLib + +[Packages] + MdePkg/MdePkg.dec + +[Sources] + MipiSysTLib.c + mipi_syst.h + Platform.c + Platform.h + $(MIPI_HEADER_PATH)/api.h + $(MIPI_HEADER_PATH)/crc32.h + $(MIPI_HEADER_PATH)/compiler.h + $(MIPI_HEADER_PATH)/message.h + $(MIPI_HEADER_PATH)/inline.h + $(MIPI_SOURCE_PATH)/mipi_syst_init.c + $(MIPI_SOURCE_PATH)/mipi_syst_api.c + $(MIPI_SOURCE_PATH)/mipi_syst_crc32.c + $(MIPI_SOURCE_PATH)/mipi_syst_writer.c + $(MIPI_SOURCE_PATH)/mipi_syst_inline.c + $(MIPI_SOURCE_PATH)/mipi_syst_compiler.c + +[BuildOptions] + *_*_*_CC_FLAGS =3D -DMIPI_SYST_STATIC diff --git a/MdePkg/Library/MipiSysTLib/Platform.c b/MdePkg/Library/MipiSys= TLib/Platform.c new file mode 100644 index 0000000000..90a524bc1e --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/Platform.c @@ -0,0 +1,164 @@ +/** @file +This file defines functions that output Trace Hub message. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include "mipi_syst.h" + +/** + Write 4 bytes to Trace Hub MMIO addr + 0x10. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD32Ts ( + IN VOID *MipiSystHandle, + IN UINT32 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x10), Data); +} + +/** + Write 4 bytes to Trace Hub MMIO addr + 0x18. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD32Mts ( + IN VOID *MipiSystHandle, + IN UINT32 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x18), Data); +} + +/** + Write 8 bytes to Trace Hub MMIO addr + 0x18. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD64Mts ( + IN VOID *MipiSystHandle, + IN UINT64 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite64 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x18), Data); +} + +/** + Write 1 byte to Trace Hub MMIO addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD8 ( + IN VOID *MipiSystHandle, + IN UINT8 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite8 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioA= ddr + 0x0), Data); +} + +/** + Write 2 bytes to Trace Hub MMIO mmio addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD16 ( + IN VOID *MipiSystHandle, + IN UINT16 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite16 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x0), Data); +} + +/** + Write 4 bytes to Trace Hub MMIO addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD32 ( + IN VOID *MipiSystHandle, + IN UINT32 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x0), Data); +} + +/** + Write 8 bytes to Trace Hub MMIO addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD64 ( + IN VOID *MipiSystHandle, + IN UINT64 Data + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + MmioWrite64 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x0), Data); +} + +/** + Clear data in Trace Hub MMIO addr + 0x30. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. +**/ +VOID +EFIAPI +MipiSystWriteFlag ( + IN VOID *MipiSystHandle + ) +{ + MIPI_SYST_HANDLE *MipiSystH; + + MipiSystH =3D (MIPI_SYST_HANDLE *)MipiSystHandle; + + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.Mmio= Addr + 0x30), 0x0); +} diff --git a/MdePkg/Library/MipiSysTLib/Platform.h b/MdePkg/Library/MipiSys= TLib/Platform.h new file mode 100644 index 0000000000..ac77edf33d --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/Platform.h @@ -0,0 +1,138 @@ +/** @file +This header file declares functions and structures. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef MIPI_SYST_PLATFORM_H_ +#define MIPI_SYST_PLATFORM_H_ + +typedef struct { + UINT64 MmioAddr; +} TRACE_HUB_PLATFORM_SYST_DATA; + +struct mipi_syst_platform_handle { + TRACE_HUB_PLATFORM_SYST_DATA TraceHubPlatformData; +}; + +/** + Write 4 bytes to Trace Hub MMIO addr + 0x10. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD32Ts ( + IN VOID *MipiSystHandle, + IN UINT32 Data + ); + +/** + Write 4 bytes to Trace Hub MMIO addr + 0x18. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD32Mts ( + IN VOID *MipiSystHandle, + IN UINT32 Data + ); + +/** + Write 8 bytes to Trace Hub MMIO addr + 0x18. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD64Mts ( + IN VOID *MipiSystHandle, + IN UINT64 Data + ); + +/** + Write 1 byte to Trace Hub MMIO addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD8 ( + IN VOID *MipiSystHandle, + IN UINT8 Data + ); + +/** + Write 2 bytes to Trace Hub MMIO mmio addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD16 ( + IN VOID *MipiSystHandle, + IN UINT16 Data + ); + +/** + Write 4 bytes to Trace Hub MMIO addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD32 ( + IN VOID *MipiSystHandle, + IN UINT32 Data + ); + +/** + Write 8 bytes to Trace Hub MMIO addr + 0x0. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. + @param[in] Data Data to be written. +**/ +VOID +EFIAPI +MipiSystWriteD64 ( + IN VOID *MipiSystHandle, + IN UINT64 Data + ); + +/** + Clear data in Trace Hub MMIO addr + 0x30. + + @param[in] MipiSystHandle A pointer to MIPI_SYST_HANDLE structure. +**/ +VOID +EFIAPI +MipiSystWriteFlag ( + IN VOID *MipiSystHandle + ); + +#define MIPI_SYST_PLATFORM_CLOCK() 1000 // (unit: MicroSecond) + +#ifndef MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA +#define MIPI_SYST_OUTPUT_D32TS(MipiSystHandle, Data) MipiSystWriteD32Ts = ((MipiSystHandle), (Data)) +#define MIPI_SYST_OUTPUT_D32MTS(MipiSystHandle, Data) MipiSystWriteD32Mts= ((MipiSystHandle), (Data)) +#define MIPI_SYST_OUTPUT_D64MTS(MipiSystHandle, Data) MipiSystWriteD64Mts= ((MipiSystHandle), (Data)) +#define MIPI_SYST_OUTPUT_D8(MipiSystHandle, Data) MipiSystWriteD8 ((M= ipiSystHandle), (Data)) +#define MIPI_SYST_OUTPUT_D16(MipiSystHandle, Data) MipiSystWriteD16 ((= MipiSystHandle), (Data)) +#define MIPI_SYST_OUTPUT_D32(MipiSystHandle, Data) MipiSystWriteD32 ((= MipiSystHandle), (Data)) + #if defined (MIPI_SYST_PCFG_ENABLE_64BIT_IO) +#define MIPI_SYST_OUTPUT_D64(MipiSystHandle, Data) MipiSystWriteD64 ((Mip= iSystHandle), (Data)) + #endif +#define MIPI_SYST_OUTPUT_FLAG(MipiSystHandle) MipiSystWriteFlag ((MipiSys= tHandle)) +#endif + +#endif // MIPI_SYST_PLATFORM_H_ diff --git a/MdePkg/Library/MipiSysTLib/Readme.md b/MdePkg/Library/MipiSysT= Lib/Readme.md new file mode 100644 index 0000000000..2e5df0194e --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/Readme.md @@ -0,0 +1,25 @@ +## Introduction of MipiSysTLib ## +MipiSysTLib library is a upper level library consuming MIPI SYS-T submodul= e. +It provides MIPI-related APIs in EDK2 format to be consumed. + +## MipiSysTLib Version ## +EDK2 supports building with v1.1+edk2 official version which was fully val= idated. + +## HOW to Install MipiSysTLib for UEFI Building ## +MIPI SYS-T repository was added as a submodule of EDK2 project. Please +refer to edk2/Readme.md for how to clone the code. + +## About GenMipiSystH.py ## +"GenMipiSystH.py" is a Python script which is used for customizing the +mipi_syst.h.in in mipi sys-T repository. The resulting file, mipi_syst.h, = will +be put to same folder level as this script. +``` + mipisyst submodule MipiSysTLib library +|---------------------| GenMipiSystH.py |---------------------| +| mipi_syst.h.in |-----------------> | mipi_syst.h | +|---------------------| |---------------------| +``` +This script needs to be done once by a developer when adding some +project-related definition or a new version of mipi_syst.h.in was released. +Normal users do not need to do this, since the resulting file is stored +in the EDK2 git repository. diff --git a/MdePkg/Library/MipiSysTLib/mipi_syst.h b/MdePkg/Library/MipiSy= sTLib/mipi_syst.h new file mode 100644 index 0000000000..3cf67a1ee5 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/mipi_syst.h @@ -0,0 +1,789 @@ +/* +Copyright (c) 2018, MIPI Alliance, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * Contributors: + * Norbert Schulz (Intel Corporation) - Initial API and implementation + */ + +#ifndef MIPI_SYST_H_INCLUDED +#define MIPI_SYST_H_INCLUDED + +/* SyS-T API version information + */ +#define MIPI_SYST_VERSION_MAJOR 1 /**< Major version, incremented if API= changes */ +#define MIPI_SYST_VERSION_MINOR 0 /**< Minor version, incremented on com= patible extensions */ +#define MIPI_SYST_VERSION_PATCH 0 /**< Patch for existing major, minor, = usually 0 */ + +/** Define SyS-T API conformance level + * + * 10 =3D minimal (only short events) + * 20 =3D low overhead (exluding varag functions and CRC32) + * 30 =3D full implementation + */ +#define MIPI_SYST_CONFORMANCE_LEVEL 30 + +/** Compute SYS-T version value + * + * Used to compare SYS-T Major.Minor.patch versions numerically at runtime. + * + * @param ma major version number + * @param mi minor version number + * @param p patch version number + * + * Example: + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c} + * + * #if MIPI_SYST_VERSION_CODE >=3D MIPI_SYST_MAKE_VERSION_CODE(1,5,0) + * // do what only >=3D 1.5.x supports + * #endif + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ +#define MIPI_SYST_MAKE_VERSION_CODE(ma, mi, p) (((ma) << 16) | ((mi)<<8) |= (p)) + +/** Numeric SYS-T version code */ +#define MIPI_SYST_VERSION_CODE MIPI_SYST_MAKE_VERSION_CODE(\ + MIPI_SYST_VERSION_MAJOR,\ + MIPI_SYST_VERSION_MINOR,\ + MIPI_SYST_VERSION_PATCH) + +/* Macros to trick numeric values like __LINE__ into a string + */ +#define _MIPI_SYST_STRINGIFY(x) #x +#define _MIPI_SYST_CPP_TOSTR(x) _MIPI_SYST_STRINGIFY(x) + +#define _MIPI_SYST_VERSION_STRING(a, b, c)\ + _MIPI_SYST_CPP_TOSTR(a)"."_MIPI_SYST_CPP_TOSTR(b)"."_MIPI_SYST_CPP_TOSTR= (c) + +/** Textual version string */ +#define MIPI_SYST_VERSION_STRING \ + _MIPI_SYST_VERSION_STRING(\ + MIPI_SYST_VERSION_MAJOR,\ + MIPI_SYST_VERSION_MINOR,\ + MIPI_SYST_VERSION_PATCH) + +#ifndef MIPI_SYST_COMPILER_INCLUDED +#include "mipi_syst/compiler.h" +#endif + +/* String hash macros for compile time computation of catalog ID's. + * Notes: + * These macros will only be used with optimized builds, otherwise + * a lot of runtime code will be generated. + * + * Only the last 64 bytes of the string are considered for hashing + */ +#define _MIPI_SYST_HASH1(s,i,x,l) (x*65599u+(mipi_syst_u8)s[(i)<(l)?((l)-= 1-(i)):(l)]) +#define _MIPI_SYST_HASH4(s,i,x,l) _MIPI_SYST_HASH1(s,i,_MIPI_SYST_HASH1(s= ,i+1,_MIPI_SYST_HASH1(s,i+2,_MIPI_SYST_HASH1(s,i+3,x,l),l),l),l) +#define _MIPI_SYST_HASH16(s,i,x,l) _MIPI_SYST_HASH4(s,i,_MIPI_SYST_HASH4(s= ,i+4,_MIPI_SYST_HASH4(s,i+8,_MIPI_SYST_HASH4(s,i+12,x,l),l),l),l) +#define _MIPI_SYST_HASH64(s,i,x,l) _MIPI_SYST_HASH16(s,i,_MIPI_SYST_HASH16= (s,i+16,_MIPI_SYST_HASH16(s,i+32,_MIPI_SYST_HASH16(s,i+48,x,l),l),l),l) + +#define _MIPI_SYST_HASH_x65599(s,l) ((mipi_syst_u32)_MIPI_SYST_HASH64(s,0,= 0,l)) + +#define _MIPI_SYST_HASH_AT_CPP_TIME(str, offset) (_MIPI_SYST_HASH_x65599(s= tr, sizeof(str)-1) + (offset)) +#define _MIPI_SYST_HASH_AT_RUN_TIME(str, offset) (mipi_syst_hash_x65599(st= r, sizeof(str)-1) + (offset)) + +#if defined(_MIPI_SYST_OPTIMIZER_ON) +#define MIPI_SYST_HASH(a, b) _MIPI_SYST_HASH_AT_CPP_TIME((a), (b)) +#else +#define MIPI_SYST_HASH(a, b) _MIPI_SYST_HASH_AT_RUN_TIME((a),(b)) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +/** Major Message Types + */ +enum mipi_syst_msgtype { + MIPI_SYST_TYPE_BUILD =3D 0, /**< client build id message */ + MIPI_SYST_TYPE_SHORT32 =3D 1, /**< value only message */ + MIPI_SYST_TYPE_STRING =3D 2, /**< text message output */ + MIPI_SYST_TYPE_CATALOG =3D 3, /**< catalog message output */ + MIPI_SYST_TYPE_RAW =3D 6, /**< raw binary data */ + MIPI_SYST_TYPE_SHORT64 =3D 7, /**< value only message */ + MIPI_SYST_TYPE_CLOCK =3D 8, /**< clock sync message */ + + MIPI_SYST_TYPE_MAX +}; + +/** MIPI_SYST_TYPE_DEBUG_STRING Sub-Types + */ +enum mipi_syst_subtype_string { + MIPI_SYST_STRING_GENERIC =3D 1, /**< string generic debug = */ + MIPI_SYST_STRING_FUNCTIONENTER =3D 2, /**< string is function name = */ + MIPI_SYST_STRING_FUNCTIONEXIT =3D 3, /**< string is function name = */ + MIPI_SYST_STRING_INVALIDPARAM =3D 5, /**< invalid SyS-T APIcall = */ + MIPI_SYST_STRING_ASSERT =3D 7, /**< Software Assert: failure = */ + MIPI_SYST_STRING_PRINTF_32 =3D 11, /**< printf with 32-bit packing = */ + MIPI_SYST_STRING_PRINTF_64 =3D 12, /**< printf with 64-bit packing = */ + + MIPI_SYST_STRING_MAX +}; + +/** MIPI_SYST_TYPE_CATALOG Sub-Types + */ +enum mipi_syst_subtype_catalog { + MIPI_SYST_CATALOG_ID32_P32 =3D 1, /**< 32-bit catalog ID, 32-bit packi= ng */ + MIPI_SYST_CATALOG_ID64_P32 =3D 2, /**< 64-bit catalog ID, 32-bit packi= ng */ + MIPI_SYST_CATALOG_ID32_P64 =3D 5, /**< 32-bit catalog ID, 64-bit packi= ng */ + MIPI_SYST_CATALOG_ID64_P64 =3D 6, /**< 64-bit catalog ID, 64-bit packi= ng */ + + MIPI_SYST_CATALOG_MAX +}; + +/** MIPI_SYST_TYPE_CLOCK Sub-Types + */ +enum mipi_syst_subtype_clock{ + MIPI_SYST_CLOCK_TRANSPORT_SYNC =3D 1, /**< SyS-T clock & frequency s= ync */ + MIPI_SYST_CLOCK_MAX +}; + +enum mipi_syst_subtype_build { + MIPI_SYST_BUILD_ID_COMPACT32 =3D 0, /**< compact32 build id */ + MIPI_SYST_BUILD_ID_COMPACT64 =3D 1, /**< compact64 build id */ + MIPI_SYST_BUILD_ID_LONG =3D 2, /**< normal build message */ + MIPI_SYST_BUILD_MAX +}; + +struct mipi_syst_header; +struct mipi_syst_handle; +struct mipi_syst_scatter_prog; + +/** 128-bit GUID style message origin ID */ +struct mipi_syst_guid { + union { + mipi_syst_u8 b[16]; + mipi_syst_u64 ll[2]; + } u; +}; + +/** GUID initializer code + * + * This macro simplifies converting a GUID from its string representation + * into the mipi_syst_guid data structure. The following example shows + * how the values from a GUID string are used with the macro. Each numeric + * component from the GUID string gets converted into a hex value parameter + * when invoking the macro. + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c} + * + * // Guid: f614b99d-99a1-4c04-8c30-90999ab5fe05 + * + * struct mipi_syst_guid guid =3D + * MIPI_SYST_GEN_GUID(0xf614b99d, 0x99a1, 0x4c04, 0x8c30, 0x90999ab5f= e05); + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ +#define MIPI_SYST_GEN_GUID(l1, w1, w2, w3, l2) \ + {{\ + (mipi_syst_u8)((mipi_syst_u32)(l1) >> 24), \ + (mipi_syst_u8)((mipi_syst_u32)(l1) >> 16), \ + (mipi_syst_u8)((mipi_syst_u32)(l1) >> 8), \ + (mipi_syst_u8)((mipi_syst_u32)(l1) >> 0), \ + (mipi_syst_u8)((mipi_syst_u16)(w1) >> 8), \ + (mipi_syst_u8)((mipi_syst_u16)(w1) >> 0), \ + (mipi_syst_u8)((mipi_syst_u16)(w2) >> 8), \ + (mipi_syst_u8)((mipi_syst_u16)(w2) >> 0), \ + (mipi_syst_u8)((mipi_syst_u16)(w3) >> 8), \ + (mipi_syst_u8)((mipi_syst_u16)(w3) >> 0), \ + (mipi_syst_u8)((mipi_syst_u64)(l2) >> 40), \ + (mipi_syst_u8)((mipi_syst_u64)(l2) >> 32), \ + (mipi_syst_u8)((mipi_syst_u64)(l2) >> 24), \ + (mipi_syst_u8)((mipi_syst_u64)(l2) >> 16), \ + (mipi_syst_u8)((mipi_syst_u64)(l2) >> 8), \ + (mipi_syst_u8)((mipi_syst_u64)(l2) >> 0) \ + }} + + /** SyS-T client origin data + * + * This structure holds the GUID or header origin and unit data + * used by SyS-T handles. The structure gets passed into the handle + * creation functions to initialize the values that identify clients. + * @see MIPI_SYST_SET_HANDLE_GUID_UNIT + * @see MIPI_SYST_SET_HANDLE_MODULE_UNIT + * @see MIPI_SYST_SET_HANDLE_ORIGIN + */ +struct mipi_syst_origin { + struct mipi_syst_guid guid; /**< origin GUID or module value */ + mipi_syst_u16 unit; /**< unit value */ +}; + +/** Origin structure initializer code using GUID +* +* This macro simplifies initializing a mipi_syst_origin structure. The +* first 5 parameters are GUID values as used by the MIPI_SYST_GEN_GUID +* macro. The last parameter is the unit value (11-Bits). +* @see MIPI_SYST_GEN_GUID +* +* +* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c} +* +* // Guid: {494E5443-B659-45AF-B786-9DB0786248AE} + +* +* struct mipi_syst_origin =3D origin +* MIPI_SYST_GEN_ORIGIN_GUID( +* 0x494E5443, 0xB659, 0x45AF, 0xB786, 0x9DB0786248AE, +* 0x1); +* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ +#define MIPI_SYST_GEN_ORIGIN_GUID(l1, w1, w2, w3, l2 , u) \ + {\ + MIPI_SYST_GEN_GUID(l1, w1, w2, w3, l2) ,\ + u\ + } + +/** Origin structure initializer code using header module value +* +* This macro simplifies initializing a mipi_syst_origin structure. The +* first parameter is the header origin value (7-Bits). The second parameter +* is the unit value (4-bits) +* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.c} +* +* // Guid: {494E5443-B659-45AF-B786-9DB0786248AE} + +* #define MODULE_X 0x10 +* struct mipi_syst_origin =3D +* MIPI_SYST_GEN_ORIGIN_MODULE(MODULE_X, 0x1); +* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ +#define MIPI_SYST_GEN_ORIGIN_MODULE(m , u) \ + {\ + MIPI_SYST_GEN_GUID(0,0,0, ((mipi_syst_u16)(m & 0x7F)) << 8, 0 ),\ + u\ + } +/** + * Global state initialization hook definition + * + * This function gets called in the context of the mipi_syst_init() API + * function after the generic state members of the global state + * structure syst_hdr have been setup. It's purpose is to initialize the + * platform dependent portion of the state and other necessary + * platform specific initialization steps. + * + * @param systh Pointer to global state structure + * @param p user defined value or pointer to data + * @see mipi_syst_header + */ +typedef void (MIPI_SYST_CALLCONV *mipi_syst_inithook_t)(struct mipi_syst_h= eader *systh, + const void *p); + +/** + * Global state destroy hook definition + * + * This function gets called in the context of the mipi_syst_destroy() API + * function before the generic state members of the global state + * structure syst_hdr have been destroyed. Its purpose is to free resources + * used by the platform dependent portion of the global state. + * + * @param systh Pointer to global state structure + */ +typedef void (MIPI_SYST_CALLCONV *mipi_syst_destroyhook_t)(struct mipi_sys= t_header *systh); + +/** + * SyS-T handle state initialization hook definition + * + * This function gets called in the context of IO handle generation. + * Its purpose is to initialize the platform dependent portion of +* the handle and other necessary platform specific initialization steps. + * + * @param systh Pointer to new SyS-T handle + * @see syst_handle_t + */ +typedef void (*mipi_syst_inithandle_hook_t)(struct mipi_syst_handle *systh= ); + +/** + * SyS-T handle state release hook definition + * + * This function gets called when a handle is about to be destroyed.. + * Its purpose is to free any resources allocated during the handle + * generation. + * + * @param systh Pointer to handle that is destroyed + * @see syst_handle_t + */ +typedef void (*mipi_syst_releasehandle_hook_t)(struct mipi_syst_handle *sy= sth); + +/** + * Low level message write routine definition + * + * This function is called at the end of an instrumentation API to output + * the raw message data. + * + * @param systh pointer to a SyS-T handle structure used in the API call, + * @param scatterprog pointer to a list of scatter write instructions that + * encodes how to convert the descriptor pointer by + * pdesc into raw binary data. This list doesn't include + * the mandatory first 32 tag byte value pointed by pde= sc. + * @param pdesc pointer to a message descriptor, which containing at least + * the 32-bit message tag data + */ +typedef void (*mipi_syst_msg_write_t)( + struct mipi_syst_handle *systh, + struct mipi_syst_scatter_prog *scatterprog, + const void *pdesc); + +#ifdef __cplusplus +} /* extern C */ +#endif +#ifndef MIPI_SYST_PLATFORM_INCLUDED + +/** + * @defgroup PCFG_Config Platform Feature Configuration Defines + * + * Defines to customize the SyS-T feature set to match the platform needs. + * + * Each optional library feature can be disabled by not defining the relat= ed + * MIPI_SYST_PCFG_ENABLE define. Removing unused features in this way redu= ces + * both memory footprint and runtime overhead of SyS-T. + */ + +/** + * @defgroup PCFG_Global Platform Wide Configuration + * @ingroup PCFG_Config + * + * These defines enable global features in the SyS-T library. + * @{ + */ + + + /** + * Extend Platform global SyS-T data state + * + * This define extends the global SyS-T state data structure + * mipi_syst_header with platform private content. A platform typically + * stores data for SyS-T handle creation processing in this structure. + * + * Note: This data is not touched by the library code itself, but typically + * is used by platform hook functions for handle creation and destruction. + * **These hook function calls are not lock protected and may happen + * concurrently!** The hook functions need to implement locking if they + * modify the platform state data. + * + * The platform example uses #mipi_syst_platform_state as data state exten= sion. + */ +#define MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA +#undef MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA +/** + * Extend SyS-T handle data state + * + * This define extends the SyS-T handle state data structure + * mipi_syst_handle with platform private content. A platform typically + * stores data for fast trace hardware access in the handle data, for + * example a volatile pointer to an MMIO space. + * + * The platform example uses #mipi_syst_platform_handle as handle state + * extension. + */ +#define MIPI_SYST_PCFG_ENABLE_PLATFORM_HANDLE_DATA + +/** + * Enable HEAP usage for handle generation + * + * This macro tells the SyS-T library to enable the heap allocation handle + * creation API #MIPI_SYST_ALLOC_HANDLE. + * The platform must provide the macros #MIPI_SYST_HEAP_MALLOC and + * #MIPI_SYST_HEAP_FREE to point SyS-T to the platform malloc and free + * functions. + * + * Note: In OS kernel space environments, you must use unpaged memory + * allocation functions. + */ +#define MIPI_SYST_PCFG_ENABLE_HEAP_MEMORY +#undef MIPI_SYST_PCFG_ENABLE_HEAP_MEMORY +/* MSVC and GNU compiler 64-bit mode */ + +/** + * Enable 64-bit instruction addresses + * + * Set this define if running in 64-bit code address space. + */ +#if defined(_WIN64) || defined(__x86_64__) || defined (__LP64__) +#define MIPI_SYST_PCFG_ENABLE_64BIT_ADDR +#endif +/** + * Enable atomic 64-bit write operations + * + * Set this define if your platform supports an atomic 64-bit data write + * operation. This results in fewer MMIO accesses.The SyS-T library + * defaults to 2 consecutive 32-Bit writes otherwise. + */ +#if defined(_WIN64) || defined(__x86_64__) || defined (__LP64__) +#define MIPI_SYST_PCFG_ENABLE_64BIT_IO +#endif + +/** + * Enable helper function code inlining + * + * Set this define if speed is more important than code size on your platf= orm. + * It causes several helper function to get inlined, producing faster, but + * also larger, code. + */ +#define MIPI_SYST_PCFG_ENABLE_INLINE + +/** @} */ + +/** + * @defgroup PCFG_ApiSet Supported API sets + * @ingroup PCFG_Config + * + * These defines enable API sets in the SyS-T library. They are set by def= ault + * depending on the SyS-T API conformance level. The level is specified us= ing + * the define #MIPI_SYST_CONFORMANCE_LEVEL. + * @{ + */ + +#if MIPI_SYST_CONFORMANCE_LEVEL > 10 + /** + * Use SyS-T scatter write output function + * + * The library comes with an output routine that is intended to write data= out + * to an MMIO space. It simplifies a SyS-T platform integration as + * only low-level access macros must be provided for outputting data. These + * macros follow MIPI System Trace Protocol (STP) naming convention, also + * non STP generators can use this interface. + * + * These low level output macros are: + * + * #MIPI_SYST_OUTPUT_D32MTS, #MIPI_SYST_OUTPUT_D64MTS, + * #MIPI_SYST_OUTPUT_D32TS, #MIPI_SYST_OUTPUT_D64, + * #MIPI_SYST_OUTPUT_D32, #MIPI_SYST_OUTPUT_D16, #MIPI_SYST_OUTPUT_D8 and + * #MIPI_SYST_OUTPUT_FLAG + * + * Note: This version of the write function always starts messages + * using a 32-bit timestamped record also other sized timestamped + * packets are allowed by the SyS-T specification. + */ +#define MIPI_SYST_PCFG_ENABLE_DEFAULT_SCATTER_WRITE + +/** + * Enable the Catalog API for 32-Bit Catalog IDs. + */ +#define MIPI_SYST_PCFG_ENABLE_CATID32_API + +/** + * Enable the Catalog API for 64-Bit Catalog IDs. + */ +#define MIPI_SYST_PCFG_ENABLE_CATID64_API + +/** + * Enable plain UTF-8 string output APIs. + */ +#define MIPI_SYST_PCFG_ENABLE_STRING_API + +/** + * Enable raw data output APIs + */ +#define MIPI_SYST_PCFG_ENABLE_WRITE_API + +/** + * Enable Build API + */ +#define MIPI_SYST_PCFG_ENABLE_BUILD_API +#endif /* MIPI_SYST_CONFORMANCE_LEVEL > 10 */ + +#if MIPI_SYST_CONFORMANCE_LEVEL > 20 + /** + * Enable printf API support + * + * Note: + * Enabling printf requires compiler var_arg support as defined by the + * header files stdarg.h stddef.h. + */ + +#define MIPI_SYST_PCFG_ENABLE_PRINTF_API +#undef MIPI_SYST_PCFG_ENABLE_PRINTF_API +/** + * Maximum size of printf payload in bytes. + * Adjust this value if larger strings shall be supported by the library. + * The buffer space is located in stack memory when calling one of the pri= ntf + * style APIs. + */ +#define MIPI_SYST_PCFG_PRINTF_ARGBUF_SIZE 1024 + +#endif /* #if MIPI_SYST_CONFORMANCE_LEVEL > 20 */ + +/* @} */ + +/** + * @defgroup PCFG_Message Optional Message Attributes + * @ingroup PCFG_Config + * + * These defines enable optional message components. They are set by defau= lt + * depending on the SyS-T API conformance level. The level is specified us= ing + * the define #MIPI_SYST_CONFORMANCE_LEVEL. + * @{ + */ + +#if MIPI_SYST_CONFORMANCE_LEVEL > 10 +/** + * Enable 128-bit origin GUID support. + */ +#define MIPI_SYST_PCFG_ENABLE_ORIGIN_GUID + +/** + * Enable the API variants that send file:line ID pair location records. + */ +#define MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD +#undef MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD +/** + * Enable the API variants that send the address of the instrumentation lo= cation. + * + * This API requires #MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD to be set as w= ell. + * It uses its own define as it additionally requires the function + * @ref mipi_syst_return_addr() to be implemented for your platform. + */ +#define MIPI_SYST_PCFG_ENABLE_LOCATION_ADDRESS +#undef MIPI_SYST_PCFG_ENABLE_LOCATION_ADDRESS +/** + * Enable protocol timestamp. + * + * This option adds a timestamp into the SyS-T protocol. This + * option is used if the SyS-T protocol is not embedded into a hardware + * timestamped trace protocol like MIPI STP or if the HW timestamp cannot + * be used for other reasons. Setting this option creates the need to defi= ne + * the macros #MIPI_SYST_PLATFORM_CLOCK and #MIPI_SYST_PLATFORM_FREQ to + * return a 64-bit clock tick value and its frequency. + */ +#define MIPI_SYST_PCFG_ENABLE_TIMESTAMP + +#if defined(_DOXYGEN_) /* only for doxygen, remove the #if to enable */ + /** + * Enable generation of length field + * + * Set this define if the message data shall include the optional length + * field that indicates how many payload bytes follow. + */ +#define MIPI_SYST_PCFG_LENGTH_FIELD +#endif + +#endif + +#if MIPI_SYST_CONFORMANCE_LEVEL > 20 +/** + * Enable message data CRC32 generation. + */ +#define MIPI_SYST_PCFG_ENABLE_CHECKSUM + +#endif /* #if MIPI_SYST_CONFORMANCE_LEVEL */ + +/** @} */ + +#include "Platform.h" +#endif +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(MIPI_SYST_PCFG_ENABLE_INLINE) +#define MIPI_SYST_INLINE static MIPI_SYST_CC_INLINE +#else +#define MIPI_SYST_INLINE MIPI_SYST_EXPORT +#endif + +/** SyS-T global state structure. + * This structure is holding the global SyS-T library state + */ +struct mipi_syst_header { + mipi_syst_u32 systh_version; /**< SyS-T version ID */ + +#if defined(MIPI_SYST_PCFG_ENABLE_PLATFORM_HANDLE_DATA) + mipi_syst_inithandle_hook_t systh_inith; /**< handle init hook fun= ction*/ + mipi_syst_releasehandle_hook_t systh_releaseh; /**< handle release hook = */ +#endif + +#if MIPI_SYST_CONFORMANCE_LEVEL > 10 + mipi_syst_msg_write_t systh_writer; /**< message output routi= ne */ +#endif +#if defined(MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA) + struct mipi_syst_platform_state systh_platform; + /**< platform specific state */ +#endif +}; + +/** + * Message data header tag definition + * + * Each SyS-T message starts with a 32-bit message tag. The tag defines the + * message originator and decoding information for the data following + * the tag. + */ + +struct mipi_syst_msg_tag { +#if defined(MIPI_SYST_BIG_ENDIAN) + mipi_syst_u32 et_res31 : 1; /**< reserved for future use */ + mipi_syst_u32 et_res30 : 1; /**< reserved for future use */ + mipi_syst_u32 et_subtype : 6; /**< type dependent sub category */ + mipi_syst_u32 et_guid : 1; /**< 128-bit GUID present */ + mipi_syst_u32 et_modunit : 11; /**< unit for GUID or module:unit */ + mipi_syst_u32 et_timestamp : 1;/**< indicate 64-bit timestamp */ + mipi_syst_u32 et_chksum : 1; /**< indicate 32-bit CRC */ + mipi_syst_u32 et_length : 1; /**< indicate length field */ + mipi_syst_u32 et_location : 1; /**< indicate location information */ + mipi_syst_u32 et_res7 : 1; /**< reserved for future use */ + mipi_syst_u32 et_severity : 3; /**< severity level of message */ + mipi_syst_u32 et_type : 4; /**< SyS-T message type ID */ +#else + mipi_syst_u32 et_type : 4; /**< SyS-T message type ID */ + mipi_syst_u32 et_severity : 3; /**< severity level of message */ + mipi_syst_u32 et_res7 : 1; /**< reserved for future use */ + mipi_syst_u32 et_location : 1; /**< indicate location information */ + mipi_syst_u32 et_length : 1; /**< indicate length field */ + mipi_syst_u32 et_chksum : 1; /**< indicate 32-bit CRC */ + mipi_syst_u32 et_timestamp : 1;/**< indicate 64-bit timestamp */ + mipi_syst_u32 et_modunit : 11; /**< unit for GUID or module:unit */ + mipi_syst_u32 et_guid : 1; /**< 128-bit GUID present */ + mipi_syst_u32 et_subtype : 6; /**< type dependent sub category */ + mipi_syst_u32 et_res30 : 1; /**< reserved for future use */ + mipi_syst_u32 et_res31 : 1; /**< reserved for future use */ +#endif +}; +#define _MIPI_SYST_MK_MODUNIT_ORIGIN(m,u) (((u) & 0xF)|(m<<4)) + +/** + * Message severity level enumeration + */ +enum mipi_syst_severity { + MIPI_SYST_SEVERITY_MAX =3D 0, /**< no assigned severity */ + MIPI_SYST_SEVERITY_FATAL =3D 1, /**< critical error level */ + MIPI_SYST_SEVERITY_ERROR =3D 2, /**< error message level */ + MIPI_SYST_SEVERITY_WARNING =3D 3,/**< warning message level */ + MIPI_SYST_SEVERITY_INFO =3D 4, /**< information message level */ + MIPI_SYST_SEVERITY_USER1 =3D 5, /**< user defined level 5 */ + MIPI_SYST_SEVERITY_USER2 =3D 6, /**< user defined level 6 */ + MIPI_SYST_SEVERITY_DEBUG =3D 7 /**< debug information level */ +}; + +/** + * Location information inside a message (64-bit format) + * Location is either the source position of the instrumentation call, or + * the call instruction pointer value. + */ +union mipi_syst_msglocation32 { + struct { +#if defined(MIPI_SYST_BIG_ENDIAN) + mipi_syst_u16 etls_lineNo; /**< line number in file */ + mipi_syst_u16 etls_fileID; /**< ID of instrumented file */ +#else + mipi_syst_u16 etls_fileID; /**< ID of instrumented file */ + mipi_syst_u16 etls_lineNo; /**< line number in file */ +#endif + } etls_source_location; + + mipi_syst_u32 etls_code_location:32; /**< instruction pointer value */ +}; + +/** + * Location information inside a message (32-bit format) + * Location is either the source position of the instrumentation call, or + * the call instruction pointer value. + */ +union mipi_syst_msglocation64 { + struct { +#if defined(MIPI_SYST_BIG_ENDIAN) + mipi_syst_u32 etls_lineNo; /**< line number in file */ + mipi_syst_u32 etls_fileID; /**< ID of instrumented file */ +#else + mipi_syst_u32 etls_fileID; /**< ID of instrumented file */ + mipi_syst_u32 etls_lineNo; /**< line number in file */ +#endif + } etls_source_location; + mipi_syst_u64 etls_code_location; /**< instruction pointer value */ +}; + +/** + * Location information record descriptor + */ +struct mipi_syst_msglocation { + /** Message format + * 0 =3D 16-Bit file and 16-Bit line (total: 32-bit) + * 1 =3D 32-Bit file and 32-Bit line (total: 64-bit) + * 2 =3D 32-bit code address + * 3 =3D 64-bit code address + */ + mipi_syst_u8 el_format; + union { + union mipi_syst_msglocation32 loc32; /**< data for 32-bit variant */ + union mipi_syst_msglocation64 loc64; /**< data for 64-bit variant */ + } el_u; +}; + +/** internal handle state flags + */ +struct mipi_syst_handle_flags { + mipi_syst_u32 shf_alloc:1; /**< set to 1 if heap allocated handle */ +}; + +/** SyS-T connection handle state structure + * + * This structure connects the instrumentation API with the underlying SyS= -T + * infrastructure. It plays a similar role to a FILE * in traditional + * C file IO. + */ + struct mipi_syst_handle { + struct mipi_syst_header* systh_header; /**< global state = */ + struct mipi_syst_handle_flags systh_flags; /**< handle state = */ + struct mipi_syst_msg_tag systh_tag; /**< tag flags = */ + +#if defined(MIPI_SYST_PCFG_ENABLE_ORIGIN_GUID) + struct mipi_syst_guid systh_guid; /**< module GUID = */ +#endif + +#if defined(MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD) + struct mipi_syst_msglocation systh_location; /**< location record = */ +#endif + + mipi_syst_u32 systh_param_count; /**< number of parameters = */ + mipi_syst_u32 systh_param[6]; /**< catalog msg parameters = */ + +#if defined(MIPI_SYST_PCFG_ENABLE_PLATFORM_HANDLE_DATA) + struct mipi_syst_platform_handle systh_platform; + /**< platform specific state */ +#endif +}; + + +#ifdef __cplusplus +} /* extern C */ +#endif +#ifndef MIPI_SYST_API_INCLUDED +#include "mipi_syst/api.h" +#endif + +typedef struct mipi_syst_header MIPI_SYST_HEADER; +typedef struct mipi_syst_handle MIPI_SYST_HANDLE; +typedef enum mipi_syst_severity MIPI_SYST_SEVERITY; +typedef struct mipi_syst_guid MIPI_SYST_GUID; +typedef struct mipi_syst_msg_tag MIPI_SYST_MSG_TAG; +typedef struct mipi_syst_handle_flags MIPI_SYST_HANDLE_FLAGS; +#endif diff --git a/MdePkg/Library/MipiSysTLib/mipisyst b/MdePkg/Library/MipiSysTL= ib/mipisyst new file mode 160000 index 0000000000..370b5944c0 --- /dev/null +++ b/MdePkg/Library/MipiSysTLib/mipisyst @@ -0,0 +1 @@ +Subproject commit 370b5944c046bab043dd8b133727b2135af7747a diff --git a/MdePkg/MdePkg.ci.yaml b/MdePkg/MdePkg.ci.yaml index 035c34b3ad..f024b48685 100644 --- a/MdePkg/MdePkg.ci.yaml +++ b/MdePkg/MdePkg.ci.yaml @@ -10,7 +10,10 @@ { ## options defined .pytool/Plugin/LicenseCheck "LicenseCheck": { - "IgnoreFiles": [] + "IgnoreFiles": [ + # This file is copied from mipi sys-T submodule and generated = by python script with customization. + "Library/MipiSysTLib/mipi_syst.h" + ] }, "EccCheck": { ## Exception sample looks like below: @@ -68,7 +71,8 @@ "Include/Library/SafeIntLib.h", "Include/Protocol/DebugSupport.h", "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c", - "Library/BaseFdtLib" + "Library/BaseFdtLib", + "Library/MipiSysTLib/mipi_syst.h" ] }, ## options defined ci/Plugin/CompilerPlugin @@ -166,6 +170,7 @@ "IgnoreStandardPaths": [], # Standard Plugin defined paths that = should be ignore "AdditionalIncludePaths": [] # Additional paths to spell check (wi= ldcards supported) }, + # options defined in .pytool/Plugin/UncrustifyCheck "UncrustifyCheck": { "IgnoreFiles": [ @@ -175,7 +180,8 @@ "Library/BaseFdtLib/stddef.h", "Library/BaseFdtLib/stdint.h", "Library/BaseFdtLib/stdlib.h", - "Library/BaseFdtLib/string.h" + "Library/BaseFdtLib/string.h", + "mipi_syst.h" ] } } diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index d6c4179b2a..597f4f7137 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -28,6 +28,7 @@ Include Test/UnitTest/Include Test/Mock/Include + Library/MipiSysTLib/mipisyst/library/include =20 [Includes.IA32] Include/Ia32 @@ -293,6 +294,14 @@ # FdtLib|Include/Library/FdtLib.h =20 + ## @libraryclass Provides general mipi sys-T services. + # + MipiSysTLib|Include/Library/MipiSysTLib.h + + ## @libraryclass Provides API to output Trace Hub debug message. + # + TraceHubDebugSysTLib|Include/Library/TraceHubDebugSysTLib.h + [LibraryClasses.IA32, LibraryClasses.X64, LibraryClasses.AARCH64] ## @libraryclass Provides services to generate random number. # diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index b38c863812..902a39cffc 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -184,6 +184,7 @@ MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf MdePkg/Library/TdxLib/TdxLib.inf + MdePkg/Library/MipiSysTLib/MipiSysTLib.inf =20 [Components.EBC] MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf diff --git a/ReadMe.rst b/ReadMe.rst index d46c534229..ed1d482245 100644 --- a/ReadMe.rst +++ b/ReadMe.rst @@ -97,6 +97,7 @@ that are covered by additional licenses. - `UnitTestFrameworkPkg/Library/SubhookLib/subhook `__ - `RedfishPkg/Library/JsonLib/jansson `__ - `MdePkg/Library/BaseFdtLib/libfdt `__ +- `MdePkg/Library/MipiSysTLib/mipisyst `__ =20 The EDK II Project is composed of packages. The maintainers for each packa= ge are listed in `Maintainers.txt `__. --=20 2.39.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104469): https://edk2.groups.io/g/devel/message/104469 Mute This Topic: https://groups.io/mt/98798692/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 08:30:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104470+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104470+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1683686050; cv=none; d=zohomail.com; s=zohoarc; b=AFz1DuXmz9m13F3F0UBsYWehHcNwU8hv4Q9caH9jFrPubJVxKba1KC2arB89aMTZ8jvIdFNlk5mrUSe5VVG/+Ab7oAFKa4OKsq8P8lfZggBpSvuHAJue80JcCS3sRJAsmnu1WYsNCdNQQ1zdCKrnSl2rbYXYmXwi3IzR8wgGzO4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683686050; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=mY5Eu4/1yux/oqtATs0HUk+yndGnV6uFWQ03gMoIS5E=; b=Hu2IZvK5wAemgMEy0mdldgr9bvIw6aH5S9JTqz722xt0d6sxczFKlzB5VDUIpTQFYnaRX22vwUeTNj4mF9L8+0RlKqeN0TIQ/i6BoGro/FQdkc29J+DBl6FwVuCArkE/kK/AtuUssNlIc58d9CmvZfqTPVtYgonbD+n11i56yg0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104470+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 168368605065745.04101562981759; Tue, 9 May 2023 19:34:10 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id B7IlYY1788612xNYGBPkat58; Tue, 09 May 2023 19:34:10 -0700 X-Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.7405.1683686045897151345 for ; Tue, 09 May 2023 19:34:09 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="378206716" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="378206716" X-Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 19:34:09 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="676686937" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="676686937" X-Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by orsmga006.jf.intel.com with ESMTP; 09 May 2023 19:34:07 -0700 From: "Guo, Gua" To: devel@edk2.groups.io Cc: gua.guo@intel.com, Michael D Kinney , Chan Laura , Prakashan Krishnadas Veliyathuparambil , K N Karthik , VictorX Hsu Subject: [edk2-devel] [PATCH v3 2/4] MdePkg: Add NULL library of TraceHubDebugSysTLib Date: Wed, 10 May 2023 10:33:53 +0800 Message-Id: <20230510023355.1467-3-gua.guo@intel.com> In-Reply-To: <20230510023355.1467-1-gua.guo@intel.com> References: <20230510023355.1467-1-gua.guo@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gua.guo@intel.com X-Gm-Message-State: 72xpPunAZg3MbfrPEaImm91Ix1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683686050; bh=Y92K0+qjH/XO1Uz8hy1Gw3QaYXtsISw5EiRsyeqxuNE=; h=Cc:Date:From:Reply-To:Subject:To; b=klekBkj8ap5ZFG+7O3M9uXb3mHsSWt4T1s9yxoS/CARksGrL3oWsN5uvFpCARFRNQrB c0alYjNfEi3ay5HYsugY1JUtWJNxTRiAPIWPt7ne3nRmcu6F6rTa53Cpiihfuek514o6k BS2pysTqBeoemgO7nYe9FojTDkYTKJP8eTY= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683686050922100005 Content-Type: text/plain; charset="utf-8" From: Gua Guo REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4144 This Library is NULL library of TraceHubDebugSysTLib. Cc: Michael D Kinney Cc: Guo Gua Cc: Chan Laura Cc: Prakashan Krishnadas Veliyathuparambil Cc: K N Karthik Signed-off-by: VictorX Hsu --- MdePkg/Include/Library/TraceHubDebugSysTLib.h | 81 +++++++++++++++++++ .../TraceHubDebugSysTLibNull.c | 76 +++++++++++++++++ .../TraceHubDebugSysTLibNull.inf | 29 +++++++ MdePkg/MdePkg.dsc | 1 + 4 files changed, 187 insertions(+) create mode 100644 MdePkg/Include/Library/TraceHubDebugSysTLib.h create mode 100644 MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSy= sTLibNull.c create mode 100644 MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSy= sTLibNull.inf diff --git a/MdePkg/Include/Library/TraceHubDebugSysTLib.h b/MdePkg/Include= /Library/TraceHubDebugSysTLib.h new file mode 100644 index 0000000000..7df20e67d6 --- /dev/null +++ b/MdePkg/Include/Library/TraceHubDebugSysTLib.h @@ -0,0 +1,81 @@ +/** @file +This header file declares Trace Hub related top level APIs. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef TRACE_HUB_DEBUG_SYST_LIB_H_ +#define TRACE_HUB_DEBUG_SYST_LIB_H_ + +typedef enum { + SeverityNone =3D 0, + SeverityFatal =3D 1, + SeverityError =3D 2, + SeverityWarning =3D 3, + SeverityNormal =3D 4, + SeverityUser1 =3D 5, + SeverityUser2 =3D 6, + SeverityUser3 =3D 7, + SeverityMax +} TRACE_HUB_SEVERITY_TYPE; + +/** + 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 + ); + +/** + 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 + ); + +/** + 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, + ... + ); + +#endif // TRACE_HUB_DEBUG_SYST_LIB_H_ diff --git a/MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNu= ll.c b/MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.c new file mode 100644 index 0000000000..0bd14d4e24 --- /dev/null +++ b/MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.c @@ -0,0 +1,76 @@ +/** @file +Null library of TraceHubDebugSysTLib. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include + +/** + 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 + ) +{ + return RETURN_UNSUPPORTED; +} + +/** + 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 + ) +{ + return RETURN_UNSUPPORTED; +} + +/** + 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, + ... + ) +{ + return RETURN_UNSUPPORTED; +} diff --git a/MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNu= ll.inf b/MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.i= nf new file mode 100644 index 0000000000..ba894fc250 --- /dev/null +++ b/MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.inf @@ -0,0 +1,29 @@ +## @file +# Null library of TraceHubDebugSysTLib. +# +# Copyright (c) 2023, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D TraceHubDebugSysTLibNull + FILE_GUID =3D 16196A4E-4196-4AF4-9A6B-F4D2ACC430A8 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D TraceHubDebugSysTLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Packages] + MdePkg/MdePkg.dec + +[Sources] + TraceHubDebugSysTLibNull.c diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index 902a39cffc..c850970b23 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -185,6 +185,7 @@ MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf MdePkg/Library/TdxLib/TdxLib.inf MdePkg/Library/MipiSysTLib/MipiSysTLib.inf + MdePkg/Library/TraceHubDebugSysTLibNull/TraceHubDebugSysTLibNull.inf =20 [Components.EBC] MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf --=20 2.39.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104470): https://edk2.groups.io/g/devel/message/104470 Mute This Topic: https://groups.io/mt/98798693/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 08:30:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104471+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104471+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1683686053; cv=none; d=zohomail.com; s=zohoarc; b=gRVHgUjiSz9F/FUDm8AtObjxFlTByB4t9eWUrV4+BuAdDM4N65ul+txae4o+WRHJOV5sVGUgZ0E5WsmF+99A7kr6nfr+eoFqdjVMNViToyYhl+TVuM5dOrFKJStUN5aEH34nIS+o7okfec9hJL6VW0mByeYYxWTMDSMqBJBfBg4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683686053; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=x4SV472NqO+WCaVck6uJSOSeSqP7k4fxuflRTrDGHDw=; b=GojfdEwCMsVEeM4pxkDfekNUdqeumNNhfDUcO77nO14hZOSLaTAB0t9smYhwjFFbDeMI/AZ1qxwZBLCv1lkoLjDi/i3u0Ne+LSJ5Gzp5AGItOGPNNNTB54HL5XFn4GUmpjg4oBquflAOX87xCh71xI+pplMgDLZLIVpy0/rQasM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104471+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683686053142186.74037120864193; Tue, 9 May 2023 19:34:13 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id GJsUYY1788612xgk0dkJnKSS; Tue, 09 May 2023 19:34:12 -0700 X-Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.7406.1683686052122081812 for ; Tue, 09 May 2023 19:34:12 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="378206736" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="378206736" X-Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 19:34:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="676686946" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="676686946" X-Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by orsmga006.jf.intel.com with ESMTP; 09 May 2023 19:34:09 -0700 From: "Guo, Gua" To: devel@edk2.groups.io Cc: gua.guo@intel.com, Michael D Kinney , Chan Laura , Prakashan Krishnadas Veliyathuparambil , K N Karthik , VictorX Hsu Subject: [edk2-devel] [PATCH v3 3/4] MdeModulePkg: Add TraceHubDebugSysTLib library Date: Wed, 10 May 2023 10:33:54 +0800 Message-Id: <20230510023355.1467-4-gua.guo@intel.com> In-Reply-To: <20230510023355.1467-1-gua.guo@intel.com> References: <20230510023355.1467-1-gua.guo@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gua.guo@intel.com X-Gm-Message-State: ibPsMfvsahq0eqMAIqBnjAdkx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683686052; bh=LEGXsGfUBjqvm8cuwy84Cq7G1lIW5ozBBXFPf6PAg9A=; h=Cc:Date:From:Reply-To:Subject:To; b=poxHujZzuQYVwpezfO97fh/H5yM/dcMj48qBy3WwHPsRMfso3vIthc3Wuk4s++IgHRv mCrnplWYlm/HovWWkfebWfMh3APS7me6bQKWL8ayNRDMDBc6S/hXdyQ2nmPSA5Ak9HBnd e7ldGE3PORuLia/v1NSa1pLX4p4EtSVvvqE= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683686054317100013 Content-Type: text/plain; charset="utf-8" From: Gua Guo REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4144 This Library provides API to dump Trace Hub message. Cc: Michael D Kinney Cc: Guo Gua Cc: Chan Laura Cc: Prakashan Krishnadas Veliyathuparambil Cc: K N Karthik Signed-off-by: VictorX Hsu --- .../Include/Guid/TraceHubDebugInfoHob.h | 24 ++ .../BaseTraceHubDebugSysTLib.c | 247 +++++++++++++++ .../BaseTraceHubDebugSysTLib.inf | 44 +++ .../DxeSmmTraceHubDebugSysTLib.c | 265 ++++++++++++++++ .../DxeSmmTraceHubDebugSysTLib.inf | 51 ++++ .../InternalTraceHubApi.c | 74 +++++ .../InternalTraceHubApi.h | 37 +++ .../InternalTraceHubApiCommon.c | 201 +++++++++++++ .../InternalTraceHubApiCommon.h | 119 ++++++++ .../PeiTraceHubDebugSysTLib.c | 284 ++++++++++++++++++ .../PeiTraceHubDebugSysTLib.inf | 50 +++ .../Library/TraceHubDebugSysTLib/Readme.md | 26 ++ MdeModulePkg/MdeModulePkg.dec | 21 ++ MdeModulePkg/MdeModulePkg.dsc | 3 + MdeModulePkg/MdeModulePkg.uni | 18 ++ 15 files changed, 1464 insertions(+) create mode 100644 MdeModulePkg/Include/Guid/TraceHubDebugInfoHob.h create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubD= ebugSysTLib.c create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubD= ebugSysTLib.inf create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHu= bDebugSysTLib.c create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHu= bDebugSysTLib.inf create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTrace= HubApi.c create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTrace= HubApi.h create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTrace= HubApiCommon.c create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTrace= HubApiCommon.h create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDe= bugSysTLib.c create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDe= bugSysTLib.inf create mode 100644 MdeModulePkg/Library/TraceHubDebugSysTLib/Readme.md diff --git a/MdeModulePkg/Include/Guid/TraceHubDebugInfoHob.h b/MdeModulePk= g/Include/Guid/TraceHubDebugInfoHob.h new file mode 100644 index 0000000000..367f97dc90 --- /dev/null +++ b/MdeModulePkg/Include/Guid/TraceHubDebugInfoHob.h @@ -0,0 +1,24 @@ +/** @file +This header file declares Trace Hub related structure. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +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 d= ebug message. + UINT8 DebugLevel; // Debug level for Trace Hub. + UINT8 Rvsd[4]; // Reserved for future use + UINT64 TraceHubMmioAddress; // MMIO address where Trace Hub debug me= ssage output to. +} TRACEHUB_DEBUG_INFO_HOB; + +extern GUID gTraceHubDebugInfoHobGuid; + +#endif // TRACE_HUB_DEBUG_INFO_HOB_H_ diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSys= TLib.c b/MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTLib= .c new file mode 100644 index 0000000000..76a120b5a8 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTLib.c @@ -0,0 +1,247 @@ +/** @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.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#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 =3D=3D 0) { + // + // No data need to be written to Trace Hub + // + return RETURN_SUCCESS; + } + + if (Buffer =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + DbgInstCount =3D CountThDebugInstance (); + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + MipiSystHandle.systh_header =3D &MipiSystHeader; + + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + for (Index =3D 0; Index < DbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + NULL, + SeverityType, + TraceHubDebugType + ); + if (!RETURN_ERROR (Status)) { + Status =3D 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; + GUID ConvertedGuid; + + if (Guid =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + DbgInstCount =3D CountThDebugInstance (); + + MipiSystHandle.systh_header =3D &MipiSystHeader; + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + SwapBytesGuid (Guid, &ConvertedGuid); + CopyMem (&MipiSystHandle.systh_guid, &ConvertedGuid, sizeof (GUID)); + MipiSystHandle.systh_tag.et_guid =3D 1; + + for (Index =3D 0; Index < DbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + NULL, + SeverityType, + TraceHubCatalogType + ); + if (!RETURN_ERROR (Status)) { + Status =3D 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 =3D 0; + + if (NumberOfParams > sizeof (MipiSystHandle.systh_param) / sizeof (UINT3= 2)) { + return RETURN_INVALID_PARAMETER; + } + + DbgInstCount =3D CountThDebugInstance (); + + MipiSystHandle.systh_header =3D &MipiSystHeader; + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + MipiSystHandle.systh_param_count =3D (UINT32)NumberOfParams; + VA_START (Args, NumberOfParams); + for (Index =3D 0; Index < NumberOfParams; Index++) { + MipiSystHandle.systh_param[Index] =3D VA_ARG (Args, UINT32); + } + + VA_END (Args); + + for (Index =3D 0; Index < DbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + NULL, + SeverityType, + TraceHubCatalogType + ); + if (!RETURN_ERROR (Status)) { + Status =3D 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 =3D 1; + + return DbgInstCount; +} diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSys= TLib.inf b/MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTL= ib.inf new file mode 100644 index 0000000000..3edc4e8fd8 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTLib.inf @@ -0,0 +1,44 @@ +## @file +# Debug library to output Trace Hub message. +# Support SEC/PEI/DXE/SMM phase TraceHub debug message based on fixed set= tings. +# +# Copyright (c) 2023, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D BaseTraceHubDebugSysTLib + FILE_GUID =3D 336DA571-AD65-423C-9A43-E0056E5B2D8D + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D TraceHubDebugSysTLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D 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 diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugS= ysTLib.c b/MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugSys= TLib.c new file mode 100644 index 0000000000..45ec691b73 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugSysTLib.c @@ -0,0 +1,265 @@ +/** @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.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "InternalTraceHubApiCommon.h" +#include "InternalTraceHubApi.h" + +GLOBAL_REMOVE_IF_UNREFERENCED TRACEHUB_DEBUG_INFO_HOB *mThDebugInstArray = =3D NULL; +GLOBAL_REMOVE_IF_UNREFERENCED UINT32 mDbgInstCount =3D 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 =3D=3D 0 || mThDebugInstArray =3D=3D NULL) { + return RETURN_ABORTED; + } + + if (NumberOfBytes =3D=3D 0) { + // + // No data need to be written to Trace Hub + // + return RETURN_SUCCESS; + } + + if (Buffer =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + MipiSystHandle.systh_header =3D &MipiSystHeader; + + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + for (Index =3D 0; Index < mDbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + (UINT8 *)&mThDebugInstArray[Index], + SeverityType, + TraceHubDebugType + ); + if (!RETURN_ERROR (Status)) { + Status =3D 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; + GUID ConvertedGuid; + + if (mDbgInstCount =3D=3D 0 || mThDebugInstArray =3D=3D NULL) { + return RETURN_ABORTED; + } + + MipiSystHandle.systh_header =3D &MipiSystHeader; + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + if (Guid !=3D NULL) { + SwapBytesGuid (Guid, &ConvertedGuid); + CopyMem (&MipiSystHandle.systh_guid, &ConvertedGuid, sizeof (GUID)); + MipiSystHandle.systh_tag.et_guid =3D 1; + } else { + MipiSystHandle.systh_tag.et_modunit =3D 2; + MipiSystHandle.systh_tag.et_guid =3D 0; + } + + for (Index =3D 0; Index < mDbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + (UINT8 *)&mThDebugInstArray[Index], + SeverityType, + TraceHubCatalogType + ); + if (!RETURN_ERROR (Status)) { + Status =3D 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 (UINT3= 2)) { + return RETURN_INVALID_PARAMETER; + } + + if (mDbgInstCount =3D=3D 0 || mThDebugInstArray =3D=3D NULL) { + return RETURN_ABORTED; + } + + MipiSystHandle.systh_header =3D &MipiSystHeader; + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + MipiSystHandle.systh_param_count =3D (UINT32)NumberOfParams; + VA_START (Args, NumberOfParams); + for (Index =3D 0; Index < NumberOfParams; Index++) { + MipiSystHandle.systh_param[Index] =3D VA_ARG (Args, UINT32); + } + + VA_END (Args); + + for (Index =3D 0; Index < mDbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + (UINT8 *)&mThDebugInstArray[Index], + SeverityType, + TraceHubCatalogType + ); + if (!RETURN_ERROR (Status)) { + Status =3D 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_SUCC= ESS. + @retval RETURN_OUT_OF_RESOURCES There are not enough resources availabl= e to retrieve the matching FFS section. + +**/ +RETURN_STATUS +EFIAPI +DxeSmmTraceHubDebugSysTLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + if (mDbgInstCount =3D=3D 0) { + mDbgInstCount =3D CountThDebugInstance (); + } + + mThDebugInstArray =3D AllocateZeroPool (mDbgInstCount * sizeof (TRACEHUB= _DEBUG_INFO_HOB)); + + if (mThDebugInstArray !=3D NULL) { + PackThDebugInstance (mThDebugInstArray, mDbgInstCount); + } else { + return RETURN_OUT_OF_RESOURCES; + } + + return RETURN_SUCCESS; +} diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugS= ysTLib.inf b/MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugS= ysTLib.inf new file mode 100644 index 0000000000..90213beee1 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugSysTLib.= inf @@ -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.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D DxeSmmTraceHubDebugSysTLib + FILE_GUID =3D A9B7B825-7902-4616-8556-085DA4DFEC72 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D TraceHubDebugSysTLib|DXE_CORE DXE_DRI= VER SMM_CORE DXE_SMM_DRIVER UEFI_DRIVER UEFI_APPLICATION + CONSTRUCTOR =3D DxeSmmTraceHubDebugSysTLibConstructor + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D 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 diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApi.= c b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApi.c new file mode 100644 index 0000000000..fe946fe60c --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApi.c @@ -0,0 +1,74 @@ +/** @file +Functions implementation in this file are not common for all type of Trace= HubDebugSysTLib. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#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 =3D 0; + + DbgContext =3D (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid); + if (DbgContext !=3D NULL) { + while (DbgContext !=3D NULL) { + DbgInstCount++; + DbgContext =3D (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 structur= e. + @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 =3D GetFirstGuidHob (&gTraceHubDebugInfoHobGuid); + if (DbgContext !=3D NULL) { + for (Index =3D 0; Index < Count; Index++) { + CopyMem (&ThPtr[Index], GET_GUID_HOB_DATA (DbgContext), sizeof (TRAC= EHUB_DEBUG_INFO_HOB)); + DbgContext =3D GetNextGuidHob (&gTraceHubDebugInfoHobGuid, GET_NEXT_= HOB (DbgContext)); + } + } else { + for (Index =3D 0; Index < Count; Index++) { + ThPtr[Index].TraceHubMmioAddress =3D FixedPcdGet64 (PcdTraceHubDebug= MmioAddress); + ThPtr[Index].Flag =3D FixedPcdGetBool (PcdEnableTrace= HubDebugMsg); + ThPtr[Index].DebugLevel =3D FixedPcdGet8 (PcdTraceHubDebugL= evel); + } + } +} diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApi.= h b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApi.h new file mode 100644 index 0000000000..f624f73768 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApi.h @@ -0,0 +1,37 @@ +/** @file +This header file declares functions that are not for common use. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +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 structur= e. + @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_ diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApiC= ommon.c b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApiComm= on.c new file mode 100644 index 0000000000..fddb76ce76 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApiCommon.c @@ -0,0 +1,201 @@ +/** @file +Functions implementation defined in this file are common for all type of T= raceHubDebugSysTLib + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#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 =3D=3D TraceHubRoutingDisable) { + return FALSE; + } + + if (DbgLevel =3D=3D TraceHubDebugLevelError) { + if (((SeverityType =3D=3D SeverityFatal) || (SeverityType =3D=3D Sever= ityError))) { + return TRUE; + } + } else if (DbgLevel =3D=3D TraceHubDebugLevelErrorWarning) { + if (((SeverityType =3D=3D SeverityFatal) || (SeverityType =3D=3D Sever= ityError) || (SeverityType =3D=3D SeverityWarning))) { + return TRUE; + } + } else if (DbgLevel =3D=3D TraceHubDebugLevelErrorWarningInfo) { + if (((SeverityType =3D=3D SeverityFatal) || (SeverityType =3D=3D Sever= ityError) || (SeverityType =3D=3D SeverityWarning) || (SeverityType =3D=3D = SeverityNormal))) { + return TRUE; + } + } else if (DbgLevel =3D=3D 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 + ) +{ + ZeroMem (ConvertedGuid, sizeof (GUID)); + ConvertedGuid->Data1 =3D SwapBytes32 (Guid->Data1); + ConvertedGuid->Data2 =3D SwapBytes16 (Guid->Data2); + ConvertedGuid->Data3 =3D SwapBytes16 (Guid->Data3); + CopyMem (&(ConvertedGuid->Data4), &(Guid->Data4), sizeof (Guid->Data4)); +} + +/** + 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 structur= e. + @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 =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + if (PrintType =3D=3D TraceHubDebugType) { + Status =3D GetTraceHubMsgVisibility (DbgContext, &Flag, &DbgLevel); + if (RETURN_ERROR (Status)) { + return Status; + } + + if (!TraceHubDataEnabled (Flag, DbgLevel, SeverityType)) { + return RETURN_ABORTED; + } + } + + Status =3D GetTraceHubMmioAddress (DbgContext, &Addr); + if (RETURN_ERROR (Status)) { + return Status; + } + + MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr =3D Addr; + if (MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr =3D=3D = 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 =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + if (DbgContext !=3D NULL) { + ThDbgContext =3D (TRACEHUB_DEBUG_INFO_HOB *)DbgContext; + *TraceAddress =3D ThDbgContext->TraceHubMmioAddress; + } else { + *TraceAddress =3D 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 mess= age. + @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 =3D=3D NULL) || (DbgLevel =3D=3D NULL)) { + return RETURN_INVALID_PARAMETER; + } + + if (DbgContext !=3D NULL) { + ThDbgContext =3D (TRACEHUB_DEBUG_INFO_HOB *)DbgContext; + *Flag =3D ThDbgContext->Flag; + *DbgLevel =3D ThDbgContext->DebugLevel; + } else { + *DbgLevel =3D FixedPcdGet8 (PcdTraceHubDebugLevel); + *Flag =3D FixedPcdGetBool (PcdEnableTraceHubDebugMsg); + } + + return RETURN_SUCCESS; +} diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApiC= ommon.h b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApiComm= on.h new file mode 100644 index 0000000000..b8be48a8bb --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/InternalTraceHubApiCommon.h @@ -0,0 +1,119 @@ +/** @file +This header file declares functions and type for common use. + +Copyright (c) 2023, Intel Corporation. All rights reserved.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef INTERNAL_TRACE_HUB_API_COMMON_H_ +#define INTERNAL_TRACE_HUB_API_COMMON_H_ + +typedef enum { + TraceHubDebugType =3D 0, + TraceHubCatalogType +} TRACEHUB_PRINTTYPE; + +typedef enum { + TraceHubRoutingDisable =3D 0, + TraceHubRoutingEnable, + TraceHubRoutingMax +} TRACE_HUB_ROUTING; + +typedef enum { + TraceHubDebugLevelError =3D 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 structur= e. + @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 mess= age. + @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_ diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysT= Lib.c b/MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib.c new file mode 100644 index 0000000000..d86c0f0d91 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib.c @@ -0,0 +1,284 @@ +/** @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.
+ +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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 =3D=3D 0) { + // + // No data need to be written to Trace Hub + // + return RETURN_SUCCESS; + } + + if (Buffer =3D=3D NULL) { + return RETURN_INVALID_PARAMETER; + } + + DbgInstCount =3D CountThDebugInstance (); + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + MipiSystHandle.systh_header =3D &MipiSystHeader; + + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + DbgContext =3D (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid); + if (DbgContext !=3D NULL) { + ThDebugInfo =3D GET_GUID_HOB_DATA (DbgContext); + } else { + ThDebugInfo =3D NULL; + } + + for (Index =3D 0; Index < DbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + ThDebugInfo, + SeverityType, + TraceHubDebugType + ); + if (!RETURN_ERROR (Status)) { + Status =3D MipiSystWriteDebug ( + &MipiSystHandle, + SeverityType, + (UINT16)NumberOfBytes, + (CHAR8 *)Buffer + ); + if (RETURN_ERROR (Status)) { + break; + } + } + + if (DbgContext !=3D NULL) { + DbgContext =3D (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, = GET_NEXT_HOB (DbgContext)); + if (DbgContext =3D=3D NULL) { + break; + } + + ThDebugInfo =3D 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; + GUID ConvertedGuid; + + DbgInstCount =3D CountThDebugInstance (); + + MipiSystHandle.systh_header =3D &MipiSystHeader; + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + if (Guid !=3D NULL) { + SwapBytesGuid (Guid, &ConvertedGuid); + CopyMem (&MipiSystHandle.systh_guid, &ConvertedGuid, sizeof (GUID)); + MipiSystHandle.systh_tag.et_guid =3D 1; + } else { + MipiSystHandle.systh_tag.et_modunit =3D 2; + MipiSystHandle.systh_tag.et_guid =3D 0; + } + + DbgContext =3D (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid); + if (DbgContext !=3D NULL) { + ThDebugInfo =3D GET_GUID_HOB_DATA (DbgContext); + } else { + ThDebugInfo =3D NULL; + } + + for (Index =3D 0; Index < DbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + ThDebugInfo, + SeverityType, + TraceHubCatalogType + ); + if (!RETURN_ERROR (Status)) { + Status =3D MipiSystWriteCatalog ( + &MipiSystHandle, + SeverityType, + Id + ); + if (RETURN_ERROR (Status)) { + break; + } + } + + if (DbgContext !=3D NULL) { + DbgContext =3D (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, = GET_NEXT_HOB (DbgContext)); + if (DbgContext =3D=3D NULL) { + break; + } + + ThDebugInfo =3D 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 =3D 0; + + if (NumberOfParams > sizeof (MipiSystHandle.systh_param) / sizeof (UINT3= 2)) { + return RETURN_INVALID_PARAMETER; + } + + DbgInstCount =3D CountThDebugInstance (); + + MipiSystHandle.systh_header =3D &MipiSystHeader; + + ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE)); + Status =3D InitMipiSystHandle (&MipiSystHandle); + if (RETURN_ERROR (Status)) { + return Status; + } + + MipiSystHandle.systh_param_count =3D (UINT32)NumberOfParams; + VA_START (Args, NumberOfParams); + for (Index =3D 0; Index < NumberOfParams; Index++) { + MipiSystHandle.systh_param[Index] =3D VA_ARG (Args, UINT32); + } + + VA_END (Args); + + DbgContext =3D (UINT8 *)GetFirstGuidHob (&gTraceHubDebugInfoHobGuid); + if (DbgContext !=3D NULL) { + ThDebugInfo =3D GET_GUID_HOB_DATA (DbgContext); + } else { + ThDebugInfo =3D NULL; + } + + for (Index =3D 0; Index < DbgInstCount; Index++) { + Status =3D CheckWhetherToOutputMsg ( + &MipiSystHandle, + ThDebugInfo, + SeverityType, + TraceHubCatalogType + ); + if (!RETURN_ERROR (Status)) { + Status =3D MipiSystWriteCatalog ( + &MipiSystHandle, + SeverityType, + Id + ); + if (RETURN_ERROR (Status)) { + break; + } + } + + if (DbgContext !=3D NULL) { + DbgContext =3D (UINT8 *)GetNextGuidHob (&gTraceHubDebugInfoHobGuid, = GET_NEXT_HOB (DbgContext)); + if (DbgContext =3D=3D NULL) { + break; + } + + ThDebugInfo =3D GET_GUID_HOB_DATA (DbgContext); + } + } + + return Status; +} diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysT= Lib.inf b/MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib= .inf new file mode 100644 index 0000000000..2a8184d927 --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib.inf @@ -0,0 +1,50 @@ +## @file +# Debug library to output Trace Hub message. +# Support PEI phase TraceHub debug message based on fixed or dynamic sett= ings. +# +# Copyright (c) 2023, Intel Corporation. All rights reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D PeiTraceHubDebugSysTLib + FILE_GUID =3D C61E8C2E-0935-4E3D-BCBB-5ED84AFD9FD1 + MODULE_TYPE =3D PEIM + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D TraceHubDebugSysTLib|PEI_CORE PEIM + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D 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 diff --git a/MdeModulePkg/Library/TraceHubDebugSysTLib/Readme.md b/MdeModul= ePkg/Library/TraceHubDebugSysTLib/Readme.md new file mode 100644 index 0000000000..9e798a41bf --- /dev/null +++ b/MdeModulePkg/Library/TraceHubDebugSysTLib/Readme.md @@ -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 curr= ently. diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index 9bb0d3ba2d..95dd077e19 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -439,6 +439,9 @@ ## Include/UniversalPayload/SerialPortInfo.h gUniversalPayloadSerialPortInfoGuid =3D { 0xaa7e190d, 0xbe21, 0x4409, { = 0x8e, 0x67, 0xa2, 0xcd, 0xf, 0x61, 0xe1, 0x70 } } =20 + ## Include/Guid/TraceHubDebugInfoHob.h + gTraceHubDebugInfoHobGuid =3D { 0xf88c9c23, 0x646c, 0x4f6c, { 0x8e, 0x3d= , 0x36, 0xa9, 0x43, 0xc1, 0x08, 0x35 } } + ## GUID used for Boot Discovery Policy FormSet guid and related variable= s. gBootDiscoveryPolicyMgrFormsetGuid =3D { 0x5b6f7107, 0xbb3c, 0x4660, { 0= x92, 0xcd, 0x54, 0x26, 0x90, 0x28, 0x0b, 0xbd } } =20 @@ -1095,6 +1098,24 @@ # @Prompt Enable UEFI Stack Guard. gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard|FALSE|BOOLEAN|0x30001055 =20 + ## Indicate debug level of Trace Hub. + # 0x0 - TraceHubDebugLevelError.
+ # 0x1 - TraceHubDebugLevelErrorWarning.
+ # 0x2 - TraceHubDebugLevelErrorWarningInfo.
+ # 0x3 - TraceHubDebugLevelErrorWarningInfoVerbose.
+ # @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.
+ # TRUE - Enable Trace Hub debug message.
+ # @Prompt Enable or Disable Trace Hub message. + gEfiMdeModulePkgTokenSpaceGuid.PcdEnableTraceHubDebugMsg|0|BOOLEAN|0x300= 01057 + + ## Indicate MMIO address where Trace Hub message output to. + # @Prompt Output MMIO address of Trace Hub message. + gEfiMdeModulePkgTokenSpaceGuid.PcdTraceHubDebugMmioAddress|0|UINT64|0x30= 001058 + [PcdsFixedAtBuild, PcdsPatchableInModule] ## Dynamic type PCD can be registered callback function for Pcd setting = action. # PcdMaxPeiPcdCallBackNumberPerPcdEntry indicates the maximum number of= callback function diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index 1014598f31..5b1f50e9c0 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -515,6 +515,9 @@ MdeModulePkg/Universal/RegularExpressionDxe/RegularExpressionDxe.inf MdeModulePkg/Universal/SmmCommunicationBufferDxe/SmmCommunicationBufferD= xe.inf MdeModulePkg/Universal/Disk/RamDiskDxe/RamDiskDxe.inf + MdeModulePkg/Library/TraceHubDebugSysTLib/BaseTraceHubDebugSysTLib.inf + MdeModulePkg/Library/TraceHubDebugSysTLib/PeiTraceHubDebugSysTLib.inf + MdeModulePkg/Library/TraceHubDebugSysTLib/DxeSmmTraceHubDebugSysTLib.inf =20 [Components.X64] MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf diff --git a/MdeModulePkg/MdeModulePkg.uni b/MdeModulePkg/MdeModulePkg.uni index 33ce9f6198..a17d34d60b 100644 --- a/MdeModulePkg/MdeModulePkg.uni +++ b/MdeModulePkg/MdeModulePkg.uni @@ -1290,6 +1290,24 @@ = " TRUE - UEFI Stack Guard will be enabled.
\n" = " FALSE - UEFI Stack Guard will be disabled.
" =20 +#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.
" + = " 0x1 - TraceHubDebugLevelErrorWarning.
" + = " 0x2 - TraceHubDebugLevelErrorWarningInfo.
" + = " 0x3 - TraceHubDebugLevelErrorWarningInfoVerbose.
" + +#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdEnableTraceHubDebugMsg_PROMP= T #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.
" + = " TRUE - Enable Trace Hub debug message.
" + +#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTraceHubDebugMmioAddress_PRO= MPT #language en-US "Output MMIO address of Trace Hub message" + +#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdTraceHubDebugMmioAddress_HEL= P #language en-US "Indicate MMIO address where Trace Hub message output = to." + #string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSetNvStoreDefaultId_PROMPT = #language en-US "NV Storage DefaultId" =20 #string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSetNvStoreDefaultId_HELP = #language en-US "This dynamic PCD enables the default variable setting.\n" --=20 2.39.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104471): https://edk2.groups.io/g/devel/message/104471 Mute This Topic: https://groups.io/mt/98798694/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Sun May 19 08:30:39 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+104472+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104472+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1683686053; cv=none; d=zohomail.com; s=zohoarc; b=MHKPwgTEJUjSA2SbRBsTI+4apnAwNljVgh9LV7JzQCBjlcdUD5WOJfBcFTVjD6k67G+SSMXltvQzJGPqpXL8cuPhTbq+8OWovcGu0aR8A/WUTg8lIk2nqrWznKzu6HAi28KNkHPubyC05XyOiTNPqgPKnBzl5IDjFbZv+0ceU9s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683686053; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=vcp7YhNTAIbiWjxpcp7VhOYA5TRVuaXi0y15GFWcN5o=; b=VQphNjo46W+W1YX99d5kgdk7O7P56wuA26OsppeyUtm3h2csZ4wCRJxVDR4wkdJqdXZ409V3OP2NUbyEFBJ0I+kTjDt6Xy05RsjhkUEbUPlPsLBCVN8fkVilQhmP2ruNO7LT8bLZJkHRWs5Y//JAErHKuY8n/VYLU0xrswHMSeY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+104472+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1683686053889543.5605744744053; Tue, 9 May 2023 19:34:13 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id OMJzYY1788612xcbpqp1lkkd; Tue, 09 May 2023 19:34:13 -0700 X-Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web11.7406.1683686052122081812 for ; Tue, 09 May 2023 19:34:13 -0700 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="378206746" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="378206746" X-Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 May 2023 19:34:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10705"; a="676686951" X-IronPort-AV: E=Sophos;i="5.99,263,1677571200"; d="scan'208";a="676686951" X-Received: from gguo-desk.gar.corp.intel.com ([10.5.215.23]) by orsmga006.jf.intel.com with ESMTP; 09 May 2023 19:34:11 -0700 From: "Guo, Gua" To: devel@edk2.groups.io Cc: gua.guo@intel.com, VictorX Hsu Subject: [edk2-devel] [PATCH v3 4/4] Maintainers.txt: Update reviewers and maintainers for TraceHubDebugLib. Date: Wed, 10 May 2023 10:33:55 +0800 Message-Id: <20230510023355.1467-5-gua.guo@intel.com> In-Reply-To: <20230510023355.1467-1-gua.guo@intel.com> References: <20230510023355.1467-1-gua.guo@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,gua.guo@intel.com X-Gm-Message-State: cyvQ3UXuY4GFGIm5Zj26UeWTx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1683686053; bh=vcp7YhNTAIbiWjxpcp7VhOYA5TRVuaXi0y15GFWcN5o=; h=Cc:Date:From:Reply-To:Subject:To; b=tPCKKoKjAQOxY2I+VeXBfeweOiyXxjAwZ3/eEBpVIwv13l+um5TDHIrGl/Ql6Qj6ICm gZiQe0LNlDpiJnLPUtIqE3Y2lT7loI4AHOnOUDsbA5J9+cY/rZwgyTuZyZOIXLMKpKA4i kUreYhlgcF5JNQiJEFvOfsBV3v/UOb7dfAk= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1683686054984100016 Content-Type: text/plain; charset="utf-8" From: Gua Guo Update reviewers and maintainers for TraceHubDebugSysTlib. Signed-off-by: VictorX Hsu Reviewed-by: Leif Lindholm --- Maintainers.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Maintainers.txt b/Maintainers.txt index 09d04af27a..30e2d2686d 100644 --- a/Maintainers.txt +++ b/Maintainers.txt @@ -437,6 +437,14 @@ R: Zhiguang Liu [LiuZhiguang0= 01] R: Ray Ni [niruiyu] R: Gua Guo [gguo11837463] =20 +MdeModulePkg: Trace Hub debug message related library instance +F: MdeModulePkg/Library/TraceHubDebugSysTLib/ +F: MdeModulePkg/Include/Guid/TraceHubDebugInfoHob.h +M: Gua Guo [gguo11837463] +M: Prakashan Krishnadas Veliyathuparambil [kprakas2] +R: Chan Laura [lauracha] +R: K N Karthik [karthikkabbigere1] + MdePkg F: MdePkg/ W: https://github.com/tianocore/tianocore.github.io/wiki/MdePkg @@ -444,6 +452,16 @@ M: Michael D Kinney [mdki= nney] M: Liming Gao [lgao4] R: Zhiguang Liu [LiuZhiguang001] =20 +MdePkg: Trace Hub debug message related library instance +F: MdePkg/Library/TraceHubDebugSysTLibNull/ +F: MdePkg/Library/MipiSysTLib/ +F: MdePkg/Include/Library/TraceHubDebugSysTLib.h +F: MdePkg/Include/Library/MipiSysTLib.h +M: Gua Guo [gguo11837463] +M: Prakashan Krishnadas Veliyathuparambil [kprakas2] +R: Chan Laura [lauracha] +R: K N Karthik [karthikkabbigere1] + NetworkPkg F: NetworkPkg/ W: https://github.com/tianocore/tianocore.github.io/wiki/NetworkPkg --=20 2.39.2.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104472): https://edk2.groups.io/g/devel/message/104472 Mute This Topic: https://groups.io/mt/98798695/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-