Update to NOT to use EFI_BROWSER_ACTION_FORM_OPEN in Callback function thus able...
authortye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 24 Aug 2011 10:55:55 +0000 (10:55 +0000)
committertye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 24 Aug 2011 10:55:55 +0000 (10:55 +0000)
Signed-off-by: tye1
Reviewed-by: lgao4
Reviewed-by: xdu2
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12198 6f19259b-4bc3-4df7-8a09-765794883524

NetworkPkg/Ip6Dxe/Ip6Config.vfr
NetworkPkg/Ip6Dxe/Ip6ConfigNv.c
NetworkPkg/Ip6Dxe/Ip6DxeStrings.uni
NetworkPkg/Ip6Dxe/Ip6NvData.h

index 902cef6..7639f5a 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   VFR file used by the IP6 configuration component.\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
@@ -28,6 +28,17 @@ formset
     name = IP6_CONFIG_IFR_NVDATA,\r
     guid = IP6_CONFIG_NVDATA_GUID;\r
 \r
+  form formid = FORMID_HEAD_FORM,\r
+    title  = STRING_TOKEN(STR_IP6_DEVICE_FORM_TITLE);\r
+\r
+    goto FORMID_MAIN_FORM,\r
+    prompt = STRING_TOKEN (STR_GET_CURRENT_SETTING),\r
+    help   = STRING_TOKEN (STR_GET_CURRENT_SETTING_HELP),\r
+    flags  = INTERACTIVE,\r
+    key    = KEY_GET_CURRENT_SETTING;\r
+\r
+  endform;\r
+\r
   form formid = FORMID_MAIN_FORM,\r
     title  = STRING_TOKEN(STR_IP6_DEVICE_FORM_TITLE);\r
 \r
index 64fb25f..d3efaa8 100644 (file)
@@ -1649,20 +1649,127 @@ 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
+  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_CHANGING) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  if ((Value == NULL) || (ActionRequest == NULL)) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  //\r
+  // Retrieve uncommitted data from Browser\r
+  //\r
+\r
+  BufferSize = sizeof (IP6_CONFIG_IFR_NVDATA);\r
+  IfrNvData = AllocateZeroPool (BufferSize);\r
+  if (IfrNvData == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  Status = EFI_SUCCESS;\r
+\r
+  ZeroMem (&OldIfrNvData, BufferSize);\r
+\r
+  HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData);\r
+\r
+  CopyMem (&OldIfrNvData, IfrNvData, BufferSize);\r
+\r
+  switch (QuestionId) {\r
+  case KEY_INTERFACE_ID:\r
+    Status = Ip6ParseInterfaceIdFromString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId);\r
+    if (EFI_ERROR (Status)) {\r
+      CreatePopUp (\r
+        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+        &Key,\r
+        L"Invalid Interface ID!",\r
+        NULL\r
+        );\r
     }\r
 \r
