[edk2-devel] [PATCH v4 11/20] MdeModulePkg: SmmSmiHandlerProfileLib: Support StandaloneMm Instance

Wu, Hao A hao.a.wu at intel.com
Wed Jan 27 00:56:34 UTC 2021


> -----Original Message-----
> From: Kun Qin <kun.q at outlook.com>
> Sent: Wednesday, January 27, 2021 3:47 AM
> To: devel at edk2.groups.io
> Cc: Wang, Jian J <jian.j.wang at intel.com>; Wu, Hao A <hao.a.wu at intel.com>;
> Dong, Eric <eric.dong at intel.com>; Ni, Ray <ray.ni at intel.com>
> Subject: [PATCH v4 11/20] MdeModulePkg: SmmSmiHandlerProfileLib:
> Support StandaloneMm Instance
> 
> 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 at intel.com>
> Cc: Hao A Wu <hao.a.wu at intel.com>
> Cc: Eric Dong <eric.dong at intel.com>
> Cc: Ray Ni <ray.ni at intel.com>
> 
> Signed-off-by: Kun Qin <kun.q at outlook.com>
> ---
> 
> Notes:
>     v4:
>     - Newly created for SmmSmiHandlerProfileLib coverage.



Reviewed-by: Hao A Wu <hao.a.wu at intel.com>

Best Regards,
Hao Wu


> 
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/{SmmSmiHandlerProfileL
> ib.c => MmSmiHandlerProfileLib.c} | 20 ++---
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLi
> b.c                               | 90 ++------------------
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandl
> erProfileLib.c                      | 31 +++++++
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib
> .h                                | 23 +++++
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLi
> b.inf                             |  4 +-
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandl
> erProfileLib.inf                    | 44 ++++++++++
>  MdeModulePkg/MdeModulePkg.dsc                                                                        |  1
> +
>  7 files changed, 117 insertions(+), 96 deletions(-)
> 
> diff --git
> a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfile
> Lib.c
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfile
> Lib.c
> similarity index 86%
> copy from
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLi
> b.c
> copy to
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfileLib
> .c
> index b76e8f0dc132..f800220b549c 100644
> ---
> a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfile
> Lib.c
> +++
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfile
> Li
> +++ b.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/SmmSmiHandlerProfile
> Lib.c
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfil
> eLib.c
> index b76e8f0dc132..0167d81b880d 100644
> ---
> a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfile
> Lib.c
> +++
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfil
> eL
> +++ ib.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/StandaloneMmSmiHan
> dlerProfileLib.c
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHan
> dlerProfileLib.c
> new file mode 100644
> index 000000000000..a7714390e5b1
> --- /dev/null
> +++
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHan
> dle
> +++ rProfileLib.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/MmSmiHandlerProfileL
> ib.h
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfile
> Lib.h
> new file mode 100644
> index 000000000000..8e390590ee7b
> --- /dev/null
> +++
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/MmSmiHandlerProfile
> Li
> +++ b.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/SmmSmiHandlerProfile
> Lib.inf
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfil
> eLib.inf
> index 1d738c7087c6..56007d502134 100644
> ---
> a/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfile
> Lib.inf
> +++
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfil
> eL
> +++ ib.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/StandaloneMmSmiHan
> dlerProfileLib.inf
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHan
> dlerProfileLib.inf
> new file mode 100644
> index 000000000000..a885cc2b2ae1
> --- /dev/null
> +++
> b/MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHan
> dle
> +++ rProfileLib.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/SmmCorePlatformH
> ookLibNull.inf
> 
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/SmmSmiHandlerProfileLi
> b.inf
> +
> +
> MdeModulePkg/Library/SmmSmiHandlerProfileLib/StandaloneMmSmiHandl
> erPro
> + fileLib.inf
> 
> MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaArchCustomDeco
> mpressLib.inf
> 
> MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/BootScriptExecutor
> Dxe.inf
>    MdeModulePkg/Universal/Acpi/S3SaveStateDxe/S3SaveStateDxe.inf
> --
> 2.30.0.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#70817): https://edk2.groups.io/g/devel/message/70817
Mute This Topic: https://groups.io/mt/80139784/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list