Date: Wed, 9 Jul 2003 21:38:38 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 34287 for review Message-ID: <200307100438.h6A4ccBQ083975@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=34287 Change 34287 by marcel@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200307100438.h6A4ccBQ083975>