mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-30 12:58:18 +00:00 
			
		
		
		
	 4234283c3a
			
		
	
	
		4234283c3a
		
	
	
	
	
		
			
			BaseTool Branch: https://edk2-buildtools.svn.sourceforge.net/svnroot/edk2-buildtools/branches/Releases/BaseTools_r2100 Signed-off-by: lgao4 Reviewed-by: hchen30 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12214 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			457 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			457 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /** @file
 | |
|   
 | |
|   Vfr common library functions.
 | |
| 
 | |
| Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
 | |
| This program and the accompanying materials                          
 | |
| are licensed and made available under the terms and conditions of the BSD License         
 | |
| which accompanies this distribution.  The full text of the license may be found at        
 | |
| http://opensource.org/licenses/bsd-license.php                                            
 | |
|                                                                                           
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _VFRUTILITYLIB_H_
 | |
| #define _VFRUTILITYLIB_H_
 | |
| 
 | |
| #include "string.h"
 | |
| #include "Common/UefiBaseTypes.h"
 | |
| #include "EfiVfr.h"
 | |
| #include "VfrError.h"
 | |
| 
 | |
| extern BOOLEAN  VfrCompatibleMode;
 | |
| 
 | |
| #define MAX_NAME_LEN                       64
 | |
| #define MAX_STRING_LEN                     0x100
 | |
| #define DEFAULT_ALIGN                      1
 | |
| #define DEFAULT_PACK_ALIGN                 0x8
 | |
| #define DEFAULT_NAME_TABLE_ITEMS           1024
 | |
| 
 | |
| #define EFI_BITS_SHIFT_PER_UINT32          0x5
 | |
| #define EFI_BITS_PER_UINT32                (1 << EFI_BITS_SHIFT_PER_UINT32)
 | |
| 
 | |
| #define BUFFER_SAFE_FREE(Buf)              do { if ((Buf) != NULL) { delete (Buf); } } while (0);
 | |
| 
 | |
| class CVfrBinaryOutput {
 | |
| public:
 | |
|   virtual VOID WriteLine (IN FILE *, IN UINT32, IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);
 | |
|   virtual VOID WriteEnd (IN FILE *, IN UINT32, IN CONST CHAR8 *, IN CHAR8 *, IN UINT32);
 | |
| };
 | |
| 
 | |
| UINT32
 | |
| _STR2U32 (
 | |
|   IN CHAR8 *Str
 | |
|   );
 | |
| 
 | |
| struct SConfigInfo {
 | |
|   UINT16             mOffset;
 | |
|   UINT16             mWidth;
 | |
|   UINT8              *mValue;
 | |
|   SConfigInfo        *mNext;
 | |
| 
 | |
|   SConfigInfo (IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);
 | |
|   ~SConfigInfo (VOID);
 | |
| };
 | |
| 
 | |
| struct SConfigItem {
 | |
|   CHAR8         *mName;         // varstore name
 | |
|   CHAR8         *mId;           // varstore ID
 | |
|   SConfigInfo   *mInfoStrList;  // list of Offset/Value in the varstore
 | |
|   SConfigItem   *mNext;
 | |
| 
 | |
| public:
 | |
|   SConfigItem (IN CHAR8 *, IN CHAR8 *);
 | |
|   SConfigItem (IN CHAR8 *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT16, IN EFI_IFR_TYPE_VALUE);
 | |
|   virtual ~SConfigItem ();
 | |
| };
 | |
| 
 | |
| class CVfrBufferConfig {
 | |
| private:
 | |
|   SConfigItem *mItemListHead;
 | |
|   SConfigItem *mItemListTail;
 | |
|   SConfigItem *mItemListPos;
 | |
| 
 | |
| public:
 | |
|   CVfrBufferConfig (VOID);
 | |
|   virtual ~CVfrBufferConfig (VOID);
 | |
| 
 | |
|   virtual UINT8   Register (IN CHAR8 *, IN CHAR8 *Info = NULL);
 | |
|   virtual VOID    Open (VOID);
 | |
|   virtual BOOLEAN Eof(VOID);
 | |
|   virtual UINT8   Select (IN CHAR8 *, IN CHAR8 *Info = NULL);
 | |
|   virtual UINT8   Write (IN CONST CHAR8, IN CHAR8 *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);
 | |
| #if 0
 | |
|   virtual UINT8   Read (OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **);
 | |
| #endif
 | |
|   virtual VOID    Close (VOID);
 | |
|   virtual VOID    OutputCFile (IN FILE *, IN CHAR8 *);
 | |
| };
 | |
