/** @file\r
- PI PEI master include file. This file should match the PI spec.\r
+ The Include file for definitions in the Intel Platform Innovation Framework for EFI\r
+ Pre-EFI Initialization Core Interface Specification (PEI CIS) Version 0.91.\r
\r
- Copyright (c) 2006 - 2007, 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
-\r
- @par Revision Reference:\r
- Version 1.0.\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#ifndef __PEICIS_H__\r
#define __PEICIS_H__\r
\r
-#include <PiPei.h>\r
#include <Ppi/PciCfg.h>\r
+//\r
+// Framework PEI Specification Revision information\r
+//\r
+#define FRAMEWORK_PEI_SPECIFICATION_MAJOR_REVISION 0\r
+#define FRAMEWORK_PEI_SPECIFICATION_MINOR_REVISION 91\r
+\r
+\r
+//\r
+// PEI services signature and Revision defined in Framework PEI spec\r
+//\r
+#define FRAMEWORK_PEI_SERVICES_SIGNATURE 0x5652455320494550ULL\r
+#define FRAMEWORK_PEI_SERVICES_REVISION ((FRAMEWORK_PEI_SPECIFICATION_MAJOR_REVISION<<16) | (FRAMEWORK_PEI_SPECIFICATION_MINOR_REVISION))\r
+\r
+\r
\r
typedef struct _FRAMEWORK_EFI_PEI_SERVICES FRAMEWORK_EFI_PEI_SERVICES;\r
\r
/**\r
- The PEI Dispatcher will invoke each PEIM one time. During this pass, the PEI \r
- Dispatcher will pass control to the PEIM at the AddressOfEntryPoint in the PE Header. \r
+ The PEI Dispatcher will invoke each PEIM one time. During this pass, the PEI\r
+ Dispatcher will pass control to the PEIM at the AddressOfEntryPoint in the PE Header.\r
\r
- @param FfsHeader Pointer to the FFS file header.\r
+ @param FfsHeader The pointer to the FFS file header.\r
@param PeiServices Describes the list of possible PEI Services.\r
\r
@return Status code\r
typedef\r
EFI_STATUS\r
(EFIAPI *EFI_PEIM_ENTRY_POINT)(\r
- IN EFI_FFS_FILE_HEADER *FfsHeader,\r
- IN EFI_PEI_SERVICES **PeiServices\r
+ IN EFI_FFS_FILE_HEADER *FfsHeader,\r
+ IN EFI_PEI_SERVICES **PeiServices\r
);\r
- \r
+\r
/**\r
- The purpose of the service is to abstract the capability of the PEI \r
- Foundation to discover instances of firmware volumes in the system. \r
- Given the input file pointer, this service searches for the next \r
+ This service abstracts the capability of the PEI\r
+ Foundation to discover instances of firmware volumes in the system.\r
+ Given the input file pointer, this service searches for the next\r
matching file in the Firmware File System (FFS) volume.\r
\r
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
@param Instance This instance of the firmware volume to find. The value 0 is the Boot Firmware Volume (BFV).\r
- @param FwVolHeader Pointer to the firmware volume header of the volume to return.\r
+ @param FwVolHeader The pointer to 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
**/\r
typedef\r
EFI_STATUS\r
-(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME) (\r
- IN FRAMEWORK_EFI_PEI_SERVICES **PeiServices,\r
- IN UINTN Instance,\r
- IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader\r
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME)(\r
+ IN FRAMEWORK_EFI_PEI_SERVICES **PeiServices,\r
+ IN UINTN Instance,\r
+ IN OUT EFI_FIRMWARE_VOLUME_HEADER **FwVolHeader\r
);\r
- \r
+\r
/**\r
- The purpose of the service is to abstract the capability of the PEI \r
- Foundation to discover instances of firmware files in the system. \r
- Given the input file pointer, this service searches for the next matching \r
+ This service abstracts the capability of the PEI\r
+ Foundation to discover instances of firmware files in the system.\r
+ Given the input file pointer, this service searches for the next matching\r
file in the Firmware File System (FFS) volume.\r
\r
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
@param SearchType A filter to find files only of this type.\r
- @param FwVolHeader Pointer to the firmware volume header of the volume to search.This parameter \r
+ @param FwVolHeader The pointer to the firmware volume header of the volume to search. This parameter\r
must point to a valid FFS volume.\r
- @param FileHeader Pointer to the current file from which to begin searching.This pointer will be \r
- updated upon return to reflect the file found.\r
+ @param FileHeader The pointer to the current file from which to begin searching. Upon return this pointer will be\r
+ updated to reflect the file found.\r
\r
- @retval EFI_SUCCESS The file was found.\r
- @retval EFI_NOT_FOUND The file was not found.\r
- @retval EFI_NOT_FOUND The header checksum was not zero.\r
+ @retval EFI_SUCCESS The file was found.\r
+ @retval EFI_NOT_FOUND The file was not found.\r
+ @retval EFI_NOT_FOUND The header checksum was not zero.\r
\r
**/\r
typedef\r
EFI_STATUS\r
-(EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE) (\r
- IN FRAMEWORK_EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_FV_FILETYPE SearchType,\r
- IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
- IN OUT EFI_FFS_FILE_HEADER **FileHeader\r
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE)(\r
+ IN FRAMEWORK_EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_FV_FILETYPE SearchType,\r
+ IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
+ IN OUT EFI_FFS_FILE_HEADER **FileHeader\r
);\r
\r
/**\r
- Given the input file pointer, this service searches for the next \r
- matching file in the Firmware File System (FFS) volume. \r
+ Given the input file pointer, this service searches for the next\r
+ matching file in the Firmware File System (FFS) volume.\r
\r
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
@param SectionType The value of the section type to find.\r
@param FfsFileHeader A pointer to the file header that contains the set of sections to be searched.\r
@param SectionData A pointer to the discovered section, if successful.\r
\r
- @retval EFI_SUCCESS The section was found.\r
- @retval EFI_NOT_FOUND The section was not found.\r
+ @retval EFI_SUCCESS The section was found.\r
+ @retval EFI_NOT_FOUND The section was not found.\r
\r
**/\r
typedef\r
EFI_STATUS\r
-(EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA) (\r
- IN FRAMEWORK_EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_SECTION_TYPE SectionType,\r
- IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
- IN OUT VOID **SectionData\r
+(EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA)(\r
+ IN FRAMEWORK_EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_SECTION_TYPE SectionType,\r
+ IN EFI_FFS_FILE_HEADER *FfsFileHeader,\r
+ IN OUT VOID **SectionData\r
);\r
- \r
+\r
+///\r
+/// FRAMEWORK_EFI_PEI_SERVICES is a collection of functions whose implementation is provided by the PEI\r
+/// Foundation. The table may be located in the temporary or permanent memory, depending upon the capabilities\r
+/// and phase of execution of PEI.\r
+///\r
+/// These services fall into various classes, including the following:\r
+/// - Managing the boot mode.\r
+/// - Allocating both early and permanent memory.\r
+/// - Supporting the Firmware File System (FFS).\r
+/// - Abstracting the PPI database abstraction.\r
+/// - Creating Hand-Off Blocks (HOBs).\r
+///\r
struct _FRAMEWORK_EFI_PEI_SERVICES {\r
- EFI_TABLE_HEADER Hdr;\r
+ EFI_TABLE_HEADER Hdr;\r
//\r
// PPI Functions\r
//\r
- EFI_PEI_INSTALL_PPI InstallPpi;\r
- EFI_PEI_REINSTALL_PPI ReInstallPpi;\r
- EFI_PEI_LOCATE_PPI LocatePpi;\r
- EFI_PEI_NOTIFY_PPI NotifyPpi;\r
+ EFI_PEI_INSTALL_PPI InstallPpi;\r
+ EFI_PEI_REINSTALL_PPI ReInstallPpi;\r
+ EFI_PEI_LOCATE_PPI LocatePpi;\r
+ EFI_PEI_NOTIFY_PPI NotifyPpi;\r
//\r
// Boot Mode Functions\r
//\r
- EFI_PEI_GET_BOOT_MODE GetBootMode;\r
- EFI_PEI_SET_BOOT_MODE SetBootMode;\r
+ EFI_PEI_GET_BOOT_MODE GetBootMode;\r
+ EFI_PEI_SET_BOOT_MODE SetBootMode;\r
//\r
// HOB Functions\r
//\r
- EFI_PEI_GET_HOB_LIST GetHobList;\r
- EFI_PEI_CREATE_HOB CreateHob;\r
+ EFI_PEI_GET_HOB_LIST GetHobList;\r
+ EFI_PEI_CREATE_HOB CreateHob;\r
//\r
// Firmware Volume Functions\r
//\r
- EFI_PEI_FFS_FIND_NEXT_VOLUME FfsFindNextVolume;\r
- EFI_PEI_FFS_FIND_NEXT_FILE FfsFindNextFile;\r
- EFI_PEI_FFS_FIND_SECTION_DATA FfsFindSectionData;\r
+ EFI_PEI_FFS_FIND_NEXT_VOLUME FfsFindNextVolume;\r
+ EFI_PEI_FFS_FIND_NEXT_FILE FfsFindNextFile;\r
+ EFI_PEI_FFS_FIND_SECTION_DATA FfsFindSectionData;\r
//\r
// PEI Memory Functions\r
//\r
- EFI_PEI_INSTALL_PEI_MEMORY InstallPeiMemory;\r
- EFI_PEI_ALLOCATE_PAGES AllocatePages;\r
- EFI_PEI_ALLOCATE_POOL AllocatePool;\r
- EFI_PEI_COPY_MEM CopyMem;\r
- EFI_PEI_SET_MEM SetMem;\r
+ EFI_PEI_INSTALL_PEI_MEMORY InstallPeiMemory;\r
+ EFI_PEI_ALLOCATE_PAGES AllocatePages;\r
+ EFI_PEI_ALLOCATE_POOL AllocatePool;\r
+ EFI_PEI_COPY_MEM CopyMem;\r
+ EFI_PEI_SET_MEM SetMem;\r
//\r
+ // (the following interfaces are installed by publishing PEIM)\r
// Status Code\r
- EFI_PEI_REPORT_STATUS_CODE ReportStatusCode;\r
//\r
- // Reset\r
+ EFI_PEI_REPORT_STATUS_CODE ReportStatusCode;\r
//\r
- EFI_PEI_RESET_SYSTEM ResetSystem;\r
+ // Reset\r
//\r
- // (the following interfaces are installed by publishing PEIM)\r
+ EFI_PEI_RESET_SYSTEM ResetSystem;\r
+ ///\r
+ /// Inconsistent with specification here:\r
+ /// In Framework Spec, PeiCis0.91, CpuIo and PciCfg are NOT pointers.\r
+ ///\r
+\r
//\r
// I/O Abstractions\r
//\r
- EFI_PEI_CPU_IO_PPI *CpuIo;\r
- EFI_PEI_PCI_CFG_PPI *PciCfg;\r
+ EFI_PEI_CPU_IO_PPI *CpuIo;\r
+ EFI_PEI_PCI_CFG_PPI *PciCfg;\r
};\r
- \r
-#endif \r
+///\r
+/// Enumeration of reset types defined in the Framework Specification PeiCis.\r
+///\r
+typedef enum {\r
+ ///\r
+ /// Used to induce a system-wide reset. This sets all circuitry within the\r
+ /// system to its initial state. This type of reset is asynchronous to system\r
+ /// operation and operates withgout regard to cycle boundaries. EfiColdReset\r
+ /// is tantamount to a system power cycle.\r
+ ///\r
+ EfiPeiResetCold,\r
+ ///\r
+ /// Used to induce a system-wide initialization. The processors are set to their\r
+ /// initial state, and pending cycles are not corrupted. If the system does\r
+ /// not support this reset type, then an EfiResetCold must be performed.\r
+ ///\r
+ EfiPeiResetWarm,\r
+} EFI_PEI_RESET_TYPE;\r
+\r
+#endif\r
+\r