]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
Update BdsDxe to use new designed HiiLib, remove the referrence to the original IfrSu...
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / UpdatePage.c
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