xref: /csrg-svn/sys/vax/if/if_hdhreg.h (revision 24434)
1*24434Skarels 
2*24434Skarels 
3*24434Skarels /* $Header$ */
4*24434Skarels 
5*24434Skarels /*
6*24434Skarels  * ACC IF-11/HDH interface
7*24434Skarels  */
8*24434Skarels 
9*24434Skarels struct hdhregs {			/* device registers */
10*24434Skarels 	u_short	csr;			/* control and status register */
11*24434Skarels 	u_char	iochn;			/* logical channel */
12*24434Skarels 	u_char	ioadx;			/* address extension (A16,A17) */
13*24434Skarels 	u_short	ioadl;			/* buffer address (A0-A15) */
14*24434Skarels 	u_short	iocnt;			/* byte count */
15*24434Skarels 	u_char	iofcn;			/* UMC funciton code */
16*24434Skarels 	u_char	iosbf;			/* UMC subfunction code */
17*24434Skarels 	u_char	ioini;			/* comm regs valid flag */
18*24434Skarels 	u_char	staack;			/* interrupt acknowledge flag */
19*24434Skarels 	u_char	ionmi;			/* NMI routine active flag */
20*24434Skarels 	u_char	ioxfrg;			/* UMR transfer grant flag */
21*24434Skarels 	u_char	stachn;			/* interrupt channel number */
22*24434Skarels 	u_char	statyp;			/* interrupt type code */
23*24434Skarels 	u_char	stacc;			/* completion function code */
24*24434Skarels 	u_char	stacs;			/* completion subfunction code */
25*24434Skarels 	u_short	stacnt;			/* completion byte count */
26*24434Skarels };
27*24434Skarels 
28*24434Skarels /* defines for CSR */
29*24434Skarels 
30*24434Skarels #define HDH_UER		0100000		/* UMC error condition */
31*24434Skarels #define HDH_NXM		0040000		/* non-existent memory error */
32*24434Skarels #define HDH_PER		0020000		/* UNIBUS parity error */
33*24434Skarels #define HDH_ZRUN	0010000		/* Z80 running */
34*24434Skarels #define HDH_ZGO		0004000		/* Z80 not in wait state */
35*24434Skarels #define HDH_MBLK	0000200		/* memory swap state (0=main, 1=srv) */
36*24434Skarels #define	HDH_SRV		0000100		/* select UMC service memory */
37*24434Skarels #define HDH_MAIN	0000040		/* select UMC main memory */
38*24434Skarels #define HDH_DMA		0000020		/* DMA enable */
39*24434Skarels #define HDH_WRT		0000010		/* DMA write enable */
40*24434Skarels #define HDH_IEN		0000004		/* interrupt enable */
41*24434Skarels #define HDH_RST		0000002		/* reset */
42*24434Skarels #define	HDH_NMI		0000001		/* cause NMI */
43*24434Skarels 
44*24434Skarels #define HDH_BITS \
45*24434Skarels "\10\20UER\17NXM\16PER\15ZRUN\14ZGO\10MBLK\7SRV\6MAIN\5DMA\4WRT\3IEN\2RST\1NMI"
46*24434Skarels 
47*24434Skarels /* start i/o function code definitions */
48*24434Skarels 
49*24434Skarels #define HDHWRT		0	/* write to if-11 */
50*24434Skarels #define HDHRDB		1	/* read from if-11 */
51*24434Skarels #define HDHSTR		2	/* stream flag */
52*24434Skarels #define HDHEOS		6	/* end of stream flag */
53*24434Skarels #define HDHABT		8	/* abort flag */
54*24434Skarels #define HDHUMR		16	/* UMR protocol flag */
55*24434Skarels 
56*24434Skarels /* interrupt type definitions */
57*24434Skarels 
58*24434Skarels #define HDHSACK		0	/* start i/o ack */
59*24434Skarels #define HDHDONE		1	/* i/o completion */
60*24434Skarels #define HDHXREQ		2	/* UMR protocol transfer request */
61*24434Skarels 
62*24434Skarels /* i/o completion codes */
63*24434Skarels 
64*24434Skarels #define HDHIOCOK	0001	/* successful completion */
65*24434Skarels #define HDHIOCOKP 	0002	/* successful completion, more data pending */
66*24434Skarels #define HDHIOCABT 	0361	/* i/o aborted */
67*24434Skarels #define HDHIOCERR 	0321	/* program error */
68*24434Skarels #define HDHIOCOVR 	0363	/* overrun error */
69*24434Skarels #define HDHIOCUBE 	0374	/* non-existant memory or unibus error */
70*24434Skarels 
71*24434Skarels /* UMR protocol transfer grant code definitions */
72*24434Skarels 
73*24434Skarels #define HDHXEVN		1	/* start with even address */
74*24434Skarels #define HDHXODD		2	/* start with odd address */
75*24434Skarels #define HDHNUMR		4	/* non-UMR transfer */
76*24434Skarels #define HDHXABT		8	/* abort transfer */
77*24434Skarels 
78*24434Skarels /* HDH supervisor request code definitions */
79*24434Skarels #define HDHINIT		0x42	/* SYSINIT opcode */
80*24434Skarels 
81*24434Skarels #define HDHSUP		0xf0	/* supervisor HDH status/line control prefix */
82*24434Skarels #define HDHIMP		0x400	/* IMP line up modifier */
83*24434Skarels #define HDHREFL		0x800	/* reflect mode modifier */
84*24434Skarels #define HDHINLB		0x1000	/* internal loopback modifier */
85*24434Skarels #define HDHEXLP		0x2000	/* external loopback modifier */
86*24434Skarels #define HDHRQST		HDHSUP+0x0000	/* line status request */
87*24434Skarels #define HDHRQUP		HDHSUP+0x0100	/* line up request */
88*24434Skarels #define HDHRQDN		HDHSUP+0x0200	/* line down request */
89*24434Skarels 
90*24434Skarels /* HDH supervisor reply code definitions */
91*24434Skarels 
92*24434Skarels #define HDHIACK		HDHSUP+0x4200	/* line init ack */
93*24434Skarels #define HDHLNUP		HDHSUP+0x0100	/* line up reply */
94*24434Skarels #define HDHLNDN		HDHSUP+0x0200	/* line down reply */
95*24434Skarels #define HDHLNACK	HDHSUP+0x0300	/* ack line up request (but line is down now) */
96*24434Skarels #define HDHTIMO		HDHSUP+0x0400	/* line timeout */
97*24434Skarels #define HDHLOOP		HDHSUP+0x0500	/* loopback message */
98*24434Skarels #define HDHDTERR	HDHSUP+0x0600	/* host data error detected */
99*24434Skarels #define HDHSQRCV	HDHSUP+0x0700	/* HDLC sequence error detected by IMP */
100*24434Skarels #define HDHSQERR	HDHSUP+0x0800	/* HDLC sequence error detected by if-11 */
101