From: Michael Kubacki <michael.kuba...@microsoft.com>

REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3479

Adds a new GUID that is used to identify a HOB that passes variable
flash information to UEFI variable drivers in HOB consumption phases
such as DXE, Traditional MM, and Standalone MM.

This information was previously passed directly with PCDs such
as EfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase
and gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize.

However, the Standalone MM variable driver instance does not have
direct access to the PCD database. Therefore, this HOB will first
be considered as the source for variable flash information and
if platforms do not produce the HOB, reading the information from
the PCDs directly will be a backup to provide backward
compatibility.

Cc: Jian J Wang <jian.j.w...@intel.com>
Cc: Hao A Wu <hao.a...@intel.com>
Cc: Liming Gao <gaolim...@byosoft.com.cn>
Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com>
---
 MdeModulePkg/Include/Guid/VariableFlashInfo.h | 78 ++++++++++++++++++++
 MdeModulePkg/MdeModulePkg.dec                 |  4 +
 2 files changed, 82 insertions(+)

diff --git a/MdeModulePkg/Include/Guid/VariableFlashInfo.h 
b/MdeModulePkg/Include/Guid/VariableFlashInfo.h
new file mode 100644
index 000000000000..7520953cd0f2
--- /dev/null
+++ b/MdeModulePkg/Include/Guid/VariableFlashInfo.h
@@ -0,0 +1,78 @@
+/** @file
+  This file defines the GUID and data structure used to pass information about
+  a variable store mapped on flash (i.e. a MMIO firmware volume) to the DXE 
and MM environment.
+
+  Copyright (c) Microsoft Corporation.<BR>
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef VARIABLE_FLASH_INFO_H_
+#define VARIABLE_FLASH_INFO_H_
+
+#define VARIABLE_FLASH_INFO_HOB_GUID \
+  { 0x5d11c653, 0x8154, 0x4ac3, { 0xa8, 0xc2, 0xfb, 0xa2, 0x89, 0x20, 0xfc, 
0x90 }}
+
+#define VARIABLE_FLASH_INFO_HOB_VERSION  1
+
+extern EFI_GUID  gVariableFlashInfoHobGuid;
+
+#pragma pack (push, 1)
+
+///
+/// This structure can be used to describe UEFI variable
+/// flash information.
+///
+typedef struct {
+  ///
+  /// Version of this structure.
+  ///
+  /// Increment the value when the structure is modified.
+  ///
+  UINT32                  Version;
+  ///
+  /// Base address of the non-volatile variable range in the flash device.
+  ///
+  /// Note that this address should align with the block size requirements of 
the flash device.
+  ///
+  EFI_PHYSICAL_ADDRESS    NvVariableBaseAddress;
+  ///
+  /// Size of the non-volatile variable range in the flash device.
+  ///
+  /// Note that this value should be less than or equal to FtwSpareLength to 
support reclaim of
+  /// entire variable store area.
+  /// Note that this address should align with the block size requirements of 
the flash device.
+  ///
+  UINT64                  NvVariableLength;
+  ///
+  /// Base address of the FTW spare block range in the flash device.
+  ///
+  /// Note that this address should align with the block size requirements of 
the flash device.
+  ///
+  EFI_PHYSICAL_ADDRESS    FtwSpareBaseAddress;
+  ///
+  /// Size of the FTW spare block range in the flash device.
+  ///
+  /// Note that this value should be greater than or equal to NvVariableLength.
+  /// Note that this address should align with the block size requirements of 
the flash device.
+  ///
+  UINT64                  FtwSpareLength;
+  ///
+  /// Base address of the FTW working block range in the flash device.
+  ///
+  /// Note that if FtwWorkingLength is larger than on block size, this value 
should be block size aligned.
+  ///
+  EFI_PHYSICAL_ADDRESS    FtwWorkingBaseAddress;
+  ///
+  /// Size of the FTW working block range in the flash device.
+  ///
+  /// Note that if the value is less than on block size, the range should not 
span blocks.
+  /// Note that if the value is larger than one block size, this value should 
be block size aligned.
+  ///
+  UINT64                  FtwWorkingLength;
+} VARIABLE_FLASH_INFO;
+
+#pragma pack (pop)
+
+#endif
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index cf79292ec877..4e82f5836096 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -226,6 +226,10 @@ [Guids]
   #  Include/Guid/SmmVariableCommon.h
   gSmmVariableWriteGuid  = { 0x93ba1826, 0xdffb, 0x45dd, { 0x82, 0xa7, 0xe7, 
0xdc, 0xaa, 0x3b, 0xbd, 0xf3 }}
 
+  ## Guid of the variable flash information HOB.
+  #  Include/Guid/VariableFlashInfo.h
+  gVariableFlashInfoHobGuid = { 0x5d11c653, 0x8154, 0x4ac3, { 0xa8, 0xc2, 
0xfb, 0xa2, 0x89, 0x20, 0xfc, 0x90 }}
+
   ## Performance protocol guid that also acts as the performance HOB guid and 
performance variable GUID
   #  Include/Guid/Performance.h
   gPerformanceProtocolGuid       = { 0x76B6BDFA, 0x2ACD, 0x4462, { 0x9E, 0x3F, 
0xCB, 0x58, 0xC9, 0x69, 0xD9, 0x37 } }
-- 
2.28.0.windows.1



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


Reply via email to