diff options
Diffstat (limited to 'drivers/char/mxser.c')
-rw-r--r-- | drivers/char/mxser.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/drivers/char/mxser.c b/drivers/char/mxser.c index e83ccee03161..6307e301bd26 100644 --- a/drivers/char/mxser.c +++ b/drivers/char/mxser.c | |||
@@ -243,10 +243,7 @@ struct mxser_port { | |||
243 | unsigned char ldisc_stop_rx; | 243 | unsigned char ldisc_stop_rx; |
244 | 244 | ||
245 | int custom_divisor; | 245 | int custom_divisor; |
246 | int close_delay; | ||
247 | unsigned short closing_wait; | ||
248 | unsigned char err_shadow; | 246 | unsigned char err_shadow; |
249 | unsigned long event; | ||
250 | 247 | ||
251 | struct async_icount icount; /* kernel counters for 4 input interrupts */ | 248 | struct async_icount icount; /* kernel counters for 4 input interrupts */ |
252 | int timeout; | 249 | int timeout; |
@@ -1199,8 +1196,8 @@ static void mxser_close(struct tty_struct *tty, struct file *filp) | |||
1199 | * the line discipline to only process XON/XOFF characters. | 1196 | * the line discipline to only process XON/XOFF characters. |
1200 | */ | 1197 | */ |
1201 | tty->closing = 1; | 1198 | tty->closing = 1; |
1202 | if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE) | 1199 | if (info->port.closing_wait != ASYNC_CLOSING_WAIT_NONE) |
1203 | tty_wait_until_sent(tty, info->closing_wait); | 1200 | tty_wait_until_sent(tty, info->port.closing_wait); |
1204 | /* | 1201 | /* |
1205 | * At this point we stop accepting input. To do this, we | 1202 | * At this point we stop accepting input. To do this, we |
1206 | * disable the receive line status interrupts, and tell the | 1203 | * disable the receive line status interrupts, and tell the |
@@ -1231,11 +1228,10 @@ static void mxser_close(struct tty_struct *tty, struct file *filp) | |||
1231 | tty_ldisc_flush(tty); | 1228 | tty_ldisc_flush(tty); |
1232 | 1229 | ||
1233 | tty->closing = 0; | 1230 | tty->closing = 0; |
1234 | info->event = 0; | ||
1235 | info->port.tty = NULL; | 1231 | info->port.tty = NULL; |
1236 | if (info->port.blocked_open) { | 1232 | if (info->port.blocked_open) { |
1237 | if (info->close_delay) | 1233 | if (info->port.close_delay) |
1238 | schedule_timeout_interruptible(info->close_delay); | 1234 | schedule_timeout_interruptible(info->port.close_delay); |
1239 | wake_up_interruptible(&info->port.open_wait); | 1235 | wake_up_interruptible(&info->port.open_wait); |
1240 | } | 1236 | } |
1241 | 1237 | ||
@@ -1370,8 +1366,8 @@ static int mxser_get_serial_info(struct mxser_port *info, | |||
1370 | .irq = info->board->irq, | 1366 | .irq = info->board->irq, |
1371 | .flags = info->port.flags, | 1367 | .flags = info->port.flags, |
1372 | .baud_base = info->baud_base, | 1368 | .baud_base = info->baud_base, |
1373 | .close_delay = info->close_delay, | 1369 | .close_delay = info->port.close_delay, |
1374 | .closing_wait = info->closing_wait, | 1370 | .closing_wait = info->port.closing_wait, |
1375 | .custom_divisor = info->custom_divisor, | 1371 | .custom_divisor = info->custom_divisor, |
1376 | .hub6 = 0 | 1372 | .hub6 = 0 |
1377 | }; | 1373 | }; |
@@ -1402,7 +1398,7 @@ static int mxser_set_serial_info(struct mxser_port *info, | |||
1402 | 1398 | ||
1403 | if (!capable(CAP_SYS_ADMIN)) { | 1399 | if (!capable(CAP_SYS_ADMIN)) { |
1404 | if ((new_serial.baud_base != info->baud_base) || | 1400 | if ((new_serial.baud_base != info->baud_base) || |
1405 | (new_serial.close_delay != info->close_delay) || | 1401 | (new_serial.close_delay != info->port.close_delay) || |
1406 | ((new_serial.flags & ~ASYNC_USR_MASK) != (info->port.flags & ~ASYNC_USR_MASK))) | 1402 | ((new_serial.flags & ~ASYNC_USR_MASK) != (info->port.flags & ~ASYNC_USR_MASK))) |
1407 | return -EPERM; | 1403 | return -EPERM; |
1408 | info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) | | 1404 | info->port.flags = ((info->port.flags & ~ASYNC_USR_MASK) | |
@@ -1414,8 +1410,8 @@ static int mxser_set_serial_info(struct mxser_port *info, | |||
1414 | */ | 1410 | */ |
1415 | info->port.flags = ((info->port.flags & ~ASYNC_FLAGS) | | 1411 | info->port.flags = ((info->port.flags & ~ASYNC_FLAGS) | |
1416 | (new_serial.flags & ASYNC_FLAGS)); | 1412 | (new_serial.flags & ASYNC_FLAGS)); |
1417 | info->close_delay = new_serial.close_delay * HZ / 100; | 1413 | info->port.close_delay = new_serial.close_delay * HZ / 100; |
1418 | info->closing_wait = new_serial.closing_wait * HZ / 100; | 1414 | info->port.closing_wait = new_serial.closing_wait * HZ / 100; |
1419 | info->port.tty->low_latency = | 1415 | info->port.tty->low_latency = |
1420 | (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; | 1416 | (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; |
1421 | info->port.tty->low_latency = 0; | 1417 | info->port.tty->low_latency = 0; |
@@ -2214,7 +2210,6 @@ static void mxser_hangup(struct tty_struct *tty) | |||
2214 | 2210 | ||
2215 | mxser_flush_buffer(tty); | 2211 | mxser_flush_buffer(tty); |
2216 | mxser_shutdown(info); | 2212 | mxser_shutdown(info); |
2217 | info->event = 0; | ||
2218 | info->port.count = 0; | 2213 | info->port.count = 0; |
2219 | info->port.flags &= ~ASYNC_NORMAL_ACTIVE; | 2214 | info->port.flags &= ~ASYNC_NORMAL_ACTIVE; |
2220 | info->port.tty = NULL; | 2215 | info->port.tty = NULL; |
@@ -2545,6 +2540,7 @@ static int __devinit mxser_initbrd(struct mxser_board *brd, | |||
2545 | 2540 | ||
2546 | for (i = 0; i < brd->info->nports; i++) { | 2541 | for (i = 0; i < brd->info->nports; i++) { |
2547 | info = &brd->ports[i]; | 2542 | info = &brd->ports[i]; |
2543 | tty_port_init(&info->port); | ||
2548 | info->board = brd; | 2544 | info->board = brd; |
2549 | info->stop_rx = 0; | 2545 | info->stop_rx = 0; |
2550 | info->ldisc_stop_rx = 0; | 2546 | info->ldisc_stop_rx = 0; |
@@ -2559,10 +2555,9 @@ static int __devinit mxser_initbrd(struct mxser_board *brd, | |||
2559 | process_txrx_fifo(info); | 2555 | process_txrx_fifo(info); |
2560 | 2556 | ||
2561 | info->custom_divisor = info->baud_base * 16; | 2557 | info->custom_divisor = info->baud_base * 16; |
2562 | info->close_delay = 5 * HZ / 10; | 2558 | info->port.close_delay = 5 * HZ / 10; |
2563 | info->closing_wait = 30 * HZ; | 2559 | info->port.closing_wait = 30 * HZ; |
2564 | info->normal_termios = mxvar_sdriver->init_termios; | 2560 | info->normal_termios = mxvar_sdriver->init_termios; |
2565 | tty_port_init(&info->port); | ||
2566 | init_waitqueue_head(&info->delta_msr_wait); | 2561 | init_waitqueue_head(&info->delta_msr_wait); |
2567 | memset(&info->mon_data, 0, sizeof(struct mxser_mon)); | 2562 | memset(&info->mon_data, 0, sizeof(struct mxser_mon)); |
2568 | info->err_shadow = 0; | 2563 | info->err_shadow = 0; |