Xinu7/include/deqna.h
/* deqna.h */
/* Definitions Digital Equipment Corporation's DEQNA Ethernet interface */
/* Device register layout */
struct dqregs { /* deqna registers in I/O space */
int d_addr; /* when read, low order byte of */
int d_addr2; /* these and next 4 regs give */
/* 6-byte Ethernet node address*/
char *d_rcmd; /* list of read cmds in memory */
char *d_rcmdh; /* high order bits of d_rcmd */
char *d_wcmd; /* list of write cmds in memory */
char *d_wcmdh; /* high order bits of d_wcmd */
char *d_vect; /* interrupt vector address */
int d_csr; /* control and status register */
};
/* Bits in the Control and Status Register */
#define DQ_ENBL 0000001 /* Receiver enable */
#define DQ_REST 0000002 /* Software reset */
#define DQ_NXMI 0000004 /* Nonexistent memory interrupt */
#define DQ_BROM 0000010 /* Fetch boot/diagnostic ROM */
#define DQ_XLI 0000020 /* Xmit list invalid */
#define DQ_RLI 0000040 /* Receive list invalid */
#define DQ_IEN 0000100 /* Interrupt Enable */
#define DQ_XINT 0000200 /* Xmit interrupt */
#define DQ_ILOP 0000400 /* Internal loopback mode */
#define DQ_ELOP 0001000 /* External loopback mode */
#define DQ_TIME 0002000 /* Sanity timer enable */
#define DQ_RES1 0004000 /* Vendor reserved */
#define DQ_FUSE 0010000 /* Fuse OK */
#define DQ_CARR 0020000 /* Carrier present on ether */
#define DQ_RES2 0040000 /* Vendor reserved */
#define DQ_RINT 0100000 /* Receive interrupt */
/* Command to device as it appears on buffer descriptor list in memory */
struct dcmd { /* DEQNA command in memory */
int dc_flag; /* flag word marked USED/UNUSED */
int dc_bufh; /* desc.+ high buf. addr. bits */
char *dc_buf; /* buffer addr. (low order bits)*/
int dc_len; /* buffer length (see manual) */
int dc_st1; /* Status word 1 */
int dc_st2; /* Status word 2 */
};
/* Bits in the flag word of dcm */
#define DC_NUSED 0100000 /* This dcmd entry not in use */
#define DC_USED 0140000 /* DEQNA using this dcmd entry */
/* Bits in the descriptor word of dcm (i.e. in dc_bufh) */
#define DC_VALID 0100000 /* This is a valid buffer addr. */
#define DC_CADDR 0040000 /* This is a chain address */
#define DC_ENDM 0020000 /* Xmit: end of message */
#define DC_SETUP 0010000 /* Xmit: setup packet */
#define DC_NORM 0000000 /* Xmit: non-setup packet */
#define DC_ENDL 0000000 /* Last descriptor in list */
#define DC_XRES 0007400 /* Vendor reserved */
#define DC_LBIT 0000200 /* Buffer ends on odd address */
#define DC_HBIT 0000100 /* Buffer starts on odd address */
/* Bits returned to first status word (dc_st1) */
#define DC_LUSE 0140000 /* LAST/USE bits (see manual) */
#define DC_INIT 0100000 /* Initial value of status word */
#define DC_ERRU 0040000 /* ERROR/USED bit (see manual) */
#define DC_LOSS 0010000 /* Xmit: lost carrier */
#define DC_NCAR 0004000 /* Xmit: no carrier */
#define DC_ST16 0002000 /* Xmit: timer enabled */
#define DC_ABRT 0001000 /* Xmit: abort */
#define DC_FAIL 0000400 /* Xmit: heartbeat failure */
#define DC_CCNT 0000360 /* Xmit: collision count */
#define DC_ESET 0020000 /* Recv: setup packet */
#define DC_DISC 0010000 /* Recv: discard packet */
#define DC_RUNT 0004000 /* Recv: runt packet (too short)*/
#define DC_HLEN 0003400 /* Recv: bits 10:8 of rec. len. */
#define DC_LLEN 0000377 /* Recv: bits 7:0 of rec. len. */
#define DC_XLEN 60 /* manual says add 60 to len... */
#define DC_RRES 0000370 /* Recv: vendor reserved */
#define DC_FRAM 0000004 /* Recv: frame alignment */
#define DC_CERR 0000002 /* Recv: CRC error */
#define DC_OVER 0000001 /* Recv: overflow error */
/* Definitions of device setup packet (see manual for details) */
#define DQ_ROWS 16 /* setup has 16 rows */
#define DQ_COLS 8 /* setup has 8 columns */
#define DQ_SETD 8 /* displacement of 2nd copy */
#define DQ_BCST 0377 /* broadcast address bytes */
#define dqlen(x) (-(((x)+1)>>1)) /* buffer len: map byte length */
/* to 2s compl. of word length */
#define DQ_RTO 300 /* maximum time to wait for read*/
struct dqsetu { /* deqna setup packet strructure*/
char dq_set[DQ_ROWS][DQ_COLS];/* holds one setup packet */
char dq_echo[DQ_ROWS][DQ_COLS];/* holds echo of packet */
char dq_crc[4]; /* allow deqna extra 4 bytes */
};