aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorOlivier Houchard <cognet@FreeBSD.org>2011-11-02 20:45:44 +0000
committerOlivier Houchard <cognet@FreeBSD.org>2011-11-02 20:45:44 +0000
commit11e55f9108790078f5737355f524745d616b11b6 (patch)
tree49a734445ce25ab8df1f28dc680828cad8742974 /sys/dev
parent1a9879c32aa30414ff03c4ee62d5448231baa212 (diff)
downloadsrc-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.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 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)