]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c
MdeModulePkg:Refine the UiApp
[mirror_edk2.git] / MdeModulePkg / Application / UiApp / BootMaint / UpdatePage.c
diff --git a/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c b/MdeModulePkg/Application/UiApp/BootMaint/UpdatePage.c
deleted file mode 100644 (file)
index c9df7ba..0000000
+++ /dev/null
@@ -1,1245 +0,0 @@
-/** @file\r
-Dynamically update the pages.\r
-\r
-Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "BootMaint.h"\r
-\r
-/**\r
-  Refresh the global UpdateData structure.\r
-\r
-**/\r
-VOID\r
-RefreshUpdateData (\r
-  VOID\r
-  )\r
-{\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
-  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
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdatePageStart (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\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
-    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
-      );\r
-  }\r
-\r
-}\r
-\r
-/**\r
-  Create the "Apply changes" and "Discard changes" tags. And\r
-  ensure user can return to the main page.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdatePageEnd (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  //\r
-  // Create the "Apply changes" and "Discard changes" tags.\r
-  //\r
-  if (CallbackData->BmmAskSaveOrNot) {\r
-    HiiCreateSubTitleOpCode (\r
-      mStartOpCodeHandle,\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      0,\r
-      0,\r
-      0\r
-      );\r
-\r
-    HiiCreateActionOpCode (\r
-      mStartOpCodeHandle,\r
-      KEY_VALUE_SAVE_AND_EXIT,\r
-      STRING_TOKEN (STR_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_CALLBACK,\r
-      0\r
-      );\r
-  }\r
-\r
-  //\r
-  // Ensure user can return to the main page.\r
-  //\r
-  HiiCreateActionOpCode (\r
-    mStartOpCodeHandle,\r
-    KEY_VALUE_NO_SAVE_AND_EXIT,\r
-    STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    EFI_IFR_FLAG_CALLBACK,\r
-    0\r
-    );\r
-\r
-  HiiUpdateForm (\r
-    CallbackData->BmmHiiHandle,\r
-    &mBootMaintGuid,\r
-    CallbackData->BmmCurrentPageId,\r
-    mStartOpCodeHandle, // Label CallbackData->BmmCurrentPageId\r
-    mEndOpCodeHandle    // LABEL_END\r
-    );\r
-}\r
-\r
-/**\r
-  Clean up the dynamic opcode at label and form specified by both LabelId. \r
-\r
-  @param LabelId         It is both the Form ID and Label ID for opcode deletion.\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-CleanUpPage (\r
-  IN UINT16                           LabelId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  RefreshUpdateData ();\r
-\r
-  //\r
-  // Remove all op-codes from dynamic page\r
-  //\r
-  mStartLabel->Number = LabelId;\r
-  HiiUpdateForm (\r
-    CallbackData->BmmHiiHandle,\r
-    &mBootMaintGuid,\r
-    LabelId,\r
-    mStartOpCodeHandle, // Label LabelId\r
-    mEndOpCodeHandle    // LABEL_END\r
-    );\r
-}\r
-\r
-/**\r
-  Boot a file selected by user at File Expoloer of BMM.\r
-\r
-  @param FileContext     The file context data, which contains the device path\r
-                         of the file to be boot from.\r
-\r
-  @retval EFI_SUCCESS    The function completed successfull.\r
-  @return Other value if the boot from the file fails.\r
-\r
-**/\r
-EFI_STATUS\r
-BootThisFile (\r
-  IN BM_FILE_CONTEXT                   *FileContext\r
-  )\r
-{\r
-  EFI_BOOT_MANAGER_LOAD_OPTION BootOption;\r
-\r
-  EfiBootManagerInitializeLoadOption (\r
-    &BootOption,\r
-    0,\r
-    LoadOptionTypeBoot,\r
-    LOAD_OPTION_ACTIVE,\r
-    FileContext->FileName,\r
-    FileContext->DevicePath,\r
-    NULL,\r
-    0\r
-    );\r
-  //\r
-  // Since current no boot from removable media directly is allowed */\r
-  //\r
-  gST->ConOut->ClearScreen (gST->ConOut);\r
-\r
-  BdsSetConsoleMode (FALSE);\r
-  EfiBootManagerBoot (&BootOption);\r
-  BdsSetConsoleMode (TRUE);\r
-\r
-  EfiBootManagerFreeLoadOption (&BootOption);\r
-\r
-  return BootOption.Status;\r
-\r
-}\r
-\r
-/**\r
-  Create a list of Goto Opcode for all terminal devices logged\r
-  by TerminaMenu. This list will be inserted to form FORM_CON_COM_SETUP_ID.\r
-\r
-  @param CallbackData    The BMM context data.\r
-**/\r
-VOID\r
-UpdateConCOMPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  UINT16              Index;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
-\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
-      );\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-\r
-/**\r
-  Create a list of boot option from global BootOptionMenu. It\r
-  allow user to delete the boot option.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateBootDelPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  UINT16          Index;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
-\r
-  ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.BootOptionDel) / sizeof (CallbackData->BmmFakeNvData.BootOptionDel[0])));\r
-  for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry    = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
-    NewLoadContext  = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (NewLoadContext->IsLegacy) {\r
-      continue;\r
-    }\r
-\r
-    NewLoadContext->Deleted = FALSE;\r
-\r
-    if (CallbackData->BmmFakeNvData.BootOptionDel[Index] && !CallbackData->BmmFakeNvData.BootOptionDelMark[Index]) {\r
-      //\r
-      // CallbackData->BmmFakeNvData.BootOptionDel[Index] == TRUE means browser knows this boot option is selected\r
-      // CallbackData->BmmFakeNvData.BootOptionDelMark[Index] = FALSE means BDS knows the selected boot option has\r
-      // deleted, browser maintains old useless info. So clear this info here, and later update this info to browser\r
-      // through HiiSetBrowserData function.\r
-      //\r
-      CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;\r
-    }\r
-\r
-    //\r
-    // Check to see if the current boot option devicepath is the ShellDevice \r
-    // path. If it is keep only UEFI Shell in the delete boot option list \r
-    // or else continue\r
-    // \r
-    //if ((NULL != NewLoadContext->FilePathList) && (TRUE == IsShellNodeDevicePath(NewLoadContext->FilePathList))) {\r
-    //  NewLoadContext->Deleted = FALSE;\r
-    //  CallbackData->BmmFakeNvData.OptionDel[Index] = FALSE;\r
-\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
-        NewMenuEntry->DisplayStringToken,\r
-        NewMenuEntry->HelpStringToken,\r
-        EFI_IFR_FLAG_CALLBACK,\r
-        0,\r
-        NULL\r
-        );\r
-    //} else {\r
-    //    continue;\r
-    //}\r
-  }\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Create a lit of driver option from global DriverMenu.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateDrvAddHandlePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        Index;\r
-\r
-  CallbackData->BmmAskSaveOrNot = FALSE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);\r
-\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
-      );\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Create a lit of driver option from global DriverOptionMenu. It\r
-  allow user to delete the driver option.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateDrvDelPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  UINT16          Index;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);\r
-  \r
-  ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionDel) / sizeof (CallbackData->BmmFakeNvData.DriverOptionDel[0])));\r
-  for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {\r
-    NewMenuEntry            = BOpt_GetMenuEntry (&DriverOptionMenu, Index);\r
-\r
-    NewLoadContext          = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-    NewLoadContext->Deleted = FALSE;\r
-\r
-    if (CallbackData->BmmFakeNvData.DriverOptionDel[Index] && !CallbackData->BmmFakeNvData.DriverOptionDelMark[Index]) {\r
-      //\r
-      // CallbackData->BmmFakeNvData.BootOptionDel[Index] == TRUE means browser knows this boot option is selected\r
-      // CallbackData->BmmFakeNvData.BootOptionDelMark[Index] = FALSE means BDS knows the selected boot option has\r
-      // deleted, browser maintains old useless info. So clear this info here, and later update this info to browser\r
-      // through HiiSetBrowserData function.\r
-      //\r
-      CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;\r
-    }\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
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      EFI_IFR_FLAG_CALLBACK,\r
-      0,\r
-      NULL\r
-      );\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Prepare the page to allow user to add description for \r
-  a Driver Option.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateDriverAddHandleDescPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-\r
-  CallbackData->BmmFakeNvData.DriverAddActive          = 0x01;\r
-  CallbackData->BmmFakeNvData.DriverAddForceReconnect  = 0x00;\r
-  CallbackData->BmmAskSaveOrNot                        = TRUE;\r
-  NewMenuEntry = CallbackData->MenuEntry;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  HiiCreateSubTitleOpCode (\r
-    mStartOpCodeHandle,\r
-    NewMenuEntry->DisplayStringToken,\r
-    0,\r
-    0,\r
-    0\r
-    );\r
-\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
-    STRING_TOKEN (STR_LOAD_OPTION_DESC),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    0,\r
-    0,\r
-    6,\r
-    75,\r
-    NULL\r
-    );\r
-\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
-    STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
-    STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
-    0,\r
-    0,\r
-    NULL\r
-    );\r
-\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
-    STRING_TOKEN (STR_OPTIONAL_DATA),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    0,\r
-    0,\r
-    6,\r
-    75,\r
-    NULL\r
-    );\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Update console page.\r
-\r
-  @param UpdatePageId    The form ID to be updated.\r
-  @param ConsoleMenu     The console menu list.\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateConsolePage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BM_MENU_OPTION                   *ConsoleMenu,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  BM_CONSOLE_CONTEXT  *NewConsoleContext;\r
-  BM_TERMINAL_CONTEXT *NewTerminalContext;\r
-  UINT16              Index;\r
-  UINT16              Index2;\r
-  UINT8               CheckFlags;\r
-  UINT8               *ConsoleCheck;\r
-  UINT8               *OldConsoleCheck;\r
-  UINTN               ConsoleCheckSize;\r
-  EFI_QUESTION_ID     QuestionIdBase;\r
-  UINT16              VariableOffsetBase;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  ConsoleCheck       = NULL;\r
-  OldConsoleCheck    = NULL;\r
-  QuestionIdBase     = 0;\r
-  VariableOffsetBase = 0;\r
-  ConsoleCheckSize   = 0;\r
-\r
-  switch (UpdatePageId) {\r
-  case FORM_CON_IN_ID:\r
-    ConsoleCheck       = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];\r
-    OldConsoleCheck    = &CallbackData->BmmOldFakeNVData.ConsoleInCheck[0];\r
-    ConsoleCheckSize   = sizeof (CallbackData->BmmFakeNvData.ConsoleInCheck);\r
-    QuestionIdBase     = CON_IN_DEVICE_QUESTION_ID;\r
-    VariableOffsetBase = CON_IN_DEVICE_VAR_OFFSET;\r
-    break;\r
-\r
-  case FORM_CON_OUT_ID:\r
-    ConsoleCheck       = &CallbackData->BmmFakeNvData.ConsoleOutCheck[0];\r
-    OldConsoleCheck    = &CallbackData->BmmOldFakeNVData.ConsoleOutCheck[0];\r
-    ConsoleCheckSize   = sizeof (CallbackData->BmmFakeNvData.ConsoleOutCheck);\r
-    QuestionIdBase     = CON_OUT_DEVICE_QUESTION_ID;\r
-    VariableOffsetBase = CON_OUT_DEVICE_VAR_OFFSET;\r
-    break;\r
-\r
-  case FORM_CON_ERR_ID:\r
-    ConsoleCheck       = &CallbackData->BmmFakeNvData.ConsoleErrCheck[0];\r
-    OldConsoleCheck    = &CallbackData->BmmOldFakeNVData.ConsoleErrCheck[0];\r
-    ConsoleCheckSize   = sizeof (CallbackData->BmmFakeNvData.ConsoleErrCheck);\r
-    QuestionIdBase     = CON_ERR_DEVICE_QUESTION_ID;\r
-    VariableOffsetBase = CON_ERR_DEVICE_VAR_OFFSET;\r
-    break;\r
-  }\r
-  ASSERT (ConsoleCheck != NULL);\r
-\r
-  for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \\r
-       (Index < MAX_MENU_NUMBER)) ; Index++) {\r
-    CheckFlags = 0;\r
-    NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
-    NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    if (NewConsoleContext->IsActive) {\r
-      CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
-      ConsoleCheck[Index] = TRUE;\r
-    } else {\r
-      ConsoleCheck[Index] = FALSE;\r
-    }\r
-    HiiCreateCheckBoxOpCode (\r
-      mStartOpCodeHandle,\r
-      (EFI_QUESTION_ID) (QuestionIdBase + Index),\r
-      VARSTORE_ID_BOOT_MAINT,\r
-      (UINT16) (VariableOffsetBase + Index),\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      0,\r
-      CheckFlags,\r
-      NULL\r
-      );\r
-  }\r
-\r
-  for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \\r
-       (Index2 < MAX_MENU_NUMBER)); Index2++) {\r
-    CheckFlags          = 0;\r
-    NewMenuEntry        = BOpt_GetMenuEntry (&TerminalMenu, Index2);\r
-    NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-    ASSERT (Index < MAX_MENU_NUMBER);\r
-    if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) ||\r
-        ((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) ||\r
-        ((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))\r
-        ) {\r
-      CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
-      ConsoleCheck[Index] = TRUE;\r
-    } else {\r
-      ConsoleCheck[Index] = FALSE;\r
-    }\r
-    HiiCreateCheckBoxOpCode (\r
-      mStartOpCodeHandle,\r
-      (EFI_QUESTION_ID) (QuestionIdBase + Index),\r
-      VARSTORE_ID_BOOT_MAINT,\r
-      (UINT16) (VariableOffsetBase + Index),\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      0,\r
-      CheckFlags,\r
-      NULL\r
-      );\r
-\r
-    Index++;\r
-  }\r
-\r
-  CopyMem (OldConsoleCheck, ConsoleCheck, ConsoleCheckSize);\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Update the page's NV Map if user has changed the order\r
-  a list. This list can be Boot Order or Driver Order.\r
-\r
-  @param UpdatePageId    The form ID to be updated.\r
-  @param OptionMenu      The new list.\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateOrderPage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BM_MENU_OPTION                   *OptionMenu,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY     *NewMenuEntry;\r
-  UINT16            Index;\r
-  UINT16            OptionIndex;\r
-  VOID              *OptionsOpCodeHandle;\r
-  BM_LOAD_CONTEXT   *NewLoadContext;\r
-  BOOLEAN           BootOptionFound;\r
-  UINT32            *OptionOrder;\r
-  EFI_QUESTION_ID   QuestionId;\r
-  UINT16            VarOffset;\r
-\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
-  \r
-  OptionOrder = NULL;\r
-  QuestionId = 0;\r
-  VarOffset = 0;\r
-  switch (UpdatePageId) { \r
-  \r
-  case FORM_BOOT_CHG_ID:\r
-    GetBootOrder (CallbackData);\r
-    OptionOrder = CallbackData->BmmFakeNvData.BootOptionOrder;\r
-    QuestionId = BOOT_OPTION_ORDER_QUESTION_ID;\r
-    VarOffset = BOOT_OPTION_ORDER_VAR_OFFSET;\r
-    break;\r
-    \r
-  case FORM_DRV_CHG_ID:\r
-    GetDriverOrder (CallbackData);\r
-    OptionOrder = CallbackData->BmmFakeNvData.DriverOptionOrder;\r
-    QuestionId = DRIVER_OPTION_ORDER_QUESTION_ID;\r
-    VarOffset = DRIVER_OPTION_ORDER_VAR_OFFSET;\r
-    break;\r
-  }  \r
-  ASSERT (OptionOrder != NULL);   \r
-  \r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-  \r
-  NewMenuEntry = NULL;\r
-  for (OptionIndex = 0; (OptionOrder[OptionIndex] != 0 && OptionIndex < MAX_MENU_NUMBER); OptionIndex++) {\r
-    BootOptionFound = FALSE;\r
-    for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-      NewMenuEntry   = BOpt_GetMenuEntry (OptionMenu, Index);\r
-      NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-      if ((UINT32) (NewMenuEntry->OptionNumber + 1) == OptionOrder[OptionIndex]) {\r
-        BootOptionFound = TRUE;\r
-        break;\r
-      }\r
-    }\r
-    if (BootOptionFound) {\r
-      HiiCreateOneOfOptionOpCode (\r
-        OptionsOpCodeHandle,\r
-        NewMenuEntry->DisplayStringToken,\r
-        0,\r
-        EFI_IFR_TYPE_NUM_SIZE_32,\r
-        OptionOrder[OptionIndex]\r
-        );\r
-    }\r
-  }\r
-  \r
-  if (OptionMenu->MenuNumber > 0) {\r
-    HiiCreateOrderedListOpCode (                   \r
-      mStartOpCodeHandle,                          // Container for dynamic created opcodes     \r
-      QuestionId,                                  // Question ID                               \r
-      VARSTORE_ID_BOOT_MAINT,                      // VarStore ID                               \r
-      VarOffset,                                   // 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_TYPE_NUM_SIZE_32,                    // Data type of Question value               \r
-      100,                                         // Maximum container                         \r
-      OptionsOpCodeHandle,                         // Option Opcode list                        \r
-      NULL                                         // Default Opcode is NULL                    \r
-      );\r
-  }\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-  UpdatePageEnd (CallbackData);\r
-\r
-}\r
-\r
-/**\r
-  Create the dynamic page to allow user to set\r
-  the "BootNext" value.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateBootNextPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  UINTN           NumberOfOptions;\r
-  UINT16          Index;\r
-  VOID            *OptionsOpCodeHandle;\r
-\r
-  NumberOfOptions               = BootOptionMenu.MenuNumber;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
-\r
-  if (NumberOfOptions > 0) {\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
-        HiiCreateOneOfOptionOpCode (\r
-          OptionsOpCodeHandle,\r
-          NewMenuEntry->DisplayStringToken,\r
-          EFI_IFR_OPTION_DEFAULT,\r
-          EFI_IFR_TYPE_NUM_SIZE_16,\r
-          Index\r
-          );\r
-        CallbackData->BmmFakeNvData.BootNext = Index;\r
-      } else {\r
-        HiiCreateOneOfOptionOpCode (\r
-          OptionsOpCodeHandle,\r
-          NewMenuEntry->DisplayStringToken,\r
-          0,\r
-          EFI_IFR_TYPE_NUM_SIZE_16,\r
-          Index\r
-          );\r
-      }\r
-    }\r
-\r
-    if (CallbackData->BmmFakeNvData.BootNext == Index) {\r
-      HiiCreateOneOfOptionOpCode (\r
-        OptionsOpCodeHandle,\r
-        STRING_TOKEN (STR_NONE),\r
-        EFI_IFR_OPTION_DEFAULT,\r
-        EFI_IFR_TYPE_NUM_SIZE_16,\r
-        Index\r
-        );\r
-    } else {\r
-      HiiCreateOneOfOptionOpCode (\r
-        OptionsOpCodeHandle,\r
-        STRING_TOKEN (STR_NONE),\r
-        0,\r
-        EFI_IFR_TYPE_NUM_SIZE_16,\r
-        Index\r
-        );\r
-    }      \r
-\r
-    HiiCreateOneOfOpCode (\r
-      mStartOpCodeHandle,\r
-      (EFI_QUESTION_ID) BOOT_NEXT_QUESTION_ID,\r
-      VARSTORE_ID_BOOT_MAINT,\r
-      BOOT_NEXT_VAR_OFFSET,\r
-      STRING_TOKEN (STR_BOOT_NEXT),\r
-      STRING_TOKEN (STR_BOOT_NEXT_HELP),\r
-      0,\r
-      EFI_IFR_NUMERIC_SIZE_2,\r
-      OptionsOpCodeHandle,\r
-      NULL\r
-      );\r
-\r
-    HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Create the dynamic page to allow user to set the "TimeOut" value.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateTimeOutPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT16  BootTimeOut;\r
-  VOID    *DefaultOpCodeHandle;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  BootTimeOut = PcdGet16 (PcdPlatformBootTimeOut);\r
-\r
-  DefaultOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (DefaultOpCodeHandle != NULL);\r
-  HiiCreateDefaultOpCode (DefaultOpCodeHandle, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_NUM_SIZE_16, 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
-    STRING_TOKEN (STR_NUM_AUTO_BOOT),\r
-    STRING_TOKEN (STR_HLP_AUTO_BOOT),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_2 | EFI_IFR_DISPLAY_UINT_DEC,\r
-    0,\r
-    65535,\r
-    0,\r
-    DefaultOpCodeHandle\r
-    );\r
-  \r
-  HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
-\r
-  CallbackData->BmmFakeNvData.BootTimeOut = BootTimeOut;\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-\r
-/**\r
-  Refresh the text mode page.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateConModePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINTN                         Mode;\r
-  UINTN                         Index;\r
-  UINTN                         Col;\r
-  UINTN                         Row;\r
-  CHAR16                        ModeString[50];\r
-  CHAR16                        *PStr;\r
-  UINTN                         MaxMode;\r
-  UINTN                         ValidMode;\r
-  EFI_STRING_ID                 *ModeToken;\r
-  EFI_STATUS                    Status;\r
-  VOID                          *OptionsOpCodeHandle;\r
-  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL  *ConOut;\r
-\r
-  ConOut    = gST->ConOut;\r
-  Index     = 0;\r
-  ValidMode = 0;\r
-  MaxMode   = (UINTN) (ConOut->Mode->MaxMode);\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  //\r
-  // Check valid mode\r
-  //\r
-  for (Mode = 0; Mode < MaxMode; Mode++) {\r
-    Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-    ValidMode++;\r
-  }\r
-\r
-  if (ValidMode == 0) {\r
-    return;\r
-  }\r
-\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-  ModeToken           = AllocateZeroPool (sizeof (EFI_STRING_ID) * ValidMode);\r
-  ASSERT(ModeToken != NULL);\r
-\r
-  //\r
-  // Determin which mode should be the first entry in menu\r
-  //\r
-  GetConsoleOutMode (CallbackData);\r
-\r
-  //\r
-  // Build text mode options\r
-  //\r
-  for (Mode = 0; Mode < MaxMode; Mode++) {\r
-    Status = ConOut->QueryMode (ConOut, Mode, &Col, &Row);\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-    \r
-    //\r
-    // Build mode string Column x Row\r
-    //\r
-    UnicodeValueToString (ModeString, 0, Col, 0);\r
-    PStr = &ModeString[0];\r
-    StrnCatS (PStr, sizeof (ModeString) / sizeof (ModeString[0]), L" x ", StrLen(L" x ") + 1);\r
-    PStr = PStr + StrLen (PStr);\r
-    UnicodeValueToString (PStr , 0, Row, 0);\r
-\r
-    ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL);\r
-\r
-    if (Mode == CallbackData->BmmFakeNvData.ConsoleOutMode) {\r
-      HiiCreateOneOfOptionOpCode (\r
-        OptionsOpCodeHandle,\r
-        ModeToken[Index],\r
-        EFI_IFR_OPTION_DEFAULT,\r
-        EFI_IFR_TYPE_NUM_SIZE_16,\r
-        (UINT16) Mode\r
-        );\r
-    } else {\r
-      HiiCreateOneOfOptionOpCode (\r
-        OptionsOpCodeHandle,\r
-        ModeToken[Index],\r
-        0,\r
-        EFI_IFR_TYPE_NUM_SIZE_16,\r
-        (UINT16) Mode\r
-        );\r
-    }\r
-    Index++;\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) CON_MODE_QUESTION_ID,\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    CON_MODE_VAR_OFFSET,\r
-    STRING_TOKEN (STR_CON_MODE_SETUP),\r
-    STRING_TOKEN (STR_CON_MODE_SETUP),\r
-    EFI_IFR_FLAG_RESET_REQUIRED,\r
-    EFI_IFR_NUMERIC_SIZE_2,\r
-    OptionsOpCodeHandle,\r
-    NULL\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-  FreePool (ModeToken);\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
- /**\r
-  Create the dynamic page which allows user to set the property such as Baud Rate, Data Bits,\r
-  Parity, Stop Bits, Terminal Type.\r
-\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdateTerminalPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT8               Index;\r
-  UINT8               CheckFlags;\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  VOID                *OptionsOpCodeHandle;\r
-  UINTN               CurrentTerminal;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  CurrentTerminal = CallbackData->CurrentTerminal;\r
-  NewMenuEntry = BOpt_GetMenuEntry (\r
-                  &TerminalMenu,\r
-                  CurrentTerminal\r
-                  );\r
-\r
-  if (NewMenuEntry == NULL) {\r
-    return ;\r
-  }\r
-\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-  for (Index = 0; Index < sizeof (BaudRateList) / sizeof (BaudRateList [0]); Index++) {\r
-    CheckFlags = 0;\r
-    if (BaudRateList[Index].Value == 115200) {\r
-      CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      BaudRateList[Index].StringToken,\r
-      CheckFlags,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      Index\r
-      );\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) (COM_BAUD_RATE_QUESTION_ID + CurrentTerminal),\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    (UINT16) (COM_BAUD_RATE_VAR_OFFSET + CurrentTerminal),\r
-    STRING_TOKEN (STR_COM_BAUD_RATE),\r
-    STRING_TOKEN (STR_COM_BAUD_RATE),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\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
-\r
-    if (DataBitsList[Index].Value == 8) {\r
-      CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
-\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      DataBitsList[Index].StringToken,\r
-      CheckFlags,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      Index\r
-      );\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) (COM_DATA_RATE_QUESTION_ID + CurrentTerminal),\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    (UINT16) (COM_DATA_RATE_VAR_OFFSET + CurrentTerminal),\r
-    STRING_TOKEN (STR_COM_DATA_BITS),\r
-    STRING_TOKEN (STR_COM_DATA_BITS),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\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 (ParityList[Index].Value ==  NoParity) {\r
-      CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
-\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      ParityList[Index].StringToken,\r
-      CheckFlags,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      Index\r
-      );\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) (COM_PARITY_QUESTION_ID + CurrentTerminal),\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    (UINT16) (COM_PARITY_VAR_OFFSET + CurrentTerminal),\r
-    STRING_TOKEN (STR_COM_PARITY),\r
-    STRING_TOKEN (STR_COM_PARITY),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\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 (StopBitsList[Index].Value == OneStopBit) {\r
-      CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
-\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      StopBitsList[Index].StringToken,\r
-      CheckFlags,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      Index\r
-      );\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) (COM_STOP_BITS_QUESTION_ID + CurrentTerminal),\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    (UINT16) (COM_STOP_BITS_VAR_OFFSET + CurrentTerminal),\r
-    STRING_TOKEN (STR_COM_STOP_BITS),\r
-    STRING_TOKEN (STR_COM_STOP_BITS),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    OptionsOpCodeHandle,\r
-    NULL\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-  for (Index = 0; Index < sizeof (TerminalType) / sizeof (TerminalType[0]); Index++) {\r
-    CheckFlags = 0;\r
-    if (Index == 0) {\r
-      CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
-\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      (EFI_STRING_ID) TerminalType[Index],\r
-      CheckFlags,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      Index\r
-      );\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) (COM_TERMINAL_QUESTION_ID + CurrentTerminal),\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    (UINT16) (COM_TERMINAL_VAR_OFFSET + CurrentTerminal),\r
-    STRING_TOKEN (STR_COM_TERMI_TYPE),\r
-    STRING_TOKEN (STR_COM_TERMI_TYPE),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    OptionsOpCodeHandle,\r
-    NULL\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-  for (Index = 0; Index < sizeof (mFlowControlType) / sizeof (mFlowControlType[0]); Index++) {\r
-  CheckFlags = 0;\r
-    if (Index == 0) {\r
-      CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
-    }\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      (EFI_STRING_ID) mFlowControlType[Index],\r
-      CheckFlags,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      mFlowControlValue[Index]\r
-      );\r
-  }\r
-\r
-  HiiCreateOneOfOpCode (\r
-    mStartOpCodeHandle,\r
-    (EFI_QUESTION_ID) (COM_FLOWCONTROL_QUESTION_ID + CurrentTerminal),\r
-    VARSTORE_ID_BOOT_MAINT,\r
-    (UINT16) (COM_FLOWCONTROL_VAR_OFFSET + CurrentTerminal),\r
-    STRING_TOKEN (STR_COM_FLOW_CONTROL),\r
-    STRING_TOKEN (STR_COM_FLOW_CONTROL),\r
-    0,\r
-    EFI_IFR_NUMERIC_SIZE_1,\r
-    OptionsOpCodeHandle,\r
-    NULL\r
-    );\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-  UpdatePageEnd (CallbackData);\r
-}\r
-\r
-/**\r
-  Dispatch the correct update page function to call based on\r
-  the UpdatePageId.\r
-\r
-  @param UpdatePageId    The form ID.\r
-  @param CallbackData    The BMM context data.\r
-\r
-**/\r
-VOID\r
-UpdatePageBody (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  CleanUpPage (UpdatePageId, CallbackData);\r
-  switch (UpdatePageId) {\r
-  case FORM_CON_IN_ID:\r
-    UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_CON_OUT_ID:\r
-    UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_CON_ERR_ID:\r
-    UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_BOOT_CHG_ID:\r
-    UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);\r
-    break;\r
-\r
-  case FORM_DRV_CHG_ID:\r
-    UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);\r
-    break;\r
-\r
-  default:\r
-    break;\r
-  }\r
-}\r
-\r
-/**\r
-  Dispatch the display to the next page based on NewPageId.\r
-\r
-  @param Private         The BMM context data.\r
-  @param NewPageId       The original page ID.\r
-\r
-**/\r
-VOID\r
-UpdatePageId (\r
-  BMM_CALLBACK_DATA              *Private,\r
-  UINT16                         NewPageId\r
-  )\r
-{\r
-  if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {\r
-    //\r
-    // If we select a handle to add driver option, advance to the add handle description page.\r
-    //\r
-    NewPageId = FORM_DRV_ADD_HANDLE_DESC_ID;\r
-  } else if ((NewPageId == KEY_VALUE_SAVE_AND_EXIT) || (NewPageId == KEY_VALUE_NO_SAVE_AND_EXIT)) {\r
-    //\r
-    // Return to main page after "Save Changes" or "Discard Changes".\r
-    //\r
-    NewPageId = FORM_MAIN_ID;\r
-  } else if ((NewPageId >= TERMINAL_OPTION_OFFSET) && (NewPageId < CONSOLE_OPTION_OFFSET)) {\r
-    NewPageId = FORM_CON_COM_SETUP_ID;\r
-  }\r
-\r
-  if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {\r
-    Private->BmmPreviousPageId  = Private->BmmCurrentPageId;\r
-    Private->BmmCurrentPageId   = NewPageId;\r
-  }\r
-}\r