]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Include/Guid/VariableFormat.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / MdeModulePkg / Include / Guid / VariableFormat.h
1 /** @file
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.
4
5 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #ifndef __VARIABLE_FORMAT_H__
11 #define __VARIABLE_FORMAT_H__
12
13 #define EFI_VARIABLE_GUID \
14 { 0xddcf3616, 0x3275, 0x4164, { 0x98, 0xb6, 0xfe, 0x85, 0x70, 0x7f, 0xfe, 0x7d } }
15
16 #define EFI_AUTHENTICATED_VARIABLE_GUID \
17 { 0xaaf32c78, 0x947b, 0x439a, { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 } }
18
19 extern EFI_GUID gEfiVariableGuid;
20 extern EFI_GUID gEfiAuthenticatedVariableGuid;
21
22 ///
23 /// Alignment of variable name and data, according to the architecture:
24 /// * For IA-32 and Intel(R) 64 architectures: 1.
25 ///
26 #define ALIGNMENT 1
27
28 //
29 // GET_PAD_SIZE calculates the miminal pad bytes needed to make the current pad size satisfy the alignment requirement.
30 //
31 #if (ALIGNMENT == 1)
32 #define GET_PAD_SIZE(a) (0)
33 #else
34 #define GET_PAD_SIZE(a) (((~a) + 1) & (ALIGNMENT - 1))
35 #endif
36
37 ///
38 /// Alignment of Variable Data Header in Variable Store region.
39 ///
40 #define HEADER_ALIGNMENT 4
41 #define HEADER_ALIGN(Header) (((UINTN) (Header) + HEADER_ALIGNMENT - 1) & (~(HEADER_ALIGNMENT - 1)))
42
43 ///
44 /// Status of Variable Store Region.
45 ///
46 typedef enum {
47 EfiRaw,
48 EfiValid,
49 EfiInvalid,
50 EfiUnknown
51 } VARIABLE_STORE_STATUS;
52
53 #pragma pack(1)
54
55 #define VARIABLE_STORE_SIGNATURE EFI_VARIABLE_GUID
56 #define AUTHENTICATED_VARIABLE_STORE_SIGNATURE EFI_AUTHENTICATED_VARIABLE_GUID
57
58 ///
59 /// Variable Store Header Format and State.
60 ///
61 #define VARIABLE_STORE_FORMATTED 0x5a
62 #define VARIABLE_STORE_HEALTHY 0xfe
63
64 ///
65 /// Variable Store region header.
66 ///
67 typedef struct {
68 ///
69 /// Variable store region signature.
70 ///
71 EFI_GUID Signature;
72 ///
73 /// Size of entire variable store,
74 /// including size of variable store header but not including the size of FvHeader.
75 ///
76 UINT32 Size;
77 ///
78 /// Variable region format state.
79 ///
80 UINT8 Format;
81 ///
82 /// Variable region healthy state.
83 ///
84 UINT8 State;
85 UINT16 Reserved;
86 UINT32 Reserved1;
87 } VARIABLE_STORE_HEADER;
88
89 ///
90 /// Variable data start flag.
91 ///
92 #define VARIABLE_DATA 0x55AA
93
94 ///
95 /// Variable State flags.
96 ///
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.
101
102 ///
103 /// Variable Attribute combinations.
104 ///
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)
113 ///
114 /// EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated and should be considered as reserved
115 ///
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)
119
120 ///
121 /// Single Variable Data Header Structure.
122 ///
123 typedef struct {
124 ///
125 /// Variable Data Start Flag.
126 ///
127 UINT16 StartId;
128 ///
129 /// Variable State defined above.
130 ///
131 UINT8 State;
132 UINT8 Reserved;
133 ///
134 /// Attributes of variable defined in UEFI specification.
135 ///
136 UINT32 Attributes;
137 ///
138 /// Size of variable null-terminated Unicode string name.
139 ///
140 UINT32 NameSize;
141 ///
142 /// Size of the variable data without this header.
143 ///
144 UINT32 DataSize;
145 ///
146 /// A unique identifier for the vendor that produces and consumes this varaible.
147 ///
148 EFI_GUID VendorGuid;
149 } VARIABLE_HEADER;
150
151 ///
152 /// Single Authenticated Variable Data Header Structure.
153 ///
154 typedef struct {
155 ///
156 /// Variable Data Start Flag.
157 ///
158 UINT16 StartId;
159 ///
160 /// Variable State defined above.
161 ///
162 UINT8 State;
163 UINT8 Reserved;
164 ///
165 /// Attributes of variable defined in UEFI specification.
166 ///
167 UINT32 Attributes;
168 ///
169 /// Associated monotonic count value against replay attack.
170 ///
171 UINT64 MonotonicCount;
172 ///
173 /// Associated TimeStamp value against replay attack.
174 ///
175 EFI_TIME TimeStamp;
176 ///
177 /// Index of associated public key in database.
178 ///
179 UINT32 PubKeyIndex;
180 ///
181 /// Size of variable null-terminated Unicode string name.
182 ///
183 UINT32 NameSize;
184 ///
185 /// Size of the variable data without this header.
186 ///
187 UINT32 DataSize;
188 ///
189 /// A unique identifier for the vendor that produces and consumes this varaible.
190 ///
191 EFI_GUID VendorGuid;
192 } AUTHENTICATED_VARIABLE_HEADER;
193
194 typedef struct {
195 EFI_GUID *Guid;
196 CHAR16 *Name;
197 UINTN VariableSize;
198 } VARIABLE_ENTRY_CONSISTENCY;
199
200 #pragma pack()
201
202 typedef struct _VARIABLE_INFO_ENTRY VARIABLE_INFO_ENTRY;
203
204 ///
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.
208 ///
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.
219 };
220
221 #endif // _EFI_VARIABLE_H_