\r
#include "Bds.h"\r
#include "FrontPage.h"\r
+#include "Language.h"\r
\r
EFI_GUID mFrontPageGuid = FRONT_PAGE_FORMSET_GUID;\r
\r
}\r
};\r
\r
+HII_VENDOR_DEVICE_PATH mFrontPageHiiVendorDevicePath = {\r
+ {\r
+ {\r
+ HARDWARE_DEVICE_PATH,\r
+ HW_VENDOR_DP,\r
+ {\r
+ (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ }\r
+ },\r
+ //\r
+ // {8E6D99EE-7531-48f8-8745-7F6144468FF2}\r
+ //\r
+ { 0x8e6d99ee, 0x7531, 0x48f8, { 0x87, 0x45, 0x7f, 0x61, 0x44, 0x46, 0x8f, 0xf2 } }\r
+ },\r
+ {\r
+ END_DEVICE_PATH_TYPE,\r
+ END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
+ {\r
+ (UINT8) (END_DEVICE_PATH_LENGTH),\r
+ (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
+ }\r
+ }\r
+};\r
+\r
/**\r
This function allows a caller to extract the current configuration for one\r
or more named elements from the target driver.\r
OUT EFI_STRING *Results\r
)\r
{\r
+ if (Request == NULL || Progress == NULL || Results == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ *Progress = Request;\r
return EFI_NOT_FOUND;\r
}\r
\r
OUT EFI_STRING *Progress\r
)\r
{\r
+ if (Configuration == NULL || Progress == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ *Progress = Configuration;\r
+ if (!HiiIsConfigHdrMatch (Configuration, &mBootMaintGuid, mBootMaintStorageName)\r
+ && !HiiIsConfigHdrMatch (Configuration, &mFileExplorerGuid, mFileExplorerStorageName)) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
+\r
+ *Progress = Configuration + StrLen (Configuration);\r
return EFI_SUCCESS;\r
}\r
\r
CHAR8 *LanguageString;\r
CHAR8 *LangCode;\r
CHAR8 *Lang;\r
- CHAR8 OldLang[ISO_639_2_ENTRY_SIZE];\r
UINTN Index;\r
EFI_STATUS Status;\r
CHAR8 *PlatformSupportedLanguages;\r
//\r
// Collect the languages from what our current Language support is based on our VFR\r
//\r
- LanguageString = HiiLibGetSupportedLanguages (gFrontPagePrivate.HiiHandle);\r
+ LanguageString = HiiGetSupportedLanguages (gFrontPagePrivate.HiiHandle);\r
ASSERT (LanguageString != NULL);\r
//\r
// Allocate working buffer for RFC 4646 language in supported LanguageString.\r
//\r
Lang = AllocatePool (AsciiStrSize (LanguageString));\r
ASSERT (Lang != NULL);\r
- \r
+\r
Index = 0;\r
LangCode = LanguageString;\r
while (*LangCode != 0) {\r
- HiiLibGetNextLanguage (&LangCode, Lang);\r
+ GetNextLanguage (&LangCode, Lang);\r
\r
if (Index == Value->u8) {\r
break;\r
);\r
ASSERT (PlatformSupportedLanguages != NULL);\r
}\r
- \r
+\r
//\r
// Select the best language in platform supported Language.\r
//\r
AsciiStrSize (BestLanguage),\r
Lang\r
);\r
-\r
- if (!FeaturePcdGet (PcdUefiVariableDefaultLangDeprecate)) {\r
- //\r
- // Set UEFI deprecated variable "Lang" for backwards compatibility\r
- //\r
- Status = ConvertRfc3066LanguageToIso639Language (BestLanguage, OldLang);\r
- if (!EFI_ERROR (Status)) {\r
- Status = gRT->SetVariable (\r
- L"Lang",\r
- &gEfiGlobalVariableGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
- ISO_639_2_ENTRY_SIZE,\r
- OldLang\r
- );\r
- }\r
- }\r
+ ASSERT_EFI_ERROR(Status);\r
FreePool (BestLanguage);\r
+ } else {\r
+ ASSERT (FALSE);\r
}\r
- \r
+\r
FreePool (PlatformSupportedLanguages);\r
FreePool (Lang);\r
FreePool (LanguageString);\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
- EFI_HII_UPDATE_DATA UpdateData;\r
- IFR_OPTION *OptionList;\r
CHAR8 *LanguageString;\r
CHAR8 *LangCode;\r
CHAR8 *Lang;\r
CHAR8 *CurrentLang;\r
CHAR8 *BestLanguage;\r
UINTN OptionCount;\r
- EFI_STRING_ID Token;\r
CHAR16 *StringBuffer;\r
UINTN BufferSize;\r
- UINTN Index;\r
EFI_HII_HANDLE HiiHandle;\r
+ VOID *OptionsOpCodeHandle;\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
+ BOOLEAN FirstFlag;\r
\r
if (InitializeHiiData) {\r
//\r
}\r
\r
//\r
- // Create driver handle used by HII database\r
+ // Install Device Path Protocol and Config Access protocol to driver handle\r
//\r
- Status = HiiLibCreateHiiDriverHandle (&gFrontPagePrivate.DriverHandle);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- //\r
- // Install Config Access protocol to driver handle\r
- //\r
- Status = gBS->InstallProtocolInterface (\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
&gFrontPagePrivate.DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mFrontPageHiiVendorDevicePath,\r
&gEfiHiiConfigAccessProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &gFrontPagePrivate.ConfigAccess\r
+ &gFrontPagePrivate.ConfigAccess,\r
+ NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Publish our HII data\r
//\r
- PackageList = HiiLibPreparePackageList (2, &mFrontPageGuid, FrontPageVfrBin, BdsDxeStrings);\r
- ASSERT (PackageList != NULL);\r
-\r
- Status = gHiiDatabase->NewPackageList (\r
- gHiiDatabase,\r
- PackageList,\r
- gFrontPagePrivate.DriverHandle,\r
- &gFrontPagePrivate.HiiHandle\r
- );\r
- FreePool (PackageList);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ gFrontPagePrivate.HiiHandle = HiiAddPackages (\r
+ &mFrontPageGuid,\r
+ gFrontPagePrivate.DriverHandle,\r
+ FrontPageVfrBin,\r
+ BdsDxeStrings,\r
+ NULL\r
+ );\r
+ if (gFrontPagePrivate.HiiHandle == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
}\r
\r
\r
//\r
- // Allocate space for creation of UpdateData Buffer\r
+ // Init OpCode Handle and Allocate space for creation of UpdateData Buffer\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
+\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
+\r
+ OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (OptionsOpCodeHandle != NULL);\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
//\r
- UpdateData.BufferSize = 0x1000;\r
- UpdateData.Data = AllocateZeroPool (0x1000);\r
- ASSERT (UpdateData.Data != NULL);\r
+ StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartLabel->Number = LABEL_SELECT_LANGUAGE;\r
\r
- OptionList = AllocateZeroPool (0x1000);\r
- ASSERT (OptionList != NULL);\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ EndLabel->Number = LABEL_END;\r
\r
//\r
// Collect the languages from what our current Language support is based on our VFR\r
//\r
HiiHandle = gFrontPagePrivate.HiiHandle;\r
- LanguageString = HiiLibGetSupportedLanguages (HiiHandle);\r
+ LanguageString = HiiGetSupportedLanguages (HiiHandle);\r
ASSERT (LanguageString != NULL);\r
//\r
// Allocate working buffer for RFC 4646 language in supported LanguageString.\r
//\r
ASSERT (BestLanguage != NULL);\r
\r
+ OptionCount = 0;\r
+ LangCode = LanguageString;\r
+ FirstFlag = FALSE;\r
+\r
+ if (gFrontPagePrivate.LanguageToken == NULL) {\r
+ while (*LangCode != 0) {\r
+ GetNextLanguage (&LangCode, Lang);\r
+ OptionCount ++;\r
+ }\r
+ gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));\r
+ ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
+ FirstFlag = TRUE;\r
+ }\r
+\r
OptionCount = 0;\r
LangCode = LanguageString;\r
while (*LangCode != 0) {\r
- HiiLibGetNextLanguage (&LangCode, Lang);\r
+ GetNextLanguage (&LangCode, Lang);\r
\r
- if (gFrontPagePrivate.LanguageToken == NULL) {\r
+ if (FirstFlag) {\r
//\r
// Get Language Name from String Package. The StringId of Printable Language\r
// Name is always 1 which is generated by StringGather Tool.\r
}\r
ASSERT_EFI_ERROR (Status);\r
\r
- Token = 0;\r
- Status = HiiLibNewString (HiiHandle, &Token, StringBuffer);\r
+ //\r
+ // Save the string Id for each language\r
+ //\r
+ gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
FreePool (StringBuffer);\r
- } else {\r
- Token = gFrontPagePrivate.LanguageToken[OptionCount];\r
}\r
\r
if (AsciiStrCmp (Lang, BestLanguage) == 0) {\r
- OptionList[OptionCount].Flags = EFI_IFR_OPTION_DEFAULT;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ gFrontPagePrivate.LanguageToken[OptionCount],\r
+ EFI_IFR_OPTION_DEFAULT,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) OptionCount\r
+ );\r
} else {\r
- OptionList[OptionCount].Flags = 0;\r
+ HiiCreateOneOfOptionOpCode (\r
+ OptionsOpCodeHandle,\r
+ gFrontPagePrivate.LanguageToken[OptionCount],\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ (UINT8) OptionCount\r
+ );\r
}\r
- OptionList[OptionCount].StringToken = Token;\r
- OptionList[OptionCount].Value.u8 = (UINT8) OptionCount;\r
\r
OptionCount++;\r
}\r
FreePool (Lang);\r
FreePool (LanguageString);\r
\r
- UpdateData.Offset = 0;\r
- CreateOneOfOpCode (\r
+ HiiCreateOneOfOpCode (\r
+ StartOpCodeHandle,\r
FRONT_PAGE_KEY_LANGUAGE,\r
0,\r
0,\r
STRING_TOKEN (STR_LANGUAGE_SELECT_HELP),\r
EFI_IFR_FLAG_CALLBACK,\r
EFI_IFR_NUMERIC_SIZE_1,\r
- OptionList,\r
- OptionCount,\r
- &UpdateData\r
+ OptionsOpCodeHandle,\r
+ NULL\r
);\r
\r
- Status = IfrLibUpdateForm (\r
+ Status = HiiUpdateForm (\r
HiiHandle,\r
&mFrontPageGuid,\r
FRONT_PAGE_FORM_ID,\r
- LABEL_SELECT_LANGUAGE,\r
- FALSE,\r
- &UpdateData\r
+ StartOpCodeHandle, // LABEL_SELECT_LANGUAGE\r
+ EndOpCodeHandle // LABEL_END\r
);\r
\r
- //\r
- // Save the string Id for each language\r
- //\r
- gFrontPagePrivate.LanguageToken = AllocatePool (OptionCount * sizeof (EFI_STRING_ID));\r
- ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
- for (Index = 0; Index < OptionCount; Index++) {\r
- gFrontPagePrivate.LanguageToken[Index] = OptionList[Index].StringToken;\r
- }\r
-\r
- FreePool (UpdateData.Data);\r
- FreePool (OptionList);\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+ HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
return Status;\r
}\r
\r
gFormBrowser2,\r
&gFrontPagePrivate.HiiHandle,\r
1,\r
- NULL,\r
+ &mFrontPageGuid,\r
0,\r
NULL,\r
&ActionRequest\r
OUT CHAR16 **String\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STRING TmpString;\r
\r
- Status = HiiLibGetStringFromToken (ProducerGuid, Token, String);\r
- if (EFI_ERROR (Status)) {\r
+ TmpString = HiiGetPackageString (ProducerGuid, Token, NULL);\r
+ if (TmpString == NULL) {\r
*String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
+ } else {\r
+ *String = TmpString;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
/**\r
- Convert Processor Frequency Data to a string\r
+ Convert Processor Frequency Data to a string.\r
\r
@param ProcessorFrequency The frequency data to process\r
@param String The string that is created\r
Record = NULL;\r
do {\r
Status = DataHub->GetNextRecord (DataHub, &MonotonicCount, NULL, &Record);\r
+ if (EFI_ERROR (Status) || Record == NULL) {\r
+ break;\r
+ }\r
if (Record->DataRecordClass == EFI_DATA_RECORD_CLASS_DATA) {\r
DataHeader = (EFI_SUBCLASS_TYPE1_HEADER *) (Record + 1);\r
if (CompareGuid (&Record->DataRecordGuid, &gEfiMiscSubClassGuid) &&\r
BiosVendor = (EFI_MISC_BIOS_VENDOR_DATA *) (DataHeader + 1);\r
GetProducerString (&Record->ProducerName, BiosVendor->BiosVersion, &NewString);\r
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);\r
- HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
FreePool (NewString);\r
Find[0] = TRUE;\r
}\r
SystemManufacturer = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) (DataHeader + 1);\r
GetProducerString (&Record->ProducerName, SystemManufacturer->SystemProductName, &NewString);\r
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);\r
- HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
FreePool (NewString);\r
Find[1] = TRUE;\r
}\r
ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *) (DataHeader + 1);\r
GetProducerString (&Record->ProducerName, *ProcessorVersion, &NewString);\r
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);\r
- HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
FreePool (NewString);\r
Find[2] = TRUE;\r
}\r
ProcessorFrequency = (EFI_PROCESSOR_CORE_FREQUENCY_DATA *) (DataHeader + 1);\r
ConvertProcessorToString (ProcessorFrequency, &NewString);\r
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED);\r
- HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
FreePool (NewString);\r
Find[3] = TRUE;\r
}\r
&NewString\r
);\r
TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE);\r
- HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
FreePool (NewString);\r
Find[4] = TRUE;\r
}\r
}\r
\r
DEBUG ((EFI_D_INFO, "\n\nStart showing progress bar... Press any key to stop it! ...Zzz....\n"));\r
- \r
+\r
SetMem (&Foreground, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);\r
SetMem (&Background, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0x0);\r
SetMem (&Color, sizeof (EFI_GRAPHICS_OUTPUT_BLT_PIXEL), 0xff);\r
TimeoutRemain = TimeoutDefault;\r
while (TimeoutRemain != 0) {\r
DEBUG ((EFI_D_INFO, "Showing progress bar...Remaining %d second!\n", TimeoutRemain));\r
- \r
+\r
Status = WaitForSingleEvent (gST->ConIn->WaitForKey, ONE_SECOND);\r
if (Status != EFI_TIMEOUT) {\r
break;\r
{\r
EFI_STATUS Status;\r
\r
- PERF_START (0, "BdsTimeOut", "BDS", 0);\r
+ PERF_START (NULL, "BdsTimeOut", "BDS", 0);\r
//\r
// Indicate if we need connect all in the platform setup\r
//\r
// Note: The following lines of code only execute when Auto boot\r
// takes affect\r
//\r
- PERF_END (0, "BdsTimeOut", "BDS", 0);\r
+ PERF_END (NULL, "BdsTimeOut", "BDS", 0);\r
}\r