summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Foundation/Library/Pei/Hob/PeiHobLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'EdkCompatibilityPkg/Foundation/Library/Pei/Hob/PeiHobLib.c')
-rw-r--r--EdkCompatibilityPkg/Foundation/Library/Pei/Hob/PeiHobLib.c722
1 files changed, 0 insertions, 722 deletions
diff --git a/EdkCompatibilityPkg/Foundation/Library/Pei/Hob/PeiHobLib.c b/EdkCompatibilityPkg/Foundation/Library/Pei/Hob/PeiHobLib.c
deleted file mode 100644
index 4672209739..0000000000
--- a/EdkCompatibilityPkg/Foundation/Library/Pei/Hob/PeiHobLib.c
+++ /dev/null
@@ -1,722 +0,0 @@
-
-/*++
-
-Copyright (c) 2004 - 2007, Intel Corporation. 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.
-
-MemoryAllocationModule Name:
-
- Peihoblib.c
-
-Abstract:
-
- PEI Library Functions
-
---*/
-
-#include "Tiano.h"
-#include "PeiHob.h"
-#include "PeiHobLib.h"
-#include "PeiLib.h"
-#include EFI_GUID_DEFINITION(MemoryAllocationHob)
-
-
-EFI_PEI_HOB_POINTERS
-BuildHobEndOfHobList (
- IN VOID *HobStart
- )
-/*++
-
-Routine Description:
-
- Builds an end of HOB list HOB
-
-Arguments:
-
- HobStart - The HOB to build
-
-Returns:
-
- A pointer to the next HOB
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
-
- Hob.Raw = HobStart;
-
- Hob.Header->HobType = EFI_HOB_TYPE_END_OF_HOB_LIST;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_GENERIC_HEADER);
-
- Hob.Header++;
- return Hob;
-}
-
-EFI_STATUS
-BuildHobHandoffInfoTable (
- IN VOID *HobStart,
- IN UINT16 Version,
- IN EFI_BOOT_MODE BootMode,
- IN EFI_PHYSICAL_ADDRESS EfiMemoryTop,
- IN EFI_PHYSICAL_ADDRESS EfiMemoryBottom,
- IN EFI_PHYSICAL_ADDRESS EfiFreeMemoryTop,
- IN EFI_PHYSICAL_ADDRESS EfiFreeMemoryBottom
- )
-/*++
-
-Routine Description:
-
- Builds a HandoffInformationTable Information Table HOB
-
-Arguments:
-
- HobStart - Start pointer of hob list
- Version - The version number pertaining to the PHIT HOB definition.
- BootMode - The system boot mode as determined during the HOB producer phase.
- EfiMemoryTop - The highest address location of memory that is allocated for use by the HOB
- producer phase.
- EfiMemoryBottom - The lowest address location of memory that is allocated for use by the HOB
- producer phase.
- EfiFreeMemoryTop - The highest address location of free memory that is currently available for use
- by the HOB producer phase.
- EfiFreeMemoryBottom - The lowest address location of free memory that is available for
- use by the HOB producer phase.
-
-Returns:
-
- EFI_SUCCESS
-
---*/
-{
- EFI_PEI_HOB_POINTERS HandOffHob;
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HobEnd;
-
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = HobStart;
- Hob.Header->HobType = EFI_HOB_TYPE_HANDOFF;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_HANDOFF_INFO_TABLE);
-
- Hob.HandoffInformationTable->Version = Version;
- Hob.HandoffInformationTable->BootMode = BootMode;
-
- Hob.HandoffInformationTable->EfiMemoryTop = EfiMemoryTop;
- Hob.HandoffInformationTable->EfiMemoryBottom = EfiMemoryBottom;
- Hob.HandoffInformationTable->EfiFreeMemoryTop = EfiFreeMemoryTop;
- Hob.HandoffInformationTable->EfiFreeMemoryBottom = EfiFreeMemoryBottom;
-
- HobEnd.Raw = (VOID*)(Hob.HandoffInformationTable + 1);
- Hob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) HobEnd.Raw;
- Hob = BuildHobEndOfHobList (HobEnd.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-
-
-EFI_STATUS
-BuildHobModule (
- IN VOID *HobStart,
- IN EFI_GUID *ModuleName,
- IN EFI_PHYSICAL_ADDRESS MemoryAllocationModule,
- IN UINT64 ModuleLength,
- IN EFI_PHYSICAL_ADDRESS EntryPoint
- )
-/*++
-
-Routine Description:
-
- Builds a HOB for a loaded PE32 module
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- ModuleName - The GUID File Name of the HON from the Firmware Volume
-
- MemoryAllocationModule - The 64 bit physical address of the module
-
- ModuleLength - The length of the module in bytes
-
- EntryPoint - The 64 bit physical address of the entry point to the module
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID*)(UINTN)(HandOffHob.HandoffInformationTable->EfiEndOfHobList);
-
- Hob.Header->HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE);
-
- CopyMem(&(Hob.MemoryAllocationModule->ModuleName), ModuleName, sizeof(EFI_GUID));
- CopyMem(&(Hob.MemoryAllocationModule->MemoryAllocationHeader.Name), &gEfiHobMemeryAllocModuleGuid, sizeof(EFI_GUID));
- Hob.MemoryAllocationModule->MemoryAllocationHeader.MemoryBaseAddress = MemoryAllocationModule;
- Hob.MemoryAllocationModule->MemoryAllocationHeader.MemoryLength = ModuleLength;
- Hob.MemoryAllocationModule->MemoryAllocationHeader.MemoryType = EfiConventionalMemory;
-
- Hob.MemoryAllocationModule->EntryPoint = EntryPoint;
-
- Hob.MemoryAllocationModule++;
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-BuildHobResourceDescriptor (
- IN VOID * HobStart,
- IN EFI_RESOURCE_TYPE ResourceType,
- IN EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute,
- IN EFI_PHYSICAL_ADDRESS PhysicalStart,
- IN UINT64 NumberOfBytes
- )
-/*++
-
-Routine Description:
-
- Builds a HOB that describes a chunck of system memory
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- ResourceType - The type of memory described by this HOB
-
- ResourceAttribute - The memory attributes of the memory described by this HOB
-
- PhysicalStart - The 64 bit physical address of memory described by this HOB
-
- NumberOfBytes - The length of the memoty described by this HOB in bytes
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID *)(UINTN)(HandOffHob.HandoffInformationTable->EfiEndOfHobList);
-
- Hob.Header->HobType = EFI_HOB_TYPE_RESOURCE_DESCRIPTOR;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_RESOURCE_DESCRIPTOR);
-
- Hob.ResourceDescriptor->ResourceType = ResourceType;
- Hob.ResourceDescriptor->ResourceAttribute = ResourceAttribute;
- Hob.ResourceDescriptor->PhysicalStart = PhysicalStart;
- Hob.ResourceDescriptor->ResourceLength = NumberOfBytes;
-
- Hob.ResourceDescriptor++;
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-BuildHobGuidType (
- IN VOID *HobStart,
- IN EFI_GUID *Guid,
- IN VOID *Buffer,
- IN UINTN BufferSize
- )
-/*++
-
-Routine Description:
-
- Builds a custom HOB that is tagged with a GUID for identification
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- Guid - The GUID of the custome HOB type
-
- Buffer - A pointer to the data for the custom HOB type
-
- BufferSize - The size in byte of BufferSize
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
- UINTN Length;
-
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID *)(UINTN)HandOffHob.HandoffInformationTable->EfiEndOfHobList;
-
-
- Hob.Header->HobType = EFI_HOB_TYPE_GUID_EXTENSION;
- Length = sizeof(EFI_HOB_GUID_TYPE) + BufferSize;
- Length = (Length + 0x7) & (~0x7);
- Hob.Header->HobLength = (UINT16)Length;
- CopyMem(&Hob.Guid->Name, Guid, sizeof(EFI_GUID));
- CopyMem(Hob.Raw + sizeof(EFI_HOB_GUID_TYPE), Buffer, BufferSize);
- Hob.Raw += Length;
-
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-BuildHobFvDescriptor (
- IN VOID *HobStart,
- IN EFI_PHYSICAL_ADDRESS BaseAddress,
- IN UINT64 Length
- )
-/*++
-
-Routine Description:
-
- Builds a Firmware Volume HOB
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- BaseAddress - The base address of the Firmware Volume
-
- Length - The size of the Firmware Volume in bytes
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID*)(UINTN)(HandOffHob.HandoffInformationTable->EfiEndOfHobList);
-
- Hob.Header->HobType = EFI_HOB_TYPE_FV;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_FIRMWARE_VOLUME);
-
- Hob.FirmwareVolume->BaseAddress = BaseAddress;
- Hob.FirmwareVolume->Length = Length;
-
- Hob.FirmwareVolume++;
-
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-BuildHobCpu (
- IN VOID *HobStart,
- IN UINT8 SizeOfMemorySpace,
- IN UINT8 SizeOfIoSpace
- )
-/*++
-
-Routine Description:
-
- Builds a HOB for the CPU
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- SizeOfMemorySpace - Identifies the maximum
- physical memory addressibility of the processor.
-
- SizeOfIoSpace - Identifies the maximum physical I/O addressibility
- of the processor.
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID*)(UINTN)HandOffHob.HandoffInformationTable->EfiEndOfHobList;
-
- Hob.Header->HobType = EFI_HOB_TYPE_CPU;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_CPU);
-
- Hob.Cpu->SizeOfMemorySpace = SizeOfMemorySpace;
- Hob.Cpu->SizeOfIoSpace = SizeOfIoSpace;
-
- Hob.Cpu++;
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-
-
-EFI_STATUS
-BuildHobStack (
- IN VOID *HobStart,
- IN EFI_PHYSICAL_ADDRESS BaseAddress,
- IN UINT64 Length
- )
-/*++
-
-Routine Description:
-
- Builds a HOB for the Stack
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- BaseAddress - The 64 bit physical address of the Stack
-
- Length - The length of the stack in bytes
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID*)(UINTN)HandOffHob.HandoffInformationTable->EfiEndOfHobList;
-
- Hob.Header->HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_MEMORY_ALLOCATION_STACK);
-
- CopyMem(&(Hob.MemoryAllocationStack->AllocDescriptor.Name), &gEfiHobMemeryAllocStackGuid, sizeof(EFI_GUID));
- (Hob.MemoryAllocationStack->AllocDescriptor).MemoryBaseAddress = BaseAddress;
- (Hob.MemoryAllocationStack->AllocDescriptor).MemoryLength = Length;
- (Hob.MemoryAllocationStack->AllocDescriptor).MemoryType = EfiBootServicesData;
-
- Hob.MemoryAllocationStack++;
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-
-
-EFI_STATUS
-BuildHobBspStore (
- IN VOID *HobStart,
- IN EFI_PHYSICAL_ADDRESS BaseAddress,
- IN UINT64 Length,
- IN EFI_MEMORY_TYPE MemoryType
- )
-/*++
-
-Routine Description:
-
- Builds a HOB for the bsp store
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- BaseAddress - The 64 bit physical address of bsp store
-
- Length - The length of the bsp store in bytes
-
- MemoryType - Memory type of the bsp store
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID *)(UINTN)HandOffHob.HandoffInformationTable->EfiEndOfHobList;
- Hob.Header->HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_MEMORY_ALLOCATION_BSP_STORE);
-
- (Hob.MemoryAllocationBspStore->AllocDescriptor).MemoryBaseAddress = BaseAddress;
- (Hob.MemoryAllocationBspStore->AllocDescriptor).MemoryLength = Length;
- (Hob.MemoryAllocationBspStore->AllocDescriptor).MemoryType = MemoryType;
- CopyMem(&(Hob.MemoryAllocationBspStore->AllocDescriptor).Name, &gEfiHobMemeryAllocBspStoreGuid, sizeof(EFI_GUID));
- Hob.MemoryAllocationBspStore++;
-
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-
-EFI_STATUS
-BuildMemoryAllocationHob (
- IN VOID *HobStart,
- IN EFI_PHYSICAL_ADDRESS BaseAddress,
- IN UINT64 Length,
- IN EFI_GUID *Name,
- IN EFI_MEMORY_TYPE MemoryType
- )
-/*++
-
-Routine Description:
-
- Builds a HOB for memory allocation
-
-Arguments:
-
- HobStart - Start pointer of hob list
-
- BaseAddress - The base address of memory allocated by this HOB.
-
- Length - The length in bytes of memory allocated by this HOB.
-
- Name - A GUID that defines the memory allocation region's type and purpose,
- as well as other fields within the memory allocation HOB.
-
- MemoryType - Defines the type of memory allocated by this HOB.
-
-Returns:
-
- EFI_SUCCESS
- EFI_NOT_AVAILABLE_YET
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
- EFI_PEI_HOB_POINTERS HandOffHob;
-
-
- HandOffHob.Raw = HobStart;
- Hob.Raw = (VOID*)(UINTN)HandOffHob.HandoffInformationTable->EfiEndOfHobList;
-
- Hob.Header->HobType = EFI_HOB_TYPE_MEMORY_ALLOCATION;
- Hob.Header->HobLength = (UINT16) sizeof (EFI_HOB_MEMORY_ALLOCATION);
-
- if (Name != NULL) {
- CopyMem (&(Hob.MemoryAllocation->AllocDescriptor.Name), &Name, sizeof (EFI_GUID));
- } else {
- ZeroMem (&Hob.MemoryAllocation->AllocDescriptor.Name, sizeof (EFI_GUID));
- }
-
- (Hob.MemoryAllocation->AllocDescriptor).MemoryBaseAddress = BaseAddress;
- (Hob.MemoryAllocation->AllocDescriptor).MemoryLength = Length;
- (Hob.MemoryAllocation->AllocDescriptor).MemoryType = MemoryType;
-
- Hob.MemoryAllocation++;
- HandOffHob.HandoffInformationTable->EfiEndOfHobList = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- Hob = BuildHobEndOfHobList(Hob.Raw);
- HandOffHob.HandoffInformationTable->EfiFreeMemoryBottom = (EFI_PHYSICAL_ADDRESS) (UINTN) Hob.Raw;
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-GetFirstGuidHob (
- IN VOID **HobStart,
- IN EFI_GUID *Guid,
- OUT VOID **Buffer,
- OUT UINTN *BufferSize OPTIONAL
- )
-/*++
-
-Routine Description:
-
- This function searches the first instance of a HOB among the whole HOB list.
-
-Arguments:
-
- HobStart - A pointer to the start pointer of hob list.
-
- Guid - A pointer to the GUID to match with in the HOB list.
-
- Buffer - A pointer to the pointer to the data for the custom HOB type.
-
- BufferSize - A Pointer to the size in byte of BufferSize.
-
-Returns:
- EFI_SUCCESS
- The first instance of the matched GUID HOB among the whole HOB list
-
---*/
-{
- EFI_STATUS Status;
- EFI_PEI_HOB_POINTERS GuidHob;
-
- GuidHob.Raw = *HobStart;
-
- for (Status = EFI_NOT_FOUND; EFI_ERROR (Status); ) {
-
- if (END_OF_HOB_LIST (GuidHob)) {
- return EFI_NOT_FOUND;
- }
-
- if (GuidHob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
- if ( ((INT32 *)Guid)[0] == ((INT32 *)&GuidHob.Guid->Name)[0] &&
- ((INT32 *)Guid)[1] == ((INT32 *)&GuidHob.Guid->Name)[1] &&
- ((INT32 *)Guid)[2] == ((INT32 *)&GuidHob.Guid->Name)[2] &&
- ((INT32 *)Guid)[3] == ((INT32 *)&GuidHob.Guid->Name)[3] ) {
- Status = EFI_SUCCESS;
- *Buffer = (VOID *)((UINT8 *)(&GuidHob.Guid->Name) + sizeof (EFI_GUID));
- if (BufferSize) {
- *BufferSize = GuidHob.Header->HobLength - sizeof (EFI_HOB_GUID_TYPE);
- }
- }
- }
-
- GuidHob.Raw = GET_NEXT_HOB (GuidHob);
- }
-
- return Status;
-}
-
-VOID *
-GetHob (
- IN UINT16 Type,
- IN VOID *HobStart
- )
-/*++
-
-Routine Description:
-
- This function returns the first instance of a HOB type in a HOB list.
-
-Arguments:
-
- Type The HOB type to return.
- HobStart The first HOB in the HOB list.
-
-Returns:
-
- HobStart There were no HOBs found with the requested type.
- else Returns the first HOB with the matching type.
-
---*/
-{
- EFI_PEI_HOB_POINTERS Hob;
-
- Hob.Raw = HobStart;
- //
- // Return input if not found
- //
- if (HobStart == NULL) {
- return HobStart;
- }
-
- //
- // Parse the HOB list, stop if end of list or matching type found.
- //
- while (!END_OF_HOB_LIST (Hob)) {
-
- if (Hob.Header->HobType == Type) {
- break;
- }
-
- Hob.Raw = GET_NEXT_HOB (Hob);
- }
-
- //
- // Return input if not found
- //
- if (END_OF_HOB_LIST (Hob)) {
- return HobStart;
- }
-
- return (VOID *) (Hob.Raw);
-}
-
-EFI_STATUS
-GetNextGuidHob (
- IN OUT VOID **HobStart,
- IN EFI_GUID * Guid,
- OUT VOID **Buffer,
- OUT UINTN *BufferSize OPTIONAL
- )
-/*++
-
-Routine Description:
- Get the next guid hob.
-
-Arguments:
- HobStart A pointer to the start hob.
- Guid A pointer to a guid.
- Buffer A pointer to the buffer.
- BufferSize Buffer size.
-
-Returns:
- Status code.
-
- EFI_NOT_FOUND - Next Guid hob not found
-
- EFI_SUCCESS - Next Guid hob found and data for this Guid got
-
- EFI_INVALID_PARAMETER - invalid parameter
-
---*/
-{
- EFI_STATUS Status;
- EFI_PEI_HOB_POINTERS GuidHob;
-
- if (Buffer == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- for (Status = EFI_NOT_FOUND; EFI_ERROR (Status);) {
-
- GuidHob.Raw = *HobStart;
- if (END_OF_HOB_LIST (GuidHob)) {
- return EFI_NOT_FOUND;
- }
-
- GuidHob.Raw = GetHob (EFI_HOB_TYPE_GUID_EXTENSION, *HobStart);
- if (GuidHob.Header->HobType == EFI_HOB_TYPE_GUID_EXTENSION) {
- if ( ((INT32 *)Guid)[0] == ((INT32 *)&GuidHob.Guid->Name)[0] &&
- ((INT32 *)Guid)[1] == ((INT32 *)&GuidHob.Guid->Name)[1] &&
- ((INT32 *)Guid)[2] == ((INT32 *)&GuidHob.Guid->Name)[2] &&
- ((INT32 *)Guid)[3] == ((INT32 *)&GuidHob.Guid->Name)[3] ) {
- Status = EFI_SUCCESS;
- *Buffer = (VOID *) ((UINT8 *) (&GuidHob.Guid->Name) + sizeof (EFI_GUID));
- if (BufferSize != NULL) {
- *BufferSize = GuidHob.Header->HobLength - sizeof (EFI_HOB_GUID_TYPE);
- }
- }
- }
-
- *HobStart = GET_NEXT_HOB (GuidHob);
- }
-
- return Status;
-}