Signed-off-by: lzeng14 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12583 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			1632 lines
		
	
	
		
			55 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1632 lines
		
	
	
		
			55 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Definition of Pei Core Structures and Services
 | |
|   
 | |
| Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
 | |
| This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _PEI_MAIN_H_
 | |
| #define _PEI_MAIN_H_
 | |
| 
 | |
| #include <PiPei.h>
 | |
| #include <Ppi/DxeIpl.h>
 | |
| #include <Ppi/MemoryDiscovered.h>
 | |
| #include <Ppi/StatusCode.h>
 | |
| #include <Ppi/Reset.h>
 | |
| #include <Ppi/FirmwareVolume.h>
 | |
| #include <Ppi/FirmwareVolumeInfo.h>
 | |
| #include <Ppi/Decompress.h>
 | |
| #include <Ppi/GuidedSectionExtraction.h>
 | |
| #include <Ppi/LoadFile.h>
 | |
| #include <Ppi/Security2.h>
 | |
| #include <Ppi/TemporaryRamSupport.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/PeiCoreEntryPoint.h>
 | |
| #include <Library/BaseLib.h>
 | |
| #include <Library/HobLib.h>
 | |
| #include <Library/PerformanceLib.h>
 | |
| #include <Library/PeiServicesLib.h>
 | |
| #include <Library/ReportStatusCodeLib.h>
 | |
| #include <Library/PeCoffLib.h>
 | |
| #include <Library/PeCoffGetEntryPointLib.h>
 | |
| #include <Library/BaseMemoryLib.h>
 | |
| #include <Library/CacheMaintenanceLib.h>
 | |
| #include <Library/PcdLib.h>
 | |
| #include <IndustryStandard/PeImage.h>
 | |
| #include <Library/PeiServicesTablePointerLib.h>
 | |
| #include <Library/MemoryAllocationLib.h>
 | |
| #include <Guid/FirmwareFileSystem2.h>
 | |
| #include <Guid/FirmwareFileSystem3.h>
 | |
| #include <Guid/AprioriFileName.h>
 | |
| 
 | |
| ///
 | |
| /// It is an FFS type extension used for PeiFindFileEx. It indicates current
 | |
| /// Ffs searching is for all PEIMs can be dispatched by PeiCore.
 | |
| ///
 | |
| #define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE   0xff
 | |
| 
 | |
| ///
 | |
| /// Pei Core private data structures
 | |
| ///
 | |
| typedef union {
 | |
|   EFI_PEI_PPI_DESCRIPTOR      *Ppi;
 | |
|   EFI_PEI_NOTIFY_DESCRIPTOR   *Notify;
 | |
|   VOID                        *Raw;
 | |
| } PEI_PPI_LIST_POINTERS;
 | |
| 
 | |
| ///
 | |
| /// PPI database structure which contains two link: PpiList and NotifyList. PpiList
 | |
| /// is in head of PpiListPtrs array and notify is in end of PpiListPtrs.
 | |
| ///
 | |
| typedef struct {
 | |
|   ///
 | |
|   /// index of end of PpiList link list.
 | |
|   ///
 | |
|   INTN                    PpiListEnd;
 | |
|   ///
 | |
|   /// index of end of notify link list.
 | |
|   ///
 | |
|   INTN                    NotifyListEnd;
 | |
|   ///
 | |
|   /// index of the dispatched notify list.
 | |
|   ///
 | |
|   INTN                    DispatchListEnd;
 | |
|   ///
 | |
|   /// index of last installed Ppi description in PpiList link list.
 | |
|   ///
 | |
|   INTN                    LastDispatchedInstall;
 | |
|   ///
 | |
|   /// index of last dispatched notify in Notify link list.
 | |
|   /// 
 | |
|   INTN                    LastDispatchedNotify;
 | |
|   ///
 | |
|   /// Ppi database.
 | |
|   ///
 | |
|   PEI_PPI_LIST_POINTERS   PpiListPtrs[FixedPcdGet32 (PcdPeiCoreMaxPpiSupported)];
 | |
| } PEI_PPI_DATABASE;
 | |
| 
 | |
| 
 | |
| //
 | |
| // PEI_CORE_FV_HANDE.PeimState
 | |
| // Do not change these values as there is code doing math to change states.
 | |
| // Look for Private->Fv[FvCount].PeimState[PeimCount]++;
 | |
| //
 | |
| #define PEIM_STATE_NOT_DISPATCHED         0x00
 | |
| #define PEIM_STATE_DISPATCHED             0x01
 | |
| #define PEIM_STATE_REGISITER_FOR_SHADOW   0x02
 | |
| #define PEIM_STATE_DONE                   0x03
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_FIRMWARE_VOLUME_HEADER          *FvHeader;
 | |
|   EFI_PEI_FIRMWARE_VOLUME_PPI         *FvPpi;
 | |
|   EFI_PEI_FV_HANDLE                   FvHandle;
 | |
|   UINT8                               PeimState[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];
 | |
|   EFI_PEI_FILE_HANDLE                 FvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];
 | |
|   BOOLEAN                             ScanFv;
 | |
| } PEI_CORE_FV_HANDLE;
 | |
| 
 | |
| typedef struct {
 | |
|   EFI_GUID                            FvFormat;
 | |
|   VOID                                *FvInfo;
 | |
|   UINT32                              FvInfoSize;
 | |
|   EFI_PEI_NOTIFY_DESCRIPTOR           NotifyDescriptor;
 | |
| } PEI_CORE_UNKNOW_FORMAT_FV_INFO;
 | |
| 
 | |
| #define CACHE_SETION_MAX_NUMBER       0x10
 | |
| typedef struct {
 | |
|   EFI_COMMON_SECTION_HEADER*          Section[CACHE_SETION_MAX_NUMBER];
 | |
|   VOID*                               SectionData[CACHE_SETION_MAX_NUMBER];
 | |
|   UINTN                               SectionSize[CACHE_SETION_MAX_NUMBER];
 | |
|   UINTN                               AllSectionCount;
 | |
|   UINTN                               SectionIndex;
 | |
| } CACHE_SECTION_DATA;
 | |
| 
 | |
| ///
 | |
| /// Forward declaration for PEI_CORE_INSTANCE
 | |
| ///
 | |
| typedef struct _PEI_CORE_INSTANCE  PEI_CORE_INSTANCE;
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Function Pointer type for PeiCore function.
 | |
|   @param SecCoreData     Points to a data structure containing SEC to PEI handoff data, 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
 | |
|   @param OldCoreData     Pointer to old core data that is used to initialize the
 | |
|                          core's data areas.
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *PEICORE_FUNCTION_POINTER)(
 | |
|   IN CONST  EFI_SEC_PEI_HAND_OFF    *SecCoreData,
 | |
|   IN CONST  EFI_PEI_PPI_DESCRIPTOR  *PpiList,
 | |
|   IN PEI_CORE_INSTANCE              *OldCoreData
 | |
|   );
 | |
