summaryrefslogtreecommitdiff
path: root/IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
diff options
context:
space:
mode:
Diffstat (limited to 'IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c')
-rw-r--r--IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c108
1 files changed, 70 insertions, 38 deletions
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
@@ -417,11 +434,25 @@ 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;
}