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.