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