View | Details | Raw Unified | Return to bug 191265
Collapse All | Expand All

(-)uart_dev_ns8250.c (-18 / +12 lines)
Lines 842-867 Link Here
842
842
843
	bas = &sc->sc_bas;
843
	bas = &sc->sc_bas;
844
	uart_lock(sc->sc_hwmtx);
844
	uart_lock(sc->sc_hwmtx);
845
	lsr = uart_getreg(bas, REG_LSR);
845
	while(!uart_rx_full(sc)) {
846
	while (lsr & LSR_RXRDY) {
846
		lsr = uart_getreg(bas, REG_LSR);
847
		if (uart_rx_full(sc)) {
847
		if (lsr & LSR_RXRDY) {
848
			sc->sc_rxbuf[sc->sc_rxput] = UART_STAT_OVERRUN;
848
			xc = uart_getreg(bas, REG_DATA);
849
			if (lsr & LSR_FE)
850
				xc |= UART_STAT_FRAMERR;
851
			if (lsr & LSR_PE)
852
				xc |= UART_STAT_PARERR;
853
			uart_rx_put(sc, xc);
854
			lsr = uart_getreg(bas, REG_LSR);
855
		}
856
		else
849
			break;
857
			break;
850
		}
851
		xc = uart_getreg(bas, REG_DATA);
852
		if (lsr & LSR_FE)
853
			xc |= UART_STAT_FRAMERR;
854
		if (lsr & LSR_PE)
855
			xc |= UART_STAT_PARERR;
856
		uart_rx_put(sc, xc);
857
		lsr = uart_getreg(bas, REG_LSR);
858
	}
858
	}
859
	/* Discard everything left in the Rx FIFO. */
860
	while (lsr & LSR_RXRDY) {
861
		(void)uart_getreg(bas, REG_DATA);
862
		uart_barrier(bas);
863
		lsr = uart_getreg(bas, REG_LSR);
864
	}
865
	uart_unlock(sc->sc_hwmtx);
859
	uart_unlock(sc->sc_hwmtx);
866
 	return (0);
860
 	return (0);
867
}
861
}

Return to bug 191265