| /** @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 |