public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v6 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance
       [not found] <20210305041253.1669-1-kun.q@outlook.com>
@ 2021-03-05  4:12 ` Kun Qin
  2021-03-05  4:12 ` [PATCH v6 2/7] OvmfPkg: resolve MmUnblockMemoryLib (mainly for VariableSmmRuntimeDxe) Kun Qin
  1 sibling, 0 replies; 2+ messages in thread
From: Kun Qin @ 2021-03-05  4:12 UTC (permalink / raw)
  To: devel
  Cc: Michael D Kinney, Liming Gao, Zhiguang Liu, Hao A Wu, Jiewen Yao,
	Laszlo Ersek

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.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>

Signed-off-by: Kun Qin <kun.q@outlook.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
---

Notes:
    v6:
    - Updated dec file comment. [Liming]
    - Added Reviewed-by tag. [Liming]
    - Added Acked-by tag. [Laszlo]
    
    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..1d2637acc22a 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 to request non-MMRAM pages to be mapped
+  #                  or unblocked from inside MM environment.
+  #
+  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
-- 
2.30.0.windows.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [PATCH v6 2/7] OvmfPkg: resolve MmUnblockMemoryLib (mainly for VariableSmmRuntimeDxe)
       [not found] <20210305041253.1669-1-kun.q@outlook.com>
  2021-03-05  4:12 ` [PATCH v6 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance Kun Qin
@ 2021-03-05  4:12 ` Kun Qin
  1 sibling, 0 replies; 2+ messages in thread
From: Kun Qin @ 2021-03-05  4:12 UTC (permalink / raw)
  To: devel; +Cc: Laszlo Ersek, Ard Biesheuvel, Jordan Justen

This change added NULL MmUnblockMemoryLib instance in dsc files of
OvmfPkg to pass CI build. When SMM_REQUIRE flag is set, the library
interface is consumed by VariableSmmRuntimeDxe to better support variable
runtime cache feature.

Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>

Signed-off-by: Kun Qin <kun.q@outlook.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
---

Notes:
    v6:
    - Previously reviewed, no change.
    
    v5:
    - Previously reviewed, no change.
    
    v4:
    - Updated patch title. [Laszlo]
    - Moved this patch before the variable driver change. [Laszlo]
    - Added reviewed-by tag. [Laszlo]
    
    v3:
    - Newly added in v3. [Hao]

 OvmfPkg/OvmfPkgIa32.dsc    | 3 +++
 OvmfPkg/OvmfPkgIa32X64.dsc | 3 +++
 OvmfPkg/OvmfPkgX64.dsc     | 3 +++
 3 files changed, 9 insertions(+)

diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index 1b8d34052b01..1eaf3e99c6c5 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -347,6 +347,9 @@ [LibraryClasses.common.DXE_RUNTIME_DRIVER]
   PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
   QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
   VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
+!if $(SMM_REQUIRE) == TRUE
+  MmUnblockMemoryLib|MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
+!endif
 
 [LibraryClasses.common.UEFI_DRIVER]
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index 9c1aee87e783..4a5a43014725 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -351,6 +351,9 @@ [LibraryClasses.common.DXE_RUNTIME_DRIVER]
   PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
   QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
   VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
+!if $(SMM_REQUIRE) == TRUE
+  MmUnblockMemoryLib|MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
+!endif
 
 [LibraryClasses.common.UEFI_DRIVER]
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index fabb8b2f29e4..d4d601b44476 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -353,6 +353,9 @@ [LibraryClasses.common.DXE_RUNTIME_DRIVER]
   PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
   QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
   VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
+!if $(SMM_REQUIRE) == TRUE
+  MmUnblockMemoryLib|MdePkg/Library/MmUnblockMemoryLib/MmUnblockMemoryLibNull.inf
+!endif
 
 [LibraryClasses.common.UEFI_DRIVER]
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
-- 
2.30.0.windows.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-03-05  4:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20210305041253.1669-1-kun.q@outlook.com>
2021-03-05  4:12 ` [PATCH v6 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance Kun Qin
2021-03-05  4:12 ` [PATCH v6 2/7] OvmfPkg: resolve MmUnblockMemoryLib (mainly for VariableSmmRuntimeDxe) Kun Qin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox