Lines Matching refs:bas
55 sab82532_delay(struct uart_bas *bas) in sab82532_delay() argument
60 bgr = uart_getreg(bas, SAB_TCR); in sab82532_delay()
61 ccr2 = uart_getreg(bas, SAB_CCR2); in sab82532_delay()
67 return (16000000 * divisor / bas->rclk); in sab82532_delay()
106 sab82532_flush(struct uart_bas *bas, int what) in sab82532_flush() argument
110 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_flush()
112 uart_setreg(bas, SAB_CMDR, SAB_CMDR_XRES); in sab82532_flush()
113 uart_barrier(bas); in sab82532_flush()
116 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_flush()
118 uart_setreg(bas, SAB_CMDR, SAB_CMDR_RRES); in sab82532_flush()
119 uart_barrier(bas); in sab82532_flush()
124 sab82532_param(struct uart_bas *bas, int baudrate, int databits, int stopbits, in sab82532_param() argument
151 divisor = sab82532_divisor(bas->rclk, baudrate); in sab82532_param()
154 uart_setreg(bas, SAB_BGR, divisor & 0xff); in sab82532_param()
155 uart_barrier(bas); in sab82532_param()
157 uart_setreg(bas, SAB_TCR, divisor & 0xff); in sab82532_param()
158 uart_barrier(bas); in sab82532_param()
159 ccr2 = uart_getreg(bas, SAB_CCR2); in sab82532_param()
162 uart_setreg(bas, SAB_CCR2, ccr2); in sab82532_param()
163 uart_barrier(bas); in sab82532_param()
166 uart_setreg(bas, SAB_DAFO, dafo); in sab82532_param()
167 uart_barrier(bas); in sab82532_param()
174 static int sab82532_probe(struct uart_bas *bas);
175 static void sab82532_init(struct uart_bas *bas, int, int, int, int);
176 static void sab82532_term(struct uart_bas *bas);
177 static void sab82532_putc(struct uart_bas *bas, int);
178 static int sab82532_rxready(struct uart_bas *bas);
179 static int sab82532_getc(struct uart_bas *bas, struct mtx *);
191 sab82532_probe(struct uart_bas *bas) in sab82532_probe() argument
198 sab82532_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, in sab82532_init() argument
203 if (bas->rclk == 0) in sab82532_init()
204 bas->rclk = DEFAULT_RCLK; in sab82532_init()
211 uart_setreg(bas, SAB_PCR, in sab82532_init()
213 uart_barrier(bas); in sab82532_init()
215 uart_setreg(bas, SAB_PIM, 0xff); in sab82532_init()
216 uart_barrier(bas); in sab82532_init()
218 uart_setreg(bas, SAB_IPC, SAB_IPC_ICPL); in sab82532_init()
219 uart_barrier(bas); in sab82532_init()
221 pvr = uart_getreg(bas, SAB_PVR); in sab82532_init()
222 switch (bas->chan) { in sab82532_init()
230 uart_setreg(bas, SAB_PVR, pvr | SAB_PVR_MAGIC); in sab82532_init()
231 uart_barrier(bas); in sab82532_init()
234 uart_setreg(bas, SAB_CCR0, 0); in sab82532_init()
235 uart_barrier(bas); in sab82532_init()
239 uart_setreg(bas, SAB_CCR0, ccr0); in sab82532_init()
240 uart_barrier(bas); in sab82532_init()
241 uart_setreg(bas, SAB_CCR1, SAB_CCR1_ODS|SAB_CCR1_BCR|SAB_CCR1_CM_7); in sab82532_init()
242 uart_barrier(bas); in sab82532_init()
243 uart_setreg(bas, SAB_CCR2, SAB_CCR2_BDF|SAB_CCR2_SSEL|SAB_CCR2_TOE); in sab82532_init()
244 uart_barrier(bas); in sab82532_init()
245 uart_setreg(bas, SAB_CCR3, 0); in sab82532_init()
246 uart_barrier(bas); in sab82532_init()
247 uart_setreg(bas, SAB_CCR4, SAB_CCR4_MCK4|SAB_CCR4_EBRG|SAB_CCR4_ICD); in sab82532_init()
248 uart_barrier(bas); in sab82532_init()
249 uart_setreg(bas, SAB_MODE, SAB_MODE_FCTS|SAB_MODE_RTS|SAB_MODE_RAC); in sab82532_init()
250 uart_barrier(bas); in sab82532_init()
251 uart_setreg(bas, SAB_RFC, SAB_RFC_DPS|SAB_RFC_RFDF| in sab82532_init()
253 uart_barrier(bas); in sab82532_init()
255 sab82532_param(bas, baudrate, databits, stopbits, parity); in sab82532_init()
258 uart_setreg(bas, SAB_IMR0, (unsigned char)~SAB_IMR0_TCD); in sab82532_init()
259 uart_setreg(bas, SAB_IMR1, 0xff); in sab82532_init()
260 uart_barrier(bas); in sab82532_init()
261 uart_getreg(bas, SAB_ISR0); in sab82532_init()
262 uart_getreg(bas, SAB_ISR1); in sab82532_init()
263 uart_barrier(bas); in sab82532_init()
265 sab82532_flush(bas, UART_FLUSH_TRANSMITTER|UART_FLUSH_RECEIVER); in sab82532_init()
268 uart_setreg(bas, SAB_CCR0, ccr0|SAB_CCR0_PU); in sab82532_init()
269 uart_barrier(bas); in sab82532_init()
273 sab82532_term(struct uart_bas *bas) in sab82532_term() argument
277 pvr = uart_getreg(bas, SAB_PVR); in sab82532_term()
278 switch (bas->chan) { in sab82532_term()
286 uart_setreg(bas, SAB_PVR, pvr); in sab82532_term()
287 uart_barrier(bas); in sab82532_term()
291 sab82532_putc(struct uart_bas *bas, int c) in sab82532_putc() argument
296 delay = sab82532_delay(bas); in sab82532_putc()
299 while ((uart_getreg(bas, SAB_STAR) & SAB_STAR_TEC) && --limit) in sab82532_putc()
301 uart_setreg(bas, SAB_TIC, c); in sab82532_putc()
303 while ((uart_getreg(bas, SAB_STAR) & SAB_STAR_TEC) && --limit) in sab82532_putc()
308 sab82532_rxready(struct uart_bas *bas) in sab82532_rxready() argument
311 return ((uart_getreg(bas, SAB_STAR) & SAB_STAR_RFNE) != 0 ? 1 : 0); in sab82532_rxready()
315 sab82532_getc(struct uart_bas *bas, struct mtx *hwmtx) in sab82532_getc() argument
322 delay = sab82532_delay(bas); in sab82532_getc()
324 while (!(uart_getreg(bas, SAB_STAR) & SAB_STAR_RFNE)) { in sab82532_getc()
330 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_getc()
332 uart_setreg(bas, SAB_CMDR, SAB_CMDR_RFRD); in sab82532_getc()
333 uart_barrier(bas); in sab82532_getc()
335 while (!(uart_getreg(bas, SAB_ISR0) & SAB_ISR0_TCD)) in sab82532_getc()
338 c = uart_getreg(bas, SAB_RFIFO); in sab82532_getc()
339 uart_barrier(bas); in sab82532_getc()
342 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_getc()
344 uart_setreg(bas, SAB_CMDR, SAB_CMDR_RMC); in sab82532_getc()
345 uart_barrier(bas); in sab82532_getc()
410 struct uart_bas *bas; in sab82532_bus_attach() local
413 bas = &sc->sc_bas; in sab82532_bus_attach()
415 sab82532_init(bas, 9600, 8, 1, UART_PARITY_NONE); in sab82532_bus_attach()
419 uart_setreg(bas, SAB_IMR0, 0xff & ~imr0); in sab82532_bus_attach()
421 uart_setreg(bas, SAB_IMR1, 0xff & ~imr1); in sab82532_bus_attach()
422 uart_barrier(bas); in sab82532_bus_attach()
433 struct uart_bas *bas; in sab82532_bus_detach() local
435 bas = &sc->sc_bas; in sab82532_bus_detach()
436 uart_setreg(bas, SAB_IMR0, 0xff); in sab82532_bus_detach()
437 uart_setreg(bas, SAB_IMR1, 0xff); in sab82532_bus_detach()
438 uart_barrier(bas); in sab82532_bus_detach()
439 uart_getreg(bas, SAB_ISR0); in sab82532_bus_detach()
440 uart_getreg(bas, SAB_ISR1); in sab82532_bus_detach()
441 uart_barrier(bas); in sab82532_bus_detach()
442 uart_setreg(bas, SAB_CCR0, 0); in sab82532_bus_detach()
443 uart_barrier(bas); in sab82532_bus_detach()
460 struct uart_bas *bas; in sab82532_bus_getsig() local
464 bas = &sc->sc_bas; in sab82532_bus_getsig()
469 star = uart_getreg(bas, SAB_STAR); in sab82532_bus_getsig()
471 vstr = uart_getreg(bas, SAB_VSTR); in sab82532_bus_getsig()
473 pvr = ~uart_getreg(bas, SAB_PVR); in sab82532_bus_getsig()
474 switch (bas->chan) { in sab82532_bus_getsig()
492 struct uart_bas *bas; in sab82532_bus_ioctl() local
496 bas = &sc->sc_bas; in sab82532_bus_ioctl()
501 dafo = uart_getreg(bas, SAB_DAFO); in sab82532_bus_ioctl()
506 uart_setreg(bas, SAB_DAFO, dafo); in sab82532_bus_ioctl()
507 uart_barrier(bas); in sab82532_bus_ioctl()
510 mode = uart_getreg(bas, SAB_MODE); in sab82532_bus_ioctl()
518 uart_setreg(bas, SAB_MODE, mode); in sab82532_bus_ioctl()
519 uart_barrier(bas); in sab82532_bus_ioctl()
522 mode = uart_getreg(bas, SAB_MODE); in sab82532_bus_ioctl()
527 uart_setreg(bas, SAB_MODE, mode); in sab82532_bus_ioctl()
528 uart_barrier(bas); in sab82532_bus_ioctl()
541 struct uart_bas *bas; in sab82532_bus_ipend() local
545 bas = &sc->sc_bas; in sab82532_bus_ipend()
547 isr0 = uart_getreg(bas, SAB_ISR0); in sab82532_bus_ipend()
548 isr1 = uart_getreg(bas, SAB_ISR1); in sab82532_bus_ipend()
549 uart_barrier(bas); in sab82532_bus_ipend()
551 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_bus_ipend()
553 uart_setreg(bas, SAB_CMDR, SAB_CMDR_RFRD); in sab82532_bus_ipend()
554 uart_barrier(bas); in sab82532_bus_ipend()
577 struct uart_bas *bas; in sab82532_bus_param() local
580 bas = &sc->sc_bas; in sab82532_bus_param()
582 error = sab82532_param(bas, baudrate, databits, stopbits, parity); in sab82532_bus_param()
629 struct uart_bas *bas; in sab82532_bus_receive() local
633 bas = &sc->sc_bas; in sab82532_bus_receive()
635 if (uart_getreg(bas, SAB_STAR) & SAB_STAR_RFNE) { in sab82532_bus_receive()
636 rbcl = uart_getreg(bas, SAB_RBCL) & 31; in sab82532_bus_receive()
644 xc = uart_getreg(bas, SAB_RFIFO); in sab82532_bus_receive()
645 s = uart_getreg(bas, SAB_RFIFO + 1); in sab82532_bus_receive()
654 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_bus_receive()
656 uart_setreg(bas, SAB_CMDR, SAB_CMDR_RMC); in sab82532_bus_receive()
657 uart_barrier(bas); in sab82532_bus_receive()
665 struct uart_bas *bas; in sab82532_bus_setsig() local
669 bas = &sc->sc_bas; in sab82532_bus_setsig()
685 pvr = uart_getreg(bas, SAB_PVR); in sab82532_bus_setsig()
686 switch (bas->chan) { in sab82532_bus_setsig()
700 uart_setreg(bas, SAB_PVR, pvr); in sab82532_bus_setsig()
703 mode = uart_getreg(bas, SAB_MODE); in sab82532_bus_setsig()
708 uart_setreg(bas, SAB_MODE, mode); in sab82532_bus_setsig()
709 uart_barrier(bas); in sab82532_bus_setsig()
717 struct uart_bas *bas; in sab82532_bus_transmit() local
720 bas = &sc->sc_bas; in sab82532_bus_transmit()
722 while (!(uart_getreg(bas, SAB_STAR) & SAB_STAR_XFW)) in sab82532_bus_transmit()
725 uart_setreg(bas, SAB_XFIFO + i, sc->sc_txbuf[i]); in sab82532_bus_transmit()
726 uart_barrier(bas); in sab82532_bus_transmit()
727 while (uart_getreg(bas, SAB_STAR) & SAB_STAR_CEC) in sab82532_bus_transmit()
729 uart_setreg(bas, SAB_CMDR, SAB_CMDR_XF); in sab82532_bus_transmit()
738 struct uart_bas *bas; in sab82532_bus_grab() local
741 bas = &sc->sc_bas; in sab82532_bus_grab()
744 uart_setreg(bas, SAB_IMR0, 0xff & ~imr0); in sab82532_bus_grab()
745 uart_barrier(bas); in sab82532_bus_grab()
752 struct uart_bas *bas; in sab82532_bus_ungrab() local
755 bas = &sc->sc_bas; in sab82532_bus_ungrab()
759 uart_setreg(bas, SAB_IMR0, 0xff & ~imr0); in sab82532_bus_ungrab()
760 uart_barrier(bas); in sab82532_bus_ungrab()