F2UCreateOneOfOpCode (\r
IN CONST FRAMEWORK_EFI_IFR_ONE_OF *FwOpcode,\r
OUT EFI_HII_UPDATE_DATA *UefiData,\r
- OUT FRAMEWORK_EFI_IFR_OP_HEADER **NextFwOpcode\r
+ OUT FRAMEWORK_EFI_IFR_OP_HEADER **NextFwOpcode,\r
+ OUT UINTN *DataCount\r
)\r
{\r
EFI_STATUS Status;\r
FRAMEWORK_EFI_IFR_ONE_OF_OPTION *FwOneOfOp;\r
BOOLEAN HasQuestionId;\r
\r
+ ASSERT (NextFwOpcode != NULL);\r
+ ASSERT (DataCount != NULL);\r
+\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
+ *DataCount = 0;\r
\r
UOpcode.Header.Length = sizeof(UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_ONE_OF_OP;\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ *DataCount += 1;\r
\r
//\r
// Go over the Framework IFR binary to get the QuestionId for generated UEFI One Of Option opcode\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ FwOpHeader = (FRAMEWORK_EFI_IFR_OP_HEADER *) ((UINT8 *) FwOpHeader + FwOpHeader->Length);\r
+ *DataCount += 1;\r
}\r
\r
Status = UCreateEndOfOpcode (UefiData);\r
if (!EFI_ERROR (Status)) {\r
*NextFwOpcode = (FRAMEWORK_EFI_IFR_OP_HEADER *)((UINT8 *) FwOpHeader + FwOpHeader->Length);\r
+ *DataCount += 1;\r
}\r
\r
return Status;\r
F2UCreateOrderedListOpCode (\r
IN CONST FRAMEWORK_EFI_IFR_ORDERED_LIST *FwOpcode,\r
OUT EFI_HII_UPDATE_DATA *UefiData,\r
- OUT FRAMEWORK_EFI_IFR_OP_HEADER **NextFwOpcode\r
+ OUT FRAMEWORK_EFI_IFR_OP_HEADER **NextFwOpcode,\r
+ OUT UINTN *DataCount\r
)\r
{\r
EFI_IFR_ORDERED_LIST UOpcode;\r
FRAMEWORK_EFI_IFR_OP_HEADER *FwOpHeader;\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
+ *DataCount = 0;\r
\r
UOpcode.Header.Length = sizeof(UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_ORDERED_LIST_OP;\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ *DataCount += 1;\r
\r
FwOpHeader = (FRAMEWORK_EFI_IFR_OP_HEADER *) ((UINT8 *) FwOpcode + FwOpcode->Header.Length);\r
while (FwOpHeader->OpCode != FRAMEWORK_EFI_IFR_END_ONE_OF_OP) {\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ FwOpHeader = (FRAMEWORK_EFI_IFR_OP_HEADER *) ((UINT8 *) FwOpHeader + FwOpHeader->Length);\r
+ *DataCount += 1;\r
}\r
\r
Status = UCreateEndOfOpcode (UefiData);\r
if (!EFI_ERROR (Status)) {\r
*NextFwOpcode = (FRAMEWORK_EFI_IFR_OP_HEADER *)((UINT8 *) FwOpHeader + FwOpHeader->Length);\r
+ *DataCount += 1;\r
}\r
\r
- return AppendToUpdateBuffer ((UINT8 *) &UOpcode, sizeof(UOpcode), UefiData);\r
+ return Status;\r
}\r
\r
/*\r
EFI_HII_UPDATE_DATA *UefiUpdateDataBuffer;\r
UINTN Index;\r
EFI_STATUS Status;\r
+ UINTN DataCount;\r
static UINTN mOneOfOptionWidth;\r
\r
mOneOfOptionWidth = 0;\r
\r
FrameworkOpcodeBuffer = (FRAMEWORK_EFI_IFR_OP_HEADER *) &Data->Data;\r
\r
- for (Index = 0; Index < Data->DataCount; Index++) {\r
+ for (Index = 0; Index < Data->DataCount; Index += DataCount) {\r
+ //\r
+ // By default Datacount is 1. For FRAMEWORK_EFI_IFR_ONE_OF_OP and FRAMEWORK_EFI_IFR_ORDERED_LIST_OP,\r
+ // DataCount maybe more than 1.\r
+ //\r
+ DataCount = 1;\r
switch (FrameworkOpcodeBuffer->OpCode) {\r
case FRAMEWORK_EFI_IFR_SUBTITLE_OP:\r
Status = F2UCreateSubtitleOpCode ((FRAMEWORK_EFI_IFR_SUBTITLE *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer);\r
break;\r
\r
case FRAMEWORK_EFI_IFR_ONE_OF_OP:\r
- Status = F2UCreateOneOfOpCode ((FRAMEWORK_EFI_IFR_ONE_OF *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer, &NextFrameworkOpcodeBuffer);\r
+ Status = F2UCreateOneOfOpCode ((FRAMEWORK_EFI_IFR_ONE_OF *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer, &NextFrameworkOpcodeBuffer, &DataCount);\r
if (!EFI_ERROR (Status)) {\r
FrameworkOpcodeBuffer = NextFrameworkOpcodeBuffer;\r
//\r
break;\r
\r
case FRAMEWORK_EFI_IFR_ORDERED_LIST_OP:\r
- Status = F2UCreateOrderedListOpCode ((FRAMEWORK_EFI_IFR_ORDERED_LIST *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer, &NextFrameworkOpcodeBuffer);\r
+ Status = F2UCreateOrderedListOpCode ((FRAMEWORK_EFI_IFR_ORDERED_LIST *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer, &NextFrameworkOpcodeBuffer, &DataCount);\r
if (!EFI_ERROR (Status)) {\r
FrameworkOpcodeBuffer = NextFrameworkOpcodeBuffer;\r
//\r