NULL // Mode\r
};\r
\r
-EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = { \r
+EFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = {\r
EfiSimpleNetworkStopped, // State\r
NET_ETHER_ADDR_LEN, // HwAddressSize\r
NET_ETHER_HEADER_SIZE, // MediaHeaderSize\r
EFI_STATUS Status;\r
EMU_SNP_PRIVATE_DATA *Private = NULL;\r
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
+ VOID *EmuIoThunk;\r
\r
//\r
// Complete all outstanding transactions to Controller.\r
}\r
\r
Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (Snp);\r
- Status = Private->IoThunk->Close (Private->IoThunk);\r
+ ASSERT (Private->DeviceHandle == ChildHandleBuffer[0]);\r
+ ASSERT (Private->EfiHandle == ControllerHandle);\r
\r
Status = gBS->CloseProtocol(\r
- ChildHandleBuffer[0],\r
+ ControllerHandle,\r
&gEmuIoThunkProtocolGuid,\r
This->DriverBindingHandle,\r
Private->DeviceHandle\r
);\r
+ ASSERT_EFI_ERROR (Status);\r
\r
Status = gBS->UninstallMultipleProtocolInterfaces(\r
- ChildHandleBuffer[0],\r
+ Private->DeviceHandle,\r
&gEfiSimpleNetworkProtocolGuid, &Private->Snp,\r
&gEfiDevicePathProtocolGuid, Private->DevicePath,\r
NULL\r
);\r
+ if (EFI_ERROR (Status)) {\r
+ gBS->OpenProtocol (\r
+ ControllerHandle,\r
+ &gEmuIoThunkProtocolGuid,\r
+ &EmuIoThunk,\r
+ This->DriverBindingHandle,\r
+ Private->DeviceHandle,\r
+ EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER\r
+ );\r
+ } else {\r
+ Status = Private->IoThunk->Close (Private->IoThunk);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ FreePool (Private->DevicePath);\r
+ FreeUnicodeStringTable (Private->ControllerNameTable);\r
+ FreePool (Private);\r
+ }\r
\r
- FreePool (Private->DevicePath);\r
- FreeUnicodeStringTable (Private->ControllerNameTable);\r
- FreePool (Private);\r
-\r
- return EFI_SUCCESS;\r
+ return Status;\r
}\r
\r
\r