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

Commit 4a85b1fc authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

TTY: 68328serial, use close_delay/closing_wait from tty_port



Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Acked-by: default avatarGreg Ungerer <gerg@uclinux.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c26f0115
Loading
Loading
Loading
Loading
+11 −15
Original line number Original line Diff line number Diff line
@@ -120,8 +120,6 @@ struct m68k_serial {
	struct tty_struct	*tty;
	struct tty_struct	*tty;
	int			custom_divisor;
	int			custom_divisor;
	int			x_char;		/* xon/xoff character */
	int			x_char;		/* xon/xoff character */
	int			close_delay;
	unsigned short		closing_wait;
	int			line;
	int			line;
	unsigned char		*xmit_buf;
	unsigned char		*xmit_buf;
	int			xmit_head;
	int			xmit_head;
@@ -828,8 +826,8 @@ static int get_serial_info(struct m68k_serial * info,
	tmp.irq = info->irq;
	tmp.irq = info->irq;
	tmp.flags = info->flags;
	tmp.flags = info->flags;
	tmp.baud_base = info->baud_base;
	tmp.baud_base = info->baud_base;
	tmp.close_delay = info->close_delay;
	tmp.close_delay = info->tport.close_delay;
	tmp.closing_wait = info->closing_wait;
	tmp.closing_wait = info->tport.closing_wait;
	tmp.custom_divisor = info->custom_divisor;
	tmp.custom_divisor = info->custom_divisor;
	if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
	if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
		return -EFAULT;
		return -EFAULT;
@@ -840,6 +838,7 @@ static int get_serial_info(struct m68k_serial * info,
static int set_serial_info(struct m68k_serial * info,
static int set_serial_info(struct m68k_serial * info,
			   struct serial_struct * new_info)
			   struct serial_struct * new_info)
{
{
	struct tty_port *port = &info->tport;
	struct serial_struct new_serial;
	struct serial_struct new_serial;
	struct m68k_serial old_info;
	struct m68k_serial old_info;
	int 			retval = 0;
	int 			retval = 0;
@@ -853,7 +852,7 @@ static int set_serial_info(struct m68k_serial * info,
	if (!capable(CAP_SYS_ADMIN)) {
	if (!capable(CAP_SYS_ADMIN)) {
		if ((new_serial.baud_base != info->baud_base) ||
		if ((new_serial.baud_base != info->baud_base) ||
		    (new_serial.type != info->type) ||
		    (new_serial.type != info->type) ||
		    (new_serial.close_delay != info->close_delay) ||
		    (new_serial.close_delay != port->close_delay) ||
		    ((new_serial.flags & ~ASYNC_USR_MASK) !=
		    ((new_serial.flags & ~ASYNC_USR_MASK) !=
		     (info->flags & ~ASYNC_USR_MASK)))
		     (info->flags & ~ASYNC_USR_MASK)))
			return -EPERM;
			return -EPERM;
@@ -863,7 +862,7 @@ static int set_serial_info(struct m68k_serial * info,
		goto check_and_exit;
		goto check_and_exit;
	}
	}


	if (info->tport.count > 1)
	if (port->count > 1)
		return -EBUSY;
		return -EBUSY;


	/*
	/*
@@ -875,8 +874,8 @@ static int set_serial_info(struct m68k_serial * info,
	info->flags = ((info->flags & ~ASYNC_FLAGS) |
	info->flags = ((info->flags & ~ASYNC_FLAGS) |
			(new_serial.flags & ASYNC_FLAGS));
			(new_serial.flags & ASYNC_FLAGS));
	info->type = new_serial.type;
	info->type = new_serial.type;
	info->close_delay = new_serial.close_delay;
	port->close_delay = new_serial.close_delay;
	info->closing_wait = new_serial.closing_wait;
	port->closing_wait = new_serial.closing_wait;


check_and_exit:
check_and_exit:
	retval = startup(info);
	retval = startup(info);
@@ -1048,8 +1047,8 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
	 * the line discipline to only process XON/XOFF characters.
	 * the line discipline to only process XON/XOFF characters.
	 */
	 */
	tty->closing = 1;
	tty->closing = 1;
	if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
	if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
		tty_wait_until_sent(tty, info->closing_wait);
		tty_wait_until_sent(tty, port->closing_wait);
	/*
	/*
	 * At this point we stop accepting input.  To do this, we
	 * At this point we stop accepting input.  To do this, we
	 * disable the receive line status interrupts, and tell the
	 * disable the receive line status interrupts, and tell the
@@ -1078,9 +1077,8 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
	}
	}
#endif	
#endif	
	if (port->blocked_open) {
	if (port->blocked_open) {
		if (info->close_delay) {
		if (port->close_delay)
			msleep_interruptible(jiffies_to_msecs(info->close_delay));
			msleep_interruptible(jiffies_to_msecs(port->close_delay));
		}
		wake_up_interruptible(&port->open_wait);
		wake_up_interruptible(&port->open_wait);
	}
	}
	info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);
	info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);
@@ -1296,8 +1294,6 @@ rs68328_init(void)
	    info->tty = NULL;
	    info->tty = NULL;
	    info->irq = uart_irqs[i];
	    info->irq = uart_irqs[i];
	    info->custom_divisor = 16;
	    info->custom_divisor = 16;
	    info->close_delay = 50;
	    info->closing_wait = 3000;
	    info->x_char = 0;
	    info->x_char = 0;
	    info->line = i;
	    info->line = i;
	    info->is_cons = 1; /* Means shortcuts work */
	    info->is_cons = 1; /* Means shortcuts work */