Add FirmwareVolumeShadow PPI to shadow an FV to memory. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Signed-off-by: Patel Umang <umang.patel@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Define PPI to shadow Firmware Volume from flash to Permanent Memory.
 | 
						|
 | 
						|
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
 | 
						|
 | 
						|
SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef PEI_FIRMWARE_VOLUME_SHADOW_PPI_H_
 | 
						|
#define PEI_FIRMWARE_VOLUME_SHADOW_PPI_H_
 | 
						|
 | 
						|
//
 | 
						|
// Firmware Volume Shadow PPI GUID value
 | 
						|
//
 | 
						|
#define EDKII_FIRMWARE_VOLUME_SHADOW_PPI_GUID \
 | 
						|
  { \
 | 
						|
    0x7dfe756c, 0xed8d, 0x4d77, { 0x9e, 0xc4, 0x39, 0x9a, 0x8a, 0x81, 0x51, 0x16 } \
 | 
						|
  }
 | 
						|
 | 
						|
/**
 | 
						|
  Copy FV to Destination.  Length of copy is FV length from FV Header.
 | 
						|
 | 
						|
  @param[in]  FirmwareVolumeBase  Base address of FV to shadow. Length of FV
 | 
						|
                                  is in FV Header.
 | 
						|
  @param[in]  Destination         Pointer to the Buffer in system memory to
 | 
						|
                                  shadow FV.
 | 
						|
  @param[in]  DestinationLength   Size of Destination buffer in bytes.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS            Shadow complete
 | 
						|
  @retval EFI_INVALID_PARAMETER  Destination is NULL
 | 
						|
  @retval EFI_INVALID_PARAMETER  DestinationLength = 0.
 | 
						|
  @retval EFI_INVALID_PARAMETER  FV does not have valid FV Header.
 | 
						|
  @retval EFI_INVALID_PARAMETER  FV overlaps Destination.
 | 
						|
  @retval EFI_INVALID_PARAMETER  Destination + DestinationLength rolls over 4GB
 | 
						|
                                 for 32-bit or 64-bit rollover.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL   DestinationLength less than FV length from FV
 | 
						|
                                 Header.
 | 
						|
  @retval EFI_UNSUPPORTED        FirmwareVolumeBase to FVBase + FVLength does
 | 
						|
                                 not support shadow.  Caller should fallback to
 | 
						|
                                 CopyMem().
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_PEI_FIRMWARE_VOLUME_SHADOW)(
 | 
						|
  IN EFI_PHYSICAL_ADDRESS  FirmwareVolumeBase,
 | 
						|
  IN VOID                  *Destination,
 | 
						|
  IN UINTN                 DestinationLength
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// This PPI provides a service to shadow a FV from one location to another
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  EDKII_PEI_FIRMWARE_VOLUME_SHADOW    FirmwareVolumeShadow;
 | 
						|
} EDKII_PEI_FIRMWARE_VOLUME_SHADOW_PPI;
 | 
						|
 | 
						|
extern EFI_GUID  gEdkiiPeiFirmwareVolumeShadowPpiGuid;
 | 
						|
 | 
						|
#endif
 |