X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkModulePkg%2FUniversal%2FBdsDxe%2FBootMaint%2FUpdatePage.c;h=7d4f33d409601bae44f9041cafdf3552bfb8f2c0;hp=dcc1fe2a13e6f442c4566173379e2159740ff3ac;hb=847240774030f9da79140a9d515a64ec817eb6eb;hpb=75bf9d0ecca38dfec9b645a6eb1119c025892304 diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c b/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c index dcc1fe2a13..7d4f33d409 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c @@ -1,8 +1,8 @@ /** @file Dynamically update the pages. -Copyright (c) 2004 - 2008, Intel Corporation.
-All rights reserved. This program and the accompanying materials +Copyright (c) 2004 - 2011, 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 @@ -99,31 +99,31 @@ UpdatePageEnd ( 0 ); - HiiCreateGotoOpCode ( + HiiCreateActionOpCode ( mStartOpCodeHandle, - FORM_MAIN_ID, + KEY_VALUE_SAVE_AND_EXIT, STRING_TOKEN (STR_SAVE_AND_EXIT), STRING_TOKEN (STR_NULL_STRING), EFI_IFR_FLAG_CALLBACK, - KEY_VALUE_SAVE_AND_EXIT + 0 ); } // // Ensure user can return to the main page. // - HiiCreateGotoOpCode ( + HiiCreateActionOpCode ( mStartOpCodeHandle, - FORM_MAIN_ID, + KEY_VALUE_NO_SAVE_AND_EXIT, STRING_TOKEN (STR_NO_SAVE_AND_EXIT), STRING_TOKEN (STR_NULL_STRING), EFI_IFR_FLAG_CALLBACK, - KEY_VALUE_NO_SAVE_AND_EXIT + 0 ); HiiUpdateForm ( CallbackData->BmmHiiHandle, - &mBootMaintGuid, + &gBootMaintFormSetGuid, CallbackData->BmmCurrentPageId, mStartOpCodeHandle, // Label CallbackData->BmmCurrentPageId mEndOpCodeHandle // LABEL_END @@ -151,7 +151,7 @@ CleanUpPage ( mStartLabel->Number = LabelId; HiiUpdateForm ( CallbackData->BmmHiiHandle, - &mBootMaintGuid, + &gBootMaintFormSetGuid, LabelId, mStartOpCodeHandle, // Label LabelId mEndOpCodeHandle // LABEL_END @@ -180,7 +180,7 @@ BootThisFile ( Option = (BDS_COMMON_OPTION *) AllocatePool (sizeof (BDS_COMMON_OPTION)); ASSERT (Option != NULL); - Option->Description = FileContext->FileName; + Option->Description = (CHAR16 *) AllocateCopyPool (StrSize (FileContext->FileName), FileContext->FileName); Option->DevicePath = FileContext->DevicePath; Option->LoadOptionsSize = 0; Option->LoadOptions = NULL; @@ -254,7 +254,7 @@ UpdateBootDelPage ( UpdatePageStart (CallbackData); CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu); - ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.BootOptionDel) / sizeof (CallbackData->BmmFakeNvData.BootOptionDel[0]))); + ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.OptionDel) / sizeof (CallbackData->BmmFakeNvData.OptionDel[0]))); for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) { NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index); NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext; @@ -263,13 +263,13 @@ UpdateBootDelPage ( } NewLoadContext->Deleted = FALSE; - CallbackData->BmmFakeNvData.BootOptionDel[Index] = 0x00; + CallbackData->BmmFakeNvData.OptionDel[Index] = FALSE; HiiCreateCheckBoxOpCode ( mStartOpCodeHandle, - (EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index), + (EFI_QUESTION_ID) (OPTION_DEL_QUESTION_ID + Index), VARSTORE_ID_BOOT_MAINT, - (UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index), + (UINT16) (OPTION_DEL_VAR_OFFSET + Index), NewMenuEntry->DisplayStringToken, NewMenuEntry->HelpStringToken, 0, @@ -337,19 +337,19 @@ UpdateDrvDelPage ( CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu); - ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.DriverOptionDel) / sizeof (CallbackData->BmmFakeNvData.DriverOptionDel[0]))); + ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.OptionDel) / sizeof (CallbackData->BmmFakeNvData.OptionDel[0]))); 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; + CallbackData->BmmFakeNvData.OptionDel[Index] = FALSE; HiiCreateCheckBoxOpCode ( mStartOpCodeHandle, - (EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index), + (EFI_QUESTION_ID) (OPTION_DEL_QUESTION_ID + Index), VARSTORE_ID_BOOT_MAINT, - (UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index), + (UINT16) (OPTION_DEL_VAR_OFFSET + Index), NewMenuEntry->DisplayStringToken, NewMenuEntry->HelpStringToken, 0, @@ -459,8 +459,8 @@ UpdateConsolePage ( UpdatePageStart (CallbackData); - ASSERT (ConsoleMenu->MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (CallbackData->BmmFakeNvData.ConsoleCheck[0]))); - for (Index = 0; Index < ConsoleMenu->MenuNumber; Index++) { + for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \ + (Index < (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (UINT8)))) ; Index++) { NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index); NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext; CheckFlags = 0; @@ -484,11 +484,13 @@ UpdateConsolePage ( ); } - for (Index2 = 0; Index2 < TerminalMenu.MenuNumber; Index2++) { + for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \ + (Index2 < (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (UINT8)))); Index2++) { CheckFlags = 0; NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2); NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext; + ASSERT (Index < MAX_MENU_NUMBER); if (((NewTerminalContext->IsConIn != 0) && (UpdatePageId == FORM_CON_IN_ID)) || ((NewTerminalContext->IsConOut != 0) && (UpdatePageId == FORM_CON_OUT_ID)) || ((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID)) @@ -533,31 +535,60 @@ UpdateOrderPage ( IN BMM_CALLBACK_DATA *CallbackData ) { - BM_MENU_ENTRY *NewMenuEntry; - UINT16 Index; - VOID *OptionsOpCodeHandle; + BM_MENU_ENTRY *NewMenuEntry; + UINT16 Index; + UINT16 OptionOrderIndex; + VOID *OptionsOpCodeHandle; + UINTN DeviceType; + BM_LOAD_CONTEXT *NewLoadContext; + DeviceType = (UINTN) -1; CallbackData->BmmAskSaveOrNot = TRUE; UpdatePageStart (CallbackData); CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, OptionMenu); - ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, 100); + ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, sizeof (CallbackData->BmmFakeNvData.OptionOrder)); OptionsOpCodeHandle = HiiAllocateOpCodeHandle (); ASSERT (OptionsOpCodeHandle != NULL); - for (Index = 0; Index < OptionMenu->MenuNumber; Index++) { - NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index); + for ( + Index = 0, OptionOrderIndex = 0; + ( + (Index < OptionMenu->MenuNumber) && + (OptionOrderIndex < + ( + sizeof (CallbackData->BmmFakeNvData.OptionOrder) / + sizeof (CallbackData->BmmFakeNvData.OptionOrder[0]) + ) + ) + ); + Index++ + ) { + NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index); + NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext; + + if (NewLoadContext->IsLegacy) { + if (((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType != DeviceType) { + DeviceType = ((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType; + } else { + // + // Only show one legacy boot option for the same device type + // assuming the boot options are grouped by the device type + // + continue; + } + } HiiCreateOneOfOptionOpCode ( OptionsOpCodeHandle, NewMenuEntry->DisplayStringToken, 0, - EFI_IFR_NUMERIC_SIZE_1, - (UINT8) (NewMenuEntry->OptionNumber + 1) + EFI_IFR_TYPE_NUM_SIZE_32, + (UINT32) (NewMenuEntry->OptionNumber + 1) ); - CallbackData->BmmFakeNvData.OptionOrder[Index] = (UINT8) (NewMenuEntry->OptionNumber + 1); + CallbackData->BmmFakeNvData.OptionOrder[OptionOrderIndex++] = (UINT32) (NewMenuEntry->OptionNumber + 1); } if (OptionMenu->MenuNumber > 0) { @@ -570,7 +601,7 @@ UpdateOrderPage ( STRING_TOKEN (STR_CHANGE_ORDER), // Question help text 0, // Question flag 0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET - EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value + EFI_IFR_TYPE_NUM_SIZE_32, // Data type of Question value 100, // Maximum container OptionsOpCodeHandle, // Option Opcode list NULL // Default Opcode is NULL @@ -584,7 +615,7 @@ UpdateOrderPage ( CopyMem ( CallbackData->BmmOldFakeNVData.OptionOrder, CallbackData->BmmFakeNvData.OptionOrder, - 100 + sizeof (CallbackData->BmmOldFakeNVData.OptionOrder) ); } @@ -627,7 +658,7 @@ UpdateBootNextPage ( OptionsOpCodeHandle, NewMenuEntry->DisplayStringToken, EFI_IFR_OPTION_DEFAULT, - EFI_IFR_NUMERIC_SIZE_2, + EFI_IFR_TYPE_NUM_SIZE_16, Index ); CallbackData->BmmFakeNvData.BootNext = Index; @@ -636,7 +667,7 @@ UpdateBootNextPage ( OptionsOpCodeHandle, NewMenuEntry->DisplayStringToken, 0, - EFI_IFR_NUMERIC_SIZE_2, + EFI_IFR_TYPE_NUM_SIZE_16, Index ); } @@ -647,7 +678,7 @@ UpdateBootNextPage ( OptionsOpCodeHandle, STRING_TOKEN (STR_NONE), EFI_IFR_OPTION_DEFAULT, - EFI_IFR_NUMERIC_SIZE_2, + EFI_IFR_TYPE_NUM_SIZE_16, Index ); } else { @@ -655,7 +686,7 @@ UpdateBootNextPage ( OptionsOpCodeHandle, STRING_TOKEN (STR_NONE), 0, - EFI_IFR_NUMERIC_SIZE_2, + EFI_IFR_TYPE_NUM_SIZE_16, Index ); } @@ -701,7 +732,7 @@ UpdateTimeOutPage ( DefaultOpCodeHandle = HiiAllocateOpCodeHandle (); ASSERT (DefaultOpCodeHandle != NULL); - HiiCreateDefaultOpCode (DefaultOpCodeHandle, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_NUMERIC_SIZE_2, BootTimeOut); + HiiCreateDefaultOpCode (DefaultOpCodeHandle, EFI_HII_DEFAULT_CLASS_STANDARD, EFI_IFR_TYPE_NUM_SIZE_16, BootTimeOut); HiiCreateNumericOpCode ( mStartOpCodeHandle, @@ -740,9 +771,8 @@ UpdateConModePage ( UINTN Index; UINTN Col; UINTN Row; - CHAR16 RowString[50]; CHAR16 ModeString[50]; - UINTN TempStringLen; + CHAR16 *PStr; UINTN MaxMode; UINTN ValidMode; EFI_STRING_ID *ModeToken; @@ -797,12 +827,11 @@ UpdateConModePage ( // // Build mode string Column x Row // - TempStringLen = UnicodeValueToString (ModeString, 0, Col, 0); - ASSERT ((TempStringLen + StrLen (L" x ")) < (sizeof (ModeString) / sizeof (ModeString[0]))); - StrCat (ModeString, L" x "); - TempStringLen = UnicodeValueToString (RowString, 0, Row, 0); - ASSERT ((StrLen (ModeString) + TempStringLen) < (sizeof (ModeString) / sizeof (ModeString[0]))); - StrCat (ModeString, RowString); + UnicodeValueToString (ModeString, 0, Col, 0); + PStr = &ModeString[0]; + StrnCat (PStr, L" x ", StrLen(L" x ") + 1); + PStr = PStr + StrLen (PStr); + UnicodeValueToString (PStr , 0, Row, 0); ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL); @@ -811,7 +840,7 @@ UpdateConModePage ( OptionsOpCodeHandle, ModeToken[Index], EFI_IFR_OPTION_DEFAULT, - EFI_IFR_NUMERIC_SIZE_2, + EFI_IFR_TYPE_NUM_SIZE_16, (UINT16) Mode ); } else { @@ -819,7 +848,7 @@ UpdateConModePage ( OptionsOpCodeHandle, ModeToken[Index], 0, - EFI_IFR_NUMERIC_SIZE_2, + EFI_IFR_TYPE_NUM_SIZE_16, (UINT16) Mode ); } @@ -893,7 +922,7 @@ UpdateTerminalPage ( OptionsOpCodeHandle, BaudRateList[Index].StringToken, CheckFlags, - EFI_IFR_NUMERIC_SIZE_1, + EFI_IFR_TYPE_NUM_SIZE_8, Index ); } @@ -928,7 +957,7 @@ UpdateTerminalPage ( OptionsOpCodeHandle, DataBitsList[Index].StringToken, CheckFlags, - EFI_IFR_NUMERIC_SIZE_1, + EFI_IFR_TYPE_NUM_SIZE_8, Index ); } @@ -962,7 +991,7 @@ UpdateTerminalPage ( OptionsOpCodeHandle, ParityList[Index].StringToken, CheckFlags, - EFI_IFR_NUMERIC_SIZE_1, + EFI_IFR_TYPE_NUM_SIZE_8, Index ); } @@ -996,7 +1025,7 @@ UpdateTerminalPage ( OptionsOpCodeHandle, StopBitsList[Index].StringToken, CheckFlags, - EFI_IFR_NUMERIC_SIZE_1, + EFI_IFR_TYPE_NUM_SIZE_8, Index ); } @@ -1029,7 +1058,7 @@ UpdateTerminalPage ( OptionsOpCodeHandle, (EFI_STRING_ID) TerminalType[Index], CheckFlags, - EFI_IFR_NUMERIC_SIZE_1, + EFI_IFR_TYPE_NUM_SIZE_8, Index ); } @@ -1047,6 +1076,34 @@ UpdateTerminalPage ( NULL ); + HiiFreeOpCodeHandle (OptionsOpCodeHandle); + OptionsOpCodeHandle = HiiAllocateOpCodeHandle (); + ASSERT (OptionsOpCodeHandle != NULL); + + CallbackData->BmmFakeNvData.COMFlowControl = NewTerminalContext->FlowControl; + for (Index = 0; Index < sizeof (mFlowControlType) / sizeof (mFlowControlType[0]); Index++) { + HiiCreateOneOfOptionOpCode ( + OptionsOpCodeHandle, + (EFI_STRING_ID) mFlowControlType[Index], + 0, + EFI_IFR_TYPE_NUM_SIZE_8, + mFlowControlValue[Index] + ); + } + + HiiCreateOneOfOpCode ( + mStartOpCodeHandle, + (EFI_QUESTION_ID) COM_FLOWCONTROL_QUESTION_ID, + VARSTORE_ID_BOOT_MAINT, + COM_FLOWCONTROL_VAR_OFFSET, + STRING_TOKEN (STR_COM_FLOW_CONTROL), + STRING_TOKEN (STR_COM_FLOW_CONTROL), + 0, + EFI_IFR_NUMERIC_SIZE_1, + OptionsOpCodeHandle, + NULL + ); + HiiFreeOpCodeHandle (OptionsOpCodeHandle); UpdatePageEnd (CallbackData); @@ -1194,7 +1251,7 @@ UpdateSetLegacyDeviceOrderPage ( IN BMM_CALLBACK_DATA *CallbackData ) { - BM_LEGACY_DEV_ORDER_CONTEXT *DevOrder; + LEGACY_DEV_ORDER_ENTRY *DevOrder; BM_MENU_OPTION *OptionMenu; BM_MENU_ENTRY *NewMenuEntry; EFI_STRING_ID StrRef; @@ -1229,9 +1286,8 @@ UpdateSetLegacyDeviceOrderPage ( CallbackData->BmmAskSaveOrNot = TRUE; UpdatePageStart (CallbackData); - DisMap = CallbackData->BmmOldFakeNVData.DisableMap; + DisMap = ZeroMem (CallbackData->BmmOldFakeNVData.DisableMap, sizeof (CallbackData->BmmOldFakeNVData.DisableMap)); - SetMem (DisMap, 32, 0); // // Create oneof option list // @@ -1298,34 +1354,26 @@ UpdateSetLegacyDeviceOrderPage ( for (Index = 0; Index < OptionMenu->MenuNumber; Index++) { NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index); - - if (Index == 0) { - HiiCreateOneOfOptionOpCode ( - OptionsOpCodeHandle, - NewMenuEntry->DisplayStringToken, - EFI_IFR_OPTION_DEFAULT, - EFI_IFR_NUMERIC_SIZE_1, - (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index - ); - } - + // + // Create OneOf for each legacy device + // HiiCreateOneOfOptionOpCode ( OptionsOpCodeHandle, NewMenuEntry->DisplayStringToken, 0, - EFI_IFR_NUMERIC_SIZE_1, - (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index + EFI_IFR_TYPE_NUM_SIZE_8, + (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->BbsIndex ); } // - // for item "Disabled" + // Create OneOf for item "Disabled" // HiiCreateOneOfOptionOpCode ( OptionsOpCodeHandle, STRING_TOKEN (STR_DISABLE_LEGACY_DEVICE), 0, - EFI_IFR_NUMERIC_SIZE_1, + EFI_IFR_TYPE_NUM_SIZE_8, 0xFF ); @@ -1334,12 +1382,12 @@ UpdateSetLegacyDeviceOrderPage ( // VarData = BdsLibGetVariableAndSize ( VAR_LEGACY_DEV_ORDER, - &EfiLegacyDevOrderGuid, + &gEfiLegacyDevOrderVariableGuid, &VarSize ); if (NULL != VarData) { - DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData; + DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData; while (VarData < VarData + VarSize) { if (DevOrder->BbsType == BbsType) { break; @@ -1347,7 +1395,7 @@ UpdateSetLegacyDeviceOrderPage ( VarData += sizeof (BBS_TYPE); VarData += *(UINT16 *) VarData; - DevOrder = (BM_LEGACY_DEV_ORDER_CONTEXT *) VarData; + DevOrder = (LEGACY_DEV_ORDER_ENTRY *) VarData; } // // Create oneof tag here for FD/HD/CD #1 #2