]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/DisplayEngineDxe/ProcessOptions.c
MdeModulePkg/DisplayEngine: Add Debug message to show mismatch menu info
[mirror_edk2.git] / MdeModulePkg / Universal / DisplayEngineDxe / ProcessOptions.c
index e7306f6d04fca92ce294667fd43f4a50efc4eed8..c02e36a63ad3ce50e6b357a636d518f6e2a731e1 100644 (file)
@@ -913,6 +913,116 @@ PasswordProcess (
   return Status;\r
 }\r
 \r
+/**\r
+  Print some debug message about mismatched menu info.\r
+\r
+  @param  MenuOption             The MenuOption for this Question.\r
+\r
+**/\r
+VOID\r
+PrintMismatchMenuInfo (\r
+  IN  UI_MENU_OPTION              *MenuOption\r
+)\r
+{\r
+  CHAR16                          *FormTitleStr;\r
+  CHAR16                          *FormSetTitleStr;\r
+  CHAR16                          *OneOfOptionStr;\r
+  CHAR16                          *QuestionName;\r
+  LIST_ENTRY                      *Link;\r
+  FORM_DISPLAY_ENGINE_STATEMENT   *Question;\r
+  EFI_IFR_ORDERED_LIST            *OrderList;\r
+  UINT8                           Index;\r
+  EFI_HII_VALUE                   HiiValue;\r
+  EFI_HII_VALUE                   *QuestionValue;\r
+  DISPLAY_QUESTION_OPTION         *Option;\r
+  UINT8                           *ValueArray;\r
+  UINT8                           ValueType;\r
+  EFI_IFR_FORM_SET                *FormsetBuffer;\r
+  UINTN                           FormsetBufferSize;\r
+\r
+  Question = MenuOption->ThisTag;\r
+  HiiGetFormSetFromHiiHandle (gFormData->HiiHandle, &FormsetBuffer, &FormsetBufferSize);\r
+\r
+  FormSetTitleStr = GetToken (FormsetBuffer->FormSetTitle, gFormData->HiiHandle);\r
+  FormTitleStr = GetToken (gFormData->FormTitle, gFormData->HiiHandle);\r
+\r
+  DEBUG ((DEBUG_ERROR, "\n[%a]: Mismatch Formset    : Formset Guid = %g,  FormSet title = %s\n", gEfiCallerBaseName, &gFormData->FormSetGuid, FormSetTitleStr));\r
+  DEBUG ((DEBUG_ERROR, "[%a]: Mismatch Form       : FormId = %d,  Form title = %s.\n", gEfiCallerBaseName, gFormData->FormId, FormTitleStr));\r
+\r
+  if (Question->OpCode->OpCode == EFI_IFR_ORDERED_LIST_OP) {\r
+    QuestionName = GetToken (((EFI_IFR_ORDERED_LIST*)MenuOption->ThisTag->OpCode)->Question.Header.Prompt, gFormData->HiiHandle);\r
+    Link = GetFirstNode (&Question->OptionListHead);\r
+    Option = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);\r
+    ValueType = Option->OptionOpCode->Type;\r
+    DEBUG ((DEBUG_ERROR, "[%a]: Mismatch Error      : OrderedList value in the array doesn't match with option value.\n", gEfiCallerBaseName));\r
+    DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OrderedList: Name = %s.\n", gEfiCallerBaseName, QuestionName));\r
+    DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OrderedList: OrderedList array value :\n", gEfiCallerBaseName));\r
+\r
+    OrderList = (EFI_IFR_ORDERED_LIST *) Question->OpCode;\r
+    for (Index = 0; Index < OrderList->MaxContainers; Index++) {\r
+      ValueArray = Question->CurrentValue.Buffer;\r
+      HiiValue.Value.u64 = GetArrayData (ValueArray, ValueType, Index);\r
+      DEBUG ((DEBUG_ERROR, "                                       Value[%d] =%ld.\n", Index, HiiValue.Value.u64));\r
+    }\r
+  } else if (Question->OpCode->OpCode == EFI_IFR_ONE_OF_OP) {\r
+    QuestionName = GetToken (((EFI_IFR_ONE_OF*)MenuOption->ThisTag->OpCode)->Question.Header.Prompt, gFormData->HiiHandle);\r
+    QuestionValue = &Question->CurrentValue;\r
+    DEBUG ((DEBUG_ERROR, "[%a]: Mismatch Error      : OneOf value doesn't match with option value.\n", gEfiCallerBaseName));\r
+    DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OneOf      : Name = %s.\n", gEfiCallerBaseName, QuestionName));\r
+    switch (QuestionValue->Type) {\r
+      case EFI_IFR_TYPE_NUM_SIZE_64:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OneOf      : OneOf value = %ld.\n",gEfiCallerBaseName, QuestionValue->Value.u64));\r
+        break;\r
+\r
+      case EFI_IFR_TYPE_NUM_SIZE_32:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OneOf      : OneOf value = %d.\n",gEfiCallerBaseName, QuestionValue->Value.u32));\r
+        break;\r
+\r
+      case EFI_IFR_TYPE_NUM_SIZE_16:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OneOf      : OneOf value = %d.\n",gEfiCallerBaseName, QuestionValue->Value.u16));\r
+        break;\r
+\r
+      case EFI_IFR_TYPE_NUM_SIZE_8:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Mismatch OneOf      : OneOf value = %d.\n",gEfiCallerBaseName, QuestionValue->Value.u8));\r
+        break;\r
+\r
+      default:\r
+        ASSERT (FALSE);\r
+        break;\r
+    }\r
+  }\r
+\r
+  Index = 0;\r
+  Link = GetFirstNode (&Question->OptionListHead);\r
+  while (!IsNull (&Question->OptionListHead, Link)) {\r
+    Option = DISPLAY_QUESTION_OPTION_FROM_LINK (Link);\r
+    OneOfOptionStr = GetToken (Option->OptionOpCode->Option, gFormData->HiiHandle);\r
+    switch (Option->OptionOpCode->Type) {\r
+      case EFI_IFR_TYPE_NUM_SIZE_64:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Option %d            : Option Value = %ld,  Option Name = %s.\n",gEfiCallerBaseName, Index, Option->OptionOpCode->Value.u64, OneOfOptionStr));\r
+        break;\r
+\r
+      case EFI_IFR_TYPE_NUM_SIZE_32:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Option %d            : Option Value = %d,  Option Name = %s.\n",gEfiCallerBaseName, Index, Option->OptionOpCode->Value.u32, OneOfOptionStr));\r
+        break;\r
+\r
+      case EFI_IFR_TYPE_NUM_SIZE_16:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Option %d            : Option Value = %d,  Option Name = %s.\n",gEfiCallerBaseName, Index, Option->OptionOpCode->Value.u16, OneOfOptionStr));\r
+        break;\r
+\r
+      case EFI_IFR_TYPE_NUM_SIZE_8:\r
+        DEBUG ((DEBUG_ERROR, "[%a]: Option %d            : Option Value = %d,  Option Name = %s.\n",gEfiCallerBaseName, Index, Option->OptionOpCode->Value.u8, OneOfOptionStr));\r
+        break;\r
+\r
+      default:\r
+        ASSERT (FALSE);\r
+        break;\r
+    }\r
+    Link = GetNextNode (&Question->OptionListHead, Link);\r
+    Index++;\r
+  }\r
+}\r
+\r
 /**\r
   Process a Question's Option (whether selected or un-selected).\r
 \r
@@ -1012,6 +1122,11 @@ ProcessOptions (
 \r
         OneOfOption = ValueToOption (Question, &HiiValue);\r
         if (OneOfOption == NULL) {\r
+          //\r
+          // Print debug msg for the mistach menu.\r
+          //\r
+          PrintMismatchMenuInfo (MenuOption);\r
+\r
           if (SkipErrorValue) {\r
             //\r
             // Just try to get the option string, skip the value which not has option.\r
@@ -1084,6 +1199,11 @@ ProcessOptions (
           continue;\r
         }\r
 \r
+        //\r
+        // Print debug msg for the mistach menu.\r
+        //\r
+        PrintMismatchMenuInfo (MenuOption);\r
+\r
         if (SkipErrorValue) {\r
           //\r
           // Not report error, just get the correct option string info.\r
@@ -1154,6 +1274,11 @@ ProcessOptions (
 \r
       OneOfOption = ValueToOption (Question, QuestionValue);\r
       if (OneOfOption == NULL) {\r
+        //\r
+        // Print debug msg for the mistach menu.\r
+        //\r
+        PrintMismatchMenuInfo (MenuOption);\r
+\r
         if (SkipErrorValue) {\r
           //\r
           // Not report error, just get the correct option string info.\r