diff options
Diffstat (limited to 'sys/dev/uart')
-rw-r--r-- | sys/dev/uart/uart_bus_fdt.c | 19 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_amd64.c | 4 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_i386.c | 4 | ||||
-rw-r--r-- | sys/dev/uart/uart_cpu_pc98.c | 4 | ||||
-rw-r--r-- | sys/dev/uart/uart_tty.c | 15 |
5 files changed, 27 insertions, 19 deletions
diff --git a/sys/dev/uart/uart_bus_fdt.c b/sys/dev/uart/uart_bus_fdt.c index 27809ce..f8204b1 100644 --- a/sys/dev/uart/uart_bus_fdt.c +++ b/sys/dev/uart/uart_bus_fdt.c @@ -140,6 +140,15 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) u_long start, size; int err; + uart_bus_space_mem = fdtbus_bs_tag; + uart_bus_space_io = NULL; + + /* Allow overriding the FDT uning the environment. */ + class = &uart_ns8250_class; + err = uart_getenv(devtype, di, class); + if (!err) + return (0); + if (devtype != UART_DEV_CONSOLE) return (ENXIO); @@ -183,18 +192,12 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di) di->databits = 8; di->stopbits = 1; di->parity = UART_PARITY_NONE; - di->bas.bst = fdtbus_bs_tag; + di->bas.bst = uart_bus_space_mem; err = fdt_regsize(node, &start, &size); if (err) return (ENXIO); start += fdt_immr_va; - uart_bus_space_mem = fdtbus_bs_tag; - uart_bus_space_io = NULL; - - if (bus_space_map(di->bas.bst, start, size, 0, &di->bas.bsh) != 0) - return (ENXIO); - - return (0); + return (bus_space_map(di->bas.bst, start, size, 0, &di->bas.bsh)); } diff --git a/sys/dev/uart/uart_cpu_amd64.c b/sys/dev/uart/uart_cpu_amd64.c index 3624f79..ce9cf7d 100644 --- a/sys/dev/uart/uart_cpu_amd64.c +++ b/sys/dev/uart/uart_cpu_amd64.c @@ -36,8 +36,8 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> -bus_space_tag_t uart_bus_space_io = AMD64_BUS_SPACE_IO; -bus_space_tag_t uart_bus_space_mem = AMD64_BUS_SPACE_MEM; +bus_space_tag_t uart_bus_space_io = X86_BUS_SPACE_IO; +bus_space_tag_t uart_bus_space_mem = X86_BUS_SPACE_MEM; int uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) diff --git a/sys/dev/uart/uart_cpu_i386.c b/sys/dev/uart/uart_cpu_i386.c index 0d0f0f7..ce9cf7d 100644 --- a/sys/dev/uart/uart_cpu_i386.c +++ b/sys/dev/uart/uart_cpu_i386.c @@ -36,8 +36,8 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> -bus_space_tag_t uart_bus_space_io = I386_BUS_SPACE_IO; -bus_space_tag_t uart_bus_space_mem = I386_BUS_SPACE_MEM; +bus_space_tag_t uart_bus_space_io = X86_BUS_SPACE_IO; +bus_space_tag_t uart_bus_space_mem = X86_BUS_SPACE_MEM; int uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) diff --git a/sys/dev/uart/uart_cpu_pc98.c b/sys/dev/uart/uart_cpu_pc98.c index fc50fa5..c211b3d 100644 --- a/sys/dev/uart/uart_cpu_pc98.c +++ b/sys/dev/uart/uart_cpu_pc98.c @@ -37,8 +37,8 @@ __FBSDID("$FreeBSD$"); #include <dev/uart/uart.h> #include <dev/uart/uart_cpu.h> -bus_space_tag_t uart_bus_space_io = I386_BUS_SPACE_IO; -bus_space_tag_t uart_bus_space_mem = I386_BUS_SPACE_MEM; +bus_space_tag_t uart_bus_space_io = X86_BUS_SPACE_IO; +bus_space_tag_t uart_bus_space_mem = X86_BUS_SPACE_MEM; static struct { u_long iobase; diff --git a/sys/dev/uart/uart_tty.c b/sys/dev/uart/uart_tty.c index f306af5..2170108 100644 --- a/sys/dev/uart/uart_tty.c +++ b/sys/dev/uart/uart_tty.c @@ -168,6 +168,14 @@ uart_tty_outwakeup(struct tty *tp) if (sc->sc_txbusy) return; + /* + * Respect RTS/CTS (output) flow control if enabled and not already + * handled by hardware. + */ + if ((tp->t_termios.c_cflag & CCTS_OFLOW) && !sc->sc_hwoflow && + !(sc->sc_hwsig & SER_CTS)) + return; + sc->sc_txdatasz = ttydisc_getc(tp, sc->sc_txbuf, sc->sc_txfifosz); if (sc->sc_txdatasz != 0) UART_TRANSMIT(sc); @@ -315,11 +323,8 @@ uart_tty_intr(void *arg) sig = pend & SER_INT_SIGMASK; if (sig & SER_DDCD) ttydisc_modem(tp, sig & SER_DCD); - if ((sig & SER_DCTS) && (tp->t_termios.c_cflag & CCTS_OFLOW) && - !sc->sc_hwoflow) { - if (sig & SER_CTS) - uart_tty_outwakeup(tp); - } + if (sig & SER_DCTS) + uart_tty_outwakeup(tp); } if (pend & SER_INT_TXIDLE) |