2 The variable data structures are related to EDK II-specific implementation of UEFI variables.
3 VariableFormat.h defines variable data headers and variable storage region headers.
5 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #ifndef __VARIABLE_FORMAT_H__
11 #define __VARIABLE_FORMAT_H__
13 #define EFI_VARIABLE_GUID \
14 { 0xddcf3616, 0x3275, 0x4164, { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d } }
16 #define EFI_AUTHENTICATED_VARIABLE_GUID \
17 { 0xaaf32c78, 0x947b, 0x439a, { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 } }
19 extern EFI_GUID gEfiVariableGuid
;
20 extern EFI_GUID gEfiAuthenticatedVariableGuid
;
23 /// Alignment of variable name and data, according to the architecture:
24 /// * For IA-32 and Intel(R) 64 architectures: 1.
29 // GET_PAD_SIZE calculates the miminal pad bytes needed to make the current pad size satisfy the alignment requirement.
32 #define GET_PAD_SIZE(a) (0)
34 #define GET_PAD_SIZE(a) (((~a) + 1) & (ALIGNMENT - 1))
38 /// Alignment of Variable Data Header in Variable Store region.
40 #define HEADER_ALIGNMENT 4
41 #define HEADER_ALIGN(Header) (((UINTN) (Header) + HEADER_ALIGNMENT - 1) & (~(HEADER_ALIGNMENT - 1)))
44 /// Status of Variable Store Region.
51 } VARIABLE_STORE_STATUS
;
55 #define VARIABLE_STORE_SIGNATURE EFI_VARIABLE_GUID
56 #define AUTHENTICATED_VARIABLE_STORE_SIGNATURE EFI_AUTHENTICATED_VARIABLE_GUID
59 /// Variable Store Header Format and State.
61 #define VARIABLE_STORE_FORMATTED 0x5a
62 #define VARIABLE_STORE_HEALTHY 0xfe
65 /// Variable Store region header.
69 /// Variable store region signature.
73 /// Size of entire variable store,
74 /// including size of variable store header but not including the size of FvHeader.
78 /// Variable region format state.
82 /// Variable region healthy state.
87 } VARIABLE_STORE_HEADER
;
90 /// Variable data start flag.
92 #define VARIABLE_DATA 0x55AA
95 /// Variable State flags.
97 #define VAR_IN_DELETED_TRANSITION 0xfe ///< Variable is in obsolete transition.
98 #define VAR_DELETED 0xfd ///< Variable is obsolete.
99 #define VAR_HEADER_VALID_ONLY 0x7f ///< Variable header has been valid.
100 #define VAR_ADDED 0x3f ///< Variable has been completely added.
103 /// Variable Attribute combinations.
105 #define VARIABLE_ATTRIBUTE_NV_BS (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)
106 #define VARIABLE_ATTRIBUTE_BS_RT (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS)
107 #define VARIABLE_ATTRIBUTE_BS_RT_AT (VARIABLE_ATTRIBUTE_BS_RT | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
108 #define VARIABLE_ATTRIBUTE_NV_BS_RT (VARIABLE_ATTRIBUTE_BS_RT | EFI_VARIABLE_NON_VOLATILE)
109 #define VARIABLE_ATTRIBUTE_NV_BS_RT_HR (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_HARDWARE_ERROR_RECORD)
110 #define VARIABLE_ATTRIBUTE_NV_BS_RT_AT (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
111 #define VARIABLE_ATTRIBUTE_AT EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS
112 #define VARIABLE_ATTRIBUTE_NV_BS_RT_HR_AT (VARIABLE_ATTRIBUTE_NV_BS_RT_HR | VARIABLE_ATTRIBUTE_AT)
114 /// EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated and should be considered as reserved
116 #define VARIABLE_ATTRIBUTE_AT_AW (EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)
117 #define VARIABLE_ATTRIBUTE_NV_BS_RT_AW (VARIABLE_ATTRIBUTE_NV_BS_RT | EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)
118 #define VARIABLE_ATTRIBUTE_NV_BS_RT_HR_AT_AW (VARIABLE_ATTRIBUTE_NV_BS_RT_HR | VARIABLE_ATTRIBUTE_AT_AW)
121 /// Single Variable Data Header Structure.
125 /// Variable Data Start Flag.
129 /// Variable State defined above.
134 /// Attributes of variable defined in UEFI specification.
138 /// Size of variable null-terminated Unicode string name.
142 /// Size of the variable data without this header.
146 /// A unique identifier for the vendor that produces and consumes this varaible.
152 /// Single Authenticated Variable Data Header Structure.
156 /// Variable Data Start Flag.
160 /// Variable State defined above.
165 /// Attributes of variable defined in UEFI specification.
169 /// Associated monotonic count value against replay attack.
171 UINT64 MonotonicCount
;
173 /// Associated TimeStamp value against replay attack.
177 /// Index of associated public key in database.
181 /// Size of variable null-terminated Unicode string name.
185 /// Size of the variable data without this header.
189 /// A unique identifier for the vendor that produces and consumes this varaible.
192 } AUTHENTICATED_VARIABLE_HEADER
;
198 } VARIABLE_ENTRY_CONSISTENCY
;
202 typedef struct _VARIABLE_INFO_ENTRY VARIABLE_INFO_ENTRY
;
205 /// This structure contains the variable list that is put in EFI system table.
206 /// The variable driver collects all variables that were used at boot service time and produces this list.
207 /// This is an optional feature to dump all used variables in shell environment.
209 struct _VARIABLE_INFO_ENTRY
{
210 VARIABLE_INFO_ENTRY
*Next
; ///< Pointer to next entry.
211 EFI_GUID VendorGuid
; ///< Guid of Variable.
212 CHAR16
*Name
; ///< Name of Variable.
213 UINT32 Attributes
; ///< Attributes of variable defined in UEFI specification.
214 UINT32 ReadCount
; ///< Number of times to read this variable.
215 UINT32 WriteCount
; ///< Number of times to write this variable.
216 UINT32 DeleteCount
; ///< Number of times to delete this variable.
217 UINT32 CacheCount
; ///< Number of times that cache hits this variable.
218 BOOLEAN Volatile
; ///< TRUE if volatile, FALSE if non-volatile.
221 #endif // _EFI_VARIABLE_H_