summaryrefslogtreecommitdiff
path: root/EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c
diff options
context:
space:
mode:
Diffstat (limited to 'EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c')
-rw-r--r--EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c1267
1 files changed, 0 insertions, 1267 deletions
diff --git a/EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c b/EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c
deleted file mode 100644
index 05b912c300..0000000000
--- a/EdkModulePkg/Library/EdkGenericPlatformBdsLib/BootMaint/UpdatePage.c
+++ /dev/null
@@ -1,1267 +0,0 @@
-/**@file
- Dynamically Update the pages.
-
-Copyright (c) 2006 - 2007 Intel Corporation.
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-**/
-
-#include "Bds.h"
-#include "BootMaint.h"
-
-EFI_GUID gTerminalDriverGuid = {
- 0x9E863906, 0xA40F, 0x4875, {0x97, 0x7F, 0x5B, 0x93, 0xFF, 0x23, 0x7F, 0xC6}
-};
-
-VOID
-RefreshUpdateData (
- IN BOOLEAN FormSetUpdate,
- IN EFI_PHYSICAL_ADDRESS FormCallbackHandle,
- IN BOOLEAN FormUpdate,
- IN STRING_REF FormTitle,
- IN UINT16 DataCount
- )
-/*++
-Routine Description:
- Refresh the global UpdateData structure.
-
-Arguments:
- FormSetUpdate - If TRUE, next variable is significant
- FormCallbackHandle - If not 0, will update FormSet with this info
- FormUpdate - If TRUE, next variable is significant
- FormTitle - If not 0, will update Form with this info
- DataCount - The number of Data entries in this structure
-
-Returns:
- None.
---*/
-{
- UpdateData->FormSetUpdate = FormSetUpdate;
- if (FormSetUpdate) {
- ASSERT (0 != FormCallbackHandle);
- UpdateData->FormCallbackHandle = FormCallbackHandle;
- }
-
- UpdateData->FormUpdate = FALSE;
- UpdateData->FormTitle = FormTitle;
- UpdateData->DataCount = DataCount;
-}
-
-VOID
-UpdatePageStart (
- IN BMM_CALLBACK_DATA *CallbackData,
- IN OUT UINT8 **CurrentLocation
- )
-{
- RefreshUpdateData (TRUE, (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackData->BmmCallbackHandle, FALSE, 0, 0);
-
- if (!(CallbackData->BmmAskSaveOrNot)) {
- //
- // Add a "Go back to main page" tag in front of the form when there are no
- // "Apply changes" and "Discard changes" tags in the end of the form.
- //
- CreateGotoOpCode (
- FORM_MAIN_ID,
- STRING_TOKEN (STR_FORM_GOTO_MAIN),
- STRING_TOKEN (STR_FORM_GOTO_MAIN),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- FORM_MAIN_ID,
- *CurrentLocation
- );
-
- UpdateData->DataCount++;
-
- *CurrentLocation = *CurrentLocation + ((EFI_IFR_OP_HEADER *) (*CurrentLocation))->Length;
- }
-
-}
-
-VOID
-UpdatePageEnd (
- IN BMM_CALLBACK_DATA *CallbackData,
- IN UINT8 *CurrentLocation
- )
-{
- //
- // Create the "Apply changes" and "Discard changes" tags.
- //
- if (CallbackData->BmmAskSaveOrNot) {
- CreateGotoOpCode (
- FORM_MAIN_ID,
- STRING_TOKEN (STR_SAVE_AND_EXIT),
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_SAVE_AND_EXIT,
- CurrentLocation
- );
-
- UpdateData->DataCount++;
-
- CurrentLocation = CurrentLocation + ((EFI_IFR_OP_HEADER *) CurrentLocation)->Length;
-
- CreateGotoOpCode (
- FORM_MAIN_ID,
- STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_NO_SAVE_AND_EXIT,
- CurrentLocation
- );
-
- UpdateData->DataCount++;
- }
- //
- // Ensure user can return to the main page.
- //
- if (0 == UpdateData->DataCount) {
- CreateGotoOpCode (
- FORM_MAIN_ID,
- STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_NO_SAVE_AND_EXIT,
- CurrentLocation
- );
-
- UpdateData->DataCount++;
- }
-
- CallbackData->Hii->UpdateForm (
- CallbackData->Hii,
- CallbackData->BmmHiiHandle,
- CallbackData->BmmCurrentPageId,
- TRUE,
- UpdateData
- );
-}
-
-VOID
-CleanUpPage (
- IN EFI_FORM_LABEL LabelId,
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- RefreshUpdateData (FALSE, 0, FALSE, 0, 0xff);
-
- //
- // Remove all op-codes from dynamic page
- //
- CallbackData->Hii->UpdateForm (
- CallbackData->Hii,
- CallbackData->BmmHiiHandle,
- LabelId,
- FALSE,
- UpdateData
- );
-}
-
-EFI_STATUS
-BootThisFile (
- IN BM_FILE_CONTEXT *FileContext
- )
-{
- EFI_STATUS Status;
- UINTN ExitDataSize;
- CHAR16 *ExitData;
- BDS_COMMON_OPTION *Option;
-
- Status = gBS->AllocatePool (EfiBootServicesData, sizeof (BDS_COMMON_OPTION), (VOID**) &Option);
- Option->Description = FileContext->FileName;
- Option->DevicePath = FileContext->DevicePath;
- Option->LoadOptionsSize = 0;
- Option->LoadOptions = NULL;
-
- //
- // Since current no boot from removable media directly is allowed */
- //
- gST->ConOut->ClearScreen (gST->ConOut);
-
- ExitDataSize = 0;
-
- Status = BdsLibBootViaBootOption (Option, Option->DevicePath, &ExitDataSize, &ExitData);
-
- return Status;
-
-}
-
-VOID
-UpdateConCOMPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- UINT16 Index;
- UINT8 *Location;
- EFI_STATUS Status;
- VOID *Interface;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = FALSE;
-
- UpdatePageStart (CallbackData, &Location);
-
- Status = EfiLibLocateProtocol (&gTerminalDriverGuid, &Interface);
- if (!EFI_ERROR (Status)) {
- for (Index = 0; Index < TerminalMenu.MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index);
-
- CreateGotoOpCode (
- FORM_CON_COM_SETUP_ID,
- NewMenuEntry->DisplayStringToken,
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- (UINT16) (TERMINAL_OPTION_OFFSET + Index),
- Location
- );
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
- }
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateBootDelPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- BM_LOAD_CONTEXT *NewLoadContext;
- UINT16 Index;
- UINT8 *Location;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
- CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);
-
- for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
- NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
- if (NewLoadContext->IsLegacy) {
- continue;
- }
-
- NewLoadContext->Deleted = FALSE;
- CallbackData->BmmFakeNvData->BootOptionDel[Index] = 0x00;
-
- CreateCheckBoxOpCode (
- (UINT16) (BOOT_OPTION_DEL_QUESTION_ID + Index),
- (UINT8) 1,
- NewMenuEntry->DisplayStringToken,
- NewMenuEntry->HelpStringToken,
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- (UINT16) BOOT_OPTION_DEL_QUESTION_ID,
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateDrvAddHandlePage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- UINT16 Index;
- UINT8 *Location;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = FALSE;
-
- UpdatePageStart (CallbackData, &Location);
-
- for (Index = 0; Index < DriverMenu.MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (&DriverMenu, Index);
-
- CreateGotoOpCode (
- FORM_DRV_ADD_HANDLE_DESC_ID,
- NewMenuEntry->DisplayStringToken,
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- (UINT16) (HANDLE_OPTION_OFFSET + Index),
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateDrvDelPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- BM_LOAD_CONTEXT *NewLoadContext;
- UINT16 Index;
- UINT8 *Location;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
-
- CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);
-
- for (Index = 0; Index < DriverOptionMenu.MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (&DriverOptionMenu, Index);
-
- NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
- NewLoadContext->Deleted = FALSE;
- CallbackData->BmmFakeNvData->DriverOptionDel[Index] = 0x00;
-
- CreateCheckBoxOpCode (
- (UINT16) (DRIVER_OPTION_DEL_QUESTION_ID + Index),
- (UINT8) 1,
- NewMenuEntry->DisplayStringToken,
- NewMenuEntry->HelpStringToken,
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- (UINT16) DRIVER_OPTION_DEL_QUESTION_ID,
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateDriverAddHandleDescPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- UINT8 *Location;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmFakeNvData->DriverAddActive = 0x01;
- CallbackData->BmmFakeNvData->DriverAddForceReconnect = 0x00;
- CallbackData->BmmAskSaveOrNot = TRUE;
- NewMenuEntry = CallbackData->MenuEntry;
-
- UpdatePageStart (CallbackData, &Location);
-
- UpdateData->DataCount += (UINT16) 4;
-
- CreateSubTitleOpCode (
- NewMenuEntry->DisplayStringToken,
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
-
- CreateStringOpCode (
- DRV_ADD_HANDLE_DESC_QUESTION_ID,
- (UINT8) 150,
- STRING_TOKEN (STR_LOAD_OPTION_DESC),
- STRING_TOKEN (STR_NULL_STRING),
- 6,
- 75,
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_DRIVER_ADD_DESC_DATA,
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
-
- CreateCheckBoxOpCode (
- DRV_ADD_RECON_QUESTION_ID,
- (UINT8) 1,
- STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
- STRING_TOKEN (STR_LOAD_OPTION_FORCE_RECON),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- DRV_ADD_RECON_QUESTION_ID,
- Location
- );
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
-
- CreateStringOpCode (
- DRIVER_ADD_OPTION_QUESTION_ID,
- (UINT8) 150,
- STRING_TOKEN (STR_OPTIONAL_DATA),
- STRING_TOKEN (STR_NULL_STRING),
- 6,
- 75,
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_DRIVER_ADD_OPT_DATA,
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateConsolePage (
- IN UINT16 UpdatePageId,
- IN BM_MENU_OPTION *ConsoleMenu,
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- BM_CONSOLE_CONTEXT *NewConsoleContext;
- BM_TERMINAL_CONTEXT *NewTerminalContext;
- UINT16 Index;
- UINT16 Index2;
- UINT8 *Location;
- UINT8 CheckFlags;
- EFI_STATUS Status;
- VOID *Interface;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
-
- for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);
- NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
- if (NewConsoleContext->IsActive) {
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- CallbackData->BmmFakeNvData->ConsoleCheck[Index] = TRUE;
- } else {
- CallbackData->BmmFakeNvData->ConsoleCheck[Index] = FALSE;
- }
-
- CreateCheckBoxOpCode (
- (UINT16) (CON_DEVICE_QUESTION_ID + Index),
- (UINT8) 1,
- NewMenuEntry->DisplayStringToken,
- NewMenuEntry->HelpStringToken,
- CheckFlags,
- (UINT16) (CONSOLE_OPTION_OFFSET + Index),
- Location
- );
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
- }
-
- Status = EfiLibLocateProtocol (&gTerminalDriverGuid, &Interface);
- if (!EFI_ERROR (Status)) {
- for (Index2 = 0; Index2 < TerminalMenu.MenuNumber; Index2++) {
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
- NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);
- NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
-
- if ((NewTerminalContext->IsConIn && (UpdatePageId == FORM_CON_IN_ID)) ||
- (NewTerminalContext->IsConOut && (UpdatePageId == FORM_CON_OUT_ID)) ||
- (NewTerminalContext->IsStdErr && (UpdatePageId == FORM_CON_ERR_ID))
- ) {
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- CallbackData->BmmFakeNvData->ConsoleCheck[Index] = TRUE;
- } else {
- CallbackData->BmmFakeNvData->ConsoleCheck[Index] = FALSE;
- }
-
- CreateCheckBoxOpCode (
- (UINT16) (CON_DEVICE_QUESTION_ID + Index),
- (UINT8) 1,
- NewMenuEntry->DisplayStringToken,
- NewMenuEntry->HelpStringToken,
- CheckFlags,
- (UINT16) (CONSOLE_OPTION_OFFSET + Index),
- Location
- );
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
- Index++;
- }
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateOrderPage (
- IN UINT16 UpdatePageId,
- IN BM_MENU_OPTION *OptionMenu,
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_MENU_ENTRY *NewMenuEntry;
- UINT16 Index;
- UINT8 *Location;
- IFR_OPTION *IfrOptionList;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
-
- CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);
-
- ZeroMem (CallbackData->BmmFakeNvData->OptionOrder, 100);
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * OptionMenu->MenuNumber);
- if (NULL == IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
- IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;
- IfrOptionList[Index].Value = (UINT16) (NewMenuEntry->OptionNumber + 1);
- IfrOptionList[Index].OptionString = NULL;
- CallbackData->BmmFakeNvData->OptionOrder[Index] = (UINT8) (IfrOptionList[Index].Value);
- }
-
- if (OptionMenu->MenuNumber > 0) {
- CreateOrderedListOpCode (
- (UINT16) OPTION_ORDER_QUESTION_ID,
- (UINT8) 100,
- STRING_TOKEN (STR_CHANGE_ORDER),
- STRING_TOKEN (STR_CHANGE_ORDER),
- IfrOptionList,
- OptionMenu->MenuNumber,
- Location
- );
-
- for (Index = 0; Index < OptionMenu->MenuNumber + 2; Index++) {
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- }
-
- UpdateData->DataCount = (UINT16) (UpdateData->DataCount + OptionMenu->MenuNumber + 2);
- }
-
- SafeFreePool (IfrOptionList);
-
- UpdatePageEnd (CallbackData, Location);
-
- CopyMem (
- CallbackData->BmmOldFakeNVData.OptionOrder,
- CallbackData->BmmFakeNvData->OptionOrder,
- 100
- );
-}
-
-VOID
-UpdateBootNextPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- UINT8 *Location;
- BM_MENU_ENTRY *NewMenuEntry;
- BM_LOAD_CONTEXT *NewLoadContext;
- IFR_OPTION *IfrOptionList;
- UINTN NumberOfOptions;
- UINT16 Index;
-
- Location = (UINT8 *) &UpdateData->Data;
- IfrOptionList = NULL;
- NumberOfOptions = BootOptionMenu.MenuNumber;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
- CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);
-
- if (NumberOfOptions > 0) {
- UpdateData->DataCount = (UINT8) (UpdateData->DataCount + NumberOfOptions);
- IfrOptionList = AllocateZeroPool ((NumberOfOptions + 1) * sizeof (IFR_OPTION));
-
- ASSERT (IfrOptionList);
-
- CallbackData->BmmFakeNvData->BootNext = (UINT16) (BootOptionMenu.MenuNumber);
-
- for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);
- NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;
- if (NewLoadContext->IsBootNext) {
- IfrOptionList[Index].Flags = EFI_IFR_FLAG_DEFAULT | EFI_IFR_FLAG_INTERACTIVE;
- CallbackData->BmmFakeNvData->BootNext = Index;
- } else {
- IfrOptionList[Index].Flags = EFI_IFR_FLAG_INTERACTIVE;
- }
-
- IfrOptionList[Index].Key = (UINT16) KEY_VALUE_MAIN_BOOT_NEXT;
- IfrOptionList[Index].Value = Index;
- IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;
- IfrOptionList[Index].OptionString = NULL;
- }
-
- IfrOptionList[Index].Key = (UINT16) KEY_VALUE_MAIN_BOOT_NEXT;
- IfrOptionList[Index].Value = Index;
- IfrOptionList[Index].StringToken = STRING_TOKEN (STR_NONE);
- IfrOptionList[Index].Flags = EFI_IFR_FLAG_INTERACTIVE;
- if (CallbackData->BmmFakeNvData->BootNext == Index) {
- IfrOptionList[Index].Flags |= EFI_IFR_FLAG_DEFAULT;
- }
-
- IfrOptionList[Index].OptionString = NULL;
-
- CreateOneOfOpCode (
- (UINT16) BOOT_NEXT_QUESTION_ID,
- (UINT8) 2,
- STRING_TOKEN (STR_BOOT_NEXT),
- STRING_TOKEN (STR_BOOT_NEXT_HELP),
- IfrOptionList,
- (UINTN) (NumberOfOptions + 1),
- Location
- );
- Location = Location + (NumberOfOptions + 2) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
-
- UpdateData->DataCount += 3;
- SafeFreePool (IfrOptionList);
- IfrOptionList = NULL;
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateTimeOutPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- UINT8 *Location;
- UINT16 BootTimeOut;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
-
- BootTimeOut = BdsLibGetTimeout ();
-
- CreateNumericOpCode (
- (UINT16) BOOT_TIME_OUT_QUESTION_ID,
- (UINT8) 2,
- STRING_TOKEN (STR_NUM_AUTO_BOOT),
- STRING_TOKEN (STR_HLP_AUTO_BOOT),
- 0,
- 65535,
- 0,
- 10,
- 0,
- 0,
- Location
- );
-
- CallbackData->BmmFakeNvData->BootTimeOut = (UINT16) BootTimeOut;
- UpdateData->DataCount++;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdateTerminalPage (
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- UINT16 Index;
- UINT8 *Location;
- UINT8 CheckFlags;
- IFR_OPTION *IfrOptionList;
- BM_MENU_ENTRY *NewMenuEntry;
- BM_TERMINAL_CONTEXT *NewTerminalContext;
-
- ZeroMem (UpdateData, UPDATE_DATA_SIZE);
- Location = (UINT8 *) &UpdateData->Data;
- UpdatePageStart (CallbackData, &Location);
-
- NewMenuEntry = BOpt_GetMenuEntry (
- &TerminalMenu,
- CallbackData->CurrentTerminal
- );
-
- if (!NewMenuEntry) {
- return ;
- }
-
- NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 19);
- if (!IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < 19; Index++) {
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
- if (NewTerminalContext->BaudRate == (UINT64) (BaudRateList[Index].Value)) {
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- NewTerminalContext->BaudRateIndex = (UINT8) Index;
- CallbackData->BmmFakeNvData->COMBaudRate = NewTerminalContext->BaudRateIndex;
- }
-
- IfrOptionList[Index].Flags = CheckFlags;
- IfrOptionList[Index].Key = KEY_VALUE_COM_SET_BAUD_RATE;
- IfrOptionList[Index].StringToken = BaudRateList[Index].StringToken;
- IfrOptionList[Index].Value = Index;
- }
-
- CreateOneOfOpCode (
- (UINT16) COM_BAUD_RATE_QUESTION_ID,
- (UINT8) 1,
- STRING_TOKEN (STR_COM_BAUD_RATE),
- STRING_TOKEN (STR_COM_BAUD_RATE),
- IfrOptionList,
- 19,
- Location
- );
-
- Location = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);
- UpdateData->DataCount += 2;
-
- SafeFreePool (IfrOptionList);
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 4);
- if (!IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < 4; Index++) {
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
-
- if (NewTerminalContext->DataBits == DataBitsList[Index].Value) {
- NewTerminalContext->DataBitsIndex = (UINT8) Index;
- CallbackData->BmmFakeNvData->COMDataRate = NewTerminalContext->DataBitsIndex;
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- }
-
- IfrOptionList[Index].Flags = CheckFlags;
- IfrOptionList[Index].Key = KEY_VALUE_COM_SET_DATA_BITS;
- IfrOptionList[Index].StringToken = DataBitsList[Index].StringToken;
- IfrOptionList[Index].Value = Index;
- }
-
- CreateOneOfOpCode (
- (UINT16) COM_DATA_RATE_QUESTION_ID,
- (UINT8) 1,
- STRING_TOKEN (STR_COM_DATA_BITS),
- STRING_TOKEN (STR_COM_DATA_BITS),
- IfrOptionList,
- 4,
- Location
- );
-
- Location = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);
- UpdateData->DataCount += 2;
-
- SafeFreePool (IfrOptionList);
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 5);
- if (!IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < 5; Index++) {
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
- if (NewTerminalContext->Parity == ParityList[Index].Value) {
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- NewTerminalContext->ParityIndex = (UINT8) Index;
- CallbackData->BmmFakeNvData->COMParity = NewTerminalContext->ParityIndex;
- }
-
- IfrOptionList[Index].Flags = CheckFlags;
- IfrOptionList[Index].Key = KEY_VALUE_COM_SET_PARITY;
- IfrOptionList[Index].StringToken = ParityList[Index].StringToken;
- IfrOptionList[Index].Value = Index;
- }
-
- CreateOneOfOpCode (
- (UINT16) COM_PARITY_QUESTION_ID,
- (UINT8) 1,
- STRING_TOKEN (STR_COM_PARITY),
- STRING_TOKEN (STR_COM_PARITY),
- IfrOptionList,
- 5,
- Location
- );
-
- Location = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);
- UpdateData->DataCount += 2;
-
- SafeFreePool (IfrOptionList);
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 3);
- if (!IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < 3; Index++) {
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
- if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- NewTerminalContext->StopBitsIndex = (UINT8) Index;
- CallbackData->BmmFakeNvData->COMStopBits = NewTerminalContext->StopBitsIndex;
- }
-
- IfrOptionList[Index].Flags = CheckFlags;
- IfrOptionList[Index].Key = KEY_VALUE_COM_SET_STOP_BITS;
- IfrOptionList[Index].StringToken = StopBitsList[Index].StringToken;
- IfrOptionList[Index].Value = Index;
- }
-
- CreateOneOfOpCode (
- (UINT16) COM_STOP_BITS_QUESTION_ID,
- (UINT8) 1,
- STRING_TOKEN (STR_COM_STOP_BITS),
- STRING_TOKEN (STR_COM_STOP_BITS),
- IfrOptionList,
- 3,
- Location
- );
-
- Location = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);
- UpdateData->DataCount += 2;
-
- SafeFreePool (IfrOptionList);
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * 4);
- if (!IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < 4; Index++) {
- CheckFlags = EFI_IFR_FLAG_INTERACTIVE;
- if (NewTerminalContext->TerminalType == Index) {
- CheckFlags |= EFI_IFR_FLAG_DEFAULT;
- CallbackData->BmmFakeNvData->COMTerminalType = NewTerminalContext->TerminalType;
- }
-
- IfrOptionList[Index].Flags = CheckFlags;
- IfrOptionList[Index].Key = KEY_VALUE_COM_SET_TERMI_TYPE;
- IfrOptionList[Index].StringToken = (STRING_REF) TerminalType[Index];
- IfrOptionList[Index].Value = Index;
- }
-
- CreateOneOfOpCode (
- (UINT16) COM_TERMINAL_QUESTION_ID,
- (UINT8) 1,
- STRING_TOKEN (STR_COM_TERMI_TYPE),
- STRING_TOKEN (STR_COM_TERMI_TYPE),
- IfrOptionList,
- 4,
- Location
- );
-
- Location = Location + (Index + 1) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount = (UINT8) (UpdateData->DataCount + Index);
- UpdateData->DataCount += 2;
-
- SafeFreePool (IfrOptionList);
-
- CreateGotoOpCode (
- FORM_MAIN_ID,
- STRING_TOKEN (STR_SAVE_AND_EXIT),
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_SAVE_AND_EXIT,
- Location
- );
-
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount++;
-
- CreateGotoOpCode (
- FORM_MAIN_ID,
- STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
- STRING_TOKEN (STR_NULL_STRING),
- EFI_IFR_FLAG_INTERACTIVE | EFI_IFR_FLAG_NV_ACCESS,
- KEY_VALUE_NO_SAVE_AND_EXIT,
- Location
- );
-
- UpdateData->DataCount++;
-
- CallbackData->Hii->UpdateForm (
- CallbackData->Hii,
- CallbackData->BmmHiiHandle,
- (EFI_FORM_LABEL) FORM_CON_COM_SETUP_ID,
- TRUE,
- UpdateData
- );
-
-}
-
-VOID
-UpdatePageBody (
- IN UINT16 UpdatePageId,
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- CleanUpPage (UpdatePageId, CallbackData);
- switch (UpdatePageId) {
- case FORM_CON_IN_ID:
- UpdateConsolePage (UpdatePageId, &ConsoleInpMenu, CallbackData);
- break;
-
- case FORM_CON_OUT_ID:
- UpdateConsolePage (UpdatePageId, &ConsoleOutMenu, CallbackData);
- break;
-
- case FORM_CON_ERR_ID:
- UpdateConsolePage (UpdatePageId, &ConsoleErrMenu, CallbackData);
- break;
-
- case FORM_BOOT_CHG_ID:
- UpdateOrderPage (UpdatePageId, &BootOptionMenu, CallbackData);
- break;
-
- case FORM_DRV_CHG_ID:
- UpdateOrderPage (UpdatePageId, &DriverOptionMenu, CallbackData);
- break;
-
- default:
- break;
- }
-}
-
-VOID *
-GetLegacyBootOptionVar (
- IN UINTN DeviceType,
- OUT UINTN *OptionIndex,
- OUT UINTN *OptionSize
- )
-{
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- VOID *OptionBuffer;
- UINTN OrderSize;
- UINTN Index;
- UINT32 Attribute;
- UINT16 *OrderBuffer;
- CHAR16 StrTemp[100];
- UINT16 FilePathSize;
- CHAR16 *Description;
- UINT8 *Ptr;
- UINT8 *OptionalData;
-
- //
- // Get Boot Option number from the size of BootOrder
- //
- OrderBuffer = BdsLibGetVariableAndSize (
- L"BootOrder",
- &gEfiGlobalVariableGuid,
- &OrderSize
- );
-
- for (Index = 0; Index < OrderSize / sizeof (UINT16); Index++) {
- UnicodeSPrint (StrTemp, 100, L"Boot%04x", OrderBuffer[Index]);
- OptionBuffer = BdsLibGetVariableAndSize (
- StrTemp,
- &gEfiGlobalVariableGuid,
- OptionSize
- );
- if (NULL == OptionBuffer) {
- continue;
- }
-
- Ptr = (UINT8 *) OptionBuffer;
- Attribute = *(UINT32 *) Ptr;
- Ptr += sizeof (UINT32);
-
- FilePathSize = *(UINT16 *) Ptr;
- Ptr += sizeof (UINT16);
-
- Description = (CHAR16 *) Ptr;
- Ptr += StrSize ((CHAR16 *) Ptr);
-
- //
- // Now Ptr point to Device Path
- //
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;
- Ptr += FilePathSize;
-
- //
- // Now Ptr point to Optional Data
- //
- OptionalData = Ptr;
-
- if ((DeviceType == ((BBS_TABLE *) OptionalData)->DeviceType) &&
- (BBS_DEVICE_PATH == DevicePath->Type) &&
- (BBS_BBS_DP == DevicePath->SubType)
- ) {
- *OptionIndex = OrderBuffer[Index];
- SafeFreePool (OrderBuffer);
- return OptionBuffer;
- } else {
- SafeFreePool (OptionBuffer);
- }
- }
-
- SafeFreePool (OrderBuffer);
- return NULL;
-}
-
-VOID
-UpdateSetLegacyDeviceOrderPage (
- IN UINT16 UpdatePageId,
- IN BMM_CALLBACK_DATA *CallbackData
- )
-{
- BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder;
- BM_MENU_OPTION *OptionMenu;
- BM_MENU_ENTRY *NewMenuEntry;
- IFR_OPTION *IfrOptionList;
- STRING_REF StrRef;
- STRING_REF StrRefHelp;
- BBS_TYPE BbsType;
- UINTN VarSize;
- UINTN Pos;
- UINTN Bit;
- UINT16 Index;
- UINT16 Index2;
- UINT16 Key;
- CHAR16 String[100];
- CHAR16 *TypeStr;
- CHAR16 *TypeStrHelp;
- UINT16 VarDevOrder;
- UINT8 *Location;
- UINT8 *VarData;
- UINT8 *OriginalPtr;
- UINT8 *LegacyOrder;
- UINT8 *OldData;
- UINT8 *DisMap;
-
- OptionMenu = NULL;
- Key = 0;
- StrRef = 0;
- StrRefHelp = 0;
- TypeStr = NULL;
- TypeStrHelp = NULL;
- BbsType = BBS_FLOPPY;
- LegacyOrder = NULL;
- OldData = NULL;
- DisMap = NULL;
-
- Location = (UINT8 *) &UpdateData->Data;
- CallbackData->BmmAskSaveOrNot = TRUE;
-
- UpdatePageStart (CallbackData, &Location);
-
- DisMap = CallbackData->BmmOldFakeNVData.DisableMap;
-
- SetMem (DisMap, 32, 0);
- //
- // Create oneof option list
- //
- switch (UpdatePageId) {
- case FORM_SET_FD_ORDER_ID:
- OptionMenu = (BM_MENU_OPTION *) &LegacyFDMenu;
- Key = LEGACY_FD_QUESTION_ID;
- TypeStr = StrFloppy;
- TypeStrHelp = StrFloppyHelp;
- BbsType = BBS_FLOPPY;
- LegacyOrder = CallbackData->BmmFakeNvData->LegacyFD;
- OldData = CallbackData->BmmOldFakeNVData.LegacyFD;
- break;
-
- case FORM_SET_HD_ORDER_ID:
- OptionMenu = (BM_MENU_OPTION *) &LegacyHDMenu;
- Key = LEGACY_HD_QUESTION_ID;
- TypeStr = StrHardDisk;
- TypeStrHelp = StrHardDiskHelp;
- BbsType = BBS_HARDDISK;
- LegacyOrder = CallbackData->BmmFakeNvData->LegacyHD;
- OldData = CallbackData->BmmOldFakeNVData.LegacyHD;
- break;
-
- case FORM_SET_CD_ORDER_ID:
- OptionMenu = (BM_MENU_OPTION *) &LegacyCDMenu;
- Key = LEGACY_CD_QUESTION_ID;
- TypeStr = StrCDROM;
- TypeStrHelp = StrCDROMHelp;
- BbsType = BBS_CDROM;
- LegacyOrder = CallbackData->BmmFakeNvData->LegacyCD;
- OldData = CallbackData->BmmOldFakeNVData.LegacyCD;
- break;
-
- case FORM_SET_NET_ORDER_ID:
- OptionMenu = (BM_MENU_OPTION *) &LegacyNETMenu;
- Key = LEGACY_NET_QUESTION_ID;
- TypeStr = StrNET;
- TypeStrHelp = StrNETHelp;
- BbsType = BBS_EMBED_NETWORK;
- LegacyOrder = CallbackData->BmmFakeNvData->LegacyNET;
- OldData = CallbackData->BmmOldFakeNVData.LegacyNET;
- break;
-
- case FORM_SET_BEV_ORDER_ID:
- OptionMenu = (BM_MENU_OPTION *) &LegacyBEVMenu;
- Key = LEGACY_BEV_QUESTION_ID;
- TypeStr = StrBEV;
- TypeStrHelp = StrBEVHelp;
- BbsType = BBS_BEV_DEVICE;
- LegacyOrder = CallbackData->BmmFakeNvData->LegacyBEV;
- OldData = CallbackData->BmmOldFakeNVData.LegacyBEV;
- break;
-
- }
-
- CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu);
-
- IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * (OptionMenu->MenuNumber + 1));
- if (NULL == IfrOptionList) {
- return ;
- }
-
- for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
- NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);
- IfrOptionList[Index].Flags = EFI_IFR_FLAG_INTERACTIVE;
- if (0 == Index) {
- IfrOptionList[Index].Flags |= EFI_IFR_FLAG_DEFAULT;
- }
-
- IfrOptionList[Index].Key = Key;
- IfrOptionList[Index].StringToken = NewMenuEntry->DisplayStringToken;
- IfrOptionList[Index].Value = (UINT16) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index;
- IfrOptionList[Index].OptionString = NULL;
- }
- //
- // for item "Disabled"
- //
- IfrOptionList[Index].Flags = EFI_IFR_FLAG_INTERACTIVE;
- IfrOptionList[Index].Key = Key;
- IfrOptionList[Index].StringToken = STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE);
- IfrOptionList[Index].Value = 0xFF;
- IfrOptionList[Index].OptionString = NULL;
-
- //
- // Get Device Order from variable
- //
- VarData = BdsLibGetVariableAndSize (
- VarLegacyDevOrder,
- &EfiLegacyDevOrderGuid,
- &VarSize
- );
-
- if (NULL != VarData) {
- OriginalPtr = VarData;
- DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;
- while (VarData < VarData + VarSize) {
- if (DevOrder->BbsType == BbsType) {
- break;
- }
-
- VarData += sizeof (BBS_TYPE);
- VarData += *(UINT16 *) VarData;
- DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData;
- }
- //
- // Create oneof tag here for FD/HD/CD #1 #2
- //
- for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {
- for (Index2 = 0; Index2 <= OptionMenu->MenuNumber; Index2++) {
- IfrOptionList[Index2].Key = (UINT16) (Key + Index);
- }
- //
- // Create the string for oneof tag
- //
- UnicodeSPrint (String, sizeof (String), TypeStr, Index);
- StrRef = 0;
- CallbackData->Hii->NewString (
- CallbackData->Hii,
- NULL,
- CallbackData->BmmHiiHandle,
- &StrRef,
- String
- );
-
- UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);
- StrRefHelp = 0;
- CallbackData->Hii->NewString (
- CallbackData->Hii,
- NULL,
- CallbackData->BmmHiiHandle,
- &StrRefHelp,
- String
- );
-
- CreateOneOfOpCode (
- (UINT16) (Key + Index),
- (UINT8) 1,
- StrRef,
- StrRefHelp,
- IfrOptionList,
- OptionMenu->MenuNumber + 1,
- Location
- );
-
- VarDevOrder = *(UINT16 *) ((UINT8 *) DevOrder + sizeof (BBS_TYPE) + sizeof (UINT16) + Index * sizeof (UINT16));
-
- if (0xFF00 == (VarDevOrder & 0xFF00)) {
- LegacyOrder[Index] = 0xFF;
- Pos = (VarDevOrder & 0xFF) / 8;
- Bit = 7 - ((VarDevOrder & 0xFF) % 8);
- DisMap[Pos] |= (UINT8) (1 << Bit);
- } else {
- LegacyOrder[Index] = (UINT8) (VarDevOrder & 0xFF);
- }
-
- Location = Location + (OptionMenu->MenuNumber + 2) * ((EFI_IFR_OP_HEADER *) Location)->Length;
- Location = Location + ((EFI_IFR_OP_HEADER *) Location)->Length;
- UpdateData->DataCount = (UINT16) (UpdateData->DataCount + (OptionMenu->MenuNumber + 3));
- }
- }
-
- CopyMem (
- OldData,
- LegacyOrder,
- 100
- );
-
- if (IfrOptionList != NULL) {
- SafeFreePool (IfrOptionList);
- IfrOptionList = NULL;
- }
-
- UpdatePageEnd (CallbackData, Location);
-}
-
-VOID
-UpdatePageId (
- BMM_CALLBACK_DATA *Private,
- UINT16 NewPageId
- )
-{
- UINT16 FileOptionMask;
-
- FileOptionMask = (UINT16) (FILE_OPTION_MASK & NewPageId);
-
- if ((NewPageId < FILE_OPTION_OFFSET) && (NewPageId >= HANDLE_OPTION_OFFSET)) {
- //
- // If we select a handle to add driver option, advance to the add handle description page.
- //
- NewPageId = FORM_DRV_ADD_HANDLE_DESC_ID;
- } else if ((NewPageId == KEY_VALUE_SAVE_AND_EXIT) || (NewPageId == KEY_VALUE_NO_SAVE_AND_EXIT)) {
- //
- // Return to main page after "Save Changes" or "Discard Changes".
- //
- NewPageId = FORM_MAIN_ID;
- }
-
- if ((NewPageId > 0) && (NewPageId < MAXIMUM_FORM_ID)) {
- Private->BmmPreviousPageId = Private->BmmCurrentPageId;
- Private->BmmCurrentPageId = NewPageId;
- }
-}