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