]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OldMdePkg/Include/Peim/PeiCis.h
Moved the MdePkg to OldMdePkg so that new code in MdePkg does not break existing...
[mirror_edk2.git] / OldMdePkg / Include / Peim / PeiCis.h
diff --git a/OldMdePkg/Include/Peim/PeiCis.h b/OldMdePkg/Include/Peim/PeiCis.h
new file mode 100644 (file)
index 0000000..5bf71eb
--- /dev/null
@@ -0,0 +1,611 @@
+/** @file\r
+  Framework PEI master include file. This file should match the PEI CIS spec.\r
+\r
+  Copyright (c) 2006, 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
+  Module Name:  PeiCis.h\r
+\r
+  @par Revision Reference:\r
+  Version 0.91.\r
+\r
+**/\r
+\r
+#ifndef __PEIM_CIS_H__\r
+#define __PEIM_CIS_H__\r
+\r
+#include <Common/MultiPhase.h>\r
+#include <Common/BootMode.h>\r
+#include <Common/Hob.h>\r
+#include <Common/FirmwareVolumeImageFormat.h>\r
+#include <Common/FirmwareVolumeHeader.h>\r
+#include <Common/FirmwareFileSystem.h>\r
+#include <Common/Dependency.h>\r
+\r
+#define TIANO_ERROR(a)              (MAX_2_BITS | (a))\r
+\r
+#if (EFI_SPECIFICATION_VERSION < 0x00020000)\r
+//\r
+// Tiano added a couple of return types. These are owned by UEFI specification\r
+//  and Tiano can not use them. Thus for UEFI 2.0/R9 support we moved the values\r
+//  to a UEFI OEM extension range to conform to UEFI specification.\r
+//\r
+#define EFI_NOT_AVAILABLE_YET   EFIERR (28)\r
+#define EFI_UNLOAD_IMAGE        EFIERR (29)\r
+#else\r
+#define EFI_NOT_AVAILABLE_YET   TIANO_ERROR (0)\r
+#define EFI_UNLOAD_IMAGE        TIANO_ERROR (1)\r
+#endif\r
+\r
+//\r
+// Declare forward referenced data structures\r
+//\r
+typedef struct _EFI_PEI_SERVICES          EFI_PEI_SERVICES;\r
+typedef struct _EFI_PEI_NOTIFY_DESCRIPTOR EFI_PEI_NOTIFY_DESCRIPTOR;\r
+\r
+\r
+#include <Ppi/CpuIo.h>\r
+#include <Ppi/PciCfg.h>\r
+\r
+//\r
+// PEI Specification Revision information\r
+//\r
+#define PEI_SPECIFICATION_MAJOR_REVISION  0\r
+#define PEI_SPECIFICATION_MINOR_REVISION  91\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
+\r
+  @param  FfsHeader        Pointer to the FFS file header.\r
+  @param  PeiServices      Describes the list of possible PEI Services.\r
+\r
+  @return Status code\r
+\r
+**/\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
+  );\r
+\r
+/**\r
+  Entry point of the notification callback function itself within the PEIM.\r
+\r
+  @param  PeiServices      Indirect reference to the PEI Services Table.\r
+  @param  NotifyDescriptor Address of the notification descriptor data structure.\r
+  @param  Ppi              Address of the PPI that was installed.\r
+\r
+  @return Status code\r
+  \r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEIM_NOTIFY_ENTRY_POINT) (\r
+  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,\r
+  IN VOID                       *Ppi\r
+  );\r
+\r
+//\r
+// PEI Ppi Services List Descriptors\r
+//\r
+#define EFI_PEI_PPI_DESCRIPTOR_PIC              0x00000001\r
+#define EFI_PEI_PPI_DESCRIPTOR_PPI              0x00000010\r
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK  0x00000020\r
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH  0x00000040\r
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES     0x00000060\r
+#define EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST   0x80000000\r
+\r
+typedef struct {\r
+  UINTN     Flags;\r
+  EFI_GUID  *Guid;\r
+  VOID      *Ppi;\r
+} EFI_PEI_PPI_DESCRIPTOR;\r
+\r
+struct _EFI_PEI_NOTIFY_DESCRIPTOR {\r
+  UINTN                       Flags;\r
+  EFI_GUID                    *Guid;\r
+  EFI_PEIM_NOTIFY_ENTRY_POINT Notify;\r
+};\r
+\r
+/**\r
+  This service is the first one provided by the PEI Foundation.  This function \r
+  installs an interface in the PEI PPI database by GUID.  The purpose of the \r
+  service is to publish an interface that other parties can use to call \r
+  additional PEIMs.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table\r
+                           published by the PEI Foundation.\r
+  @param  PpiList          A pointer to the list of interfaces that the caller shall install.\r
+\r
+  @retval EFI_SUCCESS           The interface was successfully installed.\r
+  @retval EFI_INVALID_PARAMETER The PpiList pointer is NULL or Any of the PEI PPI descriptors in the list do not have the EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field.\r
+  @retval EFI_OUT_OF_RESOURCES  There is no additional space in the PPI database.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_INSTALL_PPI) (\r
+  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN EFI_PEI_PPI_DESCRIPTOR      *PpiList\r
+  );\r
+\r
+/**\r
+  This function reinstalls an interface in the PEI PPI database by GUID. \r
+  The purpose of the service is to publish an interface that other parties \r
+  can use to replace a same-named interface in the protocol database \r
+  with a different interface. \r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table\r
+                           published by the PEI Foundation.\r
+  @param  OldPpi           A pointer to the former PPI in the database.\r
+  @param  NewPpi           A pointer to the new interfaces that the caller shall install.\r
+\r
+  @retval EFI_SUCCESS           The interface was successfully installed.\r
+  @retval EFI_INVALID_PARAMETER The PpiList pointer is NULL or Any of the PEI PPI descriptors in the \r
+                                list do not have the EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field.\r
+  @retval EFI_OUT_OF_RESOURCES  There is no additional space in the PPI database.\r
+  @retval EFI_NOT_FOUND         The PPI for which the reinstallation was requested has not been installed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_REINSTALL_PPI) (\r
+  IN EFI_PEI_SERVICES                **PeiServices,\r
+  IN EFI_PEI_PPI_DESCRIPTOR          *OldPpi,\r
+  IN EFI_PEI_PPI_DESCRIPTOR          *NewPpi\r
+  );\r
+\r
+/**\r
+  This function locates an interface in the PEI PPI database by GUID. \r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES published by the PEI Foundation.\r
+  @param  Guid             A pointer to the GUID whose corresponding interface needs to be found.\r
+  @param  Instance         The N-th instance of the interface that is required.\r
+  @param  PpiDescriptor    A pointer to instance of the EFI_PEI_PPI_DESCRIPTOR.\r
+  @param  Ppi              A pointer to the instance of the interface.\r
+\r
+  @retval EFI_SUCCESS           The interface was successfully returned.\r
+  @retval EFI_NOT_FOUND         The PPI descriptor is not found in the database.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_LOCATE_PPI) (\r
+  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN EFI_GUID                    *Guid,\r
+  IN UINTN                       Instance,\r
+  IN OUT EFI_PEI_PPI_DESCRIPTOR  **PpiDescriptor,\r
+  IN OUT VOID                    **Ppi\r
+  );\r
+\r
+/**\r
+  This function installs a notification service to be called back when a \r
+  given interface is installed or reinstalled.  The purpose of the service \r
+  is to publish an interface that other parties can use to call additional PPIs \r
+  that may materialize later.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation\r
+  @param  NotifyList       A pointer to the list of notification interfaces that the caller shall install.\r
+\r
+  @retval EFI_SUCCESS           The interface was successfully installed.\r
+  @retval EFI_INVALID_PARAMETER The PpiList pointer is NULL or Any of the PEI PPI descriptors in the \r
+                                list do not have the EFI_PEI_PPI_DESCRIPTOR_PPI bit set in the Flags field.\r
+  @retval EFI_OUT_OF_RESOURCES  There is no additional space in the PPI database.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_NOTIFY_PPI) (\r
+  IN EFI_PEI_SERVICES                **PeiServices,\r
+  IN EFI_PEI_NOTIFY_DESCRIPTOR       *NotifyList\r
+  );\r
+\r
+/**\r
+  This function returns the present value of the boot mode.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+  @param  BootMode         A pointer to contain the value of the boot mode.\r
+\r
+  @retval EFI_SUCCESS           The boot mode was returned successfully.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_GET_BOOT_MODE) (\r
+  IN EFI_PEI_SERVICES            **PeiServices,\r
+  OUT EFI_BOOT_MODE              *BootMode\r
+  );\r
+\r
+/**\r
+  This function sets the value of the boot mode.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation\r
+  @param  BootMode         The value of the boot mode to set.\r
+\r
+  @retval EFI_SUCCESS           The boot mode was returned successfully.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_SET_BOOT_MODE) (\r
+  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN EFI_BOOT_MODE               BootMode\r
+  );\r
+\r
+/**\r
+  This function returns the pointer to the list of Hand-Off Blocks (HOBs) in memory. \r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation\r
+  @param  HobList          A pointer to the list of HOBs that the PEI Foundation will initialize\r
+\r
+  @retval EFI_SUCCESS           The list was successfully returned.\r
+  @retval EFI_NOT_AVAILABLE_YET The HOB list is not yet published.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_GET_HOB_LIST) (\r
+  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN OUT VOID                    **HobList\r
+  );\r
+\r
+/**\r
+  This service published by the PEI Foundation abstracts the creation of a Hand-Off Block's (HOB's) headers.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+  @param  Type             The type of HOB to be installed.\r
+  @param  Length           The length of the HOB to be added.\r
+  @param  Hob              The address of a pointer that will contain the HOB header.\r
+\r
+  @retval EFI_SUCCESS           The HOB was successfully created.\r
+  @retval EFI_OUT_OF_RESOURCES  There is no additional space for HOB creation.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_CREATE_HOB) (\r
+  IN EFI_PEI_SERVICES            **PeiServices,\r
+  IN UINT16                      Type,\r
+  IN UINT16                      Length,\r
+  IN OUT VOID                    **Hob\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
+  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
+\r
+  @retval EFI_SUCCESS           The volume was found.\r
+  @retval EFI_NOT_FOUND         The volume was not found.\r
+  @retval EFI_INVALID_PARAMETER FwVolHeader is NULL\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME) (\r
+  IN EFI_PEI_SERVICES                **PeiServices,\r
+  IN UINTN                           Instance,\r
+  IN OUT EFI_FIRMWARE_VOLUME_HEADER  **FwVolHeader\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
+  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
+                           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
+\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 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
+\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
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA) (\r
+  IN 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
+  This function registers the found memory configuration with the PEI Foundation.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+  @param  MemoryBegin      The value of a region of installed memory\r
+  @param  MemoryLength     The corresponding length of a region of installed memory.\r
+\r
+  @retval EFI_SUCCESS           The region was successfully installed in a HOB.\r
+  @retval EFI_INVALID_PARAMETER MemoryBegin and MemoryLength are illegal for this system.\r
+  @retval EFI_OUT_OF_RESOURCES  There is no additional space for HOB creation.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) (\r
+  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN EFI_PHYSICAL_ADDRESS       MemoryBegin,\r
+  IN UINT64                     MemoryLength\r
+  );\r
+\r
+/**\r
+  The purpose of the service is to publish an interface that allows \r
+  PEIMs to allocate memory ranges that are managed by the PEI Foundation.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+  @param  MemoryType       The type of memory to allocate.\r
+  @param  Pages            The number of contiguous 4 KB pages to allocate.\r
+  @param  Memory           Pointer to a physical address. On output, the address is set to the base \r
+                           of the page range that was allocated.\r
+\r
+  @retval EFI_SUCCESS           The memory range was successfully allocated.\r
+  @retval EFI_OUT_OF_RESOURCES  The pages could not be allocated.\r
+  @retval EFI_INVALID_PARAMETER Type is not equal to AllocateAnyPages.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_ALLOCATE_PAGES) (\r
+  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN EFI_MEMORY_TYPE            MemoryType,\r
+  IN UINTN                      Pages,\r
+  IN OUT EFI_PHYSICAL_ADDRESS   *Memory\r
+  );\r
+\r
+/**\r
+  The purpose of this service is to publish an interface that \r
+  allows PEIMs to allocate memory ranges that are managed by the PEI Foundation.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+  @param  Size             The number of bytes to allocate from the pool.\r
+  @param  Buffer           If the call succeeds, a pointer to a pointer to the allocated buffer; undefined otherwise.\r
+\r
+  @retval EFI_SUCCESS           The allocation was successful.\r
+  @retval EFI_OUT_OF_RESOURCES  There is not enough heap to allocate the requested size.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_ALLOCATE_POOL) (\r
+  IN EFI_PEI_SERVICES           **PeiServices,\r
+  IN UINTN                      Size,\r
+  OUT VOID                      **Buffer\r
+  );\r
+\r
+/**\r
+  This service copies the contents of one buffer to another buffer.\r
+\r
+  @param  Destination      Pointer to the destination buffer of the memory copy.\r
+  @param  Source           Pointer to the source buffer of the memory copy\r
+  @param  Length           Number of bytes to copy from Source to Destination.\r
+\r
+  @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_COPY_MEM) (\r
+  IN VOID                       *Destination,\r
+  IN VOID                       *Source,\r
+  IN UINTN                      Length\r
+  );\r
+\r
+/**\r
+  The service fills a buffer with a specified value.\r
+\r
+  @param  Buffer           Pointer to the buffer to fill.\r
+  @param  Size             Number of bytes in Buffer to fill.\r
+  @param  Value            Value to fill Buffer with\r
+\r
+  @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_SET_MEM) (\r
+  IN VOID                       *Buffer,\r
+  IN UINTN                      Size,\r
+  IN UINT8                      Value\r
+  );\r
+\r
+/**\r
+  This service publishes an interface that allows PEIMs to report status codes.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.\r
+  @param  Type             Indicates the type of status code being reported.\r
+  @param  Value            Describes the current status of a hardware or\r
+                           software entity. This includes information about the class and\r
+                           subclass that is used to classify the entity as well as an operation.\r
+                           For progress codes, the operation is the current activity.\r
+                           For error codes, it is the exception.For debug codes,it is not defined at this time.\r
+  @param  Instance         The enumeration of a hardware or software entity within\r
+                           the system. A system may contain multiple entities that match a class/subclass\r
+                           pairing. The instance differentiates between them. An instance of 0 indicates\r
+                           that instance information is unavailable, not meaningful, or not relevant.\r
+                           Valid instance numbers start with 1.\r
+  @param  CallerId         This optional parameter may be used to identify the caller.\r
+                           This parameter allows the status code driver to apply different rules to\r
+                           different callers.\r
+  @param  Data             This optional parameter may be used to pass additional data.\r
+\r
+  @retval EFI_SUCCESS           The function completed successfully.\r
+  @retval EFI_NOT_AVAILABLE_YET No progress code provider has installed an interface in the system.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_REPORT_STATUS_CODE) (\r
+  IN EFI_PEI_SERVICES         **PeiServices,\r
+  IN EFI_STATUS_CODE_TYPE     Type,\r
+  IN EFI_STATUS_CODE_VALUE    Value,\r
+  IN UINT32                   Instance,\r
+  IN EFI_GUID                 *CallerId OPTIONAL,\r
+  IN EFI_STATUS_CODE_DATA     *Data OPTIONAL\r
+  );\r
+\r
+/**\r
+  Resets the entire platform.\r
+\r
+  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES\r
+                           table published by the PEI Foundation.\r
+\r
+  @retval EFI_SUCCESS           The function completed successfully.\r
+  @retval EFI_NOT_AVAILABLE_YET The service has not been installed yet.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_RESET_SYSTEM) (\r
+  IN EFI_PEI_SERVICES   **PeiServices\r
+  );\r
+\r
+//\r
+// EFI PEI Services Table\r
+//\r
+#define PEI_SERVICES_SIGNATURE  0x5652455320494550ULL\r
+#define PEI_SERVICES_REVISION   ((PEI_SPECIFICATION_MAJOR_REVISION << 16) | (PEI_SPECIFICATION_MINOR_REVISION))\r
+\r
+struct _EFI_PEI_SERVICES {\r
+  EFI_TABLE_HEADER              Hdr;\r
+\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
+\r
+  //\r
+  // Boot Mode Functions\r
+  //\r
+  EFI_PEI_GET_BOOT_MODE         GetBootMode;\r
+  EFI_PEI_SET_BOOT_MODE         SetBootMode;\r
+\r
+  //\r
+  // HOB Functions\r
+  //\r
+  EFI_PEI_GET_HOB_LIST          GetHobList;\r
+  EFI_PEI_CREATE_HOB            CreateHob;\r
+\r
+  //\r
+  // Filesystem 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
+\r
+  //\r
+  // 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
+\r
+  //\r
+  // Status Code\r
+  //\r
+  EFI_PEI_REPORT_STATUS_CODE    PeiReportStatusCode;\r
+\r
+  //\r
+  // Reset\r
+  //\r
+  EFI_PEI_RESET_SYSTEM          PeiResetSystem;\r
+\r
+  //\r
+  // Pointer to PPI interface\r
+  //\r
+  EFI_PEI_CPU_IO_PPI            *CpuIo;\r
+  EFI_PEI_PCI_CFG_PPI           *PciCfg;\r
+\r
+};\r
+\r
+typedef struct {\r
+  UINTN                   BootFirmwareVolume;\r
+  UINTN                   SizeOfCacheAsRam;\r
+  EFI_PEI_PPI_DESCRIPTOR  *DispatchTable;\r
+} EFI_PEI_STARTUP_DESCRIPTOR;\r
+\r
+#include <Common/EfiImage.h>\r
+#include <Common/StatusCode.h>\r
+#include <Common/BootScript.h>\r
+#include <Common/Capsule.h>\r
+\r
+#include <Guid/Apriori.h>\r
+#include <Guid/Capsule.h>\r
+#include <Guid/DxeServices.h>\r
+#include <Guid/HobList.h>\r
+#include <Guid/MemoryAllocationHob.h>\r
+#include <Guid/FirmwareFileSystem.h>\r
+#include <Guid/SmramMemoryReserve.h>\r
+#include <Guid/GlobalVariable.h>\r
+\r
+#include <Ppi/BlockIo.h>\r
+#include <Ppi/BootInRecoveryMode.h>\r
+#include <Ppi/BootScriptExecuter.h>\r
+#include <Ppi/DeviceRecoveryModule.h>\r
+#include <Ppi/DxeIpl.h>\r
+#include <Ppi/EndOfPeiPhase.h>\r
+#include <Ppi/FindFv.h>\r
+#include <Ppi/LoadFile.h>\r
+#include <Ppi/MasterBootMode.h>\r
+#include <Ppi/MemoryDiscovered.h>\r
+#include <Ppi/Pcd.h>\r
+#include <Ppi/ReadOnlyVariable.h>\r
+#include <Ppi/RecoveryModule.h>\r
+#include <Ppi/Reset.h>\r
+#include <Ppi/S3Resume.h>\r
+#include <Ppi/SecPlatformInformation.h>\r
+#include <Ppi/SectionExtraction.h>\r
+#include <Ppi/Security.h>\r
+#include <Ppi/Smbus.h>\r
+#include <Ppi/Stall.h>\r
+#include <Ppi/StatusCode.h>\r
+\r
+#include <Protocol/FirmwareVolumeBlock.h>\r
+#endif\r