Lines Matching refs:bas

86 oct16550_clrint (struct uart_bas *bas)  in oct16550_clrint()  argument
90 iir = uart_getreg(bas, REG_IIR); in oct16550_clrint()
94 (void)uart_getreg(bas, REG_LSR); in oct16550_clrint()
96 (void)uart_getreg(bas, REG_DATA); in oct16550_clrint()
98 (void)uart_getreg(bas, REG_MSR); in oct16550_clrint()
100 (void) uart_getreg(bas, REG_USR); in oct16550_clrint()
101 uart_barrier(bas); in oct16550_clrint()
102 iir = uart_getreg(bas, REG_IIR); in oct16550_clrint()
109 oct16550_delay (struct uart_bas *bas) in oct16550_delay() argument
117 lcr = uart_getreg(bas, REG_LCR); in oct16550_delay()
118 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in oct16550_delay()
119 uart_barrier(bas); in oct16550_delay()
120 divisor = uart_getreg(bas, REG_DLL) | (uart_getreg(bas, REG_DLH) << 8); in oct16550_delay()
121 uart_barrier(bas); in oct16550_delay()
122 uart_setreg(bas, REG_LCR, lcr); in oct16550_delay()
123 uart_barrier(bas); in oct16550_delay()
125 if(!bas->rclk) in oct16550_delay()
130 return (16000000 * divisor / bas->rclk); in oct16550_delay()
131 return (16000 * divisor / (bas->rclk / 1000)); in oct16550_delay()
160 oct16550_drain (struct uart_bas *bas, int what) in oct16550_drain() argument
164 delay = oct16550_delay(bas); in oct16550_drain()
173 while ((uart_getreg(bas, REG_LSR) & LSR_TEMT) == 0 && --limit) in oct16550_drain()
191 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) && --limit) { in oct16550_drain()
192 (void)uart_getreg(bas, REG_DATA); in oct16550_drain()
193 uart_barrier(bas); in oct16550_drain()
210 oct16550_flush (struct uart_bas *bas, int what) in oct16550_flush() argument
219 uart_setreg(bas, REG_FCR, fcr); in oct16550_flush()
220 uart_barrier(bas); in oct16550_flush()
224 oct16550_param (struct uart_bas *bas, int baudrate, int databits, int stopbits, in oct16550_param() argument
245 divisor = oct16550_divisor(bas->rclk, baudrate); in oct16550_param()
248 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in oct16550_param()
249 uart_barrier(bas); in oct16550_param()
250 uart_setreg(bas, REG_DLL, divisor & 0xff); in oct16550_param()
251 uart_setreg(bas, REG_DLH, (divisor >> 8) & 0xff); in oct16550_param()
252 uart_barrier(bas); in oct16550_param()
257 uart_setreg(bas, REG_LCR, lcr); in oct16550_param()
258 uart_barrier(bas); in oct16550_param()
265 static int oct16550_probe(struct uart_bas *bas);
266 static void oct16550_init(struct uart_bas *bas, int, int, int, int);
267 static void oct16550_term(struct uart_bas *bas);
268 static void oct16550_putc(struct uart_bas *bas, int);
269 static int oct16550_rxready(struct uart_bas *bas);
270 static int oct16550_getc(struct uart_bas *bas, struct mtx *);
282 oct16550_probe (struct uart_bas *bas) in oct16550_probe() argument
287 val = uart_getreg(bas, REG_IIR); in oct16550_probe()
290 val = uart_getreg(bas, REG_MCR); in oct16550_probe()
293 val = uart_getreg(bas, REG_USR); in oct16550_probe()
300 oct16550_init (struct uart_bas *bas, int baudrate, int databits, int stopbits, in oct16550_init() argument
305 oct16550_param(bas, baudrate, databits, stopbits, parity); in oct16550_init()
308 ier = uart_getreg(bas, REG_IER) & 0x0; in oct16550_init()
309 uart_setreg(bas, REG_IER, ier); in oct16550_init()
310 uart_barrier(bas); in oct16550_init()
314 uart_barrier(bas); in oct16550_init()
317 uart_setreg(bas, REG_MCR, MCR_RTS | MCR_DTR); in oct16550_init()
318 uart_barrier(bas); in oct16550_init()
320 oct16550_clrint(bas); in oct16550_init()
324 oct16550_term (struct uart_bas *bas) in oct16550_term() argument
328 uart_setreg(bas, REG_MCR, 0); in oct16550_term()
329 uart_barrier(bas); in oct16550_term()
332 static inline void oct16550_wait_txhr_empty (struct uart_bas *bas, int limit, int delay) in oct16550_wait_txhr_empty() argument
334 while (((uart_getreg(bas, REG_LSR) & LSR_THRE) == 0) && in oct16550_wait_txhr_empty()
335 ((uart_getreg(bas, REG_USR) & USR_TXFIFO_NOTFULL) == 0)) in oct16550_wait_txhr_empty()
340 oct16550_putc (struct uart_bas *bas, int c) in oct16550_putc() argument
345 delay = oct16550_delay(bas); in oct16550_putc()
346 oct16550_wait_txhr_empty(bas, 100, delay); in oct16550_putc()
347 uart_setreg(bas, REG_DATA, c); in oct16550_putc()
348 uart_barrier(bas); in oct16550_putc()
349 oct16550_wait_txhr_empty(bas, 100, delay); in oct16550_putc()
353 oct16550_rxready (struct uart_bas *bas) in oct16550_rxready() argument
356 return ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) != 0 ? 1 : 0); in oct16550_rxready()
360 oct16550_getc (struct uart_bas *bas, struct mtx *hwmtx) in oct16550_getc() argument
367 delay = oct16550_delay(bas); in oct16550_getc()
369 while ((uart_getreg(bas, REG_LSR) & LSR_RXRDY) == 0) { in oct16550_getc()
375 c = uart_getreg(bas, REG_DATA); in oct16550_getc()
444 struct uart_bas *bas; in oct16550_bus_attach() local
448 bas = &sc->sc_bas; in oct16550_bus_attach()
450 oct16550_drain(bas, UART_DRAIN_TRANSMITTER); in oct16550_bus_attach()
451 oct16550->mcr = uart_getreg(bas, REG_MCR); in oct16550_bus_attach()
453 uart_setreg(bas, REG_FCR, oct16550->fcr); in oct16550_bus_attach()
454 uart_barrier(bas); in oct16550_bus_attach()
463 oct16550_clrint(bas); in oct16550_bus_attach()
464 oct16550->ier = uart_getreg(bas, REG_IER) & 0xf0; in oct16550_bus_attach()
466 uart_setreg(bas, REG_IER, oct16550->ier); in oct16550_bus_attach()
467 uart_barrier(bas); in oct16550_bus_attach()
475 struct uart_bas *bas; in oct16550_bus_detach() local
478 bas = &sc->sc_bas; in oct16550_bus_detach()
479 ier = uart_getreg(bas, REG_IER) & 0xf0; in oct16550_bus_detach()
480 uart_setreg(bas, REG_IER, ier); in oct16550_bus_detach()
481 uart_barrier(bas); in oct16550_bus_detach()
482 oct16550_clrint(bas); in oct16550_bus_detach()
490 struct uart_bas *bas; in oct16550_bus_flush() local
493 bas = &sc->sc_bas; in oct16550_bus_flush()
496 oct16550_flush(bas, what); in oct16550_bus_flush()
497 uart_setreg(bas, REG_FCR, oct16550->fcr); in oct16550_bus_flush()
498 uart_barrier(bas); in oct16550_bus_flush()
501 error = oct16550_drain(bas, what); in oct16550_bus_flush()
530 struct uart_bas *bas; in oct16550_bus_ioctl() local
534 bas = &sc->sc_bas; in oct16550_bus_ioctl()
539 lcr = uart_getreg(bas, REG_LCR); in oct16550_bus_ioctl()
544 uart_setreg(bas, REG_LCR, lcr); in oct16550_bus_ioctl()
545 uart_barrier(bas); in oct16550_bus_ioctl()
548 lcr = uart_getreg(bas, REG_LCR); in oct16550_bus_ioctl()
549 uart_barrier(bas); in oct16550_bus_ioctl()
550 uart_setreg(bas, REG_LCR, 0xbf); in oct16550_bus_ioctl()
551 uart_barrier(bas); in oct16550_bus_ioctl()
552 efr = uart_getreg(bas, REG_EFR); in oct16550_bus_ioctl()
557 uart_setreg(bas, REG_EFR, efr); in oct16550_bus_ioctl()
558 uart_barrier(bas); in oct16550_bus_ioctl()
559 uart_setreg(bas, REG_LCR, lcr); in oct16550_bus_ioctl()
560 uart_barrier(bas); in oct16550_bus_ioctl()
563 lcr = uart_getreg(bas, REG_LCR); in oct16550_bus_ioctl()
564 uart_barrier(bas); in oct16550_bus_ioctl()
565 uart_setreg(bas, REG_LCR, 0xbf); in oct16550_bus_ioctl()
566 uart_barrier(bas); in oct16550_bus_ioctl()
567 efr = uart_getreg(bas, REG_EFR); in oct16550_bus_ioctl()
572 uart_setreg(bas, REG_EFR, efr); in oct16550_bus_ioctl()
573 uart_barrier(bas); in oct16550_bus_ioctl()
574 uart_setreg(bas, REG_LCR, lcr); in oct16550_bus_ioctl()
575 uart_barrier(bas); in oct16550_bus_ioctl()
578 lcr = uart_getreg(bas, REG_LCR); in oct16550_bus_ioctl()
579 uart_setreg(bas, REG_LCR, lcr | LCR_DLAB); in oct16550_bus_ioctl()
580 uart_barrier(bas); in oct16550_bus_ioctl()
581 divisor = uart_getreg(bas, REG_DLL) | in oct16550_bus_ioctl()
582 (uart_getreg(bas, REG_DLH) << 8); in oct16550_bus_ioctl()
583 uart_barrier(bas); in oct16550_bus_ioctl()
584 uart_setreg(bas, REG_LCR, lcr); in oct16550_bus_ioctl()
585 uart_barrier(bas); in oct16550_bus_ioctl()
586 baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0; in oct16550_bus_ioctl()
605 struct uart_bas *bas; in oct16550_bus_ipend() local
609 bas = &sc->sc_bas; in oct16550_bus_ipend()
612 iir = uart_getreg(bas, REG_IIR) & IIR_IMASK; in oct16550_bus_ipend()
616 lsr = uart_getreg(bas, REG_LSR); in oct16550_bus_ipend()
637 (void) uart_getreg(bas, REG_USR); in oct16550_bus_ipend()
649 struct uart_bas *bas; in oct16550_bus_param() local
652 bas = &sc->sc_bas; in oct16550_bus_param()
654 error = oct16550_param(bas, baudrate, databits, stopbits, parity); in oct16550_bus_param()
662 struct uart_bas *bas; in oct16550_bus_probe() local
665 bas = &sc->sc_bas; in oct16550_bus_probe()
666 bas->rclk = uart_oct16550_class.uc_rclk = cvmx_clock_get_rate(CVMX_CLOCK_SCLK); in oct16550_bus_probe()
668 error = oct16550_probe(bas); in oct16550_bus_probe()
673 uart_setreg(bas, REG_MCR, (MCR_DTR | MCR_RTS)); in oct16550_bus_probe()
680 oct16550_drain(bas, UART_DRAIN_TRANSMITTER); in oct16550_bus_probe()
683 uart_setreg(bas, REG_FCR, FCR_ENABLE | FCR_XMT_RST | FCR_RCV_RST); in oct16550_bus_probe()
685 uart_barrier(bas); in oct16550_bus_probe()
687 oct16550_flush(bas, UART_FLUSH_RECEIVER|UART_FLUSH_TRANSMITTER); in oct16550_bus_probe()
723 struct uart_bas *bas; in oct16550_bus_receive() local
727 bas = &sc->sc_bas; in oct16550_bus_receive()
729 lsr = uart_getreg(bas, REG_LSR); in oct16550_bus_receive()
736 xc = uart_getreg(bas, REG_DATA); in oct16550_bus_receive()
742 lsr = uart_getreg(bas, REG_LSR); in oct16550_bus_receive()
750 (void)uart_getreg(bas, REG_DATA); in oct16550_bus_receive()
752 (void)uart_getreg(bas, REG_DATA); in oct16550_bus_receive()
753 uart_barrier(bas); in oct16550_bus_receive()
754 lsr = uart_getreg(bas, REG_LSR); in oct16550_bus_receive()
764 struct uart_bas *bas; in oct16550_bus_setsig() local
767 bas = &sc->sc_bas; in oct16550_bus_setsig()
786 uart_setreg(bas, REG_MCR, oct16550->mcr); in oct16550_bus_setsig()
787 uart_barrier(bas); in oct16550_bus_setsig()
796 struct uart_bas *bas; in oct16550_bus_transmit() local
799 bas = &sc->sc_bas; in oct16550_bus_transmit()
803 oct16550_putc(bas, sc->sc_txbuf[i]); in oct16550_bus_transmit()
807 oct16550_wait_txhr_empty(bas, 100, oct16550_delay(bas)); in oct16550_bus_transmit()
808 uart_setreg(bas, REG_IER, oct16550->ier | IER_ETXRDY); in oct16550_bus_transmit()
809 uart_barrier(bas); in oct16550_bus_transmit()
812 uart_setreg(bas, REG_DATA, sc->sc_txbuf[i]); in oct16550_bus_transmit()
813 uart_barrier(bas); in oct16550_bus_transmit()
824 struct uart_bas *bas = &sc->sc_bas; in oct16550_bus_grab() local
832 uart_setreg(bas, REG_IER, 0); in oct16550_bus_grab()
833 uart_barrier(bas); in oct16550_bus_grab()
841 struct uart_bas *bas = &sc->sc_bas; in oct16550_bus_ungrab() local
847 uart_setreg(bas, REG_IER, oct16550->ier); in oct16550_bus_ungrab()
848 uart_barrier(bas); in oct16550_bus_ungrab()