/** @file Functions implementation defined in this file are common for all type of TraceHubDebugSysTLib Copyright (c) 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include "InternalTraceHubApiCommon.h" #include "InternalTraceHubApi.h" /** Conditionally determine whether to enable Trace Hub message. @param[in] Flag Flag to enable or disable Trace Hub message. @param[in] DbgLevel Debug Level of Trace Hub. @param[in] SeverityType Severity type of input message. @retval TRUE Enable trace hub message. @retval FALSE Disable trace hub message. **/ BOOLEAN EFIAPI TraceHubDataEnabled ( IN BOOLEAN Flag, IN UINT8 DbgLevel, IN TRACE_HUB_SEVERITY_TYPE SeverityType ) { if (Flag == 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; }