REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4144 This Library provides API to dump Trace Hub message. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Guo Gua <gua.guo@intel.com> Cc: Chan Laura <laura.chan@intel.com> Cc: Prakashan Krishnadas Veliyathuparambil <krishnadas.veliyathuparambil.prakashan@intel.com> Cc: K N Karthik <karthik.k.n@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Signed-off-by: Guo Gua <gua.guo@intel.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: K N Karthik <karthik.k.n@intel.com> Reviewed-by: Chan Laura <laura.chan@intel.com> Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			201 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| Functions implementation defined in this file are common for all type of TraceHubDebugSysTLib
 | |
| 
 | |
| Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #include <Base.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/TraceHubDebugSysTLib.h>
 | |
| #include <Library/MipiSysTLib/mipi_syst.h>
 | |
| #include <Guid/TraceHubDebugInfoHob.h>
 | |
| #include "InternalTraceHubApiCommon.h"
 | |
| #include "InternalTraceHubApi.h"
 | |
| 
 | |
| /**
 | |
|   Conditionally determine whether to enable Trace Hub message.
 | |
| 
 | |
|   @param[in]  Flag            Flag to enable or disable Trace Hub message.
 | |
|   @param[in]  DbgLevel        Debug Level of Trace Hub.
 | |
|   @param[in]  SeverityType    Severity type of input message.
 | |
| 
 | |
|   @retval TRUE            Enable trace hub message.
 | |
|   @retval FALSE           Disable trace hub message.
 | |
| **/
 | |
| BOOLEAN
 | |
| EFIAPI
 | |
| TraceHubDataEnabled (
 | |
|   IN BOOLEAN                  Flag,
 | |
|   IN UINT8                    DbgLevel,
 | |
|   IN TRACE_HUB_SEVERITY_TYPE  SeverityType
 | |
|   )
 | |
