diff options
author | 2021-06-18 08:14:45 +0200 | |
---|---|---|
committer | 2021-06-18 13:10:01 +0200 | |
commit | 238d117d17516f92f5db958809ddec30731e9342 (patch) | |
tree | 37adb9999e9d9f780012dbf768b3050852faab0e /drivers/tty | |
parent | mxser: extract mxser_ioctl_op_mode (diff) | |
download | wireguard-linux-238d117d17516f92f5db958809ddec30731e9342.tar.xz wireguard-linux-238d117d17516f92f5db958809ddec30731e9342.zip |
mxser: simplify mxser_ioctl_op_mode
* ModeMask local array is just inverted OP_MODE_MASK shifted by shiftbit.
Drop this array and use the value directly.
* return from the if's true branch and drop 'else' branch by moving the
code completely outside the if.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20210618061516.662-40-jslaby@suse.cz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r-- | drivers/tty/mxser.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c index 4a584db09494..e082ae055c39 100644 --- a/drivers/tty/mxser.c +++ b/drivers/tty/mxser.c @@ -1411,10 +1411,9 @@ static int mxser_cflags_changed(struct mxser_port *info, unsigned long arg, static int mxser_ioctl_op_mode(struct mxser_port *port, int index, bool set, int __user *u_opmode) { - static const unsigned char ModeMask[] = { 0xfc, 0xf3, 0xcf, 0x3f }; int opmode, p = index % 4; int shiftbit = p * 2; - unsigned char val, mask; + u8 val; if (port->board->must_hwid != MOXA_MUST_MU860_HWID) return -EFAULT; @@ -1423,30 +1422,24 @@ static int mxser_ioctl_op_mode(struct mxser_port *port, int index, bool set, if (get_user(opmode, u_opmode)) return -EFAULT; - if (opmode != RS232_MODE && opmode != RS485_2WIRE_MODE && - opmode != RS422_MODE && - opmode != RS485_4WIRE_MODE) - return -EFAULT; - - mask = ModeMask[p]; + if (opmode & ~OP_MODE_MASK) + return -EINVAL; spin_lock_irq(&port->slock); val = inb(port->opmode_ioaddr); - val &= mask; + val &= ~(OP_MODE_MASK << shiftbit); val |= (opmode << shiftbit); outb(val, port->opmode_ioaddr); spin_unlock_irq(&port->slock); - } else { - spin_lock_irq(&port->slock); - opmode = inb(port->opmode_ioaddr) >> shiftbit; - spin_unlock_irq(&port->slock); - opmode &= OP_MODE_MASK; - if (put_user(opmode, u_opmode)) - return -EFAULT; + return 0; } - return 0; + spin_lock_irq(&port->slock); + opmode = inb(port->opmode_ioaddr) >> shiftbit; + spin_unlock_irq(&port->slock); + + return put_user(opmode & OP_MODE_MASK, u_opmode); } static int mxser_ioctl(struct tty_struct *tty, |