| /** @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; | |
| } |