回复: [edk2-devel] [PATCH v1 00/41] Add PrmPkg


gaoliming
 

Michael:
Please also update Maintainers.txt to specify maintainer for new PrmPkg.

Thanks
Liming

-----邮件原件-----
发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Michael
Kubacki
发送时间: 2022年3月23日 0:19
收件人: devel@edk2.groups.io
抄送: Andrew Fish <afish@...>; Kang Gao <kang.gao@...>;
Michael D Kinney <michael.d.kinney@...>; Michael Kubacki
<michael.kubacki@...>; Leif Lindholm <leif@...>;
Benjamin You <benjamin.you@...>; Liu Yun <yun.y.liu@...>;
Ankit Sinha <ankit.sinha@...>; Nate DeSimone
<nathaniel.l.desimone@...>
主题: [edk2-devel] [PATCH v1 00/41] Add PrmPkg

From: Michael Kubacki <michael.kubacki@...>

This patch series adds a new package called PrmPkg. An RFC was sent
to the edk2 mailing list on January 28, 2022 detailing the proposal,
see https://edk2.groups.io/g/devel/message/86181.

Platform Runtime Mechanism (PRM) is a new firmware solution that has
been developed in edk2-staging/PlatformRuntimeMechanism.

This patch series has been organized to greatly condense the history
from the edk2-staging branch but to preserve important decisions and
changes in history that help establish context of changes and will
serve as valuable references for future development.

Interest in PRM has increased across various vendors and we believe
it is beneficial to make the source code more widely available for
the following reasons:

1. PRM specification adoption
2. Feature completeness
3. Overall validation coverage
4. Interest from the community and future collaboration

The technical details of PRM are covered in the PRM Specification
in addition to the Readme.md file located in the root of PrmPkg
in this patch series.

1. PRM specification adoption

Intel and Microsoft have worked together to standardize PRM in the
ACPI Specification and the PRM Specification hosted on uefi.org.

* ACPI 6.4 Specification:
https://uefi.org/node/4149

* PRM Specification:

https://uefi.org/sites/default/files/resources/Platform%20Runtime%20Mech
anism%20-%20with%20legal%20notice.pdf

2. Feature completeness

PrmPkg implements the full firmware functionality described in the
PRM Specification and there are no significant changes to
functionality planned at this time.

Though we are very much interested in evolving PRM based on
feedback.

3. Overall validation coverage

PrmPkg has been integrated and tested on client and server systems
in addition to virtual platforms (OvmfPkg/QEMU).

Platform integration is simple and a demonstration of this
integration for OvmfPkg is available in the following branch:
https://github.com/makubacki/edk2/tree/ovmf_prmpkg_integration

