\r
The definition of CFormPkg's member function\r
\r
-Copyright (c) 2004 - 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2016, 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
VOID SetAddrAndLen (IN VOID *, IN UINT32);\r
VOID AssignValue (IN VOID *, IN UINT32);\r
CHAR8 * GetKey (VOID);\r
+\r
+private:\r
+ SPendingAssign (IN CONST SPendingAssign&); // Prevent copy-construction\r
+ SPendingAssign& operator= (IN CONST SPendingAssign&); // Prevent assignment\r
};\r
\r
struct SBufferNode {\r
SPendingAssign *PendingAssignList;\r
\r
public:\r
- CFormPkg (IN UINT32 BufferSize);\r
+ CFormPkg (IN UINT32 BufferSize = 4096);\r
~CFormPkg ();\r
\r
CHAR8 * IfrBinBufferGet (IN UINT32);\r
EFI_VFR_RETURN_CODE BuildPkg (OUT PACKAGE_DATA &);\r
EFI_VFR_RETURN_CODE GenCFile (IN CHAR8 *, IN FILE *, IN PACKAGE_DATA *PkgData = NULL);\r
\r
+private:\r
+ CFormPkg (IN CONST CFormPkg&); // Prevent copy-construction\r
+ CFormPkg& operator= (IN CONST CFormPkg&); // Prevent assignment\r
+\r
public:\r
EFI_VFR_RETURN_CODE AssignPending (IN CHAR8 *, IN VOID *, IN UINT32, IN UINT32, IN CONST CHAR8 *Msg = NULL);\r
VOID DoPendingAssign (IN CHAR8 *, IN VOID *, IN UINT32);\r
);\r
EFI_VFR_RETURN_CODE AdjustDynamicInsertOpcode (\r
IN CHAR8 *LastFormEndAddr,\r
- IN CHAR8 *InsertOpcodeAddr\r
+ IN CHAR8 *InsertOpcodeAddr,\r
+ IN BOOLEAN CreateOpcodeAfterParsingVfr\r
);\r
CHAR8 * GetBufAddrBaseOnOffset (\r
IN UINT32 Offset\r
~SIfrRecord (VOID);\r
};\r
\r
+\r
#define EFI_IFR_RECORDINFO_IDX_INVALUD 0xFFFFFF\r
#define EFI_IFR_RECORDINFO_IDX_START 0x0\r
+#define EFI_HII_MAX_SUPPORT_DEFAULT_TYPE 0x08\r
+\r
+struct QuestionDefaultRecord {\r
+ BOOLEAN mIsDefaultIdExist[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE]; // Record the default id in mAllDefaultIdArray[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE]\r
+ // whether exists in current question.\r
+\r
+ SIfrRecord *mDefaultValueRecord; // Point to the default value record in RecordList which has smallest default Id.\r
+ // (for checkbox it may be NULL, because the dedault value is always true when the flag is set.)\r
+\r
+ BOOLEAN mIsDefaultOpcode; // whether the default value with smallest default id is given by default opcode.\r
+ // (for oneof and checkbox default info may be given by flag.)\r
+\r
+ UINT16 mDefaultNumber; // The default number of this question.\r
+};\r
\r
class CIfrRecordInfoDB {\r
private:\r
UINT32 mRecordCount;\r
SIfrRecord *mIfrRecordListHead;\r
SIfrRecord *mIfrRecordListTail;\r
+ UINT8 mAllDefaultTypeCount;\r
+ UINT16 mAllDefaultIdArray[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE];\r
\r
SIfrRecord * GetRecordInfoFromIdx (IN UINT32);\r
BOOLEAN CheckQuestionOpCode (IN UINT8);\r
\r
SIfrRecord * GetRecordInfoFromOffset (IN UINT32);\r
VOID IfrAdjustOffsetForRecord (VOID);\r
- BOOLEAN IfrAdjustDynamicOpcodeInRecords (VOID);\r
+ BOOLEAN IfrAdjustDynamicOpcodeInRecords (IN BOOLEAN);\r
\r
UINT32 IfrRecordRegister (IN UINT32, IN CHAR8 *, IN UINT8, IN UINT32);\r
VOID IfrRecordInfoUpdate (IN UINT32, IN UINT32, IN CHAR8*, IN UINT8, IN UINT32);\r
VOID IfrRecordOutput (IN FILE *, IN UINT32 LineNo);\r
VOID IfrRecordOutput (OUT PACKAGE_DATA &);\r
- EFI_VFR_RETURN_CODE IfrRecordAdjust (VOID); \r
+ EFI_VFR_RETURN_CODE IfrRecordAdjust (VOID);\r
+ VOID IfrUpdateRecordInfoForDynamicOpcode (IN BOOLEAN);\r
+ VOID IfrCheckAddDefaultRecord (IN BOOLEAN, IN BOOLEAN);\r
+ VOID IfrGetDefaultStoreInfo ();\r
+ VOID IfrCreateDefaultRecord (IN UINT8 Size,IN UINT16 DefaultId,IN UINT8 Type,IN UINT32 LineNo,IN EFI_IFR_TYPE_VALUE Value);\r
+ VOID IfrCreateDefaultForQuestion (IN SIfrRecord *, IN QuestionDefaultRecord *);\r
+ VOID IfrParseDefaulInfoInQuestion (IN SIfrRecord *, OUT QuestionDefaultRecord *);\r
+ VOID IfrAddDefaultToBufferConfig (IN UINT16, IN SIfrRecord *,IN EFI_IFR_TYPE_VALUE);\r
+\r
+private:\r
+ CIfrRecordInfoDB (IN CONST CIfrRecordInfoDB&); // Prevent copy-construction\r
+ CIfrRecordInfoDB& operator= (IN CONST CIfrRecordInfoDB&); // Prevent assignment\r
};\r
\r
extern CIfrRecordInfoDB gCIfrRecordInfoDB;\r
public:\r
CIfrOpHeader (IN UINT8 OpCode, IN VOID *StartAddr, IN UINT8 Length = 0);\r
CIfrOpHeader (IN CIfrOpHeader &);\r
+ CIfrOpHeader& operator=(IN CONST CIfrOpHeader &);\r
\r
VOID IncLength (UINT8 Size) {\r
if ((mHeader->Length + Size) > mHeader->Length) {\r
VOID UpdateHeader (IN EFI_IFR_OP_HEADER *Header) {\r
mHeader = Header;\r
}\r
+\r
+ UINT8 GetOpCode () {\r
+ return mHeader->OpCode;\r
+ }\r
};\r
\r
extern UINT8 gScopeCount;\r
VOID VARSTORE_INFO (OUT EFI_VARSTORE_INFO *Info) {\r
if (Info != NULL) {\r
Info->mVarStoreId = mHeader->VarStoreId;\r
- memcpy (&Info->mVarStoreId, &mHeader->VarStoreInfo, sizeof (Info->mVarStoreId));\r
+ memmove (&Info->mVarStoreId, &mHeader->VarStoreInfo, sizeof (Info->mVarStoreId));\r
}\r
}\r
\r
if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_RESET_REQUIRED)) {\r
mHeader->Flags |= EFI_IFR_FLAG_RESET_REQUIRED;\r
}\r
- \r
+\r
+ if (_FLAG_TEST_AND_CLEAR (Flags, EFI_IFR_FLAG_RECONNECT_REQUIRED)) {\r
+ mHeader->Flags |= EFI_IFR_FLAG_RECONNECT_REQUIRED;\r
+ }\r
+\r
//\r
// Set LateCheck Flag to compatible for framework flag\r
// but it uses 0x20 as its flag, if in the future UEFI may take this flag\r
\r
static CIfrQuestionHeader *gCurrentQuestion = NULL;\r
static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;\r
+static BOOLEAN gIsOrderedList = FALSE;\r
+static BOOLEAN gIsStringOp = FALSE;\r
\r
/*\r
* The definition of all of the UEFI IFR Objects\r
}\r
\r
VOID SetGuid (IN EFI_GUID *Guid) {\r
- memcpy (&mFormSet->Guid, Guid, sizeof (EFI_GUID));\r
+ memmove (&mFormSet->Guid, Guid, sizeof (EFI_GUID));\r
}\r
\r
VOID SetFormSetTitle (IN EFI_STRING_ID FormSetTitle) {\r
}\r
\r
VOID SetClassGuid (IN EFI_GUID *Guid) {\r
- memcpy (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
+ memmove (&(mClassGuid[mFormSet->Flags++]), Guid, sizeof (EFI_GUID));\r
}\r
\r
UINT8 GetFlags() {\r
IncLength (sizeof (EFI_IFR_FORM_MAP_METHOD));\r
\r
mMethodMap->MethodTitle = MethodTitle;\r
- memcpy (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID));\r
+ memmove (&(mMethodMap->MethodIdentifier), MethodGuid, sizeof (EFI_GUID));\r
mMethodMap ++;\r
}\r
}\r
}\r
\r
VOID SetGuid (IN EFI_GUID *Guid) {\r
- memcpy (&mVarStore->Guid, Guid, sizeof (EFI_GUID));\r
+ memmove (&mVarStore->Guid, Guid, sizeof (EFI_GUID));\r
}\r
\r
VOID SetVarStoreId (IN EFI_VARSTORE_ID VarStoreId) {\r
}\r
\r
VOID SetGuid (IN EFI_GUID *Guid) {\r
- memcpy (&mVarStoreEfi->Guid, Guid, sizeof (EFI_GUID));\r
+ memmove (&mVarStoreEfi->Guid, Guid, sizeof (EFI_GUID));\r
}\r
\r
VOID SetVarStoreId (IN UINT16 VarStoreId) {\r
}\r
\r
VOID SetGuid (IN EFI_GUID *Guid) {\r
- memcpy (&mVarStoreNameValue->Guid, Guid, sizeof (EFI_GUID));\r
+ memmove (&mVarStoreNameValue->Guid, Guid, sizeof (EFI_GUID));\r
}\r
\r
VOID SetVarStoreId (IN UINT16 VarStoreId) {\r
CIfrOpHeader (EFI_IFR_DEFAULT_OP, &mDefault->Header, Size) {\r
mDefault->Type = Type;\r
mDefault->DefaultId = DefaultId;\r
- memcpy (&(mDefault->Value), &Value, Size - OFFSET_OF (EFI_IFR_DEFAULT, Value));\r
+ memmove (&(mDefault->Value), &Value, Size - OFFSET_OF (EFI_IFR_DEFAULT, Value));\r
}\r
\r
VOID SetDefaultId (IN UINT16 DefaultId) {\r
}\r
\r
VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {\r
- memcpy (&mDefault->Value, &Value, mDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value));\r
+ memmove (&mDefault->Value, &Value, mDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value));\r
}\r
};\r
\r
UpdateCIfrMinMaxStepData(&mNumeric->data);\r
}\r
\r
- EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags) {\r
+ EFI_VFR_RETURN_CODE SetFlags (IN UINT8 HFlags, IN UINT8 LFlags, BOOLEAN DisplaySettingsSpecified = FALSE) {\r
EFI_VFR_RETURN_CODE Ret;\r
\r
Ret = CIfrQuestionHeader::SetFlags (HFlags);\r
return Ret;\r
}\r
\r
- if (LFlags & EFI_IFR_DISPLAY) {\r
- mNumeric->Flags = LFlags;\r
- } else {\r
+ if (DisplaySettingsSpecified == FALSE) {\r
mNumeric->Flags = LFlags | EFI_IFR_DISPLAY_UINT_DEC;\r
+ } else {\r
+ mNumeric->Flags = LFlags;\r
}\r
return VFR_RETURN_SUCCESS;\r
}\r
+\r
+ UINT8 GetNumericFlags () {\r
+ return mNumeric->Flags;\r
+ }\r
};\r
\r
class CIfrOneOf : public CIfrObj, public CIfrOpHeader, public CIfrQuestionHeader, public CIfrMinMaxStepData {\r
}\r
\r
VOID SetRefreshEventGroutId (IN EFI_GUID *RefreshEventGroupId) {\r
- memcpy (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));\r
+ memmove (&mRefreshId->RefreshEventGroupId, RefreshEventGroupId, sizeof (EFI_GUID));\r
}\r
};\r
\r
}\r
\r
EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {\r
+ mOneOfOption->Flags = 0;\r
if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {\r
mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;\r
}\r
}\r
\r
VOID SetValue (IN EFI_IFR_TYPE_VALUE Value) {\r
- memcpy (&mOneOfOption->Value, &Value, mOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));\r
+ memmove (&mOneOfOption->Value, &Value, mOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));\r
}\r
\r
UINT8 GetFlags (VOID) {\r
}\r
\r
VOID SetGuid (IN EFI_GUID *Guid) {\r
- memcpy (&mGuid->Guid, Guid, sizeof (EFI_GUID));\r
+ memmove (&mGuid->Guid, Guid, sizeof (EFI_GUID));\r
}\r
\r
VOID SetData (IN UINT8* DataBuff, IN UINT8 Size) {\r
- memcpy ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);\r
+ memmove ((UINT8 *)mGuid + sizeof (EFI_IFR_GUID), DataBuff, Size);\r
}\r
};\r
\r
}\r
\r
VOID SetPermissions (IN EFI_GUID *Permissions) {\r
- memcpy (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));\r
+ memmove (&mSecurity->Permissions, Permissions, sizeof (EFI_GUID));\r
}\r
};\r
\r
}\r
};\r
\r
+class CIfrMatch2 : public CIfrObj, public CIfrOpHeader {\r
+private:\r
+ EFI_IFR_MATCH2 *mMatch2;\r
+\r
+public:\r
+ CIfrMatch2 (\r
+ IN UINT32 LineNo,\r
+ IN EFI_GUID *Guid\r
+ ) : CIfrObj (EFI_IFR_MATCH2_OP, (CHAR8 **)&mMatch2),\r
+ CIfrOpHeader (EFI_IFR_MATCH2_OP, &mMatch2->Header) {\r
+ SetLineNo (LineNo);\r
+ memmove (&mMatch2->SyntaxType, Guid, sizeof (EFI_GUID));\r
+ }\r
+};\r
+\r
class CIfrMultiply : public CIfrObj, public CIfrOpHeader {\r
private:\r
EFI_IFR_MULTIPLY *mMultiply;\r