diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.c b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.c index 3a1772538c..fb1769db92 100644 --- a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.c +++ b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.c @@ -1,5 +1,5 @@ /** @file - Report Status Code Library for SMM Phase. + Report Status Code Library for MM Phase. Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include #include @@ -16,10 +16,12 @@ #include #include -#include +#include -EFI_SMM_REPORT_STATUS_CODE mReportStatusCode = NULL; -EFI_SMM_STATUS_CODE_PROTOCOL *mStatusCodeProtocol = NULL; +#include "ReportStatusCodeLib.h" + +EFI_MM_REPORT_STATUS_CODE mReportStatusCode = NULL; +EFI_MM_STATUS_CODE_PROTOCOL *mStatusCodeProtocol = NULL; /** @@ -29,14 +31,14 @@ EFI_SMM_STATUS_CODE_PROTOCOL *mStatusCodeProtocol = NULL; NULL is returned if no status code service is available. **/ -EFI_SMM_REPORT_STATUS_CODE +EFI_MM_REPORT_STATUS_CODE InternalGetReportStatusCode ( VOID ) { EFI_STATUS Status; - Status = gSmst->SmmLocateProtocol (&gEfiSmmStatusCodeProtocolGuid, NULL, (VOID**)&mStatusCodeProtocol); + Status = InternalLocateProtocol (&gEfiMmStatusCodeProtocolGuid, NULL, (VOID**)&mStatusCodeProtocol); if (!EFI_ERROR (Status) && mStatusCodeProtocol != NULL) { return mStatusCodeProtocol->ReportStatusCode; } diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.h b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.h new file mode 100644 index 0000000000..2820e40dde --- /dev/null +++ b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.h @@ -0,0 +1,36 @@ +/** @file + Report Status Code Library for MM Phase. + + Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef _MM_RSC_LIB_H_ +#define _MM_RSC_LIB_H_ + +/** + Returns the first protocol instance that matches the given protocol. + + @param[in] Protocol Provides the protocol to search for. + @param[in] Registration Optional registration key returned from + RegisterProtocolNotify(). + @param[out] Interface On return, a pointer to the first interface that matches Protocol and + Registration. + + @retval EFI_SUCCESS A protocol instance matching Protocol was found and returned in + Interface. + @retval EFI_NOT_FOUND No protocol instances were found that match Protocol and + Registration. + @retval EFI_INVALID_PARAMETER Interface is NULL. + Protocol is NULL. + +**/ +EFI_STATUS +InternalLocateProtocol ( + IN EFI_GUID *Protocol, + IN VOID *Registration, OPTIONAL + OUT VOID **Interface + ); + +#endif // _MM_RSC_LIB_H_ diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibStandaloneMm.c b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibStandaloneMm.c new file mode 100644 index 0000000000..a4c428dc88 --- /dev/null +++ b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibStandaloneMm.c @@ -0,0 +1,38 @@ +/** @file + Abstraction layer for MM service table used by MM ReportStatusCodeLib. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include + +/** + Returns the first protocol instance that matches the given protocol. + + @param[in] Protocol Provides the protocol to search for. + @param[in] Registration Optional registration key returned from + RegisterProtocolNotify(). + @param[out] Interface On return, a pointer to the first interface that matches Protocol and + Registration. + + @retval EFI_SUCCESS A protocol instance matching Protocol was found and returned in + Interface. + @retval EFI_NOT_FOUND No protocol instances were found that match Protocol and + Registration. + @retval EFI_INVALID_PARAMETER Interface is NULL. + Protocol is NULL. + +**/ +EFI_STATUS +InternalLocateProtocol ( + IN EFI_GUID *Protocol, + IN VOID *Registration, OPTIONAL + OUT VOID **Interface + ) +{ + return gMmst->MmLocateProtocol (Protocol, Registration, Interface); +} diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibTraditional.c b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibTraditional.c new file mode 100644 index 0000000000..603e222f55 --- /dev/null +++ b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibTraditional.c @@ -0,0 +1,38 @@ +/** @file + Abstraction layer for SMM service table used by SMM ReportStatusCodeLib. + + Copyright (c) Microsoft Corporation. + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include + +/** + Returns the first protocol instance that matches the given protocol. + + @param[in] Protocol Provides the protocol to search for. + @param[in] Registration Optional registration key returned from + RegisterProtocolNotify(). + @param[out] Interface On return, a pointer to the first interface that matches Protocol and + Registration. + + @retval EFI_SUCCESS A protocol instance matching Protocol was found and returned in + Interface. + @retval EFI_NOT_FOUND No protocol instances were found that match Protocol and + Registration. + @retval EFI_INVALID_PARAMETER Interface is NULL. + Protocol is NULL. + +**/ +EFI_STATUS +InternalLocateProtocol ( + IN EFI_GUID *Protocol, + IN VOID *Registration, OPTIONAL + OUT VOID **Interface + ) +{ + return gSmst->SmmLocateProtocol (Protocol, Registration, Interface); +} diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf b/MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf index 72496bfaba..02dce09a19 100644 --- a/MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf +++ b/MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf @@ -28,6 +28,8 @@ [Sources] ReportStatusCodeLib.c + ReportStatusCodeLib.h + ReportStatusCodeLibTraditional.c [Packages] MdePkg/MdePkg.dec @@ -45,7 +47,7 @@ gEfiStatusCodeDataTypeDebugGuid ## SOMETIMES_CONSUMES ## UNDEFINED [Protocols] - gEfiSmmStatusCodeProtocolGuid ## CONSUMES + gEfiMmStatusCodeProtocolGuid ## CONSUMES [Pcd] gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask ## CONSUMES diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf b/MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf new file mode 100644 index 0000000000..866e09249a --- /dev/null +++ b/MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf @@ -0,0 +1,53 @@ +## @file +# Standalone MM report status code library. +# +# Retrieve status code and report status code in MM phase. +# +# Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
+# Copyright (c) Microsoft Corporation. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = StandaloneMmReportStatusCodeLib + FILE_GUID = 17C7FC8C-8C5D-497E-9C0E-C21255B30E04 + MODULE_TYPE = MM_STANDALONE + VERSION_STRING = 1.0 + PI_SPECIFICATION_VERSION = 0x00010032 + LIBRARY_CLASS = ReportStatusCodeLib|MM_STANDALONE + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + ReportStatusCodeLib.c + ReportStatusCodeLib.h + ReportStatusCodeLibStandaloneMm.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[LibraryClasses] + PcdLib + BaseMemoryLib + MmServicesTableLib + DebugLib + MemoryAllocationLib + +[Guids] + gEfiStatusCodeSpecificDataGuid ## SOMETIMES_CONSUMES ## UNDEFINED + gEfiStatusCodeDataTypeDebugGuid ## SOMETIMES_CONSUMES ## UNDEFINED + +[Protocols] + gEfiMmStatusCodeProtocolGuid ## CONSUMES + +[Pcd] + gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask ## CONSUMES diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index 9afd40eeed..200fbcc18a 100644 --- a/MdeModulePkg/MdeModulePkg.dsc +++ b/MdeModulePkg/MdeModulePkg.dsc @@ -474,6 +474,7 @@ } MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf + MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf