public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Kun Qin" <kun.q@outlook.com>
To: devel@edk2.groups.io
Cc: Jian J Wang <jian.j.wang@intel.com>,
	Hao A Wu <hao.a.wu@intel.com>, Eric Dong <eric.dong@intel.com>,
	Ray Ni <ray.ni@intel.com>
Subject: [PATCH v4 11/20] MdeModulePkg: SmmSmiHandlerProfileLib: Support StandaloneMm Instance
Date: Tue, 26 Jan 2021 11:47:01 -0800	[thread overview]
Message-ID: <MWHPR06MB310213F9533FB01BD3505455F3BC9@MWHPR06MB3102.namprd06.prod.outlook.com> (raw)
In-Reply-To: <20210126194710.2248-1-kun.q@outlook.com>

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3185

This change added support of SMI handler profile library router under
StandaloneMm. This change replaces gSmst with gMmst. It also abstracts
standalone and traditional MM driver entrypoints into separate files to
allow maximal common implementations.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>

Signed-off-by: Kun Qin <kun.q@outlook.com>
---

Notes:
    v4:
    - Newly created for SmmSmiHandlerProfileLib coverage.

 MdeModulePkg/Library/SmmSmiHandlerProfileLib/{SmmSmiHandlerProfileLib.c => MmSmiHandlerProfileLib.c} | 20 ++---
 MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c                               | 90 ++------------------
 MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.c                      | 31 +++++++
 MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.h                                | 23 +++++
 MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.inf                             |  4 +-
 MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.inf                    | 44 ++++++++++
 MdeModulePkg/MdeModulePkg.dsc                                                                        |  1 +
 7 files changed, 117 insertions(+), 96 deletions(-)

diff --git a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.c
similarity index 86%
copy from MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c
copy to MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.c
index b76e8f0dc132..f800220b549c 100644
--- a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c
+++ b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.c
@@ -1,14 +1,15 @@
 /** @file
-  SMM driver instance of SmiHandlerProfile Library.
+  MM driver instance of SmiHandlerProfile Library.
 
   Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) Microsoft Corporation.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
-#include <PiSmm.h>
+#include <PiMm.h>
 #include <Library/SmiHandlerProfileLib.h>
-#include <Library/SmmServicesTableLib.h>
+#include <Library/MmServicesTableLib.h>
 #include <Guid/SmiHandlerProfile.h>
 
 SMI_HANDLER_PROFILE_PROTOCOL  *mSmiHandlerProfile;
@@ -82,21 +83,16 @@ SmiHandlerProfileUnregisterHandler (
 }
 
 /**
-  The constructor function for SMI handler profile.
-
-  @param  ImageHandle   The firmware allocated handle for the EFI image.
-  @param  SystemTable   A pointer to the EFI System Table.
+  The common constructor function for SMI handler profile.
 
   @retval EFI_SUCCESS   The constructor always returns EFI_SUCCESS.
 **/
 EFI_STATUS
