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