diff options
| author | Alexander Viro <viro@www.linux.org.uk> | 2003-05-26 06:52:05 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-05-26 06:52:05 -0700 |
| commit | 97f9db155b252563a626d92075ffb318a215ddae (patch) | |
| tree | 74879437f8a4c9f5f0cf8de6d000aba695a270ab | |
| parent | 925fe98a13967279138f13be9a6e81ce0a07bce9 (diff) | |
[PATCH] callout removal: synclinkmp
callout removal: synclinkmp
| -rw-r--r-- | drivers/char/synclinkmp.c | 80 |
1 files changed, 11 insertions, 69 deletions
diff --git a/drivers/char/synclinkmp.c b/drivers/char/synclinkmp.c index 46e784ec86ab..202e6e7d6137 100644 --- a/drivers/char/synclinkmp.c +++ b/drivers/char/synclinkmp.c @@ -167,14 +167,11 @@ typedef struct _synclinkmp_info { struct mgsl_icount icount; struct termios normal_termios; - struct termios callout_termios; struct tty_struct *tty; int timeout; int x_char; /* xon/xoff character */ int blocked_open; /* # of blocked opens */ - long session; /* Session of opening process */ - long pgrp; /* pgrp of opening process */ u16 read_status_mask1; /* break detection (SR1 indications) */ u16 read_status_mask2; /* parity/framing/overun (SR2 indications) */ unsigned char ignore_status_mask1; /* break detection (SR1 indications) */ @@ -524,7 +521,7 @@ static struct pci_driver synclinkmp_pci_driver = { }; -static struct tty_driver serial_driver, callout_driver; +static struct tty_driver serial_driver; static int serial_refcount; /* number of characters left in xmit buffer before we ask for more */ @@ -807,16 +804,10 @@ static int 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; change_params(info); } - info->session = current->session; - info->pgrp = current->pgrp; - if (debug_level >= DEBUG_LEVEL_INFO) printk("%s(%d):%s open() success\n", __FILE__,__LINE__, info->device_name); @@ -873,8 +864,6 @@ static void 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; /* set tty->closing to notify line discipline to * only process XON/XOFF characters. Only the N_TTY @@ -913,8 +902,7 @@ static void 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); @@ -942,7 +930,7 @@ static void hangup(struct tty_struct *tty) shutdown(info); 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); @@ -2402,8 +2390,7 @@ void isr_io_pin( SLMP_INFO *info, u16 status ) (status & SerialSignal_DCD) ? "on" : "off"); if (status & SerialSignal_DCD) wake_up_interruptible(&info->open_wait); - else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) && - (info->flags & ASYNC_CALLOUT_NOHUP))) { + else { if ( debug_level >= DEBUG_LEVEL_ISR ) printk("doing serial hangup..."); if (info->tty) @@ -3202,39 +3189,15 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, printk("%s(%d):%s block_til_ready()\n", __FILE__,__LINE__, tty->driver->name ); - if (tty->driver->subtype == SERIAL_TYPE_CALLOUT) { - /* this is a callout device */ - /* just verify that normal device is not in use */ - 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 (filp->f_flags & O_NONBLOCK || tty->flags & (1 << TTY_IO_ERROR)){ /* nonblock mode is set or port is not enabled */ /* just verify that callout device is not active */ - 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; /* Wait for carrier detect and the line to become * free (i.e., not in use by the callout). While we are in @@ -3259,8 +3222,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, info->blocked_open++; while (1) { - if (!(info->flags & ASYNC_CALLOUT_ACTIVE) && - (tty->termios->c_cflag & CBAUD)) { + if ((tty->termios->c_cflag & CBAUD)) { spin_lock_irqsave(&info->lock,flags); info->serial_signals |= SerialSignal_RTS + SerialSignal_DTR; set_signals(info); @@ -3279,8 +3241,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, get_signals(info); spin_unlock_irqrestore(&info->lock,flags); - if (!(info->flags & ASYNC_CALLOUT_ACTIVE) && - !(info->flags & ASYNC_CLOSING) && + if (!(info->flags & ASYNC_CLOSING) && (do_clocal || (info->serial_signals & SerialSignal_DCD)) ) { break; } @@ -3873,34 +3834,18 @@ static int __init synclinkmp_init(void) serial_driver.tiocmget = tiocmget; serial_driver.tiocmset = tiocmset; - /* - * The callout device is just like normal device except for - * major number and the subtype code. - */ - callout_driver = serial_driver; - callout_driver.name = "cuaSLM"; - callout_driver.major = cuamajor; - callout_driver.subtype = SERIAL_TYPE_CALLOUT; - callout_driver.read_proc = 0; - callout_driver.proc_entry = 0; - if (tty_register_driver(&serial_driver) < 0) printk("%s(%d):Couldn't register serial driver\n", __FILE__,__LINE__); - if (tty_register_driver(&callout_driver) < 0) - printk("%s(%d):Couldn't register callout driver\n", - __FILE__,__LINE__); - - printk("%s %s, tty major#%d callout major#%d\n", + printk("%s %s, tty major#%d\n", driver_name, driver_version, - serial_driver.major, callout_driver.major); + serial_driver.major); /* Propagate these values to all device instances */ info = synclinkmp_device_list; while(info){ - info->callout_termios = callout_driver.init_termios; info->normal_termios = serial_driver.init_termios; info = info->next_device; } @@ -3920,9 +3865,6 @@ static void __exit synclinkmp_exit(void) if ((rc = tty_unregister_driver(&serial_driver))) printk("%s(%d) failed to unregister tty driver err=%d\n", __FILE__,__LINE__,rc); - if ((rc = tty_unregister_driver(&callout_driver))) - printk("%s(%d) failed to unregister callout driver err=%d\n", - __FILE__,__LINE__,rc); info = synclinkmp_device_list; while(info) { |