| {
 | |
|   if (Flag == TraceHubRoutingDisable) {
 | |
|     return FALSE;
 | |
|   }
 | |
| 
 | |
|   if (DbgLevel == TraceHubDebugLevelError) {
 | |
|     if (((SeverityType == SeverityFatal) || (SeverityType == SeverityError))) {
 | |
|       return TRUE;
 | |
|     }
 | |
|   } else if (DbgLevel == TraceHubDebugLevelErrorWarning) {
 | |
|     if (((SeverityType == SeverityFatal) || (SeverityType == SeverityError) || (SeverityType == SeverityWarning))) {
 | |
|       return TRUE;
 | |
|     }
 | |
|   } else if (DbgLevel == TraceHubDebugLevelErrorWarningInfo) {
 | |
|     if (((SeverityType == SeverityFatal) || (SeverityType == SeverityError) || (SeverityType == SeverityWarning) || (SeverityType == SeverityNormal))) {
 | |
|       return TRUE;
 | |
|     }
 | |
|   } else if (DbgLevel == TraceHubDebugLevelErrorWarningInfoVerbose) {
 | |
|     return TRUE;
 | |
|   }
 | |
| 
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Convert GUID from LE to BE or BE to LE.
 | |
| 
 | |
|   @param[in]  Guid           GUID that need to be converted.
 | |
|   @param[out] ConvertedGuid  GUID that is converted.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| SwapBytesGuid (
 | |
|   IN  GUID  *Guid,
 | |
|   OUT GUID  *ConvertedGuid
 | |
|   )
 | |
| {
 | |
|   CopyGuid (ConvertedGuid, Guid);
 | |
|   ConvertedGuid->Data1 = SwapBytes32 (ConvertedGuid->Data1);
 | |
|   ConvertedGuid->Data2 = SwapBytes16 (ConvertedGuid->Data2);
 | |
|   ConvertedGuid->Data3 = SwapBytes16 (ConvertedGuid->Data3);
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Check whether to output Trace Hub message according to some conditions.
 | |
|   Trace Hub message will be disabled if TraceHubDataEnabled() return FALSE
 | |
|   or Trace Hub MMIO address is 0.
 | |
| 
 | |
|   @param[in, out]  MipiSystHandle   A pointer to MIPI_SYST_HANDLE structure.
 | |
|   @param[in]       DbgContext       A pointer to Trace Hub debug instance.
 | |
|   @param[in]       SeverityType     Severity type of input message.
 | |
|   @param[in]       PrintType        Either catalog print or debug print.
 | |
| 
 | |
|   @retval RETURN_SUCCESS      Current Trace Hub message need to be output.
 | |
|   @retval Other               Current Trace Hub message will be disabled.
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| CheckWhetherToOutputMsg (
 | |
|   IN OUT MIPI_SYST_HANDLE         *MipiSystHandle,
 | |
|   IN     UINT8                    *DbgContext,
 | |
|   IN     TRACE_HUB_SEVERITY_TYPE  SeverityType,
 | |
|   IN     TRACEHUB_PRINTTYPE       PrintType
 | |
|   )
 | |
| {
 | |
|   UINT8          DbgLevel;
 | |
|   BOOLEAN        Flag;
 | |
|   UINT64         Addr;
 | |
|   RETURN_STATUS  Status;
 | |
| 
 | |
|   if (MipiSystHandle == NULL) {
 | |
|     return RETURN_INVALID_PARAMETER;
 | |
|   }
 | |
| 
 | |
|   if (PrintType == TraceHubDebugType) {
 | |
|     Status = GetTraceHubMsgVisibility (DbgContext, &Flag, &DbgLevel);
 | |
|     if (RETURN_ERROR (Status)) {
 | |
|       return Status;
 | |
|     }
 | |
| 
 | |
|     if (!TraceHubDataEnabled (Flag, DbgLevel, SeverityType)) {
 | |
|       return RETURN_ABORTED;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   Status = GetTraceHubMmioAddress (DbgContext, &Addr);
 | |
|   if (RETURN_ERROR (Status)) {
 | |
|     return Status;
 | |
|   }
 | |
| 
 | |
|   MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr = Addr;
 | |
|   if (MipiSystHandle->systh_platform.TraceHubPlatformData.MmioAddr == 0) {
 | |
|     return RETURN_ABORTED;
 | |
|   }
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Get Trace Hub MMIO Address.
 | |
| 
 | |
|   @param[in]      DbgContext        A pointer to Trace Hub debug instance.
 | |
|   @param[in, out] TraceAddress      Trace Hub MMIO Address.
 | |
| 
 | |
|   @retval RETURN_SUCCESS      Operation is successfully.
 | |
|   @retval Other               Operation is failed.
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| GetTraceHubMmioAddress (
 | |
|   IN     UINT8   *DbgContext,
 | |
|   IN OUT UINT64  *TraceAddress
 | |
|   )
 | |
| {
 | |
|   TRACEHUB_DEBUG_INFO_HOB  *ThDbgContext;
 | |
| 
 | |
|   if (TraceAddress == NULL) {
 | |
|     return RETURN_INVALID_PARAMETER;
 | |
|   }
 | |
| 
 | |
|   if (DbgContext != NULL) {
 | |
|     ThDbgContext  = (TRACEHUB_DEBUG_INFO_HOB *)DbgContext;
 | |
|     *TraceAddress = ThDbgContext->TraceHubMmioAddress;
 | |
|   } else {
 | |
|     *TraceAddress = FixedPcdGet64 (PcdTraceHubDebugMmioAddress);
 | |
|   }
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 | |
| 
 | |
| /**
 | |
|   Get visibility of Trace Hub Msg.
 | |
| 
 | |
|   @param[in]      DbgContext      A pointer to Trace Hub debug instance.
 | |
|   @param[in, out] Flag            Flag to enable or disable Trace Hub message.
 | |
|   @param[in, out] DbgLevel        Debug Level of Trace Hub.
 | |
| 
 | |
|   @retval RETURN_SUCCESS      Operation is successfully.
 | |
|   @retval Other               Operation is failed.
 | |
| **/
 | |
| RETURN_STATUS
 | |
| EFIAPI
 | |
| GetTraceHubMsgVisibility (
 | |
|   IN     UINT8    *DbgContext,
 | |
|   IN OUT BOOLEAN  *Flag,
 | |
|   IN OUT UINT8    *DbgLevel
 | |
|   )
 | |
| {
 | |
|   TRACEHUB_DEBUG_INFO_HOB  *ThDbgContext;
 | |
| 
 | |
|   if ((Flag == NULL) || (DbgLevel == NULL)) {
 | |
|     return RETURN_INVALID_PARAMETER;
 | |
|   }
 | |
| 
 | |
|   if (DbgContext != NULL) {
 | |
|     ThDbgContext = (TRACEHUB_DEBUG_INFO_HOB *)DbgContext;
 | |
|     *Flag        = ThDbgContext->Flag;
 | |
|     *DbgLevel    = ThDbgContext->DebugLevel;
 | |
|   } else {
 | |
|     *DbgLevel = FixedPcdGet8 (PcdTraceHubDebugLevel);
 | |
|     *Flag     = FixedPcdGetBool (PcdEnableTraceHubDebugMsg);
 | |
|   }
 | |
| 
 | |
|   return RETURN_SUCCESS;
 | |
| }
 |