Lines Matching refs:zport

141 static u8 read_zsreg(struct zs_port *zport, int reg)  in read_zsreg()  argument
143 void __iomem *control = zport->port.membase + ZS_CHAN_IO_OFFSET; in read_zsreg()
156 static void write_zsreg(struct zs_port *zport, int reg, u8 value) in write_zsreg() argument
158 void __iomem *control = zport->port.membase + ZS_CHAN_IO_OFFSET; in write_zsreg()
170 static u8 read_zsdata(struct zs_port *zport) in read_zsdata() argument
172 void __iomem *data = zport->port.membase + in read_zsdata()
181 static void write_zsdata(struct zs_port *zport, u8 value) in write_zsdata() argument
183 void __iomem *data = zport->port.membase + in write_zsdata()
195 struct zs_port *zport; in zs_dump() local
199 zport = &zs_sccs[i / ZS_NUM_CHAN].zport[i % ZS_NUM_CHAN]; in zs_dump()
201 if (!zport->scc) in zs_dump()
205 printk("W%-2d = 0x%02x\t", j, zport->regs[j]); in zs_dump()
208 printk("R%-2d = 0x%02x\t", j, read_zsreg(zport, j)); in zs_dump()
231 static int zs_receive_drain(struct zs_port *zport) in zs_receive_drain() argument
235 while ((read_zsreg(zport, R0) & Rx_CH_AV) && --loops) in zs_receive_drain()
236 read_zsdata(zport); in zs_receive_drain()
240 static int zs_transmit_drain(struct zs_port *zport, int irq) in zs_transmit_drain() argument
242 struct zs_scc *scc = zport->scc; in zs_transmit_drain()
245 while (!(read_zsreg(zport, R0) & Tx_BUF_EMP) && --loops) { in zs_transmit_drain()
253 static int zs_line_drain(struct zs_port *zport, int irq) in zs_line_drain() argument
255 struct zs_scc *scc = zport->scc; in zs_line_drain()
258 while (!(read_zsreg(zport, R1) & ALL_SNT) && --loops) { in zs_line_drain()
267 static void load_zsregs(struct zs_port *zport, u8 *regs, int irq) in load_zsregs() argument
270 zs_line_drain(zport, irq); in load_zsregs()
272 write_zsreg(zport, R3, regs[3] & ~RxENABLE); in load_zsregs()
273 write_zsreg(zport, R5, regs[5] & ~TxENAB); in load_zsregs()
274 write_zsreg(zport, R4, regs[4]); in load_zsregs()
275 write_zsreg(zport, R9, regs[9]); in load_zsregs()
276 write_zsreg(zport, R1, regs[1]); in load_zsregs()
277 write_zsreg(zport, R2, regs[2]); in load_zsregs()
278 write_zsreg(zport, R10, regs[10]); in load_zsregs()
279 write_zsreg(zport, R14, regs[14] & ~BRENABL); in load_zsregs()
280 write_zsreg(zport, R11, regs[11]); in load_zsregs()
281 write_zsreg(zport, R12, regs[12]); in load_zsregs()
282 write_zsreg(zport, R13, regs[13]); in load_zsregs()
283 write_zsreg(zport, R14, regs[14]); in load_zsregs()
284 write_zsreg(zport, R15, regs[15]); in load_zsregs()
286 write_zsreg(zport, R3, regs[3]); in load_zsregs()
288 write_zsreg(zport, R5, regs[5]); in load_zsregs()
309 struct zs_port *zport = to_zport(uport); in zs_tx_empty() local
310 struct zs_scc *scc = zport->scc; in zs_tx_empty()
315 status = read_zsreg(zport, R1); in zs_tx_empty()
338 static unsigned int zs_raw_get_mctrl(struct zs_port *zport) in zs_raw_get_mctrl() argument
340 struct zs_port *zport_a = &zport->scc->zport[ZS_CHAN_A]; in zs_raw_get_mctrl()
342 return zport != zport_a ? zs_raw_get_ab_mctrl(zport_a, zport) : 0; in zs_raw_get_mctrl()
345 static unsigned int zs_raw_xor_mctrl(struct zs_port *zport) in zs_raw_xor_mctrl() argument
347 struct zs_port *zport_a = &zport->scc->zport[ZS_CHAN_A]; in zs_raw_xor_mctrl()
351 if (zport == zport_a) in zs_raw_xor_mctrl()
355 mask_b = zport->regs[15]; in zs_raw_xor_mctrl()
362 mctrl = zport->mctrl; in zs_raw_xor_mctrl()
365 mctrl |= zs_raw_get_ab_mctrl(zport_a, zport) & mmask; in zs_raw_xor_mctrl()
368 delta = mctrl ^ zport->mctrl; in zs_raw_xor_mctrl()
370 zport->mctrl = mctrl; in zs_raw_xor_mctrl()
377 struct zs_port *zport = to_zport(uport); in zs_get_mctrl() local
378 struct zs_scc *scc = zport->scc; in zs_get_mctrl()
382 mctrl = zs_raw_get_mctrl(zport); in zs_get_mctrl()
390 struct zs_port *zport = to_zport(uport); in zs_set_mctrl() local
391 struct zs_scc *scc = zport->scc; in zs_set_mctrl()
392 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_set_mctrl()
396 if (zport != zport_a) { in zs_set_mctrl()
409 oldloop = zport->regs[14]; in zs_set_mctrl()
416 zport->regs[14] = newloop; in zs_set_mctrl()
417 write_zsreg(zport, R14, zport->regs[14]); in zs_set_mctrl()
422 static void zs_raw_stop_tx(struct zs_port *zport) in zs_raw_stop_tx() argument
424 write_zsreg(zport, R0, RES_Tx_P); in zs_raw_stop_tx()
425 zport->tx_stopped = 1; in zs_raw_stop_tx()
430 struct zs_port *zport = to_zport(uport); in zs_stop_tx() local
431 struct zs_scc *scc = zport->scc; in zs_stop_tx()
434 zs_raw_stop_tx(zport); in zs_stop_tx()
442 struct zs_port *zport = to_zport(uport); in zs_start_tx() local
443 struct zs_scc *scc = zport->scc; in zs_start_tx()
446 if (zport->tx_stopped) { in zs_start_tx()
447 zs_transmit_drain(zport, 0); in zs_start_tx()
448 zport->tx_stopped = 0; in zs_start_tx()
449 zs_raw_transmit_chars(zport); in zs_start_tx()
456 struct zs_port *zport = to_zport(uport); in zs_stop_rx() local
457 struct zs_scc *scc = zport->scc; in zs_stop_rx()
458 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_stop_rx()
461 zport->regs[15] &= ~BRKIE; in zs_stop_rx()
462 zport->regs[1] &= ~(RxINT_MASK | TxINT_ENAB); in zs_stop_rx()
463 zport->regs[1] |= RxINT_DISAB; in zs_stop_rx()
465 if (zport != zport_a) { in zs_stop_rx()
475 zport->regs[15] &= ~(DCDIE | CTSIE); in zs_stop_rx()
476 zport->regs[1] &= ~EXT_INT_ENAB; in zs_stop_rx()
479 if (!(zport->regs[15] & (DCDIE | SYNCIE))) in zs_stop_rx()
480 zport->regs[1] &= ~EXT_INT_ENAB; in zs_stop_rx()
483 write_zsreg(zport, R15, zport->regs[15]); in zs_stop_rx()
484 write_zsreg(zport, R1, zport->regs[1]); in zs_stop_rx()
490 struct zs_port *zport = to_zport(uport); in zs_enable_ms() local
491 struct zs_scc *scc = zport->scc; in zs_enable_ms()
492 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_enable_ms()
494 if (zport == zport_a) in zs_enable_ms()
508 zport->regs[15] |= DCDIE | CTSIE; in zs_enable_ms()
510 zs_raw_xor_mctrl(zport); in zs_enable_ms()
514 write_zsreg(zport, R15, zport->regs[15]); in zs_enable_ms()
520 struct zs_port *zport = to_zport(uport); in zs_break_ctl() local
521 struct zs_scc *scc = zport->scc; in zs_break_ctl()
526 zport->regs[5] |= SND_BRK; in zs_break_ctl()
528 zport->regs[5] &= ~SND_BRK; in zs_break_ctl()
529 write_zsreg(zport, R5, zport->regs[5]); in zs_break_ctl()
540 static void zs_receive_chars(struct zs_port *zport) in zs_receive_chars() argument
542 struct uart_port *uport = &zport->port; in zs_receive_chars()
543 struct zs_scc *scc = zport->scc; in zs_receive_chars()
550 avail = read_zsreg(zport, R0) & Rx_CH_AV; in zs_receive_chars()
556 status = read_zsreg(zport, R1) & (Rx_OVR | FRM_ERR | PAR_ERR); in zs_receive_chars()
557 ch = read_zsdata(zport); in zs_receive_chars()
567 status |= zport->tty_break; in zs_receive_chars()
570 zport->tty_break = 0; in zs_receive_chars()
575 write_zsreg(zport, R0, ERR_RES); in zs_receive_chars()
609 static void zs_raw_transmit_chars(struct zs_port *zport) in zs_raw_transmit_chars() argument
611 struct circ_buf *xmit = &zport->port.state->xmit; in zs_raw_transmit_chars()
614 if (zport->port.x_char) { in zs_raw_transmit_chars()
615 write_zsdata(zport, zport->port.x_char); in zs_raw_transmit_chars()
616 zport->port.icount.tx++; in zs_raw_transmit_chars()
617 zport->port.x_char = 0; in zs_raw_transmit_chars()
622 if (uart_circ_empty(xmit) || uart_tx_stopped(&zport->port)) { in zs_raw_transmit_chars()
623 zs_raw_stop_tx(zport); in zs_raw_transmit_chars()
628 write_zsdata(zport, xmit->buf[xmit->tail]); in zs_raw_transmit_chars()
630 zport->port.icount.tx++; in zs_raw_transmit_chars()
633 uart_write_wakeup(&zport->port); in zs_raw_transmit_chars()
637 zs_raw_stop_tx(zport); in zs_raw_transmit_chars()
640 static void zs_transmit_chars(struct zs_port *zport) in zs_transmit_chars() argument
642 struct zs_scc *scc = zport->scc; in zs_transmit_chars()
645 zs_raw_transmit_chars(zport); in zs_transmit_chars()
649 static void zs_status_handle(struct zs_port *zport, struct zs_port *zport_a) in zs_status_handle() argument
651 struct uart_port *uport = &zport->port; in zs_status_handle()
652 struct zs_scc *scc = zport->scc; in zs_status_handle()
659 status = read_zsreg(zport, R0); in zs_status_handle()
661 if (zport->regs[15] & BRKIE) { in zs_status_handle()
663 if (brk && !zport->brk) { in zs_status_handle()
666 zport->tty_break = Rx_SYS; in zs_status_handle()
668 zport->tty_break = Rx_BRK; in zs_status_handle()
671 zport->brk = brk; in zs_status_handle()
674 if (zport != zport_a) { in zs_status_handle()
675 delta = zs_raw_xor_mctrl(zport); in zs_status_handle()
680 zport->mctrl & TIOCM_CTS); in zs_status_handle()
683 zport->mctrl & TIOCM_CAR); in zs_status_handle()
696 write_zsreg(zport, R0, RES_EXT_INT); in zs_status_handle()
707 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_interrupt()
708 struct zs_port *zport_b = &scc->zport[ZS_CHAN_B]; in zs_interrupt()
757 struct zs_port *zport = to_zport(uport); in zs_startup() local
758 struct zs_scc *scc = zport->scc; in zs_startup()
765 ret = request_irq(zport->port.irq, zs_interrupt, in zs_startup()
770 zport->port.irq); in zs_startup()
778 zs_receive_drain(zport); in zs_startup()
781 write_zsreg(zport, R0, ERR_RES); in zs_startup()
782 write_zsreg(zport, R0, RES_Tx_P); in zs_startup()
784 if (!(zport->regs[1] & EXT_INT_ENAB)) in zs_startup()
785 write_zsreg(zport, R0, RES_EXT_INT); in zs_startup()
788 zport->regs[1] &= ~RxINT_MASK; in zs_startup()
789 zport->regs[1] |= RxINT_ALL | TxINT_ENAB | EXT_INT_ENAB; in zs_startup()
790 zport->regs[3] |= RxENABLE; in zs_startup()
791 zport->regs[15] |= BRKIE; in zs_startup()
792 write_zsreg(zport, R1, zport->regs[1]); in zs_startup()
793 write_zsreg(zport, R3, zport->regs[3]); in zs_startup()
794 write_zsreg(zport, R5, zport->regs[5]); in zs_startup()
795 write_zsreg(zport, R15, zport->regs[15]); in zs_startup()
798 zport->mctrl = zs_raw_get_mctrl(zport); in zs_startup()
799 zport->brk = read_zsreg(zport, R0) & BRK_ABRT; in zs_startup()
801 zport->tx_stopped = 1; in zs_startup()
810 struct zs_port *zport = to_zport(uport); in zs_shutdown() local
811 struct zs_scc *scc = zport->scc; in zs_shutdown()
817 zport->regs[3] &= ~RxENABLE; in zs_shutdown()
818 write_zsreg(zport, R5, zport->regs[5]); in zs_shutdown()
819 write_zsreg(zport, R3, zport->regs[3]); in zs_shutdown()
825 free_irq(zport->port.irq, scc); in zs_shutdown()
829 static void zs_reset(struct zs_port *zport) in zs_reset() argument
831 struct zs_scc *scc = zport->scc; in zs_reset()
839 read_zsreg(zport, R0); in zs_reset()
841 zs_line_drain(zport, irq); in zs_reset()
842 write_zsreg(zport, R9, FHWRES); in zs_reset()
844 write_zsreg(zport, R9, 0); in zs_reset()
847 load_zsregs(zport, zport->regs, irq); in zs_reset()
854 struct zs_port *zport = to_zport(uport); in zs_set_termios() local
855 struct zs_scc *scc = zport->scc; in zs_set_termios()
856 struct zs_port *zport_a = &scc->zport[ZS_CHAN_A]; in zs_set_termios()
865 zport->regs[3] &= ~RxNBITS_MASK; in zs_set_termios()
866 zport->regs[5] &= ~TxNBITS_MASK; in zs_set_termios()
869 zport->regs[3] |= Rx5; in zs_set_termios()
870 zport->regs[5] |= Tx5; in zs_set_termios()
873 zport->regs[3] |= Rx6; in zs_set_termios()
874 zport->regs[5] |= Tx6; in zs_set_termios()
877 zport->regs[3] |= Rx7; in zs_set_termios()
878 zport->regs[5] |= Tx7; in zs_set_termios()
882 zport->regs[3] |= Rx8; in zs_set_termios()
883 zport->regs[5] |= Tx8; in zs_set_termios()
888 zport->regs[4] &= ~(XCLK_MASK | SB_MASK | PAR_ENA | PAR_EVEN); in zs_set_termios()
890 zport->regs[4] |= SB2; in zs_set_termios()
892 zport->regs[4] |= SB1; in zs_set_termios()
894 zport->regs[4] |= PAR_ENA; in zs_set_termios()
896 zport->regs[4] |= PAR_EVEN; in zs_set_termios()
897 switch (zport->clk_mode) { in zs_set_termios()
899 zport->regs[4] |= X64CLK; in zs_set_termios()
902 zport->regs[4] |= X32CLK; in zs_set_termios()
905 zport->regs[4] |= X16CLK; in zs_set_termios()
908 zport->regs[4] |= X1CLK; in zs_set_termios()
915 uport->uartclk / zport->clk_mode / 4); in zs_set_termios()
917 brg = ZS_BPS_TO_BRG(baud, uport->uartclk / zport->clk_mode); in zs_set_termios()
918 zport->regs[12] = brg & 0xff; in zs_set_termios()
919 zport->regs[13] = (brg >> 8) & 0xff; in zs_set_termios()
939 zport->regs[3] |= RxENABLE; in zs_set_termios()
941 zport->regs[3] &= ~RxENABLE; in zs_set_termios()
943 if (zport != zport_a) { in zs_set_termios()
945 zport->regs[15] |= DCDIE; in zs_set_termios()
947 zport->regs[15] &= ~DCDIE; in zs_set_termios()
949 zport->regs[15] |= CTSIE; in zs_set_termios()
951 zport->regs[15] &= ~CTSIE; in zs_set_termios()
952 zs_raw_xor_mctrl(zport); in zs_set_termios()
956 load_zsregs(zport, zport->regs, irq); in zs_set_termios()
969 struct zs_port *zport = to_zport(uport); in zs_pm() local
972 zport->regs[5] |= TxENAB; in zs_pm()
974 zport->regs[5] &= ~TxENAB; in zs_pm()
975 write_zsreg(zport, R5, zport->regs[5]); in zs_pm()
1021 struct zs_port *zport = to_zport(uport); in zs_config_port() local
1029 zs_reset(zport); in zs_config_port()
1035 struct zs_port *zport = to_zport(uport); in zs_verify_port() local
1042 if (ser->baud_base != uport->uartclk / zport->clk_mode / 4) in zs_verify_port()
1102 struct zs_port *zport = &zs_sccs[chip].zport[side]; in zs_probe_sccs() local
1103 struct uart_port *uport = &zport->port; in zs_probe_sccs()
1105 zport->scc = &zs_sccs[chip]; in zs_probe_sccs()
1106 zport->clk_mode = 16; in zs_probe_sccs()
1120 zport->regs[i] = zs_init_regs[i]; in zs_probe_sccs()
1131 struct zs_port *zport = to_zport(uport); in zs_console_putchar() local
1132 struct zs_scc *scc = zport->scc; in zs_console_putchar()
1138 if (zs_transmit_drain(zport, irq)) in zs_console_putchar()
1139 write_zsdata(zport, ch); in zs_console_putchar()
1151 struct zs_port *zport = &zs_sccs[chip].zport[side]; in zs_console_write() local
1152 struct zs_scc *scc = zport->scc; in zs_console_write()
1159 txint = zport->regs[1]; in zs_console_write()
1160 txenb = zport->regs[5]; in zs_console_write()
1162 zport->regs[1] = txint & ~TxINT_ENAB; in zs_console_write()
1163 write_zsreg(zport, R1, zport->regs[1]); in zs_console_write()
1166 zport->regs[5] = txenb | TxENAB; in zs_console_write()
1167 write_zsreg(zport, R5, zport->regs[5]); in zs_console_write()
1171 uart_console_write(&zport->port, s, count, zs_console_putchar); in zs_console_write()
1176 zs_line_drain(zport, irq); in zs_console_write()
1178 zport->regs[5] &= ~TxENAB; in zs_console_write()
1179 write_zsreg(zport, R5, zport->regs[5]); in zs_console_write()
1182 zport->regs[1] |= TxINT_ENAB; in zs_console_write()
1183 write_zsreg(zport, R1, zport->regs[1]); in zs_console_write()
1197 struct zs_port *zport = &zs_sccs[chip].zport[side]; in zs_console_setup() local
1198 struct uart_port *uport = &zport->port; in zs_console_setup()
1209 zs_reset(zport); in zs_console_setup()
1278 struct zs_port *zport = &scc->zport[i % ZS_NUM_CHAN]; in zs_init() local
1279 struct uart_port *uport = &zport->port; in zs_init()
1281 if (zport->scc) in zs_init()
1294 struct zs_port *zport = &scc->zport[i % ZS_NUM_CHAN]; in zs_exit() local
1295 struct uart_port *uport = &zport->port; in zs_exit()
1297 if (zport->scc) in zs_exit()