diff options
author | cognet <cognet@FreeBSD.org> | 2011-11-02 20:45:44 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2011-11-02 20:45:44 +0000 |
commit | 417989ca0093a32e8bd3fe7a41fdeb2d18c06f4d (patch) | |
tree | 49a734445ce25ab8df1f28dc680828cad8742974 | |
parent | ca71676fe9906efdc910094ed5d53e6b06845789 (diff) | |
download | FreeBSD-src-417989ca0093a32e8bd3fe7a41fdeb2d18c06f4d.zip FreeBSD-src-417989ca0093a32e8bd3fe7a41fdeb2d18c06f4d.tar.gz |
Disable the TX ready interrupts once we received one, some UART won't clear
the IIR_TXRDY bit upon reading.
Reviewed by: marcel
-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 489be29..5d56a68 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) |