From: Umang Patel <umang.pa...@intel.com>

Add FirmwareVolumeShadow PPI to shadow an FV to memory.

Cc: Jian J Wang <jian.j.w...@intel.com>
Cc: Liming Gao <gaolim...@byosoft.com.cn>
Signed-off-by: Patel Umang <umang.pa...@intel.com>
---
 .../Include/Ppi/FirmwareVolumeShadowPpi.h     | 61 +++++++++++++++++++
 MdeModulePkg/MdeModulePkg.dec                 |  3 +
 2 files changed, 64 insertions(+)
 create mode 100644 MdeModulePkg/Include/Ppi/FirmwareVolumeShadowPpi.h

diff --git a/MdeModulePkg/Include/Ppi/FirmwareVolumeShadowPpi.h 
b/MdeModulePkg/Include/Ppi/FirmwareVolumeShadowPpi.h
new file mode 100644
index 000000000000..a2756cb0ab1e
--- /dev/null
+++ b/MdeModulePkg/Include/Ppi/FirmwareVolumeShadowPpi.h
@@ -0,0 +1,61 @@
+/** @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
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index e8058c8bfaec..3eb4a79bf7a0 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -442,6 +442,9 @@ [Guids]
   gBootDiscoveryPolicyMgrFormsetGuid = { 0x5b6f7107, 0xbb3c, 0x4660, { 0x92, 
0xcd, 0x54, 0x26, 0x90, 0x28, 0x0b, 0xbd } }
 
 [Ppis]
+  ## Include/Ppi/FirmwareVolumeShadowPpi.h
+  gEdkiiPeiFirmwareVolumeShadowPpiGuid = { 0x7dfe756c, 0xed8d, 0x4d77, {0x9e, 
0xc4, 0x39, 0x9a, 0x8a, 0x81, 0x51, 0x16 } }
+
   ## Include/Ppi/AtaController.h
   gPeiAtaControllerPpiGuid       = { 0xa45e60d1, 0xc719, 0x44aa, { 0xb0, 0x7a, 
0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d }}
 
-- 
2.39.1.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#101541): https://edk2.groups.io/g/devel/message/101541
Mute This Topic: https://groups.io/mt/97770068/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to