diff options
Diffstat (limited to 'drivers/tty/synclinkmp.c')
| -rw-r--r-- | drivers/tty/synclinkmp.c | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c index a3dddc12d2fe..f17d9f3d84a2 100644 --- a/drivers/tty/synclinkmp.c +++ b/drivers/tty/synclinkmp.c | |||
| @@ -711,15 +711,11 @@ static void ldisc_receive_buf(struct tty_struct *tty, | |||
| 711 | 711 | ||
| 712 | /* tty callbacks */ | 712 | /* tty callbacks */ |
| 713 | 713 | ||
| 714 | /* Called when a port is opened. Init and enable port. | 714 | static int install(struct tty_driver *driver, struct tty_struct *tty) |
| 715 | */ | ||
| 716 | static int open(struct tty_struct *tty, struct file *filp) | ||
| 717 | { | 715 | { |
| 718 | SLMP_INFO *info; | 716 | SLMP_INFO *info; |
| 719 | int retval, line; | 717 | int line = tty->index; |
| 720 | unsigned long flags; | ||
| 721 | 718 | ||
| 722 | line = tty->index; | ||
| 723 | if (line >= synclinkmp_device_count) { | 719 | if (line >= synclinkmp_device_count) { |
| 724 | printk("%s(%d): open with invalid line #%d.\n", | 720 | printk("%s(%d): open with invalid line #%d.\n", |
| 725 | __FILE__,__LINE__,line); | 721 | __FILE__,__LINE__,line); |
| @@ -727,17 +723,30 @@ static int open(struct tty_struct *tty, struct file *filp) | |||
| 727 | } | 723 | } |
| 728 | 724 | ||
| 729 | info = synclinkmp_device_list; | 725 | info = synclinkmp_device_list; |
| 730 | while(info && info->line != line) | 726 | while (info && info->line != line) |
| 731 | info = info->next_device; | 727 | info = info->next_device; |
| 732 | if (sanity_check(info, tty->name, "open")) | 728 | if (sanity_check(info, tty->name, "open")) |
| 733 | return -ENODEV; | 729 | return -ENODEV; |
| 734 | if ( info->init_error ) { | 730 | if (info->init_error) { |
| 735 | printk("%s(%d):%s device is not allocated, init error=%d\n", | 731 | printk("%s(%d):%s device is not allocated, init error=%d\n", |
| 736 | __FILE__,__LINE__,info->device_name,info->init_error); | 732 | __FILE__, __LINE__, info->device_name, |
| 733 | info->init_error); | ||
| 737 | return -ENODEV; | 734 | return -ENODEV; |
| 738 | } | 735 | } |
| 739 | 736 | ||
| 740 | tty->driver_data = info; | 737 | tty->driver_data = info; |
| 738 | |||
| 739 | return tty_port_install(&info->port, driver, tty); | ||
| 740 | } | ||
| 741 | |||
| 742 | /* Called when a port is opened. Init and enable port. | ||
| 743 | */ | ||
| 744 | static int open(struct tty_struct *tty, struct file *filp) | ||
| 745 | { | ||
| 746 | SLMP_INFO *info = tty->driver_data; | ||
| 747 | unsigned long flags; | ||
| 748 | int retval; | ||
| 749 | |||
| 741 | info->port.tty = tty; | 750 | info->port.tty = tty; |
| 742 | 751 | ||
| 743 | if (debug_level >= DEBUG_LEVEL_INFO) | 752 | if (debug_level >= DEBUG_LEVEL_INFO) |
| @@ -873,7 +882,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) | |||
| 873 | 882 | ||
| 874 | /* Handle transition to B0 status */ | 883 | /* Handle transition to B0 status */ |
| 875 | if (old_termios->c_cflag & CBAUD && | 884 | if (old_termios->c_cflag & CBAUD && |
| 876 | !(tty->termios->c_cflag & CBAUD)) { | 885 | !(tty->termios.c_cflag & CBAUD)) { |
| 877 | info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR); | 886 | info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR); |
| 878 | spin_lock_irqsave(&info->lock,flags); | 887 | spin_lock_irqsave(&info->lock,flags); |
| 879 | set_signals(info); | 888 | set_signals(info); |
| @@ -882,9 +891,9 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) | |||
| 882 | 891 | ||
| 883 | /* Handle transition away from B0 status */ | 892 | /* Handle transition away from B0 status */ |
| 884 | if (!(old_termios->c_cflag & CBAUD) && | 893 | if (!(old_termios->c_cflag & CBAUD) && |
| 885 | tty->termios->c_cflag & CBAUD) { | 894 | tty->termios.c_cflag & CBAUD) { |
| 886 | info->serial_signals |= SerialSignal_DTR; | 895 | info->serial_signals |= SerialSignal_DTR; |
| 887 | if (!(tty->termios->c_cflag & CRTSCTS) || | 896 | if (!(tty->termios.c_cflag & CRTSCTS) || |
| 888 | !test_bit(TTY_THROTTLED, &tty->flags)) { | 897 | !test_bit(TTY_THROTTLED, &tty->flags)) { |
| 889 | info->serial_signals |= SerialSignal_RTS; | 898 | info->serial_signals |= SerialSignal_RTS; |
| 890 | } | 899 | } |
| @@ -895,7 +904,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios) | |||
| 895 | 904 | ||
| 896 | /* Handle turning off CRTSCTS */ | 905 | /* Handle turning off CRTSCTS */ |
| 897 | if (old_termios->c_cflag & CRTSCTS && | 906 | if (old_termios->c_cflag & CRTSCTS && |
| 898 | !(tty->termios->c_cflag & CRTSCTS)) { | 907 | !(tty->termios.c_cflag & CRTSCTS)) { |
| 899 | tty->hw_stopped = 0; | 908 | tty->hw_stopped = 0; |
| 900 | tx_release(tty); | 909 | tx_release(tty); |
| 901 | } | 910 | } |
| @@ -1473,7 +1482,7 @@ static void throttle(struct tty_struct * tty) | |||
| 1473 | if (I_IXOFF(tty)) | 1482 | if (I_IXOFF(tty)) |
| 1474 | send_xchar(tty, STOP_CHAR(tty)); | 1483 | send_xchar(tty, STOP_CHAR(tty)); |
| 1475 | 1484 | ||
| 1476 | if (tty->termios->c_cflag & CRTSCTS) { | 1485 | if (tty->termios.c_cflag & CRTSCTS) { |
| 1477 | spin_lock_irqsave(&info->lock,flags); | 1486 | spin_lock_irqsave(&info->lock,flags); |
| 1478 | info->serial_signals &= ~SerialSignal_RTS; | 1487 | info->serial_signals &= ~SerialSignal_RTS; |
| 1479 | set_signals(info); | 1488 | set_signals(info); |
| @@ -1502,7 +1511,7 @@ static void unthrottle(struct tty_struct * tty) | |||
| 1502 | send_xchar(tty, START_CHAR(tty)); | 1511 | send_xchar(tty, START_CHAR(tty)); |
| 1503 | } | 1512 | } |
| 1504 | 1513 | ||
| 1505 | if (tty->termios->c_cflag & CRTSCTS) { | 1514 | if (tty->termios.c_cflag & CRTSCTS) { |
| 1506 | spin_lock_irqsave(&info->lock,flags); | 1515 | spin_lock_irqsave(&info->lock,flags); |
| 1507 | info->serial_signals |= SerialSignal_RTS; | 1516 | info->serial_signals |= SerialSignal_RTS; |
| 1508 | set_signals(info); | 1517 | set_signals(info); |
| @@ -2491,7 +2500,7 @@ static void isr_io_pin( SLMP_INFO *info, u16 status ) | |||
| 2491 | } | 2500 | } |
| 2492 | } | 2501 | } |
| 2493 | 2502 | ||
| 2494 | if ( (info->port.flags & ASYNC_CTS_FLOW) && | 2503 | if (tty_port_cts_enabled(&info->port) && |
| 2495 | (status & MISCSTATUS_CTS_LATCHED) ) { | 2504 | (status & MISCSTATUS_CTS_LATCHED) ) { |
| 2496 | if ( info->port.tty ) { | 2505 | if ( info->port.tty ) { |
| 2497 | if (info->port.tty->hw_stopped) { | 2506 | if (info->port.tty->hw_stopped) { |
| @@ -2708,7 +2717,7 @@ static void shutdown(SLMP_INFO * info) | |||
| 2708 | 2717 | ||
| 2709 | reset_port(info); | 2718 | reset_port(info); |
| 2710 | 2719 | ||
| 2711 | if (!info->port.tty || info->port.tty->termios->c_cflag & HUPCL) { | 2720 | if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) { |
| 2712 | info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS); | 2721 | info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS); |
| 2713 | set_signals(info); | 2722 | set_signals(info); |
| 2714 | } | 2723 | } |
| @@ -2749,7 +2758,7 @@ static void program_hw(SLMP_INFO *info) | |||
| 2749 | 2758 | ||
| 2750 | get_signals(info); | 2759 | get_signals(info); |
| 2751 | 2760 | ||
| 2752 | if (info->netcount || (info->port.tty && info->port.tty->termios->c_cflag & CREAD) ) | 2761 | if (info->netcount || (info->port.tty && info->port.tty->termios.c_cflag & CREAD) ) |
| 2753 | rx_start(info); | 2762 | rx_start(info); |
| 2754 | 2763 | ||
| 2755 | spin_unlock_irqrestore(&info->lock,flags); | 2764 | spin_unlock_irqrestore(&info->lock,flags); |
| @@ -2762,14 +2771,14 @@ static void change_params(SLMP_INFO *info) | |||
| 2762 | unsigned cflag; | 2771 | unsigned cflag; |
| 2763 | int bits_per_char; | 2772 | int bits_per_char; |
| 2764 | 2773 | ||
| 2765 | if (!info->port.tty || !info->port.tty->termios) | 2774 | if (!info->port.tty) |
| 2766 | return; | 2775 | return; |
| 2767 | 2776 | ||
| 2768 | if (debug_level >= DEBUG_LEVEL_INFO) | 2777 | if (debug_level >= DEBUG_LEVEL_INFO) |
| 2769 | printk("%s(%d):%s change_params()\n", | 2778 | printk("%s(%d):%s change_params()\n", |
| 2770 | __FILE__,__LINE__, info->device_name ); | 2779 | __FILE__,__LINE__, info->device_name ); |
| 2771 | 2780 | ||
| 2772 | cflag = info->port.tty->termios->c_cflag; | 2781 | cflag = info->port.tty->termios.c_cflag; |
| 2773 | 2782 | ||
| 2774 | /* if B0 rate (hangup) specified then negate DTR and RTS */ | 2783 | /* if B0 rate (hangup) specified then negate DTR and RTS */ |
| 2775 | /* otherwise assert DTR and RTS */ | 2784 | /* otherwise assert DTR and RTS */ |
| @@ -3306,7 +3315,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, | |||
| 3306 | return 0; | 3315 | return 0; |
| 3307 | } | 3316 | } |
| 3308 | 3317 | ||
| 3309 | if (tty->termios->c_cflag & CLOCAL) | 3318 | if (tty->termios.c_cflag & CLOCAL) |
| 3310 | do_clocal = true; | 3319 | do_clocal = true; |
| 3311 | 3320 | ||
| 3312 | /* Wait for carrier detect and the line to become | 3321 | /* Wait for carrier detect and the line to become |
| @@ -3332,7 +3341,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, | |||
| 3332 | port->blocked_open++; | 3341 | port->blocked_open++; |
| 3333 | 3342 | ||
| 3334 | while (1) { | 3343 | while (1) { |
| 3335 | if (tty->termios->c_cflag & CBAUD) | 3344 | if (tty->termios.c_cflag & CBAUD) |
| 3336 | tty_port_raise_dtr_rts(port); | 3345 | tty_port_raise_dtr_rts(port); |
| 3337 | 3346 | ||
| 3338 | set_current_state(TASK_INTERRUPTIBLE); | 3347 | set_current_state(TASK_INTERRUPTIBLE); |
| @@ -3357,9 +3366,9 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp, | |||
| 3357 | printk("%s(%d):%s block_til_ready() count=%d\n", | 3366 | printk("%s(%d):%s block_til_ready() count=%d\n", |
| 3358 | __FILE__,__LINE__, tty->driver->name, port->count ); | 3367 | __FILE__,__LINE__, tty->driver->name, port->count ); |
| 3359 | 3368 | ||
| 3360 | tty_unlock(); | 3369 | tty_unlock(tty); |
| 3361 | schedule(); | 3370 | schedule(); |
| 3362 | tty_lock(); | 3371 | tty_lock(tty); |
| 3363 | } | 3372 | } |
| 3364 | 3373 | ||
| 3365 | set_current_state(TASK_RUNNING); | 3374 | set_current_state(TASK_RUNNING); |
| @@ -3881,6 +3890,7 @@ static void device_init(int adapter_num, struct pci_dev *pdev) | |||
| 3881 | } | 3890 | } |
| 3882 | 3891 | ||
| 3883 | static const struct tty_operations ops = { | 3892 | static const struct tty_operations ops = { |
| 3893 | .install = install, | ||
| 3884 | .open = open, | 3894 | .open = open, |
| 3885 | .close = close, | 3895 | .close = close, |
| 3886 | .write = write, | 3896 | .write = write, |
