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
\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
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
\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