| 
 | |
| #define PEI_CORE_HANDLE_SIGNATURE  SIGNATURE_32('P','e','i','C')
 | |
| 
 | |
| ///
 | |
| /// Pei Core private data structure instance
 | |
| ///
 | |
| struct _PEI_CORE_INSTANCE {
 | |
|   UINTN                              Signature;
 | |
|   
 | |
|   ///
 | |
|   /// Point to ServiceTableShadow
 | |
|   ///
 | |
|   EFI_PEI_SERVICES                   *Ps;
 | |
|   PEI_PPI_DATABASE                   PpiData;
 | |
|   
 | |
|   ///
 | |
|   /// The count of FVs which contains FFS and could be dispatched by PeiCore.
 | |
|   ///
 | |
|   UINTN                              FvCount;
 | |
|   
 | |
|   ///
 | |
|   /// The instance arrary for FVs which contains FFS and could be dispatched by PeiCore.
 | |
|   ///
 | |
|   PEI_CORE_FV_HANDLE                 Fv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];
 | |
|   PEI_CORE_UNKNOW_FORMAT_FV_INFO     UnknownFvInfo[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];
 | |
|   UINTN                              UnknownFvInfoCount;
 | |
|   
 | |
|   EFI_PEI_FILE_HANDLE                CurrentFvFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];
 | |
|   UINTN                              AprioriCount;
 | |
|   UINTN                              CurrentPeimFvCount;
 | |
|   UINTN                              CurrentPeimCount;
 | |
|   EFI_PEI_FILE_HANDLE                CurrentFileHandle;
 | |
|   BOOLEAN                            PeimNeedingDispatch;
 | |
|   BOOLEAN                            PeimDispatchOnThisPass;
 | |
|   BOOLEAN                            PeimDispatcherReenter;
 | |
|   EFI_PEI_HOB_POINTERS               HobList;
 | |
|   BOOLEAN                            SwitchStackSignal;
 | |
|   BOOLEAN                            PeiMemoryInstalled;
 | |
|   VOID                               *CpuIo;
 | |
|   EFI_PEI_SECURITY2_PPI              *PrivateSecurityPpi;
 | |
|   EFI_PEI_SERVICES                   ServiceTableShadow;
 | |
|   EFI_PEI_PPI_DESCRIPTOR             *XipLoadFile;
 | |
|   EFI_PHYSICAL_ADDRESS               PhysicalMemoryBegin;
 | |
|   UINT64                             PhysicalMemoryLength;
 | |
|   EFI_PHYSICAL_ADDRESS               FreePhysicalMemoryTop;
 | |
|   UINTN                              HeapOffset;
 | |
|   BOOLEAN                            HeapOffsetPositive;
 | |
|   UINTN                              StackOffset;
 | |
|   BOOLEAN                            StackOffsetPositive;
 | |
|   PEICORE_FUNCTION_POINTER           ShadowedPeiCore;
 | |
|   CACHE_SECTION_DATA                 CacheSection;
 | |
|   //
 | |
|   // For Loading modules at fixed address feature to cache the top address below which the 
 | |
|   // Runtime code, boot time code and PEI memory will be placed. Please note that the offset between this field 
 | |
|   // and  Ps should not be changed since maybe user could get this top address by using the offet to Ps. 
 | |
|   //
 | |
|   EFI_PHYSICAL_ADDRESS               LoadModuleAtFixAddressTopAddress;
 | |
|   //
 | |
|   // The field is define for Loading modules at fixed address feature to tracker the PEI code
 | |
|   // memory range usage. It is a bit mapped array in which every bit indicates the correspoding memory page
 | |
|   // available or not. 
 | |
|   //
 | |
|   UINT64                            *PeiCodeMemoryRangeUsageBitMap;
 | |
|   //
 | |
|   // This field points to the shadowed image read function
 | |
|   //
 | |
|   PE_COFF_LOADER_READ_FILE          ShadowedImageRead;
 | |
| };
 | |
| 
 | |
| ///
 | |
| /// Pei Core Instance Data Macros
 | |
| ///
 | |
| #define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
 | |
|   CR(a, PEI_CORE_INSTANCE, Ps, PEI_CORE_HANDLE_SIGNATURE)
 | |
| 
 | |
| ///
 | |
| /// Union of temporarily used function pointers (to save stack space)
 | |
| ///
 | |
| typedef union {
 | |
|   PEICORE_FUNCTION_POINTER     PeiCore;
 | |
|   EFI_PEIM_ENTRY_POINT2        PeimEntry;
 | |
|   EFI_PEIM_NOTIFY_ENTRY_POINT  PeimNotifyEntry;
 | |
|   EFI_DXE_IPL_PPI              *DxeIpl;
 | |
|   EFI_PEI_PPI_DESCRIPTOR       *PpiDescriptor;
 | |
|   EFI_PEI_NOTIFY_DESCRIPTOR    *NotifyDescriptor;
 | |
|   VOID                         *Raw;
 | |
| } PEI_CORE_TEMP_POINTERS;
 | |
| 
 | |
| typedef struct {
 | |
|   CONST EFI_SEC_PEI_HAND_OFF    *SecCoreData;
 | |
|   EFI_PEI_PPI_DESCRIPTOR        *PpiList;
 | |
|   VOID                          *Data;
 | |
| } PEI_CORE_PARAMETERS;
 | |
| 
 | |
| //
 | |
| // PeiCore function
 | |
| //
 | |
