From owner-p4-projects@FreeBSD.ORG Wed Jul 9 21:38:40 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0E68437B404; Wed, 9 Jul 2003 21:38:40 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B1A5037B401 for ; Wed, 9 Jul 2003 21:38:39 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 5566443FA3 for ; Wed, 9 Jul 2003 21:38:39 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h6A4cd0U083978 for ; Wed, 9 Jul 2003 21:38:39 -0700 (PDT) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h6A4ccBQ083975 for perforce@freebsd.org; Wed, 9 Jul 2003 21:38:38 -0700 (PDT) Date: Wed, 9 Jul 2003 21:38:38 -0700 (PDT) Message-Id: <200307100438.h6A4ccBQ083975@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 34287 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Jul 2003 04:38:41 -0000 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