MdeModulePkg/UiApp: Make it look like current FrontPage

Signed-off-by: Jeremy Soller <jeremy@system76.com>
Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
Tim Crawford
2021-10-22 20:28:04 -06:00
parent 8a0955dfa8
commit 2d04a62512
8 changed files with 75 additions and 644 deletions

View File

@ -17,7 +17,6 @@ EFI_GUID mFrontPageGuid = FRONT_PAGE_FORMSET_GUID;
BOOLEAN mResetRequired = FALSE; BOOLEAN mResetRequired = FALSE;
EFI_FORM_BROWSER2_PROTOCOL *gFormBrowser2; EFI_FORM_BROWSER2_PROTOCOL *gFormBrowser2;
CHAR8 *mLanguageString;
BOOLEAN mModeInitialized = FALSE; BOOLEAN mModeInitialized = FALSE;
// //
// Boot video resolution and text mode. // Boot video resolution and text mode.
@ -38,7 +37,6 @@ FRONT_PAGE_CALLBACK_DATA gFrontPagePrivate = {
FRONT_PAGE_CALLBACK_DATA_SIGNATURE, FRONT_PAGE_CALLBACK_DATA_SIGNATURE,
NULL, NULL,
NULL, NULL,
NULL,
{ {
FakeExtractConfig, FakeExtractConfig,
FakeRouteConfig, FakeRouteConfig,
@ -211,7 +209,7 @@ UpdateFrontPageForm (
// //
StartGuidLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); StartGuidLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartGuidLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; StartGuidLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
StartGuidLabel->Number = LABEL_FRANTPAGE_INFORMATION; StartGuidLabel->Number = LABEL_FRONTPAGE_INFORMATION;
// //
// Create Hii Extend Label OpCode as the end opcode // Create Hii Extend Label OpCode as the end opcode
// //
@ -367,10 +365,6 @@ FreeFrontPage(
// Publish our HII data // Publish our HII data
// //
HiiRemovePackages (gFrontPagePrivate.HiiHandle); HiiRemovePackages (gFrontPagePrivate.HiiHandle);
if (gFrontPagePrivate.LanguageToken != NULL) {
FreePool (gFrontPagePrivate.LanguageToken);
gFrontPagePrivate.LanguageToken = NULL;
}
} }
/** /**
@ -539,129 +533,81 @@ UpdateFrontPageBannerStrings (
VOID VOID
) )
{ {
CHAR16 *MemoryStr;
EFI_STATUS Status; EFI_STATUS Status;
EFI_STRING_ID TokenToUpdate; EFI_STRING_ID TokenToUpdate;
EFI_PHYSICAL_ADDRESS *Table; EFI_PHYSICAL_ADDRESS *Table;
SMBIOS_TABLE_ENTRY_POINT *EntryPoint; SMBIOS_TABLE_ENTRY_POINT *EntryPoint;
SMBIOS_STRUCTURE_POINTER SmbiosTable; SMBIOS_STRUCTURE_POINTER SmbiosTable;
UINT64 InstalledMemory;
InstalledMemory = 0;
//
// Update Front Page strings
//
Status = EfiGetSystemConfigurationTable (&gEfiSmbiosTableGuid, (VOID **) &Table); Status = EfiGetSystemConfigurationTable (&gEfiSmbiosTableGuid, (VOID **) &Table);
if (EFI_ERROR (Status) || Table == NULL) { if (EFI_ERROR (Status) || Table == NULL) {
} else { return;
EntryPoint = (SMBIOS_TABLE_ENTRY_POINT*)Table; }
SmbiosTable = GetSmbiosTableFromType (EntryPoint, EFI_SMBIOS_TYPE_BIOS_INFORMATION , 0); EntryPoint = (SMBIOS_TABLE_ENTRY_POINT*)Table;
if (SmbiosTable.Raw != NULL) { SmbiosTable = GetSmbiosTableFromType (EntryPoint, EFI_SMBIOS_TYPE_BIOS_INFORMATION , 0);
CHAR16 *FwVersion; if (SmbiosTable.Raw != NULL) {
CHAR16 *FwDate; CHAR16 *FwVersion;
CHAR16 *TmpBuffer; CHAR16 *TmpBuffer;
UINT8 VersionIdx; UINT8 VersionIdx;
UINT8 DateIdx;
TmpBuffer = AllocateZeroPool (0x60); TmpBuffer = AllocateZeroPool (0x60);
VersionIdx = SmbiosTable.Type0->BiosVersion; VersionIdx = SmbiosTable.Type0->BiosVersion;
DateIdx = SmbiosTable.Type0->BiosReleaseDate; GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), VersionIdx, &FwVersion);
GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), VersionIdx, &FwVersion); StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), L"Version: ");
GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), DateIdx, &FwDate); StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), FwVersion);
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), L"FW: ");
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), FwVersion);
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), L" ");
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), FwDate);
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);
HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, TmpBuffer, NULL);
FreePool (FwVersion); TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);
FreePool (FwDate); HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, TmpBuffer, NULL);
FreePool (TmpBuffer);
}
SmbiosTable = GetSmbiosTableFromType (EntryPoint, SMBIOS_TYPE_SYSTEM_INFORMATION , 0); FreePool (FwVersion);
FreePool (TmpBuffer);
if (SmbiosTable.Raw != NULL) { }
CHAR16 *ProductName;
CHAR16 *Manufacturer;
CHAR16 *DeviceName;
CHAR16 *TmpBuffer;
UINT8 ProductIdx;
UINT8 ManIdx;
TmpBuffer = AllocateZeroPool (0x60); SmbiosTable = GetSmbiosTableFromType (EntryPoint, SMBIOS_TYPE_SYSTEM_INFORMATION , 0);
DeviceName = AllocateZeroPool (0x60); if (SmbiosTable.Raw != NULL) {
CHAR16 *Manufacturer;
CHAR16 *ProductName;
CHAR16 *ProductVersion;
CHAR16 *Title;
CHAR16 *Model;
UINT8 ModelIdx;
UINT8 ManIdx;
UINT8 VersionIdx;
ProductIdx = SmbiosTable.Type1->ProductName; Title = AllocateZeroPool (0x60);
ManIdx = SmbiosTable.Type1->Manufacturer; Model = AllocateZeroPool (0x60);
GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), ProductIdx, &ProductName);
GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), ManIdx, &Manufacturer);
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), Manufacturer); ManIdx = SmbiosTable.Type1->Manufacturer;
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), L" "); ModelIdx = SmbiosTable.Type1->ProductName;
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), ProductName);
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);
HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, TmpBuffer, NULL);
FreePool (ProductName);
FreePool (Manufacturer);
FreePool (DeviceName);
FreePool (TmpBuffer);
}
SmbiosTable = GetSmbiosTableFromType (EntryPoint, SMBIOS_TYPE_PROCESSOR_INFORMATION , 0); GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), ModelIdx, &ProductName);
if (SmbiosTable.Raw != NULL) { GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), ManIdx, &Manufacturer);
CHAR16 *ProcessorVersion;
CHAR16 *TmpBuffer;
UINT8 CpuIdx;
TmpBuffer = AllocateZeroPool (0x60); StrCatS (Title, 0x60 / sizeof (CHAR16), Manufacturer);
StrCatS (Title, 0x60 / sizeof (CHAR16), L" ");
StrCatS (Title, 0x60 / sizeof (CHAR16), ProductName);
CpuIdx = SmbiosTable.Type4->ProcessorVersion; TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_TITLE);
HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, Title, NULL);
GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), CpuIdx, &ProcessorVersion); VersionIdx = SmbiosTable.Type1->Version;
StrCatS (TmpBuffer, 0x60 / sizeof (CHAR16), ProcessorVersion); GetOptionalStringByIndex ((CHAR8*)((UINT8*)SmbiosTable.Raw + SmbiosTable.Hdr->Length), VersionIdx, &ProductVersion);
// Trim leading spaces
while (TmpBuffer[0] == 0x20) {
TmpBuffer = &TmpBuffer[1];
}
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);
HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, TmpBuffer, NULL);
FreePool (ProcessorVersion);
FreePool (TmpBuffer);
}
SmbiosTable = GetSmbiosTableFromType (EntryPoint, SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS , 0); StrCatS (Model, 0x60 / sizeof (CHAR16), L"Model: ");
if (SmbiosTable.Raw != NULL) { StrCatS (Model, 0x60 / sizeof (CHAR16), ProductVersion);
if (SmbiosTable.Type19->StartingAddress != 0xFFFFFFFF ) {
InstalledMemory += RShiftU64(SmbiosTable.Type19->EndingAddress -
SmbiosTable.Type19->StartingAddress + 1, 10);
} else {
InstalledMemory += RShiftU64(SmbiosTable.Type19->ExtendedEndingAddress -
SmbiosTable.Type19->ExtendedStartingAddress + 1, 20);
}
// now update the total installed RAM size TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);
ConvertMemorySizeToString ((UINT32)InstalledMemory, &MemoryStr ); HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, Model, NULL);
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE);
HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, MemoryStr, NULL); FreePool (Model);
FreePool (Title);
FreePool (MemoryStr); FreePool (ProductVersion);
} FreePool (ProductName);
FreePool (Manufacturer);
} }
} }
@ -1029,11 +975,6 @@ UiEntry (
FreeFrontPage (); FreeFrontPage ();
if (mLanguageString != NULL) {
FreePool (mLanguageString);
mLanguageString = NULL;
}
// //
//Will leave browser, check any reset required change is applied? if yes, reset system //Will leave browser, check any reset required change is applied? if yes, reset system
// //
@ -1046,10 +987,6 @@ UiEntry (
// user change any option setting which needs a reset to be effective, and the reset will be applied according to the user selection. // user change any option setting which needs a reset to be effective, and the reset will be applied according to the user selection.
// //
/** /**
Record the info that a reset is required. Record the info that a reset is required.
A module boolean variable is used to record whether a reset is required. A module boolean variable is used to record whether a reset is required.
@ -1064,10 +1001,6 @@ EnableResetRequired (
mResetRequired = TRUE; mResetRequired = TRUE;
} }
/** /**
Check if user changed any option setting which needs a system reset to be effective. Check if user changed any option setting which needs a system reset to be effective.

View File

@ -32,9 +32,9 @@ extern EFI_FORM_BROWSER2_PROTOCOL *gFormBrowser2;
// //
// These are defined as the same with vfr file // These are defined as the same with vfr file
// //
#define FRONT_PAGE_FORM_ID 0x1000 #define FRONT_PAGE_FORM_ID 0x7600
#define LABEL_FRANTPAGE_INFORMATION 0x1000 #define LABEL_FRONTPAGE_INFORMATION 0x1000
#define LABEL_END 0xffff #define LABEL_END 0xffff
#define FRONT_PAGE_FORMSET_GUID \ #define FRONT_PAGE_FORMSET_GUID \
@ -52,7 +52,6 @@ typedef struct {
// //
EFI_HII_HANDLE HiiHandle; EFI_HII_HANDLE HiiHandle;
EFI_HANDLE DriverHandle; EFI_HANDLE DriverHandle;
EFI_STRING_ID *LanguageToken;
// //
// Produced protocols // Produced protocols
@ -210,4 +209,3 @@ ExtractDevicePathFromHiiHandle (
); );
#endif // _FRONT_PAGE_H_ #endif // _FRONT_PAGE_H_

View File

@ -29,35 +29,15 @@ UiCustomizeFrontPage (
IN VOID *StartOpCodeHandle IN VOID *StartOpCodeHandle
) )
{ {
//
// Create "Select Language" menu with Oneof opcode.
//
UiCreateLanguageMenu (HiiHandle, StartOpCodeHandle);
//
// Create empty line.
//
UiCreateEmptyLine(HiiHandle, StartOpCodeHandle);
//
// Find third party drivers which need to be shown in the front page.
//
UiListThirdPartyDrivers (HiiHandle, &gEfiIfrFrontPageGuid, NULL, StartOpCodeHandle);
//
// Create empty line.
//
UiCreateEmptyLine(HiiHandle, StartOpCodeHandle);
// //
// Create "Continue" menu. // Create "Continue" menu.
// //
UiCreateContinueMenu(HiiHandle, StartOpCodeHandle); UiCreateContinueMenu(HiiHandle, StartOpCodeHandle);
// //
// Create reset menu. // Find third party drivers which need to be shown in the front page.
// //
UiCreateResetMenu(HiiHandle, StartOpCodeHandle); UiListThirdPartyDrivers (HiiHandle, &gEfiIfrFrontPageGuid, NULL, StartOpCodeHandle);
} }
/** /**
@ -96,44 +76,3 @@ UiFrontPageCallbackHandler (
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
/**
Update the banner string in the front page.
Current layout for the banner string like below:
PS: Totally only 5 lines of banner supported.
Line 1: Left BannerStr RightBannerStr
Line 2: Left BannerStr RightBannerStr
Line 3: Left BannerStr RightBannerStr
Line 4: Left BannerStr RightBannerStr
Line 5: Left BannerStr RightBannerStr
<EmptyLine>
First menu in front page.
...
@param LineIndex The line index of the banner need to check.
@param LeftOrRight The left or right banner need to check.
@param BannerStr Banner string need to update.
Input the current string and user can update
it and return the new string.
**/
VOID
UiCustomizeFrontPageBanner (
IN UINTN LineIndex,
IN BOOLEAN LeftOrRight,
IN OUT EFI_STRING *BannerStr
)
{
if ((LineIndex == 5) && LeftOrRight) {
// Update STR_CUSTOMIZE_BANNER_LINE5_LEFT
if (PcdGetBool(PcdTestKeyUsed)) {
if (BannerStr != NULL) {
FreePool(*BannerStr);
}
*BannerStr = HiiGetString(gFrontPagePrivate.HiiHandle, STRING_TOKEN(STR_TEST_KEY_USED), NULL);
}
}
return;
}

View File

@ -9,35 +9,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#ifndef __FRONTPAGE_CUSTOMIZED_UI_H__ #ifndef __FRONTPAGE_CUSTOMIZED_UI_H__
#define __FRONTPAGE_CUSTOMIZED_UI_H__ #define __FRONTPAGE_CUSTOMIZED_UI_H__
/**
Update the banner string in the front page.
Current layout for the banner string like below:
PS: Totally only 5 lines of banner supported.
Line 1: Left BannerStr RightBannerStr
Line 2: Left BannerStr RightBannerStr
Line 3: Left BannerStr RightBannerStr
Line 4: Left BannerStr RightBannerStr
Line 5: Left BannerStr RightBannerStr
<EmptyLine>
First menu in front page.
...
@param LineIndex The line index of the banner need to check.
@param LeftOrRight The left or right banner need to check.
@param BannerStr Banner string need to update.
Input the current string and user can update
it and return the new string.
**/
VOID
UiCustomizeFrontPageBanner (
IN UINTN LineIndex,
IN BOOLEAN LeftOrRight,
IN OUT EFI_STRING *BannerStr
);
/** /**
Customize menus in the page. Customize menus in the page.

View File

@ -35,8 +35,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define UI_HII_DRIVER_LIST_SIZE 0x8 #define UI_HII_DRIVER_LIST_SIZE 0x8
#define FRONT_PAGE_KEY_CONTINUE 0x1000 #define FRONT_PAGE_KEY_CONTINUE 0x1000
#define FRONT_PAGE_KEY_RESET 0x1001
#define FRONT_PAGE_KEY_LANGUAGE 0x1002
#define FRONT_PAGE_KEY_DRIVER 0x2000 #define FRONT_PAGE_KEY_DRIVER 0x2000
typedef struct { typedef struct {
@ -47,112 +45,10 @@ typedef struct {
BOOLEAN EmptyLineAfter; BOOLEAN EmptyLineAfter;
} UI_HII_DRIVER_INSTANCE; } UI_HII_DRIVER_INSTANCE;
CHAR8 *gLanguageString;
EFI_STRING_ID *gLanguageToken;
UI_HII_DRIVER_INSTANCE *gHiiDriverList; UI_HII_DRIVER_INSTANCE *gHiiDriverList;
extern EFI_HII_HANDLE gStringPackHandle; extern EFI_HII_HANDLE gStringPackHandle;
UINT8 gCurrentLanguageIndex;
/**
Get next language from language code list (with separator ';').
If LangCode is NULL, then ASSERT.
If Lang is NULL, then ASSERT.
@param LangCode On input: point to first language in the list. On
output: point to next language in the list, or
NULL if no more language in the list.
@param Lang The first language in the list.
**/
VOID
GetNextLanguage (
IN OUT CHAR8 **LangCode,
OUT CHAR8 *Lang
)
{
UINTN Index;
CHAR8 *StringPtr;
ASSERT (LangCode != NULL);
ASSERT (*LangCode != NULL);
ASSERT (Lang != NULL);
Index = 0;
StringPtr = *LangCode;
while (StringPtr[Index] != 0 && StringPtr[Index] != ';') {
Index++;
}
CopyMem (Lang, StringPtr, Index);
Lang[Index] = 0;
if (StringPtr[Index] == ';') {
Index++;
}
*LangCode = StringPtr + Index;
}
/**
This function processes the language changes in configuration.
@param Value A pointer to the data being sent to the original exporting driver.
@retval TRUE The callback successfully handled the action.
@retval FALSE The callback not supported in this handler.
**/
EFI_STATUS
LanguageChangeHandler (
IN EFI_IFR_TYPE_VALUE *Value
)
{
CHAR8 *LangCode;
CHAR8 *Lang;
UINTN Index;
EFI_STATUS Status;
//
// Allocate working buffer for RFC 4646 language in supported LanguageString.
//
Lang = AllocatePool (AsciiStrSize (gLanguageString));
ASSERT (Lang != NULL);
Index = 0;
LangCode = gLanguageString;
while (*LangCode != 0) {
GetNextLanguage (&LangCode, Lang);
if (Index == Value->u8) {
gCurrentLanguageIndex = Value->u8;
break;
}
Index++;
}
if (Index == Value->u8) {
Status = gRT->SetVariable (
L"PlatformLang",
&gEfiGlobalVariableGuid,
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
AsciiStrSize (Lang),
Lang
);
if (EFI_ERROR (Status)) {
FreePool (Lang);
return EFI_DEVICE_ERROR;
}
} else {
ASSERT (FALSE);
}
FreePool (Lang);
return EFI_SUCCESS;
}
/** /**
This function processes the results of changes in configuration. This function processes the results of changes in configuration.
@ -181,19 +77,12 @@ UiSupportLibCallbackHandler (
OUT EFI_STATUS *Status OUT EFI_STATUS *Status
) )
{ {
if (QuestionId != FRONT_PAGE_KEY_CONTINUE && if (QuestionId != FRONT_PAGE_KEY_CONTINUE) {
QuestionId != FRONT_PAGE_KEY_RESET &&
QuestionId != FRONT_PAGE_KEY_LANGUAGE) {
return FALSE; return FALSE;
} }
if (Action == EFI_BROWSER_ACTION_RETRIEVE) { if (Action == EFI_BROWSER_ACTION_RETRIEVE) {
if (QuestionId == FRONT_PAGE_KEY_LANGUAGE) { *Status = EFI_UNSUPPORTED;
Value->u8 = gCurrentLanguageIndex;
*Status = EFI_SUCCESS;
} else {
*Status = EFI_UNSUPPORTED;
}
return TRUE; return TRUE;
} }
@ -220,17 +109,6 @@ UiSupportLibCallbackHandler (
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT; *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;
break; break;
case FRONT_PAGE_KEY_LANGUAGE:
*Status = LanguageChangeHandler(Value);
break;
case FRONT_PAGE_KEY_RESET:
//
// Reset
//
gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
*Status = EFI_UNSUPPORTED;
default: default:
break; break;
} }
@ -239,156 +117,6 @@ UiSupportLibCallbackHandler (
return TRUE; return TRUE;
} }
/**
Create Select language menu in the front page with oneof opcode.
@param[in] HiiHandle The hii handle for the Uiapp driver.
@param[in] StartOpCodeHandle The opcode handle to save the new opcode.
**/
VOID
UiCreateLanguageMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
CHAR8 *LangCode;
CHAR8 *Lang;
UINTN LangSize;
CHAR8 *CurrentLang;
UINTN OptionCount;
CHAR16 *StringBuffer;
VOID *OptionsOpCodeHandle;
UINTN StringSize;
EFI_STATUS Status;
EFI_HII_STRING_PROTOCOL *HiiString;
Lang = NULL;
StringBuffer = NULL;
//
// Init OpCode Handle and Allocate space for creation of UpdateData Buffer
//
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT (OptionsOpCodeHandle != NULL);
GetEfiGlobalVariable2 (L"PlatformLang", (VOID**)&CurrentLang, NULL);
//
// Get Support language list from variable.
//
GetEfiGlobalVariable2 (L"PlatformLangCodes", (VOID**)&gLanguageString, NULL);
if (gLanguageString == NULL) {
gLanguageString = AllocateCopyPool (
AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes)),
(CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes)
);
ASSERT (gLanguageString != NULL);
}
if (gLanguageToken == NULL) {
//
// Count the language list number.
//
LangCode = gLanguageString;
Lang = AllocatePool (AsciiStrSize (gLanguageString));
ASSERT (Lang != NULL);
OptionCount = 0;
while (*LangCode != 0) {
GetNextLanguage (&LangCode, Lang);
OptionCount ++;
}
//
// Allocate extra 1 as the end tag.
//
gLanguageToken = AllocateZeroPool ((OptionCount + 1) * sizeof (EFI_STRING_ID));
ASSERT (gLanguageToken != NULL);
Status = gBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, (VOID **) &HiiString);
ASSERT_EFI_ERROR (Status);
LangCode = gLanguageString;
OptionCount = 0;
while (*LangCode != 0) {
GetNextLanguage (&LangCode, Lang);
StringSize = 0;
Status = HiiString->GetString (HiiString, Lang, HiiHandle, PRINTABLE_LANGUAGE_NAME_STRING_ID, StringBuffer, &StringSize, NULL);
if (Status == EFI_BUFFER_TOO_SMALL) {
StringBuffer = AllocateZeroPool (StringSize);
ASSERT (StringBuffer != NULL);
Status = HiiString->GetString (HiiString, Lang, HiiHandle, PRINTABLE_LANGUAGE_NAME_STRING_ID, StringBuffer, &StringSize, NULL);
ASSERT_EFI_ERROR (Status);
}
if (EFI_ERROR (Status)) {
LangSize = AsciiStrSize (Lang);
StringBuffer = AllocatePool (LangSize * sizeof (CHAR16));
ASSERT (StringBuffer != NULL);
AsciiStrToUnicodeStrS (Lang, StringBuffer, LangSize);
}
ASSERT (StringBuffer != NULL);
gLanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL);
FreePool (StringBuffer);
OptionCount++;
}
}
ASSERT (gLanguageToken != NULL);
LangCode = gLanguageString;
OptionCount = 0;
if (Lang == NULL) {
Lang = AllocatePool (AsciiStrSize (gLanguageString));
ASSERT (Lang != NULL);
}
while (*LangCode != 0) {
GetNextLanguage (&LangCode, Lang);
if (CurrentLang != NULL && AsciiStrCmp (Lang, CurrentLang) == 0) {
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
gLanguageToken[OptionCount],
EFI_IFR_OPTION_DEFAULT,
EFI_IFR_NUMERIC_SIZE_1,
(UINT8) OptionCount
);
gCurrentLanguageIndex = (UINT8) OptionCount;
} else {
HiiCreateOneOfOptionOpCode (
OptionsOpCodeHandle,
gLanguageToken[OptionCount],
0,
EFI_IFR_NUMERIC_SIZE_1,
(UINT8) OptionCount
);
}
OptionCount++;
}
if (CurrentLang != NULL) {
FreePool (CurrentLang);
}
FreePool (Lang);
HiiCreateOneOfOpCode (
StartOpCodeHandle,
FRONT_PAGE_KEY_LANGUAGE,
0,
0,
STRING_TOKEN (STR_LANGUAGE_SELECT),
STRING_TOKEN (STR_LANGUAGE_SELECT_HELP),
EFI_IFR_FLAG_CALLBACK,
EFI_IFR_NUMERIC_SIZE_1,
OptionsOpCodeHandle,
NULL
);
}
/** /**
Create continue menu in the front page. Create continue menu in the front page.
@ -405,8 +133,8 @@ UiCreateContinueMenu (
HiiCreateActionOpCode ( HiiCreateActionOpCode (
StartOpCodeHandle, StartOpCodeHandle,
FRONT_PAGE_KEY_CONTINUE, FRONT_PAGE_KEY_CONTINUE,
STRING_TOKEN (STR_CONTINUE_PROMPT), STRING_TOKEN (STR_BOOT_DEFAULT_PROMPT),
STRING_TOKEN (STR_CONTINUE_PROMPT), STRING_TOKEN (STR_BOOT_DEFAULT_HELP),
EFI_IFR_FLAG_CALLBACK, EFI_IFR_FLAG_CALLBACK,
0 0
); );
@ -425,30 +153,7 @@ UiCreateEmptyLine (
IN VOID *StartOpCodeHandle IN VOID *StartOpCodeHandle
) )
{ {
HiiCreateSubTitleOpCode (StartOpCodeHandle, STRING_TOKEN (STR_NULL_STRING), 0, 0, 0); HiiCreateSubTitleOpCode (StartOpCodeHandle, STRING_TOKEN (STR_EMPTY_STRING), 0, 0, 0);
}
/**
Create Reset menu in the front page.
@param[in] HiiHandle The hii handle for the Uiapp driver.
@param[in] StartOpCodeHandle The opcode handle to save the new opcode.
**/
VOID
UiCreateResetMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
)
{
HiiCreateActionOpCode (
StartOpCodeHandle,
FRONT_PAGE_KEY_RESET,
STRING_TOKEN (STR_RESET_STRING),
STRING_TOKEN (STR_RESET_STRING),
EFI_IFR_FLAG_CALLBACK,
0
);
} }
/** /**

View File

@ -35,32 +35,6 @@ UiCreateEmptyLine (
IN VOID *StartOpCodeHandle IN VOID *StartOpCodeHandle
); );
/**
Create Select language menu in the front page with oneof opcode.
@param[in] HiiHandle The hii handle for the Uiapp driver.
@param[in] StartOpCodeHandle The opcode handle to save the new opcode.
**/
VOID
UiCreateLanguageMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/**
Create Reset menu.
@param[in] HiiHandle The hii handle for the Uiapp driver.
@param[in] StartOpCodeHandle The opcode handle to save the new opcode.
**/
VOID
UiCreateResetMenu (
IN EFI_HII_HANDLE HiiHandle,
IN VOID *StartOpCodeHandle
);
/** /**
Rename the driver name if necessary. Rename the driver name if necessary.

View File

@ -10,59 +10,11 @@
/=# /=#
#langdef en-US "English" #langdef en-US "English"
#langdef fr-FR "Français"
#langdef en "Standard English"
#langdef fr "Standard Français"
#string STR_FRONT_PAGE_TITLE #language en-US "Front Page" #string STR_FRONT_PAGE_TITLE #language en-US "Front Page"
#language fr-FR "Front Page" #string STR_FRONT_PAGE_COMPUTER_MODEL #language en-US "<model>"
#string STR_FRONT_PAGE_COMPUTER_MODEL #language en-US "" #string STR_FRONT_PAGE_BIOS_VERSION #language en-US "<bios>"
#language fr-FR "" #string STR_BOOT_DEFAULT_PROMPT #language en-US "Boot Default"
#string STR_FRONT_PAGE_CPU_MODEL #language en-US "" #string STR_BOOT_DEFAULT_HELP #language en-US "Boot the default entry"
#language fr-FR ""
#string STR_FRONT_PAGE_CPU_SPEED #language en-US ""
#language fr-FR ""
#string STR_FRONT_PAGE_MEMORY_SIZE #language en-US ""
#language fr-FR ""
#string STR_FRONT_PAGE_BIOS_VERSION #language en-US ""
#language fr-FR ""
#string STR_FRONT_PAGE_BANNER_0_LEFT #language en-US "Wonder Computer Model 1000Z Manufactured by Intel®"
#language fr-FR "Demander le Modèle d'Ordinateur 1000Z A Fabriqué par Intel®"
#string STR_FRONT_PAGE_BANNER_0_RIGHT #language en-US "OK"
#language fr-FR "Bon"
#string STR_FRONT_PAGE_BANNER_1_LEFT #language en-US "2 Pentium® X Xeon processors running at 800Thz"
#language fr-FR "2 processeurs Pentium® X Xeon tournants à 800Thz"
#string STR_FRONT_PAGE_BANNER_1_RIGHT #language en-US "24 TB System RAM"
#language fr-FR "24 TB RAM de Système"
#string STR_FRONT_PAGE_BANNER_2_LEFT #language en-US "ACME® EFI BIOS Version 13.5 Release 1039.92"
#language fr-FR "ACME® EFI BIOS Version 13.5 Release 1039.92"
#string STR_FRONT_PAGE_BANNER_3_LEFT #language en-US "Serial Number: 1Z123456789MARMAR (Need SMBIOS entries)"
#language fr-FR "Numéro de série: 1Z123456789MARMAR (Les entrées de SMBIOS de besoin)"
#string STR_CONTINUE_PROMPT #language en-US "Continue"
#language fr-FR "Continuer"
#string STR_CONTINUE_HELP #language en-US "This selection will direct the system to continue to booting process"
#language fr-FR "Cette sélection dirigera le système pour continuer au processus d'amorçage"
#string STR_LANGUAGE_SELECT #language en-US "Select Language"
#language fr-FR "Choisir la Langue"
#string STR_LANGUAGE_SELECT_HELP #language en-US "This is the option one adjusts to change the language for the current system"
#language fr-FR "Ceci est l'option qu'on ajuste pour changer la langue pour le système actuel"
#string STR_MISSING_STRING #language en-US "Missing String" #string STR_MISSING_STRING #language en-US "Missing String"
#language fr-FR "Missing String"
#string STR_EMPTY_STRING #language en-US "" #string STR_EMPTY_STRING #language en-US ""
#language fr-FR ""
#string STR_RESET_STRING #language en-US "Reset"
#language fr-FR "Reset"
#string STR_RESET_STRING_HELP #language en-US "Reset the current setting."
#language fr-FR "Reset the current setting."
#string STR_CUSTOMIZE_BANNER_LINE4_LEFT #language en-US ""
#language fr-FR ""
#string STR_CUSTOMIZE_BANNER_LINE4_RIGHT #language en-US ""
#language fr-FR ""
#string STR_CUSTOMIZE_BANNER_LINE5_LEFT #language en-US ""
#language fr-FR ""
#string STR_CUSTOMIZE_BANNER_LINE5_RIGHT #language en-US ""
#language fr-FR ""
#string STR_TEST_KEY_USED #language en-US "WARNING: Test key detected."
#language fr-FR "WARNING: Test key detected."
#string STR_NULL_STRING #language en-US " "
#language fr-FR " "

View File

@ -9,66 +9,25 @@
#define FORMSET_GUID { 0x9e0c30bc, 0x3f06, 0x4ba6, 0x82, 0x88, 0x9, 0x17, 0x9b, 0x85, 0x5d, 0xbe } #define FORMSET_GUID { 0x9e0c30bc, 0x3f06, 0x4ba6, 0x82, 0x88, 0x9, 0x17, 0x9b, 0x85, 0x5d, 0xbe }
#define FRONT_PAGE_FORM_ID 0x1000 #define FRONT_PAGE_FORM_ID 0x7600
#define LABEL_FRANTPAGE_INFORMATION 0x1000 #define LABEL_FRONTPAGE_INFORMATION 0x1000
#define LABEL_END 0xffff #define LABEL_END 0xffff
formset formset
guid = FORMSET_GUID, guid = FORMSET_GUID,
title = STRING_TOKEN(STR_FRONT_PAGE_TITLE), title = STRING_TOKEN(STR_FRONT_PAGE_TITLE),
help = STRING_TOKEN(STR_EMPTY_STRING ), help = STRING_TOKEN(STR_EMPTY_STRING),
classguid = FORMSET_GUID, classguid = FORMSET_GUID,
form formid = FRONT_PAGE_FORM_ID, form formid = FRONT_PAGE_FORM_ID,
title = STRING_TOKEN(STR_FRONT_PAGE_TITLE); title = STRING_TOKEN(STR_FRONT_PAGE_TITLE);
banner subtitle text = STRING_TOKEN(STR_FRONT_PAGE_COMPUTER_MODEL);
title = STRING_TOKEN(STR_FRONT_PAGE_COMPUTER_MODEL), subtitle text = STRING_TOKEN(STR_FRONT_PAGE_BIOS_VERSION);
line 1, subtitle text = STRING_TOKEN(STR_EMPTY_STRING);
align left;
banner label LABEL_FRONTPAGE_INFORMATION;
title = STRING_TOKEN(STR_FRONT_PAGE_CPU_MODEL),
line 2,
align left;
banner
title = STRING_TOKEN(STR_FRONT_PAGE_CPU_SPEED),
line 2,
align right;
banner
title = STRING_TOKEN(STR_FRONT_PAGE_BIOS_VERSION),
line 3,
align left;
banner
title = STRING_TOKEN(STR_FRONT_PAGE_MEMORY_SIZE),
line 3,
align right;
banner
title = STRING_TOKEN(STR_CUSTOMIZE_BANNER_LINE4_LEFT),
line 4,
align left;
banner
title = STRING_TOKEN(STR_CUSTOMIZE_BANNER_LINE4_RIGHT),
line 4,
align right;
banner
title = STRING_TOKEN(STR_CUSTOMIZE_BANNER_LINE5_LEFT),
line 5,
align left;
banner
title = STRING_TOKEN(STR_CUSTOMIZE_BANNER_LINE5_RIGHT),
line 5,
align right;
label LABEL_FRANTPAGE_INFORMATION;
// //
// This is where we will dynamically add a Action type op-code to show // This is where we will dynamically add a Action type op-code to show
// the platform information. // the platform information.