blob: a2756cb0ab1ef1aa919c839483a11a9a398b7d92 [file] [log] [blame]
/** @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