2. DxeMain will get Vector Handoff Table GUIDed HOB to install configuration table if it has. 3. Updated CPU Exception Handler Library to provide 3 new APIs to replace original one API and updated NULL instance accordingly. 4. Updated DxeMain/CapsuleX64/BootSriptExectorDxe to use the new API in CPU Exception Handler Lib. Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14884 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			226 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Master header file for DxeIpl PEIM. All source files in this module should
 | 
						|
  include this file for common definitions.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2013, 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_DXEIPL_H__
 | 
						|
#define __PEI_DXEIPL_H__
 | 
						|
 | 
						|
#include <PiPei.h>
 | 
						|
#include <Ppi/DxeIpl.h>
 | 
						|
#include <Ppi/EndOfPeiPhase.h>
 | 
						|
#include <Ppi/MemoryDiscovered.h>
 | 
						|
#include <Ppi/ReadOnlyVariable2.h>
 | 
						|
#include <Ppi/Decompress.h>
 | 
						|
#include <Ppi/FirmwareVolumeInfo.h>
 | 
						|
#include <Ppi/GuidedSectionExtraction.h>
 | 
						|
#include <Ppi/LoadFile.h>
 | 
						|
#include <Ppi/S3Resume2.h>
 | 
						|
#include <Ppi/RecoveryModule.h>
 | 
						|
#include <Ppi/VectorHandoffInfo.h>
 | 
						|
 | 
						|
#include <Guid/MemoryTypeInformation.h>
 | 
						|
#include <Guid/MemoryAllocationHob.h>
 | 
						|
#include <Guid/FirmwareFileSystem2.h>
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/PeimEntryPoint.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/HobLib.h>
 | 
						|
#include <Library/PeiServicesLib.h>
 | 
						|
#include <Library/ReportStatusCodeLib.h>
 | 
						|
#include <Library/UefiDecompressLib.h>
 | 
						|
#include <Library/ExtractGuidedSectionLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
#include <Library/S3Lib.h>
 | 
						|
#include <Library/RecoveryLib.h>
 | 
						|
#include <Library/DebugAgentLib.h>
 | 
						|
#include <Library/PeiServicesTablePointerLib.h>
 | 
						|
 | 
						|
#define STACK_SIZE      0x20000
 | 
						|
#define BSP_STORE_SIZE  0x4000
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// This PPI is installed to indicate the end of the PEI usage of memory
 | 
						|
//
 | 
						|
extern CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
   Searches DxeCore in all firmware Volumes and loads the first
 | 
						|
   instance that contains DxeCore.
 | 
						|
 | 
						|
   @return FileHandle of DxeCore to load DxeCore.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_PEI_FILE_HANDLE
 | 
						|
