| From 43d0574e531dee6967e069563a029813a329cb67 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 7 Apr 2021 12:23:22 +0200 |
| Subject: staging: fwserial: fix TIOCGSERIAL implementation |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| [ Upstream commit 5e84a66f3682af4f177bb24bb2ad5135c51f764a ] |
| |
| TIOCSSERIAL is a horrid, underspecified, legacy interface which for most |
| serial devices is only useful for setting the close_delay and |
| closing_wait parameters. |
| |
| The xmit_fifo_size parameter could be used to set the hardware transmit |
| fifo size of a legacy UART when it could not be detected, but the |
| interface is limited to eight bits and should be left unset when not |
| used. |
| |
| Fix the fwserial implementation by dropping its custom interpretation of |
| the unused xmit_fifo_size field, which was overflowed with the driver |
| FIFO size. Also leave the type and flags fields unset as these cannot be |
| changed. |
| |
| The close_delay and closing_wait parameters returned by TIOCGSERIAL are |
| specified in centiseconds. The driver does not yet support changing |
| closing_wait, but let's report back the default value actually used (30 |
| seconds). |
| |
| Fixes: 7355ba3445f2 ("staging: fwserial: Add TTY-over-Firewire serial driver") |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Link: https://lore.kernel.org/r/20210407102334.32361-5-johan@kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/staging/fwserial/fwserial.c | 7 +++---- |
| 1 file changed, 3 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/staging/fwserial/fwserial.c b/drivers/staging/fwserial/fwserial.c |
| index 2888b80a2c1a..0f4655d7d520 100644 |
| --- a/drivers/staging/fwserial/fwserial.c |
| +++ b/drivers/staging/fwserial/fwserial.c |
| @@ -1218,13 +1218,12 @@ static int get_serial_info(struct tty_struct *tty, |
| struct fwtty_port *port = tty->driver_data; |
| |
| mutex_lock(&port->port.mutex); |
| - ss->type = PORT_UNKNOWN; |
| - ss->line = port->port.tty->index; |
| - ss->flags = port->port.flags; |
| - ss->xmit_fifo_size = FWTTY_PORT_TXFIFO_LEN; |
| + ss->line = port->index; |
| ss->baud_base = 400000000; |
| ss->close_delay = jiffies_to_msecs(port->port.close_delay) / 10; |
| + ss->closing_wait = 3000; |
| mutex_unlock(&port->port.mutex); |
| + |
| return 0; |
| } |
| |
| -- |
| 2.30.2 |
| |