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