|
@@ -0,0 +1,590 @@
|
|
|
+/** @file
|
|
|
+ HOB Library implementation for Dxe Phase with DebugLib dependency removed
|
|
|
+
|
|
|
+ Copyright (c) 2022, Loongson Limited. All rights reserved.
|
|
|
+
|
|
|
+ SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
+
|
|
|
+**/
|
|
|
+
|
|
|
+#define ASSERT(Expression) \
|
|
|
+ do { \
|
|
|
+ if (!(Expression)) { \
|
|
|
+ CpuDeadLoop (); \
|
|
|
+ } \
|
|
|
+ } while (FALSE)
|
|
|
+
|
|
|
+#include <PiDxe.h>
|
|
|
+#include <Guid/HobList.h>
|
|
|
+#include <Library/HobLib.h>
|
|
|
+#include <Library/UefiLib.h>
|
|
|
+#include <Library/BaseMemoryLib.h>
|
|
|
+
|
|
|
+VOID *mHobList = NULL;
|
|
|
+
|
|
|
+/**
|
|
|
+ The constructor function caches the pointer to HOB list.
|
|
|
+
|
|
|
+ The constructor function gets the start address of HOB list from system configuration table.
|
|
|
+
|
|
|
+ @param ImageHandle The firmware allocated handle for the EFI image.
|
|
|
+ @param SystemTable A pointer to the EFI System Table.
|
|
|
+
|
|
|
+ @retval EFI_SUCCESS The constructor successfully gets HobList.
|
|
|
+ @retval Other value The constructor can't get HobList.
|
|
|
+**/
|
|
|
+EFI_STATUS
|
|
|
+EFIAPI
|
|
|
+HobLibConstructor (
|
|
|
+ IN EFI_HANDLE ImageHandle,
|
|
|
+ IN EFI_SYSTEM_TABLE *SystemTable
|
|
|
+ )
|
|
|
+{
|
|
|
+ UINTN Index;
|
|
|
+
|
|
|
+ for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {
|
|
|
+ if (CompareGuid (&gEfiHobListGuid, &(SystemTable->ConfigurationTable[Index].VendorGuid))) {
|
|
|
+ mHobList = SystemTable->ConfigurationTable[Index].VendorTable;
|
|
|
+ return EFI_SUCCESS;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return EFI_NOT_FOUND;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ 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 (mHobList != NULL);
|
|
|
+ return mHobList;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ 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.
|
|
|
+
|
|
|
+ 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);
|
|
|
+}
|