aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/uart/uart_core.c
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2003-09-17 03:11:32 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2003-09-17 03:11:32 +0000
commit44ed791b92a2d5a5a2ec7dceeaac65e9749a8eda (patch)
tree4391e07d78aa2696fba66501852f450d6193838e /sys/dev/uart/uart_core.c
parent8225548ebf2675ce79910d8e59e8aaae9e4cbf9e (diff)
Notes
Diffstat (limited to 'sys/dev/uart/uart_core.c')
-rw-r--r--sys/dev/uart/uart_core.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/sys/dev/uart/uart_core.c b/sys/dev/uart/uart_core.c
index dd4f91cd4a125..5889211c0dbf1 100644
--- a/sys/dev/uart/uart_core.c
+++ b/sys/dev/uart/uart_core.c
@@ -200,17 +200,21 @@ uart_intr(void *arg)
if (sc->sc_leaving)
return;
- ipend = UART_IPEND(sc);
- if (ipend & UART_IPEND_OVERRUN)
- uart_intr_overrun(sc);
- if (ipend & UART_IPEND_BREAK)
- uart_intr_break(sc);
- if (ipend & UART_IPEND_RXREADY)
- uart_intr_rxready(sc);
- if (ipend & UART_IPEND_SIGCHG)
- uart_intr_sigchg(sc);
- if (ipend & UART_IPEND_TXIDLE)
- uart_intr_txidle(sc);
+ do {
+ ipend = UART_IPEND(sc);
+ if (ipend == 0)
+ break;
+ if (ipend & UART_IPEND_OVERRUN)
+ uart_intr_overrun(sc);
+ if (ipend & UART_IPEND_BREAK)
+ uart_intr_break(sc);
+ if (ipend & UART_IPEND_RXREADY)
+ uart_intr_rxready(sc);
+ if (ipend & UART_IPEND_SIGCHG)
+ uart_intr_sigchg(sc);
+ if (ipend & UART_IPEND_TXIDLE)
+ uart_intr_txidle(sc);
+ } while (1);
if (sc->sc_opened && sc->sc_ttypend != 0)
swi_sched(sc->sc_softih, 0);