This change added support of StandaloneMm for StatusCodeHandler. It adds a new instance of StatusCodeHandler of MM_STANDALONE type, and abstracts the driver entrypoint into separate files, replaced gSmst with gMmst, and switched to MM version of RscHandlerProtocol.
Cc: Jian J Wang <jian.j.w...@intel.com> Cc: Hao A Wu <hao.a...@intel.com> Cc: Dandan Bi <dandan...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Jiewen Yao <jiewen....@intel.com> Signed-off-by: Kun Qin <ku...@outlook.com> Reviewed-by: Hao A Wu <hao.a...@intel.com> --- Notes: v4: - Previously reviewed. No change. v3: - Added reviewed-by tag [Hao] v2: - New patch to support StatusCodeHandler in standalone mm [Liming] MdeModulePkg/Universal/StatusCodeHandler/Smm/MemoryStatusCodeWorker.c | 36 ++++++++++---------- MdeModulePkg/Universal/StatusCodeHandler/Smm/SerialStatusCodeWorker.c | 2 +- MdeModulePkg/Universal/StatusCodeHandler/Smm/{StatusCodeHandlerSmm.c => StatusCodeHandlerMm.c} | 23 +++++-------- MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandalone.c | 31 +++++++++++++++++ MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerTraditional.c | 31 +++++++++++++++++ MdeModulePkg/MdeModulePkg.dsc | 1 + MdeModulePkg/Universal/StatusCodeHandler/Smm/{StatusCodeHandlerSmm.h => StatusCodeHandlerMm.h} | 23 ++++++++++--- MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf | 15 ++++---- MdeModulePkg/Universal/StatusCodeHandler/Smm/{StatusCodeHandlerSmm.inf => StatusCodeHandlerStandaloneMm.inf} | 32 ++++++++--------- 9 files changed, 132 insertions(+), 62 deletions(-) diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/MemoryStatusCodeWorker.c b/MdeModulePkg/Universal/StatusCodeHandler/Smm/MemoryStatusCodeWorker.c index c9b43fd2468f..14bac8ec3c18 100644 --- a/MdeModulePkg/Universal/StatusCodeHandler/Smm/MemoryStatusCodeWorker.c +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/MemoryStatusCodeWorker.c @@ -7,15 +7,15 @@ **/ -#include "StatusCodeHandlerSmm.h" +#include "StatusCodeHandlerMm.h" -RUNTIME_MEMORY_STATUSCODE_HEADER *mSmmMemoryStatusCodeTable; +RUNTIME_MEMORY_STATUSCODE_HEADER *mMmMemoryStatusCodeTable; /** - Initialize SMM memory status code table as initialization for memory status code worker + Initialize MM memory status code table as initialization for memory status code worker - @retval EFI_SUCCESS SMM memory status code table successfully initialized. - @retval others Errors from gSmst->SmmInstallConfigurationTable(). + @retval EFI_SUCCESS MM memory status code table successfully initialized. + @retval others Errors from gMmst->MmInstallConfigurationTable(). **/ EFI_STATUS MemoryStatusCodeInitializeWorker ( @@ -25,17 +25,17 @@ MemoryStatusCodeInitializeWorker ( EFI_STATUS Status; // - // Allocate SMM memory status code pool. + // Allocate MM memory status code pool. // - mSmmMemoryStatusCodeTable = (RUNTIME_MEMORY_STATUSCODE_HEADER *)AllocateZeroPool (sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeMemorySize) * 1024); - ASSERT (mSmmMemoryStatusCodeTable != NULL); + mMmMemoryStatusCodeTable = (RUNTIME_MEMORY_STATUSCODE_HEADER *)AllocateZeroPool (sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeMemorySize) * 1024); + ASSERT (mMmMemoryStatusCodeTable != NULL); - mSmmMemoryStatusCodeTable->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD); - Status = gSmst->SmmInstallConfigurationTable ( - gSmst, + mMmMemoryStatusCodeTable->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD); + Status = gMmst->MmInstallConfigurationTable ( + gMmst, &gMemoryStatusCodeRecordGuid, - &mSmmMemoryStatusCodeTable, - sizeof (mSmmMemoryStatusCodeTable) + &mMmMemoryStatusCodeTable, + sizeof (mMmMemoryStatusCodeTable) ); return Status; } @@ -74,8 +74,8 @@ MemoryStatusCodeReportWorker ( // // Locate current record buffer. // - Record = (MEMORY_STATUSCODE_RECORD *) (mSmmMemoryStatusCodeTable + 1); - Record = &Record[mSmmMemoryStatusCodeTable->RecordIndex++]; + Record = (MEMORY_STATUSCODE_RECORD *) (mMmMemoryStatusCodeTable + 1); + Record = &Record[mMmMemoryStatusCodeTable->RecordIndex++]; // // Save status code. @@ -92,12 +92,12 @@ MemoryStatusCodeReportWorker ( // so the first record is pointed by record index. // If it is less then max number, index of the first record is zero. // - mSmmMemoryStatusCodeTable->NumberOfRecords++; - if (mSmmMemoryStatusCodeTable->RecordIndex == mSmmMemoryStatusCodeTable->MaxRecordsNumber) { + mMmMemoryStatusCodeTable->NumberOfRecords++; + if (mMmMemoryStatusCodeTable->RecordIndex == mMmMemoryStatusCodeTable->MaxRecordsNumber) { // // Wrap around record index. // - mSmmMemoryStatusCodeTable->RecordIndex = 0; + mMmMemoryStatusCodeTable->RecordIndex = 0; } return EFI_SUCCESS; diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/SerialStatusCodeWorker.c b/MdeModulePkg/Universal/StatusCodeHandler/Smm/SerialStatusCodeWorker.c index 3df0a6712611..bcb75bc7b170 100644 --- a/MdeModulePkg/Universal/StatusCodeHandler/Smm/SerialStatusCodeWorker.c +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/SerialStatusCodeWorker.c @@ -6,7 +6,7 @@ **/ -#include "StatusCodeHandlerSmm.h" +#include "StatusCodeHandlerMm.h" /** Convert status code value and extended data to readable ASCII string, send string to serial I/O device. diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerMm.c similarity index 69% rename from MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c rename to MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerMm.c index 20271571ded4..4948d3d99ad6 100644 --- a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.c +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerMm.c @@ -1,15 +1,15 @@ /** @file Status Code Handler Driver which produces general handlers and hook them - onto the SMM status code router. + onto the MM status code router. Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ -#include "StatusCodeHandlerSmm.h" +#include "StatusCodeHandlerMm.h" -EFI_SMM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; +EFI_MM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; /** @@ -42,27 +42,22 @@ InitializationDispatcherWorker ( } /** - Entry point of SMM Status Code Driver. + Entry point of Common MM 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. + This function is the entry point of MM Status Code Driver. @retval EFI_SUCCESS The entry point is executed successfully. **/ EFI_STATUS -EFIAPI -StatusCodeHandlerSmmEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable +StatusCodeHandlerCommonEntry ( + VOID ) { EFI_STATUS Status; - Status = gSmst->SmmLocateProtocol ( - &gEfiSmmRscHandlerProtocolGuid, + Status = gMmst->MmLocateProtocol ( + &gEfiMmRscHandlerProtocolGuid, NULL, (VOID **) &mRscHandlerProtocol ); diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandalone.c b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandalone.c new file mode 100644 index 000000000000..11a61705d612 --- /dev/null +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandalone.c @@ -0,0 +1,31 @@ +/** @file + Abstraction layer that contains Standalone MM specific implementation for + Status Code Handler Driver. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "StatusCodeHandlerMm.h" + +/** + Entry point of Standalone MM Status Code Driver. + + This function is the entry point of Standalone MM Status Code Driver. + + @param ImageHandle The firmware allocated handle for the EFI image. + @param SystemTable A pointer to the EFI MM System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. + +**/ +EFI_STATUS +EFIAPI +StatusCodeHandlerStandaloneMmEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_MM_SYSTEM_TABLE *SystemTable + ) +{ + return StatusCodeHandlerCommonEntry (); +} diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerTraditional.c b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerTraditional.c new file mode 100644 index 000000000000..1105f184b08e --- /dev/null +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerTraditional.c @@ -0,0 +1,31 @@ +/** @file + Abstraction layer that contains Standalone MM specific implementation for + Status Code Handler Driver. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "StatusCodeHandlerMm.h" + +/** + Entry point of Traditional MM Status Code Driver. + + This function is the entry point of Traditional MM 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 +StatusCodeHandlerTraditionalMmEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + return StatusCodeHandlerCommonEntry (); +} diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index 200fbcc18a18..098909490095 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -476,6 +476,7 @@ [Components.IA32, Components.X64] MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf + MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.inf diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.h b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerMm.h similarity index 87% rename from MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.h rename to MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerMm.h index 6b5d53a4fee3..7871ee404046 100644 --- a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.h +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerMm.h @@ -7,10 +7,10 @@ **/ -#ifndef __STATUS_CODE_HANDLER_SMM_H__ -#define __STATUS_CODE_HANDLER_SMM_H__ +#ifndef __STATUS_CODE_HANDLER_MM_H__ +#define __STATUS_CODE_HANDLER_MM_H__ -#include <Protocol/SmmReportStatusCodeHandler.h> +#include <Protocol/MmReportStatusCodeHandler.h> #include <Guid/MemoryStatusCodeRecord.h> #include <Guid/StatusCodeDataTypeId.h> @@ -22,7 +22,7 @@ #include <Library/PrintLib.h> #include <Library/PcdLib.h> #include <Library/UefiDriverEntryPoint.h> -#include <Library/SmmServicesTableLib.h> +#include <Library/MmServicesTableLib.h> #include <Library/SerialPortLib.h> #include <Library/MemoryAllocationLib.h> #include <Library/BaseMemoryLib.h> @@ -32,7 +32,7 @@ // #define MAX_DEBUG_MESSAGE_LENGTH 0x100 -extern RUNTIME_MEMORY_STATUSCODE_HEADER *mSmmMemoryStatusCodeTable; +extern RUNTIME_MEMORY_STATUSCODE_HEADER *mMmMemoryStatusCodeTable; /** Locates Serial I/O Protocol as initialization for serial status code worker. @@ -114,4 +114,17 @@ MemoryStatusCodeReportWorker ( IN EFI_STATUS_CODE_DATA *Data OPTIONAL ); +/** + Entry point of Common MM Status Code Driver. + + This function is the entry point of MM Status Code Driver. + + @retval EFI_SUCCESS The entry point is executed successfully. + +**/ +EFI_STATUS +StatusCodeHandlerCommonEntry ( + VOID + ); + #endif diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf index 4e24d87e55d1..90abe662d291 100644 --- a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf @@ -1,5 +1,5 @@ ## @file -# Status Code Handler Driver which produces general handlers and hook them onto the SMM status code router. +# Status Code Handler Driver which produces general handlers and hook them onto the MM status code router. # # Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> @@ -17,7 +17,7 @@ [Defines] MODULE_TYPE = DXE_SMM_DRIVER PI_SPECIFICATION_VERSION = 0x0001000A VERSION_STRING = 1.0 - ENTRY_POINT = StatusCodeHandlerSmmEntry + ENTRY_POINT = StatusCodeHandlerTraditionalMmEntry # # The following information is for reference only and not required by the build tools. @@ -26,8 +26,9 @@ [Defines] # [Sources] - StatusCodeHandlerSmm.c - StatusCodeHandlerSmm.h + StatusCodeHandlerMm.c + StatusCodeHandlerMm.h + StatusCodeHandlerTraditional.c SerialStatusCodeWorker.c MemoryStatusCodeWorker.c @@ -37,7 +38,7 @@ [Packages] [LibraryClasses] SerialPortLib - SmmServicesTableLib + MmServicesTableLib UefiDriverEntryPoint PcdLib PrintLib @@ -51,7 +52,7 @@ [Guids] gMemoryStatusCodeRecordGuid ## SOMETIMES_PRODUCES ## UNDEFINED # SmmSystemTable [Protocols] - gEfiSmmRscHandlerProtocolGuid ## CONSUMES + gEfiMmRscHandlerProtocolGuid ## CONSUMES [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial ## CONSUMES @@ -59,7 +60,7 @@ [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize |128| gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory ## SOMETIMES_CONSUMES [Depex] - gEfiSmmRscHandlerProtocolGuid + gEfiMmRscHandlerProtocolGuid [UserExtensions.TianoCore."ExtraFiles"] StatusCodeHandlerSmmExtra.uni diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf similarity index 62% copy from MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf copy to MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf index 4e24d87e55d1..d7c863bf064c 100644 --- a/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf +++ b/MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf @@ -1,8 +1,9 @@ ## @file -# Status Code Handler Driver which produces general handlers and hook them onto the SMM status code router. +# Status Code Handler Driver which produces general handlers and hook them onto the MM status code router. # # Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR> # (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> +# Copyright (c) Microsoft Corporation. # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -11,13 +12,12 @@ [Defines] INF_VERSION = 0x00010005 - BASE_NAME = StatusCodeHandlerSmm - MODULE_UNI_FILE = StatusCodeHandlerSmm.uni - FILE_GUID = 79CD78D8-6EDC-4978-BD02-3299C387AB17 - MODULE_TYPE = DXE_SMM_DRIVER - PI_SPECIFICATION_VERSION = 0x0001000A + BASE_NAME = StatusCodeHandlerStandaloneMm + FILE_GUID = EBE7802F-5E11-4D4E-B463-22D2425D156B + MODULE_TYPE = MM_STANDALONE + PI_SPECIFICATION_VERSION = 0x00010032 VERSION_STRING = 1.0 - ENTRY_POINT = StatusCodeHandlerSmmEntry + ENTRY_POINT = StatusCodeHandlerStandaloneMmEntry # # The following information is for reference only and not required by the build tools. @@ -26,8 +26,9 @@ [Defines] # [Sources] - StatusCodeHandlerSmm.c - StatusCodeHandlerSmm.h + StatusCodeHandlerMm.c + StatusCodeHandlerMm.h + StatusCodeHandlerStandalone.c SerialStatusCodeWorker.c MemoryStatusCodeWorker.c @@ -37,8 +38,8 @@ [Packages] [LibraryClasses] SerialPortLib - SmmServicesTableLib - UefiDriverEntryPoint + MmServicesTableLib + StandaloneMmDriverEntryPoint PcdLib PrintLib ReportStatusCodeLib @@ -48,10 +49,10 @@ [LibraryClasses] [Guids] gEfiStatusCodeDataTypeStringGuid ## SOMETIMES_CONSUMES ## UNDEFINED - gMemoryStatusCodeRecordGuid ## SOMETIMES_PRODUCES ## UNDEFINED # SmmSystemTable + gMemoryStatusCodeRecordGuid ## SOMETIMES_PRODUCES ## UNDEFINED # MmSystemTable [Protocols] - gEfiSmmRscHandlerProtocolGuid ## CONSUMES + gEfiMmRscHandlerProtocolGuid ## CONSUMES [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial ## CONSUMES @@ -59,7 +60,4 @@ [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize |128| gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory ## SOMETIMES_CONSUMES [Depex] - gEfiSmmRscHandlerProtocolGuid - -[UserExtensions.TianoCore."ExtraFiles"] - StatusCodeHandlerSmmExtra.uni + gEfiMmRscHandlerProtocolGuid -- 2.30.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#70795): https://edk2.groups.io/g/devel/message/70795 Mute This Topic: https://groups.io/mt/80139780/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-