From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001 From: Angelos Mouzakitis Date: Tue, 10 Oct 2023 14:33:42 +0000 Subject: Add submodule dependency files Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec --- .../StatusCodeHandler/Smm/StatusCodeHandlerSmm.c | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 roms/edk2/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c (limited to 'roms/edk2/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c') diff --git a/roms/edk2/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c b/roms/edk2/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c new file mode 100644 index 000000000..20271571d --- /dev/null +++ b/roms/edk2/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c @@ -0,0 +1,84 @@ +/** @file + Status Code Handler Driver which produces general handlers and hook them + onto the SMM status code router. + + Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "StatusCodeHandlerSmm.h" + +EFI_SMM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; + + +/** + Dispatch initialization request to sub status code devices based on + customized feature flags. + +**/ +VOID +InitializationDispatcherWorker ( + VOID + ) +{ + EFI_STATUS Status; + + // + // If enable UseSerial, then initialize serial port. + // if enable UseRuntimeMemory, then initialize runtime memory status code worker. + // + if (PcdGetBool (PcdStatusCodeUseSerial)) { + // + // Call Serial Port Lib API to initialize serial port. + // + Status = SerialPortInitialize (); + ASSERT_EFI_ERROR (Status); + } + if (PcdGetBool (PcdStatusCodeUseMemory)) { + Status = MemoryStatusCodeInitializeWorker (); + ASSERT_EFI_ERROR (Status); + } +} + +/** + Entry point of SMM Status Code Driver. + + This function is the entry point of SMM Status Code Driver. + + @param ImageHandle The firmware allocated handle for the EFI image. + @param SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + +**/ +EFI_STATUS +EFIAPI +StatusCodeHandlerSmmEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + Status = gSmst->SmmLocateProtocol ( + &gEfiSmmRscHandlerProtocolGuid, + NULL, + (VOID **) &mRscHandlerProtocol + ); + ASSERT_EFI_ERROR (Status); + + // + // Dispatch initialization request to supported devices + // + InitializationDispatcherWorker (); + + if (PcdGetBool (PcdStatusCodeUseSerial)) { + mRscHandlerProtocol->Register (SerialStatusCodeReportWorker); + } + if (PcdGetBool (PcdStatusCodeUseMemory)) { + mRscHandlerProtocol->Register (MemoryStatusCodeReportWorker); + } + + return EFI_SUCCESS; +} -- cgit