1 /* tty.h 4.5 81/06/11 */ 2 3 #ifdef KERNEL 4 #include "../h/ioctl.h" 5 #else 6 #include <sys/ioctl.h> 7 #endif 8 #include <sgtty.h> 9 10 /* 11 * A clist structure is the head 12 * of a linked list queue of characters. 13 * The characters are stored in 14 * blocks containing a link and CBSIZE (param.h) 15 * characters. The routines getc, putc, ... in prim.c 16 * manipulate these structures. 17 */ 18 struct clist 19 { 20 int c_cc; /* character count */ 21 char *c_cf; /* pointer to first char */ 22 char *c_cl; /* pointer to last char */ 23 }; 24 25 /* 26 * A tty structure is needed for 27 * each UNIX character device that 28 * is used for normal terminal IO. 29 * The routines in tty.c handle the 30 * common code associated with 31 * these structures. The definition 32 * and device dependent code is in 33 * each driver. (cons.c, dh.c, dz.c, kl.c) 34 */ 35 struct tty 36 { 37 union { 38 struct { 39 struct clist T_rawq; 40 struct clist T_canq; 41 } t_t; 42 #define t_rawq t_nu.t_t.T_rawq /* raw characters or partial line */ 43 #define t_canq t_nu.t_t.T_canq /* complete input lines */ 44 struct { 45 struct buf *T_bufp; 46 char *T_cp; 47 int T_inbuf; 48 int T_rec; 49 } t_n; 50 #define t_bufp t_nu.t_n.T_bufp /* buffer allocated to protocol */ 51 #define t_cp t_nu.t_n.T_cp /* pointer into the ripped off buffer */ 52 #define t_inbuf t_nu.t_n.T_inbuf /* number chars in the buffer */ 53 #define t_rec t_nu.t_n.T_rec /* have a complete record */ 54 } t_nu; 55 struct clist t_outq; /* output list to device */ 56 int (*t_oproc)(); /* routine to start output */ 57 int (*t_iproc)(); /* routine to start input */ 58 struct chan *t_chan; /* destination channel */ 59 caddr_t t_linep; /* aux line discipline pointer */ 60 caddr_t t_addr; /* device address */ 61 dev_t t_dev; /* device number */ 62 short t_flags; /* mode, settable by ioctl call */ 63 short t_state; /* internal state, not visible externally */ 64 short t_pgrp; /* process group name */ 65 char t_delct; /* number of delimiters in raw q */ 66 char t_line; /* line discipline */ 67 char t_col; /* printing column of device */ 68 char t_erase; /* erase character */ 69 char t_kill; /* kill character */ 70 char t_char; /* character temporary */ 71 char t_ispeed; /* input speed */ 72 char t_ospeed; /* output speed */ 73 /* begin local */ 74 char t_rocount; /* chars input since a ttwrite() */ 75 char t_rocol; /* t_col when first input this line */ 76 struct ltchars t_lchr; /* local special characters */ 77 short t_local; /* local mode word */ 78 short t_lstate; /* local state bits */ 79 /* end local */ 80 union { 81 struct tchars t_chr; 82 struct clist t_ctlq; 83 } t_un; 84 }; 85 86 #define tun tp->t_un.t_chr 87 #define tlun tp->t_lchr 88 89 #define TTIPRI 28 90 #define TTOPRI 29 91 92 #define CTRL(c) ('c'&037) 93 94 /* default special characters */ 95 #define CERASE '#' 96 #define CEOT CTRL(d) 97 #define CKILL '@' 98 #define CQUIT 034 /* FS, cntl shift L */ 99 #define CINTR 0177 /* DEL */ 100 #define CSTOP CTRL(s) 101 #define CSTART CTRL(q) 102 #define CBRK 0377 103 104 /* limits */ 105 #define NSPEEDS 16 106 #define TTMASK 15 107 #ifdef KERNEL 108 short tthiwat[NSPEEDS], ttlowat[NSPEEDS]; 109 #define TTHIWAT(tp) tthiwat[(tp)->t_ospeed&TTMASK] 110 #define TTLOWAT(tp) ttlowat[(tp)->t_ospeed&TTMASK] 111 #endif 112 #define TTYHOG 255 113 114 /* hardware bits */ 115 #define DONE 0200 116 #define IENABLE 0100 117 118 /* internal state bits */ 119 #define TIMEOUT 01 /* delay timeout in progress */ 120 #define WOPEN 02 /* waiting for open to complete */ 121 #define ISOPEN 04 /* device is open */ 122 #define FLUSH 010 /* outq has been flushed during DMA */ 123 #define CARR_ON 020 /* software copy of carrier-present */ 124 #define BUSY 040 /* output in progress */ 125 #define ASLEEP 0100 /* wakeup when output done */ 126 #define XCLUDE 0200 /* exclusive-use flag against open */ 127 #define TTSTOP 0400 /* output stopped by ctl-s */ 128 #define HUPCLS 01000 /* hang up upon last close */ 129 #define TBLOCK 02000 /* tandem queue blocked */ 130 #define SPEEDS 04000 /* t_ispeed and t_ospeed used by driver */ 131 #define NDQB 010000 132 #define EXTPROC 020000 /* external processor (kmc) */ 133 #define FSLEEP 040000 /* Wakeup on input framing */ 134 #define BEXT 0100000 /* use (external) system buffers */ 135 136 /* define partab character types */ 137 #define ORDINARY 0 138 #define CONTROL 1 139 #define BACKSPACE 2 140 #define NEWLINE 3 141 #define TAB 4 142 #define VTAB 5 143 #define RETURN 6 144 145 /* define dmctl actions */ 146 #define DMSET 0 147 #define DMBIS 1 148 #define DMBIC 2 149