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
321 tty = port->state->port.tty; in receive_chars()
325 ch = siu_read(port, UART_RX); in receive_chars()
326 port->icount.rx++; in receive_chars()
330 lsr |= lsr_break_flag[port->line]; in receive_chars()
331 lsr_break_flag[port->line] = 0; in receive_chars()
337 port->icount.brk++; in receive_chars()
339 if (uart_handle_break(port)) in receive_chars()
344 port->icount.frame++; in receive_chars()
346 port->icount.parity++; in receive_chars()
348 port->icount.overrun++; in receive_chars()
350 lsr &= port->read_status_mask; in receive_chars()
359 if (uart_handle_sysrq_char(port, ch)) in receive_chars()
362 uart_insert_char(port, lsr, UART_LSR_OE, ch, flag); in receive_chars()
365 lsr = siu_read(port, UART_LSR); in receive_chars()
373 static inline void check_modem_status(struct uart_port *port) in check_modem_status() argument
377 msr = siu_read(port, UART_MSR); in check_modem_status()
381 uart_handle_dcd_change(port, msr & UART_MSR_DCD); in check_modem_status()
383 port->icount.rng++; in check_modem_status()
385 port->icount.dsr++; in check_modem_status()
387 uart_handle_cts_change(port, msr & UART_MSR_CTS); in check_modem_status()
389 wake_up_interruptible(&port->state->port.delta_msr_wait); in check_modem_status()
392 static inline void transmit_chars(struct uart_port *port) in transmit_chars() argument
397 xmit = &port->state->xmit; in transmit_chars()
399 if (port->x_char) { in transmit_chars()
400 siu_write(port, UART_TX, port->x_char); in transmit_chars()
401 port->icount.tx++; in transmit_chars()
402 port->x_char = 0; in transmit_chars()
406 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { in transmit_chars()
407 siu_stop_tx(port); in transmit_chars()
412 siu_write(port, UART_TX, xmit->buf[xmit->tail]); in transmit_chars()
414 port->icount.tx++; in transmit_chars()
420 uart_write_wakeup(port); in transmit_chars()
423 siu_stop_tx(port); in transmit_chars()
428 struct uart_port *port; in siu_interrupt() local
431 port = (struct uart_port *)dev_id; in siu_interrupt()
433 iir = siu_read(port, UART_IIR); in siu_interrupt()
437 lsr = siu_read(port, UART_LSR); in siu_interrupt()
439 receive_chars(port, &lsr); in siu_interrupt()
441 check_modem_status(port); in siu_interrupt()
444 transmit_chars(port); in siu_interrupt()
449 static int siu_startup(struct uart_port *port) in siu_startup() argument
453 if (port->membase == NULL) in siu_startup()
456 siu_clear_fifo(port); in siu_startup()
458 (void)siu_read(port, UART_LSR); in siu_startup()
459 (void)siu_read(port, UART_RX); in siu_startup()
460 (void)siu_read(port, UART_IIR); in siu_startup()
461 (void)siu_read(port, UART_MSR); in siu_startup()
463 if (siu_read(port, UART_LSR) == 0xff) in siu_startup()
466 retval = request_irq(port->irq, siu_interrupt, 0, siu_type_name(port), port); in siu_startup()
470 if (port->type == PORT_VR41XX_DSIU) in siu_startup()
473 siu_write(port, UART_LCR, UART_LCR_WLEN8); in siu_startup()
475 spin_lock_irq(&port->lock); in siu_startup()
476 siu_set_mctrl(port, port->mctrl); in siu_startup()
477 spin_unlock_irq(&port->lock); in siu_startup()
479 siu_write(port, UART_IER, UART_IER_RLSI | UART_IER_RDI); in siu_startup()
481 (void)siu_read(port, UART_LSR); in siu_startup()
482 (void)siu_read(port, UART_RX); in siu_startup()
483 (void)siu_read(port, UART_IIR); in siu_startup()
484 (void)siu_read(port, UART_MSR); in siu_startup()
489 static void siu_shutdown(struct uart_port *port) in siu_shutdown() argument
494 siu_write(port, UART_IER, 0); in siu_shutdown()
496 spin_lock_irqsave(&port->lock, flags); in siu_shutdown()
498 port->mctrl &= ~TIOCM_OUT2; in siu_shutdown()
499 siu_set_mctrl(port, port->mctrl); in siu_shutdown()
501 spin_unlock_irqrestore(&port->lock, flags); in siu_shutdown()
503 lcr = siu_read(port, UART_LCR); in siu_shutdown()
505 siu_write(port, UART_LCR, lcr); in siu_shutdown()
507 siu_clear_fifo(port); in siu_shutdown()
509 (void)siu_read(port, UART_RX); in siu_shutdown()
511 if (port->type == PORT_VR41XX_DSIU) in siu_shutdown()
514 free_irq(port->irq, port); in siu_shutdown()
517 static void siu_set_termios(struct uart_port *port, struct ktermios *new, in siu_set_termios() argument
550 baud = uart_get_baud_rate(port, new, old, 0, port->uartclk/16); in siu_set_termios()
551 quot = uart_get_divisor(port, baud); in siu_set_termios()
555 spin_lock_irqsave(&port->lock, flags); in siu_set_termios()
557 uart_update_timeout(port, c_cflag, baud); in siu_set_termios()
561 port->read_status_mask = UART_LSR_THRE | UART_LSR_OE | UART_LSR_DR; in siu_set_termios()
563 port->read_status_mask |= UART_LSR_FE | UART_LSR_PE; in siu_set_termios()
565 port->read_status_mask |= UART_LSR_BI; in siu_set_termios()
567 port->ignore_status_mask = 0; in siu_set_termios()
569 port->ignore_status_mask |= UART_LSR_FE | UART_LSR_PE; in siu_set_termios()
571 port->ignore_status_mask |= UART_LSR_BI; in siu_set_termios()
573 port->ignore_status_mask |= UART_LSR_OE; in siu_set_termios()
577 port->ignore_status_mask |= UART_LSR_DR; in siu_set_termios()
579 ier = siu_read(port, UART_IER); in siu_set_termios()
581 if (UART_ENABLE_MS(port, c_cflag)) in siu_set_termios()
583 siu_write(port, UART_IER, ier); in siu_set_termios()
585 siu_write(port, UART_LCR, lcr | UART_LCR_DLAB); in siu_set_termios()
587 siu_write(port, UART_DLL, (uint8_t)quot); in siu_set_termios()
588 siu_write(port, UART_DLM, (uint8_t)(quot >> 8)); in siu_set_termios()
590 siu_write(port, UART_LCR, lcr); in siu_set_termios()
592 siu_write(port, UART_FCR, fcr); in siu_set_termios()
594 siu_set_mctrl(port, port->mctrl); in siu_set_termios()
596 spin_unlock_irqrestore(&port->lock, flags); in siu_set_termios()
599 static void siu_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) in siu_pm() argument
603 switch (port->type) { in siu_pm()
613 switch (port->type) { in siu_pm()
625 static const char *siu_type(struct uart_port *port) in siu_type() argument
627 return siu_type_name(port); in siu_type()
630 static void siu_release_port(struct uart_port *port) in siu_release_port() argument
634 if (port->flags & UPF_IOREMAP) { in siu_release_port()
635 iounmap(port->membase); in siu_release_port()
636 port->membase = NULL; in siu_release_port()
639 size = siu_port_size(port); in siu_release_port()
640 release_mem_region(port->mapbase, size); in siu_release_port()
643 static int siu_request_port(struct uart_port *port) in siu_request_port() argument
648 size = siu_port_size(port); in siu_request_port()
649 res = request_mem_region(port->mapbase, size, siu_type_name(port)); in siu_request_port()
653 if (port->flags & UPF_IOREMAP) { in siu_request_port()
654 port->membase = ioremap(port->mapbase, size); in siu_request_port()
655 if (port->membase == NULL) { in siu_request_port()
664 static void siu_config_port(struct uart_port *port, int flags) in siu_config_port() argument
667 port->type = siu_check_type(port); in siu_config_port()
668 (void)siu_request_port(port); in siu_config_port()
672 static int siu_verify_port(struct uart_port *port, struct serial_struct *serial) in siu_verify_port() argument
674 if (port->type != PORT_VR41XX_SIU && port->type != PORT_VR41XX_DSIU) in siu_verify_port()
676 if (port->irq != serial->irq) in siu_verify_port()
678 if (port->iotype != serial->io_type) in siu_verify_port()
680 if (port->mapbase != (unsigned long)serial->iomem_base) in siu_verify_port()
708 struct uart_port *port; in siu_init_ports() local
716 port = siu_uart_ports; in siu_init_ports()
718 port->type = type[i]; in siu_init_ports()
719 if (port->type == PORT_UNKNOWN) in siu_init_ports()
721 port->irq = platform_get_irq(pdev, i); in siu_init_ports()
722 port->uartclk = SIU_BAUD_BASE * 16; in siu_init_ports()
723 port->fifosize = 16; in siu_init_ports()
724 port->regshift = 0; in siu_init_ports()
725 port->iotype = UPIO_MEM; in siu_init_ports()
726 port->flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF; in siu_init_ports()
727 port->line = i; in siu_init_ports()
729 port->mapbase = res->start; in siu_init_ports()
730 port++; in siu_init_ports()
740 static void wait_for_xmitr(struct uart_port *port) in wait_for_xmitr() argument
746 lsr = siu_read(port, UART_LSR); in wait_for_xmitr()
748 lsr_break_flag[port->line] = UART_LSR_BI; in wait_for_xmitr()
754 if (port->flags & UPF_CONS_FLOW) { in wait_for_xmitr()
758 msr = siu_read(port, UART_MSR); in wait_for_xmitr()
765 static void siu_console_putchar(struct uart_port *port, int ch) in siu_console_putchar() argument
767 wait_for_xmitr(port); in siu_console_putchar()
768 siu_write(port, UART_TX, ch); in siu_console_putchar()
773 struct uart_port *port; in siu_console_write() local
776 port = &siu_uart_ports[con->index]; in siu_console_write()
778 ier = siu_read(port, UART_IER); in siu_console_write()
779 siu_write(port, UART_IER, 0); in siu_console_write()
781 uart_console_write(port, s, count, siu_console_putchar); in siu_console_write()
783 wait_for_xmitr(port); in siu_console_write()
784 siu_write(port, UART_IER, ier); in siu_console_write()
789 struct uart_port *port; in siu_console_setup() local
798 port = &siu_uart_ports[con->index]; in siu_console_setup()
799 if (port->membase == NULL) { in siu_console_setup()
800 if (port->mapbase == 0) in siu_console_setup()
802 port->membase = ioremap(port->mapbase, siu_port_size(port)); in siu_console_setup()
805 if (port->type == PORT_VR41XX_SIU) in siu_console_setup()
811 return uart_set_options(port, con, baud, parity, bits, flow); in siu_console_setup()
828 struct uart_port *port; in siu_console_init() local
832 port = &siu_uart_ports[i]; in siu_console_init()
833 port->ops = &siu_uart_ops; in siu_console_init()
843 void __init vr41xx_siu_early_setup(struct uart_port *port) in vr41xx_siu_early_setup() argument
845 if (port->type == PORT_UNKNOWN) in vr41xx_siu_early_setup()
848 siu_uart_ports[port->line].line = port->line; in vr41xx_siu_early_setup()
849 siu_uart_ports[port->line].type = port->type; in vr41xx_siu_early_setup()
850 siu_uart_ports[port->line].uartclk = SIU_BAUD_BASE * 16; in vr41xx_siu_early_setup()
851 siu_uart_ports[port->line].mapbase = port->mapbase; in vr41xx_siu_early_setup()
852 siu_uart_ports[port->line].mapbase = port->mapbase; in vr41xx_siu_early_setup()
853 siu_uart_ports[port->line].ops = &siu_uart_ops; in vr41xx_siu_early_setup()
872 struct uart_port *port; in siu_probe() local
885 port = &siu_uart_ports[i]; in siu_probe()
886 port->ops = &siu_uart_ops; in siu_probe()
887 port->dev = &dev->dev; in siu_probe()
889 retval = uart_add_one_port(&siu_uart_driver, port); in siu_probe()
891 port->dev = NULL; in siu_probe()
906 struct uart_port *port; in siu_remove() local
910 port = &siu_uart_ports[i]; in siu_remove()
911 if (port->dev == &dev->dev) { in siu_remove()
912 uart_remove_one_port(&siu_uart_driver, port); in siu_remove()
913 port->dev = NULL; in siu_remove()
924 struct uart_port *port; in siu_suspend() local
928 port = &siu_uart_ports[i]; in siu_suspend()
929 if ((port->type == PORT_VR41XX_SIU || in siu_suspend()
930 port->type == PORT_VR41XX_DSIU) && port->dev == &dev->dev) in siu_suspend()
931 uart_suspend_port(&siu_uart_driver, port); in siu_suspend()
940 struct uart_port *port; in siu_resume() local
944 port = &siu_uart_ports[i]; in siu_resume()
945 if ((port->type == PORT_VR41XX_SIU || in siu_resume()
946 port->type == PORT_VR41XX_DSIU) && port->dev == &dev->dev) in siu_resume()
947 uart_resume_port(&siu_uart_driver, port); in siu_resume()