return EFI_SUCCESS;\r
}\r
\r
+\r
+\r
+EFI_STATUS\r
+FwQuestionIdToUefiQuestionId (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
+ IN UINT16 VarStoreId,\r
+ IN UINT16 FwId,\r
+ OUT EFI_QUESTION_ID *UefiQId\r
+ )\r
+{\r
+ LIST_ENTRY *MapEntryListHead;\r
+ LIST_ENTRY *Link;\r
+ QUESTION_ID_MAP_ENTRY *MapEntry;\r
+\r
+ MapEntryListHead = GetMapEntryListHead (ThunkContext, VarStoreId);\r
+ ASSERT (MapEntryListHead != NULL);\r
+\r
+ Link = GetFirstNode (MapEntryListHead);\r
+\r
+ while (!IsNull (MapEntryListHead, Link)) {\r
+ MapEntry = QUESTION_ID_MAP_ENTRY_FROM_LINK (Link);\r
+\r
+ if (MapEntry->FwQId == FwId) {\r
+ *UefiQId = MapEntry->UefiQid;\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
+ Link = GetNextNode (MapEntryListHead, Link);\r
+ }\r
+\r
+ return EFI_NOT_FOUND;\r
+}\r
+\r
+\r
+\r
EFI_STATUS\r
UCreateEndOfOpcode (\r
OUT EFI_HII_UPDATE_DATA *UefiData\r
OUT EFI_HII_UPDATE_DATA *UefiData\r
)\r
{\r
- EFI_IFR_TEXT UOpcode;\r
+ EFI_IFR_TEXT UTextOpCode;\r
+ EFI_IFR_ACTION UActionOpCode;\r
\r
- ZeroMem (&UOpcode, sizeof(UOpcode));\r
- \r
- UOpcode.Header.OpCode = EFI_IFR_TEXT_OP;\r
- UOpcode.Header.Length = sizeof (EFI_IFR_TEXT);\r
+ if ((FwText->Flags & FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE) == 0) {\r
+ ZeroMem (&UTextOpCode, sizeof(UTextOpCode));\r
+ \r
+ UTextOpCode.Header.OpCode = EFI_IFR_TEXT_OP;\r
+ UTextOpCode.Header.Length = sizeof (EFI_IFR_TEXT);\r
\r
- UOpcode.Statement.Help = FwText->Help;\r
+ UTextOpCode.Statement.Help = FwText->Help;\r
\r
- UOpcode.Statement.Prompt = FwText->Text;\r
- UOpcode.TextTwo = FwText->TextTwo;\r
- \r
- return AppendToUpdateBuffer ((UINT8 *) &UOpcode, sizeof(UOpcode), UefiData);\r
+ UTextOpCode.Statement.Prompt = FwText->Text;\r
+ UTextOpCode.TextTwo = FwText->TextTwo;\r
+ \r
+ return AppendToUpdateBuffer ((UINT8 *) &UTextOpCode, sizeof(UTextOpCode), UefiData);\r
+ } else {\r
+ //\r
+ // Iteractive Text Opcode is EFI_IFR_ACTION\r
+ //\r
+\r
+ ZeroMem (&UActionOpCode, sizeof (UActionOpCode));\r
+\r
+ UActionOpCode.Header.OpCode = EFI_IFR_ACTION_OP;\r
+ UActionOpCode.Header.Length = sizeof (EFI_IFR_ACTION);\r
+\r
+ UActionOpCode.Question.Header.Prompt = FwText->Text;\r
+ UActionOpCode.Question.Header.Help = FwText->Help;\r
+ UActionOpCode.Question.Flags = EFI_IFR_FLAG_CALLBACK;\r
+ UActionOpCode.Question.QuestionId = FwText->Key;\r
+\r
+ return AppendToUpdateBuffer ((UINT8 *) &UActionOpCode, sizeof(UActionOpCode), UefiData);\r
+ \r
+ }\r
}\r
\r
/*\r
\r
EFI_STATUS\r
F2UCreateOneOfOpCode (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
+ IN UINT16 VarStoreId,\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 UINTN *DataCount\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_IFR_ONE_OF UOpcode;\r
- FRAMEWORK_EFI_IFR_OP_HEADER *FwOpHeader;\r
- FRAMEWORK_EFI_IFR_ONE_OF_OPTION *FwOneOfOp;\r
- BOOLEAN HasQuestionId;\r
+ EFI_STATUS Status;\r
+ EFI_IFR_ONE_OF UOpcode;\r
+ FRAMEWORK_EFI_IFR_OP_HEADER *FwOpHeader;\r
+ FRAMEWORK_EFI_IFR_ONE_OF_OPTION *FwOneOfOp;\r
+ ONE_OF_OPTION_MAP *OneOfOptionMap;\r
+ ONE_OF_OPTION_MAP_ENTRY *OneOfOptionMapEntry;\r
\r
ASSERT (NextFwOpcode != NULL);\r
ASSERT (DataCount != NULL);\r
\r
+ OneOfOptionMap = NULL;\r
+\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
*DataCount = 0;\r
\r
UOpcode.Question.Header.Prompt = FwOpcode->Prompt;\r
UOpcode.Question.Header.Help = FwOpcode->Help;\r
\r
- Status = AppendToUpdateBuffer ((UINT8 *) &UOpcode, sizeof(UOpcode), UefiData);\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
//\r
- HasQuestionId = FALSE;\r
FwOpHeader = (FRAMEWORK_EFI_IFR_OP_HEADER *) ((UINT8 *) FwOpcode + FwOpcode->Header.Length);\r
while (FwOpHeader->OpCode != FRAMEWORK_EFI_IFR_END_ONE_OF_OP) {\r
ASSERT (FwOpHeader->OpCode == FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP);\r
\r
FwOneOfOp = (FRAMEWORK_EFI_IFR_ONE_OF_OPTION *) FwOpHeader;\r
- if (((FwOneOfOp->Key & FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE) == 0) & !HasQuestionId) {\r
- HasQuestionId = TRUE;\r
- UOpcode.Question.QuestionId = FwOneOfOp->Key;\r
+ if ((FwOneOfOp->Flags & FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE) != 0) {\r
+ UOpcode.Question.Flags |= EFI_IFR_FLAG_CALLBACK;\r
+ \r
+ if (UOpcode.Question.QuestionId == 0) {\r
+ Status = FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ if (EFI_ERROR (Status)) {\r
+ UOpcode.Question.QuestionId = FwOneOfOp->Key;\r
+ }\r
+\r
+ OneOfOptionMap = AllocateZeroPool (sizeof (ONE_OF_OPTION_MAP));\r
+ ASSERT (OneOfOptionMap != NULL);\r
+ OneOfOptionMap->Signature = ONE_OF_OPTION_MAP_SIGNATURE;\r
+ OneOfOptionMap->QuestionId = UOpcode.Question.QuestionId;\r
+ InitializeListHead (&OneOfOptionMap->OneOfOptionMapEntryListHead);\r
+ switch (FwOpcode->Width) {\r
+ case 1:\r
+ OneOfOptionMap->ValueType = EFI_IFR_TYPE_NUM_SIZE_8;\r
+ break;\r
+ case 2:\r
+ OneOfOptionMap->ValueType = EFI_IFR_TYPE_NUM_SIZE_16;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
+\r
+ InsertTailList (&ThunkContext->OneOfOptionMapListHead, &OneOfOptionMap->Link);\r
+ } else { \r
+ OneOfOptionMapEntry = AllocateZeroPool (sizeof (ONE_OF_OPTION_MAP_ENTRY));\r
+ ASSERT (OneOfOptionMapEntry != NULL);\r
+\r
+ OneOfOptionMapEntry->FwKey = FwOneOfOp->Key;\r
+ OneOfOptionMapEntry->Signature = ONE_OF_OPTION_MAP_ENTRY_SIGNATURE;\r
+ \r
+ CopyMem (&OneOfOptionMapEntry->Value, &FwOneOfOp->Value, FwOpcode->Width);\r
+\r
+ ASSERT (OneOfOptionMap != NULL);\r
+ InsertTailList (&OneOfOptionMap->OneOfOptionMapEntryListHead, &OneOfOptionMapEntry->Link);\r
+ }\r
+ }\r
+\r
+ if (FwOneOfOp->Flags & FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED) {\r
+ UOpcode.Question.Flags |= EFI_IFR_FLAG_RESET_REQUIRED;\r
}\r
\r
FwOpHeader = (FRAMEWORK_EFI_IFR_OP_HEADER *) ((UINT8 *) FwOpHeader + FwOpHeader->Length);\r
}\r
\r
+\r
+ if (UOpcode.Question.QuestionId == 0) {\r
+ //\r
+ // Assign QuestionId if still not assigned.\r
+ //\r
+ Status = FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ if (EFI_ERROR (Status)) {\r
+ UOpcode.Question.QuestionId = FwOpcode->QuestionId;\r
+ }\r
+ }\r
+ \r
+ Status = AppendToUpdateBuffer ((UINT8 *) &UOpcode, sizeof (UOpcode), UefiData);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ *DataCount += 1;\r
+\r
//\r
// Go over again the Framework IFR binary to build the UEFI One Of Option opcodes.\r
//\r
*/\r
EFI_STATUS\r
F2UCreateOrderedListOpCode (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
+ IN UINT16 VarStoreId,\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
EFI_IFR_ORDERED_LIST UOpcode;\r
EFI_STATUS Status;\r
FRAMEWORK_EFI_IFR_OP_HEADER *FwOpHeader;\r
+ FRAMEWORK_EFI_IFR_ONE_OF_OPTION *FwOneOfOp;\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
*DataCount = 0;\r
\r
UOpcode.Question.Header.Prompt = FwOpcode->Prompt;\r
UOpcode.Question.Header.Help = FwOpcode->Help;\r
+ UOpcode.Question.VarStoreId = VarStoreId;\r
\r
UOpcode.MaxContainers = FwOpcode->MaxEntries;\r
+\r
+ //\r
+ // Go over the Framework IFR binary to get the QuestionId for generated UEFI One Of Option opcode\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
+ ASSERT (FwOpHeader->OpCode == FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP);\r
+ \r
+ FwOneOfOp = (FRAMEWORK_EFI_IFR_ONE_OF_OPTION *) FwOpHeader;\r
+ if ((FwOneOfOp->Flags & FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE) != 0) {\r
+ UOpcode.Question.Flags |= EFI_IFR_FLAG_CALLBACK;\r
+ \r
+ if (UOpcode.Question.QuestionId == 0) {\r
+ Status = FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ if (EFI_ERROR (Status)) {\r
+ UOpcode.Question.QuestionId = FwOneOfOp->Key;\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ if (FwOneOfOp->Flags & FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED) {\r
+ UOpcode.Question.Flags |= EFI_IFR_FLAG_RESET_REQUIRED;\r
+ }\r
+\r
+ FwOpHeader = (FRAMEWORK_EFI_IFR_OP_HEADER *) ((UINT8 *) FwOpHeader + FwOpHeader->Length);\r
+ }\r
+\r
+ if (UOpcode.Question.QuestionId == 0) {\r
+ Status = FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ if (EFI_ERROR (Status)) {\r
+ UOpcode.Question.QuestionId = FwOpcode->QuestionId;\r
+ }\r
+ }\r
\r
Status = AppendToUpdateBuffer ((UINT8 *) &UOpcode, sizeof(UOpcode), UefiData);\r
if (EFI_ERROR (Status)) {\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
- Status = F2UCreateOneOfOptionOpCode ((CONST FRAMEWORK_EFI_IFR_ONE_OF_OPTION *) FwOpHeader, FwOpcode->MaxEntries, UefiData);\r
+ //\r
+ // Each entry of Order List in Framework HII is always 1 byte in size\r
+ //\r
+ Status = F2UCreateOneOfOptionOpCode ((CONST FRAMEWORK_EFI_IFR_ONE_OF_OPTION *) FwOpHeader, 1, UefiData);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
EFI_STATUS\r
F2UCreateCheckBoxOpCode (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
+ IN UINT16 VarStoreId,\r
IN CONST FRAMEWORK_EFI_IFR_CHECKBOX *FwOpcode,\r
OUT EFI_HII_UPDATE_DATA *UefiData\r
)\r
{\r
+ EFI_STATUS Status;\r
EFI_IFR_CHECKBOX UOpcode;\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
UOpcode.Question.Header.Prompt = FwOpcode->Prompt;\r
UOpcode.Question.Header.Help = FwOpcode->Help;\r
\r
- UOpcode.Question.QuestionId = FwOpcode->Key;\r
+ if (FwOpcode->Key == 0) {\r
+ Status = FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Add a new opcode and it will not trigger call back. So we just reuse the FW QuestionId.\r
+ //\r
+ UOpcode.Question.QuestionId = FwOpcode->QuestionId;\r
+ }\r
+ } else {\r
+ UOpcode.Question.QuestionId = FwOpcode->Key;\r
+ }\r
+\r
UOpcode.Question.VarStoreId = RESERVED_VARSTORE_ID;\r
UOpcode.Question.VarStoreInfo.VarOffset = FwOpcode->QuestionId;\r
\r
\r
//\r
// We also map 2 flags:\r
- // FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE, \r
- // FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED,\r
+ // FRAMEWORK_EFI_IFR_FLAG_DEFAULT, \r
+ // FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING,\r
// to UEFI IFR CheckBox Opcode default flags.\r
//\r
UOpcode.Flags = (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_DEFAULT | FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING));\r
\r
EFI_STATUS\r
F2UCreateNumericOpCode (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
+ IN UINT16 VarStoreId,\r
IN CONST FRAMEWORK_EFI_IFR_NUMERIC *FwOpcode,\r
OUT EFI_HII_UPDATE_DATA *UefiData\r
)\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
\r
+ if (FwOpcode->Key == 0) {\r
+ Status = FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Add a new opcode and it will not trigger call back. So we just reuse the FW QuestionId.\r
+ //\r
+ UOpcode.Question.QuestionId = FwOpcode->QuestionId;\r
+ }\r
+ } else {\r
+ UOpcode.Question.QuestionId = FwOpcode->Key;\r
+ }\r
+\r
UOpcode.Header.Length = sizeof(UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_NUMERIC_OP;\r
//\r
UOpcode.Question.Header.Help = FwOpcode->Help;\r
\r
UOpcode.Question.QuestionId = FwOpcode->Key;\r
+ //\r
+ // BUGBUG RESERVED_VARSTORE_ID should be passed in.\r
+ //\r
UOpcode.Question.VarStoreId = RESERVED_VARSTORE_ID;\r
UOpcode.Question.VarStoreInfo.VarOffset = FwOpcode->QuestionId;\r
\r
\r
EFI_STATUS\r
F2UCreateStringOpCode (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
+ IN UINT16 VarStoreId,\r
IN CONST FRAMEWORK_EFI_IFR_STRING *FwOpcode,\r
OUT EFI_HII_UPDATE_DATA *UefiData\r
)\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
\r
+ if (FwOpcode->Key == 0) {\r
+ FwQuestionIdToUefiQuestionId (ThunkContext, VarStoreId, FwOpcode->QuestionId, &UOpcode.Question.QuestionId);\r
+ } else {\r
+ UOpcode.Question.QuestionId = FwOpcode->Key;\r
+ }\r
+\r
UOpcode.Header.Length = sizeof(UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_STRING_OP;\r
\r
}\r
\r
\r
-\r
EFI_STATUS\r
-ThunkFrameworkUpdateDataToUefiUpdateData (\r
+FwUpdateDataToUefiUpdateData (\r
+ IN HII_THUNK_CONTEXT *ThunkContext,\r
IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *Data,\r
IN BOOLEAN AddData,\r
OUT EFI_HII_UPDATE_DATA **UefiData\r
)\r
{\r
- FRAMEWORK_EFI_IFR_OP_HEADER *FrameworkOpcodeBuffer;\r
- FRAMEWORK_EFI_IFR_OP_HEADER *NextFrameworkOpcodeBuffer;\r
- EFI_HII_UPDATE_DATA *UefiUpdateDataBuffer;\r
+ FRAMEWORK_EFI_IFR_OP_HEADER *FwOpCode;\r
+ FRAMEWORK_EFI_IFR_OP_HEADER *NextFwOpCode;\r
+ EFI_HII_UPDATE_DATA *UefiOpCode;\r
UINTN Index;\r
EFI_STATUS Status;\r
UINTN DataCount;\r
- static UINTN mOneOfOptionWidth;\r
+ UINT16 VarStoreId;\r
\r
- mOneOfOptionWidth = 0;\r
- \r
+ //\r
+ // Assume all dynamic opcode created is using active variable with VarStoreId of 1.\r
+ //\r
+ VarStoreId = 1;\r
\r
- UefiUpdateDataBuffer = AllocateZeroPool (sizeof (EFI_HII_UPDATE_DATA));\r
- if (UefiUpdateDataBuffer == NULL) {\r
+ UefiOpCode = AllocateZeroPool (sizeof (EFI_HII_UPDATE_DATA));\r
+ if (UefiOpCode == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- UefiUpdateDataBuffer->Data = AllocateZeroPool (LOCAL_UPDATE_DATA_BUFFER_INCREMENTAL);\r
- if (UefiUpdateDataBuffer->Data == NULL) {\r
+ UefiOpCode->Data = AllocateZeroPool (LOCAL_UPDATE_DATA_BUFFER_INCREMENTAL);\r
+ if (UefiOpCode->Data == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- UefiUpdateDataBuffer->BufferSize = LOCAL_UPDATE_DATA_BUFFER_INCREMENTAL;\r
- UefiUpdateDataBuffer->Offset = 0;\r
+ UefiOpCode->BufferSize = LOCAL_UPDATE_DATA_BUFFER_INCREMENTAL;\r
+ UefiOpCode->Offset = 0;\r
\r
- FrameworkOpcodeBuffer = (FRAMEWORK_EFI_IFR_OP_HEADER *) &Data->Data;\r
+ FwOpCode = (FRAMEWORK_EFI_IFR_OP_HEADER *) &Data->Data;\r
\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
+ switch (FwOpCode->OpCode) {\r
case FRAMEWORK_EFI_IFR_SUBTITLE_OP:\r
- Status = F2UCreateSubtitleOpCode ((FRAMEWORK_EFI_IFR_SUBTITLE *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer);\r
+ Status = F2UCreateSubtitleOpCode ((FRAMEWORK_EFI_IFR_SUBTITLE *) FwOpCode, UefiOpCode);\r
+ DataCount = 1;\r
break;\r
\r
case FRAMEWORK_EFI_IFR_TEXT_OP:\r
- Status = F2UCreateTextOpCode ((FRAMEWORK_EFI_IFR_TEXT *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer); \r
+ Status = F2UCreateTextOpCode ((FRAMEWORK_EFI_IFR_TEXT *) FwOpCode, UefiOpCode); \r
+ DataCount = 1;\r
break;\r
\r
case FRAMEWORK_EFI_IFR_REF_OP:\r
- Status = F2UCreateGotoOpCode ((FRAMEWORK_EFI_IFR_REF *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer); \r
+ Status = F2UCreateGotoOpCode ((FRAMEWORK_EFI_IFR_REF *) FwOpCode, UefiOpCode); \r
+ DataCount = 1;\r
break;\r
\r
case FRAMEWORK_EFI_IFR_ONE_OF_OP:\r
- Status = F2UCreateOneOfOpCode ((FRAMEWORK_EFI_IFR_ONE_OF *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer, &NextFrameworkOpcodeBuffer, &DataCount);\r
+ Status = F2UCreateOneOfOpCode (ThunkContext, VarStoreId, (FRAMEWORK_EFI_IFR_ONE_OF *) FwOpCode, UefiOpCode, &NextFwOpCode, &DataCount);\r
if (!EFI_ERROR (Status)) {\r
- FrameworkOpcodeBuffer = NextFrameworkOpcodeBuffer;\r
+ FwOpCode = NextFwOpCode;\r
//\r
- // F2UCreateOneOfOpCode has updated FrameworkOpcodeBuffer to point to the next opcode.\r
+ // FwOpCode is already updated to point to the next opcode.\r
//\r
continue;\r
}\r
break;\r
\r
case FRAMEWORK_EFI_IFR_ORDERED_LIST_OP:\r
- Status = F2UCreateOrderedListOpCode ((FRAMEWORK_EFI_IFR_ORDERED_LIST *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer, &NextFrameworkOpcodeBuffer, &DataCount);\r
+ Status = F2UCreateOrderedListOpCode (ThunkContext, VarStoreId, (FRAMEWORK_EFI_IFR_ORDERED_LIST *) FwOpCode, UefiOpCode, &NextFwOpCode, &DataCount);\r
if (!EFI_ERROR (Status)) {\r
- FrameworkOpcodeBuffer = NextFrameworkOpcodeBuffer;\r
+ FwOpCode = NextFwOpCode;\r
//\r
- // F2UCreateOrderedListOpCode has updated FrameworkOpcodeBuffer to point to the next opcode.\r
+ // FwOpCode is already updated to point to the next opcode.\r
//\r
continue;\r
}\r
break;\r
\r
case FRAMEWORK_EFI_IFR_CHECKBOX_OP:\r
- Status = F2UCreateCheckBoxOpCode ((FRAMEWORK_EFI_IFR_CHECKBOX *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer); \r
+ Status = F2UCreateCheckBoxOpCode (ThunkContext, VarStoreId, (FRAMEWORK_EFI_IFR_CHECKBOX *) FwOpCode, UefiOpCode); \r
+ DataCount = 1;\r
break;\r
\r
case FRAMEWORK_EFI_IFR_STRING_OP:\r
- Status = F2UCreateStringOpCode ((FRAMEWORK_EFI_IFR_STRING *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer); \r
+ Status = F2UCreateStringOpCode (ThunkContext, VarStoreId, (FRAMEWORK_EFI_IFR_STRING *) FwOpCode, UefiOpCode); \r
+ DataCount = 1;\r
break;\r
\r
case FRAMEWORK_EFI_IFR_BANNER_OP:\r
- Status = F2UCreateBannerOpCode ((FRAMEWORK_EFI_IFR_BANNER *) FrameworkOpcodeBuffer, UefiUpdateDataBuffer); \r
+ Status = F2UCreateBannerOpCode ((FRAMEWORK_EFI_IFR_BANNER *) FwOpCode, UefiOpCode); \r
+ DataCount = 1;\r
break;\r
\r
case FRAMEWORK_EFI_IFR_END_ONE_OF_OP:\r
- Status = UCreateEndOfOpcode (UefiUpdateDataBuffer);\r
- mOneOfOptionWidth = 0;\r
+ Status = UCreateEndOfOpcode (UefiOpCode);\r
+ DataCount = 1;\r
break;\r
- \r
+\r
default:\r
ASSERT (FALSE);\r
return EFI_UNSUPPORTED;\r
}\r
\r
if (EFI_ERROR (Status)) {\r
- FreePool (UefiUpdateDataBuffer->Data);\r
- FreePool (UefiUpdateDataBuffer);\r
+ FreePool (UefiOpCode->Data);\r
+ FreePool (UefiOpCode);\r
return Status;\r
}\r
\r
- FrameworkOpcodeBuffer = (FRAMEWORK_EFI_IFR_OP_HEADER *)((UINT8 *) FrameworkOpcodeBuffer + FrameworkOpcodeBuffer->Length);\r
+ FwOpCode = (FRAMEWORK_EFI_IFR_OP_HEADER *)((UINT8 *) FwOpCode + FwOpCode->Length);\r
}\r
\r
- *UefiData = UefiUpdateDataBuffer;\r
+ *UefiData = UefiOpCode;\r
\r
return EFI_SUCCESS;\r
}\r