It consumes the HOB defined in UefiPayloadPkg/Include/Guid/DebugPrintErrorLevel.h, and allow bootloader to config DebugPrintErrorLevel. Cc: Guo Dong <guo.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Maurice Ma <maurice.ma@intel.com> Cc: Benjamin You <benjamin.you@intel.com> Cc: Sean Rhodes <sean@starlabs.systems> Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			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;
 | |
| }
 |