+++ /dev/null
-/** @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