\r
The definition of CFormPkg's member function\r
\r
-Copyright (c) 2004 - 2010, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
+Copyright (c) 2004 - 2012, 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
CHAR8 *VarStr;\r
UINT32 ArrayIdx;\r
CHAR8 FName[MAX_NAME_LEN];\r
+ CHAR8 *SName;\r
+ CHAR8 *NewStr;\r
EFI_VFR_RETURN_CODE ReturnCode;\r
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
\r
+ //\r
+ // Declare all questions as Numeric in DisableIf True\r
+ //\r
+ // DisableIf\r
+ CIfrDisableIf DIObj;\r
+ DIObj.SetLineNo (LineNo);\r
+ \r
+ //TrueOpcode\r
+ CIfrTrue TObj (LineNo);\r
+\r
+ // Declare Numeric qeustion for each undefined question.\r
for (pNode = PendingAssignList; pNode != NULL; pNode = pNode->mNext) {\r
if (pNode->mFlag == PENDING) {\r
- //\r
- // declare this question as Numeric in SuppressIf True\r
- //\r
- // SuppressIf\r
- CIfrSuppressIf SIObj;\r
- SIObj.SetLineNo (LineNo);\r
- \r
- //TrueOpcode\r
- CIfrTrue TObj (LineNo);\r
- \r
- //Numeric qeustion\r
CIfrNumeric CNObj;\r
EFI_VARSTORE_INFO Info; \r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
ReturnCode = lCVfrDataStorage.GetEfiVarStoreInfo (&Info);\r
} else if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
VarStr = pNode->mKey;\r
- ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);\r
+ //convert VarStr with store name to VarStr with structure name\r
+ ReturnCode = lCVfrDataStorage.GetBufferVarStoreDataTypeName (FName, &SName);\r
+ if (ReturnCode == VFR_RETURN_SUCCESS) {\r
+ NewStr = new CHAR8[strlen (VarStr) + strlen (SName) + 1];\r
+ NewStr[0] = '\0';\r
+ strcpy (NewStr, SName);\r
+ strcat (NewStr, VarStr + strlen (FName));\r
+ ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (NewStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);\r
+ delete NewStr;\r
+ }\r
} else {\r
ReturnCode = VFR_RETURN_UNSUPPORTED;\r
}\r
\r
CNObj.SetQuestionId (QId);\r
CNObj.SetVarStoreInfo (&Info);\r
+ //\r
+ // Numeric doesn't support BOOLEAN data type. \r
+ // BOOLEAN type has the same data size to UINT8. \r
+ //\r
+ if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) {\r
+ Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;\r
+ }\r
CNObj.SetFlags (0, Info.mVarType);\r
+ //\r
+ // Use maximum value not to limit the vaild value for the undefined question.\r
+ //\r
+ switch (Info.mVarType) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ CNObj.SetMinMaxStepData ((UINT64) 0, (UINT64) -1 , (UINT64) 0);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ CNObj.SetMinMaxStepData ((UINT32) 0, (UINT32) -1 , (UINT32) 0);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ CNObj.SetMinMaxStepData ((UINT16) 0, (UINT16) -1 , (UINT16) 0);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ CNObj.SetMinMaxStepData ((UINT8) 0, (UINT8) -1 , (UINT8) 0);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
\r
//\r
// For undefined Efi VarStore type question\r
// Append the extended guided opcode to contain VarName\r
//\r
- if (VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
+ if (VarStoreType == EFI_VFR_VARSTORE_EFI || VfrCompatibleMode) {\r
CIfrVarEqName CVNObj (QId, Info.mInfo.mVarName);\r
CVNObj.SetLineNo (LineNo);\r
}\r
//\r
CIfrEnd CEObj; \r
CEObj.SetLineNo (LineNo);\r
- //\r
- // End for SuppressIf\r
- //\r
- CIfrEnd SEObj;\r
- SEObj.SetLineNo (LineNo);\r
}\r
}\r
+\r
+ //\r
+ // End for DisableIf\r
+ //\r
+ CIfrEnd SEObj;\r
+ SEObj.SetLineNo (LineNo);\r
+\r
return VFR_RETURN_SUCCESS;\r
}\r
\r
switch (OpCode) {\r
case EFI_IFR_EQ_ID_VAL_OP:\r
case EFI_IFR_EQ_ID_ID_OP:\r
- case EFI_IFR_EQ_ID_LIST_OP:\r
+ case EFI_IFR_EQ_ID_VAL_LIST_OP:\r
case EFI_IFR_QUESTION_REF1_OP:\r
return TRUE;\r
default:\r
{ sizeof (EFI_IFR_CATENATE), 0 }, // EFI_IFR_CATENATE_OP\r
{ sizeof (EFI_IFR_GUID), 0 }, // EFI_IFR_GUID_OP\r
{ sizeof (EFI_IFR_SECURITY), 0 }, // EFI_IFR_SECURITY_OP - 0x60\r
+ { sizeof (EFI_IFR_MODAL), 0}, // EFI_IFR_MODAL_OP - 0x61\r
+ { sizeof (EFI_IFR_REFRESH_ID), 0}, // EFI_IFR_REFRESH_ID_OP - 0x62\r
};\r
\r
#ifdef CIFROBJ_DEUBG\r
"EFI_IFR_STRING_REF1","EFI_IFR_STRING_REF2", "EFI_IFR_CONDITIONAL", "EFI_IFR_QUESTION_REF3", "EFI_IFR_ZERO", "EFI_IFR_ONE",\r
"EFI_IFR_ONES", "EFI_IFR_UNDEFINED", "EFI_IFR_LENGTH", "EFI_IFR_DUP", "EFI_IFR_THIS", "EFI_IFR_SPAN",\r
"EFI_IFR_VALUE", "EFI_IFR_DEFAULT", "EFI_IFR_DEFAULTSTORE", "EFI_IFR_FORM_MAP", "EFI_IFR_CATENATE", "EFI_IFR_GUID",\r
- "EFI_IFR_SECURITY",\r
+ "EFI_IFR_SECURITY", "EFI_IFR_MODAL", "EFI_IFR_REFRESH_ID",\r
};\r
\r
VOID\r