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 */ 419