/** @file Define PPI to shadow Firmware Volume from flash to Permanent Memory. Copyright (c) 2023, Intel Corporation. All rights reserved.
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