diff options
| author | Marcel Moolenaar <marcel@FreeBSD.org> | 2003-09-17 03:11:32 +0000 |
|---|---|---|
| committer | Marcel Moolenaar <marcel@FreeBSD.org> | 2003-09-17 03:11:32 +0000 |
| commit | 44ed791b92a2d5a5a2ec7dceeaac65e9749a8eda (patch) | |
| tree | 4391e07d78aa2696fba66501852f450d6193838e /sys/dev/uart/uart_core.c | |
| parent | 8225548ebf2675ce79910d8e59e8aaae9e4cbf9e (diff) | |
Notes
Diffstat (limited to 'sys/dev/uart/uart_core.c')
| -rw-r--r-- | sys/dev/uart/uart_core.c | 26 |
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); |