DxeIplFindDxeCore (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
   Main entry point to last PEIM
 | 
						|
 | 
						|
   @param This          Entry point for DXE IPL PPI
 | 
						|
   @param PeiServices   General purpose services available to every PEIM.
 | 
						|
   @param HobList       Address to the Pei HOB list
 | 
						|
 | 
						|
   @return EFI_SUCCESS              DXE core was successfully loaded.
 | 
						|
   @return EFI_OUT_OF_RESOURCES     There are not enough resources to load DXE core.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DxeLoadCore (
 | 
						|
  IN CONST EFI_DXE_IPL_PPI *This,
 | 
						|
  IN EFI_PEI_SERVICES      **PeiServices,
 | 
						|
  IN EFI_PEI_HOB_POINTERS  HobList
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
   Transfers control to DxeCore.
 | 
						|
 | 
						|
   This function performs a CPU architecture specific operations to execute
 | 
						|
   the entry point of DxeCore with the parameters of HobList.
 | 
						|
   It also installs EFI_END_OF_PEI_PPI to signal the end of PEI phase.
 | 
						|
 | 
						|
   @param DxeCoreEntryPoint         The entry point of DxeCore.
 | 
						|
   @param HobList                   The start of HobList passed to DxeCore.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
HandOffToDxeCore (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS   DxeCoreEntryPoint,
 | 
						|
  IN EFI_PEI_HOB_POINTERS   HobList
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
   Updates the Stack HOB passed to DXE phase.
 | 
						|
 | 
						|
   This function traverses the whole HOB list and update the stack HOB to
 | 
						|
   reflect the real stack that is used by DXE core.
 | 
						|
 | 
						|
   @param BaseAddress           The lower address of stack used by DxeCore.
 | 
						|
   @param Length                The length of stack used by DxeCore.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
UpdateStackHob (
 | 
						|
  IN EFI_PHYSICAL_ADDRESS        BaseAddress,
 | 
						|
  IN UINT64                      Length
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The ExtractSection() function processes the input section and
 | 
						|
  returns a pointer to the section contents. If the section being
 | 
						|
  extracted does not require processing (if the section
 | 
						|
  GuidedSectionHeader.Attributes has the
 | 
						|
  EFI_GUIDED_SECTION_PROCESSING_REQUIRED field cleared), then
 | 
						|
  OutputBuffer is just updated to point to the start of the
 | 
						|
  section's contents. Otherwise, *Buffer must be allocated
 | 
						|
  from PEI permanent memory.
 | 
						|
 | 
						|
  @param This                   Indicates the
 | 
						|
                                EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI instance.
 | 
						|
                                Buffer containing the input GUIDed section to be
 | 
						|
                                processed. OutputBuffer OutputBuffer is
 | 
						|
                                allocated from PEI permanent memory and contains
 | 
						|
                                the new section stream.
 | 
						|
  @param InputSection           A pointer to the input buffer, which contains
 | 
						|
                                the input section to be processed.
 | 
						|
  @param OutputBuffer           A pointer to a caller-allocated buffer, whose
 | 
						|
                                size is specified by the contents of OutputSize.
 | 
						|
  @param OutputSize             A pointer to a caller-allocated
 | 
						|
                                UINTN in which the size of *OutputBuffer
 | 
						|
                                allocation is stored. If the function
 | 
						|
                                returns anything other than EFI_SUCCESS,
 | 
						|
                                the value of OutputSize is undefined.
 | 
						|
  @param AuthenticationStatus   A pointer to a caller-allocated
 | 
						|
                                UINT32 that indicates the
 | 
						|
                                authentication status of the
 | 
						|
                                output buffer. If the input
 | 
						|
                                section's GuidedSectionHeader.
 | 
						|
                                Attributes field has the
 | 
						|
                                EFI_GUIDED_SECTION_AUTH_STATUS_VALID
 | 
						|
                                bit as clear,
 | 
						|
                                AuthenticationStatus must return
 | 
						|
                                zero. These bits reflect the
 | 
						|
                                status of the extraction
 | 
						|
                                operation. If the function
 | 
						|
                                returns anything other than
 | 
						|
                                EFI_SUCCESS, the value of
 | 
						|
                                AuthenticationStatus is
 | 
						|
                                undefined.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The InputSection was
 | 
						|
                                successfully processed and the
 | 
						|
                                section contents were returned.
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  The system has insufficient
 | 
						|
                                resources to process the request.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER The GUID in InputSection does
 | 
						|
                                not match this instance of the
 | 
						|
                                GUIDed Section Extraction PPI.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
CustomGuidedSectionExtract (
 | 
						|
  IN CONST  EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI *This,
 | 
						|
  IN CONST  VOID                                  *InputSection,
 | 
						|
  OUT       VOID                                  **OutputBuffer,
 | 
						|
  OUT       UINTN                                 *OutputSize,
 | 
						|
  OUT       UINT32                                *AuthenticationStatus
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
   Decompresses a section to the output buffer.
 | 
						|
 | 
						|
   This function looks up the compression type field in the input section and
 | 
						|
   applies the appropriate compression algorithm to compress the section to a
 | 
						|
   callee allocated buffer.
 | 
						|
 | 
						|
   @param  This                  Points to this instance of the
 | 
						|
                                 EFI_PEI_DECOMPRESS_PEI PPI.
 | 
						|
   @param  CompressionSection    Points to the compressed section.
 | 
						|
   @param  OutputBuffer          Holds the returned pointer to the decompressed
 | 
						|
                                 sections.
 | 
						|
   @param  OutputSize            Holds the returned size of the decompress
 | 
						|
                                 section streams.
 | 
						|
 | 
						|
   @retval EFI_SUCCESS           The section was decompressed successfully.
 | 
						|
                                 OutputBuffer contains the resulting data and
 | 
						|
                                 OutputSize contains the resulting size.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Decompress (
 | 
						|
  IN CONST  EFI_PEI_DECOMPRESS_PPI  *This,
 | 
						|
  IN CONST  EFI_COMPRESSION_SECTION *CompressionSection,
 | 
						|
  OUT       VOID                    **OutputBuffer,
 | 
						|
  OUT       UINTN                   *OutputSize
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |