]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrUtilityLib.h
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Tools / Source / UefiVfrCompile / VfrUtilityLib.h
index 38687b948df8955bcf35c5f4bd1dc9e50240bf50..fe37f83e160ed9e3036da674b6c0071b0a150435 100644 (file)
@@ -1,5 +1,4 @@
 /*++\r
-\r
 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
@@ -10,8 +9,7 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 Module Name:\r
-\r
-VfrUtilityLib.h\r
+  VfrUtilityLib.h\r
 \r
 Abstract:\r
 \r
@@ -28,7 +26,7 @@ Abstract:
 \r
 #define MAX_NAME_LEN                       64\r
 #define DEFAULT_ALIGN                      1\r
-#define DEFAULT_PACK_ALIGN                 0xFFFFFFFF\r
+#define DEFAULT_PACK_ALIGN                 0x8\r
 #define DEFAULT_NAME_TABLE_ITEMS           1024\r
 \r
 #define EFI_BITS_SHIFT_PER_UINT32          0x5\r
@@ -58,9 +56,9 @@ struct SConfigInfo {
 };\r
 \r
 struct SConfigItem {\r
-  INT8          *mId;\r
-  INT8          *mInfo;\r
-  SConfigInfo   *mInfoStrList;\r
+  INT8          *mName;         // varstore name\r
+  INT8          *mId;           // varstore ID\r
+  SConfigInfo   *mInfoStrList;  // list of Offset/Value in the varstore\r
   SConfigItem   *mNext;\r
 \r
 public:\r
@@ -115,10 +113,59 @@ struct SVfrDataType {
   SVfrDataType              *mNext;\r
 };\r
 \r
+#define VFR_PACK_ASSIGN     0x01\r
+#define VFR_PACK_SHOW       0x02\r
+#define VFR_PACK_PUSH       0x04\r
+#define VFR_PACK_POP        0x08\r
+\r
+#define PACKSTACK_MAX_SIZE  0x400\r
+\r
+struct SVfrPackStackNode {\r
+  INT8                      *mIdentifier;\r
+  UINT32                    mNumber;\r
+  SVfrPackStackNode         *mNext;\r
+\r
+  SVfrPackStackNode (IN INT8 *Identifier, IN UINT32 Number) {\r
+    mIdentifier = NULL;\r
+    mNumber     = Number;\r
+    mNext       = NULL;\r
+\r
+    if (Identifier != NULL) {\r
+      mIdentifier = new INT8[strlen (Identifier) + 1];\r
+      strcpy (mIdentifier, Identifier);\r
+    }\r
+  }\r
+\r
+  ~SVfrPackStackNode (VOID) {\r
+    if (mIdentifier != NULL) {\r
+      delete mIdentifier;\r
+    }\r
+    mNext = NULL;\r
+  }\r
+\r
+  bool Match (IN INT8 *Identifier) {\r
+    if (Identifier == NULL) {\r
+      return TRUE;\r
+    } else if (mIdentifier == NULL) {\r
+      return FALSE;\r
+    } else if (strcmp (Identifier, mIdentifier) == 0) {\r
+      return TRUE;\r
+    } else {\r
+      return FALSE;\r
+    }\r
+  }\r
+};\r
+\r
 class CVfrVarDataTypeDB {\r
 private:\r
-  SVfrDataType              *mDataTypeList;\r
   UINT32                    mPackAlign;\r
+  SVfrPackStackNode         *mPackStack;\r
+\r
+public:\r
+  EFI_VFR_RETURN_CODE       Pack (IN UINT32, IN UINT8, IN INT8 *Identifier = NULL, IN UINT32 Number = DEFAULT_PACK_ALIGN);\r
+\r
+private:\r
+  SVfrDataType              *mDataTypeList;\r
 \r
   SVfrDataType              *mNewDataType;\r
   SVfrDataType              *mCurrDataType;\r
@@ -138,9 +185,6 @@ public:
   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
@@ -148,6 +192,7 @@ public:
 \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 GetDataTypeSize (IN UINT8, 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
@@ -245,6 +290,7 @@ public:
 \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_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);\r
   EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT INT8 **);\r
 \r
   EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN INT8 *, OUT INT8 **);\r