REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
		
			
				
	
	
		
			1057 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1057 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
 |