Re: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance

2021-03-04 Thread Kun Qin
Thanks, Liming. I will send the updated patches shortly.

Regards,
Kun

From: gaoliming<mailto:gaolim...@byosoft.com.cn>
Sent: Thursday, March 4, 2021 19:15
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>; 
ku...@outlook.com<mailto:ku...@outlook.com>; 'Michael D 
Kinney'<mailto:michael.d.kin...@intel.com>; 'Zhiguang 
Liu'<mailto:zhiguang@intel.com>
Cc: 'Hao A Wu'<mailto:hao.a...@intel.com>; 'Jiewen 
Yao'<mailto:jiewen....@intel.com>; 'Laszlo Ersek'<mailto:ler...@redhat.com>
Subject: 回复: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added 
definition and null instance

Kun:
 I have one minor comment. Please see it.

Thanks
Liming
发件人: devel@edk2.groups.io  代表 Kun Qin
发送时间: 2021年3月5日 8:23
收件人: devel@edk2.groups.io; Michael D Kinney ; 
gaoliming ; Zhiguang Liu 
抄送: Hao A Wu ; Jiewen Yao ; Laszlo 
Ersek 
主题: Re: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added 
definition and null instance

Hi Mike/Liming/Zhiguang,

Could you please review this patch and let me know if you have any feedback on 
this patch? Any input is appreciated.

Regards,
Kun

From: Kun Qin<mailto:ku...@outlook.com>
Sent: Thursday, March 4, 2021 10:58
To: devel@edk2.groups.io<mailto:devel@edk2.groups.io>
Cc: Michael D Kinney<mailto:michael.d.kin...@intel.com>; Liming 
Gao<mailto:gaolim...@byosoft.com.cn>; Zhiguang 
Liu<mailto:zhiguang@intel.com>; Hao A Wu<mailto:hao.a...@intel.com>; Jiewen 
Yao<mailto:jiewen@intel.com>; Laszlo Ersek<mailto:ler...@redhat.com>
Subject: [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null 
instance

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 
mailto:michael.d.kin...@intel.com>>
Cc: Liming Gao mailto:gaolim...@byosoft.com.cn>>
Cc: Zhiguang Liu mailto:zhiguang@intel.com>>
Cc: Hao A Wu mailto:hao.a...@intel.com>>
Cc: Jiewen Yao mailto:jiewen@intel.com>>
Cc: Laszlo Ersek mailto:ler...@redhat.com>>

Signed-off-by: Kun Qin mailto: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 ..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 
+
+/**
+  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

回复: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance

2021-03-04 Thread gaoliming
Kun:

 I have one minor comment. Please see it. 

 

Thanks

Liming

发件人: devel@edk2.groups.io  代表 Kun Qin
发送时间: 2021年3月5日 8:23
收件人: devel@edk2.groups.io; Michael D Kinney ;
gaoliming ; Zhiguang Liu 
抄送: Hao A Wu ; Jiewen Yao ;
Laszlo Ersek 
主题: Re: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added
definition and null instance

 

Hi Mike/Liming/Zhiguang,

 

Could you please review this patch and let me know if you have any feedback
on this patch? Any input is appreciated.

 

Regards,

Kun

 

From: Kun Qin <mailto:ku...@outlook.com> 
Sent: Thursday, March 4, 2021 10:58
To: devel@edk2.groups.io <mailto:devel@edk2.groups.io> 
Cc: Michael D Kinney <mailto:michael.d.kin...@intel.com> ; Liming Gao
<mailto:gaolim...@byosoft.com.cn> ; Zhiguang Liu <mailto:zhiguang.liu@intel.
com> ; Hao A Wu <mailto:hao.a...@intel.com> ; Jiewen Yao
<mailto:jiewen@intel.com> ; Laszlo Ersek <mailto:ler...@redhat.com> 
Subject: [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and
null instance

 

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 mailto:michael.d.kin...@intel.com> >
Cc: Liming Gao mailto:gaolim...@byosoft.com.cn> >
Cc: Zhiguang Liu mailto:zhiguang@intel.com> >
Cc: Hao A Wu mailto:hao.a...@intel.com> >
Cc: Jiewen Yao mailto:jiewen@intel.com> >
Cc: Laszlo Ersek mailto:ler...@redhat.com> >

Signed-off-by: Kun Qin mailto: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 ..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 
+
+/**
+  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_YETThe 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_PARAMETERInput address either NULL pointer or
not page

Re: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance

2021-03-04 Thread Kun Qin
Hi Mike/Liming/Zhiguang,

Could you please review this patch and let me know if you have any feedback on 
this patch? Any input is appreciated.

Regards,
Kun

From: Kun Qin
Sent: Thursday, March 4, 2021 10:58
To: devel@edk2.groups.io
Cc: Michael D Kinney; Liming 
Gao; Zhiguang 
Liu; Hao A Wu; Jiewen 
Yao; Laszlo Ersek
Subject: [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null 
instance

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 
Cc: Liming Gao 
Cc: Zhiguang Liu 
Cc: Hao A Wu 
Cc: Jiewen Yao 
Cc: Laszlo Ersek 

Signed-off-by: Kun Qin 
---

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 ..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 
+
+/**
+  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_YETThe 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_PARAMETERInput address either NULL pointer or not 
page aligned.
+  @retval RETURN_ACCESS_DENIEDThe 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 ..00fab530a3bc
--- /dev/null
+++ b/MdePkg/Include/Library/MmUnblockMemoryLib.h
@@ -0,0 +1,44 @@
+/** @file
+  MM Unblock Memory Library Interface.
+
+  This library provides an 

Re: [edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance

2021-03-04 Thread Laszlo Ersek
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 
> Cc: Liming Gao 
> Cc: Zhiguang Liu 
> Cc: Hao A Wu 
> Cc: Jiewen Yao 
> Cc: Laszlo Ersek 
> 
> Signed-off-by: Kun Qin 
> ---
> 
> 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 ..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 
> +
> +/**
> +  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_YETThe 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_PARAMETERInput address either NULL pointer or 
> not page aligned.
> +  @retval RETURN_ACCESS_DENIEDThe 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 ..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 (

[edk2-devel] [PATCH v5 1/7] MdePkg: MmUnblockMemoryLib: Added definition and null instance

2021-03-04 Thread Kun Qin
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 
Cc: Liming Gao 
Cc: Zhiguang Liu 
Cc: Hao A Wu 
Cc: Jiewen Yao 
Cc: Laszlo Ersek 

Signed-off-by: Kun Qin 
---

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 ..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 
+
+/**
+  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_YETThe 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_PARAMETERInput address either NULL pointer or not 
page aligned.
+  @retval RETURN_ACCESS_DENIEDThe 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 ..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 calle