]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Ip6Dxe/Ip6ConfigNv.c
Update the Ip6Dxe and IScsiDxe to keep the old behaviors after add exit action when...
[mirror_edk2.git] / NetworkPkg / Ip6Dxe / Ip6ConfigNv.c
index ef5ea2e13a408476bf32f08eb83e543db75a15a9..7bc049ca45319597098dc6ffa7e3e9b72f0f6cdb 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Helper functions for configuring or obtaining the parameters relating to IP6.\r
 \r
-  Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -1649,130 +1649,12 @@ Ip6FormCallback (
   Instance  = IP6_CONFIG_INSTANCE_FROM_FORM_CALLBACK (Private);\r
   Ip6NvData = &Instance->Ip6NvData;\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {\r
-    //\r
-    // Update main Form when main Form is opened.\r
-    // This will be done only in FORM_OPEN CallBack of question with KEY_INTERFACE_ID from main Form.\r
-    //\r
-    if (QuestionId != KEY_INTERFACE_ID) {\r
-      return EFI_SUCCESS;\r
-    }\r
-\r
-    Ip6Config = &Instance->Ip6Config;\r
-    HiiHandle = Instance->CallbackInfo.RegisteredHandle;\r
-\r
-    //\r
-    // Get the current interface info.\r
-    //\r
-    Status = Ip6ConfigNvGetData (\r
-               Ip6Config,\r
-               Ip6ConfigDataTypeInterfaceInfo,\r
-               &DataSize,\r
-               (VOID **) &Data\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
-    }\r
-\r
-    //\r
-    // Generate the dynamic text opcode for host address and draw it.\r
-    //\r
-    IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data;\r
-    Status = Ip6ConvertAddressListToString (\r
-               PortString,\r
-               HiiHandle,\r
-               Ip6ConfigNvHostAddress,\r
-               IfInfo->AddressInfo,\r
-               IfInfo->AddressInfoCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
-    }\r
-\r
-    //\r
-    // Generate the dynamic text opcode for route table and draw it.\r
-    //\r
-    Status = Ip6ConvertAddressListToString (\r
-               PortString,\r
-               HiiHandle,\r
-               Ip6ConfigNvRouteTable,\r
-               IfInfo->RouteTable,\r
-               IfInfo->RouteCount\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
-    }\r
-\r
-    //\r
-    // Get DNS server list.\r
-    //\r
-    DataSize = 0;\r
-    Status = Ip6ConfigNvGetData (\r
-               Ip6Config,\r
-               Ip6ConfigDataTypeDnsServer,\r
-               &DataSize,\r
-               (VOID **) &Data\r
-               );\r
-    if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
-      goto Exit;\r
-    }\r
-\r
-    if (DataSize > 0) {\r
-      //\r
-      // Generate the dynamic text opcode for DNS server and draw it.\r
-      //\r
-      Status = Ip6ConvertAddressListToString (\r
-                 PortString,\r
-                 HiiHandle,\r
-                 Ip6ConfigNvDnsAddress,\r
-                 Data,\r
-                 DataSize / sizeof (EFI_IPv6_ADDRESS)\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        goto Exit;\r
-      }\r
-    }\r
-\r
-    //\r
-    // Get gateway adderss list.\r
-    //\r
-    DataSize = 0;\r
-    Status = Ip6ConfigNvGetData (\r
-               Ip6Config,\r
-               Ip6ConfigDataTypeGateway,\r
-               &DataSize,\r
-               (VOID **) &Data\r
-               );\r
-    if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
-      goto Exit;\r
-    }\r
-\r
-    if (DataSize > 0) {\r
-      //\r
-      // Generate the dynamic text opcode for gateway and draw it.\r
-      //\r
-      Status = Ip6ConvertAddressListToString (\r
-                 PortString,\r
-                 HiiHandle,\r
-                 Ip6ConfigNvGatewayAddress,\r
-                 Data,\r
-                 DataSize / sizeof (EFI_IPv6_ADDRESS)\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        goto Exit;\r
-      }\r
-    }\r
-\r
-Exit:\r
-    FreePool (Data);\r
-    return Status;\r
+  if ((Action == EFI_BROWSER_ACTION_FORM_OPEN) || (Action == EFI_BROWSER_ACTION_FORM_CLOSE)){\r
+    return EFI_SUCCESS;\r
   }\r
 \r
