Lines Matching refs:port
35 struct uart_port port; member
59 static void nwpserial_console_putchar(struct uart_port *port, int c) in nwpserial_console_putchar() argument
62 up = container_of(port, struct nwpserial_port, port); in nwpserial_console_putchar()
66 up->port.icount.tx++; in nwpserial_console_putchar()
77 locked = spin_trylock_irqsave(&up->port.lock, flags); in nwpserial_console_write()
79 spin_lock_irqsave(&up->port.lock, flags); in nwpserial_console_write()
85 uart_console_write(&up->port, s, count, nwpserial_console_putchar); in nwpserial_console_write()
95 spin_unlock_irqrestore(&up->port.lock, flags); in nwpserial_console_write()
114 static int nwpserial_request_port(struct uart_port *port) in nwpserial_request_port() argument
119 static void nwpserial_release_port(struct uart_port *port) in nwpserial_release_port() argument
124 static void nwpserial_config_port(struct uart_port *port, int flags) in nwpserial_config_port() argument
126 port->type = PORT_NWPSERIAL; in nwpserial_config_port()
132 struct tty_port *port = &up->port.state->port; in nwpserial_interrupt() local
137 spin_lock(&up->port.lock); in nwpserial_interrupt()
147 up->port.icount.rx++; in nwpserial_interrupt()
149 if (up->port.ignore_status_mask != NWPSERIAL_STATUS_RXVALID) in nwpserial_interrupt()
150 tty_insert_flip_char(port, ch, TTY_NORMAL); in nwpserial_interrupt()
153 spin_unlock(&up->port.lock); in nwpserial_interrupt()
154 tty_flip_buffer_push(port); in nwpserial_interrupt()
155 spin_lock(&up->port.lock); in nwpserial_interrupt()
162 spin_unlock(&up->port.lock); in nwpserial_interrupt()
166 static int nwpserial_startup(struct uart_port *port) in nwpserial_startup() argument
171 up = container_of(port, struct nwpserial_port, port); in nwpserial_startup()
178 err = request_irq(up->port.irq, nwpserial_interrupt, in nwpserial_startup()
188 up->port.ignore_status_mask &= ~NWPSERIAL_STATUS_RXVALID; in nwpserial_startup()
193 static void nwpserial_shutdown(struct uart_port *port) in nwpserial_shutdown() argument
196 up = container_of(port, struct nwpserial_port, port); in nwpserial_shutdown()
199 up->port.ignore_status_mask |= NWPSERIAL_STATUS_RXVALID; in nwpserial_shutdown()
206 free_irq(up->port.irq, up); in nwpserial_shutdown()
209 static int nwpserial_verify_port(struct uart_port *port, in nwpserial_verify_port() argument
215 static const char *nwpserial_type(struct uart_port *port) in nwpserial_type() argument
217 return port->type == PORT_NWPSERIAL ? "nwpserial" : NULL; in nwpserial_type()
220 static void nwpserial_set_termios(struct uart_port *port, in nwpserial_set_termios() argument
224 up = container_of(port, struct nwpserial_port, port); in nwpserial_set_termios()
226 up->port.read_status_mask = NWPSERIAL_STATUS_RXVALID in nwpserial_set_termios()
229 up->port.ignore_status_mask = 0; in nwpserial_set_termios()
232 up->port.ignore_status_mask |= NWPSERIAL_STATUS_RXVALID; in nwpserial_set_termios()
239 static void nwpserial_break_ctl(struct uart_port *port, int ctl) in nwpserial_break_ctl() argument
244 static void nwpserial_stop_rx(struct uart_port *port) in nwpserial_stop_rx() argument
247 up = container_of(port, struct nwpserial_port, port); in nwpserial_stop_rx()
249 up->port.ignore_status_mask = NWPSERIAL_STATUS_RXVALID; in nwpserial_stop_rx()
257 up->port.icount.tx++; in nwpserial_putchar()
260 static void nwpserial_start_tx(struct uart_port *port) in nwpserial_start_tx() argument
264 up = container_of(port, struct nwpserial_port, port); in nwpserial_start_tx()
265 xmit = &up->port.state->xmit; in nwpserial_start_tx()
267 if (port->x_char) { in nwpserial_start_tx()
268 nwpserial_putchar(up, up->port.x_char); in nwpserial_start_tx()
269 port->x_char = 0; in nwpserial_start_tx()
272 while (!(uart_circ_empty(xmit) || uart_tx_stopped(&up->port))) { in nwpserial_start_tx()
278 static unsigned int nwpserial_get_mctrl(struct uart_port *port) in nwpserial_get_mctrl() argument
283 static void nwpserial_set_mctrl(struct uart_port *port, unsigned int mctrl) in nwpserial_set_mctrl() argument
288 static void nwpserial_stop_tx(struct uart_port *port) in nwpserial_stop_tx() argument
293 static unsigned int nwpserial_tx_empty(struct uart_port *port) in nwpserial_tx_empty() argument
298 up = container_of(port, struct nwpserial_port, port); in nwpserial_tx_empty()
300 spin_lock_irqsave(&up->port.lock, flags); in nwpserial_tx_empty()
302 spin_unlock_irqrestore(&up->port.lock, flags); in nwpserial_tx_empty()
335 int nwpserial_register_port(struct uart_port *port) in nwpserial_register_port() argument
347 dn = port->dev->of_node; in nwpserial_register_port()
356 if (nwpserial_ports[i].port.iobase == dcr_base) { in nwpserial_register_port()
364 if (nwpserial_ports[i].port.type == PORT_UNKNOWN && in nwpserial_register_port()
365 nwpserial_ports[i].port.iobase == 0) { in nwpserial_register_port()
379 up->port.membase = port->membase; in nwpserial_register_port()
380 up->port.irq = port->irq; in nwpserial_register_port()
381 up->port.uartclk = port->uartclk; in nwpserial_register_port()
382 up->port.fifosize = port->fifosize; in nwpserial_register_port()
383 up->port.regshift = port->regshift; in nwpserial_register_port()
384 up->port.iotype = port->iotype; in nwpserial_register_port()
385 up->port.flags = port->flags; in nwpserial_register_port()
386 up->port.mapbase = port->mapbase; in nwpserial_register_port()
387 up->port.private_data = port->private_data; in nwpserial_register_port()
389 if (port->dev) in nwpserial_register_port()
390 up->port.dev = port->dev; in nwpserial_register_port()
392 if (up->port.iobase != dcr_base) { in nwpserial_register_port()
393 up->port.ops = &nwpserial_pops; in nwpserial_register_port()
394 up->port.fifosize = 16; in nwpserial_register_port()
396 spin_lock_init(&up->port.lock); in nwpserial_register_port()
398 up->port.iobase = dcr_base; in nwpserial_register_port()
408 ret = uart_add_one_port(&nwpserial_reg, &up->port); in nwpserial_register_port()
410 ret = up->port.line; in nwpserial_register_port()
423 uart_remove_one_port(&nwpserial_reg, &up->port); in nwpserial_unregister_port()
425 up->port.type = PORT_UNKNOWN; in nwpserial_unregister_port()
443 if (nwpserial_ports[i].port.type == PORT_UNKNOWN) { in nwpserial_console_init()
459 spin_lock_init(&up->port.lock); in nwpserial_console_init()
460 up->port.ops = &nwpserial_pops; in nwpserial_console_init()
461 up->port.type = PORT_NWPSERIAL; in nwpserial_console_init()
462 up->port.fifosize = 16; in nwpserial_console_init()
466 up->port.iobase = dcr_base; in nwpserial_console_init()