]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Application/UiApp/FrontPage.c
MdeModulePkg: Refine casting expression result to bigger size
[mirror_edk2.git] / MdeModulePkg / Application / UiApp / FrontPage.c
index b0bdf26d5071ca0505ab158c69a4edaa3c089059..adee67a8ac142c4d3c0f7d2016613881c6ca2d3f 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   FrontPage routines to handle the callbacks and browser calls\r
 \r
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2017, 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
@@ -13,15 +13,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 #include "FrontPage.h"\r
-#include "Language.h"\r
-#define MAX_STRING_LEN        200\r
+#include "FrontPageCustomizedUi.h"\r
 \r
-EFI_GUID  mFrontPageGuid      = FRONT_PAGE_FORMSET_GUID;\r
+#define MAX_STRING_LEN            200\r
+\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
@@ -83,7 +82,7 @@ HII_VENDOR_DEVICE_PATH  mFrontPageHiiVendorDevicePath = {
 \r
 **/\r
 VOID\r
-UpdateFrontPageStrings (\r
+UpdateFrontPageBannerStrings (\r
   VOID\r
   );\r
 \r
@@ -153,198 +152,7 @@ FakeRouteConfig (
     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
-/**\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
@@ -376,121 +184,63 @@ FrontPageCallback (
   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
+  return UiFrontPageCallbackHandler (gFrontPagePrivate.HiiHandle, Action, QuestionId, Type, Value, ActionRequest);\r
+}\r
 \r
-        if (Index == Value->u8) {\r
-          break;\r
-        }\r
+/**\r
 \r
-        Index++;\r
-      }\r
+  Update the menus in the front page.\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
-\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
@@ -507,7 +257,6 @@ InitializeFrontPage (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-\r
   //\r
   // Locate Hii relative protocols\r
   //\r
@@ -543,14 +292,14 @@ InitializeFrontPage (
   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
@@ -650,7 +399,7 @@ ConvertProcessorToString (
 \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
@@ -659,9 +408,16 @@ ConvertProcessorToString (
   DestMax = 0x20 / sizeof (CHAR16);\r
   StringBuffer = AllocateZeroPool (0x20);\r
   ASSERT (StringBuffer != NULL);\r
-  Index = UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, FreqMhz / 1000, 3);\r
+  UnicodeValueToStringS (StringBuffer, sizeof (CHAR16) * DestMax, LEFT_JUSTIFY, FreqMhz / 1000, 3);\r
+  Index = StrnLenS (StringBuffer, DestMax);\r
   StrCatS (StringBuffer, DestMax, L".");\r
-  UnicodeValueToString (StringBuffer + Index + 1, PREFIX_ZERO, (FreqMhz % 1000) / 10, 2);\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
@@ -685,7 +441,7 @@ ConvertMemorySizeToString (
 \r
   StringBuffer = AllocateZeroPool (0x24);\r
   ASSERT (StringBuffer != NULL);\r
-  UnicodeValueToString (StringBuffer, LEFT_JUSTIFY, MemorySize, 10);\r
+  UnicodeValueToStringS (StringBuffer, 0x24, LEFT_JUSTIFY, MemorySize, 10);\r
   StrCatS (StringBuffer, 0x24 / sizeof (CHAR16), L" MB RAM");\r
 \r
   *String = (CHAR16 *) StringBuffer;\r
@@ -734,7 +490,7 @@ GetOptionalStringByIndex (
     *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
@@ -742,19 +498,19 @@ GetOptionalStringByIndex (
 \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
@@ -762,112 +518,157 @@ UpdateFrontPageStrings (
   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
@@ -887,13 +688,13 @@ BdsSetConsoleMode (
   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
@@ -911,7 +712,7 @@ BdsSetConsoleMode (
                   );\r
   if (EFI_ERROR (Status)) {\r
     SimpleTextOut = NULL;\r
-  }  \r
+  }\r
 \r
   if ((GraphicsOutput == NULL) || (SimpleTextOut == NULL)) {\r
     return EFI_UNSUPPORTED;\r
@@ -919,7 +720,7 @@ BdsSetConsoleMode (
 \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
@@ -932,12 +733,12 @@ BdsSetConsoleMode (
     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
@@ -975,7 +776,7 @@ BdsSetConsoleMode (
             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
@@ -989,8 +790,10 @@ BdsSetConsoleMode (
                   //\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
@@ -998,7 +801,7 @@ BdsSetConsoleMode (
             }\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
@@ -1031,12 +834,15 @@ BdsSetConsoleMode (
   // 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
@@ -1066,12 +872,12 @@ BdsSetConsoleMode (
 \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
@@ -1092,7 +898,7 @@ InitializeUserInterface (
 \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
@@ -1103,7 +909,7 @@ InitializeUserInterface (
     if (EFI_ERROR (Status)) {\r
       GraphicsOutput = NULL;\r
     }\r
-    \r
+\r
     Status = gBS->HandleProtocol (\r
                     gST->ConsoleOutHandle,\r
                     &gEfiSimpleTextOutProtocolGuid,\r
@@ -1111,7 +917,7 @@ InitializeUserInterface (
                     );\r
     if (EFI_ERROR (Status)) {\r
       SimpleTextOut = NULL;\r
-    }  \r
+    }\r
 \r
     if (GraphicsOutput != NULL) {\r
       //\r
@@ -1134,9 +940,9 @@ InitializeUserInterface (
 \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
@@ -1145,19 +951,18 @@ InitializeUserInterface (
 \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
@@ -1181,11 +986,20 @@ UiEntry (
   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
@@ -1202,15 +1016,9 @@ UiEntry (
   }\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
@@ -1224,203 +1032,6 @@ UiEntry (
   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
@@ -1560,39 +1171,3 @@ SetupResetReminder (
   }\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