/** @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 |