Lines Matching refs:zport

142 static u8 read_zsreg(struct zs_port *zport, int reg)  in read_zsreg()  argument
144 void __iomem *control = zport->port.membase + ZS_CHAN_IO_OFFSET; in read_zsreg()
157 static void write_zsreg(struct zs_port *zport, int reg, u8 value) in write_zsreg() argument
159 void __iomem *control = zport->port.membase + ZS_CHAN_IO_OFFSET; in write_zsreg()
171 static u8 read_zsdata(struct zs_port *zport) in read_zsdata() argument
173 void __iomem *data = zport->port.membase + in read_zsdata()
182 static void write_zsdata(struct zs_port *zport, u8 value) in write_zsdata() argument
184 void __iomem *data = zport->port.membase + in write_zsdata()
196 struct zs_port *zport; in zs_dump() local
200 zport = &zs_sccs[i / ZS_NUM_CHAN].zport[i % ZS_NUM_CHAN]; in zs_dump()
202 if (!zport->scc) in zs_dump()
206 printk("W%-2d = 0x%02x\t", j, zport->regs[j]); in zs_dump()
209 printk("R%-2d = 0x%02x\t", j, read_zsreg(zport, j)); in zs_dump()
232 static int zs_receive_drain(struct zs_port *zport) in zs_receive_drain() argument
236 while ((read_zsreg(zport, R0) & Rx_CH_AV) && --loops) in zs_receive_drain()
237 read_zsdata(zport); in zs_receive_drain()
241 static int zs_transmit_drain(struct zs_port *zport, int irq) in zs_transmit_drain() argument
243 struct zs_scc *scc = zport->scc; in zs_transmit_drain()
246 while (!(read_zsreg(zport, R0) & Tx_BUF_EMP) && --loops) { in zs_transmit_drain()
254 static int zs_line_drain(struct zs_port *zport, int irq) in zs_line_drain() argument
256 struct zs_scc *scc = zport->scc; in zs_line_drain()
259 while (!(read_zsreg(zport, R1) & ALL_SNT) && --loops) { in zs_line_drain()
268 static void load_zsregs(struct zs_port *zport, u8 *regs, int irq) in load_zsregs() argument
271 zs_line_drain(zport, irq); in load_zsregs()
273 write_zsreg(zport, R3, regs[3] & ~RxENABLE); in load_zsregs()
274 write_zsreg(zport, R5, regs[5] & ~TxENAB); in load_zsregs()
275 write_zsreg(zport, R4, regs[4]); in load_zsregs()
276 write_zsreg(zport, R9, regs[9]); in load_zsregs()
277 write_zsreg(zport, R1, regs[1]); in load_zsregs()
278 write_zsreg(zport, R2, regs[2]); in load_zsregs()
279 write_zsreg(zport, R10, regs[10]); in load_zsregs()
280 write_zsreg(zport, R14, regs[14] & ~BRENABL); in load_zsregs()
281 write_zsreg(zport, R11, regs[11]); in load_zsregs()
282 write_zsreg(zport, R12, regs[12]); in load_zsregs()
283 write_zsreg(zport, R13, regs[13]); in load_zsregs()
284 write_zsreg(zport, R14, regs[14]); in load_zsregs()
285 write_zsreg(zport, R15, regs[15]); in load_zsregs()
287 write_zsreg(zport, R3, regs[3]); in load_zsregs()
289 write_zsreg(zport, R5, regs[5]); in load_zsregs()
310 struct zs_port *zport = to_zport(uport); in zs_tx_empty() local
311 struct zs_scc *scc = zport->scc; in zs_tx_empty()
316 status = read_zsreg(zport, R1); in zs_tx_empty()
339 static unsigned int zs_raw_get_mctrl(struct zs_port *zport) in zs_raw_get_mctrl() argument
341 struct zs_port *zport_a = &zport->scc->zport[ZS_CHAN_A]; in zs_raw_get_mctrl()
343 return zport != zport_a ? zs_raw_get_ab_mctrl(zport_a, zport) : 0; in zs_raw_get_mctrl()
346 static unsigned int zs_raw_xor_mctrl(struct zs_port *zport) in zs_raw_xor_mctrl() argument
348 struct zs_port *zport_a = &zport->scc->zport[ZS_CHAN_A]; in zs_raw_xor_mctrl()
352 if (zport == zport_a) in zs_raw_xor_mctrl()
356 mask_b = zport->regs[15]; in zs_raw_xor_mctrl()
363 mctrl = zport->mctrl; in zs_raw_xor_mctrl()
366 mctrl |= zs_raw_get_ab_mctrl(zport_a, zport) & mmask; in zs_raw_xor_mctrl()
369 delta = mctrl ^ zport->mctrl; in zs_raw_xor_mctrl()
371 zport->mctrl = mctrl; in zs_raw_xor_mctrl()
378 struct zs_port *zport = to_zport(uport); in zs_get_mctrl() local
379 struct zs_scc *scc = zport->scc; in zs_get_mctrl()
383 mctrl = zs_raw_get_mctrl(zport); in zs_get_mctrl()
391 struct zs_port *zport = to_zport(uport); in zs_set_mctrl() local
392 struct zs_scc *scc = zport->scc; in zs_set_mctrl()
393 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_set_mctrl()
397 if (zport != zport_a) { in zs_set_mctrl()
410 oldloop = zport->regs[14]; in zs_set_mctrl()
417 zport->regs[14] = newloop; in zs_set_mctrl()
418 write_zsreg(zport, R14, zport->regs[14]); in zs_set_mctrl()
423 static void zs_raw_stop_tx(struct zs_port *zport) in zs_raw_stop_tx() argument
425 write_zsreg(zport, R0, RES_Tx_P); in zs_raw_stop_tx()
426 zport->tx_stopped = 1; in zs_raw_stop_tx()
431 struct zs_port *zport = to_zport(uport); in zs_stop_tx() local
432 struct zs_scc *scc = zport->scc; in zs_stop_tx()
435 zs_raw_stop_tx(zport); in zs_stop_tx()
443 struct zs_port *zport = to_zport(uport); in zs_start_tx() local
444 struct zs_scc *scc = zport->scc; in zs_start_tx()
447 if (zport->tx_stopped) { in zs_start_tx()
448 zs_transmit_drain(zport, 0); in zs_start_tx()
449 zport->tx_stopped = 0; in zs_start_tx()
450 zs_raw_transmit_chars(zport); in zs_start_tx()
457 struct zs_port *zport = to_zport(uport); in zs_stop_rx() local
458 struct zs_scc *scc = zport->scc; in zs_stop_rx()
459 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_stop_rx()
462 zport->regs[15] &= ~BRKIE; in zs_stop_rx()
463 zport->regs[1] &= ~(RxINT_MASK | TxINT_ENAB); in zs_stop_rx()
464 zport->regs[1] |= RxINT_DISAB; in zs_stop_rx()
466 if (zport != zport_a) { in zs_stop_rx()
476 zport->regs[15] &= ~(DCDIE | CTSIE); in zs_stop_rx()
477 zport->regs[1] &= ~EXT_INT_ENAB; in zs_stop_rx()
480 if (!(zport->regs[15] & (DCDIE | SYNCIE))) in zs_stop_rx()
481 zport->regs[1] &= ~EXT_INT_ENAB; in zs_stop_rx()
484 write_zsreg(zport, R15, zport->regs[15]); in zs_stop_rx()
485 write_zsreg(zport, R1, zport->regs[1]); in zs_stop_rx()
491 struct zs_port *zport = to_zport(uport); in zs_enable_ms() local
492 struct zs_scc *scc = zport->scc; in zs_enable_ms()
493 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_enable_ms()
495 if (zport == zport_a) in zs_enable_ms()
509 zport->regs[15] |= DCDIE | CTSIE; in zs_enable_ms()
511 zs_raw_xor_mctrl(zport); in zs_enable_ms()
515 write_zsreg(zport, R15, zport->regs[15]); in zs_enable_ms()
521 struct zs_port *zport = to_zport(uport); in zs_break_ctl() local
522 struct zs_scc *scc = zport->scc; in zs_break_ctl()
527 zport->regs[5] |= SND_BRK; in zs_break_ctl()
529 zport->regs[5] &= ~SND_BRK; in zs_break_ctl()
530 write_zsreg(zport, R5, zport->regs[5]); in zs_break_ctl()
541 static void zs_receive_chars(struct zs_port *zport) in zs_receive_chars() argument
543 struct uart_port *uport = &zport->port; in zs_receive_chars()
544 struct zs_scc *scc = zport->scc; in zs_receive_chars()
551 avail = read_zsreg(zport, R0) & Rx_CH_AV; in zs_receive_chars()
557 status = read_zsreg(zport, R1) & (Rx_OVR | FRM_ERR | PAR_ERR); in zs_receive_chars()
558 ch = read_zsdata(zport); in zs_receive_chars()
568 status |= zport->tty_break; in zs_receive_chars()
571 zport->tty_break = 0; in zs_receive_chars()
576 write_zsreg(zport, R0, ERR_RES); in zs_receive_chars()
610 static void zs_raw_transmit_chars(struct zs_port *zport) in zs_raw_transmit_chars() argument
612 struct circ_buf *xmit = &zport->port.state->xmit; in zs_raw_transmit_chars()
615 if (zport->port.x_char) { in zs_raw_transmit_chars()
616 write_zsdata(zport, zport->port.x_char); in zs_raw_transmit_chars()
617 zport->port.icount.tx++; in zs_raw_transmit_chars()
618 zport->port.x_char = 0; in zs_raw_transmit_chars()
623 if (uart_circ_empty(xmit) || uart_tx_stopped(&zport->port)) { in zs_raw_transmit_chars()
624 zs_raw_stop_tx(zport); in zs_raw_transmit_chars()
629 write_zsdata(zport, xmit->buf[xmit->tail]); in zs_raw_transmit_chars()
631 zport->port.icount.tx++; in zs_raw_transmit_chars()
634 uart_write_wakeup(&zport->port); in zs_raw_transmit_chars()
638 zs_raw_stop_tx(zport); in zs_raw_transmit_chars()
641 static void zs_transmit_chars(struct zs_port *zport) in zs_transmit_chars() argument
643 struct zs_scc *scc = zport->scc; in zs_transmit_chars()
646 zs_raw_transmit_chars(zport); in zs_transmit_chars()
650 static void zs_status_handle(struct zs_port *zport, struct zs_port *zport_a) in zs_status_handle() argument
652 struct uart_port *uport = &zport->port; in zs_status_handle()
653 struct zs_scc *scc = zport->scc; in zs_status_handle()
660 status = read_zsreg(zport, R0); in zs_status_handle()
662 if (zport->regs[15] & BRKIE) { in zs_status_handle()
664 if (brk && !zport->brk) { in zs_status_handle()
667 zport->tty_break = Rx_SYS; in zs_status_handle()
669 zport->tty_break = Rx_BRK; in zs_status_handle()
672 zport->brk = brk; in zs_status_handle()
675 if (zport != zport_a) { in zs_status_handle()
676 delta = zs_raw_xor_mctrl(zport); in zs_status_handle()
681 zport->mctrl & TIOCM_CTS); in zs_status_handle()
684 zport->mctrl & TIOCM_CAR); in zs_status_handle()
697 write_zsreg(zport, R0, RES_EXT_INT); in zs_status_handle()
708 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_interrupt()
709 struct zs_port *zport_b = &scc->zport[ZS_CHAN_B]; in zs_interrupt()
758 struct zs_port *zport = to_zport(uport); in zs_startup() local
759 struct zs_scc *scc = zport->scc; in zs_startup()
766 ret = request_irq(zport->port.irq, zs_interrupt, in zs_startup()
771 zport->port.irq); in zs_startup()
779 zs_receive_drain(zport); in zs_startup()
782 write_zsreg(zport, R0, ERR_RES); in zs_startup()
783 write_zsreg(zport, R0, RES_Tx_P); in zs_startup()
785 if (!(zport->regs[1] & EXT_INT_ENAB)) in zs_startup()
786 write_zsreg(zport, R0, RES_EXT_INT); in zs_startup()
789 zport->regs[1] &= ~RxINT_MASK; in zs_startup()
790 zport->regs[1] |= RxINT_ALL | TxINT_ENAB | EXT_INT_ENAB; in zs_startup()
791 zport->regs[3] |= RxENABLE; in zs_startup()
792 zport->regs[15] |= BRKIE; in zs_startup()
793 write_zsreg(zport, R1, zport->regs[1]); in zs_startup()
794 write_zsreg(zport, R3, zport->regs[3]); in zs_startup()
795 write_zsreg(zport, R5, zport->regs[5]); in zs_startup()
796 write_zsreg(zport, R15, zport->regs[15]); in zs_startup()
799 zport->mctrl = zs_raw_get_mctrl(zport); in zs_startup()
800 zport->brk = read_zsreg(zport, R0) & BRK_ABRT; in zs_startup()
802 zport->tx_stopped = 1; in zs_startup()
811 struct zs_port *zport = to_zport(uport); in zs_shutdown() local
812 struct zs_scc *scc = zport->scc; in zs_shutdown()
818 zport->regs[3] &= ~RxENABLE; in zs_shutdown()
819 write_zsreg(zport, R5, zport->regs[5]); in zs_shutdown()
820 write_zsreg(zport, R3, zport->regs[3]); in zs_shutdown()
826 free_irq(zport->port.irq, scc); in zs_shutdown()
830 static void zs_reset(struct zs_port *zport) in zs_reset() argument
832 struct zs_scc *scc = zport->scc; in zs_reset()
840 read_zsreg(zport, R0); in zs_reset()
842 zs_line_drain(zport, irq); in zs_reset()
843 write_zsreg(zport, R9, FHWRES); in zs_reset()
845 write_zsreg(zport, R9, 0); in zs_reset()
848 load_zsregs(zport, zport->regs, irq); in zs_reset()
855 struct zs_port *zport = to_zport(uport); in zs_set_termios() local
856 struct zs_scc *scc = zport->scc; in zs_set_termios()
857 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_set_termios()
866 zport->regs[3] &= ~RxNBITS_MASK; in zs_set_termios()
867 zport->regs[5] &= ~TxNBITS_MASK; in zs_set_termios()
870 zport->regs[3] |= Rx5; in zs_set_termios()
871 zport->regs[5] |= Tx5; in zs_set_termios()
874 zport->regs[3] |= Rx6; in zs_set_termios()
875 zport->regs[5] |= Tx6; in zs_set_termios()
878 zport->regs[3] |= Rx7; in zs_set_termios()
879 zport->regs[5] |= Tx7; in zs_set_termios()
883 zport->regs[3] |= Rx8; in zs_set_termios()
884 zport->regs[5] |= Tx8; in zs_set_termios()
889 zport->regs[4] &= ~(XCLK_MASK | SB_MASK | PAR_ENA | PAR_EVEN); in zs_set_termios()
891 zport->regs[4] |= SB2; in zs_set_termios()
893 zport->regs[4] |= SB1; in zs_set_termios()
895 zport->regs[4] |= PAR_ENA; in zs_set_termios()
897 zport->regs[4] |= PAR_EVEN; in zs_set_termios()
898 switch (zport->clk_mode) { in zs_set_termios()
900 zport->regs[4] |= X64CLK; in zs_set_termios()
903 zport->regs[4] |= X32CLK; in zs_set_termios()
906 zport->regs[4] |= X16CLK; in zs_set_termios()
909 zport->regs[4] |= X1CLK; in zs_set_termios()
916 uport->uartclk / zport->clk_mode / 4); in zs_set_termios()
918 brg = ZS_BPS_TO_BRG(baud, uport->uartclk / zport->clk_mode); in zs_set_termios()
919 zport->regs[12] = brg & 0xff; in zs_set_termios()
920 zport->regs[13] = (brg >> 8) & 0xff; in zs_set_termios()
940 zport->regs[3] |= RxENABLE; in zs_set_termios()
942 zport->regs[3] &= ~RxENABLE; in zs_set_termios()
944 if (zport != zport_a) { in zs_set_termios()
946 zport->regs[15] |= DCDIE; in zs_set_termios()
948 zport->regs[15] &= ~DCDIE; in zs_set_termios()
950 zport->regs[15] |= CTSIE; in zs_set_termios()
952 zport->regs[15] &= ~CTSIE; in zs_set_termios()
953 zs_raw_xor_mctrl(zport); in zs_set_termios()
957 load_zsregs(zport, zport->regs, irq); in zs_set_termios()
970 struct zs_port *zport = to_zport(uport); in zs_pm() local
973 zport->regs[5] |= TxENAB; in zs_pm()
975 zport->regs[5] &= ~TxENAB; in zs_pm()
976 write_zsreg(zport, R5, zport->regs[5]); in zs_pm()
1022 struct zs_port *zport = to_zport(uport); in zs_config_port() local
1030 zs_reset(zport); in zs_config_port()
1036 struct zs_port *zport = to_zport(uport); in zs_verify_port() local
1043 if (ser->baud_base != uport->uartclk / zport->clk_mode / 4) in zs_verify_port()
1103 struct zs_port *zport = &zs_sccs[chip].zport[side]; in zs_probe_sccs() local
1104 struct uart_port *uport = &zport->port; in zs_probe_sccs()
1106 zport->scc = &zs_sccs[chip]; in zs_probe_sccs()
1107 zport->clk_mode = 16; in zs_probe_sccs()
1121 zport->regs[i] = zs_init_regs[i]; in zs_probe_sccs()
1132 struct zs_port *zport = to_zport(uport); in zs_console_putchar() local
1133 struct zs_scc *scc = zport->scc; in zs_console_putchar()
1139 if (zs_transmit_drain(zport, irq)) in zs_console_putchar()
1140 write_zsdata(zport, ch); in zs_console_putchar()
1152 struct zs_port *zport = &zs_sccs[chip].zport[side]; in zs_console_write() local
1153 struct zs_scc *scc = zport->scc; in zs_console_write()
1160 txint = zport->regs[1]; in zs_console_write()
1161 txenb = zport->regs[5]; in zs_console_write()
1163 zport->regs[1] = txint & ~TxINT_ENAB; in zs_console_write()
1164 write_zsreg(zport, R1, zport->regs[1]); in zs_console_write()
1167 zport->regs[5] = txenb | TxENAB; in zs_console_write()
1168 write_zsreg(zport, R5, zport->regs[5]); in zs_console_write()
1172 uart_console_write(&zport->port, s, count, zs_console_putchar); in zs_console_write()
1177 zs_line_drain(zport, irq); in zs_console_write()
1179 zport->regs[5] &= ~TxENAB; in zs_console_write()
1180 write_zsreg(zport, R5, zport->regs[5]); in zs_console_write()
1183 zport->regs[1] |= TxINT_ENAB; in zs_console_write()
1184 write_zsreg(zport, R1, zport->regs[1]); in zs_console_write()
1187 if (!zport->tx_stopped) in zs_console_write()
1188 zs_raw_transmit_chars(zport); in zs_console_write()
1202 struct zs_port *zport = &zs_sccs[chip].zport[side]; in zs_console_setup() local
1203 struct uart_port *uport = &zport->port; in zs_console_setup()
1214 zs_reset(zport); in zs_console_setup()
1283 struct zs_port *zport = &scc->zport[i % ZS_NUM_CHAN]; in zs_init() local
1284 struct uart_port *uport = &zport->port; in zs_init()
1286 if (zport->scc) in zs_init()
1299 struct zs_port *zport = &scc->zport[i % ZS_NUM_CHAN]; in zs_exit() local
1300 struct uart_port *uport = &zport->port; in zs_exit()
1302 if (zport->scc) in zs_exit()