tty: support CIBAUD without BOTHER
Since commit edc6afc549
("[PATCH] tty: switch to ktermios and new
framework") arbitrary baud rates can be requested using BOTHER and input
rates can be requested using the termios CIBAUD bits (CBAUD shifted
IBSHIFT bits).
This functionality has been conditionally compiled depending on whether
an architecture defines BOTHER and IBSHIFT respectively, but would in
fact fail to compile unless both symbols were defined due to cross
dependencies.
Relax the IBSHIFT => BOTHER dependency so that an architecture could
theoretically support CIBAUD without the Linux-specific BOTHER, while
hopefully making the current conditional-compilation directives a bit
less confusing.
Note that the long-term goal is still to have all architectures support
both features, so an alternative could just be to have the lot depend on
BOTHER.
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1cee38f036
commit
fefe287e4b
|
@ -100,11 +100,11 @@ speed_t tty_termios_input_baud_rate(struct ktermios *termios)
|
||||||
|
|
||||||
if (cbaud == B0)
|
if (cbaud == B0)
|
||||||
return tty_termios_baud_rate(termios);
|
return tty_termios_baud_rate(termios);
|
||||||
|
#ifdef BOTHER
|
||||||
/* Magic token for arbitrary speed via c_ispeed*/
|
/* Magic token for arbitrary speed via c_ispeed*/
|
||||||
if (cbaud == BOTHER)
|
if (cbaud == BOTHER)
|
||||||
return termios->c_ispeed;
|
return termios->c_ispeed;
|
||||||
|
#endif
|
||||||
if (cbaud & CBAUDEX) {
|
if (cbaud & CBAUDEX) {
|
||||||
cbaud &= ~CBAUDEX;
|
cbaud &= ~CBAUDEX;
|
||||||
|
|
||||||
|
@ -114,9 +114,9 @@ speed_t tty_termios_input_baud_rate(struct ktermios *termios)
|
||||||
cbaud += 15;
|
cbaud += 15;
|
||||||
}
|
}
|
||||||
return baud_table[cbaud];
|
return baud_table[cbaud];
|
||||||
#else
|
#else /* IBSHIFT */
|
||||||
return tty_termios_baud_rate(termios);
|
return tty_termios_baud_rate(termios);
|
||||||
#endif
|
#endif /* IBSHIFT */
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tty_termios_input_baud_rate);
|
EXPORT_SYMBOL(tty_termios_input_baud_rate);
|
||||||
|
|
||||||
|
@ -156,10 +156,11 @@ void tty_termios_encode_baud_rate(struct ktermios *termios,
|
||||||
termios->c_ispeed = ibaud;
|
termios->c_ispeed = ibaud;
|
||||||
termios->c_ospeed = obaud;
|
termios->c_ospeed = obaud;
|
||||||
|
|
||||||
#ifdef BOTHER
|
#ifdef IBSHIFT
|
||||||
if ((termios->c_cflag >> IBSHIFT) & CBAUD)
|
if ((termios->c_cflag >> IBSHIFT) & CBAUD)
|
||||||
ibinput = 1; /* An input speed was specified */
|
ibinput = 1; /* An input speed was specified */
|
||||||
|
#endif
|
||||||
|
#ifdef BOTHER
|
||||||
/* If the user asked for a precise weird speed give a precise weird
|
/* If the user asked for a precise weird speed give a precise weird
|
||||||
answer. If they asked for a Bfoo speed they may have problems
|
answer. If they asked for a Bfoo speed they may have problems
|
||||||
digesting non-exact replies so fuzz a bit */
|
digesting non-exact replies so fuzz a bit */
|
||||||
|
|
Loading…
Reference in a new issue