2.11BSD/sys/OTHERS/scsi2/xereg.h

/*
 *	xereg.h
 *
 *	defines for the DTC-XEBEC combination controller
 *	on a Q-bus
 */

struct xedevice {
	short	xeccsr;
	short	xecsr;
	short	xedar;
	short	xecar;
	short	xexdar;
	short	xexcar;
};

struct xep {
	int	xe_nsect;
	int	xe_ntrac;
	int	xe_nhead;
	int	xe_rwcur;
	int	xe_wpc;
	int	xe_seek;
	int	xe_isset;
};

struct xesize {
	daddr_t		nblocks;
	daddr_t		blkoff;
};

struct xecommand {
	char	xeop;		/* opcode and command class */
	char	xeunit;		/* drive number and bits 20-16 of blk no */
	char	xehblk;		/* bits 15-8 of block number */
	char	xelblk;		/* bits 7-0 of block number */
	char	xecount;	/* block count */
	char	xecntl;		/* control field (stepping option) */
};

struct xeinit {
	char	xeihtrac;	/* high order number of cylinders */
	char	xeiltrac;	/* low order number of cylinders */
	char	xeinhead;	/* number of heads */
	char	xeihrwcur;	/* high order reduced current cylinder number */
	char	xeilrwcur;	/* low order reduced current cylinder number */
	char	xeihwpc;	/* high order write precomp cylinder number */
	char	xeilwpc;	/* low order write precomp cylinder number */
	char	xeiecc		/* ecc error correction length, usually 11 */
};

struct xeiblock {
	short	xeimagic;	/* magic number to check validity */
	char	xeibnsect;	/* number of sectors/track */
	char	xeibnhead;	/* number of heads */
	short	xeibntrac;	/* number of cylinders */
	short	xeibrwcur;	/* reduced write current cylinder number */
	short	xeibwpc;	/* write precomp cylinder */
	char	xeibecc;	/* ecc error correction length */
	char	xeibseek;	/* seek parameter */
	struct xesize xeibsizes[8];	/* size of each logical device */
};

# define XEIMAGIC	0077000		/* magic number */

/*
 *	command completion status register bits
 */
# define CCSRSEQER	0177400	/* sequence error bits 15-8 */
# define CCSRLUN	0000340	/* logical unit number bits 7-5 */
# define CCSRCDE	0000002	/* controller/drive error bit 1 */
# define CCSRPE		0000001	/* parity error bit 0 */
# define XECCSR_BITS "\02CCSRCDE\01CCSRPE"

/*
 *	control/status register bits
 */
# define CSRERROR	0100000	/* any error detected bit 15 */
# define CSRNXM		0040000	/* non-existant memory bit 14 */
# define CSRPE		0020000	/* parity error bit 13 */
# define CSRCXMA	0007400	/* bits 19-16 of com block addr bits 11-8 */
# define CSRDONE	0000200	/* done bit 7 */
# define CSRIE		0000100	/* interrupt enable bit 6 */
# define CSRDXMA	0000074	/* bits 19-16 of data block addr bits 5-2 */
# define CSRRESET	0000002	/* force reset bit 1 */
# define CSRGO		0000001	/* go bit 0 */
# define XECSR_BITS "\20CSRERROR\17CSRNXM\16CSRPE\10CSRDONE\7CSRIE\2CSRRESET\1CSRGO"

/*
 *	data address register
 */
# define DARADDR	0177777	/* low order data address bits 15-0 */

/*
 *	command address register
 */
# define CARADDR	0177777	/* low order command address bits 15-0 */

/*
 *	extension data address register
 */
# define XDARADDR	0000003	/* bits 21-20 of data address bits 1-0 */

/*
 *	extension command address register
 */
# define XCARADDR	0000003	/* bits 21-20 of command address bits 1-0 */

/*
 *	commands to the xebec board
 */
# define XERDY		000	/* select and verify drive ready */
# define XEHOME		001	/* home to track 0 */
# define XERSS		003	/* read sense error information */
# define XEFMT		004	/* format drive */
# define XECFMT		005	/* check drive format */
# define XETFMT		006	/* format track */
# define XEBTRK		007	/* set bad track bit */
# define XEREAD		010	/* read N blocks */
# define XEWRITE	012	/* write N blocks */
# define XESEEK		013	/* seek to block N */
# define XEINIT		014	/* initialize drive charactistics */
# define XERECC		015	/* read ecc burst error length */
# define XEFAT		016	/* format alternate track */
# define XEWSB		017	/* write sector buffer */
# define XERSB		020	/* read sector buffer */
# define XERAMT		0340	/* ram test */
# define XEDRVT		0343	/* drive diagnostic */
# define XECID		0344	/* controller internal diagnostics */
# define XERL		0345	/* read long */
# define XEWL		0346	/* write long */