+++ /dev/null
-/*++\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
-\r
-Module Name:\r
- VfrSyntax.g\r
-\r
-Abstract:\r
-\r
---*/\r
-\r
-#header<<\r
-\r
-#include "EfiVfr.h"\r
-#include "VfrFormPkg.h"\r
-#include "VfrError.h"\r
-#include "VfrUtilityLib.h"\r
-#include "AToken.h"\r
-#include "ATokPtr.h"\r
->>\r
-\r
-<<\r
-#include "stdio.h"\r
-#include "PBlackBox.h"\r
-#include "DLexerBase.h"\r
-#include "VfrLexer.h"\r
-#include "AToken.h"\r
-\r
-#define GET_LINENO(Obj) ((Obj)->getLine())\r
-#define SET_LINE_INFO(Obj, L) {(Obj).SetLineNo((L)->getLine());} while (0)\r
-#define CRT_END_OP(Obj) {CIfrEnd EObj; EObj.SetLineNo ((Obj)->getLine());} while (0)\r
-\r
-typedef ANTLRCommonToken ANTLRToken;\r
-\r
-class CVfrDLGLexer : public VfrLexer\r
-{\r
-public:\r
- CVfrDLGLexer (DLGFileInput *F) : VfrLexer (F) {};\r
- INT32 errstd (char *Text)\r
- {\r
- printf ("unrecognized input '%s'\n", Text);\r
- }\r
-};\r
-\r
-UINT8\r
-VfrParserStart (\r
- IN FILE *File\r
- )\r
-{\r
- ParserBlackBox<CVfrDLGLexer, EfiVfrParser, ANTLRToken> VfrParser(File);\r
- return VfrParser.parser()->vfrProgram();\r
-}\r
->>\r
-\r
-#lexaction\r
-<<\r
-#include <Error.h>\r
-\r
->>\r
-\r
-//\r
-// Define a lexical class for parsing quoted strings. Basically\r
-// starts with a double quote, and ends with a double quote that\r
-// is not preceeded with a backslash.\r
-//\r
-#lexclass QUOTED_STRING\r
-#token TheString "~[\"]*\"" << mode (START); >>\r
-\r
-//\r
-// Define a lexclass for skipping over C++ style comments\r
-//\r
-#lexclass CPP_COMMENT\r
-#token "~[\n]*" << skip (); >>\r
-#token "\n" << skip (); mode (START); newline (); >>\r
-\r
-//\r
-// Standard lexclass is START\r
-//\r
-#lexclass START\r
-\r
-//\r
-// Find start of C++ style comments\r
-//\r
-#token "//" << skip (); mode (CPP_COMMENT); >>\r
-\r
-//\r
-// Skip whitespace\r
-//\r
-#token "[\ \t]" << skip (); >>\r
-\r
-//\r
-// Skip over newlines, but count them\r
-//\r
-#token "\n" << skip (); newline (); >>\r
-\r
-//\r
-// Skip over 'extern' in any included .H file\r
-//\r
-#token "extern" << skip (); mode (CPP_COMMENT); >>\r
-\r
-//\r
-// Tokens for the different keywords. Syntax is:\r
-// TokenName("ErrorMessageText") "TokenString"\r
-// where:\r
-// TokenName is the token name (must be capitalized) that is used in the rules\r
-// ErrorMessageText is the string the compiler emits when it detects a syntax error\r
-// TokenString is the actual matching string used in the user script\r
-//\r
-#token FormPkgType("formpkgtype") "formpkgtype"\r
-#token OpenBrace("{") "\{"\r
-#token CloseBrace("}") "\}"\r
-#token OpenParen("(") "\("\r
-#token CloseParen(")") "\)"\r
-#token OpenBracket("[") "\["\r
-#token CloseBracket("]") "\]"\r
-\r
-#token LineDefinition "#line\ [0-9]+\ \"~[\"]+\"[\ \t]*\n" << gCVfrErrorHandle.ParseFileScopeRecord (begexpr (), line ()); skip (); newline (); >>\r
-#token DevicePath("devicepath") "devicepath"\r
-#token FormSet("formset") "formset"\r
-#token FormSetId("formsetid") "formsetid"\r
-#token EndFormSet("endformset") "endformset"\r
-#token Title("title") "title"\r
-#token FormId("formid") "formid"\r
-#token OneOf("oneof") "oneof"\r
-#token EndOneOf("endoneof") "endoneof"\r
-#token Prompt("prompt") "prompt"\r
-#token OrderedList("orderedlist") "orderedlist"\r
-#token MaxContainers("maxcontainers") "maxcontainers"\r
-#token EndList("endlist") "endlist"\r
-#token EndForm("endform") "endform"\r
-#token Form("form") "form"\r
-#token Subtitle("subtitle") "subtitle"\r
-#token Help("help") "help"\r
-#token Text("text") "text"\r
-#token Option("option") "option"\r
-#token FLAGS("flags") "flags"\r
-#token Date("date") "date"\r
-#token EndDate("enddate") "enddate"\r
-#token Year("year") "year"\r
-#token Month("month") "month"\r
-#token Day("day") "day"\r
-#token Time("time") "time"\r
-#token EndTime("endtime") "endtime"\r
-#token Hour("hour") "hour"\r
-#token Minute("minute") "minute"\r
-#token Second("second") "second"\r
-#token GrayOutIf("grayoutif") "grayoutif"\r
-#token Label("label") "label"\r
-#token Timeout("timeout") "timeout"\r
-#token Inventory("inventory") "inventory"\r
-#token NonNvDataMap("_NON_NV_DATA_MAP") "_NON_NV_DATA_MAP"\r
-#token Struct("struct") "struct"\r
-#token Boolean("BOOLEAN") "BOOLEAN"\r
-#token Uint64("UINT64") "UINT64"\r
-#token Uint32("UINT32") "UINT32"\r
-#token Uint16("UINT16") "UINT16"\r
-#token Char16("CHAR16") "CHAR16"\r
-#token Uint8("UINT8") "UINT8"\r
-#token Uuid("guid") "guid"\r
-#token CheckBox("checkbox") "checkbox"\r
-#token EndCheckBox("endcheckbox") "endcheckbox"\r
-#token Numeric("numeric") "numeric"\r
-#token EndNumeric("endnumeric") "endnumeric"\r
-#token Minimum("minimum") "minimum"\r
-#token Maximum("maximum") "maximum"\r
-#token STEP("step") "step"\r
-#token Default("default") "default"\r
-#token Password("password") "password"\r
-#token EndPassword("endpassword") "endpassword"\r
-#token String("string") "string"\r
-#token EndString("endstring") "endstring"\r
-#token MinSize("minsize") "minsize"\r
-#token MaxSize("maxsize") "maxsize"\r
-#token Encoding("encoding") "encoding"\r
-#token SuppressIf("suppressif") "suppressif"\r
-#token DisableIf("disableif") "disableif"\r
-#token Hidden("hidden") "hidden"\r
-#token Goto("goto") "goto"\r
-#token FormSetGuid("formsetguid") "formsetguid"\r
-#token InconsistentIf("inconsistentif") "inconsistentif"\r
-#token NoSubmitIf("nosubmitif") "nosubmitif"\r
-#token EndIf("endif") "endif"\r
-#token Key("key") "key"\r
-#token DefaultFlag("DEFAULT") "DEFAULT"\r
-#token ManufacturingFlag("MANUFACTURING") "MANUFACTURING"\r
-#token InteractiveFlag("INTERACTIVE") "INTERACTIVE"\r
-#token NVAccessFlag("NV_ACCESS") "NV_ACCESS"\r
-#token ResetRequiredFlag("RESET_REQUIRED") "RESET_REQUIRED"\r
-#token LateCheckFlag("LATE_CHECK") "LATE_CHECK"\r
-#token ReadOnlyFlag("READ_ONLY") "READ_ONLY"\r
-#token CallBackFlag("INTERACTIVE") "INTERACTIVE"\r
-#token OptionOnlyFlag("OPTIONS_ONLY") "OPTIONS_ONLY"\r
-#token Class("class") "class"\r
-#token Subclass("subclass") "subclass"\r
-#token ClassGuid("classguid") "classguid"\r
-#token TypeDef("typedef") "typedef"\r
-#token Restore("restore") "restore"\r
-#token Save("save") "save"\r
-#token Defaults("defaults") "defaults"\r
-#token Banner("banner") "banner"\r
-#token Align("align") "align"\r
-#token Left("left") "left"\r
-#token Right("right") "right"\r
-#token Center("center") "center"\r
-#token Line("line") "line"\r
-#token Name("name") "name"\r
-\r
-#token VarId("varid") "varid"\r
-#token Question("question") "question"\r
-#token QuestionId("questionid") "questionid"\r
-#token Image("image") "image"\r
-#token Locked("locked") "locked"\r
-#token Rule("rule") "rule"\r
-#token EndRule("endrule") "endrule"\r
-#token Value("value") "value"\r
-#token ResetButton("resetbutton") "resetbutton"\r
-#token EndResetButton("endresetbutton") "endresetbutton"\r
-#token DefaultStore("defaultstore") "defaultstore"\r
-#token Attribute("attribute") "attribute"\r
-#token Varstore("varstore") "varstore"\r
-#token Efivarstore("efivarstore") "efivarstore"\r
-#token VarSize("varsize") "varsize"\r
-#token NameValueVarStore("namevaluevarstore") "namevaluevarstore"\r
-#token Action("action") "action"\r
-#token Config("config") "config"\r
-#token EndAction("endaction") "endaction"\r
-#token Refresh("refresh") "refresh"\r
-#token Interval("interval") "interval"\r
-#token VarstoreDevice("varstoredevice") "varstoredevice"\r
-//\r
-// Define the class and subclass tokens\r
-//\r
-#token ClassNonDevice("NONDEVICE") "NON_DEVICE"\r
-#token ClassDiskDevice("DISK_DEVICE") "DISK_DEVICE"\r
-#token ClassVideoDevice("VIDEO_DEVICE") "VIDEO_DEVICE"\r
-#token ClassNetworkDevice("NETWORK_DEVICE") "NETWORK_DEVICE"\r
-#token ClassInputDevice("INPUT_DEVICE") "INPUT_DEVICE"\r
-#token ClassOnBoardDevice("ONBOARD_DEVICE") "ONBOARD_DEVICE"\r
-#token ClassOtherDevice("OTHER_DEVICE") "OTHER_DEVICE"\r
-\r
-#token SubclassSetupApplication("SETUP_APPLICATION") "SETUP_APPLICATION"\r
-#token SubclassGeneralApplication("GENERAL_APPLICATION") "GENERAL_APPLICATION"\r
-#token SubclassFrontPage("FRONT_PAGE") "FRONT_PAGE"\r
-#token SubclassSingleUse("SINGLE_USE") "SINGLE_USE"\r
-\r
-//\r
-// This is the overall definition of a VFR form definition script.\r
-//\r
-\r
-vfrProgram > [UINT8 Return] :\r
- <<\r
- mParserStatus = 0;\r
- mConstantOnlyInExpression = FALSE;\r
- >>\r
- (\r
- vfrPragmaPackDefinition\r
- | vfrDataStructDefinition\r
- )*\r
- vfrFormSetDefinition\r
- << $Return = mParserStatus; >>\r
- ;\r
-\r
-pragmaPackShowDef :\r
- L:"show" << mCVfrVarDataTypeDB.Pack (L->getLine(), VFR_PACK_SHOW); >>\r
- ;\r
-\r
-pragmaPackStackDef :\r
- <<\r
- UINT32 LineNum;\r
- UINT8 PackAction;\r
- INT8 *Identifier = NULL;\r
- UINT32 PackNumber = DEFAULT_PACK_ALIGN;\r
- >>\r
- (\r
- L1:"push" << LineNum = L1->getLine(); PackAction = VFR_PACK_PUSH; >>\r
- | L2:"pop" << LineNum = L2->getLine(); PackAction = VFR_PACK_POP; >>\r
- )\r
- {\r
- "," ID:StringIdentifier << Identifier = ID->getText(); >>\r
- }\r
- {\r
- "," N:Number << PackAction |= VFR_PACK_ASSIGN; PackNumber = _STOU32(N->getText()); >>\r
- }\r
- << mCVfrVarDataTypeDB.Pack (LineNum, PackAction, Identifier, PackNumber); >>\r
- ;\r
-\r
-pragmaPackNumber :\r
- <<\r
- UINT32 LineNum;\r
- UINT32 PackNumber = DEFAULT_PACK_ALIGN;\r
- >>\r
- N:Number << LineNum = N->getLine(); PackNumber = _STOU32(N->getText()); >>\r
- << mCVfrVarDataTypeDB.Pack (LineNum, VFR_PACK_ASSIGN, NULL, PackNumber); >>\r
- ;\r
-\r
-vfrPragmaPackDefinition :\r
- "\#pragma" "pack" "\("\r
- {\r
- pragmaPackShowDef\r
- | pragmaPackStackDef\r
- | pragmaPackNumber\r
- }\r
- "\)"\r
- ;\r
-\r
-vfrDataStructDefinition :\r
- { TypeDef } Struct << mCVfrVarDataTypeDB.DeclareDataTypeBegin (); >>\r
- { NonNvDataMap }\r
- {\r
- N1:StringIdentifier << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N1->getText()), N1); >>\r
- }\r
- OpenBrace\r
- vfrDataStructFields\r
- CloseBrace\r
- {\r
- N2:StringIdentifier << _PCATCH(mCVfrVarDataTypeDB.SetNewTypeName (N2->getText()), N2); >>\r
- }\r
- ";" << mCVfrVarDataTypeDB.DeclareDataTypeEnd (); >>\r
- ;\r
-\r
-vfrDataStructFields :\r
- (\r
- dataStructField64 |\r
- dataStructField32 |\r
- dataStructField16 |\r
- dataStructField8 |\r
- dataStructFieldBool |\r
- dataStructFieldString |\r
- dataStructFieldDate |\r
- dataStructFieldTime |\r
- dataStructFieldUser\r
- )*\r
- ;\r
-\r
-dataStructField64 :\r
- << UINT32 ArrayNum = 0; >>\r
- "UINT64"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT64", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructField32 :\r
- << UINT32 ArrayNum = 0; >>\r
- "UINT32"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT32", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructField16 :\r
- << UINT32 ArrayNum = 0; >>\r
- ("UINT16" | "CHAR16")\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT16", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructField8 :\r
- << UINT32 ArrayNum = 0; >>\r
- "UINT8"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT8", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructFieldBool :\r
- << UINT32 ArrayNum = 0; >>\r
- "BOOLEAN"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "BOOLEAN", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructFieldString :\r
- << UINT32 ArrayNum = 0; >>\r
- "EFI_STRING_ID"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_STRING_ID", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructFieldDate :\r
- << UINT32 ArrayNum = 0; >>\r
- "EFI_HII_DATE"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_DATE", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructFieldTime :\r
- << UINT32 ArrayNum = 0; >>\r
- "EFI_HII_TIME"\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_TIME", ArrayNum), N); >>\r
- ;\r
-\r
-dataStructFieldUser :\r
- << UINT32 ArrayNum = 0; >>\r
- T:StringIdentifier\r
- N:StringIdentifier\r
- {\r
- OpenBracket I:Number CloseBracket << ArrayNum = _STOU32(I->getText()); >>\r
- }\r
- ";" << _PCATCH(mCVfrVarDataTypeDB.DataTypeAddField (N->getText(), T->getText(), ArrayNum), T); >>\r
- ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of GUID definition\r
-//\r
-guidSubDefinition [EFI_GUID &Guid] :\r
- G4:Number "," G5:Number "," G6:Number "," G7:Number "," G8:Number "," G9:Number "," G10:Number "," G11:Number\r
- <<\r
- Guid.Data4[0] = _STOU8(G4->getText());\r
- Guid.Data4[1] = _STOU8(G5->getText());\r
- Guid.Data4[2] = _STOU8(G6->getText());\r
- Guid.Data4[3] = _STOU8(G7->getText());\r
- Guid.Data4[4] = _STOU8(G8->getText());\r
- Guid.Data4[5] = _STOU8(G9->getText());\r
- Guid.Data4[6] = _STOU8(G10->getText());\r
- Guid.Data4[7] = _STOU8(G11->getText());\r
- >>\r
- ;\r
-\r
-guidDefinition [EFI_GUID &Guid] :\r
- OpenBrace\r
- G1:Number "," G2:Number "," G3:Number ","\r
- <<\r
- Guid.Data1 = _STOU32 (G1->getText());\r
- Guid.Data2 = _STOU16 (G2->getText());\r
- Guid.Data3 = _STOU16 (G3->getText());\r
- >>\r
- (\r
- OpenBrace guidSubDefinition[Guid] CloseBrace\r
- | guidSubDefinition[Guid]\r
- )\r
- CloseBrace\r
- ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of form set definition\r
-//\r
-vfrFormSetDefinition :\r
- <<\r
- EFI_GUID Guid;\r
- EFI_GUID DefaultClassGuid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID;\r
- EFI_GUID ClassGuids[10];\r
- UINT8 ClassGuidNum = 0;\r
- CIfrFormSet *FSObj = NULL;\r
- UINT16 C, SC;\r
- >>\r
- L:FormSet\r
- Uuid "=" guidDefinition[Guid] ","\r
- Title "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" S2:Number "\)" ","\r
- {\r
- ClassGuid "=" guidDefinition[ClassGuids[ClassGuidNum]] << ++ClassGuidNum; >>\r
- (\r
- "\|" guidDefinition[ClassGuids[ClassGuidNum]] << ++ClassGuidNum; >>\r
- )*\r
- ","\r
- }\r
- <<\r
- switch (ClassGuidNum) {\r
- case 0:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
- FSObj->SetClassGuid(&DefaultClassGuid);\r
- break;\r
- case 1:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
- FSObj->SetClassGuid(&ClassGuids[0]);\r
- break;\r
- case 2:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));\r
- FSObj->SetClassGuid(&ClassGuids[0]);\r
- FSObj->SetClassGuid(&ClassGuids[1]);\r
- break;\r
- default:\r
- FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));\r
- FSObj->SetClassGuid(&ClassGuids[0]);\r
- FSObj->SetClassGuid(&ClassGuids[1]);\r
- FSObj->SetClassGuid(&ClassGuids[2]);\r
- break;\r
- }\r
-\r
- SET_LINE_INFO (*FSObj, L);\r
- FSObj->SetGuid (&Guid);\r
- FSObj->SetFormSetTitle (_STOSID(S1->getText()));\r
- FSObj->SetHelp (_STOSID(S2->getText()));\r
- >>\r
- {\r
- Class "=" classDefinition[C] "," << {CIfrClass CObj; CObj.SetClass(C);} >>\r
- }\r
- {\r
- Subclass "=" subclassDefinition[SC] "," << {CIfrSubClass SCObj; SCObj.SetSubClass(SC);} >>\r
- }\r
- <<\r
- _DeclareStandardDefaultStorage (GET_LINENO (L));\r
- //_DeclareDefaultLinearVarStore (GET_LINENO (L));\r
- >>\r
- vfrFormSetList\r
- E:EndFormSet << CRT_END_OP (E); if (FSObj != NULL) {delete FSObj;}>>\r
- ";"\r
- ;\r
-\r
-vfrFormSetList :\r
- (\r
- vfrFormDefinition |\r
- vfrStatementImage |\r
- vfrStatementVarStoreLinear |\r
- vfrStatementVarStoreEfi |\r
- vfrStatementVarStoreNameValue |\r
- vfrStatementDefaultStore |\r
- vfrStatementDisableIfFormSet\r
- )*\r
- ;\r
-\r
-vfrStatementDefaultStore :\r
- << UINT16 DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD; >>\r
- D:DefaultStore N:StringIdentifier ","\r
- Prompt "=" "STRING_TOKEN" "\(" S:Number "\)"\r
- {\r
- "," Attribute "=" A:Number << DefaultId = _STOU16(A->getText()); >>\r
- }\r
- <<\r
- if (mCVfrDefaultStore.DefaultIdRegistered (DefaultId) == FALSE) {\r
- CIfrDefaultStore DSObj;\r
- _PCATCH(mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), N->getText(), _STOSID(S->getText()), DefaultId)), D->getLine();\r
- DSObj.SetLineNo(D->getLine());\r
- DSObj.SetDefaultName (_STOSID(S->getText()));\r
- DSObj.SetDefaultId (DefaultId);\r
- } else {\r
- _PCATCH(mCVfrDefaultStore.ReRegisterDefaultStoreById (DefaultId, N->getText(), _STOSID(S->getText()))), D->getLine();\r
- }\r
- >>\r
- ";"\r
- ;\r
-\r
-vfrStatementVarStoreLinear :\r
- <<\r
- EFI_GUID Guid;\r
- CIfrVarStore VSObj;\r
- INT8 *TypeName;\r
- UINT32 LineNum;\r
- EFI_VARSTORE_ID VarStoreId = EFI_VARSTORE_ID_INVALID;\r
- UINT32 Size;\r
- >>\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
- )\r
- { Key "=" Number "," } // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\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
- Name "=" SN:StringIdentifier ","\r
- Uuid "=" guidDefinition[Guid]\r
- <<\r
- _PCATCH(mCVfrDataStorage.DeclareBufferVarStore (\r
- SN->getText(),\r
- &Guid,\r
- &mCVfrVarDataTypeDB,\r
- TypeName,\r
- VarStoreId\r
- ), LineNum);\r
- >>\r
- <<\r
- VSObj.SetGuid (&Guid);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
- VSObj.SetVarStoreId (VarStoreId);\r
- _PCATCH(mCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
- VSObj.SetSize (Size);\r
- VSObj.SetName (SN->getText());\r
- >>\r
- ";"\r
- ;\r
-\r
-vfrStatementVarStoreEfi :\r
- <<\r
- EFI_GUID Guid;\r
- CIfrVarStoreEfi VSEObj;\r
- EFI_VARSTORE_ID VarStoreId;\r
- UINT32 Attr = 0;\r
- >>\r
- E:Efivarstore << VSEObj.SetLineNo(E->getLine()); >>\r
- SN:StringIdentifier ","\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
- VSEObj.SetVarStoreId (VarStoreId);\r
- >>\r
- ";"\r
- ;\r
-\r
-vfrVarStoreEfiAttr [UINT32 & Attr] :\r
- N:Number << $Attr |= _STOU32(N->getText()); >>\r
- ;\r
-\r
-vfrStatementVarStoreNameValue :\r
- <<\r
- EFI_GUID Guid;\r
- CIfrVarStoreNameValue VSNVObj;\r
- EFI_VARSTORE_ID VarStoreId;\r
- >>\r
- L:NameValueVarStore << VSNVObj.SetLineNo(L->getLine()); >>\r
- SN:StringIdentifier "," << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreBegin (SN->getText()), SN); >>\r
- (\r
- Name "=" "STRING_TOKEN" "\(" N:Number "\)" "," << _PCATCH(mCVfrDataStorage.NameTableAddItem (_STOSID(N->getText())), SN); >>\r
- )+\r
- Uuid "=" guidDefinition[Guid] << _PCATCH(mCVfrDataStorage.DeclareNameVarStoreEnd (&Guid), SN); >>\r
- <<\r
- VSNVObj.SetGuid (&Guid);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId(SN->getText(), &VarStoreId), SN);\r
- VSNVObj.SetVarStoreId (VarStoreId);\r
- >>\r
- ";"\r
- ;\r
-\r
-//\r
-// keep classDeinition and validClassNames for compatibility but not generate\r
-// any IFR object\r
-//\r
-classDefinition[UINT16 & Class] :\r
- << $Class = 0; >>\r
- validClassNames[$Class] ( "\|" validClassNames[$Class] )*\r
- ;\r
-\r
-validClassNames[UINT16 & Class] :\r
- ClassNonDevice << $Class |= EFI_NON_DEVICE_CLASS; >>\r
- | ClassDiskDevice << $Class |= EFI_DISK_DEVICE_CLASS; >>\r
- | ClassVideoDevice << $Class |= EFI_VIDEO_DEVICE_CLASS; >>\r
- | ClassNetworkDevice << $Class |= EFI_NETWORK_DEVICE_CLASS; >>\r
- | ClassInputDevice << $Class |= EFI_INPUT_DEVICE_CLASS; >>\r
- | ClassOnBoardDevice << $Class |= EFI_ON_BOARD_DEVICE_CLASS; >>\r
- | ClassOtherDevice << $Class |= EFI_OTHER_DEVICE_CLASS; >>\r
- | N:Number << $Class |= _STOU16(N->getText()); >>\r
- ;\r
-\r
-subclassDefinition[UINT16 & SubClass] :\r
- << $SubClass = 0; >>\r
- SubclassSetupApplication << $SubClass |= EFI_SETUP_APPLICATION_SUBCLASS; >>\r
- | SubclassGeneralApplication << $SubClass |= EFI_GENERAL_APPLICATION_SUBCLASS; >>\r
- | SubclassFrontPage << $SubClass |= EFI_FRONT_PAGE_SUBCLASS; >>\r
- | SubclassSingleUse << $SubClass |= EFI_SINGLE_USE_SUBCLASS; >>\r
- | N:Number << $SubClass |= _STOU16(N->getText()); >>\r
- ;\r
-\r
-vfrStatementDisableIfFormSet :\r
- <<\r
- CIfrDisableIf DIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- D:DisableIf << DIObj.SetLineNo(D->getLine()); >>\r
- vfrStatementExpression[0, ExpOpCount] ";" << mConstantOnlyInExpression = FALSE; >>\r
- vfrFormSetList\r
- E:EndIf << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of question header and statement header\r
-//\r
-vfrStatementHeader[CIfrStatementHeader *SHObj] :\r
- Prompt "=" "STRING_TOKEN" "\(" S1:Number "\)" "," << $SHObj->SetPrompt (_STOSID(S1->getText())); >>\r
- Help "=" "STRING_TOKEN" "\(" S2:Number "\)" << $SHObj->SetHelp (_STOSID(S2->getText())); >>\r
- ;\r
-\r
-vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_NORMAL]:\r
- <<\r
- EFI_VARSTORE_INFO Info;\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- INT8 *QName = NULL;\r
- INT8 *VarIdStr = 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
- { V:VarId "=" vfrStorageVarId[Info, VarIdStr] "," }\r
- {\r
- QuestionId "=" ID:Number "," <<\r
- QId = _STOQID(ID->getText());\r
- _PCATCH(mCVfrQuestionDB.FindQuestion (QId), VFR_RETURN_UNDEFINED, ID, "has already been used please assign another number");\r
- >>\r
- }\r
- <<\r
- switch (QType) {\r
- case QUESTION_NORMAL:\r
- mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId);\r
- break;\r
- case QUESTION_DATE:\r
- mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId);\r
- break;\r
- case QUESTION_TIME:\r
- mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId);\r
- break;\r
- default:\r
- _PCATCH(VFR_RETURN_FATAL_ERROR);\r
- }\r
- $QHObj.SetQuestionId (QId);\r
- $QHObj.SetVarStoreInfo (&Info);\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
- INT8 *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
- vfrStatementHeader[$QHObj]\r
- ;\r
-\r
-questionheaderFlagsField[UINT8 & Flags] :\r
- ReadOnlyFlag << $Flags |= 0x01; >>\r
- | CallBackFlag << $Flags |= 0x04; >>\r
- | ResetRequiredFlag << $Flags |= 0x10; >>\r
- | OptionOnlyFlag << $Flags |= 0x80; >>\r
- ;\r
-\r
-vfrStorageVarId[EFI_VARSTORE_INFO & Info, INT8 *&QuestVarIdStr] :\r
- <<\r
- UINT32 Idx;\r
- UINT32 LineNo;\r
- EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
- INT8 *VarIdStr = NULL;\r
- INT8 *VarStr = NULL;\r
- INT8 *SName = NULL;\r
- INT8 *TName = NULL;\r
- EFI_IFR_TYPE_VALUE Dummy = {0};\r
- >>\r
- (\r
- SN1:StringIdentifier << SName = SN1->getText(); _STRCAT(&VarIdStr, SN1->getText()); >>\r
- OpenBracket I1:Number CloseBracket << Idx = _STOU32(I1->getText()); _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I1->getText()); _STRCAT(&VarIdStr, "]"); >>\r
- <<\r
- _PCATCH(mCVfrDataStorage.GetVarStoreType (SName, VarStoreType), SN1);\r
- _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
- _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
- >>\r
- )\r
- |\r
- (\r
- SN2:StringIdentifier << SName = SN2->getText(); _STRCAT(&VarIdStr, SName); >>\r
- <<\r
- _PCATCH(mCVfrDataStorage.GetVarStoreType (SName, VarStoreType), 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
- _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
- _STRCAT(&VarIdStr, "."); _STRCAT(&VarStr, ".");\r
- >>\r
- SF:StringIdentifier << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>\r
- {\r
- OpenBracket I2:Number CloseBracket << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I2->getText()); _STRCAT(&VarIdStr, "]"); >>\r
- << _STRCAT(&VarStr, "["); _STRCAT(&VarStr, I2->getText()); _STRCAT(&VarStr, "]"); >>\r
- }\r
- )* <<\r
- switch (VarStoreType) {\r
- case EFI_VFR_VARSTORE_EFI:\r
- _PCATCH(mCVfrDataStorage.GetEfiVarStoreInfo (&$Info), SN2);\r
- break;\r
- case EFI_VFR_VARSTORE_BUFFER:\r
- _PCATCH(mCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, $Info.mInfo.mVarOffset, $Info.mVarType, $Info.mVarTotalSize), SN2->getLine());\r
- //_PCATCH(mCVfrDataStorage.BufferVarStoreRequestElementAdd (SName, Info), SN2);\r
- _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Register (\r
- SName,\r
- NULL),\r
- SN2->getLine());\r
- _PCATCH((EFI_VFR_RETURN_CODE)gCVfrBufferConfig.Write (\r
- 'a',\r
- SName,\r
- NULL,\r
- $Info.mVarType,\r
- $Info.mInfo.mVarOffset,\r
- $Info.mVarTotalSize,\r
- Dummy),\r
- SN2->getLine());\r
- break;\r
- case EFI_VFR_VARSTORE_NAME:\r
- default: break;\r
- }\r
-\r
- QuestVarIdStr = VarIdStr;\r
- if (VarStr != NULL) {delete VarStr;}\r
- >>\r
- )\r
- ;\r
-\r
-vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, INT8 *&VarIdStr, UINT32 &LineNo] :\r
- << VarIdStr = NULL; LineNo = 0; >>\r
- (\r
- SN1:StringIdentifier << _STRCAT(&VarIdStr, SN1->getText()); LineNo = SN1->getLine(); >>\r
- OpenBracket I1:Number CloseBracket << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I1->getText()); _STRCAT(&VarIdStr, "]"); >>\r
- << mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
- ) <<\r
- if (mConstantOnlyInExpression) {\r
- _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);\r
- }\r
- >>\r
- |\r
- (\r
- SN2:StringIdentifier << _STRCAT (&VarIdStr, SN2->getText()); LineNo = SN2->getLine(); >>\r
- (\r
- "." << _STRCAT (&VarIdStr, "."); >>\r
- SF:StringIdentifier << _STRCAT(&VarIdStr, SF->getText()); >>\r
- {\r
- OpenBracket I2:Number CloseBracket << _STRCAT(&VarIdStr, "["); _STRCAT(&VarIdStr, I2->getText()); _STRCAT(&VarIdStr, "]"); >>\r
- }\r
- )*\r
- << mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, $QId, $Mask); >>\r
- ) <<\r
- if (mConstantOnlyInExpression) {\r
- _PCATCH(VFR_RETURN_CONSTANT_ONLY, LineNo);\r
- }\r
- >>\r
- ;\r
-\r
-vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :\r
- N1:Number <<\r
- switch ($Type) {\r
- case EFI_IFR_TYPE_NUM_SIZE_8 :\r
- $Value.u8 = _STOU8(N1->getText());\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_16 :\r
- $Value.u16 = _STOU16(N1->getText());\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_32 :\r
- $Value.u32 = _STOU32(N1->getText());\r
- break;\r
- case EFI_IFR_TYPE_NUM_SIZE_64 :\r
- $Value.u64 = _STOU64(N1->getText());\r
- break;\r
- case EFI_IFR_TYPE_BOOLEAN :\r
- $Value.b = _STOU8(N1->getText());\r
- break;\r
- case EFI_IFR_TYPE_STRING :\r
- $Value.string = _STOU16(N1->getText());\r
- break;\r
- case EFI_IFR_TYPE_TIME :\r
- case EFI_IFR_TYPE_DATE :\r
- default :\r
- break;\r
- }\r
- >>\r
- | B1:True << $Value.b = TRUE; >>\r
- | B2:False << $Value.b = FALSE; >>\r
- | O1:One << $Value.u8 = _STOU8(O1->getText()); >>\r
- | O2:Ones << $Value.u64 = _STOU64(O2->getText()); >>\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
- | "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string = _STOSID(S1->getText()); >>\r
- ;\r
-\r
-//*****************************************************************************\r
-//\r
-// the syntax of form definition\r
-//\r
-vfrFormDefinition :\r
- << CIfrForm FObj; >>\r
- F:Form << FObj.SetLineNo(F->getLine()); >>\r
- FormId "=" S1:Number "," << _PCATCH(FObj.SetFormId (_STOFID(S1->getText())), S1); >>\r
- Title "=" "STRING_TOKEN" "\(" S2:Number "\)" ";" << FObj.SetFormTitle (_STOSID(S2->getText())); >>\r
- (\r
- vfrStatementImage |\r
- vfrStatementLocked |\r
- vfrStatementRules |\r
- vfrStatementDefault |\r
- vfrStatementStat |\r
- vfrStatementQuestions |\r
- vfrStatementConditional |\r
- vfrStatementLabel |\r
- vfrStatementBanner\r
- // Just for framework vfr compatibility\r
- //vfrStatementInvalid\r
- )*\r
- E:EndForm << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrStatementRules :\r
- << \r
- CIfrRule RObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- R:Rule << RObj.SetLineNo(R->getLine()); >>\r
- S1:StringIdentifier "," <<\r
- mCVfrRulesDB.RegisterRule (S1->getText());\r
- RObj.SetRuleId (mCVfrRulesDB.GetRuleId(S1->getText()));\r
- >>\r
- vfrStatementExpression[0, ExpOpCount]\r
- E:EndRule << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrStatementDefault :\r
- <<\r
- BOOLEAN IsExp = FALSE;\r
- EFI_IFR_TYPE_VALUE Val = {0};\r
- CIfrDefault DObj;\r
- EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;\r
- INT8 *VarStoreName = NULL;\r
- EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;\r
- >>\r
- D:Default << DObj.SetLineNo(D->getLine()); >>\r
- (\r
- (\r
- vfrStatementValue "," << IsExp = TRUE; DObj.SetScope (1); CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>\r
- | "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] "," << \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
- DObj.SetValue(Val);\r
- >>\r
- )\r
- {\r
- DefaultStore "=" SN:StringIdentifier "," << _PCATCH(mCVfrDefaultStore.GetDefaultId (SN->getText(), &DefaultId), SN); DObj.SetDefaultId (DefaultId); >>\r
- }\r
- <<\r
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), D->getLine());\r
- _PCATCH(mCVfrDataStorage.GetVarStoreType (VarStoreName, VarStoreType), D->getLine());\r
- if ((IsExp == FALSE) && (VarStoreType == EFI_VFR_VARSTORE_BUFFER)) {\r
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- DefaultId,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val),\r
- D->getLine()\r
- );\r
- }\r
- >>\r
- )\r
- ;\r
-\r
-vfrStatementStat :\r
- vfrStatementSubTitle |\r
- vfrStatementStaticText |\r
- vfrStatementCrossReference\r
- ;\r
-\r
-vfrStatementQuestions :\r
- vfrStatementBooleanType |\r
- vfrStatementDate |\r
- vfrStatementNumericType |\r
- vfrStatementStringType |\r
- vfrStatementOrderedList |\r
- vfrStatementTime\r
- ;\r
-\r
-vfrStatementConditional :\r
- vfrStatementDisableIfStat |\r
- vfrStatementSuppressIfStat |\r
- vfrStatementGrayOutIfStat\r
- ;\r
-\r
-vfrStatementInvalid :\r
- << _CRT_OP (FALSE); >>\r
- (\r
- vfrStatementInvalidHidden |\r
- vfrStatementInvalidInconsistentIf |\r
- vfrStatementInvalidInventory |\r
- vfrStatementInvalidSaveRestoreDefaults\r
- )\r
- << _CRT_OP (TRUE); >>\r
- ;\r
-\r
-flagsField :\r
- Number | InteractiveFlag | ManufacturingFlag | DefaultFlag |\r
- NVAccessFlag | ResetRequiredFlag | LateCheckFlag\r
- ;\r
-\r
-vfrStatementValue :\r
- << \r
- CIfrValue VObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- V:Value << VObj.SetLineNo(V->getLine()); >>\r
- "=" vfrStatementExpression[0, ExpOpCount]\r
- << { CIfrEnd EndObj; EndObj.SetLineNo(0); } >>\r
- ;\r
-\r
-vfrStatementSubTitle :\r
- << CIfrSubtitle SObj; >>\r
- L:Subtitle << SObj.SetLineNo(L->getLine()); >>\r
- Text "=" "STRING_TOKEN" "\(" S:Number "\)" << SObj.SetPrompt (_STOSID(S->getText())); >>\r
- {\r
- "," FLAGS "=" vfrSubtitleFlags[SObj]\r
- }\r
- { vfrStatementStatTagList "," }\r
- E:";" << CRT_END_OP (E); >>\r
- ;\r
-\r
-vfrSubtitleFlags [CIfrSubtitle & SObj] :\r
- << UINT8 LFlags = 0; >>\r
- subtitleFlagsField[LFlags] ( "\|" subtitleFlagsField[LFlags] )*\r
- << _PCATCH(SObj.SetFlags (LFlags)); >>\r
- ;\r
-\r
-subtitleFlagsField [UINT8 & Flags] :\r
- N:Number << $Flags |= _STOU8(N->getText()); >>\r
- | "HORIZONTAL" << $Flags |= 0x01; >>\r
- ;\r
-\r
-vfrStatementStaticText :\r
- <<\r
- UINT8 Flags = 0;\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- EFI_STRING_ID TxtTwo = EFI_STRING_ID_INVALID;\r
- >>\r
- T:Text\r
- Help "=" "STRING_TOKEN" "\(" S1:Number "\)" ","\r
- Text "=" "STRING_TOKEN" "\(" S2:Number "\)"\r
- {\r
- "," Text "=" "STRING_TOKEN" "\(" S3:Number "\)" << TxtTwo = _STOSID(S3->getText()); >>\r
- }\r
- {\r
- "," F:FLAGS "=" staticTextFlagsField[Flags] ( "\|" staticTextFlagsField[Flags] )*\r
- "," Key "=" KN:Number\r
- }\r
- <<\r
- if (Flags & EFI_IFR_FLAG_CALLBACK) {\r
- CIfrAction AObj;\r
- AObj.SetLineNo (T->getLine());\r
- mCVfrQuestionDB.RegisterQuestion (NULL, NULL, QId);\r
- AObj.SetQuestionId (QId);\r
- AObj.SetPrompt (_STOSID(S2->getText()));\r
- AObj.SetHelp (_STOSID(S1->getText()));\r
- _PCATCH(AObj.SetFlags (Flags), F->getLine());\r
- AssignQuestionKey (AObj, KN);\r
- CRT_END_OP (T);\r
- } else {\r
- CIfrText TObj;\r
- TObj.SetLineNo (T->getLine());\r
- TObj.SetHelp (_STOSID(S1->getText()));\r
- TObj.SetPrompt (_STOSID(S2->getText()));\r
- TObj.SetTextTwo (TxtTwo);\r
- }\r
- >>\r
- { "," vfrStatementStatTagList }\r
- ";"\r
- ;\r
-\r
-staticTextFlagsField[UINT8 & HFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-vfrStatementCrossReference :\r
- vfrStatementGoto |\r
- vfrStatementResetButton\r
- ;\r
-\r
-vfrStatementGoto :\r
- <<\r
- UINT8 RefType = 1;\r
- EFI_STRING_ID DevPath;\r
- EFI_GUID FSId;\r
- EFI_FORM_ID FId;\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- UINT32 BitMask;\r
- CIfrQuestionHeader *QHObj = NULL;\r
- CIfrRef *R1Obj = NULL;\r
- CIfrRef2 *R2Obj = NULL;\r
- CIfrRef3 *R3Obj = NULL;\r
- CIfrRef4 *R4Obj = NULL;\r
- >>\r
- G:Goto\r
- (\r
- (\r
- DevicePath "=" "STRING_TOKEN" "\(" P:Number "\)" ","\r
- FormSetGuid "=" guidDefinition[FSId] ","\r
- FormId "=" F1:Number ","\r
- Question "=" QN1:Number ","\r
- <<\r
- RefType = 4;\r
- DevPath = _STOSID(P->getText());\r
- FId = _STOFID(F1->getText());\r
- QId = _STOQID(QN1->getText());\r
- >>\r
- )\r
- |\r
- (\r
- FormSetGuid "=" guidDefinition[FSId] ","\r
- FormId "=" F2:Number ","\r
- Question "=" QN2:Number ","\r
- <<\r
- RefType = 3;\r
- FId = _STOFID(F2->getText());\r
- QId = _STOQID(QN2->getText());\r
- >>\r
- )\r
- |\r
- (\r
- FormId "=" F3:Number "," << RefType = 2; FId = _STOFID(F3->getText()); >>\r
- Question "="\r
- (\r
- QN3:StringIdentifier "," << mCVfrQuestionDB.GetQuestionId (QN3->getText (), NULL, QId, BitMask); >>\r
- | QN4:Number "," << QId = _STOQID(QN4->getText()); >>\r
- )\r
- )\r
- |\r
- (\r
- F4:Number "," <<\r
- RefType = 1;\r
- FId = _STOFID(F4->getText());\r
- >>\r
- )\r
- )\r
- <<\r
- switch (RefType) {\r
- case 4:\r
- {\r
- R4Obj = new CIfrRef4;\r
- QHObj = R4Obj;\r
- R4Obj->SetLineNo(G->getLine());\r
- R4Obj->SetDevicePath (DevPath);\r
- R4Obj->SetFormSetId (FSId);\r
- R4Obj->SetFormId (FId);\r
- R4Obj->SetQuestionId (QId);\r
- break;\r
- }\r
- case 3:\r
- {\r
- R3Obj = new CIfrRef3;\r
- QHObj = R3Obj;\r
- R3Obj->SetLineNo(G->getLine());\r
- R3Obj->SetFormSetId (FSId);\r
- R3Obj->SetFormId (FId);\r
- R3Obj->SetQuestionId (QId);\r
- break;\r
- }\r
- case 2:\r
- {\r
- R2Obj = new CIfrRef2;\r
- QHObj = R2Obj;\r
- R2Obj->SetLineNo(G->getLine());\r
- R2Obj->SetFormId (FId);\r
- _PCATCH(R2Obj->SetQuestionId (QId), QN3);\r
- break;\r
- }\r
- case 1:\r
- {\r
- R1Obj = new CIfrRef;\r
- QHObj = R1Obj;\r
- R1Obj->SetLineNo(G->getLine());\r
- R1Obj->SetFormId (FId);\r
- break;\r
- }\r
- default: break;\r
- }\r
- >>\r
- vfrQuestionHeaderWithNoStorage[QHObj]\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
- ;\r
-\r
-vfrGotoFlags [CIfrQuestionHeader *QHObj, UINT32 LineNum] :\r
- << UINT8 HFlags = 0; >>\r
- gotoFlagsField[HFlags] ( "\|" gotoFlagsField[HFlags] )*\r
- << _PCATCH(QHObj->SetFlags (HFlags), LineNum); >>\r
- ;\r
-\r
-gotoFlagsField[UINT8 & HFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-getStringId :\r
- "STRING_TOKEN" "\("\r
- IdVal:Number\r
- "\)"\r
- ;\r
-\r
-vfrStatementResetButton :\r
- <<\r
- CIfrResetButton RBObj;\r
- UINT16 DefaultId;\r
- >>\r
- L:ResetButton << RBObj.SetLineNo(L->getLine()); >>\r
- DefaultStore\r
- "=" N:StringIdentifier "," <<\r
- _PCATCH(mCVfrDefaultStore.GetDefaultId (N->getText(), &DefaultId), N->getLine());\r
- RBObj.SetDefaultId (DefaultId);\r
- >>\r
- vfrStatementHeader[&RBObj] ","\r
- { vfrStatementStatTagList "," }\r
- E:EndResetButton << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrStatementBooleanType :\r
- vfrStatementCheckBox |\r
- vfrStatementAction\r
- ;\r
-\r
-//*****************************************************\r
-// Syntax of checkbox\r
-//\r
-// Example:\r
-// checkbox\r
-// varid = MySTestData.mField1,\r
-// prompt = STRING_TOKEN(STR_CHECK_BOX_PROMPT),\r
-// help = STRING_TOKEN(STR_CHECK_BOX_HELP),\r
-// flags = CHECKBOX_DEFAULT | CALLBACK,\r
-// default value = TRUE, defaultstore = MyDefaultStore,\r
-// endcheckbox;\r
-//\r
-vfrStatementCheckBox :\r
- <<\r
- CIfrCheckBox CBObj;\r
- EFI_IFR_TYPE_VALUE Val = {0};\r
- INT8 *VarStoreName = NULL;\r
- >>\r
- L:CheckBox << CBObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[CBObj] ","\r
- {\r
- F:FLAGS "=" vfrCheckBoxFlags[CBObj, F->getLine()] ","\r
- <<\r
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), VFR_RETURN_SUCCESS, L, "Failed to retrieve varstore name");\r
- Val.b = TRUE;\r
- if (CBObj.GetFlags () & 0x01) {\r
- _PCATCH(\r
- mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_STANDARD,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ),\r
- VFR_RETURN_SUCCESS,\r
- L,\r
- "No standard default storage found"\r
- );\r
- }\r
- if (CBObj.GetFlags () & 0x02) {\r
- _PCATCH(\r
- mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_MANUFACTURING,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ),\r
- VFR_RETURN_SUCCESS,\r
- L,\r
- "No manufacturing default storage found"\r
- );\r
- }\r
- >>\r
- }\r
- {\r
- Key "=" KN:Number "," << AssignQuestionKey (CBObj, KN); >>\r
- }\r
- vfrStatementQuestionOptionList\r
- E:EndCheckBox << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrCheckBoxFlags [CIfrCheckBox & CBObj, UINT32 LineNum] :\r
- <<\r
- UINT8 LFlags = 0;\r
- UINT8 HFlags = 0;\r
- >>\r
- checkboxFlagsField[LFlags, HFlags] ( "\|" checkboxFlagsField[LFlags, HFlags] )*\r
- << _PCATCH(CBObj.SetFlags (HFlags, LFlags), LineNum); >>\r
- ;\r
-\r
-checkboxFlagsField[UINT8 & LFlags, UINT8 & HFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | "CHECKBOX_DEFAULT" << $LFlags |= 0x01; >>\r
- | "CHECKBOX_DEFAULT_MFG" << $LFlags |= 0x02; >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-//*****************************************************\r
-// Syntax of action\r
-//\r
-// Example:\r
-// action\r
-// prompt = STRING_TOKEN(STR_ACTION_PROMPT),\r
-// help = STRING_TOKEN(STR_ACTION_HELP),\r
-// flags = CALLBACK,\r
-// config = STRING_TOKEN(STR_ACTION_CONFIG),\r
-// endaction;\r
-//\r
-vfrStatementAction :\r
- << CIfrAction AObj; >>\r
- L:Action << AObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeaderWithNoStorage[&AObj] ","\r
- { F:FLAGS "=" vfrActionFlags[AObj, F->getLine()] "," }\r
- Config "=" "STRING_TOKEN" "\(" S:Number "\)" "," << AObj.SetQuestionConfig (_STOSID(S->getText())); >>\r
- vfrStatementQuestionTagList\r
- E:EndAction << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrActionFlags[CIfrAction & AObj, UINT32 LineNum] :\r
- << UINT8 HFlags = 0; >>\r
- actionFlagsField[HFlags] ( "\|" actionFlagsField[HFlags] )*\r
- << _PCATCH(AObj.SetFlags (HFlags), LineNum); >>\r
- ;\r
-\r
-actionFlagsField[UINT8 & HFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-vfrStatementDate :\r
- <<\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- INT8 *VarIdStr[3] = {NULL, };\r
- CIfrDate DObj;\r
- EFI_IFR_TYPE_VALUE Val = {0};\r
- >>\r
- L:Date << DObj.SetLineNo(L->getLine()); >>\r
- (\r
- (\r
- vfrQuestionHeader[DObj, QUESTION_DATE] ","\r
- { F:FLAGS "=" vfrDateFlags[DObj, F->getLine()] "," }\r
- vfrStatementQuestionOptionList\r
- )\r
- |\r
- (\r
- Year VarId "=" D1:StringIdentifier "." D1Y:StringIdentifier ","\r
- << _STRCAT(&VarIdStr[0], D1->getText()); _STRCAT(&VarIdStr[0], "."); _STRCAT(&VarIdStr[0], D1Y->getText()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" YP:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" YH:Number "\)" ","\r
- minMaxDateStepDefault[Val.date, 0]\r
-\r
- Month VarId "=" D2:StringIdentifier "." D2M:StringIdentifier ","\r
- << _STRCAT(&VarIdStr[1], D2->getText()); _STRCAT(&VarIdStr[1], "."); _STRCAT(&VarIdStr[1], D2M->getText()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" MP:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" MH:Number "\)" ","\r
- minMaxDateStepDefault[Val.date, 1]\r
-\r
- Day VarId "=" D3:StringIdentifier "." D3D:StringIdentifier ","\r
- << _STRCAT(&VarIdStr[2], D3->getText()); _STRCAT(&VarIdStr[2], "."); _STRCAT(&VarIdStr[2], D3D->getText()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" DP:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" DH:Number "\)" ","\r
- minMaxDateStepDefault[Val.date, 2]\r
- <<\r
- mCVfrQuestionDB.RegisterOldDateQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
- DObj.SetQuestionId (QId);\r
- DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_DATE_STORAGE_TIME);\r
- DObj.SetPrompt (_STOSID(YP->getText()));\r
- DObj.SetHelp (_STOSID(YH->getText()));\r
- if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
- >>\r
- << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_DATE, Val); DObj.SetLineNo (D1Y->getLine());} >>\r
- ( vfrStatementInconsistentIf )*\r
- )\r
- )\r
- E:EndDate << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-minMaxDateStepDefault[EFI_HII_DATE & D, UINT8 KeyValue] :\r
- Minimum "=" Number ","\r
- Maximum "=" Number ","\r
- { "step" "=" Number "," }\r
- {\r
- "default" "=" N:Number "," <<\r
- switch (KeyValue) {\r
- case 0: D.Year = _STOU16(N->getText()); break;\r
- case 1: D.Month = _STOU8(N->getText()); break;\r
- case 2: D.Day = _STOU8(N->getText()); break;\r
- }\r
- >>\r
- }\r
- ;\r
-\r
-vfrDateFlags [CIfrDate & DObj, UINT32 LineNum] :\r
- << UINT8 LFlags = 0; >>\r
- dateFlagsField[LFlags] ( "\|" dateFlagsField[LFlags] )*\r
- << _PCATCH(DObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, LFlags), LineNum); >>\r
- ;\r
-\r
-dateFlagsField [UINT8 & Flags] :\r
- N:Number << $Flags |= _STOU8(N->getText()); >>\r
- | "YEAR_SUPPRESS" << $Flags |= 0x01; >>\r
- | "MONTH_SUPPRESS" << $Flags |= 0x02; >>\r
- | "DAY_SUPPRESS" << $Flags |= 0x04; >>\r
- | "STORAGE_NORMAL" << $Flags |= 0x00; >>\r
- | "STORAGE_TIME" << $Flags |= 0x10; >>\r
- | "STORAGE_WAKEUP" << $Flags |= 0x20; >>\r
- ;\r
-\r
-vfrStatementNumericType :\r
- vfrStatementNumeric |\r
- vfrStatementOneOf\r
- ;\r
-\r
-vfrSetMinMaxStep[CIfrMinMaxStepData & MMSDObj] :\r
- <<\r
- UINT64 MaxU8 = 0, MinU8 = 0, StepU8 = 0;\r
- UINT32 MaxU4 = 0, MinU4 = 0, StepU4 = 0;\r
- UINT16 MaxU2 = 0, MinU2 = 0, StepU2 = 0;\r
- UINT8 MaxU1 = 0, MinU1 = 0, StepU1 = 0;\r
- >>\r
- Minimum "=" I:Number ","\r
- <<\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
- case EFI_IFR_TYPE_NUM_SIZE_8 : MinU1 = _STOU8(I->getText()); break;\r
- }\r
- >>\r
- Maximum "=" A:Number ","\r
- <<\r
- switch (_GET_CURRQEST_DATATYPE ()) {\r
- case EFI_IFR_TYPE_NUM_SIZE_64 : MaxU8 = _STOU64(A->getText()); break;\r
- case EFI_IFR_TYPE_NUM_SIZE_32 : MaxU4 = _STOU32(A->getText()); break;\r
- case EFI_IFR_TYPE_NUM_SIZE_16 : MaxU2 = _STOU16(A->getText()); break;\r
- case EFI_IFR_TYPE_NUM_SIZE_8 : MaxU1 = _STOU8(A->getText()); break;\r
- }\r
- >>\r
- {\r
- STEP "=" S:Number ","\r
- <<\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
- case EFI_IFR_TYPE_NUM_SIZE_8 : StepU1 = _STOU8(S->getText()); break;\r
- }\r
- >>\r
- }\r
- <<\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
- case EFI_IFR_TYPE_NUM_SIZE_8 : $MMSDObj.SetMinMaxStepData (MinU1, MaxU1, StepU1); break;\r
- }\r
- >>\r
- ;\r
-\r
-vfrStatementNumeric :\r
- <<\r
- CIfrNumeric NObj;\r
- >>\r
- L:Numeric << NObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[NObj] "," << _PCATCH(NObj.SetFlags (NObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
- { F:FLAGS "=" vfrNumericFlags[NObj, F->getLine()] "," }\r
- {\r
- Key "=" KN:Number "," << AssignQuestionKey (NObj, KN); >>\r
- }\r
- vfrSetMinMaxStep[NObj]\r
- vfrStatementQuestionOptionList\r
- E:EndNumeric << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrNumericFlags [CIfrNumeric & NObj, UINT32 LineNum] :\r
- <<\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
- <<\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
- mCVfrVarDataTypeDB.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
- | "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
-vfrStatementOneOf :\r
- <<\r
- CIfrOneOf OObj;\r
- >>\r
- L:OneOf << OObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[OObj] "," << _PCATCH(OObj.SetFlags (OObj.FLAGS(), _GET_CURRQEST_DATATYPE()), L->getLine()); >>\r
- { F:FLAGS "=" vfrOneofFlagsField[OObj, F->getLine()] "," }\r
- {\r
- vfrSetMinMaxStep[OObj]\r
- }\r
- vfrStatementQuestionOptionList\r
- E:EndOneOf << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrOneofFlagsField [CIfrOneOf & OObj, UINT32 LineNum] :\r
- <<\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
- <<\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
- mCVfrVarDataTypeDB.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
- vfrStatementPassword\r
- ;\r
-\r
-vfrStatementString :\r
- <<\r
- CIfrString SObj;\r
- >>\r
- L:String << SObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[SObj] ","\r
- { F:FLAGS "=" vfrStringFlagsField[SObj, F->getLine()] "," }\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
- vfrStatementQuestionOptionList\r
- E:EndString << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrStringFlagsField [CIfrString & SObj, UINT32 LineNum] :\r
- <<\r
- UINT8 LFlags = 0;\r
- UINT8 HFlags = 0;\r
- >>\r
- stringFlagsField[HFlags, LFlags] ( "\|" stringFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(SObj.SetFlags (HFlags, LFlags), LineNum); >>\r
- ;\r
-\r
-stringFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | "MULTI_LINE" << $LFlags = 0x01; >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-vfrStatementPassword :\r
- <<\r
- CIfrPassword PObj;\r
- >>\r
- L:Password << PObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[PObj] ","\r
- { F:FLAGS "=" vfrPasswordFlagsField[PObj, F->getLine()] "," }\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
- { Encoding "=" Number "," }\r
- vfrStatementQuestionOptionList\r
- E:EndPassword << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrPasswordFlagsField [CIfrPassword & PObj, UINT32 LineNum] :\r
- << UINT8 HFlags = 0; >>\r
- passwordFlagsField[HFlags] ( "\|" passwordFlagsField[HFlags] )*\r
- << _PCATCH(PObj.SetFlags(HFlags), LineNum); >>\r
- ;\r
-\r
-passwordFlagsField [UINT8 & HFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-vfrStatementOrderedList :\r
- <<\r
- CIfrOrderedList OLObj;\r
- >>\r
- L:OrderedList << OLObj.SetLineNo(L->getLine()); >>\r
- vfrQuestionHeader[OLObj] ","\r
- << OLObj.SetMaxContainers ((UINT8)_GET_CURRQEST_ARRAY_SIZE()); >>\r
- {\r
- MaxContainers "=" M:Number "," << OLObj.SetMaxContainers (_STOU8(M->getText())); >>\r
- }\r
- { F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] }\r
- vfrStatementQuestionOptionList\r
- E:EndList << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrOrderedListFlags [CIfrOrderedList & OLObj, UINT32 LineNum] :\r
- <<\r
- UINT8 HFlags = 0;\r
- UINT8 LFlags = 0;\r
- >>\r
- orderedlistFlagsField[HFlags, LFlags] ( "\|" orderedlistFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(OLObj.SetFlags (HFlags, LFlags), LineNum); >>\r
- ;\r
-\r
-orderedlistFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
- N:Number << _PCATCH(_STOU8(N->getText()) == 0 ? VFR_RETURN_SUCCESS : VFR_RETURN_UNSUPPORTED, N->getLine()); >>\r
- | "UNIQUE" << $LFlags |= 0x01; >>\r
- | "NOEMPTY" << $LFlags |= 0x02; >>\r
- | questionheaderFlagsField[HFlags]\r
- ;\r
-\r
-vfrStatementTime :\r
- <<\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- INT8 *VarIdStr[3] = {NULL, };\r
- CIfrTime TObj;\r
- EFI_IFR_TYPE_VALUE Val = {0};\r
- >>\r
- L:Time << TObj.SetLineNo(L->getLine()); >>\r
- (\r
- (\r
- vfrQuestionHeader[TObj, QUESTION_TIME] ","\r
- { F:FLAGS "=" vfrTimeFlags[TObj, F->getLine()] "," }\r
- vfrStatementQuestionOptionList\r
- )\r
- |\r
- (\r
- Hour VarId "=" T1:StringIdentifier "." T1H:StringIdentifier ","\r
- << _STRCAT(&VarIdStr[0], T1->getText()); _STRCAT(&VarIdStr[0], "."); _STRCAT(&VarIdStr[0], T1H->getText()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" HP:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" HH:Number "\)" ","\r
- minMaxTimeStepDefault[Val.time, 0]\r
-\r
- Minute VarId "=" T2:StringIdentifier "." T2M:StringIdentifier ","\r
- << _STRCAT(&VarIdStr[1], T2->getText()); _STRCAT(&VarIdStr[1], "."); _STRCAT(&VarIdStr[1], T2M->getText()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" MP:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" MH:Number "\)" ","\r
- minMaxTimeStepDefault[Val.time, 1]\r
-\r
- Second VarId "=" T3:StringIdentifier "." T3S:StringIdentifier ","\r
- << _STRCAT(&VarIdStr[2], T3->getText()); _STRCAT(&VarIdStr[2], "."); _STRCAT(&VarIdStr[2], T3S->getText()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" SP:Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" SH:Number "\)" ","\r
- minMaxTimeStepDefault[Val.time, 2]\r
- <<\r
- mCVfrQuestionDB.RegisterOldTimeQuestion (VarIdStr[0], VarIdStr[1], VarIdStr[2], QId);\r
- TObj.SetQuestionId (QId);\r
- TObj.SetFlags (EFI_IFR_QUESTION_FLAG_DEFAULT, QF_TIME_STORAGE_TIME);\r
- TObj.SetPrompt (_STOSID(HP->getText()));\r
- TObj.SetHelp (_STOSID(HH->getText()));\r
- if (VarIdStr[0] != NULL) { delete VarIdStr[0]; } if (VarIdStr[1] != NULL) { delete VarIdStr[1]; } if (VarIdStr[2] != NULL) { delete VarIdStr[2]; }\r
- >>\r
- << {CIfrDefault DObj(EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_TIME, Val); DObj.SetLineNo (T1H->getLine());} >>\r
- )\r
- )\r
- E:EndTime << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-minMaxTimeStepDefault[EFI_HII_TIME & T, UINT8 KeyValue] :\r
- Minimum "=" Number ","\r
- Maximum "=" Number ","\r
- { "step" "=" Number "," }\r
- {\r
- "default" "=" N:Number "," <<\r
- switch (KeyValue) {\r
- case 0: T.Hour = _STOU8(N->getText()); break;\r
- case 1: T.Minute = _STOU8(N->getText()); break;\r
- case 2: T.Second = _STOU8(N->getText()); break;\r
- }\r
- >>\r
- }\r
- ;\r
-\r
-vfrTimeFlags [CIfrTime & TObj, UINT32 LineNum] :\r
- << UINT8 LFlags = 0; >>\r
- timeFlagsField[LFlags] ( "\|" timeFlagsField[LFlags] )*\r
- << _PCATCH(TObj.SetFlags(EFI_IFR_QUESTION_FLAG_DEFAULT, LFlags), LineNum); >>\r
- ;\r
-\r
-timeFlagsField [UINT8 & Flags] :\r
- N:Number << $Flags |= _STOU8(N->getText()); >>\r
- | "HOUR_SUPPRESS" << $Flags |= 0x01; >>\r
- | "MINUTE_SUPPRESS" << $Flags |= 0x02; >>\r
- | "SECOND_SUPPRESS" << $Flags |= 0x04; >>\r
- | "STORAGE_NORMAL" << $Flags |= 0x00; >>\r
- | "STORAGE_TIME" << $Flags |= 0x10; >>\r
- | "STORAGE_WAKEUP" << $Flags |= 0x20; >>\r
- ;\r
-\r
-vfrStatementQuestionTag :\r
- vfrStatementStatTag "," |\r
- vfrStatementInconsistentIf |\r
- vfrStatementNoSubmitIf |\r
- vfrStatementDisableIfQuest |\r
- vfrStatementRefresh |\r
- vfrStatementVarstoreDevice\r
- ;\r
-\r
-vfrStatementQuestionTagList :\r
- ( vfrStatementQuestionTag )*\r
- ;\r
-\r
-vfrStatementQuestionOptionTag :\r
- vfrStatementSuppressIfQuest |\r
- vfrStatementValue |\r
- vfrStatementDefault |\r
- vfrStatementOptions\r
- ;\r
-\r
-vfrStatementQuestionOptionList :\r
- (\r
- vfrStatementQuestionTag |\r
- vfrStatementQuestionOptionTag\r
- )*\r
- ;\r
-\r
-vfrStatementStatList :\r
- vfrStatementStat |\r
- vfrStatementQuestions |\r
- vfrStatementConditional |\r
- // Just for framework vfr compatibility\r
- vfrStatementLabel\r
- //vfrStatementInvalid\r
- ;\r
-\r
-vfrStatementDisableIfStat :\r
- <<\r
- CIfrDisableIf DIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:DisableIf << DIObj.SetLineNo(L->getLine()); >>\r
- vfrStatementExpression[0, ExpOpCount] ";" << mConstantOnlyInExpression = FALSE; >>\r
- ( vfrStatementStatList )*\r
- E:EndIf << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrStatementSuppressIfStat :\r
- <<\r
- CIfrSuppressIf SIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:SuppressIf << SIObj.SetLineNo(L->getLine()); >>\r
- { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0, ExpOpCount] ";"\r
- ( vfrStatementStatList )*\r
- E:EndIf << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrStatementGrayOutIfStat :\r
- <<\r
- CIfrGrayOutIf GOIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:GrayOutIf << GOIObj.SetLineNo(L->getLine()); >>\r
- { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0, ExpOpCount]\r
- ";"\r
- ( vfrStatementStatList )*\r
- E:EndIf << CRT_END_OP (E); >>\r
- ";"\r
- ;\r
-\r
-vfrImageTag :\r
- << CIfrImage IObj; >>\r
- L:Image "=" "IMAGE_TOKEN" "\(" S1:Number "\)" << IObj.SetImageId (_STOSID(S1->getText())); IObj.SetLineNo(L->getLine()); >>\r
- ;\r
-\r
-vfrLockedTag :\r
- << CIfrLocked LObj; >>\r
- L:Locked << LObj.SetLineNo(L->getLine()); >>\r
- ;\r
-\r
-vfrStatementStatTag :\r
- vfrImageTag |\r
- vfrLockedTag\r
- ;\r
-\r
-vfrStatementStatTagList :\r
- vfrStatementStatTag ( "," vfrStatementStatTag )*\r
- ;\r
-\r
-vfrStatementImage :\r
- vfrImageTag\r
- ";"\r
- ;\r
-\r
-vfrStatementLocked :\r
- vfrLockedTag\r
- ";"\r
- ;\r
-\r
-vfrStatementInconsistentIf :\r
- <<\r
- CIfrInconsistentIf IIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:InconsistentIf << IIObj.SetLineNo(L->getLine()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" "," << IIObj.SetError (_STOSID(S->getText())); >>\r
- { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0, ExpOpCount]\r
- E:EndIf << CRT_END_OP (E); >>\r
- ;\r
-\r
-vfrStatementNoSubmitIf :\r
- <<\r
- CIfrNoSubmitIf NSIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:NoSubmitIf << NSIObj.SetLineNo(L->getLine()); >>\r
- Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" "," << NSIObj.SetError (_STOSID(S->getText())); >>\r
- { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0, ExpOpCount]\r
- E:EndIf << CRT_END_OP (E); >>\r
- ;\r
-\r
-vfrStatementDisableIfQuest :\r
- <<\r
- CIfrDisableIf DIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:DisableIf << DIObj.SetLineNo(L->getLine()); >>\r
- vfrStatementExpression[0, ExpOpCount] ";" << mConstantOnlyInExpression = FALSE; >>\r
- vfrStatementQuestionOptionList\r
- E:EndIf << CRT_END_OP (E); >>\r
- ;\r
-\r
-vfrStatementRefresh :\r
- << CIfrRefresh RObj; >>\r
- L:Refresh << RObj.SetLineNo(L->getLine()); >>\r
- Interval "=" I:Number << RObj.SetRefreshInterval (_STOU8(I->getText())); >>\r
- ;\r
-\r
-vfrStatementVarstoreDevice :\r
- << CIfrVarStoreDevice VDObj; >>\r
- L:VarstoreDevice << VDObj.SetLineNo(L->getLine()); >>\r
- "=" "STRING_TOKEN" "\(" S:Number "\)" "," << VDObj.SetDevicePath (_STOSID(S->getText())); >>\r
- ;\r
-\r
-vfrStatementSuppressIfQuest :\r
- <<\r
- CIfrSuppressIf SIObj;\r
- UINT32 ExpOpCount = 0;\r
- >>\r
- L:SuppressIf << SIObj.SetLineNo(L->getLine()); >>\r
- { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0, ExpOpCount] ";"\r
- vfrStatementQuestionOptionList\r
- E:EndIf << CRT_END_OP (E); >>\r
- ;\r
-\r
-vfrStatementOptions :\r
- vfrStatementOneOfOption\r
- ;\r
-\r
-vfrStatementOneOfOption :\r
- <<\r
- EFI_IFR_TYPE_VALUE Val = {0};\r
- CIfrOneOfOption OOOObj;\r
- INT8 *VarStoreName = NULL;\r
-\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] "," \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
- if (OOOObj.GetFlags () & 0x10) {\r
- _PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());\r
- _PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (\r
- EFI_HII_DEFAULT_CLASS_STANDARD,\r
- _GET_CURRQEST_VARTINFO(),\r
- VarStoreName,\r
- _GET_CURRQEST_DATATYPE (),\r
- Val\r
- ), L->getLine());\r
- }\r
- >>\r
- (\r
- "," vfrImageTag << OOOObj.SetScope (1); CIfrEnd EOOOObj; >>\r
- )*\r
- ";"\r
- ;\r
-\r
-vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :\r
- <<\r
- UINT8 LFlags = 0;\r
- UINT8 HFlags = 0;\r
- >>\r
- oneofoptionFlagsField[HFlags, LFlags] ( "\|" oneofoptionFlagsField[HFlags, LFlags] )*\r
- << _PCATCH(gCurrentQuestion->SetFlags(HFlags), LineNum); >>\r
- << _PCATCH(OOOObj.SetFlags(LFlags), LineNum); >>\r
- ;\r
-\r
-oneofoptionFlagsField [UINT8 & HFlags, UINT8 & LFlags] :\r
- N:Number << $LFlags |= _STOU8(N->getText()); >>\r
- | "OPTION_DEFAULT" << $LFlags |= 0x10; >>\r
- | "OPTION_DEFAULT_MFG" << $LFlags |= 0x20; >>\r
- | InteractiveFlag << $HFlags |= 0x04; >>\r
- | NVAccessFlag << $HFlags |= 0x08; >>\r
- | ResetRequiredFlag << $HFlags |= 0x10; >>\r
- | LateCheckFlag << $HFlags |= 0x20; >>\r
- | ManufacturingFlag << $LFlags |= 0x20; >>\r
- | DefaultFlag << $LFlags |= 0x10; >>\r
- ;\r
-\r
-vfrStatementLabel :\r
- << CIfrLabel LObj; >>\r
- L:Label << LObj.SetLineNo(L->getLine()); >>\r
- N:Number << LObj.SetNumber (_STOU16(N->getText())); >>\r
- ";"\r
- ;\r
-\r
-vfrStatementBanner :\r
- << CIfrBanner BObj; >>\r
- B:Banner { "," } << BObj.SetLineNo(B->getLine()); >>\r
- Title "=" "STRING_TOKEN" "\(" S:Number "\)" "," << BObj.SetTitle (_STOSID(S->getText())); >>\r
- (\r
- (\r
- Line L:Number "," << BObj.SetLine (_STOU16(L->getText())); >>\r
- Align\r
- (\r
- Left << BObj.SetAlign (0); >>\r
- | Center << BObj.SetAlign (1); >>\r
- | Right << BObj.SetAlign (2); >>\r
- ) ";"\r
- )\r
- |\r
- (\r
- Timeout "=" T:Number ";" << {CIfrTimeout TObj(_STOU16(T->getText()));} >>\r
- )\r
- )\r
- ;\r
-\r
-//******************************************************************************\r
-//\r
-// keep some syntax for compatibility but not generate any IFR object\r
-//\r
-vfrStatementInvalidHidden :\r
- Hidden\r
- Value "=" Number ","\r
- Key "=" Number ";"\r
- ;\r
-\r
-vfrStatementInvalidInconsistentIf :\r
- << UINT32 ExpOpCount = 0; >>\r
- InconsistentIf\r
- Prompt "=" "STRING_TOKEN" "\(" S:Number "\)" ","\r
- { FLAGS "=" flagsField ( "\|" flagsField )* "," }\r
- vfrStatementExpression[0, ExpOpCount]\r
- EndIf\r
- ";"\r
- ;\r
-\r
-vfrStatementInvalidInventory :\r
- Inventory\r
- Help "=" "STRING_TOKEN" "\(" Number "\)" ","\r
- Text "=" "STRING_TOKEN" "\(" Number "\)" ","\r
- {\r
- Text "=" "STRING_TOKEN" "\(" Number "\)"\r
- }\r
- ";"\r
- ;\r
-\r
-vfrStatementInvalidSaveRestoreDefaults :\r
- (Save | Restore)\r
- Defaults ","\r
- FormId "=" Number ","\r
- Prompt "=" "STRING_TOKEN" "\(" Number "\)" ","\r
- Help "=" "STRING_TOKEN" "\(" Number "\)"\r
- { "," FLAGS "=" flagsField ( "\|" flagsField )* }\r
- { "," Key "=" Number }\r
- ";"\r
- ;\r
-\r
-//******************************************************************************\r
-//\r
-// The syntax of expression\r
-//\r
-#token Dup("dup") "dup"\r
-#token VarEqVal("vareqval") "vareqval"\r
-#token Var("var") "var"\r
-#token IdEqVal("ideqval") "ideqval"\r
-#token IdEqId("ideqid") "ideqid"\r
-#token IdEqValList("ideqvallist") "ideqvallist"\r
-#token QuestionRef("questionref") "questionref"\r
-#token RuleRef("ruleref") "ruleref"\r
-#token StringRef("stringref") "stringref"\r
-#token PushThis("pushthis") "pushthis"\r
-#token True("TRUE") "TRUE"\r
-#token False("FALSE") "FALSE"\r
-#token One("ONE") "ONE"\r
-#token Ones("ONES") "ONES"\r
-#token Zero("ZERO") "ZERO"\r
-#token Undefined("UNDEFINED") "UNDEFINED"\r
-#token Version("VERSOPM") "VERSION"\r
-#token Length("length") "length"\r
-#token AND("AND") "AND"\r
-#token OR("OR") "OR"\r
-#token NOT("NOT") "NOT"\r
-#token BitWiseNot("~") "\~"\r
-#token BoolVal("boolval") "boolval"\r
-#token StringVal("stringval") "stringval"\r
-#token UnIntVal("unintval") "unintval"\r
-#token ToUpper("toupper") "toupper"\r
-#token ToLower("tolower") "tolower"\r
-#token Match("match") "match"\r
-#token Catenate("catenate") "catenate"\r
-#token QuestionRefVal("questionrefval") "questionrefval"\r
-#token StringRefVal("stringrefval") "stringrefval"\r
-\r
-vfrStatementExpression [UINT32 RootLevel, UINT32 & ExpOpCount] :\r
- << if ($RootLevel == 0) {_CLEAR_SAVED_OPHDR ();} >>\r
- andTerm[$RootLevel, $ExpOpCount]\r
- (\r
- L:OR andTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrOr OObj(L->getLine()); >>\r
- )*\r
- << if (($RootLevel == 0) && ($ExpOpCount > 1)) {_SET_SAVED_OPHDR_SCOPE(); CIfrEnd EObj; EObj.SetLineNo (0);} >>\r
- ;\r
-\r
-andTerm[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- bitwiseorTerm[$RootLevel, $ExpOpCount]\r
- (\r
- L:AND bitwiseorTerm [$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrAnd AObj(L->getLine()); >>\r
- )*\r
- ;\r
-\r
-bitwiseorTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- bitwiseandTerm[$RootLevel, $ExpOpCount]\r
- (\r
- L:"\|" bitwiseandTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrBitWiseOr BWOObj(L->getLine()); >>\r
- )*\r
- ;\r
-\r
-bitwiseandTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- equalTerm[$RootLevel, $ExpOpCount]\r
- (\r
- L:"&" equalTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrBitWiseAnd BWAObj(L->getLine()); >>\r
- )*\r
- ;\r
-\r
-equalTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- compareTerm[$RootLevel, $ExpOpCount]\r
- (\r
- (\r
- L1:"==" compareTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrEqual EObj(L1->getLine()); >>\r
- )\r
- |\r
- (\r
- L2:"!=" compareTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrNotEqual NEObj(L2->getLine()); >>\r
- )\r
- )*\r
- ;\r
-\r
-compareTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- shiftTerm[$RootLevel, $ExpOpCount]\r
- (\r
- (\r
- L1:"<" shiftTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrLessThan LTObj(L1->getLine()); >>\r
- )\r
- |\r
- (\r
- L2:"<=" shiftTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrLessEqual LEObj(L2->getLine()); >>\r
- )\r
- |\r
- (\r
- L3:">" shiftTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrGreaterThan GTObj(L3->getLine()); >>\r
- )\r
- |\r
- (\r
- L4:">=" shiftTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrGreaterEqual GEObj(L4->getLine()); >>\r
- )\r
- )*\r
- ;\r
-\r
-shiftTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- addMinusTerm[$RootLevel, $ExpOpCount]\r
- (\r
- (\r
- L1:"\<<" addMinusTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrShiftLeft SLObj(L1->getLine()); >>\r
- )\r
- |\r
- (\r
- L2:"\>>" addMinusTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrShiftRight SRObj(L2->getLine()); >>\r
- )\r
- )*\r
- ;\r
-\r
-addMinusTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- multdivmodTerm[$RootLevel, $ExpOpCount]\r
- (\r
- (\r
- L1:"\+" multdivmodTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrAdd AObj(L1->getLine()); >>\r
- )\r
- |\r
- (\r
- L2:"\-" multdivmodTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrSubtract SObj(L2->getLine()); >>\r
- )\r
- )*\r
- ;\r
-\r
-multdivmodTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- castTerm[$RootLevel, $ExpOpCount]\r
- (\r
- (\r
- L1:"\*" castTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrMultiply MObj(L1->getLine()); >>\r
- )\r
- |\r
- (\r
- L2:"/" castTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrDivide DObj(L2->getLine()); >>\r
- )\r
- |\r
- (\r
- L3:"%" castTerm[$RootLevel, $ExpOpCount] << $ExpOpCount++; CIfrModulo MObj(L3->getLine()); >>\r
- )\r
- )*\r
- ;\r
-\r
-castTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- << UINT8 CastType = 0xFF; >>\r
- (\r
- L:"\("\r
- (\r
- Boolean << CastType = 0; >>\r
- | Uint64 << CastType = 1; >>\r
- | Uint32 << CastType = 1; >>\r
- | Uint16 << CastType = 1; >>\r
- | Uint8 << CastType = 1; >>\r
- )\r
- "\)"\r
- )*\r
- atomTerm[$RootLevel, $ExpOpCount]\r
- <<\r
- switch (CastType) {\r
- case 0: { CIfrToBoolean TBObj(L->getLine()); $ExpOpCount++; } break;\r
- case 1: { CIfrToUint TUObj(L->getLine()); $ExpOpCount++; } break;\r
- }\r
- >>\r
- ;\r
-\r
-atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- vfrExpressionCatenate[$RootLevel, $ExpOpCount]\r
- | vfrExpressionMatch[$RootLevel, $ExpOpCount]\r
- | vfrExpressionParen[$RootLevel, $ExpOpCount]\r
- | vfrExpressionBuildInFunction[$RootLevel, $ExpOpCount]\r
- | vfrExpressionConstant[$RootLevel, $ExpOpCount]\r
- | vfrExpressionUnaryOp[$RootLevel, $ExpOpCount]\r
- | vfrExpressionTernaryOp[$RootLevel, $ExpOpCount]\r
- | (\r
- L:NOT\r
- atomTerm[$RootLevel, $ExpOpCount] << { CIfrNot NObj(L->getLine()); $ExpOpCount++; } >>\r
- )\r
- ;\r
-\r
-vfrExpressionCatenate [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- L:Catenate\r
- "\("\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrCatenate CObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-vfrExpressionMatch [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- L:Match\r
- "\("\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrMatch MObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-vfrExpressionParen [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
- "\("\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)"\r
- ;\r
-\r
-vfrExpressionBuildInFunction [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- dupExp[$RootLevel, $ExpOpCount]\r
- | ideqvalExp[$RootLevel, $ExpOpCount]\r
- | ideqidExp[$RootLevel, $ExpOpCount]\r
- | ideqvallistExp[$RootLevel, $ExpOpCount]\r
- | questionref13Exp[$RootLevel, $ExpOpCount]\r
- | rulerefExp[$RootLevel, $ExpOpCount]\r
- | stringref1Exp[$RootLevel, $ExpOpCount]\r
- | pushthisExp[$RootLevel, $ExpOpCount]\r
- ;\r
-\r
-dupExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:Dup << { CIfrDup DObj(L->getLine()); _SAVE_OPHDR_COND(DObj, ($ExpOpCount == 0)); $ExpOpCount++; } >>\r
- ;\r
-\r
-ideqvalExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- <<\r
- EFI_QUESTION_ID QId;\r
- UINT32 Mask;\r
- UINT16 ConstVal;\r
- INT8 *VarIdStr;\r
- UINT32 LineNo;\r
- >>\r
- L:IdEqVal\r
- vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
- (\r
- (\r
- "=="\r
- V1:Number << ConstVal = _STOU16(V1->getText()); >>\r
- <<\r
- if (Mask == 0) {\r
- CIfrEqIdVal EIVObj (L->getLine());\r
- _SAVE_OPHDR_COND (EIVObj, ($ExpOpCount == 0));\r
- EIVObj.SetQuestionId (QId, VarIdStr, LineNo);\r
- EIVObj.SetValue (ConstVal);\r
- $ExpOpCount++;\r
- } else {\r
- IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, EQUAL);\r
- }\r
- >>\r
- )\r
- |\r
- (\r
- "<="\r
- V2:Number << ConstVal = _STOU16(V2->getText()); >>\r
- << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_EQUAL); >>\r
- )\r
- |\r
- (\r
- "<"\r
- V3:Number << ConstVal = _STOU16(V3->getText()); >>\r
- << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, LESS_THAN); >>\r
- )\r
- |\r
- (\r
- ">="\r
- V4:Number << ConstVal = _STOU16(V4->getText()); >>\r
- << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_EQUAL); >>\r
- )\r
- |\r
- (\r
- ">"\r
- V5:Number << ConstVal = _STOU16(V5->getText()); >>\r
- << IdEqValDoSpecial ($ExpOpCount, L->getLine(), QId, VarIdStr, Mask, ConstVal, GREATER_THAN); >>\r
- )\r
- )\r
- ;\r
-\r
-ideqidExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- <<\r
- EFI_QUESTION_ID QId[2];\r
- UINT32 Mask[2];\r
- INT8 *VarIdStr[2];\r
- UINT32 LineNo[2];\r
- >>\r
- L:IdEqId\r
- vfrQuestionDataFieldName[QId[0], Mask[0], VarIdStr[0], LineNo[0]]\r
- (\r
- (\r
- "=="\r
- vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
- <<\r
- if (Mask[0] & Mask[1]) {\r
- IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], EQUAL);\r
- } else {\r
- CIfrEqIdId EIIObj(L->getLine());\r
- _SAVE_OPHDR_COND (EIIObj, ($ExpOpCount == 0));\r
- EIIObj.SetQuestionId1 (QId[0], VarIdStr[0], LineNo[0]);\r
- EIIObj.SetQuestionId2 (QId[1], VarIdStr[1], LineNo[1]);\r
- $ExpOpCount++;\r
- }\r
- >>\r
- )\r
- |\r
- (\r
- "<="\r
- vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
- << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], LESS_EQUAL); >>\r
- )\r
- |\r
- (\r
- "<"\r
- vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
- << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], LESS_THAN); >>\r
- )\r
- |\r
- (\r
- ">="\r
- vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
- << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], GREATER_EQUAL); >>\r
- )\r
- |\r
- (\r
- ">"\r
- vfrQuestionDataFieldName[QId[1], Mask[1], VarIdStr[1], LineNo[1]]\r
- << IdEqIdDoSpecial ($ExpOpCount, L->getLine(), QId[0], VarIdStr[0], Mask[0], QId[1], VarIdStr[1], Mask[1], GREATER_THAN); >>\r
- )\r
- )\r
- ;\r
-\r
-ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- <<\r
- UINT16 ListLen = 0;\r
- EFI_QUESTION_ID QId;\r
- UINT32 Mask;\r
- UINT16 ValueList[EFI_IFR_MAX_LENGTH] = {0,};\r
- INT8 *VarIdStr;\r
- UINT32 LineNo;\r
- >>\r
- L:IdEqValList\r
- vfrQuestionDataFieldName[QId, Mask, VarIdStr, LineNo]\r
- "=="\r
- (\r
- V:Number << ValueList[ListLen] = _STOU16(V->getText()); ListLen++; >>\r
- )+\r
- <<\r
- if (Mask != 0) {\r
- IdEqListDoSpecial ($ExpOpCount, LineNo, QId, VarIdStr, Mask, ListLen, ValueList);\r
- } else {\r
- UINT16 Index;\r
- CIfrEqIdList EILObj(L->getLine());\r
- _SAVE_OPHDR_COND (EILObj, ($ExpOpCount == 0));\r
- EILObj.SetQuestionId (QId, VarIdStr, LineNo);\r
- EILObj.SetListLength (ListLen);\r
- for (Index = 0; Index < ListLen; Index++) {\r
- EILObj.SetValueList (Index, ValueList[Index]);\r
- }\r
- $ExpOpCount++;\r
- }\r
- >>\r
- ;\r
-\r
-vareqvarlExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:VarEqVal Var "\(" V1:Number "\)" "==" V2:Number <<\r
- {\r
- CIfrUint64 U64Obj1(L->getLine()), U64Obj2(L->getLine());\r
- _SAVE_OPHDR_COND (U64Obj1, ($ExpOpCount == 0));\r
- U64Obj1.SetValue (_STOU64(V1->getText()));\r
- U64Obj2.SetValue (_STOU64(V2->getText()));\r
- }\r
- >>\r
- << {CIfrEqual EObj(L->getLine()); } >>\r
- << $ExpOpCount += 3; >>\r
- ;\r
-\r
-questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- <<\r
- UINT8 Type = 0x1;\r
- EFI_STRING_ID DevPath;\r
- EFI_GUID Guid;\r
- EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
- UINT32 BitMask;\r
- INT8 *QName = NULL;\r
- UINT32 LineNo = 0;\r
- >>\r
- L:QuestionRef\r
- (\r
- (\r
- << Type = 0x3; >>\r
- {\r
- Path "=" "STRING_TOKEN" "\(" S:Number "\)" << Type = 0x4; DevPath = _STOSID(S->getText()); >>\r
- }\r
- {\r
- Uuid "=" guidDefinition[Guid] << Type = 0x5; >>\r
- }\r
- )\r
- |\r
- (\r
- "\("\r
- (\r
- QN:StringIdentifier <<\r
- QName = QN->getText();\r
- LineNo = QN->getLine();\r
- mCVfrQuestionDB.GetQuestionId (QN->getText(), NULL, QId, BitMask);\r
- >>\r
- | ID:Number << QId = _STOQID(ID->getText()); >>\r
- )\r
- "\)"\r
- )\r
- )\r
- <<\r
- switch (Type) {\r
- case 0x1: {CIfrQuestionRef1 QR1Obj(L->getLine()); _SAVE_OPHDR_COND (QR1Obj, ($ExpOpCount == 0)); QR1Obj.SetQuestionId (QId, QName, LineNo); break;}\r
- case 0x3: {CIfrQuestionRef3 QR3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3Obj, ($ExpOpCount == 0)); break;}\r
- case 0x4: {CIfrQuestionRef3_2 QR3_2Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_2Obj, ($ExpOpCount == 0)); QR3_2Obj.SetDevicePath (DevPath); break;}\r
- case 0x5: {CIfrQuestionRef3_3 QR3_3Obj(L->getLine()); _SAVE_OPHDR_COND (QR3_3Obj, ($ExpOpCount == 0)); QR3_3Obj.SetDevicePath (DevPath); QR3_3Obj.SetGuid (&Guid); break;}\r
- }\r
- $ExpOpCount++;\r
- >>\r
- ;\r
-\r
-rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:RuleRef\r
- "\(" RN:StringIdentifier "\)" << { CIfrRuleRef RRObj(L->getLine()); _SAVE_OPHDR_COND (RRObj, ($ExpOpCount == 0)); RRObj.SetRuleId (mCVfrRulesDB.GetRuleId (RN->getText())); } $ExpOpCount++; >>\r
- ;\r
-\r
-//******************************************************\r
-// PARSE:\r
-// stringref (STR_FORM_SET_TITLE)\r
-//\r
-stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:StringRef\r
- "\(" S:Number "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0)); SR1Obj.SetStringId (_STOSID(S->getText())); $ExpOpCount++; } >>\r
- ;\r
-\r
-pushthisExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:PushThis << { CIfrThis TObj(L->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0)); $ExpOpCount++; } >>\r
- ;\r
-\r
-vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L1:True << CIfrTrue TObj(L1->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | L2:False << CIfrFalse FObj(L2->getLine()); _SAVE_OPHDR_COND (FObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | L3:One << CIfrOne OObj(L3->getLine()); _SAVE_OPHDR_COND (OObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | L4:Ones << CIfrOnes OObj(L4->getLine()); _SAVE_OPHDR_COND (OObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | L5:Zero << CIfrZero ZObj(L5->getLine()); _SAVE_OPHDR_COND (ZObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | L6:Undefined << CIfrUndefined UObj(L6->getLine()); _SAVE_OPHDR_COND (UObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | L7:Version << CIfrVersion VObj(L7->getLine()); _SAVE_OPHDR_COND (VObj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- | V:Number << CIfrUint64 U64Obj(V->getLine()); U64Obj.SetValue (_STOU64(V->getText())); _SAVE_OPHDR_COND (U64Obj, ($ExpOpCount == 0)); $ExpOpCount++; >>\r
- ;\r
-\r
-vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- lengthExp[$RootLevel, $ExpOpCount]\r
- | bitwisenotExp[$RootLevel, $ExpOpCount]\r
- | question2refExp[$RootLevel, $ExpOpCount]\r
- | stringref2Exp[$RootLevel, $ExpOpCount]\r
- | toboolExp[$RootLevel, $ExpOpCount]\r
- | unintExp[$RootLevel, $ExpOpCount]\r
- | toupperExp[$RootLevel, $ExpOpCount]\r
- | tolwerExp[$RootLevel, $ExpOpCount]\r
- ;\r
-\r
-lengthExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:Length\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrLength LObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-bitwisenotExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:BitWiseNot\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrBitWiseNot BWNObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-question2refExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:QuestionRefVal\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrQuestionRef2 QR2Obj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-stringref2Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:StringRefVal\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrStringRef2 SR2Obj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-toboolExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:BoolVal\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrToBoolean TBObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-tostringExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- << UINT8 Fmt = 0; >>\r
- L:StringVal\r
- {\r
- Format "=" F:Number "," << Fmt = _STOU8(F->getText()); >>\r
- }\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrToString TSObj(L->getLine()); TSObj.SetFormat (Fmt); $ExpOpCount++; } >>\r
- ;\r
-\r
-unintExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:UnIntVal\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrToUint TUObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-toupperExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:ToUpper\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrToUpper TUObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-tolwerExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:ToLower\r
- "\(" vfrStatementExpression[$RootLevel + 1, $ExpOpCount] "\)"\r
- << { CIfrToLower TLObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-vfrExpressionTernaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- conditionalExp[$RootLevel, $ExpOpCount]\r
- | findExp[$RootLevel, $ExpOpCount]\r
- | midExp[$RootLevel, $ExpOpCount]\r
- | tokenExp[$RootLevel, $ExpOpCount]\r
- | spanExp[$RootLevel, $ExpOpCount]\r
- ;\r
-\r
-#token Cond("cond") "cond"\r
-#token Find("find") "find"\r
-#token Mid("mid") "mid"\r
-#token Tok("token") "token"\r
-#token Span("span") "span"\r
-\r
-conditionalExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:Cond "\("\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "?"\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ":"\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrConditional CObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-findExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- << UINT8 Format; >>\r
- L:Find "\("\r
- findFormat[Format] ( "\|" findFormat[Format] )*\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrFind FObj(L->getLine()); FObj.SetFormat (Format); $ExpOpCount++; } >>\r
- ;\r
-\r
-findFormat [UINT8 & Format] :\r
- "SENSITIVE" << $Format = 0x00; >>\r
- | "INSENSITIVE" << $Format = 0x01; >>\r
- ;\r
-\r
-midExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:Mid "\("\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrMid MObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-tokenExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- L:Tok "\("\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrToken TObj(L->getLine()); $ExpOpCount++; } >>\r
- ;\r
-\r
-spanExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
- << UINT8 Flags = 0; >>\r
- S:Span "\("\r
- FLAGS "=" spanFlags[Flags] ( "\|" spanFlags[Flags] )*\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- ","\r
- vfrStatementExpression[$RootLevel + 1, $ExpOpCount]\r
- "\)" << { CIfrSpan SObj(S->getLine()); SObj.SetFlags(Flags); $ExpOpCount++; } >>\r
- ;\r
-\r
-spanFlags [UINT8 & Flags] :\r
- N:Number << $Flags |= _STOU8(N->getText()); >>\r
- | "LAST_NON_MATCH" << $Flags |= 0x00; >>\r
- | "FIRST_NON_MATCH" << $Flags |= 0x01; >>\r
- ;\r
-\r
-#token StringIdentifier("string identifier") "[A-Za-z_][A-Za-z_0-9]*"\r
-#token Number("numeric value") "(0x[0-9A-Fa-f]+) | [0-9]+"\r
-\r
-//******************************************************************************\r
-//\r
-// Parser class definition.\r
-//\r
-class EfiVfrParser {\r
-<<\r
-private:\r
- UINT8 mParserStatus;\r
- BOOLEAN mConstantOnlyInExpression;\r
-\r
- CVfrDefaultStore mCVfrDefaultStore;\r
- CVfrVarDataTypeDB mCVfrVarDataTypeDB;\r
- CVfrDataStorage mCVfrDataStorage;\r
- CVfrQuestionDB mCVfrQuestionDB;\r
- CVfrRulesDB mCVfrRulesDB;\r
-\r
- CIfrOpHeader *mCIfrOpHdr;\r
- VOID _SAVE_OPHDR_COND (IN CIfrOpHeader &, IN BOOLEAN);\r
- VOID _CLEAR_SAVED_OPHDR (VOID);\r
- VOID _SET_SAVED_OPHDR_SCOPE (VOID);\r
-\r
-\r
- EFI_VARSTORE_INFO mCurrQestVarInfo;\r
-\r
- VOID _CRT_OP (IN BOOLEAN);\r
-\r
- VOID _SAVE_CURRQEST_VARINFO (IN EFI_VARSTORE_INFO &);\r
- EFI_VARSTORE_INFO & _GET_CURRQEST_VARTINFO (VOID);\r
-\r
- UINT8 _GET_CURRQEST_DATATYPE ();\r
- UINT32 _GET_CURRQEST_VARSIZE ();\r
- UINT32 _GET_CURRQEST_ARRAY_SIZE ();\r
-\r
-public:\r
- VOID _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN INT8 *);\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 INT8 *);\r
-\r
- VOID syn (ANTLRAbstractToken *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);\r
-\r
- INT8 * TrimHex (IN INT8 *, OUT BOOLEAN *);\r
- UINT8 _STOU8 (IN INT8 *);\r
- UINT16 _STOU16 (IN INT8 *);\r
- UINT32 _STOU32 (IN INT8 *);\r
- UINT64 _STOU64 (IN INT8 *);\r
- EFI_HII_DATE _STOD (IN INT8 *, IN INT8 *, IN INT8 *);\r
- EFI_HII_TIME _STOT (IN INT8 *, IN INT8 *, IN INT8 *);\r
-\r
- EFI_STRING_ID _STOSID (IN INT8 *);\r
- EFI_FORM_ID _STOFID (IN INT8 *);\r
- EFI_QUESTION_ID _STOQID (IN INT8 *);\r
-\r
- VOID _STRCAT (IN OUT INT8 **, IN INT8 *);\r
-\r
- VOID _CRGUID (EFI_GUID *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *, INT8 *);\r
- VOID _DeclareDefaultLinearVarStore (IN UINT32);\r
- VOID _DeclareStandardDefaultStorage (IN UINT32);\r
-\r
-\r
- VOID AssignQuestionKey (IN CIfrQuestionHeader &, IN ANTLRTokenPtr);\r
-\r
- VOID ConvertIdExpr (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32);\r
- VOID IdEqValDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN UINT16, IN EFI_COMPARE_TYPE);\r
- VOID IdEqIdDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN EFI_COMPARE_TYPE);\r
- VOID IdEqListDoSpecial (IN UINT32 &, IN UINT32, IN EFI_QUESTION_ID, IN INT8 *, IN UINT32, IN UINT16, IN UINT16 *);\r
->>\r
-}\r
-\r
-<<\r
-VOID\r
-EfiVfrParser::_SAVE_OPHDR_COND (\r
- IN CIfrOpHeader &OpHdr,\r
- IN BOOLEAN Cond\r
- )\r
-{\r
- if (Cond == TRUE) {\r
-#ifdef VFREXP_DEBUG\r
- printf ("######_SAVE_OPHDR_COND\n");\r
-#endif\r
- if (mCIfrOpHdr != NULL) {\r
-#ifdef VFREXP_DEBUG\r
- printf ("######_SAVE_OPHDR_COND Error\n");\r
-#endif\r
- return ;\r
- }\r
- mCIfrOpHdr = new CIfrOpHeader(OpHdr);\r
- }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_CLEAR_SAVED_OPHDR (\r
- VOID\r
- )\r
-{\r
-#ifdef VFREXP_DEBUG\r
- printf ("######_CLEAR_SAVED_OPHDR\n");\r
-#endif\r
- mCIfrOpHdr = NULL;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_SET_SAVED_OPHDR_SCOPE (\r
- VOID\r
- )\r
-{\r
-#ifdef VFREXP_DEBUG\r
- printf ("#######_SET_SAVED_OPHDR_SCOPE\n");\r
-#endif\r
- mCIfrOpHdr->SetScope (1);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_CRT_OP (\r
- IN BOOLEAN Crt\r
- )\r
-{\r
- gCreateOp = Crt;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_SAVE_CURRQEST_VARINFO (\r
- IN EFI_VARSTORE_INFO &Info\r
- )\r
-{\r
- mCurrQestVarInfo = Info;\r
-}\r
-\r
-EFI_VARSTORE_INFO &\r
-EfiVfrParser::_GET_CURRQEST_VARTINFO (\r
- VOID\r
- )\r
-{\r
- return mCurrQestVarInfo;\r
-}\r
-\r
-UINT8\r
-EfiVfrParser::_GET_CURRQEST_DATATYPE (\r
- VOID\r
- )\r
-{\r
- return mCurrQestVarInfo.mVarType;\r
-}\r
-\r
-UINT32\r
-EfiVfrParser::_GET_CURRQEST_VARSIZE (\r
- VOID\r
- )\r
-{\r
- return mCurrQestVarInfo.mVarTotalSize;\r
-}\r
-\r
-UINT32\r
-EfiVfrParser::_GET_CURRQEST_ARRAY_SIZE (\r
- VOID\r
- )\r
-{\r
- UINT8 Size = 1;\r
-\r
- switch (mCurrQestVarInfo.mVarType) {\r
- case EFI_IFR_TYPE_NUM_SIZE_8:\r
- Size = 1;\r
- break;\r
-\r
- case EFI_IFR_TYPE_NUM_SIZE_16:\r
- Size = 2;\r
- break;\r
-\r
- case EFI_IFR_TYPE_NUM_SIZE_32:\r
- Size = 4;\r
- break;\r
-\r
- case EFI_IFR_TYPE_NUM_SIZE_64:\r
- Size = 8;\r
- break;\r
-\r
- default:\r
- break;\r
- }\r
-\r
- return (mCurrQestVarInfo.mVarTotalSize / Size);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
- IN INTN ReturnCode,\r
- IN INTN ExpectCode,\r
- IN ANTLRTokenPtr Tok,\r
- IN INT8 *ErrorMsg\r
- )\r
-{\r
- if (ReturnCode != ExpectCode) {\r
- mParserStatus++;\r
- gCVfrErrorHandle.PrintMsg (Tok->getLine(), Tok->getText(), "Error", ErrorMsg);\r
- }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
- IN EFI_VFR_RETURN_CODE ReturnCode\r
- )\r
-{\r
- mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
- IN EFI_VFR_RETURN_CODE ReturnCode,\r
- IN ANTLRTokenPtr Tok\r
- )\r
-{\r
- mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText());\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_PCATCH (\r
- IN EFI_VFR_RETURN_CODE ReturnCode,\r
- IN UINT32 LineNum\r
- )\r
-{\r
- 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 INT8 *ErrorMsg\r
- )\r
-{\r
- mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::syn (\r
- ANTLRAbstractToken *Tok,\r
- ANTLRChar *Egroup,\r
- SetWordType *Eset,\r
- ANTLRTokenType ETok,\r
- INT32 Huh\r
- )\r
-{\r
- gCVfrErrorHandle.HandleError (VFR_RETURN_MISMATCHED, Tok->getLine(), Tok->getText());\r
-\r
- mParserStatus += 1;\r
-}\r
-\r
-INT8 *\r
-EfiVfrParser::TrimHex (\r
- IN INT8 *Str,\r
- OUT BOOLEAN *IsHex\r
- )\r
-{\r
- *IsHex = FALSE;\r
-\r
- while (*Str && *Str == ' ') {\r
- Str++;\r
- }\r
- while (*Str && *Str == '0') {\r
- Str++;\r
- }\r
- if (*Str && (*Str == 'x' || *Str == 'X')) {\r
- Str++;\r
- *IsHex = TRUE;\r
- }\r
-\r
- return Str;\r
-}\r
-\r
-UINT8\r
-EfiVfrParser::_STOU8 (\r
- IN INT8 *Str\r
- )\r
-{\r
- BOOLEAN IsHex;\r
- UINT8 Value;\r
- INT8 c;\r
-\r
- Str = TrimHex (Str, &IsHex);\r
- for (Value = 0; (c = *Str) != '\0'; Str++) {\r
- //\r
- // BUG: does not handle overflow here\r
- //\r
- (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
- if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
- Value += (c - 'a' + 10);\r
- }\r
- if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
- Value += (c - 'A' + 10);\r
- }\r
- if (c >= '0' && c <= '9') {\r
- Value += (c - '0');\r
- }\r
- }\r
-\r
- return Value;\r
-}\r
-\r
-UINT16\r
-EfiVfrParser::_STOU16 (\r
- IN INT8 *Str\r
- )\r
-{\r
- BOOLEAN IsHex;\r
- UINT16 Value;\r
- INT8 c;\r
-\r
- Str = TrimHex (Str, &IsHex);\r
- for (Value = 0; (c = *Str) != '\0'; Str++) {\r
- //\r
- // BUG: does not handle overflow here\r
- //\r
- (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
- if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
- Value += (c - 'a' + 10);\r
- }\r
- if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
- Value += (c - 'A' + 10);\r
- }\r
- if (c >= '0' && c <= '9') {\r
- Value += (c - '0');\r
- }\r
- }\r
-\r
- return Value;\r
-}\r
-\r
-UINT32\r
-EfiVfrParser::_STOU32 (\r
- IN INT8 *Str\r
- )\r
-{\r
- BOOLEAN IsHex;\r
- UINT32 Value;\r
- INT8 c;\r
-\r
- Str = TrimHex (Str, &IsHex);\r
- for (Value = 0; (c = *Str) != '\0'; Str++) {\r
- //\r
- // BUG: does not handle overflow here\r
- //\r
- (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
- if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
- Value += (c - 'a' + 10);\r
- }\r
- if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
- Value += (c - 'A' + 10);\r
- }\r
- if (c >= '0' && c <= '9') {\r
- Value += (c - '0');\r
- }\r
- }\r
-\r
- return Value;\r
-}\r
-\r
-UINT64\r
-EfiVfrParser::_STOU64 (\r
- IN INT8 *Str\r
- )\r
-{\r
- BOOLEAN IsHex;\r
- UINT64 Value;\r
- INT8 c;\r
-\r
- Str = TrimHex (Str, &IsHex);\r
- for (Value = 0; (c = *Str) != '\0'; Str++) {\r
- //\r
- // BUG: does not handle overflow here\r
- //\r
- (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);\r
-\r
- if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {\r
- Value += (c - 'a' + 10);\r
- }\r
- if ((IsHex == TRUE) && (c >= 'A') && (c <= 'F')) {\r
- Value += (c - 'A' + 10);\r
- }\r
- if (c >= '0' && c <= '9') {\r
- Value += (c - '0');\r
- }\r
- }\r
-\r
- return Value;\r
-}\r
-\r
-EFI_HII_DATE\r
-EfiVfrParser::_STOD (\r
- IN INT8 *Year,\r
- IN INT8 *Month,\r
- IN INT8 *Day\r
- )\r
-{\r
- EFI_HII_DATE Date;\r
-\r
- Date.Year = _STOU16 (Year);\r
- Date.Month = _STOU8 (Month);\r
- Date.Day = _STOU8 (Day);\r
-\r
- return Date;\r
-}\r
-\r
-EFI_HII_TIME\r
-EfiVfrParser::_STOT (\r
- IN INT8 *Hour,\r
- IN INT8 *Minute,\r
- IN INT8 *Second\r
- )\r
-{\r
- EFI_HII_TIME Time;\r
-\r
- Time.Hour = _STOU8 (Hour);\r
- Time.Minute = _STOU8 (Minute);\r
- Time.Second = _STOU8 (Second);\r
-\r
- return Time;\r
-}\r
-\r
-EFI_STRING_ID\r
-EfiVfrParser::_STOSID (\r
- IN INT8 *Str\r
- )\r
-{\r
- return (EFI_STRING_ID)_STOU16(Str);\r
-}\r
-\r
-EFI_FORM_ID\r
-EfiVfrParser::_STOFID (\r
- IN INT8 *Str\r
- )\r
-{\r
- return (EFI_FORM_ID)_STOU16(Str);\r
-}\r
-\r
-EFI_QUESTION_ID\r
-EfiVfrParser::_STOQID (\r
- IN INT8 *Str\r
- )\r
-{\r
- return (EFI_QUESTION_ID)_STOU16(Str);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_STRCAT (\r
- IN OUT INT8 **Dest,\r
- IN INT8 *Src\r
- )\r
-{\r
- INT8 *NewStr;\r
- UINT32 Len;\r
-\r
- if ((Dest == NULL) || (Src == NULL)) {\r
- return;\r
- }\r
-\r
- Len = (*Dest == NULL) ? 0 : strlen (*Dest);\r
- Len += strlen (Src);\r
- if ((NewStr = new INT8[Len + 1]) == NULL) {\r
- return;\r
- }\r
- NewStr[0] = '\0';\r
- if (*Dest != NULL) {\r
- strcpy (NewStr, *Dest);\r
- }\r
- strcat (NewStr, Src);\r
-\r
- *Dest = NewStr;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_CRGUID (\r
- IN EFI_GUID *Guid,\r
- IN INT8 *G1,\r
- IN INT8 *G2,\r
- IN INT8 *G3,\r
- IN INT8 *G4,\r
- IN INT8 *G5,\r
- IN INT8 *G6,\r
- IN INT8 *G7,\r
- IN INT8 *G8,\r
- IN INT8 *G9,\r
- IN INT8 *G10,\r
- IN INT8 *G11\r
- )\r
-{\r
- Guid->Data1 = _STOU32 (G1);\r
- Guid->Data2 = _STOU16 (G2);\r
- Guid->Data3 = _STOU16 (G3);\r
- Guid->Data4[0] = _STOU8(G4);\r
- Guid->Data4[1] = _STOU8(G5);\r
- Guid->Data4[2] = _STOU8(G6);\r
- Guid->Data4[3] = _STOU8(G7);\r
- Guid->Data4[4] = _STOU8(G8);\r
- Guid->Data4[5] = _STOU8(G9);\r
- Guid->Data4[6] = _STOU8(G10);\r
- Guid->Data4[7] = _STOU8(G11);\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_DeclareDefaultLinearVarStore (\r
- IN UINT32 LineNo\r
- )\r
-{\r
- UINT32 Index;\r
- INT8 **TypeNameList;\r
- UINT32 ListSize;\r
- EFI_GUID DefaultGuid = { 0x9db3c415, 0xda00, 0x4233, { 0xae, 0xc6, 0x79, 0xb, 0x4f, 0x5b, 0x45, 0x66 } };\r
-\r
- mCVfrVarDataTypeDB.GetUserDefinedTypeNameList (&TypeNameList, &ListSize);\r
-\r
- for (Index = 0; Index < ListSize; Index++) {\r
- UINT32 Size;\r
- EFI_VARSTORE_ID VarStoreId;\r
- CIfrVarStore VSObj;\r
-\r
- VSObj.SetLineNo (LineNo);\r
- mCVfrDataStorage.DeclareBufferVarStore (\r
- TypeNameList[Index],\r
- &DefaultGuid,\r
- &mCVfrVarDataTypeDB,\r
- TypeNameList[Index],\r
- EFI_VARSTORE_ID_INVALID\r
- );\r
- mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId);\r
- VSObj.SetVarStoreId (VarStoreId);\r
- mCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);\r
- VSObj.SetSize (Size);\r
- VSObj.SetName (TypeNameList[Index]);\r
- VSObj.SetGuid (&DefaultGuid);\r
- }\r
-\r
- if (mCVfrVarDataTypeDB.IsTypeNameDefined ("Date") == FALSE) {\r
- UINT32 Size;\r
- EFI_VARSTORE_ID VarStoreId;\r
- CIfrVarStore VSObj;\r
-\r
- VSObj.SetLineNo (LineNo);\r
- mCVfrDataStorage.DeclareBufferVarStore (\r
- "Date",\r
- &DefaultGuid,\r
- &mCVfrVarDataTypeDB,\r
- "EFI_HII_DATE",\r
- EFI_VARSTORE_ID_INVALID\r
- );\r
- mCVfrDataStorage.GetVarStoreId("Date", &VarStoreId);\r
- VSObj.SetVarStoreId (VarStoreId);\r
- mCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_DATE", &Size);\r
- VSObj.SetSize (Size);\r
- VSObj.SetName ("Date");\r
- VSObj.SetGuid (&DefaultGuid);\r
- }\r
-\r
- if (mCVfrVarDataTypeDB.IsTypeNameDefined ("Time") == FALSE) {\r
- UINT32 Size;\r
- EFI_VARSTORE_ID VarStoreId;\r
- CIfrVarStore VSObj;\r
-\r
- VSObj.SetLineNo (LineNo);\r
- mCVfrDataStorage.DeclareBufferVarStore (\r
- "Time",\r
- &DefaultGuid,\r
- &mCVfrVarDataTypeDB,\r
- "EFI_HII_TIME",\r
- EFI_VARSTORE_ID_INVALID\r
- );\r
- mCVfrDataStorage.GetVarStoreId("Time", &VarStoreId);\r
- VSObj.SetVarStoreId (VarStoreId);\r
- mCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_TIME", &Size);\r
- VSObj.SetSize (Size);\r
- VSObj.SetName ("Time");\r
- VSObj.SetGuid (&DefaultGuid);\r
- }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::_DeclareStandardDefaultStorage (\r
- IN UINT32 LineNo\r
- )\r
-{\r
- CIfrDefaultStore DSObj;\r
-\r
- mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), "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
-\r
-VOID\r
-EfiVfrParser::AssignQuestionKey (\r
- IN CIfrQuestionHeader &QHObj,\r
- IN ANTLRTokenPtr KeyTok\r
- )\r
-{\r
- UINT16 KeyValue;\r
-\r
- if (KeyTok == NULL) {\r
- return;\r
- }\r
-\r
- KeyValue = _STOU16 (KeyTok->getText());\r
-\r
- if (QHObj.FLAGS () & EFI_IFR_FLAG_CALLBACK) {\r
- /*\r
- * if the question is not CALLBACK ignore the key.\r
- */\r
- _PCATCH(mCVfrQuestionDB.UpdateQuestionId (QHObj.QUESTION_ID(), KeyValue), KeyTok);\r
- QHObj.SetQuestionId (KeyValue);\r
- }\r
-}\r
-\r
-VOID\r
-EfiVfrParser::ConvertIdExpr (\r
- IN UINT32 &ExpOpCount,\r
- IN UINT32 LineNo,\r
- IN EFI_QUESTION_ID QId,\r
- IN INT8 *VarIdStr,\r
- IN UINT32 BitMask\r
- )\r
-{\r
- CIfrQuestionRef1 QR1Obj(LineNo);\r
- QR1Obj.SetQuestionId (QId, VarIdStr, LineNo);\r
- _SAVE_OPHDR_COND (QR1Obj, (ExpOpCount == 0));\r
-\r
- if (BitMask != 0) {\r
- CIfrUint32 U32Obj(LineNo);\r
- U32Obj.SetValue (BitMask);\r
-\r
- CIfrBitWiseAnd BWAObj(LineNo);\r
-\r
- CIfrUint8 U8Obj(LineNo);\r
- switch (BitMask) {\r
- case DATE_YEAR_BITMASK : U8Obj.SetValue (0); break;\r
- case TIME_SECOND_BITMASK : U8Obj.SetValue (0x10); break;\r
- case DATE_DAY_BITMASK : U8Obj.SetValue (0x18); break;\r
- case TIME_HOUR_BITMASK : U8Obj.SetValue (0); break;\r
- case TIME_MINUTE_BITMASK : U8Obj.SetValue (0x8); break;\r
- }\r
-\r
- CIfrShiftRight SRObj(LineNo);\r
- }\r
-\r
- ExpOpCount += 4;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::IdEqValDoSpecial (\r
- IN UINT32 &ExpOpCount,\r
- IN UINT32 LineNo,\r
- IN EFI_QUESTION_ID QId,\r
- IN INT8 *VarIdStr,\r
- IN UINT32 BitMask,\r
- IN UINT16 ConstVal,\r
- IN EFI_COMPARE_TYPE CompareType\r
- )\r
-{\r
- ConvertIdExpr (ExpOpCount, LineNo, QId, VarIdStr, BitMask);\r
-\r
- if (ConstVal > 0xFF) {\r
- CIfrUint16 U16Obj(LineNo);\r
- U16Obj.SetValue (ConstVal);\r
- } else {\r
- CIfrUint8 U8Obj(LineNo);\r
- U8Obj.SetValue ((UINT8)ConstVal);\r
- }\r
-\r
- switch (CompareType) {\r
- case EQUAL :\r
- {\r
- CIfrEqual EObj(LineNo);\r
- break;\r
- }\r
- case LESS_EQUAL :\r
- {\r
- CIfrLessEqual LEObj(LineNo);\r
- break;\r
- }\r
- case LESS_THAN :\r
- {\r
- CIfrLessThan LTObj(LineNo);\r
- break;\r
- }\r
- case GREATER_EQUAL :\r
- {\r
- CIfrGreaterEqual GEObj(LineNo);\r
- break;\r
- }\r
- case GREATER_THAN :\r
- {\r
- CIfrGreaterThan GTObj(LineNo);\r
- break;\r
- }\r
- }\r
-\r
- ExpOpCount += 2;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::IdEqIdDoSpecial (\r
- IN UINT32 &ExpOpCount,\r
- IN UINT32 LineNo,\r
- IN EFI_QUESTION_ID QId1,\r
- IN INT8 *VarId1Str,\r
- IN UINT32 BitMask1,\r
- IN EFI_QUESTION_ID QId2,\r
- IN INT8 *VarId2Str,\r
- IN UINT32 BitMask2,\r
- IN EFI_COMPARE_TYPE CompareType\r
- )\r
-{\r
- ConvertIdExpr (ExpOpCount, LineNo, QId1, VarId1Str, BitMask1);\r
- ConvertIdExpr (ExpOpCount, LineNo, QId2, VarId2Str, BitMask2);\r
-\r
- switch (CompareType) {\r
- case EQUAL :\r
- {\r
- CIfrEqual EObj(LineNo);\r
- break;\r
- }\r
- case LESS_EQUAL :\r
- {\r
- CIfrLessEqual LEObj(LineNo);\r
- break;\r
- }\r
- case LESS_THAN :\r
- {\r
- CIfrLessThan LTObj(LineNo);\r
- break;\r
- }\r
- case GREATER_EQUAL :\r
- {\r
- CIfrGreaterEqual GEObj(LineNo);\r
- break;\r
- }\r
- case GREATER_THAN :\r
- {\r
- CIfrGreaterThan GTObj(LineNo);\r
- break;\r
- }\r
- }\r
-\r
- ExpOpCount++;\r
-}\r
-\r
-VOID\r
-EfiVfrParser::IdEqListDoSpecial (\r
- IN UINT32 &ExpOpCount,\r
- IN UINT32 LineNo,\r
- IN EFI_QUESTION_ID QId,\r
- IN INT8 *VarIdStr,\r
- IN UINT32 BitMask,\r
- IN UINT16 ListLen,\r
- IN UINT16 *ValueList\r
- )\r
-{\r
- UINT16 Index;\r
-\r
- if (ListLen == 0) {\r
- return;\r
- }\r
-\r
- IdEqValDoSpecial (ExpOpCount, LineNo, QId, VarIdStr, BitMask, ValueList[0], EQUAL);\r
- for (Index = 1; Index < ListLen; Index++) {\r
- IdEqValDoSpecial (ExpOpCount, LineNo, QId, VarIdStr, BitMask, ValueList[Index], EQUAL);\r
- CIfrOr OObj (LineNo);\r
- ExpOpCount++;\r
- }\r
-}\r
-\r
->>\r