Commit 0facaf29 authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] callout removal: cris

callout removal: cris
parent 0fd6875c
...@@ -335,13 +335,12 @@ static char *serial_version = "$Revision: 1.3 $"; ...@@ -335,13 +335,12 @@ static char *serial_version = "$Revision: 1.3 $";
static DECLARE_TASK_QUEUE(tq_serial); static DECLARE_TASK_QUEUE(tq_serial);
struct tty_driver serial_driver, callout_driver; struct tty_driver serial_driver;
static int serial_refcount; static int serial_refcount;
/* serial subtype definitions */ /* serial subtype definitions */
#ifndef SERIAL_TYPE_NORMAL #ifndef SERIAL_TYPE_NORMAL
#define SERIAL_TYPE_NORMAL 1 #define SERIAL_TYPE_NORMAL 1
#define SERIAL_TYPE_CALLOUT 2
#endif #endif
/* number of characters left in xmit buffer before we ask for more */ /* number of characters left in xmit buffer before we ask for more */
...@@ -3017,8 +3016,6 @@ rs_close(struct tty_struct *tty, struct file * filp) ...@@ -3017,8 +3016,6 @@ rs_close(struct tty_struct *tty, struct file * filp)
*/ */
if (info->flags & ASYNC_NORMAL_ACTIVE) if (info->flags & ASYNC_NORMAL_ACTIVE)
info->normal_termios = *tty->termios; info->normal_termios = *tty->termios;
if (info->flags & ASYNC_CALLOUT_ACTIVE)
info->callout_termios = *tty->termios;
/* /*
* Now we wait for the transmit buffer to clear; and we notify * Now we wait for the transmit buffer to clear; and we notify
* the line discipline to only process XON/XOFF characters. * the line discipline to only process XON/XOFF characters.
...@@ -3063,8 +3060,7 @@ rs_close(struct tty_struct *tty, struct file * filp) ...@@ -3063,8 +3060,7 @@ rs_close(struct tty_struct *tty, struct file * filp)
} }
wake_up_interruptible(&info->open_wait); wake_up_interruptible(&info->open_wait);
} }
info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE| info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);
ASYNC_CLOSING);
wake_up_interruptible(&info->close_wait); wake_up_interruptible(&info->close_wait);
restore_flags(flags); restore_flags(flags);
...@@ -3128,7 +3124,7 @@ rs_hangup(struct tty_struct *tty) ...@@ -3128,7 +3124,7 @@ rs_hangup(struct tty_struct *tty)
shutdown(info); shutdown(info);
info->event = 0; info->event = 0;
info->count = 0; info->count = 0;
info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE); info->flags &= ~ASYNC_NORMAL_ACTIVE;
info->tty = 0; info->tty = 0;
wake_up_interruptible(&info->open_wait); wake_up_interruptible(&info->open_wait);
} }
...@@ -3165,45 +3161,19 @@ block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -3165,45 +3161,19 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
#endif #endif
} }
/*
* If this is a callout device, then just make sure the normal
* device isn't being used.
*/
if (tty->driver->subtype == SERIAL_TYPE_CALLOUT) {
if (info->flags & ASYNC_NORMAL_ACTIVE)
return -EBUSY;
if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
(info->flags & ASYNC_SESSION_LOCKOUT) &&
(info->session != current->session))
return -EBUSY;
if ((info->flags & ASYNC_CALLOUT_ACTIVE) &&
(info->flags & ASYNC_PGRP_LOCKOUT) &&
(info->pgrp != current->pgrp))
return -EBUSY;
info->flags |= ASYNC_CALLOUT_ACTIVE;
return 0;
}
/* /*
* If non-blocking mode is set, or the port is not enabled, * If non-blocking mode is set, or the port is not enabled,
* then make the check up front and then exit. * then make the check up front and then exit.
*/ */
if ((filp->f_flags & O_NONBLOCK) || if ((filp->f_flags & O_NONBLOCK) ||
(tty->flags & (1 << TTY_IO_ERROR))) { (tty->flags & (1 << TTY_IO_ERROR))) {
if (info->flags & ASYNC_CALLOUT_ACTIVE)
return -EBUSY;
info->flags |= ASYNC_NORMAL_ACTIVE; info->flags |= ASYNC_NORMAL_ACTIVE;
return 0; return 0;
} }
if (info->flags & ASYNC_CALLOUT_ACTIVE) { if (tty->termios->c_cflag & CLOCAL)
if (info->normal_termios.c_cflag & CLOCAL) do_clocal = 1;
do_clocal = 1;
} else {
if (tty->termios->c_cflag & CLOCAL)
do_clocal = 1;
}
/* /*
* Block waiting for the carrier detect and the line to become * Block waiting for the carrier detect and the line to become
* free (i.e., not in use by the callout). While we are in * free (i.e., not in use by the callout). While we are in
...@@ -3228,11 +3198,9 @@ block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -3228,11 +3198,9 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
while (1) { while (1) {
save_flags(flags); save_flags(flags);
cli(); cli();
if (!(info->flags & ASYNC_CALLOUT_ACTIVE)) { /* assert RTS and DTR */
/* assert RTS and DTR */ e100_rts(info, 1);
e100_rts(info, 1); e100_dtr(info, 1);
e100_dtr(info, 1);
}
restore_flags(flags); restore_flags(flags);
set_current_state(TASK_INTERRUPTIBLE); set_current_state(TASK_INTERRUPTIBLE);
if (tty_hung_up_p(filp) || if (tty_hung_up_p(filp) ||
...@@ -3247,8 +3215,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -3247,8 +3215,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
#endif #endif
break; break;
} }
if (!(info->flags & ASYNC_CALLOUT_ACTIVE) && if (!(info->flags & ASYNC_CLOSING) && do_clocal)
!(info->flags & ASYNC_CLOSING) && do_clocal)
/* && (do_clocal || DCD_IS_ASSERTED) */ /* && (do_clocal || DCD_IS_ASSERTED) */
break; break;
if (signal_pending(current)) { if (signal_pending(current)) {
...@@ -3358,16 +3325,10 @@ rs_open(struct tty_struct *tty, struct file * filp) ...@@ -3358,16 +3325,10 @@ rs_open(struct tty_struct *tty, struct file * filp)
} }
if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) { if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) {
if (tty->driver->subtype == SERIAL_TYPE_NORMAL) *tty->termios = info->normal_termios;
*tty->termios = info->normal_termios;
else
*tty->termios = info->callout_termios;
change_speed(info); change_speed(info);
} }
info->session = current->session;
info->pgrp = current->pgrp;
#ifdef SERIAL_DEBUG_OPEN #ifdef SERIAL_DEBUG_OPEN
printk("rs_open ttyS%d successful...\n", info->line); printk("rs_open ttyS%d successful...\n", info->line);
#endif #endif
...@@ -3538,23 +3499,8 @@ rs_init(void) ...@@ -3538,23 +3499,8 @@ rs_init(void)
serial_driver.read_proc = rs_read_proc; serial_driver.read_proc = rs_read_proc;
#endif #endif
/*
* The callout device is just like normal device except for
* major number and the subtype code.
*/
callout_driver = serial_driver;
callout_driver.name = "cua";
callout_driver.major = TTYAUX_MAJOR;
callout_driver.subtype = SERIAL_TYPE_CALLOUT;
#if (LINUX_VERSION_CODE >= 131343)
callout_driver.read_proc = 0;
callout_driver.proc_entry = 0;
#endif
if (tty_register_driver(&serial_driver)) if (tty_register_driver(&serial_driver))
panic("Couldn't register serial driver\n"); panic("Couldn't register serial driver\n");
if (tty_register_driver(&callout_driver))
panic("Couldn't register callout driver\n");
/* do some initializing for the separate ports */ /* do some initializing for the separate ports */
...@@ -3574,7 +3520,6 @@ rs_init(void) ...@@ -3574,7 +3520,6 @@ rs_init(void)
info->blocked_open = 0; info->blocked_open = 0;
info->tqueue.routine = do_softint; info->tqueue.routine = do_softint;
info->tqueue.data = info; info->tqueue.data = info;
info->callout_termios = callout_driver.init_termios;
info->normal_termios = serial_driver.init_termios; info->normal_termios = serial_driver.init_termios;
init_waitqueue_head(&info->open_wait); init_waitqueue_head(&info->open_wait);
init_waitqueue_head(&info->close_wait); init_waitqueue_head(&info->close_wait);
......
...@@ -78,8 +78,6 @@ struct e100_serial { ...@@ -78,8 +78,6 @@ struct e100_serial {
int type; /* PORT_ETRAX */ int type; /* PORT_ETRAX */
int count; /* # of fd on device */ int count; /* # of fd on device */
int blocked_open; /* # of blocked opens */ int blocked_open; /* # of blocked opens */
long session; /* Session of opening process */
long pgrp; /* pgrp of opening process */
struct circ_buf xmit; struct circ_buf xmit;
struct circ_buf recv; struct circ_buf recv;
unsigned char *flag_buf; unsigned char *flag_buf;
...@@ -87,7 +85,6 @@ struct e100_serial { ...@@ -87,7 +85,6 @@ struct e100_serial {
struct tq_struct tqueue; struct tq_struct tqueue;
struct async_icount icount; /* error-statistics etc.*/ struct async_icount icount; /* error-statistics etc.*/
struct termios normal_termios; struct termios normal_termios;
struct termios callout_termios;
#ifdef DECLARE_WAITQUEUE #ifdef DECLARE_WAITQUEUE
wait_queue_head_t open_wait; wait_queue_head_t open_wait;
wait_queue_head_t close_wait; wait_queue_head_t close_wait;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment