]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
1. Correct Col * Row string
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / FrontPage.c
index 29974769bb8768e76c2dedd8a49df694836ac5fb..55fce979f781cf8f2ff961ee6ac0f83cac58e07e 100644 (file)
@@ -14,6 +14,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "Bds.h"\r
 #include "FrontPage.h"\r
+#include "Language.h"\r
 \r
 EFI_GUID  mFrontPageGuid      = FRONT_PAGE_FORMSET_GUID;\r
 \r
@@ -37,6 +38,31 @@ FRONT_PAGE_CALLBACK_DATA  gFrontPagePrivate = {
   }\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
@@ -68,6 +94,10 @@ FakeExtractConfig (
   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
@@ -95,6 +125,17 @@ FakeRouteConfig (
   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
@@ -130,7 +171,6 @@ FrontPageCallback (
   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
@@ -158,18 +198,18 @@ FrontPageCallback (
     //\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
@@ -186,7 +226,7 @@ FrontPageCallback (
                                      );\r
       ASSERT (PlatformSupportedLanguages != NULL);\r
     }\r
-    \r
+\r
     //\r
     // Select the best language in platform supported Language.\r
     //\r
@@ -204,25 +244,12 @@ FrontPageCallback (
                       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
@@ -272,20 +299,21 @@ InitializeFrontPage (
   )\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
@@ -324,58 +352,64 @@ InitializeFrontPage (
     }\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
@@ -400,12 +434,26 @@ InitializeFrontPage (
   //\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
@@ -436,20 +484,30 @@ InitializeFrontPage (
       }\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
@@ -461,8 +519,8 @@ InitializeFrontPage (
   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
@@ -470,31 +528,21 @@ InitializeFrontPage (
     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
@@ -526,7 +574,7 @@ CallFrontPage (
                             gFormBrowser2,\r
                             &gFrontPagePrivate.HiiHandle,\r
                             1,\r
-                            NULL,\r
+                            &mFrontPageGuid,\r
                             0,\r
                             NULL,\r
                             &ActionRequest\r
@@ -559,18 +607,20 @@ GetProducerString (
   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
@@ -671,6 +721,9 @@ UpdateFrontPageStrings (
   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
@@ -679,7 +732,7 @@ UpdateFrontPageStrings (
         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
@@ -690,7 +743,7 @@ UpdateFrontPageStrings (
         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
@@ -701,7 +754,7 @@ UpdateFrontPageStrings (
         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
@@ -712,7 +765,7 @@ UpdateFrontPageStrings (
         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
@@ -726,7 +779,7 @@ UpdateFrontPageStrings (
           &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
@@ -827,7 +880,7 @@ ShowProgress (
   }\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
@@ -843,7 +896,7 @@ ShowProgress (
   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
@@ -911,7 +964,7 @@ PlatformBdsEnterFrontPage (
 {\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
@@ -1022,5 +1075,5 @@ Exit:
   // 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