Lines Matching +full:termination +full:- +full:gpios

1 // SPDX-License-Identifier: GPL-2.0+
8 * Copyright (C) 2000-2001 Deep Blue Solutions Ltd.
43 * lockdep: port->lock is initialized in two places, but we
44 * want only one lock-class:
48 #define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)
62 return !!(uport->status & UPSTAT_DCD_ENABLE); in uart_dcd_enabled()
67 if (atomic_add_unless(&state->refcount, 1, 0)) in uart_port_ref()
68 return state->uart_port; in uart_port_ref()
74 if (atomic_dec_and_test(&uport->state->refcount)) in uart_port_deref()
75 wake_up(&uport->state->remove_wait); in uart_port_deref()
97 lockdep_assert_held(&state->port.mutex); in uart_port_check()
98 return state->uart_port; in uart_port_check()
102 * uart_write_wakeup - schedule write processing
110 * Locking: @port->lock should be held
114 struct uart_state *state = port->state; in uart_write_wakeup()
120 tty_port_tty_wakeup(&state->port); in uart_write_wakeup()
126 struct uart_state *state = tty->driver_data; in uart_stop()
132 port->ops->stop_tx(port); in uart_stop()
138 struct uart_port *port = state->uart_port; in __uart_start()
142 if (!port || port->flags & UPF_DEAD || uart_tx_stopped(port)) in __uart_start()
145 port_dev = port->port_dev; in __uart_start()
148 err = pm_runtime_get(&port_dev->dev); in __uart_start()
149 if (err < 0 && err != -EINPROGRESS) { in __uart_start()
150 pm_runtime_put_noidle(&port_dev->dev); in __uart_start()
159 if (!pm_runtime_enabled(port->dev) || pm_runtime_active(&port_dev->dev)) in __uart_start()
160 port->ops->start_tx(port); in __uart_start()
161 pm_runtime_mark_last_busy(&port_dev->dev); in __uart_start()
162 pm_runtime_put_autosuspend(&port_dev->dev); in __uart_start()
167 struct uart_state *state = tty->driver_data; in uart_start()
183 old = port->mctrl; in uart_update_mctrl()
184 port->mctrl = (old & ~clear) | set; in uart_update_mctrl()
185 if (old != port->mctrl && !(port->rs485.flags & SER_RS485_ENABLED)) in uart_update_mctrl()
186 port->ops->set_mctrl(port, port->mctrl); in uart_update_mctrl()
213 if (!tty || uport->type == PORT_UNKNOWN) in uart_change_line_settings()
216 termios = &tty->termios; in uart_change_line_settings()
217 uport->ops->set_termios(uport, termios, old_termios); in uart_change_line_settings()
223 if (termios->c_cflag & CRTSCTS) in uart_change_line_settings()
224 uport->status |= UPSTAT_CTS_ENABLE; in uart_change_line_settings()
226 uport->status &= ~UPSTAT_CTS_ENABLE; in uart_change_line_settings()
228 if (termios->c_cflag & CLOCAL) in uart_change_line_settings()
229 uport->status &= ~UPSTAT_DCD_ENABLE; in uart_change_line_settings()
231 uport->status |= UPSTAT_DCD_ENABLE; in uart_change_line_settings()
233 /* reset sw-assisted CTS flow control based on (possibly) new mode */ in uart_change_line_settings()
234 old_hw_stopped = uport->hw_stopped; in uart_change_line_settings()
235 uport->hw_stopped = uart_softcts_mode(uport) && in uart_change_line_settings()
236 !(uport->ops->get_mctrl(uport) & TIOCM_CTS); in uart_change_line_settings()
237 if (uport->hw_stopped != old_hw_stopped) { in uart_change_line_settings()
239 uport->ops->stop_tx(uport); in uart_change_line_settings()
259 return -ENOMEM; in uart_alloc_xmit_buf()
262 if (!state->port.xmit_buf) { in uart_alloc_xmit_buf()
263 state->port.xmit_buf = (unsigned char *)page; in uart_alloc_xmit_buf()
264 kfifo_init(&state->port.xmit_fifo, state->port.xmit_buf, in uart_alloc_xmit_buf()
293 xmit_buf = port->xmit_buf; in uart_free_xmit_buf()
294 port->xmit_buf = NULL; in uart_free_xmit_buf()
295 INIT_KFIFO(port->xmit_fifo); in uart_free_xmit_buf()
303 * will be serialised by the per-port mutex.
311 if (uport->type == PORT_UNKNOWN) in uart_port_startup()
319 retval = uart_alloc_xmit_buf(&state->port); in uart_port_startup()
323 retval = uport->ops->startup(uport); in uart_port_startup()
325 if (uart_console(uport) && uport->cons->cflag) { in uart_port_startup()
326 tty->termios.c_cflag = uport->cons->cflag; in uart_port_startup()
327 tty->termios.c_ispeed = uport->cons->ispeed; in uart_port_startup()
328 tty->termios.c_ospeed = uport->cons->ospeed; in uart_port_startup()
329 uport->cons->cflag = 0; in uart_port_startup()
330 uport->cons->ispeed = 0; in uart_port_startup()
331 uport->cons->ospeed = 0; in uart_port_startup()
360 struct tty_port *port = &state->port; in uart_startup()
369 set_bit(TTY_IO_ERROR, &tty->flags); in uart_startup()
376 return -EIO; in uart_startup()
386 * uart_shutdown are serialised by the per-port semaphore.
393 struct tty_port *port = &state->port; in uart_shutdown()
399 set_bit(TTY_IO_ERROR, &tty->flags); in uart_shutdown()
412 uport->cons->cflag = tty->termios.c_cflag; in uart_shutdown()
413 uport->cons->ispeed = tty->termios.c_ispeed; in uart_shutdown()
414 uport->cons->ospeed = tty->termios.c_ospeed; in uart_shutdown()
435 * uart_update_timeout - update per-port frame timing information
444 * Locking: caller is expected to take @port->lock
453 port->frame_time = (unsigned int)DIV64_U64_ROUND_UP(temp, baud); in uart_update_timeout()
458 * uart_get_baud_rate - return baud rate for a particular port
486 upf_t flags = port->flags & UPF_SPD_MASK; in uart_get_baud_rate()
531 termios->c_cflag &= ~CBAUD; in uart_get_baud_rate()
551 max - 1, max - 1); in uart_get_baud_rate()
559 * uart_get_divisor - return uart clock divisor
579 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) in uart_get_divisor()
580 quot = port->custom_divisor; in uart_get_divisor()
582 quot = DIV_ROUND_CLOSEST(port->uartclk, 16 * baud); in uart_get_divisor()
590 struct uart_state *state = tty->driver_data; in uart_put_char()
596 if (!state->port.xmit_buf) { in uart_put_char()
602 ret = kfifo_put(&state->port.xmit_fifo, c); in uart_put_char()
614 struct uart_state *state = tty->driver_data; in uart_write()
624 return -EL3HLT; in uart_write()
627 if (!state->port.xmit_buf) { in uart_write()
633 ret = kfifo_in(&state->port.xmit_fifo, buf, count); in uart_write()
642 struct uart_state *state = tty->driver_data; in uart_write_room()
648 ret = kfifo_avail(&state->port.xmit_fifo); in uart_write_room()
655 struct uart_state *state = tty->driver_data; in uart_chars_in_buffer()
661 ret = kfifo_len(&state->port.xmit_fifo); in uart_chars_in_buffer()
668 struct uart_state *state = tty->driver_data; in uart_flush_buffer()
679 pr_debug("uart_flush_buffer(%d) called\n", tty->index); in uart_flush_buffer()
684 kfifo_reset(&state->port.xmit_fifo); in uart_flush_buffer()
685 if (port->ops->flush_buffer) in uart_flush_buffer()
686 port->ops->flush_buffer(port); in uart_flush_buffer()
688 tty_port_tty_wakeup(&state->port); in uart_flush_buffer()
692 * This function performs low-level write of high-priority XON/XOFF
699 serial_port_out(uport, offset, uport->x_char); in uart_xchar_out()
700 uport->icount.tx++; in uart_xchar_out()
701 uport->x_char = 0; in uart_xchar_out()
706 * This function is used to send a high-priority XON/XOFF character to
711 struct uart_state *state = tty->driver_data; in uart_send_xchar()
719 if (port->ops->send_xchar) in uart_send_xchar()
720 port->ops->send_xchar(port, ch); in uart_send_xchar()
723 port->x_char = ch; in uart_send_xchar()
725 port->ops->start_tx(port); in uart_send_xchar()
733 struct uart_state *state = tty->driver_data; in uart_throttle()
746 if (port->status & mask) { in uart_throttle()
747 port->ops->throttle(port); in uart_throttle()
748 mask &= ~port->status; in uart_throttle()
762 struct uart_state *state = tty->driver_data; in uart_unthrottle()
775 if (port->status & mask) { in uart_unthrottle()
776 port->ops->unthrottle(port); in uart_unthrottle()
777 mask &= ~port->status; in uart_unthrottle()
801 guard(mutex)(&port->mutex); in uart_get_info()
804 return -ENODEV; in uart_get_info()
806 retinfo->type = uport->type; in uart_get_info()
807 retinfo->line = uport->line; in uart_get_info()
808 retinfo->port = uport->iobase; in uart_get_info()
810 retinfo->port_high = (long) uport->iobase >> HIGH_BITS_OFFSET; in uart_get_info()
811 retinfo->irq = uport->irq; in uart_get_info()
812 retinfo->flags = (__force int)uport->flags; in uart_get_info()
813 retinfo->xmit_fifo_size = uport->fifosize; in uart_get_info()
814 retinfo->baud_base = uport->uartclk / 16; in uart_get_info()
815 retinfo->close_delay = jiffies_to_msecs(port->close_delay) / 10; in uart_get_info()
816 retinfo->closing_wait = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ? in uart_get_info()
818 jiffies_to_msecs(port->closing_wait) / 10; in uart_get_info()
819 retinfo->custom_divisor = uport->custom_divisor; in uart_get_info()
820 retinfo->hub6 = uport->hub6; in uart_get_info()
821 retinfo->io_type = uport->iotype; in uart_get_info()
822 retinfo->iomem_reg_shift = uport->regshift; in uart_get_info()
823 retinfo->iomem_base = (void *)(unsigned long)uport->mapbase; in uart_get_info()
831 struct uart_state *state = tty->driver_data; in uart_get_info_user()
832 struct tty_port *port = &state->port; in uart_get_info_user()
834 return uart_get_info(port, ss) < 0 ? -EIO : 0; in uart_get_info_user()
845 old_iobase = uport->iobase; in uart_change_port()
846 old_mapbase = uport->mapbase; in uart_change_port()
847 old_type = uport->type; in uart_change_port()
848 old_hub6 = uport->hub6; in uart_change_port()
849 old_iotype = uport->iotype; in uart_change_port()
850 old_shift = uport->regshift; in uart_change_port()
852 if (old_type != PORT_UNKNOWN && uport->ops->release_port) in uart_change_port()
853 uport->ops->release_port(uport); in uart_change_port()
855 uport->iobase = new_port; in uart_change_port()
856 uport->type = new_info->type; in uart_change_port()
857 uport->hub6 = new_info->hub6; in uart_change_port()
858 uport->iotype = new_info->io_type; in uart_change_port()
859 uport->regshift = new_info->iomem_reg_shift; in uart_change_port()
860 uport->mapbase = (unsigned long)new_info->iomem_base; in uart_change_port()
862 if (uport->type == PORT_UNKNOWN || !uport->ops->request_port) in uart_change_port()
865 retval = uport->ops->request_port(uport); in uart_change_port()
873 uport->iobase = old_iobase; in uart_change_port()
874 uport->type = old_type; in uart_change_port()
875 uport->hub6 = old_hub6; in uart_change_port()
876 uport->iotype = old_iotype; in uart_change_port()
877 uport->regshift = old_shift; in uart_change_port()
878 uport->mapbase = old_mapbase; in uart_change_port()
883 retval = uport->ops->request_port(uport); in uart_change_port()
886 uport->type = PORT_UNKNOWN; in uart_change_port()
889 return -EBUSY; in uart_change_port()
904 return -EIO; in uart_set_info()
906 new_port = new_info->port; in uart_set_info()
908 new_port += (unsigned long) new_info->port_high << HIGH_BITS_OFFSET; in uart_set_info()
910 new_info->irq = irq_canonicalize(new_info->irq); in uart_set_info()
911 close_delay = msecs_to_jiffies(new_info->close_delay * 10); in uart_set_info()
912 closing_wait = new_info->closing_wait == ASYNC_CLOSING_WAIT_NONE ? in uart_set_info()
914 msecs_to_jiffies(new_info->closing_wait * 10); in uart_set_info()
917 change_irq = !(uport->flags & UPF_FIXED_PORT) in uart_set_info()
918 && new_info->irq != uport->irq; in uart_set_info()
925 change_port = !(uport->flags & UPF_FIXED_PORT) in uart_set_info()
926 && (new_port != uport->iobase || in uart_set_info()
927 (unsigned long)new_info->iomem_base != uport->mapbase || in uart_set_info()
928 new_info->hub6 != uport->hub6 || in uart_set_info()
929 new_info->io_type != uport->iotype || in uart_set_info()
930 new_info->iomem_reg_shift != uport->regshift || in uart_set_info()
931 new_info->type != uport->type); in uart_set_info()
933 old_flags = uport->flags; in uart_set_info()
934 new_flags = (__force upf_t)new_info->flags; in uart_set_info()
935 old_custom_divisor = uport->custom_divisor; in uart_set_info()
937 if (!(uport->flags & UPF_FIXED_PORT)) { in uart_set_info()
938 unsigned int uartclk = new_info->baud_base * 16; in uart_set_info()
941 return -EINVAL; in uart_set_info()
945 (new_info->baud_base != uport->uartclk / 16) || in uart_set_info()
946 (close_delay != port->close_delay) || in uart_set_info()
947 (closing_wait != port->closing_wait) || in uart_set_info()
948 (new_info->xmit_fifo_size && in uart_set_info()
949 new_info->xmit_fifo_size != uport->fifosize) || in uart_set_info()
951 return -EPERM; in uart_set_info()
952 uport->flags = ((uport->flags & ~UPF_USR_MASK) | in uart_set_info()
954 uport->custom_divisor = new_info->custom_divisor; in uart_set_info()
965 if (uport->ops->verify_port) { in uart_set_info()
966 retval = uport->ops->verify_port(uport, new_info); in uart_set_info()
971 if ((new_info->irq >= irq_get_nr_irqs()) || (new_info->irq < 0) || in uart_set_info()
972 (new_info->baud_base < 9600)) in uart_set_info()
973 return -EINVAL; in uart_set_info()
978 return -EBUSY; in uart_set_info()
994 uport->irq = new_info->irq; in uart_set_info()
995 if (!(uport->flags & UPF_FIXED_PORT)) in uart_set_info()
996 uport->uartclk = new_info->baud_base * 16; in uart_set_info()
997 uport->flags = (uport->flags & ~UPF_CHANGE_MASK) | in uart_set_info()
999 uport->custom_divisor = new_info->custom_divisor; in uart_set_info()
1000 port->close_delay = close_delay; in uart_set_info()
1001 port->closing_wait = closing_wait; in uart_set_info()
1002 if (new_info->xmit_fifo_size) in uart_set_info()
1003 uport->fifosize = new_info->xmit_fifo_size; in uart_set_info()
1006 if (uport->type == PORT_UNKNOWN) in uart_set_info()
1010 if (((old_flags ^ uport->flags) & UPF_SPD_MASK) || in uart_set_info()
1011 old_custom_divisor != uport->custom_divisor) { in uart_set_info()
1016 if (uport->flags & UPF_SPD_MASK) { in uart_set_info()
1017 dev_notice_ratelimited(uport->dev, in uart_set_info()
1019 current->comm, in uart_set_info()
1020 tty_name(port->tty)); in uart_set_info()
1039 struct uart_state *state = tty->driver_data; in uart_set_info_user()
1040 struct tty_port *port = &state->port; in uart_set_info_user()
1043 down_write(&tty->termios_rwsem); in uart_set_info_user()
1045 * This semaphore protects port->count. It is also in uart_set_info_user()
1051 mutex_lock(&port->mutex); in uart_set_info_user()
1053 mutex_unlock(&port->mutex); in uart_set_info_user()
1054 up_write(&tty->termios_rwsem); in uart_set_info_user()
1059 * uart_get_lsr_info - get line status register info
1070 result = uport->ops->tx_empty(uport); in uart_get_lsr_info()
1078 if (uport->x_char || in uart_get_lsr_info()
1079 (!kfifo_is_empty(&state->port.xmit_fifo) && in uart_get_lsr_info()
1088 struct uart_state *state = tty->driver_data; in uart_tiocmget()
1089 struct tty_port *port = &state->port; in uart_tiocmget()
1093 guard(mutex)(&port->mutex); in uart_tiocmget()
1097 return -EIO; in uart_tiocmget()
1100 result = uport->mctrl; in uart_tiocmget()
1101 result |= uport->ops->get_mctrl(uport); in uart_tiocmget()
1110 struct uart_state *state = tty->driver_data; in uart_tiocmset()
1111 struct tty_port *port = &state->port; in uart_tiocmset()
1114 guard(mutex)(&port->mutex); in uart_tiocmset()
1118 return -EIO; in uart_tiocmset()
1127 struct uart_state *state = tty->driver_data; in uart_break_ctl()
1128 struct tty_port *port = &state->port; in uart_break_ctl()
1131 guard(mutex)(&port->mutex); in uart_break_ctl()
1135 return -EIO; in uart_break_ctl()
1137 if (uport->type != PORT_UNKNOWN && uport->ops->break_ctl) in uart_break_ctl()
1138 uport->ops->break_ctl(uport, break_state); in uart_break_ctl()
1145 struct tty_port *port = &state->port; in uart_do_autoconfig()
1150 return -EPERM; in uart_do_autoconfig()
1153 * Take the per-port semaphore. This prevents count from in uart_do_autoconfig()
1155 * we're auto-configuring. in uart_do_autoconfig()
1157 scoped_cond_guard(mutex_intr, return -ERESTARTSYS, &port->mutex) { in uart_do_autoconfig()
1160 return -EIO; in uart_do_autoconfig()
1163 return -EBUSY; in uart_do_autoconfig()
1171 if (uport->type != PORT_UNKNOWN && uport->ops->release_port) in uart_do_autoconfig()
1172 uport->ops->release_port(uport); in uart_do_autoconfig()
1175 if (uport->flags & UPF_AUTO_IRQ) in uart_do_autoconfig()
1182 uport->ops->config_port(uport, flags); in uart_do_autoconfig()
1201 if (uport->ops->enable_ms) in uart_enable_ms()
1202 uport->ops->enable_ms(uport); in uart_enable_ms()
1207 * - mask passed in arg for lines of interest
1217 struct tty_port *port = &state->port; in uart_wait_modem_status()
1227 return -EIO; in uart_wait_modem_status()
1229 memcpy(&cprev, &uport->icount, sizeof(struct uart_icount)); in uart_wait_modem_status()
1233 add_wait_queue(&port->delta_msr_wait, &wait); in uart_wait_modem_status()
1236 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); in uart_wait_modem_status()
1253 ret = -ERESTARTSYS; in uart_wait_modem_status()
1260 remove_wait_queue(&port->delta_msr_wait, &wait); in uart_wait_modem_status()
1269 * NB: both 1->0 and 0->1 transitions are counted except for
1270 * RI where only 0->1 is counted.
1275 struct uart_state *state = tty->driver_data; in uart_get_icount()
1281 return -EIO; in uart_get_icount()
1283 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); in uart_get_icount()
1287 icount->cts = cnow.cts; in uart_get_icount()
1288 icount->dsr = cnow.dsr; in uart_get_icount()
1289 icount->rng = cnow.rng; in uart_get_icount()
1290 icount->dcd = cnow.dcd; in uart_get_icount()
1291 icount->rx = cnow.rx; in uart_get_icount()
1292 icount->tx = cnow.tx; in uart_get_icount()
1293 icount->frame = cnow.frame; in uart_get_icount()
1294 icount->overrun = cnow.overrun; in uart_get_icount()
1295 icount->parity = cnow.parity; in uart_get_icount()
1296 icount->brk = cnow.brk; in uart_get_icount()
1297 icount->buf_overrun = cnow.buf_overrun; in uart_get_icount()
1308 u32 flags = rs485->flags; in uart_check_rs485_flags()
1310 /* Don't return -EINVAL for unsupported legacy flags */ in uart_check_rs485_flags()
1315 * the driver, return -EINVAL. in uart_check_rs485_flags()
1317 if (flags & ~port->rs485_supported.flags) in uart_check_rs485_flags()
1318 return -EINVAL; in uart_check_rs485_flags()
1321 if (!(rs485->flags & SER_RS485_ADDRB) && in uart_check_rs485_flags()
1322 (rs485->flags & (SER_RS485_ADDR_RECV|SER_RS485_ADDR_DEST))) in uart_check_rs485_flags()
1323 return -EINVAL; in uart_check_rs485_flags()
1326 if (!(rs485->flags & SER_RS485_ADDR_RECV) && rs485->addr_recv) in uart_check_rs485_flags()
1327 return -EINVAL; in uart_check_rs485_flags()
1328 if (!(rs485->flags & SER_RS485_ADDR_DEST) && rs485->addr_dest) in uart_check_rs485_flags()
1329 return -EINVAL; in uart_check_rs485_flags()
1337 if (!port->rs485_supported.delay_rts_before_send) { in uart_sanitize_serial_rs485_delays()
1338 if (rs485->delay_rts_before_send) { in uart_sanitize_serial_rs485_delays()
1339 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1341 port->name, port->line); in uart_sanitize_serial_rs485_delays()
1343 rs485->delay_rts_before_send = 0; in uart_sanitize_serial_rs485_delays()
1344 } else if (rs485->delay_rts_before_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1345 rs485->delay_rts_before_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1346 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1348 port->name, port->line, rs485->delay_rts_before_send); in uart_sanitize_serial_rs485_delays()
1351 if (!port->rs485_supported.delay_rts_after_send) { in uart_sanitize_serial_rs485_delays()
1352 if (rs485->delay_rts_after_send) { in uart_sanitize_serial_rs485_delays()
1353 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1355 port->name, port->line); in uart_sanitize_serial_rs485_delays()
1357 rs485->delay_rts_after_send = 0; in uart_sanitize_serial_rs485_delays()
1358 } else if (rs485->delay_rts_after_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1359 rs485->delay_rts_after_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1360 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1362 port->name, port->line, rs485->delay_rts_after_send); in uart_sanitize_serial_rs485_delays()
1368 u32 supported_flags = port->rs485_supported.flags; in uart_sanitize_serial_rs485()
1370 if (!(rs485->flags & SER_RS485_ENABLED)) { in uart_sanitize_serial_rs485()
1376 if (rs485->flags & SER_RS485_MODE_RS422) { in uart_sanitize_serial_rs485()
1377 rs485->flags &= (SER_RS485_ENABLED | SER_RS485_MODE_RS422 | SER_RS485_TERMINATE_BUS); in uart_sanitize_serial_rs485()
1381 rs485->flags &= supported_flags; in uart_sanitize_serial_rs485()
1384 if (!(rs485->flags & SER_RS485_RTS_ON_SEND) == in uart_sanitize_serial_rs485()
1385 !(rs485->flags & SER_RS485_RTS_AFTER_SEND)) { in uart_sanitize_serial_rs485()
1387 rs485->flags |= SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1388 rs485->flags &= ~SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1390 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485()
1392 port->name, port->line); in uart_sanitize_serial_rs485()
1394 rs485->flags |= SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1395 rs485->flags &= ~SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1397 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485()
1399 port->name, port->line); in uart_sanitize_serial_rs485()
1406 memset(rs485->padding0, 0, sizeof(rs485->padding0)); in uart_sanitize_serial_rs485()
1407 memset(rs485->padding1, 0, sizeof(rs485->padding1)); in uart_sanitize_serial_rs485()
1413 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_termination()
1416 gpiod_set_value_cansleep(port->rs485_term_gpio, in uart_set_rs485_termination()
1417 !!(rs485->flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_termination()
1423 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_rx_during_tx()
1426 gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, in uart_set_rs485_rx_during_tx()
1427 !!(rs485->flags & SER_RS485_RX_DURING_TX)); in uart_set_rs485_rx_during_tx()
1432 struct serial_rs485 *rs485 = &port->rs485; in uart_rs485_config()
1436 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_rs485_config()
1444 ret = port->rs485_config(port, NULL, rs485); in uart_rs485_config()
1448 /* unset GPIOs */ in uart_rs485_config()
1449 gpiod_set_value_cansleep(port->rs485_term_gpio, 0); in uart_rs485_config()
1450 gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, 0); in uart_rs485_config()
1463 aux = port->rs485; in uart_get_rs485_config()
1467 return -EFAULT; in uart_get_rs485_config()
1479 if (!(port->rs485_supported.flags & SER_RS485_ENABLED)) in uart_set_rs485_config()
1480 return -ENOTTY; in uart_set_rs485_config()
1483 return -EFAULT; in uart_set_rs485_config()
1493 ret = port->rs485_config(port, &tty->termios, &rs485); in uart_set_rs485_config()
1495 port->rs485 = rs485; in uart_set_rs485_config()
1499 port->ops->set_mctrl(port, port->mctrl); in uart_set_rs485_config()
1504 gpiod_set_value_cansleep(port->rs485_term_gpio, in uart_set_rs485_config()
1505 !!(port->rs485.flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_config()
1506 gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, in uart_set_rs485_config()
1507 !!(port->rs485.flags & SER_RS485_RX_DURING_TX)); in uart_set_rs485_config()
1511 if (copy_to_user(rs485_user, &port->rs485, sizeof(port->rs485))) in uart_set_rs485_config()
1512 return -EFAULT; in uart_set_rs485_config()
1523 if (!port->iso7816_config) in uart_get_iso7816_config()
1524 return -ENOTTY; in uart_get_iso7816_config()
1527 aux = port->iso7816; in uart_get_iso7816_config()
1531 return -EFAULT; in uart_get_iso7816_config()
1543 if (!port->iso7816_config) in uart_set_iso7816_config()
1544 return -ENOTTY; in uart_set_iso7816_config()
1547 return -EFAULT; in uart_set_iso7816_config()
1555 return -EINVAL; in uart_set_iso7816_config()
1558 ret = port->iso7816_config(port, &iso7816); in uart_set_iso7816_config()
1563 if (copy_to_user(iso7816_user, &port->iso7816, sizeof(port->iso7816))) in uart_set_iso7816_config()
1564 return -EFAULT; in uart_set_iso7816_config()
1575 struct uart_state *state = tty->driver_data; in uart_ioctl()
1576 struct tty_port *port = &state->port; in uart_ioctl()
1579 int ret = -ENOIOCTLCMD; in uart_ioctl()
1587 down_write(&tty->termios_rwsem); in uart_ioctl()
1589 up_write(&tty->termios_rwsem); in uart_ioctl()
1593 if (ret != -ENOIOCTLCMD) in uart_ioctl()
1597 ret = -EIO; in uart_ioctl()
1610 if (ret != -ENOIOCTLCMD) in uart_ioctl()
1615 down_write(&tty->termios_rwsem); in uart_ioctl()
1617 mutex_lock(&port->mutex); in uart_ioctl()
1621 ret = -EIO; in uart_ioctl()
1644 ret = uart_set_iso7816_config(state->uart_port, uarg); in uart_ioctl()
1648 ret = uart_get_iso7816_config(state->uart_port, uarg); in uart_ioctl()
1651 if (uport->ops->ioctl) in uart_ioctl()
1652 ret = uport->ops->ioctl(uport, cmd, arg); in uart_ioctl()
1656 mutex_unlock(&port->mutex); in uart_ioctl()
1658 up_write(&tty->termios_rwsem); in uart_ioctl()
1665 struct uart_state *state = tty->driver_data; in uart_set_ldisc()
1667 struct tty_port *port = &state->port; in uart_set_ldisc()
1672 mutex_lock(&state->port.mutex); in uart_set_ldisc()
1674 if (uport && uport->ops->set_ldisc) in uart_set_ldisc()
1675 uport->ops->set_ldisc(uport, &tty->termios); in uart_set_ldisc()
1676 mutex_unlock(&state->port.mutex); in uart_set_ldisc()
1682 struct uart_state *state = tty->driver_data; in uart_set_termios()
1684 unsigned int cflag = tty->termios.c_cflag; in uart_set_termios()
1688 guard(mutex)(&state->port.mutex); in uart_set_termios()
1698 if (uport->flags & UPF_SOFT_FLOW) { in uart_set_termios()
1701 tty->termios.c_cc[VSTART] != old_termios->c_cc[VSTART] || in uart_set_termios()
1702 tty->termios.c_cc[VSTOP] != old_termios->c_cc[VSTOP]; in uart_set_termios()
1711 if ((cflag ^ old_termios->c_cflag) == 0 && in uart_set_termios()
1712 tty->termios.c_ospeed == old_termios->c_ospeed && in uart_set_termios()
1713 tty->termios.c_ispeed == old_termios->c_ispeed && in uart_set_termios()
1714 ((tty->termios.c_iflag ^ old_termios->c_iflag) & iflag_mask) == 0 && in uart_set_termios()
1720 cflag = tty->termios.c_cflag; in uart_set_termios()
1723 if (((old_termios->c_cflag & CBAUD) != B0) && ((cflag & CBAUD) == B0)) in uart_set_termios()
1726 else if (((old_termios->c_cflag & CBAUD) == B0) && ((cflag & CBAUD) != B0)) { in uart_set_termios()
1742 struct uart_state *state = tty->driver_data; in uart_close()
1745 struct uart_driver *drv = tty->driver->driver_state; in uart_close()
1748 state = drv->state + tty->index; in uart_close()
1749 port = &state->port; in uart_close()
1750 spin_lock_irq(&port->lock); in uart_close()
1751 --port->count; in uart_close()
1752 spin_unlock_irq(&port->lock); in uart_close()
1756 pr_debug("uart_close(%d) called\n", tty->index); in uart_close()
1758 tty_port_close(tty->port, tty, filp); in uart_close()
1774 uport->ops->stop_rx(uport); in uart_tty_port_shutdown()
1794 struct uart_state *state = tty->driver_data; in uart_wait_until_sent()
1802 if (port->type == PORT_UNKNOWN || port->fifosize == 0) { in uart_wait_until_sent()
1813 * the NIST-PCTS. in uart_wait_until_sent()
1815 char_time = max(nsecs_to_jiffies(port->frame_time / 5), 1UL); in uart_wait_until_sent()
1838 port->line, jiffies, expire); in uart_wait_until_sent()
1845 while (!port->ops->tx_empty(port)) { in uart_wait_until_sent()
1862 struct uart_state *state = tty->driver_data; in uart_hangup()
1863 struct tty_port *port = &state->port; in uart_hangup()
1867 pr_debug("uart_hangup(%d)\n", tty->index); in uart_hangup()
1869 mutex_lock(&port->mutex); in uart_hangup()
1876 spin_lock_irqsave(&port->lock, flags); in uart_hangup()
1877 port->count = 0; in uart_hangup()
1878 spin_unlock_irqrestore(&port->lock, flags); in uart_hangup()
1883 wake_up_interruptible(&port->open_wait); in uart_hangup()
1884 wake_up_interruptible(&port->delta_msr_wait); in uart_hangup()
1886 mutex_unlock(&port->mutex); in uart_hangup()
1902 wake_up_interruptible(&port->delta_msr_wait); in uart_port_shutdown()
1906 uport->ops->shutdown(uport); in uart_port_shutdown()
1909 synchronize_irq(uport->irq); in uart_port_shutdown()
1923 * raised -- but report carrier raised if it does anyway so open will in uart_carrier_raised()
1930 mctrl = uport->ops->get_mctrl(uport); in uart_carrier_raised()
1951 struct uart_driver *drv = driver->driver_state; in uart_install()
1952 struct uart_state *state = drv->state + tty->index; in uart_install()
1954 tty->driver_data = state; in uart_install()
1971 struct uart_state *state = tty->driver_data; in uart_open()
1974 retval = tty_port_open(&state->port, tty, filp); in uart_open()
1988 if (!uport || uport->flags & UPF_DEAD) in uart_port_activate()
1989 return -ENXIO; in uart_port_activate()
2005 if (port->ops->type) in uart_type()
2006 str = port->ops->type(port); in uart_type()
2018 struct tty_port *port = &state->port; in uart_line_info()
2025 guard(mutex)(&port->mutex); in uart_line_info()
2031 mmio = uport->iotype >= UPIO_MEM; in uart_line_info()
2033 uport->line, uart_type(uport), in uart_line_info()
2035 mmio ? (unsigned long long)uport->mapbase in uart_line_info()
2036 : (unsigned long long)uport->iobase, in uart_line_info()
2037 uport->irq); in uart_line_info()
2039 if (uport->type == PORT_UNKNOWN) { in uart_line_info()
2045 pm_state = state->pm_state; in uart_line_info()
2049 status = uport->ops->get_mctrl(uport); in uart_line_info()
2055 uport->icount.tx, uport->icount.rx); in uart_line_info()
2056 if (uport->icount.frame) in uart_line_info()
2057 seq_printf(m, " fe:%d", uport->icount.frame); in uart_line_info()
2058 if (uport->icount.parity) in uart_line_info()
2059 seq_printf(m, " pe:%d", uport->icount.parity); in uart_line_info()
2060 if (uport->icount.brk) in uart_line_info()
2061 seq_printf(m, " brk:%d", uport->icount.brk); in uart_line_info()
2062 if (uport->icount.overrun) in uart_line_info()
2063 seq_printf(m, " oe:%d", uport->icount.overrun); in uart_line_info()
2064 if (uport->icount.buf_overrun) in uart_line_info()
2065 seq_printf(m, " bo:%d", uport->icount.buf_overrun); in uart_line_info()
2068 if (uport->mctrl & (bit)) \ in uart_line_info()
2069 strncat(stat_buf, (str), sizeof(stat_buf) - \ in uart_line_info()
2070 strlen(stat_buf) - 2) in uart_line_info()
2073 strncat(stat_buf, (str), sizeof(stat_buf) - \ in uart_line_info()
2074 strlen(stat_buf) - 2) in uart_line_info()
2096 struct tty_driver *ttydrv = m->private; in uart_proc_show()
2097 struct uart_driver *drv = ttydrv->driver_state; in uart_proc_show()
2101 for (i = 0; i < drv->nr; i++) in uart_proc_show()
2102 uart_line_info(m, drv->state + i); in uart_proc_show()
2109 spin_lock_init(&port->lock); in uart_port_spin_lock_init()
2110 lockdep_set_class(&port->lock, &port_lock_key); in uart_port_spin_lock_init()
2115 * uart_console_write - write a console message to a serial port
2136 * uart_get_console - get uart port for console
2142 * Check whether an invalid uart number has been specified (as @co->index), and
2148 int idx = co->index; in uart_get_console()
2157 co->index = idx; in uart_get_console()
2163 * uart_parse_earlycon - Parse earlycon options
2179 * Returns: 0 on success or -%EINVAL on failure
2206 return -EINVAL; in uart_parse_earlycon()
2224 * uart_parse_options - Parse serial port baud/parity/bits/flow control.
2247 *bits = *s++ - '0'; in uart_parse_options()
2254 * uart_set_options - setup the serial console parameters
2258 * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even)
2260 * @flow: flow control character - 'r' (rts)
2263 * early initialization of the serial-console lock.
2273 * Ensure that the serial-console lock is initialised early. in uart_set_options()
2275 * Note that the console-registered check is needed because in uart_set_options()
2279 if (!uart_console_registered_locked(port) && !port->console_reinit) in uart_set_options()
2308 port->mctrl |= TIOCM_DTR; in uart_set_options()
2310 port->ops->set_termios(port, &termios, &dummy); in uart_set_options()
2316 co->cflag = termios.c_cflag; in uart_set_options()
2317 co->ispeed = termios.c_ispeed; in uart_set_options()
2318 co->ospeed = termios.c_ospeed; in uart_set_options()
2327 * uart_change_pm - set power state of the port
2332 * Locking: port->mutex has to be held
2339 if (state->pm_state != pm_state) { in uart_change_pm()
2340 if (port && port->ops->pm) in uart_change_pm()
2341 port->ops->pm(port, pm_state, state->pm_state); in uart_change_pm()
2342 state->pm_state = pm_state; in uart_change_pm()
2354 struct tty_driver *tty_drv = match->driver->tty_driver; in serial_match_port()
2355 dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) + in serial_match_port()
2356 match->port->line; in serial_match_port()
2358 return dev->devt == devt; /* Actually, only one tty per port */ in serial_match_port()
2363 struct uart_state *state = drv->state + uport->line; in uart_suspend_port()
2364 struct tty_port *port = &state->port; in uart_suspend_port()
2368 guard(mutex)(&port->mutex); in uart_suspend_port()
2370 tty_dev = device_find_child(&uport->port_dev->dev, &match, serial_match_port); in uart_suspend_port()
2372 enable_irq_wake(uport->irq); in uart_suspend_port()
2382 * able to Re-start_rx later. in uart_suspend_port()
2385 if (uport->ops->start_rx) { in uart_suspend_port()
2387 uport->ops->stop_rx(uport); in uart_suspend_port()
2390 device_set_awake_path(uport->dev); in uart_suspend_port()
2394 uport->suspended = 1; in uart_suspend_port()
2397 const struct uart_ops *ops = uport->ops; in uart_suspend_port()
2405 ops->stop_tx(uport); in uart_suspend_port()
2406 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_suspend_port()
2407 ops->set_mctrl(uport, 0); in uart_suspend_port()
2409 mctrl = uport->mctrl; in uart_suspend_port()
2410 uport->mctrl = 0; in uart_suspend_port()
2411 ops->stop_rx(uport); in uart_suspend_port()
2417 for (tries = 3; !ops->tx_empty(uport) && tries; tries--) in uart_suspend_port()
2420 dev_err(uport->dev, "%s: Unable to drain transmitter\n", in uart_suspend_port()
2421 uport->name); in uart_suspend_port()
2423 ops->shutdown(uport); in uart_suspend_port()
2424 uport->mctrl = mctrl; in uart_suspend_port()
2431 console_suspend(uport->cons); in uart_suspend_port()
2441 struct uart_state *state = drv->state + uport->line; in uart_resume_port()
2442 struct tty_port *port = &state->port; in uart_resume_port()
2447 guard(mutex)(&port->mutex); in uart_resume_port()
2449 tty_dev = device_find_child(&uport->port_dev->dev, &match, serial_match_port); in uart_resume_port()
2450 if (!uport->suspended && device_may_wakeup(tty_dev)) { in uart_resume_port()
2451 if (irqd_is_wakeup_set(irq_get_irq_data((uport->irq)))) in uart_resume_port()
2452 disable_irq_wake(uport->irq); in uart_resume_port()
2457 uport->suspended = 0; in uart_resume_port()
2460 * Re-enable the console device after suspending. in uart_resume_port()
2467 termios.c_cflag = uport->cons->cflag; in uart_resume_port()
2468 termios.c_ispeed = uport->cons->ispeed; in uart_resume_port()
2469 termios.c_ospeed = uport->cons->ospeed; in uart_resume_port()
2474 if (port->tty && termios.c_cflag == 0) in uart_resume_port()
2475 termios = port->tty->termios; in uart_resume_port()
2479 uport->ops->set_termios(uport, &termios, NULL); in uart_resume_port()
2480 if (!console_suspend_enabled && uport->ops->start_rx) { in uart_resume_port()
2482 uport->ops->start_rx(uport); in uart_resume_port()
2486 console_resume(uport->cons); in uart_resume_port()
2490 const struct uart_ops *ops = uport->ops; in uart_resume_port()
2495 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2496 ops->set_mctrl(uport, 0); in uart_resume_port()
2500 struct tty_struct *tty = port->tty; in uart_resume_port()
2502 ret = ops->startup(uport); in uart_resume_port()
2508 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2509 ops->set_mctrl(uport, uport->mctrl); in uart_resume_port()
2510 ops->start_tx(uport); in uart_resume_port()
2515 * Failed to resume - maybe hardware went away? in uart_resume_port()
2535 switch (port->iotype) { in uart_report_port()
2537 snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase); in uart_report_port()
2541 "I/O 0x%lx offset 0x%x", port->iobase, port->hub6); in uart_report_port()
2550 "MMIO 0x%llx", (unsigned long long)port->mapbase); in uart_report_port()
2558 port->dev ? dev_name(port->dev) : "", in uart_report_port()
2559 port->dev ? ": " : "", in uart_report_port()
2560 port->name, in uart_report_port()
2561 address, port->irq, port->uartclk / 16, uart_type(port)); in uart_report_port()
2564 if (port->flags & UPF_MAGIC_MULTIPLIER) in uart_report_port()
2566 port->dev ? dev_name(port->dev) : "", in uart_report_port()
2567 port->dev ? ": " : "", in uart_report_port()
2568 port->name, in uart_report_port()
2569 port->uartclk / 8, port->uartclk / 4); in uart_report_port()
2581 if (!port->iobase && !port->mapbase && !port->membase) in uart_configure_port()
2589 if (port->flags & UPF_AUTO_IRQ) in uart_configure_port()
2591 if (port->flags & UPF_BOOT_AUTOCONF) { in uart_configure_port()
2592 if (!(port->flags & UPF_FIXED_TYPE)) { in uart_configure_port()
2593 port->type = PORT_UNKNOWN; in uart_configure_port()
2599 port->ops->config_port(port, flags); in uart_configure_port()
2604 if (port->type != PORT_UNKNOWN) { in uart_configure_port()
2617 * Ensure that the modem control lines are de-activated. in uart_configure_port()
2622 port->mctrl &= TIOCM_DTR; in uart_configure_port()
2623 if (!(port->rs485.flags & SER_RS485_ENABLED)) in uart_configure_port()
2624 port->ops->set_mctrl(port, port->mctrl); in uart_configure_port()
2634 * successfully registered yet, try to re-register it. in uart_configure_port()
2637 if (port->cons && !console_is_registered(port->cons)) in uart_configure_port()
2638 register_console(port->cons); in uart_configure_port()
2653 struct uart_driver *drv = driver->driver_state; in uart_poll_init()
2654 struct uart_state *state = drv->state + line; in uart_poll_init()
2664 tport = &state->port; in uart_poll_init()
2666 guard(mutex)(&tport->mutex); in uart_poll_init()
2669 if (!port || port->type == PORT_UNKNOWN || in uart_poll_init()
2670 !(port->ops->poll_get_char && port->ops->poll_put_char)) in uart_poll_init()
2671 return -1; in uart_poll_init()
2673 pm_state = state->pm_state; in uart_poll_init()
2676 if (port->ops->poll_init) { in uart_poll_init()
2679 * e.g. state->xmit is still uninitialized. in uart_poll_init()
2682 ret = port->ops->poll_init(port); in uart_poll_init()
2700 struct uart_driver *drv = driver->driver_state; in uart_poll_get_char()
2701 struct uart_state *state = drv->state + line; in uart_poll_get_char()
2703 int ret = -1; in uart_poll_get_char()
2707 ret = port->ops->poll_get_char(port); in uart_poll_get_char()
2716 struct uart_driver *drv = driver->driver_state; in uart_poll_put_char()
2717 struct uart_state *state = drv->state + line; in uart_poll_put_char()
2725 port->ops->poll_put_char(port, '\r'); in uart_poll_put_char()
2726 port->ops->poll_put_char(port, ch); in uart_poll_put_char()
2775 * uart_register_driver - register a driver with the uart core layer
2779 * tty layer, and initialise the core driver per-port state.
2784 * @drv->port should be %NULL, and the per-port structures should be registered
2792 int i, retval = -ENOMEM; in uart_register_driver()
2794 BUG_ON(drv->state); in uart_register_driver()
2800 drv->state = kcalloc(drv->nr, sizeof(struct uart_state), GFP_KERNEL); in uart_register_driver()
2801 if (!drv->state) in uart_register_driver()
2804 normal = tty_alloc_driver(drv->nr, TTY_DRIVER_REAL_RAW | in uart_register_driver()
2811 drv->tty_driver = normal; in uart_register_driver()
2813 normal->driver_name = drv->driver_name; in uart_register_driver()
2814 normal->name = drv->dev_name; in uart_register_driver()
2815 normal->major = drv->major; in uart_register_driver()
2816 normal->minor_start = drv->minor; in uart_register_driver()
2817 normal->type = TTY_DRIVER_TYPE_SERIAL; in uart_register_driver()
2818 normal->subtype = SERIAL_TYPE_NORMAL; in uart_register_driver()
2819 normal->init_termios = tty_std_termios; in uart_register_driver()
2820 normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; in uart_register_driver()
2821 normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600; in uart_register_driver()
2822 normal->driver_state = drv; in uart_register_driver()
2828 for (i = 0; i < drv->nr; i++) { in uart_register_driver()
2829 struct uart_state *state = drv->state + i; in uart_register_driver()
2830 struct tty_port *port = &state->port; in uart_register_driver()
2833 port->ops = &uart_port_ops; in uart_register_driver()
2840 for (i = 0; i < drv->nr; i++) in uart_register_driver()
2841 tty_port_destroy(&drv->state[i].port); in uart_register_driver()
2844 kfree(drv->state); in uart_register_driver()
2851 * uart_unregister_driver - remove a driver from the uart core layer
2856 * registered them with uart_add_one_port(). (I.e. @drv->port is %NULL.)
2862 struct tty_driver *p = drv->tty_driver; in uart_unregister_driver()
2867 for (i = 0; i < drv->nr; i++) in uart_unregister_driver()
2868 tty_port_destroy(&drv->state[i].port); in uart_unregister_driver()
2869 kfree(drv->state); in uart_unregister_driver()
2870 drv->state = NULL; in uart_unregister_driver()
2871 drv->tty_driver = NULL; in uart_unregister_driver()
2877 struct uart_driver *p = co->data; in uart_console_device()
2878 *index = co->index; in uart_console_device()
2879 return p->tty_driver; in uart_console_device()
3025 mutex_lock(&port->mutex); in console_show()
3029 mutex_unlock(&port->mutex); in console_show()
3047 guard(mutex)(&port->mutex); in console_store()
3050 return -ENXIO; in console_store()
3054 ret = unregister_console(uport->cons); in console_store()
3059 return -ENOENT; in console_store()
3061 uport->console_reinit = 1; in console_store()
3062 register_console(uport->cons); in console_store()
3106 * serial_core_add_one_port - attach a driver-defined port structure
3124 if (uport->line >= drv->nr) in serial_core_add_one_port()
3125 return -EINVAL; in serial_core_add_one_port()
3127 state = drv->state + uport->line; in serial_core_add_one_port()
3128 port = &state->port; in serial_core_add_one_port()
3130 guard(mutex)(&port->mutex); in serial_core_add_one_port()
3131 if (state->uart_port) in serial_core_add_one_port()
3132 return -EINVAL; in serial_core_add_one_port()
3135 atomic_set(&state->refcount, 1); in serial_core_add_one_port()
3136 init_waitqueue_head(&state->remove_wait); in serial_core_add_one_port()
3137 state->uart_port = uport; in serial_core_add_one_port()
3138 uport->state = state; in serial_core_add_one_port()
3147 state->pm_state = UART_PM_STATE_UNDEFINED; in serial_core_add_one_port()
3148 uart_port_set_cons(uport, drv->cons); in serial_core_add_one_port()
3149 uport->minor = drv->tty_driver->minor_start + uport->line; in serial_core_add_one_port()
3150 uport->name = kasprintf(GFP_KERNEL, "%s%d", drv->dev_name, in serial_core_add_one_port()
3151 drv->tty_driver->name_base + uport->line); in serial_core_add_one_port()
3152 if (!uport->name) in serial_core_add_one_port()
3153 return -ENOMEM; in serial_core_add_one_port()
3155 if (uport->cons && uport->dev) in serial_core_add_one_port()
3156 of_console_check(uport->dev->of_node, uport->cons->name, uport->line); in serial_core_add_one_port()
3160 port->console = uart_console(uport); in serial_core_add_one_port()
3163 if (uport->attr_group) in serial_core_add_one_port()
3166 uport->tty_groups = kcalloc(num_groups, sizeof(*uport->tty_groups), in serial_core_add_one_port()
3168 if (!uport->tty_groups) in serial_core_add_one_port()
3169 return -ENOMEM; in serial_core_add_one_port()
3171 uport->tty_groups[0] = &tty_dev_attr_group; in serial_core_add_one_port()
3172 if (uport->attr_group) in serial_core_add_one_port()
3173 uport->tty_groups[1] = uport->attr_group; in serial_core_add_one_port()
3176 uport->flags &= ~UPF_DEAD; in serial_core_add_one_port()
3182 tty_dev = tty_port_register_device_attr_serdev(port, drv->tty_driver, in serial_core_add_one_port()
3183 uport->line, uport->dev, &uport->port_dev->dev, port, in serial_core_add_one_port()
3184 uport->tty_groups); in serial_core_add_one_port()
3188 uport->flags |= UPF_DEAD; in serial_core_add_one_port()
3189 dev_err(uport->dev, "Cannot register tty device on line %d\n", in serial_core_add_one_port()
3190 uport->line); in serial_core_add_one_port()
3197 * serial_core_remove_one_port - detach a driver defined port structure
3204 * driver. No further calls will be made to the low-level code for this port.
3210 struct uart_state *state = drv->state + uport->line; in serial_core_remove_one_port()
3211 struct tty_port *port = &state->port; in serial_core_remove_one_port()
3215 mutex_lock(&port->mutex); in serial_core_remove_one_port()
3218 dev_alert(uport->dev, "Removing wrong port: %p != %p\n", in serial_core_remove_one_port()
3222 mutex_unlock(&port->mutex); in serial_core_remove_one_port()
3225 mutex_unlock(&port->mutex); in serial_core_remove_one_port()
3230 tty_port_unregister_device(port, drv->tty_driver, uport->line); in serial_core_remove_one_port()
3234 tty_vhangup(port->tty); in serial_core_remove_one_port()
3242 unregister_console(uport->cons); in serial_core_remove_one_port()
3247 if (uport->type != PORT_UNKNOWN && uport->ops->release_port) in serial_core_remove_one_port()
3248 uport->ops->release_port(uport); in serial_core_remove_one_port()
3249 kfree(uport->tty_groups); in serial_core_remove_one_port()
3250 kfree(uport->name); in serial_core_remove_one_port()
3255 uport->type = PORT_UNKNOWN; in serial_core_remove_one_port()
3256 uport->port_dev = NULL; in serial_core_remove_one_port()
3258 mutex_lock(&port->mutex); in serial_core_remove_one_port()
3259 WARN_ON(atomic_dec_return(&state->refcount) < 0); in serial_core_remove_one_port()
3260 wait_event(state->remove_wait, !atomic_read(&state->refcount)); in serial_core_remove_one_port()
3261 state->uart_port = NULL; in serial_core_remove_one_port()
3262 mutex_unlock(&port->mutex); in serial_core_remove_one_port()
3266 * uart_match_port - are the two ports equivalent?
3276 if (port1->iotype != port2->iotype) in uart_match_port()
3279 switch (port1->iotype) { in uart_match_port()
3281 return port1->iobase == port2->iobase; in uart_match_port()
3283 return port1->iobase == port2->iobase && in uart_match_port()
3284 port1->hub6 == port2->hub6; in uart_match_port()
3291 return port1->mapbase == port2->mapbase; in uart_match_port()
3301 struct device *dev = &port_dev->dev; in serial_core_get_ctrl_dev()
3303 return to_serial_base_ctrl_device(dev->parent); in serial_core_get_ctrl_dev()
3319 for (i = 0; i < drv->nr; i++) { in serial_core_ctrl_find()
3320 state = drv->state + i; in serial_core_ctrl_find()
3321 if (!state->uart_port || !state->uart_port->port_dev) in serial_core_ctrl_find()
3324 if (state->uart_port->dev == phys_dev && in serial_core_ctrl_find()
3325 state->uart_port->ctrl_id == ctrl_id) in serial_core_ctrl_find()
3326 return serial_core_get_ctrl_dev(state->uart_port->port_dev); in serial_core_ctrl_find()
3334 return serial_base_ctrl_add(port, port->dev); in serial_core_ctrl_device_add()
3346 port->port_dev = port_dev; in serial_core_port_device_add()
3365 port->flags |= UPF_DEAD; in serial_core_register_port()
3368 ctrl_dev = serial_core_ctrl_find(drv, port->dev, port->ctrl_id); in serial_core_register_port()
3396 serial_base_port_device_remove(port->port_dev); in serial_core_register_port()
3410 struct device *phys_dev = port->dev; in serial_core_unregister_port()
3411 struct serial_port_device *port_dev = port->port_dev; in serial_core_unregister_port()
3413 int ctrl_id = port->ctrl_id; in serial_core_unregister_port()
3417 port->flags |= UPF_DEAD; in serial_core_unregister_port()
3432 * uart_handle_dcd_change - handle a change of carrier detect state
3436 * Caller must hold uport->lock.
3440 struct tty_port *port = &uport->state->port; in uart_handle_dcd_change()
3441 struct tty_struct *tty = port->tty; in uart_handle_dcd_change()
3444 lockdep_assert_held_once(&uport->lock); in uart_handle_dcd_change()
3449 if (ld->ops->dcd_change) in uart_handle_dcd_change()
3450 ld->ops->dcd_change(tty, active); in uart_handle_dcd_change()
3455 uport->icount.dcd++; in uart_handle_dcd_change()
3459 wake_up_interruptible(&port->open_wait); in uart_handle_dcd_change()
3467 * uart_handle_cts_change - handle a change of clear-to-send state
3469 * @active: new clear-to-send status
3471 * Caller must hold uport->lock.
3475 lockdep_assert_held_once(&uport->lock); in uart_handle_cts_change()
3477 uport->icount.cts++; in uart_handle_cts_change()
3480 if (uport->hw_stopped) { in uart_handle_cts_change()
3482 uport->hw_stopped = false; in uart_handle_cts_change()
3483 uport->ops->start_tx(uport); in uart_handle_cts_change()
3488 uport->hw_stopped = true; in uart_handle_cts_change()
3489 uport->ops->stop_tx(uport); in uart_handle_cts_change()
3498 * uart_insert_char - push a char to the uart layer
3512 struct tty_port *tport = &port->state->port; in uart_insert_char()
3514 if ((status & port->ignore_status_mask & ~overrun) == 0) in uart_insert_char()
3516 ++port->icount.buf_overrun; in uart_insert_char()
3522 if (status & ~port->ignore_status_mask & overrun) in uart_insert_char()
3524 ++port->icount.buf_overrun; in uart_insert_char()
3542 * uart_try_toggle_sysrq - Enables SysRq from serial line
3560 if (sysrq_toggle_seq[port->sysrq_seq] != ch) { in uart_try_toggle_sysrq()
3561 port->sysrq_seq = 0; in uart_try_toggle_sysrq()
3565 if (++port->sysrq_seq < sysrq_toggle_seq_len) { in uart_try_toggle_sysrq()
3566 port->sysrq = jiffies + SYSRQ_TIMEOUT; in uart_try_toggle_sysrq()
3572 port->sysrq = 0; in uart_try_toggle_sysrq()
3579 * uart_get_rs485_mode() - retrieve rs485 properties for given uart
3587 struct serial_rs485 *rs485conf = &port->rs485; in uart_get_rs485_mode()
3588 struct device *dev = port->dev; in uart_get_rs485_mode()
3594 if (!(port->rs485_supported.flags & SER_RS485_ENABLED)) in uart_get_rs485_mode()
3597 ret = device_property_read_u32_array(dev, "rs485-rts-delay", in uart_get_rs485_mode()
3600 rs485conf->delay_rts_before_send = rs485_delay[0]; in uart_get_rs485_mode()
3601 rs485conf->delay_rts_after_send = rs485_delay[1]; in uart_get_rs485_mode()
3603 rs485conf->delay_rts_before_send = 0; in uart_get_rs485_mode()
3604 rs485conf->delay_rts_after_send = 0; in uart_get_rs485_mode()
3610 * Clear full-duplex and enabled flags, set RTS polarity to active high in uart_get_rs485_mode()
3613 rs485conf->flags &= ~(SER_RS485_RX_DURING_TX | SER_RS485_ENABLED | in uart_get_rs485_mode()
3616 rs485conf->flags |= SER_RS485_RTS_ON_SEND; in uart_get_rs485_mode()
3618 if (device_property_read_bool(dev, "rs485-rx-during-tx")) in uart_get_rs485_mode()
3619 rs485conf->flags |= SER_RS485_RX_DURING_TX; in uart_get_rs485_mode()
3621 if (device_property_read_bool(dev, "linux,rs485-enabled-at-boot-time")) in uart_get_rs485_mode()
3622 rs485conf->flags |= SER_RS485_ENABLED; in uart_get_rs485_mode()
3624 if (device_property_read_bool(dev, "rs485-rts-active-low")) { in uart_get_rs485_mode()
3625 rs485conf->flags &= ~SER_RS485_RTS_ON_SEND; in uart_get_rs485_mode()
3626 rs485conf->flags |= SER_RS485_RTS_AFTER_SEND; in uart_get_rs485_mode()
3630 * Disabling termination by default is the safe choice: Else if many in uart_get_rs485_mode()
3634 desc = devm_gpiod_get_optional(dev, "rs485-term", GPIOD_OUT_LOW); in uart_get_rs485_mode()
3636 return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-term-gpios\n"); in uart_get_rs485_mode()
3637 port->rs485_term_gpio = desc; in uart_get_rs485_mode()
3638 if (port->rs485_term_gpio) in uart_get_rs485_mode()
3639 port->rs485_supported.flags |= SER_RS485_TERMINATE_BUS; in uart_get_rs485_mode()
3641 dflags = (rs485conf->flags & SER_RS485_RX_DURING_TX) ? in uart_get_rs485_mode()
3643 desc = devm_gpiod_get_optional(dev, "rs485-rx-during-tx", dflags); in uart_get_rs485_mode()
3645 return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-rx-during-tx-gpios\n"); in uart_get_rs485_mode()
3646 port->rs485_rx_during_tx_gpio = desc; in uart_get_rs485_mode()
3647 if (port->rs485_rx_during_tx_gpio) in uart_get_rs485_mode()
3648 port->rs485_supported.flags |= SER_RS485_RX_DURING_TX; in uart_get_rs485_mode()
3654 /* Compile-time assertions for serial_rs485 layout */