Update BdsDxe to use new designed HiiLib, remove the referrence to the original IfrSupportLib.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8115 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4
2009-04-17 05:31:38 +00:00
parent d91c7bf9e4
commit 75bf9d0ecc
20 changed files with 680 additions and 352 deletions

View File

@ -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;
}