Lines Matching refs:bas

150 ns8250_clrint(struct uart_bas *bas)  in ns8250_clrint()  argument
154 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
158 lsr = uart_getreg(bas, REG_LSR); in ns8250_clrint()
160 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
162 (void)uart_getreg(bas, REG_DATA); in ns8250_clrint()
164 (void)uart_getreg(bas, REG_MSR); in ns8250_clrint()
165 uart_barrier(bas); in ns8250_clrint()
166 iir = uart_getreg(bas, REG_IIR); in ns8250_clrint()
171 ns8250_get_divisor(struct uart_bas *bas) in ns8250_get_divisor() argument
176 lcr = uart_getreg(bas, REG_LCR); in ns8250_get_divisor()
177 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_get_divisor()
178 uart_barrier(bas); in ns8250_get_divisor()
179 divisor = uart_getreg(bas, REG_DLL) | (uart_getreg(bas, REG_DLH) << 8); in ns8250_get_divisor()
180 uart_barrier(bas); in ns8250_get_divisor()
181 uart_setreg(bas, REG_LCR, lcr); in ns8250_get_divisor()
182 uart_barrier(bas); in ns8250_get_divisor()
188 ns8250_delay(struct uart_bas *bas) in ns8250_delay() argument
192 divisor = ns8250_get_divisor(bas); in ns8250_delay()
196 return (16000000 * divisor / bas->rclk); in ns8250_delay()
197 return (16000 * divisor / (bas->rclk / 1000)); in ns8250_delay()
225 ns8250_drain(struct uart_bas *bas, int what) in ns8250_drain() argument
229 delay = ns8250_delay(bas); in ns8250_drain()
238 while ((uart_getreg(bas, REG_LSR) & LSR_TEMT) == 0 && --limit) in ns8250_drain()
260 while (limit && (uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit) { in ns8250_drain()
262 (void)uart_getreg(bas, REG_DATA); in ns8250_drain()
263 uart_barrier(bas); in ns8250_drain()
264 } while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit); in ns8250_drain()
265 uart_barrier(bas); in ns8250_drain()
282 ns8250_flush(struct uart_bas *bas, int what) in ns8250_flush() argument
293 uart_setreg(bas, REG_FCR, fcr); in ns8250_flush()
294 uart_barrier(bas); in ns8250_flush()
303 lsr = uart_getreg(bas, REG_LSR); in ns8250_flush()
310 ns8250_drain(bas, drain); in ns8250_flush()
315 ns8250_param(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_param() argument
339 if (baudrate > 0 && bas->rclk > 0) { in ns8250_param()
340 divisor = ns8250_divisor(bas->rclk, baudrate); in ns8250_param()
343 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in ns8250_param()
344 uart_barrier(bas); in ns8250_param()
345 uart_setreg(bas, REG_DLL, divisor & 0xff); in ns8250_param()
346 uart_setreg(bas, REG_DLH, (divisor >> 8) & 0xff); in ns8250_param()
347 uart_barrier(bas); in ns8250_param()
351 uart_setreg(bas, REG_LCR, lcr); in ns8250_param()
352 uart_barrier(bas); in ns8250_param()
359 static int ns8250_probe(struct uart_bas *bas);
360 static void ns8250_init(struct uart_bas *bas, int, int, int, int);
361 static void ns8250_term(struct uart_bas *bas);
362 static void ns8250_putc(struct uart_bas *bas, int);
363 static int ns8250_rxready(struct uart_bas *bas);
364 static int ns8250_getc(struct uart_bas *bas, struct mtx *);
376 ns8250_probe(struct uart_bas *bas) in ns8250_probe() argument
381 val = uart_getreg(bas, REG_IIR); in ns8250_probe()
390 val = uart_getreg(bas, REG_MCR); in ns8250_probe()
398 ns8250_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, in ns8250_init() argument
409 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_init()
410 uart_setreg(bas, REG_IER, ier); in ns8250_init()
411 uart_barrier(bas); in ns8250_init()
420 if (bas->rclk_guess && bas->rclk == 0 && baudrate != 0) { in ns8250_init()
423 div = ns8250_get_divisor(bas); in ns8250_init()
424 bas->rclk = baudrate * div * 16; in ns8250_init()
432 if (bas->rclk == 0 && baudrate != 0) in ns8250_init()
433 bas->rclk = DEFAULT_RCLK; in ns8250_init()
435 ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_init()
438 uart_setreg(bas, REG_FCR, 0); in ns8250_init()
439 uart_barrier(bas); in ns8250_init()
442 uart_setreg(bas, REG_MCR, MCR_IE | MCR_RTS | MCR_DTR); in ns8250_init()
443 uart_barrier(bas); in ns8250_init()
445 ns8250_clrint(bas); in ns8250_init()
449 ns8250_term(struct uart_bas *bas) in ns8250_term() argument
453 uart_setreg(bas, REG_MCR, MCR_IE); in ns8250_term()
454 uart_barrier(bas); in ns8250_term()
458 ns8250_putc(struct uart_bas *bas, int c) in ns8250_putc() argument
464 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0 && --limit) in ns8250_putc()
467 uart_setreg(bas, REG_DATA, c); in ns8250_putc()
468 uart_barrier(bas); in ns8250_putc()
472 ns8250_rxready(struct uart_bas *bas) in ns8250_rxready() argument
475 return ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) != 0 ? 1 : 0); in ns8250_rxready()
479 ns8250_getc(struct uart_bas *bas, struct mtx *hwmtx) in ns8250_getc() argument
485 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) == 0) { in ns8250_getc()
491 c = uart_getreg(bas, REG_DATA); in ns8250_getc()
610 struct uart_bas *bas; in ns8250_bus_attach() local
624 bas = &sc->sc_bas; in ns8250_bus_attach()
626 ns8250->busy_detect = bas->busy_detect; in ns8250_bus_attach()
627 ns8250->mcr = uart_getreg(bas, REG_MCR); in ns8250_bus_attach()
654 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_attach()
655 uart_barrier(bas); in ns8250_bus_attach()
664 ns8250_clrint(bas); in ns8250_bus_attach()
665 ns8250->ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_attach()
667 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_attach()
668 uart_barrier(bas); in ns8250_bus_attach()
689 struct uart_bas *bas; in ns8250_bus_detach() local
693 bas = &sc->sc_bas; in ns8250_bus_detach()
694 ier = uart_getreg(bas, REG_IER) & ns8250->ier_mask; in ns8250_bus_detach()
695 uart_setreg(bas, REG_IER, ier); in ns8250_bus_detach()
696 uart_barrier(bas); in ns8250_bus_detach()
697 ns8250_clrint(bas); in ns8250_bus_detach()
705 struct uart_bas *bas; in ns8250_bus_flush() local
708 bas = &sc->sc_bas; in ns8250_bus_flush()
711 ns8250_flush(bas, what); in ns8250_bus_flush()
712 uart_setreg(bas, REG_FCR, ns8250->fcr); in ns8250_bus_flush()
713 uart_barrier(bas); in ns8250_bus_flush()
716 error = ns8250_drain(bas, what); in ns8250_bus_flush()
761 struct uart_bas *bas; in ns8250_bus_ioctl() local
765 bas = &sc->sc_bas; in ns8250_bus_ioctl()
770 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
775 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
776 uart_barrier(bas); in ns8250_bus_ioctl()
779 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
780 uart_barrier(bas); in ns8250_bus_ioctl()
781 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
782 uart_barrier(bas); in ns8250_bus_ioctl()
783 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
788 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
789 uart_barrier(bas); in ns8250_bus_ioctl()
790 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
791 uart_barrier(bas); in ns8250_bus_ioctl()
794 lcr = uart_getreg(bas, REG_LCR); in ns8250_bus_ioctl()
795 uart_barrier(bas); in ns8250_bus_ioctl()
796 uart_setreg(bas, REG_LCR, 0xbf); in ns8250_bus_ioctl()
797 uart_barrier(bas); in ns8250_bus_ioctl()
798 efr = uart_getreg(bas, REG_EFR); in ns8250_bus_ioctl()
803 uart_setreg(bas, REG_EFR, efr); in ns8250_bus_ioctl()
804 uart_barrier(bas); in ns8250_bus_ioctl()
805 uart_setreg(bas, REG_LCR, lcr); in ns8250_bus_ioctl()
806 uart_barrier(bas); in ns8250_bus_ioctl()
809 divisor = ns8250_get_divisor(bas); in ns8250_bus_ioctl()
810 baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0; in ns8250_bus_ioctl()
827 struct uart_bas *bas; in ns8250_bus_ipend() local
833 bas = &sc->sc_bas; in ns8250_bus_ipend()
835 iir = uart_getreg(bas, REG_IIR); in ns8250_bus_ipend()
838 (void)uart_getreg(bas, DW_REG_USR); in ns8250_bus_ipend()
848 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_ipend()
859 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ipend()
860 uart_barrier(bas); in ns8250_bus_ipend()
865 ns8250_clrint(bas); in ns8250_bus_ipend()
875 struct uart_bas *bas; in ns8250_bus_param() local
879 bas = &sc->sc_bas; in ns8250_bus_param()
892 while (((uart_getreg(bas, DW_REG_USR) & USR_BUSY) != 0) && in ns8250_bus_param()
903 error = ns8250_param(bas, baudrate, databits, stopbits, parity); in ns8250_bus_param()
911 struct uart_bas *bas; in ns8250_bus_probe() local
915 bas = &sc->sc_bas; in ns8250_bus_probe()
917 error = ns8250_probe(bas); in ns8250_bus_probe()
924 ns8250_init(bas, 115200, 8, 1, UART_PARITY_NONE); in ns8250_bus_probe()
928 error = ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
938 uart_setreg(bas, REG_MCR, MCR_LOOPBACK | MCR_IE | MCR_DTR | MCR_RTS); in ns8250_bus_probe()
939 uart_barrier(bas); in ns8250_bus_probe()
946 uart_setreg(bas, REG_FCR, FCR_ENABLE); in ns8250_bus_probe()
947 uart_barrier(bas); in ns8250_bus_probe()
948 if (!(uart_getreg(bas, REG_IIR) & IIR_FIFO_MASK)) { in ns8250_bus_probe()
953 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
954 uart_barrier(bas); in ns8250_bus_probe()
960 uart_setreg(bas, REG_FCR, FCR_ENABLE | FCR_XMT_RST | FCR_RCV_RST); in ns8250_bus_probe()
961 uart_barrier(bas); in ns8250_bus_probe()
964 delay = ns8250_delay(bas); in ns8250_bus_probe()
967 error = ns8250_drain(bas, UART_DRAIN_RECEIVER|UART_DRAIN_TRANSMITTER); in ns8250_bus_probe()
969 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
970 uart_setreg(bas, REG_FCR, 0); in ns8250_bus_probe()
971 uart_barrier(bas); in ns8250_bus_probe()
983 uart_setreg(bas, REG_DATA, 0); in ns8250_bus_probe()
984 uart_barrier(bas); in ns8250_bus_probe()
993 while (((lsr |= uart_getreg(bas, REG_LSR)) & LSR_TEMT) == 0 && in ns8250_bus_probe()
998 ier = uart_getreg(bas, REG_IER) & 0xe0; in ns8250_bus_probe()
999 uart_setreg(bas, REG_IER, ier); in ns8250_bus_probe()
1000 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
1001 uart_setreg(bas, REG_FCR, 0); in ns8250_bus_probe()
1002 uart_barrier(bas); in ns8250_bus_probe()
1009 uart_setreg(bas, REG_MCR, mcr); in ns8250_bus_probe()
1012 ns8250_flush(bas, UART_FLUSH_RECEIVER|UART_FLUSH_TRANSMITTER); in ns8250_bus_probe()
1063 struct uart_bas *bas; in ns8250_bus_receive() local
1068 bas = &sc->sc_bas; in ns8250_bus_receive()
1070 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
1087 xc = uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
1093 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
1097 (void)uart_getreg(bas, REG_DATA); in ns8250_bus_receive()
1098 uart_barrier(bas); in ns8250_bus_receive()
1099 lsr = uart_getreg(bas, REG_LSR); in ns8250_bus_receive()
1109 struct uart_bas *bas; in ns8250_bus_setsig() local
1112 bas = &sc->sc_bas; in ns8250_bus_setsig()
1129 uart_setreg(bas, REG_MCR, ns8250->mcr); in ns8250_bus_setsig()
1130 uart_barrier(bas); in ns8250_bus_setsig()
1139 struct uart_bas *bas; in ns8250_bus_transmit() local
1142 bas = &sc->sc_bas; in ns8250_bus_transmit()
1144 while ((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0) in ns8250_bus_transmit()
1147 uart_setreg(bas, REG_DATA, sc->sc_txbuf[i]); in ns8250_bus_transmit()
1148 uart_barrier(bas); in ns8250_bus_transmit()
1152 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_transmit()
1153 uart_barrier(bas); in ns8250_bus_transmit()
1155 ns8250_drain(bas, UART_DRAIN_TRANSMITTER); in ns8250_bus_transmit()
1167 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_txbusy() local
1169 if ((uart_getreg(bas, REG_LSR) & (LSR_TEMT | LSR_THRE)) != in ns8250_bus_txbusy()
1178 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_grab() local
1188 ier = uart_getreg(bas, REG_IER); in ns8250_bus_grab()
1189 uart_setreg(bas, REG_IER, ier & ns8250->ier_mask); in ns8250_bus_grab()
1190 uart_barrier(bas); in ns8250_bus_grab()
1198 struct uart_bas *bas = &sc->sc_bas; in ns8250_bus_ungrab() local
1204 uart_setreg(bas, REG_IER, ns8250->ier); in ns8250_bus_ungrab()
1205 uart_barrier(bas); in ns8250_bus_ungrab()