|
@@ -410,7 +410,7 @@ EXPORT_SYMBOL_GPL(tty_termios_encode_baud_rate);
|
|
|
|
|
|
void tty_encode_baud_rate(struct tty_struct *tty, speed_t ibaud, speed_t obaud)
|
|
|
{
|
|
|
- tty_termios_encode_baud_rate(tty->termios, ibaud, obaud);
|
|
|
+ tty_termios_encode_baud_rate(&tty->termios, ibaud, obaud);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(tty_encode_baud_rate);
|
|
|
|
|
@@ -427,7 +427,7 @@ EXPORT_SYMBOL_GPL(tty_encode_baud_rate);
|
|
|
|
|
|
speed_t tty_get_baud_rate(struct tty_struct *tty)
|
|
|
{
|
|
|
- speed_t baud = tty_termios_baud_rate(tty->termios);
|
|
|
+ speed_t baud = tty_termios_baud_rate(&tty->termios);
|
|
|
|
|
|
if (baud == 38400 && tty->alt_speed) {
|
|
|
if (!tty->warned) {
|
|
@@ -509,14 +509,14 @@ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
|
|
|
/* FIXME: we need to decide on some locking/ordering semantics
|
|
|
for the set_termios notification eventually */
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- old_termios = *tty->termios;
|
|
|
- *tty->termios = *new_termios;
|
|
|
- unset_locked_termios(tty->termios, &old_termios, tty->termios_locked);
|
|
|
+ old_termios = tty->termios;
|
|
|
+ tty->termios = *new_termios;
|
|
|
+ unset_locked_termios(&tty->termios, &old_termios, &tty->termios_locked);
|
|
|
|
|
|
/* See if packet mode change of state. */
|
|
|
if (tty->link && tty->link->packet) {
|
|
|
int extproc = (old_termios.c_lflag & EXTPROC) |
|
|
|
- (tty->termios->c_lflag & EXTPROC);
|
|
|
+ (tty->termios.c_lflag & EXTPROC);
|
|
|
int old_flow = ((old_termios.c_iflag & IXON) &&
|
|
|
(old_termios.c_cc[VSTOP] == '\023') &&
|
|
|
(old_termios.c_cc[VSTART] == '\021'));
|
|
@@ -542,7 +542,7 @@ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
|
|
|
if (tty->ops->set_termios)
|
|
|
(*tty->ops->set_termios)(tty, &old_termios);
|
|
|
else
|
|
|
- tty_termios_copy_hw(tty->termios, &old_termios);
|
|
|
+ tty_termios_copy_hw(&tty->termios, &old_termios);
|
|
|
|
|
|
ld = tty_ldisc_ref(tty);
|
|
|
if (ld != NULL) {
|
|
@@ -578,7 +578,7 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt)
|
|
|
return retval;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- memcpy(&tmp_termios, tty->termios, sizeof(struct ktermios));
|
|
|
+ tmp_termios = tty->termios;
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
|
|
|
if (opt & TERMIOS_TERMIO) {
|
|
@@ -632,14 +632,14 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt)
|
|
|
static void copy_termios(struct tty_struct *tty, struct ktermios *kterm)
|
|
|
{
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- memcpy(kterm, tty->termios, sizeof(struct ktermios));
|
|
|
+ *kterm = tty->termios;
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
}
|
|
|
|
|
|
static void copy_termios_locked(struct tty_struct *tty, struct ktermios *kterm)
|
|
|
{
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- memcpy(kterm, tty->termios_locked, sizeof(struct ktermios));
|
|
|
+ *kterm = tty->termios_locked;
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
}
|
|
|
|
|
@@ -707,16 +707,16 @@ static int get_sgflags(struct tty_struct *tty)
|
|
|
{
|
|
|
int flags = 0;
|
|
|
|
|
|
- if (!(tty->termios->c_lflag & ICANON)) {
|
|
|
- if (tty->termios->c_lflag & ISIG)
|
|
|
+ if (!(tty->termios.c_lflag & ICANON)) {
|
|
|
+ if (tty->termios.c_lflag & ISIG)
|
|
|
flags |= 0x02; /* cbreak */
|
|
|
else
|
|
|
flags |= 0x20; /* raw */
|
|
|
}
|
|
|
- if (tty->termios->c_lflag & ECHO)
|
|
|
+ if (tty->termios.c_lflag & ECHO)
|
|
|
flags |= 0x08; /* echo */
|
|
|
- if (tty->termios->c_oflag & OPOST)
|
|
|
- if (tty->termios->c_oflag & ONLCR)
|
|
|
+ if (tty->termios.c_oflag & OPOST)
|
|
|
+ if (tty->termios.c_oflag & ONLCR)
|
|
|
flags |= 0x10; /* crmod */
|
|
|
return flags;
|
|
|
}
|
|
@@ -726,10 +726,10 @@ static int get_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb)
|
|
|
struct sgttyb tmp;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- tmp.sg_ispeed = tty->termios->c_ispeed;
|
|
|
- tmp.sg_ospeed = tty->termios->c_ospeed;
|
|
|
- tmp.sg_erase = tty->termios->c_cc[VERASE];
|
|
|
- tmp.sg_kill = tty->termios->c_cc[VKILL];
|
|
|
+ tmp.sg_ispeed = tty->termios.c_ispeed;
|
|
|
+ tmp.sg_ospeed = tty->termios.c_ospeed;
|
|
|
+ tmp.sg_erase = tty->termios.c_cc[VERASE];
|
|
|
+ tmp.sg_kill = tty->termios.c_cc[VKILL];
|
|
|
tmp.sg_flags = get_sgflags(tty);
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
|
|
@@ -738,27 +738,27 @@ static int get_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb)
|
|
|
|
|
|
static void set_sgflags(struct ktermios *termios, int flags)
|
|
|
{
|
|
|
- termios->c_iflag = ICRNL | IXON;
|
|
|
- termios->c_oflag = 0;
|
|
|
- termios->c_lflag = ISIG | ICANON;
|
|
|
+ termios.c_iflag = ICRNL | IXON;
|
|
|
+ termios.c_oflag = 0;
|
|
|
+ termios.c_lflag = ISIG | ICANON;
|
|
|
if (flags & 0x02) { /* cbreak */
|
|
|
- termios->c_iflag = 0;
|
|
|
- termios->c_lflag &= ~ICANON;
|
|
|
+ termios.c_iflag = 0;
|
|
|
+ termios.c_lflag &= ~ICANON;
|
|
|
}
|
|
|
if (flags & 0x08) { /* echo */
|
|
|
- termios->c_lflag |= ECHO | ECHOE | ECHOK |
|
|
|
+ termios.c_lflag |= ECHO | ECHOE | ECHOK |
|
|
|
ECHOCTL | ECHOKE | IEXTEN;
|
|
|
}
|
|
|
if (flags & 0x10) { /* crmod */
|
|
|
- termios->c_oflag |= OPOST | ONLCR;
|
|
|
+ termios.c_oflag |= OPOST | ONLCR;
|
|
|
}
|
|
|
if (flags & 0x20) { /* raw */
|
|
|
- termios->c_iflag = 0;
|
|
|
- termios->c_lflag &= ~(ISIG | ICANON);
|
|
|
+ termios.c_iflag = 0;
|
|
|
+ termios.c_lflag &= ~(ISIG | ICANON);
|
|
|
}
|
|
|
- if (!(termios->c_lflag & ICANON)) {
|
|
|
- termios->c_cc[VMIN] = 1;
|
|
|
- termios->c_cc[VTIME] = 0;
|
|
|
+ if (!(termios.c_lflag & ICANON)) {
|
|
|
+ termios.c_cc[VMIN] = 1;
|
|
|
+ termios.c_cc[VTIME] = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -787,7 +787,7 @@ static int set_sgttyb(struct tty_struct *tty, struct sgttyb __user *sgttyb)
|
|
|
return -EFAULT;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- termios = *tty->termios;
|
|
|
+ termios = tty->termios;
|
|
|
termios.c_cc[VERASE] = tmp.sg_erase;
|
|
|
termios.c_cc[VKILL] = tmp.sg_kill;
|
|
|
set_sgflags(&termios, tmp.sg_flags);
|
|
@@ -808,12 +808,12 @@ static int get_tchars(struct tty_struct *tty, struct tchars __user *tchars)
|
|
|
struct tchars tmp;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- tmp.t_intrc = tty->termios->c_cc[VINTR];
|
|
|
- tmp.t_quitc = tty->termios->c_cc[VQUIT];
|
|
|
- tmp.t_startc = tty->termios->c_cc[VSTART];
|
|
|
- tmp.t_stopc = tty->termios->c_cc[VSTOP];
|
|
|
- tmp.t_eofc = tty->termios->c_cc[VEOF];
|
|
|
- tmp.t_brkc = tty->termios->c_cc[VEOL2]; /* what is brkc anyway? */
|
|
|
+ tmp.t_intrc = tty->termios.c_cc[VINTR];
|
|
|
+ tmp.t_quitc = tty->termios.c_cc[VQUIT];
|
|
|
+ tmp.t_startc = tty->termios.c_cc[VSTART];
|
|
|
+ tmp.t_stopc = tty->termios.c_cc[VSTOP];
|
|
|
+ tmp.t_eofc = tty->termios.c_cc[VEOF];
|
|
|
+ tmp.t_brkc = tty->termios.c_cc[VEOL2]; /* what is brkc anyway? */
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
return copy_to_user(tchars, &tmp, sizeof(tmp)) ? -EFAULT : 0;
|
|
|
}
|
|
@@ -825,12 +825,12 @@ static int set_tchars(struct tty_struct *tty, struct tchars __user *tchars)
|
|
|
if (copy_from_user(&tmp, tchars, sizeof(tmp)))
|
|
|
return -EFAULT;
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- tty->termios->c_cc[VINTR] = tmp.t_intrc;
|
|
|
- tty->termios->c_cc[VQUIT] = tmp.t_quitc;
|
|
|
- tty->termios->c_cc[VSTART] = tmp.t_startc;
|
|
|
- tty->termios->c_cc[VSTOP] = tmp.t_stopc;
|
|
|
- tty->termios->c_cc[VEOF] = tmp.t_eofc;
|
|
|
- tty->termios->c_cc[VEOL2] = tmp.t_brkc; /* what is brkc anyway? */
|
|
|
+ tty->termios.c_cc[VINTR] = tmp.t_intrc;
|
|
|
+ tty->termios.c_cc[VQUIT] = tmp.t_quitc;
|
|
|
+ tty->termios.c_cc[VSTART] = tmp.t_startc;
|
|
|
+ tty->termios.c_cc[VSTOP] = tmp.t_stopc;
|
|
|
+ tty->termios.c_cc[VEOF] = tmp.t_eofc;
|
|
|
+ tty->termios.c_cc[VEOL2] = tmp.t_brkc; /* what is brkc anyway? */
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
return 0;
|
|
|
}
|
|
@@ -842,14 +842,14 @@ static int get_ltchars(struct tty_struct *tty, struct ltchars __user *ltchars)
|
|
|
struct ltchars tmp;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- tmp.t_suspc = tty->termios->c_cc[VSUSP];
|
|
|
+ tmp.t_suspc = tty->termios.c_cc[VSUSP];
|
|
|
/* what is dsuspc anyway? */
|
|
|
- tmp.t_dsuspc = tty->termios->c_cc[VSUSP];
|
|
|
- tmp.t_rprntc = tty->termios->c_cc[VREPRINT];
|
|
|
+ tmp.t_dsuspc = tty->termios.c_cc[VSUSP];
|
|
|
+ tmp.t_rprntc = tty->termios.c_cc[VREPRINT];
|
|
|
/* what is flushc anyway? */
|
|
|
- tmp.t_flushc = tty->termios->c_cc[VEOL2];
|
|
|
- tmp.t_werasc = tty->termios->c_cc[VWERASE];
|
|
|
- tmp.t_lnextc = tty->termios->c_cc[VLNEXT];
|
|
|
+ tmp.t_flushc = tty->termios.c_cc[VEOL2];
|
|
|
+ tmp.t_werasc = tty->termios.c_cc[VWERASE];
|
|
|
+ tmp.t_lnextc = tty->termios.c_cc[VLNEXT];
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
return copy_to_user(ltchars, &tmp, sizeof(tmp)) ? -EFAULT : 0;
|
|
|
}
|
|
@@ -862,14 +862,14 @@ static int set_ltchars(struct tty_struct *tty, struct ltchars __user *ltchars)
|
|
|
return -EFAULT;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- tty->termios->c_cc[VSUSP] = tmp.t_suspc;
|
|
|
+ tty->termios.c_cc[VSUSP] = tmp.t_suspc;
|
|
|
/* what is dsuspc anyway? */
|
|
|
- tty->termios->c_cc[VEOL2] = tmp.t_dsuspc;
|
|
|
- tty->termios->c_cc[VREPRINT] = tmp.t_rprntc;
|
|
|
+ tty->termios.c_cc[VEOL2] = tmp.t_dsuspc;
|
|
|
+ tty->termios.c_cc[VREPRINT] = tmp.t_rprntc;
|
|
|
/* what is flushc anyway? */
|
|
|
- tty->termios->c_cc[VEOL2] = tmp.t_flushc;
|
|
|
- tty->termios->c_cc[VWERASE] = tmp.t_werasc;
|
|
|
- tty->termios->c_cc[VLNEXT] = tmp.t_lnextc;
|
|
|
+ tty->termios.c_cc[VEOL2] = tmp.t_flushc;
|
|
|
+ tty->termios.c_cc[VWERASE] = tmp.t_werasc;
|
|
|
+ tty->termios.c_cc[VLNEXT] = tmp.t_lnextc;
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
return 0;
|
|
|
}
|
|
@@ -920,12 +920,12 @@ static int tty_change_softcar(struct tty_struct *tty, int arg)
|
|
|
struct ktermios old;
|
|
|
|
|
|
mutex_lock(&tty->termios_mutex);
|
|
|
- old = *tty->termios;
|
|
|
- tty->termios->c_cflag &= ~CLOCAL;
|
|
|
- tty->termios->c_cflag |= bit;
|
|
|
+ old = tty->termios;
|
|
|
+ tty->termios.c_cflag &= ~CLOCAL;
|
|
|
+ tty->termios.c_cflag |= bit;
|
|
|
if (tty->ops->set_termios)
|
|
|
tty->ops->set_termios(tty, &old);
|
|
|
- if ((tty->termios->c_cflag & CLOCAL) != bit)
|
|
|
+ if ((tty->termios.c_cflag & CLOCAL) != bit)
|
|
|
ret = -EINVAL;
|
|
|
mutex_unlock(&tty->termios_mutex);
|
|
|
return ret;
|
|
@@ -1031,7 +1031,7 @@ int tty_mode_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
(struct termios __user *) arg))
|
|
|
return -EFAULT;
|
|
|
mutex_lock(&real_tty->termios_mutex);
|
|
|
- memcpy(real_tty->termios_locked, &kterm, sizeof(struct ktermios));
|
|
|
+ real_tty->termios_locked = kterm;
|
|
|
mutex_unlock(&real_tty->termios_mutex);
|
|
|
return 0;
|
|
|
#else
|
|
@@ -1048,7 +1048,7 @@ int tty_mode_ioctl(struct tty_struct *tty, struct file *file,
|
|
|
(struct termios __user *) arg))
|
|
|
return -EFAULT;
|
|
|
mutex_lock(&real_tty->termios_mutex);
|
|
|
- memcpy(real_tty->termios_locked, &kterm, sizeof(struct ktermios));
|
|
|
+ real_tty->termios_locked = kterm;
|
|
|
mutex_unlock(&real_tty->termios_mutex);
|
|
|
return ret;
|
|
|
#endif
|