Commit 4f6a436f authored by Alexander Viro's avatar Alexander Viro Committed by Linus Torvalds

[PATCH] callout removal: rocket

callout removal: rocket
parent 419ac9a6
...@@ -120,7 +120,7 @@ static struct termios *rocket_termios_locked[MAX_RP_PORTS]; ...@@ -120,7 +120,7 @@ static struct termios *rocket_termios_locked[MAX_RP_PORTS];
static void rp_wait_until_sent(struct tty_struct *tty, int timeout); static void rp_wait_until_sent(struct tty_struct *tty, int timeout);
static void rp_flush_buffer(struct tty_struct *tty); static void rp_flush_buffer(struct tty_struct *tty);
static struct tty_driver rocket_driver, callout_driver; static struct tty_driver rocket_driver;
static int rocket_refcount; static int rocket_refcount;
static int rp_num_ports_open; static int rp_num_ports_open;
...@@ -410,10 +410,7 @@ static _INLINE_ void rp_handle_port(struct r_port *info) ...@@ -410,10 +410,7 @@ static _INLINE_ void rp_handle_port(struct r_port *info)
printk("ttyR%d CD now %s...", info->line, printk("ttyR%d CD now %s...", info->line,
(ChanStatus & CD_ACT) ? "on" : "off"); (ChanStatus & CD_ACT) ? "on" : "off");
#endif #endif
if (!(ChanStatus & CD_ACT) && if (!(ChanStatus & CD_ACT) && info->cd_status) {
info->cd_status &&
!((info->flags & ROCKET_CALLOUT_ACTIVE) &&
(info->flags & ROCKET_CALLOUT_NOHUP))) {
#ifdef ROCKET_DEBUG_HANGUP #ifdef ROCKET_DEBUG_HANGUP
printk("CD drop, calling hangup.\n"); printk("CD drop, calling hangup.\n");
#endif #endif
...@@ -551,7 +548,6 @@ static void init_r_port(int board, int aiop, int chan) ...@@ -551,7 +548,6 @@ static void init_r_port(int board, int aiop, int chan)
info->chan = chan; info->chan = chan;
info->closing_wait = 3000; info->closing_wait = 3000;
info->close_delay = 50; info->close_delay = 50;
info->callout_termios =callout_driver.init_termios;
info->normal_termios = rocket_driver.init_termios; info->normal_termios = rocket_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);
...@@ -706,45 +702,19 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -706,45 +702,19 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
-EAGAIN : -ERESTARTSYS); -EAGAIN : -ERESTARTSYS);
} }
/*
* 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 & ROCKET_NORMAL_ACTIVE)
return -EBUSY;
if ((info->flags & ROCKET_CALLOUT_ACTIVE) &&
(info->flags & ROCKET_SESSION_LOCKOUT) &&
(info->session != current->session))
return -EBUSY;
if ((info->flags & ROCKET_CALLOUT_ACTIVE) &&
(info->flags & ROCKET_PGRP_LOCKOUT) &&
(info->pgrp != current->pgrp))
return -EBUSY;
info->flags |= ROCKET_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 & ROCKET_CALLOUT_ACTIVE)
return -EBUSY;
info->flags |= ROCKET_NORMAL_ACTIVE; info->flags |= ROCKET_NORMAL_ACTIVE;
return 0; return 0;
} }
if (info->flags & ROCKET_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
...@@ -766,8 +736,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -766,8 +736,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
restore_flags(flags); restore_flags(flags);
info->blocked_open++; info->blocked_open++;
while (1) { while (1) {
if (!(info->flags & ROCKET_CALLOUT_ACTIVE) && if ((tty->termios->c_cflag & CBAUD)) {
(tty->termios->c_cflag & CBAUD)) {
sSetDTR(&info->channel); sSetDTR(&info->channel);
sSetRTS(&info->channel); sSetRTS(&info->channel);
} }
...@@ -780,8 +749,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp, ...@@ -780,8 +749,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
retval = -ERESTARTSYS; retval = -ERESTARTSYS;
break; break;
} }
if (!(info->flags & ROCKET_CALLOUT_ACTIVE) && if (!(info->flags & ROCKET_CLOSING) &&
!(info->flags & ROCKET_CLOSING) &&
(do_clocal || (sGetChanStatusLo(&info->channel) & (do_clocal || (sGetChanStatusLo(&info->channel) &
CD_ACT))) CD_ACT)))
break; break;
...@@ -885,8 +853,6 @@ static int rp_open(struct tty_struct *tty, struct file * filp) ...@@ -885,8 +853,6 @@ static int rp_open(struct tty_struct *tty, struct file * filp)
/* /*
* Info->count is now 1; so it's safe to sleep now. * Info->count is now 1; so it's safe to sleep now.
*/ */
info->session = current->session;
info->pgrp = current->pgrp;
cp = &info->channel; cp = &info->channel;
sSetRxTrigger(cp, TRIG_1); sSetRxTrigger(cp, TRIG_1);
...@@ -943,10 +909,7 @@ static int rp_open(struct tty_struct *tty, struct file * filp) ...@@ -943,10 +909,7 @@ static int rp_open(struct tty_struct *tty, struct file * filp)
} }
if ((info->count == 1) && (info->flags & ROCKET_SPLIT_TERMIOS)) { if ((info->count == 1) && (info->flags & ROCKET_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;
configure_r_port(info); configure_r_port(info);
} }
...@@ -1001,8 +964,6 @@ static void rp_close(struct tty_struct *tty, struct file * filp) ...@@ -1001,8 +964,6 @@ static void rp_close(struct tty_struct *tty, struct file * filp)
*/ */
if (info->flags & ROCKET_NORMAL_ACTIVE) if (info->flags & ROCKET_NORMAL_ACTIVE)
info->normal_termios = *tty->termios; info->normal_termios = *tty->termios;
if (info->flags & ROCKET_CALLOUT_ACTIVE)
info->callout_termios = *tty->termios;
cp = &info->channel; cp = &info->channel;
...@@ -1063,8 +1024,7 @@ static void rp_close(struct tty_struct *tty, struct file * filp) ...@@ -1063,8 +1024,7 @@ static void rp_close(struct tty_struct *tty, struct file * filp)
info->xmit_buf = 0; info->xmit_buf = 0;
} }
} }
info->flags &= ~(ROCKET_INITIALIZED | ROCKET_CLOSING | info->flags &= ~(ROCKET_INITIALIZED | ROCKET_CLOSING | ROCKET_NORMAL_ACTIVE);
ROCKET_CALLOUT_ACTIVE | ROCKET_NORMAL_ACTIVE);
tty->closing = 0; tty->closing = 0;
wake_up_interruptible(&info->close_wait); wake_up_interruptible(&info->close_wait);
...@@ -1270,7 +1230,7 @@ static int get_ports(struct r_port * info, struct rocket_ports * retports) ...@@ -1270,7 +1230,7 @@ static int get_ports(struct r_port * info, struct rocket_ports * retports)
return -EFAULT; return -EFAULT;
memset(&tmp, 0, sizeof(tmp)); memset(&tmp, 0, sizeof(tmp));
tmp.tty_major = rocket_driver.major; tmp.tty_major = rocket_driver.major;
tmp.callout_major = callout_driver.major; tmp.callout_major = 0;
for (board = 0; board < 4; board++) { for (board = 0; board < 4; board++) {
index = board << 5; index = board << 5;
for (port = 0; port < 32; port++, index++) { for (port = 0; port < 32; port++, index++) {
...@@ -1503,7 +1463,7 @@ static void rp_hangup(struct tty_struct *tty) ...@@ -1503,7 +1463,7 @@ static void rp_hangup(struct tty_struct *tty)
xmit_flags[info->line >> 5] &= ~(1 << (info->line & 0x1f)); xmit_flags[info->line >> 5] &= ~(1 << (info->line & 0x1f));
info->count = 0; info->count = 0;
info->flags &= ~(ROCKET_NORMAL_ACTIVE|ROCKET_CALLOUT_ACTIVE); info->flags &= ~ROCKET_NORMAL_ACTIVE;
info->tty = 0; info->tty = 0;
cp = &info->channel; cp = &info->channel;
...@@ -2041,28 +2001,6 @@ int __init rp_init(void) ...@@ -2041,28 +2001,6 @@ int __init rp_init(void)
rocket_driver.send_xchar = rp_send_xchar; rocket_driver.send_xchar = rp_send_xchar;
rocket_driver.wait_until_sent = rp_wait_until_sent; rocket_driver.wait_until_sent = rp_wait_until_sent;
/*
* The callout device is just like normal device except for
* the minor number and the subtype code.
*/
callout_driver = rocket_driver;
#ifdef CONFIG_DEVFS_FS
callout_driver.name = "cua/R";
#else
callout_driver.name = "cur";
#endif
callout_driver.major = CUA_ROCKET_MAJOR;
callout_driver.minor_start = 0;
callout_driver.subtype = SERIAL_TYPE_CALLOUT;
retval = tty_register_driver(&callout_driver);
if (retval < 0) {
printk("Couldn't install Rocketport callout driver "
"(error %d)\n", -retval);
release_region(controller, 4);
return -1;
}
retval = tty_register_driver(&rocket_driver); retval = tty_register_driver(&rocket_driver);
if (retval < 0) { if (retval < 0) {
printk("Couldn't install tty Rocketport driver " printk("Couldn't install tty Rocketport driver "
...@@ -2071,8 +2009,8 @@ int __init rp_init(void) ...@@ -2071,8 +2009,8 @@ int __init rp_init(void)
return -1; return -1;
} }
#ifdef ROCKET_DEBUG_OPEN #ifdef ROCKET_DEBUG_OPEN
printk("Rocketport driver is major %d, callout is %d\n", printk("Rocketport driver is major %d\n",
rocket_driver.major, callout_driver.major); rocket_driver.major);
#endif #endif
return 0; return 0;
...@@ -2092,11 +2030,6 @@ cleanup_module( void) { ...@@ -2092,11 +2030,6 @@ cleanup_module( void) {
del_timer_sync(&rocket_timer); del_timer_sync(&rocket_timer);
retval = tty_unregister_driver(&callout_driver);
if (retval) {
printk("Error %d while trying to unregister "
"rocketport callout driver\n", -retval);
}
retval = tty_unregister_driver(&rocket_driver); retval = tty_unregister_driver(&rocket_driver);
if (retval) { if (retval) {
printk("Error %d while trying to unregister " printk("Error %d while trying to unregister "
......
...@@ -1135,14 +1135,11 @@ struct r_port { ...@@ -1135,14 +1135,11 @@ struct r_port {
int xmit_head; int xmit_head;
int xmit_tail; int xmit_tail;
int xmit_cnt; int xmit_cnt;
int session;
int pgrp;
int cd_status; int cd_status;
int ignore_status_mask; int ignore_status_mask;
int read_status_mask; int read_status_mask;
int cps; int cps;
struct termios normal_termios; struct termios normal_termios;
struct termios callout_termios;
wait_queue_head_t open_wait; wait_queue_head_t open_wait;
wait_queue_head_t close_wait; wait_queue_head_t close_wait;
}; };
...@@ -1171,7 +1168,6 @@ struct r_port { ...@@ -1171,7 +1168,6 @@ struct r_port {
* *
*/ */
#define SERIAL_TYPE_NORMAL 1 #define SERIAL_TYPE_NORMAL 1
#define SERIAL_TYPE_CALLOUT 2
/* /*
* Assigned major numbers for the Comtrol Rocketport * Assigned major numbers for the Comtrol Rocketport
......
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