/** @file\r
FrontPage routines to handle the callbacks and browser calls\r
\r
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2018 Hewlett Packard Enterprise Development LP<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "FrontPage.h"\r
-#include "Language.h"\r
-#define MAX_STRING_LEN 200\r
+#include "FrontPageCustomizedUi.h"\r
+\r
+#define MAX_STRING_LEN 200\r
\r
-EFI_GUID mFrontPageGuid = FRONT_PAGE_FORMSET_GUID;\r
+EFI_GUID mFrontPageGuid = FRONT_PAGE_FORMSET_GUID;\r
\r
-BOOLEAN gConnectAllHappened = FALSE;\r
-BOOLEAN mFeaturerSwitch = TRUE;\r
BOOLEAN mResetRequired = FALSE;\r
-BOOLEAN mEnterBmm = FALSE;\r
\r
EFI_FORM_BROWSER2_PROTOCOL *gFormBrowser2;\r
CHAR8 *mLanguageString;\r
\r
**/\r
VOID\r
-UpdateFrontPageStrings (\r
+UpdateFrontPageBannerStrings (\r
VOID\r
);\r
\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
-/**\r
- Create oneof options for language.\r
-\r
-**/\r
-VOID\r
-InitializeLanguage (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- CHAR8 *LangCode;\r
- CHAR8 *Lang;\r
- CHAR8 *CurrentLang;\r
- UINTN OptionCount;\r
- CHAR16 *StringBuffer;\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
- EFI_HII_STRING_PROTOCOL *HiiString;\r
- UINTN StringSize;\r
-\r
- Lang = NULL;\r
- StringBuffer = NULL;\r
-\r
- //\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
- 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
- //\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
- // Collect the languages from what our current Language support is based on our VFR\r
- //\r
- HiiHandle = gFrontPagePrivate.HiiHandle;\r
-\r
- CurrentLang = GetEfiGlobalVariable (L"PlatformLang");\r
-\r
- if (mLanguageString == NULL) {\r
- //\r
- // Get Support language list from variable.\r
- //\r
- mLanguageString = GetEfiGlobalVariable (L"PlatformLangCodes");\r
- if (mLanguageString == NULL) {\r
- mLanguageString = AllocateCopyPool (\r
- AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes)),\r
- (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes)\r
- );\r
- ASSERT (mLanguageString != NULL);\r
- }\r
- }\r
-\r
- if (gFrontPagePrivate.LanguageToken == NULL) {\r
- //\r
- // Count the language list number.\r
- // \r
- LangCode = mLanguageString;\r
- Lang = AllocatePool (AsciiStrSize (mLanguageString));\r
- ASSERT (Lang != NULL);\r
- OptionCount = 0;\r
- while (*LangCode != 0) {\r
- GetNextLanguage (&LangCode, Lang);\r
- OptionCount ++;\r
- }\r
-\r
- //\r
- // Allocate extra 1 as the end tag.\r
- //\r
- gFrontPagePrivate.LanguageToken = AllocateZeroPool ((OptionCount + 1) * sizeof (EFI_STRING_ID));\r
- ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
-\r
- Status = gBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, (VOID **) &HiiString);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- LangCode = mLanguageString;\r
- OptionCount = 0;\r
- while (*LangCode != 0) {\r
- GetNextLanguage (&LangCode, Lang);\r
-\r
- StringSize = 0;\r
- Status = HiiString->GetString (HiiString, Lang, HiiHandle, PRINTABLE_LANGUAGE_NAME_STRING_ID, StringBuffer, &StringSize, NULL);\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- StringBuffer = AllocateZeroPool (StringSize);\r
- ASSERT (StringBuffer != NULL);\r
- Status = HiiString->GetString (HiiString, Lang, HiiHandle, PRINTABLE_LANGUAGE_NAME_STRING_ID, StringBuffer, &StringSize, NULL);\r
- ASSERT_EFI_ERROR (Status);\r
- }\r
-\r
- if (EFI_ERROR (Status)) {\r
- StringBuffer = AllocatePool (AsciiStrSize (Lang) * sizeof (CHAR16));\r
- ASSERT (StringBuffer != NULL);\r
- AsciiStrToUnicodeStr (Lang, StringBuffer);\r
- }\r
-\r
- ASSERT (StringBuffer != NULL);\r
- gFrontPagePrivate.LanguageToken[OptionCount] = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
- FreePool (StringBuffer);\r
-\r
- OptionCount++;\r
- }\r
- }\r
-\r
- ASSERT (gFrontPagePrivate.LanguageToken != NULL);\r
- LangCode = mLanguageString;\r
- OptionCount = 0;\r
- if (Lang == NULL) {\r
- Lang = AllocatePool (AsciiStrSize (mLanguageString));\r
- ASSERT (Lang != NULL);\r
- }\r
- while (*LangCode != 0) {\r
- GetNextLanguage (&LangCode, Lang);\r
-\r
- if (CurrentLang != NULL && AsciiStrCmp (Lang, CurrentLang) == 0) {\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
- HiiCreateOneOfOptionOpCode (\r
- OptionsOpCodeHandle,\r
- gFrontPagePrivate.LanguageToken[OptionCount],\r
- 0,\r
- EFI_IFR_NUMERIC_SIZE_1,\r
- (UINT8) OptionCount\r
- );\r
- }\r
-\r
- OptionCount++;\r
- }\r
\r
- if (CurrentLang != NULL) {\r
- FreePool (CurrentLang);\r
- }\r
- FreePool (Lang);\r
-\r
- HiiCreateOneOfOpCode (\r
- StartOpCodeHandle,\r
- FRONT_PAGE_KEY_LANGUAGE,\r
- 0,\r
- 0,\r
- STRING_TOKEN (STR_LANGUAGE_SELECT),\r
- STRING_TOKEN (STR_LANGUAGE_SELECT_HELP),\r
- EFI_IFR_FLAG_CALLBACK,\r
- EFI_IFR_NUMERIC_SIZE_1,\r
- OptionsOpCodeHandle,\r
- NULL\r
- );\r
-\r
- Status = HiiUpdateForm (\r
- HiiHandle,\r
- &mFrontPageGuid,\r
- FRONT_PAGE_FORM_ID,\r
- StartOpCodeHandle, // LABEL_SELECT_LANGUAGE\r
- EndOpCodeHandle // LABEL_END\r
- );\r
-\r
- HiiFreeOpCodeHandle (StartOpCodeHandle);\r
- HiiFreeOpCodeHandle (EndOpCodeHandle);\r
- HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+ return EFI_NOT_FOUND;\r
}\r
\r
/**\r
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
)\r
{\r
- CHAR8 *LangCode;\r
- CHAR8 *Lang;\r
- UINTN Index;\r
- EFI_STATUS Status;\r
-\r
- //\r
- //Chech whether exit from BMM and reenter frontpage,if yes,reclaim string depositories\r
- //\r
- if (Action == EFI_BROWSER_ACTION_FORM_OPEN){\r
- if (mEnterBmm){\r
- ReclaimStringDepository();\r
- mEnterBmm = FALSE;\r
- }\r
- }\r
-\r
- if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) {\r
- //\r
- // Do nothing for other UEFI Action. Only do call back when data is changed.\r
- //\r
- return EFI_UNSUPPORTED;\r
- }\r
-\r
- if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
- if ((Value == NULL) || (ActionRequest == NULL)) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
-\r
- switch (QuestionId) {\r
- case FRONT_PAGE_KEY_CONTINUE:\r
- //\r
- // This is the continue - clear the screen and return an error to get out of FrontPage loop\r
- //\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
- break;\r
-\r
- case FRONT_PAGE_KEY_LANGUAGE:\r
- //\r
- // Allocate working buffer for RFC 4646 language in supported LanguageString.\r
- //\r
- Lang = AllocatePool (AsciiStrSize (mLanguageString));\r
- ASSERT (Lang != NULL); \r
-\r
- Index = 0;\r
- LangCode = mLanguageString;\r
- while (*LangCode != 0) {\r
- GetNextLanguage (&LangCode, Lang);\r
-\r
- if (Index == Value->u8) {\r
- break;\r
- }\r
+ return UiFrontPageCallbackHandler (gFrontPagePrivate.HiiHandle, Action, QuestionId, Type, Value, ActionRequest);\r
+}\r
\r
- Index++;\r
- }\r
+/**\r
\r
- if (Index == Value->u8) {\r
- Status = gRT->SetVariable (\r
- L"PlatformLang",\r
- &gEfiGlobalVariableGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
- AsciiStrSize (Lang),\r
- Lang\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- } else {\r
- ASSERT (FALSE);\r
- }\r
- FreePool (Lang);\r
- //\r
- //Current language of platform is changed,recreate oneof options for language.\r
- //\r
- InitializeLanguage();\r
- break;\r
+ Update the menus in the front page.\r
\r
- default:\r
- break;\r
- }\r
- } else if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
- if (Value == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
+**/\r
+VOID\r
+UpdateFrontPageForm (\r
+ VOID\r
+ )\r
+{\r
+ VOID *StartOpCodeHandle;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartGuidLabel;\r
+ EFI_IFR_GUID_LABEL *EndGuidLabel;\r
\r
- //\r
- // The first 4 entries in the Front Page are to be GUARANTEED to remain constant so IHV's can\r
- // describe to their customers in documentation how to find their setup information (namely\r
- // under the device manager and specific buckets)\r
- //\r
- switch (QuestionId) {\r
- case FRONT_PAGE_KEY_BOOT_MANAGER:\r
- //\r
- // Boot Manager\r
- //\r
- EnumerateBootOptions ();\r
- break;\r
+ //\r
+ // Allocate space for creation of UpdateData Buffer\r
+ //\r
+ StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (StartOpCodeHandle != NULL);\r
\r
- case FRONT_PAGE_KEY_DEVICE_MANAGER:\r
- //\r
- // Device Manager\r
- //\r
- CreateDeviceManagerForm(DEVICE_MANAGER_FORM_ID);\r
- break;\r
+ EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+ ASSERT (EndOpCodeHandle != NULL);\r
+ //\r
+ // Create Hii Extend Label OpCode as the start opcode\r
+ //\r
+ StartGuidLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ StartGuidLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ StartGuidLabel->Number = LABEL_FRANTPAGE_INFORMATION;\r
+ //\r
+ // Create Hii Extend Label OpCode as the end opcode\r
+ //\r
+ EndGuidLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+ EndGuidLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+ EndGuidLabel->Number = LABEL_END;\r
\r
- case FRONT_PAGE_KEY_BOOT_MAINTAIN:\r
- //\r
- // Boot Maintenance Manager\r
- //\r
- InitializeBM ();\r
- mEnterBmm = TRUE;\r
- break;\r
+ //\r
+ //Updata Front Page form\r
+ //\r
+ UiCustomizeFrontPage (\r
+ gFrontPagePrivate.HiiHandle,\r
+ StartOpCodeHandle\r
+ );\r
\r
- default:\r
- break;\r
- }\r
- }\r
+ HiiUpdateForm (\r
+ gFrontPagePrivate.HiiHandle,\r
+ &mFrontPageGuid,\r
+ FRONT_PAGE_FORM_ID,\r
+ StartOpCodeHandle,\r
+ EndOpCodeHandle\r
+ );\r
\r
- return EFI_SUCCESS;\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
}\r
\r
/**\r
)\r
{\r
EFI_STATUS Status;\r
-\r
//\r
// Locate Hii relative protocols\r
//\r
ASSERT (gFrontPagePrivate.HiiHandle != NULL);\r
\r
//\r
- //Updata Front Page strings\r
+ //Updata Front Page banner strings\r
//\r
- UpdateFrontPageStrings ();\r
+ UpdateFrontPageBannerStrings ();\r
\r
//\r
- // Initialize laguage options\r
+ // Update front page menus.\r
//\r
- InitializeLanguage ();\r
+ UpdateFrontPageForm();\r
\r
return Status;\r
}\r
{\r
CHAR16 *StringBuffer;\r
UINTN Index;\r
+ UINTN DestMax;\r
UINT32 FreqMhz;\r
\r
if (Base10Exponent >= 6) {\r
FreqMhz = ProcessorFrequency;\r
- for (Index = 0; Index < (UINTN) (Base10Exponent - 6); Index++) {\r
+ for (Index = 0; Index < (UINT32) Base10Exponent - 6; Index++) {\r
FreqMhz *= 10;\r
}\r
} else {\r
FreqMhz = 0;\r
}\r
-\r
+ DestMax = 0x20 / sizeof (CHAR16);\r
StringBuffer = AllocateZeroPool (0x20);\r
ASSERT (StringBuffer != NULL);\r
- Index = UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, FreqMhz / 1000, 3);\r
- StrCat (StringBuffer, L".");\r
- UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 1000) / 10, 2);\r
- StrCat (StringBuffer, L" GHz");\r
+ UnicodeValueToStringS (StringBuffer, sizeof (CHAR16) * DestMax, LEFT_JUSTIFY, FreqMhz / 1000, 3);\r
+ Index = StrnLenS (StringBuffer, DestMax);\r
+ StrCatS (StringBuffer, DestMax, L".");\r
+ UnicodeValueToStringS (\r
+ StringBuffer + Index + 1,\r
+ sizeof (CHAR16) * (DestMax - (Index + 1)),\r
+ PREFIX_ZERO,\r
+ (FreqMhz % 1000) / 10,\r
+ 2\r
+ );\r
+ StrCatS (StringBuffer, DestMax, L" GHz");\r
*String = (CHAR16 *) StringBuffer;\r
return ;\r
}\r
\r
StringBuffer = AllocateZeroPool (0x24);\r
ASSERT (StringBuffer != NULL);\r
- UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, MemorySize, 10);\r
- StrCat (StringBuffer, L" MB RAM");\r
+ UnicodeValueToStringS (StringBuffer, 0x24, LEFT_JUSTIFY, MemorySize, 10);\r
+ StrCatS (StringBuffer, 0x24 / sizeof (CHAR16), L" MB RAM");\r
\r
*String = (CHAR16 *) StringBuffer;\r
\r
*String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
} else {\r
*String = AllocatePool (StrSize * sizeof (CHAR16));\r
- AsciiStrToUnicodeStr (OptionalStrStart, *String);\r
+ AsciiStrToUnicodeStrS (OptionalStrStart, *String, StrSize);\r
}\r
\r
return EFI_SUCCESS;\r
\r
\r
/**\r
+\r
Update the banner information for the Front Page based on Smbios information.\r
+\r
**/\r
VOID\r
-UpdateFrontPageStrings (\r
+UpdateFrontPageBannerStrings (\r
VOID\r
)\r
{\r
UINT8 StrIndex;\r
CHAR16 *NewString;\r
CHAR16 *FirmwareVersionString;\r
- BOOLEAN Find[5];\r
EFI_STATUS Status;\r
- EFI_STRING_ID TokenToUpdate;\r
EFI_SMBIOS_HANDLE SmbiosHandle;\r
EFI_SMBIOS_PROTOCOL *Smbios;\r
SMBIOS_TABLE_TYPE0 *Type0Record;\r
SMBIOS_TABLE_TYPE4 *Type4Record;\r
SMBIOS_TABLE_TYPE19 *Type19Record;\r
EFI_SMBIOS_TABLE_HEADER *Record;\r
+ UINT64 InstalledMemory;\r
+ BOOLEAN FoundCpu;\r
\r
- ZeroMem (Find, sizeof (Find));\r
+ InstalledMemory = 0;\r
+ FoundCpu = 0;\r
\r
//\r
- // Update Front Page strings\r
+ // Update default banner string.\r
//\r
- Status = gBS->LocateProtocol (\r
- &gEfiSmbiosProtocolGuid,\r
- NULL,\r
- (VOID **) &Smbios\r
- );\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE4_LEFT), NULL);\r
+ UiCustomizeFrontPageBanner (4, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE4_LEFT), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE4_RIGHT), NULL);\r
+ UiCustomizeFrontPageBanner (4, FALSE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE4_RIGHT), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE5_LEFT), NULL);\r
+ UiCustomizeFrontPageBanner (5, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE5_LEFT), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE5_RIGHT), NULL);\r
+ UiCustomizeFrontPageBanner (5, FALSE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_CUSTOMIZE_BANNER_LINE5_RIGHT), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ //\r
+ // Update Front Page banner strings base on SmBios Table.\r
+ //\r
+ Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID **) &Smbios);\r
if (EFI_ERROR (Status)) {\r
- return ;\r
+ //\r
+ // Smbios protocol not found, get the default value.\r
+ //\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL), NULL);\r
+ UiCustomizeFrontPageBanner (1, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL), NULL);\r
+ UiCustomizeFrontPageBanner (2, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED), NULL);\r
+ UiCustomizeFrontPageBanner (2, FALSE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION), NULL);\r
+ UiCustomizeFrontPageBanner (3, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ NewString = HiiGetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE), NULL);\r
+ UiCustomizeFrontPageBanner (3, FALSE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ return;\r
}\r
\r
SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
- do {\r
- Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
- if (EFI_ERROR(Status)) {\r
- break;\r
- }\r
-\r
- if (Record->Type == EFI_SMBIOS_TYPE_BIOS_INFORMATION) {\r
+ Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
+ while (!EFI_ERROR(Status)) {\r
+ if (Record->Type == SMBIOS_TYPE_BIOS_INFORMATION) {\r
Type0Record = (SMBIOS_TABLE_TYPE0 *) Record;\r
StrIndex = Type0Record->BiosVersion;\r
GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type0Record + Type0Record->Hdr.Length), StrIndex, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);\r
+\r
FirmwareVersionString = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
if (*FirmwareVersionString != 0x0000 ) {\r
FreePool (NewString);\r
NewString = (CHAR16 *) PcdGetPtr (PcdFirmwareVersionString);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ UiCustomizeFrontPageBanner (3, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION), NewString, NULL);\r
} else {\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ UiCustomizeFrontPageBanner (3, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION), NewString, NULL);\r
FreePool (NewString);\r
}\r
- Find[0] = TRUE;\r
- } \r
+ }\r
\r
- if (Record->Type == EFI_SMBIOS_TYPE_SYSTEM_INFORMATION) {\r
+ if (Record->Type == SMBIOS_TYPE_SYSTEM_INFORMATION) {\r
Type1Record = (SMBIOS_TABLE_TYPE1 *) Record;\r
StrIndex = Type1Record->ProductName;\r
GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type1Record + Type1Record->Hdr.Length), StrIndex, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ UiCustomizeFrontPageBanner (1, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL), NewString, NULL);\r
FreePool (NewString);\r
- Find[1] = TRUE;\r
}\r
\r
- if ((Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) && !Find[2]) {\r
+ if ((Record->Type == SMBIOS_TYPE_PROCESSOR_INFORMATION) && !FoundCpu) {\r
Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\r
//\r
- // The information in the record should be only valid when the CPU Socket is populated. \r
+ // The information in the record should be only valid when the CPU Socket is populated.\r
//\r
if ((Type4Record->Status & SMBIOS_TYPE4_CPU_SOCKET_POPULATED) == SMBIOS_TYPE4_CPU_SOCKET_POPULATED) {\r
StrIndex = Type4Record->ProcessorVersion;\r
GetOptionalStringByIndex ((CHAR8*)((UINT8*)Type4Record + Type4Record->Hdr.Length), StrIndex, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ UiCustomizeFrontPageBanner (2, TRUE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL), NewString, NULL);\r
FreePool (NewString);\r
- Find[2] = TRUE;\r
- }\r
- } \r
\r
- if ((Record->Type == EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION) && !Find[3]) {\r
- Type4Record = (SMBIOS_TABLE_TYPE4 *) Record;\r
- //\r
- // The information in the record should be only valid when the CPU Socket is populated. \r
- //\r
- if ((Type4Record->Status & SMBIOS_TYPE4_CPU_SOCKET_POPULATED) == SMBIOS_TYPE4_CPU_SOCKET_POPULATED) {\r
ConvertProcessorToString(Type4Record->CurrentSpeed, 6, &NewString);\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
+ UiCustomizeFrontPageBanner (2, FALSE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED), NewString, NULL);\r
FreePool (NewString);\r
- Find[3] = TRUE;\r
+\r
+ FoundCpu = TRUE;\r
}\r
- } \r
+ }\r
\r
- if ( Record->Type == EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS ) {\r
+ if ( Record->Type == SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS ) {\r
Type19Record = (SMBIOS_TABLE_TYPE19 *) Record;\r
- ConvertMemorySizeToString (\r
- (UINT32)(RShiftU64((Type19Record->EndingAddress - Type19Record->StartingAddress + 1), 10)),\r
- &NewString\r
- );\r
- TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE);\r
- HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
- FreePool (NewString);\r
- Find[4] = TRUE; \r
+ if (Type19Record->StartingAddress != 0xFFFFFFFF ) {\r
+ InstalledMemory += RShiftU64(Type19Record->EndingAddress -\r
+ Type19Record->StartingAddress + 1, 10);\r
+ } else {\r
+ InstalledMemory += RShiftU64(Type19Record->ExtendedEndingAddress -\r
+ Type19Record->ExtendedStartingAddress + 1, 20);\r
+ }\r
}\r
- } while ( !(Find[0] && Find[1] && Find[2] && Find[3] && Find[4]));\r
- return ;\r
+\r
+ Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);\r
+ }\r
+\r
+ //\r
+ // Now update the total installed RAM size\r
+ //\r
+ ConvertMemorySizeToString ((UINT32)InstalledMemory, &NewString );\r
+ UiCustomizeFrontPageBanner (3, FALSE, &NewString);\r
+ HiiSetString (gFrontPagePrivate.HiiHandle, STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE), NewString, NULL);\r
+ FreePool (NewString);\r
}\r
\r
/**\r
This function will change video resolution and text mode\r
- according to defined setup mode or defined boot mode \r
+ according to defined setup mode or defined boot mode\r
\r
- @param IsSetupMode Indicate mode is changed to setup mode or boot mode. \r
+ @param IsSetupMode Indicate mode is changed to setup mode or boot mode.\r
\r
@retval EFI_SUCCESS Mode is changed successfully.\r
@retval Others Mode failed to be changed.\r
\r
**/\r
EFI_STATUS\r
-EFIAPI\r
-BdsSetConsoleMode (\r
+UiSetConsoleMode (\r
BOOLEAN IsSetupMode\r
)\r
{\r
EFI_STATUS Status;\r
UINTN Index;\r
UINTN CurrentColumn;\r
- UINTN CurrentRow; \r
+ UINTN CurrentRow;\r
\r
MaxGopMode = 0;\r
MaxTextMode = 0;\r
\r
//\r
- // Get current video resolution and text mode \r
+ // Get current video resolution and text mode\r
//\r
Status = gBS->HandleProtocol (\r
gST->ConsoleOutHandle,\r
);\r
if (EFI_ERROR (Status)) {\r
SimpleTextOut = NULL;\r
- } \r
+ }\r
\r
if ((GraphicsOutput == NULL) || (SimpleTextOut == NULL)) {\r
return EFI_UNSUPPORTED;\r
\r
if (IsSetupMode) {\r
//\r
- // The requried resolution and text mode is setup mode.\r
+ // The required resolution and text mode is setup mode.\r
//\r
NewHorizontalResolution = mSetupHorizontalResolution;\r
NewVerticalResolution = mSetupVerticalResolution;\r
NewHorizontalResolution = mBootHorizontalResolution;\r
NewVerticalResolution = mBootVerticalResolution;\r
NewColumns = mBootTextModeColumn;\r
- NewRows = mBootTextModeRow; \r
+ NewRows = mBootTextModeRow;\r
}\r
- \r
+\r
if (GraphicsOutput != NULL) {\r
MaxGopMode = GraphicsOutput->Mode->MaxMode;\r
- } \r
+ }\r
\r
if (SimpleTextOut != NULL) {\r
MaxTextMode = SimpleTextOut->Mode->MaxMode;\r
return EFI_SUCCESS;\r
} else {\r
//\r
- // If current text mode is different from requried text mode. Set new video mode\r
+ // If current text mode is different from required text mode. Set new video mode\r
//\r
for (Index = 0; Index < MaxTextMode; Index++) {\r
Status = SimpleTextOut->QueryMode (SimpleTextOut, Index, &CurrentColumn, &CurrentRow);\r
//\r
// Update text mode PCD.\r
//\r
- PcdSet32 (PcdConOutColumn, mSetupTextModeColumn);\r
- PcdSet32 (PcdConOutRow, mSetupTextModeRow);\r
+ Status = PcdSet32S (PcdConOutColumn, mSetupTextModeColumn);\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = PcdSet32S (PcdConOutRow, mSetupTextModeRow);\r
+ ASSERT_EFI_ERROR (Status);\r
FreePool (Info);\r
return EFI_SUCCESS;\r
}\r
}\r
if (Index == MaxTextMode) {\r
//\r
- // If requried text mode is not supported, return error.\r
+ // If required text mode is not supported, return error.\r
//\r
FreePool (Info);\r
return EFI_UNSUPPORTED;\r
// Set PCD to Inform GraphicsConsole to change video resolution.\r
// Set PCD to Inform Consplitter to change text mode.\r
//\r
- PcdSet32 (PcdVideoHorizontalResolution, NewHorizontalResolution);\r
- PcdSet32 (PcdVideoVerticalResolution, NewVerticalResolution);\r
- PcdSet32 (PcdConOutColumn, NewColumns);\r
- PcdSet32 (PcdConOutRow, NewRows);\r
- \r
- \r
+ Status = PcdSet32S (PcdVideoHorizontalResolution, NewHorizontalResolution);\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = PcdSet32S (PcdVideoVerticalResolution, NewVerticalResolution);\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = PcdSet32S (PcdConOutColumn, NewColumns);\r
+ ASSERT_EFI_ERROR (Status);\r
+ Status = PcdSet32S (PcdConOutRow, NewRows);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
//\r
// Video mode is changed, so restart graphics console driver and higher level driver.\r
// Reconnect graphics console driver and higher level driver.\r
\r
/**\r
The user Entry Point for Application. The user code starts with this function\r
- as the real entry point for the image goes into a library that calls this \r
+ as the real entry point for the image goes into a library that calls this\r
function.\r
\r
- @param[in] ImageHandle The firmware allocated handle for the EFI image. \r
+ @param[in] ImageHandle The firmware allocated handle for the EFI image.\r
@param[in] SystemTable A pointer to the EFI System Table.\r
- \r
+\r
@retval EFI_SUCCESS The entry point is executed successfully.\r
@retval other Some error occurs when executing this entry point.\r
\r
\r
if (!mModeInitialized) {\r
//\r
- // After the console is ready, get current video resolution \r
+ // After the console is ready, get current video resolution\r
// and text mode before launching setup at first time.\r
//\r
Status = gBS->HandleProtocol (\r
if (EFI_ERROR (Status)) {\r
GraphicsOutput = NULL;\r
}\r
- \r
+\r
Status = gBS->HandleProtocol (\r
gST->ConsoleOutHandle,\r
&gEfiSimpleTextOutProtocolGuid,\r
);\r
if (EFI_ERROR (Status)) {\r
SimpleTextOut = NULL;\r
- } \r
+ }\r
\r
if (GraphicsOutput != NULL) {\r
//\r
\r
//\r
// Get user defined text mode for setup.\r
- // \r
+ //\r
mSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);\r
- mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution); \r
+ mSetupVerticalResolution = PcdGet32 (PcdSetupVideoVerticalResolution);\r
mSetupTextModeColumn = PcdGet32 (PcdSetupConOutColumn);\r
mSetupTextModeRow = PcdGet32 (PcdSetupConOutRow);\r
\r
\r
gBS->SetWatchdogTimer (0x0000, 0x0000, 0x0000, NULL);\r
gST->ConOut->ClearScreen (gST->ConOut);\r
- \r
+\r
//\r
// Install customized fonts needed by Front Page\r
//\r
- \r
HiiHandle = ExportFonts ();\r
ASSERT (HiiHandle != NULL);\r
\r
InitializeStringSupport ();\r
\r
- BdsSetConsoleMode (TRUE);\r
+ UiSetConsoleMode (TRUE);\r
UiEntry (FALSE);\r
- BdsSetConsoleMode (FALSE);\r
+ UiSetConsoleMode (FALSE);\r
\r
UninitializeStringSupport ();\r
HiiRemovePackages (HiiHandle);\r
EFI_STATUS Status;\r
EFI_BOOT_LOGO_PROTOCOL *BootLogo;\r
\r
+ //\r
+ // Enter Setup page.\r
+ //\r
+ REPORT_STATUS_CODE (\r
+ EFI_PROGRESS_CODE,\r
+ (EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_PC_USER_SETUP)\r
+ );\r
+\r
//\r
// Indicate if the connect all has been performed before.\r
+ // If has not been performed before, do here.\r
//\r
- if (ConnectAllHappened) {\r
- gConnectAllHappened = TRUE;\r
+ if (!ConnectAllHappened) {\r
+ EfiBootManagerConnectAll ();\r
}\r
\r
//\r
}\r
\r
InitializeFrontPage ();\r
- InitializeDeviceManager ();\r
- InitializeBootManager ();\r
- InitBootMaintenance();\r
\r
CallFrontPage ();\r
\r
- FreeBMPackage ();\r
- FreeBootManager ();\r
- FreeDeviceManager ();\r
FreeFrontPage ();\r
\r
if (mLanguageString != NULL) {\r
SetupResetReminder ();\r
}\r
\r
-/**\r
- Extract device path for given HII handle and class guid.\r
-\r
- @param Handle The HII handle.\r
-\r
- @retval NULL Fail to get the device path string.\r
- @return PathString Get the device path string.\r
-\r
-**/\r
-CHAR16 *\r
-ExtractDevicePathFromHiiHandle (\r
- IN EFI_HII_HANDLE Handle\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_HANDLE DriverHandle;\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath; \r
- EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *PathToText;\r
- CHAR16 *NewString;\r
-\r
- ASSERT (Handle != NULL);\r
-\r
- if (Handle == NULL) {\r
- return NULL;\r
- }\r
-\r
- Status = gHiiDatabase->GetPackageListHandle (gHiiDatabase, Handle, &DriverHandle);\r
- if (EFI_ERROR (Status)) {\r
- return NULL;\r
- }\r
-\r
- //\r
- // Get the device path by the got Driver handle .\r
- //\r
- Status = gBS->HandleProtocol (DriverHandle, &gEfiDevicePathProtocolGuid, (VOID **) &DevicePath);\r
- if (EFI_ERROR (Status)) {\r
- return NULL;\r
- }\r
-\r
- Status = gBS->LocateProtocol (\r
- &gEfiDevicePathToTextProtocolGuid,\r
- NULL,\r
- (VOID **) &PathToText\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return NULL;\r
- }\r
-\r
- //\r
- // Get device path string.\r
- //\r
- NewString = PathToText->ConvertDevicePathToText(DevicePath, FALSE, FALSE);\r
-\r
- return NewString;\r
-}\r
-\r
-/**\r
- Extract the displayed formset for given HII handle and class guid.\r
-\r
- @param Handle The HII handle.\r
- @param SetupClassGuid The class guid specifies which form set will be displayed.\r
- @param SkipCount Skip some formsets which has processed before.\r
- @param FormSetTitle Formset title string.\r
- @param FormSetHelp Formset help string.\r
- @param FormSetGuid Formset Guid.\r
-\r
- @retval TRUE The formset for given HII handle will be displayed.\r
- @return FALSE The formset for given HII handle will not be displayed.\r
-\r
-**/\r
-BOOLEAN\r
-ExtractDisplayedHiiFormFromHiiHandle (\r
- IN EFI_HII_HANDLE Handle,\r
- IN EFI_GUID *SetupClassGuid,\r
- IN UINTN SkipCount,\r
- OUT EFI_STRING_ID *FormSetTitle,\r
- OUT EFI_STRING_ID *FormSetHelp,\r
- OUT EFI_GUID *FormSetGuid\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN BufferSize;\r
- EFI_HII_PACKAGE_LIST_HEADER *HiiPackageList;\r
- UINT8 *Package;\r
- UINT8 *OpCodeData;\r
- UINT32 Offset;\r
- UINT32 Offset2;\r
- UINT32 PackageListLength;\r
- EFI_HII_PACKAGE_HEADER PackageHeader;\r
- EFI_GUID *ClassGuid;\r
- UINT8 ClassGuidNum;\r
- BOOLEAN FoundAndSkip;\r
-\r
- ASSERT (Handle != NULL);\r
- ASSERT (SetupClassGuid != NULL && FormSetTitle != NULL && FormSetHelp != NULL && FormSetGuid != NULL);\r
-\r
- *FormSetTitle = 0;\r
- *FormSetHelp = 0;\r
- ClassGuidNum = 0;\r
- ClassGuid = NULL;\r
- FoundAndSkip = FALSE;\r
-\r
- //\r
- // Get HII PackageList\r
- //\r
- BufferSize = 0;\r
- HiiPackageList = NULL;\r
- Status = gHiiDatabase->ExportPackageLists (gHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
- //\r
- // Handle is a invalid handle. Check if Handle is corrupted.\r
- //\r
- ASSERT (Status != EFI_NOT_FOUND);\r
- //\r
- // The return status should always be EFI_BUFFER_TOO_SMALL as input buffer's size is 0.\r
- //\r
- ASSERT (Status == EFI_BUFFER_TOO_SMALL);\r
- \r
- HiiPackageList = AllocatePool (BufferSize);\r
- ASSERT (HiiPackageList != NULL);\r
-\r
- Status = gHiiDatabase->ExportPackageLists (gHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
- if (EFI_ERROR (Status)) {\r
- return FALSE;\r
- }\r
-\r
- //\r
- // Get Form package from this HII package List\r
- //\r
- Offset = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
- PackageListLength = ReadUnaligned32 (&HiiPackageList->PackageLength);\r
-\r
- while (Offset < PackageListLength) {\r
- Package = ((UINT8 *) HiiPackageList) + Offset;\r
- CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
- Offset += PackageHeader.Length;\r
-\r
- if (PackageHeader.Type == EFI_HII_PACKAGE_FORMS) {\r
- //\r
- // Search FormSet Opcode in this Form Package\r
- //\r
- Offset2 = sizeof (EFI_HII_PACKAGE_HEADER);\r
- while (Offset2 < PackageHeader.Length) {\r
- OpCodeData = Package + Offset2;\r
- Offset2 += ((EFI_IFR_OP_HEADER *) OpCodeData)->Length;\r
-\r
- if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) {\r
- if (((EFI_IFR_OP_HEADER *) OpCodeData)->Length > OFFSET_OF (EFI_IFR_FORM_SET, Flags)) {\r
- //\r
- // Find FormSet OpCode\r
- //\r
- ClassGuidNum = (UINT8) (((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x3);\r
- ClassGuid = (EFI_GUID *) (VOID *)(OpCodeData + sizeof (EFI_IFR_FORM_SET));\r
- while (ClassGuidNum-- > 0) {\r
- if (CompareGuid (SetupClassGuid, ClassGuid)) {\r
- //\r
- // Check whether need to skip the formset.\r
- //\r
- if (SkipCount != 0) {\r
- SkipCount--;\r
- FoundAndSkip = TRUE;\r
- break;\r
- }\r
- CopyMem (FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));\r
- CopyMem (FormSetHelp, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));\r
- CopyGuid (FormSetGuid, (CONST EFI_GUID *)(&((EFI_IFR_FORM_SET *) OpCodeData)->Guid));\r
- FreePool (HiiPackageList);\r
- return TRUE;\r
- }\r
- ClassGuid ++;\r
- }\r
- if (FoundAndSkip) {\r
- break;\r
- }\r
- } else if (CompareGuid (SetupClassGuid, &gEfiHiiPlatformSetupFormsetGuid)) {\r
- //\r
- // Check whether need to skip the formset.\r
- //\r
- if (SkipCount != 0) {\r
- SkipCount--;\r
- break;\r
- }\r
- CopyMem (FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));\r
- CopyMem (FormSetHelp, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));\r
- CopyGuid (FormSetGuid, (CONST EFI_GUID *)(&((EFI_IFR_FORM_SET *) OpCodeData)->Guid));\r
- FreePool (HiiPackageList);\r
- return TRUE;\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- FreePool (HiiPackageList);\r
-\r
- return FALSE;\r
-}\r
-\r
//\r
// Following are BDS Lib functions which contain all the code about setup browser reset reminder feature.\r
// Setup Browser reset reminder feature is that an reset reminder will be given before user leaves the setup browser if\r
//\r
\r
\r
-/**\r
- Enable the setup browser reset reminder feature.\r
- This routine is used in platform tip. If the platform policy need the feature, use the routine to enable it.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-EnableResetReminderFeature (\r
- VOID\r
- )\r
-{\r
- mFeaturerSwitch = TRUE;\r
-}\r
-\r
\r
-/**\r
- Disable the setup browser reset reminder feature.\r
- This routine is used in platform tip. If the platform policy do not want the feature, use the routine to disable it.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-DisableResetReminderFeature (\r
- VOID\r
- )\r
-{\r
- mFeaturerSwitch = FALSE;\r
-}\r
\r
\r
/**\r
}\r
\r
\r
-/**\r
- Record the info that no reset is required.\r
- A module boolean variable is used to record whether a reset is required.\r
-\r
-**/\r
-VOID\r
-EFIAPI\r
-DisableResetRequired (\r
- VOID\r
- )\r
-{\r
- mResetRequired = FALSE;\r
-}\r
-\r
-\r
-/**\r
- Check whether platform policy enable the reset reminder feature. The default is enabled.\r
\r
-**/\r
-BOOLEAN\r
-EFIAPI\r
-IsResetReminderFeatureEnable (\r
- VOID\r
- )\r
-{\r
- return mFeaturerSwitch;\r
-}\r
\r
\r
/**\r
CHAR16 *StringBuffer1;\r
CHAR16 *StringBuffer2;\r
\r
-\r
//\r
//check any reset required change is applied? if yes, reset system\r
//\r
- if (IsResetReminderFeatureEnable ()) {\r
- if (IsResetRequired ()) {\r
-\r
- StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
- ASSERT (StringBuffer1 != NULL);\r
- StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
- ASSERT (StringBuffer2 != NULL);\r
- StrCpy (StringBuffer1, L"Configuration changed. Reset to apply it Now.");\r
- StrCpy (StringBuffer2, L"Press ENTER to reset");\r
- //\r
- // Popup a menu to notice user\r
- //\r
- do {\r
- CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL);\r
- } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
+ if (IsResetRequired ()) {\r
+\r
+ StringBuffer1 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
+ ASSERT (StringBuffer1 != NULL);\r
+ StringBuffer2 = AllocateZeroPool (MAX_STRING_LEN * sizeof (CHAR16));\r
+ ASSERT (StringBuffer2 != NULL);\r
+ StrCpyS (StringBuffer1, MAX_STRING_LEN, L"Configuration changed. Reset to apply it Now.");\r
+ StrCpyS (StringBuffer2, MAX_STRING_LEN, L"Press ENTER to reset");\r
+ //\r
+ // Popup a menu to notice user\r
+ //\r
+ do {\r
+ CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL);\r
+ } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
\r
- FreePool (StringBuffer1);\r
- FreePool (StringBuffer2);\r
+ FreePool (StringBuffer1);\r
+ FreePool (StringBuffer2);\r
\r
- gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
- }\r
+ gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
}\r
}\r
\r
-\r
-/**\r
- This function converts an input device structure to a Unicode string.\r
-\r
- @param DevPath A pointer to the device path structure.\r
-\r
- @return A new allocated Unicode string that represents the device path.\r
-\r
-**/\r
-CHAR16 *\r
-UiDevicePathToStr (\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevPath\r
- )\r
-{\r
- EFI_STATUS Status;\r
- CHAR16 *ToText;\r
- EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevPathToText;\r
-\r
- if (DevPath == NULL) {\r
- return NULL;\r
- }\r
-\r
- Status = gBS->LocateProtocol (\r
- &gEfiDevicePathToTextProtocolGuid,\r
- NULL,\r
- (VOID **) &DevPathToText\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- ToText = DevPathToText->ConvertDevicePathToText (\r
- DevPath,\r
- FALSE,\r
- TRUE\r
- );\r
- ASSERT (ToText != NULL);\r
- return ToText;\r
-}\r