-EFIAPI
-SmmSmiHandlerProfileLibConstructor (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
+MmSmiHandlerProfileLibInitialization (
+  VOID
   )
 {
-  gSmst->SmmLocateProtocol (
+  gMmst->MmLocateProtocol (
            &gSmiHandlerProfileGuid,
            NULL,
            (VOID **) &mSmiHandlerProfile
diff --git a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c
index b76e8f0dc132..0167d81b880d 100644
--- a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c
+++ b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.c
@@ -2,87 +2,17 @@
   SMM driver instance of SmiHandlerProfile Library.
 
   Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) Microsoft Corporation.
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
 
-#include <PiSmm.h>
-#include <Library/SmiHandlerProfileLib.h>
-#include <Library/SmmServicesTableLib.h>
-#include <Guid/SmiHandlerProfile.h>
+#include <PiMm.h>
 
-SMI_HANDLER_PROFILE_PROTOCOL  *mSmiHandlerProfile;
+#include "MmSmiHandlerProfileLib.h"
 
 /**
-  This function is called by SmmChildDispatcher module to report
-  a new SMI handler is registered, to SmmCore.
-
-  @param HandlerGuid     The GUID to identify the type of the handler.
-                         For the SmmChildDispatch protocol, the HandlerGuid
-                         must be the GUID of SmmChildDispatch protocol.
-  @param Handler         The SMI handler.
-  @param CallerAddress   The address of the module who registers the SMI handler.
-  @param Context         The context of the SMI handler.
-                         For the SmmChildDispatch protocol, the Context
-                         must match the one defined for SmmChildDispatch protocol.
-  @param ContextSize     The size of the context in bytes.
-                         For the SmmChildDispatch protocol, the Context
-                         must match the one defined for SmmChildDispatch protocol.
-
-  @retval EFI_SUCCESS           The information is recorded.
-  @retval EFI_UNSUPPORTED       The feature is unsupported.
-  @retval EFI_OUT_OF_RESOURCES  There is no enough resource to record the information.
-**/
-EFI_STATUS
-EFIAPI
-SmiHandlerProfileRegisterHandler (
-  IN EFI_GUID                       *HandlerGuid,
-  IN EFI_SMM_HANDLER_ENTRY_POINT2   Handler,
-  IN PHYSICAL_ADDRESS               CallerAddress,
-  IN VOID                           *Context, OPTIONAL
-  IN UINTN                          ContextSize OPTIONAL
-  )
-{
-  if (mSmiHandlerProfile != NULL) {
-    return mSmiHandlerProfile->RegisterHandler (mSmiHandlerProfile, HandlerGuid, Handler, CallerAddress, Context, ContextSize);
-  }
-  return EFI_UNSUPPORTED;
-}
-
-/**
-  This function is called by SmmChildDispatcher module to report
-  an existing SMI handler is unregistered, to SmmCore.
-
-  @param HandlerGuid     The GUID to identify the type of the handler.
-                         For the SmmChildDispatch protocol, the HandlerGuid
-                         must be the GUID of SmmChildDispatch protocol.
-  @param Handler         The SMI handler.
-  @param Context         The context of the SMI handler.
-                         If it is NOT NULL, it will be used to check what is registered.
-  @param ContextSize     The size of the context in bytes.
-                         If Context is NOT NULL, it will be used to check what is registered.
-
-  @retval EFI_SUCCESS           The original record is removed.
-  @retval EFI_UNSUPPORTED       The feature is unsupported.
-  @retval EFI_NOT_FOUND         There is no record for the HandlerGuid and handler.
-**/
-EFI_STATUS
-EFIAPI
-SmiHandlerProfileUnregisterHandler (
-  IN EFI_GUID                       *HandlerGuid,
-  IN EFI_SMM_HANDLER_ENTRY_POINT2   Handler,
-  IN VOID                           *Context, OPTIONAL
-  IN UINTN                          ContextSize OPTIONAL
-  )
-{
-  if (mSmiHandlerProfile != NULL) {
-    return mSmiHandlerProfile->UnregisterHandler (mSmiHandlerProfile, HandlerGuid, Handler, Context, ContextSize);
-  }
-  return EFI_UNSUPPORTED;
-}
-
-/**
-  The constructor function for SMI handler profile.
+  The constructor function for traditional MM SMI handler profile.
 
   @param  ImageHandle   The firmware allocated handle for the EFI image.
   @param  SystemTable   A pointer to the EFI System Table.
@@ -92,15 +22,9 @@ SmiHandlerProfileUnregisterHandler (
 EFI_STATUS
 EFIAPI
 SmmSmiHandlerProfileLibConstructor (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
+  IN EFI_HANDLE         ImageHandle,
+  IN EFI_SYSTEM_TABLE   *SystemTable
   )
 {
-  gSmst->SmmLocateProtocol (
-           &gSmiHandlerProfileGuid,
-           NULL,
-           (VOID **) &mSmiHandlerProfile
-           );
-  return EFI_SUCCESS;
+  return MmSmiHandlerProfileLibInitialization ();
 }
-
diff --git a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.c b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.c
new file mode 100644
index 000000000000..a7714390e5b1
--- /dev/null
+++ b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.c
@@ -0,0 +1,31 @@
+/** @file
+  Standalone MM driver instance of SmiHandlerProfile Library.
+
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) Microsoft Corporation.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiMm.h>
+
+#include "MmSmiHandlerProfileLib.h"
+
+/**
+  The constructor function for standalone MM SMI handler profile.
+
+  @param  ImageHandle   The firmware allocated handle for the EFI image.
+  @param  SystemTable   A pointer to the EFI System Table.
+
+  @retval EFI_SUCCESS   The constructor always returns EFI_SUCCESS.
+**/
+EFI_STATUS
+EFIAPI
+StandaloneMmSmiHandlerProfileLibConstructor (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_MM_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return MmSmiHandlerProfileLibInitialization ();
+}
+
diff --git a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.h b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.h
new file mode 100644
index 000000000000..8e390590ee7b
--- /dev/null
+++ b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib.h
@@ -0,0 +1,23 @@
+/** @file
+  MM driver instance of SmiHandlerProfile Library.
+
+  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) Microsoft Corporation.
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef _MM_SMI_HANDLER_PROFILE_LIB_H_
+#define _MM_SMI_HANDLER_PROFILE_LIB_H_
+
+/**
+  The common constructor function for SMI handler profile.
+
+  @retval EFI_SUCCESS   The constructor always returns EFI_SUCCESS.
+**/
+EFI_STATUS
+MmSmiHandlerProfileLibInitialization (
+  VOID
+  );
+
+#endif //_SMM_SMI_HANDLER_PROFILE_LIB_H_
diff --git a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.inf b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.inf
index 1d738c7087c6..56007d502134 100644
--- a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.inf
+++ b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.inf
@@ -27,6 +27,8 @@ [Defines]
 #
 
 [Sources]
+  MmSmiHandlerProfileLib.c
+  MmSmiHandlerProfileLib.h
   SmmSmiHandlerProfileLib.c
 
 [Packages]
@@ -34,7 +36,7 @@ [Packages]
   MdeModulePkg/MdeModulePkg.dec
 
 [LibraryClasses]
-  SmmServicesTableLib
+  MmServicesTableLib
 
 [Guids]
   gSmiHandlerProfileGuid  ## CONSUMES   ## GUID # Locate protocol
diff --git a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.inf b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.inf
new file mode 100644
index 000000000000..a885cc2b2ae1
--- /dev/null
+++ b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.inf
@@ -0,0 +1,44 @@
+## @file
+# Standalone MM driver instance of SmiHandlerProfile Library.
+#
+# This library instance provides real functionality for SmmChildDispatcher module.
+#
+#  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) Microsoft Corporation.
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = StandaloneMmSmiHandlerProfileLib
+  FILE_GUID                      = 1F2ED27B-A01D-4867-B993-9B710E5926C5
+  MODULE_TYPE                    = MM_STANDALONE
+  VERSION_STRING                 = 1.0
+  PI_SPECIFICATION_VERSION       = 0x10000032
+  LIBRARY_CLASS                  = SmiHandlerProfileLib|MM_STANDALONE
+  CONSTRUCTOR                    = StandaloneMmSmiHandlerProfileLibConstructor
+
+#
+# The following information is for reference only and not required by the build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  MmSmiHandlerProfileLib.c
+  MmSmiHandlerProfileLib.h
+  StandaloneMmSmiHandlerProfileLib.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  MmServicesTableLib
+
+[Guids]
+  gSmiHandlerProfileGuid  ## CONSUMES   ## GUID # Locate protocol
+
diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc
index f95c7cd69ee1..7ca4a1bb3080 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -492,6 +492,7 @@ [Components.IA32, Components.X64]
   MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxStandaloneMmLib.inf
   MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf
   MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLib.inf
+  MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandlerProfileLib.inf
   MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaArchCustomDecompressLib.inf
   MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutorDxe.inf
   MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
-- 
2.30.0.windows.1


  parent reply	other threads:[~2021-01-26 19:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20210126194710.2248-1-kun.q@outlook.com>
2021-01-26 19:46 ` [PATCH v4 04/20] StandaloneMmPkg: StandaloneMmCoreMemoryAllocationLib: Fix compiler warning Kun Qin
2021-01-26 19:46 ` [PATCH v4 05/20] StandaloneMmPkg: StandaloneMmMemLib: Extends support for X64 architecture Kun Qin
2021-01-26 19:46 ` [PATCH v4 06/20] MdeModulePkg: SmmLockBoxSmmLib: Support StandaloneMm for SmmLockBoxLib Kun Qin
2021-01-26 19:46 ` [PATCH v4 07/20] MdeModulePkg: SmmReportStatusCodeLib: ReportStatusCodeLib in StandaloneMm Kun Qin
2021-01-26 19:46 ` [PATCH v4 08/20] MdeModulePkg: StatusCodeHandler: StatusCodeHandler driver " Kun Qin
2021-01-26 19:46 ` [PATCH v4 09/20] MdeModulePkg: FirmwarePerformanceDataTable: Added StandaloneMm support Kun Qin
2021-01-26 19:47 ` [PATCH v4 10/20] MdeModulePkg: ReportStatusCodeRouter: Support StandaloneMm RSC Router Kun Qin
2021-01-26 19:47 ` Kun Qin [this message]
2021-01-27  0:56   ` [PATCH v4 11/20] MdeModulePkg: SmmSmiHandlerProfileLib: Support StandaloneMm Instance Wu, Hao A
2021-01-26 19:47 ` [PATCH v4 12/20] MdePkg: UefiDevicePathLib: Support UefiDevicePathLib under StandaloneMm Kun Qin
2021-01-26 19:47 ` [PATCH v4 13/20] PcAtChipsetPkg: AcpiTimerLib: Added StandaloneMm instance of AcpiTimerLib Kun Qin
2021-01-26 19:47 ` [PATCH v4 14/20] SecurityPkg: Tcg2PhysicalPresenceLib: Introduce StandaloneMm instance Kun Qin
2021-01-26 19:47 ` [PATCH v4 15/20] SecurityPkg: Tcg2PpVendorLibNull: Added support for MM_STANDALONE type Kun Qin
2021-01-26 19:47 ` [PATCH v4 16/20] SecurityPkg: Tpm2DeviceLibDTpm: Introduce StandaloneMm instance Kun Qin
2021-01-26 19:47 ` [PATCH v4 17/20] UefiCpuPkg: CpuIo2Smm: Move CpuIo2Smm driver to consume gMmst Kun Qin
2021-01-26 19:47 ` [PATCH v4 18/20] UefiCpuPkg: CpuIo2Smm: Abstract SMM specific functions into separate file Kun Qin
2021-01-29  7:06   ` Ni, Ray

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MWHPR06MB310213F9533FB01BD3505455F3BC9@MWHPR06MB3102.namprd06.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox