1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
/** @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;
}
|