Reviewed-by: Guo Dong <guo.d...@intel.com>
> -----Original Message----- > From: Liu, Zhiguang <zhiguang....@intel.com> > Sent: Tuesday, June 22, 2021 7:52 PM > To: devel@edk2.groups.io > Cc: Ma, Maurice <maurice...@intel.com>; Dong, Guo > <guo.d...@intel.com>; You, Benjamin <benjamin....@intel.com>; Ni, Ray > <ray...@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...@intel.com> > Cc: Guo Dong <guo.d...@intel.com> > Cc: Benjamin You <benjamin....@intel.com> > Signed-off-by: Ray Ni <ray...@intel.com> > Signed-off-by: Zhiguang Liu <zhiguang....@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 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#77014): https://edk2.groups.io/g/devel/message/77014 Mute This Topic: https://groups.io/mt/83730176/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-