]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update BdsDxe to use new designed HiiLib, remove the referrence to the original IfrSu...
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 17 Apr 2009 05:31:38 +0000 (05:31 +0000)
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 17 Apr 2009 05:31:38 +0000 (05:31 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8115 6f19259b-4bc3-4df7-8a09-765794883524

20 files changed:
IntelFrameworkModulePkg/Universal/BdsDxe/Bds.h
IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/Bm.vfr
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BootMaint.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BootMaint.h
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/Data.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FE.vfr
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FileExplorer.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/FormGuid.h
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMngr/BootManager.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMngr/BootManager.h
IntelFrameworkModulePkg/Universal/BdsDxe/BootMngr/BootManagerVfr.Vfr
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.h
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManagerStrings.uni
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManagerVfr.Vfr
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.h
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPageVfr.Vfr

index 34327ce77e3b3f57edeca950cb8847edf93fd83f..499f32ffc835da1cfe70128f9cae47e15ed37f41 100644 (file)
@@ -51,8 +51,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/PerformanceLib.h>\r
 #include <Library/ReportStatusCodeLib.h>\r
-#include <Library/IfrSupportLib.h>\r
-#include <Library/ExtendedIfrSupportLib.h>\r
 #include <Library/UefiRuntimeServicesTableLib.h>\r
 #include <Library/HobLib.h>\r
 #include <Library/BaseLib.h>\r
index 08f36f247ca4df2cca900678929e71f057c99f5a..f0d97b755b2567120344314250df3b8b1aab392a 100644 (file)
@@ -95,8 +95,6 @@
   BaseLib\r
   HobLib\r
   UefiRuntimeServicesTableLib\r
-  IfrSupportLib\r
-  ExtendedIfrSupportLib\r
   GenericBdsLib\r
   ReportStatusCodeLib\r
   PerformanceLib\r
   gEfiMemorySubClassGuid                        ## CONSUMES ## GUID (Indicate the datahub for holding memory record)\r
   gEfiProcessorSubClassGuid                     ## CONSUMES ## GUID (Indicate the datahub for holding processor record)\r
   gEfiCapsuleVendorGuid                         ## CONSUMES ## GUID (Indicate the hob for holding capsule update image)\r
+  gEfiHiiPlatformSetupFormsetGuid               ## CONSUMES ## GUID (Indicate the formset class guid to be displayed)\r
+  gEfiIfrTianoGuid                              ## CONSUMES ## GUID (Extended IFR Guid Opcode)\r
 \r
 [Protocols]\r
   gEfiHiiStringProtocolGuid                     # PROTOCOL ALWAYS_CONSUMES\r
index 4f38a34bba4afc79411fd54c9f35a7c35a5bfa67..6a67450417cdcc02ac77ee40c0a0611e3652ad46 100644 (file)
 \r
 #include "FormGuid.h"\r
 \r
-#define LABEL_END   0xffff\r
-\r
 formset\r
   guid = BOOT_MAINT_FORMSET_GUID,\r
   title = STRING_TOKEN(STR_FORM_MAIN_TITLE),\r
   help = STRING_TOKEN(STR_NULL_STRING),\r
+  classguid = BOOT_MAINT_FORMSET_GUID,\r
   class = 0,\r
   subclass = 0,\r
 \r
index 57dd2db9c553f366193ce3ed4477be04b36a6f7d..2b175a59044a78a11d81b5f4e049fae7caccccc9 100644 (file)
@@ -82,7 +82,7 @@ EFI_GUID EfiLegacyDevOrderGuid  = EFI_LEGACY_DEV_ORDER_VARIABLE_GUID;
 EFI_GUID mBootMaintGuid         = BOOT_MAINT_FORMSET_GUID;\r
 EFI_GUID mFileExplorerGuid      = FILE_EXPLORE_FORMSET_GUID;\r
 \r
-CHAR16  mBootMaintStorageName[]     = L"BmData";\r
+CHAR16  mBootMaintStorageName[]     = L"BmmData";\r
 CHAR16  mFileExplorerStorageName[]  = L"FeData";\r
 \r
 /**\r
@@ -251,8 +251,7 @@ BootMaintCallback (
   UINT8             *NewLegacyDev;\r
   UINT8             *DisMap;\r
   EFI_FORM_ID       FormId;\r
-  UINTN             BufferSize;\r
-\r
+  \r
   if ((Value == NULL) || (ActionRequest == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
@@ -272,11 +271,9 @@ BootMaintCallback (
   //\r
   // Retrive uncommitted data from Form Browser\r
   //\r
-  CurrentFakeNVMap = &Private->BmmFakeNvData;\r
-  BufferSize = sizeof (BMM_FAKE_NV_DATA);\r
-  Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) CurrentFakeNVMap);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  CurrentFakeNVMap = (BMM_FAKE_NV_DATA *) HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA));\r
+  if (CurrentFakeNVMap == NULL) {\r
+    CurrentFakeNVMap = &Private->BmmFakeNvData;\r
   }\r
 \r
   //\r
@@ -588,8 +585,15 @@ BootMaintCallback (
   //\r
   // Pass changed uncommitted data back to Form Browser\r
   //\r
-  BufferSize = sizeof (BMM_FAKE_NV_DATA);\r
-  Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) CurrentFakeNVMap, NULL);\r
+  Status = HiiSetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap, NULL);\r
+\r
+  //\r
+  // Update local settting.\r
+  //\r
+  if ((UINTN) CurrentFakeNVMap != (UINTN) &Private->BmmFakeNvData) {\r
+    CopyMem (&Private->BmmFakeNvData, CurrentFakeNVMap, sizeof (BMM_FAKE_NV_DATA));\r
+    FreePool (CurrentFakeNVMap);\r
+  }\r
 \r
   return Status;\r
 }\r
@@ -954,15 +958,33 @@ InitializeBM (
   ASSERT (BmmCallbackInfo->FeHiiHandle != NULL);\r
 \r
   //\r
-  // Allocate space for creation of Buffer\r
+  // Init OpCode Handle and Allocate space for creation of Buffer\r
   //\r
-  gUpdateData.BufferSize = UPDATE_DATA_SIZE;\r
-  gUpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);\r
-  if (gUpdateData.Data == NULL) {\r
+  mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  if (mStartOpCodeHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+    goto Exit;\r
+  }\r
+\r
+  mEndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  if (mEndOpCodeHandle == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
     goto Exit;\r
   }\r
 \r
+  //\r
+  // Create Hii Extend Label OpCode as the start opcode\r
+  //\r
+  mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the end opcode\r
+  //\r
+  mEndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mEndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  mEndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+  mEndLabel->Number       = LABEL_END;\r
+\r
   InitializeStringDepository ();\r
 \r
   InitAllMenu (BmmCallbackInfo);\r
@@ -986,63 +1008,63 @@ InitializeBM (
   Status = EfiLibLocateProtocol (&gEfiLegacyBiosProtocolGuid, (VOID **) &LegacyBios);\r
   if (!EFI_ERROR (Status)) {\r
     RefreshUpdateData ();\r
+    mStartLabel->Number = FORM_BOOT_LEGACY_DEVICE_ID;\r
 \r
     //\r
     // If LegacyBios Protocol is installed, add 3 tags about legacy boot option\r
     // in BootOption form: legacy FD/HD/CD/NET/BEV\r
     //\r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_SET_FD_ORDER_ID,\r
       STRING_TOKEN (STR_FORM_SET_FD_ORDER_TITLE),\r
       STRING_TOKEN (STR_FORM_SET_FD_ORDER_TITLE),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      FORM_SET_FD_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_FD_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_SET_HD_ORDER_ID,\r
       STRING_TOKEN (STR_FORM_SET_HD_ORDER_TITLE),\r
       STRING_TOKEN (STR_FORM_SET_HD_ORDER_TITLE),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      FORM_SET_HD_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_HD_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_SET_CD_ORDER_ID,\r
       STRING_TOKEN (STR_FORM_SET_CD_ORDER_TITLE),\r
       STRING_TOKEN (STR_FORM_SET_CD_ORDER_TITLE),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      FORM_SET_CD_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_CD_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_SET_NET_ORDER_ID,\r
       STRING_TOKEN (STR_FORM_SET_NET_ORDER_TITLE),\r
       STRING_TOKEN (STR_FORM_SET_NET_ORDER_TITLE),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      FORM_SET_NET_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_NET_ORDER_ID\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_SET_BEV_ORDER_ID,\r
       STRING_TOKEN (STR_FORM_SET_BEV_ORDER_TITLE),\r
       STRING_TOKEN (STR_FORM_SET_BEV_ORDER_TITLE),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      FORM_SET_BEV_ORDER_ID,\r
-      &gUpdateData\r
+      FORM_SET_BEV_ORDER_ID\r
       );\r
-\r
-    IfrLibUpdateForm (\r
+    \r
+    HiiUpdateForm (\r
       BmmCallbackInfo->BmmHiiHandle,\r
       &mBootMaintGuid,\r
       FORM_BOOT_SETUP_ID,\r
-      FORM_BOOT_LEGACY_DEVICE_ID,\r
-      FALSE,\r
-      &gUpdateData\r
+      mStartOpCodeHandle, // Label FORM_BOOT_LEGACY_DEVICE_ID\r
+      mEndOpCodeHandle    // LABEL_END\r
       );\r
   }\r
 \r
@@ -1061,10 +1083,15 @@ InitializeBM (
 \r
   FreeAllMenu ();\r
 \r
-  FreePool (gUpdateData.Data);\r
-  gUpdateData.Data = NULL;\r
-\r
 Exit:\r
+  if (mStartOpCodeHandle != NULL) {\r
+    HiiFreeOpCodeHandle (mStartOpCodeHandle);\r
+  }\r
+\r
+  if (mEndOpCodeHandle != NULL) {\r
+    HiiFreeOpCodeHandle (mEndOpCodeHandle);\r
+  }\r
+\r
   if (BmmCallbackInfo->FeDriverHandle != NULL) {\r
     gBS->UninstallMultipleProtocolInterfaces (\r
            BmmCallbackInfo->FeDriverHandle,\r
@@ -1324,7 +1351,7 @@ FormSetDispatcher (
                              gFormBrowser2,\r
                              &CallbackData->BmmHiiHandle,\r
                              1,\r
-                             NULL,\r
+                             &mBootMaintGuid,\r
                              0,\r
                              NULL,\r
                              &ActionRequest\r
@@ -1346,7 +1373,7 @@ FormSetDispatcher (
                                gFormBrowser2,\r
                                &CallbackData->FeHiiHandle,\r
                                1,\r
-                               NULL,\r
+                               &mFileExplorerGuid,\r
                                0,\r
                                NULL,\r
                                &ActionRequest\r
index 49a279342f9fa18ba0a7c970cd9925b49ce89c54..e30e98968609dcbc94447fcedb09f1da83c2f811 100644 (file)
@@ -63,7 +63,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 extern EFI_GUID mBootMaintGuid;\r
 extern EFI_GUID mFileExplorerGuid;\r
-\r
+extern CHAR16   mFileExplorerStorageName[];\r
 //\r
 // These are the VFR compiler generated data representing our VFR data.\r
 //\r
@@ -1565,7 +1565,6 @@ extern COM_ATTR                   DataBitsList[4];
 extern COM_ATTR                   ParityList[5];\r
 extern COM_ATTR                   StopBitsList[3];\r
 extern EFI_GUID                   TerminalTypeGuid[4];\r
-extern EFI_HII_UPDATE_DATA        gUpdateData;\r
 extern STRING_DEPOSITORY          *FileOptionStrDepository;\r
 extern STRING_DEPOSITORY          *ConsoleOptionStrDepository;\r
 extern STRING_DEPOSITORY          *BootOptionStrDepository;\r
@@ -1576,4 +1575,12 @@ extern STRING_DEPOSITORY          *TerminalStrDepository;
 extern EFI_DEVICE_PATH_PROTOCOL   EndDevicePath[];\r
 extern EFI_GUID                   EfiLegacyDevOrderGuid;\r
 \r
+//\r
+// Shared IFR form update data\r
+//\r
+extern VOID                        *mStartOpCodeHandle;\r
+extern VOID                        *mEndOpCodeHandle;\r
+extern EFI_IFR_GUID_LABEL          *mStartLabel;\r
+extern EFI_IFR_GUID_LABEL          *mEndLabel;\r
+\r
 #endif\r
index 5a22e77a9ae86853e4cea5feba23ae27f076bd4b..94c8fb6b9246d651c7758ef29d752fa991bf59c4 100644 (file)
@@ -14,7 +14,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include "BootMaint.h"\r
 \r
-EFI_HII_UPDATE_DATA gUpdateData;\r
+VOID                *mStartOpCodeHandle = NULL;\r
+VOID                *mEndOpCodeHandle = NULL;\r
+EFI_IFR_GUID_LABEL  *mStartLabel = NULL;\r
+EFI_IFR_GUID_LABEL  *mEndLabel = NULL;\r
+\r
 STRING_DEPOSITORY   *FileOptionStrDepository;\r
 STRING_DEPOSITORY   *ConsoleOptionStrDepository;\r
 STRING_DEPOSITORY   *BootOptionStrDepository;\r
index b89cf114cd19975bef00c3cd97bc6291334a42f4..981a804368a2c3f4ed3d5fc0f7cd15370a993394 100644 (file)
 \r
 #include "FormGuid.h"\r
 \r
-#define LABEL_END   0xffff\r
-\r
 formset\r
   guid = FILE_EXPLORE_FORMSET_GUID,\r
   title = STRING_TOKEN(STR_FILE_EXPLORER_TITLE),\r
   help = STRING_TOKEN(STR_NULL_STRING),\r
+  classguid = FILE_EXPLORE_FORMSET_GUID,\r
   class = 0,\r
   subclass = 0,\r
 \r
index 8253ded9882ba3ef489d7ae5696c7c9f19708442..366aceda18849a6636f982a35b39b0ba28e725c3 100644 (file)
@@ -37,6 +37,7 @@ UpdateFileExplorePage (
   FormId          = 0;\r
 \r
   RefreshUpdateData ();\r
+  mStartLabel->Number = FORM_FILE_EXPLORER_ID;\r
 \r
   for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
     NewMenuEntry    = BOpt_GetMenuEntry (MenuOption, Index);\r
@@ -50,13 +51,13 @@ UpdateFileExplorePage (
       //\r
       // Create Text opcode for directory, also create Text opcode for file in BOOT_FROM_FILE_STATE.\r
       //\r
-      CreateActionOpCode (\r
+      HiiCreateActionOpCode (\r
+        mStartOpCodeHandle,\r
         (UINT16) (FILE_OPTION_OFFSET + Index),\r
         NewMenuEntry->DisplayStringToken,\r
         STRING_TOKEN (STR_NULL_STRING),\r
         EFI_IFR_FLAG_CALLBACK,\r
-        0,\r
-        &gUpdateData\r
+        0\r
         );\r
     } else {\r
       //\r
@@ -68,24 +69,23 @@ UpdateFileExplorePage (
         FormId = FORM_DRIVER_ADD_FILE_DESCRIPTION_ID;\r
       }\r
 \r
-      CreateGotoOpCode (\r
+      HiiCreateGotoOpCode (\r
+        mStartOpCodeHandle,\r
         FormId,\r
         NewMenuEntry->DisplayStringToken,\r
         STRING_TOKEN (STR_NULL_STRING),\r
         EFI_IFR_FLAG_CALLBACK,\r
-        (UINT16) (FILE_OPTION_OFFSET + Index),\r
-        &gUpdateData\r
+        (UINT16) (FILE_OPTION_OFFSET + Index)\r
         );\r
     }\r
   }\r
 \r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     CallbackData->FeHiiHandle,\r
     &mFileExplorerGuid,\r
     FORM_FILE_EXPLORER_ID,\r
-    FORM_FILE_EXPLORER_ID,\r
-    FALSE,\r
-    &gUpdateData\r
+    mStartOpCodeHandle, // Label FORM_FILE_EXPLORER_ID\r
+    mEndOpCodeHandle    // LABEL_END\r
     );\r
 }\r
 \r
@@ -179,22 +179,22 @@ UpdateFileExplorer (
         // Create Subtitle op-code for the display string of the option.\r
         //\r
         RefreshUpdateData ();\r
+        mStartLabel->Number = FormId;\r
 \r
-        CreateSubTitleOpCode (\r
+        HiiCreateSubTitleOpCode (\r
+          mStartOpCodeHandle,\r
           NewMenuEntry->DisplayStringToken,\r
           0,\r
           0,\r
-          0,\r
-          &gUpdateData\r
+          0\r
           );\r
 \r
-        IfrLibUpdateForm (\r
+        HiiUpdateForm (\r
           CallbackData->FeHiiHandle,\r
           &mFileExplorerGuid,\r
           FormId,\r
-          FormId,\r
-          FALSE,\r
-          &gUpdateData\r
+          mStartOpCodeHandle, // Label FormId\r
+          mEndOpCodeHandle    // LABEL_END\r
           );\r
         break;\r
 \r
@@ -248,7 +248,6 @@ FileExplorerCallback (
   BMM_CALLBACK_DATA     *Private;\r
   FILE_EXPLORER_NV_DATA *NvRamMap;\r
   EFI_STATUS            Status;\r
-  UINTN                 BufferSize;\r
 \r
   if ((Value == NULL) || (ActionRequest == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -261,12 +260,13 @@ FileExplorerCallback (
   //\r
   // Retrieve uncommitted data from Form Browser\r
   //\r
-  NvRamMap = &Private->FeFakeNvData;\r
-  BufferSize = sizeof (FILE_EXPLORER_NV_DATA);\r
-  Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) NvRamMap);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  NvRamMap = (FILE_EXPLORER_NV_DATA *) HiiGetBrowserData (&mFileExplorerGuid, mFileExplorerStorageName, sizeof (FILE_EXPLORER_NV_DATA));\r
+  if (NvRamMap == NULL) {\r
+    return EFI_NOT_FOUND;\r
   }\r
+  CopyMem (&Private->FeFakeNvData, NvRamMap, sizeof (FILE_EXPLORER_NV_DATA));\r
+  FreePool (NvRamMap);\r
+  NvRamMap = &Private->FeFakeNvData;\r
 \r
   if (QuestionId == KEY_VALUE_SAVE_AND_EXIT_BOOT || QuestionId == KEY_VALUE_SAVE_AND_EXIT_DRIVER) {\r
     //\r
index 2523d64c665dc5eaa514d082e191f8649d45ed49..e67ae2c6287241b4f1819757de9de3194898afb8 100644 (file)
@@ -82,6 +82,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define VARSTORE_ID_BOOT_MAINT               0x1000\r
 #define VARSTORE_ID_FILE_EXPLORER            0x1001\r
 \r
+//\r
+// End Label\r
+//\r
+#define LABEL_END   0xffff\r
+\r
 ///\r
 /// This is the structure that will be used to store the\r
 /// question's current value. Use it at initialize time to\r
index 3d23da1ac3c2d2505b6fb81df82466ab3507fa35..dcc1fe2a13e6f442c4566173379e2159740ff3ac 100644 (file)
@@ -23,7 +23,24 @@ RefreshUpdateData (
   VOID\r
   )\r
 {\r
-  gUpdateData.Offset = 0;\r
+  //\r
+  // Free current updated date\r
+  //  \r
+  if (mStartOpCodeHandle != NULL) {\r
+    HiiFreeOpCodeHandle (mStartOpCodeHandle);\r
+  }\r
+\r
+  //\r
+  // Create new OpCode Handle\r
+  //\r
+  mStartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+\r
+  //\r
+  // Create Hii Extend Label OpCode as the start opcode\r
+  //\r
+  mStartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (mStartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
+  mStartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
+\r
 }\r
 \r
 /**\r
@@ -39,19 +56,20 @@ UpdatePageStart (
   )\r
 {\r
   RefreshUpdateData ();\r
+  mStartLabel->Number = CallbackData->BmmCurrentPageId;\r
 \r
   if (!(CallbackData->BmmAskSaveOrNot)) {\r
     //\r
     // Add a "Go back to main page" tag in front of the form when there are no\r
     // "Apply changes" and "Discard changes" tags in the end of the form.\r
     //\r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_MAIN_ID,\r
       STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
       STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
       0,\r
-      FORM_MAIN_ID,\r
-      &gUpdateData\r
+      FORM_MAIN_ID\r
       );\r
   }\r
 \r
@@ -73,43 +91,42 @@ UpdatePageEnd (
   // Create the "Apply changes" and "Discard changes" tags.\r
   //\r
   if (CallbackData->BmmAskSaveOrNot) {\r
-    CreateSubTitleOpCode (\r
+    HiiCreateSubTitleOpCode (\r
+      mStartOpCodeHandle,\r
       STRING_TOKEN (STR_NULL_STRING),\r
       0,\r
       0,\r
-      0,\r
-      &gUpdateData\r
+      0\r
       );\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_MAIN_ID,\r
       STRING_TOKEN (STR_SAVE_AND_EXIT),\r
       STRING_TOKEN (STR_NULL_STRING),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      KEY_VALUE_SAVE_AND_EXIT,\r
-      &gUpdateData\r
+      KEY_VALUE_SAVE_AND_EXIT\r
       );\r
   }\r
 \r
   //\r
   // Ensure user can return to the main page.\r
   //\r
-  CreateGotoOpCode (\r
+  HiiCreateGotoOpCode (\r
+    mStartOpCodeHandle,\r
     FORM_MAIN_ID,\r
     STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
     STRING_TOKEN (STR_NULL_STRING),\r
     EFI_IFR_FLAG_CALLBACK,\r
-    KEY_VALUE_NO_SAVE_AND_EXIT,\r
-    &gUpdateData\r
+    KEY_VALUE_NO_SAVE_AND_EXIT\r
     );\r
 \r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     CallbackData->BmmHiiHandle,\r
     &mBootMaintGuid,\r
     CallbackData->BmmCurrentPageId,\r
-    CallbackData->BmmCurrentPageId,\r
-    FALSE,\r
-    &gUpdateData\r
+    mStartOpCodeHandle, // Label CallbackData->BmmCurrentPageId\r
+    mEndOpCodeHandle    // LABEL_END\r
     );\r
 }\r
 \r
@@ -131,13 +148,13 @@ CleanUpPage (
   //\r
   // Remove all op-codes from dynamic page\r
   //\r
-  IfrLibUpdateForm (\r
+  mStartLabel->Number = LabelId;\r
+  HiiUpdateForm (\r
     CallbackData->BmmHiiHandle,\r
     &mBootMaintGuid,\r
     LabelId,\r
-    LabelId,\r
-    FALSE,\r
-    &gUpdateData\r
+    mStartOpCodeHandle, // Label LabelId\r
+    mEndOpCodeHandle    // LABEL_END\r
     );\r
 }\r
 \r
@@ -203,13 +220,13 @@ UpdateConCOMPage (
   for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
     NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_CON_COM_SETUP_ID,\r
       NewMenuEntry->DisplayStringToken,\r
       STRING_TOKEN (STR_NULL_STRING),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      (UINT16) (TERMINAL_OPTION_OFFSET + Index),\r
-      &gUpdateData\r
+      (UINT16) (TERMINAL_OPTION_OFFSET + Index)\r
       );\r
   }\r
 \r
@@ -248,7 +265,8 @@ UpdateBootDelPage (
     NewLoadContext->Deleted = FALSE;\r
     CallbackData->BmmFakeNvData.BootOptionDel[Index] = 0x00;\r
 \r
-    CreateCheckBoxOpCode (\r
+    HiiCreateCheckBoxOpCode (\r
+      mStartOpCodeHandle,\r
       (EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index),\r
       VARSTORE_ID_BOOT_MAINT,\r
       (UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),\r
@@ -256,7 +274,7 @@ UpdateBootDelPage (
       NewMenuEntry->HelpStringToken,\r
       0,\r
       0,\r
-      &gUpdateData\r
+      NULL\r
       );\r
   }\r
 \r
@@ -284,13 +302,13 @@ UpdateDrvAddHandlePage (
   for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {\r
     NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);\r
 \r
-    CreateGotoOpCode (\r
+    HiiCreateGotoOpCode (\r
+      mStartOpCodeHandle,\r
       FORM_DRV_ADD_HANDLE_DESC_ID,\r
       NewMenuEntry->DisplayStringToken,\r
       STRING_TOKEN (STR_NULL_STRING),\r
       EFI_IFR_FLAG_CALLBACK,\r
-      (UINT16) (HANDLE_OPTION_OFFSET + Index),\r
-      &gUpdateData\r
+      (UINT16) (HANDLE_OPTION_OFFSET + Index)\r
       );\r
   }\r
 \r
@@ -327,7 +345,8 @@ UpdateDrvDelPage (
     NewLoadContext->Deleted = FALSE;\r
     CallbackData->BmmFakeNvData.DriverOptionDel[Index] = 0x00;\r
 \r
-    CreateCheckBoxOpCode (\r
+    HiiCreateCheckBoxOpCode (\r
+      mStartOpCodeHandle,\r
       (EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index),\r
       VARSTORE_ID_BOOT_MAINT,\r
       (UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),\r
@@ -335,7 +354,7 @@ UpdateDrvDelPage (
       NewMenuEntry->HelpStringToken,\r
       0,\r
       0,\r
-      &gUpdateData\r
+      NULL\r
       );\r
   }\r
 \r
@@ -363,15 +382,16 @@ UpdateDriverAddHandleDescPage (
 \r
   UpdatePageStart (CallbackData);\r
 \r
-  CreateSubTitleOpCode (\r
+  HiiCreateSubTitleOpCode (\r
+    mStartOpCodeHandle,\r
     NewMenuEntry->DisplayStringToken,\r
     0,\r
     0,\r
-    0,\r
-    &gUpdateData\r
+    0\r
     );\r
 \r
-  CreateStringOpCode (\r
+  HiiCreateStringOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) DRV_ADD_HANDLE_DESC_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     DRV_ADD_HANDLE_DESC_VAR_OFFSET,\r
@@ -381,10 +401,11 @@ UpdateDriverAddHandleDescPage (
     0,\r
     6,\r
     75,\r
-    &gUpdateData\r
+    NULL\r
     );\r
 \r
-  CreateCheckBoxOpCode (\r
+  HiiCreateCheckBoxOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) DRV_ADD_RECON_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     DRV_ADD_RECON_VAR_OFFSET,\r
@@ -392,10 +413,11 @@ UpdateDriverAddHandleDescPage (
     STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
     0,\r
     0,\r
-    &gUpdateData\r
+    NULL\r
     );\r
 \r
-  CreateStringOpCode (\r
+  HiiCreateStringOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) DRIVER_ADD_OPTION_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     DRIVER_ADD_OPTION_VAR_OFFSET,\r
@@ -405,7 +427,7 @@ UpdateDriverAddHandleDescPage (
     0,\r
     6,\r
     75,\r
-    &gUpdateData\r
+    NULL\r
     );\r
 \r
   UpdatePageEnd (CallbackData);\r
@@ -449,7 +471,8 @@ UpdateConsolePage (
       CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
     }\r
 \r
-    CreateCheckBoxOpCode (\r
+    HiiCreateCheckBoxOpCode (\r
+      mStartOpCodeHandle,\r
       (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
       VARSTORE_ID_BOOT_MAINT,\r
       (UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
@@ -457,7 +480,7 @@ UpdateConsolePage (
       NewMenuEntry->HelpStringToken,\r
       0,\r
       CheckFlags,\r
-      &gUpdateData\r
+      NULL\r
       );\r
   }\r
 \r
@@ -476,7 +499,8 @@ UpdateConsolePage (
       CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
     }\r
 \r
-    CreateCheckBoxOpCode (\r
+    HiiCreateCheckBoxOpCode (\r
+      mStartOpCodeHandle,\r
       (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
       VARSTORE_ID_BOOT_MAINT,\r
       (UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
@@ -484,7 +508,7 @@ UpdateConsolePage (
       NewMenuEntry->HelpStringToken,\r
       0,\r
       CheckFlags,\r
-      &gUpdateData\r
+      NULL\r
       );\r
 \r
     Index++;\r
@@ -511,7 +535,7 @@ UpdateOrderPage (
 {\r
   BM_MENU_ENTRY *NewMenuEntry;\r
   UINT16        Index;\r
-  IFR_OPTION    *IfrOptionList;\r
+  VOID          *OptionsOpCodeHandle;\r
 \r
   CallbackData->BmmAskSaveOrNot = TRUE;\r
 \r
@@ -521,37 +545,39 @@ UpdateOrderPage (
 \r
   ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, 100);\r
 \r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);\r
-  if (IfrOptionList == NULL) {\r
-    return ;\r
-  }\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
   \r
   for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
     NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;\r
-    IfrOptionList[Index].Value.u8 = (UINT8) (NewMenuEntry->OptionNumber + 1);\r
-    IfrOptionList[Index].Flags = 0;\r
-    CallbackData->BmmFakeNvData.OptionOrder[Index] = IfrOptionList[Index].Value.u8;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      NewMenuEntry->DisplayStringToken,\r
+      0,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      (UINT8) (NewMenuEntry->OptionNumber + 1)\r
+      );\r
+    CallbackData->BmmFakeNvData.OptionOrder[Index] = (UINT8) (NewMenuEntry->OptionNumber + 1);\r
   }\r
 \r
   if (OptionMenu->MenuNumber > 0) {\r
-    CreateOrderedListOpCode (\r
-      (EFI_QUESTION_ID) OPTION_ORDER_QUESTION_ID,\r
-      VARSTORE_ID_BOOT_MAINT,\r
-      OPTION_ORDER_VAR_OFFSET,\r
-      STRING_TOKEN (STR_CHANGE_ORDER),\r
-      STRING_TOKEN (STR_CHANGE_ORDER),\r
-      0,\r
-      0,\r
-      EFI_IFR_NUMERIC_SIZE_1,\r
-      100,\r
-      IfrOptionList,\r
-      OptionMenu->MenuNumber,\r
-      &gUpdateData\r
+    HiiCreateOrderedListOpCode (                   \r
+      mStartOpCodeHandle,                          // Container for dynamic created opcodes     \r
+      (EFI_QUESTION_ID) OPTION_ORDER_QUESTION_ID,  // Question ID                               \r
+      VARSTORE_ID_BOOT_MAINT,                      // VarStore ID                               \r
+      OPTION_ORDER_VAR_OFFSET,                     // Offset in Buffer Storage                  \r
+      STRING_TOKEN (STR_CHANGE_ORDER),             // Question prompt text                      \r
+      STRING_TOKEN (STR_CHANGE_ORDER),             // Question help text                        \r
+      0,                                           // Question flag                             \r
+      0,                                           // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET\r
+      EFI_IFR_NUMERIC_SIZE_1,                      // Data type of Question value               \r
+      100,                                         // Maximum container                         \r
+      OptionsOpCodeHandle,                         // Option Opcode list                        \r
+      NULL                                         // Default Opcode is NULL                    \r
       );\r
   }\r
 \r
-  FreePool (IfrOptionList);\r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
 \r
   UpdatePageEnd (CallbackData);\r
 \r
@@ -576,11 +602,10 @@ UpdateBootNextPage (
 {\r
   BM_MENU_ENTRY   *NewMenuEntry;\r
   BM_LOAD_CONTEXT *NewLoadContext;\r
-  IFR_OPTION      *IfrOptionList;\r
   UINTN           NumberOfOptions;\r
   UINT16          Index;\r
+  VOID            *OptionsOpCodeHandle;\r
 \r
-  IfrOptionList                 = NULL;\r
   NumberOfOptions               = BootOptionMenu.MenuNumber;\r
   CallbackData->BmmAskSaveOrNot = TRUE;\r
 \r
@@ -588,34 +613,55 @@ UpdateBootNextPage (
   CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
 \r
   if (NumberOfOptions > 0) {\r
-    IfrOptionList = AllocateZeroPool ((NumberOfOptions + 1) * sizeof (IFR_OPTION));\r
-\r
-    ASSERT (IfrOptionList);\r
+    OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+    ASSERT (OptionsOpCodeHandle != NULL);\r
 \r
     CallbackData->BmmFakeNvData.BootNext = (UINT16) (BootOptionMenu.MenuNumber);\r
 \r
     for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
       NewMenuEntry    = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
       NewLoadContext  = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
+\r
       if (NewLoadContext->IsBootNext) {\r
-        IfrOptionList[Index].Flags            = EFI_IFR_OPTION_DEFAULT;\r
+        HiiCreateOneOfOptionOpCode (\r
+          OptionsOpCodeHandle,\r
+          NewMenuEntry->DisplayStringToken,\r
+          EFI_IFR_OPTION_DEFAULT,\r
+          EFI_IFR_NUMERIC_SIZE_2,\r
+          Index\r
+          );\r
         CallbackData->BmmFakeNvData.BootNext = Index;\r
       } else {\r
-        IfrOptionList[Index].Flags = 0;\r
+        HiiCreateOneOfOptionOpCode (\r
+          OptionsOpCodeHandle,\r
+          NewMenuEntry->DisplayStringToken,\r
+          0,\r
+          EFI_IFR_NUMERIC_SIZE_2,\r
+          Index\r
+          );\r
       }\r
-\r
-      IfrOptionList[Index].Value.u16    = Index;\r
-      IfrOptionList[Index].StringToken  = NewMenuEntry->DisplayStringToken;\r
     }\r
 \r
-    IfrOptionList[Index].Value.u16        = Index;\r
-    IfrOptionList[Index].StringToken  = STRING_TOKEN (STR_NONE);\r
-    IfrOptionList[Index].Flags        = 0;\r
     if (CallbackData->BmmFakeNvData.BootNext == Index) {\r
-      IfrOptionList[Index].Flags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        STRING_TOKEN (STR_NONE),\r
+        EFI_IFR_OPTION_DEFAULT,\r
+        EFI_IFR_NUMERIC_SIZE_2,\r
+        Index\r
+        );\r
+    } else {\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        STRING_TOKEN (STR_NONE),\r
+        0,\r
+        EFI_IFR_NUMERIC_SIZE_2,\r
+        Index\r
+        );\r
+    }      \r
 \r
-    CreateOneOfOpCode (\r
+    HiiCreateOneOfOpCode (\r
+      mStartOpCodeHandle,\r
       (EFI_QUESTION_ID) BOOT_NEXT_QUESTION_ID,\r
       VARSTORE_ID_BOOT_MAINT,\r
       BOOT_NEXT_VAR_OFFSET,\r
@@ -623,12 +669,11 @@ UpdateBootNextPage (
       STRING_TOKEN (STR_BOOT_NEXT_HELP),\r
       0,\r
       EFI_IFR_NUMERIC_SIZE_2,\r
-      IfrOptionList,\r
-      (UINTN) (NumberOfOptions + 1),\r
-      &gUpdateData\r
+      OptionsOpCodeHandle,\r
+      NULL\r
       );\r
 \r
-    FreePool (IfrOptionList);\r
+    HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
   }\r
 \r
   UpdatePageEnd (CallbackData);\r
@@ -646,6 +691,7 @@ UpdateTimeOutPage (
   )\r
 {\r
   UINT16  BootTimeOut;\r
+  VOID    *DefaultOpCodeHandle;\r
 \r
   CallbackData->BmmAskSaveOrNot = TRUE;\r
 \r
@@ -653,7 +699,12 @@ UpdateTimeOutPage (
 \r
   BootTimeOut = PcdGet16 (PcdPlatformBootTimeOut);\r
 \r
-  CreateNumericOpCode (\r
+  DefaultOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (DefaultOpCodeHandle != NULL);\r
+  HiiCreateDefaultOpCode (DefaultOpCodeHandle, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_NUMERIC_SIZE_2, BootTimeOut);\r
+\r
+  HiiCreateNumericOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) BOOT_TIME_OUT_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     BOOT_TIME_OUT_VAR_OFFSET,\r
@@ -664,9 +715,10 @@ UpdateTimeOutPage (
     0,\r
     65535,\r
     0,\r
-    BootTimeOut,\r
-    &gUpdateData\r
+    DefaultOpCodeHandle\r
     );\r
+  \r
+  HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
 \r
   CallbackData->BmmFakeNvData.BootTimeOut = BootTimeOut;\r
 \r
@@ -694,8 +746,8 @@ UpdateConModePage (
   UINTN                         MaxMode;\r
   UINTN                         ValidMode;\r
   EFI_STRING_ID                 *ModeToken;\r
-  IFR_OPTION                    *IfrOptionList;\r
   EFI_STATUS                    Status;\r
+  VOID                          *OptionsOpCodeHandle;\r
   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *ConOut;\r
 \r
   ConOut    = gST->ConOut;\r
@@ -722,8 +774,8 @@ UpdateConModePage (
     return;\r
   }\r
 \r
-  IfrOptionList       = AllocateZeroPool (sizeof (IFR_OPTION) * ValidMode);\r
-  ASSERT(IfrOptionList != NULL);\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
 \r
   ModeToken           = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);\r
   ASSERT(ModeToken != NULL);\r
@@ -754,17 +806,28 @@ UpdateConModePage (
 \r
     ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL);\r
 \r
-    IfrOptionList[Index].StringToken  = ModeToken[Index];\r
-    IfrOptionList[Index].Value.u16    = (UINT16) Mode;\r
     if (Mode == CallbackData->BmmFakeNvData.ConsoleOutMode) {\r
-      IfrOptionList[Index].Flags      = EFI_IFR_OPTION_DEFAULT;\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        ModeToken[Index],\r
+        EFI_IFR_OPTION_DEFAULT,\r
+        EFI_IFR_NUMERIC_SIZE_2,\r
+        (UINT16) Mode\r
+        );\r
     } else {\r
-      IfrOptionList[Index].Flags      = 0;\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        ModeToken[Index],\r
+        0,\r
+        EFI_IFR_NUMERIC_SIZE_2,\r
+        (UINT16) Mode\r
+        );\r
     }\r
     Index++;\r
   }\r
 \r
-  CreateOneOfOpCode (\r
+  HiiCreateOneOfOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) CON_MODE_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     CON_MODE_VAR_OFFSET,\r
@@ -772,11 +835,11 @@ UpdateConModePage (
     STRING_TOKEN (STR_CON_MODE_SETUP),\r
     EFI_IFR_FLAG_RESET_REQUIRED,\r
     EFI_IFR_NUMERIC_SIZE_2,\r
-    IfrOptionList,\r
-    ValidMode,\r
-    &gUpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
-  FreePool (IfrOptionList);\r
+\r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
   FreePool (ModeToken);\r
 \r
   UpdatePageEnd (CallbackData);\r
@@ -796,9 +859,9 @@ UpdateTerminalPage (
 {\r
   UINT8               Index;\r
   UINT8               CheckFlags;\r
-  IFR_OPTION          *IfrOptionList;\r
   BM_MENU_ENTRY       *NewMenuEntry;\r
   BM_TERMINAL_CONTEXT *NewTerminalContext;\r
+  VOID                *OptionsOpCodeHandle;\r
 \r
   CallbackData->BmmAskSaveOrNot = TRUE;\r
 \r
@@ -815,10 +878,8 @@ UpdateTerminalPage (
 \r
   NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
 \r
-  IfrOptionList       = AllocateZeroPool (sizeof (IFR_OPTION) * 19);\r
-  if (IfrOptionList == NULL) {\r
-    return ;\r
-  }\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
 \r
   for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList [0]); Index++) {\r
     CheckFlags = 0;\r
@@ -828,12 +889,17 @@ UpdateTerminalPage (
       CallbackData->BmmFakeNvData.COMBaudRate  = NewTerminalContext->BaudRateIndex;\r
     }\r
 \r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].StringToken  = BaudRateList[Index].StringToken;\r
-    IfrOptionList[Index].Value.u8     = Index;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      BaudRateList[Index].StringToken,\r
+      CheckFlags,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      Index\r
+      );\r
   }\r
 \r
-  CreateOneOfOpCode (\r
+  HiiCreateOneOfOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) COM_BAUD_RATE_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     COM_BAUD_RATE_VAR_OFFSET,\r
@@ -841,10 +907,13 @@ UpdateTerminalPage (
     STRING_TOKEN (STR_COM_BAUD_RATE),\r
     0,\r
     EFI_IFR_NUMERIC_SIZE_1,\r
-    IfrOptionList,\r
-    19,\r
-    &gUpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
+  \r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
 \r
   for (Index = 0; Index < sizeof (DataBitsList) / sizeof (DataBitsList[0]); Index++) {\r
     CheckFlags = 0;\r
@@ -855,12 +924,17 @@ UpdateTerminalPage (
       CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
     }\r
 \r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].StringToken  = DataBitsList[Index].StringToken;\r
-    IfrOptionList[Index].Value.u8     = Index;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      DataBitsList[Index].StringToken,\r
+      CheckFlags,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      Index\r
+      );\r
   }\r
 \r
-  CreateOneOfOpCode (\r
+  HiiCreateOneOfOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) COM_DATA_RATE_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     COM_DATA_RATE_VAR_OFFSET,\r
@@ -868,11 +942,14 @@ UpdateTerminalPage (
     STRING_TOKEN (STR_COM_DATA_BITS),\r
     0,\r
     EFI_IFR_NUMERIC_SIZE_1,\r
-    IfrOptionList,\r
-    4,\r
-    &gUpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
 \r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
   for (Index = 0; Index < sizeof (ParityList) / sizeof (ParityList[0]); Index++) {\r
     CheckFlags = 0;\r
     if (NewTerminalContext->Parity == ParityList[Index].Value) {\r
@@ -881,12 +958,17 @@ UpdateTerminalPage (
       CallbackData->BmmFakeNvData.COMParity  = NewTerminalContext->ParityIndex;\r
     }\r
 \r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].StringToken  = ParityList[Index].StringToken;\r
-    IfrOptionList[Index].Value.u8     = Index;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      ParityList[Index].StringToken,\r
+      CheckFlags,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      Index\r
+      );\r
   }\r
 \r
-  CreateOneOfOpCode (\r
+  HiiCreateOneOfOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) COM_PARITY_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     COM_PARITY_VAR_OFFSET,\r
@@ -894,11 +976,14 @@ UpdateTerminalPage (
     STRING_TOKEN (STR_COM_PARITY),\r
     0,\r
     EFI_IFR_NUMERIC_SIZE_1,\r
-    IfrOptionList,\r
-    5,\r
-    &gUpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
 \r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
   for (Index = 0; Index < sizeof (StopBitsList) / sizeof (StopBitsList[0]); Index++) {\r
     CheckFlags = 0;\r
     if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {\r
@@ -907,12 +992,17 @@ UpdateTerminalPage (
       CallbackData->BmmFakeNvData.COMStopBits  = NewTerminalContext->StopBitsIndex;\r
     }\r
 \r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].StringToken  = StopBitsList[Index].StringToken;\r
-    IfrOptionList[Index].Value.u8     = Index;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      StopBitsList[Index].StringToken,\r
+      CheckFlags,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      Index\r
+      );\r
   }\r
 \r
-  CreateOneOfOpCode (\r
+  HiiCreateOneOfOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) COM_STOP_BITS_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     COM_STOP_BITS_VAR_OFFSET,\r
@@ -920,11 +1010,14 @@ UpdateTerminalPage (
     STRING_TOKEN (STR_COM_STOP_BITS),\r
     0,\r
     EFI_IFR_NUMERIC_SIZE_1,\r
-    IfrOptionList,\r
-    3,\r
-    &gUpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
 \r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
+\r
   for (Index = 0; Index < 4; Index++) {\r
     CheckFlags = 0;\r
     if (NewTerminalContext->TerminalType == Index) {\r
@@ -932,12 +1025,17 @@ UpdateTerminalPage (
       CallbackData->BmmFakeNvData.COMTerminalType = NewTerminalContext->TerminalType;\r
     }\r
 \r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].StringToken  = (EFI_STRING_ID) TerminalType[Index];\r
-    IfrOptionList[Index].Value.u8     = Index;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      (EFI_STRING_ID) TerminalType[Index],\r
+      CheckFlags,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      Index\r
+      );\r
   }\r
 \r
-  CreateOneOfOpCode (\r
+  HiiCreateOneOfOpCode (\r
+    mStartOpCodeHandle,\r
     (EFI_QUESTION_ID) COM_TERMINAL_QUESTION_ID,\r
     VARSTORE_ID_BOOT_MAINT,\r
     COM_TERMINAL_VAR_OFFSET,\r
@@ -945,12 +1043,11 @@ UpdateTerminalPage (
     STRING_TOKEN (STR_COM_TERMI_TYPE),\r
     0,\r
     EFI_IFR_NUMERIC_SIZE_1,\r
-    IfrOptionList,\r
-    4,\r
-    &gUpdateData\r
+    OptionsOpCodeHandle,\r
+    NULL\r
     );\r
 \r
-  FreePool (IfrOptionList);\r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
 \r
   UpdatePageEnd (CallbackData);\r
 }\r
@@ -1100,7 +1197,6 @@ UpdateSetLegacyDeviceOrderPage (
   BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;\r
   BM_MENU_OPTION              *OptionMenu;\r
   BM_MENU_ENTRY               *NewMenuEntry;\r
-  IFR_OPTION                  *IfrOptionList;\r
   EFI_STRING_ID               StrRef;\r
   EFI_STRING_ID               StrRefHelp;\r
   BBS_TYPE                    BbsType;\r
@@ -1117,6 +1213,7 @@ UpdateSetLegacyDeviceOrderPage (
   UINT8                       *LegacyOrder;\r
   UINT8                       *OldData;\r
   UINT8                       *DisMap;\r
+  VOID                        *OptionsOpCodeHandle;\r
 \r
   OptionMenu = NULL;\r
   Key = 0;\r
@@ -1196,27 +1293,41 @@ UpdateSetLegacyDeviceOrderPage (
 \r
   CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
 \r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * (OptionMenu->MenuNumber + 1));\r
-  if (NULL == IfrOptionList) {\r
-    return ;\r
-  }\r
+  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (OptionsOpCodeHandle != NULL);\r
 \r
   for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
     NewMenuEntry                = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    IfrOptionList[Index].Flags  = 0;\r
-    if (0 == Index) {\r
-      IfrOptionList[Index].Flags |= EFI_IFR_OPTION_DEFAULT;\r
+\r
+    if (Index == 0) {\r
+      HiiCreateOneOfOptionOpCode (\r
+        OptionsOpCodeHandle,\r
+        NewMenuEntry->DisplayStringToken,\r
+        EFI_IFR_OPTION_DEFAULT,\r
+        EFI_IFR_NUMERIC_SIZE_1,\r
+        (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index\r
+        );\r
     }\r
 \r
-    IfrOptionList[Index].StringToken  = NewMenuEntry->DisplayStringToken;\r
-    IfrOptionList[Index].Value.u8     = (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index;\r
+    HiiCreateOneOfOptionOpCode (\r
+      OptionsOpCodeHandle,\r
+      NewMenuEntry->DisplayStringToken,\r
+      0,\r
+      EFI_IFR_NUMERIC_SIZE_1,\r
+      (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index\r
+      );\r
   }\r
+\r
   //\r
   // for item "Disabled"\r
   //\r
-  IfrOptionList[Index].Flags        = 0;\r
-  IfrOptionList[Index].StringToken  = STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE);\r
-  IfrOptionList[Index].Value.u8     = 0xFF;\r
+  HiiCreateOneOfOptionOpCode (\r
+    OptionsOpCodeHandle,\r
+    STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE),\r
+    0,\r
+    EFI_IFR_NUMERIC_SIZE_1,\r
+    0xFF\r
+    );\r
 \r
   //\r
   // Get Device Order from variable\r
@@ -1251,7 +1362,8 @@ UpdateSetLegacyDeviceOrderPage (
       UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
       StrRefHelp = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
 \r
-      CreateOneOfOpCode (\r
+      HiiCreateOneOfOpCode (\r
+        mStartOpCodeHandle,\r
         (EFI_QUESTION_ID) (Key + Index),\r
         VARSTORE_ID_BOOT_MAINT,\r
         (UINT16) (Key + Index - CONFIG_OPTION_OFFSET),\r
@@ -1259,9 +1371,8 @@ UpdateSetLegacyDeviceOrderPage (
         StrRefHelp,\r
         EFI_IFR_FLAG_CALLBACK,\r
         EFI_IFR_NUMERIC_SIZE_1,\r
-        IfrOptionList,\r
-        OptionMenu->MenuNumber + 1,\r
-        &gUpdateData\r
+        OptionsOpCodeHandle,\r
+        NULL\r
         );\r
 \r
       VarDevOrder = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16));\r
@@ -1279,10 +1390,7 @@ UpdateSetLegacyDeviceOrderPage (
 \r
   CopyMem (OldData, LegacyOrder, 100);\r
 \r
-  if (IfrOptionList != NULL) {\r
-    FreePool (IfrOptionList);\r
-    IfrOptionList = NULL;\r
-  }\r
+  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
 \r
   UpdatePageEnd (CallbackData);\r
 }\r
index 4918b25b13e0168767a0ab0517850c8746ddc3df..7a727b86753d1e0b3173b084130b85c42b801ab5 100644 (file)
@@ -186,7 +186,6 @@ CallBootManager (
   EFI_STATUS                  Status;\r
   BDS_COMMON_OPTION           *Option;\r
   LIST_ENTRY                  *Link;\r
-  EFI_HII_UPDATE_DATA         UpdateData;\r
   CHAR16                      *ExitData;\r
   UINTN                       ExitDataSize;\r
   EFI_STRING_ID               Token;\r
@@ -198,6 +197,10 @@ CallBootManager (
   EFI_HII_HANDLE              HiiHandle;\r
   EFI_BROWSER_ACTION_REQUEST  ActionRequest;\r
   UINTN                       TempSize;\r
+  VOID                        *StartOpCodeHandle;\r
+  VOID                        *EndOpCodeHandle;\r
+  EFI_IFR_GUID_LABEL          *StartLabel;\r
+  EFI_IFR_GUID_LABEL          *EndLabel;\r
 \r
   gOption = NULL;\r
   InitializeListHead (&BdsBootOptionList);\r
@@ -223,10 +226,25 @@ CallBootManager (
   //\r
   // Allocate space for creation of UpdateData Buffer\r
   //\r
-  UpdateData.BufferSize = 0x1000;\r
-  UpdateData.Offset = 0;\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
+  //\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_BOOT_OPTION;\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_BOOT_OPTION_END;\r
 \r
   mKeyInput = 0;\r
 \r
@@ -256,32 +274,33 @@ CallBootManager (
 \r
     HelpToken = HiiSetString (HiiHandle, 0, HelpString, NULL);\r
 \r
-    CreateActionOpCode (\r
+    HiiCreateActionOpCode (\r
+      StartOpCodeHandle,\r
       mKeyInput,\r
       Token,\r
       HelpToken,\r
       EFI_IFR_FLAG_CALLBACK,\r
-      0,\r
-      &UpdateData\r
+      0\r
       );\r
   }\r
 \r
-  IfrLibUpdateForm (\r
+  HiiUpdateForm (\r
     HiiHandle,\r
     &mBootManagerGuid,\r
     BOOT_MANAGER_FORM_ID,\r
-    LABEL_BOOT_OPTION,\r
-    FALSE,\r
-    &UpdateData\r
+    StartOpCodeHandle,\r
+    EndOpCodeHandle\r
     );\r
-  FreePool (UpdateData.Data);\r
+\r
+  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
 \r
   ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
   Status = gFormBrowser2->SendForm (\r
                            gFormBrowser2,\r
                            &HiiHandle,\r
                            1,\r
-                           NULL,\r
+                           &mBootManagerGuid,\r
                            0,\r
                            NULL,\r
                            &ActionRequest\r
index 90b7b2850df575fbdb0623509d3697ea81e9cd5a..00307b6ba3f46297536ce3402b3eb2b1456a56bc 100644 (file)
@@ -29,6 +29,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define BOOT_MANAGER_FORM_ID     0x1000\r
 \r
 #define LABEL_BOOT_OPTION        0x00\r
+#define LABEL_BOOT_OPTION_END    0x01\r
 \r
 //\r
 // These are the VFR compiler generated data representing our VFR data.\r
index a70966cf3cfc8f215f52251c1f3c0089c668f054..c23c84fcf3bbbbb4a8aa05ae41b83f504e046afe 100644 (file)
 #define BOOT_MANAGER_SUBCLASS    0x00\r
 \r
 formset\r
-  guid     = FORMSET_GUID,\r
-  title    = STRING_TOKEN(STR_BM_BANNER),\r
-  help     = STRING_TOKEN(STR_LAST_STRING),\r
-  class    = BOOT_MANAGER_CLASS,\r
-  subclass = BOOT_MANAGER_SUBCLASS,\r
+  guid      = FORMSET_GUID,\r
+  title     = STRING_TOKEN(STR_BM_BANNER),\r
+  help      = STRING_TOKEN(STR_LAST_STRING),\r
+  classguid = FORMSET_GUID,\r
+  class     = BOOT_MANAGER_CLASS,\r
+  subclass  = BOOT_MANAGER_SUBCLASS,\r
 \r
   form formid = BOOT_MANAGER_FORM_ID,\r
        title  = STRING_TOKEN(STR_BM_BANNER);\r
index 920a0506306851ee3ec2fab8d396a04eb7a83511..86046081fea1336f7cc95c6c5e084d3a69f8ba5c 100644 (file)
@@ -13,6 +13,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 \r
 #include "DeviceManager.h"\r
+#include <Guid/HiiPlatformSetupFormset.h>\r
 \r
 DEVICE_MANAGER_CALLBACK_DATA  gDeviceManagerPrivate = {\r
   DEVICE_MANAGER_CALLBACK_DATA_SIGNATURE,\r
@@ -61,9 +62,6 @@ HII_VENDOR_DEVICE_PATH  mDeviceManagerHiiVendorDevicePath = {
   }\r
 };\r
 \r
-#define MENU_ITEM_NUM  \\r
-  (sizeof (mDeviceManagerMenuItemTable) / sizeof (DEVICE_MANAGER_MENU_ITEM))\r
-\r
 /**\r
   This function is invoked if user selected a iteractive opcode from Device Manager's\r
   Formset. The decision by user is saved to gCallbackKey for later processing. If\r
@@ -154,6 +152,124 @@ InitializeDeviceManager (
   return Status;\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 FormSetTitle    Formset title string.\r
+  @param FormSetHelp     Formset help string.\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
+  OUT     EFI_STRING_ID       *FormSetTitle,\r
+  OUT     EFI_STRING_ID       *FormSetHelp\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
+\r
+  ASSERT (Handle != NULL);\r
+  ASSERT (SetupClassGuid != NULL);  \r
+  ASSERT (FormSetTitle != NULL);\r
+  ASSERT (FormSetHelp != NULL);\r
+\r
+  *FormSetTitle = 0;\r
+  *FormSetHelp  = 0;\r
+  ClassGuidNum  = 0;\r
+  ClassGuid     = NULL;\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
+  Offset2 = 0;\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
+\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
+\r
+        if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) {\r
+          //\r
+          // Find FormSet OpCode\r
+          //\r
+          ClassGuidNum = ((EFI_IFR_FORM_SET *) OpCodeData)->Flags;\r
+          ClassGuid = (EFI_GUID *) (VOID *)(OpCodeData + sizeof (EFI_IFR_FORM_SET));\r
+          while (ClassGuidNum-- > 0) {\r
+            if (CompareGuid (SetupClassGuid, ClassGuid)) {\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
+              FreePool (HiiPackageList);\r
+              return TRUE;\r
+            }\r
+          }\r
+        }\r
+        \r
+        //\r
+        // Go to next opcode\r
+        //\r
+        Offset2 += ((EFI_IFR_OP_HEADER *) OpCodeData)->Length;\r
+      }\r
+    }\r
+    \r
+    //\r
+    // Go to next package\r
+    //\r
+    Offset += PackageHeader.Length;\r
+  }\r
+\r
+  FreePool (HiiPackageList);\r
+\r
+  return FALSE;\r
+}\r
+\r
 /**\r
   Call the browser and display the device manager to allow user\r
   to configure the platform.\r
@@ -172,21 +288,21 @@ CallDeviceManager (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  UINTN                       Count;\r
   UINTN                       Index;\r
   EFI_STRING                  String;\r
-  EFI_HII_UPDATE_DATA         UpdateData[MENU_ITEM_NUM];\r
   EFI_STRING_ID               Token;\r
   EFI_STRING_ID               TokenHelp;\r
   EFI_HII_HANDLE              *HiiHandles;\r
   EFI_HII_HANDLE              HiiHandle;\r
-  UINT16                      FormSetClass;\r
   EFI_STRING_ID               FormSetTitle;\r
   EFI_STRING_ID               FormSetHelp;\r
   EFI_BROWSER_ACTION_REQUEST  ActionRequest;\r
+  VOID                        *StartOpCodeHandle;\r
+  VOID                        *EndOpCodeHandle;\r
+  EFI_IFR_GUID_LABEL          *StartLabel;\r
+  EFI_IFR_GUID_LABEL          *EndLabel;\r
 \r
-  HiiHandles          = NULL;\r
-\r
+  HiiHandles    = NULL;\r
   Status        = EFI_SUCCESS;\r
   gCallbackKey  = 0;\r
 \r
@@ -201,17 +317,30 @@ CallDeviceManager (
   //\r
   // Create Subtitle OpCodes\r
   //\r
-  for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
-    //\r
-    // Allocate space for creation of UpdateData Buffer\r
-    //\r
-    UpdateData[Index].BufferSize = 0x1000;\r
-    UpdateData[Index].Offset = 0;\r
-    UpdateData[Index].Data = AllocatePool (0x1000);\r
-    ASSERT (UpdateData[Index].Data != NULL);\r
+  //\r
+  // Allocate space for creation of UpdateData Buffer\r
+  //\r
+  StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (StartOpCodeHandle != NULL);\r
 \r
-    CreateSubTitleOpCode (mDeviceManagerMenuItemTable[Index].StringId, 0, 0, 1,  &UpdateData[Index]);\r
-  }\r
+  EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
+  ASSERT (EndOpCodeHandle != NULL);\r
+\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_DEVICES_LIST;\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
+  HiiCreateSubTitleOpCode (StartOpCodeHandle, STRING_TOKEN (STR_DEVICES_LIST), 0, 0, 1);\r
 \r
   //\r
   // Get all the Hii handles\r
@@ -225,9 +354,7 @@ CallDeviceManager (
   // Search for formset of each class type\r
   //\r
   for (Index = 0; HiiHandles[Index] != NULL; Index++) {\r
-    IfrLibExtractClassFromHiiHandle (HiiHandles[Index], &FormSetClass, &FormSetTitle, &FormSetHelp);\r
-\r
-    if (FormSetClass == EFI_NON_DEVICE_CLASS) {\r
+    if (!ExtractDisplayedHiiFormFromHiiHandle (HiiHandles[Index], &gEfiHiiPlatformSetupFormsetGuid, &FormSetTitle, &FormSetHelp)) {\r
       continue;\r
     }\r
 \r
@@ -241,42 +368,35 @@ CallDeviceManager (
     TokenHelp = HiiSetString (HiiHandle, 0, String, NULL);\r
     FreePool (String);\r
 \r
-    for (Count = 0; Count < MENU_ITEM_NUM; Count++) {\r
-      if (FormSetClass & mDeviceManagerMenuItemTable[Count].Class) {\r
-        CreateActionOpCode (\r
-          (EFI_QUESTION_ID) (Index + DEVICE_KEY_OFFSET),\r
-          Token,\r
-          TokenHelp,\r
-          EFI_IFR_FLAG_CALLBACK,\r
-          0,\r
-          &UpdateData[Count]\r
-          );\r
-      }\r
-    }\r
-  }\r
-\r
-  for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
-    //\r
-    // Add End Opcode for Subtitle\r
-    //\r
-    CreateEndOpCode (&UpdateData[Index]);\r
-\r
-    IfrLibUpdateForm (\r
-      HiiHandle,\r
-      &mDeviceManagerGuid,\r
-      DEVICE_MANAGER_FORM_ID,\r
-      mDeviceManagerMenuItemTable[Index].Class,\r
-      FALSE,\r
-      &UpdateData[Index]\r
+    HiiCreateActionOpCode (\r
+      StartOpCodeHandle,\r
+      (EFI_QUESTION_ID) (Index + DEVICE_KEY_OFFSET),\r
+      Token,\r
+      TokenHelp,\r
+      EFI_IFR_FLAG_CALLBACK,\r
+      0\r
       );\r
   }\r
 \r
+  //\r
+  // Add End Opcode for Subtitle\r
+  //\r
+  HiiCreateEndOpCode (StartOpCodeHandle);\r
+\r
+  HiiUpdateForm (\r
+    HiiHandle,\r
+    &mDeviceManagerGuid,\r
+    DEVICE_MANAGER_FORM_ID,\r
+    StartOpCodeHandle,\r
+    EndOpCodeHandle\r
+    );\r
+\r
   ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
   Status = gFormBrowser2->SendForm (\r
                            gFormBrowser2,\r
                            &HiiHandle,\r
                            1,\r
-                           NULL,\r
+                           &mDeviceManagerGuid,\r
                            0,\r
                            NULL,\r
                            &ActionRequest\r
@@ -329,9 +449,8 @@ CallDeviceManager (
     Status = EFI_SUCCESS;\r
   }\r
 \r
-  for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
-    FreePool (UpdateData[Index].Data);\r
-  }\r
+  HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+  HiiFreeOpCodeHandle (EndOpCodeHandle);\r
   FreePool (HiiHandles);\r
 \r
   return Status;\r
index ef39ca142ec5239c7a822d420944a07759a52048..4bcd09a1b0bf3e4010ad77e0f01c2ee8ab6f74b4 100644 (file)
@@ -26,6 +26,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
   0x3ebfa8e6, 0x511d, 0x4b5b, {0xa9, 0x5f, 0xfb, 0x38, 0x26, 0xf, 0x1c, 0x27} \\r
   }\r
 \r
+#define LABEL_DEVICES_LIST                   0x0080\r
+#define LABEL_END                            0xffff\r
+\r
 #define LABEL_VBIOS                          0x0040\r
 \r
 #define DEVICE_MANAGER_FORM_ID               0x1000\r
index cf614c5b008607b37efd6af6f45a2c1d531f3922..5a595d18d653637d695077bafc1fce5615538e26 100644 (file)
Binary files a/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManagerStrings.uni and b/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManagerStrings.uni differ
index d0b65b84befa4247dc26c36cd741a0f58a633a4d..55ee419bc5852870177fb6ea6b00afd79908e728 100644 (file)
@@ -23,6 +23,7 @@
 #define EFI_OTHER_DEVICE_CLASS             0x0020\r
 #define LABEL_VBIOS                        0x0040\r
 \r
+#define LABEL_DEVICES_LIST                 0x0080\r
 #define LABEL_END                          0xffff\r
 \r
 #define DEVICE_MANAGER_CLASS               0x0000\r
 #define DEVICE_MANAGER_FORM_ID             0x1000\r
 \r
 formset\r
-  guid     = FORMSET_GUID,\r
-  title    = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE),\r
-  help     = STRING_TOKEN(STR_EMPTY_STRING),\r
-  class    = DEVICE_MANAGER_CLASS,\r
-  subclass = FRONT_PAGE_SUBCLASS,\r
+  guid      = FORMSET_GUID,\r
+  title     = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE),\r
+  help      = STRING_TOKEN(STR_EMPTY_STRING),\r
+  classguid = FORMSET_GUID,\r
+  class     = DEVICE_MANAGER_CLASS,\r
+  subclass  = FRONT_PAGE_SUBCLASS,\r
 \r
   form formid = DEVICE_MANAGER_FORM_ID,\r
        title  = STRING_TOKEN(STR_DEVICE_MANAGER_TITLE);\r
@@ -58,7 +60,9 @@ formset
     label EFI_ON_BOARD_DEVICE_CLASS;\r
 //    label LABEL_END;\r
 \r
-    label EFI_OTHER_DEVICE_CLASS;\r
+//    label EFI_OTHER_DEVICE_CLASS;\r
+\r
+    label LABEL_DEVICES_LIST;\r
     label LABEL_END;\r
 \r
     subtitle text = STRING_TOKEN(STR_EMPTY_STRING);\r
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
index 420a474e35d96ebed77313ef72a95d4bfc45e218..998ad1ff33bdec88b20d36227a14712602d26491 100644 (file)
@@ -45,6 +45,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #define FRONT_PAGE_KEY_BOOT_MAINTAIN   0x9876\r
 \r
 #define LABEL_SELECT_LANGUAGE          0x1000\r
+#define LABEL_END                      0xffff\r
 \r
 #define FRONT_PAGE_FORMSET_GUID \\r
   { \\r
index 4bf657dc723c4ed1517ea6dd207a479742a4e42b..b9f000e3fff9b81bbe5649b04956f85ec701cfd1 100644 (file)
@@ -40,6 +40,7 @@ formset
   guid     = FORMSET_GUID,\r
   title    = STRING_TOKEN(STR_FRONT_PAGE_TITLE),\r
   help     = STRING_TOKEN(STR_NULL_STRING),\r
+  classguid = FORMSET_GUID,\r
   class    = FRONT_PAGE_CLASS,\r
   subclass = FRONT_PAGE_SUBCLASS,\r
 \r