]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/VfrCompile/VfrUtilityLib.h
BaseTools/VfrCompile: Add assignment operator definition for some classes
[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
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
LG
70 virtual ~SConfigItem ();\r
71};\r
72\r
73class CVfrBufferConfig {\r
74private:\r
75 SConfigItem *mItemListHead;\r
76 SConfigItem *mItemListTail;\r
77 SConfigItem *mItemListPos;\r
78\r
79public:\r
80 CVfrBufferConfig (VOID);\r
81 virtual ~CVfrBufferConfig (VOID);\r
82\r
4afd3d04 83 virtual UINT8 Register (IN CHAR8 *, IN EFI_GUID *,IN CHAR8 *Info = NULL);\r
30fdf114
LG
84 virtual VOID Open (VOID);\r
85 virtual BOOLEAN Eof(VOID);\r
4afd3d04
LG
86 virtual UINT8 Select (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *Info = NULL);\r
87 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
88#if 0\r
89 virtual UINT8 Read (OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **);\r
90#endif\r
91 virtual VOID Close (VOID);\r
92 virtual VOID OutputCFile (IN FILE *, IN CHAR8 *);\r
93};\r
94\r
95extern CVfrBufferConfig gCVfrBufferConfig;\r
96\r
97#define ALIGN_STUFF(Size, Align) ((Align) - (Size) % (Align))\r
98#define INVALID_ARRAY_INDEX 0xFFFFFFFF\r
99\r
100struct SVfrDataType;\r
101\r
102struct SVfrDataField {\r
103 CHAR8 mFieldName[MAX_NAME_LEN];\r
104 SVfrDataType *mFieldType;\r
105 UINT32 mOffset;\r
106 UINT32 mArrayNum;\r
107 SVfrDataField *mNext;\r
108};\r
109\r
110struct SVfrDataType {\r
111 CHAR8 mTypeName[MAX_NAME_LEN];\r
112 UINT8 mType;\r
113 UINT32 mAlign;\r
114 UINT32 mTotalSize;\r
115 SVfrDataField *mMembers;\r
116 SVfrDataType *mNext;\r
117};\r
118\r
119#define VFR_PACK_ASSIGN 0x01\r
120#define VFR_PACK_SHOW 0x02\r
121#define VFR_PACK_PUSH 0x04\r
122#define VFR_PACK_POP 0x08\r
123\r
124#define PACKSTACK_MAX_SIZE 0x400\r
125\r
126struct SVfrPackStackNode {\r
127 CHAR8 *mIdentifier;\r
128 UINT32 mNumber;\r
129 SVfrPackStackNode *mNext;\r
130\r
131 SVfrPackStackNode (IN CHAR8 *Identifier, IN UINT32 Number) {\r
132 mIdentifier = NULL;\r
133 mNumber = Number;\r
134 mNext = NULL;\r
135\r
136 if (Identifier != NULL) {\r
137 mIdentifier = new CHAR8[strlen (Identifier) + 1];\r
138 strcpy (mIdentifier, Identifier);\r
139 }\r
140 }\r
141\r
142 ~SVfrPackStackNode (VOID) {\r
143 if (mIdentifier != NULL) {\r
fd542523 144 delete[] mIdentifier;\r
30fdf114
LG
145 }\r
146 mNext = NULL;\r
147 }\r
148\r
149 bool Match (IN CHAR8 *Identifier) {\r
150 if (Identifier == NULL) {\r
151 return TRUE;\r
152 } else if (mIdentifier == NULL) {\r
153 return FALSE;\r
154 } else if (strcmp (Identifier, mIdentifier) == 0) {\r
155 return TRUE;\r
156 } else {\r
157 return FALSE;\r
158 }\r
159 }\r
160};\r
161\r
162class CVfrVarDataTypeDB {\r
163private:\r
164 UINT32 mPackAlign;\r
165 SVfrPackStackNode *mPackStack;\r
166\r
167public:\r
168 EFI_VFR_RETURN_CODE Pack (IN UINT32, IN UINT8, IN CHAR8 *Identifier = NULL, IN UINT32 Number = DEFAULT_PACK_ALIGN);\r
169\r
170private:\r
171 SVfrDataType *mDataTypeList;\r
172\r
173 SVfrDataType *mNewDataType;\r
174 SVfrDataType *mCurrDataType;\r
175 SVfrDataField *mCurrDataField;\r
176\r
177 VOID InternalTypesListInit (VOID);\r
178 VOID RegisterNewType (IN SVfrDataType *);\r
179\r
180 EFI_VFR_RETURN_CODE ExtractStructTypeName (IN CHAR8 *&, OUT CHAR8 *);\r
4234283c 181 EFI_VFR_RETURN_CODE GetTypeField (IN CONST CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
30fdf114
LG
182 EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &);\r
183 UINT8 GetFieldWidth (IN SVfrDataField *);\r
184 UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32);\r
185\r
186public:\r
187 CVfrVarDataTypeDB (VOID);\r
188 ~CVfrVarDataTypeDB (VOID);\r
189\r
190 VOID DeclareDataTypeBegin (VOID);\r
191 EFI_VFR_RETURN_CODE SetNewTypeName (IN CHAR8 *);\r
192 EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
193 VOID DeclareDataTypeEnd (VOID);\r
194\r
195 EFI_VFR_RETURN_CODE GetDataType (IN CHAR8 *, OUT SVfrDataType **);\r
196 EFI_VFR_RETURN_CODE GetDataTypeSize (IN CHAR8 *, OUT UINT32 *);\r
197 EFI_VFR_RETURN_CODE GetDataTypeSize (IN UINT8, OUT UINT32 *);\r
198 EFI_VFR_RETURN_CODE GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &);\r
199\r
200 EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT CHAR8 ***, OUT UINT32 *);\r
201 EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN CHAR8 *&, OUT CHAR8 *, OUT UINT32 &);\r
202\r
203 BOOLEAN IsTypeNameDefined (IN CHAR8 *);\r
204\r
205 VOID Dump(IN FILE *);\r
206 //\r
207 // First the declared \r
208 //\r
209 CHAR8 *mFirstNewDataTypeName;\r
210#ifdef CVFR_VARDATATYPEDB_DEBUG\r
211 VOID ParserDB ();\r
212#endif\r
213};\r
214\r
215extern CVfrVarDataTypeDB gCVfrVarDataTypeDB;\r
216\r
217typedef enum {\r
218 EFI_VFR_VARSTORE_INVALID,\r
219 EFI_VFR_VARSTORE_BUFFER,\r
220 EFI_VFR_VARSTORE_EFI,\r
221 EFI_VFR_VARSTORE_NAME\r
222} EFI_VFR_VARSTORE_TYPE;\r
223\r
224struct SVfrVarStorageNode {\r
225 EFI_GUID mGuid;\r
226 CHAR8 *mVarStoreName;\r
227 EFI_VARSTORE_ID mVarStoreId;\r
228 BOOLEAN mAssignedFlag; //Create varstore opcode\r
229 struct SVfrVarStorageNode *mNext;\r
230\r
231 EFI_VFR_VARSTORE_TYPE mVarStoreType;\r
232 union {\r
233 // EFI Variable\r
234 struct {\r
235 EFI_STRING_ID mEfiVarName;\r
236 UINT32 mEfiVarSize;\r
237 } mEfiVar;\r
238\r
239 // Buffer Storage\r
240 SVfrDataType *mDataType;\r
241\r
242 // NameValue Storage\r
243 struct {\r
244 EFI_STRING_ID *mNameTable;\r
245 UINT32 mTableSize;\r
246 } mNameSpace;\r
247 } mStorageInfo;\r
248\r
249public:\r
250 SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);\r
251 SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *, IN BOOLEAN Flag = TRUE);\r
252 SVfrVarStorageNode (IN CHAR8 *, IN EFI_VARSTORE_ID);\r
253 ~SVfrVarStorageNode (VOID);\r
254};\r
255\r
256struct EFI_VARSTORE_INFO {\r
257 EFI_VARSTORE_ID mVarStoreId;\r
258 union {\r
259 EFI_STRING_ID mVarName;\r
260 UINT16 mVarOffset;\r
261 } mInfo;\r
262 UINT8 mVarType;\r
263 UINT32 mVarTotalSize;\r
264\r
265 EFI_VARSTORE_INFO (VOID);\r
266 EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);\r
0d46defe 267 EFI_VARSTORE_INFO& operator=(IN CONST EFI_VARSTORE_INFO &);\r
30fdf114
LG
268 BOOLEAN operator == (IN EFI_VARSTORE_INFO *);\r
269};\r
270\r
74bbe31b
DB
271struct BufferVarStoreFieldInfoNode {\r
272 EFI_VARSTORE_INFO mVarStoreInfo;\r
273 struct BufferVarStoreFieldInfoNode *mNext;\r
274\r
275 BufferVarStoreFieldInfoNode( IN EFI_VARSTORE_INFO *Info );\r
276 ~BufferVarStoreFieldInfoNode ();\r
277};\r
278\r
30fdf114
LG
279#define EFI_VARSTORE_ID_MAX 0xFFFF\r
280#define EFI_FREE_VARSTORE_ID_BITMAP_SIZE ((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
281\r
282class CVfrDataStorage {\r
283private:\r
284 UINT32 mFreeVarStoreIdBitMap[EFI_FREE_VARSTORE_ID_BITMAP_SIZE];\r
285\r
286 struct SVfrVarStorageNode *mBufferVarStoreList;\r
287 struct SVfrVarStorageNode *mEfiVarStoreList;\r
288 struct SVfrVarStorageNode *mNameVarStoreList;\r
289\r
290 struct SVfrVarStorageNode *mCurrVarStorageNode;\r
291 struct SVfrVarStorageNode *mNewVarStorageNode;\r
74bbe31b
DB
292 BufferVarStoreFieldInfoNode *mBufferFieldInfoListHead;\r
293 BufferVarStoreFieldInfoNode *mBufferFieldInfoListTail;\r
30fdf114
LG
294\r
295private:\r
296\r
297 EFI_VARSTORE_ID GetFreeVarStoreId (EFI_VFR_VARSTORE_TYPE VarType = EFI_VFR_VARSTORE_BUFFER);\r
298 BOOLEAN ChekVarStoreIdFree (IN EFI_VARSTORE_ID);\r
299 VOID MarkVarStoreIdUsed (IN EFI_VARSTORE_ID);\r
300 VOID MarkVarStoreIdUnused (IN EFI_VARSTORE_ID);\r
4afd3d04
LG
301 EFI_VARSTORE_ID CheckGuidField (IN SVfrVarStorageNode *, \r
302 IN EFI_GUID *, \r
303 IN BOOLEAN *, \r
304 OUT EFI_VFR_RETURN_CODE *);\r
30fdf114
LG
305\r
306public:\r
307 CVfrDataStorage ();\r
308 ~CVfrDataStorage ();\r
309 \r
310 SVfrVarStorageNode * GetBufferVarStoreList () {\r
311 return mBufferVarStoreList;\r
312 }\r
313 SVfrVarStorageNode * GetEfiVarStoreList () {\r
314 return mEfiVarStoreList;\r
315 }\r
e8a47801 316 EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *, EFI_VARSTORE_ID);\r
30fdf114
LG
317 EFI_VFR_RETURN_CODE NameTableAddItem (EFI_STRING_ID);\r
318 EFI_VFR_RETURN_CODE DeclareNameVarStoreEnd (EFI_GUID *);\r
319\r
320 EFI_VFR_RETURN_CODE DeclareEfiVarStore (IN CHAR8 *, IN EFI_GUID *, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);\r
321\r
322 EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN CHAR8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN BOOLEAN Flag = TRUE);\r
323\r
4afd3d04 324 EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *, IN EFI_GUID *VarGuid = NULL);\r
30fdf114 325 EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);\r
4afd3d04 326 EFI_GUID * GetVarStoreGuid (IN EFI_VARSTORE_ID);\r
30fdf114 327 EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
4afd3d04 328 EFI_VFR_RETURN_CODE GetVarStoreByDataType (IN CHAR8 *, OUT SVfrVarStorageNode **, IN EFI_GUID *VarGuid = NULL);\r
30fdf114 329\r
4afd3d04 330 EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
30fdf114
LG
331 EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);\r
332 EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);\r
74bbe31b
DB
333 EFI_VFR_RETURN_CODE AddBufferVarStoreFieldInfo (IN EFI_VARSTORE_INFO *);\r
334 EFI_VFR_RETURN_CODE GetBufferVarStoreFieldInfo (IN OUT EFI_VARSTORE_INFO *);\r
30fdf114
LG
335};\r
336\r
74bbe31b
DB
337extern CVfrDataStorage gCVfrDataStorage;\r
338\r
30fdf114
LG
339#define EFI_QUESTION_ID_MAX 0xFFFF\r
340#define EFI_FREE_QUESTION_ID_BITMAP_SIZE ((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
341#define EFI_QUESTION_ID_INVALID 0x0\r
342\r
343#define DATE_YEAR_BITMASK 0x0000FFFF\r
344#define DATE_MONTH_BITMASK 0x00FF0000\r
345#define DATE_DAY_BITMASK 0xFF000000\r
346#define TIME_HOUR_BITMASK 0x000000FF\r
347#define TIME_MINUTE_BITMASK 0x0000FF00\r
348#define TIME_SECOND_BITMASK 0x00FF0000\r
349\r
350struct SVfrQuestionNode {\r
351 CHAR8 *mName;\r
352 CHAR8 *mVarIdStr;\r
353 EFI_QUESTION_ID mQuestionId;\r
354 UINT32 mBitMask;\r
355 SVfrQuestionNode *mNext;\r
52302d4d 356 EFI_QUESION_TYPE mQtype;\r
30fdf114
LG
357\r
358 SVfrQuestionNode (IN CHAR8 *, IN CHAR8 *, IN UINT32 BitMask = 0);\r
359 ~SVfrQuestionNode ();\r
360};\r
361\r
362class CVfrQuestionDB {\r
363private:\r
364 SVfrQuestionNode *mQuestionList;\r
365 UINT32 mFreeQIdBitMap[EFI_FREE_QUESTION_ID_BITMAP_SIZE];\r
366\r
367private:\r
368 EFI_QUESTION_ID GetFreeQuestionId (VOID);\r
369 BOOLEAN ChekQuestionIdFree (IN EFI_QUESTION_ID);\r
370 VOID MarkQuestionIdUsed (IN EFI_QUESTION_ID);\r
371 VOID MarkQuestionIdUnused (IN EFI_QUESTION_ID);\r
372\r
373public:\r
374 CVfrQuestionDB ();\r
375 ~CVfrQuestionDB();\r
376\r
377 EFI_VFR_RETURN_CODE RegisterQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
378 VOID RegisterOldDateQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
379 VOID RegisterNewDateQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
380 VOID RegisterOldTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
381 VOID RegisterNewTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
4234283c 382 VOID RegisterRefQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &); \r
30fdf114 383 EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);\r
52302d4d 384 VOID GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &, OUT EFI_QUESION_TYPE *QType = NULL);\r
30fdf114
LG
385 EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID);\r
386 EFI_VFR_RETURN_CODE FindQuestion (IN CHAR8 *);\r
387 VOID PrintAllQuestion (IN VOID);\r
388 VOID ResetInit (IN VOID); \r
389\r
390 VOID SetCompatibleMode (IN BOOLEAN Mode) {\r
391 VfrCompatibleMode = Mode;\r
392 }\r
393};\r
394\r
395struct SVfrDefaultStoreNode {\r
396 EFI_IFR_DEFAULTSTORE *mObjBinAddr;\r
397 CHAR8 *mRefName;\r
398 EFI_STRING_ID mDefaultStoreNameId;\r
399 UINT16 mDefaultId;\r
400\r
401 SVfrDefaultStoreNode *mNext;\r
402\r
403 SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);\r
404 ~SVfrDefaultStoreNode();\r
405};\r
406\r
407class CVfrDefaultStore {\r
408private:\r
409 SVfrDefaultStoreNode *mDefaultStoreList;\r
410\r
411public:\r
412 CVfrDefaultStore ();\r
413 ~CVfrDefaultStore ();\r
414\r
415 EFI_VFR_RETURN_CODE RegisterDefaultStore (IN CHAR8 *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);\r
416 EFI_VFR_RETURN_CODE ReRegisterDefaultStoreById (IN UINT16, IN CHAR8 *, IN EFI_STRING_ID);\r
417 BOOLEAN DefaultIdRegistered (IN UINT16);\r
418 EFI_VFR_RETURN_CODE GetDefaultId (IN CHAR8 *, OUT UINT16 *);\r
4afd3d04 419 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
30fdf114
LG
420};\r
421\r
74bbe31b
DB
422extern CVfrDefaultStore gCVfrDefaultStore;\r
423\r
30fdf114
LG
424#define EFI_RULE_ID_START 0x01\r
425#define EFI_RULE_ID_INVALID 0x00\r
426\r
427struct SVfrRuleNode {\r
428 UINT8 mRuleId;\r
429 CHAR8 *mRuleName;\r
430 SVfrRuleNode *mNext;\r
431\r
432 SVfrRuleNode(IN CHAR8 *, IN UINT8);\r
433 ~SVfrRuleNode();\r
434};\r
435\r
436class CVfrRulesDB {\r
437private:\r
438 SVfrRuleNode *mRuleList;\r
439 UINT8 mFreeRuleId;\r
440\r
441public:\r
442 CVfrRulesDB ();\r
443 ~CVfrRulesDB();\r
444\r
445 VOID RegisterRule (IN CHAR8 *);\r
446 UINT8 GetRuleId (IN CHAR8 *);\r
447};\r
448\r
4234283c
LG
449class CVfrStringDB {\r
450private:\r
451 CHAR8 *mStringFileName;\r
452\r
453 EFI_STATUS FindStringBlock (\r
454 IN UINT8 *StringData,\r
455 IN EFI_STRING_ID StringId,\r
456 OUT UINT32 *StringTextOffset,\r
457 OUT UINT8 *BlockType\r
458 );\r
459\r
460 UINT32 GetUnicodeStringTextSize (\r
461 IN UINT8 *StringSrc\r
462 );\r
64b2609f
LG
463 \r
464 BOOLEAN GetBestLanguage (\r
465 IN CONST CHAR8 *SupportedLanguages,\r
466 IN CHAR8 *Language\r
467 );\r
4234283c
LG
468\r
469public:\r
470 CVfrStringDB ();\r
471 ~CVfrStringDB ();\r
472\r
473 VOID SetStringFileName (\r
474 IN CHAR8 *StringFileName\r
475 );\r
476\r
477 CHAR8 * GetVarStoreNameFormStringId (\r
478 IN EFI_STRING_ID StringId\r
479 );\r
480\r
481};\r
482\r
30fdf114 483#endif\r