diff options
author | Florian Eckert <fe@dev.tdt.de> | 2023-11-27 14:03:08 +0300 |
---|---|---|
committer | Lee Jones <lee@kernel.org> | 2023-12-13 14:28:47 +0300 |
commit | 4ff4379ce6eefe81695bcc2e021ce1dac3d707d2 (patch) | |
tree | c94eddf809b49f0e3eecc42775200bee3049231d /drivers/tty/tty_io.c | |
parent | 793bf5510d5e30dff2ce1d6e446b385cd494d5af (diff) | |
download | linux-4ff4379ce6eefe81695bcc2e021ce1dac3d707d2.tar.xz |
tty: add new helper function tty_get_tiocm
There is no in-kernel function to get the status register of a tty device
like the TIOCMGET ioctl returns to userspace. Create a new function,
tty_get_tiocm(), to obtain the status register that other portions of the
kernel can call if they need this information, and move the existing
internal tty_tiocmget() function to use this interface.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20231127110311.3583957-2-fe@dev.tdt.de
Signed-off-by: Lee Jones <lee@kernel.org>
Diffstat (limited to 'drivers/tty/tty_io.c')
-rw-r--r-- | drivers/tty/tty_io.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 06414e43e0b5..e2e93404133e 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -2499,6 +2499,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration) } /** + * tty_get_tiocm - get tiocm status register + * @tty: tty device + * + * Obtain the modem status bits from the tty driver if the feature + * is supported. + */ +int tty_get_tiocm(struct tty_struct *tty) +{ + int retval = -ENOTTY; + + if (tty->ops->tiocmget) + retval = tty->ops->tiocmget(tty); + + return retval; +} +EXPORT_SYMBOL_GPL(tty_get_tiocm); + +/** * tty_tiocmget - get modem status * @tty: tty device * @p: pointer to result @@ -2510,14 +2528,12 @@ static int send_break(struct tty_struct *tty, unsigned int duration) */ static int tty_tiocmget(struct tty_struct *tty, int __user *p) { - int retval = -ENOTTY; + int retval; - if (tty->ops->tiocmget) { - retval = tty->ops->tiocmget(tty); + retval = tty_get_tiocm(tty); + if (retval >= 0) + retval = put_user(retval, p); - if (retval >= 0) - retval = put_user(retval, p); - } return retval; } |