i2o.h revision 1.11
1/* $NetBSD: i2o.h,v 1.11 2004/04/19 12:44:10 wiz 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 * ================= Miscellaneous 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 */ 178struct 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 */ 199struct 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 */ 216struct 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 */ 235struct 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 243struct 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 */ 262struct 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 */ 278struct 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 */ 298struct 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 311struct 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 */ 333struct 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 370struct 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 380struct 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 395struct 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 405struct 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 415struct 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 423struct 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 446struct 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 458struct 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 470struct 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 511struct 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 529struct 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 545struct 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 555struct 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 574struct i2o_param_op_list_header { 575 u_int16_t count; 576 u_int16_t reserved; 577} __attribute__ ((__packed__)); 578 579struct 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 586struct i2o_param_op_results { 587 u_int16_t count; 588 u_int16_t reserved; 589} __attribute__ ((__packed__)); 590 591struct i2o_param_read_results { 592 u_int16_t blocksize; 593 u_int8_t blockstatus; 594 u_int8_t errorinfosize; 595} __attribute__ ((__packed__)); 596 597struct 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 606struct 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 626struct 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 637struct 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 646struct 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 654struct 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 698struct 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 711struct 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 724struct 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 742struct 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 760struct 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 769struct 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 779struct 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 788struct 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 797struct 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. */ 806struct 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 823struct 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_REMOVABLE_MEDIA 0x00000008 842#define I2O_RBS_CAP_REMOVABLE_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 863struct 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 890struct 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 905struct 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 913struct 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 934struct 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 942struct 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 999struct 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 1018struct 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 1038struct 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 1047struct 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 1059struct 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 1068struct 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 1093struct 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 1105struct 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 1137struct 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 1157struct 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 1192struct 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 1215struct 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 1230struct 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 1308struct 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 1330struct 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 1336struct 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 1347struct 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 1359struct 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