]> err.no Git - linux-2.6/blobdiff - drivers/char/tty_ioctl.c
Merge branch 'for-linus' of git://git.o-hand.com/linux-mfd
[linux-2.6] / drivers / char / tty_ioctl.c
index c10d40c4c5cac49739dc7dd842023976acf553cc..ea9fc5d03b991d924761a12a74b029546629d4a3 100644 (file)
@@ -67,6 +67,22 @@ void tty_driver_flush_buffer(struct tty_struct *tty)
 
 EXPORT_SYMBOL(tty_driver_flush_buffer);
 
+void tty_throttle(struct tty_struct *tty)
+{
+       /* check TTY_THROTTLED first so it indicates our state */
+       if (!test_and_set_bit(TTY_THROTTLED, &tty->flags) &&
+           tty->ops->throttle)
+               tty->ops->throttle(tty);
+}
+EXPORT_SYMBOL(tty_throttle);
+
+void tty_unthrottle(struct tty_struct *tty)
+{
+       if (test_and_clear_bit(TTY_THROTTLED, &tty->flags) &&
+           tty->ops->unthrottle)
+               tty->ops->unthrottle(tty);
+}
+EXPORT_SYMBOL(tty_unthrottle);
 
 /**
  *     tty_wait_until_sent     -       wait for I/O to finish
@@ -475,8 +491,8 @@ static void change_termios(struct tty_struct *tty, struct ktermios *new_termios)
 
        ld = tty_ldisc_ref(tty);
        if (ld != NULL) {
-               if (ld->set_termios)
-                       (ld->set_termios)(tty, &old_termios);
+               if (ld->ops->set_termios)
+                       (ld->ops->set_termios)(tty, &old_termios);
                tty_ldisc_deref(ld);
        }
        mutex_unlock(&tty->termios_mutex);
@@ -536,8 +552,8 @@ static int set_termios(struct tty_struct *tty, void __user *arg, int opt)
        ld = tty_ldisc_ref(tty);
 
        if (ld != NULL) {
-               if ((opt & TERMIOS_FLUSH) && ld->flush_buffer)
-                       ld->flush_buffer(tty);
+               if ((opt & TERMIOS_FLUSH) && ld->ops->flush_buffer)
+                       ld->ops->flush_buffer(tty);
                tty_ldisc_deref(ld);
        }
 
@@ -943,12 +959,12 @@ int tty_perform_flush(struct tty_struct *tty, unsigned long arg)
        ld = tty_ldisc_ref(tty);
        switch (arg) {
        case TCIFLUSH:
-               if (ld && ld->flush_buffer)
-                       ld->flush_buffer(tty);
+               if (ld && ld->ops->flush_buffer)
+                       ld->ops->flush_buffer(tty);
                break;
        case TCIOFLUSH:
-               if (ld && ld->flush_buffer)
-                       ld->flush_buffer(tty);
+               if (ld && ld->ops->flush_buffer)
+                       ld->ops->flush_buffer(tty);
                /* fall through */
        case TCOFLUSH:
                tty_driver_flush_buffer(tty);
@@ -965,16 +981,9 @@ EXPORT_SYMBOL_GPL(tty_perform_flush);
 int n_tty_ioctl(struct tty_struct *tty, struct file *file,
                       unsigned int cmd, unsigned long arg)
 {
-       struct tty_struct *real_tty;
        unsigned long flags;
        int retval;
 
-       if (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
-           tty->driver->subtype == PTY_TYPE_MASTER)
-               real_tty = tty->link;
-       else
-               real_tty = tty;
-
        switch (cmd) {
        case TCXONC:
                retval = tty_check_change(tty);