]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrSyntax.g
Sync EDKII BaseTools to BaseTools project r1903.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrSyntax.g
index 09ec6919eca5bf325367a8396797bf05a6007451..2a4f7b6488ab15e52710a0f0fa2d94109bba9dac 100644 (file)
@@ -1,5 +1,5 @@
 /*++\r
-Copyright (c) 2004 - 2009, Intel Corporation\r
+Copyright (c) 2004 - 2010, Intel Corporation\r
 All rights reserved. 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
@@ -131,6 +131,9 @@ VfrParserStart (
 #token EndList("endlist")                       "endlist"\r
 #token EndForm("endform")                       "endform"\r
 #token Form("form")                             "form"\r
+#token FormMap("formmap")                       "formmap"\r
+#token MapTitle("maptitle")                     "maptitle"\r
+#token MapGuid("mapguid")                       "mapguid"\r
 #token Subtitle("subtitle")                     "subtitle"\r
 #token Help("help")                             "help"\r
 #token Text("text")                             "text"\r
@@ -214,6 +217,8 @@ VfrParserStart (
 #token Rule("rule")                             "rule"\r
 #token EndRule("endrule")                       "endrule"\r
 #token Value("value")                           "value"\r
+#token Read("read")                             "read"\r
+#token Write("write")                           "write"\r
 #token ResetButton("resetbutton")               "resetbutton"\r
 #token EndResetButton("endresetbutton")         "endresetbutton"\r
 #token DefaultStore("defaultstore")             "defaultstore"\r
@@ -250,7 +255,8 @@ VfrParserStart (
 \r
 vfrProgram > [UINT8 Return] :\r
   <<\r
-     mParserStatus = 0;\r
+     mParserStatus   = 0;\r
+     mCIfrOpHdrIndex = 0;\r
      mConstantOnlyInExpression = FALSE;\r
   >>\r
   (\r
@@ -335,82 +341,84 @@ vfrDataStructFields :
 \r
 dataStructField64 :\r
   << UINT32 ArrayNum = 0; >>\r
-  "UINT64"\r
+  D:"UINT64"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT64", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructField32 :\r
   << UINT32 ArrayNum = 0; >>\r
-  "UINT32"\r
+  D:"UINT32"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT32", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructField16 :\r
-  << UINT32 ArrayNum = 0; >>\r
+  << \r
+    UINT32 ArrayNum = 0; \r
+  >>\r
   ("UINT16" | "CHAR16")\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT16", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), (CHAR8 *) "UINT16", ArrayNum), N); >>\r
   ;\r
 \r
 dataStructField8 :\r
   << UINT32 ArrayNum = 0; >>\r
-  "UINT8"\r
+  D:"UINT8"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "UINT8", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructFieldBool :\r
   << UINT32 ArrayNum = 0; >>\r
-  "BOOLEAN"\r
+  D:"BOOLEAN"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "BOOLEAN", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructFieldString :\r
   << UINT32 ArrayNum = 0; >>\r
-  "EFI_STRING_ID"\r
+  D:"EFI_STRING_ID"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_STRING_ID", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructFieldDate :\r
   << UINT32 ArrayNum = 0; >>\r
-  "EFI_HII_DATE"\r
+  D:"EFI_HII_DATE"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_DATE", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructFieldTime :\r
   << UINT32 ArrayNum = 0; >>\r
-  "EFI_HII_TIME"\r
+  D:"EFI_HII_TIME"\r
   N:StringIdentifier\r
   {\r
     OpenBracket I:Number CloseBracket               << ArrayNum = _STOU32(I->getText()); >>\r
   }\r
-  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), "EFI_HII_TIME", ArrayNum), N); >>\r
+  ";"                                               << _PCATCH(gCVfrVarDataTypeDB.DataTypeAddField (N->getText(), D->getText(), ArrayNum), N); >>\r
   ;\r
 \r
 dataStructFieldUser :\r
@@ -486,24 +494,26 @@ vfrFormSetDefinition :
                                                     <<\r
                                                       switch (ClassGuidNum) {\r
                                                       case 0:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));\r
                                                         FSObj->SetClassGuid(&DefaultClassGuid);\r
                                                         break;\r
                                                       case 1:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET));\r
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
                                                         FSObj->SetClassGuid(&ClassGuid1);\r
                                                         break;\r
                                                       case 2:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + sizeof(EFI_GUID));\r
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
                                                         FSObj->SetClassGuid(&ClassGuid1);\r
                                                         FSObj->SetClassGuid(&ClassGuid2);\r
                                                         break;\r
-                                                      default:\r
-                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + 2 * sizeof(EFI_GUID));\r
+                                                      case 3:\r
+                                                        FSObj = new CIfrFormSet(sizeof(EFI_IFR_FORM_SET) + ClassGuidNum * sizeof(EFI_GUID));\r
                                                         FSObj->SetClassGuid(&ClassGuid1);\r
                                                         FSObj->SetClassGuid(&ClassGuid2);\r
                                                         FSObj->SetClassGuid(&ClassGuid3);\r
                                                         break;\r
+                                                      default:\r
+                                                        break;\r
                                                       }\r
 \r
                                                       SET_LINE_INFO (*FSObj, L);\r
@@ -542,6 +552,7 @@ vfrFormSetDefinition :
 vfrFormSetList :\r
   (\r
     vfrFormDefinition             |\r
+    vfrFormMapDefinition          |\r
     vfrStatementImage             |\r
     vfrStatementVarStoreLinear    |\r
     vfrStatementVarStoreEfi       |\r
@@ -586,12 +597,13 @@ vfrStatementVarStoreLinear :
   V:Varstore                                        << VSObj.SetLineNo(V->getLine()); >>\r
   (\r
       TN:StringIdentifier ","                       << TypeName = TN->getText(); LineNum = TN->getLine(); >>\r
-    | U8:"UINT8" ","                                << TypeName = "UINT8"; LineNum = U8->getLine(); >>\r
-    | U16:"UINT16" ","                              << TypeName = "UINT16"; LineNum = U16->getLine(); >>\r
-    | U32:"UINT32" ","                              << TypeName = "UINT32"; LineNum = U32->getLine(); >>\r
-    | U64:"UINT64" ","                              << TypeName = "UINT64"; LineNum = U64->getLine(); >>\r
-    | D:"EFI_HII_DATE" ","                          << TypeName = "EFI_HII_DATE"; LineNum = D->getLine(); >>\r
-    | T:"EFI_HII_TIME" ","                          << TypeName = "EFI_HII_TIME"; LineNum = T->getLine(); >>\r
+    | U8:"UINT8" ","                                << TypeName = U8->getText(); LineNum = U8->getLine(); >>\r
+    | U16:"UINT16" ","                              << TypeName = U16->getText(); LineNum = U16->getLine(); >>\r
+    | C16:"CHAR16" ","                              << TypeName = (CHAR8 *) "UINT16"; LineNum = C16->getLine(); >>\r
+    | U32:"UINT32" ","                              << TypeName = U32->getText(); LineNum = U32->getLine(); >>\r
+    | U64:"UINT64" ","                              << TypeName = U64->getText(); LineNum = U64->getLine(); >>\r
+    | D:"EFI_HII_DATE" ","                          << TypeName = D->getText(); LineNum = D->getLine(); >>\r
+    | T:"EFI_HII_TIME" ","                          << TypeName = T->getText(); LineNum = T->getLine(); >>\r
   )\r
   { Key "=" FID:Number ","                          << // Key is used to assign Varid in Framework VFR but no use in UEFI2.1 VFR\r
                                                        if (mCompatibleMode) {\r
@@ -628,7 +640,7 @@ vfrStatementVarStoreLinear :
                                                        _PCATCH(mCVfrDataStorage.GetVarStoreId(StoreName, &VarStoreId), SN);\r
                                                        VSObj.SetVarStoreId (VarStoreId);\r
                                                        _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize(TypeName, &Size), LineNum);\r
-                                                       VSObj.SetSize (Size);\r
+                                                       VSObj.SetSize ((UINT16) Size);\r
                                                        VSObj.SetName (SN->getText());\r
                                                     >>\r
   ";"\r
@@ -771,11 +783,11 @@ vfrQuestionHeader[CIfrQuestionHeader & QHObj, EFI_QUESION_TYPE QType = QUESTION_
                                                          mCVfrQuestionDB.RegisterQuestion (QName, VarIdStr, QId);\r
                                                          break;\r
                                                        case QUESTION_DATE:\r
-                                                       mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId);\r
-                                                       break;\r
+                                                         mCVfrQuestionDB.RegisterNewDateQuestion (QName, VarIdStr, QId);\r
+                                                         break;\r
                                                        case QUESTION_TIME:\r
-                                                       mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId);\r
-                                                       break;\r
+                                                         mCVfrQuestionDB.RegisterNewTimeQuestion (QName, VarIdStr, QId);\r
+                                                         break;\r
                                                        default:\r
                                                        _PCATCH(VFR_RETURN_FATAL_ERROR);\r
                                                        }\r
@@ -820,7 +832,7 @@ questionheaderFlagsField[UINT8 & Flags] :
   | LateCheckFlag\r
   ;\r
 \r
-vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] :\r
+vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr, BOOLEAN CheckFlag = TRUE] :\r
   <<\r
      UINT32                Idx;\r
      UINT32                LineNo;\r
@@ -853,9 +865,11 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] :
                                                                              );\r
                                                           VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
                                                        }\r
-                                                       _PCATCH(VfrReturnCode, SN1);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
-                                                       _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
+                                                       if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
+                                                         _PCATCH(VfrReturnCode, SN1);\r
+                                                         _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN1);\r
+                                                         _PCATCH(mCVfrDataStorage.GetNameVarStoreInfo (&$Info, Idx), SN1);\r
+                                                       }\r
                                                     >>\r
   )\r
   |\r
@@ -874,17 +888,21 @@ vfrStorageVarId[EFI_VARSTORE_INFO & Info, CHAR8 *&QuestVarIdStr] :
                                                                              );\r
                                                           VfrReturnCode = mCVfrDataStorage.GetVarStoreType (SName, VarStoreType);\r
                                                        }\r
-                                                       _PCATCH(VfrReturnCode, SN2);\r
-                                                       _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);\r
-                                                       if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
-                                                         _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);\r
-                                                         _STRCAT(&VarStr, TName);\r
+                                                       if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
+                                                         _PCATCH(VfrReturnCode, SN2);\r
+                                                         _PCATCH(mCVfrDataStorage.GetVarStoreId (SName, &$Info.mVarStoreId), SN2);\r
+                                                         if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
+                                                           _PCATCH(mCVfrDataStorage.GetBufferVarStoreDataTypeName(SName, &TName), SN2);\r
+                                                           _STRCAT(&VarStr, TName);\r
+                                                         }\r
                                                        }\r
                                                     >>\r
 \r
     (\r
       "."                                           <<\r
-                                                       _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
+                                                       if (CheckFlag || VfrReturnCode == VFR_RETURN_SUCCESS) {\r
+                                                         _PCATCH(((VarStoreType != EFI_VFR_VARSTORE_BUFFER) ? VFR_RETURN_EFIVARSTORE_USE_ERROR : VFR_RETURN_SUCCESS), SN2);\r
+                                                       }\r
                                                        _STRCAT(&VarIdStr, "."); _STRCAT(&VarStr, ".");\r
                                                     >>\r
       SF:StringIdentifier                           << _STRCAT(&VarIdStr, SF->getText()); _STRCAT(&VarStr, SF->getText()); >>\r
@@ -1079,6 +1097,33 @@ vfrFormDefinition :
   ";"\r
   ;\r
 \r
+vfrFormMapDefinition :\r
+  << \r
+    CIfrFormMap *FMapObj = NULL;\r
+    UINT32      FormMapMethodNumber = 0;\r
+    EFI_GUID    Guid;\r
+  >>\r
+  F:FormMap                                         << FMapObj = new CIfrFormMap(); FMapObj->SetLineNo(F->getLine()); >>\r
+  FormId "=" S1:Number ","                          << _PCATCH(FMapObj->SetFormId (_STOFID(S1->getText())), S1); >>\r
+  (\r
+    MapTitle "=" "STRING_TOKEN" "\(" S2:Number "\)" ";"\r
+    MapGuid  "=" guidDefinition[Guid] ";"           << FMapObj->SetFormMapMethod (_STOFID(S2->getText()), &Guid); FormMapMethodNumber ++; >>\r
+  )*                                                << if (FormMapMethodNumber == 0) {_PCATCH (VFR_RETURN_INVALID_PARAMETER, F->getLine(), "No MapMethod is set for FormMap!");} delete FMapObj;>>\r
+  (\r
+    vfrStatementImage                        |\r
+    vfrStatementLocked                       |\r
+    vfrStatementRules                        |\r
+    vfrStatementDefault                      |\r
+    vfrStatementStat                         |\r
+    vfrStatementQuestions                    |\r
+    vfrStatementConditional                  |\r
+    vfrStatementLabel                        |\r
+    vfrStatementBanner\r
+  )*\r
+  E:EndForm                                         << CRT_END_OP (E); >>\r
+  ";"\r
+  ;\r
+\r
 vfrStatementRules :\r
   << CIfrRule RObj; >>\r
   R:Rule                                            << RObj.SetLineNo(R->getLine()); >>\r
@@ -1194,6 +1239,18 @@ vfrStatementValue :
   "=" vfrStatementExpression[0]                        << {CIfrEnd EndObj; EndObj.SetLineNo(V->getLine());} >>\r
   ;\r
 \r
+vfrStatementRead :\r
+  << CIfrRead RObj; >>\r
+  R:Read                                               << RObj.SetLineNo(R->getLine()); >>\r
+  vfrStatementExpression[0] ";" \r
+  ;\r
+\r
+vfrStatementWrite :\r
+  << CIfrWrite WObj; >>\r
+  W:Write                                              << WObj.SetLineNo(W->getLine()); >>\r
+  vfrStatementExpression[0] ";" \r
+  ;\r
+\r
 vfrStatementSubTitle :\r
   << CIfrSubtitle SObj; >>\r
   L:Subtitle                                           << SObj.SetLineNo(L->getLine()); >>\r
@@ -1268,8 +1325,8 @@ vfrStatementCrossReference :
 vfrStatementGoto :\r
   <<\r
      UINT8               RefType = 1;\r
-     EFI_STRING_ID       DevPath;\r
-     EFI_GUID            FSId;\r
+     EFI_STRING_ID       DevPath = EFI_STRING_ID_INVALID;\r
+     EFI_GUID            FSId = {0,};\r
      EFI_FORM_ID         FId;\r
      EFI_QUESTION_ID     QId    = EFI_QUESTION_ID_INVALID;\r
      UINT32              BitMask;\r
@@ -2046,6 +2103,8 @@ vfrStatementQuestionOptionTag :
   vfrStatementGrayOutIfQuest    |\r
   vfrStatementValue             |\r
   vfrStatementDefault           |\r
+  vfrStatementRead              |\r
+  vfrStatementWrite             |\r
   vfrStatementOptions\r
   ;\r
 \r
@@ -2479,6 +2538,7 @@ vfrStatementInvalidSaveRestoreDefaults :
 #token StringRef("stringref")                   "stringref"\r
 #token PushThis("pushthis")                     "pushthis"\r
 #token Security("security")                     "security"\r
+#token Get("get")                               "get"\r
 #token True("TRUE")                             "TRUE"\r
 #token False("FALSE")                           "FALSE"\r
 #token One("ONE")                               "ONE"\r
@@ -2490,6 +2550,7 @@ vfrStatementInvalidSaveRestoreDefaults :
 #token AND("AND")                               "AND"\r
 #token OR("OR")                                 "OR"\r
 #token NOT("NOT")                               "NOT"\r
+#token Set("set")                               "set"\r
 #token BitWiseNot("~")                          "\~"\r
 #token BoolVal("boolval")                       "boolval"\r
 #token StringVal("stringval")                   "stringval"\r
@@ -2500,12 +2561,13 @@ vfrStatementInvalidSaveRestoreDefaults :
 #token Catenate("catenate")                     "catenate"\r
 #token QuestionRefVal("questionrefval")         "questionrefval"\r
 #token StringRefVal("stringrefval")             "stringrefval"\r
+#token Map("map")                               "map"\r
 \r
 //\r
 // Root expression extension function called by other function.\r
 //\r
 vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] :\r
-  << if ($RootLevel == 0) {_CLEAR_SAVED_OPHDR ();} >>\r
+  << if ($RootLevel == 0) {mCIfrOpHdrIndex ++; if (mCIfrOpHdrIndex >= MAX_IFR_EXPRESSION_DEPTH) _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, "The depth of expression exceeds the max supported level 8!"); _CLEAR_SAVED_OPHDR ();} >>\r
   andTerm[$RootLevel, $ExpOpCount]\r
   (\r
     L:OR andTerm[$RootLevel, $ExpOpCount]              << $ExpOpCount++; CIfrOr OObj(L->getLine()); >>\r
@@ -2517,11 +2579,15 @@ vfrStatementExpression [UINT32 RootLevel, UINT32 ExpOpCount = 0] :
                                                           if ($ExpOpCount > 1 && $RootLevel == 0) {\r
                                                             if (_SET_SAVED_OPHDR_SCOPE()) {\r
                                                               CIfrEnd EObj;\r
-                                                              if (mCIfrOpHdrLineNo != 0) {\r
-                                                                EObj.SetLineNo (mCIfrOpHdrLineNo);\r
+                                                              if (mCIfrOpHdrLineNo[mCIfrOpHdrIndex] != 0) {\r
+                                                                EObj.SetLineNo (mCIfrOpHdrLineNo[mCIfrOpHdrIndex]);\r
                                                               }\r
                                                             }\r
                                                           }\r
+                                                          \r
+                                                          if ($RootLevel == 0) {\r
+                                                            mCIfrOpHdrIndex --;\r
+                                                          }\r
                                                        >>\r
   ;\r
 \r
@@ -2664,6 +2730,7 @@ atomTerm [UINT32 & RootLevel, UINT32 & ExpOpCount]:
   | vfrExpressionConstant[$RootLevel, $ExpOpCount]\r
   | vfrExpressionUnaryOp[$RootLevel, $ExpOpCount]\r
   | vfrExpressionTernaryOp[$RootLevel, $ExpOpCount]\r
+  | vfrExpressionMap[$RootLevel, $ExpOpCount]\r
   | (\r
       L:NOT\r
       atomTerm[$RootLevel, $ExpOpCount]                 << { CIfrNot NObj(L->getLine()); $ExpOpCount++; } >>\r
@@ -2705,6 +2772,7 @@ vfrExpressionBuildInFunction [UINT32 & RootLevel, UINT32 & ExpOpCount] :
   | stringref1Exp[$RootLevel, $ExpOpCount]\r
   | pushthisExp[$RootLevel, $ExpOpCount]\r
   | securityExp[$RootLevel, $ExpOpCount]\r
+  | getExp[$RootLevel, $ExpOpCount]\r
   ;\r
 \r
 dupExp [UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -2937,8 +3005,8 @@ ideqvallistExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
 questionref13Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
   <<\r
      UINT8           Type = 0x1;\r
-     EFI_STRING_ID   DevPath;\r
-     EFI_GUID        Guid;\r
+     EFI_STRING_ID   DevPath = EFI_STRING_ID_INVALID;\r
+     EFI_GUID        Guid = {0,};\r
      EFI_QUESTION_ID QId = EFI_QUESTION_ID_INVALID;\r
      UINT32          BitMask;\r
      CHAR8           *QName = NULL;\r
@@ -2990,8 +3058,19 @@ rulerefExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
 //   stringref (STR_FORM_SET_TITLE)\r
 //\r
 stringref1Exp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+  <<\r
+    EFI_STRING_ID RefStringId = EFI_STRING_ID_INVALID;\r
+  >>\r
   L:StringRef\r
-  "\(" S:Number "\)"                                   << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (_STOSID(S->getText())); $ExpOpCount++; } >>\r
+  "\("\r
+      ( \r
+        "STRING_TOKEN"\r
+        "\(" \r
+          S:Number << RefStringId = _STOSID(S->getText()); >>\r
+        "\)"\r
+        | I:Number << RefStringId = _STOSID(I->getText()); >>\r
+      )\r
+  "\)" << { CIfrStringRef1 SR1Obj(L->getLine()); _SAVE_OPHDR_COND (SR1Obj, ($ExpOpCount == 0), L->getLine()); SR1Obj.SetStringId (RefStringId); $ExpOpCount++; } >>\r
   ;\r
 \r
 pushthisExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -3006,6 +3085,84 @@ securityExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   "\(" guidDefinition[Guid] "\)"                       << { CIfrSecurity SObj(L->getLine()); _SAVE_OPHDR_COND (SObj, ($ExpOpCount == 0), L->getLine()); SObj.SetPermissions (&Guid); } $ExpOpCount++; >>\r
   ;\r
 \r
+numericVarStoreType [UINT8 & VarType] :\r
+    "NUMERIC_SIZE_1"                                   << $VarType = EFI_IFR_NUMERIC_SIZE_1; >>\r
+  | "NUMERIC_SIZE_2"                                   << $VarType = EFI_IFR_NUMERIC_SIZE_2; >>\r
+  | "NUMERIC_SIZE_4"                                   << $VarType = EFI_IFR_NUMERIC_SIZE_4; >>\r
+  | "NUMERIC_SIZE_8"                                   << $VarType = EFI_IFR_NUMERIC_SIZE_8; >>\r
+  ;\r
+\r
+getExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+  <<\r
+     EFI_VARSTORE_INFO Info;\r
+     CHAR8             *VarIdStr = NULL;\r
+     EFI_QUESTION_ID   QId = EFI_QUESTION_ID_INVALID;\r
+     UINT32            Mask = 0;\r
+     EFI_QUESION_TYPE  QType = QUESTION_NORMAL;\r
+     UINT8             VarType = EFI_IFR_TYPE_UNDEFINED;\r
+     UINT32            VarSize = 0;\r
+     Info.mVarStoreId = 0;\r
+  >>\r
+  L:Get\r
+  "\(" \r
+      vfrStorageVarId[Info, VarIdStr, FALSE]\r
+      {"\|" FLAGS "=" numericVarStoreType [VarType] }\r
+  "\)"                                                 << \r
+                                                          {\r
+                                                            if (Info.mVarStoreId == 0) {\r
+                                                              // support Date/Time question\r
+                                                              mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, QId, Mask, &QType);\r
+                                                              if (QId == EFI_QUESTION_ID_INVALID || Mask == 0 || QType == QUESTION_NORMAL) {\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+                                                              }\r
+                                                              if (QType == QUESTION_DATE) {\r
+                                                                Info.mVarType = EFI_IFR_TYPE_DATE;\r
+                                                              } else if (QType == QUESTION_TIME) {\r
+                                                                Info.mVarType = EFI_IFR_TYPE_TIME;\r
+                                                              }\r
+                                                              switch (Mask) {\r
+                                                              case DATE_YEAR_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 0;\r
+                                                                break;\r
+                                                              case DATE_DAY_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 3;\r
+                                                                break;\r
+                                                              case TIME_HOUR_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 0;\r
+                                                                break;\r
+                                                              case TIME_MINUTE_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 1;\r
+                                                                break;\r
+                                                              case TIME_SECOND_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 2;\r
+                                                                break;\r
+                                                              default:\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+                                                                break;\r
+                                                              }\r
+                                                            } else {\r
+                                                              if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string");\r
+                                                              }\r
+                                                              if (VarType != EFI_IFR_TYPE_UNDEFINED) {\r
+                                                                Info.mVarType = VarType;\r
+                                                                _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+                                                                Info.mVarTotalSize = VarSize;\r
+                                                              }\r
+                                                              _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+                                                              if (VarSize != Info.mVarTotalSize) {\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data array");\r
+                                                              }\r
+                                                            }\r
+                                                            CIfrGet GObj(L->getLine()); \r
+                                                            _SAVE_OPHDR_COND (GObj, ($ExpOpCount == 0), L->getLine()); \r
+                                                            GObj.SetVarInfo (&Info); \r
+                                                            delete VarIdStr; \r
+                                                            $ExpOpCount++;\r
+                                                          }\r
+                                                       >>\r
+  ;\r
+\r
 vfrExpressionConstant[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
     L1:True                                            << CIfrTrue TObj(L1->getLine()); _SAVE_OPHDR_COND (TObj, ($ExpOpCount == 0), L1->getLine()); $ExpOpCount++; >>\r
   | L2:False                                           << CIfrFalse FObj(L2->getLine()); _SAVE_OPHDR_COND (FObj, ($ExpOpCount == 0), L2->getLine()); $ExpOpCount++; >>\r
@@ -3026,6 +3183,7 @@ vfrExpressionUnaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   | unintExp[$RootLevel, $ExpOpCount]\r
   | toupperExp[$RootLevel, $ExpOpCount]\r
   | tolwerExp[$RootLevel, $ExpOpCount]\r
+  | setExp[$RootLevel, $ExpOpCount]\r
   ;\r
 \r
 lengthExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
@@ -3086,6 +3244,78 @@ tolwerExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
                                                        << { CIfrToLower TLObj(L->getLine()); $ExpOpCount++; } >>\r
   ;\r
 \r
+setExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
+  <<\r
+     EFI_VARSTORE_INFO Info;\r
+     CHAR8             *VarIdStr = NULL;\r
+     EFI_QUESTION_ID   QId = EFI_QUESTION_ID_INVALID;\r
+     UINT32            Mask = 0;\r
+     EFI_QUESION_TYPE  QType = QUESTION_NORMAL;\r
+     UINT8             VarType = EFI_IFR_TYPE_UNDEFINED;\r
+     UINT32            VarSize = 0;\r
+     Info.mVarStoreId = 0;\r
+  >>\r
+  L:Set\r
+  "\("\r
+     vfrStorageVarId[Info, VarIdStr, FALSE]\r
+     {"\|" FLAG "=" numericVarStoreType [VarType] }\r
+     "," vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount] \r
+  "\)"\r
+                                                       << \r
+                                                          {\r
+                                                            if (Info.mVarStoreId == 0) {\r
+                                                              // support Date/Time question\r
+                                                              mCVfrQuestionDB.GetQuestionId (NULL, VarIdStr, QId, Mask, &QType);\r
+                                                              if (QId == EFI_QUESTION_ID_INVALID || Mask == 0 || QType == QUESTION_NORMAL) {\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+                                                              }\r
+                                                              if (QType == QUESTION_DATE) {\r
+                                                                Info.mVarType = EFI_IFR_TYPE_DATE;\r
+                                                              } else if (QType == QUESTION_TIME) {\r
+                                                                Info.mVarType = EFI_IFR_TYPE_TIME;\r
+                                                              }\r
+                                                              switch (Mask) {\r
+                                                              case DATE_YEAR_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 0;\r
+                                                                break;\r
+                                                              case DATE_DAY_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 3;\r
+                                                                break;\r
+                                                              case TIME_HOUR_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 0;\r
+                                                                break;\r
+                                                              case TIME_MINUTE_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 1;\r
+                                                                break;\r
+                                                              case TIME_SECOND_BITMASK:\r
+                                                                Info.mInfo.mVarOffset = 2;\r
+                                                                break;\r
+                                                              default:\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode can't get the enough varstore information");\r
+                                                                break;\r
+                                                              }\r
+                                                            } else {\r
+                                                              if ((mCVfrDataStorage.GetVarStoreType(Info.mVarStoreId) == EFI_VFR_VARSTORE_NAME) && (VarType == EFI_IFR_TYPE_UNDEFINED)) {\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support name string");\r
+                                                              }\r
+                                                              if (VarType != EFI_IFR_TYPE_UNDEFINED) {\r
+                                                                Info.mVarType = VarType;\r
+                                                                _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+                                                                Info.mVarTotalSize = VarSize;\r
+                                                              }\r
+                                                              _PCATCH(gCVfrVarDataTypeDB.GetDataTypeSize (Info.mVarType, &VarSize), L->getLine(), "Get/Set opcode can't get var type size");\r
+                                                              if (VarSize != Info.mVarTotalSize) {\r
+                                                                _PCATCH(VFR_RETURN_UNSUPPORTED, L->getLine(), "Get/Set opcode don't support data array");\r
+                                                              }\r
+                                                            }\r
+                                                            CIfrSet TSObj(L->getLine()); \r
+                                                            TSObj.SetVarInfo (&Info); \r
+                                                            delete VarIdStr; \r
+                                                            $ExpOpCount++;\r
+                                                          }\r
+                                                       >>\r
+  ;\r
+\r
 vfrExpressionTernaryOp[UINT32 & RootLevel, UINT32 & ExpOpCount] :\r
     conditionalExp[$RootLevel, $ExpOpCount]\r
   | findExp[$RootLevel, $ExpOpCount]\r
@@ -3161,6 +3391,20 @@ spanExp[UINT32 & RootLevel, UINT32 & ExpOpCount] :
   "\)"                                                 << { CIfrSpan SObj(S->getLine()); SObj.SetFlags(Flags); $ExpOpCount++; } >>\r
   ;\r
 \r
+vfrExpressionMap [UINT32 & RootLevel, UINT32 & ExpOpCount]:\r
+  L:Map                                                   \r
+  "\(" \r
+  vfrStatementExpressionSub[$RootLevel + 1, $ExpOpCount]  \r
+  ":"                                                     << { CIfrMap MObj(L->getLine()); } >>\r
+  (\r
+    vfrStatementExpression[0]\r
+    ","\r
+    vfrStatementExpression[0]\r
+    ";"\r
+  ) *\r
+  E:"\)"                                                  << { CIfrEnd EObj; EObj.SetLineNo(E->getLine()); $ExpOpCount++; } >>\r
+  ;\r
+\r
 spanFlags [UINT8 & Flags] :\r
     N:Number                                           << $Flags |= _STOU8(N->getText()); >>\r
   | "LAST_NON_MATCH"                                   << $Flags |= 0x00; >>\r
@@ -3185,8 +3429,9 @@ private:
   CVfrQuestionDB      mCVfrQuestionDB;\r
   CVfrRulesDB         mCVfrRulesDB;\r
 \r
-  CIfrOpHeader        *mCIfrOpHdr;\r
-  UINT32              mCIfrOpHdrLineNo;\r
+  CIfrOpHeader *      mCIfrOpHdr[MAX_IFR_EXPRESSION_DEPTH];\r
+  UINT32              mCIfrOpHdrLineNo[MAX_IFR_EXPRESSION_DEPTH];\r
+  UINT8               mCIfrOpHdrIndex;\r
   VOID                _SAVE_OPHDR_COND (IN CIfrOpHeader &, IN BOOLEAN, UINT32 LineNo = 0);\r
   VOID                _CLEAR_SAVED_OPHDR (VOID);\r
   BOOLEAN             _SET_SAVED_OPHDR_SCOPE (VOID);\r
@@ -3210,11 +3455,11 @@ private:
   UINT32              _GET_CURRQEST_ARRAY_SIZE();\r
 \r
 public:\r
-  VOID                _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CHAR8 *);\r
+  VOID                _PCATCH (IN INTN, IN INTN, IN ANTLRTokenPtr, IN CONST CHAR8 *);\r
   VOID                _PCATCH (IN EFI_VFR_RETURN_CODE);\r
   VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN ANTLRTokenPtr);\r
   VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32);\r
-  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CHAR8 *);\r
+  VOID                _PCATCH (IN EFI_VFR_RETURN_CODE, IN UINT32, IN CONST CHAR8 *);\r
 \r
   VOID                syn     (ANTLRAbstractToken  *, ANTLRChar *, SetWordType *, ANTLRTokenType, INT32);\r
 \r
@@ -3231,7 +3476,7 @@ public:
   EFI_FORM_ID         _STOFID (IN CHAR8 *);\r
   EFI_QUESTION_ID     _STOQID (IN CHAR8 *);\r
 \r
-  VOID                _STRCAT (IN OUT CHAR8 **, IN CHAR8 *);\r
+  VOID                _STRCAT (IN OUT CHAR8 **, IN CONST CHAR8 *);\r
 \r
   VOID                _DeclareDefaultLinearVarStore (IN UINT32);\r
   VOID                _DeclareStandardDefaultStorage (IN UINT32);\r
@@ -3259,11 +3504,11 @@ EfiVfrParser::_SAVE_OPHDR_COND (
   )\r
 {\r
   if (Cond == TRUE) {\r
-    if (mCIfrOpHdr != NULL) {\r
+    if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) {\r
       return ;\r
     }\r
-    mCIfrOpHdr       = new CIfrOpHeader(OpHdr);\r
-    mCIfrOpHdrLineNo = LineNo;\r
+    mCIfrOpHdr[mCIfrOpHdrIndex]       = new CIfrOpHeader(OpHdr);\r
+    mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = LineNo;\r
   }\r
 }\r
 \r
@@ -3272,8 +3517,8 @@ EfiVfrParser::_CLEAR_SAVED_OPHDR (
   VOID\r
   )\r
 {\r
-  mCIfrOpHdr       = NULL;\r
-  mCIfrOpHdrLineNo = 0;\r
+  mCIfrOpHdr[mCIfrOpHdrIndex]       = NULL;\r
+  mCIfrOpHdrLineNo[mCIfrOpHdrIndex] = 0;\r
 }\r
 \r
 BOOLEAN\r
@@ -3281,10 +3526,11 @@ EfiVfrParser::_SET_SAVED_OPHDR_SCOPE (
   VOID\r
   )\r
 {\r
-  if (mCIfrOpHdr != NULL) {\r
-    mCIfrOpHdr->SetScope (1);\r
+  if (mCIfrOpHdr[mCIfrOpHdrIndex] != NULL) {\r
+    mCIfrOpHdr[mCIfrOpHdrIndex]->SetScope (1);\r
     return TRUE;\r
   }\r
+\r
   //\r
   // IfrOpHdr is not set, FALSE is return.\r
   //\r
@@ -3367,7 +3613,7 @@ EfiVfrParser::_PCATCH (
   IN INTN                ReturnCode,\r
   IN INTN                ExpectCode,\r
   IN ANTLRTokenPtr       Tok,\r
-  IN CHAR8               *ErrorMsg\r
+  IN CONST CHAR8         *ErrorMsg\r
   )\r
 {\r
   if (ReturnCode != ExpectCode) {\r
@@ -3381,7 +3627,7 @@ EfiVfrParser::_PCATCH (
   IN EFI_VFR_RETURN_CODE ReturnCode\r
   )\r
 {\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode);\r
+  mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode);\r
 }\r
 \r
 VOID\r
@@ -3390,7 +3636,7 @@ EfiVfrParser::_PCATCH (
   IN ANTLRTokenPtr       Tok\r
   )\r
 {\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText());\r
+  mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, Tok->getLine(), Tok->getText());\r
 }\r
 \r
 VOID\r
@@ -3399,17 +3645,17 @@ EfiVfrParser::_PCATCH (
   IN UINT32              LineNum\r
   )\r
 {\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
+  mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum);\r
 }\r
 \r
 VOID\r
 EfiVfrParser::_PCATCH (\r
   IN EFI_VFR_RETURN_CODE ReturnCode,\r
   IN UINT32              LineNum,\r
-  IN CHAR8               *ErrorMsg\r
+  IN CONST CHAR8         *ErrorMsg\r
   )\r
 {\r
-  mParserStatus += gCVfrErrorHandle.HandleError (ReturnCode, LineNum, ErrorMsg);\r
+  mParserStatus = mParserStatus + gCVfrErrorHandle.HandleError (ReturnCode, LineNum, (CHAR8 *) ErrorMsg);\r
 }\r
 \r
 VOID\r
@@ -3638,7 +3884,7 @@ EfiVfrParser::_STOQID (
 VOID\r
 EfiVfrParser::_STRCAT (\r
   IN OUT CHAR8 **Dest,\r
-  IN CHAR8     *Src\r
+  IN CONST CHAR8 *Src\r
   )\r
 {\r
   CHAR8   *NewStr;\r
@@ -3674,6 +3920,7 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore (
   SVfrVarStorageNode    *pNode;\r
   UINT32                TypeSize;\r
   BOOLEAN               FirstNode;\r
+  CONST CHAR8           VarName[] = "Setup";\r
 \r
   FirstNode = TRUE;\r
   pNode = mCVfrDataStorage.GetBufferVarStoreList();\r
@@ -3686,9 +3933,9 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore (
     CIfrVarStore      VSObj;\r
     VSObj.SetLineNo (LineNo);\r
     VSObj.SetVarStoreId (0x1); //the first and only one Buffer Var Store\r
-    VSObj.SetSize (TypeSize);\r
+    VSObj.SetSize ((UINT16) TypeSize);\r
     //VSObj.SetName (gCVfrVarDataTypeDB.mFirstNewDataTypeName);\r
-    VSObj.SetName ("Setup");\r
+    VSObj.SetName ((CHAR8 *) VarName);\r
     VSObj.SetGuid (&mFormsetGuid);\r
 #ifdef VFREXP_DEBUG\r
     printf ("Create the default VarStoreName is %s\n", gCVfrVarDataTypeDB.mFirstNewDataTypeName);\r
@@ -3703,9 +3950,9 @@ EfiVfrParser::_DeclareDefaultFrameworkVarStore (
         CIfrVarStore      VSObj;\r
         VSObj.SetLineNo (LineNo);\r
         VSObj.SetVarStoreId (pNode->mVarStoreId);\r
-        VSObj.SetSize (pNode->mStorageInfo.mDataType->mTotalSize);\r
+        VSObj.SetSize ((UINT16) pNode->mStorageInfo.mDataType->mTotalSize);\r
         if (FirstNode) {\r
-          VSObj.SetName ("Setup");\r
+          VSObj.SetName ((CHAR8 *) VarName);\r
           FirstNode = FALSE;\r
         } else {\r
           VSObj.SetName (pNode->mVarStoreName);\r
@@ -3745,6 +3992,10 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
   UINT32            Index;\r
   CHAR8             **TypeNameList;\r
   UINT32            ListSize;\r
+  CONST CHAR8       DateName[] = "Date";\r
+  CONST CHAR8       TimeName[] = "Time";\r
+  CONST CHAR8       DateType[] = "EFI_HII_DATE";\r
+  CONST CHAR8       TimeType[] = "EFI_HII_TIME";\r
 \r
   gCVfrVarDataTypeDB.GetUserDefinedTypeNameList (&TypeNameList, &ListSize);\r
 \r
@@ -3764,7 +4015,7 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
     mCVfrDataStorage.GetVarStoreId(TypeNameList[Index], &VarStoreId);\r
     VSObj.SetVarStoreId (VarStoreId);\r
     gCVfrVarDataTypeDB.GetDataTypeSize(TypeNameList[Index], &Size);\r
-    VSObj.SetSize (Size);\r
+    VSObj.SetSize ((UINT16) Size);\r
     VSObj.SetName (TypeNameList[Index]);\r
     VSObj.SetGuid (&mFormsetGuid);\r
   }\r
@@ -3773,45 +4024,45 @@ EfiVfrParser::_DeclareDefaultLinearVarStore (
 // not required to declare Date and Time VarStore,\r
 // because code to support old format Data and Time\r
 //\r
-  if (gCVfrVarDataTypeDB.IsTypeNameDefined ("Date") == FALSE) {\r
+  if (gCVfrVarDataTypeDB.IsTypeNameDefined ((CHAR8 *) DateName) == FALSE) {\r
     UINT32            Size;\r
     EFI_VARSTORE_ID   VarStoreId;\r
     CIfrVarStore      VSObj;\r
 \r
     VSObj.SetLineNo (LineNo);\r
     mCVfrDataStorage.DeclareBufferVarStore (\r
-                       "Date",\r
+                       (CHAR8 *) DateName,\r
                        &mFormsetGuid,\r
                        &gCVfrVarDataTypeDB,\r
-                       "EFI_HII_DATE",\r
+                       (CHAR8 *) DateType,\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
-    mCVfrDataStorage.GetVarStoreId("Date", &VarStoreId);\r
+    mCVfrDataStorage.GetVarStoreId((CHAR8 *) DateName, &VarStoreId);\r
     VSObj.SetVarStoreId (VarStoreId);\r
-    gCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_DATE", &Size);\r
-    VSObj.SetSize (Size);\r
-    VSObj.SetName ("Date");\r
+    gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) DateType, &Size);\r
+    VSObj.SetSize ((UINT16) Size);\r
+    VSObj.SetName ((CHAR8 *) DateName);\r
     VSObj.SetGuid (&mFormsetGuid);\r
   }\r
 \r
-  if (gCVfrVarDataTypeDB.IsTypeNameDefined ("Time") == FALSE) {\r
+  if (gCVfrVarDataTypeDB.IsTypeNameDefined ((CHAR8 *) TimeName) == FALSE) {\r
     UINT32            Size;\r
     EFI_VARSTORE_ID   VarStoreId;\r
     CIfrVarStore      VSObj;\r
 \r
     VSObj.SetLineNo (LineNo);\r
     mCVfrDataStorage.DeclareBufferVarStore (\r
-                       "Time",\r
+                       (CHAR8 *) TimeName,\r
                        &mFormsetGuid,\r
                        &gCVfrVarDataTypeDB,\r
-                       "EFI_HII_TIME",\r
+                       (CHAR8 *) TimeType,\r
                        EFI_VARSTORE_ID_INVALID\r
                        );\r
-    mCVfrDataStorage.GetVarStoreId("Time", &VarStoreId);\r
+    mCVfrDataStorage.GetVarStoreId((CHAR8 *) TimeName, &VarStoreId);\r
     VSObj.SetVarStoreId (VarStoreId);\r
-    gCVfrVarDataTypeDB.GetDataTypeSize("EFI_HII_TIME", &Size);\r
-    VSObj.SetSize (Size);\r
-    VSObj.SetName ("Time");\r
+    gCVfrVarDataTypeDB.GetDataTypeSize((CHAR8 *) TimeType, &Size);\r
+    VSObj.SetSize ((UINT16) Size);\r
+    VSObj.SetName ((CHAR8 *) TimeName);\r
     VSObj.SetGuid (&mFormsetGuid);\r
   }\r
 }\r
@@ -3826,7 +4077,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage (
   //\r
   CIfrDefaultStore DSObj;\r
 \r
-  mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+  mCVfrDefaultStore.RegisterDefaultStore (DSObj.GetObjBinAddr(), (CHAR8 *) "Standard Defaults", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_STANDARD);\r
   DSObj.SetLineNo (LineNo);\r
   DSObj.SetDefaultName (EFI_STRING_ID_INVALID);\r
   DSObj.SetDefaultId (EFI_HII_DEFAULT_CLASS_STANDARD);\r
@@ -3836,7 +4087,7 @@ EfiVfrParser::_DeclareStandardDefaultStorage (
   //\r
   CIfrDefaultStore DSObjMF;\r
 \r
-  mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
+  mCVfrDefaultStore.RegisterDefaultStore (DSObjMF.GetObjBinAddr(), (CHAR8 *) "Standard ManuFacturing", EFI_STRING_ID_INVALID, EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r
   DSObjMF.SetLineNo (LineNo);\r
   DSObjMF.SetDefaultName (EFI_STRING_ID_INVALID);\r
   DSObjMF.SetDefaultId (EFI_HII_DEFAULT_CLASS_MANUFACTURING);\r