Annotation of XNU/bsd/sys/tty.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
        !             3:  *
        !             4:  * @APPLE_LICENSE_HEADER_START@
        !             5:  * 
        !             6:  * The contents of this file constitute Original Code as defined in and
        !             7:  * are subject to the Apple Public Source License Version 1.1 (the
        !             8:  * "License").  You may not use this file except in compliance with the
        !             9:  * License.  Please obtain a copy of the License at
        !            10:  * http://www.apple.com/publicsource and read it before using this file.
        !            11:  * 
        !            12:  * This Original Code and all software distributed under the License are
        !            13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            17:  * License for the specific language governing rights and limitations
        !            18:  * under the License.
        !            19:  * 
        !            20:  * @APPLE_LICENSE_HEADER_END@
        !            21:  */
        !            22: /* Copyright (c) 1997 Apple Computer, Inc. All Rights Reserved */
        !            23: /*-
        !            24:  * Copyright (c) 1982, 1986, 1993
        !            25:  *     The Regents of the University of California.  All rights reserved.
        !            26:  * (c) UNIX System Laboratories, Inc.
        !            27:  * All or some portions of this file are derived from material licensed
        !            28:  * to the University of California by American Telephone and Telegraph
        !            29:  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
        !            30:  * the permission of UNIX System Laboratories, Inc.
        !            31:  *
        !            32:  * Redistribution and use in source and binary forms, with or without
        !            33:  * modification, are permitted provided that the following conditions
        !            34:  * are met:
        !            35:  * 1. Redistributions of source code must retain the above copyright
        !            36:  *    notice, this list of conditions and the following disclaimer.
        !            37:  * 2. Redistributions in binary form must reproduce the above copyright
        !            38:  *    notice, this list of conditions and the following disclaimer in the
        !            39:  *    documentation and/or other materials provided with the distribution.
        !            40:  * 3. All advertising materials mentioning features or use of this software
        !            41:  *    must display the following acknowledgement:
        !            42:  *      This product includes software developed by the University of
        !            43:  *      California, Berkeley and its contributors.
        !            44:  * 4. Neither the name of the University nor the names of its contributors
        !            45:  *    may be used to endorse or promote products derived from this software
        !            46:  *    without specific prior written permission.
        !            47:  *
        !            48:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            49:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            50:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            51:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            52:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            53:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            54:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            55:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            56:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            57:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            58:  * SUCH DAMAGE.
        !            59:  *
        !            60:  *     @(#)tty.h       8.6 (Berkeley) 1/21/94
        !            61:  */
        !            62: 
        !            63: #ifndef _SYS_TTY_H_
        !            64: #define        _SYS_TTY_H_
        !            65: 
        !            66: #include <sys/cdefs.h>
        !            67: 
        !            68: #include <sys/termios.h>
        !            69: #include <sys/select.h>                /* For struct selinfo. */
        !            70: 
        !            71: #ifndef __APPLE__
        !            72: /*
        !            73:  * Clists are character lists, which is a variable length linked list
        !            74:  * of cblocks, with a count of the number of characters in the list.
        !            75:  */
        !            76: struct clist {
        !            77:        int     c_cc;           /* Number of characters in the clist. */
        !            78:        int     c_cbcount;      /* Number of cblocks. */
        !            79:        int     c_cbmax;        /* Max # cblocks allowed for this clist. */
        !            80:        int     c_cbreserved;   /* # cblocks reserved for this clist. */
        !            81:        char    *c_cf;          /* Pointer to the first cblock. */
        !            82:        char    *c_cl;          /* Pointer to the last cblock. */
        !            83: };
        !            84: #else /* __APPLE__ */
        !            85: /*
        !            86:  * NetBSD Clists are actually ring buffers. The c_cc, c_cf, c_cl fields have
        !            87:  * exactly the same behaviour as in true clists.
        !            88:  * if c_cq is NULL, the ring buffer has no TTY_QUOTE functionality
        !            89:  * (but, saves memory and cpu time)
        !            90:  * 
        !            91:  * *DON'T* play with c_cs, c_ce, c_cq, or c_cl outside tty_subr.c!!!
        !            92:  */
        !            93: struct clist {
        !            94:        int     c_cc;           /* count of characters in queue */
        !            95:        int     c_cn;           /* total ring buffer length */
        !            96:        u_char  *c_cf;          /* points to first character */
        !            97:        u_char  *c_cl;          /* points to next open character */
        !            98:        u_char  *c_cs;          /* start of ring buffer */
        !            99:        u_char  *c_ce;          /* c_ce + c_len */
        !           100:        u_char  *c_cq;          /* N bits/bytes long, see tty_subr.c */
        !           101: };
        !           102: 
        !           103: #ifndef TTYCLSIZE
        !           104: #define TTYCLSIZE 1024
        !           105: #endif
        !           106: 
        !           107: #endif /* __APPLE__ */
        !           108: 
        !           109: /*
        !           110:  * Per-tty structure.
        !           111:  *
        !           112:  * Should be split in two, into device and tty drivers.
        !           113:  * Glue could be masks of what to echo and circular buffer
        !           114:  * (low, high, timeout).
        !           115:  */
        !           116: struct tty {
        !           117:        struct  clist t_rawq;           /* Device raw input queue. */
        !           118:        long    t_rawcc;                /* Raw input queue statistics. */
        !           119:        struct  clist t_canq;           /* Device canonical queue. */
        !           120:        long    t_cancc;                /* Canonical queue statistics. */
        !           121:        struct  clist t_outq;           /* Device output queue. */
        !           122:        long    t_outcc;                /* Output queue statistics. */
        !           123:        int     t_line;                 /* Interface to device drivers. */
        !           124:        dev_t   t_dev;                  /* Device. */
        !           125:        int     t_state;                /* Device and driver (TS*) state. */
        !           126:        int     t_flags;                /* Tty flags. */
        !           127:        int     t_timeout;              /* Timeout for ttywait() */
        !           128:        struct  pgrp *t_pgrp;           /* Foreground process group. */
        !           129:        struct  session *t_session;     /* Enclosing session. */
        !           130:        struct  selinfo t_rsel;         /* Tty read/oob select. */
        !           131:        struct  selinfo t_wsel;         /* Tty write select. */
        !           132:        struct  termios t_termios;      /* Termios state. */
        !           133:        struct  winsize t_winsize;      /* Window size. */
        !           134:                                        /* Start output. */
        !           135:        void    (*t_oproc) __P((struct tty *));
        !           136:                                        /* Stop output. */
        !           137:        void    (*t_stop) __P((struct tty *, int));
        !           138:                                        /* Set hardware state. */
        !           139:        int     (*t_param) __P((struct tty *, struct termios *));
        !           140:        void    *t_sc;                  /* XXX: net/if_sl.c:sl_softc. */
        !           141:        int     t_column;               /* Tty output column. */
        !           142:        int     t_rocount, t_rocol;     /* Tty. */
        !           143:        int     t_hiwat;                /* High water mark. */
        !           144:        int     t_lowat;                /* Low water mark. */
        !           145:        int     t_gen;                  /* Generation number. */
        !           146: };
        !           147: 
        !           148: #define        t_cc            t_termios.c_cc
        !           149: #define        t_cflag         t_termios.c_cflag
        !           150: #define        t_iflag         t_termios.c_iflag
        !           151: #define        t_ispeed        t_termios.c_ispeed
        !           152: #define        t_lflag         t_termios.c_lflag
        !           153: #define        t_min           t_termios.c_min
        !           154: #define        t_oflag         t_termios.c_oflag
        !           155: #define        t_ospeed        t_termios.c_ospeed
        !           156: #define        t_time          t_termios.c_time
        !           157: 
        !           158: #define        TTIPRI  25                      /* Sleep priority for tty reads. */
        !           159: #define        TTOPRI  26                      /* Sleep priority for tty writes. */
        !           160: 
        !           161: /*
        !           162:  * User data unfortunately has to be copied through buffers on the way to
        !           163:  * and from clists.  The buffers are on the stack so their sizes must be
        !           164:  * fairly small.
        !           165:  */
        !           166: #define        IBUFSIZ 384                     /* Should be >= max value of MIN. */
        !           167: #define        OBUFSIZ 100
        !           168: 
        !           169: #ifndef TTYHOG
        !           170: #define        TTYHOG  1024
        !           171: #endif
        !           172: 
        !           173: #ifdef KERNEL
        !           174: #define        TTMAXHIWAT      roundup(2048, CBSIZE)
        !           175: #define        TTMINHIWAT      roundup(100, CBSIZE)
        !           176: #define        TTMAXLOWAT      256
        !           177: #define        TTMINLOWAT      32
        !           178: #endif /* KERNEL */
        !           179: 
        !           180: /* These flags are kept in t_state. */
        !           181: #define        TS_SO_OLOWAT    0x00001         /* Wake up when output <= low water. */
        !           182: #define        TS_ASYNC        0x00002         /* Tty in async I/O mode. */
        !           183: #define        TS_BUSY         0x00004         /* Draining output. */
        !           184: #define        TS_CARR_ON      0x00008         /* Carrier is present. */
        !           185: #define        TS_FLUSH        0x00010         /* Outq has been flushed during DMA. */
        !           186: #define        TS_ISOPEN       0x00020         /* Open has completed. */
        !           187: #define        TS_TBLOCK       0x00040         /* Further input blocked. */
        !           188: #define        TS_TIMEOUT      0x00080         /* Wait for output char processing. */
        !           189: #define        TS_TTSTOP       0x00100         /* Output paused. */
        !           190: #ifdef notyet
        !           191: #define        TS_WOPEN        0x00200         /* Open in progress. */
        !           192: #endif
        !           193: #define        TS_XCLUDE       0x00400         /* Tty requires exclusivity. */
        !           194: 
        !           195: /* State for intra-line fancy editing work. */
        !           196: #define        TS_BKSL         0x00800         /* State for lowercase \ work. */
        !           197: #define        TS_CNTTB        0x01000         /* Counting tab width, ignore FLUSHO. */
        !           198: #define        TS_ERASE        0x02000         /* Within a \.../ for PRTRUB. */
        !           199: #define        TS_LNCH         0x04000         /* Next character is literal. */
        !           200: #define        TS_TYPEN        0x08000         /* Retyping suspended input (PENDIN). */
        !           201: #define        TS_LOCAL        (TS_BKSL | TS_CNTTB | TS_ERASE | TS_LNCH | TS_TYPEN)
        !           202: 
        !           203: /* Extras. */
        !           204: #define        TS_CAN_BYPASS_L_RINT 0x010000   /* Device in "raw" mode. */
        !           205: #define        TS_CONNECTED    0x020000        /* Connection open. */
        !           206: #define        TS_SNOOP        0x040000        /* Device is being snooped on. */
        !           207: #define        TS_SO_OCOMPLETE 0x080000        /* Wake up when output completes. */
        !           208: #define        TS_ZOMBIE       0x100000        /* Connection lost. */
        !           209: 
        !           210: /* Hardware flow-control-invoked bits. */
        !           211: #define        TS_CAR_OFLOW    0x200000        /* For MDMBUF (XXX handle in driver). */
        !           212: #ifdef notyet
        !           213: #define        TS_CTS_OFLOW    0x400000        /* For CCTS_OFLOW. */
        !           214: #define        TS_DSR_OFLOW    0x800000        /* For CDSR_OFLOW. */
        !           215: #endif
        !           216: 
        !           217: /* Character type information. */
        !           218: #define        ORDINARY        0
        !           219: #define        CONTROL         1
        !           220: #define        BACKSPACE       2
        !           221: #define        NEWLINE         3
        !           222: #define        TAB             4
        !           223: #define        VTAB            5
        !           224: #define        RETURN          6
        !           225: 
        !           226: struct speedtab {
        !           227:        int sp_speed;                   /* Speed. */
        !           228:        int sp_code;                    /* Code. */
        !           229: };
        !           230: 
        !           231: /* Modem control commands (driver). */
        !           232: #define        DMSET           0
        !           233: #define        DMBIS           1
        !           234: #define        DMBIC           2
        !           235: #define        DMGET           3
        !           236: 
        !           237: /* Flags on a character passed to ttyinput. */
        !           238: #define        TTY_CHARMASK    0x000000ff      /* Character mask */
        !           239: #define        TTY_QUOTE       0x00000100      /* Character quoted */
        !           240: #define        TTY_ERRORMASK   0xff000000      /* Error mask */
        !           241: #define        TTY_FE          0x01000000      /* Framing error */
        !           242: #define        TTY_PE          0x02000000      /* Parity error */
        !           243: #define        TTY_OE          0x04000000      /* Overrun error */
        !           244: #define        TTY_BI          0x08000000      /* Break condition */
        !           245: 
        !           246: /* Is tp controlling terminal for p? */
        !           247: #define        isctty(p, tp)                                                   \
        !           248:        ((p)->p_session == (tp)->t_session && (p)->p_flag & P_CONTROLT)
        !           249: 
        !           250: /* Is p in background of tp? */
        !           251: #define        isbackground(p, tp)                                             \
        !           252:        (isctty((p), (tp)) && (p)->p_pgrp != (tp)->t_pgrp)
        !           253: 
        !           254: /* Unique sleep addresses. */
        !           255: #define        TSA_CARR_ON(tp)         ((void *)&(tp)->t_rawq)
        !           256: #define        TSA_HUP_OR_INPUT(tp)    ((void *)&(tp)->t_rawq.c_cf)
        !           257: #define        TSA_OCOMPLETE(tp)       ((void *)&(tp)->t_outq.c_cl)
        !           258: #define        TSA_OLOWAT(tp)          ((void *)&(tp)->t_outq)
        !           259: #define        TSA_PTC_READ(tp)        ((void *)&(tp)->t_outq.c_cf)
        !           260: #define        TSA_PTC_WRITE(tp)       ((void *)&(tp)->t_rawq.c_cl)
        !           261: #define        TSA_PTS_READ(tp)        ((void *)&(tp)->t_canq)
        !           262: 
        !           263: #ifdef KERNEL
        !           264: __BEGIN_DECLS
        !           265: 
        !           266: #ifndef __APPLE__
        !           267: extern struct tty *constty;    /* Temporary virtual console. */
        !           268: 
        !           269: int     b_to_q __P((char *cp, int cc, struct clist *q));
        !           270: void    catq __P((struct clist *from, struct clist *to));
        !           271: void    clist_alloc_cblocks __P((struct clist *q, int ccmax, int ccres));
        !           272: void    clist_free_cblocks __P((struct clist *q));
        !           273: /* void         clist_init __P((void)); */ /* defined in systm.h for main() */
        !           274: int     getc __P((struct clist *q));
        !           275: void    ndflush __P((struct clist *q, int cc));
        !           276: int     ndqb __P((struct clist *q, int flag));
        !           277: char   *nextc __P((struct clist *q, char *cp, int *c));
        !           278: int     putc __P((int c, struct clist *q));
        !           279: int     q_to_b __P((struct clist *q, char *cp, int cc));
        !           280: int     unputc __P((struct clist *q));
        !           281: 
        !           282: int    ttcompat __P((struct tty *tp, int com, caddr_t data, int flag));
        !           283: int     ttsetcompat __P((struct tty *tp, int *com, caddr_t data, struct termios *term));
        !           284: #else /* __APPLE__ */
        !           285: int     b_to_q __P((u_char *cp, int cc, struct clist *q));
        !           286: void    catq __P((struct clist *from, struct clist *to));
        !           287: void    clist_init __P((void));
        !           288: int     getc __P((struct clist *q));
        !           289: void    ndflush __P((struct clist *q, int cc));
        !           290: int     ndqb __P((struct clist *q, int flag));
        !           291: u_char *firstc           __P((struct clist *clp, int *c));
        !           292: u_char *nextc __P((struct clist *q, u_char *cp, int *c));
        !           293: int     putc __P((int c, struct clist *q));
        !           294: int     q_to_b __P((struct clist *q, u_char *cp, int cc));
        !           295: int     unputc __P((struct clist *q));
        !           296: int     clalloc __P((struct clist *clp, int size, int quot));
        !           297: void    clfree __P((struct clist *clp));
        !           298: 
        !           299: #ifdef KERNEL_PRIVATE
        !           300: int    ttcompat __P((struct tty *tp, u_long com, caddr_t data, int flag,
        !           301:            struct proc *p));
        !           302: int    ttsetcompat __P((struct tty *tp, u_long *com, caddr_t data, struct termios *term));
        !           303: #endif /* KERNEL_PRIVATE */
        !           304: #endif /* __APPLE__ */
        !           305: 
        !           306: void    termioschars __P((struct termios *t));
        !           307: int     tputchar __P((int c, struct tty *tp));
        !           308: #ifndef __APPLE__
        !           309: int     ttioctl __P((struct tty *tp, int com, void *data, int flag));
        !           310: #else
        !           311: int     ttioctl __P((struct tty *tp, u_long com, caddr_t data, int flag,
        !           312:            struct proc *p));
        !           313: #endif
        !           314: int     ttread __P((struct tty *tp, struct uio *uio, int flag));
        !           315: void    ttrstrt __P((void *tp));
        !           316: int     ttyselect __P((struct tty *tp, int rw, struct proc *p));
        !           317: int     ttselect __P((dev_t dev, int rw, struct proc *p));
        !           318: void    ttsetwater __P((struct tty *tp));
        !           319: int     ttspeedtab __P((int speed, struct speedtab *table));
        !           320: int     ttstart __P((struct tty *tp));
        !           321: void    ttwakeup __P((struct tty *tp));
        !           322: int     ttwrite __P((struct tty *tp, struct uio *uio, int flag));
        !           323: void    ttwwakeup __P((struct tty *tp));
        !           324: void    ttyblock __P((struct tty *tp));
        !           325: void    ttychars __P((struct tty *tp));
        !           326: int     ttycheckoutq __P((struct tty *tp, int wait));
        !           327: int     ttyclose __P((struct tty *tp));
        !           328: void    ttyflush __P((struct tty *tp, int rw));
        !           329: void    ttyinfo __P((struct tty *tp));
        !           330: int     ttyinput __P((int c, struct tty *tp));
        !           331: int     ttylclose __P((struct tty *tp, int flag));
        !           332: int     ttymodem __P((struct tty *tp, int flag));
        !           333: int     ttyopen __P((dev_t device, struct tty *tp));
        !           334: int     ttysleep __P((struct tty *tp,
        !           335:            void *chan, int pri, char *wmesg, int timeout));
        !           336: int     ttywait __P((struct tty *tp));
        !           337: struct tty *ttymalloc __P((void));
        !           338: void     ttyfree __P((struct tty *));
        !           339: 
        !           340: __END_DECLS
        !           341: 
        !           342: #endif /* KERNEL */
        !           343: 
        !           344: #endif /* !_SYS_TTY_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.