]> 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 2719a723fbdbc32ca339258fefde47bbe95b7b06..bca0555b12a1b0ce016dedffd61a6239730e0d46 100644 (file)
@@ -298,19 +298,21 @@ InitializeFrontPage (
   )\r
 {\r
   EFI_STATUS                  Status;\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
@@ -378,14 +380,29 @@ InitializeFrontPage (
 \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
-  OptionList = AllocateZeroPool (0x1000);\r
-  ASSERT (OptionList != NULL);\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
   //\r
   // Collect the languages from what our current Language support is based on our VFR\r
@@ -416,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
     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
@@ -452,19 +483,30 @@ InitializeFrontPage (
       }\r
       ASSERT_EFI_ERROR (Status);\r
 \r
-      Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\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
@@ -476,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
@@ -485,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