summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2011-11-02 20:45:44 +0000
committercognet <cognet@FreeBSD.org>2011-11-02 20:45:44 +0000
commit417989ca0093a32e8bd3fe7a41fdeb2d18c06f4d (patch)
tree49a734445ce25ab8df1f28dc680828cad8742974
parentca71676fe9906efdc910094ed5d53e6b06845789 (diff)
downloadFreeBSD-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.c7
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)
OpenPOWER on IntegriCloud