Lines Matching refs:bas

87 ns8250_clrint(struct uart_bas *bas)  in ns8250_clrint()  argument
91 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
95 lsr = uart_getreg(bas, REG_LSR); in ns8250_clrint()
97 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
99 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
101 (void)uart_getreg(bas, REG_MSR); in ns8250_clrint()
102 uart_barrier(bas); in ns8250_clrint()
103 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
108 ns8250_delay(struct uart_bas *bas) in ns8250_delay() argument
113 lcr = uart_getreg(bas, REG_LCR); in ns8250_delay()
114 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_delay()
115 uart_barrier(bas); in ns8250_delay()
116 divisor = uart_getreg(bas, REG_DLL) | (uart_getreg(bas, REG_DLH) << 8); in ns8250_delay()
117 uart_barrier(bas); in ns8250_delay()
118 uart_setreg(bas, REG_LCR, lcr); in ns8250_delay()
119 uart_barrier(bas); in ns8250_delay()
123 return (16000000 * divisor / bas->rclk); in ns8250_delay()
124 return (16000 * divisor / (bas->rclk / 1000)); in ns8250_delay()
152 ns8250_drain(struct uart_bas *bas, int what) in ns8250_drain() argument
156 delay = ns8250_delay(bas); in ns8250_drain()
165 while ((uart_getreg(bas, REG_LSR) & LSR_TEMT) == 0 && --limit) in ns8250_drain()
183 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit) { in ns8250_drain()
184 (void)uart_getreg(bas, REG_DATA); in ns8250_drain()
185 uart_barrier(bas); in ns8250_drain()
202 ns8250_flush(struct uart_bas *bas, int what) in ns8250_flush() argument
214 uart_setreg(bas, REG_FCR, fcr); in ns8250_flush()
215 uart_barrier(bas); in ns8250_flush()
219 ns8250_param(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_param() argument
240 divisor = ns8250_divisor(bas->rclk, baudrate); in ns8250_param()
243 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_param()
244 uart_barrier(bas); in ns8250_param()
245 uart_setreg(bas, REG_DLL, divisor & 0xff); in ns8250_param()
246 uart_setreg(bas, REG_DLH, (divisor >> 8) & 0xff); in ns8250_param()
247 uart_barrier(bas); in ns8250_param()
251 uart_setreg(bas, REG_LCR, lcr); in ns8250_param()
252 uart_barrier(bas); in ns8250_param()
259 static int ns8250_probe(struct uart_bas *bas);
260 static void ns8250_init(struct uart_bas *bas, int, int, int, int);
261 static void ns8250_term(struct uart_bas *bas);
262 static void ns8250_putc(struct uart_bas *bas, int);
263 static int ns8250_rxready(struct uart_bas *bas);
264 static int ns8250_getc(struct uart_bas *bas, struct mtx *);
276 ns8250_probe(struct uart_bas *bas) in ns8250_probe() argument
281 uart_setreg(bas, REG_FCR, FCR_UART_ON); in ns8250_probe()
285 val = uart_getreg(bas, REG_IIR); in ns8250_probe()
294 val = uart_getreg(bas, REG_MCR); in ns8250_probe()
302 ns8250_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_init() argument
307 if (bas->rclk == 0) in ns8250_init()
308 bas->rclk = DEFAULT_RCLK; in ns8250_init()
309 ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_init()
317 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_init()
318 uart_setreg(bas, REG_IER, ier); in ns8250_init()
319 uart_barrier(bas); in ns8250_init()
326 uart_setreg(bas, REG_FCR, val); in ns8250_init()
327 uart_barrier(bas); in ns8250_init()
330 uart_setreg(bas, REG_MCR, MCR_IE | MCR_RTS | MCR_DTR); in ns8250_init()
331 uart_barrier(bas); in ns8250_init()
333 ns8250_clrint(bas); in ns8250_init()
337 ns8250_term(struct uart_bas *bas) in ns8250_term() argument
341 uart_setreg(bas, REG_MCR, MCR_IE); in ns8250_term()
342 uart_barrier(bas); in ns8250_term()
346 ns8250_putc(struct uart_bas *bas, int c) in ns8250_putc() argument
351 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0 && --limit) in ns8250_putc()
353 uart_setreg(bas, REG_DATA, c); in ns8250_putc()
354 uart_barrier(bas); in ns8250_putc()
358 ns8250_rxready(struct uart_bas *bas) in ns8250_rxready() argument
361 return ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) != 0 ? 1 : 0); in ns8250_rxready()
365 ns8250_getc(struct uart_bas *bas, struct mtx *hwmtx) in ns8250_getc() argument
371 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) == 0) { in ns8250_getc()
377 c = uart_getreg(bas, REG_DATA); in ns8250_getc()
480 struct uart_bas *bas; in ns8250_bus_attach() local
494 bas = &sc->sc_bas; in ns8250_bus_attach()
496 ns8250->busy_detect = bas->busy_detect; in ns8250_bus_attach()
497 ns8250->mcr = uart_getreg(bas, REG_MCR); in ns8250_bus_attach()
527 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_attach()
528 uart_barrier(bas); in ns8250_bus_attach()
537 ns8250_clrint(bas); in ns8250_bus_attach()
538 ns8250->ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_attach()
540 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_attach()
541 uart_barrier(bas); in ns8250_bus_attach()
562 struct uart_bas *bas; in ns8250_bus_detach() local
566 bas = &sc->sc_bas; in ns8250_bus_detach()
567 ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_detach()
568 uart_setreg(bas, REG_IER, ier); in ns8250_bus_detach()
569 uart_barrier(bas); in ns8250_bus_detach()
570 ns8250_clrint(bas); in ns8250_bus_detach()
578 struct uart_bas *bas; in ns8250_bus_flush() local
581 bas = &sc->sc_bas; in ns8250_bus_flush()
584 ns8250_flush(bas, what); in ns8250_bus_flush()
585 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_flush()
586 uart_barrier(bas); in ns8250_bus_flush()
589 error = ns8250_drain(bas, what); in ns8250_bus_flush()
634 struct uart_bas *bas; in ns8250_bus_ioctl() local
638 bas = &sc->sc_bas; in ns8250_bus_ioctl()
643 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
648 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
649 uart_barrier(bas); in ns8250_bus_ioctl()
652 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
653 uart_barrier(bas); in ns8250_bus_ioctl()
654 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
655 uart_barrier(bas); in ns8250_bus_ioctl()
656 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
661 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
662 uart_barrier(bas); in ns8250_bus_ioctl()
663 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
664 uart_barrier(bas); in ns8250_bus_ioctl()
667 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
668 uart_barrier(bas); in ns8250_bus_ioctl()
669 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
670 uart_barrier(bas); in ns8250_bus_ioctl()
671 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
676 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
677 uart_barrier(bas); in ns8250_bus_ioctl()
678 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
679 uart_barrier(bas); in ns8250_bus_ioctl()
682 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
683 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_bus_ioctl()
684 uart_barrier(bas); in ns8250_bus_ioctl()
685 divisor = uart_getreg(bas, REG_DLL) | in ns8250_bus_ioctl()
686 (uart_getreg(bas, REG_DLH) << 8); in ns8250_bus_ioctl()
687 uart_barrier(bas); in ns8250_bus_ioctl()
688 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
689 uart_barrier(bas); in ns8250_bus_ioctl()
690 baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0; in ns8250_bus_ioctl()
707 struct uart_bas *bas; in ns8250_bus_ipend() local
713 bas = &sc->sc_bas; in ns8250_bus_ipend()
715 iir = uart_getreg(bas, REG_IIR); in ns8250_bus_ipend()
718 (void)uart_getreg(bas, DW_REG_USR); in ns8250_bus_ipend()
728 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_ipend()
738 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ipend()
739 uart_barrier(bas); in ns8250_bus_ipend()
744 ns8250_clrint(bas); in ns8250_bus_ipend()
754 struct uart_bas *bas; in ns8250_bus_param() local
758 bas = &sc->sc_bas; in ns8250_bus_param()
771 while (((uart_getreg(bas, DW_REG_USR) & USR_BUSY) != 0) && in ns8250_bus_param()
782 error = ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_bus_param()
791 struct uart_bas *bas; in ns8250_bus_probe() local
797 bas = &sc->sc_bas; in ns8250_bus_probe()
799 error = ns8250_probe(bas); in ns8250_bus_probe()
806 ns8250_init(bas, 115200, 8, 1, UART_PARITY_NONE); in ns8250_bus_probe()
810 error = ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
820 uart_setreg(bas, REG_MCR, MCR_LOOPBACK | MCR_IE | MCR_DTR | MCR_RTS); in ns8250_bus_probe()
821 uart_barrier(bas); in ns8250_bus_probe()
832 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
833 uart_barrier(bas); in ns8250_bus_probe()
834 if (!(uart_getreg(bas, REG_IIR) & IIR_FIFO_MASK)) { in ns8250_bus_probe()
839 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
840 uart_barrier(bas); in ns8250_bus_probe()
850 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
851 uart_barrier(bas); in ns8250_bus_probe()
854 delay = ns8250_delay(bas); in ns8250_bus_probe()
857 error = ns8250_drain(bas, UART_DRAIN_RECEIVER|UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
859 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
864 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
865 uart_barrier(bas); in ns8250_bus_probe()
877 uart_setreg(bas, REG_DATA, 0); in ns8250_bus_probe()
878 uart_barrier(bas); in ns8250_bus_probe()
887 while (((lsr |= uart_getreg(bas, REG_LSR)) & LSR_TEMT) == 0 && in ns8250_bus_probe()
891 ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_probe()
892 uart_setreg(bas, REG_IER, ier); in ns8250_bus_probe()
893 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
898 uart_setreg(bas, REG_FCR, val); in ns8250_bus_probe()
899 uart_barrier(bas); in ns8250_bus_probe()
906 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
909 ns8250_flush(bas, UART_FLUSH_RECEIVER|UART_FLUSH_TRANSMITTER); in ns8250_bus_probe()
960 struct uart_bas *bas; in ns8250_bus_receive() local
964 bas = &sc->sc_bas; in ns8250_bus_receive()
966 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
972 xc = uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
978 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
982 (void)uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
983 uart_barrier(bas); in ns8250_bus_receive()
984 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
994 struct uart_bas *bas; in ns8250_bus_setsig() local
997 bas = &sc->sc_bas; in ns8250_bus_setsig()
1014 uart_setreg(bas, REG_MCR, ns8250->mcr); in ns8250_bus_setsig()
1015 uart_barrier(bas); in ns8250_bus_setsig()
1024 struct uart_bas *bas; in ns8250_bus_transmit() local
1027 bas = &sc->sc_bas; in ns8250_bus_transmit()
1030 if ((uart_getreg(bas, REG_LSR) & LSR_TEMT) == 0) in ns8250_bus_transmit()
1031 ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_transmit()
1033 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0) in ns8250_bus_transmit()
1037 uart_setreg(bas, REG_DATA, sc->sc_txbuf[i]); in ns8250_bus_transmit()
1038 uart_barrier(bas); in ns8250_bus_transmit()
1040 uart_setreg(bas, REG_IER, ns8250->ier | IER_ETXRDY); in ns8250_bus_transmit()
1041 uart_barrier(bas); in ns8250_bus_transmit()
1043 ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_transmit()
1055 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_grab() local
1065 ier = uart_getreg(bas, REG_IER); in ns8250_bus_grab()
1066 uart_setreg(bas, REG_IER, ier & ns8250->ier_mask); in ns8250_bus_grab()
1067 uart_barrier(bas); in ns8250_bus_grab()
1075 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_ungrab() local
1081 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ungrab()
1082 uart_barrier(bas); in ns8250_bus_ungrab()