From 61a2420125d0500288e4b806f5755305cce2c283 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Sun, 14 Mar 2010 07:07:46 +0000 Subject: Support Framework IFR SELECT OP code. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10240 6f19259b-4bc3-4df7-8a09-765794883524 --- .../FrameworkHiiOnUefiHiiThunk/OpcodeCreation.c | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/OpcodeCreation.c b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/OpcodeCreation.c index 27969d2d24..0692c2a599 100644 --- a/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/OpcodeCreation.c +++ b/EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/OpcodeCreation.c @@ -860,9 +860,19 @@ FwUpdateDataToUefiUpdateData ( UINTN Index; UINTN DataCount; UINT8 *OpCodeBuffer; + LIST_ENTRY *StorageList; + FORMSET_STORAGE *Storage; + FORM_BROWSER_FORMSET *FormSet; + CHAR16 *DefaultVarStoreName; + UINT16 DefaultVarStoreId; + EFI_IFR_VARSTORE_SELECT *SelectVarOp; FwOpCode = (FRAMEWORK_EFI_IFR_OP_HEADER *) &FwUpdateData->Data; + FormSet = ThunkContext->FormSet; + DefaultVarStoreId = FormSet->DefaultVarStoreId; + DefaultVarStoreName = FormSet->OriginalDefaultVarStoreName; + for (Index = 0; Index < FwUpdateData->DataCount; Index += DataCount) { switch (FwOpCode->OpCode) { case FRAMEWORK_EFI_IFR_SUBTITLE_OP: @@ -926,6 +936,31 @@ FwUpdateDataToUefiUpdateData ( OpCodeBuffer = F2UCreateNumericOpCode (UefiOpCodeHandle, ThunkContext, (FRAMEWORK_EFI_IFR_NUMERIC *) FwOpCode); DataCount = 1; break; + + case EFI_IFR_VARSTORE_SELECT_OP: + OpCodeBuffer = (UINT8 *) FwOpCode; + SelectVarOp = (EFI_IFR_VARSTORE_SELECT *) FwOpCode; + // + // Check whether the selected VarId is in StorageList. + // + StorageList = GetFirstNode (&FormSet->StorageListHead); + while (!IsNull (&FormSet->StorageListHead, StorageList)) { + Storage = FORMSET_STORAGE_FROM_LINK (StorageList); + if (Storage->VarStoreId == SelectVarOp->VarId) { + break; + } + StorageList = GetNextNode (&FormSet->StorageListHead, StorageList); + } + ASSERT (!IsNull (&FormSet->StorageListHead, StorageList)); + // + // Change VarStoreId to the selected VarId. + // + FormSet->DefaultVarStoreId = SelectVarOp->VarId; + if (SelectVarOp->VarId == DefaultVarStoreId) { + FormSet->OriginalDefaultVarStoreName = DefaultVarStoreName; + } + DataCount = 1; + break; default: ASSERT (FALSE); @@ -939,6 +974,11 @@ FwUpdateDataToUefiUpdateData ( FwOpCode = (FRAMEWORK_EFI_IFR_OP_HEADER *)((UINT8 *) FwOpCode + FwOpCode->Length); } + // + // Revert FromSet default varstore ID. + // + FormSet->DefaultVarStoreId = DefaultVarStoreId; + FormSet->OriginalDefaultVarStoreName = DefaultVarStoreName; return EFI_SUCCESS; } -- cgit v1.2.3