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.
7 * Copyright 1999 I2O Special Interest Group (I2O SIG). All rights reserved.
10 * TERMS AND CONDITIONS OF USE
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.
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.
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.
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
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.
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.
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.
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.
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.
73 * The I2O SIG Web site can be found at: http://www.i2osig.org
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
79 ****************************************************************/
81 /*********************************************************************
82 * I2OUtil.h -- I2O Utility Class Message defintion file
84 * This file contains information presented in Chapter 6 of the I2O
86 **********************************************************************/
88 #if !defined(I2O_UTILITY_HDR)
89 #define I2O_UTILITY_HDR
91 #define I2OUTIL_REV 1_5_4 /* I2OUtil header file revision string */
93 #if ((defined(KERNEL) || defined(_KERNEL)) && defined(__FreeBSD__))
94 # if (KERN_VERSION < 3)
95 # include "i386/pci/i2omsg.h" /* Include the Base Message file */
97 # include "dev/asr/i2omsg.h"
100 # include "i2omsg.h" /* Include the Base Message file */
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.
113 Some functions are synonyms like read, receive and send, write.
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.
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.
128 /* Utility Message class functions. */
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
145 /****************************************************************************/
147 /* ABORT Abort type defines. */
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
158 /* UtilAbort Function Message Frame structure. */
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))
170 I2O_TRANSACTION_CONTEXT TransactionContextToAbort;
171 } I2O_UTIL_ABORT_MESSAGE, *PI2O_UTIL_ABORT_MESSAGE;
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;
181 /****************************************************************************/
183 /* Claim Flag defines */
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
192 /* Claim Type defines */
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
199 /* UtilClaim Function Message Frame structure. */
201 typedef struct _I2O_UTIL_CLAIM_MESSAGE {
202 I2O_MESSAGE_FRAME StdMessageFrame;
203 I2O_TRANSACTION_CONTEXT TransactionContext;
207 } I2O_UTIL_CLAIM_MESSAGE, *PI2O_UTIL_CLAIM_MESSAGE;
210 /****************************************************************************/
212 /* Claim Release Flag defines */
214 #define I2O_RELEASE_FLAGS_CONDITIONAL 0x0001
216 /* UtilClaimRelease Function Message Frame structure. */
218 typedef struct _I2O_UTIL_CLAIM_RELEASE_MESSAGE {
219 I2O_MESSAGE_FRAME StdMessageFrame;
220 I2O_TRANSACTION_CONTEXT TransactionContext;
224 } I2O_UTIL_CLAIM_RELEASE_MESSAGE, *PI2O_UTIL_CLAIM_RELEASE_MESSAGE;
227 /****************************************************************************/
229 /* UtilConfigDialog Function Message Frame structure */
231 typedef struct _I2O_UTIL_CONFIG_DIALOG_MESSAGE {
232 I2O_MESSAGE_FRAME StdMessageFrame;
233 I2O_TRANSACTION_CONTEXT TransactionContext;
236 } I2O_UTIL_CONFIG_DIALOG_MESSAGE, *PI2O_UTIL_CONFIG_DIALOG_MESSAGE;
239 /****************************************************************************/
241 /* Event Acknowledge Function Message Frame structure */
243 typedef struct _I2O_UTIL_EVENT_ACK_MESSAGE {
244 I2O_MESSAGE_FRAME StdMessageFrame;
245 I2O_TRANSACTION_CONTEXT TransactionContext;
248 } I2O_UTIL_EVENT_ACK_MESSAGE, *PI2O_UTIL_EVENT_ACK_MESSAGE;
250 /* Event Ack Reply structure */
252 typedef struct _I2O_UTIL_EVENT_ACK_REPLY {
253 I2O_MESSAGE_FRAME StdMessageFrame;
254 I2O_TRANSACTION_CONTEXT TransactionContext;
257 } I2O_UTIL_EVENT_ACK_REPLY, *PI2O_UTIL_EVENT_ACK_REPLY;
260 /****************************************************************************/
262 /* Event Indicator Mask Flags */
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
276 /* Event Data for generic Events */
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
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
291 #define I2O_EVENT_CAPABILITY_OTHER 0x01
292 #define I2O_EVENT_CAPABILITY_CHANGED 0x02
294 #define I2O_EVENT_SENSOR_STATE_CHANGED 0x01
297 /* UtilEventRegister Function Message Frame structure */
299 typedef struct _I2O_UTIL_EVENT_REGISTER_MESSAGE {
300 I2O_MESSAGE_FRAME StdMessageFrame;
301 I2O_TRANSACTION_CONTEXT TransactionContext;
303 } I2O_UTIL_EVENT_REGISTER_MESSAGE, *PI2O_UTIL_EVENT_REGISTER_MESSAGE;
305 /* UtilEventRegister Reply structure */
307 typedef struct _I2O_UTIL_EVENT_REGISTER_REPLY {
308 I2O_MESSAGE_FRAME StdMessageFrame;
309 I2O_TRANSACTION_CONTEXT TransactionContext;
312 } I2O_UTIL_EVENT_REGISTER_REPLY, *PI2O_UTIL_EVENT_REGISTER_REPLY;
315 /****************************************************************************/
317 /* UtilLock Function Message Frame structure. */
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;
324 /****************************************************************************/
326 /* UtilLockRelease Function Message Frame structure. */
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;
334 /****************************************************************************/
336 /* UtilNOP Function Message Frame structure. */
338 typedef struct _I2O_UTIL_NOP_MESSAGE {
339 I2O_MESSAGE_FRAME StdMessageFrame;
340 } I2O_UTIL_NOP_MESSAGE, *PI2O_UTIL_NOP_MESSAGE;
343 /****************************************************************************/
345 /* UtilParamsGet Message Frame structure. */
347 typedef struct _I2O_UTIL_PARAMS_GET_MESSAGE {
348 I2O_MESSAGE_FRAME StdMessageFrame;
349 I2O_TRANSACTION_CONTEXT TransactionContext;
352 } I2O_UTIL_PARAMS_GET_MESSAGE, *PI2O_UTIL_PARAMS_GET_MESSAGE;
355 /****************************************************************************/
357 /* UtilParamsSet Message Frame structure. */
359 typedef struct _I2O_UTIL_PARAMS_SET_MESSAGE {
360 I2O_MESSAGE_FRAME StdMessageFrame;
361 I2O_TRANSACTION_CONTEXT TransactionContext;
364 } I2O_UTIL_PARAMS_SET_MESSAGE, *PI2O_UTIL_PARAMS_SET_MESSAGE;
367 /****************************************************************************/
369 /* UtilReplyFaultNotify Message for Message Failure. */
371 typedef struct _I2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE {
372 I2O_MESSAGE_FRAME StdMessageFrame;
373 I2O_TRANSACTION_CONTEXT TransactionContext;
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;
382 #if I2O_64BIT_CONTEXT
383 PI2O_MESSAGE_FRAME OriginalMFA;
385 PI2O_MESSAGE_FRAME OriginalMFALowPart;
386 U32 OriginalMFAHighPart; /* Always 0000 */
388 } I2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE, *PI2O_UTIL_REPLY_FAULT_NOTIFY_MESSAGE;
391 /****************************************************************************/
393 /* Device Reserve Function Message Frame structure. */
394 /* NOTE: This was previously called the Reserve Message */
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;
402 /****************************************************************************/
404 /* Device Release Function Message Frame structure. */
405 /* NOTE: This was previously called the ReserveRelease Message */
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;
413 /****************************************************************************/
418 #endif /* I2O_UTILITY_HDR */