X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkModulePkg%2FUniversal%2FBdsDxe%2FFrontPage.c;h=bca0555b12a1b0ce016dedffd61a6239730e0d46;hp=2719a723fbdbc32ca339258fefde47bbe95b7b06;hb=75bf9d0ecca38dfec9b645a6eb1119c025892304;hpb=d91c7bf9e42e8be23bb67bf7c189348b4ec11797 diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c b/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c index 2719a723fb..bca0555b12 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c @@ -298,19 +298,21 @@ InitializeFrontPage ( ) { EFI_STATUS Status; - EFI_HII_UPDATE_DATA UpdateData; - IFR_OPTION *OptionList; CHAR8 *LanguageString; CHAR8 *LangCode; CHAR8 *Lang; CHAR8 *CurrentLang; CHAR8 *BestLanguage; UINTN OptionCount; - EFI_STRING_ID Token; CHAR16 *StringBuffer; UINTN BufferSize; - UINTN Index; EFI_HII_HANDLE HiiHandle; + VOID *OptionsOpCodeHandle; + VOID *StartOpCodeHandle; + VOID *EndOpCodeHandle; + EFI_IFR_GUID_LABEL *StartLabel; + EFI_IFR_GUID_LABEL *EndLabel; + BOOLEAN FirstFlag; if (InitializeHiiData) { // @@ -378,14 +380,29 @@ InitializeFrontPage ( // - // Allocate space for creation of UpdateData Buffer + // Init OpCode Handle and Allocate space for creation of UpdateData Buffer // - UpdateData.BufferSize = 0x1000; - UpdateData.Data = AllocateZeroPool (0x1000); - ASSERT (UpdateData.Data != NULL); + StartOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (StartOpCodeHandle != NULL); - OptionList = AllocateZeroPool (0x1000); - ASSERT (OptionList != NULL); + EndOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (EndOpCodeHandle != NULL); + + OptionsOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (OptionsOpCodeHandle != NULL); + // + // Create Hii Extend Label OpCode as the start opcode + // + StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); + StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; + StartLabel->Number = LABEL_SELECT_LANGUAGE; + + // + // Create Hii Extend Label OpCode as the end opcode + // + EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); + EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; + EndLabel->Number = LABEL_END; // // Collect the languages from what our current Language support is based on our VFR @@ -416,12 +433,26 @@ InitializeFrontPage ( // ASSERT (BestLanguage != NULL); + OptionCount = 0; + LangCode = LanguageString; + FirstFlag = FALSE; + + if (gFrontPagePrivate.LanguageToken == NULL) { + while (*LangCode != 0) { + HiiLibGetNextLanguage (&LangCode, Lang); + OptionCount ++; + } + gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID)); + ASSERT (gFrontPagePrivate.LanguageToken != NULL); + FirstFlag = TRUE; + } + OptionCount = 0; LangCode = LanguageString; while (*LangCode != 0) { GetNextLanguage (&LangCode, Lang); - if (gFrontPagePrivate.LanguageToken == NULL) { + if (FirstFlag) { // // Get Language Name from String Package. The StringId of Printable Language // Name is always 1 which is generated by StringGather Tool. @@ -452,19 +483,30 @@ InitializeFrontPage ( } ASSERT_EFI_ERROR (Status); - Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL); + // + // Save the string Id for each language + // + gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL); FreePool (StringBuffer); - } else { - Token = gFrontPagePrivate.LanguageToken[OptionCount]; } if (AsciiStrCmp (Lang, BestLanguage) == 0) { - OptionList[OptionCount].Flags = EFI_IFR_OPTION_DEFAULT; + HiiCreateOneOfOptionOpCode ( + OptionsOpCodeHandle, + gFrontPagePrivate.LanguageToken[OptionCount], + EFI_IFR_OPTION_DEFAULT, + EFI_IFR_NUMERIC_SIZE_1, + (UINT8) OptionCount + ); } else { - OptionList[OptionCount].Flags = 0; + HiiCreateOneOfOptionOpCode ( + OptionsOpCodeHandle, + gFrontPagePrivate.LanguageToken[OptionCount], + 0, + EFI_IFR_NUMERIC_SIZE_1, + (UINT8) OptionCount + ); } - OptionList[OptionCount].StringToken = Token; - OptionList[OptionCount].Value.u8 = (UINT8) OptionCount; OptionCount++; } @@ -476,8 +518,8 @@ InitializeFrontPage ( FreePool (Lang); FreePool (LanguageString); - UpdateData.Offset = 0; - CreateOneOfOpCode ( + HiiCreateOneOfOpCode ( + StartOpCodeHandle, FRONT_PAGE_KEY_LANGUAGE, 0, 0, @@ -485,31 +527,21 @@ InitializeFrontPage ( STRING_TOKEN (STR_LANGUAGE_SELECT_HELP), EFI_IFR_FLAG_CALLBACK, EFI_IFR_NUMERIC_SIZE_1, - OptionList, - OptionCount, - &UpdateData + OptionsOpCodeHandle, + NULL ); - Status = IfrLibUpdateForm ( + Status = HiiUpdateForm ( HiiHandle, &mFrontPageGuid, FRONT_PAGE_FORM_ID, - LABEL_SELECT_LANGUAGE, - FALSE, - &UpdateData + StartOpCodeHandle, // LABEL_SELECT_LANGUAGE + EndOpCodeHandle // LABEL_END ); - // - // Save the string Id for each language - // - gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID)); - ASSERT (gFrontPagePrivate.LanguageToken != NULL); - for (Index = 0; Index < OptionCount; Index++) { - gFrontPagePrivate.LanguageToken[Index] = OptionList[Index].StringToken; - } - - FreePool (UpdateData.Data); - FreePool (OptionList); + HiiFreeOpCodeHandle (StartOpCodeHandle); + HiiFreeOpCodeHandle (EndOpCodeHandle); + HiiFreeOpCodeHandle (OptionsOpCodeHandle); return Status; }