#sccs "@(#)uts/kern/sys:tty.h 1.6" /* Convergent Technologies - System V - May 1983 */ #ifndef tty_h #define tty_h #include /* * A clist structure is the head of a linked list queue of characters. * The routines getc* and putc* manipulate these structures. */ struct clist { ushort c_cc; /* character count */ struct cblock *c_cf; /* pointer to first */ struct cblock *c_cl; /* pointer to last */ }; /* Macro to find clist structure given pointer into it */ #define CMATCH(pointer) (struct cblock *)(cfree + (pointer - cfree)) /* Character control block for interrupt level control */ struct ccblock { caddr_t c_ptr; /* buffer address */ ushort c_count; /* character count */ ushort c_size; /* buffer size */ }; /* * A tty structure is needed for each UNIX character device that * is used for normal terminal IO. */ #define NCC 8 struct tty { struct clist t_rawq; /* raw input queue */ struct clist t_canq; /* canonical queue */ struct clist t_outq; /* output queue */ struct ccblock t_tbuf; /* tx control block */ struct ccblock t_rbuf; /* rx control block */ int (* t_proc)(); /* routine for device functions */ char spacer[4]; /* keep space for window pointer */ /* to reserve alignment for Starlan */ ushort t_iflag; /* input modes */ ushort t_oflag; /* output modes */ ushort t_cflag; /* control modes */ ushort t_lflag; /* line discipline modes */ short t_state; /* internal state */ short t_pgrp; /* process group name */ char t_line; /* line discipline */ char t_delct; /* delimiter count */ char t_col; /* current column */ unsigned char t_extctl;/* extended control for serial tty ports. Used for half-duplex and flow control */ unsigned char t_mindev;/* minor device number of tty */ unsigned char t_cc[NCC]; /* settable control chars */ }; /* * The structure of a clist block */ #define CLSIZE 64 struct cblock { struct cblock *c_next; char c_first; char c_last; char c_data[CLSIZE]; }; extern struct cblock *cfree; extern struct cblock * getcb(); extern struct cblock * getcf(); extern struct clist ttnulq; struct chead { struct cblock *c_next; short c_size; short c_count; int c_flag; }; extern struct chead cfreelist; struct inter { int cnt; }; #ifndef space_h #define QESC 0200 /* queue escape */ #define HQEND 01 /* high queue end */ #ifndef TTIPRI /* also defined in the priority table in param.h */ #define TTIPRI 27 /* waiting for tty input (was 28) */ #define TTOPRI 29 #endif /* limits */ extern int ttlowat[], tthiwat[]; #define TTXOLO 60 #define TTXOHI 180 #define TTECHI 80 /* Hardware bits */ #define DONE 0200 #define IENABLE 0100 #define OVERRUN 040000 #define FRERROR 020000 #define PERROR 010000 /* Half duplex bits */ #define RTSON 001 #define INUSE 002 /* tty port is being used by another driver. */ /* Internal state */ #define TIMEOUT 01 /* Delay timeout in progress */ #define WOPEN 02 /* Waiting for open to complete */ #define ISOPEN 04 /* Device is open */ #define TBLOCK 010 #define CARR_ON 020 /* Software copy of carrier-present */ #define BUSY 040 /* Output in progress */ #define OASLP 0100 /* Wakeup when output done */ #define IASLP 0200 /* Wakeup when input done */ #define TTSTOP 0400 /* Output stopped by ctl-s */ #define EXTPROC 01000 /* External processing */ #define TACT 02000 #define CLESC 04000 /* Last char escape */ #define RTO 010000 /* Raw Timeout */ #define TTIOW 020000 #define TTXON 040000 #define TTXOFF 0100000 /* for t_cflag */ #define WINDOW 0040000 /* indicate a bit-mapped console device */ /* l_output status */ #define CPRES 0100000 /* device commands */ #define T_OUTPUT 0 #define T_TIME 1 #define T_SUSPEND 2 #define T_RESUME 3 #define T_BLOCK 4 #define T_UNBLOCK 5 #define T_RFLUSH 6 #define T_WFLUSH 7 #define T_BREAK 8 #define T_INPUT 9 #define T_VBREAK 10 #endif space_h #endif tty_h