/*++\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
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
\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
};\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
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
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
\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
\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