From 6c55f96de86fc09f07264bd900b544a7099bc227 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 25 Jan 2012 06:35:00 +0000 Subject: [PATCH] [USBOHCI] - Don't turn off interrupts before setting the OHCI_OWNERSHIP_CHANGE_REQUEST bit because it prevents the SMM driver from receiving the interrupt that tells it to give up ownership of the host controller - This fix should be merged to Haiku also which has the same bug svn path=/branches/usb-bringup-trunk/; revision=55170 --- drivers/usb/usbohci/hardware.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/drivers/usb/usbohci/hardware.cpp b/drivers/usb/usbohci/hardware.cpp index f3a15bc003c..e7d82687486 100644 --- a/drivers/usb/usbohci/hardware.cpp +++ b/drivers/usb/usbohci/hardware.cpp @@ -883,11 +883,6 @@ CUSBHardwareDevice::StopController(void) ULONG Control, Reset, Status; ULONG Index, FrameInterval; - // - // first turn off all interrupts - // - WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_INTERRUPT_DISABLE_OFFSET), OHCI_ALL_INTERRUPTS); - // // check context // @@ -931,18 +926,17 @@ CUSBHardwareDevice::StopController(void) if (Control & OHCI_INTERRUPT_ROUTING) { DPRINT1("SMM not responding\n"); - // - // some controllers also depend on this - // - WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_CONTROL_OFFSET), OHCI_HC_FUNCTIONAL_STATE_RESET); - - // - // wait a bit - // - KeStallExecutionProcessor(100); + } + else + { + DPRINT1("SMM has given up ownership\n"); } } + // + // turn off interrupts + // + WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + OHCI_INTERRUPT_DISABLE_OFFSET), OHCI_ALL_INTERRUPTS); // // have a break