Ehc = EHC_FROM_THIS (Usb2Hc);\r
PciIo = Ehc->PciIo;\r
\r
- //\r
- // Stop AsyncRequest Polling timer then stop the EHCI driver\r
- // and uninstall the EHCI protocl.\r
- //\r
- gBS->SetTimer (Ehc->PollTimer, TimerCancel, EHC_ASYNC_POLL_INTERVAL);\r
- EhcHaltHC (Ehc, EHC_GENERIC_TIMEOUT);\r
-\r
Status = gBS->UninstallProtocolInterface (\r
Controller,\r
&gEfiUsb2HcProtocolGuid,\r
return Status;\r
}\r
\r
+ //\r
+ // Stop AsyncRequest Polling timer then stop the EHCI driver\r
+ // and uninstall the EHCI protocl.\r
+ //\r
+ gBS->SetTimer (Ehc->PollTimer, TimerCancel, EHC_ASYNC_POLL_INTERVAL);\r
+ EhcHaltHC (Ehc, EHC_GENERIC_TIMEOUT);\r
+\r
if (Ehc->PollTimer != NULL) {\r
gBS->CloseEvent (Ehc->PollTimer);\r
}\r
)\r
{\r
USB_HC_DEV *Uhc;\r
+ EFI_STATUS Status;\r
\r
//\r
// Uninstall the USB_HC and USB_HC2 protocol, then disable the controller\r
//\r
Uhc = UHC_FROM_USB2_HC_PROTO (This);\r
- UhciStopHc (Uhc, UHC_GENERIC_TIMEOUT);\r
\r
- gBS->UninstallProtocolInterface (\r
- Controller,\r
- &gEfiUsb2HcProtocolGuid,\r
- &Uhc->Usb2Hc\r
- );\r
\r
+ Status = gBS->UninstallProtocolInterface (\r
+ Controller,\r
+ &gEfiUsb2HcProtocolGuid,\r
+ &Uhc->Usb2Hc\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return ;\r
+ }\r
+\r
+ UhciStopHc (Uhc, UHC_GENERIC_TIMEOUT);\r
UhciFreeAllAsyncReq (Uhc);\r
UhciDestoryFrameList (Uhc);\r
\r
return Status;
}
+ Status = gBS->UninstallProtocolInterface (
+ Controller,
+ &gEfiUsb2HcProtocolGuid,
+ Usb2Hc
+ );
+
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
Xhc = XHC_FROM_THIS (Usb2Hc);
PciIo = Xhc->PciIo;
}
}
- XhcHaltHC (Xhc, XHC_GENERIC_TIMEOUT);
- XhcClearBiosOwnership (Xhc);
-
- Status = gBS->UninstallProtocolInterface (
- Controller,
- &gEfiUsb2HcProtocolGuid,
- Usb2Hc
- );
-
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
if (Xhc->PollTimer != NULL) {
gBS->CloseEvent (Xhc->PollTimer);
}
gBS->CloseEvent (Xhc->ExitBootServiceEvent);
}
+ XhcHaltHC (Xhc, XHC_GENERIC_TIMEOUT);
+ XhcClearBiosOwnership (Xhc);
XhciDelAllAsyncIntTransfers (Xhc);
XhcFreeSched (Xhc);
EFI_TPL OldTpl;\r
UINTN Index;\r
EFI_STATUS Status;\r
+ EFI_STATUS ReturnStatus;\r
\r
Status = EFI_SUCCESS;\r
\r
//\r
OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
\r
+ ReturnStatus = EFI_SUCCESS;\r
for (Index = 0; Index < NumberOfChildren; Index++) {\r
Status = gBS->OpenProtocol (\r
ChildHandleBuffer[Index],\r
UsbIf = USB_INTERFACE_FROM_USBIO (UsbIo);\r
UsbDev = UsbIf->Device;\r
\r
- UsbRemoveDevice (UsbDev);\r
+ ReturnStatus = UsbRemoveDevice (UsbDev);\r
}\r
\r
gBS->RestoreTPL (OldTpl);\r
- return EFI_SUCCESS;\r
+ return ReturnStatus;\r
}\r
\r
DEBUG (( EFI_D_INFO, "UsbBusStop: usb bus stopped on %p\n", Controller));\r
RootHub = Bus->Devices[0];\r
RootIf = RootHub->Interfaces[0];\r
\r
- mUsbRootHubApi.Release (RootIf);\r
-\r
ASSERT (Bus->MaxDevices <= 256);\r
+ ReturnStatus = EFI_SUCCESS;\r
for (Index = 1; Index < Bus->MaxDevices; Index++) {\r
if (Bus->Devices[Index] != NULL) {\r
- UsbRemoveDevice (Bus->Devices[Index]);\r
+ Status = UsbRemoveDevice (Bus->Devices[Index]);\r
+ if (EFI_ERROR (Status)) {\r
+ ReturnStatus = Status;\r
+ }\r
}\r
}\r
\r
gBS->RestoreTPL (OldTpl);\r
\r
- gBS->FreePool (RootIf);\r
- gBS->FreePool (RootHub);\r
- Status = UsbBusFreeUsbDPList (&Bus->WantedUsbIoDPList);\r
- ASSERT (!EFI_ERROR (Status));\r
+ if (!EFI_ERROR (ReturnStatus)) {\r
+ mUsbRootHubApi.Release (RootIf);\r
+ gBS->FreePool (RootIf);\r
+ gBS->FreePool (RootHub);\r
\r
- //\r
- // Uninstall the bus identifier and close USB_HC/USB2_HC protocols\r
- //\r
- gBS->UninstallProtocolInterface (Controller, &gEfiCallerIdGuid, &Bus->BusId);\r
+ Status = UsbBusFreeUsbDPList (&Bus->WantedUsbIoDPList);\r
+ ASSERT (!EFI_ERROR (Status));\r
\r
- if (Bus->Usb2Hc != NULL) {\r
- gBS->CloseProtocol (\r
- Controller,\r
- &gEfiUsb2HcProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
- }\r
+ //\r
+ // Uninstall the bus identifier and close USB_HC/USB2_HC protocols\r
+ //\r
+ gBS->UninstallProtocolInterface (Controller, &gEfiCallerIdGuid, &Bus->BusId);\r
\r
- if (Bus->UsbHc != NULL) {\r
- gBS->CloseProtocol (\r
- Controller,\r
- &gEfiUsbHcProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
- }\r
+ if (Bus->Usb2Hc != NULL) {\r
+ Status = gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiUsb2HcProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
+ }\r
\r
- gBS->CloseProtocol (\r
- Controller,\r
- &gEfiDevicePathProtocolGuid,\r
- This->DriverBindingHandle,\r
- Controller\r
- );\r
+ if (Bus->UsbHc != NULL) {\r
+ Status = gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiUsbHcProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
+ }\r
\r
- gBS->FreePool (Bus);\r
+ if (!EFI_ERROR (Status)) {\r
+ gBS->CloseProtocol (\r
+ Controller,\r
+ &gEfiDevicePathProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
+ );\r
\r
+ gBS->FreePool (Bus);\r
+ }\r
+ }\r
return Status;\r
}\r