On 03/04/21 19:58, Kun Qin wrote:
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3168
> 
> This interface provides an abstration layer to allow MM modules to access
> requested areas that are outside of MMRAM. On MM model that blocks all
> non-MMRAM accesses, areas requested through this API will be mapped or
> unblocked for accessibility inside MM environment.
> 
> For MM modules that need to access regions outside of MMRAMs, the agents
> that set up these regions are responsible for invoking this API in order
> for these memory areas to be accessible from inside MM.
> 
> Example usages:
> 1. To enable runtime cache feature for variable service, Variable MM
> module will need to access the allocated runtime buffer. Thus the agent
> sets up these buffers, VariableSmmRuntimeDxe, will need to invoke this
> API to make these regions accessible by Variable MM.
> 2. For TPM ACPI table to communicate to physical presence handler, the
> corresponding NVS region has to be accessible from inside MM. Once the
> NVS region are assigned, it needs to be unblocked thourgh this API.
> 
> Cc: Michael D Kinney <michael.d.kin...@intel.com>
> Cc: Liming Gao <gaolim...@byosoft.com.cn>
> Cc: Zhiguang Liu <zhiguang....@intel.com>
> Cc: Hao A Wu <hao.a...@intel.com>
> Cc: Jiewen Yao <jiewen....@intel.com>
> Cc: Laszlo Ersek <ler...@redhat.com>
> 
> Signed-off-by: Kun Qin <ku...@outlook.com>
> ---
> 
> Notes:
>     v5:
>     - Downgraded data types from EFI_* to RETURN_*. [Laszlo]
>     
>     v4:
>     - Added more commit message [Laszlo]
>     - Added UNI file [Hao]
>     
>     v3:
>     - Move interface to MdePkg [Hao, Liming, Jiewen]
>     - Remove Dxe prefix [Jiewen]
>     
>     v2:
>     - Resend with practical usage. No change [Hao]
> 
>  MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.c   | 44 
> ++++++++++++++++++++
>  MdePkg/Include/Library/MmUnblockMemoryLib.h                  | 44 
> ++++++++++++++++++++
>  MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf | 34 
> +++++++++++++++
>  MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.uni | 21 ++++++++++
>  MdePkg/MdePkg.dec                                            |  5 +++
>  MdePkg/MdePkg.dsc                                            |  1 +
>  6 files changed, 149 insertions(+)
> 
> diff --git a/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.c 
> b/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.c
> new file mode 100644
> index 000000000000..b205c9122df8
> --- /dev/null
> +++ b/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.c
> @@ -0,0 +1,44 @@
> +/** @file
> +  Null instance of MM Unblock Page Library.
> +
> +  This library provides an interface to request non-MMRAM pages to be 
> mapped/unblocked
> +  from inside MM environment.
> +
> +  For MM modules that need to access regions outside of MMRAMs, the agents 
> that set up
> +  these regions are responsible for invoking this API in order for these 
> memory areas
> +  to be accessed from inside MM.
> +
> +  Copyright (c) Microsoft Corporation.
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#include <Base.h>
> +
> +/**
> +  This API provides a way to unblock certain data pages to be accessible 
> inside MM environment.
> +
> +  @param  UnblockAddress              The address of buffer caller requests 
> to unblock, the address
> +                                      has to be page aligned.
> +  @param  NumberOfPages               The number of pages requested to be 
> unblocked from MM
> +                                      environment.
> +
> +  @retval RETURN_SUCCESS              The request goes through successfully.
> +  @retval RETURN_NOT_AVAILABLE_YET    The requested functionality is not 
> produced yet.
> +  @retval RETURN_UNSUPPORTED          The requested functionality is not 
> supported on current platform.
> +  @retval RETURN_SECURITY_VIOLATION   The requested address failed to pass 
> security check for
> +                                      unblocking.
> +  @retval RETURN_INVALID_PARAMETER    Input address either NULL pointer or 
> not page aligned.
> +  @retval RETURN_ACCESS_DENIED        The request is rejected due to system 
> has passed certain boot
> +                                      phase.
> +
> +**/
> +RETURN_STATUS
> +EFIAPI
> +MmUnblockMemoryRequest (
> +  IN PHYSICAL_ADDRESS       UnblockAddress,
> +  IN UINT64                 NumberOfPages
> +  )
> +{
> +  return RETURN_UNSUPPORTED;
> +}
> diff --git a/MdePkg/Include/Library/MmUnblockMemoryLib.h 
> b/MdePkg/Include/Library/MmUnblockMemoryLib.h
> new file mode 100644
> index 000000000000..00fab530a3bc
> --- /dev/null
> +++ b/MdePkg/Include/Library/MmUnblockMemoryLib.h
> @@ -0,0 +1,44 @@
> +/** @file
> +  MM Unblock Memory Library Interface.
> +
> +  This library provides an interface to request non-MMRAM pages to be 
> mapped/unblocked
> +  from inside MM environment.
> +
> +  For MM modules that need to access regions outside of MMRAMs, the agents 
> that set up
> +  these regions are responsible for invoking this API in order for these 
> memory areas
> +  to be accessed from inside MM.
> +
> +  Copyright (c) Microsoft Corporation.
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +#ifndef MM_UNBLOCK_MEMORY_LIB_H_
> +#define MM_UNBLOCK_MEMORY_LIB_H_
> +
> +/**
> +  This API provides a way to unblock certain data pages to be accessible 
> inside MM environment.
> +
> +  @param  UnblockAddress              The address of buffer caller requests 
> to unblock, the address
> +                                      has to be page aligned.
> +  @param  NumberOfPages               The number of pages requested to be 
> unblocked from MM
> +                                      environment.
> +
> +  @retval RETURN_SUCCESS              The request goes through successfully.
> +  @retval RETURN_NOT_AVAILABLE_YET    The requested functionality is not 
> produced yet.
> +  @retval RETURN_UNSUPPORTED          The requested functionality is not 
> supported on current platform.
> +  @retval RETURN_SECURITY_VIOLATION   The requested address failed to pass 
> security check for
> +                                      unblocking.
> +  @retval RETURN_INVALID_PARAMETER    Input address either NULL pointer or 
> not page aligned.
> +  @retval RETURN_ACCESS_DENIED        The request is rejected due to system 
> has passed certain boot
> +                                      phase.
> +
> +**/
> +RETURN_STATUS
> +EFIAPI
> +MmUnblockMemoryRequest (
> +  IN PHYSICAL_ADDRESS       UnblockAddress,
> +  IN UINT64                 NumberOfPages
> +);
> +
> +#endif // MM_UNBLOCK_MEMORY_LIB_H_
> diff --git a/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf 
> b/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
> new file mode 100644
> index 000000000000..8ecb767ff7bd
> --- /dev/null
> +++ b/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
> @@ -0,0 +1,34 @@
> +## @file
> +#  Null instance of MM Unblock Page Library.
> +#
> +#  This library provides an interface to request non-MMRAM pages to be 
> mapped/unblocked
> +#  from inside MM environment.
> +#
> +#  For MM modules that need to access regions outside of MMRAMs, the agents 
> that set up
> +#  these regions are responsible for invoking this API in order for these 
> memory areas
> +#  to be accessed from inside MM.
> +#
> +#  Copyright (c) Microsoft Corporation.
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#
> +##
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001B
> +  BASE_NAME                      = MmUnblockMemoryLibNull
> +  MODULE_UNI_FILE                = MmUnblockMemoryLibNull.uni
> +  FILE_GUID                      = 9E890F68-5C95-4C31-95DD-59E6286F85EA
> +  MODULE_TYPE                    = BASE
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = MmUnblockMemoryLib
> +
> +#
> +#  VALID_ARCHITECTURES           = IA32 X64
> +#
> +
> +[Sources]
> +  MmUnblockMemoryLibNull.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> diff --git a/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.uni 
> b/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.uni
> new file mode 100644
> index 000000000000..d7f2709a3dce
> --- /dev/null
> +++ b/MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.uni
> @@ -0,0 +1,21 @@
> +// /** @file
> +// Null instance of MM Unblock Page Library.
> +//
> +// This library provides an interface to request non-MMRAM pages to be 
> mapped/unblocked
> +// from inside MM environment.
> +//
> +// For MM modules that need to access regions outside of MMRAMs, the agents 
> that set up
> +// these regions are responsible for invoking this API in order for these 
> memory areas
> +// to be accessed from inside MM.
> +//
> +// Copyright (c) Microsoft Corporation.
> +// SPDX-License-Identifier: BSD-2-Clause-Patent
> +//
> +// **/
> +
> +
> +#string STR_MODULE_ABSTRACT             #language en-US "Null instance of MM 
> Unblock Page Library."
> +
> +#string STR_MODULE_DESCRIPTION          #language en-US "This library 
> provides an interface to request non-MMRAM pages to be mapped/unblocked from 
> inside MM environment.\n"
> +                                                        "For MM modules that 
> need to access regions outside of MMRAMs, the agents that set up these 
> regions are responsible for invoking this API in order for these memory areas 
> to be accessed from inside MM."
> +
> diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
> index 3928db65d188..32a9e009c813 100644
> --- a/MdePkg/MdePkg.dec
> +++ b/MdePkg/MdePkg.dec
> @@ -257,6 +257,11 @@ [LibraryClasses]
>    #
>    UnitTestHostBaseLib|Test/UnitTest/Include/Library/UnitTestHostBaseLib.h
>  
> +  ##  @libraryclass  This library provides an interface for DXE drivers to 
> request MM environment
> +  #   to map/unblock a memory region for accessibility inside MM.
> +  #
> +  MmUnblockMemoryLib|Include/Library/MmUnblockMemoryLib.h
> +
>  [LibraryClasses.IA32, LibraryClasses.X64]
>    ##  @libraryclass  Abstracts both S/W SMI generation and detection.
>    ##
> diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc
> index ce009086815f..79629e3f93ba 100644
> --- a/MdePkg/MdePkg.dsc
> +++ b/MdePkg/MdePkg.dsc
> @@ -168,6 +168,7 @@ [Components.IA32, Components.X64]
>    MdePkg/Library/SmmPciExpressLib/SmmPciExpressLib.inf
>    MdePkg/Library/SmiHandlerProfileLibNull/SmiHandlerProfileLibNull.inf
>    MdePkg/Library/MmServicesTableLib/MmServicesTableLib.inf
> +  MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
>  
>  [Components.EBC]
>    MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
> 

Acked-by: Laszlo Ersek <ler...@redhat.com>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#72451): https://edk2.groups.io/g/devel/message/72451
Mute This Topic: https://groups.io/mt/81084653/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to