]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Peim/PeiCis.h
Fix capitalization issues
[mirror_edk2.git] / MdePkg / Include / Peim / PeiCis.h
index ecc128bda5d1817de35d46a170af05b4227bbc64..91a77ef3c606470844fc4211ccf77f74a63a188a 100644 (file)
-/** @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
-  \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
-  \r
-  @param  NotifyDescriptor Address of the notification descriptor data structure.\r
-  \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
-  \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
-  \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
-  \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
-  \r
-  @param  OldPpi A pointer to the former PPI in the database. \r
-  \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
-  \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
-  \r
-  @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database.\r
-  \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
-  \r
-  @param  Guid A pointer to the GUID whose corresponding interface needs to be found.\r
-  \r
-  @param  Instance The N-th instance of the interface that is required.\r
-  \r
-  @param  PpiDescriptor A pointer to instance of the EFI_PEI_PPI_DESCRIPTOR.\r
-  \r
-  @param  Ppi A pointer to the instance of the interface.  \r
-\r
-  @retval EFI_SUCCESS The interface was successfully returned.\r
-  \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
-  \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
-  \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
-  \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
-  \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
-  \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
-  \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
-  \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
-  \r
-  @param  Type The type of HOB to be installed.\r
-  \r
-  @param  Length The length of the HOB to be added.\r
-  \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
-  \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
-  \r
-  @param  Instance This instance of the firmware volume to find.  The value 0 is the Boot Firmware Volume (BFV).\r
-  \r
-  @param  FwVolHeader Pointer to the firmware volume header of the volume to return.\r
-\r
-  @retval EFI_SUCCESS The volume was found.\r
-  \r
-  @retval EFI_NOT_FOUND The volume was not found.\r
-  \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
-  \r
-  @param  SearchType A filter to find files only of this type.\r
-  \r
-  @param  FwVolHeader Pointer to the firmware volume header of the volume to search.This parameter must point to a valid FFS volume.\r
-  \r
-  @param  FileHeader Pointer to the current file from which to begin searching.This pointer will be updated upon return to reflect the file found.\r
-\r
-  @retval EFI_SUCCESS The file was found.\r
-  \r
-  @retval EFI_NOT_FOUND The file was not found.\r
-  \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
-  \r
-  @param  SectionType The value of the section type to find.\r
-  \r
-  @param  FfsFileHeader A pointer to the file header that contains the set of sections to be searched.\r
-  \r
-  @param  SectionData A pointer to the discovered section, if successful.\r
-\r
-  @retval EFI_SUCCESS The section was found.\r
-  \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
-  \r
-  @param  MemoryBegin The value of a region of installed memory\r
-  \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
-  \r
-  @retval EFI_INVALID_PARAMETER MemoryBegin and MemoryLength are illegal for this system.\r
-  \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
-  \r
-  @param  MemoryType The type of memory to allocate. \r
-  \r
-  @param  Pages The number of contiguous 4 KB pages to allocate.\r
-  \r
-  @param  Memory Pointer to a physical address. On output, the address is set to the base of the page range that was allocated.\r
-\r
-  @retval EFI_SUCCESS The memory range was successfully allocated.\r
-  \r
-  @retval EFI_OUT_OF_RESOURCES  The pages could not be allocated.\r
-  \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
-  \r
-  @param  Size The number of bytes to allocate from the pool.\r
-  \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
-  \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
-  \r
-  @param  Source Pointer to the source buffer of the memory copy\r
-  \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
-  \r
-  @param  Size Number of bytes in Buffer to fill.\r
-  \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
-  \r
-  @param  Type Indicates the type of status code being reported. \r
-  \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
-  \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
-  \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
-  \r
-  @param  Data This optional parameter may be used to pass additional data.\r
-\r
-  @retval EFI_SUCCESS The function completed successfully. \r
-  \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
-  \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
-\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
-#include <Protocol/Pcd.h>\r
-\r
-#endif\r
+/** @file
+  Framework PEI master include file. This file should match the PEI CIS spec.
+
+  Copyright (c) 2006, Intel Corporation                                                         
+  All rights reserved. This program and the accompanying materials                          
+  are licensed and made available under the terms and conditions of the BSD License         
+  which accompanies this distribution.  The full text of the license may be found at        
+  http://opensource.org/licenses/bsd-license.php                                            
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
+
+  Module Name:  PeiCis.h
+
+  @par Revision Reference:
+  Version 0.91.
+
+**/
+
+#ifndef __PEIM_CIS_H__
+#define __PEIM_CIS_H__
+
+#include <Common/MultiPhase.h>
+#include <Common/BootMode.h>
+#include <Common/Hob.h>
+#include <Common/FirmwareVolumeImageFormat.h>
+#include <Common/FirmwareVolumeHeader.h>
+#include <Common/FirmwareFileSystem.h>
+#include <Common/Dependency.h>
+
+#define TIANO_ERROR(a)              (MAX_2_BITS | (a))
+
+#if (EFI_SPECIFICATION_VERSION < 0x00020000)
+//
+// Tiano added a couple of return types. These are owned by UEFI specification
+//  and Tiano can not use them. Thus for UEFI 2.0/R9 support we moved the values
+//  to a UEFI OEM extension range to conform to UEFI specification.
+//
+#define EFI_NOT_AVAILABLE_YET   EFIERR (28)
+#define EFI_UNLOAD_IMAGE        EFIERR (29)
+#else
+#define EFI_NOT_AVAILABLE_YET   TIANO_ERROR (0)
+#define EFI_UNLOAD_IMAGE        TIANO_ERROR (1)
+#endif
+
+//
+// Declare forward referenced data structures
+//
+typedef struct _EFI_PEI_SERVICES          EFI_PEI_SERVICES;
+typedef struct _EFI_PEI_NOTIFY_DESCRIPTOR EFI_PEI_NOTIFY_DESCRIPTOR;
+
+
+#include <Ppi/CpuIo.h>
+#include <Ppi/PciCfg.h>
+
+//
+// PEI Specification Revision information
+//
+#define PEI_SPECIFICATION_MAJOR_REVISION  0
+#define PEI_SPECIFICATION_MINOR_REVISION  91
+
+/**
+  The PEI Dispatcher will invoke each PEIM one time.  During this pass, the PEI 
+  Dispatcher will pass control to the PEIM at the AddressOfEntryPoint in the PE Header. 
+
+  @param  FfsHeader Pointer to the FFS file header. 
+  
+  @param  PeiServices Describes the list of possible PEI Services.
+
+  @return Status code
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEIM_ENTRY_POINT)(
+  IN EFI_FFS_FILE_HEADER       *FfsHeader,
+  IN EFI_PEI_SERVICES          **PeiServices
+  );
+
+/**
+  Entry point of the notification callback function itself within the PEIM.
+
+  @param  PeiServices Indirect reference to the PEI Services Table.
+  
+  @param  NotifyDescriptor Address of the notification descriptor data structure.
+  
+  @param  Ppi Address of the PPI that was installed.
+
+  @return Status code
+  
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEIM_NOTIFY_ENTRY_POINT) (
+  IN EFI_PEI_SERVICES           **PeiServices,
+  IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,
+  IN VOID                       *Ppi
+  );
+
+//
+// PEI Ppi Services List Descriptors
+//
+#define EFI_PEI_PPI_DESCRIPTOR_PIC              0x00000001
+#define EFI_PEI_PPI_DESCRIPTOR_PPI              0x00000010
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK  0x00000020
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH  0x00000040
+#define EFI_PEI_PPI_DESCRIPTOR_NOTIFY_TYPES     0x00000060
+#define EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST   0x80000000
+
+typedef struct {
+  UINTN     Flags;
+  EFI_GUID  *Guid;
+  VOID      *Ppi;
+} EFI_PEI_PPI_DESCRIPTOR;
+
+struct _EFI_PEI_NOTIFY_DESCRIPTOR {
+  UINTN                       Flags;
+  EFI_GUID                    *Guid;
+  EFI_PEIM_NOTIFY_ENTRY_POINT Notify;
+};
+
+/**
+  This service is the first one provided by the PEI Foundation.  This function 
+  installs an interface in the PEI PPI database by GUID.  The purpose of the 
+  service is to publish an interface that other parties can use to call 
+  additional PEIMs.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table 
+  published by the PEI Foundation. 
+  
+  @param  PpiList A pointer to the list of interfaces that the caller shall install.
+
+  @retval EFI_SUCCESS The interface was successfully installed.
+  
+  @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. 
+  
+  @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_INSTALL_PPI) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN EFI_PEI_PPI_DESCRIPTOR      *PpiList
+  );
+
+/**
+  This function reinstalls an interface in the PEI PPI database by GUID. 
+  The purpose of the service is to publish an interface that other parties 
+  can use to replace a same-named interface in the protocol database 
+  with a different interface. 
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table 
+  published by the PEI Foundation. 
+  
+  @param  OldPpi A pointer to the former PPI in the database. 
+  
+  @param  NewPpi A pointer to the new interfaces that the caller shall install.
+
+  @retval EFI_SUCCESS The interface was successfully installed.
+  
+  @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. 
+  
+  @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database.
+  
+  @retval EFI_NOT_FOUND The PPI for which the reinstallation was requested has not been installed.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REINSTALL_PPI) (
+  IN EFI_PEI_SERVICES                **PeiServices,
+  IN EFI_PEI_PPI_DESCRIPTOR          *OldPpi,
+  IN EFI_PEI_PPI_DESCRIPTOR          *NewPpi
+  );
+
+/**
+  This function locates an interface in the PEI PPI database by GUID. 
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES published by the PEI Foundation.
+  
+  @param  Guid A pointer to the GUID whose corresponding interface needs to be found.
+  
+  @param  Instance The N-th instance of the interface that is required.
+  
+  @param  PpiDescriptor A pointer to instance of the EFI_PEI_PPI_DESCRIPTOR.
+  
+  @param  Ppi A pointer to the instance of the interface.  
+
+  @retval EFI_SUCCESS The interface was successfully returned.
+  
+  @retval EFI_NOT_FOUND The PPI descriptor is not found in the database.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_LOCATE_PPI) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN EFI_GUID                    *Guid,
+  IN UINTN                       Instance,
+  IN OUT EFI_PEI_PPI_DESCRIPTOR  **PpiDescriptor,
+  IN OUT VOID                    **Ppi
+  );
+
+/**
+  This function installs a notification service to be called back when a 
+  given interface is installed or reinstalled.  The purpose of the service 
+  is to publish an interface that other parties can use to call additional PPIs 
+  that may materialize later.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation
+  
+  @param  NotifyList A pointer to the list of notification interfaces that the caller shall install.
+
+  @retval EFI_SUCCESS The interface was successfully installed.
+  
+  @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. 
+  
+  @retval EFI_OUT_OF_RESOURCES There is no additional space in the PPI database.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_NOTIFY_PPI) (
+  IN EFI_PEI_SERVICES                **PeiServices,
+  IN EFI_PEI_NOTIFY_DESCRIPTOR       *NotifyList
+  );
+
+/**
+  This function returns the present value of the boot mode.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation. 
+  
+  @param  BootMode A pointer to contain the value of the boot mode.
+
+  @retval EFI_SUCCESS The boot mode was returned successfully.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_BOOT_MODE) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  OUT EFI_BOOT_MODE              *BootMode
+  );
+
+/**
+  This function sets the value of the boot mode.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation
+  
+  @param  BootMode The value of the boot mode to set.
+
+  @retval EFI_SUCCESS The boot mode was returned successfully.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_SET_BOOT_MODE) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN EFI_BOOT_MODE               BootMode
+  );
+
+/**
+  This function returns the pointer to the list of Hand-Off Blocks (HOBs) in memory. 
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation
+  
+  @param  HobList A pointer to the list of HOBs that the PEI Foundation will initialize
+
+  @retval EFI_SUCCESS The list was successfully returned.
+  
+  @retval EFI_NOT_AVAILABLE_YET The HOB list is not yet published.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_GET_HOB_LIST) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN OUT VOID                    **HobList
+  );
+
+/**
+  This service published by the PEI Foundation abstracts the creation of a Hand-Off Block's (HOB¡¯s) headers.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  Type The type of HOB to be installed.
+  
+  @param  Length The length of the HOB to be added.
+  
+  @param  Hob The address of a pointer that will contain the HOB header.
+
+  @retval EFI_SUCCESS The HOB was successfully created.
+  
+  @retval EFI_OUT_OF_RESOURCES There is no additional space for HOB creation.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_CREATE_HOB) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN UINT16                      Type,
+  IN UINT16                      Length,
+  IN OUT VOID                    **Hob
+  );
+
+/**
+  The purpose of the service is to abstract the capability of the PEI 
+  Foundation to discover instances of firmware volumes in the system. 
+  Given the input file pointer, this service searches for the next 
+  matching file in the Firmware File System (FFS) volume.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  Instance This instance of the firmware volume to find.  The value 0 is the Boot Firmware Volume (BFV).
+  
+  @param  FwVolHeader Pointer to the firmware volume header of the volume to return.
+
+  @retval EFI_SUCCESS The volume was found.
+  
+  @retval EFI_NOT_FOUND The volume was not found.
+  
+  @retval EFI_INVALID_PARAMETER FwVolHeader is NULL
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME) (
+  IN EFI_PEI_SERVICES                **PeiServices,
+  IN UINTN                           Instance,
+  IN OUT EFI_FIRMWARE_VOLUME_HEADER  **FwVolHeader
+  );
+
+/**
+  The purpose of the service is to abstract the capability of the PEI 
+  Foundation to discover instances of firmware files in the system. 
+  Given the input file pointer, this service searches for the next matching 
+  file in the Firmware File System (FFS) volume.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  SearchType A filter to find files only of this type.
+  
+  @param  FwVolHeader Pointer to the firmware volume header of the volume to search.This parameter must point to a valid FFS volume.
+  
+  @param  FileHeader Pointer to the current file from which to begin searching.This pointer will be updated upon return to reflect the file found.
+
+  @retval EFI_SUCCESS The file was found.
+  
+  @retval EFI_NOT_FOUND The file was not found.
+  
+  @retval EFI_NOT_FOUND The header checksum was not zero.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN EFI_FV_FILETYPE             SearchType,
+  IN EFI_FIRMWARE_VOLUME_HEADER  *FwVolHeader,
+  IN OUT EFI_FFS_FILE_HEADER     **FileHeader
+  );
+
+/**
+  Given the input file pointer, this service searches for the next 
+  matching file in the Firmware File System (FFS) volume. 
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  SectionType The value of the section type to find.
+  
+  @param  FfsFileHeader A pointer to the file header that contains the set of sections to be searched.
+  
+  @param  SectionData A pointer to the discovered section, if successful.
+
+  @retval EFI_SUCCESS The section was found.
+  
+  @retval EFI_NOT_FOUND The section was not found.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_FFS_FIND_SECTION_DATA) (
+  IN EFI_PEI_SERVICES            **PeiServices,
+  IN EFI_SECTION_TYPE            SectionType,
+  IN EFI_FFS_FILE_HEADER         *FfsFileHeader,
+  IN OUT VOID                    **SectionData
+  );
+
+/**
+  This function registers the found memory configuration with the PEI Foundation.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  MemoryBegin The value of a region of installed memory
+  
+  @param  MemoryLength The corresponding length of a region of installed memory.
+
+  @retval EFI_SUCCESS The region was successfully installed in a HOB.
+  
+  @retval EFI_INVALID_PARAMETER MemoryBegin and MemoryLength are illegal for this system.
+  
+  @retval EFI_OUT_OF_RESOURCES There is no additional space for HOB creation.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_INSTALL_PEI_MEMORY) (
+  IN EFI_PEI_SERVICES           **PeiServices,
+  IN EFI_PHYSICAL_ADDRESS       MemoryBegin,
+  IN UINT64                     MemoryLength
+  );
+
+/**
+  The purpose of the service is to publish an interface that allows 
+  PEIMs to allocate memory ranges that are managed by the PEI Foundation.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  MemoryType The type of memory to allocate. 
+  
+  @param  Pages The number of contiguous 4 KB pages to allocate.
+  
+  @param  Memory Pointer to a physical address. On output, the address is set to the base of the page range that was allocated.
+
+  @retval EFI_SUCCESS The memory range was successfully allocated.
+  
+  @retval EFI_OUT_OF_RESOURCES  The pages could not be allocated.
+  
+  @retval EFI_INVALID_PARAMETER Type is not equal to AllocateAnyPages.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_ALLOCATE_PAGES) (
+  IN EFI_PEI_SERVICES           **PeiServices,
+  IN EFI_MEMORY_TYPE            MemoryType,
+  IN UINTN                      Pages,
+  IN OUT EFI_PHYSICAL_ADDRESS   *Memory
+  );
+
+/**
+  The purpose of this service is to publish an interface that 
+  allows PEIMs to allocate memory ranges that are managed by the PEI Foundation.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  Size The number of bytes to allocate from the pool.
+  
+  @param  Buffer If the call succeeds, a pointer to a pointer to the allocated buffer; undefined otherwise.
+
+  @retval EFI_SUCCESS The allocation was successful.
+  
+  @retval EFI_OUT_OF_RESOURCES There is not enough heap to allocate the requested size.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_ALLOCATE_POOL) (
+  IN EFI_PEI_SERVICES           **PeiServices,
+  IN UINTN                      Size,
+  OUT VOID                      **Buffer
+  );
+
+/**
+  This service copies the contents of one buffer to another buffer.
+
+  @param  Destination Pointer to the destination buffer of the memory copy.
+  
+  @param  Source Pointer to the source buffer of the memory copy
+  
+  @param  Length Number of bytes to copy from Source to Destination.
+
+  @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_COPY_MEM) (
+  IN VOID                       *Destination,
+  IN VOID                       *Source,
+  IN UINTN                      Length
+  );
+
+/**
+  The service fills a buffer with a specified value.
+
+  @param  Buffer Pointer to the buffer to fill.
+  
+  @param  Size Number of bytes in Buffer to fill.
+  
+  @param  Value Value to fill Buffer with
+
+  @return None
+
+**/
+typedef
+VOID
+(EFIAPI *EFI_PEI_SET_MEM) (
+  IN VOID                       *Buffer,
+  IN UINTN                      Size,
+  IN UINT8                      Value
+  );
+
+/**
+  This service publishes an interface that allows PEIMs to report status codes.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
+  
+  @param  Type Indicates the type of status code being reported. 
+  
+  @param  Value Describes the current status of a hardware or 
+  software entity.  This includes information about the class and 
+  subclass that is used to classify the entity as well as an operation.
+  For progress codes, the operation is the current activity.
+  For error codes, it is the exception.For debug codes,it is not defined at this time. 
+  
+  @param  Instance The enumeration of a hardware or software entity within 
+  the system.  A system may contain multiple entities that match a class/subclass 
+  pairing.  The instance differentiates between them.  An instance of 0 indicates 
+  that instance information is unavailable, not meaningful, or not relevant.
+  Valid instance numbers start with 1.
+  
+  @param  CallerId This optional parameter may be used to identify the caller. 
+  This parameter allows the status code driver to apply different rules to 
+  different callers.
+  
+  @param  Data This optional parameter may be used to pass additional data.
+
+  @retval EFI_SUCCESS The function completed successfully. 
+  
+  @retval EFI_NOT_AVAILABLE_YET No progress code provider has installed an interface in the system.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_REPORT_STATUS_CODE) (
+  IN EFI_PEI_SERVICES         **PeiServices,
+  IN EFI_STATUS_CODE_TYPE     Type,
+  IN EFI_STATUS_CODE_VALUE    Value,
+  IN UINT32                   Instance,
+  IN EFI_GUID                 *CallerId OPTIONAL,
+  IN EFI_STATUS_CODE_DATA     *Data OPTIONAL
+  );
+
+/**
+  Resets the entire platform.
+
+  @param  PeiServices An indirect pointer to the EFI_PEI_SERVICES 
+  table published by the PEI Foundation.
+
+  @retval EFI_SUCCESS The function completed successfully. 
+  
+  @retval EFI_NOT_AVAILABLE_YET The service has not been installed yet.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_PEI_RESET_SYSTEM) (
+  IN EFI_PEI_SERVICES   **PeiServices
+  );
+
+//
+// EFI PEI Services Table
+//
+#define PEI_SERVICES_SIGNATURE  0x5652455320494550ULL
+#define PEI_SERVICES_REVISION   ((PEI_SPECIFICATION_MAJOR_REVISION << 16) | (PEI_SPECIFICATION_MINOR_REVISION))
+
+struct _EFI_PEI_SERVICES {
+  EFI_TABLE_HEADER              Hdr;
+
+  //
+  // PPI Functions
+  //
+  EFI_PEI_INSTALL_PPI           InstallPpi;
+  EFI_PEI_REINSTALL_PPI         ReInstallPpi;
+  EFI_PEI_LOCATE_PPI            LocatePpi;
+  EFI_PEI_NOTIFY_PPI            NotifyPpi;
+
+  //
+  // Boot Mode Functions
+  //
+  EFI_PEI_GET_BOOT_MODE         GetBootMode;
+  EFI_PEI_SET_BOOT_MODE         SetBootMode;
+
+  //
+  // HOB Functions
+  //
+  EFI_PEI_GET_HOB_LIST          GetHobList;
+  EFI_PEI_CREATE_HOB            CreateHob;
+
+  //
+  // Filesystem Functions
+  //
+  EFI_PEI_FFS_FIND_NEXT_VOLUME  FfsFindNextVolume;
+  EFI_PEI_FFS_FIND_NEXT_FILE    FfsFindNextFile;
+  EFI_PEI_FFS_FIND_SECTION_DATA FfsFindSectionData;
+
+  //
+  // Memory Functions
+  //
+  EFI_PEI_INSTALL_PEI_MEMORY    InstallPeiMemory;
+  EFI_PEI_ALLOCATE_PAGES        AllocatePages;
+  EFI_PEI_ALLOCATE_POOL         AllocatePool;
+  EFI_PEI_COPY_MEM              CopyMem;
+  EFI_PEI_SET_MEM               SetMem;
+
+  //
+  // Status Code
+  //
+  EFI_PEI_REPORT_STATUS_CODE    PeiReportStatusCode;
+
+  //
+  // Reset
+  //
+  EFI_PEI_RESET_SYSTEM          PeiResetSystem;
+
+  //
+  // Pointer to PPI interface
+  //
+  EFI_PEI_CPU_IO_PPI            *CpuIo;
+  EFI_PEI_PCI_CFG_PPI           *PciCfg;
+
+};
+
+typedef struct {
+  UINTN                   BootFirmwareVolume;
+  UINTN                   SizeOfCacheAsRam;
+  EFI_PEI_PPI_DESCRIPTOR  *DispatchTable;
+} EFI_PEI_STARTUP_DESCRIPTOR;
+
+#include <Common/EfiImage.h>
+#include <Common/StatusCode.h>
+#include <Common/BootScript.h>
+#include <Common/Capsule.h>
+
+#include <Guid/Apriori.h>
+#include <Guid/Capsule.h>
+#include <Guid/DxeServices.h>
+#include <Guid/HobList.h>
+#include <Guid/MemoryAllocationHob.h>
+#include <Guid/FirmwareFileSystem.h>
+#include <Guid/SmramMemoryReserve.h>
+#include <Guid/GlobalVariable.h>
+
+#include <Ppi/BlockIo.h>
+#include <Ppi/BootInRecoveryMode.h>
+#include <Ppi/BootScriptExecuter.h>
+#include <Ppi/DeviceRecoveryModule.h>
+#include <Ppi/DxeIpl.h>
+#include <Ppi/EndOfPeiPhase.h>
+#include <Ppi/FindFv.h>
+#include <Ppi/LoadFile.h>
+#include <Ppi/MasterBootMode.h>
+#include <Ppi/MemoryDiscovered.h>
+#include <Ppi/Pcd.h>
+#include <Ppi/ReadOnlyVariable.h>
+#include <Ppi/RecoveryModule.h>
+#include <Ppi/Reset.h>
+#include <Ppi/S3Resume.h>
+#include <Ppi/SecPlatformInformation.h>
+#include <Ppi/SectionExtraction.h>
+#include <Ppi/Security.h>
+#include <Ppi/Smbus.h>
+#include <Ppi/Stall.h>
+#include <Ppi/StatusCode.h>
+
+#include <Protocol/FirmwareVolumeBlock.h>
+#include <Protocol/Pcd.h>
+
+#endif