]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/C/VfrCompile/VfrFormPkg.cpp
Sync BaseTools Trunk (version r2387) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / VfrFormPkg.cpp
index 3c82b53c79e759cf47de499e3ee9f74129db76cb..94ad55b1bb4ab0f6a55b95a8c703376aaf19de4c 100644 (file)
@@ -561,22 +561,24 @@ CFormPkg::DeclarePendingQuestion (
   CHAR8          *VarStr;\r
   UINT32         ArrayIdx;\r
   CHAR8          FName[MAX_NAME_LEN];\r
+  CHAR8          *SName;\r
+  CHAR8          *NewStr;\r
   EFI_VFR_RETURN_CODE  ReturnCode;\r
   EFI_VFR_VARSTORE_TYPE VarStoreType  = EFI_VFR_VARSTORE_INVALID;\r
 \r
+  //\r
+  // Declare all questions as Numeric in DisableIf True\r
+  //\r
+  // DisableIf\r
+  CIfrDisableIf DIObj;\r
+  DIObj.SetLineNo (LineNo);\r
+  \r
+  //TrueOpcode\r
+  CIfrTrue TObj (LineNo);\r
+\r
+  // Declare Numeric qeustion for each undefined question.\r
   for (pNode = PendingAssignList; pNode != NULL; pNode = pNode->mNext) {\r
     if (pNode->mFlag == PENDING) {\r
-      //\r
-      //  declare this question as Numeric in SuppressIf True\r
-      //\r
-      // SuppressIf\r
-      CIfrSuppressIf SIObj;\r
-      SIObj.SetLineNo (LineNo);\r
-      \r
-      //TrueOpcode\r
-      CIfrTrue TObj (LineNo);\r
-      \r
-      //Numeric qeustion\r
       CIfrNumeric CNObj;\r
       EFI_VARSTORE_INFO Info; \r
          EFI_QUESTION_ID   QId   = EFI_QUESTION_ID_INVALID;\r
@@ -639,7 +641,16 @@ CFormPkg::DeclarePendingQuestion (
           ReturnCode = lCVfrDataStorage.GetEfiVarStoreInfo (&Info);\r
         } else if (VarStoreType == EFI_VFR_VARSTORE_BUFFER) {\r
           VarStr = pNode->mKey;\r
-          ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (VarStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);\r
+          //convert VarStr with store name to VarStr with structure name\r
+          ReturnCode = lCVfrDataStorage.GetBufferVarStoreDataTypeName (FName, &SName);\r
+          if (ReturnCode == VFR_RETURN_SUCCESS) {\r
+            NewStr = new CHAR8[strlen (VarStr) + strlen (SName) + 1];\r
+            NewStr[0] = '\0';\r
+            strcpy (NewStr, SName);\r
+            strcat (NewStr, VarStr + strlen (FName));\r
+            ReturnCode = lCVfrVarDataTypeDB.GetDataFieldInfo (NewStr, Info.mInfo.mVarOffset, Info.mVarType, Info.mVarTotalSize);\r
+            delete NewStr;\r
+          }\r
         } else {\r
           ReturnCode = VFR_RETURN_UNSUPPORTED;\r
         }\r
@@ -651,13 +662,20 @@ CFormPkg::DeclarePendingQuestion (
 \r
       CNObj.SetQuestionId (QId);\r
       CNObj.SetVarStoreInfo (&Info);\r
+      //\r
+      // Numeric doesn't support BOOLEAN data type. \r
+      // BOOLEAN type has the same data size to UINT8. \r
+      //\r
+      if (Info.mVarType == EFI_IFR_TYPE_BOOLEAN) {\r
+        Info.mVarType = EFI_IFR_TYPE_NUM_SIZE_8;\r
+      }\r
       CNObj.SetFlags (0, Info.mVarType);\r
 \r
       //\r
       // For undefined Efi VarStore type question\r
       // Append the extended guided opcode to contain VarName\r
       //\r
-      if (VarStoreType == EFI_VFR_VARSTORE_EFI) {\r
+      if (VarStoreType == EFI_VFR_VARSTORE_EFI || VfrCompatibleMode) {\r
         CIfrVarEqName CVNObj (QId, Info.mInfo.mVarName);\r
         CVNObj.SetLineNo (LineNo);\r
       }\r
@@ -667,13 +685,15 @@ CFormPkg::DeclarePendingQuestion (
       //\r
       CIfrEnd CEObj; \r
       CEObj.SetLineNo (LineNo);\r
-      //\r
-      // End for SuppressIf\r
-      //\r
-      CIfrEnd SEObj;\r
-      SEObj.SetLineNo (LineNo);\r
     }\r
   }\r
+\r
+  //\r
+  // End for DisableIf\r
+  //\r
+  CIfrEnd SEObj;\r
+  SEObj.SetLineNo (LineNo);\r
+\r
   return VFR_RETURN_SUCCESS;\r
 }\r
 \r
@@ -1306,6 +1326,7 @@ static struct {
   { sizeof (EFI_IFR_GUID), 0 },                // EFI_IFR_GUID_OP\r
   { sizeof (EFI_IFR_SECURITY), 0 },            // EFI_IFR_SECURITY_OP - 0x60\r
   { sizeof (EFI_IFR_MODAL), 0},                // EFI_IFR_MODAL_OP - 0x61\r
+  { sizeof (EFI_IFR_REFRESH_ID), 0},           // EFI_IFR_REFRESH_ID_OP - 0x62\r
 };\r
 \r
 #ifdef CIFROBJ_DEUBG\r
@@ -1328,7 +1349,7 @@ static struct {
   "EFI_IFR_STRING_REF1","EFI_IFR_STRING_REF2",          "EFI_IFR_CONDITIONAL",   "EFI_IFR_QUESTION_REF3",   "EFI_IFR_ZERO",          "EFI_IFR_ONE",\r
   "EFI_IFR_ONES",       "EFI_IFR_UNDEFINED",            "EFI_IFR_LENGTH",        "EFI_IFR_DUP",             "EFI_IFR_THIS",          "EFI_IFR_SPAN",\r
   "EFI_IFR_VALUE",      "EFI_IFR_DEFAULT",              "EFI_IFR_DEFAULTSTORE",  "EFI_IFR_FORM_MAP",        "EFI_IFR_CATENATE",      "EFI_IFR_GUID",\r
-  "EFI_IFR_SECURITY",   "EFI_IFR_MODAL",\r
+  "EFI_IFR_SECURITY",   "EFI_IFR_MODAL",                "EFI_IFR_REFRESH_ID",\r
 };\r
 \r
 VOID\r