/*++\r
-Copyright (c) 2004 - 2008, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2004 - 2011, 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
UINT8\r
VfrParserStart (\r
IN FILE *File,\r
- IN BOOLEAN CompatibleMode\r
+ IN INPUT_INFO_TO_SYNTAX *InputInfo\r
)\r
{\r
ParserBlackBox<CVfrDLGLexer, EfiVfrParser, ANTLRToken> VfrParser(File);\r
- VfrParser.parser()->SetCompatibleMode (CompatibleMode);\r
+ VfrParser.parser()->SetCompatibleMode (InputInfo->CompatibleMode);\r
+ VfrParser.parser()->SetOverrideClassGuid (InputInfo->OverrideClassGuid);\r
return VfrParser.parser()->vfrProgram();\r
}\r
>>\r
#token EndList("endlist") "endlist"\r
#token EndForm("endform") "endform"\r
#token Form("form") "form"\r
+#token FormMap("formmap") "formmap"\r
+#token MapTitle("maptitle") "maptitle"\r
+#token MapGuid("mapguid") "mapguid"\r
#token Subtitle("subtitle") "subtitle"\r
#token Help("help") "help"\r
#token Text("text") "text"\r
#token Rule("rule") "rule"\r
#token EndRule("endrule") "endrule"\r
#token Value("value") "value"\r
+#token Read("read") "read"\r
+#token Write("write") "write"\r
#token ResetButton("resetbutton") "resetbutton"\r
#token EndResetButton("endresetbutton") "endresetbutton"\r
#token DefaultStore("defaultstore") "defaultstore"\r
#token Refresh("refresh") "refresh"\r
#token Interval("interval") "interval"\r
#token VarstoreDevice("varstoredevice") "varstoredevice"\r
+#token GuidOp("guidop") "guidop"\r
+#token EndGuidOp("endguidop") "endguidop"\r
+#token DataType("datatype") "datatype"\r
+#token Data("data") "data"\r
+#token Modal("modal") "modal"\r
+\r
//\r
// Define the class and subclass tokens\r
//\r
\r
vfrProgram > [UINT8 Return] :\r
<<\r
- mParserStatus = 0;\r
+ mParserStatus = 0;\r
+ mCIfrOpHdrIndex = 0;\r
mConstantOnlyInExpression = FALSE;\r
>>\r
(\r
dataStructFieldString |\r
dataStructFieldDate |\r
dataStructFieldTime |\r
+ dataStructFieldRef |\r
dataStructFieldUser\r
)*\r
;\r
\r
dataStructField64 :\r
<< UINT32 ArrayNum = 0; >>\r
- "UINT64"\r
+ D:"UINT64"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT64", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructField32 :\r
<< UINT32 ArrayNum = 0; >>\r
- "UINT32"\r
+ D:"UINT32"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT32", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructField16 :\r
- << UINT32 ArrayNum = 0; >>\r
+ << \r
+ UINT32 ArrayNum = 0; \r
+ >>\r
("UINT16" | "CHAR16")\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT16", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >>\r
;\r
\r
dataStructField8 :\r
<< UINT32 ArrayNum = 0; >>\r
- "UINT8"\r
+ D:"UINT8"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT8", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructFieldBool :\r
<< UINT32 ArrayNum = 0; >>\r
- "BOOLEAN"\r
+ D:"BOOLEAN"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "BOOLEAN", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructFieldString :\r
<< UINT32 ArrayNum = 0; >>\r
- "EFI_STRING_ID"\r
+ D:"EFI_STRING_ID"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_STRING_ID", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructFieldDate :\r
<< UINT32 ArrayNum = 0; >>\r
- "EFI_HII_DATE"\r
+ D:"EFI_HII_DATE"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_DATE", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructFieldTime :\r
<< UINT32 ArrayNum = 0; >>\r
- "EFI_HII_TIME"\r
+ D:"EFI_HII_TIME"\r
+ N:StringIdentifier\r
+ {\r
+ OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
+ }\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
+ ;\r
+\r
+dataStructFieldRef :\r
+ << UINT32 ArrayNum = 0; >>\r
+ D:"EFI_HII_REF"\r
N:StringIdentifier\r
{\r
OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
}\r
- ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_TIME", ArrayNum), N); >>\r
+ ";" << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
;\r
\r
dataStructFieldUser :\r
","\r
}\r
<<\r
+ if (mOverrideClassGuid != NULL && ClassGuidNum >= 3) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, L->getLine(), "Already has 3 class guids, can't add extra class guid!");\r
+ }\r
switch (ClassGuidNum) {\r
case 0:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
+ if (mOverrideClassGuid != NULL) {\r
+ ClassGuidNum = 2;\r
+ } else {\r
+ ClassGuidNum = 1;\r
+ }\r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
FSObj->SetClassGuid(&DefaultClassGuid);\r
+ if (mOverrideClassGuid != NULL) {\r
+ FSObj->SetClassGuid(mOverrideClassGuid);\r
+ } \r
break;\r
case 1:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
+ if (mOverrideClassGuid != NULL) {\r
+ ClassGuidNum ++;\r
+ } \r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
FSObj->SetClassGuid(&ClassGuid1);\r
+ if (mOverrideClassGuid != NULL) {\r
+ FSObj->SetClassGuid(mOverrideClassGuid);\r
+ } \r
break;\r
case 2:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));\r
+ if (mOverrideClassGuid != NULL) {\r
+ ClassGuidNum ++;\r
+ } \r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
FSObj->SetClassGuid(&ClassGuid1);\r
FSObj->SetClassGuid(&ClassGuid2);\r
+ if (mOverrideClassGuid != NULL) {\r
+ FSObj->SetClassGuid(mOverrideClassGuid);\r
+ } \r
break;\r
- default:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));\r
+ case 3:\r
+ FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
FSObj->SetClassGuid(&ClassGuid1);\r
FSObj->SetClassGuid(&ClassGuid2);\r
FSObj->SetClassGuid(&ClassGuid3);\r
break;\r
+ default:\r
+ break;\r
}\r
\r
SET_LINE_INFO (*FSObj, L);\r
vfrFormSetList :\r
(\r
vfrFormDefinition |\r
+ vfrFormMapDefinition |\r
vfrStatementImage |\r
vfrStatementVarStoreLinear |\r
vfrStatementVarStoreEfi |\r
vfrStatementVarStoreNameValue |\r
vfrStatementDefaultStore |\r
- vfrStatementDisableIfFormSet\r
+ vfrStatementDisableIfFormSet |\r
+ vfrStatementSuppressIfFormSet |\r
+ vfrStatementExtension\r
)*\r
;\r
\r
+vfrStatementExtension:\r
+ << \r
+ EFI_GUID Guid;\r
+ CIfrGuid *GuidObj = NULL;\r
+ CHAR8 *TypeName = NULL;\r
+ UINT32 TypeSize = 0;\r
+ UINT8 *DataBuff = NULL;\r
+ UINT32 Size = 0;\r
+ UINT8 Idx = 0;\r
+ UINT32 LineNum;\r
+ BOOLEAN IsStruct = FALSE;\r
+ UINT32 ArrayNum = 0;\r
+ >>\r
+ L:GuidOp\r
+ Uuid "=" guidDefinition[Guid]\r
+ {"," DataType "=" \r
+ (\r
+ U64:"UINT64" {OpenBracket AN1:Number CloseBracket <<ArrayNum = _STOU32(AN1->getText());>>}\r
+ << TypeName = U64->getText(); LineNum = U64->getLine(); >>\r
+ | U32:"UINT32" {OpenBracket AN2:Number CloseBracket <<ArrayNum = _STOU32(AN2->getText());>>}\r
+ << TypeName = U32->getText(); LineNum = U32->getLine(); >>\r
+ | U16:"UINT16" {OpenBracket AN3:Number CloseBracket <<ArrayNum = _STOU32(AN3->getText());>>}\r
+ << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
+ | U8:"UINT8" {OpenBracket AN4:Number CloseBracket <<ArrayNum = _STOU32(AN4->getText());>>}\r
+ << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
+ | BL:"BOOLEAN" {OpenBracket AN5:Number CloseBracket <<ArrayNum = _STOU32(AN5->getText());>>}\r
+ << TypeName = BL->getText(); LineNum = BL->getLine(); >>\r
+ | SI:"EFI_STRING_ID" {OpenBracket AN6:Number CloseBracket <<ArrayNum = _STOU32(AN6->getText());>>}\r
+ << TypeName = SI->getText(); LineNum = SI->getLine(); >>\r
+ | D:"EFI_HII_DATE" {OpenBracket AN7:Number CloseBracket <<ArrayNum = _STOU32(AN7->getText());>>}\r
+ << TypeName = D->getText(); LineNum = D->getLine(); IsStruct = TRUE;>>\r
+ | T:"EFI_HII_TIME" {OpenBracket AN8:Number CloseBracket <<ArrayNum = _STOU32(AN8->getText());>>}\r
+ << TypeName = T->getText(); LineNum = T->getLine(); IsStruct = TRUE;>>\r
+ | R:"EFI_HII_REF" {OpenBracket AN9:Number CloseBracket <<ArrayNum = _STOU32(AN9->getText());>>}\r
+ << TypeName = R->getText(); LineNum = R->getLine(); IsStruct = TRUE;>> \r
+ | TN:StringIdentifier {OpenBracket AN10:Number CloseBracket <<ArrayNum = _STOU32(AN10->getText());>>}\r
+ << TypeName = TN->getText(); LineNum = TN->getLine(); IsStruct = TRUE;>>\r
+ )\r
+ <<\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &TypeSize), LineNum);\r
+ if (ArrayNum > 0) {\r
+ Size = TypeSize*ArrayNum;\r
+ } else {\r
+ Size = TypeSize;\r
+ }\r
+ if (Size > (128 - sizeof (EFI_IFR_GUID))) return;\r
+ DataBuff = (UINT8 *)malloc(Size);\r
+ for (Idx = 0; Idx < Size; Idx++) {\r
+ DataBuff[Idx] = 0;\r
+ }\r
+ >>\r
+ vfrExtensionData [DataBuff, Size, TypeName, TypeSize, IsStruct, ArrayNum]\r
+ }\r
+ <<\r
+ {\r
+ GuidObj = new CIfrGuid(Size);\r
+ if (GuidObj != NULL) {\r
+ GuidObj->SetLineNo(L->getLine());\r
+ GuidObj->SetGuid (&Guid);\r
+ }\r
+ }\r
+ if (TypeName != NULL) {\r
+ GuidObj->SetData(DataBuff, Size);\r
+ }\r
+ >>\r
+ {","\r
+ (\r
+ vfrStatementExtension\r
+ )*\r
+ E:EndGuidOp << GuidObj->SetScope(1); CRT_END_OP (E); >>\r
+ }\r
+ <<\r
+ if (GuidObj != NULL) delete GuidObj;\r
+ if (DataBuff != NULL) free(DataBuff);\r
+ >>\r
+ ";"\r
+;\r
+\r
+vfrExtensionData[UINT8 *DataBuff, UINT32 Size, CHAR8 *TypeName, UINT32 TypeSize, BOOLEAN IsStruct, UINT32 ArrayNum]:\r
+ <<\r
+ CHAR8 *TFName = NULL;\r
+ UINT32 ArrayIdx = 0;\r
+ UINT16 FieldOffset;\r
+ UINT8 FieldType;\r
+ UINT32 FieldSize;\r
+ UINT64 Data_U64 = 0;\r
+ UINT32 Data_U32 = 0;\r
+ UINT16 Data_U16 = 0;\r
+ UINT8 Data_U8 = 0;\r
+ BOOLEAN Data_BL = 0;\r
+ EFI_STRING_ID Data_SID = 0;\r
+ BOOLEAN IsArray = FALSE;\r
+ UINT8 *ByteOffset = NULL;\r
+ >>\r
+(\r
+ ("," "data" {OpenBracket IDX1:Number CloseBracket <<IsArray = TRUE;>>}\r
+ <<\r
+ ArrayIdx = 0;\r
+ if (IsArray == TRUE) {\r
+ ArrayIdx = _STOU8(IDX1->getText());\r
+ if (ArrayIdx >= ArrayNum) return;\r
+ IsArray = FALSE;\r
+ }\r
+ ByteOffset = DataBuff + (ArrayIdx * TypeSize);\r
+ if (IsStruct == TRUE) {\r
+ _STRCAT(&TFName, TypeName);\r
+ }\r
+ >>\r
+ ("." FN:StringIdentifier\r
+ <<\r
+ if (IsStruct == TRUE) {\r
+ _STRCAT(&TFName, ".");\r
+ _STRCAT(&TFName, FN->getText());\r
+ }\r
+ >>\r
+ {\r
+ OpenBracket IDX2:Number CloseBracket\r
+ <<\r
+ if (IsStruct == TRUE) {\r
+ _STRCAT(&TFName, "[");\r
+ _STRCAT(&TFName, IDX2->getText());\r
+ _STRCAT(&TFName, "]");\r
+ }\r
+ >>\r
+ }\r
+ )*\r
+ "=" RD:Number\r
+ <<\r
+ if (IsStruct == FALSE) {\r
+ if (strcmp ("UINT64", TypeName) == 0) {\r
+ Data_U64 = _STOU64(RD->getText());\r
+ memcpy (ByteOffset, &Data_U64, TypeSize);\r
+ }else if (strcmp ("UINT32", TypeName) == 0) {\r
+ Data_U32 = _STOU32(RD->getText());\r
+ memcpy (ByteOffset, &Data_U32, TypeSize); \r
+ }else if (strcmp ("UINT16", TypeName) == 0) {\r
+ Data_U16 = _STOU16(RD->getText());\r
+ memcpy (ByteOffset, &Data_U16, TypeSize); \r
+ }else if (strcmp ("UINT8", TypeName) == 0) {\r
+ Data_U8 = _STOU8(RD->getText());\r
+ memcpy (ByteOffset, &Data_U8, TypeSize); \r
+ }else if (strcmp ("BOOLEAN", TypeName)== 0) {\r
+ Data_BL = _STOU8(RD->getText());\r
+ memcpy (ByteOffset, &Data_BL, TypeSize); \r
+ }else if (strcmp ("EFI_STRING_ID", TypeName) == 0) {\r
+ Data_SID = _STOSID(RD->getText());\r
+ memcpy (ByteOffset, &Data_SID, TypeSize); \r
+ }\r
+ } else {\r
+ gCVfrVarDataTypeDB.GetDataFieldInfo(TFName, FieldOffset, FieldType, FieldSize);\r
+ switch (FieldType) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ Data_U8 = _STOU8(RD->getText());\r
+ memcpy (ByteOffset + FieldOffset, &Data_U8, FieldSize);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ Data_U16 = _STOU16(RD->getText());\r
+ memcpy (ByteOffset + FieldOffset, &Data_U16, FieldSize);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ Data_U32 = _STOU32(RD->getText());\r
+ memcpy (ByteOffset + FieldOffset, &Data_U32, FieldSize);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ Data_U64 = _STOU64(RD->getText());\r
+ memcpy (ByteOffset + FieldOffset, &Data_U64, FieldSize);\r
+ break;\r
+ case EFI_IFR_TYPE_BOOLEAN:\r
+ Data_BL = _STOU8(RD->getText());\r
+ memcpy (ByteOffset + FieldOffset, &Data_BL, FieldSize);\r
+ break;\r
+ case EFI_IFR_TYPE_STRING:\r
+ Data_SID = _STOSID(RD->getText());\r
+ memcpy (ByteOffset + FieldOffset, &Data_SID, FieldSize);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ if (TFName != NULL) { delete TFName; TFName = NULL; }\r
+ >>\r
+ )*\r
+)\r
+;\r
+\r
+\r
vfrStatementDefaultStore :\r
<< UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD; >>\r
D:DefaultStore N:StringIdentifier ","\r
V:Varstore << VSObj.SetLineNo(V->getLine()); >>\r
(\r
TN:StringIdentifier "," << TypeName = TN->getText(); LineNum = TN->getLine(); >>\r
- | U8:"UINT8" "," << TypeName = "UINT8"; LineNum = U8->getLine(); >>\r
- | U16:"UINT16" "," << TypeName = "UINT16"; LineNum = U16->getLine(); >>\r
- | U32:"UINT32" "," << TypeName = "UINT32"; LineNum = U32->getLine(); >>\r
- | U64:"UINT64" "," << TypeName = "UINT64"; LineNum = U64->getLine(); >>\r
- | D:"EFI_HII_DATE" "," << TypeName = "EFI_HII_DATE"; LineNum = D->getLine(); >>\r
- | T:"EFI_HII_TIME" "," << TypeName = "EFI_HII_TIME"; LineNum = T->getLine(); >>\r
+ | U8:"UINT8" "," << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
+ | U16:"UINT16" "," << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
+ | C16:"CHAR16" "," << TypeName = (CHAR8 *) "UINT16"; LineNum = C16->getLine(); >>\r
+ | U32:"UINT32" "," << TypeName = U32->getText(); LineNum = U32->getLine(); >>\r
+ | U64:"UINT64" "," << TypeName = U64->getText(); LineNum = U64->getLine(); >>\r
+ | D:"EFI_HII_DATE" "," << TypeName = D->getText(); LineNum = D->getLine(); >>\r
+ | T:"EFI_HII_TIME" "," << TypeName = T->getText(); LineNum = T->getLine(); >>\r
+ | R:"EFI_HII_REF" "," << TypeName = R->getText(); LineNum = R->getLine(); >>\r
)\r
{ Key "=" FID:Number "," << // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
if (mCompatibleMode) {\r
_PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);\r
VSObj.SetVarStoreId (VarStoreId);\r
_PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
- VSObj.SetSize (Size);\r
+ VSObj.SetSize ((UINT16) Size);\r
VSObj.SetName (SN->getText());\r
>>\r
";"\r
\r
vfrStatementVarStoreEfi :\r
<<\r
+ BOOLEAN IsUEFI23EfiVarstore = TRUE;\r
EFI_GUID Guid;\r
CIfrVarStoreEfi VSEObj;\r
- EFI_VARSTORE_ID VarStoreId;\r
+ EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;\r
UINT32 Attr = 0;\r
+ UINT32 Size;\r
+ CHAR8 *TypeName;\r
+ UINT32 LineNum;\r
+ CHAR8 *StoreName = NULL;\r
>>\r
E:Efivarstore << VSEObj.SetLineNo(E->getLine()); >>\r
- SN:StringIdentifier ","\r
+ (\r
+ TN:StringIdentifier "," << TypeName = TN->getText(); LineNum = TN->getLine(); >>\r
+ | U8:"UINT8" "," << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
+ | U16:"UINT16" "," << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
+ | C16:"CHAR16" "," << TypeName = (CHAR8 *) "UINT16"; LineNum = C16->getLine(); >>\r
+ | U32:"UINT32" "," << TypeName = U32->getText(); LineNum = U32->getLine(); >>\r
+ | U64:"UINT64" "," << TypeName = U64->getText(); LineNum = U64->getLine(); >>\r
+ | D:"EFI_HII_DATE" "," << TypeName = D->getText(); LineNum = D->getLine(); >>\r
+ | T:"EFI_HII_TIME" "," << TypeName = T->getText(); LineNum = T->getLine(); >>\r
+ | R:"EFI_HII_REF" "," << TypeName = R->getText(); LineNum = R->getLine(); >> \r
+ )\r
+ {\r
+ VarId "=" ID:Number "," <<\r
+ _PCATCH(\r
+ (INTN)(VarStoreId = _STOU16(ID->getText())) != 0,\r
+ (INTN)TRUE,\r
+ ID,\r
+ "varid 0 is not allowed."\r
+ );\r
+ >>\r
+ }\r
Attribute "=" vfrVarStoreEfiAttr[Attr] ( "\|" vfrVarStoreEfiAttr[Attr] )* ","\r
<< VSEObj.SetAttributes (Attr); >>\r
- Name "=" "STRING_TOKEN" "\(" VN:Number "\)" ","\r
- VarSize "=" N:Number ","\r
- Uuid "=" guidDefinition[Guid] << mCVfrDataStorage.DeclareEfiVarStore (SN->getText(), &Guid, _STOSID(VN->getText()), _STOU32(N->getText())); >>\r
- <<\r
- VSEObj.SetGuid (&Guid);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
+\r
+ (\r
+ Name "=" SN:StringIdentifier "," << StoreName = SN->getText(); >>\r
+ |\r
+ Name "=" "STRING_TOKEN" "\(" VN:Number "\)" "," \r
+ VarSize "=" N:Number "," << \r
+ IsUEFI23EfiVarstore = FALSE;\r
+ StoreName = gCVfrStringDB.GetVarStoreNameFormStringId(_STOSID(VN->getText()));\r
+ if (StoreName == NULL) {\r
+ _PCATCH (VFR_RETURN_UNSUPPORTED, VN->getLine(), "Can't get varstore name for this StringId!");\r
+ }\r
+ Size = _STOU32(N->getText());\r
+ switch (Size) {\r
+ case 1:\r
+ TypeName = (CHAR8 *) "UINT8";\r
+ break;\r
+ case 2:\r
+ TypeName = (CHAR8 *) "UINT16";\r
+ break;\r
+ case 4:\r
+ TypeName = (CHAR8 *) "UINT32";\r
+ break;\r
+ case 8:\r
+ TypeName = (CHAR8 *) "UINT64";\r
+ break; \r
+ default:\r
+ _PCATCH (VFR_RETURN_UNSUPPORTED, N);\r
+ break;\r
+ }\r
+ >>\r
+ )\r
+\r
+ Uuid "=" guidDefinition[Guid] << \r
+ if (IsUEFI23EfiVarstore) {\r
+ _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
+ StoreName,\r
+ &Guid,\r
+ &gCVfrVarDataTypeDB,\r
+ TypeName,\r
+ VarStoreId\r
+ ), LineNum); \r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
+ } else {\r
+ _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
+ TN->getText(),\r
+ &Guid,\r
+ &gCVfrVarDataTypeDB,\r
+ TypeName,\r
+ VarStoreId\r
+ ), LineNum); \r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId(TN->getText(), &VarStoreId), VN);\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), N->getLine());\r
+ }\r
+ VSEObj.SetGuid (&Guid); \r
VSEObj.SetVarStoreId (VarStoreId);\r
+ \r
+ VSEObj.SetSize ((UINT16) Size);\r
+ VSEObj.SetName (StoreName);\r
+ if (IsUEFI23EfiVarstore == FALSE && StoreName != NULL) {\r
+ delete StoreName; \r
+ }\r
>>\r
";"\r
;\r
";"\r
;\r
\r
+vfrStatementSuppressIfFormSet :\r
+ << CIfrSuppressIf SIObj;>>\r
+ L:SuppressIf <<\r
+ if (mCompatibleMode) {\r
+ _PCATCH (VFR_RETURN_UNSUPPORTED, L);\r
+ }\r
+ SIObj.SetLineNo(L->getLine()); \r
+ >>\r
+ { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
+ vfrStatementExpression[0] ";"\r
+ vfrFormSetList\r
+ E: EndIf \r
+ ";" << CRT_END_OP (E); >>\r
+ ;\r
+\r
//*****************************************************************************\r
//\r
// the syntax of question header and statement header\r
mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId);\r
break;\r
case QUESTION_DATE:\r
- mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId);\r
- break;\r
+ mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId);\r
+ break;\r
case QUESTION_TIME:\r
- mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId);\r
- break;\r
+ mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId);\r
+ break;\r
+ case QUESTION_REF:\r
+ //\r
+ // VarIdStr != NULL stand for question with storagae.\r
+ //\r
+ if (VarIdStr != NULL) {\r
+ mCVfrQuestionDB.RegisterRefQuestion (QName, VarIdStr, QId);\r
+ } else {\r
+ mCVfrQuestionDB.RegisterQuestion (QName, NULL, QId);\r
+ }\r
+ break;\r
default:\r
_PCATCH(VFR_RETURN_FATAL_ERROR);\r
}\r
$QHObj.SetQuestionId (QId);\r
- $QHObj.SetVarStoreInfo (&Info);\r
+ if (VarIdStr != NULL) {\r
+ $QHObj.SetVarStoreInfo (&Info);\r
+ }\r
>>\r
vfrStatementHeader[&$QHObj]\r
- << _SAVE_CURRQEST_VARINFO (Info); >>\r
- << if (VarIdStr != NULL) delete VarIdStr; >>\r
- ;\r
-\r
-vfrQuestionHeaderWithNoStorage[CIfrQuestionHeader *QHObj] :\r
- <<\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- CHAR8 *QName = NULL;\r
- >>\r
- {\r
- Name "=" QN:StringIdentifier "," <<\r
- QName = QN->getText();\r
- _PCATCH(mCVfrQuestionDB.FindQuestion (QName), VFR_RETURN_UNDEFINED, QN, "has already been used please used anther name");\r
- >>\r
- }\r
- {\r
- QuestionId "=" ID:Number "," <<\r
- QId = _STOQID(ID->getText());\r
- _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "redefined quesiont ID");\r
- >>\r
- }\r
- <<\r
- mCVfrQuestionDB.RegisterQuestion (QName, NULL, QId);\r
- $QHObj->SetQuestionId (QId);\r
+ << \r
+ if (VarIdStr != NULL) {\r
+ delete VarIdStr; \r
+ _SAVE_CURRQEST_VARINFO (Info);\r
+ }\r
>>\r
- vfrStatementHeader[$QHObj]\r
;\r
\r
questionheaderFlagsField[UINT8 & Flags] :\r
| LateCheckFlag\r
;\r
\r
-vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] :\r
+vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFlag = TRUE] :\r
<<\r
UINT32 Idx;\r
UINT32 LineNo;\r
);\r
VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
}\r
- _PCATCH(VfrReturnCode, SN1);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
- _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
+ if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
+ _PCATCH(VfrReturnCode, SN1);\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
+ _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
+ }\r
+\r
+ QuestVarIdStr = VarIdStr;\r
>>\r
)\r
|\r
);\r
VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
}\r
- _PCATCH(VfrReturnCode, SN2);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);\r
- if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
- _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);\r
- _STRCAT(&VarStr, TName);\r
+ if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
+ _PCATCH(VfrReturnCode, SN2);\r
+ _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);\r
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
+ _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);\r
+ _STRCAT(&VarStr, TName);\r
+ }\r
}\r
>>\r
\r
(\r
"." <<\r
- _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
+ if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
+ _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
+ }\r
_STRCAT(&VarIdStr, "."); _STRCAT(&VarStr, ".");\r
>>\r
SF:StringIdentifier << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>\r
;\r
\r
vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :\r
+ <<\r
+ EFI_GUID Guid;\r
+ >>\r
N1:Number <<\r
switch ($Type) {\r
case EFI_IFR_TYPE_NUM_SIZE_8 :\r
break;\r
case EFI_IFR_TYPE_TIME :\r
case EFI_IFR_TYPE_DATE :\r
+ case EFI_IFR_TYPE_REF :\r
default :\r
break;\r
}\r
| Z:Zero << $Value.u8 = _STOU8(Z->getText()); >>\r
| HOUR:Number ":" MINUTE:Number ":" SECOND:Number << $Value.time = _STOT(HOUR->getText(), MINUTE->getText(), SECOND->getText()); >>\r
| YEAR:Number "/" MONTH:Number "/" DAY:Number << $Value.date = _STOD(YEAR->getText(), MONTH->getText(), DAY->getText()); >>\r
+ | QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)" \r
+ << $Value.ref = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText()); >>\r
| "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string = _STOSID(S1->getText()); >>\r
;\r
\r
vfrStatementLabel |\r
vfrStatementBanner |\r
// Just for framework vfr compatibility\r
- vfrStatementInvalid\r
+ vfrStatementInvalid |\r
+ vfrStatementExtension |\r
+ vfrStatementModal\r
)*\r
E:EndForm <<\r
if (mCompatibleMode) {\r
";"\r
;\r
\r
+vfrFormMapDefinition :\r
+ << \r
+ CIfrFormMap *FMapObj = NULL;\r
+ UINT32 FormMapMethodNumber = 0;\r
+ EFI_GUID Guid;\r
+ >>\r
+ F:FormMap << FMapObj = new CIfrFormMap(); FMapObj->SetLineNo(F->getLine()); >>\r
+ FormId "=" S1:Number "," << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText())), S1); >>\r
+ (\r
+ MapTitle "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"\r
+ MapGuid "=" guidDefinition[Guid] ";" << FMapObj->SetFormMapMethod (_STOFID(S2->getText()), &Guid); FormMapMethodNumber ++; >>\r
+ )* << if (FormMapMethodNumber == 0) {_PCATCH (VFR_RETURN_INVALID_PARAMETER, F->getLine(), "No MapMethod is set for FormMap!");} delete FMapObj;>>\r
+ (\r
+ vfrStatementImage |\r
+ vfrStatementLocked |\r
+ vfrStatementRules |\r
+ vfrStatementDefault |\r
+ vfrStatementStat |\r
+ vfrStatementQuestions |\r
+ vfrStatementConditional |\r
+ vfrStatementLabel |\r
+ vfrStatementBanner |\r
+ vfrStatementExtension |\r
+ vfrStatementModal\r
+ )*\r
+ E:EndForm << CRT_END_OP (E); >>\r
+ ";"\r
+ ;\r
+\r
vfrStatementRules :\r
<< CIfrRule RObj; >>\r
R:Rule << RObj.SetLineNo(R->getLine()); >>\r
(\r
vfrStatementValue "," << IsExp = TRUE; DObj.SetScope (1); CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
| "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] "," << \r
-\r
- if (gCurrentIfrOpcode != NULL && gCurrentIfrOpcode->GetObjBinAddr() != NULL) {\r
- EFI_IFR_OP_HEADER *TempOpCode;\r
- TempOpCode = (EFI_IFR_OP_HEADER *) gCurrentIfrOpcode->GetObjBinAddr();\r
- switch (TempOpCode->OpCode) {\r
- case EFI_IFR_NUMERIC_OP:\r
- EFI_IFR_NUMERIC *TempNumricCode;\r
- TempNumricCode = (EFI_IFR_NUMERIC *) TempOpCode;\r
- switch (_GET_CURRQEST_DATATYPE()) {\r
- case EFI_IFR_TYPE_NUM_SIZE_64:\r
- if (Val.u64 < TempNumricCode->data.u64.MinValue || Val.u64 > TempNumricCode->data.u64.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_32:\r
- if (Val.u32 < TempNumricCode->data.u32.MinValue || Val.u32 > TempNumricCode->data.u32.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_16:\r
- if (Val.u16 < TempNumricCode->data.u16.MinValue || Val.u16 > TempNumricCode->data.u16.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_8:\r
- if (Val.u8 < TempNumricCode->data.u8.MinValue || Val.u8 > TempNumricCode->data.u8.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- }\r
- break;\r
- case EFI_IFR_ONE_OF_OP:\r
- EFI_IFR_ONE_OF *TempOneOfCode;\r
- TempOneOfCode = (EFI_IFR_ONE_OF *) TempOpCode;\r
- if (TempOneOfCode->data.u64.MinValue != 0 || TempOneOfCode->data.u64.MaxValue != 0 || TempOneOfCode->data.u64.Step != 0) {\r
- //OneOf MinMaxStep Data is set, Val value will be checked for MinMaxStep.\r
- switch (_GET_CURRQEST_DATATYPE()) {\r
- case EFI_IFR_TYPE_NUM_SIZE_64:\r
- if (Val.u64 < TempOneOfCode->data.u64.MinValue || Val.u64 > TempOneOfCode->data.u64.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "OneOf default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_32:\r
- if (Val.u32 < TempOneOfCode->data.u32.MinValue || Val.u32 > TempOneOfCode->data.u32.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "OneOf default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_16:\r
- if (Val.u16 < TempOneOfCode->data.u16.MinValue || Val.u16 > TempOneOfCode->data.u16.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "OneOf default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_8:\r
- if (Val.u8 < TempOneOfCode->data.u8.MinValue || Val.u8 > TempOneOfCode->data.u8.MaxValue) {\r
- _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "OneOf default value must be between MinValue and MaxValue.");\r
- }\r
- break;\r
- }\r
- }\r
- break;\r
+ if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {\r
+ //check default value is valid for Numeric Opcode\r
+ if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
}\r
}\r
DObj.SetType (_GET_CURRQEST_DATATYPE()); \r
"=" vfrStatementExpression[0] << {CIfrEnd EndObj; EndObj.SetLineNo(V->getLine());} >>\r
;\r
\r
+vfrStatementRead :\r
+ << CIfrRead RObj; >>\r
+ R:Read << RObj.SetLineNo(R->getLine()); >>\r
+ vfrStatementExpression[0] ";" \r
+ ;\r
+\r
+vfrStatementWrite :\r
+ << CIfrWrite WObj; >>\r
+ W:Write << WObj.SetLineNo(W->getLine()); >>\r
+ vfrStatementExpression[0] ";" \r
+ ;\r
+\r
vfrStatementSubTitle :\r
<< CIfrSubtitle SObj; >>\r
L:Subtitle << SObj.SetLineNo(L->getLine()); >>\r
\r
vfrStatementGoto :\r
<<\r
- UINT8 RefType = 1;\r
- EFI_STRING_ID DevPath;\r
- EFI_GUID FSId;\r
+ UINT8 RefType = 5;\r
+ EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID;\r
+ EFI_GUID FSId = {0,};\r
EFI_FORM_ID FId;\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
UINT32 BitMask;\r
CIfrRef2 *R2Obj = NULL;\r
CIfrRef3 *R3Obj = NULL;\r
CIfrRef4 *R4Obj = NULL;\r
+ CIfrRef5 *R5Obj = NULL;\r
>>\r
G:Goto\r
- (\r
+ {\r
(\r
DevicePath "=" "STRING_TOKEN" "\(" P:Number "\)" ","\r
FormSetGuid "=" guidDefinition[FSId] ","\r
FId = _STOFID(F4->getText());\r
>>\r
)\r
- )\r
+ }\r
<<\r
switch (RefType) {\r
+ case 5:\r
+ {\r
+ R5Obj = new CIfrRef5;\r
+ QHObj = R5Obj;\r
+ R5Obj->SetLineNo(G->getLine());\r
+ break;\r
+ }\r
case 4:\r
{\r
R4Obj = new CIfrRef4;\r
default: break;\r
}\r
>>\r
- vfrQuestionHeaderWithNoStorage[QHObj]\r
+ vfrQuestionHeader[*QHObj, QUESTION_REF]\r
{ "," vfrStatementStatTagList }\r
{ "," F:FLAGS "=" vfrGotoFlags[QHObj, F->getLine()] }\r
{\r
"," Key "=" KN:Number << AssignQuestionKey (*QHObj, KN); >>\r
}\r
- ";" << if (R1Obj != NULL) {delete R1Obj;} if (R2Obj != NULL) {delete R2Obj;} if (R3Obj != NULL) {delete R3Obj;} if (R4Obj != NULL) {delete R4Obj;} >>\r
+ ";" << if (R1Obj != NULL) {delete R1Obj;} if (R2Obj != NULL) {delete R2Obj;} if (R3Obj != NULL) {delete R3Obj;} if (R4Obj != NULL) {delete R4Obj;} if (R5Obj != NULL) {delete R5Obj;}>>\r
;\r
\r
vfrGotoFlags [CIfrQuestionHeader *QHObj, UINT32 LineNum] :\r
vfrStatementAction :\r
<< CIfrAction AObj; >>\r
L:Action << AObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeaderWithNoStorage[&AObj] ","\r
+ vfrQuestionHeader[AObj] ","\r
{ F:FLAGS "=" vfrActionFlags[AObj, F->getLine()] "," }\r
Config "=" "STRING_TOKEN" "\(" S:Number "\)" "," << AObj.SetQuestionConfig (_STOSID(S->getText())); >>\r
vfrStatementQuestionTagList\r
>>\r
Minimum "=" I:Number ","\r
<<\r
- switch (_GET_CURRQEST_DATATYPE ()) {\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
case EFI_IFR_TYPE_NUM_SIZE_64 : MinU8 = _STOU64(I->getText()); break;\r
case EFI_IFR_TYPE_NUM_SIZE_32 : MinU4 = _STOU32(I->getText()); break;\r
case EFI_IFR_TYPE_NUM_SIZE_16 : MinU2 = _STOU16(I->getText()); break;\r
>>\r
Maximum "=" A:Number ","\r
<<\r
- switch (_GET_CURRQEST_DATATYPE ()) {\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
case EFI_IFR_TYPE_NUM_SIZE_64 : \r
MaxU8 = _STOU64(A->getText()); \r
if (MaxU8 < MinU8) {\r
{\r
STEP "=" S:Number ","\r
<<\r
- switch (_GET_CURRQEST_DATATYPE ()) {\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
case EFI_IFR_TYPE_NUM_SIZE_64 : StepU8 = _STOU64(S->getText()); break;\r
case EFI_IFR_TYPE_NUM_SIZE_32 : StepU4 = _STOU32(S->getText()); break;\r
case EFI_IFR_TYPE_NUM_SIZE_16 : StepU2 = _STOU16(S->getText()); break;\r
>>\r
}\r
<<\r
- switch (_GET_CURRQEST_DATATYPE ()) {\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
case EFI_IFR_TYPE_NUM_SIZE_64 : $MMSDObj.SetMinMaxStepData (MinU8, MaxU8, StepU8); break;\r
case EFI_IFR_TYPE_NUM_SIZE_32 : $MMSDObj.SetMinMaxStepData (MinU4, MaxU4, StepU4); break;\r
case EFI_IFR_TYPE_NUM_SIZE_16 : $MMSDObj.SetMinMaxStepData (MinU2, MaxU2, StepU2); break;\r
\r
vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :\r
<<\r
- UINT8 LFlags = _GET_CURRQEST_DATATYPE();\r
+ UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
UINT8 HFlags = 0;\r
+ EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
>>\r
numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum); >>\r
+ <<\r
+ //check data type flag\r
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
+ }\r
+ } else {\r
+ // update data type for name/value store\r
+ UINT32 DataTypeSize;\r
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
+ gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
+ }\r
+ _PCATCH(NObj.SetFlags (HFlags, LFlags), LineNum);\r
+ >>\r
;\r
\r
numericFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | "DISPLAY_INT_DEC" << $LFlags |= 0x00; >>\r
- | "DISPLAY_UINT_DEC" << $LFlags |= 0x10; >>\r
- | "DISPLAY_UINT_HEX" << $LFlags |= 0x20; >>\r
+ | "NUMERIC_SIZE_1" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_1; >>\r
+ | "NUMERIC_SIZE_2" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_2; >>\r
+ | "NUMERIC_SIZE_4" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_4; >>\r
+ | "NUMERIC_SIZE_8" << $LFlags = ($LFlags & ~EFI_IFR_NUMERIC_SIZE) | EFI_IFR_NUMERIC_SIZE_8; >>\r
+ | "DISPLAY_INT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_INT_DEC; >>\r
+ | "DISPLAY_UINT_DEC" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_DEC; >>\r
+ | "DISPLAY_UINT_HEX" << $LFlags = ($LFlags & ~EFI_IFR_DISPLAY) | EFI_IFR_DISPLAY_UINT_HEX; >>\r
| questionheaderFlagsField[HFlags]\r
;\r
\r
\r
vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :\r
<<\r
- UINT8 LFlags = _GET_CURRQEST_DATATYPE();\r
+ UINT8 LFlags = _GET_CURRQEST_DATATYPE() & EFI_IFR_NUMERIC_SIZE;\r
UINT8 HFlags = 0;\r
+ EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
>>\r
numericFlagsField[HFlags, LFlags] ( "\|" numericFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum); >>\r
+ <<\r
+ //check data type flag\r
+ VarStoreType = mCVfrDataStorage.GetVarStoreType (_GET_CURRQEST_VARTINFO().mVarStoreId);\r
+ if (VarStoreType == EFI_VFR_VARSTORE_BUFFER || VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
+ if (_GET_CURRQEST_DATATYPE() != (LFlags & EFI_IFR_NUMERIC_SIZE)) {\r
+ _PCATCH(VFR_RETURN_INVALID_PARAMETER, LineNum, "Numeric Flag is not same to Numeric VarData type");\r
+ }\r
+ } else {\r
+ // update data type for Name/Value store\r
+ UINT32 DataTypeSize;\r
+ _GET_CURRQEST_VARTINFO().mVarType = LFlags & EFI_IFR_NUMERIC_SIZE;\r
+ gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &DataTypeSize);\r
+ _GET_CURRQEST_VARTINFO().mVarTotalSize = DataTypeSize;\r
+ }\r
+ _PCATCH(OObj.SetFlags (HFlags, LFlags), LineNum);\r
+ >>\r
;\r
\r
vfrStatementStringType :\r
vfrStatementString :\r
<<\r
CIfrString SObj;\r
+ UINT32 VarArraySize;\r
+ UINT8 StringMinSize;\r
+ UINT8 StringMaxSize;\r
>>\r
L:String << SObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[SObj] ","\r
{\r
Key "=" KN:Number "," << AssignQuestionKey (SObj, KN); >>\r
}\r
- MinSize "=" MIN:Number "," << SObj.SetMinSize (_STOU8(MIN->getText())); >>\r
- MaxSize "=" MAX:Number "," << SObj.SetMaxSize (_STOU8(MAX->getText())); >>\r
+ MinSize "=" MIN:Number "," << \r
+ VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
+ StringMinSize = _STOU8(MIN->getText());\r
+ if (_STOU64(MIN->getText()) > StringMinSize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize takes only one byte, which can't be larger than 0xFF.");\r
+ } else if (VarArraySize != 0 && StringMinSize > VarArraySize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "String MinSize can't be larger than the max number of elements in string array.");\r
+ }\r
+ SObj.SetMinSize (StringMinSize);\r
+ >>\r
+ MaxSize "=" MAX:Number "," << \r
+ StringMaxSize = _STOU8(MAX->getText());\r
+ if (_STOU64(MAX->getText()) > StringMaxSize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize takes only one byte, which can't be larger than 0xFF.");\r
+ } else if (VarArraySize != 0 && StringMaxSize > VarArraySize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize can't be larger than the max number of elements in string array.");\r
+ } else if (StringMaxSize < StringMinSize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "String MaxSize can't be less than String MinSize.");\r
+ }\r
+ SObj.SetMaxSize (StringMaxSize);\r
+ >>\r
vfrStatementQuestionOptionList\r
E:EndString << CRT_END_OP (E); >>\r
";"\r
vfrStatementPassword :\r
<<\r
CIfrPassword PObj;\r
+ UINT32 VarArraySize;\r
+ UINT16 PasswordMinSize;\r
+ UINT16 PasswordMaxSize;\r
>>\r
L:Password << PObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[PObj] ","\r
{\r
Key "=" KN:Number "," << AssignQuestionKey (PObj, KN); >>\r
}\r
- MinSize "=" MIN:Number "," << PObj.SetMinSize (_STOU16(MIN->getText())); >>\r
- MaxSize "=" MAX:Number "," << PObj.SetMaxSize (_STOU16(MAX->getText())); >>\r
+ MinSize "=" MIN:Number "," << \r
+ VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
+ PasswordMinSize = _STOU16(MIN->getText());\r
+ if (_STOU64(MIN->getText()) > PasswordMinSize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize takes only two byte, which can't be larger than 0xFFFF.");\r
+ } else if (VarArraySize != 0 && PasswordMinSize > VarArraySize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MIN->getLine(), "Password MinSize can't be larger than the max number of elements in password array.");\r
+ }\r
+ PObj.SetMinSize (PasswordMinSize);\r
+ >>\r
+ MaxSize "=" MAX:Number "," << \r
+ PasswordMaxSize = _STOU16(MAX->getText());\r
+ if (_STOU64(MAX->getText()) > PasswordMaxSize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize takes only two byte, which can't be larger than 0xFFFF.");\r
+ } else if (VarArraySize != 0 && PasswordMaxSize > VarArraySize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize can't be larger than the max number of elements in password array.");\r
+ } else if (PasswordMaxSize < PasswordMinSize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, MAX->getLine(), "Password MaxSize can't be less than Password MinSize.");\r
+ }\r
+ PObj.SetMaxSize (PasswordMaxSize);\r
+ >>\r
{ Encoding "=" Number "," }\r
vfrStatementQuestionOptionList\r
E:EndPassword << CRT_END_OP (E); >>\r
vfrStatementOrderedList :\r
<<\r
CIfrOrderedList OLObj;\r
+ UINT32 VarArraySize;\r
>>\r
L:OrderedList << OLObj.SetLineNo(L->getLine()); >>\r
vfrQuestionHeader[OLObj] ","\r
- << OLObj.SetMaxContainers ((UINT8) _GET_CURRQEST_ARRAY_SIZE()); >>\r
+ << \r
+ VarArraySize = _GET_CURRQEST_ARRAY_SIZE();\r
+ OLObj.SetMaxContainers ((UINT8) (VarArraySize > 0xFF ? 0xFF : VarArraySize));\r
+ >>\r
{\r
- MaxContainers "=" M:Number "," << OLObj.SetMaxContainers (_STOU8(M->getText())); >>\r
+ MaxContainers "=" M:Number "," << \r
+ if (_STOU64(M->getText()) > _STOU8(M->getText())) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers takes only one byte, which can't be larger than 0xFF.");\r
+ } else if (VarArraySize != 0 && _STOU8(M->getText()) > VarArraySize) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, M->getLine(), "OrderedList MaxContainers can't be larger than the max number of elements in array.");\r
+ }\r
+ OLObj.SetMaxContainers (_STOU8(M->getText()));\r
+ >>\r
}\r
{ F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }\r
vfrStatementQuestionOptionList\r
(\r
vfrQuestionHeader[TObj, QUESTION_TIME] ","\r
{ F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }\r
- vfrStatementDefault\r
+ vfrStatementQuestionOptionList\r
)\r
|\r
(\r
vfrStatementNoSubmitIf |\r
vfrStatementDisableIfQuest |\r
vfrStatementRefresh |\r
- vfrStatementVarstoreDevice\r
+ vfrStatementVarstoreDevice |\r
+ vfrStatementExtension |\r
+ vfrStatementRefreshEvent\r
;\r
\r
vfrStatementQuestionTagList :\r
vfrStatementGrayOutIfQuest |\r
vfrStatementValue |\r
vfrStatementDefault |\r
+ vfrStatementRead |\r
+ vfrStatementWrite |\r
vfrStatementOptions\r
;\r
\r
vfrStatementQuestions |\r
vfrStatementConditionalNew |\r
vfrStatementLabel |\r
+ vfrStatementExtension |\r
// Just for framework vfr compatibility\r
vfrStatementInvalid\r
;\r
vfrStatementDisableIfStat :\r
<< \r
CIfrDisableIf DIObj; \r
- mConstantOnlyInExpression = TRUE;\r
>>\r
L:DisableIf << DIObj.SetLineNo(L->getLine()); >>\r
- vfrStatementExpression[0] ";" << mConstantOnlyInExpression = FALSE; >>\r
+ vfrStatementExpression[0] ";" \r
( vfrStatementStatList )*\r
E:EndIf << CRT_END_OP (E); >>\r
";"\r
L:Locked << LObj.SetLineNo(L->getLine()); >>\r
;\r
\r
+vfrModalTag :\r
+ << CIfrModal MObj; >>\r
+ L:Modal << MObj.SetLineNo(L->getLine()); >>\r
+ ;\r
+\r
vfrStatementStatTag :\r
vfrImageTag |\r
vfrLockedTag\r
";"\r
;\r
\r
+vfrStatementModal :\r
+ vfrModalTag\r
+ ";"\r
+ ;\r
+\r
vfrStatementLocked :\r
vfrLockedTag\r
";"\r
vfrStatementDisableIfQuest :\r
<< \r
CIfrDisableIf DIObj; \r
- mConstantOnlyInExpression = TRUE;\r
>>\r
L:DisableIf << DIObj.SetLineNo(L->getLine()); >>\r
- vfrStatementExpression[0] ";" << mConstantOnlyInExpression = FALSE; >>\r
+ vfrStatementExpression[0] ";"\r
vfrStatementQuestionOptionList\r
E:EndIf << CRT_END_OP (E); >>\r
;\r
Interval "=" I:Number << RObj.SetRefreshInterval (_STOU8(I->getText())); >>\r
;\r
\r
+vfrStatementRefreshEvent :\r
+ <<\r
+ CIfrRefreshId RiObj;\r
+ EFI_GUID Guid;\r
+ >>\r
+ L:RefreshGuid << RiObj.SetLineNo(L->getLine()); >>\r
+ "=" guidDefinition[Guid] "," << RiObj.SetRefreshEventGroutId (&Guid); >>\r
+ ;\r
+\r
vfrStatementVarstoreDevice :\r
<< CIfrVarStoreDevice VDObj; >>\r
L:VarstoreDevice << VDObj.SetLineNo(L->getLine()); >>\r
>>\r
L:Option << OOOObj.SetLineNo(L->getLine()); >>\r
Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," << OOOObj.SetOption (_STOSID(S->getText())); >>\r
- Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] "," << OOOObj.SetType (_GET_CURRQEST_DATATYPE()); OOOObj.SetValue (Val); >>\r
+ Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] "," \r
+ << \r
+ if (gCurrentMinMaxData != NULL) {\r
+ //set min/max value for oneof opcode\r
+ UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u64, Val.u64, Step);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u32, Val.u32, (UINT32) Step);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u16, Val.u16, (UINT16) Step);\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ gCurrentMinMaxData->SetMinMaxStepData(Val.u8, Val.u8, (UINT8) Step);\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ }\r
+ OOOObj.SetType (_GET_CURRQEST_DATATYPE()); \r
+ OOOObj.SetValue (Val); \r
+ >>\r
F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]\r
<<\r
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
#token RuleRef("ruleref") "ruleref"\r
#token StringRef("stringref") "stringref"\r
#token PushThis("pushthis") "pushthis"\r
+#token Security("security") "security"\r
+#token Get("get") "get"\r
#token True("TRUE") "TRUE"\r
#token False("FALSE") "FALSE"\r
#token One("ONE") "ONE"\r
#token AND("AND") "AND"\r
#token OR("OR") "OR"\r
#token NOT("NOT") "NOT"\r
+#token Set("set") "set"\r
#token BitWiseNot("~") "\~"\r
#token BoolVal("boolval") "boolval"\r
#token StringVal("stringval") "stringval"\r
#token Catenate("catenate") "catenate"\r
#token QuestionRefVal("questionrefval") "questionrefval"\r
#token StringRefVal("stringrefval") "stringrefval"\r
+#token Map("map") "map"\r
+#token RefreshGuid("refreshguid") "refreshguid"\r
\r
//\r
// Root expression extension function called by other function.\r
//\r
vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] :\r
- << if ($RootLevel == 0) {_CLEAR_SAVED_OPHDR ();} >>\r
+ << if ($RootLevel == 0) {mCIfrOpHdrIndex ++; if (mCIfrOpHdrIndex >= MAX_IFR_EXPRESSION_DEPTH) _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, "The depth of expression exceeds the max supported level 8!"); _CLEAR_SAVED_OPHDR ();} >>\r
andTerm[$RootLevel, $ExpOpCount]\r
(\r
L:OR andTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrOr OObj(L->getLine()); >>\r
if ($ExpOpCount > 1 && $RootLevel == 0) {\r
if (_SET_SAVED_OPHDR_SCOPE()) {\r
CIfrEnd EObj;\r
- if (mCIfrOpHdrLineNo != 0) {\r
- EObj.SetLineNo (mCIfrOpHdrLineNo);\r
+ if (mCIfrOpHdrLineNo[mCIfrOpHdrIndex] != 0) {\r
+ EObj.SetLineNo (mCIfrOpHdrLineNo[mCIfrOpHdrIndex]);\r
}\r
}\r
}\r
+ \r
+ if ($RootLevel == 0) {\r
+ mCIfrOpHdrIndex --;\r
+ }\r
>>\r
;\r
\r
| vfrExpressionConstant[$RootLevel, $ExpOpCount]\r
| vfrExpressionUnaryOp[$RootLevel, $ExpOpCount]\r
| vfrExpressionTernaryOp[$RootLevel, $ExpOpCount]\r
+ | vfrExpressionMap[$RootLevel, $ExpOpCount]\r
| (\r
L:NOT\r
atomTerm[$RootLevel, $ExpOpCount] << { CIfrNot NObj(L->getLine()); $ExpOpCount++; } >>\r
| rulerefExp[$RootLevel, $ExpOpCount]\r
| stringref1Exp[$RootLevel, $ExpOpCount]\r
| pushthisExp[$RootLevel, $ExpOpCount]\r
+ | securityExp[$RootLevel, $ExpOpCount]\r
+ | getExp[$RootLevel, $ExpOpCount]\r
;\r
\r
dupExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
<<\r
UINT8 Type = 0x1;\r
- EFI_STRING_ID DevPath;\r
- EFI_GUID Guid;\r
+ EFI_STRING_ID DevPath = EFI_STRING_ID_INVALID;\r
+ EFI_GUID Guid = {0,};\r
EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
UINT32 BitMask;\r
CHAR8 *QName = NULL;\r
// stringref (STR_FORM_SET_TITLE)\r
//\r
stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+ <<\r
+ EFI_STRING_ID RefStringId = EFI_STRING_ID_INVALID;\r
+ >>\r
L:StringRef\r
- "\(" S:Number "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (_STOSID(S->getText())); $ExpOpCount++; } >>\r
+ "\("\r
+ ( \r
+ "STRING_TOKEN"\r
+ "\(" \r
+ S:Number << RefStringId = _STOSID(S->getText()); >>\r
+ "\)"\r
+ | I:Number << RefStringId = _STOSID(I->getText()); >>\r
+ )\r
+ "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (RefStringId); $ExpOpCount++; } >>\r
;\r
\r
pushthisExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
L:PushThis << { CIfrThis TObj(L->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0), L->getLine()); $ExpOpCount++; } >>\r
;\r
\r
+securityExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+ <<\r
+ EFI_GUID Guid;\r
+ >>\r
+ L:Security\r
+ "\(" guidDefinition[Guid] "\)" << { CIfrSecurity SObj(L->getLine()); _SAVE_OPHDR_COND (SObj, ($ExpOpCount == 0), L->getLine()); SObj.SetPermissions (&Guid); } $ExpOpCount++; >>\r
+ ;\r
+\r
+numericVarStoreType [UINT8 & VarType] :\r
+ "NUMERIC_SIZE_1" << $VarType = EFI_IFR_NUMERIC_SIZE_1; >>\r
+ | "NUMERIC_SIZE_2" << $VarType = EFI_IFR_NUMERIC_SIZE_2; >>\r
+ | "NUMERIC_SIZE_4" << $VarType = EFI_IFR_NUMERIC_SIZE_4; >>\r
+ | "NUMERIC_SIZE_8" << $VarType = EFI_IFR_NUMERIC_SIZE_8; >>\r
+ ;\r
+\r
+getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+ <<\r
+ EFI_VARSTORE_INFO Info;\r
+ CHAR8 *VarIdStr = NULL;\r
+ EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
+ UINT32 Mask = 0;\r
+ EFI_QUESION_TYPE QType = QUESTION_NORMAL;\r
+ UINT8 VarType = EFI_IFR_TYPE_UNDEFINED;\r
+ UINT32 VarSize = 0;\r
+ Info.mVarStoreId = 0;\r
+ >>\r
+ L:Get\r
+ "\(" \r
+ vfrStorageVarId[Info, VarIdStr, FALSE]\r
+ {"\|" FLAGS "=" numericVarStoreType [VarType] }\r
+ "\)" << \r
+ {\r
+ if (Info.mVarStoreId == 0) {\r
+ // support Date/Time question\r
+ mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, QId, Mask, &QType);\r
+ if (QId == EFI_QUESTION_ID_INVALID || Mask == 0 || QType == QUESTION_NORMAL) {\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+ }\r
+ if (QType == QUESTION_DATE) {\r
+ Info.mVarType = EFI_IFR_TYPE_DATE;\r
+ } else if (QType == QUESTION_TIME) {\r
+ Info.mVarType = EFI_IFR_TYPE_TIME;\r
+ }\r
+ switch (Mask) {\r
+ case DATE_YEAR_BITMASK:\r
+ Info.mInfo.mVarOffset = 0;\r
+ break;\r
+ case DATE_DAY_BITMASK:\r
+ Info.mInfo.mVarOffset = 3;\r
+ break;\r
+ case TIME_HOUR_BITMASK:\r
+ Info.mInfo.mVarOffset = 0;\r
+ break;\r
+ case TIME_MINUTE_BITMASK:\r
+ Info.mInfo.mVarOffset = 1;\r
+ break;\r
+ case TIME_SECOND_BITMASK:\r
+ Info.mInfo.mVarOffset = 2;\r
+ break;\r
+ default:\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+ break;\r
+ }\r
+ } else {\r
+ if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string");\r
+ }\r
+ if (VarType != EFI_IFR_TYPE_UNDEFINED) {\r
+ Info.mVarType = VarType;\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+ Info.mVarTotalSize = VarSize;\r
+ }\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+ if (VarSize != Info.mVarTotalSize) {\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data array");\r
+ }\r
+ }\r
+ CIfrGet GObj(L->getLine()); \r
+ _SAVE_OPHDR_COND (GObj, ($ExpOpCount == 0), L->getLine()); \r
+ GObj.SetVarInfo (&Info); \r
+ delete VarIdStr; \r
+ $ExpOpCount++;\r
+ }\r
+ >>\r
+ ;\r
+\r
vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
L1:True << CIfrTrue TObj(L1->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0), L1->getLine()); $ExpOpCount++; >>\r
| L2:False << CIfrFalse FObj(L2->getLine()); _SAVE_OPHDR_COND (FObj, ($ExpOpCount == 0), L2->getLine()); $ExpOpCount++; >>\r
| unintExp[$RootLevel, $ExpOpCount]\r
| toupperExp[$RootLevel, $ExpOpCount]\r
| tolwerExp[$RootLevel, $ExpOpCount]\r
+ | setExp[$RootLevel, $ExpOpCount]\r
;\r
\r
lengthExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
<< { CIfrToLower TLObj(L->getLine()); $ExpOpCount++; } >>\r
;\r
\r
+setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+ <<\r
+ EFI_VARSTORE_INFO Info;\r
+ CHAR8 *VarIdStr = NULL;\r
+ EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
+ UINT32 Mask = 0;\r
+ EFI_QUESION_TYPE QType = QUESTION_NORMAL;\r
+ UINT8 VarType = EFI_IFR_TYPE_UNDEFINED;\r
+ UINT32 VarSize = 0;\r
+ Info.mVarStoreId = 0;\r
+ >>\r
+ L:Set\r
+ "\("\r
+ vfrStorageVarId[Info, VarIdStr, FALSE]\r
+ {"\|" FLAG "=" numericVarStoreType [VarType] }\r
+ "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] \r
+ "\)"\r
+ << \r
+ {\r
+ if (Info.mVarStoreId == 0) {\r
+ // support Date/Time question\r
+ mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, QId, Mask, &QType);\r
+ if (QId == EFI_QUESTION_ID_INVALID || Mask == 0 || QType == QUESTION_NORMAL) {\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+ }\r
+ if (QType == QUESTION_DATE) {\r
+ Info.mVarType = EFI_IFR_TYPE_DATE;\r
+ } else if (QType == QUESTION_TIME) {\r
+ Info.mVarType = EFI_IFR_TYPE_TIME;\r
+ }\r
+ switch (Mask) {\r
+ case DATE_YEAR_BITMASK:\r
+ Info.mInfo.mVarOffset = 0;\r
+ break;\r
+ case DATE_DAY_BITMASK:\r
+ Info.mInfo.mVarOffset = 3;\r
+ break;\r
+ case TIME_HOUR_BITMASK:\r
+ Info.mInfo.mVarOffset = 0;\r
+ break;\r
+ case TIME_MINUTE_BITMASK:\r
+ Info.mInfo.mVarOffset = 1;\r
+ break;\r
+ case TIME_SECOND_BITMASK:\r
+ Info.mInfo.mVarOffset = 2;\r
+ break;\r
+ default:\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+ break;\r
+ }\r
+ } else {\r
+ if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string");\r
+ }\r
+ if (VarType != EFI_IFR_TYPE_UNDEFINED) {\r
+ Info.mVarType = VarType;\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+ Info.mVarTotalSize = VarSize;\r
+ }\r
+ _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+ if (VarSize != Info.mVarTotalSize) {\r
+ _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data array");\r
+ }\r
+ }\r
+ CIfrSet TSObj(L->getLine()); \r
+ TSObj.SetVarInfo (&Info); \r
+ delete VarIdStr; \r
+ $ExpOpCount++;\r
+ }\r
+ >>\r
+ ;\r
+\r
vfrExpressionTernaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
conditionalExp[$RootLevel, $ExpOpCount]\r
| findExp[$RootLevel, $ExpOpCount]\r
"\)" << { CIfrSpan SObj(S->getLine()); SObj.SetFlags(Flags); $ExpOpCount++; } >>\r
;\r
\r
+vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
+ L:Map \r
+ "\(" \r
+ vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] \r
+ ":" << { CIfrMap MObj(L->getLine()); } >>\r
+ (\r
+ vfrStatementExpression[0]\r
+ ","\r
+ vfrStatementExpression[0]\r
+ ";"\r
+ ) *\r
+ E:"\)" << { CIfrEnd EObj; EObj.SetLineNo(E->getLine()); $ExpOpCount++; } >>\r
+ ;\r
+\r
spanFlags [UINT8 & Flags] :\r
N:Number << $Flags |= _STOU8(N->getText()); >>\r
| "LAST_NON_MATCH" << $Flags |= 0x00; >>\r
CVfrQuestionDB mCVfrQuestionDB;\r
CVfrRulesDB mCVfrRulesDB;\r
\r
- CIfrOpHeader *mCIfrOpHdr;\r
- UINT32 mCIfrOpHdrLineNo;\r
+ CIfrOpHeader * mCIfrOpHdr[MAX_IFR_EXPRESSION_DEPTH];\r
+ UINT32 mCIfrOpHdrLineNo[MAX_IFR_EXPRESSION_DEPTH];\r
+ UINT8 mCIfrOpHdrIndex;\r
VOID _SAVE_OPHDR_COND (IN CIfrOpHeader &, IN BOOLEAN, UINT32 LineNo = 0);\r
VOID _CLEAR_SAVED_OPHDR (VOID);\r
BOOLEAN _SET_SAVED_OPHDR_SCOPE (VOID);\r
\r
\r
EFI_VARSTORE_INFO mCurrQestVarInfo;\r
+ EFI_GUID *mOverrideClassGuid;\r
\r
//\r
// For framework vfr compatibility\r
UINT32 _GET_CURRQEST_ARRAY_SIZE();\r
\r
public:\r
- VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CHAR8 *);\r
+ VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CONST CHAR8 *);\r
VOID _PCATCH (IN EFI_VFR_RETURN_CODE);\r
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr);\r
VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32);\r
- VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CHAR8 *);\r
+ VOID _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CONST CHAR8 *);\r
\r
VOID syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);\r
\r
UINT64 _STOU64 (IN CHAR8 *);\r
EFI_HII_DATE _STOD (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *);\r
EFI_HII_TIME _STOT (IN CHAR8 *, IN CHAR8 *, IN CHAR8 *);\r
+ EFI_HII_REF _STOR (IN CHAR8 *, IN CHAR8 *, IN EFI_GUID *, IN CHAR8 *);\r
\r
EFI_STRING_ID _STOSID (IN CHAR8 *);\r
EFI_FORM_ID _STOFID (IN CHAR8 *);\r
EFI_QUESTION_ID _STOQID (IN CHAR8 *);\r
\r
- VOID _STRCAT (IN OUT CHAR8 **, IN CHAR8 *);\r
+ VOID _STRCAT (IN OUT CHAR8 **, IN CONST CHAR8 *);\r
\r
VOID _DeclareDefaultLinearVarStore (IN UINT32);\r
VOID _DeclareStandardDefaultStorage (IN UINT32);\r
VOID IdEqValDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN UINT16, IN EFI_COMPARE_TYPE);\r
VOID IdEqIdDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN EFI_COMPARE_TYPE);\r
VOID IdEqListDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN CHAR8 *, IN UINT32, IN UINT16, IN UINT16 *);\r
+ VOID SetOverrideClassGuid (IN EFI_GUID *);\r
//\r
// For framework vfr compatibility\r
//\r
)\r
{\r
if (Cond == TRUE) {\r
- if (mCIfrOpHdr != NULL) {\r
+ if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) {\r
return ;\r
}\r
- mCIfrOpHdr = new CIfrOpHeader(OpHdr);\r
- mCIfrOpHdrLineNo = LineNo;\r
+ mCIfrOpHdr[mCIfrOpHdrIndex] = new CIfrOpHeader(OpHdr);\r
+ mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = LineNo;\r
}\r
}\r
\r
VOID\r
)\r
{\r
- mCIfrOpHdr = NULL;\r
- mCIfrOpHdrLineNo = 0;\r
+ mCIfrOpHdr[mCIfrOpHdrIndex] = NULL;\r
+ mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = 0;\r
}\r
\r
BOOLEAN\r
VOID\r
)\r
{\r
- if (mCIfrOpHdr != NULL) {\r
- mCIfrOpHdr->SetScope (1);\r
+ if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) {\r
+ mCIfrOpHdr[mCIfrOpHdrIndex]->SetScope (1);\r
return TRUE;\r
}\r
+\r
//\r
// IfrOpHdr is not set, FALSE is return.\r
//\r
IN INTN ReturnCode,\r
IN INTN ExpectCode,\r
IN ANTLRTokenPtr Tok,\r
- IN CHAR8 *ErrorMsg\r
+ IN CONST CHAR8 *ErrorMsg\r
)\r
{\r
if (ReturnCode != ExpectCode) {\r
IN EFI_VFR_RETURN_CODE ReturnCode\r
)\r
{\r
- mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode);\r
+ mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode);\r
}\r
\r
VOID\r
IN ANTLRTokenPtr Tok\r
)\r
{\r
- mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText());\r
+ mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText());\r
}\r
\r
VOID\r
IN UINT32 LineNum\r
)\r
{\r
- mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
+ mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
}\r
\r
VOID\r
EfiVfrParser::_PCATCH (\r
IN EFI_VFR_RETURN_CODE ReturnCode,\r
IN UINT32 LineNum,\r
- IN CHAR8 *ErrorMsg\r
+ IN CONST CHAR8 *ErrorMsg\r
)\r
{\r
- mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);\r
+ mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, (CHAR8 *) ErrorMsg);\r
}\r
\r
VOID\r
VOID\r
EfiVfrParser::_STRCAT (\r
IN OUT CHAR8 **Dest,\r
- IN CHAR8 *Src\r
+ IN CONST CHAR8 *Src\r
)\r
{\r
CHAR8 *NewStr;\r
*Dest = NewStr;\r
}\r
\r
+EFI_HII_REF\r
+EfiVfrParser::_STOR (\r
+ IN CHAR8 *QuestionId,\r
+ IN CHAR8 *FormId,\r
+ IN EFI_GUID *FormSetGuid,\r
+ IN CHAR8 *DevicePath\r
+ )\r
+{\r
+ EFI_HII_REF Ref;\r
+ UINT32 Index;\r
+\r
+ memcpy (&Ref.FormSetGuid, FormSetGuid, sizeof (EFI_GUID));\r
+ Ref.QuestionId = _STOQID (QuestionId);\r
+ Ref.FormId = _STOFID (FormId);\r
+ Ref.DevicePath = _STOSID (DevicePath);\r
+\r
+ return Ref;\r
+}\r
+\r
//\r
// framework vfr to default declare varstore for each structure\r
//\r
SVfrVarStorageNode *pNode;\r
UINT32 TypeSize;\r
BOOLEAN FirstNode;\r
+ CONST CHAR8 VarName[] = "Setup";\r
\r
FirstNode = TRUE;\r
pNode = mCVfrDataStorage.GetBufferVarStoreList();\r
CIfrVarStore VSObj;\r
VSObj.SetLineNo (LineNo);\r
VSObj.SetVarStoreId (0x1); //the first and only one Buffer Var Store\r
- VSObj.SetSize (TypeSize);\r
+ VSObj.SetSize ((UINT16) TypeSize);\r
//VSObj.SetName (gCVfrVarDataTypeDB.mFirstNewDataTypeName);\r
- VSObj.SetName ("Setup");\r
+ VSObj.SetName ((CHAR8 *) VarName);\r
VSObj.SetGuid (&mFormsetGuid);\r
#ifdef VFREXP_DEBUG\r
printf ("Create the default VarStoreName is %s\n", gCVfrVarDataTypeDB.mFirstNewDataTypeName);\r
CIfrVarStore VSObj;\r
VSObj.SetLineNo (LineNo);\r
VSObj.SetVarStoreId (pNode->mVarStoreId);\r
- VSObj.SetSize (pNode->mStorageInfo.mDataType->mTotalSize);\r
+ VSObj.SetSize ((UINT16) pNode->mStorageInfo.mDataType->mTotalSize);\r
if (FirstNode) {\r
- VSObj.SetName ("Setup");\r
+ VSObj.SetName ((CHAR8 *) VarName);\r
FirstNode = FALSE;\r
} else {\r
VSObj.SetName (pNode->mVarStoreName);\r
VSEObj.SetAttributes (0x00000002); //hardcode EFI_VARIABLE_BOOTSERVICE_ACCESS attribute\r
VSEObj.SetGuid (&pNode->mGuid);\r
VSEObj.SetVarStoreId (pNode->mVarStoreId);\r
+ // Generate old efi varstore storage structure for compatiable with old "VarEqVal" opcode,\r
+ // which is 3 bytes less than new structure define in UEFI Spec 2.3.1.\r
+ VSEObj.SetBinaryLength (sizeof (EFI_IFR_VARSTORE_EFI) - 3);\r
#ifdef VFREXP_DEBUG\r
printf ("undefined Efi VarStoreName is %s and Id is 0x%x\n", pNode->mVarStoreName, pNode->mVarStoreId);\r
#endif\r
UINT32 Index;\r
CHAR8 **TypeNameList;\r
UINT32 ListSize;\r
+ CONST CHAR8 DateName[] = "Date";\r
+ CONST CHAR8 TimeName[] = "Time";\r
+ CONST CHAR8 DateType[] = "EFI_HII_DATE";\r
+ CONST CHAR8 TimeType[] = "EFI_HII_TIME";\r
\r
gCVfrVarDataTypeDB.GetUserDefinedTypeNameList (&TypeNameList, &ListSize);\r
\r
mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId);\r
VSObj.SetVarStoreId (VarStoreId);\r
gCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);\r
- VSObj.SetSize (Size);\r
+ VSObj.SetSize ((UINT16) Size);\r
VSObj.SetName (TypeNameList[Index]);\r
VSObj.SetGuid (&mFormsetGuid);\r
}\r
// not required to declare Date and Time VarStore,\r
// because code to support old format Data and Time\r
//\r
- if (gCVfrVarDataTypeDB.IsTypeNameDefined ("Date") == FALSE) {\r
+ if (gCVfrVarDataTypeDB.IsTypeNameDefined ((CHAR8 *) DateName) == FALSE) {\r
UINT32 Size;\r
EFI_VARSTORE_ID VarStoreId;\r
CIfrVarStore VSObj;\r
\r
VSObj.SetLineNo (LineNo);\r
mCVfrDataStorage.DeclareBufferVarStore (\r
- "Date",\r
+ (CHAR8 *) DateName,\r
&mFormsetGuid,\r
&gCVfrVarDataTypeDB,\r
- "EFI_HII_DATE",\r
+ (CHAR8 *) DateType,\r
EFI_VARSTORE_ID_INVALID\r
);\r
- mCVfrDataStorage.GetVarStoreId("Date", &VarStoreId);\r
+ mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId);\r
VSObj.SetVarStoreId (VarStoreId);\r
- gCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_DATE", &Size);\r
- VSObj.SetSize (Size);\r
- VSObj.SetName ("Date");\r
+ gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) DateType, &Size);\r
+ VSObj.SetSize ((UINT16) Size);\r
+ VSObj.SetName ((CHAR8 *) DateName);\r
VSObj.SetGuid (&mFormsetGuid);\r
}\r
\r
- if (gCVfrVarDataTypeDB.IsTypeNameDefined ("Time") == FALSE) {\r
+ if (gCVfrVarDataTypeDB.IsTypeNameDefined ((CHAR8 *) TimeName) == FALSE) {\r
UINT32 Size;\r
EFI_VARSTORE_ID VarStoreId;\r
CIfrVarStore VSObj;\r
\r
VSObj.SetLineNo (LineNo);\r
mCVfrDataStorage.DeclareBufferVarStore (\r
- "Time",\r
+ (CHAR8 *) TimeName,\r
&mFormsetGuid,\r
&gCVfrVarDataTypeDB,\r
- "EFI_HII_TIME",\r
+ (CHAR8 *) TimeType,\r
EFI_VARSTORE_ID_INVALID\r
);\r
- mCVfrDataStorage.GetVarStoreId("Time", &VarStoreId);\r
+ mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId);\r
VSObj.SetVarStoreId (VarStoreId);\r
- gCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_TIME", &Size);\r
- VSObj.SetSize (Size);\r
- VSObj.SetName ("Time");\r
+ gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) TimeType, &Size);\r
+ VSObj.SetSize ((UINT16) Size);\r
+ VSObj.SetName ((CHAR8 *) TimeName);\r
VSObj.SetGuid (&mFormsetGuid);\r
}\r
}\r
//\r
CIfrDefaultStore DSObj;\r
\r
- mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), (CHAR8 *) "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
DSObj.SetLineNo (LineNo);\r
DSObj.SetDefaultName (EFI_STRING_ID_INVALID);\r
DSObj.SetDefaultId (EFI_HII_DEFAULT_CLASS_STANDARD);\r
//\r
CIfrDefaultStore DSObjMF;\r
\r
- mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
+ mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), (CHAR8 *) "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
DSObjMF.SetLineNo (LineNo);\r
DSObjMF.SetDefaultName (EFI_STRING_ID_INVALID);\r
DSObjMF.SetDefaultId (EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
}\r
}\r
\r
+VOID \r
+EfiVfrParser::SetOverrideClassGuid (IN EFI_GUID *OverrideClassGuid)\r
+{\r
+ mOverrideClassGuid = OverrideClassGuid;\r
+}\r
+\r
//\r
// For framework vfr compatibility\r
//\r