Initial import from FreeBSD RELENG_4:
[dragonfly.git] / sys / dev / raid / asr / i2outil.h
1 /* $FreeBSD: src/sys/dev/asr/i2outil.h,v 1.1.2.1 2000/09/21 20:33:50 msmith Exp $ */
2 /****************************************************************
3  * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
4  * Copyright (c) 2000 Adaptec Corporation.
5  * All rights reserved.
6  * 
7  * Copyright 1999 I2O Special Interest Group (I2O SIG).  All rights reserved.
8  * All rights reserved
9  * 
10  * TERMS AND CONDITIONS OF USE
11  * 
12  * Redistribution and use in source form, with or without modification, are
13  * permitted provided that redistributions of source code must retain the
14  * above copyright notice, this list of conditions and the following disclaimer.
15  * 
16  * This software is provided `as is' by Distributed Processing Technology and
17  * any express or implied warranties, including, but not limited to, the
18  * implied warranties of merchantability and fitness for a particular purpose,
19  * are disclaimed. In no event shall Distributed Processing Technology be
20  * liable for any direct, indirect, incidental, special, exemplary or
21  * consequential damages (including, but not limited to, procurement of
22  * substitute goods or services; loss of use, data, or profits; or business
23  * interruptions) however caused and on any theory of liability, whether in
24  * contract, strict liability, or tort (including negligence or otherwise)
25  * arising in any way out of the use of this driver software, even if advised
26  * of the possibility of such damage.
27  * 
28  * This header file, and any modifications of this header file, are provided
29  * contingent upon your agreement and adherence to the here-listed terms and
30  * conditions.  By accepting and/or using this header file, you agree to abide
31  * by these terms and conditions and that these terms and conditions will be
32  * construed and governed in accordance with the laws of the State of California,
33  * without reference to conflict-of-law provisions.  If you do not agree
34  * to these terms and conditions, please delete this file, and any copies,
35  * permanently, without making any use thereof.
36  * 
37  * THIS HEADER FILE IS PROVIDED FREE OF CHARGE ON AN AS-IS BASIS WITHOUT
38  * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
39  * TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
40  * PURPOSE.  I2O SIG DOES NOT WARRANT THAT THIS HEADER FILE WILL MEET THE
41  * USER'S REQUIREMENTS OR THAT ITS OPERATION WILL BE UNINTERRUPTED OR
42  * ERROR-FREE.
43  * 
44  * I2O SIG DISCLAIMS ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF
45  * ANY PROPRIETARY RIGHTS, RELATING TO THE IMPLEMENTATION OF THE I2O
46  * SPECIFICATIONS.  I2O SIG DOES NOT WARRANT OR REPRESENT THAT SUCH
47  * IMPLEMENTATIONS WILL NOT INFRINGE SUCH RIGHTS.
48  * 
49  * THE USER OF THIS HEADER FILE SHALL HAVE NO RECOURSE TO I2O SIG FOR ANY
50  * ACTUAL OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED TO, LOST DATA
51  * OR LOST PROFITS ARISING OUT OF THE USE OR INABILITY TO USE THIS PROGRAM.
52  * 
53  * I2O SIG grants the user of this header file a license to copy, distribute,
54  * and modify it, for any purpose, under the following terms.  Any copying,
55  * distribution, or modification of this header file must not delete or alter
56  * the copyright notice of I2O SIG or any of these Terms and Conditions.
57  * 
58  * Any distribution of this header file must not include a charge for the
59  * header file (unless such charges are strictly for the physical acts of
60  * copying or transferring copies).  However, distribution of a product in
61  * which this header file is embedded may include a charge so long as any
62  * such charge does not include any charge for the header file itself.
63  * 
64  * Any modification of this header file constitutes a derivative work based
65  * on this header file.  Any distribution of such derivative work: (1) must
66  * include prominent notices that the header file has been changed from the
67  * original, together with the dates of any changes; (2) automatically includes 
68  * this same license to the original header file from I2O SIG, without any
69  * restriction thereon from the distributing user; and (3) must include a
70  * grant of license of the modified file under the same terms and conditions
71  * as these Terms and Conditions.
72  * 
73  * The I2O SIG Web site can be found at: http://www.i2osig.org
74  * 
75  * The I2O SIG encourages you to deposit derivative works based on this
76  * header file at the I2O SIG Web site.  Furthermore, to become a Registered
77  * Developer of the I2O SIG, sign up at the Web site or call 415.750.8352
78  * (United States).
79  ****************************************************************/
80
81 /*********************************************************************
82  * I2OUtil.h -- I2O Utility Class Message defintion file
83  *
84  * This file contains information presented in Chapter 6 of the I2O
85  * Specification.
86  **********************************************************************/
87
88 #if !defined(I2O_UTILITY_HDR)
89 #define I2O_UTILITY_HDR
90
91 #define I2OUTIL_REV 1_5_4  /* I2OUtil header file revision string */
92
93 #if ((defined(KERNEL) || defined(_KERNEL)) && defined(__FreeBSD__))
94 # if (KERN_VERSION < 3)
95 #  include   "i386/pci/i2omsg.h"      /* Include the Base Message file */
96 # else
97 #  include   "dev/asr/i2omsg.h"
98 # endif
99 #else
100 # include   "i2omsg.h"      /* Include the Base Message file */
101 #endif
102
103
104 /*
105 NOTES:
106
107    Gets, reads, receives, etc. are all even numbered functions.
108    Sets, writes, sends, etc. are all odd numbered functions.
109    Functions that both send and receive data can be either but an attempt is made
110        to use the function number that indicates the greater transfer amount.
111    Functions that do not send or receive data use odd function numbers.
112
113    Some functions are synonyms like read, receive and send, write.
114
115    All common functions will have a code of less than 0x80.
116    Unique functions to a class will start at 0x80.
117    Executive Functions start at 0xA0.
118
119    Utility Message function codes range from 0 - 0x1f
120    Base Message function codes range from 0x20 - 0xfe
121    Private Message function code is 0xff.
122 */
123
124 PRAGMA_ALIGN_PUSH
125
126 PRAGMA_PACK_PUSH
127
128 /* Utility Message class functions. */
129
130 #define    I2O_UTIL_NOP                                0x00
131 #define    I2O_UTIL_ABORT                              0x01
132 #define    I2O_UTIL_CLAIM                              0x09
133 #define    I2O_UTIL_CLAIM_RELEASE                      0x0B
134 #define    I2O_UTIL_CONFIG_DIALOG                      0x10
135 #define    I2O_UTIL_DEVICE_RESERVE                     0x0D
136 #define    I2O_UTIL_DEVICE_RELEASE                     0x0F
137 #define    I2O_UTIL_EVENT_ACKNOWLEDGE                  0x14
138 #define    I2O_UTIL_EVENT_REGISTER                     0x13
139 #define    I2O_UTIL_LOCK                               0x17
140 #define    I2O_UTIL_LOCK_RELEASE                       0x19
141 #define    I2O_UTIL_PARAMS_GET                         0x06
142 #define    I2O_UTIL_PARAMS_SET                         0x05
143 #define    I2O_UTIL_REPLY_FAULT_NOTIFY                 0x15
144
145 /****************************************************************************/
146
147 /* ABORT Abort type defines. */
148
149 #define    I2O_ABORT_TYPE_EXACT_ABORT                  0x00
150 #define    I2O_ABORT_TYPE_FUNCTION_ABORT               0x01
151 #define    I2O_ABORT_TYPE_TRANSACTION_ABORT            0x02
152 #define    I2O_ABORT_TYPE_WILD_ABORT                   0x03
153 #define    I2O_ABORT_TYPE_CLEAN_EXACT_ABORT            0x04
154 #define    I2O_ABORT_TYPE_CLEAN_FUNCTION_ABORT         0x05
155 #define    I2O_ABORT_TYPE_CLEAN_TRANSACTION_ABORT      0x06
156 #define    I2O_ABORT_TYPE_CLEAN_WILD_ABORT             0x07
157
158 /* UtilAbort Function Message Frame structure. */
159
160 typedef struct _I2O_UTIL_ABORT_MESSAGE {
161     I2O_MESSAGE_FRAME          StdMessageFrame;
162     I2O_TRANSACTION_CONTEXT    TransactionContext;
163 #   if (defined(_DPT_BIG_ENDIAN) || defined(sparc))
164         U32                    reserved;
165 #   else
166         U16                    reserved;
167         U8                     AbortType;
168         U8                     FunctionToAbort;
169 #   endif
170     I2O_TRANSACTION_CONTEXT    TransactionContextToAbort;
171 } I2O_UTIL_ABORT_MESSAGE, *PI2O_UTIL_ABORT_MESSAGE;
172
173
174 typedef struct _I2O_UTIL_ABORT_REPLY {
175     I2O_MESSAGE_FRAME          StdMessageFrame;
176     I2O_TRANSACTION_CONTEXT    TransactionContext;
177     U32                        CountOfAbortedMessages;
178 } I2O_UTIL_ABORT_REPLY, *PI2O_UTIL_ABORT_REPLY;
179
180
181 /****************************************************************************/
182
183 /* Claim Flag defines */
184
185 #define    I2O_CLAIM_FLAGS_EXCLUSIVE                   0x0001 /* Reserved */
186 #define    I2O_CLAIM_FLAGS_RESET_SENSITIVE             0x0002
187 #define    I2O_CLAIM_FLAGS_STATE_SENSITIVE             0x0004
188 #define    I2O_CLAIM_FLAGS_CAPACITY_SENSITIVE          0x0008
189 #define    I2O_CLAIM_FLAGS_PEER_SERVICE_DISABLED       0x0010
190 #define    I2O_CLAIM_FLAGS_MGMT_SERVICE_DISABLED       0x0020
191
192 /* Claim Type defines */
193
194 #define    I2O_CLAIM_TYPE_PRIMARY_USER                 0x01
195 #define    I2O_CLAIM_TYPE_AUTHORIZED_USER              0x02
196 #define    I2O_CLAIM_TYPE_SECONDARY_USER               0x03
197 #define    I2O_CLAIM_TYPE_MANAGEMENT_USER              0x04
198
199 /* UtilClaim Function Message Frame structure. */
200
201 typedef struct _I2O_UTIL_CLAIM_MESSAGE {
202     I2O_MESSAGE_FRAME          StdMessageFrame;
203     I2O_TRANSACTION_CONTEXT    TransactionContext;
204     U16                        ClaimFlags;
205     U8                         reserved;
206     U8                         ClaimType;
207 } I2O_UTIL_CLAIM_MESSAGE, *PI2O_UTIL_CLAIM_MESSAGE;
208
209
210 /****************************************************************************/
211
212 /* Claim Release Flag defines */
213
214 #define    I2O_RELEASE_FLAGS_CONDITIONAL               0x0001
215
216 /* UtilClaimRelease Function Message Frame structure. */
217
218 typedef struct _I2O_UTIL_CLAIM_RELEASE_MESSAGE {
219     I2O_MESSAGE_FRAME          StdMessageFrame;
220     I2O_TRANSACTION_CONTEXT    TransactionContext;
221     U16                        ReleaseFlags;
222     U8                         reserved;
223     U8                         ClaimType;
224 } I2O_UTIL_CLAIM_RELEASE_MESSAGE, *PI2O_UTIL_CLAIM_RELEASE_MESSAGE;
225
226
227 /****************************************************************************/
228
229 /*  UtilConfigDialog Function Message Frame structure */
230
231 typedef struct _I2O_UTIL_CONFIG_DIALOG_MESSAGE {
232     I2O_MESSAGE_FRAME          StdMessageFrame;
233     I2O_TRANSACTION_CONTEXT    TransactionContext;
234     U32                        PageNumber;
235     I2O_SG_ELEMENT             SGL;
236 } I2O_UTIL_CONFIG_DIALOG_MESSAGE, *PI2O_UTIL_CONFIG_DIALOG_MESSAGE;
237
238
239 /****************************************************************************/
240
241 /*  Event Acknowledge Function Message Frame structure */
242
243 typedef struct _I2O_UTIL_EVENT_ACK_MESSAGE {
244     I2O_MESSAGE_FRAME          StdMessageFrame;
245     I2O_TRANSACTION_CONTEXT    TransactionContext;
246     U32                        EventIndicator;
247     U32                        EventData[1];
248 } I2O_UTIL_EVENT_ACK_MESSAGE, *PI2O_UTIL_EVENT_ACK_MESSAGE;
249
250 /* Event Ack Reply structure */
251
252 typedef struct _I2O_UTIL_EVENT_ACK_REPLY {
253     I2O_MESSAGE_FRAME          StdMessageFrame;
254     I2O_TRANSACTION_CONTEXT    TransactionContext;
255     U32                        EventIndicator;
256     U32                        EventData[1];
257 } I2O_UTIL_EVENT_ACK_REPLY, *PI2O_UTIL_EVENT_ACK_REPLY;
258
259
260 /****************************************************************************/
261
262 /* Event Indicator Mask Flags */
263
264 #define    I2O_EVENT_IND_STATE_CHANGE                  0x80000000
265 #define    I2O_EVENT_IND_GENERAL_WARNING               0x40000000
266 #define    I2O_EVENT_IND_CONFIGURATION_FLAG            0x20000000
267 /* #define    I2O_EVENT_IND_RESERVE_RELEASE               0x10000000 */
268 #define    I2O_EVENT_IND_LOCK_RELEASE                  0x10000000
269 #define    I2O_EVENT_IND_CAPABILITY_CHANGE             0x08000000
270 #define    I2O_EVENT_IND_DEVICE_RESET                  0x04000000
271 #define    I2O_EVENT_IND_EVENT_MASK_MODIFIED           0x02000000
272 #define    I2O_EVENT_IND_FIELD_MODIFIED                0x01000000
273 #define    I2O_EVENT_IND_VENDOR_EVENT                  0x00800000
274 #define    I2O_EVENT_IND_DEVICE_STATE                  0x00400000
275
276 /* Event Data for generic Events */
277
278 #define    I2O_EVENT_STATE_CHANGE_NORMAL               0x00
279 #define    I2O_EVENT_STATE_CHANGE_SUSPENDED            0x01
280 #define    I2O_EVENT_STATE_CHANGE_RESTART              0x02
281 #define    I2O_EVENT_STATE_CHANGE_NA_RECOVER           0x03
282 #define    I2O_EVENT_STATE_CHANGE_NA_NO_RECOVER        0x04
283 #define    I2O_EVENT_STATE_CHANGE_QUIESCE_REQUEST      0x05
284 #define    I2O_EVENT_STATE_CHANGE_FAILED               0x10
285 #define    I2O_EVENT_STATE_CHANGE_FAULTED              0x11
286
287 #define    I2O_EVENT_GEN_WARNING_NORMAL                0x00
288 #define    I2O_EVENT_GEN_WARNING_ERROR_THRESHOLD       0x01
289 #define    I2O_EVENT_GEN_WARNING_MEDIA_FAULT           0x02
290
291 #define    I2O_EVENT_CAPABILITY_OTHER                  0x01
292 #define    I2O_EVENT_CAPABILITY_CHANGED                0x02
293
294 #define    I2O_EVENT_SENSOR_STATE_CHANGED              0x01
295
296
297 /*  UtilEventRegister Function Message Frame structure */
298
299 typedef struct _I2O_UTIL_EVENT_REGISTER_MESSAGE {
300     I2O_MESSAGE_FRAME          StdMessageFrame;
301     I2O_TRANSACTION_CONTEXT    TransactionContext;
302     U32                        EventMask;
303 } I2O_UTIL_EVENT_REGISTER_MESSAGE, *PI2O_UTIL_EVENT_REGISTER_MESSAGE;
304
305 /* UtilEventRegister Reply structure */
306
307 typedef struct _I2O_UTIL_EVENT_REGISTER_REPLY {
308     I2O_MESSAGE_FRAME          StdMessageFrame;
309     I2O_TRANSACTION_CONTEXT    TransactionContext;
310     U32                        EventIndicator;
311     U32                        EventData[1];
312 } I2O_UTIL_EVENT_REGISTER_REPLY, *PI2O_UTIL_EVENT_REGISTER_REPLY;
313
314
315 /****************************************************************************/
316
317 /* UtilLock Function Message Frame structure. */
318
319 typedef struct _I2O_UTIL_LOCK_MESSAGE {
320     I2O_MESSAGE_FRAME          StdMessageFrame;
321     I2O_TRANSACTION_CONTEXT    TransactionContext;
322 } I2O_UTIL_LOCK_MESSAGE, *PI2O_UTIL_LOCK_MESSAGE;
323
324 /****************************************************************************/
325
326 /* UtilLockRelease Function Message Frame structure. */
327
328 typedef struct _I2O_UTIL_LOCK_RELEASE_MESSAGE {
329     I2O_MESSAGE_FRAME          StdMessageFrame;
330     I2O_TRANSACTION_CONTEXT    TransactionContext;
331 } I2O_UTIL_LOCK_RELEASE_MESSAGE, *PI2O_UTIL_LOCK_RELEASE_MESSAGE;
332
333
334 /****************************************************************************/
335
336 /* UtilNOP Function Message Frame structure. */
337
338 typedef struct _I2O_UTIL_NOP_MESSAGE {
339     I2O_MESSAGE_FRAME          StdMessageFrame;
340 } I2O_UTIL_NOP_MESSAGE, *PI2O_UTIL_NOP_MESSAGE;
341
342
343 /****************************************************************************/
344
345 /* UtilParamsGet Message Frame structure. */
346
347 typedef struct _I2O_UTIL_PARAMS_GET_MESSAGE {
348     I2O_MESSAGE_FRAME          StdMessageFrame;
349     I2O_TRANSACTION_CONTEXT    TransactionContext;
350     U32                        OperationFlags;
351     I2O_SG_ELEMENT             SGL;
352 } I2O_UTIL_PARAMS_GET_MESSAGE, *PI2O_UTIL_PARAMS_GET_MESSAGE;
353
354
355 /****************************************************************************/
356
357 /* UtilParamsSet Message Frame structure. */
358
359 typedef struct _I2O_UTIL_PARAMS_SET_MESSAGE {
360     I2O_MESSAGE_FRAME          StdMessageFrame;
361     I2O_TRANSACTION_CONTEXT    TransactionContext;
362     U32                        OperationFlags;
363     I2O_SG_ELEMENT             SGL;
364 } I2O_UTIL_PARAMS_SET_MESSAGE, *PI2O_UTIL_PARAMS_SET_MESSAGE;
365
366
367 /****************************************************************************/
368
369 /* UtilReplyFaultNotify Message for Message Failure. */
370
371 typedef struct _I2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE {
372     I2O_MESSAGE_FRAME          StdMessageFrame;
373     I2O_TRANSACTION_CONTEXT    TransactionContext;
374     U8                         LowestVersion;
375     U8                         HighestVersion;
376     BF                         Severity:I2O_FAILCODE_SEVERITY_SZ;
377     BF                         FailureCode:I2O_FAILCODE_CODE_SZ;
378     BF                         FailingIOP_ID:I2O_IOP_ID_SZ;
379     BF                         reserved:I2O_RESERVED_4BITS;
380     BF                         FailingHostUnitID:I2O_UNIT_ID_SZ;
381     U32                        AgeLimit;
382 #if I2O_64BIT_CONTEXT
383     PI2O_MESSAGE_FRAME         OriginalMFA;
384 #else
385     PI2O_MESSAGE_FRAME         OriginalMFALowPart;
386     U32                        OriginalMFAHighPart;  /* Always 0000 */
387 #endif
388 } I2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE, *PI2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE;
389
390
391 /****************************************************************************/
392
393 /* Device Reserve Function Message Frame structure. */
394 /* NOTE:  This was previously called the Reserve Message */
395
396 typedef struct _I2O_UTIL_DEVICE_RESERVE_MESSAGE {
397     I2O_MESSAGE_FRAME          StdMessageFrame;
398     I2O_TRANSACTION_CONTEXT    TransactionContext;
399 } I2O_UTIL_DEVICE_RESERVE_MESSAGE, *PI2O_UTIL_DEVICE_RESERVE_MESSAGE;
400
401
402 /****************************************************************************/
403
404 /* Device Release Function Message Frame structure. */
405 /* NOTE:  This was previously called the ReserveRelease Message */
406
407 typedef struct _I2O_UTIL_DEVICE_RELEASE_MESSAGE {
408     I2O_MESSAGE_FRAME          StdMessageFrame;
409     I2O_TRANSACTION_CONTEXT    TransactionContext;
410 } I2O_UTIL_DEVICE_RELEASE_MESSAGE, *PI2O_UTIL_DEVICE_RELEASE_MESSAGE;
411
412
413 /****************************************************************************/
414
415 PRAGMA_PACK_POP
416 PRAGMA_ALIGN_POP
417
418 #endif    /* I2O_UTILITY_HDR  */