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