| 
 | |
| extern CVfrBufferConfig gCVfrBufferConfig;
 | |
| 
 | |
| #define ALIGN_STUFF(Size, Align) ((Align) - (Size) % (Align))
 | |
| #define INVALID_ARRAY_INDEX      0xFFFFFFFF
 | |
| 
 | |
| struct SVfrDataType;
 | |
| 
 | |
| struct SVfrDataField {
 | |
|   CHAR8                     mFieldName[MAX_NAME_LEN];
 | |
|   SVfrDataType              *mFieldType;
 | |
|   UINT32                    mOffset;
 | |
|   UINT32                    mArrayNum;
 | |
|   SVfrDataField             *mNext;
 | |
| };
 | |
| 
 | |
| struct SVfrDataType {
 | |
|   CHAR8                     mTypeName[MAX_NAME_LEN];
 | |
|   UINT8                     mType;
 | |
|   UINT32                    mAlign;
 | |
|   UINT32                    mTotalSize;
 | |
|   SVfrDataField             *mMembers;
 | |
|   SVfrDataType              *mNext;
 | |
| };
 | |
| 
 | |
| #define VFR_PACK_ASSIGN     0x01
 | |
| #define VFR_PACK_SHOW       0x02
 | |
| #define VFR_PACK_PUSH       0x04
 | |
| #define VFR_PACK_POP        0x08
 | |
| 
 | |
| #define PACKSTACK_MAX_SIZE  0x400
 | |
| 
 | |
| struct SVfrPackStackNode {
 | |
|   CHAR8                     *mIdentifier;
 | |
|   UINT32                    mNumber;
 | |
|   SVfrPackStackNode         *mNext;
 | |
| 
 | |
|   SVfrPackStackNode (IN CHAR8 *Identifier, IN UINT32 Number) {
 | |
|     mIdentifier = NULL;
 | |
|     mNumber     = Number;
 | |
|     mNext       = NULL;
 | |
| 
 | |
|     if (Identifier != NULL) {
 | |
|       mIdentifier = new CHAR8[strlen (Identifier) + 1];
 | |
|       strcpy (mIdentifier, Identifier);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   ~SVfrPackStackNode (VOID) {
 | |
|     if (mIdentifier != NULL) {
 | |
|       delete mIdentifier;
 | |
|     }
 | |
|     mNext = NULL;
 | |
|   }
 | |
| 
 | |
|   bool Match (IN CHAR8 *Identifier) {
 | |
|     if (Identifier == NULL) {
 | |
|       return TRUE;
 | |
|     } else if (mIdentifier == NULL) {
 | |
|       return FALSE;
 | |
|     } else if (strcmp (Identifier, mIdentifier) == 0) {
 | |
|       return TRUE;
 | |
|     } else {
 | |
|       return FALSE;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| class CVfrVarDataTypeDB {
 | |
| private:
 | |
|   UINT32                    mPackAlign;
 | |
|   SVfrPackStackNode         *mPackStack;
 | |
| 
 | |
| public:
 | |
|   EFI_VFR_RETURN_CODE       Pack (IN UINT32, IN UINT8, IN CHAR8 *Identifier = NULL, IN UINT32 Number = DEFAULT_PACK_ALIGN);
 | |
| 
 | |
| private:
 | |
|   SVfrDataType              *mDataTypeList;
 | |
| 
 | |
|   SVfrDataType              *mNewDataType;
 | |
|   SVfrDataType              *mCurrDataType;
 | |
|   SVfrDataField             *mCurrDataField;
 | |
| 
 | |
|   VOID InternalTypesListInit (VOID);
 | |
|   VOID RegisterNewType (IN SVfrDataType *);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE ExtractStructTypeName (IN CHAR8 *&, OUT CHAR8 *);
 | |
|   EFI_VFR_RETURN_CODE GetTypeField (IN CONST CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);
 | |
|   EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &);
 | |
|   UINT8               GetFieldWidth (IN SVfrDataField *);
 | |
|   UINT32              GetFieldSize (IN SVfrDataField *, IN UINT32);
 | |
| 
 | |
| public:
 | |
|   CVfrVarDataTypeDB (VOID);
 | |
|   ~CVfrVarDataTypeDB (VOID);
 | |
| 
 | |
|   VOID                DeclareDataTypeBegin (VOID);
 | |
|   EFI_VFR_RETURN_CODE SetNewTypeName (IN CHAR8 *);
 | |
|   EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32);
 | |
|   VOID                DeclareDataTypeEnd (VOID);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE GetDataType (IN CHAR8 *, OUT SVfrDataType **);
 | |
|   EFI_VFR_RETURN_CODE GetDataTypeSize (IN CHAR8 *, OUT UINT32 *);
 | |
|   EFI_VFR_RETURN_CODE GetDataTypeSize (IN UINT8, OUT UINT32 *);
 | |
|   EFI_VFR_RETURN_CODE GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT CHAR8 ***, OUT UINT32 *);
 | |
|   EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN CHAR8 *&, OUT CHAR8 *, OUT UINT32 &);
 | |
| 
 | |
|   BOOLEAN             IsTypeNameDefined (IN CHAR8 *);
 | |
| 
 | |
|   VOID                Dump(IN FILE *);
 | |
|   //
 | |
|   // First the declared 
 | |
|   //
 | |
|   CHAR8               *mFirstNewDataTypeName;
 | |
| #ifdef CVFR_VARDATATYPEDB_DEBUG
 | |
|   VOID ParserDB ();
 | |
| #endif
 | |
| };
 | |
| 
 | |
| extern CVfrVarDataTypeDB  gCVfrVarDataTypeDB;
 | |
| 
 | |
| typedef enum {
 | |
|   EFI_VFR_VARSTORE_INVALID,
 | |
|   EFI_VFR_VARSTORE_BUFFER,
 | |
|   EFI_VFR_VARSTORE_EFI,
 | |
|   EFI_VFR_VARSTORE_NAME
 | |
| } EFI_VFR_VARSTORE_TYPE;
 | |
| 
 | |
| struct SVfrVarStorageNode {
 | |
|   EFI_GUID                  mGuid;
 | |
|   CHAR8                     *mVarStoreName;
 | |
|   EFI_VARSTORE_ID           mVarStoreId;
 | |
|   BOOLEAN                   mAssignedFlag; //Create varstore opcode
 | |
|   struct SVfrVarStorageNode *mNext;
 | |
| 
 | |
|   EFI_VFR_VARSTORE_TYPE     mVarStoreType;
 | |
|   union {
 | |
|     // EFI Variable
 | |
|     struct {
 | |
|       EFI_STRING_ID           mEfiVarName;
 | |
|       UINT32                  mEfiVarSize;
 | |
|     } mEfiVar;
 | |
| 
 | |
|     // Buffer Storage
 | |
|     SVfrDataType            *mDataType;
 | |
| 
 | |
|     // NameValue Storage
 | |
| 	struct {
 | |
|       EFI_STRING_ID         *mNameTable;
 | |
|       UINT32                mTableSize;
 | |
|     } mNameSpace;
 | |
|   } mStorageInfo;
 | |
| 
 | |
| public:
 | |
|   SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);
 | |
|   SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *, IN BOOLEAN Flag = TRUE);
 | |
|   SVfrVarStorageNode (IN CHAR8 *, IN EFI_VARSTORE_ID);
 | |
|   ~SVfrVarStorageNode (VOID);
 | |
| };
 | |
| 
 | |
| struct EFI_VARSTORE_INFO {
 | |
|   EFI_VARSTORE_ID           mVarStoreId;
 | |
|   union {
 | |
|     EFI_STRING_ID           mVarName;
 | |
|     UINT16                  mVarOffset;
 | |
|   } mInfo;
 | |
|   UINT8                     mVarType;
 | |
|   UINT32                    mVarTotalSize;
 | |
| 
 | |
|   EFI_VARSTORE_INFO (VOID);
 | |
|   EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);
 | |
|   BOOLEAN operator == (IN EFI_VARSTORE_INFO *);
 | |
| };
 | |
| 
 | |
| #define EFI_VARSTORE_ID_MAX              0xFFFF
 | |
| #define EFI_FREE_VARSTORE_ID_BITMAP_SIZE ((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)
 | |
| 
 | |
| class CVfrDataStorage {
 | |
| private:
 | |
|   UINT32                    mFreeVarStoreIdBitMap[EFI_FREE_VARSTORE_ID_BITMAP_SIZE];
 | |
| 
 | |
|   struct SVfrVarStorageNode *mBufferVarStoreList;
 | |
|   struct SVfrVarStorageNode *mEfiVarStoreList;
 | |
|   struct SVfrVarStorageNode *mNameVarStoreList;
 | |
| 
 | |
|   struct SVfrVarStorageNode *mCurrVarStorageNode;
 | |
|   struct SVfrVarStorageNode *mNewVarStorageNode;
 | |
| 
 | |
| private:
 | |
| 
 | |
|   EFI_VARSTORE_ID GetFreeVarStoreId (EFI_VFR_VARSTORE_TYPE VarType = EFI_VFR_VARSTORE_BUFFER);
 | |
|   BOOLEAN         ChekVarStoreIdFree (IN EFI_VARSTORE_ID);
 | |
|   VOID            MarkVarStoreIdUsed (IN EFI_VARSTORE_ID);
 | |
|   VOID            MarkVarStoreIdUnused (IN EFI_VARSTORE_ID);
 | |
| 
 | |
| public:
 | |
|   CVfrDataStorage ();
 | |
|   ~CVfrDataStorage ();
 | |
|   
 | |
|   SVfrVarStorageNode * GetBufferVarStoreList () {
 | |
|     return mBufferVarStoreList;
 | |
|   }
 | |
|   SVfrVarStorageNode * GetEfiVarStoreList () {
 | |
|     return mEfiVarStoreList;
 | |
|   }
 | |
|   EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *);
 | |
|   EFI_VFR_RETURN_CODE NameTableAddItem (EFI_STRING_ID);
 | |
|   EFI_VFR_RETURN_CODE DeclareNameVarStoreEnd (EFI_GUID *);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE DeclareEfiVarStore (IN CHAR8 *, IN EFI_GUID *, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN CHAR8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN BOOLEAN Flag = TRUE);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *);
 | |
|   EFI_VFR_RETURN_CODE GetVarStoreType (IN CHAR8 *, OUT EFI_VFR_VARSTORE_TYPE &);
 | |
|   EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);
 | |
|   EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT CHAR8 **);
 | |
|   EFI_VFR_RETURN_CODE GetVarStoreByDataType (IN CHAR8 *, OUT SVfrVarStorageNode **);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN CHAR8 *, OUT CHAR8 **);
 | |
|   EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);
 | |
|   EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE BufferVarStoreRequestElementAdd (IN CHAR8 *, IN EFI_VARSTORE_INFO &);
 | |
| };
 | |
| 
 | |
| #define EFI_QUESTION_ID_MAX              0xFFFF
 | |
| #define EFI_FREE_QUESTION_ID_BITMAP_SIZE ((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)
 | |
| #define EFI_QUESTION_ID_INVALID          0x0
 | |
| 
 | |
| #define DATE_YEAR_BITMASK                0x0000FFFF
 | |
| #define DATE_MONTH_BITMASK               0x00FF0000
 | |
| #define DATE_DAY_BITMASK                 0xFF000000
 | |
| #define TIME_HOUR_BITMASK                0x000000FF
 | |
| #define TIME_MINUTE_BITMASK              0x0000FF00
 | |
| #define TIME_SECOND_BITMASK              0x00FF0000
 | |
| 
 | |
| struct SVfrQuestionNode {
 | |
|   CHAR8                     *mName;
 | |
|   CHAR8                     *mVarIdStr;
 | |
|   EFI_QUESTION_ID           mQuestionId;
 | |
|   UINT32                    mBitMask;
 | |
|   SVfrQuestionNode          *mNext;
 | |
|   EFI_QUESION_TYPE          mQtype;
 | |
| 
 | |
|   SVfrQuestionNode (IN CHAR8 *, IN CHAR8 *, IN UINT32 BitMask = 0);
 | |
|   ~SVfrQuestionNode ();
 | |
| };
 | |
| 
 | |
| class CVfrQuestionDB {
 | |
| private:
 | |
|   SVfrQuestionNode          *mQuestionList;
 | |
|   UINT32                    mFreeQIdBitMap[EFI_FREE_QUESTION_ID_BITMAP_SIZE];
 | |
| 
 | |
| private:
 | |
|   EFI_QUESTION_ID GetFreeQuestionId (VOID);
 | |
|   BOOLEAN         ChekQuestionIdFree (IN EFI_QUESTION_ID);
 | |
|   VOID            MarkQuestionIdUsed (IN EFI_QUESTION_ID);
 | |
|   VOID            MarkQuestionIdUnused (IN EFI_QUESTION_ID);
 | |
| 
 | |
| public:
 | |
|   CVfrQuestionDB ();
 | |
|   ~CVfrQuestionDB();
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE RegisterQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);
 | |
|   VOID                RegisterOldDateQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);
 | |
|   VOID                RegisterNewDateQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);
 | |
|   VOID                RegisterOldTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);
 | |
|   VOID                RegisterNewTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);
 | |
|   VOID                RegisterRefQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);  
 | |
|   EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);
 | |
|   VOID                GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &, OUT EFI_QUESION_TYPE *QType = NULL);
 | |
|   EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID);
 | |
|   EFI_VFR_RETURN_CODE FindQuestion (IN CHAR8 *);
 | |
|   VOID                PrintAllQuestion (IN VOID);
 | |
|   VOID                ResetInit (IN VOID); 
 | |
| 
 | |
|   VOID SetCompatibleMode (IN BOOLEAN Mode) {
 | |
|     VfrCompatibleMode = Mode;
 | |
|   }
 | |
| };
 | |
| 
 | |
| struct SVfrDefaultStoreNode {
 | |
|   EFI_IFR_DEFAULTSTORE      *mObjBinAddr;
 | |
|   CHAR8                     *mRefName;
 | |
|   EFI_STRING_ID             mDefaultStoreNameId;
 | |
|   UINT16                    mDefaultId;
 | |
| 
 | |
|   SVfrDefaultStoreNode      *mNext;
 | |
| 
 | |
|   SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);
 | |
|   ~SVfrDefaultStoreNode();
 | |
| };
 | |
| 
 | |
| class CVfrDefaultStore {
 | |
| private:
 | |
|   SVfrDefaultStoreNode      *mDefaultStoreList;
 | |
| 
 | |
| public:
 | |
|   CVfrDefaultStore ();
 | |
|   ~CVfrDefaultStore ();
 | |
| 
 | |
|   EFI_VFR_RETURN_CODE RegisterDefaultStore (IN CHAR8 *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);
 | |
|   EFI_VFR_RETURN_CODE ReRegisterDefaultStoreById (IN UINT16, IN CHAR8 *, IN EFI_STRING_ID);
 | |
|   BOOLEAN             DefaultIdRegistered (IN UINT16);
 | |
|   EFI_VFR_RETURN_CODE GetDefaultId (IN CHAR8 *, OUT UINT16 *);
 | |
|   EFI_VFR_RETURN_CODE BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID, IN EFI_VARSTORE_INFO &, IN CHAR8 *, IN UINT8, IN EFI_IFR_TYPE_VALUE);
 | |
| };
 | |
| 
 | |
| #define EFI_RULE_ID_START    0x01
 | |
| #define EFI_RULE_ID_INVALID  0x00
 | |
| 
 | |
| struct SVfrRuleNode {
 | |
|   UINT8                     mRuleId;
 | |
|   CHAR8                     *mRuleName;
 | |
|   SVfrRuleNode              *mNext;
 | |
| 
 | |
|   SVfrRuleNode(IN CHAR8 *, IN UINT8);
 | |
|   ~SVfrRuleNode();
 | |
| };
 | |
| 
 | |
| class CVfrRulesDB {
 | |
| private:
 | |
|   SVfrRuleNode              *mRuleList;
 | |
|   UINT8                     mFreeRuleId;
 | |
| 
 | |
| public:
 | |
|   CVfrRulesDB ();
 | |
|   ~CVfrRulesDB();
 | |
| 
 | |
|   VOID RegisterRule (IN CHAR8 *);
 | |
|   UINT8 GetRuleId (IN CHAR8 *);
 | |
| };
 | |
| 
 | |
| class CVfrStringDB {
 | |
| private:
 | |
|   CHAR8   *mStringFileName;
 | |
| 
 | |
|   EFI_STATUS FindStringBlock (
 | |
|     IN  UINT8            *StringData,
 | |
|     IN  EFI_STRING_ID    StringId,
 | |
|     OUT UINT32           *StringTextOffset,
 | |
|     OUT UINT8            *BlockType
 | |
|     );
 | |
| 
 | |
|   UINT32 GetUnicodeStringTextSize (
 | |
|     IN  UINT8            *StringSrc
 | |
|     );
 | |
| 
 | |
| public:
 | |
|   CVfrStringDB ();
 | |
|   ~CVfrStringDB ();
 | |
| 
 | |
|   VOID SetStringFileName (
 | |
|     IN CHAR8 *StringFileName
 | |
|     );
 | |
| 
 | |
|   CHAR8 * GetVarStoreNameFormStringId (
 | |
|     IN EFI_STRING_ID StringId
 | |
|     );
 | |
| 
 | |
| };
 | |
| 
 | |
| #endif
 |