Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12011 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			126 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Defines the APIs that enable PEI services to work with 
 | 
						|
  the underlying capsule capabilities of the platform.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2010, 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_CAPSULE_PPI_H_
 | 
						|
#define _PEI_CAPSULE_PPI_H_
 | 
						|
 | 
						|
///
 | 
						|
/// Global ID for the PEI_CAPSULE_PPI.
 | 
						|
///
 | 
						|
#define PEI_CAPSULE_PPI_GUID \
 | 
						|
  { \
 | 
						|
    0x3acf33ee, 0xd892, 0x40f4, {0xa2, 0xfc, 0x38, 0x54, 0xd2, 0xe1, 0x32, 0x3d } \
 | 
						|
  }
 | 
						|
 | 
						|
///
 | 
						|
/// Forward declaration for the PEI_CAPSULE_PPI.
 | 
						|
///
 | 
						|
typedef struct _PEI_CAPSULE_PPI PEI_CAPSULE_PPI;
 | 
						|
 | 
						|
/**
 | 
						|
  Upon determining that there is a capsule to operate on, this service 
 | 
						|
  will use a series of EFI_CAPSULE_BLOCK_DESCRIPTOR entries to determine 
 | 
						|
  the current location of the various capsule fragments and coalesce them 
 | 
						|
  into a contiguous region of system memory.   
 | 
						|
 | 
						|
  @param[in]  PeiServices   Pointer to the PEI Services Table.
 | 
						|
  @param[out] MemoryBase    Pointer to the base of a block of memory into which the buffers will be coalesced.
 | 
						|
                            On output, this variable will hold the base address 
 | 
						|
                            of a coalesced capsule.
 | 
						|
  @param[out] MemorySize    Size of the memory region pointed to by MemoryBase.
 | 
						|
                            On output, this variable will contain the size of the
 | 
						|
                            coalesced capsule.
 | 
						|
 | 
						|
  @retval EFI_NOT_FOUND          If: boot modecould not be determined, or the 
 | 
						|
                                 boot mode is not flash-update, or the capsule descriptors were not found. 
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL   The capsule could not be coalesced in the provided memory region. 
 | 
						|
  @retval EFI_SUCCESS            There was no capsule, or the capsule was processed successfully. 
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_CAPSULE_COALESCE)(
 | 
						|
  IN EFI_PEI_SERVICES  **PeiServices,
 | 
						|
  IN OUT VOID          **MemoryBase,
 | 
						|
  IN OUT UINTN         *MemSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Determine if a capsule needs to be processed. 
 | 
						|
  The means by which the presence of a capsule is determined is platform
 | 
						|
  specific. For example, an implementation could be driven by the presence 
 | 
						|
  of a Capsule EFI Variable containing a list of EFI_CAPSULE_BLOCK_DESCRIPTOR 
 | 
						|
  entries. If present, return EFI_SUCCESS, otherwise return EFI_NOT_FOUND.
 | 
						|
    
 | 
						|
  @param[in] PeiServices   Pointer to the PEI Services Table.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS     If a capsule is available.
 | 
						|
  @retval EFI_NOT_FOUND   No capsule detected.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_CAPSULE_CHECK_CAPSULE_UPDATE)(
 | 
						|
  IN EFI_PEI_SERVICES  **PeiServices
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  The Capsule PPI service that gets called after memory is available. The
 | 
						|
  capsule coalesce function, which must be called first, returns a base
 | 
						|
  address and size. Once the memory init PEIM has discovered memory, 
 | 
						|
  it should call this function and pass in the base address and size 
 | 
						|
  returned by the Coalesce() function. Then this function can create a 
 | 
						|
  capsule HOB and return.
 | 
						|
 | 
						|
  @par Notes:
 | 
						|
    This function assumes it will not be called until the
 | 
						|
    actual capsule update.
 | 
						|
 | 
						|
  @param[in] PeiServices   Pointer to the PEI Services Table.
 | 
						|
  @param[in] CapsuleBase   Address returned by the capsule coalesce function. 
 | 
						|
  @param[in] CapsuleSize   Value returned by the capsule coalesce function.
 | 
						|
 | 
						|
  @retval EFI_VOLUME_CORRUPTED   CapsuleBase does not appear to point to a
 | 
						|
                                 coalesced capsule.
 | 
						|
  @retval EFI_SUCCESS            Capsule HOB was created successfully.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_CAPSULE_CREATE_STATE)(
 | 
						|
  IN EFI_PEI_SERVICES  **PeiServices,
 | 
						|
  IN VOID              *CapsuleBase,
 | 
						|
  IN UINTN             CapsuleSize  
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// This PPI provides several services in PEI to work with the underlying
 | 
						|
/// capsule capabilities of the platform.  These services include the ability 
 | 
						|
/// for PEI to coalesce a capsule from a scattered set of memory locations 
 | 
						|
/// into a contiguous space in memory, detect if a capsule is present for
 | 
						|
/// processing, and once memory is available, create a HOB for the capsule.
 | 
						|
///
 | 
						|
struct _PEI_CAPSULE_PPI {
 | 
						|
  PEI_CAPSULE_COALESCE              Coalesce;
 | 
						|
  PEI_CAPSULE_CHECK_CAPSULE_UPDATE  CheckCapsuleUpdate;
 | 
						|
  PEI_CAPSULE_CREATE_STATE          CreateState;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gPeiCapsulePpiGuid;
 | 
						|
 | 
						|
#endif // #ifndef _PEI_CAPSULE_PPI_H_
 |