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 |
} |