Revision number defines and MACROs were incorrect for the current version of the Specification (PI 1.7 Mantis 1892) Signed-off-by: Robert Phelps <robert@ami.com> Reviewed-by: Zhiguang Liu <zhiguang.liu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			1062 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1062 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  PI PEI master include file. This file should match the PI spec.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  PI Version 1.7.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __PI_PEICIS_H__
 | 
						|
#define __PI_PEICIS_H__
 | 
						|
 | 
						|
#include <Uefi/UefiMultiPhase.h>
 | 
						|
#include <Pi/PiMultiPhase.h>
 | 
						|
 | 
						|
///
 | 
						|
/// The handles of EFI FV.
 | 
						|
///
 | 
						|
typedef VOID    *EFI_PEI_FV_HANDLE;
 | 
						|
 | 
						|
///
 | 
						|
/// The handles of EFI FFS.
 | 
						|
///
 | 
						|
typedef VOID    *EFI_PEI_FILE_HANDLE;
 | 
						|
 | 
						|
///
 | 
						|
/// Declare the forward reference data structure for EFI_PEI_SERVICE.
 | 
						|
///
 | 
						|
typedef struct _EFI_PEI_SERVICES          EFI_PEI_SERVICES;
 | 
						|
 | 
						|
///
 | 
						|
/// Declare the forward reference data structure for EFI_PEI_NOTIFY_DESCRIPTOR.
 | 
						|
///
 | 
						|
typedef struct _EFI_PEI_NOTIFY_DESCRIPTOR EFI_PEI_NOTIFY_DESCRIPTOR;
 | 
						|
 | 
						|
 | 
						|
#include <Ppi/CpuIo.h>
 | 
						|
#include <Ppi/PciCfg2.h>
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  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  FileHandle       Pointer to the FFS file header.
 | 
						|
  @param  PeiServices      Describes the list of possible PEI Services.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS      The PEI completed successfully.
 | 
						|
  @retval !EFI_SUCCESS     There is error in PEIM.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEIM_ENTRY_POINT2)(
 | 
						|
  IN EFI_PEI_FILE_HANDLE             FileHandle,
 | 
						|
  IN CONST 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 of the notification.
 | 
						|
          The status code returned from this function is ignored.
 | 
						|
**/
 | 
						|
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
 | 
						|
 | 
						|
///
 | 
						|
/// The data structure through which a PEIM describes available services to the PEI Foundation.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// This field is a set of flags describing the characteristics of this imported table entry.
 | 
						|
  /// All flags are defined as EFI_PEI_PPI_DESCRIPTOR_***, which can also be combined into one.
 | 
						|
  ///
 | 
						|
  UINTN     Flags;
 | 
						|
  ///
 | 
						|
  /// The address of the EFI_GUID that names the interface.
 | 
						|
  ///
 | 
						|
  EFI_GUID  *Guid;
 | 
						|
  ///
 | 
						|
  /// A pointer to the PPI. It contains the information necessary to install a service.
 | 
						|
  ///
 | 
						|
  VOID      *Ppi;
 | 
						|
} EFI_PEI_PPI_DESCRIPTOR;
 | 
						|
 | 
						|
///
 | 
						|
/// The data structure in a given PEIM that tells the PEI
 | 
						|
/// Foundation where to invoke the notification service.
 | 
						|
///
 | 
						|
struct _EFI_PEI_NOTIFY_DESCRIPTOR {
 | 
						|
  ///
 | 
						|
  /// Details if the type of notification are callback or dispatch.
 | 
						|
  ///
 | 
						|
  UINTN                       Flags;
 | 
						|
  ///
 | 
						|
  /// The address of the EFI_GUID that names the interface.
 | 
						|
  ///
 | 
						|
  EFI_GUID                    *Guid;
 | 
						|
  ///
 | 
						|
  /// Address of the notification callback function itself within the PEIM.
 | 
						|
  ///
 | 
						|
  EFI_PEIM_NOTIFY_ENTRY_POINT Notify;
 | 
						|
};
 | 
						|
 | 
						|
///
 | 
						|
