/** @file\r
Dynamically update the pages.\r
\r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\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
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
BM_LOAD_CONTEXT *NewLoadContext;\r
UINT16 Index;\r
\r
- //CallbackData->BmmAskSaveOrNot = TRUE;\r
+ CallbackData->BmmAskSaveOrNot = TRUE;\r
\r
UpdatePageStart (CallbackData);\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\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
(UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),\r
NewMenuEntry->DisplayStringToken,\r
NewMenuEntry->HelpStringToken,\r
- 0,\r
+ EFI_IFR_FLAG_CALLBACK,\r
0,\r
NULL\r
);\r
\r
NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
NewLoadContext->Deleted = FALSE;\r
- CallbackData->BmmFakeNvData.DriverOptionDel[Index] = 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
(UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),\r
NewMenuEntry->DisplayStringToken,\r
NewMenuEntry->HelpStringToken,\r
- 0,\r
+ EFI_IFR_FLAG_CALLBACK,\r
0,\r
NULL\r
);\r
UINT16 Index;\r
UINT16 Index2;\r
UINT8 CheckFlags;\r
- \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 < (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (UINT8)))) ; Index++) {\r
- NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
+ (Index < MAX_MENU_NUMBER)) ; Index++) {\r
+ CheckFlags = 0;\r
+ NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\r
NewConsoleContext = (BM_CONSOLE_CONTEXT *) NewMenuEntry->VariableContext;\r
- CheckFlags = 0;\r
if (NewConsoleContext->IsActive) {\r
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = TRUE;\r
+ ConsoleCheck[Index] = TRUE;\r
} else {\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
+ ConsoleCheck[Index] = FALSE;\r
}\r
-\r
HiiCreateCheckBoxOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
+ (EFI_QUESTION_ID) (QuestionIdBase + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
- (UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
+ (UINT16) (VariableOffsetBase + Index),\r
NewMenuEntry->DisplayStringToken,\r
NewMenuEntry->HelpStringToken,\r
0,\r
}\r
\r
for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \\r
- (Index2 < (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (UINT8)))); Index2++) {\r
+ (Index2 < MAX_MENU_NUMBER)); Index2++) {\r
CheckFlags = 0;\r
NewMenuEntry = BOpt_GetMenuEntry (&TerminalMenu, Index2);\r
NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\r
((NewTerminalContext->IsStdErr != 0) && (UpdatePageId == FORM_CON_ERR_ID))\r
) {\r
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = TRUE;\r
+ ConsoleCheck[Index] = TRUE;\r
} else {\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
+ ConsoleCheck[Index] = FALSE;\r
}\r
-\r
HiiCreateCheckBoxOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
+ (EFI_QUESTION_ID) (QuestionIdBase + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
- (UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
+ (UINT16) (VariableOffsetBase + Index),\r
NewMenuEntry->DisplayStringToken,\r
NewMenuEntry->HelpStringToken,\r
0,\r
Index++;\r
}\r
\r
+ CopyMem (OldConsoleCheck, ConsoleCheck, ConsoleCheckSize);\r
+\r
UpdatePageEnd (CallbackData);\r
}\r
\r
//\r
UnicodeValueToString (ModeString, 0, Col, 0);\r
PStr = &ModeString[0];\r
- StrnCat (PStr, L" x ", StrLen(L" x ") + 1);\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
UpdatePageEnd (CallbackData);\r
}\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
UINT8 Index;\r
UINT8 CheckFlags;\r
BM_MENU_ENTRY *NewMenuEntry;\r
- BM_TERMINAL_CONTEXT *NewTerminalContext;\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
- CallbackData->CurrentTerminal\r
+ CurrentTerminal\r
);\r
\r
if (NewMenuEntry == NULL) {\r
return ;\r
}\r
\r
- NewTerminalContext = (BM_TERMINAL_CONTEXT *) NewMenuEntry->VariableContext;\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 (NewTerminalContext->BaudRate == (UINT64) (BaudRateList[Index].Value)) {\r
+ if (BaudRateList[Index].Value == 115200) {\r
CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
- NewTerminalContext->BaudRateIndex = Index;\r
- CallbackData->BmmFakeNvData.COMBaudRate = NewTerminalContext->BaudRateIndex;\r
}\r
-\r
HiiCreateOneOfOptionOpCode (\r
OptionsOpCodeHandle,\r
BaudRateList[Index].StringToken,\r
\r
HiiCreateOneOfOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) COM_BAUD_RATE_QUESTION_ID,\r
+ (EFI_QUESTION_ID) (COM_BAUD_RATE_QUESTION_ID + CurrentTerminal),\r
VARSTORE_ID_BOOT_MAINT,\r
- COM_BAUD_RATE_VAR_OFFSET,\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
for (Index = 0; Index < sizeof (DataBitsList) / sizeof (DataBitsList[0]); Index++) {\r
CheckFlags = 0;\r
\r
- if (NewTerminalContext->DataBits == DataBitsList[Index].Value) {\r
- NewTerminalContext->DataBitsIndex = Index;\r
- CallbackData->BmmFakeNvData.COMDataRate = NewTerminalContext->DataBitsIndex;\r
+ if (DataBitsList[Index].Value == 8) {\r
CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
}\r
\r
\r
HiiCreateOneOfOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) COM_DATA_RATE_QUESTION_ID,\r
+ (EFI_QUESTION_ID) (COM_DATA_RATE_QUESTION_ID + CurrentTerminal),\r
VARSTORE_ID_BOOT_MAINT,\r
- COM_DATA_RATE_VAR_OFFSET,\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
\r
for (Index = 0; Index < sizeof (ParityList) / sizeof (ParityList[0]); Index++) {\r
CheckFlags = 0;\r
- if (NewTerminalContext->Parity == ParityList[Index].Value) {\r
+ if (ParityList[Index].Value == NoParity) {\r
CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
- NewTerminalContext->ParityIndex = (UINT8) Index;\r
- CallbackData->BmmFakeNvData.COMParity = NewTerminalContext->ParityIndex;\r
}\r
\r
HiiCreateOneOfOptionOpCode (\r
\r
HiiCreateOneOfOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) COM_PARITY_QUESTION_ID,\r
+ (EFI_QUESTION_ID) (COM_PARITY_QUESTION_ID + CurrentTerminal),\r
VARSTORE_ID_BOOT_MAINT,\r
- COM_PARITY_VAR_OFFSET,\r
+ (UINT16) (COM_PARITY_VAR_OFFSET + CurrentTerminal),\r
STRING_TOKEN (STR_COM_PARITY),\r
STRING_TOKEN (STR_COM_PARITY),\r
0,\r
\r
for (Index = 0; Index < sizeof (StopBitsList) / sizeof (StopBitsList[0]); Index++) {\r
CheckFlags = 0;\r
- if (NewTerminalContext->StopBits == StopBitsList[Index].Value) {\r
+ if (StopBitsList[Index].Value == OneStopBit) {\r
CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
- NewTerminalContext->StopBitsIndex = (UINT8) Index;\r
- CallbackData->BmmFakeNvData.COMStopBits = NewTerminalContext->StopBitsIndex;\r
}\r
\r
HiiCreateOneOfOptionOpCode (\r
\r
HiiCreateOneOfOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) COM_STOP_BITS_QUESTION_ID,\r
+ (EFI_QUESTION_ID) (COM_STOP_BITS_QUESTION_ID + CurrentTerminal),\r
VARSTORE_ID_BOOT_MAINT,\r
- COM_STOP_BITS_VAR_OFFSET,\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
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
ASSERT (OptionsOpCodeHandle != NULL);\r
\r
- for (Index = 0; Index < 4; Index++) {\r
+ for (Index = 0; Index < sizeof (TerminalType) / sizeof (TerminalType[0]); Index++) {\r
CheckFlags = 0;\r
- if (NewTerminalContext->TerminalType == Index) {\r
+ if (Index == 0) {\r
CheckFlags |= EFI_IFR_OPTION_DEFAULT;\r
- CallbackData->BmmFakeNvData.COMTerminalType = NewTerminalContext->TerminalType;\r
}\r
\r
HiiCreateOneOfOptionOpCode (\r
\r
HiiCreateOneOfOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) COM_TERMINAL_QUESTION_ID,\r
+ (EFI_QUESTION_ID) (COM_TERMINAL_QUESTION_ID + CurrentTerminal),\r
VARSTORE_ID_BOOT_MAINT,\r
- COM_TERMINAL_VAR_OFFSET,\r
+ (UINT16) (COM_TERMINAL_VAR_OFFSET + CurrentTerminal),\r
STRING_TOKEN (STR_COM_TERMI_TYPE),\r
STRING_TOKEN (STR_COM_TERMI_TYPE),\r
0,\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