Annotation of sys/dev/i2o/i2o.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: i2o.h,v 1.7 2004/04/12 22:12:32 jmc Exp $ */
! 2: /* $NetBSD: i2o.h,v 1.3 2001/03/20 13:01:48 ad Exp $ */
! 3:
! 4: /*-
! 5: * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
! 6: * All rights reserved.
! 7: *
! 8: * This code is derived from software contributed to The NetBSD Foundation
! 9: * by Andrew Doran.
! 10: *
! 11: * Redistribution and use in source and binary forms, with or without
! 12: * modification, are permitted provided that the following conditions
! 13: * are met:
! 14: * 1. Redistributions of source code must retain the above copyright
! 15: * notice, this list of conditions and the following disclaimer.
! 16: * 2. Redistributions in binary form must reproduce the above copyright
! 17: * notice, this list of conditions and the following disclaimer in the
! 18: * documentation and/or other materials provided with the distribution.
! 19: * 3. All advertising materials mentioning features or use of this software
! 20: * must display the following acknowledgement:
! 21: * This product includes software developed by the NetBSD
! 22: * Foundation, Inc. and its contributors.
! 23: * 4. Neither the name of The NetBSD Foundation nor the names of its
! 24: * contributors may be used to endorse or promote products derived
! 25: * from this software without specific prior written permission.
! 26: *
! 27: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
! 28: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 29: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 30: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
! 31: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 32: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 33: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 34: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 35: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 36: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! 37: * POSSIBILITY OF SUCH DAMAGE.
! 38: */
! 39:
! 40: /*
! 41: * Structures and constants, as presented by the I2O specification revision
! 42: * 1.5 (obtainable from http://www.intelligent-io.com/). Currently, only
! 43: * what's useful to us is defined in this file.
! 44: */
! 45:
! 46: #ifndef _I2O_I2O_H_
! 47: #define _I2O_I2O_H_
! 48:
! 49: /*
! 50: * ================= Miscellaneous definitions =================
! 51: */
! 52:
! 53: /* Organisation IDs */
! 54: #define I2O_ORG_DPT 0x001b
! 55: #define I2O_ORG_INTEL 0x0028
! 56: #define I2O_ORG_AMI 0x1000
! 57:
! 58: /* Macros to assist in building message headers */
! 59: #define I2O_MSGFLAGS(s) (I2O_VERSION_11 | (sizeof(struct s) << 14))
! 60: #define I2O_MSGFUNC(t, f) ((t) | (I2O_TID_HOST << 12) | ((f) << 24))
! 61:
! 62: /* Common message function codes with no payload or an undefined payload */
! 63: #define I2O_UTIL_NOP 0x00
! 64: #define I2O_EXEC_IOP_CLEAR 0xbe
! 65: #define I2O_EXEC_SYS_QUIESCE 0xc3
! 66: #define I2O_EXEC_SYS_ENABLE 0xd1
! 67: #define I2O_PRIVATE_MESSAGE 0xff
! 68:
! 69: /* Device class codes */
! 70: #define I2O_CLASS_EXECUTIVE 0x00
! 71: #define I2O_CLASS_DDM 0x01
! 72: #define I2O_CLASS_RANDOM_BLOCK_STORAGE 0x10
! 73: #define I2O_CLASS_SEQUENTIAL_STORAGE 0x11
! 74: #define I2O_CLASS_LAN 0x20
! 75: #define I2O_CLASS_WAN 0x30
! 76: #define I2O_CLASS_FIBRE_CHANNEL_PORT 0x40
! 77: #define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL 0x41
! 78: #define I2O_CLASS_SCSI_PERIPHERAL 0x51
! 79: #define I2O_CLASS_ATE_PORT 0x60
! 80: #define I2O_CLASS_ATE_PERIPHERAL 0x61
! 81: #define I2O_CLASS_FLOPPY_CONTROLLER 0x70
! 82: #define I2O_CLASS_FLOPPY_DEVICE 0x71
! 83: #define I2O_CLASS_BUS_ADAPTER_PORT 0x80
! 84: #define I2O_CLASS_MASK 0xfff
! 85:
! 86: #define I2O_CLASS_ANY 0xffffffff
! 87:
! 88: /* Reply status codes */
! 89: #define I2O_STATUS_SUCCESS 0x00
! 90: #define I2O_STATUS_ABORT_DIRTY 0x01
! 91: #define I2O_STATUS_ABORT_NO_DATA_XFER 0x02
! 92: #define I2O_STATUS_ABORT_PARTIAL_XFER 0x03
! 93: #define I2O_STATUS_ERROR_DIRTY 0x04
! 94: #define I2O_STATUS_ERROR_NO_DATA_XFER 0x05
! 95: #define I2O_STATUS_ERROR_PARTIAL_XFER 0x06
! 96: #define I2O_STATUS_PROCESS_ABORT_DIRTY 0x08
! 97: #define I2O_STATUS_PROCESS_ABORT_NO_DATA_XFER 0x09
! 98: #define I2O_STATUS_PROCESS_ABORT_PARTIAL_XFER 0x0a
! 99: #define I2O_STATUS_TRANSACTION_ERROR 0x0b
! 100: #define I2O_STATUS_PROGRESS_REPORT 0x80
! 101:
! 102: /* Detailed status codes */
! 103: #define I2O_DSC_SUCCESS 0x00
! 104: #define I2O_DSC_BAD_KEY 0x02
! 105: #define I2O_DSC_TCL_ERROR 0x03
! 106: #define I2O_DSC_REPLY_BUFFER_FULL 0x04
! 107: #define I2O_DSC_NO_SUCH_PAGE 0x05
! 108: #define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT 0x06
! 109: #define I2O_DSC_INSUFFICIENT_RESOURCE_HARD 0x07
! 110: #define I2O_DSC_CHAIN_BUFFER_TOO_LARGE 0x09
! 111: #define I2O_DSC_UNSUPPORTED_FUNCTION 0x0a
! 112: #define I2O_DSC_DEVICE_LOCKED 0x0b
! 113: #define I2O_DSC_DEVICE_RESET 0x0c
! 114: #define I2O_DSC_INAPPROPRIATE_FUNCTION 0x0d
! 115: #define I2O_DSC_INVALID_INITIATOR_ADDRESS 0x0e
! 116: #define I2O_DSC_INVALID_MESSAGE_FLAGS 0x0f
! 117: #define I2O_DSC_INVALID_OFFSET 0x10
! 118: #define I2O_DSC_INVALID_PARAMETER 0x11
! 119: #define I2O_DSC_INVALID_REQUEST 0x12
! 120: #define I2O_DSC_INVALID_TARGET_ADDRESS 0x13
! 121: #define I2O_DSC_MESSAGE_TOO_LARGE 0x14
! 122: #define I2O_DSC_MESSAGE_TOO_SMALL 0x15
! 123: #define I2O_DSC_MISSING_PARAMETER 0x16
! 124: #define I2O_DSC_TIMEOUT 0x17
! 125: #define I2O_DSC_UNKNOWN_ERROR 0x18
! 126: #define I2O_DSC_UNKNOWN_FUNCTION 0x19
! 127: #define I2O_DSC_UNSUPPORTED_VERSION 0x1a
! 128: #define I2O_DSC_DEVICE_BUSY 0x1b
! 129: #define I2O_DSC_DEVICE_NOT_AVAILABLE 0x1c
! 130:
! 131: /* Message versions */
! 132: #define I2O_VERSION_10 0x00
! 133: #define I2O_VERSION_11 0x01
! 134: #define I2O_VERSION_20 0x02
! 135:
! 136: /* Commonly used TIDs */
! 137: #define I2O_TID_IOP 0
! 138: #define I2O_TID_HOST 1
! 139: #define I2O_TID_NONE 4095
! 140:
! 141: /* SGL flags. This list covers only a fraction of the possibilities. */
! 142: #define I2O_SGL_IGNORE 0x00000000
! 143: #define I2O_SGL_SIMPLE 0x10000000
! 144: #define I2O_SGL_PAGE_LIST 0x20000000
! 145:
! 146: #define I2O_SGL_BC_32BIT 0x01000000
! 147: #define I2O_SGL_BC_64BIT 0x02000000
! 148: #define I2O_SGL_BC_96BIT 0x03000000
! 149: #define I2O_SGL_DATA_OUT 0x04000000
! 150: #define I2O_SGL_END_BUFFER 0x40000000
! 151: #define I2O_SGL_END 0x80000000
! 152:
! 153: /* Serial number formats */
! 154: #define I2O_SNFMT_UNKNOWN 0
! 155: #define I2O_SNFMT_BINARY 1
! 156: #define I2O_SNFMT_ASCII 2
! 157: #define I2O_SNFMT_UNICODE 3
! 158: #define I2O_SNFMT_LAN_MAC 4
! 159: #define I2O_SNFMT_WAN_MAC 5
! 160:
! 161: /*
! 162: * ================= Common structures =================
! 163: */
! 164:
! 165: /*
! 166: * Standard I2O message frame. All message frames begin with this.
! 167: *
! 168: * Bits Field Meaning
! 169: * ---- ------------- ----------------------------------------------------
! 170: * 0-2 msgflags Message header version. Must be 001 (little endian).
! 171: * 3 msgflags Reserved.
! 172: * 4-7 msgflags Offset to SGLs expressed as # of 32-bit words.
! 173: * 8-15 msgflags Control flags.
! 174: * 16-31 msgflags Message frame size expressed as # of 32-bit words.
! 175: * 0-11 msgfunc TID of target.
! 176: * 12-23 msgfunc TID of initiator.
! 177: * 24-31 msgfunc Function (i.e., type of message).
! 178: */
! 179: struct i2o_msg {
! 180: u_int32_t msgflags;
! 181: u_int32_t msgfunc;
! 182: u_int32_t msgictx; /* Initiator context */
! 183: u_int32_t msgtctx; /* Transaction context */
! 184:
! 185: /* Message payload */
! 186:
! 187: } __attribute__ ((__packed__));
! 188:
! 189: #define I2O_MSGFLAGS_STATICMF 0x0100
! 190: #define I2O_MSGFLAGS_64BIT 0x0200
! 191: #define I2O_MSGFLAGS_MULTI 0x1000
! 192: #define I2O_MSGFLAGS_FAIL 0x2000
! 193: #define I2O_MSGFLAGS_LAST_REPLY 0x4000
! 194: #define I2O_MSGFLAGS_REPLY 0x8000
! 195:
! 196: /*
! 197: * Standard reply frame. msgflags, msgfunc, msgictx and msgtctx have the
! 198: * same meaning as in `struct i2o_msg'.
! 199: */
! 200: struct i2o_reply {
! 201: u_int32_t msgflags;
! 202: u_int32_t msgfunc;
! 203: u_int32_t msgictx;
! 204: u_int32_t msgtctx;
! 205: u_int16_t detail; /* Detailed status code */
! 206: u_int8_t reserved;
! 207: u_int8_t reqstatus; /* Request status code */
! 208:
! 209: /* Reply payload */
! 210:
! 211: } __attribute__ ((__packed__));
! 212:
! 213: /*
! 214: * Fault notification reply, returned when a message frame can not be
! 215: * processed (i.e I2O_MSGFLAGS_FAIL is set in the reply).
! 216: */
! 217: struct i2o_fault_notify {
! 218: u_int32_t msgflags;
! 219: u_int32_t msgfunc;
! 220: u_int32_t msgictx;
! 221: u_int32_t msgtctx; /* Not valid! */
! 222: u_int8_t lowestver;
! 223: u_int8_t highestver;
! 224: u_int8_t severity;
! 225: u_int8_t failurecode;
! 226: u_int16_t failingiop; /* Bits 0-12 only */
! 227: u_int16_t failinghostunit;
! 228: u_int32_t agelimit;
! 229: u_int32_t lowmfa;
! 230: u_int32_t highmfa;
! 231: };
! 232:
! 233: /*
! 234: * Hardware resource table. Not documented here.
! 235: */
! 236: struct i2o_hrt_entry {
! 237: u_int32_t adapterid;
! 238: u_int16_t controllingtid;
! 239: u_int8_t busnumber;
! 240: u_int8_t bustype;
! 241: u_int8_t businfo[8];
! 242: } __attribute__ ((__packed__));
! 243:
! 244: struct i2o_hrt {
! 245: u_int16_t numentries;
! 246: u_int8_t entrysize;
! 247: u_int8_t hrtversion;
! 248: u_int32_t changeindicator;
! 249: struct i2o_hrt_entry entry[1];
! 250: } __attribute__ ((__packed__));
! 251:
! 252: /*
! 253: * Logical configuration table entry. Bitfields are broken down as follows:
! 254: *
! 255: * Bits Field Meaning
! 256: * ----- -------------- ---------------------------------------------------
! 257: * 0-11 classid Class ID.
! 258: * 12-15 classid Class version.
! 259: * 0-11 usertid User TID
! 260: * 12-23 usertid Parent TID.
! 261: * 24-31 usertid BIOS info.
! 262: */
! 263: struct i2o_lct_entry {
! 264: u_int16_t entrysize;
! 265: u_int16_t localtid; /* Bits 0-12 only */
! 266: #define I2O_LCT_ENTRY_TID_MASK 0xfff
! 267: u_int32_t changeindicator;
! 268: u_int32_t deviceflags;
! 269: u_int16_t classid;
! 270: u_int16_t orgid;
! 271: u_int32_t subclassinfo;
! 272: u_int32_t usertid;
! 273: u_int8_t identitytag[8];
! 274: u_int32_t eventcaps;
! 275: } __attribute__ ((__packed__));
! 276:
! 277: /*
! 278: * Logical configuration table header.
! 279: */
! 280: struct i2o_lct {
! 281: u_int16_t tablesize;
! 282: u_int16_t flags;
! 283: u_int32_t iopflags;
! 284: u_int32_t changeindicator;
! 285: struct i2o_lct_entry entry[1];
! 286: } __attribute__ ((__packed__));
! 287:
! 288: /*
! 289: * IOP system table. Bitfields are broken down as follows:
! 290: *
! 291: * Bits Field Meaning
! 292: * ----- -------------- ---------------------------------------------------
! 293: * 0-11 iopid IOP ID.
! 294: * 12-31 iopid Reserved.
! 295: * 0-11 segnumber Segment number.
! 296: * 12-15 segnumber I2O version.
! 297: * 16-23 segnumber IOP state.
! 298: * 24-31 segnumber Messenger type.
! 299: */
! 300: struct i2o_systab_entry {
! 301: u_int16_t orgid;
! 302: u_int16_t reserved0;
! 303: u_int32_t iopid;
! 304: u_int32_t segnumber;
! 305: u_int16_t inboundmsgframesize;
! 306: u_int16_t reserved1;
! 307: u_int32_t lastchanged;
! 308: u_int32_t iopcaps;
! 309: u_int32_t inboundmsgportaddresslow;
! 310: u_int32_t inboundmsgportaddresshigh;
! 311: } __attribute__ ((__packed__));
! 312:
! 313: struct i2o_systab {
! 314: u_int8_t numentries;
! 315: u_int8_t version;
! 316: u_int16_t reserved0;
! 317: u_int32_t changeindicator;
! 318: u_int32_t reserved1[2];
! 319: struct i2o_systab_entry entry[1];
! 320: } __attribute__ ((__packed__));
! 321:
! 322: /*
! 323: * IOP status record. Bitfields are broken down as follows:
! 324: *
! 325: * Bits Field Meaning
! 326: * ----- -------------- ---------------------------------------------------
! 327: * 0-11 iopid IOP ID.
! 328: * 12-15 iopid Reserved.
! 329: * 16-31 iopid Host unit ID.
! 330: * 0-11 segnumber Segment number.
! 331: * 12-15 segnumber I2O version.
! 332: * 16-23 segnumber IOP state.
! 333: * 24-31 segnumber Messenger type.
! 334: */
! 335: struct i2o_status {
! 336: u_int16_t orgid;
! 337: u_int16_t reserved0;
! 338: u_int32_t iopid;
! 339: u_int32_t segnumber;
! 340: u_int16_t inboundmframesize;
! 341: u_int8_t initcode;
! 342: u_int8_t reserved1;
! 343: u_int32_t maxinboundmframes;
! 344: u_int32_t currentinboundmframes;
! 345: u_int32_t maxoutboundmframes;
! 346: u_int8_t productid[24];
! 347: u_int32_t expectedlctsize;
! 348: u_int32_t iopcaps;
! 349: u_int32_t desiredprivmemsize;
! 350: u_int32_t currentprivmemsize;
! 351: u_int32_t currentprivmembase;
! 352: u_int32_t desiredpriviosize;
! 353: u_int32_t currentpriviosize;
! 354: u_int32_t currentpriviobase;
! 355: u_int8_t reserved2[3];
! 356: u_int8_t syncbyte;
! 357: } __attribute__ ((__packed__));
! 358:
! 359: #define I2O_IOP_STATE_INITIALIZING 0x01
! 360: #define I2O_IOP_STATE_RESET 0x02
! 361: #define I2O_IOP_STATE_HOLD 0x04
! 362: #define I2O_IOP_STATE_READY 0x05
! 363: #define I2O_IOP_STATE_OPERATIONAL 0x08
! 364: #define I2O_IOP_STATE_FAILED 0x10
! 365: #define I2O_IOP_STATE_FAULTED 0x11
! 366:
! 367: /*
! 368: * ================= Executive class messages =================
! 369: */
! 370:
! 371: #define I2O_EXEC_STATUS_GET 0xa0
! 372: struct i2o_exec_status_get {
! 373: u_int32_t msgflags;
! 374: u_int32_t msgfunc;
! 375: u_int32_t reserved[4];
! 376: u_int32_t addrlow;
! 377: u_int32_t addrhigh;
! 378: u_int32_t length;
! 379: } __attribute__ ((__packed__));
! 380:
! 381: #define I2O_EXEC_OUTBOUND_INIT 0xa1
! 382: struct i2o_exec_outbound_init {
! 383: u_int32_t msgflags;
! 384: u_int32_t msgfunc;
! 385: u_int32_t msgictx;
! 386: u_int32_t msgtctx;
! 387: u_int32_t pagesize;
! 388: u_int32_t flags; /* init code, outbound msg size */
! 389: } __attribute__ ((__packed__));
! 390:
! 391: #define I2O_EXEC_OUTBOUND_INIT_IN_PROGRESS 1
! 392: #define I2O_EXEC_OUTBOUND_INIT_REJECTED 2
! 393: #define I2O_EXEC_OUTBOUND_INIT_FAILED 3
! 394: #define I2O_EXEC_OUTBOUND_INIT_COMPLETE 4
! 395:
! 396: #define I2O_EXEC_LCT_NOTIFY 0xa2
! 397: struct i2o_exec_lct_notify {
! 398: u_int32_t msgflags;
! 399: u_int32_t msgfunc;
! 400: u_int32_t msgictx;
! 401: u_int32_t msgtctx;
! 402: u_int32_t classid;
! 403: u_int32_t changeindicator;
! 404: } __attribute__ ((__packed__));
! 405:
! 406: #define I2O_EXEC_SYS_TAB_SET 0xa3
! 407: struct i2o_exec_sys_tab_set {
! 408: u_int32_t msgflags;
! 409: u_int32_t msgfunc;
! 410: u_int32_t msgictx;
! 411: u_int32_t msgtctx;
! 412: u_int32_t iopid;
! 413: u_int32_t segnumber;
! 414: } __attribute__ ((__packed__));
! 415:
! 416: #define I2O_EXEC_HRT_GET 0xa8
! 417: struct i2o_exec_hrt_get {
! 418: u_int32_t msgflags;
! 419: u_int32_t msgfunc;
! 420: u_int32_t msgictx;
! 421: u_int32_t msgtctx;
! 422: } __attribute__ ((__packed__));
! 423:
! 424: #define I2O_EXEC_IOP_RESET 0xbd
! 425: struct i2o_exec_iop_reset {
! 426: u_int32_t msgflags;
! 427: u_int32_t msgfunc;
! 428: u_int32_t reserved[4];
! 429: u_int32_t statuslow;
! 430: u_int32_t statushigh;
! 431: } __attribute__ ((__packed__));
! 432:
! 433: #define I2O_RESET_IN_PROGRESS 0x01
! 434: #define I2O_RESET_REJECTED 0x02
! 435:
! 436: /*
! 437: * ================= Executive class parameter groups =================
! 438: */
! 439:
! 440: #define I2O_PARAM_EXEC_LCT_SCALAR 0x0101
! 441: #define I2O_PARAM_EXEC_LCT_TABLE 0x0102
! 442:
! 443: /*
! 444: * ================= HBA class messages =================
! 445: */
! 446:
! 447: #define I2O_HBA_BUS_SCAN 0x89
! 448: struct i2o_hba_bus_scan {
! 449: u_int32_t msgflags;
! 450: u_int32_t msgfunc;
! 451: u_int32_t msgictx;
! 452: u_int32_t msgtctx;
! 453: } __attribute__ ((__packed__));
! 454:
! 455: /*
! 456: * ================= HBA class parameter groups =================
! 457: */
! 458:
! 459: #define I2O_PARAM_HBA_CTLR_INFO 0x0000
! 460: struct i2o_param_hba_ctlr_info {
! 461: u_int8_t bustype;
! 462: u_int8_t busstate;
! 463: u_int16_t reserved;
! 464: u_int8_t busname[12];
! 465: } __attribute__ ((__packed__));
! 466:
! 467: #define I2O_HBA_BUS_GENERIC 0x00
! 468: #define I2O_HBA_BUS_SCSI 0x01
! 469: #define I2O_HBA_BUS_FCA 0x10
! 470:
! 471: #define I2O_PARAM_HBA_SCSI_PORT_INFO 0x0001
! 472: struct i2o_param_hba_scsi_port_info {
! 473: u_int8_t physicalif;
! 474: #define I2O_PARAM_HBA_SCSI_PORT_GENERIC 0x01
! 475: #define I2O_PARAM_HBA_SCSI_PORT_UNKNOWN 0x02
! 476: #define I2O_PARAM_HBA_SCSI_PORT_PARINTF 0x03
! 477: #define I2O_PARAM_HBA_SCSI_PORT_FCL 0x04
! 478: #define I2O_PARAM_HBA_SCSI_PORT_1394 0x05
! 479: #define I2O_PARAM_HBA_SCSI_PORT_SSA 0x06
! 480: u_int8_t electricalif;
! 481: #define I2O_PARAM_HBA_SCSI_PORT_SE 0x03
! 482: #define I2O_PARAM_HBA_SCSI_PORT_DIFF 0x04
! 483: #define I2O_PARAM_HBA_SCSI_PORT_LVD 0x05
! 484: #define I2O_PARAM_HBA_SCSI_PORT_OPTCL 0x06
! 485: u_int8_t isosynchonrous;
! 486: u_int8_t connectortype;
! 487: #define I2O_PARAM_HBA_SCSI_PORT_HDBS50 0x04
! 488: #define I2O_PARAM_HBA_SCSI_PORT_HDBU50 0x05
! 489: #define I2O_PARAM_HBA_SCSI_PORT_DBS50 0x06
! 490: #define I2O_PARAM_HBA_SCSI_PORT_DBU50 0x07
! 491: #define I2O_PARAM_HBA_SCSI_PORT_HDBS68 0x08
! 492: #define I2O_PARAM_HBA_SCSI_PORT_HDBU68 0x09
! 493: #define I2O_PARAM_HBA_SCSI_PORT_SCA1 0x0a
! 494: #define I2O_PARAM_HBA_SCSI_PORT_SCA2 0x0b
! 495: #define I2O_PARAM_HBA_SCSI_PORT_FCDB9 0x0c
! 496: #define I2O_PARAM_HBA_SCSI_PORT_FC 0x0d
! 497: #define I2O_PARAM_HBA_SCSI_PORT_FCSCA40 0x0e
! 498: #define I2O_PARAM_HBA_SCSI_PORT_FCSCA20 0x0f
! 499: #define I2O_PARAM_HBA_SCSI_PORT_FCBNC 0x10
! 500: u_int8_t connectorgender;
! 501: #define I2O_PARAM_HBA_SCSI_PORT_FEMALE 0x03
! 502: #define I2O_PARAM_HBA_SCSI_PORT_MALE 0x04
! 503: u_int8_t reserved1;
! 504: u_int16_t reserved2;
! 505: u_int32_t maxnumberofdevices;
! 506: } __attribute__ ((__packed__));
! 507:
! 508: #define I2O_PARAM_HBA_SCSI_CTLR_INFO 0x0200
! 509: struct i2o_param_hba_scsi_ctlr_info {
! 510: u_int8_t scsitype;
! 511: #define I2O_PARAM_HBA_SCSI_CTRL_SCSI0 0x00
! 512: #define I2O_PARAM_HBA_SCSI_CTRL_SCSI1 0x01
! 513: #define I2O_PARAM_HBA_SCSI_CTRL_SCSI2 0x02
! 514: #define I2O_PARAM_HBA_SCSI_CTRL_SCSI3 0x03
! 515: u_int8_t protection;
! 516: u_int8_t settings;
! 517: u_int8_t reserved;
! 518: u_int32_t initiatorid;
! 519: u_int64_t scanlun0only;
! 520: u_int16_t disabledevice;
! 521: u_int8_t maxoffset;
! 522: u_int8_t maxdatawidth;
! 523: u_int64_t maxsyncrate;
! 524: } __attribute__ ((__packed__));
! 525:
! 526:
! 527: /*
! 528: * ================= Utility messages =================
! 529: */
! 530:
! 531: #define I2O_UTIL_ABORT 0x01
! 532: struct i2o_util_abort {
! 533: u_int32_t msgflags;
! 534: u_int32_t msgfunc;
! 535: u_int32_t msgictx;
! 536: u_int32_t msgtctx;
! 537: u_int32_t flags; /* abort type and function type */
! 538: u_int32_t tctxabort;
! 539: } __attribute__ ((__packed__));
! 540:
! 541: #define I2O_UTIL_ABORT_EXACT 0x00000000
! 542: #define I2O_UTIL_ABORT_FUNCTION 0x00010000
! 543: #define I2O_UTIL_ABORT_TRANSACTION 0x00020000
! 544: #define I2O_UTIL_ABORT_WILD 0x00030000
! 545:
! 546: #define I2O_UTIL_ABORT_CLEAN 0x00040000
! 547:
! 548: struct i2o_util_abort_reply {
! 549: u_int32_t msgflags;
! 550: u_int32_t msgfunc;
! 551: u_int32_t msgictx;
! 552: u_int32_t msgtctx;
! 553: u_int32_t count;
! 554: } __attribute__ ((__packed__));
! 555:
! 556: #define I2O_UTIL_PARAMS_SET 0x05
! 557: #define I2O_UTIL_PARAMS_GET 0x06
! 558: struct i2o_util_params_op {
! 559: u_int32_t msgflags;
! 560: u_int32_t msgfunc;
! 561: u_int32_t msgictx;
! 562: u_int32_t msgtctx;
! 563: u_int32_t flags;
! 564: } __attribute__ ((__packed__));
! 565:
! 566: #define I2O_PARAMS_OP_FIELD_GET 1
! 567: #define I2O_PARAMS_OP_LIST_GET 2
! 568: #define I2O_PARAMS_OP_MORE_GET 3
! 569: #define I2O_PARAMS_OP_SIZE_GET 4
! 570: #define I2O_PARAMS_OP_TABLE_GET 5
! 571: #define I2O_PARAMS_OP_FIELD_SET 6
! 572: #define I2O_PARAMS_OP_LIST_SET 7
! 573: #define I2O_PARAMS_OP_ROW_ADD 8
! 574: #define I2O_PARAMS_OP_ROW_DELETE 9
! 575: #define I2O_PARAMS_OP_TABLE_CLEAR 10
! 576:
! 577: struct i2o_param_op_list_header {
! 578: u_int16_t count;
! 579: u_int16_t reserved;
! 580: } __attribute__ ((__packed__));
! 581:
! 582: struct i2o_param_op_all_template {
! 583: u_int16_t operation;
! 584: u_int16_t group;
! 585: u_int16_t fieldcount;
! 586: u_int16_t fields[1];
! 587: } __attribute__ ((__packed__));
! 588:
! 589: struct i2o_param_op_results {
! 590: u_int16_t count;
! 591: u_int16_t reserved;
! 592: } __attribute__ ((__packed__));
! 593:
! 594: struct i2o_param_read_results {
! 595: u_int16_t blocksize;
! 596: u_int8_t blockstatus;
! 597: u_int8_t errorinfosize;
! 598: } __attribute__ ((__packed__));
! 599:
! 600: struct i2o_param_table_results {
! 601: u_int16_t blocksize;
! 602: u_int8_t blockstatus;
! 603: u_int8_t errorinfosize;
! 604: u_int16_t rowcount;
! 605: u_int16_t moreflag;
! 606: } __attribute__ ((__packed__));
! 607:
! 608: #define I2O_UTIL_CLAIM 0x09
! 609: struct i2o_util_claim {
! 610: u_int32_t msgflags;
! 611: u_int32_t msgfunc;
! 612: u_int32_t msgictx;
! 613: u_int32_t msgtctx;
! 614: u_int32_t flags;
! 615: } __attribute__ ((__packed__));
! 616:
! 617: #define I2O_UTIL_CLAIM_RESET_SENSITIVE 0x00000002
! 618: #define I2O_UTIL_CLAIM_STATE_SENSITIVE 0x00000004
! 619: #define I2O_UTIL_CLAIM_CAPACITY_SENSITIVE 0x00000008
! 620: #define I2O_UTIL_CLAIM_NO_PEER_SERVICE 0x00000010
! 621: #define I2O_UTIL_CLAIM_NO_MANAGEMENT_SERVICE 0x00000020
! 622:
! 623: #define I2O_UTIL_CLAIM_PRIMARY_USER 0x01000000
! 624: #define I2O_UTIL_CLAIM_AUTHORIZED_USER 0x02000000
! 625: #define I2O_UTIL_CLAIM_SECONDARY_USER 0x03000000
! 626: #define I2O_UTIL_CLAIM_MANAGEMENT_USER 0x04000000
! 627:
! 628: #define I2O_UTIL_CLAIM_RELEASE 0x0b
! 629: struct i2o_util_claim_release {
! 630: u_int32_t msgflags;
! 631: u_int32_t msgfunc;
! 632: u_int32_t msgictx;
! 633: u_int32_t msgtctx;
! 634: u_int32_t flags; /* User flags as per I2O_UTIL_CLAIM */
! 635: } __attribute__ ((__packed__));
! 636:
! 637: #define I2O_UTIL_CLAIM_RELEASE_CONDITIONAL 0x00000001
! 638:
! 639: #define I2O_UTIL_CONFIG_DIALOG 0x10
! 640: struct i2o_util_config_dialog {
! 641: u_int32_t msgflags;
! 642: u_int32_t msgfunc;
! 643: u_int32_t msgictx;
! 644: u_int32_t msgtctx;
! 645: u_int32_t pageno;
! 646: } __attribute__ ((__packed__));
! 647:
! 648: #define I2O_UTIL_EVENT_REGISTER 0x13
! 649: struct i2o_util_event_register {
! 650: u_int32_t msgflags;
! 651: u_int32_t msgfunc;
! 652: u_int32_t msgictx;
! 653: u_int32_t msgtctx;
! 654: u_int32_t eventmask;
! 655: } __attribute__ ((__packed__));
! 656:
! 657: struct i2o_util_event_register_reply {
! 658: u_int32_t msgflags;
! 659: u_int32_t msgfunc;
! 660: u_int32_t msgictx;
! 661: u_int32_t msgtctx;
! 662: u_int32_t event;
! 663: u_int32_t eventdata[1];
! 664: } __attribute__ ((__packed__));
! 665:
! 666: /* Generic events. */
! 667: #define I2O_EVENT_GEN_DEVICE_STATE 0x00400000
! 668: #define I2O_EVENT_GEN_VENDOR_EVENT 0x00800000
! 669: #define I2O_EVENT_GEN_FIELD_MODIFIED 0x01000000
! 670: #define I2O_EVENT_GEN_EVENT_MASK_MODIFIED 0x02000000
! 671: #define I2O_EVENT_GEN_DEVICE_RESET 0x04000000
! 672: #define I2O_EVENT_GEN_CAPABILITY_CHANGE 0x08000000
! 673: #define I2O_EVENT_GEN_LOCK_RELEASE 0x10000000
! 674: #define I2O_EVENT_GEN_NEED_CONFIGURATION 0x20000000
! 675: #define I2O_EVENT_GEN_GENERAL_WARNING 0x40000000
! 676: #define I2O_EVENT_GEN_STATE_CHANGE 0x80000000
! 677:
! 678: /* Executive class events. */
! 679: #define I2O_EVENT_EXEC_RESOURCE_LIMITS 0x00000001
! 680: #define I2O_EVENT_EXEC_CONNECTION_FAIL 0x00000002
! 681: #define I2O_EVENT_EXEC_ADAPTER_FAULT 0x00000004
! 682: #define I2O_EVENT_EXEC_POWER_FAIL 0x00000008
! 683: #define I2O_EVENT_EXEC_RESET_PENDING 0x00000010
! 684: #define I2O_EVENT_EXEC_RESET_IMMINENT 0x00000020
! 685: #define I2O_EVENT_EXEC_HARDWARE_FAIL 0x00000040
! 686: #define I2O_EVENT_EXEC_XCT_CHANGE 0x00000080
! 687: #define I2O_EVENT_EXEC_NEW_LCT_ENTRY 0x00000100
! 688: #define I2O_EVENT_EXEC_MODIFIED_LCT 0x00000200
! 689: #define I2O_EVENT_EXEC_DDM_AVAILIBILITY 0x00000400
! 690:
! 691: /* LAN class events. */
! 692: #define I2O_EVENT_LAN_LINK_DOWN 0x00000001
! 693: #define I2O_EVENT_LAN_LINK_UP 0x00000002
! 694: #define I2O_EVENT_LAN_MEDIA_CHANGE 0x00000004
! 695:
! 696: /*
! 697: * ================= Utility parameter groups =================
! 698: */
! 699:
! 700: #define I2O_PARAM_DEVICE_IDENTITY 0xf100
! 701: struct i2o_param_device_identity {
! 702: u_int32_t classid;
! 703: u_int16_t ownertid;
! 704: u_int16_t parenttid;
! 705: u_int8_t vendorinfo[16];
! 706: u_int8_t productinfo[16];
! 707: u_int8_t description[16];
! 708: u_int8_t revlevel[8];
! 709: u_int8_t snformat;
! 710: u_int8_t serialnumber[1];
! 711: } __attribute__ ((__packed__));
! 712:
! 713: #define I2O_PARAM_DDM_IDENTITY 0xf101
! 714: struct i2o_param_ddm_identity {
! 715: u_int16_t ddmtid;
! 716: u_int8_t name[24];
! 717: u_int8_t revlevel[8];
! 718: u_int8_t snformat;
! 719: u_int8_t serialnumber[12];
! 720: } __attribute__ ((__packed__));
! 721:
! 722: /*
! 723: * ================= Block storage class messages =================
! 724: */
! 725:
! 726: #define I2O_RBS_BLOCK_READ 0x30
! 727: struct i2o_rbs_block_read {
! 728: u_int32_t msgflags;
! 729: u_int32_t msgfunc;
! 730: u_int32_t msgictx;
! 731: u_int32_t msgtctx;
! 732: u_int32_t flags; /* flags, time multipler, read ahead */
! 733: u_int32_t datasize;
! 734: u_int32_t lowoffset;
! 735: u_int32_t highoffset;
! 736: } __attribute__ ((__packed__));
! 737:
! 738: #define I2O_RBS_BLOCK_READ_NO_RETRY 0x01
! 739: #define I2O_RBS_BLOCK_READ_SOLO 0x02
! 740: #define I2O_RBS_BLOCK_READ_CACHE_READ 0x04
! 741: #define I2O_RBS_BLOCK_READ_PREFETCH 0x08
! 742: #define I2O_RBS_BLOCK_READ_CACHE_ONLY 0x10
! 743:
! 744: #define I2O_RBS_BLOCK_WRITE 0x31
! 745: struct i2o_rbs_block_write {
! 746: u_int32_t msgflags;
! 747: u_int32_t msgfunc;
! 748: u_int32_t msgictx;
! 749: u_int32_t msgtctx;
! 750: u_int32_t flags; /* flags, time multipler */
! 751: u_int32_t datasize;
! 752: u_int32_t lowoffset;
! 753: u_int32_t highoffset;
! 754: } __attribute__ ((__packed__));
! 755:
! 756: #define I2O_RBS_BLOCK_WRITE_NO_RETRY 0x01
! 757: #define I2O_RBS_BLOCK_WRITE_SOLO 0x02
! 758: #define I2O_RBS_BLOCK_WRITE_CACHE_NONE 0x04
! 759: #define I2O_RBS_BLOCK_WRITE_CACHE_WT 0x08
! 760: #define I2O_RBS_BLOCK_WRITE_CACHE_WB 0x10
! 761:
! 762: #define I2O_RBS_CACHE_FLUSH 0x37
! 763: struct i2o_rbs_cache_flush {
! 764: u_int32_t msgflags;
! 765: u_int32_t msgfunc;
! 766: u_int32_t msgictx;
! 767: u_int32_t msgtctx;
! 768: u_int32_t flags; /* flags, time multipler */
! 769: } __attribute__ ((__packed__));
! 770:
! 771: #define I2O_RBS_MEDIA_MOUNT 0x41
! 772: struct i2o_rbs_media_mount {
! 773: u_int32_t msgflags;
! 774: u_int32_t msgfunc;
! 775: u_int32_t msgictx;
! 776: u_int32_t msgtctx;
! 777: u_int32_t mediaid;
! 778: u_int32_t loadflags;
! 779: } __attribute__ ((__packed__));
! 780:
! 781: #define I2O_RBS_MEDIA_EJECT 0x43
! 782: struct i2o_rbs_media_eject {
! 783: u_int32_t msgflags;
! 784: u_int32_t msgfunc;
! 785: u_int32_t msgictx;
! 786: u_int32_t msgtctx;
! 787: u_int32_t mediaid;
! 788: } __attribute__ ((__packed__));
! 789:
! 790: #define I2O_RBS_MEDIA_LOCK 0x49
! 791: struct i2o_rbs_media_lock {
! 792: u_int32_t msgflags;
! 793: u_int32_t msgfunc;
! 794: u_int32_t msgictx;
! 795: u_int32_t msgtctx;
! 796: u_int32_t mediaid;
! 797: } __attribute__ ((__packed__));
! 798:
! 799: #define I2O_RBS_MEDIA_UNLOCK 0x4b
! 800: struct i2o_rbs_media_unlock {
! 801: u_int32_t msgflags;
! 802: u_int32_t msgfunc;
! 803: u_int32_t msgictx;
! 804: u_int32_t msgtctx;
! 805: u_int32_t mediaid;
! 806: } __attribute__ ((__packed__));
! 807:
! 808: /* Standard RBS reply frame. */
! 809: struct i2o_rbs_reply {
! 810: u_int32_t msgflags;
! 811: u_int32_t msgfunc;
! 812: u_int32_t msgictx;
! 813: u_int32_t msgtctx;
! 814: u_int16_t detail;
! 815: u_int8_t retrycount;
! 816: u_int8_t reqstatus;
! 817: u_int32_t transfercount;
! 818: u_int64_t offset; /* Error replies only */
! 819: } __attribute__ ((__packed__));
! 820:
! 821: /*
! 822: * ================= Block storage class parameter groups =================
! 823: */
! 824:
! 825: #define I2O_PARAM_RBS_DEVICE_INFO 0x0000
! 826: struct i2o_param_rbs_device_info {
! 827: u_int8_t type;
! 828: u_int8_t npaths;
! 829: u_int16_t powerstate;
! 830: u_int32_t blocksize;
! 831: u_int64_t capacity;
! 832: u_int32_t capabilities;
! 833: u_int32_t state;
! 834: } __attribute__ ((__packed__));
! 835:
! 836: #define I2O_RBS_TYPE_DIRECT 0x00
! 837: #define I2O_RBS_TYPE_WORM 0x04
! 838: #define I2O_RBS_TYPE_CDROM 0x05
! 839: #define I2O_RBS_TYPE_OPTICAL 0x07
! 840:
! 841: #define I2O_RBS_CAP_CACHING 0x00000001
! 842: #define I2O_RBS_CAP_MULTI_PATH 0x00000002
! 843: #define I2O_RBS_CAP_DYNAMIC_CAPACITY 0x00000004
! 844: #define I2O_RBS_CAP_REMOVABLE_MEDIA 0x00000008
! 845: #define I2O_RBS_CAP_REMOVABLE_DEVICE 0x00000010
! 846: #define I2O_RBS_CAP_READ_ONLY 0x00000020
! 847: #define I2O_RBS_CAP_LOCKOUT 0x00000040
! 848: #define I2O_RBS_CAP_BOOT_BYPASS 0x00000080
! 849: #define I2O_RBS_CAP_COMPRESSION 0x00000100
! 850: #define I2O_RBS_CAP_DATA_SECURITY 0x00000200
! 851: #define I2O_RBS_CAP_RAID 0x00000400
! 852:
! 853: #define I2O_RBS_STATE_CACHING 0x00000001
! 854: #define I2O_RBS_STATE_POWERED_ON 0x00000002
! 855: #define I2O_RBS_STATE_READY 0x00000004
! 856: #define I2O_RBS_STATE_MEDIA_LOADED 0x00000008
! 857: #define I2O_RBS_STATE_DEVICE_LOADED 0x00000010
! 858: #define I2O_RBS_STATE_READ_ONLY 0x00000020
! 859: #define I2O_RBS_STATE_LOCKOUT 0x00000040
! 860: #define I2O_RBS_STATE_BOOT_BYPASS 0x00000080
! 861: #define I2O_RBS_STATE_COMPRESSION 0x00000100
! 862: #define I2O_RBS_STATE_DATA_SECURITY 0x00000200
! 863: #define I2O_RBS_STATE_RAID 0x00000400
! 864:
! 865: #define I2O_PARAM_RBS_OPERATION 0x0001
! 866: struct i2o_param_rbs_operation {
! 867: u_int8_t autoreass;
! 868: u_int8_t reasstolerance;
! 869: u_int8_t numretries;
! 870: u_int8_t reserved0;
! 871: u_int32_t reasssize;
! 872: u_int32_t expectedtimeout;
! 873: u_int32_t rwvtimeout;
! 874: u_int32_t rwvtimeoutbase;
! 875: u_int32_t timeoutbase;
! 876: u_int32_t orderedreqdepth;
! 877: u_int32_t atomicwritesize;
! 878: } __attribute__ ((__packed__));
! 879:
! 880: #define I2O_PARAM_RBS_CACHE_CONTROL 0x0003
! 881: struct i2o_param_rbs_cache_control {
! 882: u_int32_t totalcachesize;
! 883: u_int32_t readcachesize;
! 884: u_int32_t writecachesize;
! 885: u_int8_t writepolicy;
! 886: u_int8_t readpolicy;
! 887: u_int8_t errorcorrection;
! 888: u_int8_t reserved;
! 889: } __attribute__ ((__packed__));
! 890:
! 891: /*
! 892: * ================= SCSI peripheral class messages =================
! 893: */
! 894:
! 895: #define I2O_SCSI_DEVICE_RESET 0x27
! 896: struct i2o_scsi_device_reset {
! 897: u_int32_t msgflags;
! 898: u_int32_t msgfunc;
! 899: u_int32_t msgictx;
! 900: u_int32_t msgtctx;
! 901: } __attribute__ ((__packed__));
! 902:
! 903: #define I2O_SCSI_SCB_EXEC 0x81
! 904: struct i2o_scsi_scb_exec {
! 905: u_int32_t msgflags;
! 906: u_int32_t msgfunc;
! 907: u_int32_t msgictx;
! 908: u_int32_t msgtctx;
! 909: u_int32_t flags; /* CDB length and flags */
! 910: u_int8_t cdb[16];
! 911: u_int32_t datalen;
! 912: } __attribute__ ((__packed__));
! 913:
! 914: #define I2O_SCB_FLAG_SENSE_DATA_IN_MESSAGE 0x00200000
! 915: #define I2O_SCB_FLAG_SENSE_DATA_IN_BUFFER 0x00600000
! 916: #define I2O_SCB_FLAG_SIMPLE_QUEUE_TAG 0x00800000
! 917: #define I2O_SCB_FLAG_HEAD_QUEUE_TAG 0x01000000
! 918: #define I2O_SCB_FLAG_ORDERED_QUEUE_TAG 0x01800000
! 919: #define I2O_SCB_FLAG_ACA_QUEUE_TAG 0x02000000
! 920: #define I2O_SCB_FLAG_ENABLE_DISCONNECT 0x20000000
! 921: #define I2O_SCB_FLAG_XFER_FROM_DEVICE 0x40000000
! 922: #define I2O_SCB_FLAG_XFER_TO_DEVICE 0x80000000
! 923:
! 924: #define I2O_SCSI_SCB_ABORT 0x83
! 925: struct i2o_scsi_scb_abort {
! 926: u_int32_t msgflags;
! 927: u_int32_t msgfunc;
! 928: u_int32_t msgictx;
! 929: u_int32_t msgtctx;
! 930: u_int32_t tctxabort;
! 931: } __attribute__ ((__packed__));
! 932:
! 933: struct i2o_scsi_reply {
! 934: u_int32_t msgflags;
! 935: u_int32_t msgfunc;
! 936: u_int32_t msgictx;
! 937: u_int32_t msgtctx;
! 938: u_int8_t scsistatus;
! 939: u_int8_t hbastatus;
! 940: u_int8_t reserved;
! 941: u_int8_t reqstatus;
! 942: u_int32_t datalen;
! 943: u_int32_t senselen;
! 944: u_int8_t sense[40];
! 945: } __attribute__ ((__packed__));
! 946:
! 947: #define I2O_SCSI_DSC_SUCCESS 0x00
! 948: #define I2O_SCSI_DSC_REQUEST_ABORTED 0x02
! 949: #define I2O_SCSI_DSC_UNABLE_TO_ABORT 0x03
! 950: #define I2O_SCSI_DSC_COMPLETE_WITH_ERROR 0x04
! 951: #define I2O_SCSI_DSC_ADAPTER_BUSY 0x05
! 952: #define I2O_SCSI_DSC_REQUEST_INVALID 0x06
! 953: #define I2O_SCSI_DSC_PATH_INVALID 0x07
! 954: #define I2O_SCSI_DSC_DEVICE_NOT_PRESENT 0x08
! 955: #define I2O_SCSI_DSC_UNABLE_TO_TERMINATE 0x09
! 956: #define I2O_SCSI_DSC_SELECTION_TIMEOUT 0x0a
! 957: #define I2O_SCSI_DSC_COMMAND_TIMEOUT 0x0b
! 958: #define I2O_SCSI_DSC_MR_MESSAGE_RECEIVED 0x0d
! 959: #define I2O_SCSI_DSC_SCSI_BUS_RESET 0x0e
! 960: #define I2O_SCSI_DSC_PARITY_ERROR_FAILURE 0x0f
! 961: #define I2O_SCSI_DSC_AUTOSENSE_FAILED 0x10
! 962: #define I2O_SCSI_DSC_NO_ADAPTER 0x11
! 963: #define I2O_SCSI_DSC_DATA_OVERRUN 0x12
! 964: #define I2O_SCSI_DSC_UNEXPECTED_BUS_FREE 0x13
! 965: #define I2O_SCSI_DSC_SEQUENCE_FAILURE 0x14
! 966: #define I2O_SCSI_DSC_REQUEST_LENGTH_ERROR 0x15
! 967: #define I2O_SCSI_DSC_PROVIDE_FAILURE 0x16
! 968: #define I2O_SCSI_DSC_BDR_MESSAGE_SENT 0x17
! 969: #define I2O_SCSI_DSC_REQUEST_TERMINATED 0x18
! 970: #define I2O_SCSI_DSC_IDE_MESSAGE_SENT 0x33
! 971: #define I2O_SCSI_DSC_RESOURCE_UNAVAILABLE 0x34
! 972: #define I2O_SCSI_DSC_UNACKNOWLEDGED_EVENT 0x35
! 973: #define I2O_SCSI_DSC_MESSAGE_RECEIVED 0x36
! 974: #define I2O_SCSI_DSC_INVALID_CDB 0x37
! 975: #define I2O_SCSI_DSC_LUN_INVALID 0x38
! 976: #define I2O_SCSI_DSC_SCSI_TID_INVALID 0x39
! 977: #define I2O_SCSI_DSC_FUNCTION_UNAVAILABLE 0x3a
! 978: #define I2O_SCSI_DSC_NO_NEXUS 0x3b
! 979: #define I2O_SCSI_DSC_SCSI_IID_INVALID 0x3c
! 980: #define I2O_SCSI_DSC_CDB_RECEIVED 0x3d
! 981: #define I2O_SCSI_DSC_LUN_ALREADY_ENABLED 0x3e
! 982: #define I2O_SCSI_DSC_BUS_BUSY 0x3f
! 983: #define I2O_SCSI_DSC_QUEUE_FROZEN 0x40
! 984:
! 985: /*
! 986: * ================= SCSI peripheral class parameter groups =================
! 987: */
! 988:
! 989: #define I2O_PARAM_SCSI_DEVICE_INFO 0x0000
! 990: struct i2o_param_scsi_device_info {
! 991: u_int8_t devicetype;
! 992: u_int8_t flags;
! 993: u_int16_t reserved0;
! 994: u_int32_t identifier;
! 995: u_int8_t luninfo[8];
! 996: u_int32_t queuedepth;
! 997: u_int8_t reserved1;
! 998: u_int8_t negoffset;
! 999: u_int8_t negdatawidth;
! 1000: u_int8_t reserved2;
! 1001: u_int64_t negsyncrate;
! 1002: } __attribute__ ((__packed__));
! 1003:
! 1004: /*
! 1005: * ================= LAN class messages =================
! 1006: */
! 1007:
! 1008: #define I2O_LAN_PACKET_SEND 0x3b
! 1009: struct i2o_lan_packet_send {
! 1010: u_int32_t msgflags;
! 1011: u_int32_t msgfunc;
! 1012: u_int32_t msgictx;
! 1013: u_int32_t tcw;
! 1014:
! 1015: /* SGL follows */
! 1016: };
! 1017:
! 1018: #define I2O_LAN_TCW_ACCESS_PRI_MASK 0x00000007
! 1019: #define I2O_LAN_TCW_SUPPRESS_CRC 0x00000008
! 1020: #define I2O_LAN_TCW_SUPPRESS_LOOPBACK 0x00000010
! 1021: #define I2O_LAN_TCW_CKSUM_NETWORK 0x00000020
! 1022: #define I2O_LAN_TCW_CKSUM_TRANSPORT 0x00000040
! 1023: #define I2O_LAN_TCW_REPLY_BATCH 0x00000000
! 1024: #define I2O_LAN_TCW_REPLY_IMMEDIATELY 0x40000000
! 1025: #define I2O_LAN_TCW_REPLY_UNSUCCESSFUL 0x80000000
! 1026: #define I2O_LAN_TCW_REPLY_NONE 0xc0000000
! 1027:
! 1028: #define I2O_LAN_SDU_SEND 0x3d
! 1029: struct i2o_lan_sdu_send {
! 1030: u_int32_t msgflags;
! 1031: u_int32_t msgfunc;
! 1032: u_int32_t msgictx;
! 1033: u_int32_t tcw; /* As per PACKET_SEND. */
! 1034:
! 1035: /* SGL follows */
! 1036: };
! 1037:
! 1038: struct i2o_lan_send_reply {
! 1039: u_int32_t msgflags;
! 1040: u_int32_t msgfunc;
! 1041: u_int32_t msgictx;
! 1042: u_int32_t trl;
! 1043: u_int16_t detail;
! 1044: u_int8_t reserved;
! 1045: u_int8_t reqstatus;
! 1046: u_int32_t tctx[1];
! 1047: };
! 1048:
! 1049: #define I2O_LAN_RECEIVE_POST 0x3e
! 1050: struct i2o_lan_receive_post {
! 1051: u_int32_t msgflags;
! 1052: u_int32_t msgfunc;
! 1053: u_int32_t msgictx;
! 1054: u_int32_t bktcnt;
! 1055:
! 1056: /* SGL follows */
! 1057: };
! 1058:
! 1059: struct i2o_lan_pdb {
! 1060: u_int32_t bctx;
! 1061: u_int32_t pktoff;
! 1062: u_int32_t pktlen;
! 1063: };
! 1064:
! 1065: #define I2O_LAN_FRAG_VALID 0x00
! 1066: #define I2O_LAN_FRAG_VALID_MASK foo
! 1067:
! 1068: struct i2o_lan_receive_reply {
! 1069: u_int32_t msgflags;
! 1070: u_int32_t msgfunc;
! 1071: u_int32_t msgictx;
! 1072: u_int8_t trlcount;
! 1073: u_int8_t trlesize;
! 1074: u_int8_t reserved;
! 1075: u_int8_t trlflags;
! 1076: u_int32_t bucketsleft;
! 1077: struct i2o_lan_pdb pdb[1];
! 1078: };
! 1079:
! 1080: #define I2O_LAN_RESET 0x35
! 1081: struct i2o_lan_reset {
! 1082: u_int32_t msgflags;
! 1083: u_int32_t msgfunc;
! 1084: u_int32_t msgictx;
! 1085: u_int16_t reserved;
! 1086: u_int16_t resrcflags;
! 1087: };
! 1088:
! 1089: #define I2O_LAN_RESRC_RETURN_BUCKETS 0x0001
! 1090: #define I2O_LAN_RESRC_RETURN_XMITS 0x0002
! 1091:
! 1092: #define I2O_LAN_SUSPEND 0x37
! 1093: struct i2o_lan_suspend {
! 1094: u_int32_t msgflags;
! 1095: u_int32_t msgfunc;
! 1096: u_int32_t msgictx;
! 1097: u_int16_t reserved;
! 1098: u_int16_t resrcflags; /* As per RESET. */
! 1099: };
! 1100:
! 1101: #define I2O_LAN_DSC_SUCCESS 0x00
! 1102: #define I2O_LAN_DSC_DEVICE_FAILURE 0x01
! 1103: #define I2O_LAN_DSC_DESTINATION_NOT_FOUND 0x02
! 1104: #define I2O_LAN_DSC_TRANSMIT_ERROR 0x03
! 1105: #define I2O_LAN_DSC_TRANSMIT_ABORTED 0x04
! 1106: #define I2O_LAN_DSC_RECEIVE_ERROR 0x05
! 1107: #define I2O_LAN_DSC_RECEIVE_ABORTED 0x06
! 1108: #define I2O_LAN_DSC_DMA_ERROR 0x07
! 1109: #define I2O_LAN_DSC_BAD_PACKET_DETECTED 0x08
! 1110: #define I2O_LAN_DSC_OUT_OF_MEMORY 0x09
! 1111: #define I2O_LAN_DSC_BUCKET_OVERRUN 0x0a
! 1112: #define I2O_LAN_DSC_IOP_INTERNAL_ERROR 0x0b
! 1113: #define I2O_LAN_DSC_CANCELED 0x0c
! 1114: #define I2O_LAN_DSC_INVALID_TRANSACTION_CONTEXT 0x0d
! 1115: #define I2O_LAN_DSC_DEST_ADDRESS_DETECTED 0x0e
! 1116: #define I2O_LAN_DSC_DEST_ADDRESS_OMITTED 0x0f
! 1117: #define I2O_LAN_DSC_PARTIAL_PACKET_RETURNED 0x10
! 1118: #define I2O_LAN_DSC_TEMP_SUSPENDED_STATE 0x11
! 1119:
! 1120: /*
! 1121: * ================= LAN class parameter groups =================
! 1122: */
! 1123:
! 1124: #define I2O_PARAM_LAN_DEVICE_INFO 0x0000
! 1125: struct i2o_param_lan_device_info {
! 1126: u_int16_t lantype;
! 1127: u_int16_t flags;
! 1128: u_int8_t addrfmt;
! 1129: u_int8_t reserved1;
! 1130: u_int16_t reserved2;
! 1131: u_int32_t minpktsize;
! 1132: u_int32_t maxpktsize;
! 1133: u_int8_t hwaddr[8];
! 1134: u_int64_t maxtxbps;
! 1135: u_int64_t maxrxbps;
! 1136: };
! 1137:
! 1138: #define I2O_LAN_TYPE_ETHERNET 0x0030
! 1139: #define I2O_LAN_TYPE_100BASEVG 0x0040
! 1140: #define I2O_LAN_TYPE_TOKEN_RING 0x0050
! 1141: #define I2O_LAN_TYPE_FDDI 0x0060
! 1142: #define I2O_LAN_TYPE_FIBRECHANNEL 0x0070
! 1143:
! 1144: #define I2O_PARAM_LAN_MAC_ADDRESS 0x0001
! 1145: struct i2o_param_lan_mac_address {
! 1146: u_int8_t activeaddr[8];
! 1147: u_int8_t localaddr[8];
! 1148: u_int8_t addrmask[8];
! 1149: u_int8_t filtermask[4];
! 1150: u_int8_t hwfiltermask[4];
! 1151: u_int32_t maxmcastaddr;
! 1152: u_int32_t maxfilterperfect;
! 1153: u_int32_t maxfilterimperfect;
! 1154: };
! 1155:
! 1156: #define I2O_PARAM_LAN_MCAST_MAC_ADDRESS 0x0002
! 1157: /*
! 1158: * This one's a table, not a scalar.
! 1159: */
! 1160:
! 1161: #define I2O_PARAM_LAN_BATCH_CONTROL 0x0003
! 1162: struct i2o_param_lan_batch_control {
! 1163: u_int32_t batchflags;
! 1164: u_int32_t risingloaddly;
! 1165: u_int32_t risingloadthresh;
! 1166: u_int32_t fallingloaddly;
! 1167: u_int32_t fallingloadthresh;
! 1168: u_int32_t maxbatchcount;
! 1169: u_int32_t maxbatchdelay;
! 1170: u_int32_t transcompdelay;
! 1171: };
! 1172:
! 1173: #define I2O_PARAM_LAN_OPERATION 0x0004
! 1174: struct i2o_param_lan_operation {
! 1175: u_int32_t pktprepad;
! 1176: u_int32_t userflags;
! 1177: u_int32_t pktorphanlimit;
! 1178: };
! 1179:
! 1180: #define I2O_PARAM_LAN_MEDIA_OPERATION 0x0005
! 1181: struct i2o_param_lan_media_operation {
! 1182: u_int32_t connectortype;
! 1183: u_int32_t connectiontype;
! 1184: u_int32_t curtxbps;
! 1185: u_int32_t currxbps;
! 1186: u_int8_t fullduplex;
! 1187: u_int8_t linkstatus;
! 1188: u_int8_t badpkthandling;
! 1189: };
! 1190:
! 1191: #define I2O_LAN_CONNECTOR_OTHER 0x00
! 1192: #define I2O_LAN_CONNECTOR_UNKNOWN 0x01
! 1193: #define I2O_LAN_CONNECTOR_AUI 0x02
! 1194: #define I2O_LAN_CONNECTOR_UTP 0x03
! 1195: #define I2O_LAN_CONNECTOR_BNC 0x04
! 1196: #define I2O_LAN_CONNECTOR_RJ45 0x05
! 1197: #define I2O_LAN_CONNECTOR_STP_DB9 0x06
! 1198: #define I2O_LAN_CONNECTOR_FIBER_MIC 0x07
! 1199: #define I2O_LAN_CONNECTOR_APPLE_AUI 0x08
! 1200: #define I2O_LAN_CONNECTOR_MII 0x09
! 1201: #define I2O_LAN_CONNECTOR_COPPER_DB9 0x0a
! 1202: #define I2O_LAN_CONNECTOR_COPPER_AW 0x0b
! 1203: #define I2O_LAN_CONNECTOR_OPTICAL_LW 0x0c
! 1204: #define I2O_LAN_CONNECTOR_SIP 0x0d
! 1205: #define I2O_LAN_CONNECTOR_OPTICAL_SW 0x0e
! 1206:
! 1207: #define I2O_LAN_CONNECTION_UNKNOWN 0x0000
! 1208:
! 1209: #define I2O_LAN_CONNECTION_ETHERNET_AUI 0x0301
! 1210: #define I2O_LAN_CONNECTION_ETHERNET_10BASE5 0x0302
! 1211: #define I2O_LAN_CONNECTION_ETHERNET_FOIRL 0x0303
! 1212: #define I2O_LAN_CONNECTION_ETHERNET_10BASE2 0x0304
! 1213: #define I2O_LAN_CONNECTION_ETHERNET_10BROAD36 0x0305
! 1214: #define I2O_LAN_CONNECTION_ETHERNET_10BASET 0x0306
! 1215: #define I2O_LAN_CONNECTION_ETHERNET_10BASEFP 0x0307
! 1216: #define I2O_LAN_CONNECTION_ETHERNET_10BASEFB 0x0308
! 1217: #define I2O_LAN_CONNECTION_ETHERNET_10BASEFL 0x0309
! 1218: #define I2O_LAN_CONNECTION_ETHERNET_100BASETX 0x030a
! 1219: #define I2O_LAN_CONNECTION_ETHERNET_100BASEFX 0x030b
! 1220: #define I2O_LAN_CONNECTION_ETHERNET_100BASET4 0x030c
! 1221:
! 1222: #define I2O_LAN_CONNECTION_100BASEVG_100BASEVG 0x0401
! 1223:
! 1224: #define I2O_LAN_CONNECTION_TOKEN_RING_4MBIT 0x0501
! 1225: #define I2O_LAN_CONNECTION_TOKEN_RING_16MBIT 0x0502
! 1226:
! 1227: #define I2O_LAN_CONNECTION_FDDI_125MBIT 0x0601
! 1228:
! 1229: #define I2O_LAN_CONNECTION_FIBRECHANNEL_P2P 0x0701
! 1230: #define I2O_LAN_CONNECTION_FIBRECHANNEL_AL 0x0702
! 1231: #define I2O_LAN_CONNECTION_FIBRECHANNEL_PL 0x0703
! 1232: #define I2O_LAN_CONNECTION_FIBRECHANNEL_F 0x0704
! 1233:
! 1234: #define I2O_LAN_CONNECTION_OTHER_EMULATED 0x0f00
! 1235: #define I2O_LAN_CONNECTION_OTHER_OTHER 0x0f01
! 1236:
! 1237: #endif /* !defined _I2O_I2O_H_ */
CVSweb