summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Viro <viro@www.linux.org.uk>2003-05-26 06:52:24 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2003-05-26 06:52:24 -0700
commit419ac9a60c13fba79d16c4211ee615afc43ed580 (patch)
treeb9576d76bc56ff3c44b6dad5f899977e051f016e
parentef5e4b0b80526a8c466ae62b25c3b9fd597dc240 (diff)
[PATCH] callout removal: serial167
callout removal: serial167
-rw-r--r--drivers/char/serial167.c93
-rw-r--r--include/linux/serial167.h3
2 files changed, 15 insertions, 81 deletions
diff --git a/drivers/char/serial167.c b/drivers/char/serial167.c
index 7fa5e22827de..e8fd977a227b 100644
--- a/drivers/char/serial167.c
+++ b/drivers/char/serial167.c
@@ -97,12 +97,10 @@
#define STD_COM_FLAGS (0)
#define SERIAL_TYPE_NORMAL 1
-#define SERIAL_TYPE_CALLOUT 2
-
DECLARE_TASK_QUEUE(tq_cyclades);
-struct tty_driver cy_serial_driver, cy_callout_driver;
+struct tty_driver cy_serial_driver;
extern int serial_console;
static struct cyclades_port *serial_console_info = NULL;
static unsigned int serial_console_cflag = 0;
@@ -517,8 +515,7 @@ cd2401_modem_interrupt(int irq, void *dev_id, struct pt_regs *fp)
if(mdm_status & CyDCD){
/* CP('!'); */
cy_sched_event(info, Cy_EVENT_OPEN_WAKEUP);
- }else if(!((info->flags & ASYNC_CALLOUT_ACTIVE)
- &&(info->flags & ASYNC_CALLOUT_NOHUP))){
+ } else {
/* CP('@'); */
cy_sched_event(info, Cy_EVENT_HANGUP);
}
@@ -769,8 +766,7 @@ do_softint(void *private_)
if (test_and_clear_bit(Cy_EVENT_HANGUP, &info->event)) {
tty_hangup(info->tty);
wake_up_interruptible(&info->open_wait);
- info->flags &= ~(ASYNC_NORMAL_ACTIVE|
- ASYNC_CALLOUT_ACTIVE);
+ info->flags &= ~ASYNC_NORMAL_ACTIVE;
}
if (test_and_clear_bit(Cy_EVENT_OPEN_WAKEUP, &info->event)) {
wake_up_interruptible(&info->open_wait);
@@ -1912,8 +1908,6 @@ cy_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;
if (info->flags & ASYNC_INITIALIZED)
tty_wait_until_sent(tty, 3000); /* 30 seconds timeout */
shutdown(info);
@@ -1938,8 +1932,7 @@ cy_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);
#ifdef SERIAL_DEBUG_OTHER
@@ -1973,7 +1966,7 @@ cy_hangup(struct tty_struct *tty)
#endif
info->tty = 0;
#endif
- info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CALLOUT_ACTIVE);
+ info->flags &= ~ASYNC_NORMAL_ACTIVE;
wake_up_interruptible(&info->open_wait);
} /* cy_hangup */
@@ -2009,35 +2002,10 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
}
/*
- * 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, then make the check up front
* and then exit.
*/
if (filp->f_flags & O_NONBLOCK) {
- if (info->flags & ASYNC_CALLOUT_ACTIVE){
- return -EBUSY;
- }
info->flags |= ASYNC_NORMAL_ACTIVE;
return 0;
}
@@ -2065,16 +2033,14 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
while (1) {
local_irq_save(flags);
- if (!(info->flags & ASYNC_CALLOUT_ACTIVE)){
- base_addr[CyCAR] = (u_char)channel;
- base_addr[CyMSVR1] = CyRTS;
+ base_addr[CyCAR] = (u_char)channel;
+ base_addr[CyMSVR1] = CyRTS;
/* CP('S');CP('4'); */
- base_addr[CyMSVR2] = CyDTR;
+ base_addr[CyMSVR2] = CyDTR;
#ifdef SERIAL_DEBUG_DTR
- printk("cyc: %d: raising DTR\n", __LINE__);
- printk(" status: 0x%x, 0x%x\n", base_addr[CyMSVR1], base_addr[CyMSVR2]);
+ printk("cyc: %d: raising DTR\n", __LINE__);
+ printk(" status: 0x%x, 0x%x\n", base_addr[CyMSVR1], base_addr[CyMSVR2]);
#endif
- }
local_irq_restore(flags);
set_current_state(TASK_INTERRUPTIBLE);
if (tty_hung_up_p(filp)
@@ -2089,8 +2055,7 @@ block_til_ready(struct tty_struct *tty, struct file * filp,
local_irq_save(flags);
base_addr[CyCAR] = (u_char)channel;
/* CP('L');CP1(1 && C_CLOCAL(tty)); CP1(1 && (base_addr[CyMSVR1] & CyDCD) ); */
- if (!(info->flags & ASYNC_CALLOUT_ACTIVE)
- && !(info->flags & ASYNC_CLOSING)
+ if (!(info->flags & ASYNC_CLOSING)
&& (C_CLOCAL(tty)
|| (base_addr[CyMSVR1] & CyDCD))) {
local_irq_restore(flags);
@@ -2169,10 +2134,7 @@ cy_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;
}
/*
* Start up serial port
@@ -2191,9 +2153,6 @@ cy_open(struct tty_struct *tty, struct file * filp)
return retval;
}
- info->session = current->session;
- info->pgrp = current->pgrp;
-
#ifdef SERIAL_DEBUG_OPEN
printk("cy_open done\n");/**/
#endif
@@ -2434,29 +2393,11 @@ scrn[1] = '\0';
cy_serial_driver.start = cy_start;
cy_serial_driver.hangup = cy_hangup;
- /*
- * The callout device is just like normal device except for
- * major number and the subtype code.
- */
- cy_callout_driver = cy_serial_driver;
-#ifdef CONFIG_DEVFS_FS
- cy_callout_driver.name = "cua/";
-#else
- cy_callout_driver.name = "cua";
-#endif
- cy_callout_driver.major = TTYAUX_MAJOR;
- cy_callout_driver.subtype = SERIAL_TYPE_CALLOUT;
-
ret = tty_register_driver(&cy_serial_driver);
if (ret) {
printk(KERN_ERR "Couldn't register MVME166/7 serial driver\n");
return ret;
}
- ret = tty_register_driver(&cy_callout_driver);
- if (ret) {
- printk(KERN_ERR "Couldn't register MVME166/7 callout driver\n");
- goto cleanup_serial_driver;
- }
init_bh(CYCLADES_BH, do_cyclades_bh);
@@ -2499,7 +2440,6 @@ scrn[1] = '\0';
info->default_timeout = 0;
info->tqueue.routine = do_softint;
info->tqueue.data = info;
- info->callout_termios =cy_callout_driver.init_termios;
info->normal_termios = cy_serial_driver.init_termios;
init_waitqueue_head(&info->open_wait);
init_waitqueue_head(&info->close_wait);
@@ -2530,7 +2470,7 @@ scrn[1] = '\0';
"cd2401_errors", cd2401_rxerr_interrupt);
if (ret) {
printk(KERN_ERR "Could't get cd2401_errors IRQ");
- goto cleanup_callout_driver;
+ goto cleanup_serial_driver;
}
ret = request_irq(MVME167_IRQ_SER_MODEM, cd2401_modem_interrupt, 0,
@@ -2569,9 +2509,6 @@ cleanup_irq_cd2401_modem:
free_irq(MVME167_IRQ_SER_MODEM, cd2401_modem_interrupt);
cleanup_irq_cd2401_errors:
free_irq(MVME167_IRQ_SER_ERR, cd2401_rxerr_interrupt);
-cleanup_callout_driver:
- if (tty_unregister_driver(&cy_callout_driver))
- printk(KERN_ERR "Couldn't unregister MVME166/7 callout driver\n");
cleanup_serial_driver:
if (tty_unregister_driver(&cy_serial_driver))
printk(KERN_ERR "Couldn't unregister MVME166/7 serial driver\n");
@@ -2607,8 +2544,8 @@ show_status(int line_num)
info->close_delay, info->event, info->count);
printk(" x_char blocked_open = %x %x\n",
info->x_char, info->blocked_open);
- printk(" session pgrp open_wait = %lx %lx %lx\n",
- info->session, info->pgrp, (long)info->open_wait);
+ printk(" open_wait = %lx %lx %lx\n",
+ (long)info->open_wait);
local_irq_save(flags);
diff --git a/include/linux/serial167.h b/include/linux/serial167.h
index 1683e8941c04..1573385b24bc 100644
--- a/include/linux/serial167.h
+++ b/include/linux/serial167.h
@@ -43,8 +43,6 @@ struct cyclades_port {
int x_char; /* to be pushed out ASAP */
int x_break;
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;
@@ -53,7 +51,6 @@ struct cyclades_port {
int default_timeout;
struct work_struct tqueue;
struct termios normal_termios;
- struct termios callout_termios;
wait_queue_head_t open_wait;
wait_queue_head_t close_wait;
struct cyclades_monitor mon;