/** @file\r
- \r
+\r
Vfr common library functions.\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
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "VfrError.h"\r
\r
extern BOOLEAN VfrCompatibleMode;\r
+static EFI_GUID gEdkiiIfrBitVarGuid = EDKII_IFR_BIT_VARSTORE_GUID;\r
\r
+#define MAX_BIT_WIDTH 32\r
#define MAX_NAME_LEN 64\r
#define MAX_STRING_LEN 0x100\r
#define DEFAULT_ALIGN 1\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
+#define ARRAY_SAFE_FREE(Buf) do { if ((Buf) != NULL) { delete[] (Buf); } } while (0);\r
+\r
\r
class CVfrBinaryOutput {\r
public:\r
\r
SConfigInfo (IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
~SConfigInfo (VOID);\r
+\r
+private:\r
+ SConfigInfo (IN CONST SConfigInfo&); // Prevent copy-construction\r
+ SConfigInfo& operator= (IN CONST SConfigInfo&); // Prevent assignment\r
};\r
\r
struct SConfigItem {\r
CHAR8 *mName; // varstore name\r
- CHAR8 *mId; // varstore ID\r
+ EFI_GUID *mGuid; // varstore guid, varstore name + guid deside one varstore\r
+ CHAR8 *mId; // default ID\r
SConfigInfo *mInfoStrList; // list of Offset/Value in the varstore\r
SConfigItem *mNext;\r
\r
public:\r
- SConfigItem (IN CHAR8 *, IN CHAR8 *);\r
- SConfigItem (IN CHAR8 *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT16, IN EFI_IFR_TYPE_VALUE);\r
+ SConfigItem (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *);\r
+ SConfigItem (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT16, IN EFI_IFR_TYPE_VALUE);\r
virtual ~SConfigItem ();\r
+\r
+private:\r
+ SConfigItem (IN CONST SConfigItem&); // Prevent copy-construction\r
+ SConfigItem& operator= (IN CONST SConfigItem&); // Prevent assignment\r
};\r
\r
class CVfrBufferConfig {\r
CVfrBufferConfig (VOID);\r
virtual ~CVfrBufferConfig (VOID);\r
\r
- virtual UINT8 Register (IN CHAR8 *, IN CHAR8 *Info = NULL);\r
+ virtual UINT8 Register (IN CHAR8 *, IN EFI_GUID *,IN CHAR8 *Info = NULL);\r
virtual VOID Open (VOID);\r
virtual BOOLEAN Eof(VOID);\r
- virtual UINT8 Select (IN CHAR8 *, IN CHAR8 *Info = NULL);\r
- virtual UINT8 Write (IN CONST CHAR8, IN CHAR8 *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
+ virtual UINT8 Select (IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *Info = NULL);\r
+ virtual UINT8 Write (IN CONST CHAR8, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *, IN UINT8, IN UINT16, IN UINT32, IN EFI_IFR_TYPE_VALUE);\r
#if 0\r
virtual UINT8 Read (OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **, OUT CHAR8 **);\r
#endif\r
virtual VOID Close (VOID);\r
virtual VOID OutputCFile (IN FILE *, IN CHAR8 *);\r
+\r
+private:\r
+ CVfrBufferConfig (IN CONST CVfrBufferConfig&); // Prevent copy-construction\r
+ CVfrBufferConfig& operator= (IN CONST CVfrBufferConfig&); // Prevent assignment\r
};\r
\r
extern CVfrBufferConfig gCVfrBufferConfig;\r
SVfrDataType *mFieldType;\r
UINT32 mOffset;\r
UINT32 mArrayNum;\r
+ BOOLEAN mIsBitField;\r
+ UINT8 mBitWidth;\r
+ UINT32 mBitOffset;\r
SVfrDataField *mNext;\r
};\r
\r
UINT8 mType;\r
UINT32 mAlign;\r
UINT32 mTotalSize;\r
+ BOOLEAN mHasBitField;\r
SVfrDataField *mMembers;\r
SVfrDataType *mNext;\r
};\r
\r
~SVfrPackStackNode (VOID) {\r
if (mIdentifier != NULL) {\r
- delete mIdentifier;\r
+ delete[] mIdentifier;\r
}\r
mNext = NULL;\r
}\r
return FALSE;\r
}\r
}\r
+\r
+private:\r
+ SVfrPackStackNode (IN CONST SVfrPackStackNode&); // Prevent copy-construction\r
+ SVfrPackStackNode& operator= (IN CONST SVfrPackStackNode&); // Prevent assignment\r
};\r
\r
class CVfrVarDataTypeDB {\r
VOID RegisterNewType (IN SVfrDataType *);\r
\r
EFI_VFR_RETURN_CODE ExtractStructTypeName (IN CHAR8 *&, OUT CHAR8 *);\r
- EFI_VFR_RETURN_CODE GetTypeField (IN CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
- EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &);\r
+ EFI_VFR_RETURN_CODE GetTypeField (IN CONST CHAR8 *, IN SVfrDataType *, IN SVfrDataField *&);\r
+ EFI_VFR_RETURN_CODE GetFieldOffset (IN SVfrDataField *, IN UINT32, OUT UINT32 &, IN BOOLEAN);\r
UINT8 GetFieldWidth (IN SVfrDataField *);\r
- UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32);\r
+ UINT32 GetFieldSize (IN SVfrDataField *, IN UINT32, IN BOOLEAN);\r
\r
public:\r
CVfrVarDataTypeDB (VOID);\r
\r
VOID DeclareDataTypeBegin (VOID);\r
EFI_VFR_RETURN_CODE SetNewTypeName (IN CHAR8 *);\r
- EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32);\r
+ EFI_VFR_RETURN_CODE DataTypeAddField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);\r
+ EFI_VFR_RETURN_CODE DataTypeAddBitField (IN CHAR8 *, IN CHAR8 *, IN UINT32, IN BOOLEAN);\r
VOID DeclareDataTypeEnd (VOID);\r
\r
EFI_VFR_RETURN_CODE GetDataType (IN CHAR8 *, OUT SVfrDataType **);\r
EFI_VFR_RETURN_CODE GetDataTypeSize (IN CHAR8 *, OUT UINT32 *);\r
EFI_VFR_RETURN_CODE GetDataTypeSize (IN UINT8, OUT UINT32 *);\r
- EFI_VFR_RETURN_CODE GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &);\r
+ EFI_VFR_RETURN_CODE GetDataFieldInfo (IN CHAR8 *, OUT UINT16 &, OUT UINT8 &, OUT UINT32 &, OUT BOOLEAN &);\r
\r
EFI_VFR_RETURN_CODE GetUserDefinedTypeNameList (OUT CHAR8 ***, OUT UINT32 *);\r
EFI_VFR_RETURN_CODE ExtractFieldNameAndArrary (IN CHAR8 *&, OUT CHAR8 *, OUT UINT32 &);\r
+ BOOLEAN DataTypeHasBitField (IN CHAR8 *);\r
+ BOOLEAN IsThisBitField (IN CHAR8 *);\r
\r
BOOLEAN IsTypeNameDefined (IN CHAR8 *);\r
\r
VOID Dump(IN FILE *);\r
//\r
- // First the declared \r
+ // First the declared\r
//\r
CHAR8 *mFirstNewDataTypeName;\r
#ifdef CVFR_VARDATATYPEDB_DEBUG\r
VOID ParserDB ();\r
#endif\r
+\r
+private:\r
+ CVfrVarDataTypeDB (IN CONST CVfrVarDataTypeDB&); // Prevent copy-construction\r
+ CVfrVarDataTypeDB& operator= (IN CONST CVfrVarDataTypeDB&); // Prevent assignment\r
};\r
\r
extern CVfrVarDataTypeDB gCVfrVarDataTypeDB;\r
EFI_VFR_VARSTORE_INVALID,\r
EFI_VFR_VARSTORE_BUFFER,\r
EFI_VFR_VARSTORE_EFI,\r
- EFI_VFR_VARSTORE_NAME\r
+ EFI_VFR_VARSTORE_NAME,\r
+ EFI_VFR_VARSTORE_BUFFER_BITS\r
} EFI_VFR_VARSTORE_TYPE;\r
\r
struct SVfrVarStorageNode {\r
SVfrDataType *mDataType;\r
\r
// NameValue Storage\r
- struct {\r
+ struct {\r
EFI_STRING_ID *mNameTable;\r
UINT32 mTableSize;\r
} mNameSpace;\r
\r
public:\r
SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);\r
- SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *, IN BOOLEAN Flag = TRUE);\r
+ SVfrVarStorageNode (IN EFI_GUID *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN SVfrDataType *,IN BOOLEAN, IN BOOLEAN Flag = TRUE);\r
SVfrVarStorageNode (IN CHAR8 *, IN EFI_VARSTORE_ID);\r
~SVfrVarStorageNode (VOID);\r
+\r
+private:\r
+ SVfrVarStorageNode (IN CONST SVfrVarStorageNode&); // Prevent copy-construction\r
+ SVfrVarStorageNode& operator= (IN CONST SVfrVarStorageNode&); // Prevent assignment\r
};\r
\r
struct EFI_VARSTORE_INFO {\r
} mInfo;\r
UINT8 mVarType;\r
UINT32 mVarTotalSize;\r
+ BOOLEAN mIsBitVar;\r
\r
EFI_VARSTORE_INFO (VOID);\r
EFI_VARSTORE_INFO (IN EFI_VARSTORE_INFO &);\r
+ EFI_VARSTORE_INFO& operator=(IN CONST EFI_VARSTORE_INFO &);\r
BOOLEAN operator == (IN EFI_VARSTORE_INFO *);\r
};\r
\r
+struct BufferVarStoreFieldInfoNode {\r
+ EFI_VARSTORE_INFO mVarStoreInfo;\r
+ struct BufferVarStoreFieldInfoNode *mNext;\r
+\r
+ BufferVarStoreFieldInfoNode( IN EFI_VARSTORE_INFO *Info );\r
+ ~BufferVarStoreFieldInfoNode ();\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
\r
struct SVfrVarStorageNode *mCurrVarStorageNode;\r
struct SVfrVarStorageNode *mNewVarStorageNode;\r
+ BufferVarStoreFieldInfoNode *mBufferFieldInfoListHead;\r
+ BufferVarStoreFieldInfoNode *mBufferFieldInfoListTail;\r
\r
private:\r
\r
BOOLEAN ChekVarStoreIdFree (IN EFI_VARSTORE_ID);\r
VOID MarkVarStoreIdUsed (IN EFI_VARSTORE_ID);\r
VOID MarkVarStoreIdUnused (IN EFI_VARSTORE_ID);\r
+ EFI_VARSTORE_ID CheckGuidField (IN SVfrVarStorageNode *,\r
+ IN EFI_GUID *,\r
+ IN BOOLEAN *,\r
+ OUT EFI_VFR_RETURN_CODE *);\r
\r
public:\r
CVfrDataStorage ();\r
~CVfrDataStorage ();\r
- \r
+\r
SVfrVarStorageNode * GetBufferVarStoreList () {\r
return mBufferVarStoreList;\r
}\r
SVfrVarStorageNode * GetEfiVarStoreList () {\r
return mEfiVarStoreList;\r
}\r
- EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *);\r
+ EFI_VFR_RETURN_CODE DeclareNameVarStoreBegin (CHAR8 *, EFI_VARSTORE_ID);\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 CHAR8 *, IN EFI_GUID *, IN EFI_STRING_ID, IN UINT32, IN BOOLEAN Flag = TRUE);\r
\r
- EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN CHAR8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN BOOLEAN Flag = TRUE);\r
+ EFI_VFR_RETURN_CODE DeclareBufferVarStore (IN CHAR8 *, IN EFI_GUID *, IN CVfrVarDataTypeDB *, IN CHAR8 *, IN EFI_VARSTORE_ID, IN BOOLEAN, IN BOOLEAN Flag = TRUE);\r
\r
- EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *);\r
- EFI_VFR_RETURN_CODE GetVarStoreType (IN CHAR8 *, OUT EFI_VFR_VARSTORE_TYPE &);\r
+ EFI_VFR_RETURN_CODE GetVarStoreId (IN CHAR8 *, OUT EFI_VARSTORE_ID *, IN EFI_GUID *VarGuid = NULL);\r
EFI_VFR_VARSTORE_TYPE GetVarStoreType (IN EFI_VARSTORE_ID);\r
+ EFI_GUID * GetVarStoreGuid (IN EFI_VARSTORE_ID);\r
EFI_VFR_RETURN_CODE GetVarStoreName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
+ EFI_VFR_RETURN_CODE GetVarStoreByDataType (IN CHAR8 *, OUT SVfrVarStorageNode **, IN EFI_GUID *VarGuid = NULL);\r
\r
- EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN CHAR8 *, OUT CHAR8 **);\r
+ EFI_VFR_RETURN_CODE GetBufferVarStoreDataTypeName (IN EFI_VARSTORE_ID, OUT CHAR8 **);\r
EFI_VFR_RETURN_CODE GetEfiVarStoreInfo (IN EFI_VARSTORE_INFO *);\r
EFI_VFR_RETURN_CODE GetNameVarStoreInfo (IN EFI_VARSTORE_INFO *, IN UINT32);\r
+ EFI_VFR_RETURN_CODE AddBufferVarStoreFieldInfo (IN EFI_VARSTORE_INFO *);\r
+ EFI_VFR_RETURN_CODE GetBufferVarStoreFieldInfo (IN OUT EFI_VARSTORE_INFO *);\r
\r
- EFI_VFR_RETURN_CODE BufferVarStoreRequestElementAdd (IN CHAR8 *, IN EFI_VARSTORE_INFO &);\r
+private:\r
+ CVfrDataStorage (IN CONST CVfrDataStorage&); // Prevent copy-construction\r
+ CVfrDataStorage& operator= (IN CONST CVfrDataStorage&); // Prevent assignment\r
};\r
\r
+extern CVfrDataStorage gCVfrDataStorage;\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
SVfrQuestionNode (IN CHAR8 *, IN CHAR8 *, IN UINT32 BitMask = 0);\r
~SVfrQuestionNode ();\r
+\r
+private:\r
+ SVfrQuestionNode (IN CONST SVfrQuestionNode&); // Prevent copy-construction\r
+ SVfrQuestionNode& operator= (IN CONST SVfrQuestionNode&); // Prevent assignment\r
};\r
\r
class CVfrQuestionDB {\r
VOID RegisterNewDateQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
VOID RegisterOldTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
VOID RegisterNewTimeQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
+ VOID RegisterRefQuestion (IN CHAR8 *, IN CHAR8 *, IN OUT EFI_QUESTION_ID &);\r
EFI_VFR_RETURN_CODE UpdateQuestionId (IN EFI_QUESTION_ID, IN EFI_QUESTION_ID);\r
VOID GetQuestionId (IN CHAR8 *, IN CHAR8 *, OUT EFI_QUESTION_ID &, OUT UINT32 &, OUT EFI_QUESION_TYPE *QType = NULL);\r
EFI_VFR_RETURN_CODE FindQuestion (IN EFI_QUESTION_ID);\r
EFI_VFR_RETURN_CODE FindQuestion (IN CHAR8 *);\r
VOID PrintAllQuestion (IN VOID);\r
- VOID ResetInit (IN VOID); \r
+ VOID ResetInit (IN VOID);\r
\r
VOID SetCompatibleMode (IN BOOLEAN Mode) {\r
VfrCompatibleMode = Mode;\r
}\r
+\r
+private:\r
+ CVfrQuestionDB (IN CONST CVfrQuestionDB&); // Prevent copy-construction\r
+ CVfrQuestionDB& operator= (IN CONST CVfrQuestionDB&); // Prevent assignment\r
};\r
\r
struct SVfrDefaultStoreNode {\r
\r
SVfrDefaultStoreNode (IN EFI_IFR_DEFAULTSTORE *, IN CHAR8 *, IN EFI_STRING_ID, IN UINT16);\r
~SVfrDefaultStoreNode();\r
+\r
+private:\r
+ SVfrDefaultStoreNode (IN CONST SVfrDefaultStoreNode&); // Prevent copy-construction\r
+ SVfrDefaultStoreNode& operator= (IN CONST SVfrDefaultStoreNode&); // Prevent assignment\r
};\r
\r
class CVfrDefaultStore {\r
EFI_VFR_RETURN_CODE ReRegisterDefaultStoreById (IN UINT16, IN CHAR8 *, IN EFI_STRING_ID);\r
BOOLEAN DefaultIdRegistered (IN UINT16);\r
EFI_VFR_RETURN_CODE GetDefaultId (IN CHAR8 *, OUT UINT16 *);\r
- EFI_VFR_RETURN_CODE BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID, IN EFI_VARSTORE_INFO &, IN CHAR8 *, IN UINT8, IN EFI_IFR_TYPE_VALUE);\r
+ EFI_VFR_RETURN_CODE BufferVarStoreAltConfigAdd (IN EFI_VARSTORE_ID, IN EFI_VARSTORE_INFO &, IN CHAR8 *, IN EFI_GUID *, IN UINT8, IN EFI_IFR_TYPE_VALUE);\r
+\r
+private:\r
+ CVfrDefaultStore (IN CONST CVfrDefaultStore&); // Prevent copy-construction\r
+ CVfrDefaultStore& operator= (IN CONST CVfrDefaultStore&); // Prevent assignment\r
};\r
\r
+extern CVfrDefaultStore gCVfrDefaultStore;\r
+\r
#define EFI_RULE_ID_START 0x01\r
#define EFI_RULE_ID_INVALID 0x00\r
\r
\r
SVfrRuleNode(IN CHAR8 *, IN UINT8);\r
~SVfrRuleNode();\r
+\r
+private:\r
+ SVfrRuleNode (IN CONST SVfrRuleNode&); // Prevent copy-construction\r
+ SVfrRuleNode& operator= (IN CONST SVfrRuleNode&); // Prevent assignment\r
};\r
\r
class CVfrRulesDB {\r
\r
VOID RegisterRule (IN CHAR8 *);\r
UINT8 GetRuleId (IN CHAR8 *);\r
+\r
+private:\r
+ CVfrRulesDB (IN CONST CVfrRulesDB&); // Prevent copy-construction\r
+ CVfrRulesDB& operator= (IN CONST CVfrRulesDB&); // Prevent assignment\r
+};\r
+\r
+class CVfrStringDB {\r
+private:\r
+ CHAR8 *mStringFileName;\r
+\r
+ EFI_STATUS FindStringBlock (\r
+ IN UINT8 *StringData,\r
+ IN EFI_STRING_ID StringId,\r
+ OUT UINT32 *StringTextOffset,\r
+ OUT UINT8 *BlockType\r
+ );\r
+\r
+ UINT32 GetUnicodeStringTextSize (\r
+ IN UINT8 *StringSrc\r
+ );\r
+\r
+ BOOLEAN GetBestLanguage (\r
+ IN CONST CHAR8 *SupportedLanguages,\r
+ IN CHAR8 *Language\r
+ );\r
+\r
+public:\r
+ CVfrStringDB ();\r
+ ~CVfrStringDB ();\r
+\r
+ VOID SetStringFileName (\r
+ IN CHAR8 *StringFileName\r
+ );\r
+\r
+ CHAR8 * GetVarStoreNameFormStringId (\r
+ IN EFI_STRING_ID StringId\r
+ );\r
+\r
+private:\r
+ CVfrStringDB (IN CONST CVfrStringDB&); // Prevent copy-construction\r
+ CVfrStringDB& operator= (IN CONST CVfrStringDB&); // Prevent assignment\r
};\r
\r
#endif\r