1738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** @file 2738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff Implementation for PEI Services Library. 3738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 4c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR> 519388d2960b2fe0347da23799e93ccc52f540214hhtian This program and the accompanying materials 6738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff are licensed and made available under the terms and conditions of the BSD License 7738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff which accompanies this distribution. The full text of the license may be found at 82fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter http://opensource.org/licenses/bsd-license.php. 9738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 10738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 13738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 14738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 15c892d8464468618b0aa3c7f35edbdfbc7cc24ee5vanjeff 16c7d265a94a3ee2517430e4f19f5b24482e5e7132yshang#include <PiPei.h> 17c892d8464468618b0aa3c7f35edbdfbc7cc24ee5vanjeff 18729675ae6363cda914a6a28d07a21e2cf330967dqhuang#include <Ppi/FirmwareVolumeInfo.h> 19c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng#include <Ppi/FirmwareVolumeInfo2.h> 20729675ae6363cda914a6a28d07a21e2cf330967dqhuang#include <Guid/FirmwareFileSystem2.h> 21c892d8464468618b0aa3c7f35edbdfbc7cc24ee5vanjeff 22c7d265a94a3ee2517430e4f19f5b24482e5e7132yshang#include <Library/PeiServicesLib.h> 23c7d265a94a3ee2517430e4f19f5b24482e5e7132yshang#include <Library/PeiServicesTablePointerLib.h> 24729675ae6363cda914a6a28d07a21e2cf330967dqhuang#include <Library/DebugLib.h> 25729675ae6363cda914a6a28d07a21e2cf330967dqhuang#include <Library/MemoryAllocationLib.h> 26729675ae6363cda914a6a28d07a21e2cf330967dqhuang#include <Library/BaseMemoryLib.h> 27729675ae6363cda914a6a28d07a21e2cf330967dqhuang 28738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 29738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables a given PEIM to register an interface into the PEI Foundation. 30738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 31738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param PpiList A pointer to the list of interfaces that the caller shall install. 32738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 33738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The interface was successfully installed. 34738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER The PpiList pointer is NULL. 35738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER Any of the PEI PPI descriptors in the list do not have the 36738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field. 37738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database. 38738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 39738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 40738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 41738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 42738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesInstallPpi ( 431c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList 44738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 45738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 461c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 47738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 485240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 49738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->InstallPpi (PeiServices, PpiList); 50738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 51738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 52738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 53738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to replace an entry in the PPI database with an alternate entry. 54738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 552fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter @param OldPpi The pointer to the old PEI PPI Descriptors. 562fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter @param NewPpi The pointer to the new PEI PPI Descriptors. 57738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 58738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The interface was successfully installed. 59738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER The OldPpi or NewPpi is NULL. 60738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER Any of the PEI PPI descriptors in the list do not have the 61738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field. 62738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database. 63738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_FOUND The PPI for which the reinstallation was requested has not been 64738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff installed. 65738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 66738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 67738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 68738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 69738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesReInstallPpi ( 701c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN CONST EFI_PEI_PPI_DESCRIPTOR *OldPpi, 711c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN CONST EFI_PEI_PPI_DESCRIPTOR *NewPpi 72738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 73738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 741c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 75738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 765240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 77738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->ReInstallPpi (PeiServices, OldPpi, NewPpi); 78738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 79738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 80738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 81738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to discover a given instance of an interface. 82738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 83738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Guid A pointer to the GUID whose corresponding interface needs to be 84738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff found. 85738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Instance The N-th instance of the interface that is required. 86738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param PpiDescriptor A pointer to instance of the EFI_PEI_PPI_DESCRIPTOR. 87738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Ppi A pointer to the instance of the interface. 88738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 89738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The interface was successfully returned. 90738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_FOUND The PPI descriptor is not found in the database. 91738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 92738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 93738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 94738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 95738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesLocatePpi ( 961c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN CONST EFI_GUID *Guid, 97738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINTN Instance, 98738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, 99738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN OUT VOID **Ppi 100738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 101738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 1021c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 103738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 1045240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 105738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->LocatePpi (PeiServices, Guid, Instance, PpiDescriptor, Ppi); 106738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 107738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 108738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 109738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to register a given service to be invoked when another service is 110738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff installed or reinstalled. 111738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 11258380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param NotifyList A pointer to the list of notification interfaces 11358380e9c6174f23df78f777b4209c0fd75245cdamyronporter that the caller shall install. 114738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 115738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The interface was successfully installed. 116738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER The NotifyList pointer is NULL. 11758380e9c6174f23df78f777b4209c0fd75245cdamyronporter @retval EFI_INVALID_PARAMETER Any of the PEI notify descriptors in the list do 11858380e9c6174f23df78f777b4209c0fd75245cdamyronporter not have the EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES 11958380e9c6174f23df78f777b4209c0fd75245cdamyronporter bit set in the Flags field. 120738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database. 121738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 122738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 123738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 124738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 125738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesNotifyPpi ( 1261c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN CONST EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList 127738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 128738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 1291c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 130738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 1315240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 132738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->NotifyPpi (PeiServices, NotifyList); 133738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 134738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 135738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 136738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to ascertain the present value of the boot mode. 137738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 138738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param BootMode A pointer to contain the value of the boot mode. 139738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 140738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The boot mode was returned successfully. 141738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER BootMode is NULL. 142738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 143738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 144738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 145738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 146738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesGetBootMode ( 147c3363c9235f102977bd31a3332a67da7e268a01djji OUT EFI_BOOT_MODE *BootMode 148738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 149738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 1501c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 151738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 1525240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 153738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->GetBootMode (PeiServices, BootMode); 154738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 155738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 156738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 157738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to update the boot mode variable. 158738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 159738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param BootMode The value of the boot mode to set. 160738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 161738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The value was successfully updated 162738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 163738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 164738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 165738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 166738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesSetBootMode ( 167738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN EFI_BOOT_MODE BootMode 168738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 169738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 1701c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 171738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 1725240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 173738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->SetBootMode (PeiServices, BootMode); 174738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 175738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 176738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 177738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables a PEIM to ascertain the address of the list of HOBs in memory. 178738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 17958380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param HobList A pointer to the list of HOBs that the PEI Foundation 18058380e9c6174f23df78f777b4209c0fd75245cdamyronporter will initialize. 18158380e9c6174f23df78f777b4209c0fd75245cdamyronporter 182738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The list was successfully returned. 183738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_AVAILABLE_YET The HOB list is not yet published. 184738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 185738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 186738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 187738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 188738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesGetHobList ( 189f38fdc749879ff6b9339fded2062e3dac46fa72dklu OUT VOID **HobList 190738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 191738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 1921c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 193738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 1945240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 195738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->GetHobList (PeiServices, HobList); 196738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 197738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 198738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 199738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to create various types of HOBs. 200738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 201738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Type The type of HOB to be installed. 202738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Length The length of the HOB to be added. 20358380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param Hob The address of a pointer that will contain the 20458380e9c6174f23df78f777b4209c0fd75245cdamyronporter HOB header. 205738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 206738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The HOB was successfully created. 207738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES There is no additional space for HOB creation. 208738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 209738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 210738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 211738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 212738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesCreateHob ( 213738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINT16 Type, 214738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINT16 Length, 215dd6520887821b0fc0019f36bd87d0f570b9b1e37klu OUT VOID **Hob 216738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 217738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 2181c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 219738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 2205240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 221738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->CreateHob (PeiServices, Type, Length, Hob); 222738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 223738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 224738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 225738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to discover additional firmware volumes. 226738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 22758380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param Instance This instance of the firmware volume to find. The 22858380e9c6174f23df78f777b4209c0fd75245cdamyronporter value 0 is the Boot Firmware Volume (BFV). 22958380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param VolumeHandle Handle of the firmware volume header of the volume 23058380e9c6174f23df78f777b4209c0fd75245cdamyronporter to return. 231738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 232738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The volume was found. 233738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_FOUND The volume was not found. 234738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER FwVolHeader is NULL. 235738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 236738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 237738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 238738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 239738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesFfsFindNextVolume ( 240738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINTN Instance, 2411c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN OUT EFI_PEI_FV_HANDLE *VolumeHandle 242738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 243738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 2441c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 245738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 2465240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 2471c280088ec83160a5f190b3d0ba796b224ee23b3qwang return (*PeiServices)->FfsFindNextVolume (PeiServices, Instance, VolumeHandle); 248738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 249738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 250738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 251738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to discover additional firmware files. 252738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 253738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param SearchType A filter to find files only of this type. 25458380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param VolumeHandle The pointer to the firmware volume header of the 25558380e9c6174f23df78f777b4209c0fd75245cdamyronporter volume to search. This parameter must point to a 25658380e9c6174f23df78f777b4209c0fd75245cdamyronporter valid FFS volume. 25742eedea958591087603bbacd1c2227d2494026afyshang @param FileHandle Handle of the current file from which to begin searching. 258738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 259738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The file was found. 260738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_FOUND The file was not found. 261738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_FOUND The header checksum was not zero. 262738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 263738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 264738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 265738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 266738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesFfsFindNextFile ( 267738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN EFI_FV_FILETYPE SearchType, 2681c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN EFI_PEI_FV_HANDLE VolumeHandle, 2691c280088ec83160a5f190b3d0ba796b224ee23b3qwang IN OUT EFI_PEI_FILE_HANDLE *FileHandle 270738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 271738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 2721c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 273738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 2745240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 2751c280088ec83160a5f190b3d0ba796b224ee23b3qwang return (*PeiServices)->FfsFindNextFile (PeiServices, SearchType, VolumeHandle, FileHandle); 276738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 277738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 278738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 279738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to discover sections of a given type within a valid FFS file. 280738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 28142eedea958591087603bbacd1c2227d2494026afyshang @param SectionType The value of the section type to find. 28258380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param FileHandle A pointer to the file header that contains the set 28358380e9c6174f23df78f777b4209c0fd75245cdamyronporter of sections to be searched. 284738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param SectionData A pointer to the discovered section, if successful. 285738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 286738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The section was found. 287738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_FOUND The section was not found. 288738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 289738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 290738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 291738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 292738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesFfsFindSectionData ( 293738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN EFI_SECTION_TYPE SectionType, 294122e21915101b8f38d81edc6d4f1fd1dd353e28ajji IN EFI_PEI_FILE_HANDLE FileHandle, 29567c89a212705e53508f1f54e611ee9757ce34502qwang OUT VOID **SectionData 296738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 297738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 2981c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 299738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 3005240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 301122e21915101b8f38d81edc6d4f1fd1dd353e28ajji return (*PeiServices)->FfsFindSectionData (PeiServices, SectionType, FileHandle, SectionData); 302738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 303738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 304738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 305c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng This service enables PEIMs to discover sections of a given instance and type within a valid FFS file. 306c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 307c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param SectionType The value of the section type to find. 308c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param SectionInstance Section instance to find. 309c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FileHandle A pointer to the file header that contains the set 310c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng of sections to be searched. 311c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param SectionData A pointer to the discovered section, if successful. 312c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param AuthenticationStatus A pointer to the authentication status for this section. 313c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 314c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @retval EFI_SUCCESS The section was found. 315c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @retval EFI_NOT_FOUND The section was not found. 316c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 317c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng**/ 318c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengEFI_STATUS 319c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengEFIAPI 320c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengPeiServicesFfsFindSectionData3 ( 321c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN EFI_SECTION_TYPE SectionType, 322c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN UINTN SectionInstance, 323c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN EFI_PEI_FILE_HANDLE FileHandle, 324c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng OUT VOID **SectionData, 325c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng OUT UINT32 *AuthenticationStatus 326c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng ) 327c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng{ 328c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng CONST EFI_PEI_SERVICES **PeiServices; 329c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 330c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng PeiServices = GetPeiServicesTablePointer (); 331c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng return (*PeiServices)->FindSectionData3 (PeiServices, SectionType, SectionInstance, FileHandle, SectionData, AuthenticationStatus); 332c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng} 333c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 334c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng/** 335738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service enables PEIMs to register the permanent memory configuration 336738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff that has been initialized with the PEI Foundation. 337738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 338738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param MemoryBegin The value of a region of installed memory. 339738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param MemoryLength The corresponding length of a region of installed memory. 340738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 341738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The region was successfully installed in a HOB. 342738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER MemoryBegin and MemoryLength are illegal for this system. 343738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES There is no additional space for HOB creation. 344738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 345738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 346738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 347738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 348738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesInstallPeiMemory ( 349738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN EFI_PHYSICAL_ADDRESS MemoryBegin, 350738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINT64 MemoryLength 351738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 352738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 3531c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 354738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 3555240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 356738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->InstallPeiMemory (PeiServices, MemoryBegin, MemoryLength); 357738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 358738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 359738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 36058380e9c6174f23df78f777b4209c0fd75245cdamyronporter This service enables PEIMs to allocate memory after the permanent memory has been 36158380e9c6174f23df78f777b4209c0fd75245cdamyronporter installed by a PEIM. 362738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 363738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param MemoryType Type of memory to allocate. 3642fc59a003ed9104f9feebe0e418f2a04a50f3284myronporter @param Pages The number of pages to allocate. 365738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Memory Pointer of memory allocated. 366738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 367738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The memory range was successfully allocated. 368738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_INVALID_PARAMETER Type is not equal to AllocateAnyPages. 369738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_AVAILABLE_YET Called with permanent memory not available. 370738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES The pages could not be allocated. 371738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 372738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 373738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 374738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 375738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesAllocatePages ( 376738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN EFI_MEMORY_TYPE MemoryType, 377738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINTN Pages, 37867c89a212705e53508f1f54e611ee9757ce34502qwang OUT EFI_PHYSICAL_ADDRESS *Memory 379738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 380738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 3811c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 382738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 3835240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 384738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->AllocatePages (PeiServices, MemoryType, Pages, Memory); 385738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 386738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 387738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 388738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff This service allocates memory from the Hand-Off Block (HOB) heap. 389738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 390738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @param Size The number of bytes to allocate from the pool. 39158380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param Buffer If the call succeeds, a pointer to a pointer to 39258380e9c6174f23df78f777b4209c0fd75245cdamyronporter the allocate buffer; otherwise, undefined. 393738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 394738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_SUCCESS The allocation was successful 395738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_OUT_OF_RESOURCES There is not enough heap to allocate the requested size. 396738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 397738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 398738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 399738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 400738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesAllocatePool ( 401738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff IN UINTN Size, 402738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff OUT VOID **Buffer 403738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 404738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 4051c280088ec83160a5f190b3d0ba796b224ee23b3qwang CONST EFI_PEI_SERVICES **PeiServices; 406738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 4075240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 408738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff return (*PeiServices)->AllocatePool (PeiServices, Size, Buffer); 409738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 410738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 411738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff/** 41267c89a212705e53508f1f54e611ee9757ce34502qwang Resets the entire platform. 413738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 41467c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_SUCCESS The function completed successfully. 415738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff @retval EFI_NOT_AVAILABLE_YET The service has not been installed yet. 416738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff 417738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff**/ 418738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFI_STATUS 419738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffEFIAPI 420738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeffPeiServicesResetSystem ( 421738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff VOID 422738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff ) 423738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff{ 424b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu CONST EFI_PEI_SERVICES **PeiServices; 425b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 4265240b97c9c9e76994e86db11ff7cf140a74f2bd0qwang PeiServices = GetPeiServicesTablePointer (); 427b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu return (*PeiServices)->ResetSystem (PeiServices); 428b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu} 429b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 43067c89a212705e53508f1f54e611ee9757ce34502qwang/** 43158380e9c6174f23df78f777b4209c0fd75245cdamyronporter This service is a wrapper for the PEI Service RegisterForShadow(), except the 43258380e9c6174f23df78f777b4209c0fd75245cdamyronporter pointer to the PEI Services Table has been removed. See the Platform 43358380e9c6174f23df78f777b4209c0fd75245cdamyronporter Initialization Pre-EFI Initialization Core Interface Specification for details. 43467c89a212705e53508f1f54e611ee9757ce34502qwang 43558380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param FileHandle PEIM's file handle. Must be the currently 43658380e9c6174f23df78f777b4209c0fd75245cdamyronporter executing PEIM. 43767c89a212705e53508f1f54e611ee9757ce34502qwang 43858380e9c6174f23df78f777b4209c0fd75245cdamyronporter @retval EFI_SUCCESS The PEIM was successfully registered for 43958380e9c6174f23df78f777b4209c0fd75245cdamyronporter shadowing. 44067c89a212705e53508f1f54e611ee9757ce34502qwang 44167c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_ALREADY_STARTED The PEIM was previously 44267c89a212705e53508f1f54e611ee9757ce34502qwang registered for shadowing. 44367c89a212705e53508f1f54e611ee9757ce34502qwang 44458380e9c6174f23df78f777b4209c0fd75245cdamyronporter @retval EFI_NOT_FOUND The FileHandle does not refer to a 44558380e9c6174f23df78f777b4209c0fd75245cdamyronporter valid file handle. 44667c89a212705e53508f1f54e611ee9757ce34502qwang**/ 447b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFI_STATUS 448b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFIAPI 449b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluPeiServicesRegisterForShadow ( 450b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu IN EFI_PEI_FILE_HANDLE FileHandle 451b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu ) 452b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu{ 453484c77852ea2ba6ccc8e5c3b3ec4548588dd7f01lgao return (*GetPeiServicesTablePointer())->RegisterForShadow (FileHandle); 454738ec5655985bd75d2eb15cc161a77b46f4abeacvanjeff} 455b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 45667c89a212705e53508f1f54e611ee9757ce34502qwang/** 45767c89a212705e53508f1f54e611ee9757ce34502qwang This service is a wrapper for the PEI Service FfsGetFileInfo(), except the pointer to the PEI Services 45867c89a212705e53508f1f54e611ee9757ce34502qwang Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface 45967c89a212705e53508f1f54e611ee9757ce34502qwang Specification for details. 46067c89a212705e53508f1f54e611ee9757ce34502qwang 46158380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param FileHandle The handle of the file. 46267c89a212705e53508f1f54e611ee9757ce34502qwang 46358380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param FileInfo Upon exit, points to the file's 46458380e9c6174f23df78f777b4209c0fd75245cdamyronporter information. 46567c89a212705e53508f1f54e611ee9757ce34502qwang 46667c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_SUCCESS File information returned. 46767c89a212705e53508f1f54e611ee9757ce34502qwang 46867c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_INVALID_PARAMETER If FileHandle does not 46967c89a212705e53508f1f54e611ee9757ce34502qwang represent a valid file. 47067c89a212705e53508f1f54e611ee9757ce34502qwang 47158380e9c6174f23df78f777b4209c0fd75245cdamyronporter @retval EFI_INVALID_PARAMETER FileInfo is NULL. 47267c89a212705e53508f1f54e611ee9757ce34502qwang 47367c89a212705e53508f1f54e611ee9757ce34502qwang**/ 474b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFI_STATUS 475f38fdc749879ff6b9339fded2062e3dac46fa72dkluEFIAPI 476b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluPeiServicesFfsGetFileInfo ( 477b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu IN CONST EFI_PEI_FILE_HANDLE FileHandle, 478b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu OUT EFI_FV_FILE_INFO *FileInfo 479b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu ) 480b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu{ 481484c77852ea2ba6ccc8e5c3b3ec4548588dd7f01lgao return (*GetPeiServicesTablePointer())->FfsGetFileInfo (FileHandle, FileInfo); 482b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu} 483b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 484c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng/** 485c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng This service is a wrapper for the PEI Service FfsGetFileInfo2(), except the pointer to the PEI Services 486c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface 487c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng Specification for details. 488c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 489c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FileHandle The handle of the file. 490c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FileInfo Upon exit, points to the file's 491c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng information. 492c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 493c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @retval EFI_SUCCESS File information returned. 494c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @retval EFI_INVALID_PARAMETER If FileHandle does not 495c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng represent a valid file. 496c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @retval EFI_INVALID_PARAMETER FileInfo is NULL. 497c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 498c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng**/ 499c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengEFI_STATUS 500c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengEFIAPI 501c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengPeiServicesFfsGetFileInfo2 ( 502c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_PEI_FILE_HANDLE FileHandle, 503c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng OUT EFI_FV_FILE_INFO2 *FileInfo 504c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng ) 505c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng{ 506c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng return (*GetPeiServicesTablePointer())->FfsGetFileInfo2 (FileHandle, FileInfo); 507c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng} 508b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 50967c89a212705e53508f1f54e611ee9757ce34502qwang/** 51067c89a212705e53508f1f54e611ee9757ce34502qwang This service is a wrapper for the PEI Service FfsFindByName(), except the pointer to the PEI Services 51167c89a212705e53508f1f54e611ee9757ce34502qwang Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface 51267c89a212705e53508f1f54e611ee9757ce34502qwang Specification for details. 51367c89a212705e53508f1f54e611ee9757ce34502qwang 51458380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param FileName A pointer to the name of the file to 51558380e9c6174f23df78f777b4209c0fd75245cdamyronporter find within the firmware volume. 51667c89a212705e53508f1f54e611ee9757ce34502qwang 51758380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param VolumeHandle The firmware volume to search FileHandle 51858380e9c6174f23df78f777b4209c0fd75245cdamyronporter Upon exit, points to the found file's 51958380e9c6174f23df78f777b4209c0fd75245cdamyronporter handle or NULL if it could not be found. 52058380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param FileHandle The pointer to found file handle 52142eedea958591087603bbacd1c2227d2494026afyshang 52267c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_SUCCESS File was found. 52367c89a212705e53508f1f54e611ee9757ce34502qwang 52467c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_NOT_FOUND File was not found. 52567c89a212705e53508f1f54e611ee9757ce34502qwang 52667c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_INVALID_PARAMETER VolumeHandle or FileHandle or 52767c89a212705e53508f1f54e611ee9757ce34502qwang FileName was NULL. 52867c89a212705e53508f1f54e611ee9757ce34502qwang 52967c89a212705e53508f1f54e611ee9757ce34502qwang**/ 530b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFI_STATUS 531b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFIAPI 532b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluPeiServicesFfsFindFileByName ( 533b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu IN CONST EFI_GUID *FileName, 534b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu IN CONST EFI_PEI_FV_HANDLE VolumeHandle, 535b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu OUT EFI_PEI_FILE_HANDLE *FileHandle 536b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu ) 537b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu{ 538b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu return (*GetPeiServicesTablePointer())->FfsFindFileByName (FileName, VolumeHandle, FileHandle); 539b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu} 540b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 541b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 54267c89a212705e53508f1f54e611ee9757ce34502qwang/** 54367c89a212705e53508f1f54e611ee9757ce34502qwang This service is a wrapper for the PEI Service FfsGetVolumeInfo(), except the pointer to the PEI Services 54467c89a212705e53508f1f54e611ee9757ce34502qwang Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface 54567c89a212705e53508f1f54e611ee9757ce34502qwang Specification for details. 54667c89a212705e53508f1f54e611ee9757ce34502qwang 54758380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param VolumeHandle Handle of the volume. 54867c89a212705e53508f1f54e611ee9757ce34502qwang 54958380e9c6174f23df78f777b4209c0fd75245cdamyronporter @param VolumeInfo Upon exit, points to the volume's 55058380e9c6174f23df78f777b4209c0fd75245cdamyronporter information. 55167c89a212705e53508f1f54e611ee9757ce34502qwang 55267c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_SUCCESS File information returned. 55367c89a212705e53508f1f54e611ee9757ce34502qwang 55467c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_INVALID_PARAMETER If FileHandle does not 55567c89a212705e53508f1f54e611ee9757ce34502qwang represent a valid file. 55667c89a212705e53508f1f54e611ee9757ce34502qwang 55767c89a212705e53508f1f54e611ee9757ce34502qwang @retval EFI_INVALID_PARAMETER If FileInfo is NULL. 55867c89a212705e53508f1f54e611ee9757ce34502qwang 55967c89a212705e53508f1f54e611ee9757ce34502qwang**/ 560b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFI_STATUS 561b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluEFIAPI 562b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3kluPeiServicesFfsGetVolumeInfo ( 563b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu IN EFI_PEI_FV_HANDLE VolumeHandle, 564b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu OUT EFI_FV_INFO *VolumeInfo 565b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu ) 566b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu{ 567b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu return (*GetPeiServicesTablePointer())->FfsGetVolumeInfo (VolumeHandle, VolumeInfo); 568b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu} 569b0d803fe3e5c55a9a0c75bc90ccf40ebbbc9ffa3klu 570729675ae6363cda914a6a28d07a21e2cf330967dqhuang/** 571c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng Install a EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI instance so the PEI Core will be notified about a new firmware volume. 572b75a165ded750b3113b90c04af2beef09a9c1329lgao 573c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng This function allocates, initializes, and installs a new EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI using 574c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI instance. 575c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI, then ASSERT(). 576c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng If the EFI_PEI_FIRMWARE_VOLUME_INFO(2)_PPI can not be installed, then ASSERT(). 577c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 578c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param InstallFvInfoPpi Install FvInfo Ppi if it is TRUE. Otherwise, install FvInfo2 Ppi. 579c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvFormat Unique identifier of the format of the memory-mapped 580c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware volume. This parameter is optional and 581c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng may be NULL. If NULL is specified, the 58258380e9c6174f23df78f777b4209c0fd75245cdamyronporter EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed. 583c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvInfo Points to a buffer which allows the 584c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng EFI_PEI_FIRMWARE_VOLUME_PPI to process the volume. 585c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng The format of this buffer is specific to the FvFormat. 586c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng For memory-mapped firmware volumes, this typically 58758380e9c6174f23df78f777b4209c0fd75245cdamyronporter points to the first byte of the firmware volume. 588c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvInfoSize The size, in bytes, of FvInfo. For memory-mapped 589c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware volumes, this is typically the size of 59058380e9c6174f23df78f777b4209c0fd75245cdamyronporter the firmware volume. 591c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param ParentFvName If the new firmware volume originated from a file 592c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng in a different firmware volume, then this parameter 59358380e9c6174f23df78f777b4209c0fd75245cdamyronporter specifies the GUID name of the originating firmware 59458380e9c6174f23df78f777b4209c0fd75245cdamyronporter volume. Otherwise, this parameter must be NULL. 595c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param ParentFileName If the new firmware volume originated from a file 596c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng in a different firmware volume, then this parameter 597c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng specifies the GUID file name of the originating 59858380e9c6174f23df78f777b4209c0fd75245cdamyronporter firmware file. Otherwise, this parameter must be NULL. 599c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param AuthenticationStatus Authentication Status, it will be ignored if InstallFvInfoPpi is TRUE. 600729675ae6363cda914a6a28d07a21e2cf330967dqhuang**/ 601729675ae6363cda914a6a28d07a21e2cf330967dqhuangVOID 602729675ae6363cda914a6a28d07a21e2cf330967dqhuangEFIAPI 603c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengInternalPeiServicesInstallFvInfoPpi ( 604c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN BOOLEAN InstallFvInfoPpi, 605729675ae6363cda914a6a28d07a21e2cf330967dqhuang IN CONST EFI_GUID *FvFormat, OPTIONAL 606729675ae6363cda914a6a28d07a21e2cf330967dqhuang IN CONST VOID *FvInfo, 607729675ae6363cda914a6a28d07a21e2cf330967dqhuang IN UINT32 FvInfoSize, 608729675ae6363cda914a6a28d07a21e2cf330967dqhuang IN CONST EFI_GUID *ParentFvName, OPTIONAL 609c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *ParentFileName, OPTIONAL 610c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN UINT32 AuthenticationStatus 611729675ae6363cda914a6a28d07a21e2cf330967dqhuang ) 612729675ae6363cda914a6a28d07a21e2cf330967dqhuang{ 613729675ae6363cda914a6a28d07a21e2cf330967dqhuang EFI_STATUS Status; 614729675ae6363cda914a6a28d07a21e2cf330967dqhuang EFI_PEI_FIRMWARE_VOLUME_INFO_PPI *FvInfoPpi; 615729675ae6363cda914a6a28d07a21e2cf330967dqhuang EFI_PEI_PPI_DESCRIPTOR *FvInfoPpiDescriptor; 6163831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao EFI_GUID *ParentFvNameValue; 6173831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao EFI_GUID *ParentFileNameValue; 618c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng EFI_GUID *PpiGuid; 619729675ae6363cda914a6a28d07a21e2cf330967dqhuang 6203831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao ParentFvNameValue = NULL; 6213831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao ParentFileNameValue = NULL; 622c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng if (InstallFvInfoPpi) { 623c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng // 624c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng // To install FvInfo Ppi. 625c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng // 626c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng FvInfoPpi = AllocateZeroPool (sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO_PPI)); 627ed84519ce846cda4bc175d8d18ee03937090176dStar Zeng ASSERT (FvInfoPpi != NULL); 628c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng PpiGuid = &gEfiPeiFirmwareVolumeInfoPpiGuid; 629c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng } else { 630c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng // 631c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng // To install FvInfo2 Ppi. 632c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng // 633c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng FvInfoPpi = AllocateZeroPool (sizeof (EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI)); 634ed84519ce846cda4bc175d8d18ee03937090176dStar Zeng ASSERT (FvInfoPpi != NULL); 635c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng ((EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI *) FvInfoPpi)->AuthenticationStatus = AuthenticationStatus; 636c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng PpiGuid = &gEfiPeiFirmwareVolumeInfo2PpiGuid; 637c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng } 638729675ae6363cda914a6a28d07a21e2cf330967dqhuang 639729675ae6363cda914a6a28d07a21e2cf330967dqhuang if (FvFormat != NULL) { 640729675ae6363cda914a6a28d07a21e2cf330967dqhuang CopyGuid (&FvInfoPpi->FvFormat, FvFormat); 641729675ae6363cda914a6a28d07a21e2cf330967dqhuang } else { 642729675ae6363cda914a6a28d07a21e2cf330967dqhuang CopyGuid (&FvInfoPpi->FvFormat, &gEfiFirmwareFileSystem2Guid); 643729675ae6363cda914a6a28d07a21e2cf330967dqhuang } 644729675ae6363cda914a6a28d07a21e2cf330967dqhuang FvInfoPpi->FvInfo = (VOID *) FvInfo; 645729675ae6363cda914a6a28d07a21e2cf330967dqhuang FvInfoPpi->FvInfoSize = FvInfoSize; 6463831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao if (ParentFvName != NULL) { 6473831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao ParentFvNameValue = AllocateCopyPool (sizeof (EFI_GUID), ParentFvName); 64860bd4ccd45aa4077a0192364a7b97f9066192e58qhuang ASSERT (ParentFvNameValue != NULL); 6493831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao FvInfoPpi->ParentFvName = ParentFvNameValue; 6503831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao } 6513831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao if (ParentFileName != NULL) { 6523831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao ParentFileNameValue = AllocateCopyPool (sizeof (EFI_GUID), ParentFileName); 6533831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao ASSERT (ParentFileNameValue != NULL); 6543831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao FvInfoPpi->ParentFileName = ParentFileNameValue; 6553831f3e9a921eb7b8dbfcaf06acdf9eef9127204lgao } 656729675ae6363cda914a6a28d07a21e2cf330967dqhuang 657c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng FvInfoPpiDescriptor = AllocatePool (sizeof (EFI_PEI_PPI_DESCRIPTOR)); 658729675ae6363cda914a6a28d07a21e2cf330967dqhuang ASSERT (FvInfoPpiDescriptor != NULL); 659729675ae6363cda914a6a28d07a21e2cf330967dqhuang 660c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng FvInfoPpiDescriptor->Guid = PpiGuid; 661c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng FvInfoPpiDescriptor->Flags = EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST; 662729675ae6363cda914a6a28d07a21e2cf330967dqhuang FvInfoPpiDescriptor->Ppi = (VOID *) FvInfoPpi; 663729675ae6363cda914a6a28d07a21e2cf330967dqhuang Status = PeiServicesInstallPpi (FvInfoPpiDescriptor); 664729675ae6363cda914a6a28d07a21e2cf330967dqhuang ASSERT_EFI_ERROR (Status); 665729675ae6363cda914a6a28d07a21e2cf330967dqhuang 666729675ae6363cda914a6a28d07a21e2cf330967dqhuang} 667729675ae6363cda914a6a28d07a21e2cf330967dqhuang 668c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng/** 669c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng Install a EFI_PEI_FIRMWARE_VOLUME_INFO_PPI instance so the PEI Core will be notified about a new firmware volume. 670c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 671c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng This function allocates, initializes, and installs a new EFI_PEI_FIRMWARE_VOLUME_INFO_PPI using 672c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO_PPI instance. 673c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO_PPI, then ASSERT(). 674c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng If the EFI_PEI_FIRMWARE_VOLUME_INFO_PPI can not be installed, then ASSERT(). 675c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 676c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvFormat Unique identifier of the format of the memory-mapped 677c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware volume. This parameter is optional and 678c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng may be NULL. If NULL is specified, the 679c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed. 680c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvInfo Points to a buffer which allows the 681c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng EFI_PEI_FIRMWARE_VOLUME_PPI to process the volume. 682c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng The format of this buffer is specific to the FvFormat. 683c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng For memory-mapped firmware volumes, this typically 684c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng points to the first byte of the firmware volume. 685c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvInfoSize The size, in bytes, of FvInfo. For memory-mapped 686c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware volumes, this is typically the size of 687c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng the firmware volume. 688c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param ParentFvName If the new firmware volume originated from a file 689c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng in a different firmware volume, then this parameter 690c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng specifies the GUID name of the originating firmware 691c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng volume. Otherwise, this parameter must be NULL. 692c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param ParentFileName If the new firmware volume originated from a file 693c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng in a different firmware volume, then this parameter 694c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng specifies the GUID file name of the originating 695c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware file. Otherwise, this parameter must be NULL. 696c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng**/ 697c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengVOID 698c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengEFIAPI 699c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengPeiServicesInstallFvInfoPpi ( 700c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *FvFormat, OPTIONAL 701c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST VOID *FvInfo, 702c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN UINT32 FvInfoSize, 703c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *ParentFvName, OPTIONAL 704c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *ParentFileName OPTIONAL 705c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng ) 706c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng{ 707c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng InternalPeiServicesInstallFvInfoPpi (TRUE, FvFormat, FvInfo, FvInfoSize, ParentFvName, ParentFileName, 0); 708c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng} 709c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 710c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng/** 711c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng Install a EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI instance so the PEI Core will be notified about a new firmware volume. 712c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 713c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng This function allocates, initializes, and installs a new EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI using 714c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI instance. 715c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI, then ASSERT(). 716c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng If the EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI can not be installed, then ASSERT(). 717c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 718c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvFormat Unique identifier of the format of the memory-mapped 719c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware volume. This parameter is optional and 720c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng may be NULL. If NULL is specified, the 721c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed. 722c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvInfo Points to a buffer which allows the 723c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng EFI_PEI_FIRMWARE_VOLUME_PPI to process the volume. 724c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng The format of this buffer is specific to the FvFormat. 725c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng For memory-mapped firmware volumes, this typically 726c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng points to the first byte of the firmware volume. 727c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param FvInfoSize The size, in bytes, of FvInfo. For memory-mapped 728c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware volumes, this is typically the size of 729c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng the firmware volume. 730c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param ParentFvName If the new firmware volume originated from a file 731c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng in a different firmware volume, then this parameter 732c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng specifies the GUID name of the originating firmware 733c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng volume. Otherwise, this parameter must be NULL. 734c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param ParentFileName If the new firmware volume originated from a file 735c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng in a different firmware volume, then this parameter 736c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng specifies the GUID file name of the originating 737c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng firmware file. Otherwise, this parameter must be NULL. 738c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng @param AuthenticationStatus Authentication Status 739c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng**/ 740c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengVOID 741c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengEFIAPI 742c79351059ee7ee24ebed312413cb5e57076c5b56Star ZengPeiServicesInstallFvInfo2Ppi ( 743c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *FvFormat, OPTIONAL 744c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST VOID *FvInfo, 745c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN UINT32 FvInfoSize, 746c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *ParentFvName, OPTIONAL 747c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN CONST EFI_GUID *ParentFileName, OPTIONAL 748c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng IN UINT32 AuthenticationStatus 749c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng ) 750c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng{ 751c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng InternalPeiServicesInstallFvInfoPpi (FALSE, FvFormat, FvInfo, FvInfoSize, ParentFvName, ParentFileName, AuthenticationStatus); 752c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng} 753c79351059ee7ee24ebed312413cb5e57076c5b56Star Zeng 754