lkml.org 
[lkml]   [2023]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[Patch v8 1/6] tty: add new helper function tty_get_tiocm
    Date
    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.

    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Florian Eckert <fe@dev.tdt.de>
    ---
    drivers/tty/tty_io.c | 28 ++++++++++++++++++++++------
    include/linux/tty.h | 1 +
    2 files changed, 23 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
    @@ -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;
    }

    diff --git a/include/linux/tty.h b/include/linux/tty.h
    index 4b6340ac2af2..d219a11e3fe0 100644
    --- a/include/linux/tty.h
    +++ b/include/linux/tty.h
    @@ -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);
    --
    2.30.2
    \
     
     \ /
      Last update: 2023-11-20 13:53    [W:4.139 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site