Lines Matching refs:port
72 #define siu_read(port, offset) readb((port)->membase + (offset)) argument
73 #define siu_write(port, offset, value) writeb((value), (port)->membase + (offset)) argument
77 struct uart_port *port; in vr41xx_select_siu_interface() local
81 port = &siu_uart_ports[0]; in vr41xx_select_siu_interface()
83 spin_lock_irqsave(&port->lock, flags); in vr41xx_select_siu_interface()
85 irsel = siu_read(port, SIUIRSEL); in vr41xx_select_siu_interface()
90 siu_write(port, SIUIRSEL, irsel); in vr41xx_select_siu_interface()
92 spin_unlock_irqrestore(&port->lock, flags); in vr41xx_select_siu_interface()
98 struct uart_port *port; in vr41xx_use_irda() local
102 port = &siu_uart_ports[0]; in vr41xx_use_irda()
104 spin_lock_irqsave(&port->lock, flags); in vr41xx_use_irda()
106 irsel = siu_read(port, SIUIRSEL); in vr41xx_use_irda()
111 siu_write(port, SIUIRSEL, irsel); in vr41xx_use_irda()
113 spin_unlock_irqrestore(&port->lock, flags); in vr41xx_use_irda()
119 struct uart_port *port; in vr41xx_select_irda_module() local
123 port = &siu_uart_ports[0]; in vr41xx_select_irda_module()
125 spin_lock_irqsave(&port->lock, flags); in vr41xx_select_irda_module()
127 irsel = siu_read(port, SIUIRSEL); in vr41xx_select_irda_module()
144 siu_write(port, SIUIRSEL, irsel); in vr41xx_select_irda_module()
146 spin_unlock_irqrestore(&port->lock, flags); in vr41xx_select_irda_module()
150 static inline void siu_clear_fifo(struct uart_port *port) in siu_clear_fifo() argument
152 siu_write(port, UART_FCR, UART_FCR_ENABLE_FIFO); in siu_clear_fifo()
153 siu_write(port, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | in siu_clear_fifo()
155 siu_write(port, UART_FCR, 0); in siu_clear_fifo()
158 static inline unsigned long siu_port_size(struct uart_port *port) in siu_port_size() argument
160 switch (port->type) { in siu_port_size()
170 static inline unsigned int siu_check_type(struct uart_port *port) in siu_check_type() argument
172 if (port->line == 0) in siu_check_type()
174 if (port->line == 1 && port->irq) in siu_check_type()
180 static inline const char *siu_type_name(struct uart_port *port) in siu_type_name() argument
182 switch (port->type) { in siu_type_name()
192 static unsigned int siu_tx_empty(struct uart_port *port) in siu_tx_empty() argument
196 lsr = siu_read(port, UART_LSR); in siu_tx_empty()
203 static void siu_set_mctrl(struct uart_port *port, unsigned int mctrl) in siu_set_mctrl() argument
218 siu_write(port, UART_MCR, mcr); in siu_set_mctrl()
221 static unsigned int siu_get_mctrl(struct uart_port *port) in siu_get_mctrl() argument
226 msr = siu_read(port, UART_MSR); in siu_get_mctrl()
239 static void siu_stop_tx(struct uart_port *port) in siu_stop_tx() argument
244 spin_lock_irqsave(&port->lock, flags); in siu_stop_tx()
246 ier = siu_read(port, UART_IER); in siu_stop_tx()
248 siu_write(port, UART_IER, ier); in siu_stop_tx()
250 spin_unlock_irqrestore(&port->lock, flags); in siu_stop_tx()
253 static void siu_start_tx(struct uart_port *port) in siu_start_tx() argument
258 spin_lock_irqsave(&port->lock, flags); in siu_start_tx()
260 ier = siu_read(port, UART_IER); in siu_start_tx()
262 siu_write(port, UART_IER, ier); in siu_start_tx()
264 spin_unlock_irqrestore(&port->lock, flags); in siu_start_tx()
267 static void siu_stop_rx(struct uart_port *port) in siu_stop_rx() argument
272 spin_lock_irqsave(&port->lock, flags); in siu_stop_rx()
274 ier = siu_read(port, UART_IER); in siu_stop_rx()
276 siu_write(port, UART_IER, ier); in siu_stop_rx()
278 port->read_status_mask &= ~UART_LSR_DR; in siu_stop_rx()
280 spin_unlock_irqrestore(&port->lock, flags); in siu_stop_rx()
283 static void siu_enable_ms(struct uart_port *port) in siu_enable_ms() argument
288 spin_lock_irqsave(&port->lock, flags); in siu_enable_ms()
290 ier = siu_read(port, UART_IER); in siu_enable_ms()
292 siu_write(port, UART_IER, ier); in siu_enable_ms()
294 spin_unlock_irqrestore(&port->lock, flags); in siu_enable_ms()
297 static void siu_break_ctl(struct uart_port *port, int ctl) in siu_break_ctl() argument
302 spin_lock_irqsave(&port->lock, flags); in siu_break_ctl()
304 lcr = siu_read(port, UART_LCR); in siu_break_ctl()
309 siu_write(port, UART_LCR, lcr); in siu_break_ctl()
311 spin_unlock_irqrestore(&port->lock, flags); in siu_break_ctl()
314 static inline void receive_chars(struct uart_port *port, uint8_t *status) in receive_chars() argument
323 ch = siu_read(port, UART_RX); in receive_chars()
324 port->icount.rx++; in receive_chars()
328 lsr |= lsr_break_flag[port->line]; in receive_chars()
329 lsr_break_flag[port->line] = 0; in receive_chars()
335 port->icount.brk++; in receive_chars()
337 if (uart_handle_break(port)) in receive_chars()
342 port->icount.frame++; in receive_chars()
344 port->icount.parity++; in receive_chars()
346 port->icount.overrun++; in receive_chars()
348 lsr &= port->read_status_mask; in receive_chars()
357 if (uart_handle_sysrq_char(port, ch)) in receive_chars()
360 uart_insert_char(port, lsr, UART_LSR_OE, ch, flag); in receive_chars()
363 lsr = siu_read(port, UART_LSR); in receive_chars()
366 tty_flip_buffer_push(&port->state->port); in receive_chars()
371 static inline void check_modem_status(struct uart_port *port) in check_modem_status() argument
375 msr = siu_read(port, UART_MSR); in check_modem_status()
379 uart_handle_dcd_change(port, msr & UART_MSR_DCD); in check_modem_status()
381 port->icount.rng++; in check_modem_status()
383 port->icount.dsr++; in check_modem_status()
385 uart_handle_cts_change(port, msr & UART_MSR_CTS); in check_modem_status()
387 wake_up_interruptible(&port->state->port.delta_msr_wait); in check_modem_status()
390 static inline void transmit_chars(struct uart_port *port) in transmit_chars() argument
395 xmit = &port->state->xmit; in transmit_chars()
397 if (port->x_char) { in transmit_chars()
398 siu_write(port, UART_TX, port->x_char); in transmit_chars()
399 port->icount.tx++; in transmit_chars()
400 port->x_char = 0; in transmit_chars()
404 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in transmit_chars()
405 siu_stop_tx(port); in transmit_chars()
410 siu_write(port, UART_TX, xmit->buf[xmit->tail]); in transmit_chars()
412 port->icount.tx++; in transmit_chars()
418 uart_write_wakeup(port); in transmit_chars()
421 siu_stop_tx(port); in transmit_chars()
426 struct uart_port *port; in siu_interrupt() local
429 port = (struct uart_port *)dev_id; in siu_interrupt()
431 iir = siu_read(port, UART_IIR); in siu_interrupt()
435 lsr = siu_read(port, UART_LSR); in siu_interrupt()
437 receive_chars(port, &lsr); in siu_interrupt()
439 check_modem_status(port); in siu_interrupt()
442 transmit_chars(port); in siu_interrupt()
447 static int siu_startup(struct uart_port *port) in siu_startup() argument
451 if (port->membase == NULL) in siu_startup()
454 siu_clear_fifo(port); in siu_startup()
456 (void)siu_read(port, UART_LSR); in siu_startup()
457 (void)siu_read(port, UART_RX); in siu_startup()
458 (void)siu_read(port, UART_IIR); in siu_startup()
459 (void)siu_read(port, UART_MSR); in siu_startup()
461 if (siu_read(port, UART_LSR) == 0xff) in siu_startup()
464 retval = request_irq(port->irq, siu_interrupt, 0, siu_type_name(port), port); in siu_startup()
468 if (port->type == PORT_VR41XX_DSIU) in siu_startup()
471 siu_write(port, UART_LCR, UART_LCR_WLEN8); in siu_startup()
473 spin_lock_irq(&port->lock); in siu_startup()
474 siu_set_mctrl(port, port->mctrl); in siu_startup()
475 spin_unlock_irq(&port->lock); in siu_startup()
477 siu_write(port, UART_IER, UART_IER_RLSI | UART_IER_RDI); in siu_startup()
479 (void)siu_read(port, UART_LSR); in siu_startup()
480 (void)siu_read(port, UART_RX); in siu_startup()
481 (void)siu_read(port, UART_IIR); in siu_startup()
482 (void)siu_read(port, UART_MSR); in siu_startup()
487 static void siu_shutdown(struct uart_port *port) in siu_shutdown() argument
492 siu_write(port, UART_IER, 0); in siu_shutdown()
494 spin_lock_irqsave(&port->lock, flags); in siu_shutdown()
496 port->mctrl &= ~TIOCM_OUT2; in siu_shutdown()
497 siu_set_mctrl(port, port->mctrl); in siu_shutdown()
499 spin_unlock_irqrestore(&port->lock, flags); in siu_shutdown()
501 lcr = siu_read(port, UART_LCR); in siu_shutdown()
503 siu_write(port, UART_LCR, lcr); in siu_shutdown()
505 siu_clear_fifo(port); in siu_shutdown()
507 (void)siu_read(port, UART_RX); in siu_shutdown()
509 if (port->type == PORT_VR41XX_DSIU) in siu_shutdown()
512 free_irq(port->irq, port); in siu_shutdown()
515 static void siu_set_termios(struct uart_port *port, struct ktermios *new, in siu_set_termios() argument
548 baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16); in siu_set_termios()
549 quot = uart_get_divisor(port, baud); in siu_set_termios()
553 spin_lock_irqsave(&port->lock, flags); in siu_set_termios()
555 uart_update_timeout(port, c_cflag, baud); in siu_set_termios()
559 port->read_status_mask = UART_LSR_THRE | UART_LSR_OE | UART_LSR_DR; in siu_set_termios()
561 port->read_status_mask |= UART_LSR_FE | UART_LSR_PE; in siu_set_termios()
563 port->read_status_mask |= UART_LSR_BI; in siu_set_termios()
565 port->ignore_status_mask = 0; in siu_set_termios()
567 port->ignore_status_mask |= UART_LSR_FE | UART_LSR_PE; in siu_set_termios()
569 port->ignore_status_mask |= UART_LSR_BI; in siu_set_termios()
571 port->ignore_status_mask |= UART_LSR_OE; in siu_set_termios()
575 port->ignore_status_mask |= UART_LSR_DR; in siu_set_termios()
577 ier = siu_read(port, UART_IER); in siu_set_termios()
579 if (UART_ENABLE_MS(port, c_cflag)) in siu_set_termios()
581 siu_write(port, UART_IER, ier); in siu_set_termios()
583 siu_write(port, UART_LCR, lcr | UART_LCR_DLAB); in siu_set_termios()
585 siu_write(port, UART_DLL, (uint8_t)quot); in siu_set_termios()
586 siu_write(port, UART_DLM, (uint8_t)(quot >> 8)); in siu_set_termios()
588 siu_write(port, UART_LCR, lcr); in siu_set_termios()
590 siu_write(port, UART_FCR, fcr); in siu_set_termios()
592 siu_set_mctrl(port, port->mctrl); in siu_set_termios()
594 spin_unlock_irqrestore(&port->lock, flags); in siu_set_termios()
597 static void siu_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) in siu_pm() argument
601 switch (port->type) { in siu_pm()
611 switch (port->type) { in siu_pm()
623 static const char *siu_type(struct uart_port *port) in siu_type() argument
625 return siu_type_name(port); in siu_type()
628 static void siu_release_port(struct uart_port *port) in siu_release_port() argument
632 if (port->flags & UPF_IOREMAP) { in siu_release_port()
633 iounmap(port->membase); in siu_release_port()
634 port->membase = NULL; in siu_release_port()
637 size = siu_port_size(port); in siu_release_port()
638 release_mem_region(port->mapbase, size); in siu_release_port()
641 static int siu_request_port(struct uart_port *port) in siu_request_port() argument
646 size = siu_port_size(port); in siu_request_port()
647 res = request_mem_region(port->mapbase, size, siu_type_name(port)); in siu_request_port()
651 if (port->flags & UPF_IOREMAP) { in siu_request_port()
652 port->membase = ioremap(port->mapbase, size); in siu_request_port()
653 if (port->membase == NULL) { in siu_request_port()
662 static void siu_config_port(struct uart_port *port, int flags) in siu_config_port() argument
665 port->type = siu_check_type(port); in siu_config_port()
666 (void)siu_request_port(port); in siu_config_port()
670 static int siu_verify_port(struct uart_port *port, struct serial_struct *serial) in siu_verify_port() argument
672 if (port->type != PORT_VR41XX_SIU && port->type != PORT_VR41XX_DSIU) in siu_verify_port()
674 if (port->irq != serial->irq) in siu_verify_port()
676 if (port->iotype != serial->io_type) in siu_verify_port()
678 if (port->mapbase != (unsigned long)serial->iomem_base) in siu_verify_port()
706 struct uart_port *port; in siu_init_ports() local
714 port = siu_uart_ports; in siu_init_ports()
716 port->type = type[i]; in siu_init_ports()
717 if (port->type == PORT_UNKNOWN) in siu_init_ports()
719 port->irq = platform_get_irq(pdev, i); in siu_init_ports()
720 port->uartclk = SIU_BAUD_BASE * 16; in siu_init_ports()
721 port->fifosize = 16; in siu_init_ports()
722 port->regshift = 0; in siu_init_ports()
723 port->iotype = UPIO_MEM; in siu_init_ports()
724 port->flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF; in siu_init_ports()
725 port->line = i; in siu_init_ports()
727 port->mapbase = res->start; in siu_init_ports()
728 port++; in siu_init_ports()
738 static void wait_for_xmitr(struct uart_port *port) in wait_for_xmitr() argument
744 lsr = siu_read(port, UART_LSR); in wait_for_xmitr()
746 lsr_break_flag[port->line] = UART_LSR_BI; in wait_for_xmitr()
752 if (port->flags & UPF_CONS_FLOW) { in wait_for_xmitr()
756 msr = siu_read(port, UART_MSR); in wait_for_xmitr()
763 static void siu_console_putchar(struct uart_port *port, int ch) in siu_console_putchar() argument
765 wait_for_xmitr(port); in siu_console_putchar()
766 siu_write(port, UART_TX, ch); in siu_console_putchar()
771 struct uart_port *port; in siu_console_write() local
774 port = &siu_uart_ports[con->index]; in siu_console_write()
776 ier = siu_read(port, UART_IER); in siu_console_write()
777 siu_write(port, UART_IER, 0); in siu_console_write()
779 uart_console_write(port, s, count, siu_console_putchar); in siu_console_write()
781 wait_for_xmitr(port); in siu_console_write()
782 siu_write(port, UART_IER, ier); in siu_console_write()
787 struct uart_port *port; in siu_console_setup() local
796 port = &siu_uart_ports[con->index]; in siu_console_setup()
797 if (port->membase == NULL) { in siu_console_setup()
798 if (port->mapbase == 0) in siu_console_setup()
800 port->membase = ioremap(port->mapbase, siu_port_size(port)); in siu_console_setup()
803 if (port->type == PORT_VR41XX_SIU) in siu_console_setup()
809 return uart_set_options(port, con, baud, parity, bits, flow); in siu_console_setup()
826 struct uart_port *port; in siu_console_init() local
830 port = &siu_uart_ports[i]; in siu_console_init()
831 port->ops = &siu_uart_ops; in siu_console_init()
841 void __init vr41xx_siu_early_setup(struct uart_port *port) in vr41xx_siu_early_setup() argument
843 if (port->type == PORT_UNKNOWN) in vr41xx_siu_early_setup()
846 siu_uart_ports[port->line].line = port->line; in vr41xx_siu_early_setup()
847 siu_uart_ports[port->line].type = port->type; in vr41xx_siu_early_setup()
848 siu_uart_ports[port->line].uartclk = SIU_BAUD_BASE * 16; in vr41xx_siu_early_setup()
849 siu_uart_ports[port->line].mapbase = port->mapbase; in vr41xx_siu_early_setup()
850 siu_uart_ports[port->line].ops = &siu_uart_ops; in vr41xx_siu_early_setup()
869 struct uart_port *port; in siu_probe() local
882 port = &siu_uart_ports[i]; in siu_probe()
883 port->ops = &siu_uart_ops; in siu_probe()
884 port->dev = &dev->dev; in siu_probe()
886 retval = uart_add_one_port(&siu_uart_driver, port); in siu_probe()
888 port->dev = NULL; in siu_probe()
903 struct uart_port *port; in siu_remove() local
907 port = &siu_uart_ports[i]; in siu_remove()
908 if (port->dev == &dev->dev) { in siu_remove()
909 uart_remove_one_port(&siu_uart_driver, port); in siu_remove()
910 port->dev = NULL; in siu_remove()
921 struct uart_port *port; in siu_suspend() local
925 port = &siu_uart_ports[i]; in siu_suspend()
926 if ((port->type == PORT_VR41XX_SIU || in siu_suspend()
927 port->type == PORT_VR41XX_DSIU) && port->dev == &dev->dev) in siu_suspend()
928 uart_suspend_port(&siu_uart_driver, port); in siu_suspend()
937 struct uart_port *port; in siu_resume() local
941 port = &siu_uart_ports[i]; in siu_resume()
942 if ((port->type == PORT_VR41XX_SIU || in siu_resume()
943 port->type == PORT_VR41XX_DSIU) && port->dev == &dev->dev) in siu_resume()
944 uart_resume_port(&siu_uart_driver, port); in siu_resume()