]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/PlatformDriOverrideDxe/PlatDriOverrideDxe.c
Per UEFI spec, on CallBack action EFI_BROWSER_ACTION_CHANGING, the return value of...
[mirror_edk2.git] / MdeModulePkg / Universal / PlatformDriOverrideDxe / PlatDriOverrideDxe.c
index 20bc43c345aefbaad36204673d2b21dde8cd7d36..ab8a000f1360916ae4a421974b99934f4a3e0cbf 100644 (file)
@@ -1334,17 +1334,25 @@ PlatOverMngrCallback (
   EFI_INPUT_KEY                             Key;\r
   PLAT_OVER_MNGR_DATA                       *FakeNvData;\r
 \r
+  if ((Action != EFI_BROWSER_ACTION_CHANGING) && (Action != EFI_BROWSER_ACTION_CHANGED)) {\r
+    //\r
+    // All other action return unsupported.\r
+    //\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
+  FakeNvData = &Private->FakeNvData;\r
+  if (!HiiGetBrowserData (&gPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData)) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
   if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
-    Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
-    FakeNvData = &Private->FakeNvData;\r
-    if (!HiiGetBrowserData (&gPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData)) {\r
-      return EFI_NOT_FOUND;\r
+    if (Value == NULL) {\r
+      return EFI_INVALID_PARAMETER;\r
     }\r
-\r
-    if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||\r
-        KeyValue == KEY_VALUE_DEVICE_FILTER ||\r
-        KeyValue == KEY_VALUE_DRIVER_GOTO_PREVIOUS\r
-        ) {\r
+    \r
+    if (KeyValue == KEY_VALUE_DRIVER_GOTO_PREVIOUS) {\r
       UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);\r
       //\r
       // Update page title string\r
@@ -1380,15 +1388,6 @@ PlatOverMngrCallback (
       }\r
     }\r
 \r
-    if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {\r
-      Status = CommintChanges (Private, KeyValue, FakeNvData);\r
-      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
-      if (EFI_ERROR (Status)) {\r
-        CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Single Override Info too large, Saving Error!", NULL);\r
-        return EFI_DEVICE_ERROR;\r
-      }\r
-    }\r
-\r
     if (KeyValue == KEY_VALUE_DEVICE_CLEAR) {\r
       //\r
       // Deletes all environment variable(s) that contain the override mappings info\r
@@ -1397,18 +1396,40 @@ PlatOverMngrCallback (
       Status = SaveOverridesMapping (&mMappingDataBase);\r
       UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);\r
     }\r
-    //\r
-    // Pass changed uncommitted data back to Form Browser\r
-    //\r
-    HiiSetBrowserData (&gPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);\r
+  } else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
+    switch (KeyValue) {\r
+    case KEY_VALUE_DEVICE_REFRESH:\r
+    case KEY_VALUE_DEVICE_FILTER:\r
+      UpdateDeviceSelectPage (Private, KeyValue, FakeNvData);\r
+      //\r
+      // Update page title string\r
+      //\r
+      NewStringToken = STRING_TOKEN (STR_TITLE);\r
+      if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path", NULL) == 0) {\r
+        ASSERT (FALSE);\r
+      }\r
+    break;\r
+    \r
+    case KEY_VALUE_ORDER_SAVE_AND_EXIT:\r
+      Status = CommintChanges (Private, KeyValue, FakeNvData);\r
+      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+      if (EFI_ERROR (Status)) {\r
+        CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Single Override Info too large, Saving Error!", NULL);\r
+        return EFI_DEVICE_ERROR;\r
+      }\r
+    break;\r
 \r
-    return EFI_SUCCESS;\r
-  } \r
+    default:\r
+    break;\r
+    }\r
+  }\r
 \r
   //\r
-  // All other action return unsupported.\r
+  // Pass changed uncommitted data back to Form Browser\r
   //\r
-  return EFI_UNSUPPORTED;\r
+  HiiSetBrowserData (&gPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);\r
+\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 /**\r