Lines Matching full:port
1 /* MN10300 On-chip serial port UART driver
154 * the first on-chip serial port: ttySM0 (aka SIF0)
216 * the second on-chip serial port: ttySM1 (aka SIF1)
278 * the third on-chip serial port: ttySM2 (aka SIF2)
418 static void mn10300_serial_dis_tx_intr(struct mn10300_serial_port *port) in mn10300_serial_dis_tx_intr() argument
424 *port->tx_icr = NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL); in mn10300_serial_dis_tx_intr()
425 x = *port->tx_icr; in mn10300_serial_dis_tx_intr()
429 static void mn10300_serial_en_tx_intr(struct mn10300_serial_port *port) in mn10300_serial_en_tx_intr() argument
435 *port->tx_icr = in mn10300_serial_en_tx_intr()
437 x = *port->tx_icr; in mn10300_serial_en_tx_intr()
441 static void mn10300_serial_dis_rx_intr(struct mn10300_serial_port *port) in mn10300_serial_dis_rx_intr() argument
447 *port->rx_icr = NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL); in mn10300_serial_dis_rx_intr()
448 x = *port->rx_icr; in mn10300_serial_dis_rx_intr()
466 * receive chars from the ring buffer for this serial port
469 static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port) in mn10300_serial_receive_interrupt() argument
471 struct uart_icount *icount = &port->uart.icount; in mn10300_serial_receive_interrupt()
472 struct tty_struct *tty = port->uart.state->port.tty; in mn10300_serial_receive_interrupt()
477 _enter("%s", port->name); in mn10300_serial_receive_interrupt()
481 count = CIRC_CNT(port->rx_inp, port->rx_outp, MNSC_BUFFER_SIZE); in mn10300_serial_receive_interrupt()
491 ix = port->rx_outp; in mn10300_serial_receive_interrupt()
492 if (ix == port->rx_inp) { in mn10300_serial_receive_interrupt()
498 ch = port->rx_buffer[ix++]; in mn10300_serial_receive_interrupt()
499 st = port->rx_buffer[ix++]; in mn10300_serial_receive_interrupt()
501 port->rx_outp = ix & (MNSC_BUFFER_SIZE - 1); in mn10300_serial_receive_interrupt()
502 port->uart.icount.rx++; in mn10300_serial_receive_interrupt()
514 switch (port->rx_brk) { in mn10300_serial_receive_interrupt()
521 port->rx_brk = 2; in mn10300_serial_receive_interrupt()
528 port->rx_brk = 3; in mn10300_serial_receive_interrupt()
531 if (uart_handle_break(&port->uart)) in mn10300_serial_receive_interrupt()
542 port->rx_brk = 0; /* end of the break */ in mn10300_serial_receive_interrupt()
565 port->rx_brk = 1; in mn10300_serial_receive_interrupt()
583 if (uart_handle_sysrq_char(&port->uart, ch)) in mn10300_serial_receive_interrupt()
590 if (port->rx_brk) in mn10300_serial_receive_interrupt()
599 status &= port->uart.read_status_mask; in mn10300_serial_receive_interrupt()
601 if (!overrun && !(status & port->uart.ignore_status_mask)) { in mn10300_serial_receive_interrupt()
634 port->rx_brk = 0; in mn10300_serial_receive_interrupt()
643 static void mn10300_serial_transmit_interrupt(struct mn10300_serial_port *port) in mn10300_serial_transmit_interrupt() argument
645 _enter("%s", port->name); in mn10300_serial_transmit_interrupt()
647 if (!port->uart.state || !port->uart.state->port.tty) { in mn10300_serial_transmit_interrupt()
648 mn10300_serial_dis_tx_intr(port); in mn10300_serial_transmit_interrupt()
652 if (uart_tx_stopped(&port->uart) || in mn10300_serial_transmit_interrupt()
653 uart_circ_empty(&port->uart.state->xmit)) in mn10300_serial_transmit_interrupt()
654 mn10300_serial_dis_tx_intr(port); in mn10300_serial_transmit_interrupt()
656 if (uart_circ_chars_pending(&port->uart.state->xmit) < WAKEUP_CHARS) in mn10300_serial_transmit_interrupt()
657 uart_write_wakeup(&port->uart); in mn10300_serial_transmit_interrupt()
663 static void mn10300_serial_cts_changed(struct mn10300_serial_port *port, u8 st) in mn10300_serial_cts_changed() argument
667 port->tx_cts = st; in mn10300_serial_cts_changed()
668 port->uart.icount.cts++; in mn10300_serial_cts_changed()
672 ctr = *port->_control; in mn10300_serial_cts_changed()
674 *port->_control = ctr; in mn10300_serial_cts_changed()
676 uart_handle_cts_change(&port->uart, st & SC2STR_CTS); in mn10300_serial_cts_changed()
677 wake_up_interruptible(&port->uart.state->port.delta_msr_wait); in mn10300_serial_cts_changed()
686 struct mn10300_serial_port *port = dev_id; in mn10300_serial_interrupt() local
689 spin_lock(&port->uart.lock); in mn10300_serial_interrupt()
691 if (port->intr_flags) { in mn10300_serial_interrupt()
692 _debug("INT %s: %x", port->name, port->intr_flags); in mn10300_serial_interrupt()
694 if (mask_test_and_clear(&port->intr_flags, MNSCx_RX_AVAIL)) in mn10300_serial_interrupt()
695 mn10300_serial_receive_interrupt(port); in mn10300_serial_interrupt()
697 if (mask_test_and_clear(&port->intr_flags, in mn10300_serial_interrupt()
699 mn10300_serial_transmit_interrupt(port); in mn10300_serial_interrupt()
703 * serial port 2 */ in mn10300_serial_interrupt()
704 if (port->type == PORT_MN10300_CTS) { in mn10300_serial_interrupt()
705 st = *port->_status; in mn10300_serial_interrupt()
706 if ((port->tx_cts ^ st) & SC2STR_CTS) in mn10300_serial_interrupt()
707 mn10300_serial_cts_changed(port, st); in mn10300_serial_interrupt()
710 spin_unlock(&port->uart.lock); in mn10300_serial_interrupt()
720 struct mn10300_serial_port *port = in mn10300_serial_tx_empty() local
723 _enter("%s", port->name); in mn10300_serial_tx_empty()
725 return (*port->_status & (SC01STR_TXF | SC01STR_TBF)) ? in mn10300_serial_tx_empty()
735 struct mn10300_serial_port *port __attribute__ ((unused)) = in mn10300_serial_set_mctrl() local
738 _enter("%s,%x", port->name, mctrl); in mn10300_serial_set_mctrl()
746 struct mn10300_serial_port *port = in mn10300_serial_get_mctrl() local
749 _enter("%s", port->name); in mn10300_serial_get_mctrl()
751 if (port->type == PORT_MN10300_CTS && !(*port->_status & SC2STR_CTS)) in mn10300_serial_get_mctrl()
762 struct mn10300_serial_port *port = in mn10300_serial_stop_tx() local
765 _enter("%s", port->name); in mn10300_serial_stop_tx()
768 mn10300_serial_dis_tx_intr(port); in mn10300_serial_stop_tx()
779 struct mn10300_serial_port *port = in mn10300_serial_start_tx() local
785 port->name, in mn10300_serial_start_tx()
786 CIRC_CNT(&port->uart.state->xmit.head, in mn10300_serial_start_tx()
787 &port->uart.state->xmit.tail, in mn10300_serial_start_tx()
792 x = *port->tx_icr; in mn10300_serial_start_tx()
795 if (*port->_status & SC01STR_TBF) in mn10300_serial_start_tx()
801 *port->_control, *port->_intr, *port->_status, in mn10300_serial_start_tx()
802 *port->_tmxmd, in mn10300_serial_start_tx()
803 (port->div_timer == MNSCx_DIV_TIMER_8BIT) ? in mn10300_serial_start_tx()
804 *(volatile u8 *)port->_tmxbr : *port->_tmxbr, in mn10300_serial_start_tx()
805 *port->tx_icr); in mn10300_serial_start_tx()
807 *port->tx_icr = x; in mn10300_serial_start_tx()
808 x = *port->tx_icr; in mn10300_serial_start_tx()
817 struct mn10300_serial_port *port = in mn10300_serial_send_xchar() local
820 _enter("%s,%02x", port->name, ch); in mn10300_serial_send_xchar()
822 if (likely(port->gdbstub)) { in mn10300_serial_send_xchar()
823 port->tx_xchar = ch; in mn10300_serial_send_xchar()
825 mn10300_serial_en_tx_intr(port); in mn10300_serial_send_xchar()
831 * - called whilst the port is being closed
835 struct mn10300_serial_port *port = in mn10300_serial_stop_rx() local
840 _enter("%s", port->name); in mn10300_serial_stop_rx()
842 ctr = *port->_control; in mn10300_serial_stop_rx()
844 *port->_control = ctr; in mn10300_serial_stop_rx()
846 mn10300_serial_dis_rx_intr(port); in mn10300_serial_stop_rx()
854 struct mn10300_serial_port *port = in mn10300_serial_enable_ms() local
859 _enter("%s", port->name); in mn10300_serial_enable_ms()
861 if (port->type == PORT_MN10300_CTS) { in mn10300_serial_enable_ms()
865 port->tx_cts = *port->_status; in mn10300_serial_enable_ms()
867 cts = (port->tx_cts & SC2STR_CTS) ? in mn10300_serial_enable_ms()
870 ctr = *port->_control; in mn10300_serial_enable_ms()
873 *port->_control = ctr; in mn10300_serial_enable_ms()
875 mn10300_serial_en_tx_intr(port); in mn10300_serial_enable_ms()
884 struct mn10300_serial_port *port = in mn10300_serial_break_ctl() local
887 _enter("%s,%d", port->name, ctl); in mn10300_serial_break_ctl()
891 port->tx_break = 1; in mn10300_serial_break_ctl()
892 mn10300_serial_en_tx_intr(port); in mn10300_serial_break_ctl()
894 port->tx_break = 0; in mn10300_serial_break_ctl()
895 *port->_control &= ~SC01CTR_BKE; in mn10300_serial_break_ctl()
896 mn10300_serial_en_tx_intr(port); in mn10300_serial_break_ctl()
901 * grab the interrupts and enable the port for reception
905 struct mn10300_serial_port *port = in mn10300_serial_startup() local
909 _enter("%s{%d}", port->name, port->gdbstub); in mn10300_serial_startup()
911 if (unlikely(port->gdbstub)) in mn10300_serial_startup()
915 port->rx_buffer = kmalloc(MNSC_BUFFER_SIZE, GFP_KERNEL); in mn10300_serial_startup()
916 if (!port->rx_buffer) in mn10300_serial_startup()
919 port->rx_inp = port->rx_outp = 0; in mn10300_serial_startup()
922 *port->_intr = SC01ICR_TI; in mn10300_serial_startup()
923 *port->_control |= SC01CTR_TXE | SC01CTR_RXE; in mn10300_serial_startup()
925 pint = &mn10300_serial_int_tbl[port->rx_irq]; in mn10300_serial_startup()
926 pint->port = port; in mn10300_serial_startup()
928 pint = &mn10300_serial_int_tbl[port->tx_irq]; in mn10300_serial_startup()
929 pint->port = port; in mn10300_serial_startup()
932 set_intr_level(port->rx_irq, in mn10300_serial_startup()
934 set_intr_level(port->tx_irq, in mn10300_serial_startup()
936 irq_set_chip(port->tm_irq, &mn10300_serial_pic); in mn10300_serial_startup()
938 if (request_irq(port->rx_irq, mn10300_serial_interrupt, in mn10300_serial_startup()
939 IRQF_DISABLED, port->rx_name, port) < 0) in mn10300_serial_startup()
942 if (request_irq(port->tx_irq, mn10300_serial_interrupt, in mn10300_serial_startup()
943 IRQF_DISABLED, port->tx_name, port) < 0) in mn10300_serial_startup()
946 if (request_irq(port->tm_irq, mn10300_serial_interrupt, in mn10300_serial_startup()
947 IRQF_DISABLED, port->tm_name, port) < 0) in mn10300_serial_startup()
949 mn10300_serial_mask_ack(port->tm_irq); in mn10300_serial_startup()
954 free_irq(port->tx_irq, port); in mn10300_serial_startup()
956 free_irq(port->rx_irq, port); in mn10300_serial_startup()
958 kfree(port->rx_buffer); in mn10300_serial_startup()
959 port->rx_buffer = NULL; in mn10300_serial_startup()
964 * shutdown the port and release interrupts
969 struct mn10300_serial_port *port = in mn10300_serial_shutdown() local
972 _enter("%s", port->name); in mn10300_serial_shutdown()
974 /* disable the serial port and its baud rate timer */ in mn10300_serial_shutdown()
975 port->tx_break = 0; in mn10300_serial_shutdown()
976 *port->_control &= ~(SC01CTR_TXE | SC01CTR_RXE | SC01CTR_BKE); in mn10300_serial_shutdown()
977 *port->_tmxmd = 0; in mn10300_serial_shutdown()
979 if (port->rx_buffer) { in mn10300_serial_shutdown()
980 void *buf = port->rx_buffer; in mn10300_serial_shutdown()
981 port->rx_buffer = NULL; in mn10300_serial_shutdown()
986 free_irq(port->tm_irq, port); in mn10300_serial_shutdown()
987 free_irq(port->rx_irq, port); in mn10300_serial_shutdown()
988 free_irq(port->tx_irq, port); in mn10300_serial_shutdown()
991 *port->rx_icr = NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL); in mn10300_serial_shutdown()
992 x = *port->rx_icr; in mn10300_serial_shutdown()
993 *port->tx_icr = NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL); in mn10300_serial_shutdown()
994 x = *port->tx_icr; in mn10300_serial_shutdown()
1000 * specified baud rate for a serial port.
1002 static void mn10300_serial_change_speed(struct mn10300_serial_port *port, in mn10300_serial_change_speed() argument
1007 unsigned long ioclk = port->ioclk; in mn10300_serial_change_speed()
1012 u8 div_timer = port->div_timer; in mn10300_serial_change_speed()
1014 _enter("%s{%lu}", port->name, ioclk); in mn10300_serial_change_speed()
1044 switch (port->uart.line) { in mn10300_serial_change_speed()
1106 baud = uart_get_baud_rate(&port->uart, new, old, 0, in mn10300_serial_change_speed()
1107 port->ioclk / 8); in mn10300_serial_change_speed()
1120 (port->uart.flags & UPF_SPD_MASK) == UPF_SPD_CUST in mn10300_serial_change_speed()
1122 _debug("CUSTOM %u", port->uart.custom_divisor); in mn10300_serial_change_speed()
1125 if (port->uart.custom_divisor <= 65535) { in mn10300_serial_change_speed()
1127 tmxbr = port->uart.custom_divisor; in mn10300_serial_change_speed()
1128 port->uart.uartclk = ioclk; in mn10300_serial_change_speed()
1131 if (port->uart.custom_divisor / 8 <= 65535) { in mn10300_serial_change_speed()
1133 tmxbr = port->uart.custom_divisor / 8; in mn10300_serial_change_speed()
1134 port->uart.custom_divisor = tmxbr * 8; in mn10300_serial_change_speed()
1135 port->uart.uartclk = ioclk / 8; in mn10300_serial_change_speed()
1138 if (port->uart.custom_divisor / 32 <= 65535) { in mn10300_serial_change_speed()
1140 tmxbr = port->uart.custom_divisor / 32; in mn10300_serial_change_speed()
1141 port->uart.custom_divisor = tmxbr * 32; in mn10300_serial_change_speed()
1142 port->uart.uartclk = ioclk / 32; in mn10300_serial_change_speed()
1147 if (port->uart.custom_divisor <= 255) { in mn10300_serial_change_speed()
1149 tmxbr = port->uart.custom_divisor; in mn10300_serial_change_speed()
1150 port->uart.uartclk = ioclk; in mn10300_serial_change_speed()
1153 if (port->uart.custom_divisor / 8 <= 255) { in mn10300_serial_change_speed()
1155 tmxbr = port->uart.custom_divisor / 8; in mn10300_serial_change_speed()
1156 port->uart.custom_divisor = tmxbr * 8; in mn10300_serial_change_speed()
1157 port->uart.uartclk = ioclk / 8; in mn10300_serial_change_speed()
1160 if (port->uart.custom_divisor / 32 <= 255) { in mn10300_serial_change_speed()
1162 tmxbr = port->uart.custom_divisor / 32; in mn10300_serial_change_speed()
1163 port->uart.custom_divisor = tmxbr * 32; in mn10300_serial_change_speed()
1164 port->uart.uartclk = ioclk / 32; in mn10300_serial_change_speed()
1172 port->uart.uartclk = ioclk; in mn10300_serial_change_speed()
1178 port->uart.uartclk = ioclk / 8; in mn10300_serial_change_speed()
1184 port->uart.uartclk = ioclk / 32; in mn10300_serial_change_speed()
1192 port->uart.uartclk = ioclk; in mn10300_serial_change_speed()
1198 port->uart.uartclk = ioclk / 8; in mn10300_serial_change_speed()
1204 port->uart.uartclk = ioclk / 32; in mn10300_serial_change_speed()
1250 port->uart.uartclk = ioclk / 32; in mn10300_serial_change_speed()
1255 _debug("UARTCLK: %u / %hu", port->uart.uartclk, tmxbr); in mn10300_serial_change_speed()
1258 spin_lock_irqsave(&port->uart.lock, flags); in mn10300_serial_change_speed()
1260 uart_update_timeout(&port->uart, new->c_cflag, baud); in mn10300_serial_change_speed()
1265 *port->_tmxmd = 0; in mn10300_serial_change_speed()
1266 *port->_tmxbr = tmxbr; in mn10300_serial_change_speed()
1267 *port->_tmxmd = TM8MD_INIT_COUNTER; in mn10300_serial_change_speed()
1268 *port->_tmxmd = tmxmd | TM8MD_COUNT_ENABLE; in mn10300_serial_change_speed()
1272 *port->_tmxmd = 0; in mn10300_serial_change_speed()
1273 *(volatile u8 *) port->_tmxbr = (u8) tmxbr; in mn10300_serial_change_speed()
1274 *port->_tmxmd = TM2MD_INIT_COUNTER; in mn10300_serial_change_speed()
1275 *port->_tmxmd = tmxmd | TM2MD_COUNT_ENABLE; in mn10300_serial_change_speed()
1282 if (port->type == PORT_MN10300_CTS && cflag & CRTSCTS) { in mn10300_serial_change_speed()
1286 port->tx_cts = *port->_status; in mn10300_serial_change_speed()
1288 if (port->tx_cts & SC2STR_CTS) in mn10300_serial_change_speed()
1295 port->uart.read_status_mask = (1 << TTY_NORMAL) | (1 << TTY_OVERRUN); in mn10300_serial_change_speed()
1297 port->uart.read_status_mask |= in mn10300_serial_change_speed()
1300 port->uart.read_status_mask |= (1 << TTY_BREAK); in mn10300_serial_change_speed()
1303 port->uart.ignore_status_mask = 0; in mn10300_serial_change_speed()
1305 port->uart.ignore_status_mask |= in mn10300_serial_change_speed()
1308 port->uart.ignore_status_mask |= (1 << TTY_BREAK); in mn10300_serial_change_speed()
1314 port->uart.ignore_status_mask |= (1 << TTY_OVERRUN); in mn10300_serial_change_speed()
1319 port->uart.ignore_status_mask |= (1 << TTY_NORMAL); in mn10300_serial_change_speed()
1321 scxctr |= *port->_control & (SC01CTR_TXE | SC01CTR_RXE | SC01CTR_BKE); in mn10300_serial_change_speed()
1322 *port->_control = scxctr; in mn10300_serial_change_speed()
1324 spin_unlock_irqrestore(&port->uart.lock, flags); in mn10300_serial_change_speed()
1334 struct mn10300_serial_port *port = in mn10300_serial_set_termios() local
1337 _enter("%s,%p,%p", port->name, new, old); in mn10300_serial_set_termios()
1339 mn10300_serial_change_speed(port, new, old); in mn10300_serial_set_termios()
1343 u16 ctr = *port->_control; in mn10300_serial_set_termios()
1345 *port->_control = ctr; in mn10300_serial_set_termios()
1350 *port->_control |= SC01CTR_OD_MSBFIRST; /* MSB MODE */ in mn10300_serial_set_termios()
1352 *port->_control &= ~SC01CTR_OD_MSBFIRST; /* LSB MODE */ in mn10300_serial_set_termios()
1356 * return description of port type
1360 struct mn10300_serial_port *port = in mn10300_serial_type() local
1363 if (port->uart.type == PORT_MN10300_CTS) in mn10300_serial_type()
1370 * release I/O and memory regions in use by port
1374 struct mn10300_serial_port *port = in mn10300_serial_release_port() local
1377 _enter("%s", port->name); in mn10300_serial_release_port()
1379 release_mem_region((unsigned long) port->_iobase, 16); in mn10300_serial_release_port()
1383 * request I/O and memory regions for port
1387 struct mn10300_serial_port *port = in mn10300_serial_request_port() local
1390 _enter("%s", port->name); in mn10300_serial_request_port()
1392 request_mem_region((unsigned long) port->_iobase, 16, port->name); in mn10300_serial_request_port()
1401 struct mn10300_serial_port *port = in mn10300_serial_config_port() local
1404 _enter("%s", port->name); in mn10300_serial_config_port()
1406 port->uart.type = PORT_MN10300; in mn10300_serial_config_port()
1408 if (port->options & MNSCx_OPT_CTS) in mn10300_serial_config_port()
1409 port->uart.type = PORT_MN10300_CTS; in mn10300_serial_config_port()
1415 * verify serial parameters are suitable for this port type
1420 struct mn10300_serial_port *port = in mn10300_serial_verify_port() local
1422 void *mapbase = (void *) (unsigned long) port->uart.mapbase; in mn10300_serial_verify_port()
1424 _enter("%s", port->name); in mn10300_serial_verify_port()
1427 if (ss->irq != port->uart.irq || in mn10300_serial_verify_port()
1428 ss->port != port->uart.iobase || in mn10300_serial_verify_port()
1429 ss->io_type != port->uart.iotype || in mn10300_serial_verify_port()
1431 ss->iomem_reg_shift != port->uart.regshift || in mn10300_serial_verify_port()
1432 ss->hub6 != port->uart.hub6 || in mn10300_serial_verify_port()
1433 ss->xmit_fifo_size != port->uart.fifosize) in mn10300_serial_verify_port()
1436 /* type may be changed on a port that supports CTS */ in mn10300_serial_verify_port()
1437 if (ss->type != port->uart.type) { in mn10300_serial_verify_port()
1438 if (!(port->options & MNSCx_OPT_CTS)) in mn10300_serial_verify_port()
1454 struct mn10300_serial_port *port; in mn10300_serial_init() local
1474 port = mn10300_serial_ports[i]; in mn10300_serial_init()
1475 if (!port || port->gdbstub) in mn10300_serial_init()
1478 switch (port->clock_src) { in mn10300_serial_init()
1480 port->ioclk = MN10300_IOCLK; in mn10300_serial_init()
1485 port->ioclk = MN10300_IOBCLK; in mn10300_serial_init()
1493 &port->uart); in mn10300_serial_init()
1514 * print a string to the serial port without disturbing the real user of the
1515 * port too much
1521 struct mn10300_serial_port *port; in mn10300_serial_console_write() local
1526 port = mn10300_serial_ports[co->index]; in mn10300_serial_console_write()
1528 /* firstly hijack the serial port from the "virtual DMA" controller */ in mn10300_serial_console_write()
1530 txicr = *port->tx_icr; in mn10300_serial_console_write()
1531 *port->tx_icr = NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL); in mn10300_serial_console_write()
1532 tmp = *port->tx_icr; in mn10300_serial_console_write()
1536 scxctr = *port->_control; in mn10300_serial_console_write()
1539 tmxmd = *port->_tmxmd; in mn10300_serial_console_write()
1541 switch (port->div_timer) { in mn10300_serial_console_write()
1543 *port->_tmxmd = 0; in mn10300_serial_console_write()
1544 *port->_tmxmd = TM8MD_INIT_COUNTER; in mn10300_serial_console_write()
1545 *port->_tmxmd = tmxmd | TM8MD_COUNT_ENABLE; in mn10300_serial_console_write()
1549 *port->_tmxmd = 0; in mn10300_serial_console_write()
1550 *port->_tmxmd = TM2MD_INIT_COUNTER; in mn10300_serial_console_write()
1551 *port->_tmxmd = tmxmd | TM2MD_COUNT_ENABLE; in mn10300_serial_console_write()
1556 *port->_control = (scxctr & ~SC01CTR_BKE) | SC01CTR_TXE; in mn10300_serial_console_write()
1560 *port->_control = (scxctr & ~SC01CTR_BKE); in mn10300_serial_console_write()
1563 /* send the chars into the serial port (with LF -> LFCR conversion) */ in mn10300_serial_console_write()
1567 while (*port->_status & SC01STR_TBF) in mn10300_serial_console_write()
1569 *(u8 *) port->_txb = ch; in mn10300_serial_console_write()
1572 while (*port->_status & SC01STR_TBF) in mn10300_serial_console_write()
1574 *(u8 *) port->_txb = 0xd; in mn10300_serial_console_write()
1580 while (*port->_status & (SC01STR_TXF | SC01STR_TBF)) in mn10300_serial_console_write()
1585 *port->_control = scxctr; in mn10300_serial_console_write()
1588 *port->tx_icr = txicr; in mn10300_serial_console_write()
1589 tmp = *port->tx_icr; in mn10300_serial_console_write()
1594 * set up a serial port as a console
1596 * - initialize the serial port
1597 * - return non-zero if we didn't find a serial port.
1602 struct mn10300_serial_port *port; in mn10300_serial_console_setup() local
1606 port = mn10300_serial_ports[i]; in mn10300_serial_console_setup()
1607 if (port && !port->gdbstub && port->uart.line == co->index) in mn10300_serial_console_setup()
1614 switch (port->clock_src) { in mn10300_serial_console_setup()
1616 port->ioclk = MN10300_IOCLK; in mn10300_serial_console_setup()
1621 port->ioclk = MN10300_IOBCLK; in mn10300_serial_console_setup()
1631 return uart_set_options(&port->uart, co, baud, parity, bits, flow); in mn10300_serial_console_setup()
1652 struct mn10300_serial_port *port = in mn10300_serial_poll_get_char() local
1657 _enter("%s", port->name); in mn10300_serial_poll_get_char()
1661 ix = port->rx_outp; in mn10300_serial_poll_get_char()
1662 if (ix == port->rx_inp) in mn10300_serial_poll_get_char()
1665 ch = port->rx_buffer[ix++]; in mn10300_serial_poll_get_char()
1666 st = port->rx_buffer[ix++]; in mn10300_serial_poll_get_char()
1668 port->rx_outp = ix & (MNSC_BUFFER_SIZE - 1); in mn10300_serial_poll_get_char()
1682 struct mn10300_serial_port *port = in mn10300_serial_poll_put_char() local
1688 while (*port->_status & (SC01STR_TBF | SC01STR_TXF)) in mn10300_serial_poll_put_char()
1692 intr = *port->_intr; in mn10300_serial_poll_put_char()
1693 *port->_intr = intr & ~SC01ICR_TI; in mn10300_serial_poll_put_char()
1694 tmp = *port->_intr; in mn10300_serial_poll_put_char()
1697 *(u8 *) port->_txb = 0x0d; in mn10300_serial_poll_put_char()
1698 while (*port->_status & SC01STR_TBF) in mn10300_serial_poll_put_char()
1702 *(u8 *) port->_txb = ch; in mn10300_serial_poll_put_char()
1703 while (*port->_status & SC01STR_TBF) in mn10300_serial_poll_put_char()
1707 *port->_intr = intr; in mn10300_serial_poll_put_char()
1708 tmp = *port->_intr; in mn10300_serial_poll_put_char()