-  if (Action == EFI_BROWSER_ACTION_FORM_CLOSE) {\r
-    //\r
-    // Do nothing for UEFI FORM_CLOSE action\r
-    //\r
-    return EFI_SUCCESS;\r
+  if (Action != EFI_BROWSER_ACTION_CHANGING) {\r
+    return EFI_UNSUPPORTED;\r
   }\r
 \r
   if ((Value == NULL) || (ActionRequest == NULL)) {\r
@@ -1864,12 +1746,12 @@ Exit:
 \r
   case KEY_SAVE_CONFIG_CHANGES:\r
     CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
     break;\r
 \r
   case KEY_IGNORE_CONFIG_CHANGES:\r
     CopyMem (IfrNvData, &OldIfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
-    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
+    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD;\r
     break;\r
 \r
   case KEY_SAVE_CHANGES:\r
@@ -1881,6 +1763,138 @@ Exit:
     *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
     break;\r
 \r
+  case KEY_GET_CURRENT_SETTING:\r
+    Ip6Config = &Instance->Ip6Config;\r
+    HiiHandle = Instance->CallbackInfo.RegisteredHandle;\r
+    Data      = NULL;\r
+\r
+    //\r
+    // Get current interface info.\r
+    //\r
+    Status = Ip6ConfigNvGetData (\r
+               Ip6Config,\r
+               Ip6ConfigDataTypeInterfaceInfo,\r
+               &DataSize,\r
+               (VOID **) &Data\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
+\r
+    //\r
+    // Generate dynamic text opcode for host address and draw it.\r
+    //\r
+    IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data;\r
+    Status = Ip6ConvertAddressListToString (\r
+               PortString,\r
+               HiiHandle,\r
+               Ip6ConfigNvHostAddress,\r
+               IfInfo->AddressInfo,\r
+               IfInfo->AddressInfoCount\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      FreePool (Data);\r
+      return Status;\r
+    }\r
+\r
+    //\r
+    // Generate the dynamic text opcode for route table and draw it.\r
+    //\r
+    Status = Ip6ConvertAddressListToString (\r
+               PortString,\r
+               HiiHandle,\r
+               Ip6ConfigNvRouteTable,\r
+               IfInfo->RouteTable,\r
+               IfInfo->RouteCount\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      FreePool (Data);\r
+      return Status;\r
+    }\r
+\r
+    //\r
+    // Get DNS server list.\r
+    //\r
+    FreePool (Data);\r
+    DataSize = 0;\r
+    Data = NULL;\r
+    Status = Ip6ConfigNvGetData (\r
+               Ip6Config,\r
+               Ip6ConfigDataTypeDnsServer,\r
+               &DataSize,\r
+               (VOID **) &Data\r
+               );\r
+    if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
+      if (Data != NULL) {\r
+        FreePool (Data);\r
+      }\r
+      return Status;\r
+    }\r
+\r
+    if (DataSize > 0) {\r
+      //\r
+      // Generate the dynamic text opcode for DNS server and draw it.\r
+      //\r
+      Status = Ip6ConvertAddressListToString (\r
+                 PortString,\r
+                 HiiHandle,\r
+                 Ip6ConfigNvDnsAddress,\r
+                 Data,\r
+                 DataSize / sizeof (EFI_IPv6_ADDRESS)\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        FreePool (Data);\r
+        return Status;\r
+      }\r
+    }\r
+\r
+    //\r
+    // Get gateway adderss list.\r
+    //\r
+    if (Data != NULL) {\r
+      FreePool (Data);\r
+    }\r
+\r
+    DataSize = 0;\r
+    Data = NULL;\r
+    Status = Ip6ConfigNvGetData (\r
+               Ip6Config,\r
+               Ip6ConfigDataTypeGateway,\r
+               &DataSize,\r
+               (VOID **) &Data\r
+               );\r
+    if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
+      if (Data != NULL) {\r
+        FreePool (Data);\r
+      }\r
+      return Status;\r
+    }\r
+\r
+    if (DataSize > 0) {\r
+      //\r
+      // Generate the dynamic text opcode for gateway and draw it.\r
+      //\r
+      Status = Ip6ConvertAddressListToString (\r
+                 PortString,\r
+                 HiiHandle,\r
+                 Ip6ConfigNvGatewayAddress,\r
+                 Data,\r
+                 DataSize / sizeof (EFI_IPv6_ADDRESS)\r
+                 );\r
+      if (EFI_ERROR (Status)) {\r
+        FreePool (Data);\r
+        return Status;\r
+      }\r
+    }\r
+\r
+    if (Data != NULL) {\r
+      FreePool (Data);\r
+    }\r
+\r
+    Status = EFI_SUCCESS;\r
+\r
+    break;\r
+\r
   default:\r
     break;\r
   }\r