mirror of https://github.com/acidanthera/audk.git
Fix following problems about VLAN driver:
1. "VLAN Configuration” form crash after 'reconnect -r' 2. disconnect VLAN driver from the managed device will return EFI_NOT_FOUND 3. disconnect MNP driver from the managed device, VLAN driver couldn't be stopped. Signed-off-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Ni, Ruiyu <ruiyu.ni@intel.com> Reviewed-by: Gao, Liming <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15174 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
f20fc992ae
commit
ca4e58d8e3
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
The driver binding for VLAN configuration module.
|
||||
|
||||
Copyright (c) 2009, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions
|
||||
of the BSD License which accompanies this distribution. The full
|
||||
|
@ -275,10 +275,13 @@ VlanConfigDriverBindingStop (
|
|||
}
|
||||
ASSERT (PrivateData->Signature == VLAN_CONFIG_PRIVATE_DATA_SIGNATURE);
|
||||
|
||||
//
|
||||
// Uninstall VLAN configuration Form
|
||||
//
|
||||
UninstallVlanConfigForm (PrivateData);
|
||||
if (NumberOfChildren != 0) {
|
||||
if (NumberOfChildren != 1 || ChildHandleBuffer[0] != PrivateData->DriverHandle) {
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
return UninstallVlanConfigForm (PrivateData);
|
||||
}
|
||||
|
||||
//
|
||||
// Uninstall the private GUID
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
HII Config Access protocol implementation of VLAN configuration module.
|
||||
|
||||
Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions
|
||||
of the BSD License which accompanies this distribution. The full
|
||||
|
@ -588,12 +588,62 @@ InstallVlanConfigForm (
|
|||
|
||||
@param[in, out] PrivateData Points to VLAN configuration private data.
|
||||
|
||||
@retval EFI_SUCCESS HII Form has been uninstalled successfully.
|
||||
@retval Others Other errors as indicated.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFI_STATUS
|
||||
UninstallVlanConfigForm (
|
||||
IN OUT VLAN_CONFIG_PRIVATE_DATA *PrivateData
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_VLAN_CONFIG_PROTOCOL *VlanConfig;
|
||||
|
||||
//
|
||||
// End the parent-child relationship.
|
||||
//
|
||||
Status = gBS->CloseProtocol (
|
||||
PrivateData->ControllerHandle,
|
||||
&gEfiVlanConfigProtocolGuid,
|
||||
PrivateData->ImageHandle,
|
||||
PrivateData->DriverHandle
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Uninstall HII Config Access Protocol
|
||||
//
|
||||
if (PrivateData->DriverHandle != NULL) {
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
PrivateData->DriverHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
PrivateData->ChildDevicePath,
|
||||
&gEfiHiiConfigAccessProtocolGuid,
|
||||
&PrivateData->ConfigAccess,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
gBS->OpenProtocol (
|
||||
PrivateData->ControllerHandle,
|
||||
&gEfiVlanConfigProtocolGuid,
|
||||
(VOID **)&VlanConfig,
|
||||
PrivateData->ImageHandle,
|
||||
PrivateData->DriverHandle,
|
||||
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
PrivateData->DriverHandle = NULL;
|
||||
|
||||
if (PrivateData->ChildDevicePath != NULL) {
|
||||
FreePool (PrivateData->ChildDevicePath);
|
||||
PrivateData->ChildDevicePath = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Free MAC string
|
||||
//
|
||||
|
@ -609,34 +659,5 @@ UninstallVlanConfigForm (
|
|||
HiiRemovePackages (PrivateData->HiiHandle);
|
||||
PrivateData->HiiHandle = NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// End the parent-child relationship.
|
||||
//
|
||||
gBS->CloseProtocol (
|
||||
PrivateData->ControllerHandle,
|
||||
&gEfiVlanConfigProtocolGuid,
|
||||
PrivateData->ImageHandle,
|
||||
PrivateData->DriverHandle
|
||||
);
|
||||
|
||||
//
|
||||
// Uninstall HII Config Access Protocol
|
||||
//
|
||||
if (PrivateData->DriverHandle != NULL) {
|
||||
gBS->UninstallMultipleProtocolInterfaces (
|
||||
PrivateData->DriverHandle,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
PrivateData->ChildDevicePath,
|
||||
&gEfiHiiConfigAccessProtocolGuid,
|
||||
&PrivateData->ConfigAccess,
|
||||
NULL
|
||||
);
|
||||
PrivateData->DriverHandle = NULL;
|
||||
|
||||
if (PrivateData->ChildDevicePath != NULL) {
|
||||
FreePool (PrivateData->ChildDevicePath);
|
||||
PrivateData->ChildDevicePath = NULL;
|
||||
}
|
||||
}
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/** @file
|
||||
Header file for driver binding protocol and HII config access protocol.
|
||||
|
||||
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions
|
||||
of the BSD License which accompanies this distribution. The full
|
||||
|
@ -282,8 +282,11 @@ InstallVlanConfigForm (
|
|||
|
||||
@param[in, out] PrivateData Points to VLAN configuration private data.
|
||||
|
||||
@retval EFI_SUCCESS HII Form has been uninstalled successfully.
|
||||
@retval Others Other errors as indicated.
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFI_STATUS
|
||||
UninstallVlanConfigForm (
|
||||
IN OUT VLAN_CONFIG_PRIVATE_DATA *PrivateData
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue