Initial import.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
495
Tools/Source/TianoTools/Common/PeiLib/Hob/Hob.c
Normal file
495
Tools/Source/TianoTools/Common/PeiLib/Hob/Hob.c
Normal file
@@ -0,0 +1,495 @@
|
||||
|
||||
/*++
|
||||
|
||||
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:
|
||||
|
||||
hob.c
|
||||
|
||||
Abstract:
|
||||
|
||||
PEI Library Functions
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
#include "Pei.h"
|
||||
#include "peilib.h"
|
||||
#include EFI_GUID_DEFINITION (MemoryAllocationHob)
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobModule (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
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:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
ModuleName - The GUID File Name of the module
|
||||
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 - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_MEMORY_ALLOCATION_MODULE *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_GUID_EXTENSION,
|
||||
sizeof (EFI_HOB_MEMORY_ALLOCATION_MODULE),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob->MemoryAllocationHeader.Name = gEfiHobMemeryAllocModuleGuid;
|
||||
Hob->MemoryAllocationHeader.MemoryBaseAddress = MemoryAllocationModule;
|
||||
Hob->MemoryAllocationHeader.MemoryLength = ModuleLength;
|
||||
Hob->MemoryAllocationHeader.MemoryType = EfiBootServicesCode;
|
||||
|
||||
Hob->ModuleName = *ModuleName;
|
||||
Hob->EntryPoint = EntryPoint;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobResourceDescriptor (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
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:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
ResourceType - The type of resource described by this HOB
|
||||
|
||||
ResourceAttribute - The resource 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 - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_RESOURCE_DESCRIPTOR *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_RESOURCE_DESCRIPTOR,
|
||||
sizeof (EFI_HOB_RESOURCE_DESCRIPTOR),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob->ResourceType = ResourceType;
|
||||
Hob->ResourceAttribute = ResourceAttribute;
|
||||
Hob->PhysicalStart = PhysicalStart;
|
||||
Hob->ResourceLength = NumberOfBytes;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobGuid (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_GUID *Guid,
|
||||
IN UINTN DataLength,
|
||||
IN OUT VOID **Hob
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a custom HOB that is tagged with a GUID for identification
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
Guid - The GUID of the custome HOB type
|
||||
|
||||
DataLength - The size of the data payload for the GUIDed HOB
|
||||
|
||||
Hob - Pointer to the Hob
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_GUID_EXTENSION,
|
||||
(UINT16) (sizeof (EFI_HOB_GUID_TYPE) + DataLength),
|
||||
Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
((EFI_HOB_GUID_TYPE *)(*Hob))->Name = *Guid;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobGuidData (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_GUID *Guid,
|
||||
IN VOID *Data,
|
||||
IN UINTN DataLength
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a custom HOB that is tagged with a GUID for identification
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
Guid - The GUID of the custome HOB type
|
||||
|
||||
Data - The data to be copied into the GUIDed HOB data field.
|
||||
|
||||
DataLength - The data field length.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
EFI_HOB_GUID_TYPE *Hob;
|
||||
|
||||
Status = PeiBuildHobGuid (
|
||||
PeiServices,
|
||||
Guid,
|
||||
DataLength,
|
||||
&Hob
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob++;
|
||||
(*PeiServices)->CopyMem (Hob, Data, DataLength);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobFv (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PHYSICAL_ADDRESS BaseAddress,
|
||||
IN UINT64 Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a Firmware Volume HOB
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
BaseAddress - The base address of the Firmware Volume
|
||||
|
||||
Length - The size of the Firmware Volume in bytes
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_FIRMWARE_VOLUME *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_FV,
|
||||
sizeof (EFI_HOB_FIRMWARE_VOLUME),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob->BaseAddress = BaseAddress;
|
||||
Hob->Length = Length;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobCpu (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN UINT8 SizeOfMemorySpace,
|
||||
IN UINT8 SizeOfIoSpace
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a HOB for the CPU
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
SizeOfMemorySpace - Identifies the maximum
|
||||
physical memory addressibility of the processor.
|
||||
|
||||
SizeOfIoSpace - Identifies the maximum physical I/O addressibility
|
||||
of the processor.
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_CPU *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_CPU,
|
||||
sizeof (EFI_HOB_CPU),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob->SizeOfMemorySpace = SizeOfMemorySpace;
|
||||
Hob->SizeOfIoSpace = SizeOfIoSpace;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobStack (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PHYSICAL_ADDRESS BaseAddress,
|
||||
IN UINT64 Length
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a HOB for the Stack
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
BaseAddress - The 64 bit physical address of the Stack
|
||||
|
||||
Length - The length of the stack in bytes
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_MEMORY_ALLOCATION_STACK *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_MEMORY_ALLOCATION,
|
||||
sizeof (EFI_HOB_MEMORY_ALLOCATION_STACK),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob->AllocDescriptor.Name = gEfiHobMemeryAllocStackGuid;
|
||||
Hob->AllocDescriptor.MemoryBaseAddress = BaseAddress;
|
||||
Hob->AllocDescriptor.MemoryLength = Length;
|
||||
Hob->AllocDescriptor.MemoryType = EfiConventionalMemory;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobBspStore (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PHYSICAL_ADDRESS BaseAddress,
|
||||
IN UINT64 Length,
|
||||
IN EFI_MEMORY_TYPE MemoryType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a HOB for the bsp store
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
BaseAddress - The 64 bit physical address of the bsp
|
||||
|
||||
Length - The length of the bsp store in bytes
|
||||
|
||||
MemoryType - Memory type
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_MEMORY_ALLOCATION_BSP_STORE *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_MEMORY_ALLOCATION,
|
||||
sizeof (EFI_HOB_MEMORY_ALLOCATION_BSP_STORE),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Hob->AllocDescriptor.Name = gEfiHobMemeryAllocBspStoreGuid;
|
||||
Hob->AllocDescriptor.MemoryBaseAddress = BaseAddress;
|
||||
Hob->AllocDescriptor.MemoryLength = Length;
|
||||
Hob->AllocDescriptor.MemoryType = MemoryType;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PeiBuildHobMemoryAllocation (
|
||||
IN EFI_PEI_SERVICES **PeiServices,
|
||||
IN EFI_PHYSICAL_ADDRESS BaseAddress,
|
||||
IN UINT64 Length,
|
||||
IN EFI_GUID *Name,
|
||||
IN EFI_MEMORY_TYPE MemoryType
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Builds a HOB for the memory allocation.
|
||||
|
||||
Arguments:
|
||||
|
||||
PeiServices - The PEI core services table.
|
||||
|
||||
BaseAddress - The 64 bit physical address of the memory
|
||||
|
||||
Length - The length of the memory allocation in bytes
|
||||
|
||||
Name - Name for Hob
|
||||
|
||||
MemoryType - Memory type
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Hob is successfully built.
|
||||
Others - Errors occur while creating new Hob
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HOB_MEMORY_ALLOCATION *Hob;
|
||||
|
||||
Status = (*PeiServices)->CreateHob (
|
||||
PeiServices,
|
||||
EFI_HOB_TYPE_MEMORY_ALLOCATION,
|
||||
sizeof (EFI_HOB_MEMORY_ALLOCATION),
|
||||
&Hob
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
if (Name != NULL) {
|
||||
Hob->AllocDescriptor.Name = *Name;
|
||||
} else {
|
||||
(*PeiServices)->SetMem(&(Hob->AllocDescriptor.Name), sizeof (EFI_GUID), 0);
|
||||
}
|
||||
|
||||
Hob->AllocDescriptor.MemoryBaseAddress = BaseAddress;
|
||||
Hob->AllocDescriptor.MemoryLength = Length;
|
||||
Hob->AllocDescriptor.MemoryType = MemoryType;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
Reference in New Issue
Block a user