tty: Always handle NULL flag ptr
Most line disciplines already handle the undocumented NULL flag ptr in their .receive_buf method; however, several don't. Document the NULL flag ptr, and correct handling in the N_MOUSE, N_GSM0710 and N_R394 line disciplines. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6c67716d64
commit
82f91fe092
|
@ -124,7 +124,7 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c
|
||||||
{
|
{
|
||||||
struct serport *serport = (struct serport*) tty->disc_data;
|
struct serport *serport = (struct serport*) tty->disc_data;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned int ch_flags;
|
unsigned int ch_flags = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
spin_lock_irqsave(&serport->lock, flags);
|
spin_lock_irqsave(&serport->lock, flags);
|
||||||
|
@ -133,18 +133,20 @@ static void serport_ldisc_receive(struct tty_struct *tty, const unsigned char *c
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
switch (fp[i]) {
|
if (fp) {
|
||||||
case TTY_FRAME:
|
switch (fp[i]) {
|
||||||
ch_flags = SERIO_FRAME;
|
case TTY_FRAME:
|
||||||
break;
|
ch_flags = SERIO_FRAME;
|
||||||
|
break;
|
||||||
|
|
||||||
case TTY_PARITY:
|
case TTY_PARITY:
|
||||||
ch_flags = SERIO_PARITY;
|
ch_flags = SERIO_PARITY;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ch_flags = 0;
|
ch_flags = 0;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
serio_interrupt(serport->serio, cp[i], ch_flags);
|
serio_interrupt(serport->serio, cp[i], ch_flags);
|
||||||
|
|
|
@ -2269,14 +2269,15 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
||||||
char *f;
|
char *f;
|
||||||
int i;
|
int i;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
char flags;
|
char flags = TTY_NORMAL;
|
||||||
|
|
||||||
if (debug & 4)
|
if (debug & 4)
|
||||||
print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET,
|
print_hex_dump_bytes("gsmld_receive: ", DUMP_PREFIX_OFFSET,
|
||||||
cp, count);
|
cp, count);
|
||||||
|
|
||||||
for (i = count, dp = cp, f = fp; i; i--, dp++) {
|
for (i = count, dp = cp, f = fp; i; i--, dp++) {
|
||||||
flags = *f++;
|
if (f)
|
||||||
|
flags = *f++;
|
||||||
switch (flags) {
|
switch (flags) {
|
||||||
case TTY_NORMAL:
|
case TTY_NORMAL:
|
||||||
gsm->receive(gsm, *dp);
|
gsm->receive(gsm, *dp);
|
||||||
|
|
|
@ -1244,7 +1244,7 @@ static void r3964_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
||||||
{
|
{
|
||||||
struct r3964_info *pInfo = tty->disc_data;
|
struct r3964_info *pInfo = tty->disc_data;
|
||||||
const unsigned char *p;
|
const unsigned char *p;
|
||||||
char *f, flags = 0;
|
char *f, flags = TTY_NORMAL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = count, p = cp, f = fp; i; i--, p++) {
|
for (i = count, p = cp, f = fp; i; i--, p++) {
|
||||||
|
|
|
@ -84,7 +84,8 @@
|
||||||
* processing. <cp> is a pointer to the buffer of input
|
* processing. <cp> is a pointer to the buffer of input
|
||||||
* character received by the device. <fp> is a pointer to a
|
* character received by the device. <fp> is a pointer to a
|
||||||
* pointer of flag bytes which indicate whether a character was
|
* pointer of flag bytes which indicate whether a character was
|
||||||
* received with a parity error, etc.
|
* received with a parity error, etc. <fp> may be NULL to indicate
|
||||||
|
* all data received is TTY_NORMAL.
|
||||||
*
|
*
|
||||||
* void (*write_wakeup)(struct tty_struct *);
|
* void (*write_wakeup)(struct tty_struct *);
|
||||||
*
|
*
|
||||||
|
@ -118,7 +119,8 @@
|
||||||
* processing. <cp> is a pointer to the buffer of input
|
* processing. <cp> is a pointer to the buffer of input
|
||||||
* character received by the device. <fp> is a pointer to a
|
* character received by the device. <fp> is a pointer to a
|
||||||
* pointer of flag bytes which indicate whether a character was
|
* pointer of flag bytes which indicate whether a character was
|
||||||
* received with a parity error, etc.
|
* received with a parity error, etc. <fp> may be NULL to indicate
|
||||||
|
* all data received is TTY_NORMAL.
|
||||||
* If assigned, prefer this function for automatic flow control.
|
* If assigned, prefer this function for automatic flow control.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue