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_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()
248 * will be serialised by the per-port mutex.
258 if (uport->type == PORT_UNKNOWN) in uart_port_startup()
272 return -ENOMEM; in uart_port_startup()
275 if (!state->xmit.buf) { in uart_port_startup()
276 state->xmit.buf = (unsigned char *) page; in uart_port_startup()
277 uart_circ_clear(&state->xmit); in uart_port_startup()
288 retval = uport->ops->startup(uport); in uart_port_startup()
290 if (uart_console(uport) && uport->cons->cflag) { in uart_port_startup()
291 tty->termios.c_cflag = uport->cons->cflag; in uart_port_startup()
292 tty->termios.c_ispeed = uport->cons->ispeed; in uart_port_startup()
293 tty->termios.c_ospeed = uport->cons->ospeed; in uart_port_startup()
294 uport->cons->cflag = 0; in uart_port_startup()
295 uport->cons->ispeed = 0; in uart_port_startup()
296 uport->cons->ospeed = 0; in uart_port_startup()
325 struct tty_port *port = &state->port; in uart_startup()
333 set_bit(TTY_IO_ERROR, &tty->flags); in uart_startup()
341 * uart_shutdown are serialised by the per-port semaphore.
348 struct tty_port *port = &state->port; in uart_shutdown()
356 set_bit(TTY_IO_ERROR, &tty->flags); in uart_shutdown()
365 uport->cons->cflag = tty->termios.c_cflag; in uart_shutdown()
366 uport->cons->ispeed = tty->termios.c_ispeed; in uart_shutdown()
367 uport->cons->ospeed = tty->termios.c_ospeed; in uart_shutdown()
390 xmit_buf = state->xmit.buf; in uart_shutdown()
391 state->xmit.buf = NULL; in uart_shutdown()
398 * uart_update_timeout - update per-port frame timing information
407 * Locking: caller is expected to take @port->lock
416 port->frame_time = (unsigned int)DIV64_U64_ROUND_UP(temp, baud); in uart_update_timeout()
421 * uart_get_baud_rate - return baud rate for a particular port
449 upf_t flags = port->flags & UPF_SPD_MASK; in uart_get_baud_rate()
494 termios->c_cflag &= ~CBAUD; in uart_get_baud_rate()
514 max - 1, max - 1); in uart_get_baud_rate()
522 * uart_get_divisor - return uart clock divisor
542 if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) in uart_get_divisor()
543 quot = port->custom_divisor; in uart_get_divisor()
545 quot = DIV_ROUND_CLOSEST(port->uartclk, 16 * baud); in uart_get_divisor()
553 struct uart_state *state = tty->driver_data; in uart_put_char()
559 circ = &state->xmit; in uart_put_char()
561 if (!circ->buf) { in uart_put_char()
567 circ->buf[circ->head] = c; in uart_put_char()
568 circ->head = (circ->head + 1) & (UART_XMIT_SIZE - 1); in uart_put_char()
582 struct uart_state *state = tty->driver_data; in uart_write()
593 return -EL3HLT; in uart_write()
596 circ = &state->xmit; in uart_write()
597 if (!circ->buf) { in uart_write()
603 c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE); in uart_write()
608 memcpy(circ->buf + circ->head, buf, c); in uart_write()
609 circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1); in uart_write()
611 count -= c; in uart_write()
622 struct uart_state *state = tty->driver_data; in uart_write_room()
628 ret = uart_circ_chars_free(&state->xmit); in uart_write_room()
635 struct uart_state *state = tty->driver_data; in uart_chars_in_buffer()
641 ret = uart_circ_chars_pending(&state->xmit); in uart_chars_in_buffer()
648 struct uart_state *state = tty->driver_data; in uart_flush_buffer()
659 pr_debug("uart_flush_buffer(%d) called\n", tty->index); in uart_flush_buffer()
664 uart_circ_clear(&state->xmit); in uart_flush_buffer()
665 if (port->ops->flush_buffer) in uart_flush_buffer()
666 port->ops->flush_buffer(port); in uart_flush_buffer()
668 tty_port_tty_wakeup(&state->port); in uart_flush_buffer()
672 * This function performs low-level write of high-priority XON/XOFF
679 serial_port_out(uport, offset, uport->x_char); in uart_xchar_out()
680 uport->icount.tx++; in uart_xchar_out()
681 uport->x_char = 0; in uart_xchar_out()
686 * This function is used to send a high-priority XON/XOFF character to
691 struct uart_state *state = tty->driver_data; in uart_send_xchar()
699 if (port->ops->send_xchar) in uart_send_xchar()
700 port->ops->send_xchar(port, ch); in uart_send_xchar()
703 port->x_char = ch; in uart_send_xchar()
705 port->ops->start_tx(port); in uart_send_xchar()
713 struct uart_state *state = tty->driver_data; in uart_throttle()
726 if (port->status & mask) { in uart_throttle()
727 port->ops->throttle(port); in uart_throttle()
728 mask &= ~port->status; in uart_throttle()
742 struct uart_state *state = tty->driver_data; in uart_unthrottle()
755 if (port->status & mask) { in uart_unthrottle()
756 port->ops->unthrottle(port); in uart_unthrottle()
757 mask &= ~port->status; in uart_unthrottle()
773 int ret = -ENODEV; in uart_get_info()
782 mutex_lock(&port->mutex); in uart_get_info()
787 retinfo->type = uport->type; in uart_get_info()
788 retinfo->line = uport->line; in uart_get_info()
789 retinfo->port = uport->iobase; in uart_get_info()
791 retinfo->port_high = (long) uport->iobase >> HIGH_BITS_OFFSET; in uart_get_info()
792 retinfo->irq = uport->irq; in uart_get_info()
793 retinfo->flags = (__force int)uport->flags; in uart_get_info()
794 retinfo->xmit_fifo_size = uport->fifosize; in uart_get_info()
795 retinfo->baud_base = uport->uartclk / 16; in uart_get_info()
796 retinfo->close_delay = jiffies_to_msecs(port->close_delay) / 10; in uart_get_info()
797 retinfo->closing_wait = port->closing_wait == ASYNC_CLOSING_WAIT_NONE ? in uart_get_info()
799 jiffies_to_msecs(port->closing_wait) / 10; in uart_get_info()
800 retinfo->custom_divisor = uport->custom_divisor; in uart_get_info()
801 retinfo->hub6 = uport->hub6; in uart_get_info()
802 retinfo->io_type = uport->iotype; in uart_get_info()
803 retinfo->iomem_reg_shift = uport->regshift; in uart_get_info()
804 retinfo->iomem_base = (void *)(unsigned long)uport->mapbase; in uart_get_info()
808 mutex_unlock(&port->mutex); in uart_get_info()
815 struct uart_state *state = tty->driver_data; in uart_get_info_user()
816 struct tty_port *port = &state->port; in uart_get_info_user()
818 return uart_get_info(port, ss) < 0 ? -EIO : 0; in uart_get_info_user()
833 return -EIO; in uart_set_info()
835 new_port = new_info->port; in uart_set_info()
837 new_port += (unsigned long) new_info->port_high << HIGH_BITS_OFFSET; in uart_set_info()
839 new_info->irq = irq_canonicalize(new_info->irq); in uart_set_info()
840 close_delay = msecs_to_jiffies(new_info->close_delay * 10); in uart_set_info()
841 closing_wait = new_info->closing_wait == ASYNC_CLOSING_WAIT_NONE ? in uart_set_info()
843 msecs_to_jiffies(new_info->closing_wait * 10); in uart_set_info()
846 change_irq = !(uport->flags & UPF_FIXED_PORT) in uart_set_info()
847 && new_info->irq != uport->irq; in uart_set_info()
854 change_port = !(uport->flags & UPF_FIXED_PORT) in uart_set_info()
855 && (new_port != uport->iobase || in uart_set_info()
856 (unsigned long)new_info->iomem_base != uport->mapbase || in uart_set_info()
857 new_info->hub6 != uport->hub6 || in uart_set_info()
858 new_info->io_type != uport->iotype || in uart_set_info()
859 new_info->iomem_reg_shift != uport->regshift || in uart_set_info()
860 new_info->type != uport->type); in uart_set_info()
862 old_flags = uport->flags; in uart_set_info()
863 new_flags = (__force upf_t)new_info->flags; in uart_set_info()
864 old_custom_divisor = uport->custom_divisor; in uart_set_info()
867 retval = -EPERM; in uart_set_info()
869 (new_info->baud_base != uport->uartclk / 16) || in uart_set_info()
870 (close_delay != port->close_delay) || in uart_set_info()
871 (closing_wait != port->closing_wait) || in uart_set_info()
872 (new_info->xmit_fifo_size && in uart_set_info()
873 new_info->xmit_fifo_size != uport->fifosize) || in uart_set_info()
876 uport->flags = ((uport->flags & ~UPF_USR_MASK) | in uart_set_info()
878 uport->custom_divisor = new_info->custom_divisor; in uart_set_info()
891 if (uport->ops->verify_port) in uart_set_info()
892 retval = uport->ops->verify_port(uport, new_info); in uart_set_info()
894 if ((new_info->irq >= nr_irqs) || (new_info->irq < 0) || in uart_set_info()
895 (new_info->baud_base < 9600)) in uart_set_info()
896 retval = -EINVAL; in uart_set_info()
902 retval = -EBUSY; in uart_set_info()
921 old_iobase = uport->iobase; in uart_set_info()
922 old_mapbase = uport->mapbase; in uart_set_info()
923 old_type = uport->type; in uart_set_info()
924 old_hub6 = uport->hub6; in uart_set_info()
925 old_iotype = uport->iotype; in uart_set_info()
926 old_shift = uport->regshift; in uart_set_info()
931 if (old_type != PORT_UNKNOWN && uport->ops->release_port) in uart_set_info()
932 uport->ops->release_port(uport); in uart_set_info()
934 uport->iobase = new_port; in uart_set_info()
935 uport->type = new_info->type; in uart_set_info()
936 uport->hub6 = new_info->hub6; in uart_set_info()
937 uport->iotype = new_info->io_type; in uart_set_info()
938 uport->regshift = new_info->iomem_reg_shift; in uart_set_info()
939 uport->mapbase = (unsigned long)new_info->iomem_base; in uart_set_info()
944 if (uport->type != PORT_UNKNOWN && uport->ops->request_port) { in uart_set_info()
945 retval = uport->ops->request_port(uport); in uart_set_info()
947 /* Always success - Jean II */ in uart_set_info()
956 uport->iobase = old_iobase; in uart_set_info()
957 uport->type = old_type; in uart_set_info()
958 uport->hub6 = old_hub6; in uart_set_info()
959 uport->iotype = old_iotype; in uart_set_info()
960 uport->regshift = old_shift; in uart_set_info()
961 uport->mapbase = old_mapbase; in uart_set_info()
964 retval = uport->ops->request_port(uport); in uart_set_info()
970 uport->type = PORT_UNKNOWN; in uart_set_info()
975 retval = -EBUSY; in uart_set_info()
978 /* Added to return the correct error -Ram Gupta */ in uart_set_info()
984 uport->irq = new_info->irq; in uart_set_info()
985 if (!(uport->flags & UPF_FIXED_PORT)) in uart_set_info()
986 uport->uartclk = new_info->baud_base * 16; in uart_set_info()
987 uport->flags = (uport->flags & ~UPF_CHANGE_MASK) | in uart_set_info()
989 uport->custom_divisor = new_info->custom_divisor; in uart_set_info()
990 port->close_delay = close_delay; in uart_set_info()
991 port->closing_wait = closing_wait; in uart_set_info()
992 if (new_info->xmit_fifo_size) in uart_set_info()
993 uport->fifosize = new_info->xmit_fifo_size; in uart_set_info()
997 if (uport->type == PORT_UNKNOWN) in uart_set_info()
1000 if (((old_flags ^ uport->flags) & UPF_SPD_MASK) || in uart_set_info()
1001 old_custom_divisor != uport->custom_divisor) { in uart_set_info()
1006 if (uport->flags & UPF_SPD_MASK) { in uart_set_info()
1007 dev_notice_ratelimited(uport->dev, in uart_set_info()
1009 current->comm, in uart_set_info()
1010 tty_name(port->tty)); in uart_set_info()
1027 struct uart_state *state = tty->driver_data; in uart_set_info_user()
1028 struct tty_port *port = &state->port; in uart_set_info_user()
1031 down_write(&tty->termios_rwsem); in uart_set_info_user()
1033 * This semaphore protects port->count. It is also in uart_set_info_user()
1039 mutex_lock(&port->mutex); in uart_set_info_user()
1041 mutex_unlock(&port->mutex); in uart_set_info_user()
1042 up_write(&tty->termios_rwsem); in uart_set_info_user()
1047 * uart_get_lsr_info - get line status register info
1058 result = uport->ops->tx_empty(uport); in uart_get_lsr_info()
1066 if (uport->x_char || in uart_get_lsr_info()
1067 ((uart_circ_chars_pending(&state->xmit) > 0) && in uart_get_lsr_info()
1076 struct uart_state *state = tty->driver_data; in uart_tiocmget()
1077 struct tty_port *port = &state->port; in uart_tiocmget()
1079 int result = -EIO; in uart_tiocmget()
1081 mutex_lock(&port->mutex); in uart_tiocmget()
1088 result = uport->mctrl; in uart_tiocmget()
1089 result |= uport->ops->get_mctrl(uport); in uart_tiocmget()
1093 mutex_unlock(&port->mutex); in uart_tiocmget()
1100 struct uart_state *state = tty->driver_data; in uart_tiocmset()
1101 struct tty_port *port = &state->port; in uart_tiocmset()
1103 int ret = -EIO; in uart_tiocmset()
1105 mutex_lock(&port->mutex); in uart_tiocmset()
1115 mutex_unlock(&port->mutex); in uart_tiocmset()
1121 struct uart_state *state = tty->driver_data; in uart_break_ctl()
1122 struct tty_port *port = &state->port; in uart_break_ctl()
1124 int ret = -EIO; in uart_break_ctl()
1126 mutex_lock(&port->mutex); in uart_break_ctl()
1131 if (uport->type != PORT_UNKNOWN && uport->ops->break_ctl) in uart_break_ctl()
1132 uport->ops->break_ctl(uport, break_state); in uart_break_ctl()
1135 mutex_unlock(&port->mutex); in uart_break_ctl()
1141 struct tty_port *port = &state->port; in uart_do_autoconfig()
1146 return -EPERM; in uart_do_autoconfig()
1149 * Take the per-port semaphore. This prevents count from in uart_do_autoconfig()
1151 * we're auto-configuring. in uart_do_autoconfig()
1153 if (mutex_lock_interruptible(&port->mutex)) in uart_do_autoconfig()
1154 return -ERESTARTSYS; in uart_do_autoconfig()
1158 ret = -EIO; in uart_do_autoconfig()
1162 ret = -EBUSY; in uart_do_autoconfig()
1170 if (uport->type != PORT_UNKNOWN && uport->ops->release_port) in uart_do_autoconfig()
1171 uport->ops->release_port(uport); in uart_do_autoconfig()
1174 if (uport->flags & UPF_AUTO_IRQ) in uart_do_autoconfig()
1181 uport->ops->config_port(uport, flags); in uart_do_autoconfig()
1190 mutex_unlock(&port->mutex); in uart_do_autoconfig()
1199 if (uport->ops->enable_ms) in uart_enable_ms()
1200 uport->ops->enable_ms(uport); in uart_enable_ms()
1205 * - mask passed in arg for lines of interest
1215 struct tty_port *port = &state->port; in uart_wait_modem_status()
1225 return -EIO; in uart_wait_modem_status()
1227 memcpy(&cprev, &uport->icount, sizeof(struct uart_icount)); in uart_wait_modem_status()
1231 add_wait_queue(&port->delta_msr_wait, &wait); in uart_wait_modem_status()
1234 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); in uart_wait_modem_status()
1251 ret = -ERESTARTSYS; in uart_wait_modem_status()
1258 remove_wait_queue(&port->delta_msr_wait, &wait); in uart_wait_modem_status()
1267 * NB: both 1->0 and 0->1 transitions are counted except for
1268 * RI where only 0->1 is counted.
1273 struct uart_state *state = tty->driver_data; in uart_get_icount()
1279 return -EIO; in uart_get_icount()
1281 memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); in uart_get_icount()
1285 icount->cts = cnow.cts; in uart_get_icount()
1286 icount->dsr = cnow.dsr; in uart_get_icount()
1287 icount->rng = cnow.rng; in uart_get_icount()
1288 icount->dcd = cnow.dcd; in uart_get_icount()
1289 icount->rx = cnow.rx; in uart_get_icount()
1290 icount->tx = cnow.tx; in uart_get_icount()
1291 icount->frame = cnow.frame; in uart_get_icount()
1292 icount->overrun = cnow.overrun; in uart_get_icount()
1293 icount->parity = cnow.parity; in uart_get_icount()
1294 icount->brk = cnow.brk; in uart_get_icount()
1295 icount->buf_overrun = cnow.buf_overrun; in uart_get_icount()
1306 u32 flags = rs485->flags; in uart_check_rs485_flags()
1308 /* Don't return -EINVAL for unsupported legacy flags */ in uart_check_rs485_flags()
1313 * the driver, return -EINVAL. in uart_check_rs485_flags()
1315 if (flags & ~port->rs485_supported.flags) in uart_check_rs485_flags()
1316 return -EINVAL; in uart_check_rs485_flags()
1319 if (!(rs485->flags & SER_RS485_ADDRB) && in uart_check_rs485_flags()
1320 (rs485->flags & (SER_RS485_ADDR_RECV|SER_RS485_ADDR_DEST))) in uart_check_rs485_flags()
1321 return -EINVAL; in uart_check_rs485_flags()
1324 if (!(rs485->flags & SER_RS485_ADDR_RECV) && rs485->addr_recv) in uart_check_rs485_flags()
1325 return -EINVAL; in uart_check_rs485_flags()
1326 if (!(rs485->flags & SER_RS485_ADDR_DEST) && rs485->addr_dest) in uart_check_rs485_flags()
1327 return -EINVAL; in uart_check_rs485_flags()
1335 if (!port->rs485_supported.delay_rts_before_send) { in uart_sanitize_serial_rs485_delays()
1336 if (rs485->delay_rts_before_send) { in uart_sanitize_serial_rs485_delays()
1337 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1339 port->name, port->line); in uart_sanitize_serial_rs485_delays()
1341 rs485->delay_rts_before_send = 0; in uart_sanitize_serial_rs485_delays()
1342 } else if (rs485->delay_rts_before_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1343 rs485->delay_rts_before_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1344 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1346 port->name, port->line, rs485->delay_rts_before_send); in uart_sanitize_serial_rs485_delays()
1349 if (!port->rs485_supported.delay_rts_after_send) { in uart_sanitize_serial_rs485_delays()
1350 if (rs485->delay_rts_after_send) { in uart_sanitize_serial_rs485_delays()
1351 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1353 port->name, port->line); in uart_sanitize_serial_rs485_delays()
1355 rs485->delay_rts_after_send = 0; in uart_sanitize_serial_rs485_delays()
1356 } else if (rs485->delay_rts_after_send > RS485_MAX_RTS_DELAY) { in uart_sanitize_serial_rs485_delays()
1357 rs485->delay_rts_after_send = RS485_MAX_RTS_DELAY; in uart_sanitize_serial_rs485_delays()
1358 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485_delays()
1360 port->name, port->line, rs485->delay_rts_after_send); in uart_sanitize_serial_rs485_delays()
1366 u32 supported_flags = port->rs485_supported.flags; in uart_sanitize_serial_rs485()
1368 if (!(rs485->flags & SER_RS485_ENABLED)) { in uart_sanitize_serial_rs485()
1374 if (rs485->flags & SER_RS485_MODE_RS422) { in uart_sanitize_serial_rs485()
1375 rs485->flags &= (SER_RS485_ENABLED | SER_RS485_MODE_RS422 | SER_RS485_TERMINATE_BUS); in uart_sanitize_serial_rs485()
1379 rs485->flags &= supported_flags; in uart_sanitize_serial_rs485()
1382 if (!(rs485->flags & SER_RS485_RTS_ON_SEND) == in uart_sanitize_serial_rs485()
1383 !(rs485->flags & SER_RS485_RTS_AFTER_SEND)) { in uart_sanitize_serial_rs485()
1385 rs485->flags |= SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1386 rs485->flags &= ~SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1388 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485()
1390 port->name, port->line); in uart_sanitize_serial_rs485()
1392 rs485->flags |= SER_RS485_RTS_AFTER_SEND; in uart_sanitize_serial_rs485()
1393 rs485->flags &= ~SER_RS485_RTS_ON_SEND; in uart_sanitize_serial_rs485()
1395 dev_warn_ratelimited(port->dev, in uart_sanitize_serial_rs485()
1397 port->name, port->line); in uart_sanitize_serial_rs485()
1404 memset(rs485->padding0, 0, sizeof(rs485->padding0)); in uart_sanitize_serial_rs485()
1405 memset(rs485->padding1, 0, sizeof(rs485->padding1)); in uart_sanitize_serial_rs485()
1411 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_termination()
1414 gpiod_set_value_cansleep(port->rs485_term_gpio, in uart_set_rs485_termination()
1415 !!(rs485->flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_termination()
1421 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_set_rs485_rx_during_tx()
1424 gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, in uart_set_rs485_rx_during_tx()
1425 !!(rs485->flags & SER_RS485_RX_DURING_TX)); in uart_set_rs485_rx_during_tx()
1430 struct serial_rs485 *rs485 = &port->rs485; in uart_rs485_config()
1434 if (!(rs485->flags & SER_RS485_ENABLED)) in uart_rs485_config()
1442 ret = port->rs485_config(port, NULL, rs485); in uart_rs485_config()
1446 /* unset GPIOs */ in uart_rs485_config()
1447 gpiod_set_value_cansleep(port->rs485_term_gpio, 0); in uart_rs485_config()
1448 gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, 0); in uart_rs485_config()
1461 aux = port->rs485; in uart_get_rs485_config()
1465 return -EFAULT; in uart_get_rs485_config()
1477 if (!(port->rs485_supported.flags & SER_RS485_ENABLED)) in uart_set_rs485_config()
1478 return -ENOTTY; in uart_set_rs485_config()
1481 return -EFAULT; in uart_set_rs485_config()
1491 ret = port->rs485_config(port, &tty->termios, &rs485); in uart_set_rs485_config()
1493 port->rs485 = rs485; in uart_set_rs485_config()
1497 port->ops->set_mctrl(port, port->mctrl); in uart_set_rs485_config()
1502 gpiod_set_value_cansleep(port->rs485_term_gpio, in uart_set_rs485_config()
1503 !!(port->rs485.flags & SER_RS485_TERMINATE_BUS)); in uart_set_rs485_config()
1504 gpiod_set_value_cansleep(port->rs485_rx_during_tx_gpio, in uart_set_rs485_config()
1505 !!(port->rs485.flags & SER_RS485_RX_DURING_TX)); in uart_set_rs485_config()
1509 if (copy_to_user(rs485_user, &port->rs485, sizeof(port->rs485))) in uart_set_rs485_config()
1510 return -EFAULT; in uart_set_rs485_config()
1521 if (!port->iso7816_config) in uart_get_iso7816_config()
1522 return -ENOTTY; in uart_get_iso7816_config()
1525 aux = port->iso7816; in uart_get_iso7816_config()
1529 return -EFAULT; in uart_get_iso7816_config()
1541 if (!port->iso7816_config) in uart_set_iso7816_config()
1542 return -ENOTTY; in uart_set_iso7816_config()
1545 return -EFAULT; in uart_set_iso7816_config()
1553 return -EINVAL; in uart_set_iso7816_config()
1556 ret = port->iso7816_config(port, &iso7816); in uart_set_iso7816_config()
1561 if (copy_to_user(iso7816_user, &port->iso7816, sizeof(port->iso7816))) in uart_set_iso7816_config()
1562 return -EFAULT; in uart_set_iso7816_config()
1573 struct uart_state *state = tty->driver_data; in uart_ioctl()
1574 struct tty_port *port = &state->port; in uart_ioctl()
1577 int ret = -ENOIOCTLCMD; in uart_ioctl()
1585 down_write(&tty->termios_rwsem); in uart_ioctl()
1587 up_write(&tty->termios_rwsem); in uart_ioctl()
1591 if (ret != -ENOIOCTLCMD) in uart_ioctl()
1595 ret = -EIO; in uart_ioctl()
1608 if (ret != -ENOIOCTLCMD) in uart_ioctl()
1613 down_write(&tty->termios_rwsem); in uart_ioctl()
1615 mutex_lock(&port->mutex); in uart_ioctl()
1619 ret = -EIO; in uart_ioctl()
1642 ret = uart_set_iso7816_config(state->uart_port, uarg); in uart_ioctl()
1646 ret = uart_get_iso7816_config(state->uart_port, uarg); in uart_ioctl()
1649 if (uport->ops->ioctl) in uart_ioctl()
1650 ret = uport->ops->ioctl(uport, cmd, arg); in uart_ioctl()
1654 mutex_unlock(&port->mutex); in uart_ioctl()
1656 up_write(&tty->termios_rwsem); in uart_ioctl()
1663 struct uart_state *state = tty->driver_data; in uart_set_ldisc()
1665 struct tty_port *port = &state->port; in uart_set_ldisc()
1670 mutex_lock(&state->port.mutex); in uart_set_ldisc()
1672 if (uport && uport->ops->set_ldisc) in uart_set_ldisc()
1673 uport->ops->set_ldisc(uport, &tty->termios); in uart_set_ldisc()
1674 mutex_unlock(&state->port.mutex); in uart_set_ldisc()
1680 struct uart_state *state = tty->driver_data; in uart_set_termios()
1682 unsigned int cflag = tty->termios.c_cflag; in uart_set_termios()
1686 mutex_lock(&state->port.mutex); in uart_set_termios()
1695 if (uport->flags & UPF_SOFT_FLOW) { in uart_set_termios()
1698 tty->termios.c_cc[VSTART] != old_termios->c_cc[VSTART] || in uart_set_termios()
1699 tty->termios.c_cc[VSTOP] != old_termios->c_cc[VSTOP]; in uart_set_termios()
1708 if ((cflag ^ old_termios->c_cflag) == 0 && in uart_set_termios()
1709 tty->termios.c_ospeed == old_termios->c_ospeed && in uart_set_termios()
1710 tty->termios.c_ispeed == old_termios->c_ispeed && in uart_set_termios()
1711 ((tty->termios.c_iflag ^ old_termios->c_iflag) & iflag_mask) == 0 && in uart_set_termios()
1718 cflag = tty->termios.c_cflag; in uart_set_termios()
1721 if (((old_termios->c_cflag & CBAUD) != B0) && ((cflag & CBAUD) == B0)) in uart_set_termios()
1724 else if (((old_termios->c_cflag & CBAUD) == B0) && ((cflag & CBAUD) != B0)) { in uart_set_termios()
1732 mutex_unlock(&state->port.mutex); 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()
1775 uport->ops->stop_rx(uport); in uart_tty_port_shutdown()
1791 buf = state->xmit.buf; in uart_tty_port_shutdown()
1792 state->xmit.buf = NULL; in uart_tty_port_shutdown()
1802 struct uart_state *state = tty->driver_data; in uart_wait_until_sent()
1810 if (port->type == PORT_UNKNOWN || port->fifosize == 0) { in uart_wait_until_sent()
1821 * the NIST-PCTS. in uart_wait_until_sent()
1823 char_time = max(nsecs_to_jiffies(port->frame_time / 5), 1UL); in uart_wait_until_sent()
1846 port->line, jiffies, expire); in uart_wait_until_sent()
1853 while (!port->ops->tx_empty(port)) { in uart_wait_until_sent()
1870 struct uart_state *state = tty->driver_data; in uart_hangup()
1871 struct tty_port *port = &state->port; in uart_hangup()
1875 pr_debug("uart_hangup(%d)\n", tty->index); in uart_hangup()
1877 mutex_lock(&port->mutex); in uart_hangup()
1884 spin_lock_irqsave(&port->lock, flags); in uart_hangup()
1885 port->count = 0; in uart_hangup()
1886 spin_unlock_irqrestore(&port->lock, flags); in uart_hangup()
1891 wake_up_interruptible(&port->open_wait); in uart_hangup()
1892 wake_up_interruptible(&port->delta_msr_wait); in uart_hangup()
1894 mutex_unlock(&port->mutex); in uart_hangup()
1910 wake_up_interruptible(&port->delta_msr_wait); in uart_port_shutdown()
1914 uport->ops->shutdown(uport); in uart_port_shutdown()
1917 synchronize_irq(uport->irq); in uart_port_shutdown()
1931 * raised -- but report carrier raised if it does anyway so open will in uart_carrier_raised()
1938 mctrl = uport->ops->get_mctrl(uport); in uart_carrier_raised()
1959 struct uart_driver *drv = driver->driver_state; in uart_install()
1960 struct uart_state *state = drv->state + tty->index; in uart_install()
1962 tty->driver_data = state; in uart_install()
1979 struct uart_state *state = tty->driver_data; in uart_open()
1982 retval = tty_port_open(&state->port, tty, filp); in uart_open()
1996 if (!uport || uport->flags & UPF_DEAD) in uart_port_activate()
1997 return -ENXIO; in uart_port_activate()
2013 if (port->ops->type) in uart_type()
2014 str = port->ops->type(port); in uart_type()
2026 struct uart_state *state = drv->state + i; in uart_line_info()
2027 struct tty_port *port = &state->port; in uart_line_info()
2034 mutex_lock(&port->mutex); in uart_line_info()
2039 mmio = uport->iotype >= UPIO_MEM; in uart_line_info()
2041 uport->line, uart_type(uport), in uart_line_info()
2043 mmio ? (unsigned long long)uport->mapbase in uart_line_info()
2044 : (unsigned long long)uport->iobase, in uart_line_info()
2045 uport->irq); in uart_line_info()
2047 if (uport->type == PORT_UNKNOWN) { in uart_line_info()
2053 pm_state = state->pm_state; in uart_line_info()
2057 status = uport->ops->get_mctrl(uport); in uart_line_info()
2063 uport->icount.tx, uport->icount.rx); in uart_line_info()
2064 if (uport->icount.frame) in uart_line_info()
2065 seq_printf(m, " fe:%d", uport->icount.frame); in uart_line_info()
2066 if (uport->icount.parity) in uart_line_info()
2067 seq_printf(m, " pe:%d", uport->icount.parity); in uart_line_info()
2068 if (uport->icount.brk) in uart_line_info()
2069 seq_printf(m, " brk:%d", uport->icount.brk); in uart_line_info()
2070 if (uport->icount.overrun) in uart_line_info()
2071 seq_printf(m, " oe:%d", uport->icount.overrun); in uart_line_info()
2072 if (uport->icount.buf_overrun) in uart_line_info()
2073 seq_printf(m, " bo:%d", uport->icount.buf_overrun); in uart_line_info()
2076 if (uport->mctrl & (bit)) \ in uart_line_info()
2077 strncat(stat_buf, (str), sizeof(stat_buf) - \ in uart_line_info()
2078 strlen(stat_buf) - 2) in uart_line_info()
2081 strncat(stat_buf, (str), sizeof(stat_buf) - \ in uart_line_info()
2082 strlen(stat_buf) - 2) in uart_line_info()
2101 mutex_unlock(&port->mutex); in uart_line_info()
2106 struct tty_driver *ttydrv = m->private; in uart_proc_show()
2107 struct uart_driver *drv = ttydrv->driver_state; in uart_proc_show()
2111 for (i = 0; i < drv->nr; i++) in uart_proc_show()
2119 spin_lock_init(&port->lock); in uart_port_spin_lock_init()
2120 lockdep_set_class(&port->lock, &port_lock_key); in uart_port_spin_lock_init()
2125 * uart_console_write - write a console message to a serial port
2146 * uart_get_console - get uart port for console
2152 * Check whether an invalid uart number has been specified (as @co->index), and
2158 int idx = co->index; in uart_get_console()
2167 co->index = idx; in uart_get_console()
2173 * uart_parse_earlycon - Parse earlycon options
2189 * Returns: 0 on success or -%EINVAL on failure
2216 return -EINVAL; in uart_parse_earlycon()
2234 * uart_parse_options - Parse serial port baud/parity/bits/flow control.
2257 *bits = *s++ - '0'; in uart_parse_options()
2264 * uart_set_options - setup the serial console parameters
2268 * @parity: parity character - 'n' (none), 'o' (odd), 'e' (even)
2270 * @flow: flow control character - 'r' (rts)
2273 * early initialization of the serial-console lock.
2283 * Ensure that the serial-console lock is initialised early. in uart_set_options()
2285 * Note that the console-registered check is needed because in uart_set_options()
2289 if (!uart_console_registered_locked(port) && !port->console_reinit) in uart_set_options()
2318 port->mctrl |= TIOCM_DTR; in uart_set_options()
2320 port->ops->set_termios(port, &termios, &dummy); in uart_set_options()
2326 co->cflag = termios.c_cflag; in uart_set_options()
2327 co->ispeed = termios.c_ispeed; in uart_set_options()
2328 co->ospeed = termios.c_ospeed; in uart_set_options()
2337 * uart_change_pm - set power state of the port
2342 * Locking: port->mutex has to be held
2349 if (state->pm_state != pm_state) { in uart_change_pm()
2350 if (port && port->ops->pm) in uart_change_pm()
2351 port->ops->pm(port, pm_state, state->pm_state); in uart_change_pm()
2352 state->pm_state = pm_state; in uart_change_pm()
2364 struct tty_driver *tty_drv = match->driver->tty_driver; in serial_match_port()
2365 dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) + in serial_match_port()
2366 match->port->line; in serial_match_port()
2368 return dev->devt == devt; /* Actually, only one tty per port */ in serial_match_port()
2373 struct uart_state *state = drv->state + uport->line; in uart_suspend_port()
2374 struct tty_port *port = &state->port; in uart_suspend_port()
2378 mutex_lock(&port->mutex); in uart_suspend_port()
2380 tty_dev = device_find_child(&uport->port_dev->dev, &match, serial_match_port); in uart_suspend_port()
2382 enable_irq_wake(uport->irq); in uart_suspend_port()
2384 mutex_unlock(&port->mutex); in uart_suspend_port()
2393 * able to Re-start_rx later. in uart_suspend_port()
2396 if (uport->ops->start_rx) { in uart_suspend_port()
2398 uport->ops->stop_rx(uport); in uart_suspend_port()
2404 uport->suspended = 1; in uart_suspend_port()
2407 const struct uart_ops *ops = uport->ops; in uart_suspend_port()
2415 ops->stop_tx(uport); in uart_suspend_port()
2416 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_suspend_port()
2417 ops->set_mctrl(uport, 0); in uart_suspend_port()
2419 mctrl = uport->mctrl; in uart_suspend_port()
2420 uport->mctrl = 0; in uart_suspend_port()
2421 ops->stop_rx(uport); in uart_suspend_port()
2427 for (tries = 3; !ops->tx_empty(uport) && tries; tries--) in uart_suspend_port()
2430 dev_err(uport->dev, "%s: Unable to drain transmitter\n", in uart_suspend_port()
2431 uport->name); in uart_suspend_port()
2433 ops->shutdown(uport); in uart_suspend_port()
2434 uport->mctrl = mctrl; in uart_suspend_port()
2441 console_stop(uport->cons); in uart_suspend_port()
2445 mutex_unlock(&port->mutex); in uart_suspend_port()
2453 struct uart_state *state = drv->state + uport->line; in uart_resume_port()
2454 struct tty_port *port = &state->port; in uart_resume_port()
2459 mutex_lock(&port->mutex); in uart_resume_port()
2461 tty_dev = device_find_child(&uport->port_dev->dev, &match, serial_match_port); in uart_resume_port()
2462 if (!uport->suspended && device_may_wakeup(tty_dev)) { in uart_resume_port()
2463 if (irqd_is_wakeup_set(irq_get_irq_data((uport->irq)))) in uart_resume_port()
2464 disable_irq_wake(uport->irq); in uart_resume_port()
2466 mutex_unlock(&port->mutex); in uart_resume_port()
2470 uport->suspended = 0; in uart_resume_port()
2473 * Re-enable the console device after suspending. in uart_resume_port()
2480 termios.c_cflag = uport->cons->cflag; in uart_resume_port()
2481 termios.c_ispeed = uport->cons->ispeed; in uart_resume_port()
2482 termios.c_ospeed = uport->cons->ospeed; in uart_resume_port()
2487 if (port->tty && termios.c_cflag == 0) in uart_resume_port()
2488 termios = port->tty->termios; in uart_resume_port()
2492 uport->ops->set_termios(uport, &termios, NULL); in uart_resume_port()
2493 if (!console_suspend_enabled && uport->ops->start_rx) { in uart_resume_port()
2495 uport->ops->start_rx(uport); in uart_resume_port()
2499 console_start(uport->cons); in uart_resume_port()
2503 const struct uart_ops *ops = uport->ops; in uart_resume_port()
2508 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2509 ops->set_mctrl(uport, 0); in uart_resume_port()
2513 struct tty_struct *tty = port->tty; in uart_resume_port()
2515 ret = ops->startup(uport); in uart_resume_port()
2521 if (!(uport->rs485.flags & SER_RS485_ENABLED)) in uart_resume_port()
2522 ops->set_mctrl(uport, uport->mctrl); in uart_resume_port()
2523 ops->start_tx(uport); in uart_resume_port()
2528 * Failed to resume - maybe hardware went away? in uart_resume_port()
2539 mutex_unlock(&port->mutex); in uart_resume_port()
2550 switch (port->iotype) { in uart_report_port()
2552 snprintf(address, sizeof(address), "I/O 0x%lx", port->iobase); in uart_report_port()
2556 "I/O 0x%lx offset 0x%x", port->iobase, port->hub6); in uart_report_port()
2565 "MMIO 0x%llx", (unsigned long long)port->mapbase); in uart_report_port()
2573 port->dev ? dev_name(port->dev) : "", in uart_report_port()
2574 port->dev ? ": " : "", in uart_report_port()
2575 port->name, in uart_report_port()
2576 address, port->irq, port->uartclk / 16, uart_type(port)); in uart_report_port()
2579 if (port->flags & UPF_MAGIC_MULTIPLIER) in uart_report_port()
2581 port->dev ? dev_name(port->dev) : "", in uart_report_port()
2582 port->dev ? ": " : "", in uart_report_port()
2583 port->name, in uart_report_port()
2584 port->uartclk / 8, port->uartclk / 4); in uart_report_port()
2596 if (!port->iobase && !port->mapbase && !port->membase) in uart_configure_port()
2604 if (port->flags & UPF_AUTO_IRQ) in uart_configure_port()
2606 if (port->flags & UPF_BOOT_AUTOCONF) { in uart_configure_port()
2607 if (!(port->flags & UPF_FIXED_TYPE)) { in uart_configure_port()
2608 port->type = PORT_UNKNOWN; in uart_configure_port()
2611 port->ops->config_port(port, flags); in uart_configure_port()
2614 if (port->type != PORT_UNKNOWN) { in uart_configure_port()
2623 * Ensure that the modem control lines are de-activated. in uart_configure_port()
2628 port->mctrl &= TIOCM_DTR; in uart_configure_port()
2629 if (!(port->rs485.flags & SER_RS485_ENABLED)) in uart_configure_port()
2630 port->ops->set_mctrl(port, port->mctrl); in uart_configure_port()
2637 * successfully registered yet, try to re-register it. in uart_configure_port()
2640 if (port->cons && !console_is_registered(port->cons)) in uart_configure_port()
2641 register_console(port->cons); in uart_configure_port()
2656 struct uart_driver *drv = driver->driver_state; in uart_poll_init()
2657 struct uart_state *state = drv->state + line; in uart_poll_init()
2667 tport = &state->port; in uart_poll_init()
2668 mutex_lock(&tport->mutex); in uart_poll_init()
2671 if (!port || port->type == PORT_UNKNOWN || in uart_poll_init()
2672 !(port->ops->poll_get_char && port->ops->poll_put_char)) { in uart_poll_init()
2673 ret = -1; in uart_poll_init()
2677 pm_state = state->pm_state; in uart_poll_init()
2680 if (port->ops->poll_init) { in uart_poll_init()
2683 * e.g. state->xmit is still uninitialized. in uart_poll_init()
2686 ret = port->ops->poll_init(port); in uart_poll_init()
2698 mutex_unlock(&tport->mutex); in uart_poll_init()
2704 struct uart_driver *drv = driver->driver_state; in uart_poll_get_char()
2705 struct uart_state *state = drv->state + line; in uart_poll_get_char()
2707 int ret = -1; in uart_poll_get_char()
2711 ret = port->ops->poll_get_char(port); in uart_poll_get_char()
2720 struct uart_driver *drv = driver->driver_state; in uart_poll_put_char()
2721 struct uart_state *state = drv->state + line; in uart_poll_put_char()
2729 port->ops->poll_put_char(port, '\r'); in uart_poll_put_char()
2730 port->ops->poll_put_char(port, ch); in uart_poll_put_char()
2779 * uart_register_driver - register a driver with the uart core layer
2783 * tty layer, and initialise the core driver per-port state.
2788 * @drv->port should be %NULL, and the per-port structures should be registered
2796 int i, retval = -ENOMEM; in uart_register_driver()
2798 BUG_ON(drv->state); in uart_register_driver()
2804 drv->state = kcalloc(drv->nr, sizeof(struct uart_state), GFP_KERNEL); in uart_register_driver()
2805 if (!drv->state) in uart_register_driver()
2808 normal = tty_alloc_driver(drv->nr, TTY_DRIVER_REAL_RAW | in uart_register_driver()
2815 drv->tty_driver = normal; in uart_register_driver()
2817 normal->driver_name = drv->driver_name; in uart_register_driver()
2818 normal->name = drv->dev_name; in uart_register_driver()
2819 normal->major = drv->major; in uart_register_driver()
2820 normal->minor_start = drv->minor; in uart_register_driver()
2821 normal->type = TTY_DRIVER_TYPE_SERIAL; in uart_register_driver()
2822 normal->subtype = SERIAL_TYPE_NORMAL; in uart_register_driver()
2823 normal->init_termios = tty_std_termios; in uart_register_driver()
2824 normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL; in uart_register_driver()
2825 normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600; in uart_register_driver()
2826 normal->driver_state = drv; in uart_register_driver()
2832 for (i = 0; i < drv->nr; i++) { in uart_register_driver()
2833 struct uart_state *state = drv->state + i; in uart_register_driver()
2834 struct tty_port *port = &state->port; in uart_register_driver()
2837 port->ops = &uart_port_ops; in uart_register_driver()
2844 for (i = 0; i < drv->nr; i++) in uart_register_driver()
2845 tty_port_destroy(&drv->state[i].port); in uart_register_driver()
2848 kfree(drv->state); in uart_register_driver()
2855 * uart_unregister_driver - remove a driver from the uart core layer
2860 * registered them with uart_add_one_port(). (I.e. @drv->port is %NULL.)
2866 struct tty_driver *p = drv->tty_driver; in uart_unregister_driver()
2871 for (i = 0; i < drv->nr; i++) in uart_unregister_driver()
2872 tty_port_destroy(&drv->state[i].port); in uart_unregister_driver()
2873 kfree(drv->state); in uart_unregister_driver()
2874 drv->state = NULL; in uart_unregister_driver()
2875 drv->tty_driver = NULL; in uart_unregister_driver()
2881 struct uart_driver *p = co->data; in uart_console_device()
2882 *index = co->index; in uart_console_device()
2883 return p->tty_driver; in uart_console_device()
3029 mutex_lock(&port->mutex); in console_show()
3033 mutex_unlock(&port->mutex); in console_show()
3051 mutex_lock(&port->mutex); in console_store()
3056 ret = unregister_console(uport->cons); in console_store()
3059 uport->console_reinit = 1; in console_store()
3060 register_console(uport->cons); in console_store()
3062 ret = -ENOENT; in console_store()
3066 ret = -ENXIO; in console_store()
3068 mutex_unlock(&port->mutex); in console_store()
3111 * serial_core_add_one_port - attach a driver-defined port structure
3130 if (uport->line >= drv->nr) in serial_core_add_one_port()
3131 return -EINVAL; in serial_core_add_one_port()
3133 state = drv->state + uport->line; in serial_core_add_one_port()
3134 port = &state->port; in serial_core_add_one_port()
3136 mutex_lock(&port->mutex); in serial_core_add_one_port()
3137 if (state->uart_port) { in serial_core_add_one_port()
3138 ret = -EINVAL; in serial_core_add_one_port()
3143 atomic_set(&state->refcount, 1); in serial_core_add_one_port()
3144 init_waitqueue_head(&state->remove_wait); in serial_core_add_one_port()
3145 state->uart_port = uport; in serial_core_add_one_port()
3146 uport->state = state; in serial_core_add_one_port()
3148 state->pm_state = UART_PM_STATE_UNDEFINED; in serial_core_add_one_port()
3149 uport->cons = drv->cons; in serial_core_add_one_port()
3150 uport->minor = drv->tty_driver->minor_start + uport->line; in serial_core_add_one_port()
3151 uport->name = kasprintf(GFP_KERNEL, "%s%d", drv->dev_name, in serial_core_add_one_port()
3152 drv->tty_driver->name_base + uport->line); in serial_core_add_one_port()
3153 if (!uport->name) { in serial_core_add_one_port()
3154 ret = -ENOMEM; in serial_core_add_one_port()
3165 if (uport->cons && uport->dev) in serial_core_add_one_port()
3166 of_console_check(uport->dev->of_node, uport->cons->name, uport->line); in serial_core_add_one_port()
3168 tty_port_link_device(port, drv->tty_driver, uport->line); in serial_core_add_one_port()
3171 port->console = uart_console(uport); in serial_core_add_one_port()
3174 if (uport->attr_group) in serial_core_add_one_port()
3177 uport->tty_groups = kcalloc(num_groups, sizeof(*uport->tty_groups), in serial_core_add_one_port()
3179 if (!uport->tty_groups) { in serial_core_add_one_port()
3180 ret = -ENOMEM; in serial_core_add_one_port()
3183 uport->tty_groups[0] = &tty_dev_attr_group; in serial_core_add_one_port()
3184 if (uport->attr_group) in serial_core_add_one_port()
3185 uport->tty_groups[1] = uport->attr_group; in serial_core_add_one_port()
3191 tty_dev = tty_port_register_device_attr_serdev(port, drv->tty_driver, in serial_core_add_one_port()
3192 uport->line, uport->dev, &uport->port_dev->dev, port, in serial_core_add_one_port()
3193 uport->tty_groups); in serial_core_add_one_port()
3197 dev_err(uport->dev, "Cannot register tty device on line %d\n", in serial_core_add_one_port()
3198 uport->line); in serial_core_add_one_port()
3202 mutex_unlock(&port->mutex); in serial_core_add_one_port()
3208 * serial_core_remove_one_port - detach a driver defined port structure
3215 * driver. No further calls will be made to the low-level code for this port.
3221 struct uart_state *state = drv->state + uport->line; in serial_core_remove_one_port()
3222 struct tty_port *port = &state->port; in serial_core_remove_one_port()
3226 mutex_lock(&port->mutex); in serial_core_remove_one_port()
3229 dev_alert(uport->dev, "Removing wrong port: %p != %p\n", in serial_core_remove_one_port()
3233 mutex_unlock(&port->mutex); in serial_core_remove_one_port()
3236 mutex_unlock(&port->mutex); in serial_core_remove_one_port()
3241 tty_port_unregister_device(port, drv->tty_driver, uport->line); in serial_core_remove_one_port()
3245 tty_vhangup(port->tty); in serial_core_remove_one_port()
3253 unregister_console(uport->cons); in serial_core_remove_one_port()
3258 if (uport->type != PORT_UNKNOWN && uport->ops->release_port) in serial_core_remove_one_port()
3259 uport->ops->release_port(uport); in serial_core_remove_one_port()
3260 kfree(uport->tty_groups); in serial_core_remove_one_port()
3261 kfree(uport->name); in serial_core_remove_one_port()
3266 uport->type = PORT_UNKNOWN; in serial_core_remove_one_port()
3267 uport->port_dev = NULL; in serial_core_remove_one_port()
3269 mutex_lock(&port->mutex); in serial_core_remove_one_port()
3270 WARN_ON(atomic_dec_return(&state->refcount) < 0); in serial_core_remove_one_port()
3271 wait_event(state->remove_wait, !atomic_read(&state->refcount)); in serial_core_remove_one_port()
3272 state->uart_port = NULL; in serial_core_remove_one_port()
3273 mutex_unlock(&port->mutex); in serial_core_remove_one_port()
3277 * uart_match_port - are the two ports equivalent?
3287 if (port1->iotype != port2->iotype) in uart_match_port()
3290 switch (port1->iotype) { in uart_match_port()
3292 return port1->iobase == port2->iobase; in uart_match_port()
3294 return port1->iobase == port2->iobase && in uart_match_port()
3295 port1->hub6 == port2->hub6; in uart_match_port()
3302 return port1->mapbase == port2->mapbase; in uart_match_port()
3312 struct device *dev = &port_dev->dev; in serial_core_get_ctrl_dev()
3314 return to_serial_base_ctrl_device(dev->parent); in serial_core_get_ctrl_dev()
3330 for (i = 0; i < drv->nr; i++) { in serial_core_ctrl_find()
3331 state = drv->state + i; in serial_core_ctrl_find()
3332 if (!state->uart_port || !state->uart_port->port_dev) in serial_core_ctrl_find()
3335 if (state->uart_port->dev == phys_dev && in serial_core_ctrl_find()
3336 state->uart_port->ctrl_id == ctrl_id) in serial_core_ctrl_find()
3337 return serial_core_get_ctrl_dev(state->uart_port->port_dev); in serial_core_ctrl_find()
3345 return serial_base_ctrl_add(port, port->dev); in serial_core_ctrl_device_add()
3357 port->port_dev = port_dev; in serial_core_port_device_add()
3376 port->flags |= UPF_DEAD; in serial_core_register_port()
3379 ctrl_dev = serial_core_ctrl_find(drv, port->dev, port->ctrl_id); in serial_core_register_port()
3402 port->flags &= ~UPF_DEAD; in serial_core_register_port()
3409 serial_base_port_device_remove(port->port_dev); in serial_core_register_port()
3426 struct device *phys_dev = port->dev; in serial_core_unregister_port()
3427 struct serial_port_device *port_dev = port->port_dev; in serial_core_unregister_port()
3429 int ctrl_id = port->ctrl_id; in serial_core_unregister_port()
3433 port->flags |= UPF_DEAD; in serial_core_unregister_port()
3448 * uart_handle_dcd_change - handle a change of carrier detect state
3452 * Caller must hold uport->lock.
3456 struct tty_port *port = &uport->state->port; in uart_handle_dcd_change()
3457 struct tty_struct *tty = port->tty; in uart_handle_dcd_change()
3460 lockdep_assert_held_once(&uport->lock); in uart_handle_dcd_change()
3465 if (ld->ops->dcd_change) in uart_handle_dcd_change()
3466 ld->ops->dcd_change(tty, active); in uart_handle_dcd_change()
3471 uport->icount.dcd++; in uart_handle_dcd_change()
3475 wake_up_interruptible(&port->open_wait); in uart_handle_dcd_change()
3483 * uart_handle_cts_change - handle a change of clear-to-send state
3485 * @active: new clear-to-send status
3487 * Caller must hold uport->lock.
3491 lockdep_assert_held_once(&uport->lock); in uart_handle_cts_change()
3493 uport->icount.cts++; in uart_handle_cts_change()
3496 if (uport->hw_stopped) { in uart_handle_cts_change()
3498 uport->hw_stopped = false; in uart_handle_cts_change()
3499 uport->ops->start_tx(uport); in uart_handle_cts_change()
3504 uport->hw_stopped = true; in uart_handle_cts_change()
3505 uport->ops->stop_tx(uport); in uart_handle_cts_change()
3514 * uart_insert_char - push a char to the uart layer
3528 struct tty_port *tport = &port->state->port; in uart_insert_char()
3530 if ((status & port->ignore_status_mask & ~overrun) == 0) in uart_insert_char()
3532 ++port->icount.buf_overrun; in uart_insert_char()
3538 if (status & ~port->ignore_status_mask & overrun) in uart_insert_char()
3540 ++port->icount.buf_overrun; in uart_insert_char()
3558 * uart_try_toggle_sysrq - Enables SysRq from serial line
3576 if (sysrq_toggle_seq[port->sysrq_seq] != ch) { in uart_try_toggle_sysrq()
3577 port->sysrq_seq = 0; in uart_try_toggle_sysrq()
3581 if (++port->sysrq_seq < sysrq_toggle_seq_len) { in uart_try_toggle_sysrq()
3582 port->sysrq = jiffies + SYSRQ_TIMEOUT; in uart_try_toggle_sysrq()
3588 port->sysrq = 0; in uart_try_toggle_sysrq()
3595 * uart_get_rs485_mode() - retrieve rs485 properties for given uart
3603 struct serial_rs485 *rs485conf = &port->rs485; in uart_get_rs485_mode()
3604 struct device *dev = port->dev; in uart_get_rs485_mode()
3610 if (!(port->rs485_supported.flags & SER_RS485_ENABLED)) in uart_get_rs485_mode()
3613 ret = device_property_read_u32_array(dev, "rs485-rts-delay", in uart_get_rs485_mode()
3616 rs485conf->delay_rts_before_send = rs485_delay[0]; in uart_get_rs485_mode()
3617 rs485conf->delay_rts_after_send = rs485_delay[1]; in uart_get_rs485_mode()
3619 rs485conf->delay_rts_before_send = 0; in uart_get_rs485_mode()
3620 rs485conf->delay_rts_after_send = 0; in uart_get_rs485_mode()
3626 * Clear full-duplex and enabled flags, set RTS polarity to active high in uart_get_rs485_mode()
3629 rs485conf->flags &= ~(SER_RS485_RX_DURING_TX | SER_RS485_ENABLED | in uart_get_rs485_mode()
3632 rs485conf->flags |= SER_RS485_RTS_ON_SEND; in uart_get_rs485_mode()
3634 if (device_property_read_bool(dev, "rs485-rx-during-tx")) in uart_get_rs485_mode()
3635 rs485conf->flags |= SER_RS485_RX_DURING_TX; in uart_get_rs485_mode()
3637 if (device_property_read_bool(dev, "linux,rs485-enabled-at-boot-time")) in uart_get_rs485_mode()
3638 rs485conf->flags |= SER_RS485_ENABLED; in uart_get_rs485_mode()
3640 if (device_property_read_bool(dev, "rs485-rts-active-low")) { in uart_get_rs485_mode()
3641 rs485conf->flags &= ~SER_RS485_RTS_ON_SEND; in uart_get_rs485_mode()
3642 rs485conf->flags |= SER_RS485_RTS_AFTER_SEND; in uart_get_rs485_mode()
3646 * Disabling termination by default is the safe choice: Else if many in uart_get_rs485_mode()
3650 desc = devm_gpiod_get_optional(dev, "rs485-term", GPIOD_OUT_LOW); in uart_get_rs485_mode()
3652 return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-term-gpios\n"); in uart_get_rs485_mode()
3653 port->rs485_term_gpio = desc; in uart_get_rs485_mode()
3654 if (port->rs485_term_gpio) in uart_get_rs485_mode()
3655 port->rs485_supported.flags |= SER_RS485_TERMINATE_BUS; in uart_get_rs485_mode()
3657 dflags = (rs485conf->flags & SER_RS485_RX_DURING_TX) ? in uart_get_rs485_mode()
3659 desc = devm_gpiod_get_optional(dev, "rs485-rx-during-tx", dflags); in uart_get_rs485_mode()
3661 return dev_err_probe(dev, PTR_ERR(desc), "Cannot get rs485-rx-during-tx-gpios\n"); in uart_get_rs485_mode()
3662 port->rs485_rx_during_tx_gpio = desc; in uart_get_rs485_mode()
3663 if (port->rs485_rx_during_tx_gpio) in uart_get_rs485_mode()
3664 port->rs485_supported.flags |= SER_RS485_RX_DURING_TX; in uart_get_rs485_mode()
3670 /* Compile-time assertions for serial_rs485 layout */