]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
Update BdsDxe to use new designed HiiLib, remove the referrence to the original IfrSu...
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / FrontPage.c
index 29974769bb8768e76c2dedd8a49df694836ac5fb..bca0555b12a1b0ce016dedffd61a6239730e0d46 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
@@ -158,7 +184,7 @@ 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
@@ -169,7 +195,7 @@ FrontPageCallback (
     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
@@ -272,20 +298,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 +351,64 @@ InitializeFrontPage (
     }\r
 \r
     //\r
-    // Create driver handle used by HII database\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
+    // Install Device Path Protocol and 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
-  UpdateData.BufferSize = 0x1000;\r
-  UpdateData.Data = AllocateZeroPool (0x1000);\r
-  ASSERT (UpdateData.Data != NULL);\r
+  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (StartOpCodeHandle != NULL);\r
+\r
+  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (EndOpCodeHandle != NULL);\r
 \r
-  OptionList = AllocateZeroPool (0x1000);\r
-  ASSERT (OptionList != NULL);\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
   //\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 +433,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
+      HiiLibGetNextLanguage (&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 +483,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 +518,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 +527,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
@@ -559,11 +606,13 @@ 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
@@ -679,7 +728,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 +739,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 +750,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 +761,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 +775,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