The code has been built with:
* MSFT VS2015, VS2017, and VS2019
* GCC5 (see https://bugzilla.tianocore.org/show_bug.cgi?id=3802)
* iASL compiler (20200528 - https://acpica.org/node/181)

The Linux kernel currently includes the following PRM support:
* _OSC PRM bit - allows FW to know determine the OS is
PRM-capable and can redirect _DSM method from alternate
triggers (such as SMI) to PRM.
* PRM invocation via _DSM, includes PRM module and handler parsing
from ACPI PRMT table, and also the PRM operation region handler
for runtime PRM service invocation.
* An OS configuration for PRM enabling, PRM support can be
disabled during OS image build.

Note that upstream Linux does not currently support the following:
* Ability for the OS driver to call a PRM handler directly,
it has to be via ACPI _DSM.
* Run time update PRM module and handler via PE/COFF PRM image.

This commit provides additional context of the changes in Linux:
https://github.com/torvalds/linux/commit/cefc7ca46235f01d5233e3abd4b79
452af01d9e9

Windows 11 (https://www.microsoft.com/software-download/windows11)
and Windows Server 2022
(https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the
-wdk)
include the PRM functionality noted above in addition to PRM direct
call and PRM runtime updates.

PRM has been tested on IA32, X64, and AARCH64 targets.

4. Interest from the community and future collaboration

PRM has been presented at several industry conferences:

* OSFC 2020 - "PRM: SMM Goes on a Diet"
https://cfp.osfc.io/osfc2020/talk/MCJASB/

* OCP Summit 2019 - "Case Study Alternatives for SMM Usage in
Intel Platforms"
https://www.youtube.com/watch?v=mu3DRLM1dPA

In addition, Microsoft plans to publish the Windows PRM driver
interface and a WDF sample driver that uses the interface to the
Windows Driver Samples GitHub repository
(https://github.com/microsoft/Windows-driver-samples).

We believe a PrmPkg in edk2 can increase accessibility to PRM and
ease collaboration.

PrmPkg
------
PrmPkg contains the common functionality needed to enable PRM on
any system. It does not contain platform-specific code such as PRM
modules (and by extension PRM handlers). Other than sample modules,
PrmPkg will only contain code needed to provide PRM feature
functionality as defined in the PRM Specification.

PrmPkg is scoped to continue to only contain platform-agnostic
functionality in the future.

The proposed maintainers of PrmPkg are:
* Michael Kubacki <mikuback@...>
* Nate DeSimone <nathaniel.l.desimone@...>

The proposed reviewers of PrmPkg are:
* Ankit Sinha <ankit.sinha@...>

Cc: Andrew Fish <afish@...>
Cc: Kang Gao <kang.gao@...>
Cc: Michael D Kinney <michael.d.kinney@...>
Cc: Michael Kubacki <michael.kubacki@...>
Cc: Leif Lindholm <leif@...>
Cc: Benjamin You <benjamin.you@...>
Cc: Liu Yun <yun.y.liu@...>
Cc: Ankit Sinha <ankit.sinha@...>
Cc: Nate DeSimone <nathaniel.l.desimone@...>
Signed-off-by: Michael Kubacki <michael.kubacki@...>

Liu (2):
PrmPkg: Publish PRM operation region to support PRM ACPI _DSM
invocation
PrmPkg: Export major/minor version in PRM module PE COFF header

Liu Yun Y (1):
PrmPkg: Update PRM OpRegion

Michael Kubacki (38):
PrmPkg: Add package and include headers
PrmPkg: Add PrmConfig protocol interface
PrmPkg/PrmContextBufferLib: Add initial library instance
PrmPkg/PrmConfigDxe: Add initial driver
PrmPkg: Add initial PrmSamplePrintModule
PrmPkg: Add initial PrmSampleMemoryAllocationModule
PrmPkg: Add initial PrmSampleHardwareAccessModule
PrmPkg: Add initial PrmSampleContextBufferModule
PrmPkg: Add initial package DSC file
Readme.md: Add initial content
PrmPkg: Add ALLOCATE_CONTEXT_BUFFER_IN_FW build option
PrmPkg: Enable variable growth for the PRM_MODULE_EXPORT macro
PrmPkg: Add initial PrmSsdtInstallDxe module
PrmPkg: Remove PRM Module Update Lock
PrmPkg: Remove ALLOCATE_CONTEXT_BUFFER_IN_FW build flag
PrmPkg/PrmContextBuffer.h: Add ACPI parameter support structures
PrmPkg/PrmLoaderDxe: Add ACPI parameter buffer support
PrmPkg/PrmSampleContextBufferModule: Remove OS debug print
requirement
PrmPkg/PrmSampleHardwareAccessModule: Add non-print PRM handlers
PrmPkg/SampleAcpiParameterBufferModule: Add initial module
PrmPkg/HardwareAccessModuleConfigLib: Add initial library
PrmPkg/Samples/Readme.md: Add initial file
PrmPkg: Refactor some PrmLoaderDxe functionality into libraries
PrmPkg/Application/PrmInfo: Add initial application
PrmPkg: Enforce stricter types
PrmPkg/Test/PrmPkgHostTest.dsc: Add initial file
PrmPkg/Test/UnitTest/Library: Add initial UEFI Boot Services test lib
PrmPkg/Library/DxePrmContextBufferLib: Add host-based unit tests
PrmPkg/DxePrmModuleDiscoveryLib: Add initial host-based unit tests
PrmPkg: Add PlatformGuid
Readme.md: Add iASL note and QEMU sample link
PrmPkg: Replace PcdPrmPlatformGuid with EDKII_DSC_PLATFORM_GUID
PrmPkg/Samples: Remove PrmSampleMemoryAllocationModule
PrmPkg/Samples: Remove PrmSamplePrintModule
PrmPkg: Remove the concept of OS services
Readme.md: Add a link to PRM Specification
PrmPkg: Changes for edk2 repo transition
PrmPkg: Apply uncrustify changes

PrmPkg/Application/PrmInfo/PrmInfo.c
| 732 +++++++++
PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.c
| 199 +++

PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibU
nitTest.c
| 649 ++++++++
PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c
| 386 +++++

PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscove
ryLibUnitTest.c
| 210 +++
PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.c
| 417 +++++
PrmPkg/PrmConfigDxe/PrmConfigDxe.c
| 512 ++++++
PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c
| 377 +++++
PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.c
| 110 ++

PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/Library/DxeAcpiPa
rameterBufferModuleConfigLib/DxeAcpiParameterBufferModuleConfigLib.c
| 127 ++

PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiPa
rameterBufferModule.c
| 78 +

PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBuffer
ModuleConfigLib/DxeContextBufferModuleConfigLib.c
| 218 +++

PrmPkg/Samples/PrmSampleContextBufferModule/PrmSampleContextBuffer
Module.c
| 84 +

PrmPkg/Samples/PrmSampleHardwareAccessModule/Library/DxeHardwareA
ccessModuleConfigLib/DxeHardwareAccessModuleConfigLib.c
| 108 ++

PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareA
ccessModule.c
| 335 ++++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTest.c |
119 ++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestEventTimer.c |
180 +++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestImage.c |
163 ++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestMemory.c |
145 ++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestMisc.c |
198 +++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestProtocol.c |
1650 ++++++++++++++++++++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestTpl.c |
43 +
.azurepipelines/templates/pr-gate-build-job.yml
| 2 +-
.pytool/CISettings.py
| 1 +
Maintainers.txt
| 8 +
PrmPkg/Application/PrmInfo/PrmInfo.h
| 49 +
PrmPkg/Application/PrmInfo/PrmInfo.inf
| 66 +
PrmPkg/Application/PrmInfo/PrmInfo.uni
| 11 +
PrmPkg/Application/PrmInfo/PrmInfoExtra.uni
| 12 +
PrmPkg/Application/PrmInfo/PrmInfoStrings.uni
| 132 ++
PrmPkg/Include/Library/PrmContextBufferLib.h
| 99 ++
PrmPkg/Include/Library/PrmModuleDiscoveryLib.h
| 60 +
PrmPkg/Include/Library/PrmPeCoffLib.h
| 111 ++
PrmPkg/Include/Prm.h
| 46 +
PrmPkg/Include/PrmContextBuffer.h
| 171 ++
PrmPkg/Include/PrmDataBuffer.h
| 50 +
PrmPkg/Include/PrmExportDescriptor.h
| 109 ++
PrmPkg/Include/PrmMmio.h
| 45 +
PrmPkg/Include/PrmModule.h
| 47 +
PrmPkg/Include/PrmModuleImageContext.h
| 28 +
PrmPkg/Include/Protocol/PrmConfig.h
| 31 +
PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.inf
| 35 +

PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibU
nitTestHost.inf
| 46 +
PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.inf
| 41 +
PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h
| 39 +

PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscove
ryLibUnitTestHost.inf
| 39 +
PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.inf
| 32 +
PrmPkg/PrmConfigDxe/PrmConfigDxe.inf
| 48 +
PrmPkg/PrmLoaderDxe/PrmAcpiTable.h
| 96 ++
PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf
| 61 +
PrmPkg/PrmPkg.ci.yaml
| 110 ++
PrmPkg/PrmPkg.dec
| 67 +
PrmPkg/PrmPkg.dsc
| 142 ++
PrmPkg/PrmPkg.uni
| 10 +
PrmPkg/PrmSsdtInstallDxe/Prm.asl
| 115 ++
PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.inf
| 52 +
PrmPkg/Readme.md
| 264 ++++

PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/Library/DxeAcpiPa
rameterBufferModuleConfigLib/DxeAcpiParameterBufferModuleConfigLib.inf
| 39 +

PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiPa
rameterBufferModule.inf
| 41 +
PrmPkg/Samples/PrmSampleContextBufferModule/Include/StaticData.h
| 24 +

PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBuffer
ModuleConfigLib/DxeContextBufferModuleConfigLib.inf
| 39 +

PrmPkg/Samples/PrmSampleContextBufferModule/PrmSampleContextBuffer
Module.inf
| 44 +
PrmPkg/Samples/PrmSampleHardwareAccessModule/Hpet.h
| 108 ++

PrmPkg/Samples/PrmSampleHardwareAccessModule/Library/DxeHardwareA
ccessModuleConfigLib/DxeHardwareAccessModuleConfigLib.inf
| 39 +

PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareA
ccessModule.inf
| 43 +
PrmPkg/Samples/Readme.md
| 146 ++
PrmPkg/Test/PrmPkgHostTest.dsc
| 39 +

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibTest.uni |
12 +

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTest.h |
1042 ++++++++++++

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTest.inf |
46 +

PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestProtocol.h |
120 ++
71 files changed, 11096 insertions(+), 1 deletion(-)
create mode 100644 PrmPkg/Application/PrmInfo/PrmInfo.c
create mode 100644
PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.c
create mode 100644
PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibU
nitTest.c
create mode 100644
PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.c
create mode 100644
PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscove
ryLibUnitTest.c
create mode 100644 PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.c
create mode 100644 PrmPkg/PrmConfigDxe/PrmConfigDxe.c
create mode 100644 PrmPkg/PrmLoaderDxe/PrmLoaderDxe.c
create mode 100644 PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.c
create mode 100644
PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/Library/DxeAcpiPa
rameterBufferModuleConfigLib/DxeAcpiParameterBufferModuleConfigLib.c
create mode 100644
PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiPa
rameterBufferModule.c
create mode 100644
PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBuffer
ModuleConfigLib/DxeContextBufferModuleConfigLib.c
create mode 100644
PrmPkg/Samples/PrmSampleContextBufferModule/PrmSampleContextBuffer
Module.c
create mode 100644
PrmPkg/Samples/PrmSampleHardwareAccessModule/Library/DxeHardwareA
ccessModuleConfigLib/DxeHardwareAccessModuleConfigLib.c
create mode 100644
PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareA
ccessModule.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTest.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestEventTimer.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestImage.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestMemory.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestMisc.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestProtocol.c
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestTpl.c
create mode 100644 PrmPkg/Application/PrmInfo/PrmInfo.h
create mode 100644 PrmPkg/Application/PrmInfo/PrmInfo.inf
create mode 100644 PrmPkg/Application/PrmInfo/PrmInfo.uni
create mode 100644 PrmPkg/Application/PrmInfo/PrmInfoExtra.uni
create mode 100644 PrmPkg/Application/PrmInfo/PrmInfoStrings.uni
create mode 100644 PrmPkg/Include/Library/PrmContextBufferLib.h
create mode 100644 PrmPkg/Include/Library/PrmModuleDiscoveryLib.h
create mode 100644 PrmPkg/Include/Library/PrmPeCoffLib.h
create mode 100644 PrmPkg/Include/Prm.h
create mode 100644 PrmPkg/Include/PrmContextBuffer.h
create mode 100644 PrmPkg/Include/PrmDataBuffer.h
create mode 100644 PrmPkg/Include/PrmExportDescriptor.h
create mode 100644 PrmPkg/Include/PrmMmio.h
create mode 100644 PrmPkg/Include/PrmModule.h
create mode 100644 PrmPkg/Include/PrmModuleImageContext.h
create mode 100644 PrmPkg/Include/Protocol/PrmConfig.h
create mode 100644
PrmPkg/Library/DxePrmContextBufferLib/DxePrmContextBufferLib.inf
create mode 100644
PrmPkg/Library/DxePrmContextBufferLib/UnitTest/DxePrmContextBufferLibU
nitTestHost.inf
create mode 100644
PrmPkg/Library/DxePrmModuleDiscoveryLib/DxePrmModuleDiscoveryLib.inf
create mode 100644
PrmPkg/Library/DxePrmModuleDiscoveryLib/PrmModuleDiscovery.h
create mode 100644
PrmPkg/Library/DxePrmModuleDiscoveryLib/UnitTest/DxePrmModuleDiscove
ryLibUnitTestHost.inf
create mode 100644 PrmPkg/Library/DxePrmPeCoffLib/DxePrmPeCoffLib.inf
create mode 100644 PrmPkg/PrmConfigDxe/PrmConfigDxe.inf
create mode 100644 PrmPkg/PrmLoaderDxe/PrmAcpiTable.h
create mode 100644 PrmPkg/PrmLoaderDxe/PrmLoaderDxe.inf
create mode 100644 PrmPkg/PrmPkg.ci.yaml
create mode 100644 PrmPkg/PrmPkg.dec
create mode 100644 PrmPkg/PrmPkg.dsc
create mode 100644 PrmPkg/PrmPkg.uni
create mode 100644 PrmPkg/PrmSsdtInstallDxe/Prm.asl
create mode 100644 PrmPkg/PrmSsdtInstallDxe/PrmSsdtInstallDxe.inf
create mode 100644 PrmPkg/Readme.md
create mode 100644
PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/Library/DxeAcpiPa
rameterBufferModuleConfigLib/DxeAcpiParameterBufferModuleConfigLib.inf
create mode 100644
PrmPkg/Samples/PrmSampleAcpiParameterBufferModule/PrmSampleAcpiPa
rameterBufferModule.inf
create mode 100644
PrmPkg/Samples/PrmSampleContextBufferModule/Include/StaticData.h
create mode 100644
PrmPkg/Samples/PrmSampleContextBufferModule/Library/DxeContextBuffer
ModuleConfigLib/DxeContextBufferModuleConfigLib.inf
create mode 100644
PrmPkg/Samples/PrmSampleContextBufferModule/PrmSampleContextBuffer
Module.inf
create mode 100644
PrmPkg/Samples/PrmSampleHardwareAccessModule/Hpet.h
create mode 100644
PrmPkg/Samples/PrmSampleHardwareAccessModule/Library/DxeHardwareA
ccessModuleConfigLib/DxeHardwareAccessModuleConfigLib.inf
create mode 100644
PrmPkg/Samples/PrmSampleHardwareAccessModule/PrmSampleHardwareA
ccessModule.inf
create mode 100644 PrmPkg/Samples/Readme.md
create mode 100644 PrmPkg/Test/PrmPkgHostTest.dsc
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibTest.uni
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTest.h
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTest.inf
create mode 100644
PrmPkg/Test/UnitTest/Library/UefiBootServicesTableLibUnitTest/UefiBootSer
vicesTableLibUnitTestProtocol.h

--
2.28.0.windows.1



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87842): https://edk2.groups.io/g/devel/message/87842
Mute This Topic: https://groups.io/mt/89955942/4905953
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub
[gaoliming@...]
-=-=-=-=-=-=

Join devel@edk2.groups.io to automatically receive all group messages.