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
(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
IfInfo->AddressInfoCount\r
);\r
if (EFI_ERROR (Status)) {\r
- goto Exit;\r
+ FreePool (Data);\r
+ return Status;\r
}\r
\r
//\r
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
(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
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
(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
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