DebugPrintErrorLevelLibHob.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /** @file
  2. Debug Print Error Level library instance that retrieves
  3. the DebugPrintErrorLevel from bootloader.
  4. Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #include <Base.h>
  8. #include <Uefi.h>
  9. #include <PiDxe.h>
  10. #include <Library/PcdLib.h>
  11. #include <Library/HobLib.h>
  12. #include <Guid/DebugPrintErrorLevel.h>
  13. #include <Library/DebugPrintErrorLevelLib.h>
  14. #include <UniversalPayload/UniversalPayload.h>
  15. STATIC UINT32 gDebugPrintErrorLevel;
  16. STATIC BOOLEAN gDebugPrintErrorLevelInitialized = FALSE;
  17. /**
  18. Returns the debug print error level mask for the current module.
  19. @return Debug print error level mask for the current module.
  20. **/
  21. UINT32
  22. EFIAPI
  23. GetDebugPrintErrorLevel (
  24. VOID
  25. )
  26. {
  27. VOID *GuidHob;
  28. UNIVERSAL_PAYLOAD_GENERIC_HEADER *GenericHeader;
  29. UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL *DebugPrintErrorLevel;
  30. if (!gDebugPrintErrorLevelInitialized) {
  31. gDebugPrintErrorLevelInitialized = TRUE;
  32. gDebugPrintErrorLevel = PcdGet32 (PcdDebugPrintErrorLevel);
  33. GuidHob = GetFirstGuidHob (&gEdkiiDebugPrintErrorLevelGuid);
  34. if (GuidHob != NULL) {
  35. GenericHeader = (UNIVERSAL_PAYLOAD_GENERIC_HEADER *)GET_GUID_HOB_DATA (GuidHob);
  36. if ((sizeof (UNIVERSAL_PAYLOAD_GENERIC_HEADER) < GET_GUID_HOB_DATA_SIZE (GuidHob)) &&
  37. (GenericHeader->Length <= GET_GUID_HOB_DATA_SIZE (GuidHob)))
  38. {
  39. if (GenericHeader->Revision == UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL_REVISION) {
  40. DebugPrintErrorLevel = (UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL *)GET_GUID_HOB_DATA (GuidHob);
  41. if (DebugPrintErrorLevel->Header.Length >= UNIVERSAL_PAYLOAD_SIZEOF_THROUGH_FIELD (UEFI_PAYLOAD_DEBUG_PRINT_ERROR_LEVEL, ErrorLevel)) {
  42. gDebugPrintErrorLevel = DebugPrintErrorLevel->ErrorLevel;
  43. }
  44. }
  45. }
  46. }
  47. }
  48. return gDebugPrintErrorLevel;
  49. }
  50. /**
  51. Sets the global debug print error level mask fpr the entire platform.
  52. @param ErrorLevel Global debug print error level.
  53. @retval TRUE The debug print error level mask was sucessfully set.
  54. @retval FALSE The debug print error level mask could not be set.
  55. **/
  56. BOOLEAN
  57. EFIAPI
  58. SetDebugPrintErrorLevel (
  59. UINT32 ErrorLevel
  60. )
  61. {
  62. //
  63. // This library uinstance does not support setting the global debug print error
  64. // level mask.
  65. //
  66. return FALSE;
  67. }