diff options
author | Jiri Slaby <jslaby@suse.cz> | 2012-04-02 07:53:54 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-09 14:16:54 -0400 |
commit | 48decc1c743fa4eb5ba5dd3f556e7fcbefe65440 (patch) | |
tree | e187f0d295549a39e96e004d5215ac8ab180c8b2 /drivers/isdn/i4l | |
parent | ed722ead61e3776cbcda3805bb872ff2b856d3b9 (diff) |
TTY: isdn, add tty_port
And use tty_port->flags now. Other members will follow.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Cc: Karsten Keil <isdn@linux-pingi.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/isdn/i4l')
-rw-r--r-- | drivers/isdn/i4l/isdn_tty.c | 60 |
1 files changed, 31 insertions, 29 deletions
diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c index 74b05188c18f..8ba526dc98bc 100644 --- a/drivers/isdn/i4l/isdn_tty.c +++ b/drivers/isdn/i4l/isdn_tty.c | |||
@@ -1046,20 +1046,20 @@ isdn_tty_change_speed(modem_info *info) | |||
1046 | 1046 | ||
1047 | /* CTS flow control flag and modem status interrupts */ | 1047 | /* CTS flow control flag and modem status interrupts */ |
1048 | if (cflag & CRTSCTS) { | 1048 | if (cflag & CRTSCTS) { |
1049 | info->flags |= ASYNC_CTS_FLOW; | 1049 | info->port.flags |= ASYNC_CTS_FLOW; |
1050 | } else | 1050 | } else |
1051 | info->flags &= ~ASYNC_CTS_FLOW; | 1051 | info->port.flags &= ~ASYNC_CTS_FLOW; |
1052 | if (cflag & CLOCAL) | 1052 | if (cflag & CLOCAL) |
1053 | info->flags &= ~ASYNC_CHECK_CD; | 1053 | info->port.flags &= ~ASYNC_CHECK_CD; |
1054 | else { | 1054 | else { |
1055 | info->flags |= ASYNC_CHECK_CD; | 1055 | info->port.flags |= ASYNC_CHECK_CD; |
1056 | } | 1056 | } |
1057 | } | 1057 | } |
1058 | 1058 | ||
1059 | static int | 1059 | static int |
1060 | isdn_tty_startup(modem_info *info) | 1060 | isdn_tty_startup(modem_info *info) |
1061 | { | 1061 | { |
1062 | if (info->flags & ASYNC_INITIALIZED) | 1062 | if (info->port.flags & ASYNC_INITIALIZED) |
1063 | return 0; | 1063 | return 0; |
1064 | isdn_lock_drivers(); | 1064 | isdn_lock_drivers(); |
1065 | #ifdef ISDN_DEBUG_MODEM_OPEN | 1065 | #ifdef ISDN_DEBUG_MODEM_OPEN |
@@ -1076,7 +1076,7 @@ isdn_tty_startup(modem_info *info) | |||
1076 | */ | 1076 | */ |
1077 | isdn_tty_change_speed(info); | 1077 | isdn_tty_change_speed(info); |
1078 | 1078 | ||
1079 | info->flags |= ASYNC_INITIALIZED; | 1079 | info->port.flags |= ASYNC_INITIALIZED; |
1080 | info->msr |= (UART_MSR_DSR | UART_MSR_CTS); | 1080 | info->msr |= (UART_MSR_DSR | UART_MSR_CTS); |
1081 | info->send_outstanding = 0; | 1081 | info->send_outstanding = 0; |
1082 | return 0; | 1082 | return 0; |
@@ -1089,7 +1089,7 @@ isdn_tty_startup(modem_info *info) | |||
1089 | static void | 1089 | static void |
1090 | isdn_tty_shutdown(modem_info *info) | 1090 | isdn_tty_shutdown(modem_info *info) |
1091 | { | 1091 | { |
1092 | if (!(info->flags & ASYNC_INITIALIZED)) | 1092 | if (!(info->port.flags & ASYNC_INITIALIZED)) |
1093 | return; | 1093 | return; |
1094 | #ifdef ISDN_DEBUG_MODEM_OPEN | 1094 | #ifdef ISDN_DEBUG_MODEM_OPEN |
1095 | printk(KERN_DEBUG "Shutting down isdnmodem port %d ....\n", info->line); | 1095 | printk(KERN_DEBUG "Shutting down isdnmodem port %d ....\n", info->line); |
@@ -1109,7 +1109,7 @@ isdn_tty_shutdown(modem_info *info) | |||
1109 | if (info->tty) | 1109 | if (info->tty) |
1110 | set_bit(TTY_IO_ERROR, &info->tty->flags); | 1110 | set_bit(TTY_IO_ERROR, &info->tty->flags); |
1111 | 1111 | ||
1112 | info->flags &= ~ASYNC_INITIALIZED; | 1112 | info->port.flags &= ~ASYNC_INITIALIZED; |
1113 | } | 1113 | } |
1114 | 1114 | ||
1115 | /* isdn_tty_write() is the main send-routine. It is called from the upper | 1115 | /* isdn_tty_write() is the main send-routine. It is called from the upper |
@@ -1496,11 +1496,11 @@ isdn_tty_block_til_ready(struct tty_struct *tty, struct file *filp, modem_info * | |||
1496 | * until it's done, and then try again. | 1496 | * until it's done, and then try again. |
1497 | */ | 1497 | */ |
1498 | if (tty_hung_up_p(filp) || | 1498 | if (tty_hung_up_p(filp) || |
1499 | (info->flags & ASYNC_CLOSING)) { | 1499 | (info->port.flags & ASYNC_CLOSING)) { |
1500 | if (info->flags & ASYNC_CLOSING) | 1500 | if (info->port.flags & ASYNC_CLOSING) |
1501 | interruptible_sleep_on(&info->close_wait); | 1501 | interruptible_sleep_on(&info->close_wait); |
1502 | #ifdef MODEM_DO_RESTART | 1502 | #ifdef MODEM_DO_RESTART |
1503 | if (info->flags & ASYNC_HUP_NOTIFY) | 1503 | if (info->port.flags & ASYNC_HUP_NOTIFY) |
1504 | return -EAGAIN; | 1504 | return -EAGAIN; |
1505 | else | 1505 | else |
1506 | return -ERESTARTSYS; | 1506 | return -ERESTARTSYS; |
@@ -1514,7 +1514,7 @@ isdn_tty_block_til_ready(struct tty_struct *tty, struct file *filp, modem_info * | |||
1514 | */ | 1514 | */ |
1515 | if ((filp->f_flags & O_NONBLOCK) || | 1515 | if ((filp->f_flags & O_NONBLOCK) || |
1516 | (tty->flags & (1 << TTY_IO_ERROR))) { | 1516 | (tty->flags & (1 << TTY_IO_ERROR))) { |
1517 | info->flags |= ASYNC_NORMAL_ACTIVE; | 1517 | info->port.flags |= ASYNC_NORMAL_ACTIVE; |
1518 | return 0; | 1518 | return 0; |
1519 | } | 1519 | } |
1520 | if (tty->termios->c_cflag & CLOCAL) | 1520 | if (tty->termios->c_cflag & CLOCAL) |
@@ -1538,9 +1538,9 @@ isdn_tty_block_til_ready(struct tty_struct *tty, struct file *filp, modem_info * | |||
1538 | while (1) { | 1538 | while (1) { |
1539 | set_current_state(TASK_INTERRUPTIBLE); | 1539 | set_current_state(TASK_INTERRUPTIBLE); |
1540 | if (tty_hung_up_p(filp) || | 1540 | if (tty_hung_up_p(filp) || |
1541 | !(info->flags & ASYNC_INITIALIZED)) { | 1541 | !(info->port.flags & ASYNC_INITIALIZED)) { |
1542 | #ifdef MODEM_DO_RESTART | 1542 | #ifdef MODEM_DO_RESTART |
1543 | if (info->flags & ASYNC_HUP_NOTIFY) | 1543 | if (info->port.flags & ASYNC_HUP_NOTIFY) |
1544 | retval = -EAGAIN; | 1544 | retval = -EAGAIN; |
1545 | else | 1545 | else |
1546 | retval = -ERESTARTSYS; | 1546 | retval = -ERESTARTSYS; |
@@ -1549,7 +1549,7 @@ isdn_tty_block_til_ready(struct tty_struct *tty, struct file *filp, modem_info * | |||
1549 | #endif | 1549 | #endif |
1550 | break; | 1550 | break; |
1551 | } | 1551 | } |
1552 | if (!(info->flags & ASYNC_CLOSING) && | 1552 | if (!(info->port.flags & ASYNC_CLOSING) && |
1553 | (do_clocal || (info->msr & UART_MSR_DCD))) { | 1553 | (do_clocal || (info->msr & UART_MSR_DCD))) { |
1554 | break; | 1554 | break; |
1555 | } | 1555 | } |
@@ -1574,7 +1574,7 @@ isdn_tty_block_til_ready(struct tty_struct *tty, struct file *filp, modem_info * | |||
1574 | #endif | 1574 | #endif |
1575 | if (retval) | 1575 | if (retval) |
1576 | return retval; | 1576 | return retval; |
1577 | info->flags |= ASYNC_NORMAL_ACTIVE; | 1577 | info->port.flags |= ASYNC_NORMAL_ACTIVE; |
1578 | return 0; | 1578 | return 0; |
1579 | } | 1579 | } |
1580 | 1580 | ||
@@ -1600,6 +1600,7 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp) | |||
1600 | info->count++; | 1600 | info->count++; |
1601 | tty->driver_data = info; | 1601 | tty->driver_data = info; |
1602 | info->tty = tty; | 1602 | info->tty = tty; |
1603 | tty->port = &info->port; | ||
1603 | /* | 1604 | /* |
1604 | * Start up serial port | 1605 | * Start up serial port |
1605 | */ | 1606 | */ |
@@ -1664,7 +1665,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) | |||
1664 | #endif | 1665 | #endif |
1665 | return; | 1666 | return; |
1666 | } | 1667 | } |
1667 | info->flags |= ASYNC_CLOSING; | 1668 | info->port.flags |= ASYNC_CLOSING; |
1668 | 1669 | ||
1669 | tty->closing = 1; | 1670 | tty->closing = 1; |
1670 | /* | 1671 | /* |
@@ -1673,7 +1674,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) | |||
1673 | * interrupt driver to stop checking the data ready bit in the | 1674 | * interrupt driver to stop checking the data ready bit in the |
1674 | * line status register. | 1675 | * line status register. |
1675 | */ | 1676 | */ |
1676 | if (info->flags & ASYNC_INITIALIZED) { | 1677 | if (info->port.flags & ASYNC_INITIALIZED) { |
1677 | tty_wait_until_sent_from_close(tty, 3000); /* 30 seconds timeout */ | 1678 | tty_wait_until_sent_from_close(tty, 3000); /* 30 seconds timeout */ |
1678 | /* | 1679 | /* |
1679 | * Before we drop DTR, make sure the UART transmitter | 1680 | * Before we drop DTR, make sure the UART transmitter |
@@ -1698,7 +1699,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp) | |||
1698 | msleep_interruptible(500); | 1699 | msleep_interruptible(500); |
1699 | wake_up_interruptible(&info->open_wait); | 1700 | wake_up_interruptible(&info->open_wait); |
1700 | } | 1701 | } |
1701 | info->flags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CLOSING); | 1702 | info->port.flags &= ~(ASYNC_NORMAL_ACTIVE | ASYNC_CLOSING); |
1702 | wake_up_interruptible(&info->close_wait); | 1703 | wake_up_interruptible(&info->close_wait); |
1703 | #ifdef ISDN_DEBUG_MODEM_OPEN | 1704 | #ifdef ISDN_DEBUG_MODEM_OPEN |
1704 | printk(KERN_DEBUG "isdn_tty_close normal exit\n"); | 1705 | printk(KERN_DEBUG "isdn_tty_close normal exit\n"); |
@@ -1717,7 +1718,7 @@ isdn_tty_hangup(struct tty_struct *tty) | |||
1717 | return; | 1718 | return; |
1718 | isdn_tty_shutdown(info); | 1719 | isdn_tty_shutdown(info); |
1719 | info->count = 0; | 1720 | info->count = 0; |
1720 | info->flags &= ~ASYNC_NORMAL_ACTIVE; | 1721 | info->port.flags &= ~ASYNC_NORMAL_ACTIVE; |
1721 | info->tty = NULL; | 1722 | info->tty = NULL; |
1722 | wake_up_interruptible(&info->open_wait); | 1723 | wake_up_interruptible(&info->open_wait); |
1723 | } | 1724 | } |
@@ -1881,6 +1882,7 @@ isdn_tty_modem_init(void) | |||
1881 | goto err_unregister; | 1882 | goto err_unregister; |
1882 | } | 1883 | } |
1883 | #endif | 1884 | #endif |
1885 | tty_port_init(&info->port); | ||
1884 | spin_lock_init(&info->readlock); | 1886 | spin_lock_init(&info->readlock); |
1885 | sprintf(info->last_cause, "0000"); | 1887 | sprintf(info->last_cause, "0000"); |
1886 | sprintf(info->last_num, "none"); | 1888 | sprintf(info->last_num, "none"); |
@@ -2055,12 +2057,12 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup) | |||
2055 | #ifdef ISDN_DEBUG_MODEM_ICALL | 2057 | #ifdef ISDN_DEBUG_MODEM_ICALL |
2056 | printk(KERN_DEBUG "m_fi: match1 wret=%d\n", wret); | 2058 | printk(KERN_DEBUG "m_fi: match1 wret=%d\n", wret); |
2057 | printk(KERN_DEBUG "m_fi: idx=%d flags=%08lx drv=%d ch=%d usg=%d\n", idx, | 2059 | printk(KERN_DEBUG "m_fi: idx=%d flags=%08lx drv=%d ch=%d usg=%d\n", idx, |
2058 | info->flags, info->isdn_driver, info->isdn_channel, | 2060 | info->port.flags, info->isdn_driver, |
2059 | dev->usage[idx]); | 2061 | info->isdn_channel, dev->usage[idx]); |
2060 | #endif | 2062 | #endif |
2061 | if ( | 2063 | if ( |
2062 | #ifndef FIX_FILE_TRANSFER | 2064 | #ifndef FIX_FILE_TRANSFER |
2063 | (info->flags & ASYNC_NORMAL_ACTIVE) && | 2065 | (info->port.flags & ASYNC_NORMAL_ACTIVE) && |
2064 | #endif | 2066 | #endif |
2065 | (info->isdn_driver == -1) && | 2067 | (info->isdn_driver == -1) && |
2066 | (info->isdn_channel == -1) && | 2068 | (info->isdn_channel == -1) && |
@@ -2099,7 +2101,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup) | |||
2099 | return (wret == 2) ? 3 : 0; | 2101 | return (wret == 2) ? 3 : 0; |
2100 | } | 2102 | } |
2101 | 2103 | ||
2102 | #define TTY_IS_ACTIVE(info) (info->flags & ASYNC_NORMAL_ACTIVE) | 2104 | #define TTY_IS_ACTIVE(info) (info->port.flags & ASYNC_NORMAL_ACTIVE) |
2103 | 2105 | ||
2104 | int | 2106 | int |
2105 | isdn_tty_stat_callback(int i, isdn_ctrl *c) | 2107 | isdn_tty_stat_callback(int i, isdn_ctrl *c) |
@@ -2318,7 +2320,7 @@ isdn_tty_at_cout(char *msg, modem_info *info) | |||
2318 | 2320 | ||
2319 | spin_lock_irqsave(&info->readlock, flags); | 2321 | spin_lock_irqsave(&info->readlock, flags); |
2320 | tty = info->tty; | 2322 | tty = info->tty; |
2321 | if ((info->flags & ASYNC_CLOSING) || (!tty)) { | 2323 | if ((info->port.flags & ASYNC_CLOSING) || (!tty)) { |
2322 | spin_unlock_irqrestore(&info->readlock, flags); | 2324 | spin_unlock_irqrestore(&info->readlock, flags); |
2323 | return; | 2325 | return; |
2324 | } | 2326 | } |
@@ -2468,13 +2470,13 @@ isdn_tty_modem_result(int code, modem_info *info) | |||
2468 | case RESULT_NO_CARRIER: | 2470 | case RESULT_NO_CARRIER: |
2469 | #ifdef ISDN_DEBUG_MODEM_HUP | 2471 | #ifdef ISDN_DEBUG_MODEM_HUP |
2470 | printk(KERN_DEBUG "modem_result: NO CARRIER %d %d\n", | 2472 | printk(KERN_DEBUG "modem_result: NO CARRIER %d %d\n", |
2471 | (info->flags & ASYNC_CLOSING), | 2473 | (info->port.flags & ASYNC_CLOSING), |
2472 | (!info->tty)); | 2474 | (!info->tty)); |
2473 | #endif | 2475 | #endif |
2474 | m->mdmreg[REG_RINGCNT] = 0; | 2476 | m->mdmreg[REG_RINGCNT] = 0; |
2475 | del_timer(&info->nc_timer); | 2477 | del_timer(&info->nc_timer); |
2476 | info->ncarrier = 0; | 2478 | info->ncarrier = 0; |
2477 | if ((info->flags & ASYNC_CLOSING) || (!info->tty)) | 2479 | if ((info->port.flags & ASYNC_CLOSING) || (!info->tty)) |
2478 | return; | 2480 | return; |
2479 | 2481 | ||
2480 | #ifdef CONFIG_ISDN_AUDIO | 2482 | #ifdef CONFIG_ISDN_AUDIO |
@@ -2607,10 +2609,10 @@ isdn_tty_modem_result(int code, modem_info *info) | |||
2607 | } | 2609 | } |
2608 | } | 2610 | } |
2609 | if (code == RESULT_NO_CARRIER) { | 2611 | if (code == RESULT_NO_CARRIER) { |
2610 | if ((info->flags & ASYNC_CLOSING) || (!info->tty)) | 2612 | if ((info->port.flags & ASYNC_CLOSING) || (!info->tty)) |
2611 | return; | 2613 | return; |
2612 | 2614 | ||
2613 | if (info->flags & ASYNC_CHECK_CD) | 2615 | if (info->port.flags & ASYNC_CHECK_CD) |
2614 | tty_hangup(info->tty); | 2616 | tty_hangup(info->tty); |
2615 | } | 2617 | } |
2616 | } | 2618 | } |