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