MdeModulePkg: SmmReportStatusCodeLib: ReportStatusCodeLib in StandaloneMm
This change added support of StandaloneMm for ReportStatusCodeLib. It adds a new instance of ReportStatusCodeLib for MM_STANDALONE type, and abstracts the references of gMmst and gSmst functionalities into separate files in order to link in proper Service Table for SMM core/drivers. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Dandan Bi <dandan.bi@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Kun Qin <kun.q@outlook.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Report Status Code Library for SMM Phase.
|
Report Status Code Library for MM Phase.
|
||||||
|
|
||||||
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include <Library/ReportStatusCodeLib.h>
|
#include <Library/ReportStatusCodeLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/SmmServicesTableLib.h>
|
#include <Library/MmServicesTableLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
@@ -16,10 +16,12 @@
|
|||||||
|
|
||||||
#include <Guid/StatusCodeDataTypeId.h>
|
#include <Guid/StatusCodeDataTypeId.h>
|
||||||
#include <Guid/StatusCodeDataTypeDebug.h>
|
#include <Guid/StatusCodeDataTypeDebug.h>
|
||||||
#include <Protocol/SmmStatusCode.h>
|
#include <Protocol/MmStatusCode.h>
|
||||||
|
|
||||||
EFI_SMM_REPORT_STATUS_CODE mReportStatusCode = NULL;
|
#include "ReportStatusCodeLib.h"
|
||||||
EFI_SMM_STATUS_CODE_PROTOCOL *mStatusCodeProtocol = NULL;
|
|
||||||
|
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.
|
NULL is returned if no status code service is available.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_SMM_REPORT_STATUS_CODE
|
EFI_MM_REPORT_STATUS_CODE
|
||||||
InternalGetReportStatusCode (
|
InternalGetReportStatusCode (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
Status = gSmst->SmmLocateProtocol (&gEfiSmmStatusCodeProtocolGuid, NULL, (VOID**)&mStatusCodeProtocol);
|
Status = InternalLocateProtocol (&gEfiMmStatusCodeProtocolGuid, NULL, (VOID**)&mStatusCodeProtocol);
|
||||||
if (!EFI_ERROR (Status) && mStatusCodeProtocol != NULL) {
|
if (!EFI_ERROR (Status) && mStatusCodeProtocol != NULL) {
|
||||||
return mStatusCodeProtocol->ReportStatusCode;
|
return mStatusCodeProtocol->ReportStatusCode;
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,36 @@
|
|||||||
|
/** @file
|
||||||
|
Report Status Code Library for MM Phase.
|
||||||
|
|
||||||
|
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
|
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_
|
@@ -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 <PiMm.h>
|
||||||
|
|
||||||
|
#include <Library/MmServicesTableLib.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
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return gMmst->MmLocateProtocol (Protocol, Registration, Interface);
|
||||||
|
}
|
@@ -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 <PiMm.h>
|
||||||
|
|
||||||
|
#include <Library/SmmServicesTableLib.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
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return gSmst->SmmLocateProtocol (Protocol, Registration, Interface);
|
||||||
|
}
|
@@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
[Sources]
|
[Sources]
|
||||||
ReportStatusCodeLib.c
|
ReportStatusCodeLib.c
|
||||||
|
ReportStatusCodeLib.h
|
||||||
|
ReportStatusCodeLibTraditional.c
|
||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
@@ -45,7 +47,7 @@
|
|||||||
gEfiStatusCodeDataTypeDebugGuid ## SOMETIMES_CONSUMES ## UNDEFINED
|
gEfiStatusCodeDataTypeDebugGuid ## SOMETIMES_CONSUMES ## UNDEFINED
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiSmmStatusCodeProtocolGuid ## CONSUMES
|
gEfiMmStatusCodeProtocolGuid ## CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask ## CONSUMES
|
gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask ## CONSUMES
|
||||||
|
@@ -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.<BR>
|
||||||
|
# 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
|
@@ -474,6 +474,7 @@
|
|||||||
}
|
}
|
||||||
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
|
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf
|
||||||
MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf
|
MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf
|
||||||
|
MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf
|
||||||
MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf
|
MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf
|
||||||
MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
|
MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
|
||||||
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
|
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
|
||||||
|
Reference in New Issue
Block a user