Lines Matching full:up
112 #define ZS_IS_KEYB(UP) ((UP)->flags & SUNZILOG_FLAG_CONS_KEYB) argument
113 #define ZS_IS_MOUSE(UP) ((UP)->flags & SUNZILOG_FLAG_CONS_MOUSE) argument
114 #define ZS_IS_CONS(UP) ((UP)->flags & SUNZILOG_FLAG_IS_CONS) argument
115 #define ZS_IS_KGDB(UP) ((UP)->flags & SUNZILOG_FLAG_IS_KGDB) argument
116 #define ZS_WANTS_MODEM_STATUS(UP) ((UP)->flags & SUNZILOG_FLAG_MODEM_STATUS) argument
117 #define ZS_IS_CHANNEL_A(UP) ((UP)->flags & SUNZILOG_FLAG_IS_CHANNEL_A) argument
118 #define ZS_REGS_HELD(UP) ((UP)->flags & SUNZILOG_FLAG_REGS_HELD) argument
119 #define ZS_TX_STOPPED(UP) ((UP)->flags & SUNZILOG_FLAG_TX_STOPPED) argument
120 #define ZS_TX_ACTIVE(UP) ((UP)->flags & SUNZILOG_FLAG_TX_ACTIVE) argument
272 static void sunzilog_maybe_update_regs(struct uart_sunzilog_port *up, in sunzilog_maybe_update_regs() argument
275 if (!ZS_REGS_HELD(up)) { in sunzilog_maybe_update_regs()
276 if (ZS_TX_ACTIVE(up)) { in sunzilog_maybe_update_regs()
277 up->flags |= SUNZILOG_FLAG_REGS_HELD; in sunzilog_maybe_update_regs()
279 __load_zsregs(channel, up->curregs); in sunzilog_maybe_update_regs()
284 static void sunzilog_change_mouse_baud(struct uart_sunzilog_port *up) in sunzilog_change_mouse_baud() argument
286 unsigned int cur_cflag = up->cflag; in sunzilog_change_mouse_baud()
289 up->cflag &= ~CBAUD; in sunzilog_change_mouse_baud()
290 up->cflag |= suncore_mouse_baud_cflag_next(cur_cflag, &new_baud); in sunzilog_change_mouse_baud()
293 up->curregs[R12] = (brg & 0xff); in sunzilog_change_mouse_baud()
294 up->curregs[R13] = (brg >> 8) & 0xff; in sunzilog_change_mouse_baud()
295 sunzilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(&up->port)); in sunzilog_change_mouse_baud()
298 static void sunzilog_kbdms_receive_chars(struct uart_sunzilog_port *up, in sunzilog_kbdms_receive_chars() argument
301 if (ZS_IS_KEYB(up)) { in sunzilog_kbdms_receive_chars()
304 if (up->serio_open) in sunzilog_kbdms_receive_chars()
305 serio_interrupt(&up->serio, ch, 0); in sunzilog_kbdms_receive_chars()
307 } else if (ZS_IS_MOUSE(up)) { in sunzilog_kbdms_receive_chars()
312 sunzilog_change_mouse_baud(up); in sunzilog_kbdms_receive_chars()
319 if (up->serio_open) in sunzilog_kbdms_receive_chars()
320 serio_interrupt(&up->serio, ch, 0); in sunzilog_kbdms_receive_chars()
328 sunzilog_receive_chars(struct uart_sunzilog_port *up, in sunzilog_receive_chars() argument
334 if (up->port.state != NULL) /* Unopened serial console */ in sunzilog_receive_chars()
335 port = &up->port.state->port; in sunzilog_receive_chars()
361 ch &= up->parity_mask; in sunzilog_receive_chars()
363 if (unlikely(ZS_IS_KEYB(up)) || unlikely(ZS_IS_MOUSE(up))) { in sunzilog_receive_chars()
364 sunzilog_kbdms_receive_chars(up, ch, 0); in sunzilog_receive_chars()
370 up->port.icount.rx++; in sunzilog_receive_chars()
374 up->port.icount.brk++; in sunzilog_receive_chars()
375 if (uart_handle_break(&up->port)) in sunzilog_receive_chars()
379 up->port.icount.parity++; in sunzilog_receive_chars()
381 up->port.icount.frame++; in sunzilog_receive_chars()
383 up->port.icount.overrun++; in sunzilog_receive_chars()
384 r1 &= up->port.read_status_mask; in sunzilog_receive_chars()
392 if (uart_handle_sysrq_char(&up->port, ch) || !port) in sunzilog_receive_chars()
395 if (up->port.ignore_status_mask == 0xff || in sunzilog_receive_chars()
396 (r1 & up->port.ignore_status_mask) == 0) { in sunzilog_receive_chars()
406 static void sunzilog_status_handle(struct uart_sunzilog_port *up, in sunzilog_status_handle() argument
419 if (ZS_IS_MOUSE(up)) in sunzilog_status_handle()
420 sunzilog_kbdms_receive_chars(up, 0, 1); in sunzilog_status_handle()
421 if (ZS_IS_CONS(up)) { in sunzilog_status_handle()
436 if (ZS_WANTS_MODEM_STATUS(up)) { in sunzilog_status_handle()
438 up->port.icount.dsr++; in sunzilog_status_handle()
444 if ((status ^ up->prev_status) ^ DCD) in sunzilog_status_handle()
445 uart_handle_dcd_change(&up->port, in sunzilog_status_handle()
447 if ((status ^ up->prev_status) ^ CTS) in sunzilog_status_handle()
448 uart_handle_cts_change(&up->port, in sunzilog_status_handle()
451 wake_up_interruptible(&up->port.state->port.delta_msr_wait); in sunzilog_status_handle()
454 up->prev_status = status; in sunzilog_status_handle()
457 static void sunzilog_transmit_chars(struct uart_sunzilog_port *up, in sunzilog_transmit_chars() argument
462 if (ZS_IS_CONS(up)) { in sunzilog_transmit_chars()
478 up->flags &= ~SUNZILOG_FLAG_TX_ACTIVE; in sunzilog_transmit_chars()
480 if (ZS_REGS_HELD(up)) { in sunzilog_transmit_chars()
481 __load_zsregs(channel, up->curregs); in sunzilog_transmit_chars()
482 up->flags &= ~SUNZILOG_FLAG_REGS_HELD; in sunzilog_transmit_chars()
485 if (ZS_TX_STOPPED(up)) { in sunzilog_transmit_chars()
486 up->flags &= ~SUNZILOG_FLAG_TX_STOPPED; in sunzilog_transmit_chars()
490 if (up->port.x_char) { in sunzilog_transmit_chars()
491 up->flags |= SUNZILOG_FLAG_TX_ACTIVE; in sunzilog_transmit_chars()
492 writeb(up->port.x_char, &channel->data); in sunzilog_transmit_chars()
496 up->port.icount.tx++; in sunzilog_transmit_chars()
497 up->port.x_char = 0; in sunzilog_transmit_chars()
501 if (up->port.state == NULL) in sunzilog_transmit_chars()
503 xmit = &up->port.state->xmit; in sunzilog_transmit_chars()
507 if (uart_tx_stopped(&up->port)) in sunzilog_transmit_chars()
510 up->flags |= SUNZILOG_FLAG_TX_ACTIVE; in sunzilog_transmit_chars()
516 up->port.icount.tx++; in sunzilog_transmit_chars()
519 uart_write_wakeup(&up->port); in sunzilog_transmit_chars()
531 struct uart_sunzilog_port *up = dev_id; in sunzilog_interrupt() local
533 while (up) { in sunzilog_interrupt()
535 = ZILOG_CHANNEL_FROM_PORT(&up->port); in sunzilog_interrupt()
539 spin_lock(&up->port.lock); in sunzilog_interrupt()
550 port = sunzilog_receive_chars(up, channel); in sunzilog_interrupt()
552 sunzilog_status_handle(up, channel); in sunzilog_interrupt()
554 sunzilog_transmit_chars(up, channel); in sunzilog_interrupt()
556 spin_unlock(&up->port.lock); in sunzilog_interrupt()
562 up = up->next; in sunzilog_interrupt()
563 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); in sunzilog_interrupt()
565 spin_lock(&up->port.lock); in sunzilog_interrupt()
573 port = sunzilog_receive_chars(up, channel); in sunzilog_interrupt()
575 sunzilog_status_handle(up, channel); in sunzilog_interrupt()
577 sunzilog_transmit_chars(up, channel); in sunzilog_interrupt()
579 spin_unlock(&up->port.lock); in sunzilog_interrupt()
584 up = up->next; in sunzilog_interrupt()
648 struct uart_sunzilog_port *up = in sunzilog_set_mctrl() local
665 up->curregs[R5] |= set_bits; in sunzilog_set_mctrl()
666 up->curregs[R5] &= ~clear_bits; in sunzilog_set_mctrl()
667 write_zsreg(channel, R5, up->curregs[R5]); in sunzilog_set_mctrl()
673 struct uart_sunzilog_port *up = in sunzilog_stop_tx() local
676 up->flags |= SUNZILOG_FLAG_TX_STOPPED; in sunzilog_stop_tx()
682 struct uart_sunzilog_port *up = in sunzilog_start_tx() local
687 up->flags |= SUNZILOG_FLAG_TX_ACTIVE; in sunzilog_start_tx()
688 up->flags &= ~SUNZILOG_FLAG_TX_STOPPED; in sunzilog_start_tx()
720 uart_write_wakeup(&up->port); in sunzilog_start_tx()
727 struct uart_sunzilog_port *up = UART_ZILOG(port); in sunzilog_stop_rx() local
730 if (ZS_IS_CONS(up)) in sunzilog_stop_rx()
736 up->curregs[R1] &= ~RxINT_MASK; in sunzilog_stop_rx()
737 sunzilog_maybe_update_regs(up, channel); in sunzilog_stop_rx()
743 struct uart_sunzilog_port *up = in sunzilog_enable_ms() local
748 new_reg = up->curregs[R15] | (DCDIE | SYNCIE | CTSIE); in sunzilog_enable_ms()
749 if (new_reg != up->curregs[R15]) { in sunzilog_enable_ms()
750 up->curregs[R15] = new_reg; in sunzilog_enable_ms()
753 write_zsreg(channel, R15, up->curregs[R15] & ~WR7pEN); in sunzilog_enable_ms()
760 struct uart_sunzilog_port *up = in sunzilog_break_ctl() local
775 new_reg = (up->curregs[R5] | set_bits) & ~clear_bits; in sunzilog_break_ctl()
776 if (new_reg != up->curregs[R5]) { in sunzilog_break_ctl()
777 up->curregs[R5] = new_reg; in sunzilog_break_ctl()
780 write_zsreg(channel, R5, up->curregs[R5]); in sunzilog_break_ctl()
786 static void __sunzilog_startup(struct uart_sunzilog_port *up) in __sunzilog_startup() argument
790 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); in __sunzilog_startup()
791 up->prev_status = readb(&channel->control); in __sunzilog_startup()
794 up->curregs[R3] |= RxENAB; in __sunzilog_startup()
795 up->curregs[R5] |= TxENAB; in __sunzilog_startup()
797 up->curregs[R1] |= EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB; in __sunzilog_startup()
798 sunzilog_maybe_update_regs(up, channel); in __sunzilog_startup()
803 struct uart_sunzilog_port *up = UART_ZILOG(port); in sunzilog_startup() local
806 if (ZS_IS_CONS(up)) in sunzilog_startup()
810 __sunzilog_startup(up); in sunzilog_startup()
842 struct uart_sunzilog_port *up = UART_ZILOG(port); in sunzilog_shutdown() local
846 if (ZS_IS_CONS(up)) in sunzilog_shutdown()
854 up->curregs[R3] &= ~RxENAB; in sunzilog_shutdown()
855 up->curregs[R5] &= ~TxENAB; in sunzilog_shutdown()
858 up->curregs[R1] &= ~(EXT_INT_ENAB | TxINT_ENAB | RxINT_MASK); in sunzilog_shutdown()
859 up->curregs[R5] &= ~SND_BRK; in sunzilog_shutdown()
860 sunzilog_maybe_update_regs(up, channel); in sunzilog_shutdown()
869 sunzilog_convert_to_zs(struct uart_sunzilog_port *up, unsigned int cflag, in sunzilog_convert_to_zs() argument
873 up->curregs[R10] = NRZ; in sunzilog_convert_to_zs()
874 up->curregs[R11] = TCBR | RCBR; in sunzilog_convert_to_zs()
877 up->curregs[R4] &= ~XCLK_MASK; in sunzilog_convert_to_zs()
878 up->curregs[R4] |= X16CLK; in sunzilog_convert_to_zs()
879 up->curregs[R12] = brg & 0xff; in sunzilog_convert_to_zs()
880 up->curregs[R13] = (brg >> 8) & 0xff; in sunzilog_convert_to_zs()
881 up->curregs[R14] = BRSRC | BRENAB; in sunzilog_convert_to_zs()
884 up->curregs[R3] &= ~RxN_MASK; in sunzilog_convert_to_zs()
885 up->curregs[R5] &= ~TxN_MASK; in sunzilog_convert_to_zs()
888 up->curregs[R3] |= Rx5; in sunzilog_convert_to_zs()
889 up->curregs[R5] |= Tx5; in sunzilog_convert_to_zs()
890 up->parity_mask = 0x1f; in sunzilog_convert_to_zs()
893 up->curregs[R3] |= Rx6; in sunzilog_convert_to_zs()
894 up->curregs[R5] |= Tx6; in sunzilog_convert_to_zs()
895 up->parity_mask = 0x3f; in sunzilog_convert_to_zs()
898 up->curregs[R3] |= Rx7; in sunzilog_convert_to_zs()
899 up->curregs[R5] |= Tx7; in sunzilog_convert_to_zs()
900 up->parity_mask = 0x7f; in sunzilog_convert_to_zs()
904 up->curregs[R3] |= Rx8; in sunzilog_convert_to_zs()
905 up->curregs[R5] |= Tx8; in sunzilog_convert_to_zs()
906 up->parity_mask = 0xff; in sunzilog_convert_to_zs()
909 up->curregs[R4] &= ~0x0c; in sunzilog_convert_to_zs()
911 up->curregs[R4] |= SB2; in sunzilog_convert_to_zs()
913 up->curregs[R4] |= SB1; in sunzilog_convert_to_zs()
915 up->curregs[R4] |= PAR_ENAB; in sunzilog_convert_to_zs()
917 up->curregs[R4] &= ~PAR_ENAB; in sunzilog_convert_to_zs()
919 up->curregs[R4] |= PAR_EVEN; in sunzilog_convert_to_zs()
921 up->curregs[R4] &= ~PAR_EVEN; in sunzilog_convert_to_zs()
923 up->port.read_status_mask = Rx_OVR; in sunzilog_convert_to_zs()
925 up->port.read_status_mask |= CRC_ERR | PAR_ERR; in sunzilog_convert_to_zs()
927 up->port.read_status_mask |= BRK_ABRT; in sunzilog_convert_to_zs()
929 up->port.ignore_status_mask = 0; in sunzilog_convert_to_zs()
931 up->port.ignore_status_mask |= CRC_ERR | PAR_ERR; in sunzilog_convert_to_zs()
933 up->port.ignore_status_mask |= BRK_ABRT; in sunzilog_convert_to_zs()
935 up->port.ignore_status_mask |= Rx_OVR; in sunzilog_convert_to_zs()
939 up->port.ignore_status_mask = 0xff; in sunzilog_convert_to_zs()
947 struct uart_sunzilog_port *up = in sunzilog_set_termios() local
954 spin_lock_irqsave(&up->port.lock, flags); in sunzilog_set_termios()
958 sunzilog_convert_to_zs(up, termios->c_cflag, termios->c_iflag, brg); in sunzilog_set_termios()
960 if (UART_ENABLE_MS(&up->port, termios->c_cflag)) in sunzilog_set_termios()
961 up->flags |= SUNZILOG_FLAG_MODEM_STATUS; in sunzilog_set_termios()
963 up->flags &= ~SUNZILOG_FLAG_MODEM_STATUS; in sunzilog_set_termios()
965 up->cflag = termios->c_cflag; in sunzilog_set_termios()
967 sunzilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port)); in sunzilog_set_termios()
971 spin_unlock_irqrestore(&up->port.lock, flags); in sunzilog_set_termios()
976 struct uart_sunzilog_port *up = UART_ZILOG(port); in sunzilog_type() local
978 return (up->flags & SUNZILOG_FLAG_ESCC) ? "zs (ESCC)" : "zs"; in sunzilog_type()
1008 struct uart_sunzilog_port *up = in sunzilog_get_poll_char() local
1011 = ZILOG_CHANNEL_FROM_PORT(&up->port); in sunzilog_get_poll_char()
1036 ch &= up->parity_mask; in sunzilog_get_poll_char()
1043 struct uart_sunzilog_port *up = in sunzilog_put_poll_char() local
1046 sunzilog_putchar(&up->port, ch); in sunzilog_put_poll_char()
1088 struct uart_sunzilog_port *up; in sunzilog_alloc_tables() local
1099 up = &sunzilog_port_table[i]; in sunzilog_alloc_tables()
1101 spin_lock_init(&up->port.lock); in sunzilog_alloc_tables()
1104 sunzilog_irq_chain = up; in sunzilog_alloc_tables()
1107 up->next = up + 1; in sunzilog_alloc_tables()
1109 up->next = NULL; in sunzilog_alloc_tables()
1160 struct uart_sunzilog_port *up = serio->port_data; in sunzilog_serio_write() local
1165 sunzilog_putchar(&up->port, ch); in sunzilog_serio_write()
1174 struct uart_sunzilog_port *up = serio->port_data; in sunzilog_serio_open() local
1179 if (!up->serio_open) { in sunzilog_serio_open()
1180 up->serio_open = 1; in sunzilog_serio_open()
1191 struct uart_sunzilog_port *up = serio->port_data; in sunzilog_serio_close() local
1195 up->serio_open = 0; in sunzilog_serio_close()
1205 struct uart_sunzilog_port *up = &sunzilog_port_table[con->index]; in sunzilog_console_write() local
1209 if (up->port.sysrq || oops_in_progress) in sunzilog_console_write()
1210 locked = spin_trylock_irqsave(&up->port.lock, flags); in sunzilog_console_write()
1212 spin_lock_irqsave(&up->port.lock, flags); in sunzilog_console_write()
1214 uart_console_write(&up->port, s, count, sunzilog_putchar); in sunzilog_console_write()
1218 spin_unlock_irqrestore(&up->port.lock, flags); in sunzilog_console_write()
1223 struct uart_sunzilog_port *up = &sunzilog_port_table[con->index]; in sunzilog_console_setup() local
1227 if (up->port.type != PORT_SUNZILOG) in sunzilog_console_setup()
1234 sunserial_console_termios(con, up->port.dev->of_node); in sunzilog_console_setup()
1253 spin_lock_irqsave(&up->port.lock, flags); in sunzilog_console_setup()
1255 up->curregs[R15] |= BRKIE; in sunzilog_console_setup()
1256 sunzilog_convert_to_zs(up, con->cflag, 0, brg); in sunzilog_console_setup()
1258 sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS); in sunzilog_console_setup()
1259 __sunzilog_startup(up); in sunzilog_console_setup()
1261 spin_unlock_irqrestore(&up->port.lock, flags); in sunzilog_console_setup()
1285 static void sunzilog_init_kbdms(struct uart_sunzilog_port *up) in sunzilog_init_kbdms() argument
1289 if (up->flags & SUNZILOG_FLAG_CONS_KEYB) { in sunzilog_init_kbdms()
1290 up->cflag = B1200 | CS8 | CLOCAL | CREAD; in sunzilog_init_kbdms()
1293 up->cflag = B4800 | CS8 | CLOCAL | CREAD; in sunzilog_init_kbdms()
1297 up->curregs[R15] |= BRKIE; in sunzilog_init_kbdms()
1299 sunzilog_convert_to_zs(up, up->cflag, 0, brg); in sunzilog_init_kbdms()
1300 sunzilog_set_mctrl(&up->port, TIOCM_DTR | TIOCM_RTS); in sunzilog_init_kbdms()
1301 __sunzilog_startup(up); in sunzilog_init_kbdms()
1305 static void sunzilog_register_serio(struct uart_sunzilog_port *up) in sunzilog_register_serio() argument
1307 struct serio *serio = &up->serio; in sunzilog_register_serio()
1309 serio->port_data = up; in sunzilog_register_serio()
1312 if (up->flags & SUNZILOG_FLAG_CONS_KEYB) { in sunzilog_register_serio()
1321 ((up->flags & SUNZILOG_FLAG_CONS_KEYB) ? in sunzilog_register_serio()
1328 serio->dev.parent = up->port.dev; in sunzilog_register_serio()
1334 static void sunzilog_init_hw(struct uart_sunzilog_port *up) in sunzilog_init_hw() argument
1340 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); in sunzilog_init_hw()
1342 spin_lock_irqsave(&up->port.lock, flags); in sunzilog_init_hw()
1343 if (ZS_IS_CHANNEL_A(up)) { in sunzilog_init_hw()
1349 if (up->flags & (SUNZILOG_FLAG_CONS_KEYB | in sunzilog_init_hw()
1351 up->curregs[R1] = EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB; in sunzilog_init_hw()
1352 up->curregs[R4] = PAR_EVEN | X16CLK | SB1; in sunzilog_init_hw()
1353 up->curregs[R3] = RxENAB | Rx8; in sunzilog_init_hw()
1354 up->curregs[R5] = TxENAB | Tx8; in sunzilog_init_hw()
1355 up->curregs[R6] = 0x00; /* SDLC Address */ in sunzilog_init_hw()
1356 up->curregs[R7] = 0x7E; /* SDLC Flag */ in sunzilog_init_hw()
1357 up->curregs[R9] = NV; in sunzilog_init_hw()
1358 up->curregs[R7p] = 0x00; in sunzilog_init_hw()
1359 sunzilog_init_kbdms(up); in sunzilog_init_hw()
1361 if (up->flags & SUNZILOG_FLAG_ISR_HANDLER) in sunzilog_init_hw()
1362 up->curregs[R9] |= MIE; in sunzilog_init_hw()
1363 write_zsreg(channel, R9, up->curregs[R9]); in sunzilog_init_hw()
1366 up->parity_mask = 0xff; in sunzilog_init_hw()
1367 up->curregs[R1] = EXT_INT_ENAB | INT_ALL_Rx | TxINT_ENAB; in sunzilog_init_hw()
1368 up->curregs[R4] = PAR_EVEN | X16CLK | SB1; in sunzilog_init_hw()
1369 up->curregs[R3] = RxENAB | Rx8; in sunzilog_init_hw()
1370 up->curregs[R5] = TxENAB | Tx8; in sunzilog_init_hw()
1371 up->curregs[R6] = 0x00; /* SDLC Address */ in sunzilog_init_hw()
1372 up->curregs[R7] = 0x7E; /* SDLC Flag */ in sunzilog_init_hw()
1373 up->curregs[R9] = NV; in sunzilog_init_hw()
1374 up->curregs[R10] = NRZ; in sunzilog_init_hw()
1375 up->curregs[R11] = TCBR | RCBR; in sunzilog_init_hw()
1378 up->curregs[R12] = (brg & 0xff); in sunzilog_init_hw()
1379 up->curregs[R13] = (brg >> 8) & 0xff; in sunzilog_init_hw()
1380 up->curregs[R14] = BRSRC | BRENAB; in sunzilog_init_hw()
1381 up->curregs[R15] = FIFOEN; /* Use FIFO if on ESCC */ in sunzilog_init_hw()
1382 up->curregs[R7p] = TxFIFO_LVL | RxFIFO_LVL; in sunzilog_init_hw()
1383 if (__load_zsregs(channel, up->curregs)) { in sunzilog_init_hw()
1384 up->flags |= SUNZILOG_FLAG_ESCC; in sunzilog_init_hw()
1387 if (up->flags & SUNZILOG_FLAG_ISR_HANDLER) in sunzilog_init_hw()
1388 up->curregs[R9] |= MIE; in sunzilog_init_hw()
1389 write_zsreg(channel, R9, up->curregs[R9]); in sunzilog_init_hw()
1392 spin_unlock_irqrestore(&up->port.lock, flags); in sunzilog_init_hw()
1395 if (up->flags & (SUNZILOG_FLAG_CONS_KEYB | in sunzilog_init_hw()
1397 sunzilog_register_serio(up); in sunzilog_init_hw()
1407 struct uart_sunzilog_port *up; in zs_probe() local
1432 up = &sunzilog_port_table[inst * 2]; in zs_probe()
1435 up[0].port.mapbase = op->resource[0].start + 0x00; in zs_probe()
1436 up[0].port.membase = (void __iomem *) &rp->channelA; in zs_probe()
1437 up[0].port.iotype = UPIO_MEM; in zs_probe()
1438 up[0].port.irq = op->archdata.irqs[0]; in zs_probe()
1439 up[0].port.uartclk = ZS_CLOCK; in zs_probe()
1440 up[0].port.fifosize = 1; in zs_probe()
1441 up[0].port.ops = &sunzilog_pops; in zs_probe()
1442 up[0].port.type = PORT_SUNZILOG; in zs_probe()
1443 up[0].port.flags = 0; in zs_probe()
1444 up[0].port.line = (inst * 2) + 0; in zs_probe()
1445 up[0].port.dev = &op->dev; in zs_probe()
1446 up[0].flags |= SUNZILOG_FLAG_IS_CHANNEL_A; in zs_probe()
1448 up[0].flags |= SUNZILOG_FLAG_CONS_KEYB; in zs_probe()
1449 sunzilog_init_hw(&up[0]); in zs_probe()
1452 up[1].port.mapbase = op->resource[0].start + 0x04; in zs_probe()
1453 up[1].port.membase = (void __iomem *) &rp->channelB; in zs_probe()
1454 up[1].port.iotype = UPIO_MEM; in zs_probe()
1455 up[1].port.irq = op->archdata.irqs[0]; in zs_probe()
1456 up[1].port.uartclk = ZS_CLOCK; in zs_probe()
1457 up[1].port.fifosize = 1; in zs_probe()
1458 up[1].port.ops = &sunzilog_pops; in zs_probe()
1459 up[1].port.type = PORT_SUNZILOG; in zs_probe()
1460 up[1].port.flags = 0; in zs_probe()
1461 up[1].port.line = (inst * 2) + 1; in zs_probe()
1462 up[1].port.dev = &op->dev; in zs_probe()
1463 up[1].flags |= 0; in zs_probe()
1465 up[1].flags |= SUNZILOG_FLAG_CONS_MOUSE; in zs_probe()
1466 sunzilog_init_hw(&up[1]); in zs_probe()
1470 &sunzilog_reg, up[0].port.line, in zs_probe()
1472 up->flags |= SUNZILOG_FLAG_IS_CONS; in zs_probe()
1473 err = uart_add_one_port(&sunzilog_reg, &up[0].port); in zs_probe()
1480 &sunzilog_reg, up[1].port.line, in zs_probe()
1482 up->flags |= SUNZILOG_FLAG_IS_CONS; in zs_probe()
1483 err = uart_add_one_port(&sunzilog_reg, &up[1].port); in zs_probe()
1485 uart_remove_one_port(&sunzilog_reg, &up[0].port); in zs_probe()
1495 (unsigned long long) up[0].port.mapbase, in zs_probe()
1496 op->archdata.irqs[0], sunzilog_type(&up[0].port)); in zs_probe()
1500 (unsigned long long) up[1].port.mapbase, in zs_probe()
1501 op->archdata.irqs[0], sunzilog_type(&up[1].port)); in zs_probe()
1505 platform_set_drvdata(op, &up[0]); in zs_probe()
1510 static void zs_remove_one(struct uart_sunzilog_port *up) in zs_remove_one() argument
1512 if (ZS_IS_KEYB(up) || ZS_IS_MOUSE(up)) { in zs_remove_one()
1514 serio_unregister_port(&up->serio); in zs_remove_one()
1517 uart_remove_one_port(&sunzilog_reg, &up->port); in zs_remove_one()
1522 struct uart_sunzilog_port *up = platform_get_drvdata(op); in zs_remove() local
1525 zs_remove_one(&up[0]); in zs_remove()
1526 zs_remove_one(&up[1]); in zs_remove()
1528 regs = sunzilog_chip_regs[up[0].port.line / 2]; in zs_remove()
1582 struct uart_sunzilog_port *up = sunzilog_irq_chain; in sunzilog_init() local
1589 while (up) { in sunzilog_init()
1592 /* printk (KERN_INFO "Enable IRQ for ZILOG Hardware %p\n", up); */ in sunzilog_init()
1593 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); in sunzilog_init()
1594 up->flags |= SUNZILOG_FLAG_ISR_HANDLER; in sunzilog_init()
1595 up->curregs[R9] |= MIE; in sunzilog_init()
1596 write_zsreg(channel, R9, up->curregs[R9]); in sunzilog_init()
1597 up = up->next; in sunzilog_init()
1623 struct uart_sunzilog_port *up = sunzilog_irq_chain; in sunzilog_exit() local
1626 while (up) { in sunzilog_exit()
1629 /* printk (KERN_INFO "Disable IRQ for ZILOG Hardware %p\n", up); */ in sunzilog_exit()
1630 channel = ZILOG_CHANNEL_FROM_PORT(&up->port); in sunzilog_exit()
1631 up->flags &= ~SUNZILOG_FLAG_ISR_HANDLER; in sunzilog_exit()
1632 up->curregs[R9] &= ~MIE; in sunzilog_exit()
1633 write_zsreg(channel, R9, up->curregs[R9]); in sunzilog_exit()
1634 up = up->next; in sunzilog_exit()