/// This data structure is the means by which callable services are installed and
 | 
						|
/// notifications are registered in the PEI phase.
 | 
						|
///
 | 
						|
typedef union {
 | 
						|
  ///
 | 
						|
  /// The typedef structure of the notification descriptor.
 | 
						|
  ///
 | 
						|
  EFI_PEI_NOTIFY_DESCRIPTOR   Notify;
 | 
						|
  ///
 | 
						|
  /// The typedef structure of the PPI descriptor.
 | 
						|
  ///
 | 
						|
  EFI_PEI_PPI_DESCRIPTOR      Ppi;
 | 
						|
} EFI_PEI_DESCRIPTOR;
 | 
						|
 | 
						|
/**
 | 
						|
  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 CONST EFI_PEI_SERVICES            **PeiServices,
 | 
						|
  IN CONST 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 CONST EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN CONST EFI_PEI_PPI_DESCRIPTOR          *OldPpi,
 | 
						|
  IN CONST 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 CONST EFI_PEI_SERVICES            **PeiServices,
 | 
						|
  IN CONST EFI_GUID                    *Guid,
 | 
						|
  IN UINTN                             Instance,
 | 
						|
  IN OUT   EFI_PEI_PPI_DESCRIPTOR      **PpiDescriptor OPTIONAL,
 | 
						|
  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_NOTIFY_TYPES 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 CONST EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN CONST 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 returned successfully.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_GET_BOOT_MODE)(
 | 
						|
  IN CONST 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 returned successfully.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_SET_BOOT_MODE)(
 | 
						|
  IN CONST 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 CONST EFI_PEI_SERVICES        **PeiServices,
 | 
						|
  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 CONST 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.
 | 
						|
 | 
						|
  This service enables PEIMs to discover additional firmware volumes. The PEI Foundation uses this
 | 
						|
  service to abstract the locations and formats of various firmware volumes. These volumes include
 | 
						|
  the Boot Firmware Volume and any other volumes exposed by EFI_PEI_FV_PPI. The service
 | 
						|
  returns a volume handle of type EFI_PEI_FV_HANDLE, which must be unique within the system.
 | 
						|
 | 
						|
  @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  VolumeHandle     On exit, points to the next volumn handle or NULL if it does not exist.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The volume was found.
 | 
						|
  @retval EFI_NOT_FOUND         The volume was not found.
 | 
						|
  @retval EFI_INVALID_PARAMETER VolumeHandle is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME2)(
 | 
						|
  IN CONST EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN UINTN                                 Instance,
 | 
						|
  OUT EFI_PEI_FV_HANDLE                    *VolumeHandle
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Searches for the next matching file in the firmware volume.
 | 
						|
 | 
						|
  This service enables PEIMs to discover firmware files within a specified volume.
 | 
						|
  To find the first instance of a firmware file, pass a FileHandle value of NULL into the service.
 | 
						|
  The service returns a file handle of type EFI_PEI_FILE_HANDLE, which must be unique within
 | 
						|
  the system.
 | 
						|
 | 
						|
  @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  FvHandle         Handle of firmware volume in which to search.
 | 
						|
  @param  FileHandle       On entry, points to the current handle from which to begin searching
 | 
						|
                           or NULL to start at the beginning of the firmware volume.
 | 
						|
                           On exit, points the file handle of the next file in the volume or NULL
 | 
						|
                           if there are no more files.
 | 
						|
 | 
						|
  @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_FILE2)(
 | 
						|
  IN CONST EFI_PEI_SERVICES                **PeiServices,
 | 
						|
  IN EFI_FV_FILETYPE                       SearchType,
 | 
						|
  IN CONST EFI_PEI_FV_HANDLE               FvHandle,
 | 
						|
  IN OUT EFI_PEI_FILE_HANDLE               *FileHandle
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Searches for the next matching section within the specified file.
 | 
						|
 | 
						|
  This service enables PEI modules to discover the first section of a given type within a valid file.
 | 
						|
  This service will search within encapsulation sections (compression and GUIDed) as well. It will
 | 
						|
  search inside of a GUIDed section or a compressed section, but may not, for example, search a
 | 
						|
  GUIDed section inside a GUIDes section.
 | 
						|
  This service will not search within compression sections or GUIDed sections that require
 | 
						|
  extraction if memory is not present.
 | 
						|
 | 
						|
  @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  FileHandle       Handle of the firmware file to search.
 | 
						|
  @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_DATA2)(
 | 
						|
  IN CONST EFI_PEI_SERVICES            **PeiServices,
 | 
						|
  IN EFI_SECTION_TYPE                  SectionType,
 | 
						|
  IN EFI_PEI_FILE_HANDLE               FileHandle,
 | 
						|
  OUT VOID                             **SectionData
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Searches for the next matching section within the specified file.
 | 
						|
 | 
						|
  This service enables PEI modules to discover the section of a given type within a valid file.
 | 
						|
  This service will search within encapsulation sections (compression and GUIDed) as well. It will
 | 
						|
  search inside of a GUIDed section or a compressed section, but may not, for example, search a
 | 
						|
  GUIDed section inside a GUIDes section.
 | 
						|
  This service will not search within compression sections or GUIDed sections that require
 | 
						|
  extraction if memory is not present.
 | 
						|
 | 
						|
  @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  SectionInstance       Section instance to find.
 | 
						|
  @param  FileHandle            Handle of the firmware file to search.
 | 
						|
  @param  SectionData           A pointer to the discovered section, if successful.
 | 
						|
  @param  AuthenticationStatus  A pointer to the authentication status for this section.
 | 
						|
 | 
						|
  @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_DATA3)(
 | 
						|
  IN CONST EFI_PEI_SERVICES            **PeiServices,
 | 
						|
  IN EFI_SECTION_TYPE                  SectionType,
 | 
						|
  IN UINTN                             SectionInstance,
 | 
						|
  IN EFI_PEI_FILE_HANDLE               FileHandle,
 | 
						|
  OUT VOID                             **SectionData,
 | 
						|
  OUT UINT32                           *AuthenticationStatus
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  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 CONST 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.
 | 
						|
 | 
						|
  Prior to InstallPeiMemory() being called, PEI will allocate pages from the heap.
 | 
						|
  After InstallPeiMemory() is called, PEI will allocate pages within the region
 | 
						|
  of memory provided by InstallPeiMemory() service in a best-effort fashion.
 | 
						|
  Location-specific allocations are not managed by the PEI foundation code.
 | 
						|
 | 
						|
  @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           A 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 The type is not equal to EfiLoaderCode, EfiLoaderData, EfiRuntimeServicesCode,
 | 
						|
                                EfiRuntimeServicesData, EfiBootServicesCode, EfiBootServicesData,
 | 
						|
                                EfiACPIReclaimMemory, EfiReservedMemoryType, or EfiACPIMemoryNVS.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_ALLOCATE_PAGES)(
 | 
						|
  IN CONST EFI_PEI_SERVICES     **PeiServices,
 | 
						|
  IN EFI_MEMORY_TYPE            MemoryType,
 | 
						|
  IN UINTN                      Pages,
 | 
						|
  OUT EFI_PHYSICAL_ADDRESS      *Memory
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Frees memory pages.
 | 
						|
 | 
						|
  @param[in] PeiServices        An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | 
						|
  @param[in] Memory             The base physical address of the pages to be freed.
 | 
						|
  @param[in] Pages              The number of contiguous 4 KB pages to free.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The requested pages were freed.
 | 
						|
  @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid.
 | 
						|
  @retval EFI_NOT_FOUND         The requested memory pages were not allocated with
 | 
						|
                                AllocatePages().
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_FREE_PAGES) (
 | 
						|
  IN CONST EFI_PEI_SERVICES     **PeiServices,
 | 
						|
  IN EFI_PHYSICAL_ADDRESS       Memory,
 | 
						|
  IN UINTN                      Pages
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  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 CONST EFI_PEI_SERVICES     **PeiServices,
 | 
						|
  IN UINTN                      Size,
 | 
						|
  OUT VOID                      **Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This service copies the contents of one buffer to another buffer.
 | 
						|
 | 
						|
  @param  Destination      The pointer to the destination buffer of the memory copy.
 | 
						|
  @param  Source           The pointer to the source buffer of the memory copy.
 | 
						|
  @param  Length           The number of bytes to copy from Source to Destination.
 | 
						|
 | 
						|
**/
 | 
						|
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           The pointer to the buffer to fill.
 | 
						|
  @param  Size             The number of bytes in Buffer to fill.
 | 
						|
  @param  Value            The value to fill Buffer with.
 | 
						|
 | 
						|
