Commit 4ff4379c authored by Florian Eckert's avatar Florian Eckert Committed by Lee Jones

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: default avatarFlorian Eckert <fe@dev.tdt.de>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20231127110311.3583957-2-fe@dev.tdt.deSigned-off-by: default avatarLee Jones <lee@kernel.org>
parent 793bf551
...@@ -2498,6 +2498,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration) ...@@ -2498,6 +2498,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration)
return retval; 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_tiocmget - get modem status
* @tty: tty device * @tty: tty device
...@@ -2510,14 +2528,12 @@ static int send_break(struct tty_struct *tty, unsigned int duration) ...@@ -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) static int tty_tiocmget(struct tty_struct *tty, int __user *p)
{ {
int retval = -ENOTTY; int retval;
if (tty->ops->tiocmget) { retval = tty_get_tiocm(tty);
retval = tty->ops->tiocmget(tty); if (retval >= 0)
retval = put_user(retval, p);
if (retval >= 0)
retval = put_user(retval, p);
}
return retval; return retval;
} }
......
...@@ -419,6 +419,7 @@ bool tty_unthrottle_safe(struct tty_struct *tty); ...@@ -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_do_resize(struct tty_struct *tty, struct winsize *ws);
int tty_get_icount(struct tty_struct *tty, int tty_get_icount(struct tty_struct *tty,
struct serial_icounter_struct *icount); struct serial_icounter_struct *icount);
int tty_get_tiocm(struct tty_struct *tty);
int is_current_pgrp_orphaned(void); int is_current_pgrp_orphaned(void);
void tty_hangup(struct tty_struct *tty); void tty_hangup(struct tty_struct *tty);
void tty_vhangup(struct tty_struct *tty); void tty_vhangup(struct tty_struct *tty);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment