From: "Guo Dong" <guo.dong@intel.com>
To: "Liu, Zhiguang" <zhiguang.liu@intel.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Ma, Maurice" <maurice.ma@intel.com>,
"You, Benjamin" <benjamin.you@intel.com>,
"Ni, Ray" <ray.ni@intel.com>
Subject: Re: [Patch V2 01/12] UefiPayloadPkg: Add HobLib for UniversalPayload
Date: Wed, 23 Jun 2021 23:45:51 +0000 [thread overview]
Message-ID: <BYAPR11MB36224F1F5DDB6ACBEC1698E99E089@BYAPR11MB3622.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20210623025235.3311-2-zhiguang.liu@intel.com>
Reviewed-by: Guo Dong <guo.dong@intel.com>
> -----Original Message-----
> From: Liu, Zhiguang <zhiguang.liu@intel.com>
> Sent: Tuesday, June 22, 2021 7:52 PM
> To: devel@edk2.groups.io
> Cc: Ma, Maurice <maurice.ma@intel.com>; Dong, Guo
> <guo.dong@intel.com>; You, Benjamin <benjamin.you@intel.com>; Ni, Ray
> <ray.ni@intel.com>
> Subject: [Patch V2 01/12] UefiPayloadPkg: Add HobLib for UniversalPayload
>
> V1:
> For payload entry, use PayloadEntryHobLib as HobLib and payload entry
> should initialize hob base.
> For DxeCore, use new added DxeHobLib as HobLib, and DxeCore will
> initialize hob base.
> For Dxe Driver, use new added DxeHobLib as HobLib, and use DxeHobListLib
> to initialize hob base.
>
> V2:
> Remove the UefiLib since it won't be needed.
> Adding a new library DxeHobLib + DxeHobListLib instead of using the
> DxeHobLib.inf in MdePkg is because the constructor needed be separated
> from DxeHobLib.
> If not, when building UefiPayloadPkg, the dependency chain is as below:
> DebugLib -> SerialPortLib -> PlatformHookLib -> HobLib -> DebugLib
> Each library has a constructor, and this becomes a constructor circle.
> To break the circle, separate the constructor from the HobLib as a new
> DxeHobListLib, which won't depend on DebugLib.
>
> Cc: Maurice Ma <maurice.ma@intel.com>
> Cc: Guo Dong <guo.dong@intel.com>
> Cc: Benjamin You <benjamin.you@intel.com>
> Signed-off-by: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
> ---
> UefiPayloadPkg/Include/Library/DxeHobListLib.h | 27
> +++++++++++++++++++++++++++
> UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf | 36
> ++++++++++++++++++++++++++++++++++++
> UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.uni | 16
> ++++++++++++++++
> UefiPayloadPkg/Library/DxeHobLib/HobLib.c | 597
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> +++++++++++++++++
> UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.c | 66
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> ++++++++
> UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.inf | 35
> +++++++++++++++++++++++++++++++++++
> UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.c | 20
> ++++++++++++++++++++
> UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.inf | 28
> ++++++++++++++++++++++++++++
> UefiPayloadPkg/Library/{HobLib => PayloadEntryHobLib}/Hob.c | 2 +-
> UefiPayloadPkg/Library/{HobLib => PayloadEntryHobLib}/HobLib.inf | 2 +-
> UefiPayloadPkg/UefiPayloadPkg.dsc | 15 +++++++++++----
> 11 files changed, 838 insertions(+), 6 deletions(-)
>
> diff --git a/UefiPayloadPkg/Include/Library/DxeHobListLib.h
> b/UefiPayloadPkg/Include/Library/DxeHobListLib.h
> new file mode 100644
> index 0000000000..7e9b23f6d7
> --- /dev/null
> +++ b/UefiPayloadPkg/Include/Library/DxeHobListLib.h
> @@ -0,0 +1,27 @@
> +/** @file
>
> + Provides a service to retrieve a pointer to the start of HOB list.
>
> + Only available to DXE module types.
>
> +
>
> + This library does not contain any functions or macros. It simply exports a
> global
>
> + pointer to the start of HOB list as defined in the Platform Initialization
> Driver
>
> + Execution Environment Core Interface Specification. The library
> constructor must
>
> + initialize this global pointer to the start of HOB list, so it is available at the
>
> + module's entry point. Since there is overhead in looking up the pointer to
> the start
>
> + of HOB list, only those modules that actually require access to the HOB list
>
> + should use this library.
>
> +
>
> +Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +#ifndef __DXE_HOB_LIST_LIB_H__
>
> +#define __DXE_HOB_LIST_LIB_H__
>
> +
>
> +///
>
> +/// Cache copy of the start of HOB list
>
> +///
>
> +extern VOID *gHobList;
>
> +
>
> +#endif
>
> +
>
> diff --git a/UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf
> b/UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf
> new file mode 100644
> index 0000000000..ff334a0d41
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf
> @@ -0,0 +1,36 @@
> +## @file
>
> +# HOB Library implementation for Payload Phase.
>
> +#
>
> +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +#
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +#
>
> +##
>
> +
>
> +[Defines]
>
> + INF_VERSION = 0x00010005
>
> + BASE_NAME = DxeHobLib
>
> + MODULE_UNI_FILE = DxeHobLib.uni
>
> + FILE_GUID = 1a15b8b3-3e8a-4698-87b9-65aad9993b52
>
> + MODULE_TYPE = DXE_DRIVER
>
> + VERSION_STRING = 1.0
>
> + LIBRARY_CLASS = HobLib|DXE_DRIVER DXE_RUNTIME_DRIVER
> SMM_CORE DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
>
> +
>
> +#
>
> +# VALID_ARCHITECTURES = IA32 X64 EBC
>
> +#
>
> +
>
> +[Sources]
>
> + HobLib.c
>
> +
>
> +
>
> +[Packages]
>
> + MdePkg/MdePkg.dec
>
> + UefiPayloadPkg/UefiPayloadPkg.dec
>
> +
>
> +
>
> +[LibraryClasses]
>
> + BaseMemoryLib
>
> + DebugLib
>
> + DxeHobListLib
>
> diff --git a/UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.uni
> b/UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.uni
> new file mode 100644
> index 0000000000..4e02e9c2ae
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.uni
> @@ -0,0 +1,16 @@
> +// /** @file
>
> +// HOB Library implementation for Payload Phase.
>
> +//
>
> +// The Hoblist will be set by DxeHobListLib or other modules.
>
> +//
>
> +// Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +//
>
> +// SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +//
>
> +// **/
>
> +
>
> +
>
> +#string STR_MODULE_ABSTRACT #language en-US "HOB Library
> implementation for Payload Phase."
>
> +
>
> +#string STR_MODULE_DESCRIPTION #language en-US "The HOB Library
> implementation for Payload Phase that doesn't contain HobLibConstructor"
>
> +
>
> diff --git a/UefiPayloadPkg/Library/DxeHobLib/HobLib.c
> b/UefiPayloadPkg/Library/DxeHobLib/HobLib.c
> new file mode 100644
> index 0000000000..5d5ede0c17
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobLib/HobLib.c
> @@ -0,0 +1,597 @@
> +/** @file
>
> + HOB Library implementation for Payload Phase.
>
> +
>
> +Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +#include <PiDxe.h>
>
> +
>
> +#include <Library/HobLib.h>
>
> +#include <Library/DebugLib.h>
>
> +#include <Library/BaseMemoryLib.h>
>
> +#include <Library/DxeHobListLib.h>
>
> +
>
> +/**
>
> + Returns the pointer to the HOB list.
>
> +
>
> + This function returns the pointer to first HOB in the list.
>
> + For PEI phase, the PEI service GetHobList() can be used to retrieve the
> pointer
>
> + to the HOB list. For the DXE phase, the HOB list pointer can be retrieved
> through
>
> + the EFI System Table by looking up theHOB list GUID in the System
> Configuration Table.
>
> + Since the System Configuration Table does not exist that the time the DXE
> Core is
>
> + launched, the DXE Core uses a global variable from the DXE Core Entry
> Point Library
>
> + to manage the pointer to the HOB list.
>
> +
>
> + If the pointer to the HOB list is NULL, then ASSERT().
>
> +
>
> + @return The pointer to the HOB list.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +GetHobList (
>
> + VOID
>
> + )
>
> +{
>
> + ASSERT (gHobList != NULL);
>
> + return gHobList;
>
> +}
>
> +
>
> +/**
>
> + Returns the next instance of a HOB type from the starting HOB.
>
> +
>
> + This function searches the first instance of a HOB type from the starting
> HOB pointer.
>
> + If there does not exist such HOB type from the starting HOB pointer, it will
> return NULL.
>
> + In contrast with macro GET_NEXT_HOB(), this function does not skip the
> starting HOB pointer
>
> + unconditionally: it returns HobStart back if HobStart itself meets the
> requirement;
>
> + caller is required to use GET_NEXT_HOB() if it wishes to skip current
> HobStart.
>
> +
>
> + If HobStart is NULL, then ASSERT().
>
> +
>
> + @param Type The HOB type to return.
>
> + @param HobStart The starting HOB pointer to search from.
>
> +
>
> + @return The next instance of a HOB type from the starting HOB.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +GetNextHob (
>
> + IN UINT16 Type,
>
> + IN CONST VOID *HobStart
>
> + )
>
> +{
>
> + EFI_PEI_HOB_POINTERS Hob;
>
> +
>
> + ASSERT (HobStart != NULL);
>
> +
>
> + Hob.Raw = (UINT8 *) HobStart;
>
> + //
>
> + // Parse the HOB list until end of list or matching type is found.
>
> + //
>
> + while (!END_OF_HOB_LIST (Hob)) {
>
> + if (Hob.Header->HobType == Type) {
>
> + return Hob.Raw;
>
> + }
>
> + Hob.Raw = GET_NEXT_HOB (Hob);
>
> + }
>
> + return NULL;
>
> +}
>
> +
>
> +/**
>
> + Returns the first instance of a HOB type among the whole HOB list.
>
> +
>
> + This function searches the first instance of a HOB type among the whole
> HOB list.
>
> + If there does not exist such HOB type in the HOB list, it will return NULL.
>
> +
>
> + If the pointer to the HOB list is NULL, then ASSERT().
>
> +
>
> + @param Type The HOB type to return.
>
> +
>
> + @return The next instance of a HOB type from the starting HOB.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +GetFirstHob (
>
> + IN UINT16 Type
>
> + )
>
> +{
>
> + VOID *HobList;
>
> +
>
> + HobList = GetHobList ();
>
> + return GetNextHob (Type, HobList);
>
> +}
>
> +
>
> +/**
>
> + Returns the next instance of the matched GUID HOB from the starting HOB.
>
> +
>
> + This function searches the first instance of a HOB from the starting HOB
> pointer.
>
> + Such HOB should satisfy two conditions:
>
> + its HOB type is EFI_HOB_TYPE_GUID_EXTENSION and its GUID Name
> equals to the input Guid.
>
> + If there does not exist such HOB from the starting HOB pointer, it will
> return NULL.
>
> + Caller is required to apply GET_GUID_HOB_DATA () and
> GET_GUID_HOB_DATA_SIZE ()
>
> + to extract the data section and its size information, respectively.
>
> + In contrast with macro GET_NEXT_HOB(), this function does not skip the
> starting HOB pointer
>
> + unconditionally: it returns HobStart back if HobStart itself meets the
> requirement;
>
> + caller is required to use GET_NEXT_HOB() if it wishes to skip current
> HobStart.
>
> +
>
> + If Guid is NULL, then ASSERT().
>
> + If HobStart is NULL, then ASSERT().
>
> +
>
> + @param Guid The GUID to match with in the HOB list.
>
> + @param HobStart A pointer to a Guid.
>
> +
>
> + @return The next instance of the matched GUID HOB from the starting
> HOB.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +GetNextGuidHob (
>
> + IN CONST EFI_GUID *Guid,
>
> + IN CONST VOID *HobStart
>
> + )
>
> +{
>
> + EFI_PEI_HOB_POINTERS GuidHob;
>
> +
>
> + GuidHob.Raw = (UINT8 *) HobStart;
>
> + while ((GuidHob.Raw = GetNextHob (EFI_HOB_TYPE_GUID_EXTENSION,
> GuidHob.Raw)) != NULL) {
>
> + if (CompareGuid (Guid, &GuidHob.Guid->Name)) {
>
> + break;
>
> + }
>
> + GuidHob.Raw = GET_NEXT_HOB (GuidHob);
>
> + }
>
> + return GuidHob.Raw;
>
> +}
>
> +
>
> +/**
>
> + Returns the first instance of the matched GUID HOB among the whole HOB
> list.
>
> +
>
> + This function searches the first instance of a HOB among the whole HOB list.
>
> + Such HOB should satisfy two conditions:
>
> + its HOB type is EFI_HOB_TYPE_GUID_EXTENSION and its GUID Name
> equals to the input Guid.
>
> + If there does not exist such HOB from the starting HOB pointer, it will
> return NULL.
>
> + Caller is required to apply GET_GUID_HOB_DATA () and
> GET_GUID_HOB_DATA_SIZE ()
>
> + to extract the data section and its size information, respectively.
>
> +
>
> + If the pointer to the HOB list is NULL, then ASSERT().
>
> + If Guid is NULL, then ASSERT().
>
> +
>
> + @param Guid The GUID to match with in the HOB list.
>
> +
>
> + @return The first instance of the matched GUID HOB among the whole
> HOB list.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +GetFirstGuidHob (
>
> + IN CONST EFI_GUID *Guid
>
> + )
>
> +{
>
> + VOID *HobList;
>
> +
>
> + HobList = GetHobList ();
>
> + return GetNextGuidHob (Guid, HobList);
>
> +}
>
> +
>
> +/**
>
> + Get the system boot mode from the HOB list.
>
> +
>
> + This function returns the system boot mode information from the
>
> + PHIT HOB in HOB list.
>
> +
>
> + If the pointer to the HOB list is NULL, then ASSERT().
>
> +
>
> + @param VOID
>
> +
>
> + @return The Boot Mode.
>
> +
>
> +**/
>
> +EFI_BOOT_MODE
>
> +EFIAPI
>
> +GetBootModeHob (
>
> + VOID
>
> + )
>
> +{
>
> + EFI_HOB_HANDOFF_INFO_TABLE *HandOffHob;
>
> +
>
> + HandOffHob = (EFI_HOB_HANDOFF_INFO_TABLE *) GetHobList ();
>
> +
>
> + return HandOffHob->BootMode;
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB for a loaded PE32 module.
>
> +
>
> + This function builds a HOB for a loaded PE32 module.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If ModuleName is NULL, then ASSERT().
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param ModuleName The GUID File Name of the module.
>
> + @param MemoryAllocationModule The 64 bit physical address of the
> module.
>
> + @param ModuleLength The length of the module in bytes.
>
> + @param EntryPoint The 64 bit physical address of the module entry
> point.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildModuleHob (
>
> + IN CONST EFI_GUID *ModuleName,
>
> + IN EFI_PHYSICAL_ADDRESS MemoryAllocationModule,
>
> + IN UINT64 ModuleLength,
>
> + IN EFI_PHYSICAL_ADDRESS EntryPoint
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB that describes a chunk of system memory with Owner GUID.
>
> +
>
> + This function builds a HOB that describes a chunk of system memory.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param ResourceType The type of resource described by this HOB.
>
> + @param ResourceAttribute The resource attributes of the memory
> described by this HOB.
>
> + @param PhysicalStart The 64 bit physical address of memory described
> by this HOB.
>
> + @param NumberOfBytes The length of the memory described by this
> HOB in bytes.
>
> + @param OwnerGUID GUID for the owner of this resource.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildResourceDescriptorWithOwnerHob (
>
> + IN EFI_RESOURCE_TYPE ResourceType,
>
> + IN EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute,
>
> + IN EFI_PHYSICAL_ADDRESS PhysicalStart,
>
> + IN UINT64 NumberOfBytes,
>
> + IN EFI_GUID *OwnerGUID
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB that describes a chunk of system memory.
>
> +
>
> + This function builds a HOB that describes a chunk of system memory.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param ResourceType The type of resource described by this HOB.
>
> + @param ResourceAttribute The resource attributes of the memory
> described by this HOB.
>
> + @param PhysicalStart The 64 bit physical address of memory described
> by this HOB.
>
> + @param NumberOfBytes The length of the memory described by this
> HOB in bytes.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildResourceDescriptorHob (
>
> + IN EFI_RESOURCE_TYPE ResourceType,
>
> + IN EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute,
>
> + IN EFI_PHYSICAL_ADDRESS PhysicalStart,
>
> + IN UINT64 NumberOfBytes
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a customized HOB tagged with a GUID for identification and returns
>
> + the start address of GUID HOB data.
>
> +
>
> + This function builds a customized HOB tagged with a GUID for identification
>
> + and returns the start address of GUID HOB data so that caller can fill the
> customized data.
>
> + The HOB Header and Name field is already stripped.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If Guid is NULL, then ASSERT().
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT().
>
> + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is
> 0xFFF8.
>
> +
>
> + @param Guid The GUID to tag the customized HOB.
>
> + @param DataLength The size of the data payload for the GUID HOB.
>
> +
>
> + @retval NULL The GUID HOB could not be allocated.
>
> + @retval others The start address of GUID HOB data.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +BuildGuidHob (
>
> + IN CONST EFI_GUID *Guid,
>
> + IN UINTN DataLength
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> + return NULL;
>
> +}
>
> +
>
> +/**
>
> + Builds a customized HOB tagged with a GUID for identification, copies the
> input data to the HOB
>
> + data field, and returns the start address of the GUID HOB data.
>
> +
>
> + This function builds a customized HOB tagged with a GUID for identification
> and copies the input
>
> + data to the HOB data field and returns the start address of the GUID HOB
> data. It can only be
>
> + invoked during PEI phase; for DXE phase, it will ASSERT() since PEI HOB is
> read-only for DXE phase.
>
> + The HOB Header and Name field is already stripped.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If Guid is NULL, then ASSERT().
>
> + If Data is NULL and DataLength > 0, then ASSERT().
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> + If DataLength > (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT().
>
> + HobLength is UINT16 and multiples of 8 bytes, so the max HobLength is
> 0xFFF8.
>
> +
>
> + @param Guid The GUID to tag the customized HOB.
>
> + @param Data The data to be copied into the data field of the GUID
> HOB.
>
> + @param DataLength The size of the data payload for the GUID HOB.
>
> +
>
> + @retval NULL The GUID HOB could not be allocated.
>
> + @retval others The start address of GUID HOB data.
>
> +
>
> +**/
>
> +VOID *
>
> +EFIAPI
>
> +BuildGuidDataHob (
>
> + IN CONST EFI_GUID *Guid,
>
> + IN VOID *Data,
>
> + IN UINTN DataLength
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> + return NULL;
>
> +}
>
> +
>
> +/**
>
> + Builds a Firmware Volume HOB.
>
> +
>
> + This function builds a Firmware Volume HOB.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> + If the FvImage buffer is not at its required alignment, then ASSERT().
>
> +
>
> + @param BaseAddress The base address of the Firmware Volume.
>
> + @param Length The size of the Firmware Volume in bytes.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildFvHob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a EFI_HOB_TYPE_FV2 HOB.
>
> +
>
> + This function builds a EFI_HOB_TYPE_FV2 HOB.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> + If the FvImage buffer is not at its required alignment, then ASSERT().
>
> +
>
> + @param BaseAddress The base address of the Firmware Volume.
>
> + @param Length The size of the Firmware Volume in bytes.
>
> + @param FvName The name of the Firmware Volume.
>
> + @param FileName The name of the file.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildFv2Hob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length,
>
> + IN CONST EFI_GUID *FvName,
>
> + IN CONST EFI_GUID *FileName
>
> + )
>
> +{
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a EFI_HOB_TYPE_FV3 HOB.
>
> +
>
> + This function builds a EFI_HOB_TYPE_FV3 HOB.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> + If the FvImage buffer is not at its required alignment, then ASSERT().
>
> +
>
> + @param BaseAddress The base address of the Firmware Volume.
>
> + @param Length The size of the Firmware Volume in bytes.
>
> + @param AuthenticationStatus The authentication status.
>
> + @param ExtractedFv TRUE if the FV was extracted as a file within
>
> + another firmware volume. FALSE otherwise.
>
> + @param FvName The name of the Firmware Volume.
>
> + Valid only if IsExtractedFv is TRUE.
>
> + @param FileName The name of the file.
>
> + Valid only if IsExtractedFv is TRUE.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildFv3Hob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length,
>
> + IN UINT32 AuthenticationStatus,
>
> + IN BOOLEAN ExtractedFv,
>
> + IN CONST EFI_GUID *FvName, OPTIONAL
>
> + IN CONST EFI_GUID *FileName OPTIONAL
>
> + )
>
> +{
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a Capsule Volume HOB.
>
> +
>
> + This function builds a Capsule Volume HOB.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If the platform does not support Capsule Volume HOBs, then ASSERT().
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param BaseAddress The base address of the Capsule Volume.
>
> + @param Length The size of the Capsule Volume in bytes.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildCvHob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB for the CPU.
>
> +
>
> + This function builds a HOB for the CPU.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param SizeOfMemorySpace The maximum physical memory
> addressability of the processor.
>
> + @param SizeOfIoSpace The maximum physical I/O addressability of the
> processor.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildCpuHob (
>
> + IN UINT8 SizeOfMemorySpace,
>
> + IN UINT8 SizeOfIoSpace
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB for the Stack.
>
> +
>
> + This function builds a HOB for the stack.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param BaseAddress The 64 bit physical address of the Stack.
>
> + @param Length The length of the stack in bytes.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildStackHob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB for the BSP store.
>
> +
>
> + This function builds a HOB for BSP store.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param BaseAddress The 64 bit physical address of the BSP.
>
> + @param Length The length of the BSP store in bytes.
>
> + @param MemoryType Type of memory allocated by this HOB.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildBspStoreHob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length,
>
> + IN EFI_MEMORY_TYPE MemoryType
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> +
>
> +/**
>
> + Builds a HOB for the memory allocation.
>
> +
>
> + This function builds a HOB for the memory allocation.
>
> + It can only be invoked during PEI phase;
>
> + for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.
>
> +
>
> + If there is no additional space for HOB creation, then ASSERT().
>
> +
>
> + @param BaseAddress The 64 bit physical address of the memory.
>
> + @param Length The length of the memory allocation in bytes.
>
> + @param MemoryType Type of memory allocated by this HOB.
>
> +
>
> +**/
>
> +VOID
>
> +EFIAPI
>
> +BuildMemoryAllocationHob (
>
> + IN EFI_PHYSICAL_ADDRESS BaseAddress,
>
> + IN UINT64 Length,
>
> + IN EFI_MEMORY_TYPE MemoryType
>
> + )
>
> +{
>
> + //
>
> + // PEI HOB is read only for DXE phase
>
> + //
>
> + ASSERT (FALSE);
>
> +}
>
> diff --git a/UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.c
> b/UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.c
> new file mode 100644
> index 0000000000..8bb31b3f9c
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.c
> @@ -0,0 +1,66 @@
> +/** @file
>
> + This library retrieve the EFI_BOOT_SERVICES pointer from EFI system table
> in
>
> + library's constructor.
>
> +
>
> + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +
>
> +#include <Uefi.h>
>
> +
>
> +VOID *gHobList = NULL;
>
> +
>
> +/**
>
> + Local implementation of GUID comparasion that doesn't depend on
> DebugLib::ASSERT().
>
> +
>
> + This function compares Guid1 to Guid2. If the GUIDs are identical then
> TRUE is returned.
>
> + If there are any bit differences in the two GUIDs, then FALSE is returned.
>
> +
>
> + @param Guid1 A pointer to a 128 bit GUID.
>
> + @param Guid2 A pointer to a 128 bit GUID.
>
> +
>
> + @retval TRUE Guid1 and Guid2 are identical.
>
> + @retval FALSE Guid1 and Guid2 are not identical.
>
> +**/
>
> +BOOLEAN
>
> +LocalCompareGuid (
>
> + IN CONST GUID *Guid1,
>
> + IN CONST GUID *Guid2
>
> + )
>
> +{
>
> + UINT64 *Left;
>
> + UINT64 *Right;
>
> +
>
> + Left = (UINT64 *) Guid1;
>
> + Right = (UINT64 *) Guid2;
>
> +
>
> + return (BOOLEAN) (Left[0] == Right[0] && Left[1] == Right[1]);
>
> +}
>
> +
>
> +/**
>
> + @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
>
> +DxeHobListLibConstructor (
>
> + IN EFI_HANDLE ImageHandle,
>
> + IN EFI_SYSTEM_TABLE *SystemTable
>
> + )
>
> +{
>
> + UINTN Index;
>
> +
>
> + for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {
>
> + if (LocalCompareGuid (&gEfiHobListGuid, &SystemTable-
> >ConfigurationTable[Index].VendorGuid)) {
>
> + gHobList = SystemTable->ConfigurationTable[Index].VendorTable;
>
> + return EFI_SUCCESS;
>
> + }
>
> + }
>
> +
>
> + return EFI_NOT_FOUND;
>
> +}
>
> diff --git a/UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.inf
> b/UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.inf
> new file mode 100644
> index 0000000000..1115949556
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.inf
> @@ -0,0 +1,35 @@
> +## @file
>
> +# UEFI Boot Services Table Library implementation.
>
> +#
>
> +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +#
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +#
>
> +##
>
> +
>
> +[Defines]
>
> + INF_VERSION = 0x00010005
>
> + BASE_NAME = UefiPayloadInitHobLib
>
> + FILE_GUID = ff5c7a21-ab7a-4366-8616-11c6e53247b6
>
> + MODULE_TYPE = UEFI_DRIVER
>
> + VERSION_STRING = 1.0
>
> + LIBRARY_CLASS = DxeHobListLib|DXE_DRIVER
> DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION
> UEFI_DRIVER SMM_CORE
>
> +
>
> + CONSTRUCTOR = DxeHobListLibConstructor
>
> +
>
> +#
>
> +# VALID_ARCHITECTURES = IA32 X64 EBC
>
> +#
>
> +
>
> +[Sources]
>
> + DxeHobListLib.c
>
> +
>
> +[Packages]
>
> + MdePkg/MdePkg.dec
>
> + UefiPayloadPkg/UefiPayloadPkg.dec
>
> +
>
> +[Guids]
>
> + gEfiHobListGuid ## CONSUMES
>
> +
>
> +
>
> diff --git a/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.c
> b/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.c
> new file mode 100644
> index 0000000000..92d3e17ef0
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.c
> @@ -0,0 +1,20 @@
> +/** @file
>
> + This library retrieve the EFI_BOOT_SERVICES pointer from EFI system table
> in
>
> + library's constructor.
>
> +
>
> + Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> + SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +
>
> +**/
>
> +
>
> +
>
> +#include <Uefi.h>
>
> +
>
> +EFI_STATUS
>
> +EFIAPI
>
> +DxeHobListLibNullConstructor (
>
> + VOID
>
> + )
>
> +{
>
> + return EFI_SUCCESS;
>
> +}
>
> diff --git a/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.inf
> b/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.inf
> new file mode 100644
> index 0000000000..f17e5ebdbd
> --- /dev/null
> +++ b/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull.inf
> @@ -0,0 +1,28 @@
> +## @file
>
> +# UEFI Boot Services Table Library implementation.
>
> +#
>
> +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR>
>
> +#
>
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
>
> +#
>
> +#
>
> +##
>
> +
>
> +[Defines]
>
> + INF_VERSION = 0x00010005
>
> + BASE_NAME = DxeHobListLibNull
>
> + MODULE_TYPE = BASE
>
> + FILE_GUID = 060876c2-0e4e-4c63-8996-6af3710cfa64
>
> + VERSION_STRING = 1.0
>
> + LIBRARY_CLASS = DxeHobListLib
>
> + CONSTRUCTOR = DxeHobListLibNullConstructor
>
> +
>
> +#
>
> +# VALID_ARCHITECTURES = IA32 X64 EBC
>
> +#
>
> +
>
> +[Packages]
>
> + MdePkg/MdePkg.dec
>
> +
>
> +[Sources]
>
> + DxeHobListLibNull.c
>
> diff --git a/UefiPayloadPkg/Library/HobLib/Hob.c
> b/UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c
> similarity index 96%
> rename from UefiPayloadPkg/Library/HobLib/Hob.c
> rename to UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c
> index c0b4cc0b0f..23a749edf1 100644
> --- a/UefiPayloadPkg/Library/HobLib/Hob.c
> +++ b/UefiPayloadPkg/Library/PayloadEntryHobLib/Hob.c
> @@ -1,7 +1,7 @@
> /** @file
>
>
>
> Copyright (c) 2010, Apple Inc. All rights reserved.<BR>
>
> - Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
>
> + Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
>
>
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
>
>
> diff --git a/UefiPayloadPkg/Library/HobLib/HobLib.inf
> b/UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib.inf
> similarity index 87%
> rename from UefiPayloadPkg/Library/HobLib/HobLib.inf
> rename to UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib.inf
> index 030e22a810..cbb4f02efc 100644
> --- a/UefiPayloadPkg/Library/HobLib/HobLib.inf
> +++ b/UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib.inf
> @@ -1,6 +1,6 @@
> #/** @file
>
> #
>
> -# Copyright (c) 2018 - 2020, Intel Corporation. All rights reserved.<BR>
>
> +# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
>
> # Copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
>
> #
>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
>
> diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc
> b/UefiPayloadPkg/UefiPayloadPkg.dsc
> index 21b360256b..d8277efccd 100644
> --- a/UefiPayloadPkg/UefiPayloadPkg.dsc
> +++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
> @@ -27,6 +27,7 @@
>
>
> DEFINE SOURCE_DEBUG_ENABLE = FALSE
>
> DEFINE PS2_KEYBOARD_ENABLE = FALSE
>
> + DEFINE UNIVERSAL_PAYLOAD = FALSE
>
>
>
> #
>
> # SBL: UEFI payload for Slim Bootloader
>
> @@ -146,6 +147,13 @@
>
> PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/Base
> PeCoffGetEntryPointLib.inf
>
>
> CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCac
> heMaintenanceLib.inf
>
> SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
>
> + DxeHobListLib|UefiPayloadPkg/Library/DxeHobListLib/DxeHobListLib.inf
>
> +
>
> +!if $(UNIVERSAL_PAYLOAD) == TRUE
>
> + HobLib|UefiPayloadPkg/Library/DxeHobLib/DxeHobLib.inf
>
> +!else
>
> + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
>
> +!endif
>
>
>
> #
>
> # UEFI & PI
>
> @@ -221,10 +229,12 @@
>
> VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/Va
> riablePolicyHelperLib.inf
>
>
>
> [LibraryClasses.common.SEC]
>
> - HobLib|UefiPayloadPkg/Library/HobLib/HobLib.inf
>
> + HobLib|UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib.inf
>
> PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
>
> +
> DxeHobListLib|UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull
> .inf
>
>
>
> [LibraryClasses.common.DXE_CORE]
>
> +
> DxeHobListLib|UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull
> .inf
>
> PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
>
> HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
>
>
> MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLi
> b/DxeCoreMemoryAllocationLib.inf
>
> @@ -238,7 +248,6 @@
>
>
> [LibraryClasses.common.DXE_DRIVER]
>
> PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
>
> - HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
>
>
> MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemo
> ryAllocationLib.inf
>
>
> ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeE
> xtractGuidedSectionLib.inf
>
>
> ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/Dx
> eReportStatusCodeLib.inf
>
> @@ -251,7 +260,6 @@
>
>
> [LibraryClasses.common.DXE_RUNTIME_DRIVER]
>
> PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
>
> - HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
>
>
> MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemo
> ryAllocationLib.inf
>
>
> ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCod
> eLib/RuntimeDxeReportStatusCodeLib.inf
>
>
> VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLi
> bRuntimeDxe.inf
>
> @@ -260,7 +268,6 @@
> PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
>
>
> MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemo
> ryAllocationLib.inf
>
>
> ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/Dx
> eReportStatusCodeLib.inf
>
> - HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
>
>
>
>
> ##########################################################
> ######################
>
> #
>
> --
> 2.30.0.windows.2
next prev parent reply other threads:[~2021-06-23 23:45 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-23 2:52 [Patch V2 00/12] Enable Universal Payload in UefiPayloadPkg Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 01/12] UefiPayloadPkg: Add HobLib for UniversalPayload Zhiguang Liu
2021-06-23 23:45 ` Guo Dong [this message]
2021-06-23 2:52 ` [Patch V2 02/12] MdeModulePkg: Add new structure for the Universal Payload Serial Port Info Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 03/12] UefiPayloadPkg: Add a separate PlatformHookLib for Universal Payload Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 04/12] UefiPayloadPkg: Update the function definition of HobConstructor Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 05/12] UefiPayloadPkg: Create separate Payload Entry for UniversalPayload Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 06/12] UefiPayloadPkg: Get and enter DxeCore for Universal Payload Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 07/12] UefiPayloadPkg: Fix up UPL Pcd database Zhiguang Liu
2021-06-23 23:45 ` Guo Dong
2021-06-23 2:52 ` [Patch V2 08/12] UefiPayloadPkg: Include UniversalPayLoad modules in UefiPayloadPkg.dsc Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 09/12] UefiPayloadPkg: Remove assert when reserve MMIO/IO resource for devices Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 10/12] UefiPayloadPkg: Add macro to disable some drivers Zhiguang Liu
2021-06-23 23:48 ` Guo Dong
2021-06-23 2:52 ` [Patch V2 11/12] UefiPayloadPkg: Add PcdInstallAcpiSdtProtocol feature in UefiPayloadPkg Zhiguang Liu
2021-06-23 2:52 ` [Patch V2 12/12] UefiPayloadPkg: Add PcdResetOnMemoryTypeInformationChange " Zhiguang Liu
[not found] ` <168B167444E9F647.3239@groups.io>
2021-06-23 8:50 ` [edk2-devel] [Patch V2 10/12] UefiPayloadPkg: Add macro to disable some drivers Zhiguang Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=BYAPR11MB36224F1F5DDB6ACBEC1698E99E089@BYAPR11MB3622.namprd11.prod.outlook.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox