git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@427 6f19259b...
authoralfred <alfred@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 6 Jun 2006 06:27:01 +0000 (06:27 +0000)
committeralfred <alfred@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 6 Jun 2006 06:27:01 +0000 (06:27 +0000)
MdePkg/Include/Peim/PeiCis.h

index 91a77ef3c606470844fc4211ccf77f74a63a188a..513138be3fa266d315cfdce7502997aa264ff09c 100644 (file)
-/** @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
+/** @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
+#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
+#include <Protocol/Pcd.h>\r
+\r
+#endif\r