X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=MdePkg%2FLibrary%2FDxeCoreHobLib%2FHobLib.c;h=9fdb2b448a80539b1c46470e1a2d1332c55ee991;hb=58380e9c6174f23df78f777b4209c0fd75245cda;hp=9901c6fb6d83c2e1e7d46e47fd6ecc900b6f006f;hpb=582510249f2fb1334e507b99421b9485f6b89159;p=mirror_edk2.git
diff --git a/MdePkg/Library/DxeCoreHobLib/HobLib.c b/MdePkg/Library/DxeCoreHobLib/HobLib.c
index 9901c6fb6d..9fdb2b448a 100644
--- a/MdePkg/Library/DxeCoreHobLib/HobLib.c
+++ b/MdePkg/Library/DxeCoreHobLib/HobLib.c
@@ -1,26 +1,37 @@
/** @file
- HOB Library.
+ HOB Library implementation for DxeCore driver.
- Copyright (c) 2006, 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
+Copyright (c) 2006 - 2010, 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: HobLib.c
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
-#include "HobLib.h"
+#include
+
+#include
+#include
+#include
+#include
/**
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.
**/
@@ -30,6 +41,7 @@ GetHobList (
VOID
)
{
+ ASSERT (gHobList != NULL);
return gHobList;
}
@@ -41,6 +53,7 @@ GetHobList (
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.
@@ -59,7 +72,7 @@ GetNextHob (
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.
@@ -78,6 +91,8 @@ GetNextHob (
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.
@@ -97,15 +112,18 @@ GetFirstHob (
}
/**
+ 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.
+ its HOB type is EFI_HOB_TYPE_GUID_EXTENSION, and its GUID Name equals to the input Guid.
+ If such a HOB from the starting HOB pointer does not exist, 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 info respectively.
+ 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().
@@ -135,12 +153,16 @@ GetNextGuidHob (
}
/**
+ 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.
+ If such a HOB from the starting HOB pointer does not exist, 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 info respectively.
+ 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.
@@ -160,19 +182,46 @@ GetFirstGuidHob (
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.
+ for DXE phase, it will ASSERT() because 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's entry point.
+ @param EntryPoint The 64 bit physical address of the module entry point.
**/
VOID
@@ -195,7 +244,8 @@ BuildModuleHob (
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.
+ for DXE phase, it will ASSERT() because 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.
@@ -220,13 +270,15 @@ BuildResourceDescriptorHob (
}
/**
- Builds a GUID HOB with a certain data length.
+ 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.
+ It can only be invoked during PEI phase.
+ For DXE phase, it will ASSERT() because 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 >= (0x10000 - sizeof (EFI_HOB_GUID_TYPE)), then ASSERT().
@@ -252,13 +304,16 @@ BuildGuidHob (
}
/**
- Copies a data buffer to a newly-built HOB.
+ 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,
- 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() because 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.
+ It can only be invoked during PEI phase.
+ For DXE phase, it will ASSERT() because 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().
@@ -291,7 +346,8 @@ BuildGuidDataHob (
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.
+ for DXE phase, it will ASSERT() because 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.
@@ -311,12 +367,41 @@ BuildFvHob (
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() because 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
+ )
+{
+ 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.
+ for DXE phase, it will ASSERT() because 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.
@@ -341,7 +426,8 @@ BuildCvHob (
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.
+ for DXE phase, it will ASSERT() because 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.
@@ -366,7 +452,8 @@ BuildCpuHob (
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.
+ for DXE phase, it will ASSERT() because 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.
@@ -391,7 +478,8 @@ BuildStackHob (
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.
+ for DXE phase, it will ASSERT() because 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.
@@ -418,7 +506,8 @@ BuildBspStoreHob (
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.
+ for DXE phase, it will ASSERT() because 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.