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