]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
Remove IntelFrameworkModulePkg
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / UpdatePage.c
diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c b/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
deleted file mode 100644 (file)
index e37c2db..0000000
+++ /dev/null
@@ -1,1407 +0,0 @@
-/** @file\r
-Dynamically update the pages.\r
-\r
-Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\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
-    &gBootMaintFormSetGuid,\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
-    &gBootMaintFormSetGuid,\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_STATUS        Status;\r
-  UINTN             ExitDataSize;\r
-  CHAR16            *ExitData;\r
-  BDS_COMMON_OPTION *Option;\r
-\r
-  Option = (BDS_COMMON_OPTION *) AllocatePool (sizeof (BDS_COMMON_OPTION));\r
-  ASSERT (Option != NULL);\r
-  Option->Description     = (CHAR16 *) AllocateCopyPool (StrSize (FileContext->FileName), FileContext->FileName);\r
-  Option->DevicePath      = FileContext->DevicePath;\r
-  Option->LoadOptionsSize = 0;\r
-  Option->LoadOptions     = NULL;\r
-\r
-  //\r
-  // Since current no boot from removable media directly is allowed */\r
-  //\r
-  gST->ConOut->ClearScreen (gST->ConOut);\r
-\r
-  ExitDataSize  = 0;\r
-\r
-  Status        = BdsLibBootViaBootOption (Option, Option->DevicePath, &ExitDataSize, &ExitData);\r
-\r
-  return 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 = FALSE;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\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
-  Create a lit 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
-    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
-  }\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
-\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
-  UINT16              Index;\r
-  UINT8               CheckFlags;\r
-  UINT8               *ConsoleCheck;\r
-  EFI_QUESTION_ID     QuestionIdBase;\r
-  UINT16              VariableOffsetBase;\r
-\r
-  UpdatePageStart (CallbackData);\r
-\r
-  ConsoleCheck       = NULL;\r
-  QuestionIdBase     = 0;\r
-  VariableOffsetBase = 0;\r
-\r
-  switch (UpdatePageId) {\r
-  case FORM_CON_IN_ID:\r
-    ConsoleCheck       = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];\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
-    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
-    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
-    if (UpdatePageId != FORM_CON_ERR_ID) {\r
-      CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
-    }\r
-    NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\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
-  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
-  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
-    //\r
-    // If the BootOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,\r
-    // means all Boot Options has been save in BootOptionMenu, we can get the date from the menu.\r
-    // else means browser maintains some uncommitted date which are not saved in BootOptionMenu,\r
-    // so we should not get the data from BootOptionMenu to show it.\r
-    //\r
-    if (CompareMem (CallbackData->BmmFakeNvData.BootOptionOrder, CallbackData->BmmOldFakeNVData.BootOptionOrder, sizeof (CallbackData->BmmFakeNvData.BootOptionOrder)) == 0) {\r
-      GetBootOrder (CallbackData);\r
-    }\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
-    //\r
-    // If the DriverOptionOrder in the BmmFakeNvData are same with the date in the BmmOldFakeNVData,\r
-    // means all Driver Options has been save in DriverOptionMenu, we can get the DriverOptionOrder from the menu.\r
-    // else means browser maintains some uncommitted date which are not saved in DriverOptionMenu,\r
-    // so we should not get the data from DriverOptionMenu to show it.\r
-    //\r
-    if (CompareMem (CallbackData->BmmFakeNvData.DriverOptionOrder, CallbackData->BmmOldFakeNVData.DriverOptionOrder, sizeof (CallbackData->BmmFakeNvData.DriverOptionOrder)) == 0) {\r
-      GetDriverOrder (CallbackData);\r
-    }\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; (OptionIndex < MAX_MENU_NUMBER && OptionOrder[OptionIndex] != 0); OptionIndex++) {\r
-    BootOptionFound = FALSE;\r
-    for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-      NewMenuEntry   = BOpt_GetMenuEntry (OptionMenu, Index);\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
-  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
-  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
-    UnicodeValueToStringS (ModeString, sizeof (ModeString), 0, Col, 0);\r
-    PStr = &ModeString[0];\r
-    StrCatS (PStr, ARRAY_SIZE (ModeString), L" x ");\r
-    PStr = PStr + StrLen (PStr);\r
-    UnicodeValueToStringS (\r
-      PStr,\r
-      sizeof (ModeString) - ((UINTN)PStr - (UINTN)&ModeString[0]),\r
-      0,\r
-      Row,\r
-      0\r
-      );\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
-  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 < ARRAY_SIZE (DataBitsList); 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 < ARRAY_SIZE (ParityList); 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 < ARRAY_SIZE (StopBitsList); 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 < 4; 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 < ARRAY_SIZE (mFlowControlType); 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
-  Create a dynamic page so that Legacy Device boot order\r
-  can be set for specified device type.\r
-\r
-  @param UpdatePageId    The form ID. It also spefies the legacy device type.\r
-  @param CallbackData    The BMM context data.\r
-\r
-\r
-**/\r
-VOID\r
-UpdateSetLegacyDeviceOrderPage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  LEGACY_DEV_ORDER_ENTRY      *DevOrder;\r
-  BM_MENU_OPTION              *OptionMenu;\r
-  BM_MENU_ENTRY               *NewMenuEntry;\r
-  EFI_STRING_ID               StrRef;\r
-  EFI_STRING_ID               StrRefHelp;\r
-  BBS_TYPE                    BbsType;\r
-  UINTN                       VarSize;\r
-  UINTN                       Pos;\r
-  UINTN                       Bit;\r
-  UINT16                      Index;\r
-  UINT16                      Key;\r
-  CHAR16                      String[100];\r
-  CHAR16                      *TypeStr;\r
-  CHAR16                      *TypeStrHelp;\r
-  UINT16                      VarDevOrder;\r
-  UINT8                       *VarData;\r
-  UINT8                       *LegacyOrder;\r
-  UINT8                       *OldData;\r
-  UINT8                       *DisMap;\r
-  VOID                        *OptionsOpCodeHandle;\r
-\r
-  OptionMenu = NULL;\r
-  Key = 0;\r
-  StrRef = 0;\r
-  StrRefHelp = 0;\r
-  TypeStr = NULL;\r
-  TypeStrHelp = NULL;\r
-  BbsType = BBS_FLOPPY;\r
-  LegacyOrder = NULL;\r
-  OldData = NULL;\r
-  DisMap = NULL;\r
-\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-  UpdatePageStart (CallbackData);\r
-\r
-  DisMap = ZeroMem (CallbackData->BmmOldFakeNVData.DisableMap, sizeof (CallbackData->BmmOldFakeNVData.DisableMap));\r
-\r
-  //\r
-  // Create oneof option list\r
-  //\r
-  switch (UpdatePageId) {\r
-  case FORM_SET_FD_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyFDMenu;\r
-    Key         = (UINT16) LEGACY_FD_QUESTION_ID;\r
-    TypeStr     = STR_FLOPPY;\r
-    TypeStrHelp = STR_FLOPPY_HELP;\r
-    BbsType     = BBS_FLOPPY;\r
-    LegacyOrder = CallbackData->BmmFakeNvData.LegacyFD;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyFD;\r
-    break;\r
-\r
-  case FORM_SET_HD_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyHDMenu;\r
-    Key         = (UINT16) LEGACY_HD_QUESTION_ID;\r
-    TypeStr     = STR_HARDDISK;\r
-    TypeStrHelp = STR_HARDDISK_HELP;\r
-    BbsType     = BBS_HARDDISK;\r
-    LegacyOrder = CallbackData->BmmFakeNvData.LegacyHD;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyHD;\r
-    break;\r
-\r
-  case FORM_SET_CD_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyCDMenu;\r
-    Key         = (UINT16) LEGACY_CD_QUESTION_ID;\r
-    TypeStr     = STR_CDROM;\r
-    TypeStrHelp = STR_CDROM_HELP;\r
-    BbsType     = BBS_CDROM;\r
-    LegacyOrder = CallbackData->BmmFakeNvData.LegacyCD;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyCD;\r
-    break;\r
-\r
-  case FORM_SET_NET_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyNETMenu;\r
-    Key         = (UINT16) LEGACY_NET_QUESTION_ID;\r
-    TypeStr     = STR_NET;\r
-    TypeStrHelp = STR_NET_HELP;\r
-    BbsType     = BBS_EMBED_NETWORK;\r
-    LegacyOrder = CallbackData->BmmFakeNvData.LegacyNET;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyNET;\r
-    break;\r
-\r
-  case FORM_SET_BEV_ORDER_ID:\r
-    OptionMenu  = (BM_MENU_OPTION *) &LegacyBEVMenu;\r
-    Key         = (UINT16) LEGACY_BEV_QUESTION_ID;\r
-    TypeStr     = STR_BEV;\r
-    TypeStrHelp = STR_BEV_HELP;\r
-    BbsType     = BBS_BEV_DEVICE;\r
-    LegacyOrder = CallbackData->BmmFakeNvData.LegacyBEV;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyBEV;\r
-    break;\r
-\r
-  default:\r
-    DEBUG ((EFI_D_ERROR, "Invalid command ID for updating page!\n"));\r
-    return;\r
-  }\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
-\r
-  OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
-  ASSERT (OptionsOpCodeHandle != NULL);\r
-\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    NewMenuEntry                = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    //\r
-    // Create OneOf for each legacy device\r
-    //\r
-    HiiCreateOneOfOptionOpCode (\r
-      OptionsOpCodeHandle,\r
-      NewMenuEntry->DisplayStringToken,\r
-      0,\r
-      EFI_IFR_TYPE_NUM_SIZE_8,\r
-      (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->BbsIndex\r
-      );\r
-  }\r
-\r
-  //\r
-  // Create OneOf for item "Disabled"\r
-  //\r
-  HiiCreateOneOfOptionOpCode (\r
-    OptionsOpCodeHandle,\r
-    STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE),\r
-    0,\r
-    EFI_IFR_TYPE_NUM_SIZE_8,\r
-    0xFF\r
-    );\r
-\r
-  //\r
-  // Get Device Order from variable\r
-  //\r
-  VarData = BdsLibGetVariableAndSize (\r
-              VAR_LEGACY_DEV_ORDER,\r
-              &gEfiLegacyDevOrderVariableGuid,\r
-              &VarSize\r
-              );\r
-\r
-  if (NULL != VarData) {\r
-    DevOrder    = (LEGACY_DEV_ORDER_ENTRY *) VarData;\r
-    while (VarData < VarData + VarSize) {\r
-      if (DevOrder->BbsType == BbsType) {\r
-        break;\r
-      }\r
-\r
-      VarData  = (UINT8 *)((UINTN)VarData + sizeof (BBS_TYPE));\r
-      VarData += *(UINT16 *) VarData;\r
-      DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData;\r
-    }\r
-    //\r
-    // Create oneof tag here for FD/HD/CD #1 #2\r
-    //\r
-    for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-      //\r
-      // Create the string for oneof tag\r
-      //\r
-      UnicodeSPrint (String, sizeof (String), TypeStr, Index);\r
-      StrRef = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
-\r
-      UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
-      StrRefHelp = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
-\r
-      HiiCreateOneOfOpCode (\r
-        mStartOpCodeHandle,\r
-        (EFI_QUESTION_ID) (Key + Index),\r
-        VARSTORE_ID_BOOT_MAINT,\r
-        (UINT16) (Key + Index - CONFIG_OPTION_OFFSET),\r
-        StrRef,\r
-        StrRefHelp,\r
-        EFI_IFR_FLAG_CALLBACK,\r
-        EFI_IFR_NUMERIC_SIZE_1,\r
-        OptionsOpCodeHandle,\r
-        NULL\r
-        );\r
-\r
-      VarDevOrder = *(UINT16 *) ((UINTN) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16));\r
-\r
-      if (0xFF00 == (VarDevOrder & 0xFF00)) {\r
-        LegacyOrder[Index]  = 0xFF;\r
-        Pos                 = (VarDevOrder & 0xFF) / 8;\r
-        Bit                 = 7 - ((VarDevOrder & 0xFF) % 8);\r
-        DisMap[Pos] = (UINT8) (DisMap[Pos] | (UINT8) (1 << Bit));\r
-      } else {\r
-        LegacyOrder[Index] = (UINT8) (VarDevOrder & 0xFF);\r
-      }\r
-    }\r
-  }\r
-\r
-  CopyMem (OldData, LegacyOrder, 100);\r
-\r
-  HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
-\r
-  UpdatePageEnd (CallbackData);\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
-  //\r
-  // For the question don't impact the page update, just ignore it.\r
-  //\r
-  if (((NewPageId >= BOOT_OPTION_DEL_QUESTION_ID) && (NewPageId < BOOT_OPTION_DEL_QUESTION_ID + MAX_MENU_NUMBER)) ||\r
-      ((NewPageId >= DRIVER_OPTION_DEL_QUESTION_ID) && (NewPageId < DRIVER_OPTION_DEL_QUESTION_ID + MAX_MENU_NUMBER))) {\r
-    return;\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