V10/sys/sys/xkb.h

/*
 * for datakit simple kmc driver
 */

/*
 * per channel
 */
struct	kb {
	struct	queue *dkrq;
	char	flag;
	unsigned char	chan;
	struct	kb *link;
};

/*
 * buffer descriptor
 */
struct kbdesc {
	short loaddr;	/* low buffer address */
	short len;	/* negative buffer length */
	unsigned char chan;	/* channel */
	char flag;	/* flags and high address */
};

/*
 * per interface
 */

#define	XRING	40
#define	RRING	20

struct kbkmc {
	char	flags;
	char	kno;		/* which kmc is ours */
	char	ubno;		/* which unibus has the kmc */
	struct device *addr;	/* kmc registers */
	struct dkmodule *modp;
	struct {	/* bundle for convenient unibus mapping */
		struct kbdesc _xring[XRING+1];
		struct kbdesc _rring[RRING+1];
	} rings;
#define	xring	rings._xring
#define	rring	rings._rring
	ubm_t	ringmap;
	uaddr_t	xrua, rrua;	/* unibus address of descriptor rings */
	struct block *xblock[XRING];	/* blocks in transmit descriptors */
	ubm_t	xmap[XRING];	/* and their map cookies */
	struct block *rblock[RRING];	/* likewise receive */
	ubm_t	rmap[RRING];
	char xrp, xwp;		/* read, write positions in xring */
	char rrp, rwp;		/* and in rring */
	int	rbytes;		/* bytes of receive buffer outstanding */
};