From 812dd254dcde4a920bc5e814ad89ad90e8dfd17c Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 18 May 2008 09:36:06 +0000 Subject: [PATCH] Acknowledge OHCI interrupts. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25539 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/busses/usb/ohci.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/busses/usb/ohci.cpp b/src/add-ons/kernel/busses/usb/ohci.cpp index 2de28decc9..5caf27670a 100644 --- a/src/add-ons/kernel/busses/usb/ohci.cpp +++ b/src/add-ons/kernel/busses/usb/ohci.cpp @@ -650,6 +650,7 @@ OHCI::_Interrupt() acquire_spinlock(&lock); uint32 status = 0; + uint32 acknowledge = 0; bool finishTransfers = false; int32 result = B_HANDLED_INTERRUPT; @@ -679,20 +680,20 @@ OHCI::_Interrupt() } if (status & OHCI_SCHEDULING_OVERRUN) { - // TODO TRACE(("usb_ohci: scheduling overrun occured\n")); + acknowledge |= OHCI_SCHEDULING_OVERRUN; } if (status & OHCI_WRITEBACK_DONE_HEAD) { TRACE(("usb_ohci: transfer descriptor processed\n")); - // Ack it in the finisher thread, not here. + // Acknowledge it in the finisher thread, not here. result = B_INVOKE_SCHEDULER; finishTransfers = true; } if (status & OHCI_RESUME_DETECTED) { - // TODO TRACE(("usb_ohci: resume detected\n")); + acknowledge |= OHCI_RESUME_DETECTED; } if (status & OHCI_UNRECOVERABLE_ERROR) { @@ -703,10 +704,13 @@ OHCI::_Interrupt() } if (status & OHCI_ROOT_HUB_STATUS_CHANGE) { - // TODO TRACE(("usb_ohci: root hub status change\n")); + acknowledge |= OHCI_ROOT_HUB_STATUS_CHANGE; } + if (acknowledge != 0) + _WriteReg(OHCI_INTERRUPT_STATUS, acknowledge); + release_spinlock(&lock); if (finishTransfers)