diff options
author | Olivier Houchard <cognet@FreeBSD.org> | 2011-11-02 20:45:44 +0000 |
---|---|---|
committer | Olivier Houchard <cognet@FreeBSD.org> | 2011-11-02 20:45:44 +0000 |
commit | 11e55f9108790078f5737355f524745d616b11b6 (patch) | |
tree | 49a734445ce25ab8df1f28dc680828cad8742974 /sys/dev | |
parent | 1a9879c32aa30414ff03c4ee62d5448231baa212 (diff) | |
download | src-11e55f9108790078f5737355f524745d616b11b6.tar.gz src-11e55f9108790078f5737355f524745d616b11b6.zip |
Disable the TX ready interrupts once we received one, some UART won't clear
the IIR_TXRDY bit upon reading.
Reviewed by: marcel
Notes
Notes:
svn path=/head/; revision=227032
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/uart/uart_dev_ns8250.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/dev/uart/uart_dev_ns8250.c b/sys/dev/uart/uart_dev_ns8250.c index 489be29a70a9..5d56a68ad49e 100644 --- a/sys/dev/uart/uart_dev_ns8250.c +++ b/sys/dev/uart/uart_dev_ns8250.c @@ -582,9 +582,11 @@ static int ns8250_bus_ipend(struct uart_softc *sc) { struct uart_bas *bas; + struct ns8250_softc *ns8250; int ipend; uint8_t iir, lsr; + ns8250 = (struct ns8250_softc *)sc; bas = &sc->sc_bas; uart_lock(sc->sc_hwmtx); iir = uart_getreg(bas, REG_IIR); @@ -602,9 +604,10 @@ ns8250_bus_ipend(struct uart_softc *sc) if (lsr & LSR_RXRDY) ipend |= SER_INT_RXREADY; } else { - if (iir & IIR_TXRDY) + if (iir & IIR_TXRDY) { ipend |= SER_INT_TXIDLE; - else + uart_setreg(bas, REG_IER, ns8250->ier); + } else ipend |= SER_INT_SIGCHG; } if (ipend == 0) |