]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
BDS enhancement: enumerate & show all legacy boot options in Boot Manager so that...
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / BdsDxe / BootMaint / UpdatePage.c
index 24a444d24f9576e7167798b97165d9784950e9ab..aaa33600426bc36aa83690ca647c46414b98983a 100644 (file)
@@ -535,10 +535,14 @@ UpdateOrderPage (
   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
@@ -551,10 +555,10 @@ UpdateOrderPage (
   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
@@ -563,7 +567,20 @@ UpdateOrderPage (
         );\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
@@ -571,7 +588,7 @@ UpdateOrderPage (
       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
@@ -1241,9 +1258,8 @@ UpdateSetLegacyDeviceOrderPage (
   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
@@ -1311,19 +1327,19 @@ UpdateSetLegacyDeviceOrderPage (
   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