From f511d656d95f957422611b2e096311f4e506ac10 Mon Sep 17 00:00:00 2001 From: qwang12 Date: Mon, 18 Aug 2008 08:10:33 +0000 Subject: Add the support of GUID opcode which enable SetupBrowser to support IFR generated by a VFR compiler in Framework VFR compatible mode. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5665 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c | 66 ++++++++++++++++++++++ MdeModulePkg/Universal/SetupBrowserDxe/Setup.h | 1 + .../Universal/SetupBrowserDxe/SetupBrowserDxe.inf | 3 + 3 files changed, 70 insertions(+) (limited to 'MdeModulePkg/Universal/SetupBrowserDxe') diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c index 7e5f668..e4be921 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c +++ b/MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c @@ -25,6 +25,7 @@ FORM_EXPRESSION *mSuppressExpression; FORM_EXPRESSION *mGrayOutExpression; EFI_GUID gTianoHiiIfrGuid = EFI_IFR_TIANO_GUID; +GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID mFrameworkHiiCompatibilityGuid = EFI_IFR_FRAMEWORK_GUID; /** @@ -88,6 +89,54 @@ CreateStatement ( return Statement; } +EFI_STATUS +UpdateCheckBoxStringToken ( + IN CONST FORM_BROWSER_FORMSET *FormSet, + IN FORM_BROWSER_STATEMENT *Statement + ) +{ + CHAR16 Str[MAXIMUM_VALUE_CHARACTERS]; + EFI_STRING_ID Id; + EFI_STATUS Status; + + ASSERT (Statement != NULL); + ASSERT (Statement->Operand == EFI_IFR_CHECKBOX_OP); + + UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1); + + Status = HiiLibNewString (FormSet->HiiHandle, &Id, Str); + + if (EFI_ERROR (Status)) { + return Status; + } + + Statement->VarStoreInfo.VarName = Id; + + return EFI_SUCCESS; +} + +BOOLEAN +IsNextOpCodeGuidedVarEqName ( + UINT8 *OpCodeData + ) +{ + // + // Get next opcode + // + OpCodeData += ((EFI_IFR_OP_HEADER *) OpCodeData)->Length; + if (*OpCodeData == EFI_IFR_GUID_OP) { + if (CompareGuid (&mFrameworkHiiCompatibilityGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) { + // + // Specific GUIDed opcodes to support IFR generated from Framework HII VFR + // + if ((((EFI_IFR_GUID_VAREQNAME *) OpCodeData)->ExtendOpCode) == EFI_IFR_EXTEND_OP_VAREQNAME) { + return TRUE; + } + } + } + + return FALSE; +} /** Initialize Question's members. @@ -111,6 +160,7 @@ CreateQuestion ( LIST_ENTRY *Link; FORMSET_STORAGE *Storage; NAME_VALUE_NODE *NameValueNode; + EFI_STATUS Status; Statement = CreateStatement (OpCodeData, FormSet, Form); if (Statement == NULL) { @@ -132,6 +182,19 @@ CreateQuestion ( } // + // Take a look at next OpCode to see whether it is a GUIDed opcode to support + // Framework Compatibility + // + if (FeaturePcdGet (PcdFrameworkHiiCompatibilitySupport)) { + if ((*OpCodeData == EFI_IFR_CHECKBOX_OP) && IsNextOpCodeGuidedVarEqName (OpCodeData)) { + Status = UpdateCheckBoxStringToken (FormSet, Statement); + if (EFI_ERROR (Status)) { + return NULL; + } + } + } + + // // Find Storage for this Question // Link = GetFirstNode (&FormSet->StorageListHead); @@ -675,6 +738,7 @@ CountOpCodes ( } + /** Parse opcodes in the formset IFR binary. @@ -1202,6 +1266,7 @@ ParseOpCodes ( CurrentStatement->HiiValue.Type = EFI_IFR_TYPE_BOOLEAN; InitializeRequestElement (FormSet, CurrentStatement); + break; case EFI_IFR_STRING_OP: @@ -1509,6 +1574,7 @@ ParseOpCodes ( break; } } + break; // diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h index 740ac27..b1e3c84 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h +++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h @@ -45,6 +45,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include "Colors.h" diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf index 842629d..7848144 100644 --- a/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf +++ b/MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf @@ -76,6 +76,9 @@ gEfiHiiDatabaseProtocolGuid gEfiUnicodeCollation2ProtocolGuid +[FeaturePcd.common] + gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkHiiCompatibilitySupport + [Depex] gEfiHiiDatabaseProtocolGuid AND gEfiHiiConfigRoutingProtocolGuid -- cgit v1.1