Lines Matching refs:bas

86 ns8250_clrint(struct uart_bas *bas)  in ns8250_clrint()  argument
90 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
94 lsr = uart_getreg(bas, REG_LSR); in ns8250_clrint()
96 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
98 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
100 (void)uart_getreg(bas, REG_MSR); in ns8250_clrint()
101 uart_barrier(bas); in ns8250_clrint()
102 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
107 ns8250_delay(struct uart_bas *bas) in ns8250_delay() argument
112 lcr = uart_getreg(bas, REG_LCR); in ns8250_delay()
113 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_delay()
114 uart_barrier(bas); in ns8250_delay()
115 divisor = uart_getreg(bas, REG_DLL) | (uart_getreg(bas, REG_DLH) << 8); in ns8250_delay()
116 uart_barrier(bas); in ns8250_delay()
117 uart_setreg(bas, REG_LCR, lcr); in ns8250_delay()
118 uart_barrier(bas); in ns8250_delay()
122 return (16000000 * divisor / bas->rclk); in ns8250_delay()
123 return (16000 * divisor / (bas->rclk / 1000)); in ns8250_delay()
151 ns8250_drain(struct uart_bas *bas, int what) in ns8250_drain() argument
155 delay = ns8250_delay(bas); in ns8250_drain()
164 while ((uart_getreg(bas, REG_LSR) & LSR_TEMT) == 0 && --limit) in ns8250_drain()
186 while (limit && (uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit) { in ns8250_drain()
188 (void)uart_getreg(bas, REG_DATA); in ns8250_drain()
189 uart_barrier(bas); in ns8250_drain()
190 } while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit); in ns8250_drain()
191 uart_barrier(bas); in ns8250_drain()
208 ns8250_flush(struct uart_bas *bas, int what) in ns8250_flush() argument
222 uart_setreg(bas, REG_FCR, fcr); in ns8250_flush()
223 uart_barrier(bas); in ns8250_flush()
232 lsr = uart_getreg(bas, REG_LSR); in ns8250_flush()
239 ns8250_drain(bas, drain); in ns8250_flush()
244 ns8250_param(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_param() argument
269 divisor = ns8250_divisor(bas->rclk, baudrate); in ns8250_param()
272 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_param()
273 uart_barrier(bas); in ns8250_param()
274 uart_setreg(bas, REG_DLL, divisor & 0xff); in ns8250_param()
275 uart_setreg(bas, REG_DLH, (divisor >> 8) & 0xff); in ns8250_param()
276 uart_barrier(bas); in ns8250_param()
280 uart_setreg(bas, REG_LCR, lcr); in ns8250_param()
281 uart_barrier(bas); in ns8250_param()
288 static int ns8250_probe(struct uart_bas *bas);
289 static void ns8250_init(struct uart_bas *bas, int, int, int, int);
290 static void ns8250_term(struct uart_bas *bas);
291 static void ns8250_putc(struct uart_bas *bas, int);
292 static int ns8250_rxready(struct uart_bas *bas);
293 static int ns8250_getc(struct uart_bas *bas, struct mtx *);
305 ns8250_probe(struct uart_bas *bas) in ns8250_probe() argument
310 uart_setreg(bas, REG_FCR, FCR_UART_ON); in ns8250_probe()
314 val = uart_getreg(bas, REG_IIR); in ns8250_probe()
323 val = uart_getreg(bas, REG_MCR); in ns8250_probe()
331 ns8250_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_init() argument
336 if (bas->rclk == 0) in ns8250_init()
337 bas->rclk = DEFAULT_RCLK; in ns8250_init()
338 ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_init()
346 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_init()
347 uart_setreg(bas, REG_IER, ier); in ns8250_init()
348 uart_barrier(bas); in ns8250_init()
355 uart_setreg(bas, REG_FCR, val); in ns8250_init()
356 uart_barrier(bas); in ns8250_init()
359 uart_setreg(bas, REG_MCR, MCR_IE | MCR_RTS | MCR_DTR); in ns8250_init()
360 uart_barrier(bas); in ns8250_init()
362 ns8250_clrint(bas); in ns8250_init()
366 ns8250_term(struct uart_bas *bas) in ns8250_term() argument
370 uart_setreg(bas, REG_MCR, MCR_IE); in ns8250_term()
371 uart_barrier(bas); in ns8250_term()
375 ns8250_putc(struct uart_bas *bas, int c) in ns8250_putc() argument
381 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0 && --limit) in ns8250_putc()
384 uart_setreg(bas, REG_DATA, c); in ns8250_putc()
385 uart_barrier(bas); in ns8250_putc()
389 ns8250_rxready(struct uart_bas *bas) in ns8250_rxready() argument
392 return ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) != 0 ? 1 : 0); in ns8250_rxready()
396 ns8250_getc(struct uart_bas *bas, struct mtx *hwmtx) in ns8250_getc() argument
402 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) == 0) { in ns8250_getc()
408 c = uart_getreg(bas, REG_DATA); in ns8250_getc()
517 struct uart_bas *bas; in ns8250_bus_attach() local
531 bas = &sc->sc_bas; in ns8250_bus_attach()
533 ns8250->busy_detect = bas->busy_detect; in ns8250_bus_attach()
534 ns8250->mcr = uart_getreg(bas, REG_MCR); in ns8250_bus_attach()
564 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_attach()
565 uart_barrier(bas); in ns8250_bus_attach()
574 ns8250_clrint(bas); in ns8250_bus_attach()
575 ns8250->ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_attach()
577 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_attach()
578 uart_barrier(bas); in ns8250_bus_attach()
599 struct uart_bas *bas; in ns8250_bus_detach() local
603 bas = &sc->sc_bas; in ns8250_bus_detach()
604 ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_detach()
605 uart_setreg(bas, REG_IER, ier); in ns8250_bus_detach()
606 uart_barrier(bas); in ns8250_bus_detach()
607 ns8250_clrint(bas); in ns8250_bus_detach()
615 struct uart_bas *bas; in ns8250_bus_flush() local
618 bas = &sc->sc_bas; in ns8250_bus_flush()
621 ns8250_flush(bas, what); in ns8250_bus_flush()
622 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_flush()
623 uart_barrier(bas); in ns8250_bus_flush()
626 error = ns8250_drain(bas, what); in ns8250_bus_flush()
671 struct uart_bas *bas; in ns8250_bus_ioctl() local
675 bas = &sc->sc_bas; in ns8250_bus_ioctl()
680 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
685 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
686 uart_barrier(bas); in ns8250_bus_ioctl()
689 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
690 uart_barrier(bas); in ns8250_bus_ioctl()
691 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
692 uart_barrier(bas); in ns8250_bus_ioctl()
693 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
698 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
699 uart_barrier(bas); in ns8250_bus_ioctl()
700 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
701 uart_barrier(bas); in ns8250_bus_ioctl()
704 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
705 uart_barrier(bas); in ns8250_bus_ioctl()
706 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
707 uart_barrier(bas); in ns8250_bus_ioctl()
708 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
713 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
714 uart_barrier(bas); in ns8250_bus_ioctl()
715 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
716 uart_barrier(bas); in ns8250_bus_ioctl()
719 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
720 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_bus_ioctl()
721 uart_barrier(bas); in ns8250_bus_ioctl()
722 divisor = uart_getreg(bas, REG_DLL) | in ns8250_bus_ioctl()
723 (uart_getreg(bas, REG_DLH) << 8); in ns8250_bus_ioctl()
724 uart_barrier(bas); in ns8250_bus_ioctl()
725 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
726 uart_barrier(bas); in ns8250_bus_ioctl()
727 baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0; in ns8250_bus_ioctl()
744 struct uart_bas *bas; in ns8250_bus_ipend() local
750 bas = &sc->sc_bas; in ns8250_bus_ipend()
752 iir = uart_getreg(bas, REG_IIR); in ns8250_bus_ipend()
755 (void)uart_getreg(bas, DW_REG_USR); in ns8250_bus_ipend()
765 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_ipend()
776 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ipend()
777 uart_barrier(bas); in ns8250_bus_ipend()
782 ns8250_clrint(bas); in ns8250_bus_ipend()
792 struct uart_bas *bas; in ns8250_bus_param() local
796 bas = &sc->sc_bas; in ns8250_bus_param()
809 while (((uart_getreg(bas, DW_REG_USR) & USR_BUSY) != 0) && in ns8250_bus_param()
820 error = ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_bus_param()
828 struct uart_bas *bas; in ns8250_bus_probe() local
833 bas = &sc->sc_bas; in ns8250_bus_probe()
835 error = ns8250_probe(bas); in ns8250_bus_probe()
842 ns8250_init(bas, 115200, 8, 1, UART_PARITY_NONE); in ns8250_bus_probe()
846 error = ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
856 uart_setreg(bas, REG_MCR, MCR_LOOPBACK | MCR_IE | MCR_DTR | MCR_RTS); in ns8250_bus_probe()
857 uart_barrier(bas); in ns8250_bus_probe()
868 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
869 uart_barrier(bas); in ns8250_bus_probe()
870 if (!(uart_getreg(bas, REG_IIR) & IIR_FIFO_MASK)) { in ns8250_bus_probe()
875 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
876 uart_barrier(bas); in ns8250_bus_probe()
886 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
887 uart_barrier(bas); in ns8250_bus_probe()
890 delay = ns8250_delay(bas); in ns8250_bus_probe()
893 error = ns8250_drain(bas, UART_DRAIN_RECEIVER|UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
895 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
900 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
901 uart_barrier(bas); in ns8250_bus_probe()
913 uart_setreg(bas, REG_DATA, 0); in ns8250_bus_probe()
914 uart_barrier(bas); in ns8250_bus_probe()
923 while (((lsr |= uart_getreg(bas, REG_LSR)) & LSR_TEMT) == 0 && in ns8250_bus_probe()
928 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_bus_probe()
929 uart_setreg(bas, REG_IER, ier); in ns8250_bus_probe()
930 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
935 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
936 uart_barrier(bas); in ns8250_bus_probe()
943 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
946 ns8250_flush(bas, UART_FLUSH_RECEIVER|UART_FLUSH_TRANSMITTER); in ns8250_bus_probe()
997 struct uart_bas *bas; in ns8250_bus_receive() local
1001 bas = &sc->sc_bas; in ns8250_bus_receive()
1003 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
1009 xc = uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
1015 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
1019 (void)uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
1020 uart_barrier(bas); in ns8250_bus_receive()
1021 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
1031 struct uart_bas *bas; in ns8250_bus_setsig() local
1034 bas = &sc->sc_bas; in ns8250_bus_setsig()
1051 uart_setreg(bas, REG_MCR, ns8250->mcr); in ns8250_bus_setsig()
1052 uart_barrier(bas); in ns8250_bus_setsig()
1061 struct uart_bas *bas; in ns8250_bus_transmit() local
1064 bas = &sc->sc_bas; in ns8250_bus_transmit()
1066 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0) in ns8250_bus_transmit()
1069 uart_setreg(bas, REG_DATA, sc->sc_txbuf[i]); in ns8250_bus_transmit()
1070 uart_barrier(bas); in ns8250_bus_transmit()
1074 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_transmit()
1075 uart_barrier(bas); in ns8250_bus_transmit()
1077 ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_transmit()
1089 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_txbusy() local
1091 if ((uart_getreg(bas, REG_LSR) & (LSR_TEMT | LSR_THRE)) != in ns8250_bus_txbusy()
1100 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_grab() local
1110 ier = uart_getreg(bas, REG_IER); in ns8250_bus_grab()
1111 uart_setreg(bas, REG_IER, ier & ns8250->ier_mask); in ns8250_bus_grab()
1112 uart_barrier(bas); in ns8250_bus_grab()
1120 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_ungrab() local
1126 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ungrab()
1127 uart_barrier(bas); in ns8250_bus_ungrab()