[edk2-devel] [PATCH v3 1/4] MdePkg: Add MipiSysTLib library
Leif Lindholm
quic_llindhol at quicinc.com
Wed May 10 18:28:45 UTC 2023
On Wed, May 10, 2023 at 10:33:52 +0800, Guo, Gua wrote:
> From: Gua Guo <gua.guo at intel.com>
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4144
>
> This Library provides functions consuming MIPI SYS-T submodule.
>
> Cc: Michael D Kinney <michael.d.kinney at intel.com>
> Cc: Guo Gua <gua.guo at intel.com>
> Cc: Chan Laura <laura.chan at intel.com>
> Cc: Prakashan Krishnadas Veliyathuparambil <krishnadas.veliyathuparambil.prakashan at intel.com>
> Cc: K N Karthik <karthik.k.n at intel.com>
> Signed-off-by: VictorX Hsu <victorx.hsu at intel.com>
> ---
> .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 = BaseTools/Source/C/BrotliCompress/brotli
> url = https://github.com/google/brotli
> - ignore = untracked
> + ignore = untracked
> [submodule "RedfishPkg/Library/JsonLib/jansson"]
> path = RedfishPkg/Library/JsonLib/jansson
> url = https://github.com/akheron/jansson
> @@ -26,6 +26,9 @@
> [submodule "UnitTestFrameworkPkg/Library/SubhookLib/subhook"]
> path = UnitTestFrameworkPkg/Library/SubhookLib/subhook
> url = https://github.com/Zeex/subhook.git
> -[submodule "MdePkg/Library/BaseFdtLib/libfdt"]
> - path = MdePkg/Library/BaseFdtLib/libfdt
> - url = https://github.com/devicetree-org/pylibfdt.git
> +[submodule "MdePkg/Library/BaseFdtLib/libfdt"]
> + path = MdePkg/Library/BaseFdtLib/libfdt
> + url = https://github.com/devicetree-org/pylibfdt.git
It's unfortunate that incorrect line endings have crept into the
.gitmodules file, but fixing that should be a separate patch, not part
of this one.
Once the unrelated changes have been removed:
Reviewed-by: Leif Lindholm <quic_llindhol at quicinc.com>
> +[submodule "MdePkg/Library/MipiSysTLib/mipisyst"]
> + path = MdePkg/Library/MipiSysTLib/mipisyst
> + url = 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, UpdateSettingsManager, SetupSettingsManag
> "UnitTestFrameworkPkg/Library/SubhookLib/subhook", False))
> rs.append(RequiredSubmodule(
> "MdePkg/Library/BaseFdtLib/libfdt", False))
> + rs.append(RequiredSubmodule(
> + "MdePkg/Library/MipiSysTLib/mipisyst", False))
> return rs
>
> 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.<BR>
> +
> +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 Sys-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 initialized.
> +**/
> +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/MipiSysTLib/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 submodule
> +# and generate it as mipi_syst.h. mipi_syst.h include necessary data structure and
> +# definition that will be consumed by MipiSysTLib itself, mipi sys-T submodule
> +# 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 released.
> +# 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 file:
> +# 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 after customizing.
> +#
> +# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
> +#
> +# 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 ReplaceOldValue()
> +# e.g:
> +# Before: @SYST_CFG_VERSION_MAJOR@
> +# After: 1
> +#
> +ExistingValueToBeReplaced = [
> + ["@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 RemoveDefinition()
> +# 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 = [
> + "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 customized section.
> +#
> +NewItemToBeAdded = [
> + "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 = Str.rstrip(" \n")
> + Str = Str.replace("\t", " ")
> + Str += "\n"
> + return Str
> +
> +def ReplaceOldValue(Str):
> + for i in range(len(ExistingValueToBeReplaced)):
> + Result = re.search(ExistingValueToBeReplaced[i][0], Str)
> + if Result is not None:
> + Str = Str.replace(ExistingValueToBeReplaced[i][0], ExistingValueToBeReplaced[i][1])
> + break
> + return Str
> +
> +def RemoveDefinition(Str):
> + Result = re.search("\*", Str)
> + if Result is None:
> + for i in range(len(ExistingDefinitionToBeRemoved)):
> + Result = re.search(ExistingDefinitionToBeRemoved[i], Str)
> + if Result is not None:
> + Result = re.search("defined", Str)
> + if Result is None:
> + Str = Str + "#undef " + ExistingDefinitionToBeRemoved[i]
> + break
> + return Str
> +
> +def main():
> + MipiSystHSrcDir = "mipisyst/library/include/mipi_syst.h.in"
> + MipiSystHRealSrcDir = os.path.join(os.getcwd(), os.path.normpath(MipiSystHSrcDir))
> + MipiSystHRealDstDir = 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 = rfObj.readlines()
> + for lineIndex in range(len(SrcFile)):
> + SrcFile[lineIndex] = ProcessSpecialCharacter(SrcFile[lineIndex])
> + SrcFile[lineIndex] = ReplaceOldValue(SrcFile[lineIndex])
> + SrcFile[lineIndex] = RemoveDefinition(SrcFile[lineIndex])
> +
> + #
> + # Typedef a structure or enum type
> + #
> + i = -1
> + for struct in NewItemToBeAdded:
> + struct += "\n"
> + SrcFile.insert(i, struct)
> + i -= 1
> +
> + #
> + # Save edited content to mipi_syst.h
> + #
> + with open(MipiSystHRealDstDir, "w") as wfObj:
> + wfObj.writelines(SrcFile)
> +
> +if __name__ == '__main__':
> + main()
> diff --git a/MdePkg/Library/MipiSysTLib/MipiSysTLib.c b/MdePkg/Library/MipiSysTLib/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.<BR>
> +
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Base.h>
> +#include "mipi_syst.h"
> +
> +/**
> + Invoke initialization function in Mipi Sys-T module to initialize Mipi Sys-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 initialized.
> +**/
> +RETURN_STATUS
> +EFIAPI
> +InitMipiSystHandle (
> + IN OUT VOID *MipiSystHandle
> + )
> +{
> + MIPI_SYST_HANDLE *MipiSystH;
> +
> + MipiSystH = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + if (MipiSystH == 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + if (MipiSystH == NULL) {
> + return RETURN_INVALID_PARAMETER;
> + }
> +
> + if (Len == 0) {
> + //
> + // No data need to be written to Trace Hub
> + //
> + return RETURN_ABORTED;
> + }
> +
> + if (Str == 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + if (MipiSystH == 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/MipiSysTLib/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.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +##
> +
> +[Defines]
> + INF_VERSION = 0x00010005
> + BASE_NAME = MipiSysTLib
> + FILE_GUID = A58B0510-9E6D-4747-95D8-E5B8AF4633E6
> + MODULE_TYPE = BASE
> + VERSION_STRING = 1.0
> + LIBRARY_CLASS = MipiSysTLib
> +
> + DEFINE MIPI_HEADER_PATH = mipisyst/library/include/mipi_syst
> + DEFINE MIPI_SOURCE_PATH = mipisyst/library/src
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +# VALID_ARCHITECTURES = 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 = -DMIPI_SYST_STATIC
> diff --git a/MdePkg/Library/MipiSysTLib/Platform.c b/MdePkg/Library/MipiSysTLib/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.<BR>
> +
> +SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Base.h>
> +#include <Library/IoLib.h>
> +#include <Library/BaseMemoryLib.h>
> +#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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite64 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite8 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite16 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> + MmioWrite64 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 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 = (MIPI_SYST_HANDLE *)MipiSystHandle;
> +
> + MmioWrite32 ((UINTN)(MipiSystH->systh_platform.TraceHubPlatformData.MmioAddr + 0x30), 0x0);
> +}
> diff --git a/MdePkg/Library/MipiSysTLib/Platform.h b/MdePkg/Library/MipiSysTLib/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.<BR>
> +
> +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 ((MipiSystHandle), (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 ((MipiSystHandle), (Data))
> + #endif
> +#define MIPI_SYST_OUTPUT_FLAG(MipiSystHandle) MipiSystWriteFlag ((MipiSystHandle))
> +#endif
> +
> +#endif // MIPI_SYST_PLATFORM_H_
> diff --git a/MdePkg/Library/MipiSysTLib/Readme.md b/MdePkg/Library/MipiSysTLib/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 submodule.
> +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 validated.
> +
> +## 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/MipiSysTLib/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 compatible extensions */
> +#define MIPI_SYST_VERSION_PATCH 0 /**< Patch for existing major, minor, usually 0 */
> +
> +/** Define SyS-T API conformance level
> + *
> + * 10 = minimal (only short events)
> + * 20 = low overhead (exluding varag functions and CRC32)
> + * 30 = 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 >= MIPI_SYST_MAKE_VERSION_CODE(1,5,0)
> + * // do what only >= 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(str, sizeof(str)-1) + (offset))
> +#define _MIPI_SYST_HASH_AT_RUN_TIME(str, offset) (mipi_syst_hash_x65599(str, 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 = 0, /**< client build id message */
> + MIPI_SYST_TYPE_SHORT32 = 1, /**< value only message */
> + MIPI_SYST_TYPE_STRING = 2, /**< text message output */
> + MIPI_SYST_TYPE_CATALOG = 3, /**< catalog message output */
> + MIPI_SYST_TYPE_RAW = 6, /**< raw binary data */
> + MIPI_SYST_TYPE_SHORT64 = 7, /**< value only message */
> + MIPI_SYST_TYPE_CLOCK = 8, /**< clock sync message */
> +
> + MIPI_SYST_TYPE_MAX
> +};
> +
> +/** MIPI_SYST_TYPE_DEBUG_STRING Sub-Types
> + */
> +enum mipi_syst_subtype_string {
> + MIPI_SYST_STRING_GENERIC = 1, /**< string generic debug */
> + MIPI_SYST_STRING_FUNCTIONENTER = 2, /**< string is function name */
> + MIPI_SYST_STRING_FUNCTIONEXIT = 3, /**< string is function name */
> + MIPI_SYST_STRING_INVALIDPARAM = 5, /**< invalid SyS-T APIcall */
> + MIPI_SYST_STRING_ASSERT = 7, /**< Software Assert: failure */
> + MIPI_SYST_STRING_PRINTF_32 = 11, /**< printf with 32-bit packing */
> + MIPI_SYST_STRING_PRINTF_64 = 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 = 1, /**< 32-bit catalog ID, 32-bit packing */
> + MIPI_SYST_CATALOG_ID64_P32 = 2, /**< 64-bit catalog ID, 32-bit packing */
> + MIPI_SYST_CATALOG_ID32_P64 = 5, /**< 32-bit catalog ID, 64-bit packing */
> + MIPI_SYST_CATALOG_ID64_P64 = 6, /**< 64-bit catalog ID, 64-bit packing */
> +
> + MIPI_SYST_CATALOG_MAX
> +};
> +
> +/** MIPI_SYST_TYPE_CLOCK Sub-Types
> + */
> +enum mipi_syst_subtype_clock{
> + MIPI_SYST_CLOCK_TRANSPORT_SYNC = 1, /**< SyS-T clock & frequency sync */
> + MIPI_SYST_CLOCK_MAX
> +};
> +
> +enum mipi_syst_subtype_build {
> + MIPI_SYST_BUILD_ID_COMPACT32 = 0, /**< compact32 build id */
> + MIPI_SYST_BUILD_ID_COMPACT64 = 1, /**< compact64 build id */
> + MIPI_SYST_BUILD_ID_LONG = 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 =
> + * MIPI_SYST_GEN_GUID(0xf614b99d, 0x99a1, 0x4c04, 0x8c30, 0x90999ab5fe05);
> + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + */
> +#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 = 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 =
> +* 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_header *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_syst_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 *systh);
> +
> +/**
> + * 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 pdesc.
> + * @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 related
> + * MIPI_SYST_PCFG_ENABLE define. Removing unused features in this way reduces
> + * 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 extension.
> + */
> +#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 platform.
> + * 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 default
> + * depending on the SyS-T API conformance level. The level is specified using
> + * 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 printf
> + * 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 default
> + * depending on the SyS-T API conformance level. The level is specified using
> + * 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 location.
> + *
> + * This API requires #MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD to be set as well.
> + * 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 define
> + * 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 function*/
> + 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 routine */
> +#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 = 0, /**< no assigned severity */
> + MIPI_SYST_SEVERITY_FATAL = 1, /**< critical error level */
> + MIPI_SYST_SEVERITY_ERROR = 2, /**< error message level */
> + MIPI_SYST_SEVERITY_WARNING = 3,/**< warning message level */
> + MIPI_SYST_SEVERITY_INFO = 4, /**< information message level */
> + MIPI_SYST_SEVERITY_USER1 = 5, /**< user defined level 5 */
> + MIPI_SYST_SEVERITY_USER2 = 6, /**< user defined level 6 */
> + MIPI_SYST_SEVERITY_DEBUG = 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 = 16-Bit file and 16-Bit line (total: 32-bit)
> + * 1 = 32-Bit file and 32-Bit line (total: 64-bit)
> + * 2 = 32-bit code address
> + * 3 = 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/MipiSysTLib/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 (wildcards 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
>
> [Includes.IA32]
> Include/Ia32
> @@ -293,6 +294,14 @@
> #
> FdtLib|Include/Library/FdtLib.h
>
> + ## @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
>
> [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 <https://github.com/Zeex/subhook/blob/83d4e1ebef3588fae48b69a7352cc21801cb70bc/LICENSE.txt>`__
> - `RedfishPkg/Library/JsonLib/jansson <https://github.com/akheron/jansson/blob/2882ead5bb90cf12a01b07b2c2361e24960fae02/LICENSE>`__
> - `MdePkg/Library/BaseFdtLib/libfdt <https://github.com/devicetree-org/pylibfdt/blob/f39368a217496d32c4091a2dba4045b60649e3a5/BSD-2-Clause>`__
> +- `MdePkg/Library/MipiSysTLib/mipisyst <https://github.com/MIPI-Alliance/public-mipi-sys-t/blob/aae857d0d05ac65152ed24992a4acd834a0a107c/LICENSE>`__
>
> The EDK II Project is composed of packages. The maintainers for each package
> are listed in `Maintainers.txt <Maintainers.txt>`__.
> --
> 2.39.2.windows.1
>
>
>
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104599): https://edk2.groups.io/g/devel/message/104599
Mute This Topic: https://groups.io/mt/98798692/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/3943202/1813853/130120423/xyzzy [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list