Lines Matching full:port
59 #define siu_read(port, offset) readb((port)->membase + (offset)) argument
60 #define siu_write(port, offset, value) writeb((value), (port)->membase + (offset)) argument
64 struct uart_port *port; in vr41xx_select_siu_interface() local
68 port = &siu_uart_ports[0]; in vr41xx_select_siu_interface()
70 spin_lock_irqsave(&port->lock, flags); in vr41xx_select_siu_interface()
72 irsel = siu_read(port, SIUIRSEL); in vr41xx_select_siu_interface()
77 siu_write(port, SIUIRSEL, irsel); in vr41xx_select_siu_interface()
79 spin_unlock_irqrestore(&port->lock, flags); in vr41xx_select_siu_interface()
85 struct uart_port *port; in vr41xx_use_irda() local
89 port = &siu_uart_ports[0]; in vr41xx_use_irda()
91 spin_lock_irqsave(&port->lock, flags); in vr41xx_use_irda()
93 irsel = siu_read(port, SIUIRSEL); in vr41xx_use_irda()
98 siu_write(port, SIUIRSEL, irsel); in vr41xx_use_irda()
100 spin_unlock_irqrestore(&port->lock, flags); in vr41xx_use_irda()
106 struct uart_port *port; in vr41xx_select_irda_module() local
110 port = &siu_uart_ports[0]; in vr41xx_select_irda_module()
112 spin_lock_irqsave(&port->lock, flags); in vr41xx_select_irda_module()
114 irsel = siu_read(port, SIUIRSEL); in vr41xx_select_irda_module()
131 siu_write(port, SIUIRSEL, irsel); in vr41xx_select_irda_module()
133 spin_unlock_irqrestore(&port->lock, flags); in vr41xx_select_irda_module()
137 static inline void siu_clear_fifo(struct uart_port *port) in siu_clear_fifo() argument
139 siu_write(port, UART_FCR, UART_FCR_ENABLE_FIFO); in siu_clear_fifo()
140 siu_write(port, UART_FCR, UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | in siu_clear_fifo()
142 siu_write(port, UART_FCR, 0); in siu_clear_fifo()
145 static inline unsigned long siu_port_size(struct uart_port *port) in siu_port_size() argument
147 switch (port->type) { in siu_port_size()
157 static inline unsigned int siu_check_type(struct uart_port *port) in siu_check_type() argument
159 if (port->line == 0) in siu_check_type()
161 if (port->line == 1 && port->irq) in siu_check_type()
167 static inline const char *siu_type_name(struct uart_port *port) in siu_type_name() argument
169 switch (port->type) { in siu_type_name()
179 static unsigned int siu_tx_empty(struct uart_port *port) in siu_tx_empty() argument
183 lsr = siu_read(port, UART_LSR); in siu_tx_empty()
190 static void siu_set_mctrl(struct uart_port *port, unsigned int mctrl) in siu_set_mctrl() argument
205 siu_write(port, UART_MCR, mcr); in siu_set_mctrl()
208 static unsigned int siu_get_mctrl(struct uart_port *port) in siu_get_mctrl() argument
213 msr = siu_read(port, UART_MSR); in siu_get_mctrl()
226 static void siu_stop_tx(struct uart_port *port) in siu_stop_tx() argument
231 spin_lock_irqsave(&port->lock, flags); in siu_stop_tx()
233 ier = siu_read(port, UART_IER); in siu_stop_tx()
235 siu_write(port, UART_IER, ier); in siu_stop_tx()
237 spin_unlock_irqrestore(&port->lock, flags); in siu_stop_tx()
240 static void siu_start_tx(struct uart_port *port) in siu_start_tx() argument
245 spin_lock_irqsave(&port->lock, flags); in siu_start_tx()
247 ier = siu_read(port, UART_IER); in siu_start_tx()
249 siu_write(port, UART_IER, ier); in siu_start_tx()
251 spin_unlock_irqrestore(&port->lock, flags); in siu_start_tx()
254 static void siu_stop_rx(struct uart_port *port) in siu_stop_rx() argument
259 spin_lock_irqsave(&port->lock, flags); in siu_stop_rx()
261 ier = siu_read(port, UART_IER); in siu_stop_rx()
263 siu_write(port, UART_IER, ier); in siu_stop_rx()
265 port->read_status_mask &= ~UART_LSR_DR; in siu_stop_rx()
267 spin_unlock_irqrestore(&port->lock, flags); in siu_stop_rx()
270 static void siu_enable_ms(struct uart_port *port) in siu_enable_ms() argument
275 spin_lock_irqsave(&port->lock, flags); in siu_enable_ms()
277 ier = siu_read(port, UART_IER); in siu_enable_ms()
279 siu_write(port, UART_IER, ier); in siu_enable_ms()
281 spin_unlock_irqrestore(&port->lock, flags); in siu_enable_ms()
284 static void siu_break_ctl(struct uart_port *port, int ctl) in siu_break_ctl() argument
289 spin_lock_irqsave(&port->lock, flags); in siu_break_ctl()
291 lcr = siu_read(port, UART_LCR); in siu_break_ctl()
296 siu_write(port, UART_LCR, lcr); in siu_break_ctl()
298 spin_unlock_irqrestore(&port->lock, flags); in siu_break_ctl()
301 static inline void receive_chars(struct uart_port *port, uint8_t *status) in receive_chars() argument
310 ch = siu_read(port, UART_RX); in receive_chars()
311 port->icount.rx++; in receive_chars()
315 lsr |= lsr_break_flag[port->line]; in receive_chars()
316 lsr_break_flag[port->line] = 0; in receive_chars()
322 port->icount.brk++; in receive_chars()
324 if (uart_handle_break(port)) in receive_chars()
329 port->icount.frame++; in receive_chars()
331 port->icount.parity++; in receive_chars()
333 port->icount.overrun++; in receive_chars()
335 lsr &= port->read_status_mask; in receive_chars()
344 if (uart_handle_sysrq_char(port, ch)) in receive_chars()
347 uart_insert_char(port, lsr, UART_LSR_OE, ch, flag); in receive_chars()
350 lsr = siu_read(port, UART_LSR); in receive_chars()
353 tty_flip_buffer_push(&port->state->port); in receive_chars()
358 static inline void check_modem_status(struct uart_port *port) in check_modem_status() argument
362 msr = siu_read(port, UART_MSR); in check_modem_status()
366 uart_handle_dcd_change(port, msr & UART_MSR_DCD); in check_modem_status()
368 port->icount.rng++; in check_modem_status()
370 port->icount.dsr++; in check_modem_status()
372 uart_handle_cts_change(port, msr & UART_MSR_CTS); in check_modem_status()
374 wake_up_interruptible(&port->state->port.delta_msr_wait); in check_modem_status()
377 static inline void transmit_chars(struct uart_port *port) in transmit_chars() argument
382 xmit = &port->state->xmit; in transmit_chars()
384 if (port->x_char) { in transmit_chars()
385 siu_write(port, UART_TX, port->x_char); in transmit_chars()
386 port->icount.tx++; in transmit_chars()
387 port->x_char = 0; in transmit_chars()
391 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in transmit_chars()
392 siu_stop_tx(port); in transmit_chars()
397 siu_write(port, UART_TX, xmit->buf[xmit->tail]); in transmit_chars()
399 port->icount.tx++; in transmit_chars()
405 uart_write_wakeup(port); in transmit_chars()
408 siu_stop_tx(port); in transmit_chars()
413 struct uart_port *port; in siu_interrupt() local
416 port = (struct uart_port *)dev_id; in siu_interrupt()
418 iir = siu_read(port, UART_IIR); in siu_interrupt()
422 lsr = siu_read(port, UART_LSR); in siu_interrupt()
424 receive_chars(port, &lsr); in siu_interrupt()
426 check_modem_status(port); in siu_interrupt()
429 transmit_chars(port); in siu_interrupt()
434 static int siu_startup(struct uart_port *port) in siu_startup() argument
438 if (port->membase == NULL) in siu_startup()
441 siu_clear_fifo(port); in siu_startup()
443 (void)siu_read(port, UART_LSR); in siu_startup()
444 (void)siu_read(port, UART_RX); in siu_startup()
445 (void)siu_read(port, UART_IIR); in siu_startup()
446 (void)siu_read(port, UART_MSR); in siu_startup()
448 if (siu_read(port, UART_LSR) == 0xff) in siu_startup()
451 retval = request_irq(port->irq, siu_interrupt, 0, siu_type_name(port), port); in siu_startup()
455 if (port->type == PORT_VR41XX_DSIU) in siu_startup()
458 siu_write(port, UART_LCR, UART_LCR_WLEN8); in siu_startup()
460 spin_lock_irq(&port->lock); in siu_startup()
461 siu_set_mctrl(port, port->mctrl); in siu_startup()
462 spin_unlock_irq(&port->lock); in siu_startup()
464 siu_write(port, UART_IER, UART_IER_RLSI | UART_IER_RDI); in siu_startup()
466 (void)siu_read(port, UART_LSR); in siu_startup()
467 (void)siu_read(port, UART_RX); in siu_startup()
468 (void)siu_read(port, UART_IIR); in siu_startup()
469 (void)siu_read(port, UART_MSR); in siu_startup()
474 static void siu_shutdown(struct uart_port *port) in siu_shutdown() argument
479 siu_write(port, UART_IER, 0); in siu_shutdown()
481 spin_lock_irqsave(&port->lock, flags); in siu_shutdown()
483 port->mctrl &= ~TIOCM_OUT2; in siu_shutdown()
484 siu_set_mctrl(port, port->mctrl); in siu_shutdown()
486 spin_unlock_irqrestore(&port->lock, flags); in siu_shutdown()
488 lcr = siu_read(port, UART_LCR); in siu_shutdown()
490 siu_write(port, UART_LCR, lcr); in siu_shutdown()
492 siu_clear_fifo(port); in siu_shutdown()
494 (void)siu_read(port, UART_RX); in siu_shutdown()
496 if (port->type == PORT_VR41XX_DSIU) in siu_shutdown()
499 free_irq(port->irq, port); in siu_shutdown()
502 static void siu_set_termios(struct uart_port *port, struct ktermios *new, in siu_set_termios() argument
535 baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16); in siu_set_termios()
536 quot = uart_get_divisor(port, baud); in siu_set_termios()
540 spin_lock_irqsave(&port->lock, flags); in siu_set_termios()
542 uart_update_timeout(port, c_cflag, baud); in siu_set_termios()
546 port->read_status_mask = UART_LSR_THRE | UART_LSR_OE | UART_LSR_DR; in siu_set_termios()
548 port->read_status_mask |= UART_LSR_FE | UART_LSR_PE; in siu_set_termios()
550 port->read_status_mask |= UART_LSR_BI; in siu_set_termios()
552 port->ignore_status_mask = 0; in siu_set_termios()
554 port->ignore_status_mask |= UART_LSR_FE | UART_LSR_PE; in siu_set_termios()
556 port->ignore_status_mask |= UART_LSR_BI; in siu_set_termios()
558 port->ignore_status_mask |= UART_LSR_OE; in siu_set_termios()
562 port->ignore_status_mask |= UART_LSR_DR; in siu_set_termios()
564 ier = siu_read(port, UART_IER); in siu_set_termios()
566 if (UART_ENABLE_MS(port, c_cflag)) in siu_set_termios()
568 siu_write(port, UART_IER, ier); in siu_set_termios()
570 siu_write(port, UART_LCR, lcr | UART_LCR_DLAB); in siu_set_termios()
572 siu_write(port, UART_DLL, (uint8_t)quot); in siu_set_termios()
573 siu_write(port, UART_DLM, (uint8_t)(quot >> 8)); in siu_set_termios()
575 siu_write(port, UART_LCR, lcr); in siu_set_termios()
577 siu_write(port, UART_FCR, fcr); in siu_set_termios()
579 siu_set_mctrl(port, port->mctrl); in siu_set_termios()
581 spin_unlock_irqrestore(&port->lock, flags); in siu_set_termios()
584 static void siu_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) in siu_pm() argument
588 switch (port->type) { in siu_pm()
598 switch (port->type) { in siu_pm()
610 static const char *siu_type(struct uart_port *port) in siu_type() argument
612 return siu_type_name(port); in siu_type()
615 static void siu_release_port(struct uart_port *port) in siu_release_port() argument
619 if (port->flags & UPF_IOREMAP) { in siu_release_port()
620 iounmap(port->membase); in siu_release_port()
621 port->membase = NULL; in siu_release_port()
624 size = siu_port_size(port); in siu_release_port()
625 release_mem_region(port->mapbase, size); in siu_release_port()
628 static int siu_request_port(struct uart_port *port) in siu_request_port() argument
633 size = siu_port_size(port); in siu_request_port()
634 res = request_mem_region(port->mapbase, size, siu_type_name(port)); in siu_request_port()
638 if (port->flags & UPF_IOREMAP) { in siu_request_port()
639 port->membase = ioremap(port->mapbase, size); in siu_request_port()
640 if (port->membase == NULL) { in siu_request_port()
649 static void siu_config_port(struct uart_port *port, int flags) in siu_config_port() argument
652 port->type = siu_check_type(port); in siu_config_port()
653 (void)siu_request_port(port); in siu_config_port()
657 static int siu_verify_port(struct uart_port *port, struct serial_struct *serial) in siu_verify_port() argument
659 if (port->type != PORT_VR41XX_SIU && port->type != PORT_VR41XX_DSIU) in siu_verify_port()
661 if (port->irq != serial->irq) in siu_verify_port()
663 if (port->iotype != serial->io_type) in siu_verify_port()
665 if (port->mapbase != (unsigned long)serial->iomem_base) in siu_verify_port()
693 struct uart_port *port; in siu_init_ports() local
701 port = siu_uart_ports; in siu_init_ports()
703 port->type = type[i]; in siu_init_ports()
704 if (port->type == PORT_UNKNOWN) in siu_init_ports()
706 port->irq = platform_get_irq(pdev, i); in siu_init_ports()
707 port->uartclk = SIU_BAUD_BASE * 16; in siu_init_ports()
708 port->fifosize = 16; in siu_init_ports()
709 port->regshift = 0; in siu_init_ports()
710 port->iotype = UPIO_MEM; in siu_init_ports()
711 port->flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF; in siu_init_ports()
712 port->line = i; in siu_init_ports()
714 port->mapbase = res->start; in siu_init_ports()
715 port++; in siu_init_ports()
725 static void wait_for_xmitr(struct uart_port *port) in wait_for_xmitr() argument
731 lsr = siu_read(port, UART_LSR); in wait_for_xmitr()
733 lsr_break_flag[port->line] = UART_LSR_BI; in wait_for_xmitr()
739 if (port->flags & UPF_CONS_FLOW) { in wait_for_xmitr()
743 msr = siu_read(port, UART_MSR); in wait_for_xmitr()
750 static void siu_console_putchar(struct uart_port *port, int ch) in siu_console_putchar() argument
752 wait_for_xmitr(port); in siu_console_putchar()
753 siu_write(port, UART_TX, ch); in siu_console_putchar()
758 struct uart_port *port; in siu_console_write() local
761 port = &siu_uart_ports[con->index]; in siu_console_write()
763 ier = siu_read(port, UART_IER); in siu_console_write()
764 siu_write(port, UART_IER, 0); in siu_console_write()
766 uart_console_write(port, s, count, siu_console_putchar); in siu_console_write()
768 wait_for_xmitr(port); in siu_console_write()
769 siu_write(port, UART_IER, ier); in siu_console_write()
774 struct uart_port *port; in siu_console_setup() local
783 port = &siu_uart_ports[con->index]; in siu_console_setup()
784 if (port->membase == NULL) { in siu_console_setup()
785 if (port->mapbase == 0) in siu_console_setup()
787 port->membase = ioremap(port->mapbase, siu_port_size(port)); in siu_console_setup()
790 if (port->type == PORT_VR41XX_SIU) in siu_console_setup()
796 return uart_set_options(port, con, baud, parity, bits, flow); in siu_console_setup()
813 struct uart_port *port; in siu_console_init() local
817 port = &siu_uart_ports[i]; in siu_console_init()
818 port->ops = &siu_uart_ops; in siu_console_init()
828 void __init vr41xx_siu_early_setup(struct uart_port *port) in vr41xx_siu_early_setup() argument
830 if (port->type == PORT_UNKNOWN) in vr41xx_siu_early_setup()
833 siu_uart_ports[port->line].line = port->line; in vr41xx_siu_early_setup()
834 siu_uart_ports[port->line].type = port->type; in vr41xx_siu_early_setup()
835 siu_uart_ports[port->line].uartclk = SIU_BAUD_BASE * 16; in vr41xx_siu_early_setup()
836 siu_uart_ports[port->line].mapbase = port->mapbase; in vr41xx_siu_early_setup()
837 siu_uart_ports[port->line].ops = &siu_uart_ops; in vr41xx_siu_early_setup()
856 struct uart_port *port; in siu_probe() local
869 port = &siu_uart_ports[i]; in siu_probe()
870 port->ops = &siu_uart_ops; in siu_probe()
871 port->dev = &dev->dev; in siu_probe()
873 retval = uart_add_one_port(&siu_uart_driver, port); in siu_probe()
875 port->dev = NULL; in siu_probe()
890 struct uart_port *port; in siu_remove() local
894 port = &siu_uart_ports[i]; in siu_remove()
895 if (port->dev == &dev->dev) { in siu_remove()
896 uart_remove_one_port(&siu_uart_driver, port); in siu_remove()
897 port->dev = NULL; in siu_remove()
908 struct uart_port *port; in siu_suspend() local
912 port = &siu_uart_ports[i]; in siu_suspend()
913 if ((port->type == PORT_VR41XX_SIU || in siu_suspend()
914 port->type == PORT_VR41XX_DSIU) && port->dev == &dev->dev) in siu_suspend()
915 uart_suspend_port(&siu_uart_driver, port); in siu_suspend()
924 struct uart_port *port; in siu_resume() local
928 port = &siu_uart_ports[i]; in siu_resume()
929 if ((port->type == PORT_VR41XX_SIU || in siu_resume()
930 port->type == PORT_VR41XX_DSIU) && port->dev == &dev->dev) in siu_resume()
931 uart_resume_port(&siu_uart_driver, port); in siu_resume()