**/
 | 
						|
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.
 | 
						|
 | 
						|
  ReportStatusCode() is called by PEIMs that wish to report status information on their
 | 
						|
  progress. The principal use model is for a PEIM to emit one of the standard 32-bit error codes. This
 | 
						|
  will allow a platform owner to ascertain the state of the system, especially under conditions where
 | 
						|
  the full consoles might not have been installed.
 | 
						|
 | 
						|
  @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 CONST EFI_PEI_SERVICES         **PeiServices,
 | 
						|
  IN EFI_STATUS_CODE_TYPE           Type,
 | 
						|
  IN EFI_STATUS_CODE_VALUE          Value,
 | 
						|
  IN UINT32                         Instance,
 | 
						|
  IN CONST EFI_GUID                 *CallerId OPTIONAL,
 | 
						|
  IN CONST EFI_STATUS_CODE_DATA     *Data OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Resets the entire platform.
 | 
						|
 | 
						|
  This service resets the entire platform, including all processors
 | 
						|
  and devices, and reboots the system.
 | 
						|
  This service will never return EFI_SUCCESS.
 | 
						|
 | 
						|
  @param  PeiServices      An indirect pointer to the EFI_PEI_SERVICES
 | 
						|
                           table published by the PEI Foundation.
 | 
						|
 | 
						|
  @retval EFI_NOT_AVAILABLE_YET The service has not been installed yet.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_RESET_SYSTEM)(
 | 
						|
  IN CONST EFI_PEI_SERVICES   **PeiServices
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Resets the entire platform.
 | 
						|
 | 
						|
  @param[in] ResetType      The type of reset to perform.
 | 
						|
  @param[in] ResetStatus    The status code for the reset.
 | 
						|
  @param[in] DataSize       The size, in bytes, of ResetData.
 | 
						|
  @param[in] ResetData      For a ResetType of EfiResetCold, EfiResetWarm, or EfiResetShutdown
 | 
						|
                            the data buffer starts with a Null-terminated string, optionally
 | 
						|
                            followed by additional binary data. The string is a description
 | 
						|
                            that the caller may use to further indicate the reason for the
 | 
						|
                            system reset.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
VOID
 | 
						|
(EFIAPI *EFI_PEI_RESET2_SYSTEM) (
 | 
						|
  IN EFI_RESET_TYPE     ResetType,
 | 
						|
  IN EFI_STATUS         ResetStatus,
 | 
						|
  IN UINTN              DataSize,
 | 
						|
  IN VOID               *ResetData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Find a file within a volume by its name.
 | 
						|
 | 
						|
  This service searches for files with a specific name, within
 | 
						|
  either the specified firmware volume or all firmware volumes.
 | 
						|
  The service returns a file handle of type EFI_PEI_FILE_HANDLE,
 | 
						|
  which must be unique within the system.
 | 
						|
 | 
						|
  @param FileName       A pointer to the name of the file to
 | 
						|
                        find within the firmware volume.
 | 
						|
  @param VolumeHandle   The firmware volume to search.
 | 
						|
  @param FileHandle     Upon exit, points to the found file's
 | 
						|
                        handle or NULL if it could not be found.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The file was found.
 | 
						|
  @retval EFI_NOT_FOUND           The file was not found.
 | 
						|
  @retval EFI_INVALID_PARAMETER   VolumeHandle or FileHandle or
 | 
						|
                                  FileName was NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_FFS_FIND_BY_NAME)(
 | 
						|
  IN  CONST  EFI_GUID            *FileName,
 | 
						|
  IN  EFI_PEI_FV_HANDLE          VolumeHandle,
 | 
						|
  OUT EFI_PEI_FILE_HANDLE        *FileHandle
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// The information of the FV file.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Name of the file.
 | 
						|
  ///
 | 
						|
  EFI_GUID                FileName;
 | 
						|
  ///
 | 
						|
  /// File type.
 | 
						|
  ///
 | 
						|
  EFI_FV_FILETYPE         FileType;
 | 
						|
  ///
 | 
						|
  /// Attributes of the file.
 | 
						|
  ///
 | 
						|
  EFI_FV_FILE_ATTRIBUTES  FileAttributes;
 | 
						|
  ///
 | 
						|
  /// Points to the file's data (not the header).
 | 
						|
  /// Not valid if EFI_FV_FILE_ATTRIB_MEMORY_MAPPED
 | 
						|
  /// is zero.
 | 
						|
  ///
 | 
						|
  VOID                    *Buffer;
 | 
						|
  ///
 | 
						|
  /// Size of the file's data.
 | 
						|
  ///
 | 
						|
  UINT32                  BufferSize;
 | 
						|
} EFI_FV_FILE_INFO;
 | 
						|
 | 
						|
///
 | 
						|
/// The information with authentication status of the FV file.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Name of the file.
 | 
						|
  ///
 | 
						|
  EFI_GUID                FileName;
 | 
						|
  ///
 | 
						|
  /// File type.
 | 
						|
  ///
 | 
						|
  EFI_FV_FILETYPE         FileType;
 | 
						|
  ///
 | 
						|
  /// Attributes of the file.
 | 
						|
  ///
 | 
						|
  EFI_FV_FILE_ATTRIBUTES  FileAttributes;
 | 
						|
  ///
 | 
						|
  /// Points to the file's data (not the header).
 | 
						|
  /// Not valid if EFI_FV_FILE_ATTRIB_MEMORY_MAPPED
 | 
						|
  /// is zero.
 | 
						|
  ///
 | 
						|
  VOID                    *Buffer;
 | 
						|
  ///
 | 
						|
  /// Size of the file's data.
 | 
						|
  ///
 | 
						|
  UINT32                  BufferSize;
 | 
						|
  ///
 | 
						|
  /// Authentication status for this file.
 | 
						|
  ///
 | 
						|
  UINT32                  AuthenticationStatus;
 | 
						|
} EFI_FV_FILE_INFO2;
 | 
						|
 | 
						|
