tty: add new helper function tty_get_tiocm
authorFlorian Eckert <fe@dev.tdt.de>
Mon, 27 Nov 2023 11:03:08 +0000 (12:03 +0100)
committerLee Jones <lee@kernel.org>
Wed, 13 Dec 2023 11:28:47 +0000 (11:28 +0000)
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>
drivers/tty/tty_io.c
include/linux/tty.h

index 06414e43e0b53359348c7906bbb7a6acca8161f0..e2e93404133efa476182adf5a966481bf71fa157 100644 (file)
@@ -2498,6 +2498,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration)
        return retval;
 }
 
+/**
+ * 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
@@ -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;
 }
 
index 4b6340ac2af28f556cde4aea6295a0cc11bc719a..d219a11e3fe0fd6f1bbd0a985efb7e9fac3b54e7 100644 (file)
@@ -419,6 +419,7 @@ bool tty_unthrottle_safe(struct tty_struct *tty);
 int tty_do_resize(struct tty_struct *tty, struct winsize *ws);
 int tty_get_icount(struct tty_struct *tty,
                struct serial_icounter_struct *icount);
+int tty_get_tiocm(struct tty_struct *tty);
 int is_current_pgrp_orphaned(void);
 void tty_hangup(struct tty_struct *tty);
 void tty_vhangup(struct tty_struct *tty);