V8/usr/include/tr.h
#ifdef KERNEL
#include "../h/param.h"
#include "../h/dir.h"
#include "../h/user.h"
#include "../h/tty.h"
#include "../h/buf.h"
#include "../h/proc.h"
#include "../h/systm.h"
#ifdef VMUNIX
#include "../h/clist.h"
#include "../h/file.h"
#define ttiocb sgttyb
#endif
#ifdef VMUNIX
#define ttioccomm ttioctl
#define ioc_ispeed sg_ispeed
#define ioc_ospeed sg_ospeed
#define ioc_erase sg_erase
#define ioc_kill sg_kill
#define ioc_flags sg_flags
#endif
#define NTR 20
#define xseq tr->tr_xseq
#define lseq tr->tr_lseq
#define rseq tr->tr_rseq
#define avbytes tr->tr_avbytes
#define trschars tr->tr_schars
#define rbytes tr->tr_rbytes
#define cbytes tr->tr_cbytes
#define trstate tr->tr_state
#define trcntl tr->tr_cntl
#define tramsg tr->tr_amsg
#define trbsize tr->tr_bsize
#define trsent tr->tr_sent
#define inpq tr->tr_inpq
#define troutq tr->tr_outq
#define trctlq tr->tr_ctlq
#define trecho tr->tr_echo
#define trenq tr->tr_enq
#define trepoch tr->tr_epoch
#define trtime tr->tr_time
#define q4 tr->tr_q4
#define DCLS register struct tr *tr; register s;
#define DHIWAT 150
#define DLOWAT 50
#define q1 tp->t_rawq
#define q2 tp->t_canq
#define q3 tp->t_outq
#define WAKEUP(a) wakeup(a)
#define LOCK s = spl6()
#define UNLOCK splx(s)
#endif
struct triocmb {
char type;
char seq;
short cmd; /* param0 */
struct ttiocb triocb;
};
#define trioc (tr->tr_iocb)
struct tr {
struct tty *tr_tty; /* device tty struct */
struct tty *tr_utty; /* user's tty struct */
struct clist *tr_q4;
short tr_state; /* state bits */
short tr_cntl; /* meta packet control bits */
short tr_amsg; /* async receive register */
short tr_avbytes; /* max transmission allowed */
short tr_rbytes; /* size of <data> */
short tr_cbytes; /* current input record residual */
short tr_bsize; /* size of buffer request */
short tr_schars; /* singleton bytes in q1 */
short tr_echo;
short tr_enq;
short tr_epoch;
struct clist tr_inpq;
struct clist tr_outq;
struct clist tr_ctlq;
struct triocmb tr_iocb;
char tr_sig;
char tr_flag;
char tr_xseq; /* output sequence number */
char tr_lseq; /* last xseq acknowledged */
char tr_rseq; /* last seq received */
char tr_time; /* timeout delay */
};
#ifdef KERNEL
struct tr trvec[NTR];
#endif
/*
* control codes
*/
#define CHK 040 /* enable checking of seq number */
#define INIT 0100 /* allowable response to RESEQ msg */
#define P_DATA (01|INIT|CHK)
#define P_CHAR (02|INIT|CHK)
#define P_MORE (03|INIT|CHK)
#define P_CMD (04|INIT|CHK)
#define P_ERROR (05|INIT|CHK)
#define P_ACK 06
#define P_REJ 07
#define P_ALLOC 010
#define P_ENQ 011
#define P_RESP 012
#define P_SYN 013
#define P_RESYN (014|INIT)
#define P_IOCTL (015|INIT)
#define P_IOANS 016
#define P_SIGNAL 023
#define P_SIGANS 024
#define NMSG (024-010)
struct msg {
char type;
char seq;
short param0;
short param1;
short param2;
short param3;
short param4;
short param5;
short param6;
};
/*
* state bits
*/
#define RXMIT 01 /* flag to start retransmission */
#define R_ACK 02 /* have received an ack */
#define LIVE 04 /* connection is live */
#define T_ASYNC 010
#define R_IOCTL 020 /* have received an ioctl */
#define R_SYN 040 /* have received P_SYN */
#define BREAD 0100
#define S_REJ 0200 /* have sent one REJ */
#define S_ENQ 0400 /* sending ENQs */
#define R_ZERO 01000 /* zero length read pending */
#define BWRITE 02000
#define D_IOCTL 04000
/*
* cntrl msg flags
*/
#define X_CLOSE 01
#define X_CLOSED 02
#define X_SYN 04
#define X_RESYN 010
#define X_REJ 020
#define X_ACK 040
#define X_ALL 0100
#define X_ENQ 0200
#define X_RESP 0400
#define X_BREQ 01000
#define X_BANS 02000
#define X_IOCTL 040000
#define X_IOANS 010000
#define X_SIG 020000
#define X_SIGANS 040000
/*
* Circular trace buffer (debugging)
*/
struct trec {
char dev;
char state;
char code;
short seq;
short p0;
short p1;
};
#define R 0100
#define S 0
#define Tblock 0200
#define Tmove 0201
#define Trelease 0202
#define Tmark 0203
#define Tflush 0204
#define Trxint 0205
#define Topen 0206
#define Tclose 0207
#define Tsleep 0210
#define Twrite 0211
#define Tbwrite 0212
#define Tbwait 0213
#define Tread 0220
#define Trend 0221
#define Tsmeta 0222
#define Tablock 0223
#define Tbusy 0224
#define Trxmeta 0225
#define Tlive 0226
#define Tbread 0227
#define Trxmit 0230
#define Trzero 0231
#define Trproc 0232
#define Tdowrite 0233
#define Tgetblk 0234
#define Tbrelse 0235
#define Tovf 0236
#define Tseq 0237
#define Tmeta 0240
#define Tucount 0241
#define Txint 0242
#define Tadjust 0243
#define TSioctl 0244
#define Tdoctl 0245
#define Tcounts 0246
#define Ttimes 0247
#define Tdel 0250
#define TSIZE 250