xref: /dragonfly/sys/dev/raid/asr/i2outil.h (revision 279dd846)
1 /*-
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  * $FreeBSD: src/sys/dev/asr/i2outil.h,v 1.6 2005/01/06 01:42:29 imp Exp $
81  *
82  ****************************************************************/
83 
84 /*********************************************************************
85  * I2OUtil.h -- I2O Utility Class Message defintion file
86  *
87  * This file contains information presented in Chapter 6 of the I2O
88  * Specification.
89  **********************************************************************/
90 
91 #if !defined(I2O_UTILITY_HDR)
92 #define	I2O_UTILITY_HDR
93 
94 #define	I2OUTIL_REV 1_5_4  /* I2OUtil header file revision string */
95 
96 #if ((defined(KERNEL) || defined(_KERNEL)) && defined(__FreeBSD__))
97 # if (KERN_VERSION < 3)
98 #  include   "i386/pci/i2omsg.h"      /* Include the Base Message file */
99 # else
100 #  include   "dev/asr/i2omsg.h"
101 # endif
102 #else
103 # include   "i2omsg.h"	    /* Include the Base Message file */
104 #endif
105 
106 
107 /*
108 NOTES:
109 
110    Gets, reads, receives, etc. are all even numbered functions.
111    Sets, writes, sends, etc. are all odd numbered functions.
112    Functions that both send and receive data can be either but an attempt is made
113        to use the function number that indicates the greater transfer amount.
114    Functions that do not send or receive data use odd function numbers.
115 
116    Some functions are synonyms like read, receive and send, write.
117 
118    All common functions will have a code of less than 0x80.
119    Unique functions to a class will start at 0x80.
120    Executive Functions start at 0xA0.
121 
122    Utility Message function codes range from 0 - 0x1f
123    Base Message function codes range from 0x20 - 0xfe
124    Private Message function code is 0xff.
125 */
126 
127 PRAGMA_ALIGN_PUSH
128 
129 PRAGMA_PACK_PUSH
130 
131 /* Utility Message class functions. */
132 
133 #define	   I2O_UTIL_NOP				       0x00
134 #define	   I2O_UTIL_ABORT			       0x01
135 #define	   I2O_UTIL_CLAIM			       0x09
136 #define	   I2O_UTIL_CLAIM_RELEASE		       0x0B
137 #define	   I2O_UTIL_CONFIG_DIALOG		       0x10
138 #define	   I2O_UTIL_DEVICE_RESERVE		       0x0D
139 #define	   I2O_UTIL_DEVICE_RELEASE		       0x0F
140 #define	   I2O_UTIL_EVENT_ACKNOWLEDGE		       0x14
141 #define	   I2O_UTIL_EVENT_REGISTER		       0x13
142 #define	   I2O_UTIL_LOCK			       0x17
143 #define	   I2O_UTIL_LOCK_RELEASE		       0x19
144 #define	   I2O_UTIL_PARAMS_GET			       0x06
145 #define	   I2O_UTIL_PARAMS_SET			       0x05
146 #define	   I2O_UTIL_REPLY_FAULT_NOTIFY		       0x15
147 
148 /****************************************************************************/
149 
150 /* ABORT Abort type defines. */
151 
152 #define	   I2O_ABORT_TYPE_EXACT_ABORT		       0x00
153 #define	   I2O_ABORT_TYPE_FUNCTION_ABORT	       0x01
154 #define	   I2O_ABORT_TYPE_TRANSACTION_ABORT	       0x02
155 #define	   I2O_ABORT_TYPE_WILD_ABORT		       0x03
156 #define	   I2O_ABORT_TYPE_CLEAN_EXACT_ABORT	       0x04
157 #define	   I2O_ABORT_TYPE_CLEAN_FUNCTION_ABORT	       0x05
158 #define	   I2O_ABORT_TYPE_CLEAN_TRANSACTION_ABORT      0x06
159 #define	   I2O_ABORT_TYPE_CLEAN_WILD_ABORT	       0x07
160 
161 /* UtilAbort Function Message Frame structure. */
162 
163 typedef struct _I2O_UTIL_ABORT_MESSAGE {
164     I2O_MESSAGE_FRAME	       StdMessageFrame;
165     I2O_TRANSACTION_CONTEXT    TransactionContext;
166 #   if (defined(_DPT_BIG_ENDIAN) || defined(sparc))
167 	U32		       reserved;
168 #   else
169 	U16		       reserved;
170 	U8		       AbortType;
171 	U8		       FunctionToAbort;
172 #   endif
173     I2O_TRANSACTION_CONTEXT    TransactionContextToAbort;
174 } I2O_UTIL_ABORT_MESSAGE, *PI2O_UTIL_ABORT_MESSAGE;
175 
176 
177 typedef struct _I2O_UTIL_ABORT_REPLY {
178     I2O_MESSAGE_FRAME	       StdMessageFrame;
179     I2O_TRANSACTION_CONTEXT    TransactionContext;
180     U32			       CountOfAbortedMessages;
181 } I2O_UTIL_ABORT_REPLY, *PI2O_UTIL_ABORT_REPLY;
182 
183 
184 /****************************************************************************/
185 
186 /* Claim Flag defines */
187 
188 #define	   I2O_CLAIM_FLAGS_EXCLUSIVE		       0x0001 /* Reserved */
189 #define	   I2O_CLAIM_FLAGS_RESET_SENSITIVE	       0x0002
190 #define	   I2O_CLAIM_FLAGS_STATE_SENSITIVE	       0x0004
191 #define	   I2O_CLAIM_FLAGS_CAPACITY_SENSITIVE	       0x0008
192 #define	   I2O_CLAIM_FLAGS_PEER_SERVICE_DISABLED       0x0010
193 #define	   I2O_CLAIM_FLAGS_MGMT_SERVICE_DISABLED       0x0020
194 
195 /* Claim Type defines */
196 
197 #define	   I2O_CLAIM_TYPE_PRIMARY_USER		       0x01
198 #define	   I2O_CLAIM_TYPE_AUTHORIZED_USER	       0x02
199 #define	   I2O_CLAIM_TYPE_SECONDARY_USER	       0x03
200 #define	   I2O_CLAIM_TYPE_MANAGEMENT_USER	       0x04
201 
202 /* UtilClaim Function Message Frame structure. */
203 
204 typedef struct _I2O_UTIL_CLAIM_MESSAGE {
205     I2O_MESSAGE_FRAME	       StdMessageFrame;
206     I2O_TRANSACTION_CONTEXT    TransactionContext;
207     U16			       ClaimFlags;
208     U8			       reserved;
209     U8			       ClaimType;
210 } I2O_UTIL_CLAIM_MESSAGE, *PI2O_UTIL_CLAIM_MESSAGE;
211 
212 
213 /****************************************************************************/
214 
215 /* Claim Release Flag defines */
216 
217 #define	   I2O_RELEASE_FLAGS_CONDITIONAL	       0x0001
218 
219 /* UtilClaimRelease Function Message Frame structure. */
220 
221 typedef struct _I2O_UTIL_CLAIM_RELEASE_MESSAGE {
222     I2O_MESSAGE_FRAME	       StdMessageFrame;
223     I2O_TRANSACTION_CONTEXT    TransactionContext;
224     U16			       ReleaseFlags;
225     U8			       reserved;
226     U8			       ClaimType;
227 } I2O_UTIL_CLAIM_RELEASE_MESSAGE, *PI2O_UTIL_CLAIM_RELEASE_MESSAGE;
228 
229 
230 /****************************************************************************/
231 
232 /*  UtilConfigDialog Function Message Frame structure */
233 
234 typedef struct _I2O_UTIL_CONFIG_DIALOG_MESSAGE {
235     I2O_MESSAGE_FRAME	       StdMessageFrame;
236     I2O_TRANSACTION_CONTEXT    TransactionContext;
237     U32			       PageNumber;
238     I2O_SG_ELEMENT	       SGL;
239 } I2O_UTIL_CONFIG_DIALOG_MESSAGE, *PI2O_UTIL_CONFIG_DIALOG_MESSAGE;
240 
241 
242 /****************************************************************************/
243 
244 /*  Event Acknowledge Function Message Frame structure */
245 
246 typedef struct _I2O_UTIL_EVENT_ACK_MESSAGE {
247     I2O_MESSAGE_FRAME	       StdMessageFrame;
248     I2O_TRANSACTION_CONTEXT    TransactionContext;
249     U32			       EventIndicator;
250     U32			       EventData[1];
251 } I2O_UTIL_EVENT_ACK_MESSAGE, *PI2O_UTIL_EVENT_ACK_MESSAGE;
252 
253 /* Event Ack Reply structure */
254 
255 typedef struct _I2O_UTIL_EVENT_ACK_REPLY {
256     I2O_MESSAGE_FRAME	       StdMessageFrame;
257     I2O_TRANSACTION_CONTEXT    TransactionContext;
258     U32			       EventIndicator;
259     U32			       EventData[1];
260 } I2O_UTIL_EVENT_ACK_REPLY, *PI2O_UTIL_EVENT_ACK_REPLY;
261 
262 
263 /****************************************************************************/
264 
265 /* Event Indicator Mask Flags */
266 
267 #define	   I2O_EVENT_IND_STATE_CHANGE		       0x80000000
268 #define	   I2O_EVENT_IND_GENERAL_WARNING	       0x40000000
269 #define	   I2O_EVENT_IND_CONFIGURATION_FLAG	       0x20000000
270 /* #define	   I2O_EVENT_IND_RESERVE_RELEASE	       0x10000000 */
271 #define	   I2O_EVENT_IND_LOCK_RELEASE		       0x10000000
272 #define	   I2O_EVENT_IND_CAPABILITY_CHANGE	       0x08000000
273 #define	   I2O_EVENT_IND_DEVICE_RESET		       0x04000000
274 #define	   I2O_EVENT_IND_EVENT_MASK_MODIFIED	       0x02000000
275 #define	   I2O_EVENT_IND_FIELD_MODIFIED		       0x01000000
276 #define	   I2O_EVENT_IND_VENDOR_EVENT		       0x00800000
277 #define	   I2O_EVENT_IND_DEVICE_STATE		       0x00400000
278 
279 /* Event Data for generic Events */
280 
281 #define	   I2O_EVENT_STATE_CHANGE_NORMAL	       0x00
282 #define	   I2O_EVENT_STATE_CHANGE_SUSPENDED	       0x01
283 #define	   I2O_EVENT_STATE_CHANGE_RESTART	       0x02
284 #define	   I2O_EVENT_STATE_CHANGE_NA_RECOVER	       0x03
285 #define	   I2O_EVENT_STATE_CHANGE_NA_NO_RECOVER	       0x04
286 #define	   I2O_EVENT_STATE_CHANGE_QUIESCE_REQUEST      0x05
287 #define	   I2O_EVENT_STATE_CHANGE_FAILED	       0x10
288 #define	   I2O_EVENT_STATE_CHANGE_FAULTED	       0x11
289 
290 #define	   I2O_EVENT_GEN_WARNING_NORMAL		       0x00
291 #define	   I2O_EVENT_GEN_WARNING_ERROR_THRESHOLD       0x01
292 #define	   I2O_EVENT_GEN_WARNING_MEDIA_FAULT	       0x02
293 
294 #define	   I2O_EVENT_CAPABILITY_OTHER		       0x01
295 #define	   I2O_EVENT_CAPABILITY_CHANGED		       0x02
296 
297 #define	   I2O_EVENT_SENSOR_STATE_CHANGED	       0x01
298 
299 
300 /*  UtilEventRegister Function Message Frame structure */
301 
302 typedef struct _I2O_UTIL_EVENT_REGISTER_MESSAGE {
303     I2O_MESSAGE_FRAME	       StdMessageFrame;
304     I2O_TRANSACTION_CONTEXT    TransactionContext;
305     U32			       EventMask;
306 } I2O_UTIL_EVENT_REGISTER_MESSAGE, *PI2O_UTIL_EVENT_REGISTER_MESSAGE;
307 
308 /* UtilEventRegister Reply structure */
309 
310 typedef struct _I2O_UTIL_EVENT_REGISTER_REPLY {
311     I2O_MESSAGE_FRAME	       StdMessageFrame;
312     I2O_TRANSACTION_CONTEXT    TransactionContext;
313     U32			       EventIndicator;
314     U32			       EventData[1];
315 } I2O_UTIL_EVENT_REGISTER_REPLY, *PI2O_UTIL_EVENT_REGISTER_REPLY;
316 
317 
318 /****************************************************************************/
319 
320 /* UtilLock Function Message Frame structure. */
321 
322 typedef struct _I2O_UTIL_LOCK_MESSAGE {
323     I2O_MESSAGE_FRAME	       StdMessageFrame;
324     I2O_TRANSACTION_CONTEXT    TransactionContext;
325 } I2O_UTIL_LOCK_MESSAGE, *PI2O_UTIL_LOCK_MESSAGE;
326 
327 /****************************************************************************/
328 
329 /* UtilLockRelease Function Message Frame structure. */
330 
331 typedef struct _I2O_UTIL_LOCK_RELEASE_MESSAGE {
332     I2O_MESSAGE_FRAME	       StdMessageFrame;
333     I2O_TRANSACTION_CONTEXT    TransactionContext;
334 } I2O_UTIL_LOCK_RELEASE_MESSAGE, *PI2O_UTIL_LOCK_RELEASE_MESSAGE;
335 
336 
337 /****************************************************************************/
338 
339 /* UtilNOP Function Message Frame structure. */
340 
341 typedef struct _I2O_UTIL_NOP_MESSAGE {
342     I2O_MESSAGE_FRAME	       StdMessageFrame;
343 } I2O_UTIL_NOP_MESSAGE, *PI2O_UTIL_NOP_MESSAGE;
344 
345 
346 /****************************************************************************/
347 
348 /* UtilParamsGet Message Frame structure. */
349 
350 typedef struct _I2O_UTIL_PARAMS_GET_MESSAGE {
351     I2O_MESSAGE_FRAME	       StdMessageFrame;
352     I2O_TRANSACTION_CONTEXT    TransactionContext;
353     U32			       OperationFlags;
354     I2O_SG_ELEMENT	       SGL;
355 } I2O_UTIL_PARAMS_GET_MESSAGE, *PI2O_UTIL_PARAMS_GET_MESSAGE;
356 
357 
358 /****************************************************************************/
359 
360 /* UtilParamsSet Message Frame structure. */
361 
362 typedef struct _I2O_UTIL_PARAMS_SET_MESSAGE {
363     I2O_MESSAGE_FRAME	       StdMessageFrame;
364     I2O_TRANSACTION_CONTEXT    TransactionContext;
365     U32			       OperationFlags;
366     I2O_SG_ELEMENT	       SGL;
367 } I2O_UTIL_PARAMS_SET_MESSAGE, *PI2O_UTIL_PARAMS_SET_MESSAGE;
368 
369 
370 /****************************************************************************/
371 
372 /* UtilReplyFaultNotify Message for Message Failure. */
373 
374 typedef struct _I2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE {
375     I2O_MESSAGE_FRAME	       StdMessageFrame;
376     I2O_TRANSACTION_CONTEXT    TransactionContext;
377     U8			       LowestVersion;
378     U8			       HighestVersion;
379     BF			       Severity:I2O_FAILCODE_SEVERITY_SZ;
380     BF			       FailureCode:I2O_FAILCODE_CODE_SZ;
381     BF			       FailingIOP_ID:I2O_IOP_ID_SZ;
382     BF			       reserved:I2O_RESERVED_4BITS;
383     BF			       FailingHostUnitID:I2O_UNIT_ID_SZ;
384     U32			       AgeLimit;
385 #if I2O_64BIT_CONTEXT
386     PI2O_MESSAGE_FRAME	       OriginalMFA;
387 #else
388     PI2O_MESSAGE_FRAME	       OriginalMFALowPart;
389     U32			       OriginalMFAHighPart;  /* Always 0000 */
390 #endif
391 } I2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE, *PI2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE;
392 
393 
394 /****************************************************************************/
395 
396 /* Device Reserve Function Message Frame structure. */
397 /* NOTE:  This was previously called the Reserve Message */
398 
399 typedef struct _I2O_UTIL_DEVICE_RESERVE_MESSAGE {
400     I2O_MESSAGE_FRAME	       StdMessageFrame;
401     I2O_TRANSACTION_CONTEXT    TransactionContext;
402 } I2O_UTIL_DEVICE_RESERVE_MESSAGE, *PI2O_UTIL_DEVICE_RESERVE_MESSAGE;
403 
404 
405 /****************************************************************************/
406 
407 /* Device Release Function Message Frame structure. */
408 /* NOTE:  This was previously called the ReserveRelease Message */
409 
410 typedef struct _I2O_UTIL_DEVICE_RELEASE_MESSAGE {
411     I2O_MESSAGE_FRAME	       StdMessageFrame;
412     I2O_TRANSACTION_CONTEXT    TransactionContext;
413 } I2O_UTIL_DEVICE_RELEASE_MESSAGE, *PI2O_UTIL_DEVICE_RELEASE_MESSAGE;
414 
415 
416 /****************************************************************************/
417 
418 PRAGMA_PACK_POP
419 PRAGMA_ALIGN_POP
420 
421 #endif	  /* I2O_UTILITY_HDR  */
422