MdePkg: Add MipiSysTLib library
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@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang.liu@intel.com> Cc: Guo Gua <gua.guo@intel.com> Cc: Chan Laura <laura.chan@intel.com> Cc: Prakashan Krishnadas Veliyathuparambil <krishnadas.veliyathuparambil.prakashan@intel.com> Cc: K N Karthik <karthik.k.n@intel.com> Signed-off-by: Guo Gua <gua.guo@intel.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: K N Karthik <karthik.k.n@intel.com> Reviewed-by: Chan Laura <laura.chan@intel.com> Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
		
							
								
								
									
										66
									
								
								MdePkg/Include/Library/MipiSysTLib.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								MdePkg/Include/Library/MipiSysTLib.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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_ | ||||||
							
								
								
									
										132
									
								
								MdePkg/Library/MipiSysTLib/GenMipiSystH.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								MdePkg/Library/MipiSysTLib/GenMipiSystH.py
									
									
									
									
									
										Normal file
									
								
							| @@ -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() | ||||||
							
								
								
									
										123
									
								
								MdePkg/Library/MipiSysTLib/MipiSysTLib.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								MdePkg/Library/MipiSysTLib/MipiSysTLib.c
									
									
									
									
									
										Normal file
									
								
							| @@ -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; | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								MdePkg/Library/MipiSysTLib/MipiSysTLib.inf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								MdePkg/Library/MipiSysTLib/MipiSysTLib.inf
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
							
								
								
									
										164
									
								
								MdePkg/Library/MipiSysTLib/Platform.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								MdePkg/Library/MipiSysTLib/Platform.c
									
									
									
									
									
										Normal file
									
								
							| @@ -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); | ||||||
|  | } | ||||||
							
								
								
									
										138
									
								
								MdePkg/Library/MipiSysTLib/Platform.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								MdePkg/Library/MipiSysTLib/Platform.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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_ | ||||||
							
								
								
									
										25
									
								
								MdePkg/Library/MipiSysTLib/Readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								MdePkg/Library/MipiSysTLib/Readme.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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. | ||||||
							
								
								
									
										789
									
								
								MdePkg/Library/MipiSysTLib/mipi_syst.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										789
									
								
								MdePkg/Library/MipiSysTLib/mipi_syst.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
| @@ -10,7 +10,10 @@ | |||||||
| { | { | ||||||
|     ## options defined .pytool/Plugin/LicenseCheck |     ## options defined .pytool/Plugin/LicenseCheck | ||||||
|     "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": { |     "EccCheck": { | ||||||
|         ## Exception sample looks like below: |         ## Exception sample looks like below: | ||||||
| @@ -68,7 +71,8 @@ | |||||||
|             "Include/Library/SafeIntLib.h", |             "Include/Library/SafeIntLib.h", | ||||||
|             "Include/Protocol/DebugSupport.h", |             "Include/Protocol/DebugSupport.h", | ||||||
|             "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c", |             "Test/UnitTest/Library/BaseSafeIntLib/TestBaseSafeIntLib.c", | ||||||
|             "Library/BaseFdtLib" |             "Library/BaseFdtLib", | ||||||
|  |             "Library/MipiSysTLib/mipi_syst.h" | ||||||
|         ] |         ] | ||||||
|     }, |     }, | ||||||
|     ## options defined ci/Plugin/CompilerPlugin |     ## options defined ci/Plugin/CompilerPlugin | ||||||
| @@ -166,6 +170,7 @@ | |||||||
|         "IgnoreStandardPaths": [],   # Standard Plugin defined paths that should be ignore |         "IgnoreStandardPaths": [],   # Standard Plugin defined paths that should be ignore | ||||||
|         "AdditionalIncludePaths": [] # Additional paths to spell check (wildcards supported) |         "AdditionalIncludePaths": [] # Additional paths to spell check (wildcards supported) | ||||||
|     }, |     }, | ||||||
|  |  | ||||||
|     # options defined in .pytool/Plugin/UncrustifyCheck |     # options defined in .pytool/Plugin/UncrustifyCheck | ||||||
|     "UncrustifyCheck": { |     "UncrustifyCheck": { | ||||||
|         "IgnoreFiles": [ |         "IgnoreFiles": [ | ||||||
| @@ -175,7 +180,8 @@ | |||||||
|             "Library/BaseFdtLib/stddef.h", |             "Library/BaseFdtLib/stddef.h", | ||||||
|             "Library/BaseFdtLib/stdint.h", |             "Library/BaseFdtLib/stdint.h", | ||||||
|             "Library/BaseFdtLib/stdlib.h", |             "Library/BaseFdtLib/stdlib.h", | ||||||
|             "Library/BaseFdtLib/string.h" |             "Library/BaseFdtLib/string.h", | ||||||
|  |             "mipi_syst.h" | ||||||
|         ] |         ] | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -28,6 +28,7 @@ | |||||||
|   Include |   Include | ||||||
|   Test/UnitTest/Include |   Test/UnitTest/Include | ||||||
|   Test/Mock/Include |   Test/Mock/Include | ||||||
|  |   Library/MipiSysTLib/mipisyst/library/include | ||||||
|  |  | ||||||
| [Includes.IA32] | [Includes.IA32] | ||||||
|   Include/Ia32 |   Include/Ia32 | ||||||
| @@ -293,6 +294,14 @@ | |||||||
|   # |   # | ||||||
|   FdtLib|Include/Library/FdtLib.h |   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] | [LibraryClasses.IA32, LibraryClasses.X64, LibraryClasses.AARCH64] | ||||||
|   ##  @libraryclass  Provides services to generate random number. |   ##  @libraryclass  Provides services to generate random number. | ||||||
|   # |   # | ||||||
|   | |||||||
| @@ -184,6 +184,7 @@ | |||||||
|   MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf |   MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf | ||||||
|   MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf |   MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf | ||||||
|   MdePkg/Library/TdxLib/TdxLib.inf |   MdePkg/Library/TdxLib/TdxLib.inf | ||||||
|  |   MdePkg/Library/MipiSysTLib/MipiSysTLib.inf | ||||||
|  |  | ||||||
| [Components.EBC] | [Components.EBC] | ||||||
|   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf |   MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user