diff options
Diffstat (limited to 'EDK/Foundation/Library/Pei/Hob')
-rw-r--r-- | EDK/Foundation/Library/Pei/Hob/PeiHobLib.c | 721 | ||||
-rw-r--r-- | EDK/Foundation/Library/Pei/Hob/PeiHobLib.cif | 11 | ||||
-rw-r--r-- | EDK/Foundation/Library/Pei/Hob/PeiHobLib.inf | 51 | ||||
-rw-r--r-- | EDK/Foundation/Library/Pei/Hob/PeiHobLib.mak | 69 | ||||
-rw-r--r-- | EDK/Foundation/Library/Pei/Hob/PeiHobLib.sdl | 26 |
5 files changed, 878 insertions, 0 deletions
diff --git a/EDK/Foundation/Library/Pei/Hob/PeiHobLib.c b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.c new file mode 100644 index 0000000..15421df --- /dev/null +++ b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.c @@ -0,0 +1,721 @@ + +/*++ + +Copyright (c) 2004 - 2007, Intel Corporation +All rights reserved. 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 = 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 = 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 = 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 = 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; + 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 = 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 = 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 = 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 = 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 = 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; +} diff --git a/EDK/Foundation/Library/Pei/Hob/PeiHobLib.cif b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.cif new file mode 100644 index 0000000..e43a597 --- /dev/null +++ b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.cif @@ -0,0 +1,11 @@ +<component> + name = "PeiHobLib" + category = ModulePart + LocalRoot = "EDK\Foundation\Library\Pei\Hob\" + RefName = "PeiHobLib" +[files] +"PeiHobLib.sdl" +"PeiHobLib.mak" +"PeiHobLib.c" +"PeiHobLib.inf" +<endComponent> diff --git a/EDK/Foundation/Library/Pei/Hob/PeiHobLib.inf b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.inf new file mode 100644 index 0000000..ba2e8b2 --- /dev/null +++ b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.inf @@ -0,0 +1,51 @@ +#/*++ +# +# Copyright (c) 2004, Intel Corporation +# All rights reserved. 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. +# +# Module Name: +# +# PeiHobLib.inf +# +# Abstract: +# +# Component description file for the PEI library. +# +#--*/ + +[defines] +BASE_NAME = PeiHobLib +COMPONENT_TYPE = LIBRARY + +[sources.common] + PeiHobLib.c + +[sources.ia32] + +[sources.ipf] + +[libraries.common] + +[includes.common] + $(EDK_SOURCE)\Foundation + $(EDK_SOURCE)\Foundation\Efi + . + $(EDK_SOURCE)\Foundation\Core\Dxe + $(EDK_SOURCE)\Foundation\Include + $(EDK_SOURCE)\Foundation\Efi\Include + $(EDK_SOURCE)\Foundation\Framework\Include + $(EDK_SOURCE)\Foundation\Include\IndustryStandard + $(EDK_SOURCE)\Foundation\Include\Pei + $(EDK_SOURCE)\Foundation\Library\Pei\Include + $(EDK_SOURCE)\Foundation\Core\Pei\Include + $(EDK_SOURCE)\Foundation\Library\Dxe\Include + $(EDK_SOURCE)\Foundation\Framework + +[nmake.common] + C_STD_INCLUDE= diff --git a/EDK/Foundation/Library/Pei/Hob/PeiHobLib.mak b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.mak new file mode 100644 index 0000000..4e07ccb --- /dev/null +++ b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.mak @@ -0,0 +1,69 @@ +#********************************************************************** +#********************************************************************** +#** ** +#** (C)Copyright 1985-2009, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#********************************************************************** +#********************************************************************** + +#********************************************************************** +# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/PeiHobLib/PeiHobLib.mak 1 1/20/12 4:10a Jeffch $ +# +# $Revision: 1 $ +# +# $Date: 1/20/12 4:10a $ +#********************************************************************** +# Revision History +# ---------------- +# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/PeiHobLib/PeiHobLib.mak $ +# +# 1 1/20/12 4:10a Jeffch +# Create Intel EDK 1117 Patch 7. +# +# 1 9/27/11 6:32a Wesleychen +# Intel EDK initially releases. +# +# 2 9/02/09 3:57a Iminglin +# EIP24919 +# +#********************************************************************** +#<AMI_FHDR_START> +# +# Name: PeiHobLib.mak +# +# Description: +# +#<AMI_FHDR_END> +#********************************************************************** +$(PEIHOBLIB) : PeiHobLib + +$(BUILD_DIR)\PeiHobLib.lib : PeiHobLib + +PeiHobLib : $(BUILD_DIR)\PeiHobLib.mak PeiHobLibBin + +$(BUILD_DIR)\PeiHobLib.mak : $(PeiHobLib_DIR)\$(@B).cif $(PeiHobLib_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(PeiHobLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS) + +PeiHobLibBin : + $(MAKE) /$(MAKEFLAGS) $(EDK_DEFAULTS)\ + /f $(BUILD_DIR)\PeiHobLib.mak all\ + TYPE=PEI_LIBRARY \ +#********************************************************************** +#********************************************************************** +#** ** +#** (C)Copyright 1985-2009, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#********************************************************************** +#**********************************************************************
\ No newline at end of file diff --git a/EDK/Foundation/Library/Pei/Hob/PeiHobLib.sdl b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.sdl new file mode 100644 index 0000000..45fd030 --- /dev/null +++ b/EDK/Foundation/Library/Pei/Hob/PeiHobLib.sdl @@ -0,0 +1,26 @@ +TOKEN + Name = "PeiHobLib_SUPPORT" + Value = "1" + Help = "Main switch to enable PeiHobLib support in Project" + TokenType = Boolean + TargetEQU = Yes + TargetMAK = Yes + Master = Yes +End + +TOKEN + Name = "PEIHOBLIB" + Value = "$(BUILD_DIR)\PeiHobLib.lib" + TokenType = Expression + TargetMAK = Yes +End + +PATH + Name = "PeiHobLib_DIR" +End + +MODULE + Help = "Includes PeiHobLib.mak to Project" + File = "PeiHobLib.mak" +End + |