mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
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
|
/** @file
|
||||||
The driver binding for VLAN configuration module.
|
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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions
|
are licensed and made available under the terms and conditions
|
||||||
of the BSD License which accompanies this distribution. The full
|
of the BSD License which accompanies this distribution. The full
|
||||||
@ -275,10 +275,13 @@ VlanConfigDriverBindingStop (
|
|||||||
}
|
}
|
||||||
ASSERT (PrivateData->Signature == VLAN_CONFIG_PRIVATE_DATA_SIGNATURE);
|
ASSERT (PrivateData->Signature == VLAN_CONFIG_PRIVATE_DATA_SIGNATURE);
|
||||||
|
|
||||||
//
|
if (NumberOfChildren != 0) {
|
||||||
// Uninstall VLAN configuration Form
|
if (NumberOfChildren != 1 || ChildHandleBuffer[0] != PrivateData->DriverHandle) {
|
||||||
//
|
return EFI_DEVICE_ERROR;
|
||||||
UninstallVlanConfigForm (PrivateData);
|
}
|
||||||
|
|
||||||
|
return UninstallVlanConfigForm (PrivateData);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Uninstall the private GUID
|
// Uninstall the private GUID
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
HII Config Access protocol implementation of VLAN configuration module.
|
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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions
|
are licensed and made available under the terms and conditions
|
||||||
of the BSD License which accompanies this distribution. The full
|
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.
|
@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 (
|
UninstallVlanConfigForm (
|
||||||
IN OUT VLAN_CONFIG_PRIVATE_DATA *PrivateData
|
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
|
// Free MAC string
|
||||||
//
|
//
|
||||||
@ -609,34 +659,5 @@ UninstallVlanConfigForm (
|
|||||||
HiiRemovePackages (PrivateData->HiiHandle);
|
HiiRemovePackages (PrivateData->HiiHandle);
|
||||||
PrivateData->HiiHandle = NULL;
|
PrivateData->HiiHandle = NULL;
|
||||||
}
|
}
|
||||||
|
return EFI_SUCCESS;
|
||||||
//
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Header file for driver binding protocol and HII config access protocol.
|
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
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions
|
are licensed and made available under the terms and conditions
|
||||||
of the BSD License which accompanies this distribution. The full
|
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.
|
@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 (
|
UninstallVlanConfigForm (
|
||||||
IN OUT VLAN_CONFIG_PRIVATE_DATA *PrivateData
|
IN OUT VLAN_CONFIG_PRIVATE_DATA *PrivateData
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user