Lines Matching refs:bas

88 ns8250_clrint(struct uart_bas *bas)  in ns8250_clrint()  argument
92 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
96 lsr = uart_getreg(bas, REG_LSR); in ns8250_clrint()
98 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
100 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
102 (void)uart_getreg(bas, REG_MSR); in ns8250_clrint()
103 uart_barrier(bas); in ns8250_clrint()
104 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
109 ns8250_delay(struct uart_bas *bas) in ns8250_delay() argument
114 lcr = uart_getreg(bas, REG_LCR); in ns8250_delay()
115 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_delay()
116 uart_barrier(bas); in ns8250_delay()
117 divisor = uart_getreg(bas, REG_DLL) | (uart_getreg(bas, REG_DLH) << 8); in ns8250_delay()
118 uart_barrier(bas); in ns8250_delay()
119 uart_setreg(bas, REG_LCR, lcr); in ns8250_delay()
120 uart_barrier(bas); in ns8250_delay()
124 return (16000000 * divisor / bas->rclk); in ns8250_delay()
125 return (16000 * divisor / (bas->rclk / 1000)); in ns8250_delay()
153 ns8250_drain(struct uart_bas *bas, int what) in ns8250_drain() argument
157 delay = ns8250_delay(bas); in ns8250_drain()
166 while ((uart_getreg(bas, REG_LSR) & LSR_TEMT) == 0 && --limit) in ns8250_drain()
184 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit) { in ns8250_drain()
185 (void)uart_getreg(bas, REG_DATA); in ns8250_drain()
186 uart_barrier(bas); in ns8250_drain()
203 ns8250_flush(struct uart_bas *bas, int what) in ns8250_flush() argument
215 uart_setreg(bas, REG_FCR, fcr); in ns8250_flush()
216 uart_barrier(bas); in ns8250_flush()
220 ns8250_param(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_param() argument
241 divisor = ns8250_divisor(bas->rclk, baudrate); in ns8250_param()
244 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_param()
245 uart_barrier(bas); in ns8250_param()
246 uart_setreg(bas, REG_DLL, divisor & 0xff); in ns8250_param()
247 uart_setreg(bas, REG_DLH, (divisor >> 8) & 0xff); in ns8250_param()
248 uart_barrier(bas); in ns8250_param()
252 uart_setreg(bas, REG_LCR, lcr); in ns8250_param()
253 uart_barrier(bas); in ns8250_param()
260 static int ns8250_probe(struct uart_bas *bas);
261 static void ns8250_init(struct uart_bas *bas, int, int, int, int);
262 static void ns8250_term(struct uart_bas *bas);
263 static void ns8250_putc(struct uart_bas *bas, int);
264 static int ns8250_rxready(struct uart_bas *bas);
265 static int ns8250_getc(struct uart_bas *bas, struct mtx *);
277 ns8250_probe(struct uart_bas *bas) in ns8250_probe() argument
282 uart_setreg(bas, REG_FCR, FCR_UART_ON); in ns8250_probe()
286 val = uart_getreg(bas, REG_IIR); in ns8250_probe()
295 val = uart_getreg(bas, REG_MCR); in ns8250_probe()
303 ns8250_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_init() argument
308 if (bas->rclk == 0) in ns8250_init()
309 bas->rclk = DEFAULT_RCLK; in ns8250_init()
310 ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_init()
318 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_init()
319 uart_setreg(bas, REG_IER, ier); in ns8250_init()
320 uart_barrier(bas); in ns8250_init()
327 uart_setreg(bas, REG_FCR, val); in ns8250_init()
328 uart_barrier(bas); in ns8250_init()
331 uart_setreg(bas, REG_MCR, MCR_IE | MCR_RTS | MCR_DTR); in ns8250_init()
332 uart_barrier(bas); in ns8250_init()
334 ns8250_clrint(bas); in ns8250_init()
338 ns8250_term(struct uart_bas *bas) in ns8250_term() argument
342 uart_setreg(bas, REG_MCR, MCR_IE); in ns8250_term()
343 uart_barrier(bas); in ns8250_term()
347 ns8250_putc(struct uart_bas *bas, int c) in ns8250_putc() argument
352 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0 && --limit) in ns8250_putc()
354 uart_setreg(bas, REG_DATA, c); in ns8250_putc()
355 uart_barrier(bas); in ns8250_putc()
359 ns8250_rxready(struct uart_bas *bas) in ns8250_rxready() argument
362 return ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) != 0 ? 1 : 0); in ns8250_rxready()
366 ns8250_getc(struct uart_bas *bas, struct mtx *hwmtx) in ns8250_getc() argument
372 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) == 0) { in ns8250_getc()
378 c = uart_getreg(bas, REG_DATA); in ns8250_getc()
484 struct uart_bas *bas; in ns8250_bus_attach() local
498 bas = &sc->sc_bas; in ns8250_bus_attach()
500 ns8250->busy_detect = bas->busy_detect; in ns8250_bus_attach()
501 ns8250->mcr = uart_getreg(bas, REG_MCR); in ns8250_bus_attach()
531 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_attach()
532 uart_barrier(bas); in ns8250_bus_attach()
541 ns8250_clrint(bas); in ns8250_bus_attach()
542 ns8250->ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_attach()
544 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_attach()
545 uart_barrier(bas); in ns8250_bus_attach()
566 struct uart_bas *bas; in ns8250_bus_detach() local
570 bas = &sc->sc_bas; in ns8250_bus_detach()
571 ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_detach()
572 uart_setreg(bas, REG_IER, ier); in ns8250_bus_detach()
573 uart_barrier(bas); in ns8250_bus_detach()
574 ns8250_clrint(bas); in ns8250_bus_detach()
582 struct uart_bas *bas; in ns8250_bus_flush() local
585 bas = &sc->sc_bas; in ns8250_bus_flush()
588 ns8250_flush(bas, what); in ns8250_bus_flush()
589 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_flush()
590 uart_barrier(bas); in ns8250_bus_flush()
593 error = ns8250_drain(bas, what); in ns8250_bus_flush()
638 struct uart_bas *bas; in ns8250_bus_ioctl() local
642 bas = &sc->sc_bas; in ns8250_bus_ioctl()
647 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
652 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
653 uart_barrier(bas); in ns8250_bus_ioctl()
656 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
657 uart_barrier(bas); in ns8250_bus_ioctl()
658 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
659 uart_barrier(bas); in ns8250_bus_ioctl()
660 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
665 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
666 uart_barrier(bas); in ns8250_bus_ioctl()
667 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
668 uart_barrier(bas); in ns8250_bus_ioctl()
671 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
672 uart_barrier(bas); in ns8250_bus_ioctl()
673 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
674 uart_barrier(bas); in ns8250_bus_ioctl()
675 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
680 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
681 uart_barrier(bas); in ns8250_bus_ioctl()
682 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
683 uart_barrier(bas); in ns8250_bus_ioctl()
686 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
687 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_bus_ioctl()
688 uart_barrier(bas); in ns8250_bus_ioctl()
689 divisor = uart_getreg(bas, REG_DLL) | in ns8250_bus_ioctl()
690 (uart_getreg(bas, REG_DLH) << 8); in ns8250_bus_ioctl()
691 uart_barrier(bas); in ns8250_bus_ioctl()
692 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
693 uart_barrier(bas); in ns8250_bus_ioctl()
694 baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0; in ns8250_bus_ioctl()
711 struct uart_bas *bas; in ns8250_bus_ipend() local
717 bas = &sc->sc_bas; in ns8250_bus_ipend()
719 iir = uart_getreg(bas, REG_IIR); in ns8250_bus_ipend()
722 (void)uart_getreg(bas, DW_REG_USR); in ns8250_bus_ipend()
732 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_ipend()
743 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ipend()
744 uart_barrier(bas); in ns8250_bus_ipend()
749 ns8250_clrint(bas); in ns8250_bus_ipend()
759 struct uart_bas *bas; in ns8250_bus_param() local
763 bas = &sc->sc_bas; in ns8250_bus_param()
776 while (((uart_getreg(bas, DW_REG_USR) & USR_BUSY) != 0) && in ns8250_bus_param()
787 error = ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_bus_param()
795 struct uart_bas *bas; in ns8250_bus_probe() local
800 bas = &sc->sc_bas; in ns8250_bus_probe()
802 error = ns8250_probe(bas); in ns8250_bus_probe()
809 ns8250_init(bas, 115200, 8, 1, UART_PARITY_NONE); in ns8250_bus_probe()
813 error = ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
823 uart_setreg(bas, REG_MCR, MCR_LOOPBACK | MCR_IE | MCR_DTR | MCR_RTS); in ns8250_bus_probe()
824 uart_barrier(bas); in ns8250_bus_probe()
835 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
836 uart_barrier(bas); in ns8250_bus_probe()
837 if (!(uart_getreg(bas, REG_IIR) & IIR_FIFO_MASK)) { in ns8250_bus_probe()
842 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
843 uart_barrier(bas); in ns8250_bus_probe()
853 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
854 uart_barrier(bas); in ns8250_bus_probe()
857 delay = ns8250_delay(bas); in ns8250_bus_probe()
860 error = ns8250_drain(bas, UART_DRAIN_RECEIVER|UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
862 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
867 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
868 uart_barrier(bas); in ns8250_bus_probe()
880 uart_setreg(bas, REG_DATA, 0); in ns8250_bus_probe()
881 uart_barrier(bas); in ns8250_bus_probe()
890 while (((lsr |= uart_getreg(bas, REG_LSR)) & LSR_TEMT) == 0 && in ns8250_bus_probe()
895 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_bus_probe()
896 uart_setreg(bas, REG_IER, ier); in ns8250_bus_probe()
897 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
902 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
903 uart_barrier(bas); in ns8250_bus_probe()
910 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
913 ns8250_flush(bas, UART_FLUSH_RECEIVER|UART_FLUSH_TRANSMITTER); in ns8250_bus_probe()
964 struct uart_bas *bas; in ns8250_bus_receive() local
968 bas = &sc->sc_bas; in ns8250_bus_receive()
970 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
976 xc = uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
982 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
986 (void)uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
987 uart_barrier(bas); in ns8250_bus_receive()
988 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
998 struct uart_bas *bas; in ns8250_bus_setsig() local
1001 bas = &sc->sc_bas; in ns8250_bus_setsig()
1018 uart_setreg(bas, REG_MCR, ns8250->mcr); in ns8250_bus_setsig()
1019 uart_barrier(bas); in ns8250_bus_setsig()
1028 struct uart_bas *bas; in ns8250_bus_transmit() local
1031 bas = &sc->sc_bas; in ns8250_bus_transmit()
1033 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0) in ns8250_bus_transmit()
1036 uart_setreg(bas, REG_DATA, sc->sc_txbuf[i]); in ns8250_bus_transmit()
1037 uart_barrier(bas); in ns8250_bus_transmit()
1041 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_transmit()
1042 uart_barrier(bas); in ns8250_bus_transmit()
1044 ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_transmit()
1056 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_grab() local
1066 ier = uart_getreg(bas, REG_IER); in ns8250_bus_grab()
1067 uart_setreg(bas, REG_IER, ier & ns8250->ier_mask); in ns8250_bus_grab()
1068 uart_barrier(bas); in ns8250_bus_grab()
1076 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_ungrab() local
1082 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ungrab()
1083 uart_barrier(bas); in ns8250_bus_ungrab()