/** @file\r
Dynamically update the pages.\r
\r
-Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2004 - 2014, 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
UpdatePageStart (CallbackData);\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &BootOptionMenu);\r
\r
- ASSERT (BootOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.OptionDel) / sizeof (CallbackData->BmmFakeNvData.OptionDel[0])));\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
}\r
\r
NewLoadContext->Deleted = FALSE;\r
- CallbackData->BmmFakeNvData.OptionDel[Index] = FALSE;\r
+ //CallbackData->BmmFakeNvData.BootOptionDel[Index] = FALSE;\r
\r
HiiCreateCheckBoxOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) (OPTION_DEL_QUESTION_ID + Index),\r
+ (EFI_QUESTION_ID) (BOOT_OPTION_DEL_QUESTION_ID + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
- (UINT16) (OPTION_DEL_VAR_OFFSET + Index),\r
+ (UINT16) (BOOT_OPTION_DEL_VAR_OFFSET + Index),\r
NewMenuEntry->DisplayStringToken,\r
NewMenuEntry->HelpStringToken,\r
0,\r
\r
CreateMenuStringToken (CallbackData, CallbackData->BmmHiiHandle, &DriverOptionMenu);\r
\r
- ASSERT (DriverOptionMenu.MenuNumber <= (sizeof (CallbackData->BmmFakeNvData.OptionDel) / sizeof (CallbackData->BmmFakeNvData.OptionDel[0])));\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
- CallbackData->BmmFakeNvData.OptionDel[Index] = FALSE;\r
+ //CallbackData->BmmFakeNvData.DriverOptionDel[Index] = FALSE;\r
\r
HiiCreateCheckBoxOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) (OPTION_DEL_QUESTION_ID + Index),\r
+ (EFI_QUESTION_ID) (DRIVER_OPTION_DEL_QUESTION_ID + Index),\r
VARSTORE_ID_BOOT_MAINT,\r
- (UINT16) (OPTION_DEL_VAR_OFFSET + Index),\r
+ (UINT16) (DRIVER_OPTION_DEL_VAR_OFFSET + Index),\r
NewMenuEntry->DisplayStringToken,\r
NewMenuEntry->HelpStringToken,\r
0,\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
- \r
- CallbackData->BmmAskSaveOrNot = TRUE;\r
+ UINT8 *ConsoleCheck;\r
+ EFI_QUESTION_ID QuestionIdBase;\r
+ UINT16 VariableOffsetBase;\r
\r
UpdatePageStart (CallbackData);\r
\r
- for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \\r
- (Index < (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (UINT8)))) ; Index++) {\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
- } else {\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
- }\r
+ ConsoleCheck = NULL;\r
+ QuestionIdBase = 0;\r
+ VariableOffsetBase = 0;\r
\r
- HiiCreateCheckBoxOpCode (\r
- mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) (CON_DEVICE_QUESTION_ID + Index),\r
- VARSTORE_ID_BOOT_MAINT,\r
- (UINT16) (CON_DEVICE_VAR_OFFSET + Index),\r
- NewMenuEntry->DisplayStringToken,\r
- NewMenuEntry->HelpStringToken,\r
- 0,\r
- CheckFlags,\r
- NULL\r
- );\r
+ switch (UpdatePageId) {\r
+ case FORM_CON_IN_ID:\r
+ ConsoleCheck = &CallbackData->BmmFakeNvData.ConsoleInCheck[0];\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
+ 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
+ QuestionIdBase = CON_ERR_DEVICE_QUESTION_ID;\r
+ VariableOffsetBase = CON_ERR_DEVICE_VAR_OFFSET;\r
+ break;\r
}\r
+ ASSERT (ConsoleCheck != NULL);\r
\r
- for (Index2 = 0; ((Index2 < TerminalMenu.MenuNumber) && \\r
- (Index2 < (sizeof (CallbackData->BmmFakeNvData.ConsoleCheck) / sizeof (UINT8)))); 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
+ for (Index = 0; ((Index < ConsoleMenu->MenuNumber) && \\r
+ (Index < MAX_MENU_NUMBER)) ; Index++) {\r
+ CheckFlags = 0;\r
+ if (UpdatePageId != FORM_CON_ERR_ID) {\r
CheckFlags |= EFI_IFR_CHECKBOX_DEFAULT;\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = TRUE;\r
- } else {\r
- CallbackData->BmmFakeNvData.ConsoleCheck[Index] = FALSE;\r
}\r
-\r
+ NewMenuEntry = BOpt_GetMenuEntry (ConsoleMenu, Index);\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
CheckFlags,\r
NULL\r
);\r
-\r
- Index++;\r
}\r
\r
UpdatePageEnd (CallbackData);\r
IN BMM_CALLBACK_DATA *CallbackData\r
)\r
{\r
- BM_MENU_ENTRY *NewMenuEntry;\r
- UINT16 Index;\r
- UINT16 OptionOrderIndex;\r
- VOID *OptionsOpCodeHandle;\r
- UINTN DeviceType;\r
- BM_LOAD_CONTEXT *NewLoadContext;\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
- DeviceType = (UINTN) -1;\r
- CallbackData->BmmAskSaveOrNot = TRUE;\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
- ZeroMem (CallbackData->BmmFakeNvData.OptionOrder, sizeof (CallbackData->BmmFakeNvData.OptionOrder));\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
- for (\r
- Index = 0, OptionOrderIndex = 0;\r
- (\r
- (Index < OptionMenu->MenuNumber) &&\r
- (OptionOrderIndex <\r
- (\r
- sizeof (CallbackData->BmmFakeNvData.OptionOrder) /\r
- sizeof (CallbackData->BmmFakeNvData.OptionOrder[0])\r
- )\r
- )\r
- );\r
- Index++\r
- ) {\r
- NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
- NewLoadContext = (BM_LOAD_CONTEXT *) NewMenuEntry->VariableContext;\r
-\r
- if (NewLoadContext->IsLegacy) {\r
- if (((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType != DeviceType) {\r
- DeviceType = ((BBS_BBS_DEVICE_PATH *) NewLoadContext->FilePathList)->DeviceType;\r
- } else {\r
- //\r
- // Only show one legacy boot option for the same device type\r
- // assuming the boot options are grouped by the device type\r
- //\r
- continue;\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
- HiiCreateOneOfOptionOpCode (\r
- OptionsOpCodeHandle,\r
- NewMenuEntry->DisplayStringToken,\r
- 0,\r
- EFI_IFR_TYPE_NUM_SIZE_32,\r
- (UINT32) (NewMenuEntry->OptionNumber + 1)\r
- );\r
- CallbackData->BmmFakeNvData.OptionOrder[OptionOrderIndex++] = (UINT32) (NewMenuEntry->OptionNumber + 1);\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
+ \r
if (OptionMenu->MenuNumber > 0) {\r
HiiCreateOrderedListOpCode ( \r
mStartOpCodeHandle, // Container for dynamic created opcodes \r
- (EFI_QUESTION_ID) OPTION_ORDER_QUESTION_ID, // Question ID \r
+ QuestionId, // Question ID \r
VARSTORE_ID_BOOT_MAINT, // VarStore ID \r
- OPTION_ORDER_VAR_OFFSET, // Offset in Buffer Storage \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
HiiFreeOpCodeHandle (OptionsOpCodeHandle);\r
\r
UpdatePageEnd (CallbackData);\r
-\r
- CopyMem (\r
- CallbackData->BmmOldFakeNVData.OptionOrder,\r
- CallbackData->BmmFakeNvData.OptionOrder,\r
- sizeof (CallbackData->BmmOldFakeNVData.OptionOrder)\r
- );\r
}\r
\r
/**\r
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
ASSERT (OptionsOpCodeHandle != NULL);\r
\r
- CallbackData->BmmFakeNvData.BootNext = (UINT16) (BootOptionMenu.MenuNumber);\r
+ //CallbackData->BmmFakeNvData.BootNext = (UINT16) (BootOptionMenu.MenuNumber);\r
\r
for (Index = 0; Index < BootOptionMenu.MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (&BootOptionMenu, Index);\r
EFI_IFR_TYPE_NUM_SIZE_16,\r
Index\r
);\r
- CallbackData->BmmFakeNvData.BootNext = Index;\r
+ //CallbackData->BmmFakeNvData.BootNext = Index;\r
} else {\r
HiiCreateOneOfOptionOpCode (\r
OptionsOpCodeHandle,\r
\r
HiiFreeOpCodeHandle (DefaultOpCodeHandle);\r
\r
- CallbackData->BmmFakeNvData.BootTimeOut = BootTimeOut;\r
+ //CallbackData->BmmFakeNvData.BootTimeOut = BootTimeOut;\r
\r
UpdatePageEnd (CallbackData);\r
}\r
//\r
// Determin which mode should be the first entry in menu\r
//\r
- GetConsoleOutMode (CallbackData);\r
+ // GetConsoleOutMode (CallbackData);\r
\r
//\r
// Build text mode options\r
BM_MENU_ENTRY *NewMenuEntry;\r
BM_TERMINAL_CONTEXT *NewTerminalContext;\r
VOID *OptionsOpCodeHandle;\r
-\r
- CallbackData->BmmAskSaveOrNot = TRUE;\r
+ UINTN CurrentTerminal;\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
\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
\r
for (Index = 0; Index < 4; 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
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();\r
ASSERT (OptionsOpCodeHandle != NULL);\r
\r
- CallbackData->BmmFakeNvData.COMFlowControl = NewTerminalContext->FlowControl;\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
- 0,\r
+ CheckFlags,\r
EFI_IFR_TYPE_NUM_SIZE_8,\r
mFlowControlValue[Index]\r
);\r
\r
HiiCreateOneOfOpCode (\r
mStartOpCodeHandle,\r
- (EFI_QUESTION_ID) COM_FLOWCONTROL_QUESTION_ID,\r
+ (EFI_QUESTION_ID) (COM_FLOWCONTROL_QUESTION_ID + CurrentTerminal),\r
VARSTORE_ID_BOOT_MAINT,\r
- COM_FLOWCONTROL_VAR_OFFSET,\r
+ (UINT16) (COM_FLOWCONTROL_VAR_OFFSET + CurrentTerminal),\r
STRING_TOKEN (STR_COM_FLOW_CONTROL),\r
STRING_TOKEN (STR_COM_FLOW_CONTROL),\r
0,\r
}\r
}\r
\r
-/**\r
- Get the index number (#### in Boot####) for the boot option pointed to a BBS legacy device type\r
- specified by DeviceType.\r
-\r
- @param DeviceType The legacy device type. It can be floppy, network, harddisk, cdrom,\r
- etc.\r
- @param OptionIndex Returns the index number (#### in Boot####).\r
- @param OptionSize Return the size of the Boot### variable.\r
-\r
-**/\r
-VOID *\r
-GetLegacyBootOptionVar (\r
- IN UINTN DeviceType,\r
- OUT UINTN *OptionIndex,\r
- OUT UINTN *OptionSize\r
- )\r
-{\r
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
- VOID *OptionBuffer;\r
- UINTN OrderSize;\r
- UINTN Index;\r
- UINT16 *OrderBuffer;\r
- CHAR16 StrTemp[100];\r
- UINT16 FilePathSize;\r
- UINT8 *Ptr;\r
- UINT8 *OptionalData;\r
-\r
- //\r
- // Get Boot Option number from the size of BootOrder\r
- //\r
- OrderBuffer = BdsLibGetVariableAndSize (\r
- L"BootOrder",\r
- &gEfiGlobalVariableGuid,\r
- &OrderSize\r
- );\r
- \r
- if (OrderBuffer == NULL) {\r
- return NULL;\r
- }\r
- \r
- for (Index = 0; Index < OrderSize / sizeof (UINT16); Index++) {\r
- UnicodeSPrint (StrTemp, sizeof (StrTemp), L"Boot%04x", OrderBuffer[Index]);\r
- OptionBuffer = BdsLibGetVariableAndSize (\r
- StrTemp,\r
- &gEfiGlobalVariableGuid,\r
- OptionSize\r
- );\r
- if (NULL == OptionBuffer) {\r
- continue;\r
- }\r
-\r
- Ptr = (UINT8 *) OptionBuffer;\r
- Ptr += sizeof (UINT32);\r
-\r
- FilePathSize = *(UINT16 *) Ptr;\r
- Ptr += sizeof (UINT16);\r
-\r
- Ptr += StrSize ((CHAR16 *) Ptr);\r
-\r
- //\r
- // Now Ptr point to Device Path\r
- //\r
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Ptr;\r
- Ptr += FilePathSize;\r
-\r
- //\r
- // Now Ptr point to Optional Data\r
- //\r
- OptionalData = Ptr;\r
-\r
- if ((DeviceType == ((BBS_TABLE *) OptionalData)->DeviceType) &&\r
- (BBS_DEVICE_PATH == DevicePath->Type) &&\r
- (BBS_BBS_DP == DevicePath->SubType)\r
- ) {\r
- *OptionIndex = OrderBuffer[Index];\r
- FreePool (OrderBuffer);\r
- return OptionBuffer;\r
- } else {\r
- FreePool (OptionBuffer);\r
- }\r
- }\r
-\r
- FreePool (OrderBuffer);\r
- return NULL;\r
-}\r
-\r
/**\r
Create a dynamic page so that Legacy Device boot order\r
can be set for specified device type.\r
UpdatePageEnd (CallbackData);\r
}\r
\r
+\r
/**\r
Dispatch the display to the next page based on NewPageId.\r
\r