PERFORCE change 34287 for review
Marcel Moolenaar
marcel at FreeBSD.org
Wed Jul 9 21:38:41 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=34287
Change 34287 by marcel at marcel_nfs on 2003/07/09 21:38:25
Implement the attach() and ipend() methods.
Affected files ...
.. //depot/projects/uart/dev/uart/uart_dev_ns8250.c#6 edit
Differences ...
==== //depot/projects/uart/dev/uart/uart_dev_ns8250.c#6 (text+ko) ====
@@ -297,6 +297,7 @@
struct ns8250_softc {
struct uart_softc base;
uint8_t fcr;
+ uint8_t lcr;
uint8_t mcr;
};
@@ -332,7 +333,18 @@
static int
ns8250_bus_attach(struct uart_softc *sc)
{
+ struct ns8250_softc *ns8250 = (struct ns8250_softc*)sc;
+ struct uart_bas *bas;
+
+ bas = &sc->sc_bas;
+ ns8250->mcr = uart_getreg(bas, REG_MCR);
+ ns8250->lcr = uart_getreg(bas, REG_LCR);
+ ns8250->fcr = FCR_ENABLE | FCR_RX_MEDL;
+ uart_setreg(bas, REG_FCR, ns8250->fcr);
+ uart_setreg(bas, REG_IER,
+ IER_ERXRDY | IER_ETXRDY | IER_ERLS | IER_EMSC);
+ uart_barrier(bas);
return (0);
}
@@ -360,8 +372,29 @@
static int
ns8250_bus_ipend(struct uart_softc *sc)
{
+ struct uart_bas *bas;
+ int ipend;
+ uint8_t iir, lsr;
- return (0);
+ bas = &sc->sc_bas;
+ ipend = 0;
+ iir = uart_getreg(bas, REG_IIR);
+ if (iir == IIR_RLS) {
+ lsr = uart_getreg(bas, REG_LSR);
+ if (lsr & LSR_OE)
+ ipend |= UART_IPEND_OVERRUN;
+ if (lsr & LSR_BI)
+ ipend |= UART_IPEND_BREAK;
+ uart_barrier(bas);
+ iir = uart_getreg(bas, REG_IIR);
+ }
+ if (iir == IIR_RXRDY || iir == IIR_RXTOUT)
+ ipend |= UART_IPEND_RXREADY;
+ if (iir == IIR_TXRDY)
+ ipend |= UART_IPEND_TXIDLE;
+ if (iir == IIR_MLSC)
+ ipend |= UART_IPEND_SIGCHG;
+ return (ipend);
}
static int
More information about the p4-projects
mailing list