/** @file\r
Network library.\r
\r
-Copyright (c) 2005 - 2012, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2013, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
EFI_HANDLE *DeviceHandleBuffer;\r
UINTN DeviceHandleCount;\r
UINTN Index;\r
+ UINTN Index2;\r
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;\r
EFI_COMPONENT_NAME_PROTOCOL *ComponentName;\r
EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;\r
return Status;\r
}\r
\r
- //\r
- // Disconnect the driver specified by ImageHandle from all\r
- // the devices in the handle database.\r
- //\r
- for (Index = 0; Index < DeviceHandleCount; Index++) {\r
- Status = gBS->DisconnectController (\r
- DeviceHandleBuffer[Index],\r
- ImageHandle,\r
- NULL\r
- );\r
- }\r
-\r
- //\r
- // Uninstall all the protocols installed in the driver entry point\r
- //\r
for (Index = 0; Index < DeviceHandleCount; Index++) {\r
Status = gBS->HandleProtocol (\r
DeviceHandleBuffer[Index],\r
&gEfiDriverBindingProtocolGuid,\r
(VOID **) &DriverBinding\r
);\r
-\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
if (DriverBinding->ImageHandle != ImageHandle) {\r
continue;\r
}\r
-\r
+ \r
+ //\r
+ // Disconnect the driver specified by ImageHandle from all\r
+ // the devices in the handle database.\r
+ //\r
+ for (Index2 = 0; Index2 < DeviceHandleCount; Index2++) {\r
+ Status = gBS->DisconnectController (\r
+ DeviceHandleBuffer[Index2],\r
+ DriverBinding->DriverBindingHandle,\r
+ NULL\r
+ );\r
+ }\r
+ \r
+ //\r
+ // Uninstall all the protocols installed in the driver entry point\r
+ // \r
gBS->UninstallProtocolInterface (\r
- ImageHandle,\r
+ DriverBinding->DriverBindingHandle,\r
&gEfiDriverBindingProtocolGuid,\r
DriverBinding\r
);\r
+ \r
Status = gBS->HandleProtocol (\r
DeviceHandleBuffer[Index],\r
&gEfiComponentNameProtocolGuid,\r
);\r
if (!EFI_ERROR (Status)) {\r
gBS->UninstallProtocolInterface (\r
- ImageHandle,\r
+ DriverBinding->DriverBindingHandle,\r
&gEfiComponentNameProtocolGuid,\r
ComponentName\r
);\r
);\r
if (!EFI_ERROR (Status)) {\r
gBS->UninstallProtocolInterface (\r
- ImageHandle,\r
+ DriverBinding->DriverBindingHandle,\r
&gEfiComponentName2ProtocolGuid,\r
ComponentName2\r
);\r
// Try to get SNP mode from MNP\r
//\r
Status = Mnp->GetModeData (Mnp, NULL, &SnpModeData);\r
- if (EFI_ERROR (Status)) {\r
+ if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) {\r
MnpSb->DestroyChild (MnpSb, MnpChildHandle);\r
return Status;\r
}\r