]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/sys/tty.h
xnu-1699.22.81.tar.gz
[apple/xnu.git] / bsd / sys / tty.h
index 5d8db38bcf57fca9bf48a59b83fcfdf5473f46e5..ecfb234d5ba4a4e995b9ddd12bbf7ae009ca9edd 100644 (file)
@@ -1,31 +1,29 @@
 /*
 /*
- * Copyright (c) 2006 Apple Computer, Inc. All Rights Reserved.
+ * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  * 
- * @APPLE_LICENSE_OSREFERENCE_HEADER_START@
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
  * 
  * 
- * This file contains Original Code and/or Modifications of Original Code 
- * as defined in and that are subject to the Apple Public Source License 
- * Version 2.0 (the 'License'). You may not use this file except in 
- * compliance with the License.  The rights granted to you under the 
- * License may not be used to create, or enable the creation or 
- * redistribution of, unlawful or unlicensed copies of an Apple operating 
- * system, or to circumvent, violate, or enable the circumvention or 
- * violation of, any terms of an Apple operating system software license 
- * agreement.
- *
- * Please obtain a copy of the License at 
- * http://www.opensource.apple.com/apsl/ and read it before using this 
- * file.
- *
- * The Original Code and all software distributed under the License are 
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
- * Please see the License for the specific language governing rights and 
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ * 
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
  * limitations under the License.
  * limitations under the License.
- *
- * @APPLE_LICENSE_OSREFERENCE_HEADER_END@
+ * 
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 /* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
 /*-
  */
 /* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
 /*-
 
 
 #ifdef KERNEL
 
 
 #ifdef KERNEL
+
+__BEGIN_DECLS
+#include <kern/locks.h>
+__END_DECLS
+
 /*
  * NetBSD Clists are actually ring buffers. The c_cc, c_cf, c_cl fields have
  * exactly the same behaviour as in true clists.
 /*
  * NetBSD Clists are actually ring buffers. The c_cc, c_cf, c_cl fields have
  * exactly the same behaviour as in true clists.
@@ -109,6 +112,8 @@ struct clist {
  * (low, high, timeout).
  */
 struct tty {
  * (low, high, timeout).
  */
 struct tty {
+       lck_mtx_t       t_lock;         /* Per tty lock */
+
        struct  clist t_rawq;           /* Device raw input queue. */
        long    t_rawcc;                /* Raw input queue statistics. */
        struct  clist t_canq;           /* Device canonical queue. */
        struct  clist t_rawq;           /* Device raw input queue. */
        long    t_rawcc;                /* Raw input queue statistics. */
        struct  clist t_canq;           /* Device canonical queue. */
@@ -138,8 +143,11 @@ struct tty {
        int     t_hiwat;                /* High water mark. */
        int     t_lowat;                /* Low water mark. */
        int     t_gen;                  /* Generation number. */
        int     t_hiwat;                /* High water mark. */
        int     t_lowat;                /* Low water mark. */
        int     t_gen;                  /* Generation number. */
+       void    *t_iokit;               /* IOKit management */
 };
 
 };
 
+#define TTY_NULL (struct tty *)0
+
 #define        t_cc            t_termios.c_cc
 #define        t_cflag         t_termios.c_cflag
 #define        t_iflag         t_termios.c_iflag
 #define        t_cc            t_termios.c_cc
 #define        t_cflag         t_termios.c_cflag
 #define        t_iflag         t_termios.c_iflag
@@ -212,6 +220,8 @@ struct clist;
 #define        TS_DSR_OFLOW    0x800000        /* For CDSR_OFLOW. */
 #endif
 
 #define        TS_DSR_OFLOW    0x800000        /* For CDSR_OFLOW. */
 #endif
 
+#define        TS_IOCTL_NOT_OK 0x1000000       /* Workaround <rdar://....> */
+
 
 /* Character type information. */
 #define        ORDINARY        0
 
 /* Character type information. */
 #define        ORDINARY        0
@@ -243,13 +253,6 @@ struct speedtab {
 #define        TTY_BI          0x08000000      /* Break condition */
 
 #ifdef KERNEL
 #define        TTY_BI          0x08000000      /* Break condition */
 
 #ifdef KERNEL
-/* Is tp controlling terminal for p? */
-#define        isctty(p, tp)                                                   \
-       ((p)->p_session == (tp)->t_session && (p)->p_flag & P_CONTROLT)
-
-/* Is p in background of tp? */
-#define        isbackground(p, tp)                                             \
-       (isctty((p), (tp)) && (p)->p_pgrp != (tp)->t_pgrp)
 
 /* Unique sleep addresses. */
 #define        TSA_CARR_ON(tp)         ((void *)&(tp)->t_rawq)
 
 /* Unique sleep addresses. */
 #define        TSA_CARR_ON(tp)         ((void *)&(tp)->t_rawq)
@@ -280,17 +283,26 @@ void      cinit(void);
 void   clrbits(u_char *cp, int off, int len);
 
 #ifdef KERNEL_PRIVATE
 void   clrbits(u_char *cp, int off, int len);
 
 #ifdef KERNEL_PRIVATE
+void   tty_init(void);
+/*
+ * The locked version of this function is used from routines which hold
+ * the tty_lock(), such as ttcompat() in tty_compat.c
+ */
+int    ttioctl_locked(struct tty *tp, u_long com, caddr_t data, int flag,
+           struct proc *p);
+
 int    ttcompat(struct tty *tp, u_long com, caddr_t data, int flag,
            struct proc *p);
 int    ttcompat(struct tty *tp, u_long com, caddr_t data, int flag,
            struct proc *p);
-int    ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term);
 #endif /* KERNEL_PRIVATE */
 
 #endif /* KERNEL_PRIVATE */
 
+void tty_lock(struct tty *tp);
+void tty_unlock(struct tty *tp);
+
 void    termioschars(struct termios *t);
 int     tputchar(int c, struct tty *tp);
 int     ttioctl(struct tty *tp, u_long com, caddr_t data, int flag,
            struct proc *p);
 int     ttread(struct tty *tp, struct uio *uio, int flag);
 void    termioschars(struct termios *t);
 int     tputchar(int c, struct tty *tp);
 int     ttioctl(struct tty *tp, u_long com, caddr_t data, int flag,
            struct proc *p);
 int     ttread(struct tty *tp, struct uio *uio, int flag);
-void    ttrstrt(void *tp);
 int     ttyselect(struct tty *tp, int rw, void * wql, struct proc *p);
 int     ttselect(dev_t dev, int rw, void * wql, struct proc *p);
 void    ttsetwater(struct tty *tp);
 int     ttyselect(struct tty *tp, int rw, void * wql, struct proc *p);
 int     ttselect(dev_t dev, int rw, void * wql, struct proc *p);
 void    ttsetwater(struct tty *tp);
@@ -300,11 +312,11 @@ void       ttwakeup(struct tty *tp);
 int     ttwrite(struct tty *tp, struct uio *uio, int flag);
 void    ttwwakeup(struct tty *tp);
 void    ttyblock(struct tty *tp);
 int     ttwrite(struct tty *tp, struct uio *uio, int flag);
 void    ttwwakeup(struct tty *tp);
 void    ttyblock(struct tty *tp);
-void    ttychars(struct tty *tp);
 int     ttycheckoutq(struct tty *tp, int wait);
 int     ttycheckoutq(struct tty *tp, int wait);
-int     ttyclose(struct tty *tp);
+int     ttyclose(struct tty *tp);      /* LEGACY: avoid using */
 void    ttyflush(struct tty *tp, int rw);
 void    ttyinfo(struct tty *tp);
 void    ttyflush(struct tty *tp, int rw);
 void    ttyinfo(struct tty *tp);
+void    ttyinfo_locked(struct tty *tp);
 int     ttyinput(int c, struct tty *tp);
 int     ttylclose(struct tty *tp, int flag);
 int     ttymodem(struct tty *tp, int flag);
 int     ttyinput(int c, struct tty *tp);
 int     ttylclose(struct tty *tp, int flag);
 int     ttymodem(struct tty *tp, int flag);