MonoStatusCode.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /** @file
  2. Copyright (c) 2004 - 2020, Intel Corporation. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. Module Name:
  5. MonoStatusCode.c
  6. Abstract:
  7. PEIM to provide the status code functionality, to aid in system debug.
  8. It includes output to 0x80 port and/or to serial port.
  9. This PEIM is monolithic. Different platform should provide different library.
  10. --*/
  11. #include "MonoStatusCode.h"
  12. #include "PlatformStatusCode.h"
  13. #define CMOS_EFI_DEBUG 0x14
  14. //
  15. // Module globals
  16. //
  17. EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { PlatformReportStatusCode };
  18. EFI_PEI_PPI_DESCRIPTOR mPpiListStatusCode = {
  19. (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
  20. &gEfiPeiStatusCodePpiGuid,
  21. &mStatusCodePpi
  22. };
  23. //
  24. // Function implementations
  25. //
  26. /**
  27. Translate from a DXE status code interface into a PEI-callable
  28. interface, making the PEI the least common denominator..
  29. Same as DXE ReportStatusCode RT service
  30. **/
  31. EFI_STATUS
  32. EFIAPI
  33. TranslateDxeStatusCodeToPeiStatusCode (
  34. IN EFI_STATUS_CODE_TYPE CodeType,
  35. IN EFI_STATUS_CODE_VALUE Value,
  36. IN UINT32 Instance,
  37. IN EFI_GUID * CallerId,
  38. IN EFI_STATUS_CODE_DATA * Data OPTIONAL
  39. )
  40. {
  41. return PlatformReportStatusCode (NULL, CodeType, Value, Instance, CallerId, Data);
  42. }
  43. /**
  44. Build a hob describing the status code listener that has been installed.
  45. This will be used by DXE code until a runtime status code listener is
  46. installed.
  47. @param PeiServices General purpose services available to every PEIM.
  48. @retval Status EFI_SUCCESS if the interface could be successfully
  49. installed
  50. **/
  51. EFI_STATUS
  52. EFIAPI
  53. InitializeDxeReportStatusCode (
  54. IN const EFI_PEI_SERVICES **PeiServices
  55. )
  56. {
  57. EFI_STATUS Status = EFI_UNSUPPORTED;
  58. VOID *Instance;
  59. VOID *Result;
  60. Instance = (VOID *) (UINTN) TranslateDxeStatusCodeToPeiStatusCode;
  61. Result = BuildGuidDataHob (
  62. &gEfiStatusCodeRuntimeProtocolGuid,
  63. &Instance,
  64. sizeof (VOID *)
  65. );
  66. if (Result != NULL) {
  67. Status = EFI_SUCCESS;
  68. }
  69. return Status;
  70. }
  71. /**
  72. Initialize the platform status codes and publish the platform status code
  73. PPI.
  74. @param FfsHeader FV this PEIM was loaded from.
  75. @param PeiServices General purpose services available to every PEIM.
  76. @retval Status EFI_SUCCESS
  77. **/
  78. VOID
  79. EFIAPI
  80. InitializeMonoStatusCode (
  81. IN EFI_FFS_FILE_HEADER *FfsHeader,
  82. IN CONST EFI_PEI_SERVICES **PeiServices
  83. )
  84. {
  85. EFI_STATUS Status;
  86. //
  87. // Initialize status code listeners.
  88. //
  89. PlatformInitializeStatusCode (FfsHeader, PeiServices);
  90. //
  91. // Publish the status code capability to other modules
  92. //
  93. Status = (*PeiServices)->InstallPpi (PeiServices, &mPpiListStatusCode);
  94. ASSERT_EFI_ERROR (Status);
  95. DEBUG ((DEBUG_ERROR, "\nMono Status Code PEIM Loaded\n"));
  96. return ;
  97. }