/** @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
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
\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
*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