diff options
author | marius <marius@FreeBSD.org> | 2007-01-18 22:01:19 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2007-01-18 22:01:19 +0000 |
commit | 545a381d5f5917c12078fc06b779fab7711c053e (patch) | |
tree | 9d40efb79e6c86a1071e9763b706b391d9e9c487 /sys/arm/sa11x0 | |
parent | 6f6da4e54a1b02d5dd2237063607a3b22d39e819 (diff) | |
download | FreeBSD-src-545a381d5f5917c12078fc06b779fab7711c053e.zip FreeBSD-src-545a381d5f5917c12078fc06b779fab7711c053e.tar.gz |
- Add a uart_rxready() and corresponding device-specific implementations
that can be used to check whether receive data is ready, i.e. whether
the subsequent call of uart_poll() should return a char, and unlike
uart_poll() doesn't actually receive data.
- Remove the device-specific implementations of uart_poll() and implement
uart_poll() in terms of uart_getc() and the newly added uart_rxready()
in order to minimize code duplication.
- In sunkbd(4) take advantage of uart_rxready() and use it to implement
the polled mode part of sunkbd_check() so we don't need to buffer a
potentially read char in the softc.
- Fix some mis-indentation in sunkbd_read_char().
Discussed with: marcel
Diffstat (limited to 'sys/arm/sa11x0')
-rw-r--r-- | sys/arm/sa11x0/uart_dev_sa1110.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/arm/sa11x0/uart_dev_sa1110.c b/sys/arm/sa11x0/uart_dev_sa1110.c index 77bc2df..0a36bca 100644 --- a/sys/arm/sa11x0/uart_dev_sa1110.c +++ b/sys/arm/sa11x0/uart_dev_sa1110.c @@ -52,7 +52,7 @@ static int sa1110_probe(struct uart_bas *bas); static void sa1110_init(struct uart_bas *bas, int, int, int, int); static void sa1110_term(struct uart_bas *bas); static void sa1110_putc(struct uart_bas *bas, int); -static int sa1110_poll(struct uart_bas *bas); +static int sa1110_rxready(struct uart_bas *bas); static int sa1110_getc(struct uart_bas *bas, struct mtx *mtx); extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs; @@ -62,7 +62,7 @@ struct uart_ops uart_sa1110_ops = { .init = sa1110_init, .term = sa1110_term, .putc = sa1110_putc, - .poll = sa1110_poll, + .rxready = sa1110_rxready, .getc = sa1110_getc, }; @@ -102,11 +102,10 @@ sa1110_putc(struct uart_bas *bas, int c) } static int -sa1110_poll(struct uart_bas *bas) +sa1110_rxready(struct uart_bas *bas) { - if (!(uart_getreg(bas, SACOM_SR1) & SR1_RNE)) - return (-1); - return (uart_getreg(bas, SACOM_DR) & 0xff); + + return ((uart_getreg(bas, SACOM_SR1) & SR1_RNE) != 0 ? 1 : 0); } static int |