xref: /original-bsd/sys/vax/vax/mscp.h (revision fbed46ce)
1 /*	mscp.h	4.1	81/11/04	*/
2 
3 /*
4  * Definitions for the Mass Storage Control Protocol
5  */
6 
7 
8 /*
9  * Control message opcodes
10  */
11 #define	M_OP_ABORT	0001	/* Abort command */
12 #define	M_OP_GTCMD	0002	/* Get command status command */
13 #define	M_OP_GTUNT	0003	/* Get unit status command */
14 #define	M_OP_STCON	0004	/* Set controller characteristics command */
15 #define	M_OP_SEREX	0007	/* Serious exception end message */
16 #define	M_OP_AVAIL	0010	/* Available command */
17 #define	M_OP_ONLIN	0011	/* Online command */
18 #define	M_OP_STUNT	0012	/* Set unit characteristics command */
19 #define	M_OP_DTACP	0013	/* Determine access paths command */
20 #define	M_OP_ACCES	0020	/* Access command */
21 #define	M_OP_CMPCD	0021	/* Compare controller data command */
22 #define	M_OP_ERASE	0022	/* Erase command */
23 #define	M_OP_FLUSH	0023	/* Flush command */
24 #define	M_OP_REPLC	0024	/* Replace command */
25 #define	M_OP_COMP	0040	/* Compare host data command */
26 #define	M_OP_READ	0041	/* Read command */
27 #define	M_OP_WRITE	0042	/* Write command */
28 #define	M_OP_AVATN	0100	/* Available attention message */
29 #define	M_OP_DUPUN	0101	/* Duplicate unit number attention message */
30 #define	M_OP_ACPTH	0102	/* Access path attention message */
31 #define	M_OP_END	0200	/* End message flag */
32 
33 
34 /*
35  * Generic command modifiers
36  */
37 #define	M_MD_EXPRS	0100000		/* Express request */
38 #define	M_MD_COMP	0040000		/* Compare */
39 #define	M_MD_CLSEX	0020000		/* Clear serious exception */
40 #define	M_MD_ERROR	0010000		/* Force error */
41 #define	M_MD_SCCHH	0004000		/* Suppress caching (high speed) */
42 #define	M_MD_SCCHL	0002000		/* Suppress caching (low speed) */
43 #define	M_MD_SECOR	0001000		/* Suppress error correction */
44 #define	M_MD_SEREC	0000400		/* Suppress error recovery */
45 #define	M_MD_SSHDW	0000200		/* Suppress shadowing */
46 #define	M_MD_WBKNV	0000100		/* Write back (non-volatile) */
47 #define	M_MD_WBKVL	0000040		/* Write back (volatile) */
48 #define	M_MD_WRSEQ	0000020		/* Write shadow set one unit at a time */
49 
50 /*
51  * AVAILABLE command modifiers
52  */
53 #define	M_MD_ALLCD	0000002		/* All class drivers */
54 #define	M_MD_SPNDW	0000001		/* Spin down */
55 
56 /*
57  * FLUSH command modifiers
58  */
59 #define	M_MD_FLENU	0000001		/* Flush entire unit */
60 #define	M_MD_VOLTL	0000002		/* Volatile only */
61 
62 /*
63  * GET UNIT STATUS command modifiers
64  */
65 #define	M_MD_NXUNT	0000001		/* Next unit */
66 
67 /*
68  * ONLINE command modifiers
69  */
70 #define	M_MD_RIP	0000001		/* Allow self destruction */
71 #define	M_MD_IGNMF	0000002		/* Ignore media format error */
72 
73 /*
74  * ONLINE and SET UNIT CHARACTERISTICS command modifiers
75  */
76 #define	M_MD_ALTHI	0000040		/* Alter host identifier */
77 #define	M_MD_SHDSP	0000020		/* Shadow unit specified */
78 #define	M_MD_CLWBL	0000010		/* Clear write-back data lost */
79 #define	M_MD_STWRP	0000004		/* Set write protect */
80 
81 /*
82  * REPLACE command modifiers
83  */
84 #define	M_MD_PRIMR	0000001		/* Primary replacement block */
85 
86 
87 /*
88  * End message flags
89  */
90 #define	M_EF_BBLKR	0200	/* Bad block reported */
91 #define	M_EF_BBLKU	0100	/* Bad block unreported */
92 #define	M_EF_ERLOG	0040	/* Error log generated */
93 #define	M_EF_SEREX	0020	/* Serious exception */
94 
95 
96 /*
97  * Controller flags
98  */
99 #define	M_CF_ATTN	0200	/* Enable attention messages */
100 #define	M_CF_MISC	0100	/* Enable miscellaneous error log messages */
101 #define	M_CF_OTHER	0040	/* Enable other host's error log messages */
102 #define	M_CF_THIS	0020	/* Enable this host's error log messages */
103 #define	M_CF_MLTHS	0004	/* Multi-host */
104 #define	M_CF_SHADW	0002	/* Shadowing */
105 #define	M_CF_576	0001	/* 576 byte sectors */
106 
107 
108 /*
109  * Unit flags
110  */
111 #define	M_UF_REPLC	0100000		/* Controller initiated bad block replacement */
112 #define	M_UF_INACT	0040000		/* Inactive shadow set unit */
113 #define	M_UF_WRTPH	0020000		/* Write protect (hardware) */
114 #define	M_UF_WRTPS	0010000		/* Write protect (software or volume) */
115 #define	M_UF_SCCHH	0004000		/* Suppress caching (high speed) */
116 #define	M_UF_SCCHL	0002000		/* Suppress caching (low speed) */
117 #define	M_UF_RMVBL	0000200		/* Removable media */
118 #define	M_UF_WBKNV	0000100		/* Write back (non-volatile) */
119 #define	M_UF_576	0000004		/* 576 byte sectors */
120 #define	M_UF_CMPWR	0000002		/* Compare writes */
121 #define	M_UF_CMPRD	0000001		/* Compare reads */
122 
123 
124 /*
125  * Status codes
126  */
127 #define	M_ST_MASK	037		/* Status code mask */
128 #define	M_ST_SUCC	000		/* Success */
129 #define	M_ST_ICMD	001		/* Invalid command */
130 #define	M_ST_ABRTD	002		/* Command aborted */
131 #define	M_ST_OFFLN	003		/* Unit offline */
132 #define	M_ST_AVLBL	004		/* Unit available */
133 #define	M_ST_MFMTE	005		/* Media format error */
134 #define	M_ST_WRTPR	006		/* Write protected */
135 #define	M_ST_COMP	007		/* Compare error */
136 #define	M_ST_DATA	010		/* Data error */
137 #define	M_ST_HSTBF	011		/* Host buffer access error */
138 #define	M_ST_CNTLR	012		/* Controller error */
139 #define	M_ST_DRIVE	013		/* Drive error */
140 #define	M_ST_DIAG	037		/* Message from an internal diagnostic */
141 
142 
143 typedef	short	quad[4];		/* a word-aligned quadword */
144 
145 /*
146  * An MSCP packet
147  */
148 
149 struct mscp {
150 	struct	mscp_header mscp_header;/* device specific header */
151 	long	mscp_cmdref;		/* command reference number */
152 	short	mscp_unit;		/* unit number */
153 	short	mscp_xxx1;		/* unused */
154 	u_char	mscp_opcode;		/* opcode */
155 	u_char	mscp_flags;		/* end message flags */
156 	short	mscp_modifier;		/* modifiers */
157 	union {
158 	struct {
159 		long	Mscp_bytecnt;	/* byte count */
160 		long	Mscp_buffer;	/* buffer descriptor */
161 		long	Mscp_xxx2[2];	/* unused */
162 		long	Mscp_lbn;	/* logical block number */
163 		long	Mscp_xxx4;	/* unused */
164 		long	*Mscp_dscptr;	/* pointer to descriptor (software) */
165 		long	Mscp_sftwds[4];	/* software words, padding */
166 	} mscp_generic;
167 	struct {
168 		short	Mscp_version;	/* MSCP version */
169 		short	Mscp_cntflgs;	/* controller flags */
170 		short	Mscp_hsttmo;	/* host timeout */
171 		short	Mscp_usefrac;	/* use fraction */
172 		long	Mscp_time;	/* time and date */
173 	} mscp_setcntchar;
174 	struct {
175 		short	Mscp_multunt;	/* multi-unit code */
176 		short	Mscp_unitflgs;	/* unit flags */
177 		long	Mscp_hostid;	/* host identifier */
178 		quad	Mscp_unitid;	/* unit identifier */
179 		long	Mscp_mediaid;	/* media type identifier */
180 		short	Mscp_shdwunt;	/* shadow unit */
181 		short	Mscp_shdwsts;	/* shadow status */
182 		short	Mscp_track;	/* track size */
183 		short	Mscp_group;	/* group size */
184 		short	Mscp_cylinder;	/* cylinder size */
185 		short	Mscp_xxx3;	/* reserved */
186 		short	Mscp_rctsize;	/* RCT table size */
187 		char	Mscp_rbns;	/* RBNs / track */
188 		char	Mscp_rctcpys;	/* RCT copies */
189 	} mscp_getunitsts;
190 	} mscp_un;
191 };
192 
193 /*
194  * generic packet
195  */
196 
197 #define	mscp_bytecnt	mscp_un.mscp_generic.Mscp_bytecnt
198 #define	mscp_buffer	mscp_un.mscp_generic.Mscp_buffer
199 #define	mscp_lbn	mscp_un.mscp_generic.Mscp_lbn
200 #define	mscp_dscptr	mscp_un.mscp_generic.Mscp_dscptr
201 #define	mscp_sftwds	mscp_un.mscp_generic.Mscp_sftwds
202 #define	mscp_status	mscp_modifier
203 
204 /*
205  * Abort / Get Command Status packet
206  */
207 
208 #define	mscp_outref	mscp_bytecnt
209 
210 /*
211  * Online / Set Unit Characteristics packet
212  */
213 
214 #define	mscp_errlgfl	mscp_lbn
215 #define	mscp_copyspd	mscp_shdwsts
216 
217 /*
218  * Replace packet
219  */
220 
221 #define	mscp_rbn	mscp_bytecnt
222 
223 /*
224  * Set Controller Characteristics packet
225  */
226 
227 #define	mscp_version	mscp_un.mscp_setcntchar.Mscp_version
228 #define	mscp_cntflgs	mscp_un.mscp_setcntchar.Mscp_cntflgs
229 #define	mscp_hsttmo	mscp_un.mscp_setcntchar.Mscp_hsttmo
230 #define	mscp_usefrac	mscp_un.mscp_setcntchar.Mscp_usefrac
231 #define	mscp_time	mscp_un.mscp_setcntchar.Mscp_time
232 
233 /*
234  * Get Unit Status end packet
235  */
236 
237 #define	mscp_multunt	mscp_un.mscp_getunitsts.Mscp_multunt
238 #define	mscp_unitflgs	mscp_un.mscp_getunitsts.Mscp_unitflgs
239 #define	mscp_hostid	mscp_un.mscp_getunitsts.Mscp_hostid
240 #define	mscp_unitid	mscp_un.mscp_getunitsts.Mscp_unitid
241 #define	mscp_mediaid	mscp_un.mscp_getunitsts.Mscp_mediaid
242 #define	mscp_shdwunt	mscp_un.mscp_getunitsts.Mscp_shdwunt
243 #define	mscp_shdwsts	mscp_un.mscp_getunitsts.Mscp_shdwsts
244 #define	mscp_track	mscp_un.mscp_getunitsts.Mscp_track
245 #define	mscp_group	mscp_un.mscp_getunitsts.Mscp_group
246 #define	mscp_cylinder	mscp_un.mscp_getunitsts.Mscp_cylinder
247 #define	mscp_rctsize	mscp_un.mscp_getunitsts.Mscp_rctsize
248 #define	mscp_rbns	mscp_un.mscp_getunitsts.Mscp_rbns
249 #define	mscp_rctcpys	mscp_un.mscp_getunitsts.Mscp_rctcpys
250 
251 /*
252  * Online / Set Unit Characteristics end packet
253  */
254 
255 #define	mscp_untsize	mscp_dscptr
256 #define	mscp_volser	mscp_sftwds[0]
257 
258 /*
259  * Set Controller Characteristics end packet
260  */
261 
262 #define	mscp_cnttmo	mscp_hsttmo
263 #define	mscp_cntcmdl	mscp_usefrac
264 #define	mscp_cntid	mscp_unitid
265 
266 
267 /*
268  * Error Log message format codes
269  */
270 #define	M_FM_CNTERR	0	/* Controller error */
271 #define	M_FM_BUSADDR	1	/* Host memory access error */
272 #define	M_FM_DISKTRN	2	/* Disk transfer error */
273 #define	M_FM_SDI	3	/* SDI error */
274 #define	M_FM_SMLDSK	4	/* Small disk error */
275 
276 /*
277  * Error Log message flags
278  */
279 #define	M_LF_SUCC	0200	/* Operation successful */
280 #define	M_LF_CONT	0100	/* Operation continuing */
281 #define	M_LF_SQNRS	0001	/* Sequence number reset */
282 
283 /*
284  * MSCP Error Log packet
285  *
286  *	NOTE: MSCP packet must be padded to this size.
287  */
288 
289 struct mslg {
290 	struct	mscp_header mslg_header;/* device specific header */
291 	long	mslg_cmdref;		/* command reference number */
292 	short	mslg_unit;		/* unit number */
293 	short	mslg_seqnum;		/* sequence number */
294 	u_char	mslg_format;		/* format */
295 	u_char	mslg_flags;		/* error log message flags */
296 	short	mslg_event;		/* event code */
297 	quad	mslg_cntid;		/* controller id */
298 	u_char	mslg_cntsvr;		/* controller software version */
299 	u_char	mslg_cnthvr;		/* controller hardware version */
300 	short	mslg_multunt;		/* multi-unit code */
301 	quad	mslg_unitid;		/* unit id */
302 	u_char	mslg_unitsvr;		/* unit software version */
303 	u_char	mslg_unithvr;		/* unit hardware version */
304 	short	mslg_group;		/* group */
305 	long	mslg_volser;		/* volume serial number */
306 	long	mslg_cylinder;		/* cylinder */
307 	short	mslg_track;		/* track */
308 	short	mslg_sector;		/* sector */
309 	long	mslg_lbn;		/* logical block number */
310 	u_char	mslg_level;		/* level */
311 	u_char	mslg_retry;		/* retry */
312 };
313 
314 #define	mslg_busaddr	mslg_unitid
315 #define	mslg_sdecyl	mslg_group
316