\r
The definition of CFormPkg's member function\r
\r
-Copyright (c) 2004 - 2009, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \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
IN VOID *Addr, \r
IN UINT32 Len, \r
IN UINT32 LineNo,\r
- IN CHAR8 *Msg\r
+ IN CONST CHAR8 *Msg\r
)\r
{\r
mKey = NULL;\r
\r
VOID\r
CFormPkg::_WRITE_PKG_LINE (\r
- IN FILE *pFile,\r
- IN UINT32 LineBytes,\r
- IN CHAR8 *LineHeader,\r
- IN CHAR8 *BlkBuf,\r
- IN UINT32 BlkSize\r
+ IN FILE *pFile,\r
+ IN UINT32 LineBytes,\r
+ IN CONST CHAR8 *LineHeader,\r
+ IN CHAR8 *BlkBuf,\r
+ IN UINT32 BlkSize\r
)\r
{\r
UINT32 Index;\r
\r
VOID\r
CFormPkg::_WRITE_PKG_END (\r
- IN FILE *pFile,\r
- IN UINT32 LineBytes,\r
- IN CHAR8 *LineHeader,\r
- IN CHAR8 *BlkBuf,\r
- IN UINT32 BlkSize\r
+ IN FILE *pFile,\r
+ IN UINT32 LineBytes,\r
+ IN CONST CHAR8 *LineHeader,\r
+ IN CHAR8 *BlkBuf,\r
+ IN UINT32 BlkSize\r
)\r
{\r
UINT32 Index;\r
IN VOID *ValAddr, \r
IN UINT32 ValLen,\r
IN UINT32 LineNo,\r
- IN CHAR8 *Msg\r
+ IN CONST CHAR8 *Msg\r
)\r
{\r
SPendingAssign *pNew;\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
//\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
{ 0, 0 }, // 0x1F\r
{ sizeof (EFI_IFR_TO_LOWER), 0 }, // EFI_IFR_TO_LOWER_OP - 0x20\r
{ sizeof (EFI_IFR_TO_UPPER), 0 }, // EFI_IFR_TO_UPPER_OP - 0x21\r
- { 0, 0 }, // 0x22\r
+ { sizeof (EFI_IFR_MAP), 1 }, // EFI_IFR_MAP - 0x22\r
{ sizeof (EFI_IFR_ORDERED_LIST), 1 }, // EFI_IFR_ORDERED_LIST_OP - 0x23\r
{ sizeof (EFI_IFR_VARSTORE), 0 }, // EFI_IFR_VARSTORE_OP\r
{ sizeof (EFI_IFR_VARSTORE_NAME_VALUE), 0 }, // EFI_IFR_VARSTORE_NAME_VALUE_OP\r
{ sizeof (EFI_IFR_VARSTORE_DEVICE), 1 }, // EFI_IFR_VARSTORE_DEVICE_OP\r
{ sizeof (EFI_IFR_VERSION), 0 }, // EFI_IFR_VERSION_OP - 0x28\r
{ sizeof (EFI_IFR_END), 0 }, // EFI_IFR_END_OP\r
- { sizeof (EFI_IFR_MATCH), 1 }, // EFI_IFR_MATCH_OP - 0x2A\r
- { 0, 0 }, { 0, 0} , { 0, 0} , { 0, 0} , // 0x2B ~ 0x2E\r
+ { sizeof (EFI_IFR_MATCH), 0 }, // EFI_IFR_MATCH_OP - 0x2A\r
+ { sizeof (EFI_IFR_GET), 0 }, // EFI_IFR_GET - 0x2B\r
+ { sizeof (EFI_IFR_SET), 0 }, // EFI_IFR_SET - 0x2C\r
+ { sizeof (EFI_IFR_READ), 0 }, // EFI_IFR_READ - 0x2D\r
+ { sizeof (EFI_IFR_WRITE), 0 }, // EFI_IFR_WRITE - 0x2E\r
{ sizeof (EFI_IFR_EQUAL), 0 }, // EFI_IFR_EQUAL_OP - 0x2F\r
{ sizeof (EFI_IFR_NOT_EQUAL), 0 }, // EFI_IFR_NOT_EQUAL_OP\r
{ sizeof (EFI_IFR_GREATER_THAN), 0 }, // EFI_IFR_GREATER_THAN_OP\r
{ sizeof (EFI_IFR_VALUE), 1 }, // EFI_IFR_VALUE_OP\r
{ sizeof (EFI_IFR_DEFAULT), 0 }, // EFI_IFR_DEFAULT_OP\r
{ sizeof (EFI_IFR_DEFAULTSTORE), 0 }, // EFI_IFR_DEFAULTSTORE_OP - 0x5C\r
- { 0, 0}, // 0x5D\r
+ { sizeof (EFI_IFR_FORM_MAP), 1}, // EFI_IFR_FORM_MAP_OP - 0x5D\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_ACTION", "EFI_IFR_RESET_BUTTON", "EFI_IFR_FORM_SET", "EFI_IFR_REF", "EFI_IFR_NO_SUBMIT_IF", "EFI_IFR_INCONSISTENT_IF",\r
"EFI_IFR_EQ_ID_VAL", "EFI_IFR_EQ_ID_ID", "EFI_IFR_EQ_ID_LIST", "EFI_IFR_AND", "EFI_IFR_OR", "EFI_IFR_NOT",\r
"EFI_IFR_RULE", "EFI_IFR_GRAY_OUT_IF", "EFI_IFR_DATE", "EFI_IFR_TIME", "EFI_IFR_STRING", "EFI_IFR_REFRESH",\r
- "EFI_IFR_DISABLE_IF", "EFI_IFR_INVALID", "EFI_IFR_TO_LOWER", "EFI_IFR_TO_UPPER", "EFI_IFR_INVALID", "EFI_IFR_ORDERED_LIST",\r
+ "EFI_IFR_DISABLE_IF", "EFI_IFR_INVALID", "EFI_IFR_TO_LOWER", "EFI_IFR_TO_UPPER", "EFI_IFR_MAP", "EFI_IFR_ORDERED_LIST",\r
"EFI_IFR_VARSTORE", "EFI_IFR_VARSTORE_NAME_VALUE", "EFI_IFR_VARSTORE_EFI", "EFI_IFR_VARSTORE_DEVICE", "EFI_IFR_VERSION", "EFI_IFR_END",\r
- "EFI_IFR_MATCH", "EFI_IFR_INVALID", "EFI_IFR_INVALID", "EFI_IFR_INVALID", "EFI_IFR_INVALID", "EFI_IFR_EQUAL",\r
+ "EFI_IFR_MATCH", "EFI_IFR_GET", "EFI_IFR_SET", "EFI_IFR_READ", "EFI_IFR_WRITE", "EFI_IFR_EQUAL",\r
"EFI_IFR_NOT_EQUAL", "EFI_IFR_GREATER_THAN", "EFI_IFR_GREATER_EQUAL", "EFI_IFR_LESS_THAN", "EFI_IFR_LESS_EQUAL", "EFI_IFR_BITWISE_AND",\r
"EFI_IFR_BITWISE_OR", "EFI_IFR_BITWISE_NOT", "EFI_IFR_SHIFT_LEFT", "EFI_IFR_SHIFT_RIGHT", "EFI_IFR_ADD", "EFI_IFR_SUBTRACT",\r
"EFI_IFR_MULTIPLY", "EFI_IFR_DIVIDE", "EFI_IFR_MODULO", "EFI_IFR_RULE_REF", "EFI_IFR_QUESTION_REF1", "EFI_IFR_QUESTION_REF2",\r
"EFI_IFR_TO_UINT", "EFI_IFR_TO_STRING", "EFI_IFR_TO_BOOLEAN", "EFI_IFR_MID", "EFI_IFR_FIND", "EFI_IFR_TOKEN",\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_INVALID", "EFI_IFR_CATENATE", "EFI_IFR_GUID",\r
+ "EFI_IFR_VALUE", "EFI_IFR_DEFAULT", "EFI_IFR_DEFAULTSTORE", "EFI_IFR_FORM_MAP", "EFI_IFR_CATENATE", "EFI_IFR_GUID",\r
+ "EFI_IFR_SECURITY", "EFI_IFR_MODAL", "EFI_IFR_REFRESH_ID",\r
};\r
\r
VOID\r
\r
#endif\r
\r
-bool gCreateOp = TRUE;\r
+BOOLEAN gCreateOp = TRUE;\r
\r
CIfrObj::CIfrObj (\r
IN UINT8 OpCode,\r
mHeader = OpHdr.mHeader;\r
}\r
\r
-UINT32 CIfrForm::FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE] = {0, };\r
+UINT32 CIfrFormId::FormIdBitMap[EFI_FREE_FORM_ID_BITMAP_SIZE] = {0, };\r