]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c
Retiring the ANT/JAVA build and removing the older EDK II packages that required...
[mirror_edk2.git] / EdkModulePkg / Library / EdkGenericPlatformBdsLib / BootMaint / UpdatePage.c
diff --git a/EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c b/EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c
deleted file mode 100644 (file)
index 05b912c..0000000
+++ /dev/null
@@ -1,1267 +0,0 @@
-/**@file\r
-  Dynamically Update the pages.\r
-  \r
-Copyright (c) 2006 - 2007 Intel Corporation.\r
-All rights reserved. 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 "Bds.h"\r
-#include "BootMaint.h"\r
-\r
-EFI_GUID gTerminalDriverGuid = {\r
-  0x9E863906, 0xA40F, 0x4875, {0x97, 0x7F, 0x5B, 0x93, 0xFF, 0x23, 0x7F, 0xC6}\r
-};\r
-\r
-VOID\r
-RefreshUpdateData (\r
-  IN BOOLEAN                      FormSetUpdate,\r
-  IN EFI_PHYSICAL_ADDRESS         FormCallbackHandle,\r
-  IN BOOLEAN                      FormUpdate,\r
-  IN STRING_REF                   FormTitle,\r
-  IN UINT16                       DataCount\r
-  )\r
-/*++\r
-Routine Description:\r
-  Refresh the global UpdateData structure.\r
-\r
-Arguments:\r
-  FormSetUpdate      - If TRUE, next variable is significant\r
-  FormCallbackHandle - If not 0, will update FormSet with this info\r
-  FormUpdate         - If TRUE, next variable is significant\r
-  FormTitle          - If not 0, will update Form with this info\r
-  DataCount          - The number of Data entries in this structure\r
-\r
-Returns:\r
-  None.\r
---*/\r
-{\r
-  UpdateData->FormSetUpdate = FormSetUpdate;\r
-  if (FormSetUpdate) {\r
-    ASSERT (0 != FormCallbackHandle);\r
-    UpdateData->FormCallbackHandle = FormCallbackHandle;\r
-  }\r
-\r
-  UpdateData->FormUpdate  = FALSE;\r
-  UpdateData->FormTitle   = FormTitle;\r
-  UpdateData->DataCount   = DataCount;\r
-}\r
-\r
-VOID\r
-UpdatePageStart (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN OUT UINT8                        **CurrentLocation\r
-  )\r
-{\r
-  RefreshUpdateData (TRUE, (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackData->BmmCallbackHandle, FALSE, 0, 0);\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
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
-      STRING_TOKEN (STR_FORM_GOTO_MAIN),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      FORM_MAIN_ID,\r
-      *CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-\r
-    *CurrentLocation = *CurrentLocation + ((EFI_IFR_OP_HEADER *) (*CurrentLocation))->Length;\r
-  }\r
-\r
-}\r
-\r
-VOID\r
-UpdatePageEnd (\r
-  IN BMM_CALLBACK_DATA                *CallbackData,\r
-  IN UINT8                            *CurrentLocation\r
-  )\r
-{\r
-  //\r
-  // Create the "Apply changes" and "Discard changes" tags.\r
-  //\r
-  if (CallbackData->BmmAskSaveOrNot) {\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      KEY_VALUE_SAVE_AND_EXIT,\r
-      CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-\r
-    CurrentLocation = CurrentLocation + ((EFI_IFR_OP_HEADER *) CurrentLocation)->Length;\r
-\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      KEY_VALUE_NO_SAVE_AND_EXIT,\r
-      CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-  }\r
-  //\r
-  // Ensure user can return to the main page.\r
-  //\r
-  if (0 == UpdateData->DataCount) {\r
-    CreateGotoOpCode (\r
-      FORM_MAIN_ID,\r
-      STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      KEY_VALUE_NO_SAVE_AND_EXIT,\r
-      CurrentLocation\r
-      );\r
-\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->BmmHiiHandle,\r
-                      CallbackData->BmmCurrentPageId,\r
-                      TRUE,\r
-                      UpdateData\r
-                      );\r
-}\r
-\r
-VOID\r
-CleanUpPage (\r
-  IN EFI_FORM_LABEL                   LabelId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  RefreshUpdateData (FALSE, 0, FALSE, 0, 0xff);\r
-\r
-  //\r
-  // Remove all op-codes from dynamic page\r
-  //\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->BmmHiiHandle,\r
-                      LabelId,\r
-                      FALSE,\r
-                      UpdateData\r
-                      );\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
-  Status                  = gBS->AllocatePool (EfiBootServicesData, sizeof (BDS_COMMON_OPTION), (VOID**) &Option);\r
-  Option->Description     = 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
-VOID\r
-UpdateConCOMPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        Index;\r
-  UINT8         *Location;\r
-  EFI_STATUS    Status;\r
-  VOID         *Interface;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = FALSE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  Status = EfiLibLocateProtocol (&gTerminalDriverGuid, &Interface);\r
-  if (!EFI_ERROR (Status)) {\r
-    for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {\r
-      NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);\r
\r
-      CreateGotoOpCode (\r
-        FORM_CON_COM_SETUP_ID,\r
-        NewMenuEntry->DisplayStringToken,\r
-        STRING_TOKEN (STR_NULL_STRING),\r
-        EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-        (UINT16) (TERMINAL_OPTION_OFFSET + Index),\r
-        Location\r
-        );\r
-      Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      UpdateData->DataCount++;\r
-    }\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\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
-  UINT8           *Location;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
-\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
-    CallbackData->BmmFakeNvData->BootOptionDel[Index] = 0x00;\r
-\r
-    CreateCheckBoxOpCode (\r
-      (UINT16) (BOOT_OPTION_DEL_QUESTION_ID + Index),\r
-      (UINT8) 1,\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      (UINT16) BOOT_OPTION_DEL_QUESTION_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateDrvAddHandlePage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT16        Index;\r
-  UINT8         *Location;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = FALSE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {\r
-    NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);\r
-\r
-    CreateGotoOpCode (\r
-      FORM_DRV_ADD_HANDLE_DESC_ID,\r
-      NewMenuEntry->DisplayStringToken,\r
-      STRING_TOKEN (STR_NULL_STRING),\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      (UINT16) (HANDLE_OPTION_OFFSET + Index),\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\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
-  UINT8           *Location;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);\r
-\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
-    CallbackData->BmmFakeNvData->DriverOptionDel[Index] = 0x00;\r
-\r
-    CreateCheckBoxOpCode (\r
-      (UINT16) (DRIVER_OPTION_DEL_QUESTION_ID + Index),\r
-      (UINT8) 1,\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-      (UINT16) DRIVER_OPTION_DEL_QUESTION_ID,\r
-      Location\r
-      );\r
-\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateDriverAddHandleDescPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_MENU_ENTRY *NewMenuEntry;\r
-  UINT8         *Location;\r
-\r
-  Location  = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmFakeNvData->DriverAddActive          = 0x01;\r
-  CallbackData->BmmFakeNvData->DriverAddForceReconnect  = 0x00;\r
-  CallbackData->BmmAskSaveOrNot                         = TRUE;\r
-  NewMenuEntry = CallbackData->MenuEntry;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  UpdateData->DataCount += (UINT16) 4;\r
-\r
-  CreateSubTitleOpCode (\r
-    NewMenuEntry->DisplayStringToken,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  CreateStringOpCode (\r
-    DRV_ADD_HANDLE_DESC_QUESTION_ID,\r
-    (UINT8) 150,\r
-    STRING_TOKEN (STR_LOAD_OPTION_DESC),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    6,\r
-    75,\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_DRIVER_ADD_DESC_DATA,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  CreateCheckBoxOpCode (\r
-    DRV_ADD_RECON_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
-    STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    DRV_ADD_RECON_QUESTION_ID,\r
-    Location\r
-    );\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  CreateStringOpCode (\r
-    DRIVER_ADD_OPTION_QUESTION_ID,\r
-    (UINT8) 150,\r
-    STRING_TOKEN (STR_OPTIONAL_DATA),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    6,\r
-    75,\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_DRIVER_ADD_OPT_DATA,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdatePageEnd (CallbackData, Location);\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               *Location;\r
-  UINT8               CheckFlags;\r
-  EFI_STATUS          Status;\r
-  VOID               *Interface;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {\r
-    NewMenuEntry      = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
-    NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
-    CheckFlags        = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewConsoleContext->IsActive) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      CallbackData->BmmFakeNvData->ConsoleCheck[Index] = TRUE;\r
-    } else {\r
-      CallbackData->BmmFakeNvData->ConsoleCheck[Index] = FALSE;\r
-    }\r
-\r
-    CreateCheckBoxOpCode (\r
-      (UINT16) (CON_DEVICE_QUESTION_ID + Index),\r
-      (UINT8) 1,\r
-      NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->HelpStringToken,\r
-      CheckFlags,\r
-      (UINT16) (CONSOLE_OPTION_OFFSET + Index),\r
-      Location\r
-      );\r
-    Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    UpdateData->DataCount++;\r
-  }\r
-\r
-  Status = EfiLibLocateProtocol (&gTerminalDriverGuid, &Interface);\r
-  if (!EFI_ERROR (Status)) {\r
-    for (Index2 = 0; Index2 < TerminalMenu.MenuNumber; Index2++) {\r
-      CheckFlags          = EFI_IFR_FLAG_INTERACTIVE;\r
-      NewMenuEntry        = BOpt_GetMenuEntry (&TerminalMenu, Index2);\r
-      NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-      if ((NewTerminalContext->IsConIn && (UpdatePageId == FORM_CON_IN_ID)) ||\r
-          (NewTerminalContext->IsConOut && (UpdatePageId == FORM_CON_OUT_ID)) ||\r
-          (NewTerminalContext->IsStdErr && (UpdatePageId == FORM_CON_ERR_ID))\r
-          ) {\r
-        CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-        CallbackData->BmmFakeNvData->ConsoleCheck[Index] = TRUE;\r
-      } else {\r
-        CallbackData->BmmFakeNvData->ConsoleCheck[Index] = FALSE;\r
-      }\r
-\r
-      CreateCheckBoxOpCode (\r
-        (UINT16) (CON_DEVICE_QUESTION_ID + Index),\r
-        (UINT8) 1,\r
-        NewMenuEntry->DisplayStringToken,\r
-        NewMenuEntry->HelpStringToken,\r
-        CheckFlags,\r
-        (UINT16) (CONSOLE_OPTION_OFFSET + Index),\r
-        Location\r
-        );\r
-      Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      UpdateData->DataCount++;\r
-      Index++;\r
-    }\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\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
-  UINT8         *Location;\r
-  IFR_OPTION    *IfrOptionList;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
-\r
-  ZeroMem (CallbackData->BmmFakeNvData->OptionOrder, 100);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);\r
-  if (NULL == IfrOptionList) {\r
-    return ;\r
-  }\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 = (UINT16) (NewMenuEntry->OptionNumber + 1);\r
-    IfrOptionList[Index].OptionString = NULL;\r
-    CallbackData->BmmFakeNvData->OptionOrder[Index] = (UINT8) (IfrOptionList[Index].Value);\r
-  }\r
-\r
-  if (OptionMenu->MenuNumber > 0) {\r
-    CreateOrderedListOpCode (\r
-      (UINT16) OPTION_ORDER_QUESTION_ID,\r
-      (UINT8) 100,\r
-      STRING_TOKEN (STR_CHANGE_ORDER),\r
-      STRING_TOKEN (STR_CHANGE_ORDER),\r
-      IfrOptionList,\r
-      OptionMenu->MenuNumber,\r
-      Location\r
-      );\r
-\r
-    for (Index = 0; Index < OptionMenu->MenuNumber + 2; Index++) {\r
-      Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    }\r
-\r
-    UpdateData->DataCount = (UINT16) (UpdateData->DataCount + OptionMenu->MenuNumber + 2);\r
-  }\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-\r
-  CopyMem (\r
-    CallbackData->BmmOldFakeNVData.OptionOrder,\r
-    CallbackData->BmmFakeNvData->OptionOrder,\r
-    100\r
-    );\r
-}\r
-\r
-VOID\r
-UpdateBootNextPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT8           *Location;\r
-  BM_MENU_ENTRY   *NewMenuEntry;\r
-  BM_LOAD_CONTEXT *NewLoadContext;\r
-  IFR_OPTION      *IfrOptionList;\r
-  UINTN           NumberOfOptions;\r
-  UINT16          Index;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  IfrOptionList                 = NULL;\r
-  NumberOfOptions               = BootOptionMenu.MenuNumber;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
-\r
-  if (NumberOfOptions > 0) {\r
-    UpdateData->DataCount = (UINT8) (UpdateData->DataCount + NumberOfOptions);\r
-    IfrOptionList = AllocateZeroPool ((NumberOfOptions + 1) * sizeof (IFR_OPTION));\r
-\r
-    ASSERT (IfrOptionList);\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
-      if (NewLoadContext->IsBootNext) {\r
-        IfrOptionList[Index].Flags            = EFI_IFR_FLAG_DEFAULT | EFI_IFR_FLAG_INTERACTIVE;\r
-        CallbackData->BmmFakeNvData->BootNext = Index;\r
-      } else {\r
-        IfrOptionList[Index].Flags = EFI_IFR_FLAG_INTERACTIVE;\r
-      }\r
-\r
-      IfrOptionList[Index].Key          = (UINT16) KEY_VALUE_MAIN_BOOT_NEXT;\r
-      IfrOptionList[Index].Value        = Index;\r
-      IfrOptionList[Index].StringToken  = NewMenuEntry->DisplayStringToken;\r
-      IfrOptionList[Index].OptionString = NULL;\r
-    }\r
-\r
-    IfrOptionList[Index].Key          = (UINT16) KEY_VALUE_MAIN_BOOT_NEXT;\r
-    IfrOptionList[Index].Value        = Index;\r
-    IfrOptionList[Index].StringToken  = STRING_TOKEN (STR_NONE);\r
-    IfrOptionList[Index].Flags        = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (CallbackData->BmmFakeNvData->BootNext == Index) {\r
-      IfrOptionList[Index].Flags |= EFI_IFR_FLAG_DEFAULT;\r
-    }\r
-\r
-    IfrOptionList[Index].OptionString = NULL;\r
-\r
-    CreateOneOfOpCode (\r
-      (UINT16) BOOT_NEXT_QUESTION_ID,\r
-      (UINT8) 2,\r
-      STRING_TOKEN (STR_BOOT_NEXT),\r
-      STRING_TOKEN (STR_BOOT_NEXT_HELP),\r
-      IfrOptionList,\r
-      (UINTN) (NumberOfOptions + 1),\r
-      Location\r
-      );\r
-    Location  = Location + (NumberOfOptions + 2) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-    Location  = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-    UpdateData->DataCount += 3;\r
-    SafeFreePool (IfrOptionList);\r
-    IfrOptionList = NULL;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateTimeOutPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT8   *Location;\r
-  UINT16  BootTimeOut;\r
-\r
-  Location                      = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  BootTimeOut = BdsLibGetTimeout ();\r
-\r
-  CreateNumericOpCode (\r
-    (UINT16) BOOT_TIME_OUT_QUESTION_ID,\r
-    (UINT8) 2,\r
-    STRING_TOKEN (STR_NUM_AUTO_BOOT),\r
-    STRING_TOKEN (STR_HLP_AUTO_BOOT),\r
-    0,\r
-    65535,\r
-    0,\r
-    10,\r
-    0,\r
-    0,\r
-    Location\r
-    );\r
-\r
-  CallbackData->BmmFakeNvData->BootTimeOut = (UINT16) BootTimeOut;\r
-  UpdateData->DataCount++;\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdateTerminalPage (\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  UINT16              Index;\r
-  UINT8               *Location;\r
-  UINT8               CheckFlags;\r
-  IFR_OPTION          *IfrOptionList;\r
-  BM_MENU_ENTRY       *NewMenuEntry;\r
-  BM_TERMINAL_CONTEXT *NewTerminalContext;\r
-\r
-  ZeroMem (UpdateData, UPDATE_DATA_SIZE);\r
-  Location = (UINT8 *) &UpdateData->Data;\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  NewMenuEntry = BOpt_GetMenuEntry (\r
-                  &TerminalMenu,\r
-                  CallbackData->CurrentTerminal\r
-                  );\r
-\r
-  if (!NewMenuEntry) {\r
-    return ;\r
-  }\r
-\r
-  NewTerminalContext  = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
-  IfrOptionList       = AllocateZeroPool (sizeof (IFR_OPTION) * 19);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 19; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->BaudRate == (UINT64) (BaudRateList[Index].Value)) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      NewTerminalContext->BaudRateIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMBaudRate  = NewTerminalContext->BaudRateIndex;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_BAUD_RATE;\r
-    IfrOptionList[Index].StringToken  = BaudRateList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_BAUD_RATE_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_BAUD_RATE),\r
-    STRING_TOKEN (STR_COM_BAUD_RATE),\r
-    IfrOptionList,\r
-    19,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 4);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 4; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-\r
-    if (NewTerminalContext->DataBits == DataBitsList[Index].Value) {\r
-      NewTerminalContext->DataBitsIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMDataRate  = NewTerminalContext->DataBitsIndex;\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_DATA_BITS;\r
-    IfrOptionList[Index].StringToken  = DataBitsList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_DATA_RATE_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_DATA_BITS),\r
-    STRING_TOKEN (STR_COM_DATA_BITS),\r
-    IfrOptionList,\r
-    4,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 5);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 5; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->Parity == ParityList[Index].Value) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      NewTerminalContext->ParityIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMParity  = NewTerminalContext->ParityIndex;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_PARITY;\r
-    IfrOptionList[Index].StringToken  = ParityList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_PARITY_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_PARITY),\r
-    STRING_TOKEN (STR_COM_PARITY),\r
-    IfrOptionList,\r
-    5,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 3);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 3; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      NewTerminalContext->StopBitsIndex         = (UINT8) Index;\r
-      CallbackData->BmmFakeNvData->COMStopBits  = NewTerminalContext->StopBitsIndex;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_STOP_BITS;\r
-    IfrOptionList[Index].StringToken  = StopBitsList[Index].StringToken;\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_STOP_BITS_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_STOP_BITS),\r
-    STRING_TOKEN (STR_COM_STOP_BITS),\r
-    IfrOptionList,\r
-    3,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 4);\r
-  if (!IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < 4; Index++) {\r
-    CheckFlags = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (NewTerminalContext->TerminalType == Index) {\r
-      CheckFlags |= EFI_IFR_FLAG_DEFAULT;\r
-      CallbackData->BmmFakeNvData->COMTerminalType = NewTerminalContext->TerminalType;\r
-    }\r
-\r
-    IfrOptionList[Index].Flags        = CheckFlags;\r
-    IfrOptionList[Index].Key          = KEY_VALUE_COM_SET_TERMI_TYPE;\r
-    IfrOptionList[Index].StringToken  = (STRING_REF) TerminalType[Index];\r
-    IfrOptionList[Index].Value        = Index;\r
-  }\r
-\r
-  CreateOneOfOpCode (\r
-    (UINT16) COM_TERMINAL_QUESTION_ID,\r
-    (UINT8) 1,\r
-    STRING_TOKEN (STR_COM_TERMI_TYPE),\r
-    STRING_TOKEN (STR_COM_TERMI_TYPE),\r
-    IfrOptionList,\r
-    4,\r
-    Location\r
-    );\r
-\r
-  Location              = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);\r
-  UpdateData->DataCount += 2;\r
-\r
-  SafeFreePool (IfrOptionList);\r
-\r
-  CreateGotoOpCode (\r
-    FORM_MAIN_ID,\r
-    STRING_TOKEN (STR_SAVE_AND_EXIT),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_SAVE_AND_EXIT,\r
-    Location\r
-    );\r
-\r
-  Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-  UpdateData->DataCount++;\r
-\r
-  CreateGotoOpCode (\r
-    FORM_MAIN_ID,\r
-    STRING_TOKEN (STR_NO_SAVE_AND_EXIT),\r
-    STRING_TOKEN (STR_NULL_STRING),\r
-    EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,\r
-    KEY_VALUE_NO_SAVE_AND_EXIT,\r
-    Location\r
-    );\r
-\r
-  UpdateData->DataCount++;\r
-\r
-  CallbackData->Hii->UpdateForm (\r
-                      CallbackData->Hii,\r
-                      CallbackData->BmmHiiHandle,\r
-                      (EFI_FORM_LABEL) FORM_CON_COM_SETUP_ID,\r
-                      TRUE,\r
-                      UpdateData\r
-                      );\r
-\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
-VOID *\r
-GetLegacyBootOptionVar (\r
-  IN  UINTN                            DeviceType,\r
-  OUT UINTN                            *OptionIndex,\r
-  OUT UINTN                            *OptionSize\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  VOID                      *OptionBuffer;\r
-  UINTN                     OrderSize;\r
-  UINTN                     Index;\r
-  UINT32                    Attribute;\r
-  UINT16                    *OrderBuffer;\r
-  CHAR16                    StrTemp[100];\r
-  UINT16                    FilePathSize;\r
-  CHAR16                    *Description;\r
-  UINT8                     *Ptr;\r
-  UINT8                     *OptionalData;\r
-\r
-  //\r
-  // Get Boot Option number from the size of BootOrder\r
-  //\r
-  OrderBuffer = BdsLibGetVariableAndSize (\r
-                  L"BootOrder",\r
-                  &gEfiGlobalVariableGuid,\r
-                  &OrderSize\r
-                  );\r
-\r
-  for (Index = 0; Index < OrderSize / sizeof (UINT16); Index++) {\r
-    UnicodeSPrint (StrTemp, 100, L"Boot%04x", OrderBuffer[Index]);\r
-    OptionBuffer = BdsLibGetVariableAndSize (\r
-                    StrTemp,\r
-                    &gEfiGlobalVariableGuid,\r
-                    OptionSize\r
-                    );\r
-    if (NULL == OptionBuffer) {\r
-      continue;\r
-    }\r
-\r
-    Ptr       = (UINT8 *) OptionBuffer;\r
-    Attribute = *(UINT32 *) Ptr;\r
-    Ptr += sizeof (UINT32);\r
-\r
-    FilePathSize = *(UINT16 *) Ptr;\r
-    Ptr += sizeof (UINT16);\r
-\r
-    Description = (CHAR16 *) Ptr;\r
-    Ptr += StrSize ((CHAR16 *) Ptr);\r
-\r
-    //\r
-    // Now Ptr point to Device Path\r
-    //\r
-    DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
-    Ptr += FilePathSize;\r
-\r
-    //\r
-    // Now Ptr point to Optional Data\r
-    //\r
-    OptionalData = Ptr;\r
-\r
-    if ((DeviceType == ((BBS_TABLE *) OptionalData)->DeviceType) &&\r
-        (BBS_DEVICE_PATH == DevicePath->Type) &&\r
-        (BBS_BBS_DP == DevicePath->SubType)\r
-        ) {\r
-      *OptionIndex = OrderBuffer[Index];\r
-      SafeFreePool (OrderBuffer);\r
-      return OptionBuffer;\r
-    } else {\r
-      SafeFreePool (OptionBuffer);\r
-    }\r
-  }\r
-\r
-  SafeFreePool (OrderBuffer);\r
-  return NULL;\r
-}\r
-\r
-VOID\r
-UpdateSetLegacyDeviceOrderPage (\r
-  IN UINT16                           UpdatePageId,\r
-  IN BMM_CALLBACK_DATA                *CallbackData\r
-  )\r
-{\r
-  BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;\r
-  BM_MENU_OPTION              *OptionMenu;\r
-  BM_MENU_ENTRY               *NewMenuEntry;\r
-  IFR_OPTION                  *IfrOptionList;\r
-  STRING_REF                  StrRef;\r
-  STRING_REF                  StrRefHelp;\r
-  BBS_TYPE                    BbsType;\r
-  UINTN                       VarSize;\r
-  UINTN                       Pos;\r
-  UINTN                       Bit;\r
-  UINT16                      Index;\r
-  UINT16                      Index2;\r
-  UINT16                      Key;\r
-  CHAR16                      String[100];\r
-  CHAR16                      *TypeStr;\r
-  CHAR16                      *TypeStrHelp;\r
-  UINT16                      VarDevOrder;\r
-  UINT8                       *Location;\r
-  UINT8                       *VarData;\r
-  UINT8                       *OriginalPtr;\r
-  UINT8                       *LegacyOrder;\r
-  UINT8                       *OldData;\r
-  UINT8                       *DisMap;\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
-  Location = (UINT8 *) &UpdateData->Data;\r
-  CallbackData->BmmAskSaveOrNot = TRUE;\r
-\r
-  UpdatePageStart (CallbackData, &Location);\r
-\r
-  DisMap = CallbackData->BmmOldFakeNVData.DisableMap;\r
-\r
-  SetMem (DisMap, 32, 0);\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         = LEGACY_FD_QUESTION_ID;\r
-    TypeStr     = StrFloppy;\r
-    TypeStrHelp = StrFloppyHelp;\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         = LEGACY_HD_QUESTION_ID;\r
-    TypeStr     = StrHardDisk;\r
-    TypeStrHelp = StrHardDiskHelp;\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         = LEGACY_CD_QUESTION_ID;\r
-    TypeStr     = StrCDROM;\r
-    TypeStrHelp = StrCDROMHelp;\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         = LEGACY_NET_QUESTION_ID;\r
-    TypeStr     = StrNET;\r
-    TypeStrHelp = StrNETHelp;\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         = LEGACY_BEV_QUESTION_ID;\r
-    TypeStr     = StrBEV;\r
-    TypeStrHelp = StrBEVHelp;\r
-    BbsType     = BBS_BEV_DEVICE;\r
-    LegacyOrder = CallbackData->BmmFakeNvData->LegacyBEV;\r
-    OldData     = CallbackData->BmmOldFakeNVData.LegacyBEV;\r
-    break;\r
-\r
-  }\r
-\r
-  CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);\r
-\r
-  IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * (OptionMenu->MenuNumber + 1));\r
-  if (NULL == IfrOptionList) {\r
-    return ;\r
-  }\r
-\r
-  for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-    NewMenuEntry                = BOpt_GetMenuEntry (OptionMenu, Index);\r
-    IfrOptionList[Index].Flags  = EFI_IFR_FLAG_INTERACTIVE;\r
-    if (0 == Index) {\r
-      IfrOptionList[Index].Flags |= EFI_IFR_FLAG_DEFAULT;\r
-    }\r
-\r
-    IfrOptionList[Index].Key          = Key;\r
-    IfrOptionList[Index].StringToken  = NewMenuEntry->DisplayStringToken;\r
-    IfrOptionList[Index].Value        = (UINT16) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index;\r
-    IfrOptionList[Index].OptionString = NULL;\r
-  }\r
-  //\r
-  // for item "Disabled"\r
-  //\r
-  IfrOptionList[Index].Flags        = EFI_IFR_FLAG_INTERACTIVE;\r
-  IfrOptionList[Index].Key          = Key;\r
-  IfrOptionList[Index].StringToken  = STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE);\r
-  IfrOptionList[Index].Value        = 0xFF;\r
-  IfrOptionList[Index].OptionString = NULL;\r
-\r
-  //\r
-  // Get Device Order from variable\r
-  //\r
-  VarData = BdsLibGetVariableAndSize (\r
-              VarLegacyDevOrder,\r
-              &EfiLegacyDevOrderGuid,\r
-              &VarSize\r
-              );\r
-\r
-  if (NULL != VarData) {\r
-    OriginalPtr = VarData;\r
-    DevOrder    = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
-    while (VarData < VarData + VarSize) {\r
-      if (DevOrder->BbsType == BbsType) {\r
-        break;\r
-      }\r
-\r
-      VarData += sizeof (BBS_TYPE);\r
-      VarData += *(UINT16 *) VarData;\r
-      DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;\r
-    }\r
-    //\r
-    // Create oneof tag here for FD/HD/CD #1 #2\r
-    //\r
-    for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
-      for (Index2 = 0; Index2 <= OptionMenu->MenuNumber; Index2++) {\r
-        IfrOptionList[Index2].Key = (UINT16) (Key + Index);\r
-      }\r
-      //\r
-      // Create the string for oneof tag\r
-      //\r
-      UnicodeSPrint (String, sizeof (String), TypeStr, Index);\r
-      StrRef = 0;\r
-      CallbackData->Hii->NewString (\r
-                          CallbackData->Hii,\r
-                          NULL,\r
-                          CallbackData->BmmHiiHandle,\r
-                          &StrRef,\r
-                          String\r
-                          );\r
-\r
-      UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
-      StrRefHelp = 0;\r
-      CallbackData->Hii->NewString (\r
-                          CallbackData->Hii,\r
-                          NULL,\r
-                          CallbackData->BmmHiiHandle,\r
-                          &StrRefHelp,\r
-                          String\r
-                          );\r
-\r
-      CreateOneOfOpCode (\r
-        (UINT16) (Key + Index),\r
-        (UINT8) 1,\r
-        StrRef,\r
-        StrRefHelp,\r
-        IfrOptionList,\r
-        OptionMenu->MenuNumber + 1,\r
-        Location\r
-        );\r
-\r
-      VarDevOrder = *(UINT16 *) ((UINT8 *) 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) (1 << Bit);\r
-      } else {\r
-        LegacyOrder[Index] = (UINT8) (VarDevOrder & 0xFF);\r
-      }\r
-\r
-      Location              = Location + (OptionMenu->MenuNumber + 2) * ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      Location              = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;\r
-      UpdateData->DataCount = (UINT16) (UpdateData->DataCount + (OptionMenu->MenuNumber + 3));\r
-    }\r
-  }\r
-\r
-  CopyMem (\r
-    OldData,\r
-    LegacyOrder,\r
-    100\r
-    );\r
-\r
-  if (IfrOptionList != NULL) {\r
-    SafeFreePool (IfrOptionList);\r
-    IfrOptionList = NULL;\r
-  }\r
-\r
-  UpdatePageEnd (CallbackData, Location);\r
-}\r
-\r
-VOID\r
-UpdatePageId (\r
-  BMM_CALLBACK_DATA              *Private,\r
-  UINT16                         NewPageId\r
-  )\r
-{\r
-  UINT16  FileOptionMask;\r
-\r
-  FileOptionMask = (UINT16) (FILE_OPTION_MASK & NewPageId);\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
-  }\r
-\r
-  if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {\r
-    Private->BmmPreviousPageId  = Private->BmmCurrentPageId;\r
-    Private->BmmCurrentPageId   = NewPageId;\r
-  }\r
-}\r