+    break;\r
+\r
+  case KEY_MANUAL_ADDRESS:\r
+    Status = Ip6ParseAddressListFromString (\r
+               IfrNvData->ManualAddress,\r
+               &Ip6NvData->ManualAddress,\r
+               &Ip6NvData->ManualAddressCount\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      CreatePopUp (\r
+        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+        &Key,\r
+        L"Invalid Host Addresses!",\r
+        NULL\r
+        );\r
+    }\r
+\r
+    break;\r
+\r
+  case KEY_GATEWAY_ADDRESS:\r
+    Status = Ip6ParseAddressListFromString (\r
+               IfrNvData->GatewayAddress,\r
+               &Ip6NvData->GatewayAddress,\r
+               &Ip6NvData->GatewayAddressCount\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      CreatePopUp (\r
+        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+        &Key,\r
+        L"Invalid Gateway Addresses!",\r
+        NULL\r
+        );\r
+    }\r
+\r
+    break;\r
+\r
+  case KEY_DNS_ADDRESS:\r
+    Status = Ip6ParseAddressListFromString (\r
+               IfrNvData->DnsAddress,\r
+               &Ip6NvData->DnsAddress,\r
+               &Ip6NvData->DnsAddressCount\r
+               );\r
+    if (EFI_ERROR (Status)) {\r
+      CreatePopUp (\r
+        EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+        &Key,\r
+        L"Invalid DNS Addresses!",\r
+        NULL\r
+        );\r
+    }\r
+\r
+    break;\r
+\r
+  case KEY_SAVE_CONFIG_CHANGES:\r
+    CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
+    *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\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
+    break;\r
+\r
+  case KEY_SAVE_CHANGES:\r
+    Status = Ip6ConvertIfrNvDataToConfigNvData (IfrNvData, Instance);\r
+    if (EFI_ERROR (Status)) {\r
+      break;\r
+    }\r
+\r
+    *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 the current interface info.\r
+    // Get current interface info.\r
     //\r
     Status = Ip6ConfigNvGetData (\r
                Ip6Config,\r
@@ -1671,11 +1778,11 @@ Ip6FormCallback (
                (VOID **) &Data\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
+      return Status;\r
     }\r
 \r
     //\r
-    // Generate the dynamic text opcode for host address and draw it.\r
+    // Generate dynamic text opcode for host address and draw it.\r
     //\r
     IfInfo = (EFI_IP6_CONFIG_INTERFACE_INFO *) Data;\r
     Status = Ip6ConvertAddressListToString (\r
@@ -1686,7 +1793,8 @@ Ip6FormCallback (
                IfInfo->AddressInfoCount\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      goto Exit;\r
+      FreePool (Data);\r
+      return Status;\r
     }\r
 \r
     //\r
@@ -1700,13 +1808,16 @@ Ip6FormCallback (
                IfInfo->RouteCount\r
                );\r
     if (EFI_ERROR (Status)) {\r
-      goto Exit;\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
@@ -1714,7 +1825,10 @@ Ip6FormCallback (
                (VOID **) &Data\r
                );\r
     if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
-      goto Exit;\r
+      if (Data != NULL) {\r
+        FreePool (Data);\r
+      }\r
+      return Status;\r
     }\r
 \r
     if (DataSize > 0) {\r
@@ -1729,14 +1843,20 @@ Ip6FormCallback (
                  DataSize / sizeof (EFI_IPv6_ADDRESS)\r
                  );\r
       if (EFI_ERROR (Status)) {\r
-        goto Exit;\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
@@ -1744,7 +1864,10 @@ Ip6FormCallback (
                (VOID **) &Data\r
                );\r
     if (EFI_ERROR (Status) && (Status != EFI_NOT_FOUND)) {\r
-      goto Exit;\r
+      if (Data != NULL) {\r
+        FreePool (Data);\r
+      }\r
+      return Status;\r
     }\r
 \r
     if (DataSize > 0) {\r
@@ -1759,149 +1882,33 @@ Ip6FormCallback (
                  DataSize / sizeof (EFI_IPv6_ADDRESS)\r
                  );\r
       if (EFI_ERROR (Status)) {\r
-        goto Exit;\r
+        FreePool (Data);\r
+        return Status;\r
       }\r
     }\r
 \r
-Exit:\r
-    FreePool (Data);\r
-    return Status;\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
-  }\r
-\r
-  if (Action == EFI_BROWSER_ACTION_CHANGING) {\r
-    if ((Value == NULL) || (ActionRequest == NULL)) {\r
-      return EFI_INVALID_PARAMETER;\r
-    }\r
-\r
-    //\r
-    // Retrieve uncommitted data from Browser\r
-    //\r
-\r
-    BufferSize = sizeof (IP6_CONFIG_IFR_NVDATA);\r
-    IfrNvData = AllocateZeroPool (BufferSize);\r
-    if (IfrNvData == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
+    if (Data != NULL) {\r
+      FreePool (Data);\r
     }\r
 \r
     Status = EFI_SUCCESS;\r
 \r
-    ZeroMem (&OldIfrNvData, BufferSize);\r
-\r
-    HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData);\r
-\r
-    CopyMem (&OldIfrNvData, IfrNvData, BufferSize);\r
-\r
-    switch (QuestionId) {\r
-    case KEY_INTERFACE_ID:\r
-      Status = Ip6ParseInterfaceIdFromString (IfrNvData->InterfaceId, &Ip6NvData->InterfaceId);\r
-      if (EFI_ERROR (Status)) {\r
-        CreatePopUp (\r
-          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-          &Key,\r
-          L"Invalid Interface ID!",\r
-          NULL\r
-          );\r
-      }\r
-\r
-      break;\r
-\r
-    case KEY_MANUAL_ADDRESS:\r
-      Status = Ip6ParseAddressListFromString (\r
-                 IfrNvData->ManualAddress,\r
-                 &Ip6NvData->ManualAddress,\r
-                 &Ip6NvData->ManualAddressCount\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        CreatePopUp (\r
-          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-          &Key,\r
-          L"Invalid Host Addresses!",\r
-          NULL\r
-          );\r
-      }\r
-\r
-      break;\r
-\r
-    case KEY_GATEWAY_ADDRESS:\r
-      Status = Ip6ParseAddressListFromString (\r
-                 IfrNvData->GatewayAddress,\r
-                 &Ip6NvData->GatewayAddress,\r
-                 &Ip6NvData->GatewayAddressCount\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        CreatePopUp (\r
-          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-          &Key,\r
-          L"Invalid Gateway Addresses!",\r
-          NULL\r
-          );\r
-      }\r
-\r
-      break;\r
+    break;\r
 \r
-    case KEY_DNS_ADDRESS:\r
-      Status = Ip6ParseAddressListFromString (\r
-                 IfrNvData->DnsAddress,\r
-                 &Ip6NvData->DnsAddress,\r
-                 &Ip6NvData->DnsAddressCount\r
-                 );\r
-      if (EFI_ERROR (Status)) {\r
-        CreatePopUp (\r
-          EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
-          &Key,\r
-          L"Invalid DNS Addresses!",\r
-          NULL\r
-          );\r
-      }\r
-\r
-      break;\r
-\r
-    case KEY_SAVE_CONFIG_CHANGES:\r
-      CopyMem (&OldIfrNvData, IfrNvData, sizeof (IP6_CONFIG_IFR_NVDATA));\r
-      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\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
-      break;\r
-\r
-    case KEY_SAVE_CHANGES:\r
-      Status = Ip6ConvertIfrNvDataToConfigNvData (IfrNvData, Instance);\r
-      if (EFI_ERROR (Status)) {\r
-        break;\r
-      }\r
-\r
-      *ActionRequest = EFI_BROWSER_ACTION_REQUEST_EXIT;\r
-      break;\r
-\r
-    default:\r
-      break;\r
-    }\r
-\r
-    if (!EFI_ERROR (Status)) {\r
-      //\r
-      // Pass changed uncommitted data back to Form Browser.\r
-      //\r
-      BufferSize = sizeof (IP6_CONFIG_IFR_NVDATA);\r
-      HiiSetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL);\r
-    }\r
+  default:\r
+    break;\r
+  }\r
 \r
-    FreePool (IfrNvData);\r
-    return Status;\r
+  if (!EFI_ERROR (Status)) {\r
+    //\r
+    // Pass changed uncommitted data back to Form Browser.\r
+    //\r
+    BufferSize = sizeof (IP6_CONFIG_IFR_NVDATA);\r
+    HiiSetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL);\r
   }\r
 \r
-  //\r
-  // All other action return unsupported.\r
-  //\r
-  return EFI_UNSUPPORTED;\r
+  FreePool (IfrNvData);\r
+  return Status;\r
 }\r
 \r
 /**\r
index e95f2f9..01f3e99 100644 (file)
Binary files a/NetworkPkg/Ip6Dxe/Ip6DxeStrings.uni and b/NetworkPkg/Ip6Dxe/Ip6DxeStrings.uni differ
index 715473f..6c981d2 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   NVData structure used by the IP6 configuration component.\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
@@ -23,6 +23,7 @@
 \r
 #define FORMID_MAIN_FORM          1\r
 #define FORMID_MANUAL_CONFIG_FORM 2\r
+#define FORMID_HEAD_FORM          3\r
 \r
 #define IP6_POLICY_AUTO           0\r
 #define IP6_POLICY_MANUAL         1\r
@@ -35,6 +36,7 @@
 #define KEY_SAVE_CHANGES          0x105\r
 #define KEY_SAVE_CONFIG_CHANGES   0x106\r
 #define KEY_IGNORE_CONFIG_CHANGES 0x107\r
+#define KEY_GET_CURRENT_SETTING   0x108\r
 \r
 #define HOST_ADDRESS_LABEL        0x9000\r
 #define ROUTE_TABLE_LABEL         0xa000\r