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