BaseTool/VfrCompiler: Support Bit fields in EFI/Buffer VarStore
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=545 Enhance VfrCompiler to parse following case: 1. EFI/Buffer VarStore can contain bit fields in their structure. 2. For question Oneof/Checkbox/numeric, their storage can be bit fields of an EFI VarStore/Buffer VarStore. Cc: Eric Dong <eric.dong@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@@ -22,7 +22,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#include "VfrError.h"
|
||||
|
||||
extern BOOLEAN VfrCompatibleMode;
|
||||
static EFI_GUID gEdkiiIfrBitVarGuid = EDKII_IFR_BIT_VARSTORE_GUID;
|
||||
|
||||
#define MAX_BIT_WIDTH 32
|
||||
#define MAX_NAME_LEN 64
|
||||
#define MAX_STRING_LEN 0x100
|
||||
#define DEFAULT_ALIGN 1
|
||||
@@ -116,6 +118,9 @@ struct SVfrDataField {
|
||||
SVfrDataType *mFieldType;
|
||||
UINT32 mOffset;
|
||||
UINT32 mArrayNum;
|
||||
BOOLEAN mIsBitField;
|
||||
UINT8 mBitWidth;
|
||||
UINT32 mBitOffset;
|
||||
SVfrDataField *mNext;
|
||||
};
|
||||
|
||||
@@ -124,6 +129,7 @@ struct SVfrDataType {
|
||||
UINT8 mType;
|
||||
UINT32 mAlign;
|
||||
UINT32 mTotalSize;
|
||||
BOOLEAN mHasBitField;
|
||||
SVfrDataField *mMembers;
|
||||
SVfrDataType *mNext;
|
||||
};
|
||||
@@ -195,9 +201,9 @@ private:
|
||||
|
||||
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 &);
|
||||
EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &, IN BOOLEAN);
|
||||
UINT8 GetFieldWidth (IN SVfrDataField *);
|
||||
UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32);
|
||||
UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32, IN BOOLEAN);
|
||||
|
||||
public:
|
||||
CVfrVarDataTypeDB (VOID);
|
||||
@@ -206,15 +212,18 @@ public:
|
||||
VOID DeclareDataTypeBegin (VOID);
|
||||
EFI_VFR_RETURN_CODE SetNewTypeName (IN CHAR8 *);
|
||||
EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);
|
||||
EFI_VFR_RETURN_CODE DataTypeAddBitField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);
|
||||
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 GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &, OUT BOOLEAN &);
|
||||
|
||||
EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT CHAR8 ***, OUT UINT32 *);
|
||||
EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN CHAR8 *&, OUT CHAR8 *, OUT UINT32 &);
|
||||
BOOLEAN DataTypeHasBitField (IN CHAR8 *);
|
||||
BOOLEAN IsThisBitField (IN CHAR8 *);
|
||||
|
||||
BOOLEAN IsTypeNameDefined (IN CHAR8 *);
|
||||
|
||||
@@ -238,7 +247,8 @@ typedef enum {
|
||||
EFI_VFR_VARSTORE_INVALID,
|
||||
EFI_VFR_VARSTORE_BUFFER,
|
||||
EFI_VFR_VARSTORE_EFI,
|
||||
EFI_VFR_VARSTORE_NAME
|
||||
EFI_VFR_VARSTORE_NAME,
|
||||
EFI_VFR_VARSTORE_BUFFER_BITS
|
||||
} EFI_VFR_VARSTORE_TYPE;
|
||||
|
||||
struct SVfrVarStorageNode {
|
||||
@@ -268,7 +278,7 @@ struct SVfrVarStorageNode {
|
||||
|
||||
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 EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *,IN BOOLEAN, IN BOOLEAN Flag = TRUE);
|
||||
SVfrVarStorageNode (IN CHAR8 *, IN EFI_VARSTORE_ID);
|
||||
~SVfrVarStorageNode (VOID);
|
||||
|
||||
@@ -285,6 +295,7 @@ struct EFI_VARSTORE_INFO {
|
||||
} mInfo;
|
||||
UINT8 mVarType;
|
||||
UINT32 mVarTotalSize;
|
||||
BOOLEAN mIsBitVar;
|
||||
|
||||
EFI_VARSTORE_INFO (VOID);
|
||||
EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);
|
||||
@@ -343,7 +354,7 @@ public:
|
||||
|
||||
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 DeclareBufferVarStore (IN CHAR8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN BOOLEAN, IN BOOLEAN Flag = TRUE);
|
||||
|
||||
EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *, IN EFI_GUID *VarGuid = NULL);
|
||||
EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);
|
||||
|
Reference in New Issue
Block a user