Message ID | 20190114132758.24054-13-ard.biesheuvel@linaro.org |
---|---|
State | New |
Headers | show |
Series | implement standalone MM versions of the variable runtime drivers | expand |
On 2019/1/14 21:27, Ard Biesheuvel wrote: > In order to permit MM_STANDALONE modules to be built without relying > on StandaloneMmPkg, provide a BASE type NULL implementation of HobLib. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Star Zeng <star.zeng@intel.com> > --- > MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf | 38 ++ > MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c | 542 ++++++++++++++++++++ > MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni | 20 + > 3 files changed, 600 insertions(+) > > diff --git a/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf > new file mode 100644 > index 000000000000..c0e927ff14be > --- /dev/null > +++ b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf > @@ -0,0 +1,38 @@ > +## @file > +# Null instance of HOB Library. > +# > +# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> > +# Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > +# > +# This program and the accompanying materials > +# are licensed and made available under the terms and conditions of the BSD License > +# which accompanies this distribution. The full text of the license may be found at > +# http://opensource.org/licenses/bsd-license.php. > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +# > +# > +## > + > +[Defines] > + INF_VERSION = 0x0001001B > + BASE_NAME = BaseHobLibNull > + MODULE_UNI_FILE = BaseHobLibNull.uni > + FILE_GUID = a89dea6f-c9a0-40be-903c-7cac2ef8a0e7 > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = HobLib > + > + > +# > +# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 > +# > + > +[Sources] > + BaseHobLibNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + > +[LibraryClasses] > + DebugLib > diff --git a/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c > new file mode 100644 > index 000000000000..0ea7d9304e9d > --- /dev/null > +++ b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c > @@ -0,0 +1,542 @@ > +/** @file > + Provide Hob Library functions for build testing only. > + > +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > +This program and the accompanying materials > +are licensed and made available under the terms and conditions of the BSD License > +which accompanies this distribution. The full text of the license may be found at > +http://opensource.org/licenses/bsd-license.php. > + > +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > + > +**/ > + > +#include <Uefi.h> > +#include <Pi/PiMultiPhase.h> > + > +#include <Library/DebugLib.h> > +#include <Library/HobLib.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 (FALSE); > + return NULL; > +} > + > +/** > + 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 > + ) > +{ > + ASSERT (FALSE); > + 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 > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + 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 > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + 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 > + ) > +{ > + ASSERT (FALSE); > + return NULL; > +} > + > +/** > + 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 > + ) > +{ > + ASSERT (FALSE); > + return MAX_UINT32; > +} > + > +/** > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 > + ) > +{ > + 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 The type of memory allocated by this HOB. > + > +**/ > +VOID > +EFIAPI > +BuildBspStoreHob ( > + IN EFI_PHYSICAL_ADDRESS BaseAddress, > + IN UINT64 Length, > + IN EFI_MEMORY_TYPE MemoryType > + ) > +{ > + 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 The type of memory allocated by this HOB. > + > +**/ > +VOID > +EFIAPI > +BuildMemoryAllocationHob ( > + IN EFI_PHYSICAL_ADDRESS BaseAddress, > + IN UINT64 Length, > + IN EFI_MEMORY_TYPE MemoryType > + ) > +{ > + ASSERT (FALSE); > +} > diff --git a/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni > new file mode 100644 > index 000000000000..4a999e381aa0 > --- /dev/null > +++ b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni > @@ -0,0 +1,20 @@ > +// /** @file > +// Null instance of HOB Library. > +// > +// Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> > +// Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> > +// > +// This program and the accompanying materials > +// are licensed and made available under the terms and conditions of the BSD License > +// which accompanies this distribution. The full text of the license may be found at > +// http://opensource.org/licenses/bsd-license.php. > +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > +// > +// **/ > + > + > +#string STR_MODULE_ABSTRACT #language en-US "Null instance of HOB Library" > + > +#string STR_MODULE_DESCRIPTION #language en-US "HOB Library implementation for build testing only." > + > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
diff --git a/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf new file mode 100644 index 000000000000..c0e927ff14be --- /dev/null +++ b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf @@ -0,0 +1,38 @@ +## @file +# Null instance of HOB Library. +# +# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php. +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +# +## + +[Defines] + INF_VERSION = 0x0001001B + BASE_NAME = BaseHobLibNull + MODULE_UNI_FILE = BaseHobLibNull.uni + FILE_GUID = a89dea6f-c9a0-40be-903c-7cac2ef8a0e7 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = HobLib + + +# +# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 +# + +[Sources] + BaseHobLibNull.c + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + DebugLib diff --git a/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c new file mode 100644 index 000000000000..0ea7d9304e9d --- /dev/null +++ b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c @@ -0,0 +1,542 @@ +/** @file + Provide Hob Library functions for build testing only. + +Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> +This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php. + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include <Uefi.h> +#include <Pi/PiMultiPhase.h> + +#include <Library/DebugLib.h> +#include <Library/HobLib.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 (FALSE); + return NULL; +} + +/** + 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 + ) +{ + ASSERT (FALSE); + 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 + ) +{ + ASSERT (FALSE); + return NULL; +} + +/** + 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 + ) +{ + ASSERT (FALSE); + return NULL; +} + +/** + 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 + ) +{ + ASSERT (FALSE); + return NULL; +} + +/** + 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 + ) +{ + ASSERT (FALSE); + return MAX_UINT32; +} + +/** + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 + ) +{ + 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 The type of memory allocated by this HOB. + +**/ +VOID +EFIAPI +BuildBspStoreHob ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN EFI_MEMORY_TYPE MemoryType + ) +{ + 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 The type of memory allocated by this HOB. + +**/ +VOID +EFIAPI +BuildMemoryAllocationHob ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN EFI_MEMORY_TYPE MemoryType + ) +{ + ASSERT (FALSE); +} diff --git a/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni new file mode 100644 index 000000000000..4a999e381aa0 --- /dev/null +++ b/MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni @@ -0,0 +1,20 @@ +// /** @file +// Null instance of HOB Library. +// +// Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR> +// Copyright (c) 2018, Linaro, Ltd. All rights reserved.<BR> +// +// This program and the accompanying materials +// are licensed and made available under the terms and conditions of the BSD License +// which accompanies this distribution. The full text of the license may be found at +// http://opensource.org/licenses/bsd-license.php. +// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +// +// **/ + + +#string STR_MODULE_ABSTRACT #language en-US "Null instance of HOB Library" + +#string STR_MODULE_DESCRIPTION #language en-US "HOB Library implementation for build testing only." +
In order to permit MM_STANDALONE modules to be built without relying on StandaloneMmPkg, provide a BASE type NULL implementation of HobLib. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.inf | 38 ++ MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.c | 542 ++++++++++++++++++++ MdeModulePkg/Library/BaseHobLibNull/BaseHobLibNull.uni | 20 + 3 files changed, 600 insertions(+) -- 2.20.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel