]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.h
1) Sync EdkCompatibilityPkg with EDK 1.04. The changes includes:
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrUtilityLib.h
diff --git a/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.h b/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.h
new file mode 100644 (file)
index 0000000..e8c1009
--- /dev/null
@@ -0,0 +1,341 @@
+#ifndef _VFRUTILITYLIB_H_\r
+#define _VFRUTILITYLIB_H_\r
+\r
+#include "Tiano.h"\r
+#include "string.h"\r
+#include "EfiTypes.h"\r
+#include "EfiVfr.h"\r
+#include "VfrError.h"\r
+\r
+#define MAX_NAME_LEN                       64\r
+#define DEFAULT_ALIGN                      1\r
+#define DEFAULT_PACK_ALIGN                 0xFFFFFFFF\r
+#define DEFAULT_NAME_TABLE_ITEMS           1024\r
+\r
+#define EFI_BITS_SHIFT_PER_UINT32          0x5\r
+#define EFI_BITS_PER_UINT32                (1 << EFI_BITS_SHIFT_PER_UINT32)\r
+\r
+#define BUFFER_SAFE_FREE(Buf)              do { if ((Buf) != NULL) { delete (Buf); } } while (0);\r
+\r
+class CVfrBinaryOutput {\r
+public:\r
+  virtual VOID WriteLine (IN FILE *, IN UINT32, IN INT8 *, IN INT8 *, IN UINT32);\r
+  virtual VOID WriteEnd (IN FILE *, IN UINT32, IN INT8 *, IN INT8 *, IN UINT32);\r
+};\r
+\r
+UINT32\r
+_STR2U32 (\r
+  IN INT8 *Str\r
+  );\r
+\r
+struct SConfigInfo {\r
+  UINT16             mOffset;\r
+  UINT16             mWidth;\r
+  UINT8              *mValue;\r
+  SConfigInfo        *mNext;\r
+\r
+  SConfigInfo (IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
+  ~SConfigInfo (VOID);\r
+};\r
+\r
+struct SConfigItem {\r
+  INT8          *mId;\r
+  INT8          *mInfo;\r
+  SConfigInfo   *mInfoStrList;\r
+  SConfigItem   *mNext;\r
+\r
+public:\r
+  SConfigItem (IN INT8 *, IN INT8 *);\r
+  SConfigItem (IN INT8 *, IN INT8 *, IN UINT8, IN UINT16, IN UINT16, IN EFI_IFR_TYPE_VALUE);\r
+  virtual ~SConfigItem ();\r
+};\r
+\r
+class CVfrBufferConfig {\r
+private:\r
+  SConfigItem *mItemListHead;\r
+  SConfigItem *mItemListTail;\r
+  SConfigItem *mItemListPos;\r
+\r
+public:\r
+  CVfrBufferConfig (VOID);\r
+  virtual ~CVfrBufferConfig (VOID);\r
+\r
+  virtual UINT8   Register (IN INT8 *, IN INT8 *Info = NULL);\r
+  virtual VOID    Open (VOID);\r
+  virtual BOOLEAN Eof(VOID);\r
+  virtual UINT8   Select (IN INT8 *, IN INT8 *Info = NULL);\r
+  virtual UINT8   Write (IN CONST CHAR8, IN INT8 *, IN INT8 *, IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
+#if 0\r
+  virtual UINT8   Read (OUT INT8 **, OUT INT8 **, OUT INT8 **, OUT INT8 **, OUT INT8 **);\r
+#endif\r
+  virtual VOID    Close (VOID);\r
+  virtual VOID    OutputCFile (IN FILE *, IN INT8 *);\r
+};\r
+\r
+extern CVfrBufferConfig gCVfrBufferConfig;\r
+\r
+#define ALIGN_STUFF(Size, Align) ((Align) - (Size) % (Align))\r
+#define INVALID_ARRAY_INDEX      0xFFFFFFFF\r
+\r
+struct SVfrDataType;\r
+\r
+struct SVfrDataField {\r
+  INT8                      mFieldName[MAX_NAME_LEN];\r
+  SVfrDataType              *mFieldType;\r
+  UINT32                    mOffset;\r
+  UINT32                    mArrayNum;\r
+  SVfrDataField             *mNext;\r
+};\r
+\r
+struct SVfrDataType {\r
+  INT8                      mTypeName[MAX_NAME_LEN];\r
+  UINT8                     mType;\r
+  UINT32                    mAlign;\r
+  UINT32                    mTotalSize;\r
+  SVfrDataField             *mMembers;\r
+  SVfrDataType              *mNext;\r
+};\r
+\r
+class CVfrVarDataTypeDB {\r
+private:\r
+  SVfrDataType              *mDataTypeList;\r
+  UINT32                    mPackAlign;\r
+\r
+  SVfrDataType              *mNewDataType;\r
+  SVfrDataType              *mCurrDataType;\r
+  SVfrDataField             *mCurrDataField;\r
+\r
+  VOID InternalTypesListInit (VOID);\r
+  VOID RegisterNewType (IN SVfrDataType *);\r
+\r
+  EFI_VFR_RETURN_CODE ExtractStructTypeName (IN INT8 *&, OUT INT8 *);\r
+  EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN INT8 *&, OUT INT8 *, OUT UINT32 &);\r
+  EFI_VFR_RETURN_CODE GetTypeField (IN INT8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
+  EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &);\r
+  UINT8               GetFieldWidth (IN SVfrDataField *);\r
+  UINT32              GetFieldSize (IN SVfrDataField *, IN UINT32);\r
+\r
+public:\r
+  CVfrVarDataTypeDB (VOID);\r
+  ~CVfrVarDataTypeDB (VOID);\r
+\r
+  EFI_VFR_RETURN_CODE Pack (IN UINT32);\r
+  VOID                UnPack (VOID);\r
+\r
+  VOID                DeclareDataTypeBegin (VOID);\r
+  EFI_VFR_RETURN_CODE SetNewTypeName (IN INT8 *);\r
+  EFI_VFR_RETURN_CODE DataTypeAddField (IN INT8 *, IN INT8 *, IN UINT32);\r
+  VOID                DeclareDataTypeEnd (VOID);\r
+\r
+  EFI_VFR_RETURN_CODE GetDataType (IN INT8 *, OUT SVfrDataType **);\r
+  EFI_VFR_RETURN_CODE GetDataTypeSize (IN INT8 *, OUT UINT32 *);\r
+  EFI_VFR_RETURN_CODE GetDataFieldInfo (IN INT8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &);\r
+\r
+  EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT INT8 ***, OUT UINT32 *);\r
+  BOOLEAN             IsTypeNameDefined (IN INT8 *);\r
+\r
+#ifdef CVFR_VARDATATYPEDB_DEBUG\r
+  VOID ParserDB ();\r
+#endif\r
+};\r
+\r
+typedef enum {\r
+  EFI_VFR_VARSTORE_INVALID,\r
+  EFI_VFR_VARSTORE_BUFFER,\r
+  EFI_VFR_VARSTORE_EFI,\r
+  EFI_VFR_VARSTORE_NAME\r
+} EFI_VFR_VARSTORE_TYPE;\r
+\r
+struct SVfrVarStorageNode {\r
+  EFI_GUID                  mGuid;\r
+  INT8                      *mVarStoreName;\r
+  EFI_VARSTORE_ID           mVarStoreId;\r
+  struct SVfrVarStorageNode *mNext;\r
+\r
+  EFI_VFR_VARSTORE_TYPE     mVarStoreType;\r
+  union {\r
+    // EFI Variable\r
+    struct {\r
+      EFI_STRING_ID           mEfiVarName;\r
+      UINT32                  mEfiVarSize;\r
+    } mEfiVar;\r
+\r
+    // Buffer Storage\r
+    SVfrDataType            *mDataType;\r
+\r
+    // NameValue Storage\r
+       struct {\r
+      EFI_STRING_ID         *mNameTable;\r
+      UINT32                mTableSize;\r
+    } mNameSpace;\r
+  } mStorageInfo;\r
+\r
+public:\r
+  SVfrVarStorageNode (IN EFI_GUID *, IN INT8 *, IN EFI_VARSTORE_ID, IN EFI_STRING_ID, IN UINT32);\r
+  SVfrVarStorageNode (IN EFI_GUID *, IN INT8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *);\r
+  SVfrVarStorageNode (IN INT8 *, IN EFI_VARSTORE_ID);\r
+  ~SVfrVarStorageNode (VOID);\r
+};\r
+\r
+struct EFI_VARSTORE_INFO {\r
+  EFI_VARSTORE_ID           mVarStoreId;\r
+  union {\r
+    EFI_STRING_ID           mVarName;\r
+    UINT16                  mVarOffset;\r
+  } mInfo;\r
+  UINT8                     mVarType;\r
+  UINT32                    mVarTotalSize;\r
+\r
+  EFI_VARSTORE_INFO (VOID);\r
+  EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);\r
+  BOOLEAN operator == (IN EFI_VARSTORE_INFO *);\r
+};\r
+\r
+#define EFI_VARSTORE_ID_MAX              0xFFFF\r
+#define EFI_FREE_VARSTORE_ID_BITMAP_SIZE ((EFI_VARSTORE_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
+\r
+class CVfrDataStorage {\r
+private:\r
+  UINT32                    mFreeVarStoreIdBitMap[EFI_FREE_VARSTORE_ID_BITMAP_SIZE];\r
+\r
+  struct SVfrVarStorageNode *mBufferVarStoreList;\r
+  struct SVfrVarStorageNode *mEfiVarStoreList;\r
+  struct SVfrVarStorageNode *mNameVarStoreList;\r
+\r
+  struct SVfrVarStorageNode *mCurrVarStorageNode;\r
+  struct SVfrVarStorageNode *mNewVarStorageNode;\r
+\r
+private:\r
+\r
+  EFI_VARSTORE_ID GetFreeVarStoreId (VOID);\r
+  BOOLEAN         ChekVarStoreIdFree (IN EFI_VARSTORE_ID);\r
+  VOID            MarkVarStoreIdUsed (IN EFI_VARSTORE_ID);\r
+  VOID            MarkVarStoreIdUnused (IN EFI_VARSTORE_ID);\r
+\r
+public:\r
+  CVfrDataStorage ();\r
+  ~CVfrDataStorage ();\r
+\r
+  EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (INT8 *);\r
+  EFI_VFR_RETURN_CODE NameTableAddItem (EFI_STRING_ID);\r
+  EFI_VFR_RETURN_CODE DeclareNameVarStoreEnd (EFI_GUID *);\r
+\r
+  EFI_VFR_RETURN_CODE DeclareEfiVarStore (IN INT8 *, IN EFI_GUID *, IN EFI_STRING_ID, IN UINT32);\r
+\r
+  EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN INT8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN INT8 *, IN EFI_VARSTORE_ID);\r
+\r
+  EFI_VFR_RETURN_CODE GetVarStoreId (IN INT8 *, OUT EFI_VARSTORE_ID *);\r
+  EFI_VFR_RETURN_CODE GetVarStoreType (IN INT8 *, OUT EFI_VFR_VARSTORE_TYPE &);\r
+  EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT INT8 **);\r
+\r
+  EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN INT8 *, OUT INT8 **);\r
+  EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);\r
+  EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);\r
+\r
+  EFI_VFR_RETURN_CODE BufferVarStoreRequestElementAdd (IN INT8 *, IN EFI_VARSTORE_INFO &);\r
+};\r
+\r
+#define EFI_QUESTION_ID_MAX              0xFFFF\r
+#define EFI_FREE_QUESTION_ID_BITMAP_SIZE ((EFI_QUESTION_ID_MAX + 1) / EFI_BITS_PER_UINT32)\r
+#define EFI_QUESTION_ID_INVALID          0x0\r
+\r
+#define DATE_YEAR_BITMASK                0x0000FFFF\r
+#define DATE_MONTH_BITMASK               0x00FF0000\r
+#define DATE_DAY_BITMASK                 0xFF000000\r
+#define TIME_HOUR_BITMASK                0x000000FF\r
+#define TIME_MINUTE_BITMASK              0x0000FF00\r
+#define TIME_SECOND_BITMASK              0x00FF0000\r
+\r
+struct SVfrQuestionNode {\r
+  INT8                      *mName;\r
+  INT8                      *mVarIdStr;\r
+  EFI_QUESTION_ID           mQuestionId;\r
+  UINT32                    mBitMask;\r
+  SVfrQuestionNode          *mNext;\r
+\r
+  SVfrQuestionNode (IN INT8 *, IN INT8 *, IN UINT32 BitMask = 0);\r
+  ~SVfrQuestionNode ();\r
+};\r
+\r
+class CVfrQuestionDB {\r
+private:\r
+  SVfrQuestionNode          *mQuestionList;\r
+  UINT32                    mFreeQIdBitMap[EFI_FREE_QUESTION_ID_BITMAP_SIZE];\r
+\r
+private:\r
+  EFI_QUESTION_ID GetFreeQuestionId (VOID);\r
+  BOOLEAN         ChekQuestionIdFree (IN EFI_QUESTION_ID);\r
+  VOID            MarkQuestionIdUsed (IN EFI_QUESTION_ID);\r
+  VOID            MarkQuestionIdUnused (IN EFI_QUESTION_ID);\r
+\r
+public:\r
+  CVfrQuestionDB ();\r
+  ~CVfrQuestionDB();\r
+\r
+  EFI_VFR_RETURN_CODE RegisterQuestion (IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
+  VOID                RegisterOldDateQuestion (IN INT8 *, IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
+  VOID                RegisterNewDateQuestion (IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
+  VOID                RegisterOldTimeQuestion (IN INT8 *, IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
+  VOID                RegisterNewTimeQuestion (IN INT8 *, IN INT8 *, IN OUT EFI_QUESTION_ID &);\r
+  EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);\r
+  VOID                GetQuestionId (IN INT8 *, IN INT8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &);\r
+  EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID);\r
+  EFI_VFR_RETURN_CODE FindQuestion (IN INT8 *);\r
+ };\r
+\r
+struct SVfrDefaultStoreNode {\r
+  EFI_IFR_DEFAULTSTORE      *mObjBinAddr;\r
+  INT8                      *mRefName;\r
+  EFI_STRING_ID             mDefaultStoreNameId;\r
+  UINT16                    mDefaultId;\r
+\r
+  SVfrDefaultStoreNode      *mNext;\r
+\r
+  SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE *, IN INT8 *, IN EFI_STRING_ID, IN UINT16);\r
+  ~SVfrDefaultStoreNode();\r
+};\r
+\r
+class CVfrDefaultStore {\r
+private:\r
+  SVfrDefaultStoreNode      *mDefaultStoreList;\r
+\r
+public:\r
+  CVfrDefaultStore ();\r
+  ~CVfrDefaultStore ();\r
+\r
+  EFI_VFR_RETURN_CODE RegisterDefaultStore (IN CHAR8 *, IN INT8 *, IN EFI_STRING_ID, IN UINT16);\r
+  EFI_VFR_RETURN_CODE ReRegisterDefaultStoreById (IN UINT16, IN INT8 *, IN EFI_STRING_ID);\r
+  BOOLEAN             DefaultIdRegistered (IN UINT16);\r
+  EFI_VFR_RETURN_CODE GetDefaultId (IN INT8 *, OUT UINT16 *);\r
+  EFI_VFR_RETURN_CODE BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID, IN EFI_VARSTORE_INFO &, IN INT8 *, IN UINT8, IN EFI_IFR_TYPE_VALUE);\r
+};\r
+\r
+#define EFI_RULE_ID_START    0x01\r
+#define EFI_RULE_ID_INVALID  0x00\r
+\r
+struct SVfrRuleNode {\r
+  UINT8                     mRuleId;\r
+  INT8                      *mRuleName;\r
+  SVfrRuleNode              *mNext;\r
+\r
+  SVfrRuleNode(IN INT8 *, IN UINT8);\r
+  ~SVfrRuleNode();\r
+};\r
+\r
+class CVfrRulesDB {\r
+private:\r
+  SVfrRuleNode              *mRuleList;\r
+  UINT8                     mFreeRuleId;\r
+\r
+public:\r
+  CVfrRulesDB ();\r
+  ~CVfrRulesDB();\r
+\r
+  VOID RegisterRule (IN INT8 *);\r
+  UINT8 GetRuleId (IN INT8 *);\r
+};\r
+\r
+#define MIN(v1, v2) (((v1) < (v2)) ? (v1) : (v2))\r
+#define MAX(v1, v2) (((v1) > (v2)) ? (v1) : (v2))\r
+\r
+#endif\r