/** 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 ) { EFI_HOB_MEMORY_ALLOCATION_MODULE *Hob; ASSERT (((MemoryAllocationModule & (EFI_PAGE_SIZE - 1)) == 0) && ((ModuleLength & (EFI_PAGE_SIZE - 1)) == 0)); Hob = CreateHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE)); CopyGuid (&(Hob->MemoryAllocationHeader.Name), &gEfiHobMemoryAllocModuleGuid); Hob->MemoryAllocationHeader.MemoryBaseAddress = MemoryAllocationModule; Hob->MemoryAllocationHeader.MemoryLength = ModuleLength; Hob->MemoryAllocationHeader.MemoryType = EfiBootServicesCode; // // Zero the reserved space to match HOB spec // ZeroMem (Hob->MemoryAllocationHeader.Reserved, sizeof (Hob->MemoryAllocationHeader.Reserved)); CopyGuid (&Hob->ModuleName, ModuleName); Hob->EntryPoint = EntryPoint; }
/** 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(). @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 ) { EFI_HOB_FIRMWARE_VOLUME *Hob; Hob = CreateHob (EFI_HOB_TYPE_FV, sizeof (EFI_HOB_FIRMWARE_VOLUME)); Hob->BaseAddress = BaseAddress; Hob->Length = Length; }
VOID EFIAPI BuildGlobalVariableHob ( IN EFI_PHYSICAL_ADDRESS GlobalVariableBase, IN UINT32 GlobalVariableSize ) { ARM_HOB_GLOBAL_VARIABLE *Hob; Hob = CreateHob (EFI_HOB_TYPE_GUID_EXTENSION, sizeof (ARM_HOB_GLOBAL_VARIABLE)); ASSERT(Hob != NULL); CopyGuid (&(Hob->Header.Name), &gArmGlobalVariableGuid); Hob->GlobalVariableBase = GlobalVariableBase; Hob->GlobalVariableSize = GlobalVariableSize; }
EFIAPI BuildGuidHob ( IN CONST EFI_GUID *Guid, IN UINTN DataLength ) { EFI_HOB_GUID_TYPE *Hob; // // Make sure that data length is not too long. // ASSERT (DataLength <= (0xffff - sizeof (EFI_HOB_GUID_TYPE))); Hob = CreateHob (EFI_HOB_TYPE_GUID_EXTENSION, (UINT16) (sizeof (EFI_HOB_GUID_TYPE) + DataLength)); CopyGuid (&Hob->Name, Guid); return Hob + 1; }
/** 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(). @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 ) { EFI_HOB_FIRMWARE_VOLUME2 *Hob; Hob = CreateHob (EFI_HOB_TYPE_FV2, sizeof (EFI_HOB_FIRMWARE_VOLUME2)); Hob->BaseAddress = BaseAddress; Hob->Length = Length; CopyGuid (&Hob->FvName, FvName); CopyGuid (&Hob->FileName, FileName); }
/** 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 ) { EFI_HOB_CPU *Hob; Hob = CreateHob (EFI_HOB_TYPE_CPU, sizeof (EFI_HOB_CPU)); Hob->SizeOfMemorySpace = SizeOfMemorySpace; Hob->SizeOfIoSpace = SizeOfIoSpace; // // Zero the reserved space to match HOB spec // ZeroMem (Hob->Reserved, sizeof (Hob->Reserved)); }
/** Builds a HOB that describes a chunk of system memory. This function builds a HOB that describes a chunk of system memory. 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 ) { EFI_HOB_RESOURCE_DESCRIPTOR *Hob; Hob = CreateHob (EFI_HOB_TYPE_RESOURCE_DESCRIPTOR, sizeof (EFI_HOB_RESOURCE_DESCRIPTOR)); ASSERT(Hob != NULL); Hob->ResourceType = ResourceType; Hob->ResourceAttribute = ResourceAttribute; Hob->PhysicalStart = PhysicalStart; Hob->ResourceLength = NumberOfBytes; }
EFIAPI AllocatePool ( IN UINTN AllocationSize ) { EFI_HOB_MEMORY_POOL *Hob; Hob = GetHobList (); // // Verify that there is sufficient memory to satisfy the allocation // if (AllocationSize > 0x10000) { // Please call AllcoatePages for big allocations return 0; } else { Hob = (EFI_HOB_MEMORY_POOL *)CreateHob (EFI_HOB_TYPE_MEMORY_POOL, (UINT16)(sizeof (EFI_HOB_TYPE_MEMORY_POOL) + AllocationSize)); return (VOID *)(Hob + 1); } }
/** 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 ) { EFI_HOB_MEMORY_ALLOCATION *Hob; ASSERT (((BaseAddress & (EFI_PAGE_SIZE - 1)) == 0) && ((Length & (EFI_PAGE_SIZE - 1)) == 0)); Hob = CreateHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION)); ZeroMem (&(Hob->AllocDescriptor.Name), sizeof (EFI_GUID)); Hob->AllocDescriptor.MemoryBaseAddress = BaseAddress; Hob->AllocDescriptor.MemoryLength = Length; Hob->AllocDescriptor.MemoryType = MemoryType; // // Zero the reserved space to match HOB spec // ZeroMem (Hob->AllocDescriptor.Reserved, sizeof (Hob->AllocDescriptor.Reserved)); }
/** 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 ) { EFI_HOB_MEMORY_ALLOCATION_STACK *Hob; ASSERT (((BaseAddress & (EFI_PAGE_SIZE - 1)) == 0) && ((Length & (EFI_PAGE_SIZE - 1)) == 0)); Hob = CreateHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, sizeof (EFI_HOB_MEMORY_ALLOCATION_STACK)); CopyGuid (&(Hob->AllocDescriptor.Name), &gEfiHobMemoryAllocStackGuid); Hob->AllocDescriptor.MemoryBaseAddress = BaseAddress; Hob->AllocDescriptor.MemoryLength = Length; Hob->AllocDescriptor.MemoryType = EfiBootServicesData; // // Zero the reserved space to match HOB spec // ZeroMem (Hob->AllocDescriptor.Reserved, sizeof (Hob->AllocDescriptor.Reserved)); }