summaryrefslogtreecommitdiffstats
path: root/sys/dev/uart/uart_dev_ns8250.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2008-03-12 19:09:20 +0000
committersam <sam@FreeBSD.org>2008-03-12 19:09:20 +0000
commit078a480e832ff2e17316580432aefc4fc0fb9fe5 (patch)
tree08dd20b0dcf8327aa908c2984f679f7911e00bd6 /sys/dev/uart/uart_dev_ns8250.c
parent096789c286d69935923cf7878105b3163cb91512 (diff)
downloadFreeBSD-src-078a480e832ff2e17316580432aefc4fc0fb9fe5.zip
FreeBSD-src-078a480e832ff2e17316580432aefc4fc0fb9fe5.tar.gz
add device hints to control the rx FIFO interrupt level on 16550A parts
PR: kern/121421 Submitted by: UEMURA Tetsuya Reviewed by: marcel MFC after: 2 weeks
Diffstat (limited to 'sys/dev/uart/uart_dev_ns8250.c')
-rw-r--r--sys/dev/uart/uart_dev_ns8250.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/dev/uart/uart_dev_ns8250.c b/sys/dev/uart/uart_dev_ns8250.c
index abe141b..d2a3dcf 100644
--- a/sys/dev/uart/uart_dev_ns8250.c
+++ b/sys/dev/uart/uart_dev_ns8250.c
@@ -382,11 +382,24 @@ ns8250_bus_attach(struct uart_softc *sc)
{
struct ns8250_softc *ns8250 = (struct ns8250_softc*)sc;
struct uart_bas *bas;
+ unsigned int ivar;
bas = &sc->sc_bas;
ns8250->mcr = uart_getreg(bas, REG_MCR);
- ns8250->fcr = FCR_ENABLE | FCR_RX_MEDH;
+ ns8250->fcr = FCR_ENABLE;
+ if (!resource_int_value("uart", device_get_unit(sc->sc_dev), "flags",
+ &ivar)) {
+ if (UART_FLAGS_FCR_RX_LOW(ivar))
+ ns8250->fcr |= FCR_RX_LOW;
+ else if (UART_FLAGS_FCR_RX_MEDL(ivar))
+ ns8250->fcr |= FCR_RX_MEDL;
+ else if (UART_FLAGS_FCR_RX_HIGH(ivar))
+ ns8250->fcr |= FCR_RX_HIGH;
+ else
+ ns8250->fcr |= FCR_RX_MEDH;
+ } else
+ ns8250->fcr |= FCR_RX_MEDH;
uart_setreg(bas, REG_FCR, ns8250->fcr);
uart_barrier(bas);
ns8250_bus_flush(sc, UART_FLUSH_RECEIVER|UART_FLUSH_TRANSMITTER);
OpenPOWER on IntegriCloud