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