Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 15cc7bad authored by Al Viro's avatar Al Viro
Browse files

usb_wwan: switch to ->[sg]et_serial()

parent fc6cc979
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1962,7 +1962,8 @@ static struct usb_serial_driver option_1port_device = {
	.chars_in_buffer   = usb_wwan_chars_in_buffer,
	.tiocmget          = usb_wwan_tiocmget,
	.tiocmset          = usb_wwan_tiocmset,
	.ioctl             = usb_wwan_ioctl,
	.get_serial        = usb_wwan_get_serial_info,
	.set_serial        = usb_wwan_set_serial_info,
	.attach            = option_attach,
	.release           = option_release,
	.port_probe        = usb_wwan_port_probe,
+4 −2
Original line number Diff line number Diff line
@@ -15,8 +15,10 @@ extern int usb_wwan_write_room(struct tty_struct *tty);
extern int usb_wwan_tiocmget(struct tty_struct *tty);
extern int usb_wwan_tiocmset(struct tty_struct *tty,
			     unsigned int set, unsigned int clear);
extern int usb_wwan_ioctl(struct tty_struct *tty,
			  unsigned int cmd, unsigned long arg);
extern int usb_wwan_get_serial_info(struct tty_struct *tty,
			   struct serial_struct *ss);
extern int usb_wwan_set_serial_info(struct tty_struct *tty,
			   struct serial_struct *ss);
extern int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
			  const unsigned char *buf, int count);
extern int usb_wwan_chars_in_buffer(struct tty_struct *tty);
+17 −46
Original line number Diff line number Diff line
@@ -132,38 +132,32 @@ int usb_wwan_tiocmset(struct tty_struct *tty,
}
EXPORT_SYMBOL(usb_wwan_tiocmset);

static int get_serial_info(struct usb_serial_port *port,
			   struct serial_struct __user *retinfo)
int usb_wwan_get_serial_info(struct tty_struct *tty,
			   struct serial_struct *ss)
{
	struct serial_struct tmp;

	memset(&tmp, 0, sizeof(tmp));
	tmp.line            = port->minor;
	tmp.port            = port->port_number;
	tmp.baud_base       = tty_get_baud_rate(port->port.tty);
	tmp.close_delay	    = port->port.close_delay / 10;
	tmp.closing_wait    = port->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
	struct usb_serial_port *port = tty->driver_data;

	ss->line            = port->minor;
	ss->port            = port->port_number;
	ss->baud_base       = tty_get_baud_rate(port->port.tty);
	ss->close_delay	    = port->port.close_delay / 10;
	ss->closing_wait    = port->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
				 ASYNC_CLOSING_WAIT_NONE :
				 port->port.closing_wait / 10;

	if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
		return -EFAULT;
	return 0;
}
EXPORT_SYMBOL(usb_wwan_get_serial_info);

static int set_serial_info(struct usb_serial_port *port,
			   struct serial_struct __user *newinfo)
int usb_wwan_set_serial_info(struct tty_struct *tty,
			   struct serial_struct *ss)
{
	struct serial_struct new_serial;
	struct usb_serial_port *port = tty->driver_data;
	unsigned int closing_wait, 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(&port->port.mutex);

@@ -181,30 +175,7 @@ static int set_serial_info(struct usb_serial_port *port,
	mutex_unlock(&port->port.mutex);
	return retval;
}

int usb_wwan_ioctl(struct tty_struct *tty,
		   unsigned int cmd, unsigned long arg)
{
	struct usb_serial_port *port = tty->driver_data;

	dev_dbg(&port->dev, "%s cmd 0x%04x\n", __func__, cmd);

	switch (cmd) {
	case TIOCGSERIAL:
		return get_serial_info(port,
				       (struct serial_struct __user *) arg);
	case TIOCSSERIAL:
		return set_serial_info(port,
				       (struct serial_struct __user *) arg);
	default:
		break;
	}

	dev_dbg(&port->dev, "%s arg not supported\n", __func__);

	return -ENOIOCTLCMD;
}
EXPORT_SYMBOL(usb_wwan_ioctl);
EXPORT_SYMBOL(usb_wwan_set_serial_info);

int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
		   const unsigned char *buf, int count)