OSDN Git Service

greybus/uart: switch to ->[sg]et_serial()
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 12 Sep 2018 01:58:45 +0000 (21:58 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 14 Sep 2018 15:19:51 +0000 (11:19 -0400)
Reviewed-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/greybus/uart.c

index 8a00632..3313cb0 100644 (file)
@@ -616,40 +616,33 @@ static void gb_tty_unthrottle(struct tty_struct *tty)
        }
 }
 
-static int get_serial_info(struct gb_tty *gb_tty,
-                          struct serial_struct __user *info)
+static int get_serial_info(struct tty_struct *tty,
+                          struct serial_struct *ss)
 {
-       struct serial_struct tmp;
-
-       memset(&tmp, 0, sizeof(tmp));
-       tmp.type = PORT_16550A;
-       tmp.line = gb_tty->minor;
-       tmp.xmit_fifo_size = 16;
-       tmp.baud_base = 9600;
-       tmp.close_delay = gb_tty->port.close_delay / 10;
-       tmp.closing_wait =
+       struct gb_tty *gb_tty = tty->driver_data;
+
+       ss->type = PORT_16550A;
+       ss->line = gb_tty->minor;
+       ss->xmit_fifo_size = 16;
+       ss->baud_base = 9600;
+       ss->close_delay = gb_tty->port.close_delay / 10;
+       ss->closing_wait =
                gb_tty->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
                ASYNC_CLOSING_WAIT_NONE : gb_tty->port.closing_wait / 10;
-
-       if (copy_to_user(info, &tmp, sizeof(tmp)))
-               return -EFAULT;
        return 0;
 }
 
-static int set_serial_info(struct gb_tty *gb_tty,
-                          struct serial_struct __user *newinfo)
+static int set_serial_info(struct tty_struct *tty,
+                          struct serial_struct *ss)
 {
-       struct serial_struct new_serial;
+       struct gb_tty *gb_tty = tty->driver_data;
        unsigned int closing_wait;
        unsigned int close_delay;
        int retval = 0;
 
-       if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
-               return -EFAULT;
-
-       close_delay = new_serial.close_delay * 10;
-       closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
-                       ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
+       close_delay = ss->close_delay * 10;
+       closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
+                       ASYNC_CLOSING_WAIT_NONE : ss->closing_wait * 10;
 
        mutex_lock(&gb_tty->port.mutex);
        if (!capable(CAP_SYS_ADMIN)) {
@@ -728,12 +721,6 @@ static int gb_tty_ioctl(struct tty_struct *tty, unsigned int cmd,
        struct gb_tty *gb_tty = tty->driver_data;
 
        switch (cmd) {
-       case TIOCGSERIAL:
-               return get_serial_info(gb_tty,
-                                      (struct serial_struct __user *)arg);
-       case TIOCSSERIAL:
-               return set_serial_info(gb_tty,
-                                      (struct serial_struct __user *)arg);
        case TIOCMIWAIT:
                return wait_serial_change(gb_tty, arg);
        }
@@ -818,6 +805,8 @@ static const struct tty_operations gb_ops = {
        .tiocmget =             gb_tty_tiocmget,
        .tiocmset =             gb_tty_tiocmset,
        .get_icount =           gb_tty_get_icount,
+       .set_serial =           set_serial_info,
+       .get_serial =           get_serial_info,
 };
 
 static const struct tty_port_operations gb_port_ops = {