]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
BaseTools: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrUtilityLib.h
CommitLineData
30fdf114 1/** @file\r
f7496d71 2\r
30fdf114
LG
3 Vfr common library functions.\r
4\r
f7496d71 5Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
2e351cbe 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
30fdf114
LG
7\r
8**/\r
9\r
10#ifndef _VFRUTILITYLIB_H_\r
11#define _VFRUTILITYLIB_H_\r
12\r
13#include "string.h"\r
14#include "Common/UefiBaseTypes.h"\r
15#include "EfiVfr.h"\r
16#include "VfrError.h"\r
17\r
18extern BOOLEAN VfrCompatibleMode;\r
42c808d4 19static EFI_GUID gEdkiiIfrBitVarGuid = EDKII_IFR_BIT_VARSTORE_GUID;\r
30fdf114 20\r
42c808d4 21#define MAX_BIT_WIDTH 32\r
30fdf114
LG
22#define MAX_NAME_LEN 64\r
23#define MAX_STRING_LEN 0x100\r
24#define DEFAULT_ALIGN 1\r
25#define DEFAULT_PACK_ALIGN 0x8\r
26#define DEFAULT_NAME_TABLE_ITEMS 1024\r
27\r
28#define EFI_BITS_SHIFT_PER_UINT32 0x5\r
29#define EFI_BITS_PER_UINT32 (1 << EFI_BITS_SHIFT_PER_UINT32)\r
30\r
31#define BUFFER_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete (Buf); } } while (0);\r
fd542523
HW
32#define ARRAY_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete[] (Buf); } } while (0);\r
33\r
30fdf114
LG
34\r
35class CVfrBinaryOutput {\r
36public:\r
52302d4d
LG
37 virtual VOID WriteLine (IN FILE *, IN UINT32, IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);\r
38 virtual VOID WriteEnd (IN FILE *, IN UINT32, IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);\r
30fdf114
LG
39};\r
40\r
41UINT32\r
42_STR2U32 (\r
43 IN CHAR8 *Str\r
44 );\r
45\r
46struct SConfigInfo {\r
47 UINT16 mOffset;\r
48 UINT16 mWidth;\r
49 UINT8 *mValue;\r
50 SConfigInfo *mNext;\r
51\r
52 SConfigInfo (IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
53 ~SConfigInfo (VOID);\r
77dee0b1
HW
54\r
55private:\r
56 SConfigInfo (IN CONST SConfigInfo&); // Prevent copy-construction\r
57 SConfigInfo& operator= (IN CONST SConfigInfo&); // Prevent assignment\r
30fdf114
LG
58};\r
59\r
60struct SConfigItem {\r
61 CHAR8 *mName; // varstore name\r
4afd3d04
LG
62 EFI_GUID *mGuid; // varstore guid, varstore name + guid deside one varstore\r
63 CHAR8 *mId; // default ID\r
30fdf114
LG
64 SConfigInfo *mInfoStrList; // list of Offset/Value in the varstore\r
65 SConfigItem *mNext;\r
66\r
67public:\r
4afd3d04
LG
68 SConfigItem (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *);\r
69 SConfigItem (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT16, IN EFI_IFR_TYPE_VALUE);\r
30fdf114 70 virtual ~SConfigItem ();\r
77dee0b1
HW
71\r
72private:\r
73 SConfigItem (IN CONST SConfigItem&); // Prevent copy-construction\r
74 SConfigItem& operator= (IN CONST SConfigItem&); // Prevent assignment\r
30fdf114
LG
75};\r
76\r
77class CVfrBufferConfig {\r
78private:\r
79 SConfigItem *mItemListHead;\r
80 SConfigItem *mItemListTail;\r
81 SConfigItem *mItemListPos;\r
82\r
83public:\r
84 CVfrBufferConfig (VOID);\r
85 virtual ~CVfrBufferConfig (VOID);\r
86\r
4afd3d04 87 virtual UINT8 Register (IN CHAR8 *, IN EFI_GUID *,IN CHAR8 *Info = NULL);\r
30fdf114
LG
88 virtual VOID Open (VOID);\r
89 virtual BOOLEAN Eof(VOID);\r
4afd3d04
LG
90 virtual UINT8 Select (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *Info = NULL);\r
91 virtual UINT8 Write (IN CONST CHAR8, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
30fdf114
LG
92#if 0\r
93 virtual UINT8 Read (OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **);\r
94#endif\r
95 virtual VOID Close (VOID);\r
96 virtual VOID OutputCFile (IN FILE *, IN CHAR8 *);\r
77dee0b1
HW
97\r
98private:\r
99 CVfrBufferConfig (IN CONST CVfrBufferConfig&); // Prevent copy-construction\r
100 CVfrBufferConfig& operator= (IN CONST CVfrBufferConfig&); // Prevent assignment\r
30fdf114
LG
101};\r
102\r
103extern CVfrBufferConfig gCVfrBufferConfig;\r
104\r
105#define ALIGN_STUFF(Size, Align) ((Align) - (Size) % (Align))\r
106#define INVALID_ARRAY_INDEX 0xFFFFFFFF\r
107\r
108struct SVfrDataType;\r
109\r
110struct SVfrDataField {\r
111 CHAR8 mFieldName[MAX_NAME_LEN];\r
112 SVfrDataType *mFieldType;\r
113 UINT32 mOffset;\r
114 UINT32 mArrayNum;\r
42c808d4
DB
115 BOOLEAN mIsBitField;\r
116 UINT8 mBitWidth;\r
117 UINT32 mBitOffset;\r
30fdf114
LG
118 SVfrDataField *mNext;\r
119};\r
120\r
121struct SVfrDataType {\r
122 CHAR8 mTypeName[MAX_NAME_LEN];\r
123 UINT8 mType;\r
124 UINT32 mAlign;\r
125 UINT32 mTotalSize;\r
42c808d4 126 BOOLEAN mHasBitField;\r
30fdf114
LG
127 SVfrDataField *mMembers;\r
128 SVfrDataType *mNext;\r
129};\r
130\r
131#define VFR_PACK_ASSIGN 0x01\r
132#define VFR_PACK_SHOW 0x02\r
133#define VFR_PACK_PUSH 0x04\r
134#define VFR_PACK_POP 0x08\r
135\r
136#define PACKSTACK_MAX_SIZE 0x400\r
137\r
138struct SVfrPackStackNode {\r
139 CHAR8 *mIdentifier;\r
140 UINT32 mNumber;\r
141 SVfrPackStackNode *mNext;\r
142\r
143 SVfrPackStackNode (IN CHAR8 *Identifier, IN UINT32 Number) {\r
144 mIdentifier = NULL;\r
145 mNumber = Number;\r
146 mNext = NULL;\r
147\r
148 if (Identifier != NULL) {\r
149 mIdentifier = new CHAR8[strlen (Identifier) + 1];\r
150 strcpy (mIdentifier, Identifier);\r
151 }\r
152 }\r
153\r
154 ~SVfrPackStackNode (VOID) {\r
155 if (mIdentifier != NULL) {\r
fd542523 156 delete[] mIdentifier;\r
30fdf114
LG
157 }\r
158 mNext = NULL;\r
159 }\r
160\r
161 bool Match (IN CHAR8 *Identifier) {\r
162 if (Identifier == NULL) {\r
163 return TRUE;\r
164 } else if (mIdentifier == NULL) {\r
165 return FALSE;\r
166 } else if (strcmp (Identifier, mIdentifier) == 0) {\r
167 return TRUE;\r
168 } else {\r
169 return FALSE;\r
170 }\r
171 }\r
77dee0b1
HW
172\r
173private:\r
174 SVfrPackStackNode (IN CONST SVfrPackStackNode&); // Prevent copy-construction\r
175 SVfrPackStackNode& operator= (IN CONST SVfrPackStackNode&); // Prevent assignment\r
30fdf114
LG
176};\r
177\r
178class CVfrVarDataTypeDB {\r
179private:\r
180 UINT32 mPackAlign;\r
181 SVfrPackStackNode *mPackStack;\r
182\r
183public:\r
184 EFI_VFR_RETURN_CODE Pack (IN UINT32, IN UINT8, IN CHAR8 *Identifier = NULL, IN UINT32 Number = DEFAULT_PACK_ALIGN);\r
185\r
186private:\r
187 SVfrDataType *mDataTypeList;\r
188\r
189 SVfrDataType *mNewDataType;\r
190 SVfrDataType *mCurrDataType;\r
191 SVfrDataField *mCurrDataField;\r
192\r
193 VOID InternalTypesListInit (VOID);\r
194 VOID RegisterNewType (IN SVfrDataType *);\r
195\r
196 EFI_VFR_RETURN_CODE ExtractStructTypeName (IN CHAR8 *&, OUT CHAR8 *);\r
4234283c 197 EFI_VFR_RETURN_CODE GetTypeField (IN CONST CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
42c808d4 198 EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &, IN BOOLEAN);\r
30fdf114 199 UINT8 GetFieldWidth (IN SVfrDataField *);\r
42c808d4 200 UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32, IN BOOLEAN);\r
30fdf114
LG
201\r
202public:\r
203 CVfrVarDataTypeDB (VOID);\r
204 ~CVfrVarDataTypeDB (VOID);\r
205\r
206 VOID DeclareDataTypeBegin (VOID);\r
207 EFI_VFR_RETURN_CODE SetNewTypeName (IN CHAR8 *);\r
2b7f3d4a 208 EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);\r
42c808d4 209 EFI_VFR_RETURN_CODE DataTypeAddBitField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);\r
30fdf114
LG
210 VOID DeclareDataTypeEnd (VOID);\r
211\r
212 EFI_VFR_RETURN_CODE GetDataType (IN CHAR8 *, OUT SVfrDataType **);\r
213 EFI_VFR_RETURN_CODE GetDataTypeSize (IN CHAR8 *, OUT UINT32 *);\r
214 EFI_VFR_RETURN_CODE GetDataTypeSize (IN UINT8, OUT UINT32 *);\r
42c808d4 215 EFI_VFR_RETURN_CODE GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &, OUT BOOLEAN &);\r
30fdf114
LG
216\r
217 EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT CHAR8 ***, OUT UINT32 *);\r
218 EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN CHAR8 *&, OUT CHAR8 *, OUT UINT32 &);\r
42c808d4
DB
219 BOOLEAN DataTypeHasBitField (IN CHAR8 *);\r
220 BOOLEAN IsThisBitField (IN CHAR8 *);\r
30fdf114
LG
221\r
222 BOOLEAN IsTypeNameDefined (IN CHAR8 *);\r
223\r
224 VOID Dump(IN FILE *);\r
225 //\r
f7496d71 226 // First the declared\r
30fdf114
LG
227 //\r
228 CHAR8 *mFirstNewDataTypeName;\r
229#ifdef CVFR_VARDATATYPEDB_DEBUG\r
230 VOID ParserDB ();\r
231#endif\r
77dee0b1
HW
232\r
233private:\r
234 CVfrVarDataTypeDB (IN CONST CVfrVarDataTypeDB&); // Prevent copy-construction\r
235 CVfrVarDataTypeDB& operator= (IN CONST CVfrVarDataTypeDB&); // Prevent assignment\r
30fdf114
LG
236};\r
237\r
238extern CVfrVarDataTypeDB gCVfrVarDataTypeDB;\r
239\r
240typedef enum {\r
241 EFI_VFR_VARSTORE_INVALID,\r
242 EFI_VFR_VARSTORE_BUFFER,\r
243 EFI_VFR_VARSTORE_EFI,\r
42c808d4
DB
244 EFI_VFR_VARSTORE_NAME,\r
245 EFI_VFR_VARSTORE_BUFFER_BITS\r
30fdf114
LG
246} EFI_VFR_VARSTORE_TYPE;\r
247\r
248struct SVfrVarStorageNode {\r
249 EFI_GUID mGuid;\r
250 CHAR8 *mVarStoreName;\r
251 EFI_VARSTORE_ID mVarStoreId;\r
252 BOOLEAN mAssignedFlag; //Create varstore opcode\r
253 struct SVfrVarStorageNode *mNext;\r
254\r
255 EFI_VFR_VARSTORE_TYPE mVarStoreType;\r
256 union {\r
257 // EFI Variable\r
258 struct {\r
259 EFI_STRING_ID mEfiVarName;\r
260 UINT32 mEfiVarSize;\r
261 } mEfiVar;\r
262\r
263 // Buffer Storage\r
264 SVfrDataType *mDataType;\r
265\r
266 // NameValue Storage\r
f7496d71 267 struct {\r
30fdf114
LG
268 EFI_STRING_ID *mNameTable;\r
269 UINT32 mTableSize;\r
270 } mNameSpace;\r
271 } mStorageInfo;\r
272\r
273public:\r
274 SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);\r
42c808d4 275 SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *,IN BOOLEAN, IN BOOLEAN Flag = TRUE);\r
30fdf114
LG
276 SVfrVarStorageNode (IN CHAR8 *, IN EFI_VARSTORE_ID);\r
277 ~SVfrVarStorageNode (VOID);\r
77dee0b1
HW
278\r
279private:\r
280 SVfrVarStorageNode (IN CONST SVfrVarStorageNode&); // Prevent copy-construction\r
281 SVfrVarStorageNode& operator= (IN CONST SVfrVarStorageNode&); // Prevent assignment\r
30fdf114
LG
282};\r
283\r
284struct EFI_VARSTORE_INFO {\r
285 EFI_VARSTORE_ID mVarStoreId;\r
286 union {\r
287 EFI_STRING_ID mVarName;\r
288 UINT16 mVarOffset;\r
289 } mInfo;\r
290 UINT8 mVarType;\r
291 UINT32 mVarTotalSize;\r
42c808d4 292 BOOLEAN mIsBitVar;\r
30fdf114
LG
293\r
294 EFI_VARSTORE_INFO (VOID);\r
295 EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);\r
0d46defe 296 EFI_VARSTORE_INFO& operator=(IN CONST EFI_VARSTORE_INFO &);\r
30fdf114
LG
297 BOOLEAN operator == (IN EFI_VARSTORE_INFO *);\r
298};\r
299\r
74bbe31b
DB
300struct BufferVarStoreFieldInfoNode {\r
301 EFI_VARSTORE_INFO mVarStoreInfo;\r
302 struct BufferVarStoreFieldInfoNode *mNext;\r
303\r
304 BufferVarStoreFieldInfoNode( IN EFI_VARSTORE_INFO *Info );\r
305 ~BufferVarStoreFieldInfoNode ();\r
306};\r
307\r
30fdf114
LG
308#define EFI_VARSTORE_ID_MAX 0xFFFF\r
309#define EFI_FREE_VARSTORE_ID_BITMAP_SIZE ((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
310\r
311class CVfrDataStorage {\r
312private:\r
313 UINT32 mFreeVarStoreIdBitMap[EFI_FREE_VARSTORE_ID_BITMAP_SIZE];\r
314\r
315 struct SVfrVarStorageNode *mBufferVarStoreList;\r
316 struct SVfrVarStorageNode *mEfiVarStoreList;\r
317 struct SVfrVarStorageNode *mNameVarStoreList;\r
318\r
319 struct SVfrVarStorageNode *mCurrVarStorageNode;\r
320 struct SVfrVarStorageNode *mNewVarStorageNode;\r
74bbe31b
DB
321 BufferVarStoreFieldInfoNode *mBufferFieldInfoListHead;\r
322 BufferVarStoreFieldInfoNode *mBufferFieldInfoListTail;\r
30fdf114
LG
323\r
324private:\r
325\r
326 EFI_VARSTORE_ID GetFreeVarStoreId (EFI_VFR_VARSTORE_TYPE VarType = EFI_VFR_VARSTORE_BUFFER);\r
327 BOOLEAN ChekVarStoreIdFree (IN EFI_VARSTORE_ID);\r
328 VOID MarkVarStoreIdUsed (IN EFI_VARSTORE_ID);\r
329 VOID MarkVarStoreIdUnused (IN EFI_VARSTORE_ID);\r
f7496d71
LG
330 EFI_VARSTORE_ID CheckGuidField (IN SVfrVarStorageNode *,\r
331 IN EFI_GUID *,\r
332 IN BOOLEAN *,\r
4afd3d04 333 OUT EFI_VFR_RETURN_CODE *);\r
30fdf114
LG
334\r
335public:\r
336 CVfrDataStorage ();\r
337 ~CVfrDataStorage ();\r
f7496d71 338\r
30fdf114
LG
339 SVfrVarStorageNode * GetBufferVarStoreList () {\r
340 return mBufferVarStoreList;\r
341 }\r
342 SVfrVarStorageNode * GetEfiVarStoreList () {\r
343 return mEfiVarStoreList;\r
344 }\r
e8a47801 345 EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *, EFI_VARSTORE_ID);\r
30fdf114
LG
346 EFI_VFR_RETURN_CODE NameTableAddItem (EFI_STRING_ID);\r
347 EFI_VFR_RETURN_CODE DeclareNameVarStoreEnd (EFI_GUID *);\r
348\r
349 EFI_VFR_RETURN_CODE DeclareEfiVarStore (IN CHAR8 *, IN EFI_GUID *, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);\r
350\r
42c808d4 351 EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN CHAR8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN BOOLEAN, IN BOOLEAN Flag = TRUE);\r
30fdf114 352\r
4afd3d04 353 EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *, IN EFI_GUID *VarGuid = NULL);\r
30fdf114 354 EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);\r
4afd3d04 355 EFI_GUID * GetVarStoreGuid (IN EFI_VARSTORE_ID);\r
30fdf114 356 EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
4afd3d04 357 EFI_VFR_RETURN_CODE GetVarStoreByDataType (IN CHAR8 *, OUT SVfrVarStorageNode **, IN EFI_GUID *VarGuid = NULL);\r
30fdf114 358\r
4afd3d04 359 EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
30fdf114
LG
360 EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);\r
361 EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);\r
74bbe31b
DB
362 EFI_VFR_RETURN_CODE AddBufferVarStoreFieldInfo (IN EFI_VARSTORE_INFO *);\r
363 EFI_VFR_RETURN_CODE GetBufferVarStoreFieldInfo (IN OUT EFI_VARSTORE_INFO *);\r
77dee0b1
HW
364\r
365private:\r
366 CVfrDataStorage (IN CONST CVfrDataStorage&); // Prevent copy-construction\r
367 CVfrDataStorage& operator= (IN CONST CVfrDataStorage&); // Prevent assignment\r
30fdf114
LG
368};\r
369\r
74bbe31b
DB
370extern CVfrDataStorage gCVfrDataStorage;\r
371\r
30fdf114
LG
372#define EFI_QUESTION_ID_MAX 0xFFFF\r
373#define EFI_FREE_QUESTION_ID_BITMAP_SIZE ((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
374#define EFI_QUESTION_ID_INVALID 0x0\r
375\r
376#define DATE_YEAR_BITMASK 0x0000FFFF\r
377#define DATE_MONTH_BITMASK 0x00FF0000\r
378#define DATE_DAY_BITMASK 0xFF000000\r
379#define TIME_HOUR_BITMASK 0x000000FF\r
380#define TIME_MINUTE_BITMASK 0x0000FF00\r
381#define TIME_SECOND_BITMASK 0x00FF0000\r
382\r
383struct SVfrQuestionNode {\r
384 CHAR8 *mName;\r
385 CHAR8 *mVarIdStr;\r
386 EFI_QUESTION_ID mQuestionId;\r
387 UINT32 mBitMask;\r
388 SVfrQuestionNode *mNext;\r
52302d4d 389 EFI_QUESION_TYPE mQtype;\r
30fdf114
LG
390\r
391 SVfrQuestionNode (IN CHAR8 *, IN CHAR8 *, IN UINT32 BitMask = 0);\r
392 ~SVfrQuestionNode ();\r
77dee0b1
HW
393\r
394private:\r
395 SVfrQuestionNode (IN CONST SVfrQuestionNode&); // Prevent copy-construction\r
396 SVfrQuestionNode& operator= (IN CONST SVfrQuestionNode&); // Prevent assignment\r
30fdf114
LG
397};\r
398\r
399class CVfrQuestionDB {\r
400private:\r
401 SVfrQuestionNode *mQuestionList;\r
402 UINT32 mFreeQIdBitMap[EFI_FREE_QUESTION_ID_BITMAP_SIZE];\r
403\r
404private:\r
405 EFI_QUESTION_ID GetFreeQuestionId (VOID);\r
406 BOOLEAN ChekQuestionIdFree (IN EFI_QUESTION_ID);\r
407 VOID MarkQuestionIdUsed (IN EFI_QUESTION_ID);\r
408 VOID MarkQuestionIdUnused (IN EFI_QUESTION_ID);\r
409\r
410public:\r
411 CVfrQuestionDB ();\r
412 ~CVfrQuestionDB();\r
413\r
414 EFI_VFR_RETURN_CODE RegisterQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
415 VOID RegisterOldDateQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
416 VOID RegisterNewDateQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
417 VOID RegisterOldTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
418 VOID RegisterNewTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
f7496d71 419 VOID RegisterRefQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
30fdf114 420 EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);\r
52302d4d 421 VOID GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &, OUT EFI_QUESION_TYPE *QType = NULL);\r
30fdf114
LG
422 EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID);\r
423 EFI_VFR_RETURN_CODE FindQuestion (IN CHAR8 *);\r
424 VOID PrintAllQuestion (IN VOID);\r
f7496d71 425 VOID ResetInit (IN VOID);\r
30fdf114
LG
426\r
427 VOID SetCompatibleMode (IN BOOLEAN Mode) {\r
428 VfrCompatibleMode = Mode;\r
429 }\r
77dee0b1
HW
430\r
431private:\r
432 CVfrQuestionDB (IN CONST CVfrQuestionDB&); // Prevent copy-construction\r
433 CVfrQuestionDB& operator= (IN CONST CVfrQuestionDB&); // Prevent assignment\r
30fdf114
LG
434};\r
435\r
436struct SVfrDefaultStoreNode {\r
437 EFI_IFR_DEFAULTSTORE *mObjBinAddr;\r
438 CHAR8 *mRefName;\r
439 EFI_STRING_ID mDefaultStoreNameId;\r
440 UINT16 mDefaultId;\r
441\r
442 SVfrDefaultStoreNode *mNext;\r
443\r
444 SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);\r
445 ~SVfrDefaultStoreNode();\r
77dee0b1
HW
446\r
447private:\r
448 SVfrDefaultStoreNode (IN CONST SVfrDefaultStoreNode&); // Prevent copy-construction\r
449 SVfrDefaultStoreNode& operator= (IN CONST SVfrDefaultStoreNode&); // Prevent assignment\r
30fdf114
LG
450};\r
451\r
452class CVfrDefaultStore {\r
453private:\r
454 SVfrDefaultStoreNode *mDefaultStoreList;\r
455\r
456public:\r
457 CVfrDefaultStore ();\r
458 ~CVfrDefaultStore ();\r
459\r
460 EFI_VFR_RETURN_CODE RegisterDefaultStore (IN CHAR8 *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);\r
461 EFI_VFR_RETURN_CODE ReRegisterDefaultStoreById (IN UINT16, IN CHAR8 *, IN EFI_STRING_ID);\r
462 BOOLEAN DefaultIdRegistered (IN UINT16);\r
463 EFI_VFR_RETURN_CODE GetDefaultId (IN CHAR8 *, OUT UINT16 *);\r
4afd3d04 464 EFI_VFR_RETURN_CODE BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID, IN EFI_VARSTORE_INFO &, IN CHAR8 *, IN EFI_GUID *, IN UINT8, IN EFI_IFR_TYPE_VALUE);\r
77dee0b1
HW
465\r
466private:\r
467 CVfrDefaultStore (IN CONST CVfrDefaultStore&); // Prevent copy-construction\r
468 CVfrDefaultStore& operator= (IN CONST CVfrDefaultStore&); // Prevent assignment\r
30fdf114
LG
469};\r
470\r
74bbe31b
DB
471extern CVfrDefaultStore gCVfrDefaultStore;\r
472\r
30fdf114
LG
473#define EFI_RULE_ID_START 0x01\r
474#define EFI_RULE_ID_INVALID 0x00\r
475\r
476struct SVfrRuleNode {\r
477 UINT8 mRuleId;\r
478 CHAR8 *mRuleName;\r
479 SVfrRuleNode *mNext;\r
480\r
481 SVfrRuleNode(IN CHAR8 *, IN UINT8);\r
482 ~SVfrRuleNode();\r
77dee0b1
HW
483\r
484private:\r
485 SVfrRuleNode (IN CONST SVfrRuleNode&); // Prevent copy-construction\r
486 SVfrRuleNode& operator= (IN CONST SVfrRuleNode&); // Prevent assignment\r
30fdf114
LG
487};\r
488\r
489class CVfrRulesDB {\r
490private:\r
491 SVfrRuleNode *mRuleList;\r
492 UINT8 mFreeRuleId;\r
493\r
494public:\r
495 CVfrRulesDB ();\r
496 ~CVfrRulesDB();\r
497\r
498 VOID RegisterRule (IN CHAR8 *);\r
499 UINT8 GetRuleId (IN CHAR8 *);\r
77dee0b1
HW
500\r
501private:\r
502 CVfrRulesDB (IN CONST CVfrRulesDB&); // Prevent copy-construction\r
503 CVfrRulesDB& operator= (IN CONST CVfrRulesDB&); // Prevent assignment\r
30fdf114
LG
504};\r
505\r
4234283c
LG
506class CVfrStringDB {\r
507private:\r
508 CHAR8 *mStringFileName;\r
509\r
510 EFI_STATUS FindStringBlock (\r
511 IN UINT8 *StringData,\r
512 IN EFI_STRING_ID StringId,\r
513 OUT UINT32 *StringTextOffset,\r
514 OUT UINT8 *BlockType\r
515 );\r
516\r
517 UINT32 GetUnicodeStringTextSize (\r
518 IN UINT8 *StringSrc\r
519 );\r
f7496d71 520\r
64b2609f
LG
521 BOOLEAN GetBestLanguage (\r
522 IN CONST CHAR8 *SupportedLanguages,\r
523 IN CHAR8 *Language\r
524 );\r
4234283c
LG
525\r
526public:\r
527 CVfrStringDB ();\r
528 ~CVfrStringDB ();\r
529\r
530 VOID SetStringFileName (\r
531 IN CHAR8 *StringFileName\r
532 );\r
533\r
534 CHAR8 * GetVarStoreNameFormStringId (\r
535 IN EFI_STRING_ID StringId\r
536 );\r
537\r
77dee0b1
HW
538private:\r
539 CVfrStringDB (IN CONST CVfrStringDB&); // Prevent copy-construction\r
540 CVfrStringDB& operator= (IN CONST CVfrStringDB&); // Prevent assignment\r
4234283c
LG
541};\r
542\r
30fdf114 543#endif\r