]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
Fix GCC build fail.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Presentation.c
index e33081422bbfb5d6d2f17193d8299c66df36d5a0..bad8b7b122ea72d567fc27a599c659ef607bb2f9 100644 (file)
@@ -21,10 +21,9 @@ EFI_GUID           mCurrentFormSetGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};
 UINT16             mCurrentFormId = 0;\r
 EFI_EVENT          mValueChangedEvent = NULL;\r
 LIST_ENTRY         mRefreshEventList = INITIALIZE_LIST_HEAD_VARIABLE (mRefreshEventList);\r
-UINT32             gBrowserStatus = BROWSER_SUCCESS;\r
-CHAR16             *gErrorInfo;\r
 UINT16             mCurFakeQestId;\r
 FORM_DISPLAY_ENGINE_FORM gDisplayFormData;\r
+BOOLEAN            mFinishRetrieveCall = FALSE;\r
 \r
 /**\r
   Evaluate all expressions in a Form.\r
@@ -225,162 +224,6 @@ CreateRefreshEvent (
   InsertTailList(&mRefreshEventList, &EventNode->Link);\r
 }\r
 \r
-/**\r
-  Perform value check for a question.\r
-  \r
-  @param  Question       The question need to do check.\r
-  @param  Type           Condition type need to check.\r
-  @param  ErrorInfo      Return info about the error.\r
-  \r
-  @retval  The check result.\r
-**/\r
-UINT32\r
-ConditionCheck (\r
-  IN  FORM_BROWSER_STATEMENT        *Question,\r
-  IN  UINT8                         Type,\r
-  OUT STATEMENT_ERROR_INFO          *ErrorInfo\r
-  )\r
-{\r
-  EFI_STATUS              Status;\r
-  LIST_ENTRY              *Link;\r
-  FORM_EXPRESSION         *Expression;\r
-  LIST_ENTRY              *ListHead;\r
-  UINT32                  RetVal;\r
-\r
-  RetVal     = STATEMENT_VALID;\r
-  ListHead   = NULL;\r
-\r
-  switch (Type) {\r
-  case EFI_HII_EXPRESSION_INCONSISTENT_IF:\r
-    ListHead = &Question->InconsistentListHead;\r
-    break;\r
-\r
-  case EFI_HII_EXPRESSION_WARNING_IF:\r
-    ListHead = &Question->WarningListHead;\r
-    break;\r
-\r
-  default:\r
-    ASSERT (FALSE);\r
-    return RetVal;\r
-  }\r
-\r
-  ASSERT (ListHead != NULL);\r
-  Link = GetFirstNode (ListHead);\r
-  while (!IsNull (ListHead, Link)) {\r
-    Expression = FORM_EXPRESSION_FROM_LINK (Link);\r
-    Link = GetNextNode (ListHead, Link);\r
-\r
-    //\r
-    // Evaluate the expression\r
-    //\r
-    Status = EvaluateExpression (gCurrentSelection->FormSet, gCurrentSelection->Form, Expression);\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    if ((Expression->Result.Type == EFI_IFR_TYPE_BOOLEAN) && Expression->Result.Value.b) {\r
-      ErrorInfo->StringId = Expression->Error;\r
-      switch (Type) {\r
-      case EFI_HII_EXPRESSION_INCONSISTENT_IF:\r
-        ErrorInfo->TimeOut  = 0;\r
-        RetVal              = INCOSISTENT_IF_TRUE;\r
-        break;\r
-\r
-      case EFI_HII_EXPRESSION_WARNING_IF:\r
-        ErrorInfo->TimeOut  = Expression->TimeOut;\r
-        RetVal              = WARNING_IF_TRUE;\r
-        break;\r
-\r
-      default:\r
-        ASSERT (FALSE);\r
-        break;\r
-      }\r
-      break;\r
-    }\r
-  }\r
-\r
-  return RetVal;\r
-}\r
-\r
-/**\r
-  Perform value check for a question.\r
-  \r
-  @param  Form       Form where Statement is in.\r
-  @param  Statement  Value will check for it.\r
-  @param  InputValue New value will be checked.\r
-  @param  ErrorInfo  Return the error info for this check.\r
-  \r
-  @retval TRUE   Input Value is valid.\r
-  @retval FALSE  Input Value is invalid.\r
-**/\r
-UINT32\r
-EFIAPI\r
-QuestionCheck (\r
-  IN  FORM_DISPLAY_ENGINE_FORM      *Form,\r
-  IN  FORM_DISPLAY_ENGINE_STATEMENT *Statement,\r
-  IN  EFI_HII_VALUE                 *InputValue,\r
-  OUT STATEMENT_ERROR_INFO          *ErrorInfo\r
-  )\r
-{\r
-  FORM_BROWSER_STATEMENT  *Question;\r
-  EFI_HII_VALUE           BackUpValue;\r
-  UINT8                   *BackUpBuffer;\r
-  UINT32                  RetVal;\r
-\r
-  BackUpBuffer = NULL;\r
-  RetVal       = STATEMENT_VALID;\r
-\r
-  ASSERT (Form != NULL && Statement != NULL && InputValue != NULL && ErrorInfo != NULL);\r
-\r
-  Question = GetBrowserStatement(Statement);\r
-  ASSERT (Question != NULL);\r
-\r
-  //\r
-  // Back up the quesion value.\r
-  //\r
-  switch (Question->Operand) {\r
-  case EFI_IFR_ORDERED_LIST_OP:\r
-    BackUpBuffer = AllocateCopyPool (Question->StorageWidth, Question->BufferValue);\r
-    ASSERT (BackUpBuffer != NULL);\r
-    CopyMem (Question->BufferValue, InputValue->Buffer, Question->StorageWidth);\r
-    break;\r
-\r
-  default:\r
-    CopyMem (&BackUpValue, &Question->HiiValue, sizeof (EFI_HII_VALUE));\r
-    CopyMem (&Question->HiiValue, InputValue, sizeof (EFI_HII_VALUE));\r
-    break;\r
-  }\r
-\r
-  //\r
-  // Do the inconsistentif check.\r
-  //\r
-  if (!IsListEmpty (&Question->InconsistentListHead)) {\r
-    RetVal = ConditionCheck(Question, EFI_HII_EXPRESSION_INCONSISTENT_IF, ErrorInfo);\r
-  }\r
-\r
-  //\r
-  // Do the warningif check.\r
-  //\r
-  if (RetVal == STATEMENT_VALID && !IsListEmpty (&Question->WarningListHead)) {\r
-    RetVal = ConditionCheck(Question, EFI_HII_EXPRESSION_WARNING_IF, ErrorInfo);\r
-  }\r
-\r
-  //\r
-  // Restore the quesion value.\r
-  //\r
-  switch (Question->Operand) {\r
-  case EFI_IFR_ORDERED_LIST_OP:\r
-    CopyMem (Question->BufferValue, BackUpBuffer, Question->StorageWidth);\r
-    break;\r
-\r
-  default:\r
-    CopyMem (&Question->HiiValue, &BackUpValue, sizeof (EFI_HII_VALUE));\r
-    break;\r
-  }\r
-\r
-  return RetVal;\r
-}\r
-\r
 /**\r
 \r
   Initialize the Display statement structure data.\r
@@ -490,13 +333,6 @@ InitializeDisplayStatement (
     DisplayStatement->PasswordCheck = PasswordCheck;\r
   }\r
 \r
-  //\r
-  // Save the validate check question for later use.\r
-  //\r
-  if (!IsListEmpty (&Statement->InconsistentListHead) || !IsListEmpty (&Statement->WarningListHead)) {\r
-    DisplayStatement->ValidateQuestion = QuestionCheck;\r
-  }\r
-\r
   //\r
   // If this statement is nest in the subtitle, insert to the host statement.\r
   // else insert to the form it belongs to.\r
@@ -857,12 +693,6 @@ UpdateDisplayFormData (
   gDisplayFormData.FormRefreshEvent     = NULL;\r
   gDisplayFormData.HighLightedStatement = NULL;\r
 \r
-  gDisplayFormData.BrowserStatus = gBrowserStatus;\r
-  gDisplayFormData.ErrorString   = gErrorInfo;\r
-\r
-  gBrowserStatus = BROWSER_SUCCESS;\r
-  gErrorInfo     = NULL;\r
-\r
   UpdateDataChangedFlag ();\r
 \r
   AddStatementToDisplayForm ();\r
@@ -1097,7 +927,7 @@ ProcessAction (
   if ((Action & BROWSER_ACTION_SUBMIT) == BROWSER_ACTION_SUBMIT) {\r
     Status = SubmitForm (gCurrentSelection->FormSet, gCurrentSelection->Form, gBrowserSettingScope);\r
     if (EFI_ERROR (Status)) {\r
-      gBrowserStatus = BROWSER_SUBMIT_FAIL;\r
+      PopupErrorMessage(BROWSER_SUBMIT_FAIL, NULL, NULL);\r
     }\r
   }\r
 \r
@@ -1473,7 +1303,7 @@ ProcessGotoOpCode (
       //\r
       // Not found the EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL protocol.\r
       //\r
-      gBrowserStatus = BROWSER_PROTOCOL_NOT_FOUND;\r
+      PopupErrorMessage(BROWSER_PROTOCOL_NOT_FOUND, NULL, NULL);\r
       FreePool (StringPtr);\r
       return Status;\r
     }\r
@@ -1550,7 +1380,7 @@ ProcessGotoOpCode (
         //\r
         // Form is suppressed. \r
         //\r
-        gBrowserStatus = BROWSER_FORM_SUPPRESS;\r
+        PopupErrorMessage(BROWSER_FORM_SUPPRESS, NULL, NULL);\r
         return EFI_SUCCESS;\r
       }\r
     }\r
@@ -1957,70 +1787,6 @@ IsNvUpdateRequiredForForm (
   return FALSE;\r
 }\r
 \r
-/**\r
-  Check whether the storage data for current form set is changed.\r
-\r
-  @param  FormSet           FormSet data structure.\r
-\r
-  @retval TRUE              Data is changed.\r
-  @retval FALSE             Data is not changed.\r
-**/\r
-BOOLEAN \r
-IsStorageDataChangedForFormSet (\r
-  IN FORM_BROWSER_FORMSET             *FormSet\r
-  )\r
-{\r
-  LIST_ENTRY              *Link;\r
-  FORMSET_STORAGE         *Storage;\r
-  BROWSER_STORAGE         *BrowserStorage;\r
-  CHAR16                  *ConfigRespNew;\r
-  CHAR16                  *ConfigRespOld;\r
-  BOOLEAN                 RetVal;\r
-\r
-  RetVal        = FALSE;\r
-  ConfigRespNew = NULL;\r
-  ConfigRespOld = NULL;\r
-\r
-  //\r
-  // Request current settings from Configuration Driver\r
-  //\r
-  Link = GetFirstNode (&FormSet->StorageListHead);\r
-  while (!IsNull (&FormSet->StorageListHead, Link)) {\r
-    Storage = FORMSET_STORAGE_FROM_LINK (Link);\r
-    Link = GetNextNode (&FormSet->StorageListHead, Link);\r
-\r
-    BrowserStorage = Storage->BrowserStorage;\r
-\r
-    if (BrowserStorage->Type == EFI_HII_VARSTORE_EFI_VARIABLE) {\r
-      continue;\r
-    }\r
-\r
-    if (Storage->ElementCount == 0) {\r
-      continue;\r
-    }\r
-\r
-    StorageToConfigResp (BrowserStorage, &ConfigRespNew, Storage->ConfigRequest, TRUE);\r
-    StorageToConfigResp (BrowserStorage, &ConfigRespOld, Storage->ConfigRequest, FALSE);\r
-    ASSERT (ConfigRespNew != NULL && ConfigRespOld != NULL);\r
-\r
-    if (StrCmp (ConfigRespNew, ConfigRespOld) != 0) {\r
-      RetVal = TRUE;\r
-    }\r
-\r
-    FreePool (ConfigRespNew);\r
-    ConfigRespNew = NULL;\r
-\r
-    FreePool (ConfigRespOld);\r
-    ConfigRespOld = NULL;\r
-\r
-    if (RetVal) {\r
-      break;\r
-    }\r
-  }\r
-\r
-  return RetVal;\r
-}\r
-\r
 /**\r
   Find menu which will show next time.\r
 \r
@@ -2156,6 +1922,7 @@ ProcessCallBackFunction (
   BROWSER_SETTING_SCOPE           SettingLevel;\r
   EFI_IFR_TYPE_VALUE              BackUpValue;\r
   UINT8                           *BackUpBuffer;\r
+  CHAR16                          *NewString;\r
 \r
   ConfigAccess = FormSet->ConfigAccess;\r
   SubmitFormIsRequired  = FALSE;\r
@@ -2225,10 +1992,27 @@ ProcessCallBackFunction (
                              &ActionRequest\r
                              );\r
     if (!EFI_ERROR (Status)) {\r
+      //\r
+      // Need to sync the value between Statement->HiiValue->Value and Statement->BufferValue\r
+      //\r
+      if (HiiValue->Type == EFI_IFR_TYPE_STRING) {\r
+        NewString = GetToken (Statement->HiiValue.Value.string, FormSet->HiiHandle);\r
+        ASSERT (NewString != NULL);\r
+\r
+        ASSERT (StrLen (NewString) * sizeof (CHAR16) <= Statement->StorageWidth);\r
+        if (StrLen (NewString) * sizeof (CHAR16) <= Statement->StorageWidth) {\r
+          CopyMem (Statement->BufferValue, NewString, StrSize (NewString));\r
+        } else {\r
+          CopyMem (Statement->BufferValue, NewString, Statement->StorageWidth);\r
+        }\r
+        FreePool (NewString);\r
+      }\r
+\r
       //\r
       // Only for EFI_BROWSER_ACTION_CHANGED need to handle this ActionRequest.\r
       //\r
-      if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
+      switch (Action) {\r
+      case EFI_BROWSER_ACTION_CHANGED:\r
         switch (ActionRequest) {\r
         case EFI_BROWSER_ACTION_REQUEST_RESET:\r
           DiscardFormIsRequired = TRUE;\r
@@ -2271,14 +2055,32 @@ ProcessCallBackFunction (
         default:\r
           break;\r
         }\r
-      }\r
+        break;\r
 \r
-      //\r
-      // According the spec, return value from call back of "changing" and \r
-      // "retrieve" should update to the question's temp buffer.\r
-      //\r
-      if (Action == EFI_BROWSER_ACTION_CHANGING || Action == EFI_BROWSER_ACTION_RETRIEVE) {\r
+      case EFI_BROWSER_ACTION_CHANGING:\r
+        //\r
+        // Do the question validation.\r
+        //\r
+        Status = ValueChangedValidation (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement);\r
+        if (!EFI_ERROR (Status)) {\r
+          //\r
+          // According the spec, return value from call back of "changing" and \r
+          // "retrieve" should update to the question's temp buffer.\r
+          //\r
+          SetQuestionValue(FormSet, Form, Statement, GetSetValueWithEditBuffer);\r
+        }\r
+        break;\r
+\r
+      case EFI_BROWSER_ACTION_RETRIEVE:\r
+        //\r
+        // According the spec, return value from call back of "changing" and \r
+        // "retrieve" should update to the question's temp buffer.\r
+        //\r
         SetQuestionValue(FormSet, Form, Statement, GetSetValueWithEditBuffer);\r
+        break;\r
+\r
+      default:\r
+        break;\r
       }\r
     } else {\r
       //\r
@@ -2292,8 +2094,14 @@ ProcessCallBackFunction (
         } else {\r
           CopyMem (&HiiValue->Value, &BackUpValue, sizeof (EFI_IFR_TYPE_VALUE));\r
         }\r
-\r
-        SetQuestionValue(FormSet, Form, Statement, GetSetValueWithEditBuffer);\r
+        \r
+        //\r
+        // Do the question validation.\r
+        //\r
+        Status = ValueChangedValidation (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement);\r
+        if (!EFI_ERROR (Status)) {\r
+          SetQuestionValue(FormSet, Form, Statement, GetSetValueWithEditBuffer);\r
+        }\r
       }\r
 \r
       //\r
@@ -2341,6 +2149,7 @@ ProcessCallBackFunction (
 \r
   @param ConfigAccess          The config access protocol produced by the hii driver.\r
   @param Statement             The Question which need to call.\r
+  @param FormSet               The formset this question belong to.\r
 \r
   @retval EFI_SUCCESS          The call back function excutes successfully.\r
   @return Other value if the call back function failed to excute.  \r
@@ -2348,18 +2157,20 @@ ProcessCallBackFunction (
 EFI_STATUS \r
 ProcessRetrieveForQuestion (\r
   IN     EFI_HII_CONFIG_ACCESS_PROTOCOL  *ConfigAccess,\r
-  IN     FORM_BROWSER_STATEMENT          *Statement\r
+  IN     FORM_BROWSER_STATEMENT          *Statement,\r
+  IN     FORM_BROWSER_FORMSET            *FormSet\r
   )\r
 {\r
   EFI_STATUS                      Status;\r
   EFI_BROWSER_ACTION_REQUEST      ActionRequest;\r
   EFI_HII_VALUE                   *HiiValue;\r
   EFI_IFR_TYPE_VALUE              *TypeValue;\r
+  CHAR16                          *NewString;\r
 \r
   Status                = EFI_SUCCESS;\r
   ActionRequest         = EFI_BROWSER_ACTION_REQUEST_NONE;\r
-    \r
-  if ((Statement->QuestionFlags & EFI_IFR_FLAG_CALLBACK) != EFI_IFR_FLAG_CALLBACK) {\r
+\r
+  if (((Statement->QuestionFlags & EFI_IFR_FLAG_CALLBACK) != EFI_IFR_FLAG_CALLBACK) || ConfigAccess == NULL) {\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
@@ -2381,6 +2192,19 @@ ProcessRetrieveForQuestion (
                            TypeValue,\r
                            &ActionRequest\r
                            );\r
+  if (!EFI_ERROR (Status) && HiiValue->Type == EFI_IFR_TYPE_STRING) {\r
+    NewString = GetToken (Statement->HiiValue.Value.string, FormSet->HiiHandle);\r
+    ASSERT (NewString != NULL);\r
+\r
+    ASSERT (StrLen (NewString) * sizeof (CHAR16) <= Statement->StorageWidth);\r
+    if (StrLen (NewString) * sizeof (CHAR16) <= Statement->StorageWidth) {\r
+      CopyMem (Statement->BufferValue, NewString, StrSize (NewString));\r
+    } else {\r
+      CopyMem (Statement->BufferValue, NewString, Statement->StorageWidth);\r
+    }\r
+    FreePool (NewString);\r
+  }\r
+\r
   return Status;\r
 }\r
 \r
@@ -2425,11 +2249,6 @@ SetupBrowser (
     return Status;\r
   }\r
 \r
-  if ((Selection->Handle != mCurrentHiiHandle) ||\r
-      (!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid))) {\r
-    gFinishRetrieveCall = FALSE;\r
-  }\r
-\r
   //\r
   // Initialize current settings of Questions in this FormSet\r
   //\r
@@ -2486,7 +2305,7 @@ SetupBrowser (
         //\r
         // Form is suppressed. \r
         //\r
-        gBrowserStatus = BROWSER_FORM_SUPPRESS;\r
+        PopupErrorMessage(BROWSER_FORM_SUPPRESS, NULL, NULL);\r
         Status = EFI_NOT_FOUND;\r
         goto Done;\r
       }\r
@@ -2497,10 +2316,14 @@ SetupBrowser (
     // for each question with callback flag.\r
     // New form may be the first form, or the different form after another form close.\r
     //\r
-    if ((ConfigAccess != NULL) &&\r
-        ((Selection->Handle != mCurrentHiiHandle) ||\r
+    if (((Selection->Handle != mCurrentHiiHandle) ||\r
         (!CompareGuid (&Selection->FormSetGuid, &mCurrentFormSetGuid)) ||\r
         (Selection->FormId != mCurrentFormId))) {\r
+      //\r
+      // Update Retrieve flag.\r
+      //\r
+      mFinishRetrieveCall = FALSE;\r
+\r
       //\r
       // Keep current form information\r
       //\r
@@ -2508,18 +2331,20 @@ SetupBrowser (
       CopyGuid (&mCurrentFormSetGuid, &Selection->FormSetGuid);\r
       mCurrentFormId      = Selection->FormId;\r
 \r
-      Status = ProcessCallBackFunction (Selection, gCurrentSelection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE);\r
-      if (EFI_ERROR (Status)) {\r
-        goto Done;\r
-      }\r
+      if (ConfigAccess != NULL) {\r
+        Status = ProcessCallBackFunction (Selection, Selection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_FORM_OPEN, FALSE);\r
+        if (EFI_ERROR (Status)) {\r
+          goto Done;\r
+        }\r
 \r
-      //\r
-      // IFR is updated during callback of open form, force to reparse the IFR binary\r
-      //\r
-      if (mHiiPackageListUpdated) {\r
-        Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
-        mHiiPackageListUpdated = FALSE;\r
-        break;\r
+        //\r
+        // IFR is updated during callback of open form, force to reparse the IFR binary\r
+        //\r
+        if (mHiiPackageListUpdated) {\r
+          Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
+          mHiiPackageListUpdated = FALSE;\r
+          break;\r
+        }\r
       }\r
     }\r
 \r
@@ -2531,18 +2356,27 @@ SetupBrowser (
       goto Done;\r
     }\r
 \r
-    //\r
-    // Finish call RETRIEVE callback for this formset.\r
-    //\r
-    gFinishRetrieveCall = TRUE;\r
+    if (!mFinishRetrieveCall) {\r
+      //\r
+      // Finish call RETRIEVE callback for this form.\r
+      //\r
+      mFinishRetrieveCall = TRUE;\r
 \r
-    //\r
-    // IFR is updated during callback of read value, force to reparse the IFR binary\r
-    //\r
-    if (mHiiPackageListUpdated) {\r
-      Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
-      mHiiPackageListUpdated = FALSE;\r
-      break;\r
+      if (ConfigAccess != NULL) {\r
+        Status = ProcessCallBackFunction (Selection, Selection->FormSet, Selection->Form, NULL, EFI_BROWSER_ACTION_RETRIEVE, FALSE);\r
+        if (EFI_ERROR (Status)) {\r
+          goto Done;\r
+        }\r
+\r
+        //\r
+        // IFR is updated during callback of open form, force to reparse the IFR binary\r
+        //\r
+        if (mHiiPackageListUpdated) {\r
+          Selection->Action = UI_ACTION_REFRESH_FORMSET;\r
+          mHiiPackageListUpdated = FALSE;\r
+          break;\r
+        }\r
+      }\r
     }\r
 \r
     //\r
@@ -2582,18 +2416,28 @@ SetupBrowser (
           }\r
         }\r
 \r
+        //\r
+        // Verify whether question value has checked, update the ValueChanged flag in Question.\r
+        //\r
+        IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer);\r
+\r
         if (!EFI_ERROR (Status) && Statement->Operand != EFI_IFR_REF_OP) {\r
           ProcessCallBackFunction(Selection, Selection->FormSet, Selection->Form, Statement, EFI_BROWSER_ACTION_CHANGED, FALSE);\r
         }\r
-      } else if (Statement->Operand != EFI_IFR_PASSWORD_OP) {\r
-        SetQuestionValue (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithEditBuffer);\r
+      } else {\r
+        //\r
+        // Do the question validation.\r
+        //\r
+        Status = ValueChangedValidation (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement);\r
+        if (!EFI_ERROR (Status) && (Statement->Operand != EFI_IFR_PASSWORD_OP)) {\r
+          SetQuestionValue (gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithEditBuffer);\r
+          //\r
+          // Verify whether question value has checked, update the ValueChanged flag in Question.\r
+          //\r
+          IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer);\r
+        }\r
       }\r
 \r
-      //\r
-      // Verify whether question value has checked, update the ValueChanged flag in Question.\r
-      //\r
-      IsQuestionValueChanged(gCurrentSelection->FormSet, gCurrentSelection->Form, Statement, GetSetValueWithBuffer);\r
-\r
       //\r
       // If question has EFI_IFR_FLAG_RESET_REQUIRED flag and without storage and process question success till here, \r
       // trig the gResetFlag.\r