mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
Resolves a new CodeQL error due to the value being incremented in the loop being a narrower type than the variable it is being compared against. The variable is changed to a UINT32 type so it has the same width as the type it is being compared against. Issue explanation: In a loop condition, comparison of a value of a narrow type with a value of a wide type may result in unexpected behavior if the wider value is sufficiently large (or small). This is because the narrower value may overflow. This can lead to an infinite loop. Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Gua Guo <gua.guo@intel.com> Cc: Prakashan Krishnadas Veliyathuparambil <krishnadas.veliyathuparambil.prakashan@intel.com> Cc: K N Karthik <karthik.k.n@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Gua Guo <gua.guo@intel.com>
246 lines
6.2 KiB
C
246 lines
6.2 KiB
C
/** @file
|
|
System prints Trace Hub message in SEC/PEI/DXE/SMM based on fixed PCDs.
|
|
Only support single Trace Hub debug instance.
|
|
|
|
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/PcdLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/TraceHubDebugSysTLib.h>
|
|
#include <Library/MipiSysTLib.h>
|
|
#include <Library/MipiSysTLib/mipi_syst.h>
|
|
#include <Guid/TraceHubDebugInfoHob.h>
|
|
#include "InternalTraceHubApiCommon.h"
|
|
#include "InternalTraceHubApi.h"
|
|
|
|
/**
|
|
Write debug string to specified Trace Hub MMIO address.
|
|
|
|
@param[in] SeverityType Severity type of input message.
|
|
@param[in] Buffer A pointer to the data buffer.
|
|
@param[in] NumberOfBytes The size of data buffer.
|
|
|
|
@retval RETURN_SUCCESS Data was written to Trace Hub.
|
|
@retval Other Failed to output Trace Hub message.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
TraceHubSysTDebugWrite (
|
|
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
|
|
IN UINT8 *Buffer,
|
|
IN UINTN NumberOfBytes
|
|
)
|
|
{
|
|
MIPI_SYST_HANDLE MipiSystHandle;
|
|
MIPI_SYST_HEADER MipiSystHeader;
|
|
RETURN_STATUS Status;
|
|
UINT32 DbgInstCount;
|
|
UINT32 Index;
|
|
|
|
if (NumberOfBytes == 0) {
|
|
//
|
|
// No data need to be written to Trace Hub
|
|
//
|
|
return RETURN_SUCCESS;
|
|
}
|
|
|
|
if (Buffer == NULL) {
|
|
return RETURN_INVALID_PARAMETER;
|
|
}
|
|
|
|
DbgInstCount = CountThDebugInstance ();
|
|
|
|
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
|
|
MipiSystHandle.systh_header = &MipiSystHeader;
|
|
|
|
Status = InitMipiSystHandle (&MipiSystHandle);
|
|
if (RETURN_ERROR (Status)) {
|
|
return Status;
|
|
}
|
|
|
|
for (Index = 0; Index < DbgInstCount; Index++) {
|
|
Status = CheckWhetherToOutputMsg (
|
|
&MipiSystHandle,
|
|
NULL,
|
|
SeverityType,
|
|
TraceHubDebugType
|
|
);
|
|
if (!RETURN_ERROR (Status)) {
|
|
Status = MipiSystWriteDebug (
|
|
&MipiSystHandle,
|
|
SeverityType,
|
|
(UINT16)NumberOfBytes,
|
|
(CHAR8 *)Buffer
|
|
);
|
|
if (RETURN_ERROR (Status)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Write catalog status code message to specified Trace Hub MMIO address.
|
|
|
|
@param[in] SeverityType Severity type of input message.
|
|
@param[in] Id Catalog ID.
|
|
@param[in] Guid Driver Guid.
|
|
|
|
@retval RETURN_SUCCESS Data was written to Trace Hub.
|
|
@retval Other Failed to output Trace Hub message.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
TraceHubSysTWriteCataLog64StatusCode (
|
|
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
|
|
IN UINT64 Id,
|
|
IN GUID *Guid
|
|
)
|
|
{
|
|
MIPI_SYST_HANDLE MipiSystHandle;
|
|
MIPI_SYST_HEADER MipiSystHeader;
|
|
RETURN_STATUS Status;
|
|
UINT32 DbgInstCount;
|
|
UINT32 Index;
|
|
|
|
if (Guid == NULL) {
|
|
return RETURN_INVALID_PARAMETER;
|
|
}
|
|
|
|
DbgInstCount = CountThDebugInstance ();
|
|
|
|
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
|
|
MipiSystHandle.systh_header = &MipiSystHeader;
|
|
|
|
Status = InitMipiSystHandle (&MipiSystHandle);
|
|
if (RETURN_ERROR (Status)) {
|
|
return Status;
|
|
}
|
|
|
|
SwapBytesGuid (Guid, (GUID *)(VOID *)&MipiSystHandle.systh_guid);
|
|
MipiSystHandle.systh_tag.et_guid = 1;
|
|
|
|
for (Index = 0; Index < DbgInstCount; Index++) {
|
|
Status = CheckWhetherToOutputMsg (
|
|
&MipiSystHandle,
|
|
NULL,
|
|
SeverityType,
|
|
TraceHubCatalogType
|
|
);
|
|
if (!RETURN_ERROR (Status)) {
|
|
Status = MipiSystWriteCatalog (
|
|
&MipiSystHandle,
|
|
SeverityType,
|
|
Id
|
|
);
|
|
if (RETURN_ERROR (Status)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Write catalog message to specified Trace Hub MMIO address.
|
|
|
|
@param[in] SeverityType Severity type of input message.
|
|
@param[in] Id Catalog ID.
|
|
@param[in] NumberOfParams Number of entries in argument list.
|
|
@param[in] ... Catalog message parameters.
|
|
|
|
@retval RETURN_SUCCESS Data was written to Trace Hub.
|
|
@retval Other Failed to output Trace Hub message.
|
|
**/
|
|
RETURN_STATUS
|
|
EFIAPI
|
|
TraceHubSysTWriteCataLog64 (
|
|
IN TRACE_HUB_SEVERITY_TYPE SeverityType,
|
|
IN UINT64 Id,
|
|
IN UINTN NumberOfParams,
|
|
...
|
|
)
|
|
{
|
|
MIPI_SYST_HANDLE MipiSystHandle;
|
|
MIPI_SYST_HEADER MipiSystHeader;
|
|
VA_LIST Args;
|
|
UINTN Index;
|
|
RETURN_STATUS Status;
|
|
UINT32 DbgInstCount;
|
|
|
|
DbgInstCount = 0;
|
|
|
|
if (NumberOfParams > sizeof (MipiSystHandle.systh_param) / sizeof (UINT32)) {
|
|
return RETURN_INVALID_PARAMETER;
|
|
}
|
|
|
|
DbgInstCount = CountThDebugInstance ();
|
|
|
|
ZeroMem (&MipiSystHandle, sizeof (MIPI_SYST_HANDLE));
|
|
MipiSystHandle.systh_header = &MipiSystHeader;
|
|
|
|
Status = InitMipiSystHandle (&MipiSystHandle);
|
|
if (RETURN_ERROR (Status)) {
|
|
return Status;
|
|
}
|
|
|
|
MipiSystHandle.systh_param_count = (UINT32)NumberOfParams;
|
|
VA_START (Args, NumberOfParams);
|
|
for (Index = 0; Index < NumberOfParams; Index++) {
|
|
MipiSystHandle.systh_param[Index] = VA_ARG (Args, UINT32);
|
|
}
|
|
|
|
VA_END (Args);
|
|
|
|
for (Index = 0; Index < DbgInstCount; Index++) {
|
|
Status = CheckWhetherToOutputMsg (
|
|
&MipiSystHandle,
|
|
NULL,
|
|
SeverityType,
|
|
TraceHubCatalogType
|
|
);
|
|
if (!RETURN_ERROR (Status)) {
|
|
Status = MipiSystWriteCatalog (
|
|
&MipiSystHandle,
|
|
SeverityType,
|
|
Id
|
|
);
|
|
if (RETURN_ERROR (Status)) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return Status;
|
|
}
|
|
|
|
/**
|
|
Collect the total number of Trace Hub debug instance in the system.
|
|
|
|
@retval UINT32 The total number of Trace Hub debug instance in the system.
|
|
**/
|
|
UINT32
|
|
EFIAPI
|
|
CountThDebugInstance (
|
|
VOID
|
|
)
|
|
{
|
|
UINT32 DbgInstCount;
|
|
|
|
//
|
|
// 1 from PCD.
|
|
//
|
|
DbgInstCount = 1;
|
|
|
|
return DbgInstCount;
|
|
}
|