mirror of https://github.com/acidanthera/audk.git
112 lines
4.2 KiB
C
112 lines
4.2 KiB
C
/** @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 modules
|
|
that consume that information such as the DXE and MM UEFI variable drivers.
|
|
|
|
The HOB described in this file is currently optional. It is primarily provided
|
|
to allow a platform to dynamically describe the flash information to environments
|
|
such as Standalone MM that cannot access the prior method using dynamic PCDs.
|
|
|
|
Even for platforms that use Standalone MM, if the information is only stored
|
|
statically such as with FixedAtBuild PCDs, the HOB is not required.
|
|
|
|
Every point of consumption in this package that uses the PCDs will first check
|
|
for the HOB and use its value if present.
|
|
|
|
Early modules such as the PEI UEFI variable driver might also consume this
|
|
information. For modules such as these, that execute early in the boot flow,
|
|
at least two approaches are possible depending on platform design.
|
|
|
|
1. If the information in the HOB exactly matches the information in the PCDs,
|
|
(i.e. the HOB values are set using the PCD values), let the driver read
|
|
the information from the PCD and produce the HOB later in boot.
|
|
|
|
2. Produce the HOB very early in boot. For example, the earliest point the HOB
|
|
is currently consumed is in FaultTolerantWritePei. Note that FaultTolerantWritePei
|
|
produces gEdkiiFaultTolerantWriteGuid which is a dependency for VariablePei.
|
|
|
|
Therefore, attaching a NULL class library to FaultTolerantWritePei with a
|
|
constructor that produces the HOB will guarantee it is produced before the first
|
|
point of consumption as the constructor is executed before the module entry point.
|
|
|
|
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;
|
|
///
|
|
/// Reserved field.
|
|
///
|
|
/// Currently reserved for natural alignment.
|
|
///
|
|
UINT32 Reserved;
|
|
///
|
|
/// 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
|