]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
BaseTools GNUmakefile: Remove HOST_ARCH in every tool Makefile
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrUtilityLib.h
... / ...
CommitLineData
1/** @file\r
2 \r
3 Vfr common library functions.\r
4\r
5Copyright (c) 2004 - 2017, 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
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
25static EFI_GUID gEdkiiIfrBitVarGuid = EDKII_IFR_BIT_VARSTORE_GUID;\r
26\r
27#define MAX_BIT_WIDTH 32\r
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
38#define ARRAY_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete[] (Buf); } } while (0);\r
39\r
40\r
41class CVfrBinaryOutput {\r
42public:\r
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
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
60\r
61private:\r
62 SConfigInfo (IN CONST SConfigInfo&); // Prevent copy-construction\r
63 SConfigInfo& operator= (IN CONST SConfigInfo&); // Prevent assignment\r
64};\r
65\r
66struct SConfigItem {\r
67 CHAR8 *mName; // varstore name\r
68 EFI_GUID *mGuid; // varstore guid, varstore name + guid deside one varstore\r
69 CHAR8 *mId; // default ID\r
70 SConfigInfo *mInfoStrList; // list of Offset/Value in the varstore\r
71 SConfigItem *mNext;\r
72\r
73public:\r
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
76 virtual ~SConfigItem ();\r
77\r
78private:\r
79 SConfigItem (IN CONST SConfigItem&); // Prevent copy-construction\r
80 SConfigItem& operator= (IN CONST SConfigItem&); // Prevent assignment\r
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
93 virtual UINT8 Register (IN CHAR8 *, IN EFI_GUID *,IN CHAR8 *Info = NULL);\r
94 virtual VOID Open (VOID);\r
95 virtual BOOLEAN Eof(VOID);\r
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
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
103\r
104private:\r
105 CVfrBufferConfig (IN CONST CVfrBufferConfig&); // Prevent copy-construction\r
106 CVfrBufferConfig& operator= (IN CONST CVfrBufferConfig&); // Prevent assignment\r
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
121 BOOLEAN mIsBitField;\r
122 UINT8 mBitWidth;\r
123 UINT32 mBitOffset;\r
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
132 BOOLEAN mHasBitField;\r
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
162 delete[] mIdentifier;\r
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
178\r
179private:\r
180 SVfrPackStackNode (IN CONST SVfrPackStackNode&); // Prevent copy-construction\r
181 SVfrPackStackNode& operator= (IN CONST SVfrPackStackNode&); // Prevent assignment\r
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
203 EFI_VFR_RETURN_CODE GetTypeField (IN CONST CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
204 EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &, IN BOOLEAN);\r
205 UINT8 GetFieldWidth (IN SVfrDataField *);\r
206 UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32, IN BOOLEAN);\r
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
214 EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);\r
215 EFI_VFR_RETURN_CODE DataTypeAddBitField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);\r
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
221 EFI_VFR_RETURN_CODE GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &, OUT BOOLEAN &);\r
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
225 BOOLEAN DataTypeHasBitField (IN CHAR8 *);\r
226 BOOLEAN IsThisBitField (IN CHAR8 *);\r
227\r
228 BOOLEAN IsTypeNameDefined (IN CHAR8 *);\r
229\r
230 VOID Dump(IN FILE *);\r
231 //\r
232 // First the declared \r
233 //\r
234 CHAR8 *mFirstNewDataTypeName;\r
235#ifdef CVFR_VARDATATYPEDB_DEBUG\r
236 VOID ParserDB ();\r
237#endif\r
238\r
239private:\r
240 CVfrVarDataTypeDB (IN CONST CVfrVarDataTypeDB&); // Prevent copy-construction\r
241 CVfrVarDataTypeDB& operator= (IN CONST CVfrVarDataTypeDB&); // Prevent assignment\r
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
250 EFI_VFR_VARSTORE_NAME,\r
251 EFI_VFR_VARSTORE_BUFFER_BITS\r
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
273 struct {\r
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
281 SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *,IN BOOLEAN, IN BOOLEAN Flag = TRUE);\r
282 SVfrVarStorageNode (IN CHAR8 *, IN EFI_VARSTORE_ID);\r
283 ~SVfrVarStorageNode (VOID);\r
284\r
285private:\r
286 SVfrVarStorageNode (IN CONST SVfrVarStorageNode&); // Prevent copy-construction\r
287 SVfrVarStorageNode& operator= (IN CONST SVfrVarStorageNode&); // Prevent assignment\r
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
298 BOOLEAN mIsBitVar;\r
299\r
300 EFI_VARSTORE_INFO (VOID);\r
301 EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);\r
302 EFI_VARSTORE_INFO& operator=(IN CONST EFI_VARSTORE_INFO &);\r
303 BOOLEAN operator == (IN EFI_VARSTORE_INFO *);\r
304};\r
305\r
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
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
327 BufferVarStoreFieldInfoNode *mBufferFieldInfoListHead;\r
328 BufferVarStoreFieldInfoNode *mBufferFieldInfoListTail;\r
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
336 EFI_VARSTORE_ID CheckGuidField (IN SVfrVarStorageNode *, \r
337 IN EFI_GUID *, \r
338 IN BOOLEAN *, \r
339 OUT EFI_VFR_RETURN_CODE *);\r
340\r
341public:\r
342 CVfrDataStorage ();\r
343 ~CVfrDataStorage ();\r
344 \r
345 SVfrVarStorageNode * GetBufferVarStoreList () {\r
346 return mBufferVarStoreList;\r
347 }\r
348 SVfrVarStorageNode * GetEfiVarStoreList () {\r
349 return mEfiVarStoreList;\r
350 }\r
351 EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *, EFI_VARSTORE_ID);\r
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
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
358\r
359 EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *, IN EFI_GUID *VarGuid = NULL);\r
360 EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);\r
361 EFI_GUID * GetVarStoreGuid (IN EFI_VARSTORE_ID);\r
362 EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
363 EFI_VFR_RETURN_CODE GetVarStoreByDataType (IN CHAR8 *, OUT SVfrVarStorageNode **, IN EFI_GUID *VarGuid = NULL);\r
364\r
365 EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
366 EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);\r
367 EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);\r
368 EFI_VFR_RETURN_CODE AddBufferVarStoreFieldInfo (IN EFI_VARSTORE_INFO *);\r
369 EFI_VFR_RETURN_CODE GetBufferVarStoreFieldInfo (IN OUT EFI_VARSTORE_INFO *);\r
370\r
371private:\r
372 CVfrDataStorage (IN CONST CVfrDataStorage&); // Prevent copy-construction\r
373 CVfrDataStorage& operator= (IN CONST CVfrDataStorage&); // Prevent assignment\r
374};\r
375\r
376extern CVfrDataStorage gCVfrDataStorage;\r
377\r
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
395 EFI_QUESION_TYPE mQtype;\r
396\r
397 SVfrQuestionNode (IN CHAR8 *, IN CHAR8 *, IN UINT32 BitMask = 0);\r
398 ~SVfrQuestionNode ();\r
399\r
400private:\r
401 SVfrQuestionNode (IN CONST SVfrQuestionNode&); // Prevent copy-construction\r
402 SVfrQuestionNode& operator= (IN CONST SVfrQuestionNode&); // Prevent assignment\r
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
425 VOID RegisterRefQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &); \r
426 EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);\r
427 VOID GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &, OUT EFI_QUESION_TYPE *QType = NULL);\r
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
431 VOID ResetInit (IN VOID); \r
432\r
433 VOID SetCompatibleMode (IN BOOLEAN Mode) {\r
434 VfrCompatibleMode = Mode;\r
435 }\r
436\r
437private:\r
438 CVfrQuestionDB (IN CONST CVfrQuestionDB&); // Prevent copy-construction\r
439 CVfrQuestionDB& operator= (IN CONST CVfrQuestionDB&); // Prevent assignment\r
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
452\r
453private:\r
454 SVfrDefaultStoreNode (IN CONST SVfrDefaultStoreNode&); // Prevent copy-construction\r
455 SVfrDefaultStoreNode& operator= (IN CONST SVfrDefaultStoreNode&); // Prevent assignment\r
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
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
471\r
472private:\r
473 CVfrDefaultStore (IN CONST CVfrDefaultStore&); // Prevent copy-construction\r
474 CVfrDefaultStore& operator= (IN CONST CVfrDefaultStore&); // Prevent assignment\r
475};\r
476\r
477extern CVfrDefaultStore gCVfrDefaultStore;\r
478\r
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
489\r
490private:\r
491 SVfrRuleNode (IN CONST SVfrRuleNode&); // Prevent copy-construction\r
492 SVfrRuleNode& operator= (IN CONST SVfrRuleNode&); // Prevent assignment\r
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
506\r
507private:\r
508 CVfrRulesDB (IN CONST CVfrRulesDB&); // Prevent copy-construction\r
509 CVfrRulesDB& operator= (IN CONST CVfrRulesDB&); // Prevent assignment\r
510};\r
511\r
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
526 \r
527 BOOLEAN GetBestLanguage (\r
528 IN CONST CHAR8 *SupportedLanguages,\r
529 IN CHAR8 *Language\r
530 );\r
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
544private:\r
545 CVfrStringDB (IN CONST CVfrStringDB&); // Prevent copy-construction\r
546 CVfrStringDB& operator= (IN CONST CVfrStringDB&); // Prevent assignment\r
547};\r
548\r
549#endif\r