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
 |