Implement Functions to convert IFR Opcode in format defined in Framework HII specification to\r
format defined in UEFI HII Specification.\r
\r
-Copyright (c) 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
http://opensource.org/licenses/bsd-license.php\r
UINT8 UefiIfrOp;\r
} IFR_OPCODE_MAP;\r
\r
-IFR_OPCODE_MAP mQuestionOpcodeMap [] = {\r
+IFR_OPCODE_MAP QuestionOpcodeMap[] = {\r
{ FRAMEWORK_EFI_IFR_ONE_OF_OP, EFI_IFR_ONE_OF_OP},\r
{ FRAMEWORK_EFI_IFR_CHECKBOX_OP, EFI_IFR_CHECKBOX_OP},\r
{ FRAMEWORK_EFI_IFR_NUMERIC_OP, EFI_IFR_NUMERIC_OP},\r
{\r
UINTN Index;\r
\r
- for (Index = 0; Index < sizeof (mQuestionOpcodeMap) / sizeof (mQuestionOpcodeMap[0]); Index++) {\r
- if (FwOp == mQuestionOpcodeMap[Index].FrameworkIfrOp) {\r
- *UefiOp = mQuestionOpcodeMap[Index].UefiIfrOp;\r
+ for (Index = 0; Index < ARRAY_SIZE (QuestionOpcodeMap); Index++) {\r
+ if (FwOp == QuestionOpcodeMap[Index].FrameworkIfrOp) {\r
+ *UefiOp = QuestionOpcodeMap[Index].UefiIfrOp;\r
return EFI_SUCCESS;\r
}\r
}\r
\r
- *UefiOp = (UINT8) (FRAMEWORK_EFI_IFR_LAST_OPCODE + 1);\r
+ *UefiOp = (UINT8) (EFI_IFR_LAST_OPCODE + 1);\r
return EFI_NOT_FOUND;\r
}\r
\r
/**\r
- Translate a Framework Question Opcode to UEFI Question Opcode.\r
+ Translate a Framework Question ID to UEFI Question ID.\r
\r
- @param FwOp Framework Opcode.\r
- @param UefiOp UEFI Opcode.\r
+ @param FormSet FormSet context\r
+ @param FwOpCode Framework Opcode\r
+ @param FwQId Framework Question Id\r
+ @param UefiQId UEFI Question ID.\r
\r
- @retval EFI_SUCCESS The UEFI opcode is found and returned.\r
- @retval EFI_NOT_FOUND The UEFI opcode is not found.\r
+ @retval EFI_SUCCESS The UEFI Question Id is found and returned.\r
+ @retval EFI_NOT_FOUND The UEFI Question Id is not found.\r
**/\r
EFI_STATUS\r
FwQIdToUefiQId (\r
\r
If FwQuestionId is not 0, then it is used as the Framework Question ID.\r
\r
+ @param FwQuestionId \r
+ @param FormSet \r
+\r
@return The Framework Question ID.\r
**/\r
EFI_QUESTION_ID\r
/**\r
Create UEFI HII Text Opcode from a Framework HII Text Opcode.\r
\r
- @param FwOpcode The input Framework Opcode.\r
@param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
+ @param FwOpcode The input Framework Opcode.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
{\r
EFI_IFR_TEXT UTextOpCode;\r
\r
- if ((FwOpcode->Flags & FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE) == 0) {\r
+ if ((FwOpcode->Flags & 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
+ UTextOpCode.Header.Length = (UINT8) sizeof (EFI_IFR_TEXT);\r
\r
UTextOpCode.Statement.Help = FwOpcode->Help;\r
\r
/**\r
Create UEFI HII Reference Opcode from a Framework HII Reference Opcode.\r
\r
- @param FwOpcode The input Framework Opcode.\r
@param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
+ @param FwOpcode The input Framework Opcode.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_REF_OP;\r
\r
UOpcode.Question.Header.Prompt = FwOpcode->Prompt;\r
UOpcode.FormId = FwOpcode->FormId;\r
\r
//\r
- // We only map FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE and FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED to \r
+ // We only map EFI_IFR_FLAG_INTERACTIVE and EFI_IFR_FLAG_RESET_REQUIRED to \r
// UEFI IFR Opcode flags. The rest flags are obsolete.\r
//\r
- UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE | FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED));\r
+ UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_RESET_REQUIRED));\r
\r
return HiiCreateRawOpCodes (UefiUpdateDataHandle, (UINT8 *) &UOpcode, sizeof(UOpcode));\r
}\r
/**\r
Create UEFI HII "One Of Option" Opcode from a Framework HII "One Of Option" Opcode.\r
\r
+ @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
@param FwOpcode The input Framework Opcode.\r
@param Width The size of the One Of Option. 1 bytes or 2 bytes.\r
- @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_ONE_OF_OPTION_OP;\r
\r
UOpcode.Option = FwOpcode->Option;\r
CopyMem (&UOpcode.Value.u8, &FwOpcode->Value, Width);\r
\r
//\r
- // #define FRAMEWORK_EFI_IFR_FLAG_DEFAULT 0x01\r
- // #define FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING 0x02\r
+ // #define EFI_IFR_FLAG_DEFAULT 0x01\r
+ // #define EFI_IFR_FLAG_MANUFACTURING 0x02\r
// #define EFI_IFR_OPTION_DEFAULT 0x10\r
// #define EFI_IFR_OPTION_DEFAULT_MFG 0x20\r
//\r
- UOpcode.Flags = (UINT8) (UOpcode.Flags | (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_DEFAULT | FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING)) << 4);\r
+ UOpcode.Flags = (UINT8) (UOpcode.Flags | (FwOpcode->Flags & (EFI_IFR_FLAG_DEFAULT | EFI_IFR_FLAG_MANUFACTURING)) << 4);\r
\r
switch (Width) {\r
case 1:\r
to a UEFI Question ID. This information is used to invoke the Framework HII Browser Callback\r
function. The opcode is appened to UefiUpdateDataHandle.\r
\r
+ @param UefiUpdateDataHandle The UEFI Update Data buffer.\r
@param QuestionId The UEFI Question ID.\r
@param OptionValue The value of the "One Of Option".\r
@param KeyValue The Framework "One Of Option" callback key.\r
- @param UefiUpdateDataHandle The UEFI Update Data buffer.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
/**\r
Create UEFI HII "One Of" Opcode from a Framework HII "One Of" Opcode.\r
\r
+ @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
@param ThunkContext The HII Thunk Context.\r
@param FwOpcode The input Framework Opcode.\r
- @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
- @param NextFwOpcode Returns the position of the next Framework Opcode after FRAMEWORK_EFI_IFR_END_ONE_OF_OP of\r
+ @param NextFwOpcode Returns the position of the next Framework Opcode after EFI_IFR_END_ONE_OF_OP of\r
the "One Of Option".\r
@param OpcodeCount The number of Opcode for the complete Framework "One Of" Opcode.\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
*OpcodeCount = 0;\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_ONE_OF_OP;\r
UOpcode.Header.Scope = 1;\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
+ while (FwOpHeader->OpCode != 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
+ if ((FwOneOfOp->Flags & EFI_IFR_FLAG_INTERACTIVE) != 0) {\r
UOpcode.Question.Flags |= EFI_IFR_FLAG_CALLBACK;\r
\r
if (UOpcode.Question.QuestionId == 0) {\r
\r
}\r
\r
- if (FwOneOfOp->Flags & FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED) {\r
+ if ((FwOneOfOp->Flags & EFI_IFR_FLAG_RESET_REQUIRED) == EFI_IFR_FLAG_RESET_REQUIRED) {\r
UOpcode.Question.Flags |= EFI_IFR_FLAG_RESET_REQUIRED;\r
}\r
\r
// Go over again the Framework IFR binary to build the UEFI One Of Option opcodes.\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
+ while (FwOpHeader->OpCode != EFI_IFR_END_ONE_OF_OP) {\r
\r
FwOneOfOp = (FRAMEWORK_EFI_IFR_ONE_OF_OPTION *) FwOpHeader;\r
\r
/**\r
Create UEFI HII "Ordered List" Opcode from a Framework HII "Ordered List" Opcode.\r
\r
+ @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
@param ThunkContext The HII Thunk Context.\r
@param FwOpcode The input Framework Opcode.\r
- @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
- @param NextFwOpcode Returns the position of the next Framework Opcode after FRAMEWORK_EFI_IFR_END_ONE_OF_OP of\r
+ @param NextFwOpcode Returns the position of the next Framework Opcode after EFI_IFR_END_ONE_OF_OP of\r
the "Ordered List".\r
@param OpcodeCount The number of Opcode for the complete Framework "Ordered List" Opcode.\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
*OpcodeCount = 0;\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_ORDERED_LIST_OP;\r
UOpcode.Header.Scope = 1;\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
+ while (FwOpHeader->OpCode != 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
+ if ((FwOneOfOp->Flags & EFI_IFR_FLAG_INTERACTIVE) != 0) {\r
UOpcode.Question.Flags |= EFI_IFR_FLAG_CALLBACK;\r
\r
if (UOpcode.Question.QuestionId == 0) {\r
}\r
}\r
\r
- if (FwOneOfOp->Flags & FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED) {\r
+ if ((FwOneOfOp->Flags & EFI_IFR_FLAG_RESET_REQUIRED) == EFI_IFR_FLAG_RESET_REQUIRED) {\r
UOpcode.Question.Flags |= EFI_IFR_FLAG_RESET_REQUIRED;\r
}\r
\r
*OpcodeCount += 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
+ while (FwOpHeader->OpCode != EFI_IFR_END_ONE_OF_OP) {\r
//\r
// Each entry of Order List in Framework HII is always 1 byte in size\r
//\r
/**\r
Create UEFI HII CheckBox Opcode from a Framework HII Checkbox Opcode.\r
\r
+ @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
@param ThunkContext The HII Thunk Context.\r
@param FwOpcode The input Framework Opcode.\r
- @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
\r
ZeroMem (&UOpcode, sizeof(UOpcode));\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_CHECKBOX_OP;\r
\r
UOpcode.Question.Header.Prompt = FwOpcode->Prompt;\r
\r
//\r
// We map 2 flags:\r
- // FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE, \r
- // FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED,\r
+ // EFI_IFR_FLAG_INTERACTIVE, \r
+ // EFI_IFR_FLAG_RESET_REQUIRED,\r
// to UEFI IFR Opcode Question flags. The rest flags are obsolete.\r
//\r
- UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE | FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED));\r
+ UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_RESET_REQUIRED));\r
\r
\r
UOpcode.Question.VarStoreId = ThunkContext->FormSet->DefaultVarStoreId;\r
\r
//\r
// We also map these 2 flags:\r
- // FRAMEWORK_EFI_IFR_FLAG_DEFAULT, \r
- // FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING,\r
+ // EFI_IFR_FLAG_DEFAULT, \r
+ // EFI_IFR_FLAG_MANUFACTURING,\r
// to UEFI IFR CheckBox Opcode default flags.\r
//\r
- UOpcode.Flags = (UINT8) (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_DEFAULT | FRAMEWORK_EFI_IFR_FLAG_MANUFACTURING));\r
+ UOpcode.Flags = (UINT8) (FwOpcode->Flags & (EFI_IFR_FLAG_DEFAULT | EFI_IFR_FLAG_MANUFACTURING));\r
\r
return HiiCreateRawOpCodes (UefiUpdateDataHandle, (UINT8 *) &UOpcode, sizeof(UOpcode));\r
}\r
/**\r
Create UEFI HII Numeric Opcode from a Framework HII Numeric Opcode.\r
\r
+ @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
@param ThunkContext The HII Thunk Context.\r
@param FwOpcode The input Framework Opcode.\r
- @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
UOpcode.Question.QuestionId = FwOpcode->Key;\r
}\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_NUMERIC_OP;\r
//\r
// We need to create a nested default value for the UEFI Numeric Opcode.\r
UOpcode.Question.VarStoreId = ThunkContext->FormSet->DefaultVarStoreId;\r
UOpcode.Question.VarStoreInfo.VarOffset = FwOpcode->QuestionId;\r
\r
- UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE | FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED));\r
+ UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_RESET_REQUIRED));\r
\r
//\r
// Framework Numeric values are all in UINT16 and displayed as decimal.\r
// We need to create a default value.\r
//\r
ZeroMem (&UOpcodeDefault, sizeof (UOpcodeDefault));\r
- UOpcodeDefault.Header.Length = sizeof (UOpcodeDefault);\r
+ UOpcodeDefault.Header.Length = (UINT8) sizeof (UOpcodeDefault);\r
UOpcodeDefault.Header.OpCode = EFI_IFR_DEFAULT_OP;\r
\r
UOpcodeDefault.DefaultId = 0;\r
/**\r
Create UEFI HII String Opcode from a Framework HII String Opcode.\r
\r
+ @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
@param ThunkContext The HII Thunk Context.\r
@param FwOpcode The input Framework Opcode.\r
- @param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
UOpcode.Question.QuestionId = FwOpcode->Key;\r
}\r
\r
- UOpcode.Header.Length = sizeof(UOpcode);\r
+ UOpcode.Header.Length = (UINT8) sizeof (UOpcode);\r
UOpcode.Header.OpCode = EFI_IFR_STRING_OP;\r
\r
UOpcode.Question.Header.Prompt = FwOpcode->Prompt;\r
UOpcode.Question.Header.Help = FwOpcode->Help;\r
\r
- UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE | FRAMEWORK_EFI_IFR_FLAG_RESET_REQUIRED));\r
+ UOpcode.Question.Flags = (UINT8) (FwOpcode->Flags & (EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_RESET_REQUIRED));\r
\r
UOpcode.Question.VarStoreId = ThunkContext->FormSet->DefaultVarStoreId;\r
UOpcode.Question.VarStoreInfo.VarOffset = FwOpcode->QuestionId;\r
/**\r
Create UEFI HII Banner Opcode from a Framework HII Banner Opcode.\r
\r
- @param FwOpcode The input Framework Opcode.\r
@param UefiUpdateDataHandle The newly created UEFI HII opcode is appended to UefiUpdateDataHandle.\r
+ @param FwOpcode The input Framework Opcode.\r
\r
@retval NULL There is not enough space left in Buffer to add the opcode.\r
@retval Other A pointer to the created opcode.\r
**/\r
UINT8 *\r
F2UCreateBannerOpCode (\r
- IN OUT VOID *UefiUpdateDataHandle,\r
- IN CONST FRAMEWORK_EFI_IFR_BANNER *FwOpcode\r
+ IN OUT VOID *UefiUpdateDataHandle,\r
+ IN CONST EFI_IFR_BANNER *FwOpcode\r
)\r
{\r
EFI_IFR_GUID_BANNER *UOpcode;\r
\r
@param ThunkContext The HII Thunk Context.\r
@param FwUpdateData The Framework Update Data.\r
- @param UefiUpdateData The UEFI Update Data.\r
+ @param UefiOpCodeHandle The UEFI opcode handle.\r
\r
@retval EFI_SUCCESS The UEFI Update Data is created successfully.\r
@retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.\r
UINTN Index;\r
UINTN DataCount;\r
UINT8 *OpCodeBuffer;\r
+ LIST_ENTRY *StorageList;\r
+ FORMSET_STORAGE *Storage;\r
+ FORM_BROWSER_FORMSET *FormSet;\r
+ CHAR16 *DefaultVarStoreName;\r
+ UINT16 DefaultVarStoreId;\r
+ EFI_IFR_VARSTORE_SELECT *SelectVarOp;\r
\r
FwOpCode = (FRAMEWORK_EFI_IFR_OP_HEADER *) &FwUpdateData->Data;\r
\r
+ FormSet = ThunkContext->FormSet;\r
+ DefaultVarStoreId = FormSet->DefaultVarStoreId;\r
+ DefaultVarStoreName = FormSet->OriginalDefaultVarStoreName;\r
+\r
for (Index = 0; Index < FwUpdateData->DataCount; Index += DataCount) {\r
switch (FwOpCode->OpCode) {\r
case FRAMEWORK_EFI_IFR_SUBTITLE_OP:\r
DataCount = 1;\r
break;\r
\r
- case FRAMEWORK_EFI_IFR_BANNER_OP:\r
- OpCodeBuffer = F2UCreateBannerOpCode (UefiOpCodeHandle, (FRAMEWORK_EFI_IFR_BANNER *) FwOpCode); \r
+ case EFI_IFR_BANNER_OP:\r
+ OpCodeBuffer = F2UCreateBannerOpCode (UefiOpCodeHandle, (EFI_IFR_BANNER *) FwOpCode); \r
DataCount = 1;\r
break;\r
\r
- case FRAMEWORK_EFI_IFR_END_ONE_OF_OP:\r
+ case EFI_IFR_END_ONE_OF_OP:\r
OpCodeBuffer = HiiCreateEndOpCode (UefiOpCodeHandle);\r
DataCount = 1;\r
break;\r
OpCodeBuffer = F2UCreateNumericOpCode (UefiOpCodeHandle, ThunkContext, (FRAMEWORK_EFI_IFR_NUMERIC *) FwOpCode);\r
DataCount = 1;\r
break;\r
+ \r
+ case EFI_IFR_VARSTORE_SELECT_OP:\r
+ OpCodeBuffer = (UINT8 *) FwOpCode;\r
+ SelectVarOp = (EFI_IFR_VARSTORE_SELECT *) FwOpCode;\r
+ //\r
+ // Check whether the selected VarId is in StorageList.\r
+ //\r
+ StorageList = GetFirstNode (&FormSet->StorageListHead);\r
+ while (!IsNull (&FormSet->StorageListHead, StorageList)) {\r
+ Storage = FORMSET_STORAGE_FROM_LINK (StorageList);\r
+ if (Storage->VarStoreId == SelectVarOp->VarId) {\r
+ break;\r
+ }\r
+ StorageList = GetNextNode (&FormSet->StorageListHead, StorageList);\r
+ }\r
+ ASSERT (!IsNull (&FormSet->StorageListHead, StorageList));\r
+ //\r
+ // Change VarStoreId to the selected VarId.\r
+ //\r
+ FormSet->DefaultVarStoreId = SelectVarOp->VarId;\r
+ if (SelectVarOp->VarId == DefaultVarStoreId) {\r
+ FormSet->OriginalDefaultVarStoreName = DefaultVarStoreName;\r
+ }\r
+ DataCount = 1;\r
+ break;\r
\r
default:\r
ASSERT (FALSE);\r
FwOpCode = (FRAMEWORK_EFI_IFR_OP_HEADER *)((UINT8 *) FwOpCode + FwOpCode->Length);\r
}\r
\r
+ //\r
+ // Revert FromSet default varstore ID.\r
+ //\r
+ FormSet->DefaultVarStoreId = DefaultVarStoreId;\r
+ FormSet->OriginalDefaultVarStoreName = DefaultVarStoreName;\r
return EFI_SUCCESS;\r
}\r
\r