diff options
| author | Alexander Viro <viro@www.linux.org.uk> | 2003-05-26 06:48:25 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-05-26 06:48:25 -0700 |
| commit | ddad3686d29a3cfd944ab7b405a5e113bd508e31 (patch) | |
| tree | 7b336413c59079fd4340e5d3a605fbce39d9a2ca /drivers/serial | |
| parent | b70526a68f6eba9ecdef5cb51b4031484a2858e6 (diff) | |
[PATCH] callout removal: mcfserial
callout removal: mcfserial
Diffstat (limited to 'drivers/serial')
| -rw-r--r-- | drivers/serial/mcfserial.c | 80 | ||||
| -rw-r--r-- | drivers/serial/mcfserial.h | 3 |
2 files changed, 12 insertions, 71 deletions
diff --git a/drivers/serial/mcfserial.c b/drivers/serial/mcfserial.c index 491f720e09e1..2f8852d1216f 100644 --- a/drivers/serial/mcfserial.c +++ b/drivers/serial/mcfserial.c @@ -76,12 +76,11 @@ int mcfrs_console_cbaud = DEFAULT_CBAUD; /* * Driver data structures. */ -struct tty_driver mcfrs_serial_driver, mcfrs_callout_driver; +struct tty_driver mcfrs_serial_driver; static int mcfrs_serial_refcount; /* serial subtype definitions */ #define SERIAL_TYPE_NORMAL 1 -#define SERIAL_TYPE_CALLOUT 2 /* number of characters left in xmit buffer before we ask for more */ #define WAKEUP_CHARS 256 @@ -450,12 +449,10 @@ void mcfrs_modem_change(struct mcf_serial *info, int dcd) return; if (info->flags & ASYNC_CHECK_CD) { - if (dcd) { + if (dcd) wake_up_interruptible(&info->open_wait); - } else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) && - (info->flags & ASYNC_CALLOUT_NOHUP))) { + else schedule_work(&info->tqueue_hangup); - } } } @@ -1198,8 +1195,6 @@ static void mcfrs_close(struct tty_struct *tty, struct file * filp) */ if (info->flags & ASYNC_NORMAL_ACTIVE) 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 @@ -1248,8 +1243,7 @@ static void mcfrs_close(struct tty_struct *tty, struct file * filp) } wake_up_interruptible(&info->open_wait); } - info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE| - ASYNC_CLOSING); + info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); wake_up_interruptible(&info->close_wait); local_irq_restore(flags); } @@ -1268,7 +1262,7 @@ void mcfrs_hangup(struct tty_struct *tty) shutdown(info); info->event = 0; info->count = 0; - info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE); + info->flags &= ~ASYNC_NORMAL_ACTIVE; info->tty = 0; wake_up_interruptible(&info->open_wait); } @@ -1300,25 +1294,6 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, return -EAGAIN; #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, @@ -1326,20 +1301,13 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, */ if ((filp->f_flags & O_NONBLOCK) || (tty->flags & (1 << TTY_IO_ERROR))) { - if (info->flags & ASYNC_CALLOUT_ACTIVE) - return -EBUSY; info->flags |= ASYNC_NORMAL_ACTIVE; return 0; } - if (info->flags & ASYNC_CALLOUT_ACTIVE) { - if (info->normal_termios.c_cflag & CLOCAL) - do_clocal = 1; - } else { - if (tty->termios->c_cflag & CLOCAL) - do_clocal = 1; - } - + if (tty->termios->c_cflag & CLOCAL) + do_clocal = 1; + /* * Block waiting for the carrier detect and the line to become * free (i.e., not in use by the callout). While we are in @@ -1357,8 +1325,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, info->blocked_open++; while (1) { local_irq_disable(); - if (!(info->flags & ASYNC_CALLOUT_ACTIVE)) - mcfrs_setsignals(info, 1, 1); + mcfrs_setsignals(info, 1, 1); local_irq_enable(); current->state = TASK_INTERRUPTIBLE; if (tty_hung_up_p(filp) || @@ -1373,8 +1340,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, #endif break; } - if (!(info->flags & ASYNC_CALLOUT_ACTIVE) && - !(info->flags & ASYNC_CLOSING) && + if (!(info->flags & ASYNC_CLOSING) && (do_clocal || (mcfrs_getsignals(info) & TIOCM_CD))) break; if (signal_pending(current)) { @@ -1443,16 +1409,10 @@ int mcfrs_open(struct tty_struct *tty, struct file * filp) } if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) { - if (tty->driver->subtype == SERIAL_TYPE_NORMAL) - *tty->termios = info->normal_termios; - else - *tty->termios = info->callout_termios; + *tty->termios = info->normal_termios; mcfrs_change_speed(info); } - info->session = current->session; - info->pgrp = current->pgrp; - #ifdef SERIAL_DEBUG_OPEN printk("mcfrs_open %s successful...\n", tty->name); #endif @@ -1658,26 +1618,11 @@ mcfrs_init(void) mcfrs_serial_driver.read_proc = mcfrs_readproc; mcfrs_serial_driver.driver_name = "serial"; - /* - * The callout device is just like normal device except for - * major number and the subtype code. - */ - mcfrs_callout_driver = mcfrs_serial_driver; - mcfrs_callout_driver.name = "cua"; - mcfrs_callout_driver.major = TTYAUX_MAJOR; - mcfrs_callout_driver.subtype = SERIAL_TYPE_CALLOUT; - mcfrs_callout_driver.read_proc = 0; - mcfrs_callout_driver.proc_entry = 0; - if (tty_register_driver(&mcfrs_serial_driver)) { printk("MCFRS: Couldn't register serial driver\n"); return(-EBUSY); } - if (tty_register_driver(&mcfrs_callout_driver)) { - printk("MCFRS: Couldn't register callout driver\n"); - return(-EBUSY); - } - + local_irq_save(flags); /* @@ -1696,7 +1641,6 @@ mcfrs_init(void) info->blocked_open = 0; INIT_WORK(&info->tqueue, mcfrs_offintr, info); INIT_WORK(&info->tqueue_hangup, do_serial_hangup, info); - info->callout_termios = mcfrs_callout_driver.init_termios; info->normal_termios = mcfrs_serial_driver.init_termios; init_waitqueue_head(&info->open_wait); init_waitqueue_head(&info->close_wait); diff --git a/drivers/serial/mcfserial.h b/drivers/serial/mcfserial.h index 6d682744ebfb..2ec02e9a99f5 100644 --- a/drivers/serial/mcfserial.h +++ b/drivers/serial/mcfserial.h @@ -58,8 +58,6 @@ struct mcf_serial { int line; int count; /* # of fd on device */ int blocked_open; /* # of blocked opens */ - long session; /* Session of opening process */ - long pgrp; /* pgrp of opening process */ unsigned char *xmit_buf; int xmit_head; int xmit_tail; @@ -68,7 +66,6 @@ struct mcf_serial { struct work_struct tqueue; struct work_struct tqueue_hangup; struct termios normal_termios; - struct termios callout_termios; wait_queue_head_t open_wait; wait_queue_head_t close_wait; |
