/** @file\r
The driver binding for VLAN configuration module.\r
\r
-Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions\r
of the BSD License which accompanies this distribution. The full\r
}\r
ASSERT (PrivateData->Signature == VLAN_CONFIG_PRIVATE_DATA_SIGNATURE);\r
\r
- //\r
- // Uninstall VLAN configuration Form\r
- //\r
- UninstallVlanConfigForm (PrivateData);\r
+ if (NumberOfChildren != 0) {\r
+ if (NumberOfChildren != 1 || ChildHandleBuffer[0] != PrivateData->DriverHandle) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+ \r
+ return UninstallVlanConfigForm (PrivateData);\r
+ }\r
\r
//\r
// Uninstall the private GUID\r
/** @file\r
HII Config Access protocol implementation of VLAN configuration module.\r
\r
-Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions\r
of the BSD License which accompanies this distribution. The full\r
\r
@param[in, out] PrivateData Points to VLAN configuration private data.\r
\r
+ @retval EFI_SUCCESS HII Form has been uninstalled successfully.\r
+ @retval Others Other errors as indicated.\r
+\r
**/\r
-VOID\r
+EFI_STATUS\r
UninstallVlanConfigForm (\r
IN OUT VLAN_CONFIG_PRIVATE_DATA *PrivateData\r
)\r
{\r
- //\r
- // Free MAC string\r
- //\r
- if (PrivateData->MacString != NULL) {\r
- FreePool (PrivateData->MacString);\r
- PrivateData->MacString = NULL;\r
- }\r
-\r
- //\r
- // Uninstall HII package list\r
- //\r
- if (PrivateData->HiiHandle != NULL) {\r
- HiiRemovePackages (PrivateData->HiiHandle);\r
- PrivateData->HiiHandle = NULL;\r
- }\r
-\r
+ EFI_STATUS Status;\r
+ EFI_VLAN_CONFIG_PROTOCOL *VlanConfig;\r
+ \r
//\r
// End the parent-child relationship.\r
//\r
- gBS->CloseProtocol (\r
- PrivateData->ControllerHandle,\r
- &gEfiVlanConfigProtocolGuid,\r
- PrivateData->ImageHandle,\r
- PrivateData->DriverHandle\r
- );\r
+ Status = gBS->CloseProtocol (\r
+ PrivateData->ControllerHandle,\r
+ &gEfiVlanConfigProtocolGuid,\r
+ PrivateData->ImageHandle,\r
+ PrivateData->DriverHandle\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
\r
//\r
// Uninstall HII Config Access Protocol\r
//\r
if (PrivateData->DriverHandle != NULL) {\r
- gBS->UninstallMultipleProtocolInterfaces (\r
- PrivateData->DriverHandle,\r
- &gEfiDevicePathProtocolGuid,\r
- PrivateData->ChildDevicePath,\r
- &gEfiHiiConfigAccessProtocolGuid,\r
- &PrivateData->ConfigAccess,\r
- NULL\r
- );\r
+ Status = gBS->UninstallMultipleProtocolInterfaces (\r
+ PrivateData->DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ PrivateData->ChildDevicePath,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &PrivateData->ConfigAccess,\r
+ NULL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ gBS->OpenProtocol (\r
+ PrivateData->ControllerHandle,\r
+ &gEfiVlanConfigProtocolGuid,\r
+ (VOID **)&VlanConfig,\r
+ PrivateData->ImageHandle,\r
+ PrivateData->DriverHandle,\r
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+ );\r
+ return Status;\r
+ }\r
PrivateData->DriverHandle = NULL;\r
\r
if (PrivateData->ChildDevicePath != NULL) {\r
PrivateData->ChildDevicePath = NULL;\r
}\r
}\r
+\r
+ //\r
+ // Free MAC string\r
+ //\r
+ if (PrivateData->MacString != NULL) {\r
+ FreePool (PrivateData->MacString);\r
+ PrivateData->MacString = NULL;\r
+ }\r
+\r
+ //\r
+ // Uninstall HII package list\r
+ //\r
+ if (PrivateData->HiiHandle != NULL) {\r
+ HiiRemovePackages (PrivateData->HiiHandle);\r
+ PrivateData->HiiHandle = NULL;\r
+ }\r
+ return EFI_SUCCESS;\r
}\r