xref: /csrg-svn/sys/vax/if/if_qereg.h (revision 27916)
1*27916Skarels /*	@(#)if_qereg.h	6.1 (Berkeley) 05/09/86 */
227478Skjd 
327478Skjd /* @(#)if_qereg.h	1.2 (ULTRIX) 1/3/85 */
427478Skjd 
527478Skjd /****************************************************************
627478Skjd  *								*
727478Skjd  *        Licensed from Digital Equipment Corporation 		*
827478Skjd  *                       Copyright (c) 				*
927478Skjd  *               Digital Equipment Corporation			*
1027478Skjd  *                   Maynard, Massachusetts 			*
1127478Skjd  *                         1985, 1986 				*
1227478Skjd  *                    All rights reserved. 			*
1327478Skjd  *								*
1427478Skjd  *        The Information in this software is subject to change *
1527478Skjd  *   without notice and should not be construed as a commitment *
1627478Skjd  *   by  Digital  Equipment  Corporation.   Digital   makes  no *
1727478Skjd  *   representations about the suitability of this software for *
1827478Skjd  *   any purpose.  It is supplied "As Is" without expressed  or *
1927478Skjd  *   implied  warranty. 					*
2027478Skjd  *								*
2127478Skjd  *        If the Regents of the University of California or its *
2227478Skjd  *   licensees modify the software in a manner creating  	*
2327478Skjd  *   diriviative copyright rights, appropriate copyright  	*
2427478Skjd  *   legends may be placed on  the drivative work in addition   *
2527478Skjd  *   to that set forth above. 					*
2627478Skjd  *								*
2727478Skjd  ****************************************************************/
2827478Skjd /* ---------------------------------------------------------------------
2927478Skjd  * Modification History
3027478Skjd  *
3127478Skjd  *  13 Feb. 84 -- rjl
3227478Skjd  *
3327478Skjd  *	Initial version of driver. derived from IL driver.
3427478Skjd  *
3527478Skjd  * ---------------------------------------------------------------------
3627478Skjd  */
3727478Skjd 
3827478Skjd /*
3927478Skjd  * Digital Q-BUS to NI Adapter
4027478Skjd  */
4127478Skjd struct qedevice {
4227478Skjd 	u_short	qe_sta_addr[2]; 	/* Station address (actually 6 	*/
43*27916Skarels 	u_short	qe_rcvlist_lo; 		/* Receive list lo address 	*/
44*27916Skarels 	u_short	qe_rcvlist_hi; 		/* Receive list hi address 	*/
4527478Skjd 	u_short	qe_xmtlist_lo;		/* Transmit list lo address 	*/
4627478Skjd 	u_short	qe_xmtlist_hi;		/* Transmit list hi address 	*/
4727478Skjd 	u_short	qe_vector;		/* Interrupt vector 		*/
4827478Skjd 	u_short	qe_csr;			/* Command and Status Register 	*/
4927478Skjd };
5027478Skjd 
5127478Skjd /*
5227478Skjd  * Command and status bits (csr)
5327478Skjd  */
5427478Skjd #define QE_RCV_ENABLE	0x0001		/* Receiver enable		*/
5527478Skjd #define QE_RESET	0x0002		/* Software reset		*/
5627478Skjd #define QE_NEX_MEM_INT	0x0004		/* Non existant mem interrupt	*/
5727478Skjd #define QE_LOAD_ROM	0x0008		/* Load boot/diag from rom	*/
5827478Skjd #define QE_XL_INVALID	0x0010		/* Transmit list invalid	*/
5927478Skjd #define QE_RL_INVALID	0x0020		/* Receive list invalid		*/
6027478Skjd #define QE_INT_ENABLE	0x0040		/* Interrupt enable		*/
6127478Skjd #define QE_XMIT_INT	0x0080		/* Transmit interrupt		*/
6227478Skjd #define QE_ILOOP 	0x0100		/* Internal loopback		*/
6327478Skjd #define QE_ELOOP	0x0200		/* External loopback		*/
6427478Skjd #define QE_STIM_ENABLE	0x0400		/* Sanity timer enable		*/
6527478Skjd #define QE_POWERUP	0x1000		/* Tranceiver power on		*/
6627478Skjd #define QE_CARRIER	0x2000		/* Carrier detect		*/
6727478Skjd #define QE_RCV_INT	0x8000		/* Receiver interrupt		*/
6827478Skjd 
6927478Skjd /*
7027478Skjd  * Transmit and receive ring discriptor ---------------------------
7127478Skjd  *
7227478Skjd  * The QNA uses the flag, status1 and the valid bit as a handshake/semiphore
7327478Skjd  * mechinism.
7427478Skjd  *
7527478Skjd  * The flag word is written on ( bits 15,15 set to 1 ) when it reads the
7627478Skjd  * descriptor. If the valid bit is set it considers the address to be valid.
7727478Skjd  * When it uses the buffer pointed to by the valid address it sets status word
7827478Skjd  * one.
7927478Skjd  */
8027478Skjd struct qe_ring	{
8127478Skjd 	u_short qe_flag;		/* Buffer utilization flags	*/
8227478Skjd 	u_short qe_addr_hi:6,		/* Hi order bits of buffer addr	*/
8327478Skjd 	      qe_odd_begin:1,		/* Odd byte begin and end (xmit)*/
8427478Skjd 	      qe_odd_end:1,
8527478Skjd 	      qe_fill1:4,
8627478Skjd 	      qe_setup:1,		/* Setup packet			*/
8727478Skjd 	      qe_eomsg:1,		/* End of message flag		*/
8827478Skjd 	      qe_chain:1,		/* Chain address instead of buf */
8927478Skjd 	      qe_valid:1;		/* Address field is valid	*/
9027478Skjd 	u_short qe_addr_lo;		/* Low order bits of address	*/
9127478Skjd 	short qe_buf_len;		/* Negative buffer length	*/
9227478Skjd 	u_short qe_status1;		/* Status word one		*/
9327478Skjd 	u_short qe_status2;		/* Status word two		*/
9427478Skjd };
9527478Skjd 
9627478Skjd /*
9727478Skjd  * Status word definations (receive)
9827478Skjd  *	word1
9927478Skjd  */
10027478Skjd #define QE_OVF			0x0001	/* Receiver overflow		*/
10127478Skjd #define QE_CRCERR		0x0002	/* CRC error			*/
10227478Skjd #define QE_FRAME		0x0004	/* Framing alignment error	*/
10327478Skjd #define QE_SHORT		0x0008	/* Packet size < 10 bytes	*/
10427478Skjd #define QE_RBL_HI		0x0700	/* Hi bits of receive len	*/
10527478Skjd #define QE_RUNT			0x0800	/* Runt packet			*/
10627478Skjd #define QE_DISCARD		0x1000	/* Discard the packet		*/
10727478Skjd #define QE_ESETUP		0x2000	/* Looped back setup or eloop	*/
10827478Skjd #define QE_ERROR		0x4000	/* Receiver error		*/
10927478Skjd #define QE_LASTNOT		0x8000	/* Not the last in the packet	*/
11027478Skjd /*	word2								*/
11127478Skjd #define QE_RBL_LO		0x00ff	/* Low bits of receive len	*/
11227478Skjd 
11327478Skjd /*
11427478Skjd  * Status word definations (transmit)
11527478Skjd  *	word1
11627478Skjd  */
11727478Skjd #define QE_CCNT			0x00f0	/* Collision count this packet	*/
11827478Skjd #define QE_FAIL			0x0100	/* Heart beat check failure	*/
11927478Skjd #define QE_ABORT		0x0200	/* Transmission abort		*/
12027478Skjd #define QE_STE16		0x0400	/* Sanity timer default on	*/
12127478Skjd #define QE_NOCAR		0x0800	/* No carrier			*/
12227478Skjd #define QE_LOSS			0x1000	/* Loss of carrier while xmit	*/
12327478Skjd /*	word2								*/
12427478Skjd #define QE_TDR			0x3fff	/* Time domain reflectometry	*/
12527478Skjd 
12627478Skjd /*
12727478Skjd  * General constant definations
12827478Skjd  */
12927478Skjd #define QEALLOC 		0	/* Allocate an mbuf		*/
13027478Skjd #define QENOALLOC		1	/* No mbuf allocation		*/
13127478Skjd #define QEDEALLOC		2	/* Release an mbuf chain	*/
13227478Skjd 
13327478Skjd #define QE_NOTYET		0x8000	/* Descriptor not in use yet	*/
13427478Skjd #define QE_INUSE		0x4000	/* Descriptor being used by QNA	*/
13527478Skjd #define QE_MASK			0xc000	/* Lastnot/error/used mask	*/
136