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