| /**
 | |
| 
 | |
|   The entry routine to Pei Core, invoked by PeiMain during transition
 | |
|   from SEC to PEI. After switching stack in the PEI core, it will restart
 | |
|   with the old core data.
 | |
| 
 | |
| 
 | |
|   @param SecCoreData     Points to a data structure containing SEC to PEI handoff data, 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
 | |
|   @param Data            Pointer to old core data that is used to initialize the
 | |
|                          core's data areas.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiCore (
 | |
|   IN CONST EFI_SEC_PEI_HAND_OFF        *SecCoreData,
 | |
|   IN CONST EFI_PEI_PPI_DESCRIPTOR      *PpiList,
 | |
|   IN VOID                              *Data
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Dispatcher support functions
 | |
| //
 | |
| 
 | |
| /**
 | |
| 
 | |
|   This is the POSTFIX version of the dependency evaluator.  When a
 | |
|   PUSH [PPI GUID] is encountered, a pointer to the GUID is stored on
 | |
|   the evaluation stack.  When that entry is poped from the evaluation
 | |
|   stack, the PPI is checked if it is installed.  This method allows
 | |
|   some time savings as not all PPIs must be checked for certain
 | |
|   operation types (AND, OR).
 | |
| 
 | |
| 
 | |
|   @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param DependencyExpression   Pointer to a dependency expression.  The Grammar adheres to
 | |
|                                 the BNF described above and is stored in postfix notation.
 | |
| 
 | |
|   @retval TRUE      if it is a well-formed Grammar
 | |
|   @retval FALSE     if the dependency expression overflows the evaluation stack
 | |
|                     if the dependency expression underflows the evaluation stack
 | |
|                     if the dependency expression is not a well-formed Grammar.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| PeimDispatchReadiness (
 | |
|   IN EFI_PEI_SERVICES   **PeiServices,
 | |
|   IN VOID               *DependencyExpression
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Conduct PEIM dispatch.
 | |
| 
 | |
|   @param SecCoreData     Pointer to the data structure containing SEC to PEI handoff data
 | |
|   @param PrivateData     Pointer to the private data passed in from caller
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| PeiDispatcher (
 | |
|   IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,
 | |
|   IN PEI_CORE_INSTANCE           *PrivateData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Initialize the Dispatcher's data members
 | |
| 
 | |
|   @param PrivateData     PeiCore's private data structure
 | |
|   @param OldCoreData     Old data from SecCore
 | |
|                          NULL if being run in non-permament memory mode.
 | |
|   @param SecCoreData     Points to a data structure containing SEC to PEI handoff data, such as the size
 | |
|                          and location of temporary RAM, the stack location and the BFV location.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InitializeDispatcherData (
 | |
|   IN PEI_CORE_INSTANCE            *PrivateData,
 | |
|   IN PEI_CORE_INSTANCE            *OldCoreData,
 | |
|   IN CONST EFI_SEC_PEI_HAND_OFF   *SecCoreData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This routine parses the Dependency Expression, if available, and
 | |
|   decides if the module can be executed.
 | |
| 
 | |
| 
 | |
|   @param Private         PeiCore's private data structure
 | |
|   @param FileHandle      PEIM's file handle
 | |
|   @param PeimCount       The index of last dispatched PEIM.
 | |
| 
 | |
|   @retval TRUE           Can be dispatched
 | |
|   @retval FALSE          Cannot be dispatched
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| DepexSatisfied (
 | |
|   IN PEI_CORE_INSTANCE          *Private,
 | |
|   IN EFI_PEI_FILE_HANDLE        FileHandle,
 | |
|   IN UINTN                      PeimCount
 | |
|   );
 | |
| 
 | |
| //
 | |
| // PPI support functions
 | |
| //
 | |
| /**
 | |
| 
 | |
|   Initialize PPI services.
 | |
| 
 | |
|   @param PrivateData     Pointer to the PEI Core data.
 | |
|   @param OldCoreData     Pointer to old PEI Core data. 
 | |
|                          NULL if being run in non-permament memory mode.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InitializePpiServices (
 | |
|   IN PEI_CORE_INSTANCE   *PrivateData,
 | |
|   IN PEI_CORE_INSTANCE   *OldCoreData
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Migrate the Hob list from the temporary memory stack to PEI installed memory.
 | |
| 
 | |
|   @param SecCoreData     Points to a data structure containing SEC to PEI handoff data, such as the size 
 | |
|                          and location of temporary RAM, the stack location and the BFV location.
 | |
|   @param PrivateData     Pointer to PeiCore's private data structure.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ConvertPpiPointers (
 | |
|   IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,
 | |
|   IN PEI_CORE_INSTANCE           *PrivateData
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Install PPI services. It is implementation of EFI_PEI_SERVICE.InstallPpi.
 | |
| 
 | |
|   @param PeiServices                An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param PpiList                    Pointer to ppi array that want to be installed.
 | |
| 
 | |
|   @retval EFI_SUCCESS               if all PPIs in PpiList are successfully installed.
 | |
|   @retval EFI_INVALID_PARAMETER     if PpiList is NULL pointer
 | |
|                                     if any PPI in PpiList is not valid
 | |
|   @retval EFI_OUT_OF_RESOURCES      if there is no more memory resource to install PPI
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiInstallPpi (
 | |
|   IN CONST EFI_PEI_SERVICES        **PeiServices,
 | |
|   IN CONST EFI_PEI_PPI_DESCRIPTOR  *PpiList
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Re-Install PPI services.
 | |
| 
 | |
|   @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param OldPpi                 Pointer to the old PEI PPI Descriptors.
 | |
|   @param NewPpi                 Pointer to the new PEI PPI Descriptors.
 | |
| 
 | |
|   @retval EFI_SUCCESS           if the operation was successful
 | |
|   @retval EFI_INVALID_PARAMETER if OldPpi or NewPpi is NULL
 | |
|                                 if NewPpi is not valid
 | |
|   @retval EFI_NOT_FOUND         if the PPI was not in the database
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiReInstallPpi (
 | |
|   IN CONST EFI_PEI_SERVICES        **PeiServices,
 | |
|   IN CONST EFI_PEI_PPI_DESCRIPTOR  *OldPpi,
 | |
|   IN CONST EFI_PEI_PPI_DESCRIPTOR  *NewPpi
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Locate a given named PPI.
 | |
| 
 | |
| 
 | |
|   @param PeiServices     An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param Guid            Pointer to GUID of the PPI.
 | |
|   @param Instance        Instance Number to discover.
 | |
|   @param PpiDescriptor   Pointer to reference the found descriptor. If not NULL,
 | |
|                          returns a pointer to the descriptor (includes flags, etc)
 | |
|   @param Ppi             Pointer to reference the found PPI
 | |
| 
 | |
|   @retval EFI_SUCCESS   if the PPI is in the database
 | |
|   @retval EFI_NOT_FOUND if the PPI is not in the database
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiLocatePpi (
 | |
|   IN CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN CONST EFI_GUID              *Guid,
 | |
|   IN UINTN                       Instance,
 | |
|   IN OUT EFI_PEI_PPI_DESCRIPTOR  **PpiDescriptor,
 | |
|   IN OUT VOID                    **Ppi
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Install a notification for a given PPI.
 | |
| 
 | |
| 
 | |
|   @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param NotifyList             Pointer to list of Descriptors to notify upon.
 | |
| 
 | |
|   @retval EFI_SUCCESS           if successful
 | |
|   @retval EFI_OUT_OF_RESOURCES  if no space in the database
 | |
|   @retval EFI_INVALID_PARAMETER if not a good decriptor
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiNotifyPpi (
 | |
|   IN CONST EFI_PEI_SERVICES           **PeiServices,
 | |
|   IN CONST EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyList
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Process the Notify List at dispatch level.
 | |
| 
 | |
|   @param PrivateData  PeiCore's private data structure.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| ProcessNotifyList (
 | |
|   IN PEI_CORE_INSTANCE  *PrivateData
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Dispatch notifications.
 | |
| 
 | |
|   @param PrivateData        PeiCore's private data structure
 | |
|   @param NotifyType         Type of notify to fire.
 | |
|   @param InstallStartIndex  Install Beginning index.
 | |
|   @param InstallStopIndex   Install Ending index.
 | |
|   @param NotifyStartIndex   Notify Beginning index.
 | |
|   @param NotifyStopIndex    Notify Ending index.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| DispatchNotify (
 | |
|   IN PEI_CORE_INSTANCE  *PrivateData,
 | |
|   IN UINTN               NotifyType,
 | |
|   IN INTN                InstallStartIndex,
 | |
|   IN INTN                InstallStopIndex,
 | |
|   IN INTN                NotifyStartIndex,
 | |
|   IN INTN                NotifyStopIndex
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Boot mode support functions
 | |
| //
 | |
| /**
 | |
|   This service enables PEIMs to ascertain the present value of the boot mode.
 | |
| 
 | |
|   @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param BootMode               A pointer to contain the value of the boot mode.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The boot mode was returned successfully.
 | |
|   @retval EFI_INVALID_PARAMETER BootMode is NULL.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiGetBootMode (
 | |
|   IN CONST EFI_PEI_SERVICES  **PeiServices,
 | |
|   IN OUT   EFI_BOOT_MODE     *BootMode
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This service enables PEIMs to update the boot mode variable.
 | |
| 
 | |
| 
 | |
|   @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.
 | |
| 
 | |
|   @return EFI_SUCCESS    The value was successfully updated
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiSetBootMode (
 | |
|   IN CONST EFI_PEI_SERVICES  **PeiServices,
 | |
|   IN EFI_BOOT_MODE     BootMode
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Security support functions
 | |
| //
 | |
| /**
 | |
| 
 | |
|   Initialize the security services.
 | |
| 
 | |
|   @param PeiServices     An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param OldCoreData     Pointer to the old core data.
 | |
|                          NULL if being run in non-permament memory mode.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InitializeSecurityServices (
 | |
|   IN EFI_PEI_SERVICES  **PeiServices,
 | |
|   IN PEI_CORE_INSTANCE *OldCoreData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Verify a Firmware volume.
 | |
| 
 | |
|   @param CurrentFvAddress           Pointer to the current Firmware Volume under consideration
 | |
| 
 | |
|   @retval EFI_SUCCESS               Firmware Volume is legal
 | |
|   @retval EFI_SECURITY_VIOLATION    Firmware Volume fails integrity test
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| VerifyFv (
 | |
|   IN EFI_FIRMWARE_VOLUME_HEADER  *CurrentFvAddress
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Provide a callout to the security verification service.
 | |
| 
 | |
| 
 | |
|   @param PrivateData     PeiCore's private data structure
 | |
|   @param VolumeHandle    Handle of FV
 | |
|   @param FileHandle      Handle of PEIM's ffs
 | |
| 
 | |
|   @retval EFI_SUCCESS              Image is OK
 | |
|   @retval EFI_SECURITY_VIOLATION   Image is illegal
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| VerifyPeim (
 | |
|   IN PEI_CORE_INSTANCE      *PrivateData,
 | |
|   IN EFI_PEI_FV_HANDLE      VolumeHandle,
 | |
|   IN EFI_PEI_FILE_HANDLE    FileHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Gets the pointer to the HOB List.
 | |
| 
 | |
| 
 | |
|   @param PeiServices                   An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param HobList                       Pointer to the HOB List.
 | |
| 
 | |
|   @retval EFI_SUCCESS                  Get the pointer of HOB List
 | |
|   @retval EFI_NOT_AVAILABLE_YET        the HOB List is not yet published
 | |
|   @retval EFI_INVALID_PARAMETER        HobList is NULL (in debug mode)
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiGetHobList (
 | |
|   IN CONST EFI_PEI_SERVICES  **PeiServices,
 | |
|   IN OUT VOID          **HobList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Add a new HOB to the HOB List.
 | |
| 
 | |
|   @param PeiServices        An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param Type               Type of the new HOB.
 | |
|   @param Length             Length of the new HOB to allocate.
 | |
|   @param Hob                Pointer to the new HOB.
 | |
| 
 | |
|   @return  EFI_SUCCESS           Success to create hob.
 | |
|   @retval  EFI_INVALID_PARAMETER if Hob is NULL
 | |
|   @retval  EFI_NOT_AVAILABLE_YET if HobList is still not available.
 | |
|   @retval  EFI_OUT_OF_RESOURCES  if there is no more memory to grow the Hoblist.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiCreateHob (
 | |
|   IN CONST EFI_PEI_SERVICES  **PeiServices,
 | |
|   IN UINT16            Type,
 | |
|   IN UINT16            Length,
 | |
|   IN OUT VOID          **Hob
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Builds a Handoff Information Table HOB
 | |
| 
 | |
|   @param BootMode        - Current Bootmode
 | |
|   @param MemoryBegin     - Start Memory Address.
 | |
|   @param MemoryLength    - Length of Memory.
 | |
| 
 | |
|   @return EFI_SUCCESS Always success to initialize HOB.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PeiCoreBuildHobHandoffInfoTable (
 | |
|   IN EFI_BOOT_MODE         BootMode,
 | |
|   IN EFI_PHYSICAL_ADDRESS  MemoryBegin,
 | |
|   IN UINT64                MemoryLength
 | |
|   );
 | |
| 
 | |
| 
 | |
| //
 | |
| // FFS Fw Volume support functions
 | |
| //
 | |
| /**
 | |
|   Searches for the next matching file in the firmware volume.
 | |
| 
 | |
|   @param PeiServices     An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param SearchType      Filter to find only files of this type.
 | |
|                          Type EFI_FV_FILETYPE_ALL causes no filtering to be done.
 | |
|   @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_NOT_FOUND  The file was not found.
 | |
|   @retval EFI_NOT_FOUND  The header checksum was not zero.
 | |
|   @retval EFI_SUCCESS    The file was found.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiFfsFindNextFile (
 | |
|   IN CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN UINT8                       SearchType,
 | |
|   IN EFI_PEI_FV_HANDLE           FvHandle,
 | |
|   IN OUT EFI_PEI_FILE_HANDLE     *FileHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Searches for the next matching section within the specified file.
 | |
| 
 | |
|   @param PeiServices     An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation
 | |
|   @param SectionType     Filter to find only sections of this type.
 | |
|   @param FileHandle      Pointer to the current file to search.
 | |
|   @param SectionData     A pointer to the discovered section, if successful.
 | |
|                          NULL if section not found
 | |
| 
 | |
|   @retval EFI_NOT_FOUND  The section was not found.
 | |
|   @retval EFI_SUCCESS    The section was found.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiFfsFindSectionData (
 | |
|   IN CONST EFI_PEI_SERVICES    **PeiServices,
 | |
|   IN     EFI_SECTION_TYPE      SectionType,
 | |
|   IN     EFI_PEI_FILE_HANDLE   FileHandle,
 | |
|   OUT VOID                     **SectionData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Search the firmware volumes by index
 | |
| 
 | |
|   @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 volume handle or NULL if it does not exist.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER  VolumeHandle is NULL
 | |
|   @retval EFI_NOT_FOUND          The volume was not found.
 | |
|   @retval EFI_SUCCESS            The volume was found.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiFfsFindNextVolume (
 | |
|   IN CONST EFI_PEI_SERVICES          **PeiServices,
 | |
|   IN UINTN                           Instance,
 | |
|   IN OUT EFI_PEI_FV_HANDLE           *VolumeHandle
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Memory support functions
 | |
| //
 | |
| /**
 | |
| 
 | |
|   Initialize the memory services.
 | |
| 
 | |
|   @param PrivateData     PeiCore's private data structure
 | |
|   @param SecCoreData     Points to a data structure containing SEC to PEI handoff data, such as the size 
 | |
|                          and location of temporary RAM, the stack location and the BFV location.
 | |
|   @param OldCoreData     Pointer to the PEI Core data.
 | |
|                          NULL if being run in non-permament memory mode.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InitializeMemoryServices (
 | |
|   IN PEI_CORE_INSTANCE           *PrivateData,
 | |
|   IN CONST EFI_SEC_PEI_HAND_OFF  *SecCoreData,
 | |
|   IN PEI_CORE_INSTANCE           *OldCoreData
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Install the permanent memory is now available.
 | |
|   Creates HOB (PHIT and Stack).
 | |
| 
 | |
|   @param PeiServices     An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param MemoryBegin     Start of memory address.
 | |
|   @param MemoryLength    Length of memory.
 | |
| 
 | |
|   @return EFI_SUCCESS Always success.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiInstallPeiMemory (
 | |
|   IN CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN EFI_PHYSICAL_ADDRESS  MemoryBegin,
 | |
|   IN UINT64                MemoryLength
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Memory allocation service on permanent memory,
 | |
|   not usable prior to the memory installation.
 | |
| 
 | |
| 
 | |
|   @param PeiServices               An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param MemoryType                Type of memory to allocate.
 | |
|   @param Pages                     Number of pages to allocate.
 | |
|   @param Memory                    Pointer of memory allocated.
 | |
| 
 | |
|   @retval EFI_SUCCESS              The allocation was successful
 | |
|   @retval EFI_INVALID_PARAMETER    Only AllocateAnyAddress is supported.
 | |
|   @retval EFI_NOT_AVAILABLE_YET    Called with permanent memory not available
 | |
|   @retval EFI_OUT_OF_RESOURCES     There is not enough HOB heap to satisfy the requirement
 | |
|                                    to allocate the number of pages.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiAllocatePages (
 | |
|   IN CONST EFI_PEI_SERVICES           **PeiServices,
 | |
|   IN EFI_MEMORY_TYPE            MemoryType,
 | |
|   IN UINTN                      Pages,
 | |
|   OUT EFI_PHYSICAL_ADDRESS      *Memory
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Memory allocation service on the temporary memory.
 | |
| 
 | |
| 
 | |
|   @param PeiServices        An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param Size               Amount of memory required
 | |
|   @param Buffer             Address of pointer to the buffer
 | |
| 
 | |
|   @retval EFI_SUCCESS              The allocation was successful
 | |
|   @retval EFI_OUT_OF_RESOURCES     There is not enough heap to satisfy the requirement
 | |
|                                    to allocate the requested size.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiAllocatePool (
 | |
|   IN CONST EFI_PEI_SERVICES           **PeiServices,
 | |
|   IN UINTN                      Size,
 | |
|   OUT VOID                      **Buffer
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Routine for load image file.
 | |
| 
 | |
| 
 | |
|   @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param FileHandle             Pointer to the FFS file header of the image.
 | |
|   @param PeimState              The dispatch state of the input PEIM handle.
 | |
|   @param EntryPoint             Pointer to entry point of specified image file for output.
 | |
|   @param AuthenticationState    Pointer to attestation authentication state of image.
 | |
| 
 | |
|   @retval EFI_SUCCESS     Image is successfully loaded.
 | |
|   @retval EFI_NOT_FOUND   Fail to locate necessary PPI
 | |
|   @retval Others          Fail to load file.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| PeiLoadImage (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  EFI_PEI_FILE_HANDLE         FileHandle,
 | |
|   IN  UINT8                       PeimState,
 | |
|   OUT    EFI_PHYSICAL_ADDRESS     *EntryPoint,
 | |
|   OUT    UINT32                   *AuthenticationState
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Core version of the Status Code reporter
 | |
| 
 | |
| 
 | |
|   @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param CodeType               Type of Status Code.
 | |
|   @param Value                  Value to output for Status Code.
 | |
|   @param Instance               Instance Number of this status code.
 | |
|   @param CallerId               ID of the caller of this status code.
 | |
|   @param Data                   Optional data associated with this status code.
 | |
| 
 | |
|   @retval EFI_SUCCESS             if status code is successfully reported
 | |
|   @retval EFI_NOT_AVAILABLE_YET   if StatusCodePpi has not been installed
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiReportStatusCode (
 | |
|   IN CONST EFI_PEI_SERVICES         **PeiServices,
 | |
|   IN EFI_STATUS_CODE_TYPE     CodeType,
 | |
|   IN EFI_STATUS_CODE_VALUE    Value,
 | |
|   IN UINT32                   Instance,
 | |
|   IN CONST EFI_GUID                 *CallerId,
 | |
|   IN CONST EFI_STATUS_CODE_DATA     *Data OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Core version of the Reset System
 | |
| 
 | |
| 
 | |
|   @param PeiServices                An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
| 
 | |
|   @retval EFI_NOT_AVAILABLE_YET     PPI not available yet.
 | |
|   @retval EFI_DEVICE_ERROR          Did not reset system.
 | |
|                                     Otherwise, resets the system.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiResetSystem (
 | |
|   IN CONST EFI_PEI_SERVICES   **PeiServices
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Initialize PeiCore Fv List.
 | |
| 
 | |
| 
 | |
|   @param PrivateData     - Pointer to PEI_CORE_INSTANCE.
 | |
|   @param SecCoreData     - Pointer to EFI_SEC_PEI_HAND_OFF.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| PeiInitializeFv (
 | |
|   IN  PEI_CORE_INSTANCE           *PrivateData,
 | |
|   IN CONST EFI_SEC_PEI_HAND_OFF   *SecCoreData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Process Firmware Volum Information once FvInfoPPI install.
 | |
| 
 | |
|   @param PeiServices       An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param NotifyDescriptor  Address of the notification descriptor data structure.
 | |
|   @param Ppi               Address of the PPI that was installed.
 | |
| 
 | |
|   @retval EFI_SUCCESS if the interface could be successfully installed
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| FirmwareVolmeInfoPpiNotifyCallback (
 | |
|   IN EFI_PEI_SERVICES              **PeiServices,
 | |
|   IN EFI_PEI_NOTIFY_DESCRIPTOR     *NotifyDescriptor,
 | |
|   IN VOID                          *Ppi
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Given the input VolumeHandle, search for the next matching name file.
 | |
| 
 | |
|   @param FileName        File name to search.
 | |
|   @param VolumeHandle    The current FV to search.
 | |
|   @param FileHandle      Pointer to the file matching name in VolumeHandle.
 | |
|                          NULL if file not found
 | |
| 
 | |
|   @retval EFI_NOT_FOUND  No files matching the search criteria were found
 | |
|   @retval EFI_SUCCESS    Success to search given file
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiFfsFindFileByName (
 | |
|   IN  CONST EFI_GUID        *FileName,
 | |
|   IN  EFI_PEI_FV_HANDLE     VolumeHandle,
 | |
|   OUT EFI_PEI_FILE_HANDLE   *FileHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Returns information about a specific file.
 | |
| 
 | |
|   @param FileHandle       Handle of the file.
 | |
|   @param FileInfo         Upon exit, points to the file's information.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER If FileInfo is NULL.
 | |
|   @retval EFI_INVALID_PARAMETER If FileHandle does not represent a valid file.
 | |
|   @retval EFI_SUCCESS           File information returned.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiFfsGetFileInfo (
 | |
|   IN EFI_PEI_FILE_HANDLE  FileHandle,
 | |
|   OUT EFI_FV_FILE_INFO    *FileInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Returns information about the specified volume.
 | |
| 
 | |
|   @param VolumeHandle    Handle of the volume.
 | |
|   @param VolumeInfo      Upon exit, points to the volume's information.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER If VolumeHandle does not represent a valid volume.
 | |
|   @retval EFI_INVALID_PARAMETER If VolumeInfo is NULL.
 | |
|   @retval EFI_SUCCESS           Volume information returned.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiFfsGetVolumeInfo (
 | |
|   IN EFI_PEI_FV_HANDLE  VolumeHandle,
 | |
|   OUT EFI_FV_INFO       *VolumeInfo
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   This routine enable a PEIM to register itself to shadow when PEI Foundation
 | |
|   discovery permanent memory.
 | |
| 
 | |
|   @param FileHandle             File handle of a PEIM.
 | |
| 
 | |
|   @retval EFI_NOT_FOUND         The file handle doesn't point to PEIM itself.
 | |
|   @retval EFI_ALREADY_STARTED   Indicate that the PEIM has been registered itself.
 | |
|   @retval EFI_SUCCESS           Successfully to register itself.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiRegisterForShadow (
 | |
|   IN EFI_PEI_FILE_HANDLE       FileHandle
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Initialize image service that install PeiLoadFilePpi.
 | |
| 
 | |
|   @param PrivateData     Pointer to PeiCore's private data structure PEI_CORE_INSTANCE.
 | |
|   @param OldCoreData     Pointer to Old PeiCore's private data.
 | |
|                          If NULL, PeiCore is entered at first time, stack/heap in temporary memory.
 | |
|                          If not NULL, PeiCore is entered at second time, stack/heap has been moved
 | |
|                          to permenent memory.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| InitializeImageServices (
 | |
|   IN  PEI_CORE_INSTANCE   *PrivateData,
 | |
|   IN  PEI_CORE_INSTANCE   *OldCoreData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   The wrapper function of PeiLoadImageLoadImage().
 | |
| 
 | |
|   @param This                 Pointer to EFI_PEI_LOAD_FILE_PPI.
 | |
|   @param FileHandle           Pointer to the FFS file header of the image.
 | |
|   @param ImageAddressArg      Pointer to PE/TE image.
 | |
|   @param ImageSizeArg         Size of PE/TE image.
 | |
|   @param EntryPoint           Pointer to entry point of specified image file for output.
 | |
|   @param AuthenticationState  Pointer to attestation authentication state of image.
 | |
| 
 | |
|   @return Status of PeiLoadImageLoadImage().
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiLoadImageLoadImageWrapper (
 | |
|   IN     CONST EFI_PEI_LOAD_FILE_PPI  *This,
 | |
|   IN     EFI_PEI_FILE_HANDLE          FileHandle,
 | |
|   OUT    EFI_PHYSICAL_ADDRESS         *ImageAddressArg,  OPTIONAL
 | |
|   OUT    UINT64                       *ImageSizeArg,     OPTIONAL
 | |
|   OUT    EFI_PHYSICAL_ADDRESS         *EntryPoint,
 | |
|   OUT    UINT32                       *AuthenticationState
 | |
|   );
 | |
| 
 | |
| /**
 | |
| 
 | |
|   Provide a callback for when the security PPI is installed.
 | |
| 
 | |
|   @param PeiServices        An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
 | |
|   @param NotifyDescriptor   The descriptor for the notification event.
 | |
|   @param Ppi                Pointer to the PPI in question.
 | |
| 
 | |
|   @return Always success
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| SecurityPpiNotifyCallback (
 | |
|   IN EFI_PEI_SERVICES           **PeiServices,
 | |
|   IN EFI_PEI_NOTIFY_DESCRIPTOR  *NotifyDescriptor,
 | |
|   IN VOID                       *Ppi
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get Fv image from the FV type file, then install FV INFO ppi, Build FV hob.
 | |
| 
 | |
|   @param ParentFvCoreHandle   Pointer of EFI_CORE_FV_HANDLE to parent Fv image that contain this Fv image.
 | |
|   @param ParentFvFileHandle   File handle of a Fv type file that contain this Fv image.
 | |
| 
 | |
|   @retval EFI_NOT_FOUND         FV image can't be found.
 | |
|   @retval EFI_SUCCESS           Successfully to process it.
 | |
|   @retval EFI_OUT_OF_RESOURCES  Can not allocate page when aligning FV image
 | |
|   @retval Others                Can not find EFI_SECTION_FIRMWARE_VOLUME_IMAGE section
 | |
|   
 | |
| **/
 | |
