audk/UefiPayloadPkg/Library/DebugPrintErrorLevelLibHob/DebugPrintErrorLevelLibHob.c
Ning Feng 2cc6d4c8ed UefiPayloadPkg: Fix debug print error level hob not save correct
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4264
Fix debug print error level hob not save correct DebugPrintErrorlevel
Should cover the case:
Header.Length == UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD ()
Cc: Ray Ni <ray.ni@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Cc: James Lu <james.lu@intel.com>
Cc: Gua Guo <gua.guo@intel.com>
Signed-off-by: Ning Feng <ning.feng@intel.com>
Reviewed-by: Gua Guo <gua.guo@intel.com>
2023-01-10 03:44:38 +00:00

81 lines
2.5 KiB
C

/** @file
Debug Print Error Level library instance that retrieves
the DebugPrintErrorLevel from bootloader.
Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Base.h>
#include <Uefi.h>
#include <PiDxe.h>
#include <Library/PcdLib.h>
#include <Library/HobLib.h>
#include <Guid/DebugPrintErrorLevel.h>
#include <Library/DebugPrintErrorLevelLib.h>
#include <UniversalPayload/UniversalPayload.h>
STATIC UINT32 gDebugPrintErrorLevel;
STATIC BOOLEAN gDebugPrintErrorLevelInitialized = FALSE;
/**
Returns the debug print error level mask for the current module.
@return Debug print error level mask for the current module.
**/
UINT32
EFIAPI
GetDebugPrintErrorLevel (
VOID
)
{
VOID *GuidHob;
UNIVERSAL_PAYLOAD_GENERIC_HEADER *GenericHeader;
UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL *DebugPrintErrorLevel;
if (!gDebugPrintErrorLevelInitialized) {
gDebugPrintErrorLevelInitialized = TRUE;
gDebugPrintErrorLevel = PcdGet32 (PcdDebugPrintErrorLevel);
GuidHob = GetFirstGuidHob (&gEdkiiDebugPrintErrorLevelGuid);
if (GuidHob != NULL) {
GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *)GET_GUID_HOB_DATA (GuidHob);
if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) < GET_GUID_HOB_DATA_SIZE (GuidHob)) &&
(GenericHeader->Length <= GET_GUID_HOB_DATA_SIZE (GuidHob)))
{
if (GenericHeader->Revision == UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL_REVISION) {
DebugPrintErrorLevel = (UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL *)GET_GUID_HOB_DATA (GuidHob);
if (DebugPrintErrorLevel->Header.Length >= UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL, ErrorLevel)) {
gDebugPrintErrorLevel = DebugPrintErrorLevel->ErrorLevel;
}
}
}
}
}
return gDebugPrintErrorLevel;
}
/**
Sets the global debug print error level mask fpr the entire platform.
@param ErrorLevel Global debug print error level.
@retval TRUE The debug print error level mask was sucessfully set.
@retval FALSE The debug print error level mask could not be set.
**/
BOOLEAN
EFIAPI
SetDebugPrintErrorLevel (
UINT32 ErrorLevel
)
{
//
// This library uinstance does not support setting the global debug print error
// level mask.
//
return FALSE;
}