IN BMM_CALLBACK_DATA *CallbackData\r
)\r
{\r
- BM_MENU_ENTRY *NewMenuEntry;\r
- UINT16 Index;\r
- VOID *OptionsOpCodeHandle;\r
+ BM_MENU_ENTRY *NewMenuEntry;\r
+ UINT16 Index;\r
+ UINT16 OptionOrderIndex;\r
+ VOID *OptionsOpCodeHandle;\r
+ UINTN DeviceType;\r
+ BM_LOAD_CONTEXT *NewLoadContext;\r
\r
+ DeviceType = (UINTN) -1;\r
CallbackData->BmmAskSaveOrNot = TRUE;\r
\r
UpdatePageStart (CallbackData);\r
ASSERT (OptionsOpCodeHandle != NULL);\r
\r
for (\r
- Index = 0;\r
+ Index = 0, OptionOrderIndex = 0;\r
(\r
(Index < OptionMenu->MenuNumber) &&\r
- (Index <\r
+ (OptionOrderIndex <\r
(\r
sizeof (CallbackData->BmmFakeNvData.OptionOrder) /\r
sizeof (CallbackData->BmmFakeNvData.OptionOrder[0])\r
);\r
Index++\r
) {\r
- NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\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
+ }\r
+ }\r
HiiCreateOneOfOptionOpCode (\r
OptionsOpCodeHandle,\r
NewMenuEntry->DisplayStringToken,\r
EFI_IFR_TYPE_NUM_SIZE_32,\r
(UINT32) (NewMenuEntry->OptionNumber + 1)\r
);\r
- CallbackData->BmmFakeNvData.OptionOrder[Index] = (UINT32) (NewMenuEntry->OptionNumber + 1);\r
+ CallbackData->BmmFakeNvData.OptionOrder[OptionOrderIndex++] = (UINT32) (NewMenuEntry->OptionNumber + 1);\r
}\r
\r
if (OptionMenu->MenuNumber > 0) {\r
CallbackData->BmmAskSaveOrNot = TRUE;\r
UpdatePageStart (CallbackData);\r
\r
- DisMap = CallbackData->BmmOldFakeNVData.DisableMap;\r
+ DisMap = ZeroMem (CallbackData->BmmOldFakeNVData.DisableMap, sizeof (CallbackData->BmmOldFakeNVData.DisableMap));\r
\r
- SetMem (DisMap, 32, 0);\r
//\r
// Create oneof option list\r
//\r
for (Index = 0; Index < OptionMenu->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (OptionMenu, Index);\r
//\r
- // Create OneOf for each legacy device, select the first one by default\r
+ // Create OneOf for each legacy device\r
//\r
HiiCreateOneOfOptionOpCode (\r
OptionsOpCodeHandle,\r
NewMenuEntry->DisplayStringToken,\r
- (UINT8) ((Index == 0) ? EFI_IFR_OPTION_DEFAULT : 0),\r
+ 0,\r
EFI_IFR_TYPE_NUM_SIZE_8,\r
- (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->Index\r
+ (UINT8) ((BM_LEGACY_DEVICE_CONTEXT *) NewMenuEntry->VariableContext)->BbsIndex\r
);\r
}\r
\r
//\r
- // for item "Disabled"\r
+ // Create OneOf for item "Disabled"\r
//\r
HiiCreateOneOfOptionOpCode (\r
OptionsOpCodeHandle,\r