/** @file\r
Provides library functions for all PEI Services.\r
\r
-Copyright (c) 2006 - 2008, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#define __PEI_SERVICES_LIB_H__\r
\r
/**\r
- This service enables a given PEIM to register an interface into the PEI Foundation. \r
+ This service enables a given PEIM to register an interface into the PEI Foundation.\r
\r
@param PpiList A pointer to the list of interfaces that the caller shall install.\r
\r
PeiServicesLocatePpi (\r
IN CONST EFI_GUID *Guid,\r
IN UINTN Instance,\r
- IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor,\r
+ IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, OPTIONAL\r
IN OUT VOID **Ppi\r
);\r
\r
);\r
\r
/**\r
- This service enables PEIMs to ascertain the present value of the boot mode. \r
+ This service enables PEIMs to ascertain the present value of the boot mode.\r
\r
@param BootMode A pointer to contain the value of the boot mode.\r
\r
EFI_STATUS\r
EFIAPI\r
PeiServicesGetBootMode (\r
- IN OUT EFI_BOOT_MODE *BootMode\r
+ OUT EFI_BOOT_MODE *BootMode\r
);\r
\r
/**\r
- This service enables PEIMs to update the boot mode variable. \r
+ This service enables PEIMs to update the boot mode variable.\r
\r
@param BootMode The value of the boot mode to set.\r
\r
\r
@param Instance This instance of the firmware volume to find. The value 0 is the\r
Boot Firmware Volume (BFV).\r
- @param VolumeHandle Pointer to the firmware volume header of the volume to return.\r
+ @param VolumeHandle Handle of the firmware volume header of the volume to return.\r
\r
@retval EFI_SUCCESS The volume was found.\r
@retval EFI_NOT_FOUND The volume was not found.\r
@param SearchType A filter to find files only of this type.\r
@param VolumeHandle Pointer to the firmware volume header of the volume to search.\r
This parameter must point to a valid FFS volume.\r
- @param FileHandle Pointer to the current file from which to begin searching.\r
+ @param FileHandle Handle of the current file from which to begin searching.\r
\r
@retval EFI_SUCCESS The file was found.\r
@retval EFI_NOT_FOUND The file was not found.\r
OUT VOID **SectionData\r
);\r
\r
+/**\r
+ This service enables PEIMs to discover sections of a given instance and type within a valid FFS file.\r
+\r
+ @param SectionType The value of the section type to find.\r
+ @param SectionInstance Section instance to find.\r
+ @param FileHandle A pointer to the file header that contains the set\r
+ of sections to be searched.\r
+ @param SectionData A pointer to the discovered section, if successful.\r
+ @param AuthenticationStatus A pointer to the authentication status for this section.\r
+\r
+ @retval EFI_SUCCESS The section was found.\r
+ @retval EFI_NOT_FOUND The section was not found.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesFfsFindSectionData3 (\r
+ IN EFI_SECTION_TYPE SectionType,\r
+ IN UINTN SectionInstance,\r
+ IN EFI_PEI_FILE_HANDLE FileHandle,\r
+ OUT VOID **SectionData,\r
+ OUT UINT32 *AuthenticationStatus\r
+ );\r
+\r
/**\r
This service enables PEIMs to register the permanent memory configuration\r
that has been initialized with the PEI Foundation.\r
);\r
\r
/**\r
- This service enables PEIMs to allocate memory after the permanent memory has been installed by a\r
- PEIM.\r
+ This service enables PEIMs to allocate memory.\r
\r
@param MemoryType Type of memory to allocate.\r
- @param Pages Number of pages to allocate.\r
+ @param Pages The number of pages to allocate.\r
@param Memory Pointer of memory allocated.\r
\r
@retval EFI_SUCCESS The memory range was successfully allocated.\r
- @retval EFI_INVALID_PARAMETER Type is not equal to AllocateAnyPages.\r
- @retval EFI_NOT_AVAILABLE_YET Called with permanent memory not available.\r
+ @retval EFI_INVALID_PARAMETER Type is not equal to EfiLoaderCode, EfiLoaderData, EfiRuntimeServicesCode,\r
+ EfiRuntimeServicesData, EfiBootServicesCode, EfiBootServicesData,\r
+ EfiACPIReclaimMemory, EfiReservedMemoryType, or EfiACPIMemoryNVS.\r
@retval EFI_OUT_OF_RESOURCES The pages could not be allocated.\r
\r
**/\r
OUT EFI_PHYSICAL_ADDRESS *Memory\r
);\r
\r
+/**\r
+ This service enables PEIMs to free memory.\r
+\r
+ @param Memory Memory to be freed.\r
+ @param Pages The number of pages to free.\r
+\r
+ @retval EFI_SUCCESS The requested pages were freed.\r
+ @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid.\r
+ @retval EFI_NOT_FOUND The requested memory pages were not allocated with\r
+ AllocatePages().\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesFreePages (\r
+ IN EFI_PHYSICAL_ADDRESS Memory,\r
+ IN UINTN Pages\r
+ );\r
+\r
/**\r
This service allocates memory from the Hand-Off Block (HOB) heap.\r
\r
\r
\r
/**\r
- This service is a wrapper for the PEI Service FfsFindByName(), except the pointer to the PEI Services \r
- Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface \r
- Specification for details. \r
+ This service is a wrapper for the PEI Service FfsFindByName(), except the pointer to the PEI Services\r
+ Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface\r
+ Specification for details.\r
\r
@param FileName A pointer to the name of the file to\r
find within the firmware volume.\r
@param VolumeHandle The firmware volume to search FileHandle\r
Upon exit, points to the found file's\r
handle or NULL if it could not be found.\r
- @param FileHandle Pointer to found file handle \r
+ @param FileHandle Pointer to found file handle\r
\r
@retval EFI_SUCCESS File was found.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-PeiServicesFfsFindByName (\r
+PeiServicesFfsFindFileByName (\r
IN CONST EFI_GUID *FileName,\r
IN CONST EFI_PEI_FV_HANDLE VolumeHandle,\r
OUT EFI_PEI_FILE_HANDLE *FileHandle\r
\r
\r
/**\r
- This service is a wrapper for the PEI Service FfsGetFileInfo(), except the pointer to the PEI Services \r
- Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface \r
- Specification for details. \r
+ This service is a wrapper for the PEI Service FfsGetFileInfo(), except the pointer to the PEI Services\r
+ Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface\r
+ Specification for details.\r
\r
@param FileHandle Handle of the file.\r
\r
information.\r
\r
@retval EFI_SUCCESS File information returned.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileHandle does not\r
represent a valid file.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileInfo is NULL.\r
- \r
+\r
**/\r
EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
PeiServicesFfsGetFileInfo (\r
IN CONST EFI_PEI_FILE_HANDLE FileHandle,\r
OUT EFI_FV_FILE_INFO *FileInfo\r
);\r
\r
/**\r
- This service is a wrapper for the PEI Service FfsGetVolumeInfo(), except the pointer to the PEI Services \r
- Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface \r
- Specification for details. \r
+ This service is a wrapper for the PEI Service FfsGetFileInfo2(), except the pointer to the PEI Services\r
+ Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface\r
+ Specification for details.\r
+\r
+ @param FileHandle Handle of the file.\r
+\r
+ @param FileInfo Upon exit, points to the file's\r
+ information.\r
+\r
+ @retval EFI_SUCCESS File information returned.\r
+\r
+ @retval EFI_INVALID_PARAMETER If FileHandle does not\r
+ represent a valid file.\r
+\r
+ @retval EFI_INVALID_PARAMETER If FileInfo is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiServicesFfsGetFileInfo2 (\r
+ IN CONST EFI_PEI_FILE_HANDLE FileHandle,\r
+ OUT EFI_FV_FILE_INFO2 *FileInfo\r
+ );\r
+\r
+/**\r
+ This service is a wrapper for the PEI Service FfsGetVolumeInfo(), except the pointer to the PEI Services\r
+ Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface\r
+ Specification for details.\r
\r
@param VolumeHandle Handle of the volume.\r
\r
information.\r
\r
@retval EFI_SUCCESS File information returned.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileHandle does not\r
represent a valid file.\r
- \r
+\r
@retval EFI_INVALID_PARAMETER If FileInfo is NULL.\r
\r
**/\r
\r
\r
/**\r
- This service is a wrapper for the PEI Service RegisterForShadow(), except the pointer to the PEI Services \r
- Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface \r
- Specification for details. \r
+ This service is a wrapper for the PEI Service RegisterForShadow(), except the pointer to the PEI Services\r
+ Table has been removed. See the Platform Initialization Pre-EFI Initialization Core Interface\r
+ Specification for details.\r
\r
@param FileHandle PEIM's file handle. Must be the currently\r
executing PEIM.\r
- \r
+\r
@retval EFI_SUCCESS The PEIM was successfully registered for\r
shadowing.\r
\r
);\r
\r
/**\r
- Install a EFI_PEI_FIRMWARE_VOLUME_INFO PPI to inform PEI core about the existence of a new Firmware Volume.\r
- \r
- The function allocate the EFI_PEI_PPI_DESCRIPTOR structure and update the fields accordingly to parameter passed\r
- in and install the PPI.\r
- \r
- @param FvFormat Unique identifier of the format of the memory-mapped firmware volume. \r
- If NULL is specified, EFI_FIRMWARE_FILE_SYSTEM2_GUID is used as the Format GUID.\r
- @param FvInfo Points to a buffer which allows the EFI_PEI_FIRMWARE_VOLUME_PPI to\r
- process the volume. The format of this buffer is specific to the FvFormat. For\r
- memory-mapped firmware volumes, this typically points to the first byte of the\r
- firmware volume.\r
- @param FvInfoSize Size of the data provided by FvInfo. For memory-mapped firmware volumes, this is\r
- typically the size of the firmware volume.\r
- @param ParentFvName If the firmware volume originally came from a firmware file, then these point to the\r
- parent firmware volume name. If it did not originally come from a firmware file, \r
- these should be NULL.\r
- @param ParentFileName If the firmware volume originally came from a firmware file, then these point to the\r
- firmware volume file. If it did not originally come from a firmware file, \r
- these should be NULL.\r
- \r
+ Install a EFI_PEI_FIRMWARE_VOLUME_INFO_PPI instance so the PEI Core will be notified about a new firmware volume.\r
+\r
+ This function allocates, initializes, and installs a new EFI_PEI_FIRMWARE_VOLUME_INFO_PPI using\r
+ the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO_PPI instance.\r
+ If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO_PPI, then ASSERT().\r
+ If the EFI_PEI_FIRMWARE_VOLUME_INFO_PPI can not be installed, then ASSERT().\r
+\r
+\r
+ @param FvFormat Unique identifier of the format of the memory-mapped firmware volume.\r
+ This parameter is optional and may be NULL.\r
+ If NULL is specified, the EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed.\r
+ @param FvInfo Points to a buffer which allows the EFI_PEI_FIRMWARE_VOLUME_PPI to process the volume.\r
+ The format of this buffer is specific to the FvFormat. For memory-mapped firmware volumes,\r
+ this typically points to the first byte of the firmware volume.\r
+ @param FvInfoSize The size, in bytes, of FvInfo. For memory-mapped firmware volumes,\r
+ this is typically the size of the firmware volume.\r
+ @param ParentFvName If the new firmware volume originated from a file in a different firmware volume,\r
+ then this parameter specifies the GUID name of the originating firmware volume.\r
+ Otherwise, this parameter must be NULL.\r
+ @param ParentFileName If the new firmware volume originated from a file in a different firmware volume,\r
+ then this parameter specifies the GUID file name of the originating firmware file.\r
+ Otherwise, this parameter must be NULL.\r
**/\r
VOID\r
EFIAPI\r
IN CONST EFI_GUID *ParentFileName OPTIONAL\r
);\r
\r
+/**\r
+ Install a EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI instance so the PEI Core will be notified about a new firmware volume.\r
+\r
+ This function allocates, initializes, and installs a new EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI using\r
+ the parameters passed in to initialize the fields of the EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI instance.\r
+ If the resources can not be allocated for EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI, then ASSERT().\r
+ If the EFI_PEI_FIRMWARE_VOLUME_INFO2_PPI can not be installed, then ASSERT().\r
+\r
+ @param FvFormat Unique identifier of the format of the memory-mapped\r
+ firmware volume. This parameter is optional and\r
+ may be NULL. If NULL is specified, the\r
+ EFI_FIRMWARE_FILE_SYSTEM2_GUID format is assumed.\r
+ @param FvInfo Points to a buffer which allows the\r
+ EFI_PEI_FIRMWARE_VOLUME_PPI to process the volume.\r
+ The format of this buffer is specific to the FvFormat.\r
+ For memory-mapped firmware volumes, this typically\r
+ points to the first byte of the firmware volume.\r
+ @param FvInfoSize The size, in bytes, of FvInfo. For memory-mapped\r
+ firmware volumes, this is typically the size of\r
+ the firmware volume.\r
+ @param ParentFvName If the new firmware volume originated from a file\r
+ in a different firmware volume, then this parameter\r
+ specifies the GUID name of the originating firmware\r
+ volume. Otherwise, this parameter must be NULL.\r
+ @param ParentFileName If the new firmware volume originated from a file\r
+ in a different firmware volume, then this parameter\r
+ specifies the GUID file name of the originating\r
+ firmware file. Otherwise, this parameter must be NULL.\r
+ @param AuthenticationStatus Authentication Status\r
+**/\r
+VOID\r
+EFIAPI\r
+PeiServicesInstallFvInfo2Ppi (\r
+ IN CONST EFI_GUID *FvFormat, OPTIONAL\r
+ IN CONST VOID *FvInfo,\r
+ IN UINT32 FvInfoSize,\r
+ IN CONST EFI_GUID *ParentFvName, OPTIONAL\r
+ IN CONST EFI_GUID *ParentFileName, OPTIONAL\r
+ IN UINT32 AuthenticationStatus\r
+ );\r
+\r
+/**\r
+ Resets the entire platform.\r
+\r
+ @param[in] ResetType The type of reset to perform.\r
+ @param[in] ResetStatus The status code for the reset.\r
+ @param[in] DataSize The size, in bytes, of ResetData.\r
+ @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown\r
+ the data buffer starts with a Null-terminated string, optionally\r
+ followed by additional binary data. The string is a description\r
+ that the caller may use to further indicate the reason for the\r
+ system reset.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+PeiServicesResetSystem2 (\r
+ IN EFI_RESET_TYPE ResetType,\r
+ IN EFI_STATUS ResetStatus,\r
+ IN UINTN DataSize,\r
+ IN VOID *ResetData OPTIONAL\r
+ );\r
+\r
#endif\r