Lines Matching refs:port

88 	struct uart_port	port;  member
109 offset <<= up->port.regshift; in serial_in()
111 switch (up->port.iotype) { in serial_in()
113 outb(up->port.hub6 - 1 + offset, up->port.iobase); in serial_in()
114 return inb(up->port.iobase + 1); in serial_in()
117 return readb(up->port.membase + offset); in serial_in()
120 return inb(up->port.iobase + offset); in serial_in()
138 offset <<= up->port.regshift; in serial_out()
140 switch (up->port.iotype) { in serial_out()
142 outb(up->port.hub6 - 1 + offset, up->port.iobase); in serial_out()
143 outb(value, up->port.iobase + 1); in serial_out()
147 writeb(value, up->port.membase + offset); in serial_out()
151 outb(value, up->port.iobase + offset); in serial_out()
208 up->port.uartclk = SERIAL_RSA_BAUD_BASE * 16; in __enable_rsa()
215 if (up->port.type == PORT_RSA) { in enable_rsa()
216 if (up->port.uartclk != SERIAL_RSA_BAUD_BASE * 16) { in enable_rsa()
217 spin_lock_irq(&up->port.lock); in enable_rsa()
219 spin_unlock_irq(&up->port.lock); in enable_rsa()
221 if (up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) in enable_rsa()
237 if (up->port.type == PORT_RSA && in disable_rsa()
238 up->port.uartclk == SERIAL_RSA_BAUD_BASE * 16) { in disable_rsa()
239 spin_lock_irq(&up->port.lock); in disable_rsa()
251 up->port.uartclk = SERIAL_RSA_BAUD_BASE_LO * 16; in disable_rsa()
252 spin_unlock_irq(&up->port.lock); in disable_rsa()
265 static void sunsu_stop_tx(struct uart_port *port) in sunsu_stop_tx() argument
268 container_of(port, struct uart_sunsu_port, port); in sunsu_stop_tx()
275 if (up->port.type == PORT_16C950) { in sunsu_stop_tx()
281 static void sunsu_start_tx(struct uart_port *port) in sunsu_start_tx() argument
284 container_of(port, struct uart_sunsu_port, port); in sunsu_start_tx()
294 if (up->port.type == PORT_16C950 && up->acr & UART_ACR_TXDIS) { in sunsu_start_tx()
300 static void sunsu_stop_rx(struct uart_port *port) in sunsu_stop_rx() argument
303 container_of(port, struct uart_sunsu_port, port); in sunsu_stop_rx()
306 up->port.read_status_mask &= ~UART_LSR_DR; in sunsu_stop_rx()
310 static void sunsu_enable_ms(struct uart_port *port) in sunsu_enable_ms() argument
313 container_of(port, struct uart_sunsu_port, port); in sunsu_enable_ms()
316 spin_lock_irqsave(&up->port.lock, flags); in sunsu_enable_ms()
319 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_enable_ms()
325 struct tty_port *port = &up->port.state->port; in receive_chars() local
333 up->port.icount.rx++; in receive_chars()
342 up->port.icount.brk++; in receive_chars()
343 if (up->port.cons != NULL && in receive_chars()
344 up->port.line == up->port.cons->index) in receive_chars()
352 if (uart_handle_break(&up->port)) in receive_chars()
355 up->port.icount.parity++; in receive_chars()
357 up->port.icount.frame++; in receive_chars()
359 up->port.icount.overrun++; in receive_chars()
364 *status &= up->port.read_status_mask; in receive_chars()
366 if (up->port.cons != NULL && in receive_chars()
367 up->port.line == up->port.cons->index) { in receive_chars()
380 if (uart_handle_sysrq_char(&up->port, ch)) in receive_chars()
382 if ((*status & up->port.ignore_status_mask) == 0) in receive_chars()
383 tty_insert_flip_char(port, ch, flag); in receive_chars()
390 tty_insert_flip_char(port, 0, TTY_OVERRUN); in receive_chars()
401 struct circ_buf *xmit = &up->port.state->xmit; in transmit_chars()
404 if (up->port.x_char) { in transmit_chars()
405 serial_outp(up, UART_TX, up->port.x_char); in transmit_chars()
406 up->port.icount.tx++; in transmit_chars()
407 up->port.x_char = 0; in transmit_chars()
410 if (uart_tx_stopped(&up->port)) { in transmit_chars()
411 sunsu_stop_tx(&up->port); in transmit_chars()
419 count = up->port.fifosize; in transmit_chars()
423 up->port.icount.tx++; in transmit_chars()
429 uart_write_wakeup(&up->port); in transmit_chars()
445 up->port.icount.rng++; in check_modem_status()
447 up->port.icount.dsr++; in check_modem_status()
449 uart_handle_dcd_change(&up->port, status & UART_MSR_DCD); in check_modem_status()
451 uart_handle_cts_change(&up->port, status & UART_MSR_CTS); in check_modem_status()
453 wake_up_interruptible(&up->port.state->port.delta_msr_wait); in check_modem_status()
462 spin_lock_irqsave(&up->port.lock, flags); in sunsu_serial_interrupt()
472 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_serial_interrupt()
474 tty_flip_buffer_push(&up->port.state->port); in sunsu_serial_interrupt()
476 spin_lock_irqsave(&up->port.lock, flags); in sunsu_serial_interrupt()
480 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_serial_interrupt()
488 sunsu_change_speed(struct uart_port *port, unsigned int cflag,
499 quot = up->port.uartclk / (16 * new_baud); in sunsu_change_mouse_baud()
501 sunsu_change_speed(&up->port, up->cflag, 0, quot); in sunsu_change_mouse_baud()
548 static unsigned int sunsu_tx_empty(struct uart_port *port) in sunsu_tx_empty() argument
551 container_of(port, struct uart_sunsu_port, port); in sunsu_tx_empty()
555 spin_lock_irqsave(&up->port.lock, flags); in sunsu_tx_empty()
557 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_tx_empty()
562 static unsigned int sunsu_get_mctrl(struct uart_port *port) in sunsu_get_mctrl() argument
565 container_of(port, struct uart_sunsu_port, port); in sunsu_get_mctrl()
583 static void sunsu_set_mctrl(struct uart_port *port, unsigned int mctrl) in sunsu_set_mctrl() argument
586 container_of(port, struct uart_sunsu_port, port); in sunsu_set_mctrl()
603 static void sunsu_break_ctl(struct uart_port *port, int break_state) in sunsu_break_ctl() argument
606 container_of(port, struct uart_sunsu_port, port); in sunsu_break_ctl()
609 spin_lock_irqsave(&up->port.lock, flags); in sunsu_break_ctl()
615 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_break_ctl()
618 static int sunsu_startup(struct uart_port *port) in sunsu_startup() argument
621 container_of(port, struct uart_sunsu_port, port); in sunsu_startup()
625 if (up->port.type == PORT_16C950) { in sunsu_startup()
650 if (uart_config[up->port.type].flags & UART_CLEAR_FIFO) { in sunsu_startup()
670 if (!(up->port.flags & UPF_BUGGY_UART) && in sunsu_startup()
672 printk("ttyS%d: LSR safety check engaged!\n", up->port.line); in sunsu_startup()
677 retval = request_irq(up->port.irq, sunsu_kbd_ms_interrupt, in sunsu_startup()
680 retval = request_irq(up->port.irq, sunsu_serial_interrupt, in sunsu_startup()
684 printk("su: Cannot register IRQ %d\n", up->port.irq); in sunsu_startup()
693 spin_lock_irqsave(&up->port.lock, flags); in sunsu_startup()
695 up->port.mctrl |= TIOCM_OUT2; in sunsu_startup()
697 sunsu_set_mctrl(&up->port, up->port.mctrl); in sunsu_startup()
698 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_startup()
708 if (up->port.flags & UPF_FOURPORT) { in sunsu_startup()
713 icp = (up->port.iobase & 0xfe0) | 0x01f; in sunsu_startup()
729 static void sunsu_shutdown(struct uart_port *port) in sunsu_shutdown() argument
732 container_of(port, struct uart_sunsu_port, port); in sunsu_shutdown()
741 spin_lock_irqsave(&up->port.lock, flags); in sunsu_shutdown()
742 if (up->port.flags & UPF_FOURPORT) { in sunsu_shutdown()
744 inb((up->port.iobase & 0xfe0) | 0x1f); in sunsu_shutdown()
745 up->port.mctrl |= TIOCM_OUT1; in sunsu_shutdown()
747 up->port.mctrl &= ~TIOCM_OUT2; in sunsu_shutdown()
749 sunsu_set_mctrl(&up->port, up->port.mctrl); in sunsu_shutdown()
750 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_shutdown()
773 free_irq(up->port.irq, up); in sunsu_shutdown()
777 sunsu_change_speed(struct uart_port *port, unsigned int cflag, in sunsu_change_speed() argument
781 container_of(port, struct uart_sunsu_port, port); in sunsu_change_speed()
817 if ((quot & 0xff) == 0 && up->port.type == PORT_16C950 && in sunsu_change_speed()
821 if (uart_config[up->port.type].flags & UART_USE_FIFO) { in sunsu_change_speed()
822 if ((up->port.uartclk / quot) < (2400 * 16)) in sunsu_change_speed()
825 else if (up->port.type == PORT_RSA) in sunsu_change_speed()
831 if (up->port.type == PORT_16750) in sunsu_change_speed()
838 spin_lock_irqsave(&up->port.lock, flags); in sunsu_change_speed()
843 uart_update_timeout(port, cflag, (port->uartclk / (16 * quot))); in sunsu_change_speed()
845 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; in sunsu_change_speed()
847 up->port.read_status_mask |= UART_LSR_FE | UART_LSR_PE; in sunsu_change_speed()
849 up->port.read_status_mask |= UART_LSR_BI; in sunsu_change_speed()
854 up->port.ignore_status_mask = 0; in sunsu_change_speed()
856 up->port.ignore_status_mask |= UART_LSR_PE | UART_LSR_FE; in sunsu_change_speed()
858 up->port.ignore_status_mask |= UART_LSR_BI; in sunsu_change_speed()
864 up->port.ignore_status_mask |= UART_LSR_OE; in sunsu_change_speed()
871 up->port.ignore_status_mask |= UART_LSR_DR; in sunsu_change_speed()
877 if (UART_ENABLE_MS(&up->port, cflag)) in sunsu_change_speed()
882 if (uart_config[up->port.type].flags & UART_STARTECH) { in sunsu_change_speed()
889 if (up->port.type == PORT_16750) in sunsu_change_speed()
893 if (up->port.type != PORT_16750) { in sunsu_change_speed()
903 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_change_speed()
907 sunsu_set_termios(struct uart_port *port, struct ktermios *termios, in sunsu_set_termios() argument
915 baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); in sunsu_set_termios()
916 quot = uart_get_divisor(port, baud); in sunsu_set_termios()
918 sunsu_change_speed(port, termios->c_cflag, termios->c_iflag, quot); in sunsu_set_termios()
921 static void sunsu_release_port(struct uart_port *port) in sunsu_release_port() argument
925 static int sunsu_request_port(struct uart_port *port) in sunsu_request_port() argument
930 static void sunsu_config_port(struct uart_port *port, int flags) in sunsu_config_port() argument
933 container_of(port, struct uart_sunsu_port, port); in sunsu_config_port()
941 port->type = up->type_probed; /* XXX */ in sunsu_config_port()
946 sunsu_verify_port(struct uart_port *port, struct serial_struct *ser) in sunsu_verify_port() argument
952 sunsu_type(struct uart_port *port) in sunsu_type() argument
954 int type = port->type; in sunsu_type()
1048 up->port.iotype = UPIO_MEM; in sunsu_autoconfig()
1050 spin_lock_irqsave(&up->port.lock, flags); in sunsu_autoconfig()
1052 if (!(up->port.flags & UPF_BUGGY_UART)) { in sunsu_autoconfig()
1090 if (!(up->port.flags & UPF_SKIP_TEST)) { in sunsu_autoconfig()
1104 up->port.type = PORT_16450; in sunsu_autoconfig()
1107 up->port.type = PORT_UNKNOWN; in sunsu_autoconfig()
1110 up->port.type = PORT_16550; in sunsu_autoconfig()
1113 up->port.type = PORT_16550A; in sunsu_autoconfig()
1116 if (up->port.type == PORT_16550A) { in sunsu_autoconfig()
1120 up->port.type = PORT_16650; in sunsu_autoconfig()
1124 up->port.type = PORT_16650V2; in sunsu_autoconfig()
1127 if (up->port.type == PORT_16550A) { in sunsu_autoconfig()
1146 up->port.type = PORT_16750; in sunsu_autoconfig()
1151 if (up->port.type == PORT_16450) { in sunsu_autoconfig()
1160 up->port.type = PORT_8250; in sunsu_autoconfig()
1163 up->port.fifosize = uart_config[up->port.type].dfl_xmit_fifo_size; in sunsu_autoconfig()
1165 if (up->port.type == PORT_UNKNOWN) in sunsu_autoconfig()
1167 up->type_probed = up->port.type; /* XXX */ in sunsu_autoconfig()
1173 if (up->port.type == PORT_RSA) in sunsu_autoconfig()
1185 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_autoconfig()
1209 quot = up->port.uartclk / (16 * baud); in sunsu_kbd_ms_init()
1212 if (up->port.type == PORT_UNKNOWN) in sunsu_kbd_ms_init()
1216 up->port.dev->of_node->full_name, in sunsu_kbd_ms_init()
1218 (unsigned long long) up->port.mapbase, in sunsu_kbd_ms_init()
1219 up->port.irq); in sunsu_kbd_ms_init()
1235 (!(up->port.line & 1) ? "su/serio0" : "su/serio1"), in sunsu_kbd_ms_init()
1241 serio->dev.parent = up->port.dev; in sunsu_kbd_ms_init()
1246 sunsu_change_speed(&up->port, up->cflag, 0, quot); in sunsu_kbd_ms_init()
1248 sunsu_startup(&up->port); in sunsu_kbd_ms_init()
1282 if (up->port.flags & UPF_CONS_FLOW) { in wait_for_xmitr()
1290 static void sunsu_console_putchar(struct uart_port *port, int ch) in sunsu_console_putchar() argument
1293 container_of(port, struct uart_sunsu_port, port); in sunsu_console_putchar()
1311 if (up->port.sysrq || oops_in_progress) in sunsu_console_write()
1312 locked = spin_trylock_irqsave(&up->port.lock, flags); in sunsu_console_write()
1314 spin_lock_irqsave(&up->port.lock, flags); in sunsu_console_write()
1322 uart_console_write(&up->port, s, count, sunsu_console_putchar); in sunsu_console_write()
1332 spin_unlock_irqrestore(&up->port.lock, flags); in sunsu_console_write()
1345 struct uart_port *port; in sunsu_console_setup() local
1352 port = &sunsu_ports[co->index].port; in sunsu_console_setup()
1357 spin_lock_init(&port->lock); in sunsu_console_setup()
1360 sunserial_console_termios(co, port->dev->of_node); in sunsu_console_setup()
1364 port->mctrl |= TIOCM_DTR; in sunsu_console_setup()
1365 port->ops->set_termios(port, &termios, &dummy); in sunsu_console_setup()
1434 up->port.line = nr_inst; in su_probe()
1436 spin_lock_init(&up->port.lock); in su_probe()
1441 up->port.mapbase = rp->start; in su_probe()
1443 up->port.membase = of_ioremap(rp, 0, up->reg_size, "su"); in su_probe()
1444 if (!up->port.membase) { in su_probe()
1450 up->port.irq = op->archdata.irqs[0]; in su_probe()
1452 up->port.dev = &op->dev; in su_probe()
1454 up->port.type = PORT_UNKNOWN; in su_probe()
1455 up->port.uartclk = (SU_BASE_BAUD * 16); in su_probe()
1462 up->port.membase, up->reg_size); in su_probe()
1473 up->port.flags |= UPF_BOOT_AUTOCONF; in su_probe()
1478 if (up->port.type == PORT_UNKNOWN) in su_probe()
1481 up->port.ops = &sunsu_pops; in su_probe()
1489 &sunsu_reg, up->port.line, in su_probe()
1491 err = uart_add_one_port(&sunsu_reg, &up->port); in su_probe()
1502 of_iounmap(&op->resource[0], up->port.membase, up->reg_size); in su_probe()
1519 } else if (up->port.type != PORT_UNKNOWN) in su_remove()
1520 uart_remove_one_port(&sunsu_reg, &up->port); in su_remove()
1522 if (up->port.membase) in su_remove()
1523 of_iounmap(&op->resource[0], up->port.membase, up->reg_size); in su_remove()