Lines Matching refs:sc

143 uart_intr_reason(struct uart_ns16550_softc *sc)  in uart_intr_reason()  argument
146 if ((sc->lsr & LSR_OE) != 0 && (sc->ier & IER_ERLS) != 0) in uart_intr_reason()
148 else if (uart_rxfifo_numchars(sc->backend) > 0 && in uart_intr_reason()
149 (sc->ier & IER_ERXRDY) != 0) in uart_intr_reason()
151 else if (sc->thre_int_pending && (sc->ier & IER_ETXRDY) != 0) in uart_intr_reason()
153 else if ((sc->msr & MSR_DELTA_MASK) != 0 && (sc->ier & IER_EMSC) != 0) in uart_intr_reason()
160 uart_reset(struct uart_ns16550_softc *sc) in uart_reset() argument
165 sc->dll = divisor; in uart_reset()
167 sc->dlh = divisor >> 16; in uart_reset()
169 sc->dlh = 0; in uart_reset()
171 sc->msr = modem_status(sc->mcr); in uart_reset()
173 uart_rxfifo_reset(sc->backend, 1); in uart_reset()
181 uart_toggle_intr(struct uart_ns16550_softc *sc) in uart_toggle_intr() argument
185 intr_reason = uart_intr_reason(sc); in uart_toggle_intr()
188 (*sc->intr_deassert)(sc->arg); in uart_toggle_intr()
190 (*sc->intr_assert)(sc->arg); in uart_toggle_intr()
196 struct uart_ns16550_softc *sc; in uart_drain() local
199 sc = arg; in uart_drain()
208 uart_softc_lock(sc->backend); in uart_drain()
210 loopback = (sc->mcr & MCR_LOOPBACK) != 0; in uart_drain()
211 uart_rxfifo_drain(sc->backend, loopback); in uart_drain()
213 uart_toggle_intr(sc); in uart_drain()
215 uart_softc_unlock(sc->backend); in uart_drain()
222 struct uart_ns16550_softc *sc; in uart_sock_drain() local
225 sc = arg; in uart_sock_drain()
231 uart_softc_lock(sc->backend); in uart_sock_drain()
233 loopback = (sc->mcr & MCR_LOOPBACK) != 0; in uart_sock_drain()
234 uart_rxfifo_sock_drain(sc->backend, loopback); in uart_sock_drain()
236 uart_toggle_intr(sc); in uart_sock_drain()
238 uart_softc_unlock(sc->backend); in uart_sock_drain()
243 uart_ns16550_write(struct uart_ns16550_softc *sc, int offset, uint8_t value) in uart_ns16550_write() argument
248 uart_softc_lock(sc->backend); in uart_ns16550_write()
253 if ((sc->lcr & LCR_DLAB) != 0) { in uart_ns16550_write()
255 sc->dll = value; in uart_ns16550_write()
260 sc->dlh = value; in uart_ns16550_write()
267 if (uart_rxfifo_putchar(sc->backend, value, in uart_ns16550_write()
268 (sc->mcr & MCR_LOOPBACK) != 0)) in uart_ns16550_write()
269 sc->lsr |= LSR_OE; in uart_ns16550_write()
270 sc->thre_int_pending = true; in uart_ns16550_write()
274 if ((sc->ier & IER_ETXRDY) == 0 && (value & IER_ETXRDY) != 0) in uart_ns16550_write()
275 sc->thre_int_pending = true; in uart_ns16550_write()
280 sc->ier = value & 0x0F; in uart_ns16550_write()
287 if ((sc->fcr & FCR_ENABLE) ^ (value & FCR_ENABLE)) { in uart_ns16550_write()
289 uart_rxfifo_size(sc->backend) : 1; in uart_ns16550_write()
290 uart_rxfifo_reset(sc->backend, fifosz); in uart_ns16550_write()
298 sc->fcr = 0; in uart_ns16550_write()
301 uart_rxfifo_reset(sc->backend, in uart_ns16550_write()
302 uart_rxfifo_size(sc->backend)); in uart_ns16550_write()
304 sc->fcr = value & in uart_ns16550_write()
309 sc->lcr = value; in uart_ns16550_write()
313 sc->mcr = value & 0x1F; in uart_ns16550_write()
314 msr = modem_status(sc->mcr); in uart_ns16550_write()
321 if ((msr & MSR_CTS) ^ (sc->msr & MSR_CTS)) in uart_ns16550_write()
322 sc->msr |= MSR_DCTS; in uart_ns16550_write()
323 if ((msr & MSR_DSR) ^ (sc->msr & MSR_DSR)) in uart_ns16550_write()
324 sc->msr |= MSR_DDSR; in uart_ns16550_write()
325 if ((msr & MSR_DCD) ^ (sc->msr & MSR_DCD)) in uart_ns16550_write()
326 sc->msr |= MSR_DDCD; in uart_ns16550_write()
327 if ((sc->msr & MSR_RI) != 0 && (msr & MSR_RI) == 0) in uart_ns16550_write()
328 sc->msr |= MSR_TERI; in uart_ns16550_write()
334 sc->msr &= MSR_DELTA_MASK; in uart_ns16550_write()
335 sc->msr |= msr; in uart_ns16550_write()
349 sc->scr = value; in uart_ns16550_write()
356 uart_toggle_intr(sc); in uart_ns16550_write()
357 uart_softc_unlock(sc->backend); in uart_ns16550_write()
361 uart_ns16550_read(struct uart_ns16550_softc *sc, int offset) in uart_ns16550_read() argument
365 uart_softc_lock(sc->backend); in uart_ns16550_read()
370 if ((sc->lcr & LCR_DLAB) != 0) { in uart_ns16550_read()
372 reg = sc->dll; in uart_ns16550_read()
377 reg = sc->dlh; in uart_ns16550_read()
384 reg = uart_rxfifo_getchar(sc->backend); in uart_ns16550_read()
387 reg = sc->ier; in uart_ns16550_read()
390 iir = (sc->fcr & FCR_ENABLE) ? IIR_FIFO_MASK : 0; in uart_ns16550_read()
392 intr_reason = uart_intr_reason(sc); in uart_ns16550_read()
398 sc->thre_int_pending = false; in uart_ns16550_read()
405 reg = sc->lcr; in uart_ns16550_read()
408 reg = sc->mcr; in uart_ns16550_read()
412 sc->lsr |= LSR_TEMT | LSR_THRE; in uart_ns16550_read()
415 if (uart_rxfifo_numchars(sc->backend) > 0) in uart_ns16550_read()
416 sc->lsr |= LSR_RXRDY; in uart_ns16550_read()
418 sc->lsr &= ~LSR_RXRDY; in uart_ns16550_read()
420 reg = sc->lsr; in uart_ns16550_read()
423 sc->lsr &= ~LSR_OE; in uart_ns16550_read()
429 reg = sc->msr; in uart_ns16550_read()
430 sc->msr &= ~MSR_DELTA_MASK; in uart_ns16550_read()
433 reg = sc->scr; in uart_ns16550_read()
441 uart_toggle_intr(sc); in uart_ns16550_read()
442 uart_softc_unlock(sc->backend); in uart_ns16550_read()
465 struct uart_ns16550_softc *sc; in uart_ns16550_init() local
467 sc = calloc(1, sizeof(struct uart_ns16550_softc)); in uart_ns16550_init()
469 sc->arg = arg; in uart_ns16550_init()
470 sc->intr_assert = intr_assert; in uart_ns16550_init()
471 sc->intr_deassert = intr_deassert; in uart_ns16550_init()
472 sc->backend = uart_init(); in uart_ns16550_init()
474 uart_reset(sc); in uart_ns16550_init()
476 return (sc); in uart_ns16550_init()
480 uart_ns16550_tty_open(struct uart_ns16550_softc *sc, const char *device) in uart_ns16550_tty_open() argument
484 return (uart_tty_open(sc->backend, device, uart_sock_drain, in uart_ns16550_tty_open()
485 sc)); in uart_ns16550_tty_open()
488 return (uart_tty_open(sc->backend, device, uart_drain, sc)); in uart_ns16550_tty_open()