• Home
  • Raw
  • Download

Lines Matching +full:port +full:- +full:1

1 // SPDX-License-Identifier: GPL-2.0
35 #define CON_BREAK ((long)-1)
36 #define CON_HUP ((long)-2)
46 static void transmit_chars_putchar(struct uart_port *port, struct circ_buf *xmit) in transmit_chars_putchar() argument
49 long status = sun4v_con_putchar(xmit->buf[xmit->tail]); in transmit_chars_putchar()
54 xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); in transmit_chars_putchar()
55 port->icount.tx++; in transmit_chars_putchar()
59 static void transmit_chars_write(struct uart_port *port, struct circ_buf *xmit) in transmit_chars_write() argument
62 unsigned long ra = __pa(xmit->buf + xmit->tail); in transmit_chars_write()
65 len = CIRC_CNT_TO_END(xmit->head, xmit->tail, in transmit_chars_write()
70 xmit->tail = (xmit->tail + sent) & (UART_XMIT_SIZE - 1); in transmit_chars_write()
71 port->icount.tx += sent; in transmit_chars_write()
75 static int receive_chars_getchar(struct uart_port *port) in receive_chars_getchar() argument
80 while (limit-- > 0) { in receive_chars_getchar()
88 if (uart_handle_break(port)) in receive_chars_getchar()
90 saw_console_brk = 1; in receive_chars_getchar()
95 hung_up = 1; in receive_chars_getchar()
96 uart_handle_dcd_change(port, 0); in receive_chars_getchar()
99 uart_handle_dcd_change(port, 1); in receive_chars_getchar()
102 if (port->state == NULL) { in receive_chars_getchar()
103 uart_handle_sysrq_char(port, c); in receive_chars_getchar()
107 port->icount.rx++; in receive_chars_getchar()
109 if (uart_handle_sysrq_char(port, c)) in receive_chars_getchar()
112 tty_insert_flip_char(&port->state->port, c, TTY_NORMAL); in receive_chars_getchar()
118 static int receive_chars_read(struct uart_port *port) in receive_chars_read() argument
123 while (limit-- > 0) { in receive_chars_read()
135 if (uart_handle_break(port)) in receive_chars_read()
137 saw_console_brk = 1; in receive_chars_read()
139 bytes_read = 1; in receive_chars_read()
141 hung_up = 1; in receive_chars_read()
142 uart_handle_dcd_change(port, 0); in receive_chars_read()
152 uart_handle_dcd_change(port, 1); in receive_chars_read()
155 if (port->sysrq != 0 && *con_read_page) { in receive_chars_read()
157 uart_handle_sysrq_char(port, con_read_page[i]); in receive_chars_read()
161 if (port->state == NULL) in receive_chars_read()
164 port->icount.rx += bytes_read; in receive_chars_read()
166 tty_insert_flip_string(&port->state->port, con_read_page, in receive_chars_read()
174 void (*transmit_chars)(struct uart_port *port, struct circ_buf *xmit);
175 int (*receive_chars)(struct uart_port *port);
190 static struct tty_port *receive_chars(struct uart_port *port) in receive_chars() argument
194 if (port->state != NULL) /* Unopened serial console */ in receive_chars()
195 tport = &port->state->port; in receive_chars()
197 if (sunhv_ops->receive_chars(port)) in receive_chars()
203 static void transmit_chars(struct uart_port *port) in transmit_chars() argument
207 if (!port->state) in transmit_chars()
210 xmit = &port->state->xmit; in transmit_chars()
211 if (uart_circ_empty(xmit) || uart_tx_stopped(port)) in transmit_chars()
214 sunhv_ops->transmit_chars(port, xmit); in transmit_chars()
217 uart_write_wakeup(port); in transmit_chars()
222 struct uart_port *port = dev_id; in sunhv_interrupt() local
226 spin_lock_irqsave(&port->lock, flags); in sunhv_interrupt()
227 tport = receive_chars(port); in sunhv_interrupt()
228 transmit_chars(port); in sunhv_interrupt()
229 spin_unlock_irqrestore(&port->lock, flags); in sunhv_interrupt()
237 /* port->lock is not held. */
238 static unsigned int sunhv_tx_empty(struct uart_port *port) in sunhv_tx_empty() argument
241 * is non-empty or there is an x_char pending, our caller in sunhv_tx_empty()
247 /* port->lock held by caller. */
248 static void sunhv_set_mctrl(struct uart_port *port, unsigned int mctrl) in sunhv_set_mctrl() argument
253 /* port->lock is held by caller and interrupts are disabled. */
254 static unsigned int sunhv_get_mctrl(struct uart_port *port) in sunhv_get_mctrl() argument
259 /* port->lock held by caller. */
260 static void sunhv_stop_tx(struct uart_port *port) in sunhv_stop_tx() argument
265 /* port->lock held by caller. */
266 static void sunhv_start_tx(struct uart_port *port) in sunhv_start_tx() argument
268 transmit_chars(port); in sunhv_start_tx()
271 /* port->lock is not held. */
272 static void sunhv_send_xchar(struct uart_port *port, char ch) in sunhv_send_xchar() argument
280 spin_lock_irqsave(&port->lock, flags); in sunhv_send_xchar()
282 while (limit-- > 0) { in sunhv_send_xchar()
286 udelay(1); in sunhv_send_xchar()
289 spin_unlock_irqrestore(&port->lock, flags); in sunhv_send_xchar()
292 /* port->lock held by caller. */
293 static void sunhv_stop_rx(struct uart_port *port) in sunhv_stop_rx() argument
297 /* port->lock is not held. */
298 static void sunhv_break_ctl(struct uart_port *port, int break_state) in sunhv_break_ctl() argument
304 spin_lock_irqsave(&port->lock, flags); in sunhv_break_ctl()
306 while (limit-- > 0) { in sunhv_break_ctl()
310 udelay(1); in sunhv_break_ctl()
313 spin_unlock_irqrestore(&port->lock, flags); in sunhv_break_ctl()
317 /* port->lock is not held. */
318 static int sunhv_startup(struct uart_port *port) in sunhv_startup() argument
323 /* port->lock is not held. */
324 static void sunhv_shutdown(struct uart_port *port) in sunhv_shutdown() argument
328 /* port->lock is not held. */
329 static void sunhv_set_termios(struct uart_port *port, struct ktermios *termios, in sunhv_set_termios() argument
332 unsigned int baud = uart_get_baud_rate(port, termios, old, 0, 4000000); in sunhv_set_termios()
333 unsigned int quot = uart_get_divisor(port, baud); in sunhv_set_termios()
337 spin_lock_irqsave(&port->lock, flags); in sunhv_set_termios()
339 iflag = termios->c_iflag; in sunhv_set_termios()
340 cflag = termios->c_cflag; in sunhv_set_termios()
342 port->ignore_status_mask = 0; in sunhv_set_termios()
344 port->ignore_status_mask |= IGNORE_BREAK; in sunhv_set_termios()
346 port->ignore_status_mask |= IGNORE_ALL; in sunhv_set_termios()
349 uart_update_timeout(port, cflag, in sunhv_set_termios()
350 (port->uartclk / (16 * quot))); in sunhv_set_termios()
352 spin_unlock_irqrestore(&port->lock, flags); in sunhv_set_termios()
355 static const char *sunhv_type(struct uart_port *port) in sunhv_type() argument
360 static void sunhv_release_port(struct uart_port *port) in sunhv_release_port() argument
364 static int sunhv_request_port(struct uart_port *port) in sunhv_request_port() argument
369 static void sunhv_config_port(struct uart_port *port, int flags) in sunhv_config_port() argument
373 static int sunhv_verify_port(struct uart_port *port, struct serial_struct *ser) in sunhv_verify_port() argument
375 return -EINVAL; in sunhv_verify_port()
409 irq_force_affinity(sunhv_port->irq, cpumask_of(cpu)); in sunhv_migrate_hvcons_irq()
424 while (n--) { in fill_con_write_page()
429 left--; in fill_con_write_page()
430 } else if (left < 1) in fill_con_write_page()
433 left--; in fill_con_write_page()
435 *page_bytes = p - con_write_page; in fill_con_write_page()
436 return s - orig_s; in fill_con_write_page()
441 struct uart_port *port = sunhv_port; in sunhv_console_write_paged() local
443 int locked = 1; in sunhv_console_write_paged()
445 if (port->sysrq || oops_in_progress) in sunhv_console_write_paged()
446 locked = spin_trylock_irqsave(&port->lock, flags); in sunhv_console_write_paged()
448 spin_lock_irqsave(&port->lock, flags); in sunhv_console_write_paged()
456 n -= cpy; in sunhv_console_write_paged()
462 while (limit--) { in sunhv_console_write_paged()
469 udelay(1); in sunhv_console_write_paged()
473 page_bytes -= written; in sunhv_console_write_paged()
479 spin_unlock_irqrestore(&port->lock, flags); in sunhv_console_write_paged()
482 static inline void sunhv_console_putchar(struct uart_port *port, char c) in sunhv_console_putchar() argument
486 while (limit-- > 0) { in sunhv_console_putchar()
490 udelay(1); in sunhv_console_putchar()
496 struct uart_port *port = sunhv_port; in sunhv_console_write_bychar() local
498 int i, locked = 1; in sunhv_console_write_bychar()
500 if (port->sysrq || oops_in_progress) in sunhv_console_write_bychar()
501 locked = spin_trylock_irqsave(&port->lock, flags); in sunhv_console_write_bychar()
503 spin_lock_irqsave(&port->lock, flags); in sunhv_console_write_bychar()
507 sunhv_console_putchar(port, '\r'); in sunhv_console_write_bychar()
508 sunhv_console_putchar(port, *s++); in sunhv_console_write_bychar()
512 spin_unlock_irqrestore(&port->lock, flags); in sunhv_console_write_bychar()
520 .index = -1,
526 struct uart_port *port; in hv_probe() local
530 if (op->archdata.irqs[0] == 0xffffffff) in hv_probe()
531 return -ENODEV; in hv_probe()
533 port = kzalloc(sizeof(struct uart_port), GFP_KERNEL); in hv_probe()
534 if (unlikely(!port)) in hv_probe()
535 return -ENOMEM; in hv_probe()
537 minor = 1; in hv_probe()
538 if (sun4v_hvapi_register(HV_GRP_CORE, 1, &minor) == 0 && in hv_probe()
539 minor >= 1) { in hv_probe()
540 err = -ENOMEM; in hv_probe()
553 sunhv_port = port; in hv_probe()
555 port->line = 0; in hv_probe()
556 port->ops = &sunhv_pops; in hv_probe()
557 port->type = PORT_SUNHV; in hv_probe()
558 port->uartclk = ( 29491200 / 16 ); /* arbitrary */ in hv_probe()
560 port->membase = (unsigned char __iomem *) __pa(port); in hv_probe()
562 port->irq = op->archdata.irqs[0]; in hv_probe()
564 port->dev = &op->dev; in hv_probe()
566 err = sunserial_register_minors(&sunhv_reg, 1); in hv_probe()
570 sunserial_console_match(&sunhv_console, op->dev.of_node, in hv_probe()
571 &sunhv_reg, port->line, false); in hv_probe()
573 err = uart_add_one_port(&sunhv_reg, port); in hv_probe()
577 err = request_irq(port->irq, sunhv_interrupt, 0, "hvcons", port); in hv_probe()
581 platform_set_drvdata(op, port); in hv_probe()
586 uart_remove_one_port(&sunhv_reg, port); in hv_probe()
589 sunserial_unregister_minors(&sunhv_reg, 1); in hv_probe()
598 kfree(port); in hv_probe()
605 struct uart_port *port = platform_get_drvdata(dev); in hv_remove() local
607 free_irq(port->irq, port); in hv_remove()
609 uart_remove_one_port(&sunhv_reg, port); in hv_remove()
611 sunserial_unregister_minors(&sunhv_reg, 1); in hv_remove()
614 kfree(port); in hv_remove()
627 .compatible = "SUNW,sun4v-console",
644 return -ENODEV; in sunhv_init()