/**
 | 
						|
  Returns information about a specific file.
 | 
						|
 | 
						|
  This function returns information about a specific file,
 | 
						|
  including its file name, type, attributes, starting address and
 | 
						|
  size. If the firmware volume is not memory mapped, then the
 | 
						|
  Buffer member will be NULL.
 | 
						|
 | 
						|
  @param FileHandle   The handle of the file.
 | 
						|
  @param FileInfo     Upon exit, points to the file's
 | 
						|
                      information.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             File information was returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   FileHandle does not
 | 
						|
                                  represent a valid file.
 | 
						|
  @retval EFI_INVALID_PARAMETER   FileInfo is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_FFS_GET_FILE_INFO)(
 | 
						|
  IN  EFI_PEI_FILE_HANDLE         FileHandle,
 | 
						|
  OUT EFI_FV_FILE_INFO            *FileInfo
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Returns information about a specific file.
 | 
						|
 | 
						|
  This function returns information about a specific file,
 | 
						|
  including its file name, type, attributes, starting address, size and authentication status.
 | 
						|
  If the firmware volume is not memory mapped, then the Buffer member will be NULL.
 | 
						|
 | 
						|
  @param FileHandle   The handle of the file.
 | 
						|
  @param FileInfo     Upon exit, points to the file's
 | 
						|
                      information.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             File information was returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   FileHandle does not
 | 
						|
                                  represent a valid file.
 | 
						|
  @retval EFI_INVALID_PARAMETER   FileInfo is NULL.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_FFS_GET_FILE_INFO2)(
 | 
						|
  IN  EFI_PEI_FILE_HANDLE         FileHandle,
 | 
						|
  OUT EFI_FV_FILE_INFO2           *FileInfo
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// The information of the FV volume.
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Attributes of the firmware volume.
 | 
						|
  ///
 | 
						|
  EFI_FVB_ATTRIBUTES_2  FvAttributes;
 | 
						|
  ///
 | 
						|
  /// Format of the firmware volume.
 | 
						|
  ///
 | 
						|
  EFI_GUID              FvFormat;
 | 
						|
  ///
 | 
						|
  /// Name of the firmware volume.
 | 
						|
  ///
 | 
						|
  EFI_GUID              FvName;
 | 
						|
  ///
 | 
						|
  /// Points to the first byte of the firmware
 | 
						|
  /// volume, if bit EFI_FVB_MEMORY_MAPPED is
 | 
						|
  /// set in FvAttributes.
 | 
						|
  ///
 | 
						|
  VOID                  *FvStart;
 | 
						|
  ///
 | 
						|
  /// Size of the firmware volume.
 | 
						|
  ///
 | 
						|
  UINT64                FvSize;
 | 
						|
} EFI_FV_INFO;
 | 
						|
 | 
						|
/**
 | 
						|
  Returns information about the specified volume.
 | 
						|
 | 
						|
  This function returns information about a specific firmware
 | 
						|
  volume, including its name, type, attributes, starting address
 | 
						|
  and size.
 | 
						|
 | 
						|
  @param VolumeHandle   Handle of the volume.
 | 
						|
  @param VolumeInfo     Upon exit, points to the volume's information.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The volume information returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   If VolumeHandle does not represent a valid volume.
 | 
						|
  @retval EFI_INVALID_PARAMETER   If VolumeHandle is NULL.
 | 
						|
  @retval EFI_SUCCESS             Information was successfully returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER   The volume designated by the VolumeHandle is not available.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_FFS_GET_VOLUME_INFO)(
 | 
						|
  IN  EFI_PEI_FV_HANDLE       VolumeHandle,
 | 
						|
  OUT EFI_FV_INFO             *VolumeInfo
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Register a PEIM so that it will be shadowed and called again.
 | 
						|
 | 
						|
  This service registers a file handle so that after memory is
 | 
						|
  available, the PEIM will be re-loaded into permanent memory and
 | 
						|
  re-initialized. The PEIM registered this way will always be
 | 
						|
  initialized twice. The first time, this function call will
 | 
						|
  return EFI_SUCCESS. The second time, this function call will
 | 
						|
  return EFI_ALREADY_STARTED. Depending on the order in which
 | 
						|
  PEIMs are dispatched, the PEIM making this call may be
 | 
						|
  initialized after permanent memory is installed, even the first
 | 
						|
  time.
 | 
						|
 | 
						|
  @param  FileHandle            PEIM's file handle. Must be the currently
 | 
						|
                                executing PEIM.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The PEIM was successfully registered for
 | 
						|
                                shadowing.
 | 
						|
  @retval EFI_ALREADY_STARTED   The PEIM was previously
 | 
						|
                                registered for shadowing.
 | 
						|
  @retval EFI_NOT_FOUND         The FileHandle does not refer to a
 | 
						|
                                valid file handle.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PEI_REGISTER_FOR_SHADOW)(
 | 
						|
  IN  EFI_PEI_FILE_HANDLE FileHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// PEI Specification Revision information
 | 
						|
//
 | 
						|
#define PEI_SPECIFICATION_MAJOR_REVISION  1
 | 
						|
#define PEI_SPECIFICATION_MINOR_REVISION  70
 | 
						|
///
 | 
						|
/// Specification inconsistency here:
 | 
						|
/// In the PI1.0 spec, PEI_SERVICES_SIGNATURE is defined as 0x5652455320494550. But
 | 
						|
/// to pass a multiple tool chain, it appends an ULL.
 | 
						|
///
 | 
						|
//
 | 
						|
// PEI Services Table
 | 
						|
//
 | 
						|
#define PEI_SERVICES_SIGNATURE  0x5652455320494550ULL
 | 
						|
///
 | 
						|
/// Specification inconsistency here:
 | 
						|
/// In the PI1.0 specification, there is a typo error in PEI_SERVICES_REVISION. In the specification the defintion is
 | 
						|
/// #define ((PEI_SPECIFICATION_MAJOR_REVISION<<16) |(PEI_SPECIFICATION_MINOR_REVISION))
 | 
						|
/// and it should be as follows:
 | 
						|
///
 | 
						|
#define PEI_SERVICES_REVISION   ((PEI_SPECIFICATION_MAJOR_REVISION<<16) | (PEI_SPECIFICATION_MINOR_REVISION))
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_PEI_SERVICES is a collection of functions whose implementation is provided by the PEI
 | 
						|
/// Foundation. These services fall into various classes, including the following:
 | 
						|
/// - Managing the boot mode
 | 
						|
/// - Allocating both early and permanent memory
 | 
						|
/// - Supporting the Firmware File System (FFS)
 | 
						|
/// - Abstracting the PPI database abstraction
 | 
						|
/// - Creating Hand-Off Blocks (HOBs).
 | 
						|
///
 | 
						|
struct _EFI_PEI_SERVICES {
 | 
						|
  ///
 | 
						|
  /// The table header for the PEI Services Table.
 | 
						|
  ///
 | 
						|
  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;
 | 
						|
 | 
						|
  //
 | 
						|
  // Firmware Volume Functions
 | 
						|
  //
 | 
						|
  EFI_PEI_FFS_FIND_NEXT_VOLUME2   FfsFindNextVolume;
 | 
						|
  EFI_PEI_FFS_FIND_NEXT_FILE2     FfsFindNextFile;
 | 
						|
  EFI_PEI_FFS_FIND_SECTION_DATA2  FfsFindSectionData;
 | 
						|
 | 
						|
  //
 | 
						|
  // PEI 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      ReportStatusCode;
 | 
						|
 | 
						|
  //
 | 
						|
  // Reset
 | 
						|
  //
 | 
						|
  EFI_PEI_RESET_SYSTEM            ResetSystem;
 | 
						|
 | 
						|
  //
 | 
						|
  // (the following interfaces are installed by publishing PEIM)
 | 
						|
  // I/O Abstractions
 | 
						|
  //
 | 
						|
  EFI_PEI_CPU_IO_PPI              *CpuIo;
 | 
						|
  EFI_PEI_PCI_CFG2_PPI            *PciCfg;
 | 
						|
 | 
						|
  //
 | 
						|
  // Future Installed Services
 | 
						|
  //
 | 
						|
  EFI_PEI_FFS_FIND_BY_NAME        FfsFindFileByName;
 | 
						|
  EFI_PEI_FFS_GET_FILE_INFO       FfsGetFileInfo;
 | 
						|
  EFI_PEI_FFS_GET_VOLUME_INFO     FfsGetVolumeInfo;
 | 
						|
  EFI_PEI_REGISTER_FOR_SHADOW     RegisterForShadow;
 | 
						|
  EFI_PEI_FFS_FIND_SECTION_DATA3  FindSectionData3;
 | 
						|
  EFI_PEI_FFS_GET_FILE_INFO2      FfsGetFileInfo2;
 | 
						|
  EFI_PEI_RESET2_SYSTEM           ResetSystem2;
 | 
						|
  EFI_PEI_FREE_PAGES              FreePages;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
///
 | 
						|
/// EFI_SEC_PEI_HAND_OFF structure holds information about
 | 
						|
/// PEI core's operating environment, such as the size of location of
 | 
						|
/// temporary RAM, the stack location and BFV location.
 | 
						|
///
 | 
						|
typedef struct _EFI_SEC_PEI_HAND_OFF {
 | 
						|
  ///
 | 
						|
  /// Size of the data structure.
 | 
						|
  ///
 | 
						|
  UINT16  DataSize;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Points to the first byte of the boot firmware volume,
 | 
						|
  /// which the PEI Dispatcher should search for
 | 
						|
  /// PEI modules.
 | 
						|
  ///
 | 
						|
  VOID    *BootFirmwareVolumeBase;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Size of the boot firmware volume, in bytes.
 | 
						|
  ///
 | 
						|
  UINTN   BootFirmwareVolumeSize;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Points to the first byte of the temporary RAM.
 | 
						|
  ///
 | 
						|
  VOID    *TemporaryRamBase;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Size of the temporary RAM, in bytes.
 | 
						|
  ///
 | 
						|
  UINTN   TemporaryRamSize;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Points to the first byte of the temporary RAM
 | 
						|
  /// available for use by the PEI Foundation. The area
 | 
						|
  /// described by PeiTemporaryRamBase and PeiTemporaryRamSize
 | 
						|
  /// must not extend outside beyond the area described by
 | 
						|
  /// TemporaryRamBase & TemporaryRamSize. This area should not
 | 
						|
  /// overlap with the area reported by StackBase and
 | 
						|
  /// StackSize.
 | 
						|
  ///
 | 
						|
  VOID    *PeiTemporaryRamBase;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// The size of the available temporary RAM available for
 | 
						|
  /// use by the PEI Foundation, in bytes.
 | 
						|
  ///
 | 
						|
  UINTN   PeiTemporaryRamSize;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Points to the first byte of the stack.
 | 
						|
  /// This are may be part of the memory described by
 | 
						|
  /// TemporaryRamBase and TemporaryRamSize
 | 
						|
  /// or may be an entirely separate area.
 | 
						|
  ///
 | 
						|
  VOID    *StackBase;
 | 
						|
 | 
						|
  ///
 | 
						|
  /// Size of the stack, in bytes.
 | 
						|
  ///
 | 
						|
  UINTN   StackSize;
 | 
						|
} EFI_SEC_PEI_HAND_OFF;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  The entry point of PEI Foundation.
 | 
						|
 | 
						|
  This function is the entry point for the PEI Foundation, which
 | 
						|
  allows the SEC phase to pass information about the stack,
 | 
						|
  temporary RAM and the Boot Firmware Volume. In addition, it also
 | 
						|
  allows the SEC phase to pass services and data forward for use
 | 
						|
  during the PEI phase in the form of one or more PPIs. These PPI's
 | 
						|
  will be installed and/or immediately signaled if they are
 | 
						|
  notification type. There is no limit to the number of additional
 | 
						|
  PPIs that can be passed from SEC into the PEI Foundation. As part
 | 
						|
  of its initialization phase, the PEI Foundation will add these
 | 
						|
  SEC-hosted PPIs to its PPI database such that both the PEI
 | 
						|
  Foundation and any modules can leverage the associated service
 | 
						|
  calls and/or code in these early PPIs.
 | 
						|
 | 
						|
  @param SecCoreData    Points to a data structure containing
 | 
						|
                        information about the PEI core's
 | 
						|
                        operating environment, such as the size
 | 
						|
                        and location of temporary RAM, the stack
 | 
						|
                        location and the BFV location.
 | 
						|
 | 
						|
  @param PpiList        Points to a list of one or more PPI
 | 
						|
                        descriptors to be installed initially by
 | 
						|
                        the PEI core. An empty PPI list consists
 | 
						|
                        of a single descriptor with the end-tag
 | 
						|
                        EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST.
 | 
						|
                        As part of its initialization phase, the
 | 
						|
                        PEI Foundation will add these SEC-hosted
 | 
						|
                        PPIs to its PPI database such that both
 | 
						|
                        the PEI Foundation and any modules can
 | 
						|
                        leverage the associated service calls
 | 
						|
                        and/or code in these early PPIs.
 | 
						|
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
VOID
 | 
						|
(EFIAPI *EFI_PEI_CORE_ENTRY_POINT)(
 | 
						|
  IN CONST  EFI_SEC_PEI_HAND_OFF    *SecCoreData,
 | 
						|
  IN CONST  EFI_PEI_PPI_DESCRIPTOR  *PpiList
 | 
						|
);
 | 
						|
 | 
						|
#endif
 |