Annotation of XNU/bsd/sys/tty.h, revision 1.1.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.