| EFI_STATUS
 | |
| ProcessFvFile (
 | |
|   IN  PEI_CORE_FV_HANDLE          *ParentFvCoreHandle,
 | |
|   IN  EFI_PEI_FILE_HANDLE         ParentFvFileHandle
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Get instance of PEI_CORE_FV_HANDLE for next volume according to given index.
 | |
|   
 | |
|   This routine also will install FvInfo ppi for FV hob in PI ways.
 | |
|   
 | |
|   @param Private    Pointer of PEI_CORE_INSTANCE
 | |
|   @param Instance   The index of FV want to be searched.
 | |
|   
 | |
|   @return Instance of PEI_CORE_FV_HANDLE.
 | |
| **/
 | |
| PEI_CORE_FV_HANDLE *
 | |
| FindNextCoreFvHandle (
 | |
|   IN PEI_CORE_INSTANCE  *Private,
 | |
|   IN UINTN              Instance
 | |
|   );
 | |
|     
 | |
| //
 | |
| // Default EFI_PEI_CPU_IO_PPI support for EFI_PEI_SERVICES table when PeiCore initialization.
 | |
| //    
 | |
| 
 | |
| /**
 | |
|   Memory-based read services.
 | |
|   
 | |
|   This function is to perform the Memory Access Read service based on installed 
 | |
|   instance of the EFI_PEI_CPU_IO_PPI. 
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return EFI_NOT_YET_AVAILABLE. 
 | |
|    
 | |
|   @param  PeiServices           An indirect pointer to the PEI Services Table
 | |
|                                 published by the PEI Foundation.
 | |
|   @param  This                  Pointer to local data for the interface.
 | |
|   @param  Width                 The width of the access. Enumerated in bytes.
 | |
|   @param  Address               The physical address of the access.
 | |
|   @param  Count                 The number of accesses to perform.
 | |
|   @param  Buffer                A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_NOT_YET_AVAILABLE The service has not been installed.     
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultMemRead (
 | |
|   IN  CONST EFI_PEI_SERVICES            **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI          *This,
 | |
|   IN  EFI_PEI_CPU_IO_PPI_WIDTH          Width,
 | |
|   IN  UINT64                            Address,
 | |
|   IN  UINTN                             Count,
 | |
|   IN  OUT VOID                          *Buffer
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Memory-based write services.
 | |
|    
 | |
|   This function is to perform the Memory Access Write service based on installed 
 | |
|   instance of the EFI_PEI_CPU_IO_PPI. 
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return EFI_NOT_YET_AVAILABLE. 
 | |
|    
 | |
|   @param  PeiServices           An indirect pointer to the PEI Services Table
 | |
|                                 published by the PEI Foundation.
 | |
|   @param  This                  Pointer to local data for the interface.
 | |
|   @param  Width                 The width of the access. Enumerated in bytes.
 | |
|   @param  Address               The physical address of the access.
 | |
|   @param  Count                 The number of accesses to perform.
 | |
|   @param  Buffer                A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_NOT_YET_AVAILABLE The service has not been installed.     
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultMemWrite (
 | |
|   IN  CONST EFI_PEI_SERVICES            **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI          *This,
 | |
|   IN  EFI_PEI_CPU_IO_PPI_WIDTH          Width,
 | |
|   IN  UINT64                            Address,
 | |
|   IN  UINTN                             Count,
 | |
|   IN  OUT VOID                          *Buffer
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   IO-based read services.
 | |
|   
 | |
|   This function is to perform the IO-base read service for the EFI_PEI_CPU_IO_PPI.
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return EFI_NOT_YET_AVAILABLE. 
 | |
|   
 | |
|   @param  PeiServices           An indirect pointer to the PEI Services Table
 | |
|                                 published by the PEI Foundation.
 | |
|   @param  This                  Pointer to local data for the interface.
 | |
|   @param  Width                 The width of the access. Enumerated in bytes.
 | |
|   @param  Address               The physical address of the access.
 | |
|   @param  Count                 The number of accesses to perform.
 | |
|   @param  Buffer                A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_NOT_YET_AVAILABLE The service has not been installed.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultIoRead (
 | |
|   IN      CONST EFI_PEI_SERVICES          **PeiServices,
 | |
|   IN      CONST EFI_PEI_CPU_IO_PPI        *This,
 | |
|   IN      EFI_PEI_CPU_IO_PPI_WIDTH        Width,
 | |
|   IN      UINT64                          Address,
 | |
|   IN      UINTN                           Count,
 | |
|   IN OUT  VOID                            *Buffer
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   IO-based write services.
 | |
|   
 | |
|   This function is to perform the IO-base write service for the EFI_PEI_CPU_IO_PPI.
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return EFI_NOT_YET_AVAILABLE. 
 | |
|   
 | |
|   @param  PeiServices           An indirect pointer to the PEI Services Table
 | |
|                                 published by the PEI Foundation.
 | |
|   @param  This                  Pointer to local data for the interface.
 | |
|   @param  Width                 The width of the access. Enumerated in bytes.
 | |
|   @param  Address               The physical address of the access.
 | |
|   @param  Count                 The number of accesses to perform.
 | |
|   @param  Buffer                A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_NOT_YET_AVAILABLE The service has not been installed.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultIoWrite (
 | |
|   IN      CONST EFI_PEI_SERVICES          **PeiServices,
 | |
|   IN      CONST EFI_PEI_CPU_IO_PPI        *This,
 | |
|   IN      EFI_PEI_CPU_IO_PPI_WIDTH        Width,
 | |
|   IN      UINT64                          Address,
 | |
|   IN      UINTN                           Count,
 | |
|   IN OUT  VOID                            *Buffer
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   8-bit I/O read operations.
 | |
|   
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return An 8-bit value returned from the I/O space.
 | |
| **/
 | |
| UINT8
 | |
| EFIAPI
 | |
| PeiDefaultIoRead8 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Reads an 16-bit I/O port.
 | |
|   
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return A 16-bit value returned from the I/O space.
 | |
| **/
 | |
| UINT16
 | |
| EFIAPI
 | |
| PeiDefaultIoRead16 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Reads an 32-bit I/O port.
 | |
|   
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return A 32-bit value returned from the I/O space.
 | |
| **/
 | |
| UINT32
 | |
| EFIAPI
 | |
| PeiDefaultIoRead32 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Reads an 64-bit I/O port.
 | |
|   
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return A 64-bit value returned from the I/O space.
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| PeiDefaultIoRead64 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   8-bit I/O write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultIoWrite8 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address,
 | |
|   IN  UINT8                       Data
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   16-bit I/O write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultIoWrite16 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address,
 | |
|   IN  UINT16                      Data
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   32-bit I/O write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultIoWrite32 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address,
 | |
|   IN  UINT32                      Data
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   64-bit I/O write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultIoWrite64 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address,
 | |
|   IN  UINT64                      Data
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   8-bit memory read operations.
 | |
| 
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return An 8-bit value returned from the memory space.
 | |
| 
 | |
| **/
 | |
| UINT8
 | |
| EFIAPI
 | |
| PeiDefaultMemRead8 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   16-bit memory read operations.
 | |
| 
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return An 16-bit value returned from the memory space.
 | |
| 
 | |
| **/
 | |
| UINT16
 | |
| EFIAPI
 | |
| PeiDefaultMemRead16 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   32-bit memory read operations.
 | |
| 
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return An 32-bit value returned from the memory space.
 | |
| 
 | |
| **/
 | |
| UINT32
 | |
| EFIAPI
 | |
| PeiDefaultMemRead32 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   64-bit memory read operations.
 | |
| 
 | |
|   If the EFI_PEI_CPU_IO_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return 0.
 | |
|   
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
| 
 | |
|   @return An 64-bit value returned from the memory space.
 | |
| 
 | |
| **/
 | |
| UINT64
 | |
| EFIAPI
 | |
| PeiDefaultMemRead64 (
 | |
|   IN  CONST EFI_PEI_SERVICES      **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI    *This,
 | |
|   IN  UINT64                      Address
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   8-bit memory write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultMemWrite8 (
 | |
|   IN  CONST EFI_PEI_SERVICES        **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI      *This,
 | |
|   IN  UINT64                        Address,
 | |
|   IN  UINT8                         Data
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   16-bit memory write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultMemWrite16 (
 | |
|   IN  CONST EFI_PEI_SERVICES        **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI      *This,
 | |
|   IN  UINT64                        Address,
 | |
|   IN  UINT16                        Data
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   32-bit memory write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultMemWrite32 (
 | |
|   IN  CONST EFI_PEI_SERVICES        **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI      *This,
 | |
|   IN  UINT64                        Address,
 | |
|   IN  UINT32                        Data
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   64-bit memory write operations.
 | |
| 
 | |
|   @param  PeiServices    An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This           Pointer to local data for the interface.
 | |
|   @param  Address        The physical address of the access.
 | |
|   @param  Data           The data to write.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| EFIAPI
 | |
| PeiDefaultMemWrite64 (
 | |
|   IN  CONST EFI_PEI_SERVICES        **PeiServices,
 | |
|   IN  CONST EFI_PEI_CPU_IO_PPI      *This,
 | |
|   IN  UINT64                        Address,
 | |
|   IN  UINT64                        Data
 | |
|   );
 | |
|   
 | |
| extern EFI_PEI_CPU_IO_PPI gPeiDefaultCpuIoPpi;                                        
 | |
| 
 | |
| //
 | |
| // Default EFI_PEI_PCI_CFG2_PPI support for EFI_PEI_SERVICES table when PeiCore initialization.
 | |
| // 
 | |
| 
 | |
| /**
 | |
|   Reads from a given location in the PCI configuration space.
 | |
| 
 | |
|   If the EFI_PEI_PCI_CFG2_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return EFI_NOT_YET_AVAILABLE. 
 | |
|   
 | |
|   @param  PeiServices     An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This            Pointer to local data for the interface.
 | |
|   @param  Width           The width of the access. Enumerated in bytes.
 | |
|                           See EFI_PEI_PCI_CFG_PPI_WIDTH above.
 | |
|   @param  Address         The physical address of the access. The format of
 | |
|                           the address is described by EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS.
 | |
|   @param  Buffer          A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER The invalid access width.
 | |
|   @retval EFI_NOT_YET_AVAILABLE If the EFI_PEI_PCI_CFG2_PPI is not installed by platform/chipset PEIM.
 | |
|   
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultPciCfg2Read (
 | |
|   IN CONST  EFI_PEI_SERVICES          **PeiServices,
 | |
|   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,
 | |
|   IN        EFI_PEI_PCI_CFG_PPI_WIDTH Width,
 | |
|   IN        UINT64                    Address,
 | |
|   IN OUT    VOID                      *Buffer
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   Write to a given location in the PCI configuration space.
 | |
| 
 | |
|   If the EFI_PEI_PCI_CFG2_PPI is not installed by platform/chipset PEIM, then 
 | |
|   return EFI_NOT_YET_AVAILABLE. 
 | |
|   
 | |
|   @param  PeiServices     An indirect pointer to the PEI Services Table published by the PEI Foundation.
 | |
|   @param  This            Pointer to local data for the interface.
 | |
|   @param  Width           The width of the access. Enumerated in bytes.
 | |
|                           See EFI_PEI_PCI_CFG_PPI_WIDTH above.
 | |
|   @param  Address         The physical address of the access. The format of
 | |
|                           the address is described by EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS.
 | |
|   @param  Buffer          A pointer to the buffer of data.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER The invalid access width.
 | |
|   @retval EFI_NOT_YET_AVAILABLE If the EFI_PEI_PCI_CFG2_PPI is not installed by platform/chipset PEIM.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultPciCfg2Write (
 | |
|   IN CONST  EFI_PEI_SERVICES          **PeiServices,
 | |
|   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,
 | |
|   IN        EFI_PEI_PCI_CFG_PPI_WIDTH Width,
 | |
|   IN        UINT64                    Address,
 | |
|   IN OUT    VOID                      *Buffer
 | |
|   );
 | |
|   
 | |
| /**
 | |
|   This function performs a read-modify-write operation on the contents from a given
 | |
|   location in the PCI configuration space.
 | |
| 
 | |
|   @param  PeiServices     An indirect pointer to the PEI Services Table
 | |
|                           published by the PEI Foundation.
 | |
|   @param  This            Pointer to local data for the interface.
 | |
|   @param  Width           The width of the access. Enumerated in bytes. Type
 | |
|                           EFI_PEI_PCI_CFG_PPI_WIDTH is defined in Read().
 | |
|   @param  Address         The physical address of the access.
 | |
|   @param  SetBits         Points to value to bitwise-OR with the read configuration value.
 | |
|                           The size of the value is determined by Width.
 | |
|   @param  ClearBits       Points to the value to negate and bitwise-AND with the read configuration value.
 | |
|                           The size of the value is determined by Width.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The function completed successfully.
 | |
|   @retval EFI_INVALID_PARAMETER The invalid access width.
 | |
|   @retval EFI_NOT_YET_AVAILABLE If the EFI_PEI_PCI_CFG2_PPI is not installed by platform/chipset PEIM.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| PeiDefaultPciCfg2Modify (
 | |
|   IN CONST  EFI_PEI_SERVICES          **PeiServices,
 | |
|   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,
 | |
|   IN        EFI_PEI_PCI_CFG_PPI_WIDTH Width,
 | |
|   IN        UINT64                    Address,
 | |
|   IN        VOID                      *SetBits,
 | |
|   IN        VOID                      *ClearBits
 | |
|   );    
 | |
|   
 | |
| extern EFI_PEI_PCI_CFG2_PPI gPeiDefaultPciCfg2Ppi;
 | |
| 
 | |
| /**
 | |
|   After PeiCore image is shadowed into permanent memory, all build-in FvPpi should
 | |
|   be re-installed with the instance in permanent memory and all cached FvPpi pointers in 
 | |
|   PrivateData->Fv[] array should be fixed up to be pointed to the one in permenant
 | |
|   memory.
 | |
|   
 | |
|   @param PrivateData   Pointer to PEI_CORE_INSTANCE.
 | |
| **/  
 | |
| VOID
 | |
| PeiReinitializeFv (
 | |
|   IN  PEI_CORE_INSTANCE           *PrivateData
 | |
|   );
 | |
|       
 | |
| #endif
 |