|
|
1.1 ! root 1: /* ! 2: @(#) xtproto.h version 2.1 (Blit) of 7/20/83 15:43:49 ! 3: Last Delta: 7/10/83 19:08:18 to /usr/jerq/sccs/src/xt/uts/sys/s.xtproto.h ! 4: */ ! 5: ! 6: /* ! 7: ** Bx -- Blit packet protocol definition ! 8: */ ! 9: ! 10: typedef unsigned char Pbyte; /* The unit of communication */ ! 11: ! 12: #define NPCBUFS 2 /* Double buffered protocol */ ! 13: #define MAXPCHAN 8 /* Maximum channel number */ ! 14: #define CHANBITS 3 /* Bits for channel number */ ! 15: #define CHANMASK 07 /* 2**CHANBITS - 1 */ ! 16: /* ! 17: * MAXPKTDSIZE should be CLSIZE - sizeof(struct P_header) - EDSIZE ! 18: */ ! 19: #define MAXPKTDSIZE (32 * sizeof(Pbyte)) /* Maximum data part size */ ! 20: #define EDSIZE (2 * sizeof(Pbyte)) /* Error detection part size */ ! 21: #define SEQMOD 8 /* Sequence number modulus */ ! 22: #define SEQBITS 3 /* Bits for sequence number */ ! 23: #define SEQMASK 07 /* 2**SEQBITS - 1 */ ! 24: ! 25: /* ! 26: ** Packet header ! 27: ** (if only bit fields in C were m/c independent, sigh...) ! 28: */ ! 29: ! 30: #ifndef u3b ! 31: ! 32: struct P_header ! 33: { ! 34: # ifdef vax ! 35: # ifdef OLDMPX ! 36: Pbyte channel :CHANBITS, /* Channel number */ ! 37: seq :SEQBITS, /* Sequence number */ ! 38: # else OLDMPX ! 39: Pbyte seq :SEQBITS, /* Sequence number */ ! 40: channel :CHANBITS, /* Channel number */ ! 41: # endif OLDMPX ! 42: cntl :1, /* TRUE if control packet */ ! 43: ptyp :1; /* Always 1 */ ! 44: Pbyte dsize; /* Size of data part */ ! 45: # endif vax ! 46: # ifdef mc68000 ! 47: short ptyp :1, /* Always 1 */ ! 48: cntl :1, /* TRUE if control packet */ ! 49: channel :CHANBITS, /* Channel number */ ! 50: seq :SEQBITS, /* Sequence number */ ! 51: dsize :8; /* Size of data part */ ! 52: # endif mc68000 ! 53: }; ! 54: ! 55: typedef struct P_header Ph_t; ! 56: ! 57: /* ! 58: ** Packet definition for maximum sized packet ! 59: */ ! 60: ! 61: struct Packet ! 62: { ! 63: Ph_t header; /* Header part */ ! 64: Pbyte data[MAXPKTDSIZE]; /* Data part */ ! 65: Pbyte edb[EDSIZE]; /* Error detection part */ ! 66: }; ! 67: ! 68: #else u3b ! 69: ! 70: /* ! 71: ** Packet header (real size) ! 72: */ ! 73: ! 74: typedef short Ph_t; ! 75: ! 76: /* ! 77: ** Packet definition for maximum sized packet ! 78: */ ! 79: ! 80: struct Packet { ! 81: Pbyte header; /* Packet into */ ! 82: Pbyte dsize; /* Size of data part */ ! 83: Pbyte data[MAXPKTDSIZE]; /* Data part */ ! 84: Pbyte edb[EDSIZE]; /* Error detection part */ ! 85: }; ! 86: ! 87: /* ! 88: ** Macros to access fields of header byte ! 89: */ ! 90: ! 91: #define SET_CNTL(x) (x)|=0100 ! 92: #define GET_CNTL(x) (((x)>>6)&1) ! 93: #define GET_PTYP(x) (((x)>>7)&1) ! 94: #define GET_SEQ(x) ((x)&7) ! 95: #define GET_CHAN(x) (((x)>>3)&7) ! 96: #define MK_HDR(x,chan,seq) (x)=0200|((chan)<<3)|(seq) ! 97: ! 98: #endif u3b ! 99: ! 100: typedef struct Packet * Pkt_p; ! 101: ! 102: /* ! 103: ** Control codes ! 104: */ ! 105: ! 106: #define PCDATA (Pbyte)002 /* Data only control packet */ ! 107: #define ACK (Pbyte)006 /* Last packet with same sequence ok and in sequence */ ! 108: #define NAK (Pbyte)025 /* Last packet with same sequence received out of sequence */ ! 109: ! 110: /* ! 111: ** Definition of a structure to hold status information ! 112: ** for a conversation with a channel. ! 113: */ ! 114: ! 115: struct Pktstate ! 116: { ! 117: struct Packet pkt; /* The packet */ ! 118: short timo; /* Timeout count */ ! 119: unsigned char state; /* Protocol state */ ! 120: unsigned char size; /* Packet size */ ! 121: }; ! 122: ! 123: typedef struct Pktstate *Pks_p; ! 124: ! 125: struct Pchannel ! 126: { ! 127: struct Pktstate pkts[NPCBUFS]; /* The packets */ ! 128: Pks_p nextpkt; /* Next packet to be acknowledged */ ! 129: Pbyte cdata[SEQMOD]; /* Remember transmitted control data */ ! 130: Pbyte rseq :SEQBITS; /* Next receive sequence number */ ! 131: Pbyte xseq :SEQBITS; /* Next transmit sequence number */ ! 132: char outen; /* Output packets enabled */ ! 133: char flags; /* Control flags */ ! 134: #if XTDRIVER == 1 ! 135: char channo; /* This channel's number */ ! 136: char link; /* This channel's link */ ! 137: # ifdef u3b ! 138: struct clist xoutq; /* Processed output for channel */ ! 139: struct clist xinq; /* Processed input for channel */ ! 140: char esc; /* saw "\" flag for tty input */ ! 141: # endif u3b ! 142: #endif ! 143: }; ! 144: ! 145: #define XACK 1 /* Send ACK */ ! 146: #define XNAK 2 /* Send NAK */ ! 147: #define XCDATA 4 /* Send control data in ACK packet */ ! 148: ! 149: typedef struct Pchannel *Pch_p; ! 150: ! 151: /** Transmit packet states **/ ! 152: ! 153: enum { px_null, px_ready, px_wait, px_ok }; ! 154: ! 155: #define PX_NULL (int)px_null /* Empty packet */ ! 156: #define PX_READY (int)px_ready /* Full packet awaiting transmission */ ! 157: #define PX_WAIT (int)px_wait /* Packet awaiting acknowledgement */ ! 158: #define PX_OK (int)px_ok /* Packet has been acknowledged */ ! 159: ! 160: /** Receive packet states **/ ! 161: ! 162: enum { pr_null, pr_size, pr_data }; ! 163: ! 164: #define PR_NULL (int)pr_null /* New packet expected */ ! 165: #define PR_SIZE (int)pr_size /* Size byte next */ ! 166: #define PR_DATA (int)pr_data /* Receiving data */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.