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