xref: /original-bsd/sys/vax/uba/rkreg.h (revision 0b685140)
1 /*	rkreg.h	4.2	81/05/09	*/
2 
3 #define NRK7CYL 	815
4 #define	NRK6CYL		411
5 #define NRKSECT		22
6 #define NRKTRK		3
7 
8 struct rkdevice
9 {
10 	short	rkcs1;		/* control status reg 1 */
11 	short	rkwc;		/* word count */
12 	u_short	rkba;		/* bus address */
13 	short	rkda;		/* disk address */
14 	short	rkcs2;		/* control status reg 2 */
15 	short	rkds;		/* drive status */
16 	short	rker;		/* driver error register */
17 	short	rkatt;		/* attention status/offset register */
18 	short	rkcyl;		/* current cylinder register */
19 	short	rkxxx;
20 	short	rkdb;		/* data buffer register */
21 	short	rkmr1;		/* maint reg 1 */
22 	short	rkec1;		/* burst error bit position */
23 	short	rkec2;		/* burst error bit pattern */
24 	short	rkmr2;		/* maint reg 2 */
25 	short	rkmr3;		/* maint reg 3 */
26 };
27 
28 /* rkcs1 */
29 #define RK_CCLR		0100000		/* controller clear (also error) */
30 #define	RK_CERR		RK_CCLR
31 #define	RK_DI		0040000		/* drive interrupt */
32 #define	RK_DTCPAR	0020000		/* drive to controller parity */
33 #define	RK_CFMT		0010000		/* 18 bit word format */
34 #define	RK_CTO		0004000		/* controller timeout */
35 #define	RK_CDT		0002000		/* drive type (rk07/rk06) */
36 /* bits 8 and 9 are the extended bus address */
37 #define	RK_CRDY		0000200		/* controller ready */
38 #define	RK_IE		0000100		/* interrupt enable */
39 /* bits 1 to 4 are the function code */
40 #define	RK_GO		0000001
41 
42 /* commands */
43 #define RK_SELECT	000		/* select drive */
44 #define RK_PACK		002		/* pack acknowledge */
45 #define RK_DCLR		004		/* drive clear */
46 #define	RK_UNLOAD	006		/* unload */
47 #define	RK_START	010		/* start spindle */
48 #define	RK_RECAL	012		/* recalibrate */
49 #define	RK_OFFSET	014		/* offset */
50 #define	RK_SEEK		016		/* seek */
51 #define	RK_READ		020		/* read data */
52 #define	RK_WRITE	022		/* write data */
53 #define	RK_RHDR		026		/* read header */
54 #define	RK_WHDR		030		/* write header */
55 
56 /* rkcs2 */
57 #define	RKCS2_DLT	0100000		/* data late */
58 #define	RKCS2_WCE	0040000		/* write check */
59 #define	RKCS2_UPE	0020000		/* unibus parity */
60 #define	RKCS2_NED	0010000		/* non-existant drive */
61 #define	RKCS2_NEM	0004000		/* non-existant memory */
62 #define	RKCS2_PGE	0002000		/* programming error */
63 #define	RKCS2_MDS	0001000		/* multiple drive select */
64 #define	RKCS2_UFE	0000400		/* unit field error */
65 #define	RKCS2_OR	0000200		/* output ready */
66 #define	RKCS2_IR	0000100		/* input ready */
67 #define	RKCS2_SCLR	0000040		/* subsystem clear */
68 #define	RKCS2_BAI	0000020		/* bus address increment inhibit */
69 #define	RKCS2_RLS	0000010		/* release */
70 /* bits 0-2 are drive select */
71 
72 #define	RKCS2_BITS \
73 "\10\20DLT\17WCE\16UPE\15NED\14NEM\13PGE\12MDS\11UFE\
74 \10OR\7IR\6SCLR\5BAI\4RLS"
75 
76 #define	RKCS2_HARD		(RKCS2_NED|RKCS2_PGE)
77 
78 /* rkds */
79 #define	RKDS_SVAL	0100000		/* status valid */
80 #define	RKDS_CDA	0040000		/* current drive attention */
81 #define	RKDS_PIP	0020000		/* positioning in progress */
82 /* bit 12 is spare */
83 #define	RKDS_WRL	0004000		/* write lock */
84 /* bits 9 and 10 are spare */
85 #define	RKDS_DDT	0000400		/* disk drive type */
86 #define	RKDS_DRDY	0000200		/* drive ready */
87 #define	RKDS_VV		0000100		/* volume valid */
88 #define	RKDS_DROT	0000040		/* drive off track */
89 #define	RKDS_SPLS	0000020		/* speed loss */
90 #define	RKDS_ACLO	0000010		/* ac low */
91 #define	RKDS_OFF	0000004		/* offset mode */
92 #define	RKDS_DRA	0000001		/* drive available */
93 
94 #define	RKDS_DREADY	(RKDS_DRA|RKDS_VV|RKDS_DRDY)
95 #define	RKDS_BITS \
96 "\10\20SVAL\17CDA\16PIP\14WRL\11DDT\
97 \10DRDY\7VV\6DROT\5SPLS\4ACLO\3OFF\1DRA"
98 #define	RKDS_HARD	(RKDS_ACLO|RKDS_SPLS)
99 
100 /* rker */
101 #define	RKER_DCK	0100000		/* data check */
102 #define	RKER_UNS	0040000		/* drive unsafe */
103 #define	RKER_OPI	0020000		/* operation incomplete */
104 #define	RKER_DTE	0010000		/* drive timing error */
105 #define	RKER_WLE	0004000		/* write lock error */
106 #define	RKER_IDAE	0002000		/* invalid disk address error */
107 #define	RKER_COE	0001000		/* cylinder overflow error */
108 #define	RKER_HRVC	0000400		/* header vertical redundancy check */
109 #define	RKER_BSE	0000200		/* bad sector error */
110 #define	RKER_ECH	0000100		/* hard ecc error */
111 #define	RKER_DTYE	0000040		/* drive type error */
112 #define	RKER_FMTE	0000020		/* format error */
113 #define	RKER_DRPAR	0000010		/* control-to-drive parity error */
114 #define	RKER_NXF	0000004		/* non-executable function */
115 #define	RKER_SKI	0000002		/* seek incomplete */
116 #define	RKER_ILF		0000001		/* illegal function */
117 
118 #define	RKER_BITS \
119 "\10\20DCK\17UNS\16OPI\15DTE\14WLE\13IDAE\12COE\11HRVC\
120 \10BSE\7ECH\6DTYE\5FMTE\4DRPAR\3NXF\2SKI\1ILF"
121 #define	RKER_HARD	\
122 	(RKER_WLE|RKER_IDAE|RKER_COE|RKER_DTYE|RKER_FMTE|RKER_ILF)
123 
124 /* offset bits in rkas */
125 #define	RKAS_P400	0020		/*  +400 RK06,  +200 RK07 */
126 #define	RKAS_M400	0220		/*  -400 RK06,  -200 RK07 */
127 #define	RKAS_P800	0040		/*  +800 RK06,  +400 RK07 */
128 #define	RKAS_M800	0240		/*  -800 RK06,  -400 RK07 */
129 #define	RKAS_P1200	0060		/*  +800 RK06,  +400 RK07 */
130 #define	RKAS_M1200	0260		/* -1200 RK06, -1200 RK07 */
131