--- Net2/sys/tty.h 2018/04/24 18:03:57 1.1 +++ Net2/sys/tty.h 2018/04/24 18:10:12 1.1.1.2 @@ -31,20 +31,55 @@ * SUCH DAMAGE. * * @(#)tty.h 7.10 (Berkeley) 6/26/91 + * $Header: /var/lib/cvsd/net2/Net2/sys/tty.h,v 1.1.1.2 2018/04/24 18:10:12 root Exp $ + * + * PATCHES MAGIC LEVEL PATCH THAT GOT US HERE + * -------------------- ----- ---------------------- + * CURRENT PATCH LEVEL: 2 00061 + * -------------------- ----- ---------------------- + * + * 18 Aug 92 Stephen McKay Fixed RB_LEN macro + * 11 Dec 92 Williams Jolitz Fixed tty handling + * -------------------- ----- ---------------------- + * */ #include /* - * Clists are character lists, which is a variable length linked list - * of cblocks, wiht a count of the number of characters in the list. + * Ring buffers provide a contiguous, dense storage for + * character data used by the tty driver. */ -struct clist { - int c_cc; /* count of characters in queue */ - char *c_cf; /* first character/cblock */ - char *c_cl; /* last chararacter/cblock */ +#define RBSZ 1024 + +struct ringb { + char *rb_hd; /* head of buffer segment to be read */ + char *rb_tl; /* tail of buffer segment to be written */ + char rb_buf[RBSZ]; /* segment contents */ }; +#define RB_SUCC(rbp, p) \ + ((p) >= (rbp)->rb_buf + RBSZ - 1 ? (rbp)->rb_buf : (p) + 1) + +#define RB_ROLLOVER(rbp, p) \ + ((p) > (rbp)->rb_buf + RBSZ - 1 ? (rbp)->rb_buf : (p)) + +#define RB_PRED(rbp, p) \ + ((p) <= (rbp)->rb_buf ? (rbp)->rb_buf + RBSZ - 1 : (p) - 1) + +#define RB_LEN(rp) \ + ((rp)->rb_hd <= (rp)->rb_tl ? (rp)->rb_tl - (rp)->rb_hd : \ + RBSZ - ((rp)->rb_hd - (rp)->rb_tl)) + +#define RB_CONTIGPUT(rp) \ + (RB_PRED(rp, (rp)->rb_hd) < (rp)->rb_tl ? \ + (rp)->rb_buf + RBSZ - (rp)->rb_tl : \ + RB_PRED(rp, (rp)->rb_hd) - (rp)->rb_tl) + +#define RB_CONTIGGET(rp) \ + ((rp)->rb_hd <= (rp)->rb_tl ? (rp)->rb_tl - (rp)->rb_hd : \ + (rp)->rb_buf + RBSZ - (rp)->rb_hd) + /* * Per-tty structure. * @@ -53,13 +88,10 @@ struct clist { * (low, high, timeout). */ struct tty { - struct clist t_rawq; /* queues */ - struct clist t_canq; - struct clist t_outq; int (*t_oproc)(); /* device */ int (*t_param)(); /* device */ - struct proc *t_rsel; /* tty */ - struct proc *t_wsel; + pid_t t_rsel; /* tty */ + pid_t t_wsel; caddr_t T_LINEP; /* XXX */ caddr_t t_addr; /* ??? */ dev_t t_dev; /* device */ @@ -87,6 +119,10 @@ struct tty { long t_rawcc; long t_outcc; short t_gen; /* generation number */ + short t_mask; /* interrupt mask */ + struct ringb t_raw; /* ring buffers */ + struct ringb t_can; + struct ringb t_out; }; #define TTIPRI 25 /* sleep priority for tty reads */ @@ -97,8 +133,8 @@ struct tty { #define TTYHOG 1024 #ifdef KERNEL -#define TTMAXHIWAT roundup(2048, CBSIZE) -#define TTMINHIWAT roundup(100, CBSIZE) +#define TTMAXHIWAT (RBSZ/2) /* XXX */ +#define TTMINHIWAT 128 #define TTMAXLOWAT 256 #define TTMINLOWAT 32 extern struct ttychars ttydefaults;