Home | History | Annotate | Line # | Download | only in i2o
      1 /*	$NetBSD: i2o.h,v 1.18 2023/09/07 20:03:25 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  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 /*
     33  * Structures and constants, as presented by the I2O specification revision
     34  * 1.5 (obtainable from http://www.intelligent-io.com/).  Currently, only
     35  * what's useful to us is defined in this file.  LAN defs used to be here
     36  * but were removed as they're useless.
     37  */
     38 
     39 #ifndef	_I2O_I2O_H_
     40 #define	_I2O_I2O_H_
     41 
     42 #include <sys/cdefs.h>
     43 #include <sys/types.h>
     44 
     45 /*
     46  * ================= Miscellaneous definitions =================
     47  */
     48 
     49 /* Organisation IDs */
     50 #define	I2O_ORG_DPT			0x001b
     51 #define	I2O_ORG_INTEL			0x0028
     52 #define	I2O_ORG_AMI			0x1000
     53 
     54 /* Macros to assist in building message headers */
     55 #define	I2O_MSGFLAGS(s)		(I2O_VERSION_11 | (sizeof(struct s) << 14))
     56 #define	I2O_MSGFUNC(t, f)	((t) | (I2O_TID_HOST << 12) | ((f) << 24))
     57 #define	I2O_MSGPRIV(o, f)	((f) | ((o) << 16))
     58 
     59 /* Common message function codes with no payload or an undefined payload */
     60 #define	I2O_UTIL_NOP			0x00
     61 #define	I2O_EXEC_IOP_CLEAR		0xbe
     62 #define	I2O_EXEC_SYS_QUIESCE		0xc3
     63 #define	I2O_EXEC_SYS_ENABLE		0xd1
     64 #define	I2O_PRIVATE_MESSAGE		0xff
     65 
     66 /* Device class codes */
     67 #define	I2O_CLASS_EXECUTIVE			0x00
     68 #define	I2O_CLASS_DDM				0x01
     69 #define	I2O_CLASS_RANDOM_BLOCK_STORAGE		0x10
     70 #define	I2O_CLASS_SEQUENTIAL_STORAGE		0x11
     71 #define	I2O_CLASS_LAN				0x20
     72 #define	I2O_CLASS_WAN				0x30
     73 #define	I2O_CLASS_FIBRE_CHANNEL_PORT		0x40
     74 #define	I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL	0x41
     75 #define	I2O_CLASS_SCSI_PERIPHERAL		0x51
     76 #define	I2O_CLASS_ATE_PORT			0x60
     77 #define	I2O_CLASS_ATE_PERIPHERAL		0x61
     78 #define	I2O_CLASS_FLOPPY_CONTROLLER		0x70
     79 #define	I2O_CLASS_FLOPPY_DEVICE			0x71
     80 #define	I2O_CLASS_BUS_ADAPTER_PORT		0x80
     81 
     82 #define	I2O_CLASS_ANY				0xffffffff
     83 
     84 /* Reply status codes */
     85 #define	I2O_STATUS_SUCCESS			0x00
     86 #define	I2O_STATUS_ABORT_DIRTY			0x01
     87 #define	I2O_STATUS_ABORT_NO_DATA_XFER		0x02
     88 #define	I2O_STATUS_ABORT_PARTIAL_XFER		0x03
     89 #define	I2O_STATUS_ERROR_DIRTY			0x04
     90 #define	I2O_STATUS_ERROR_NO_DATA_XFER		0x05
     91 #define	I2O_STATUS_ERROR_PARTIAL_XFER		0x06
     92 #define	I2O_STATUS_PROCESS_ABORT_DIRTY        	0x08
     93 #define	I2O_STATUS_PROCESS_ABORT_NO_DATA_XFER	0x09
     94 #define	I2O_STATUS_PROCESS_ABORT_PARTIAL_XFER	0x0a
     95 #define	I2O_STATUS_TRANSACTION_ERROR		0x0b
     96 #define	I2O_STATUS_PROGRESS_REPORT		0x80
     97 
     98 /* Detailed status codes */
     99 #define	I2O_DSC_SUCCESS				0x00
    100 #define	I2O_DSC_BAD_KEY				0x02
    101 #define	I2O_DSC_TCL_ERROR			0x03
    102 #define	I2O_DSC_REPLY_BUFFER_FULL		0x04
    103 #define	I2O_DSC_NO_SUCH_PAGE			0x05
    104 #define	I2O_DSC_INSUFFICIENT_RESOURCE_SOFT	0x06
    105 #define	I2O_DSC_INSUFFICIENT_RESOURCE_HARD	0x07
    106 #define	I2O_DSC_CHAIN_BUFFER_TOO_LARGE		0x09
    107 #define	I2O_DSC_UNSUPPORTED_FUNCTION		0x0a
    108 #define	I2O_DSC_DEVICE_LOCKED			0x0b
    109 #define	I2O_DSC_DEVICE_RESET			0x0c
    110 #define	I2O_DSC_INAPPROPRIATE_FUNCTION		0x0d
    111 #define	I2O_DSC_INVALID_INITIATOR_ADDRESS	0x0e
    112 #define	I2O_DSC_INVALID_MESSAGE_FLAGS		0x0f
    113 #define	I2O_DSC_INVALID_OFFSET			0x10
    114 #define	I2O_DSC_INVALID_PARAMETER		0x11
    115 #define	I2O_DSC_INVALID_REQUEST			0x12
    116 #define	I2O_DSC_INVALID_TARGET_ADDRESS		0x13
    117 #define	I2O_DSC_MESSAGE_TOO_LARGE		0x14
    118 #define	I2O_DSC_MESSAGE_TOO_SMALL		0x15
    119 #define	I2O_DSC_MISSING_PARAMETER		0x16
    120 #define	I2O_DSC_TIMEOUT				0x17
    121 #define	I2O_DSC_UNKNOWN_ERROR			0x18
    122 #define	I2O_DSC_UNKNOWN_FUNCTION		0x19
    123 #define	I2O_DSC_UNSUPPORTED_VERSION		0x1a
    124 #define	I2O_DSC_DEVICE_BUSY			0x1b
    125 #define	I2O_DSC_DEVICE_NOT_AVAILABLE		0x1c
    126 
    127 /* Message versions */
    128 #define	I2O_VERSION_10			0x00
    129 #define	I2O_VERSION_11			0x01
    130 #define	I2O_VERSION_20			0x02
    131 
    132 /* Commonly used TIDs */
    133 #define	I2O_TID_IOP			0
    134 #define	I2O_TID_HOST			1
    135 #define	I2O_TID_NONE			4095
    136 
    137 /* SGL flags.  This list covers only a fraction of the possibilities. */
    138 #define	I2O_SGL_IGNORE			0x00000000
    139 #define	I2O_SGL_SIMPLE			0x10000000
    140 #define	I2O_SGL_PAGE_LIST		0x20000000
    141 
    142 #define	I2O_SGL_BC_32BIT		0x01000000
    143 #define	I2O_SGL_BC_64BIT		0x02000000
    144 #define	I2O_SGL_BC_96BIT		0x03000000
    145 #define	I2O_SGL_DATA_OUT		0x04000000
    146 #define	I2O_SGL_END_BUFFER		0x40000000
    147 #define	I2O_SGL_END			0x80000000
    148 
    149 /* Serial number formats */
    150 #define	I2O_SNFMT_UNKNOWN		0
    151 #define	I2O_SNFMT_BINARY		1
    152 #define	I2O_SNFMT_ASCII			2
    153 #define	I2O_SNFMT_UNICODE		3
    154 #define	I2O_SNFMT_LAN_MAC		4
    155 #define	I2O_SNFMT_WAN_MAC		5
    156 
    157 /*
    158  * ================= Common structures =================
    159  */
    160 
    161 /*
    162  * Standard I2O message frame.  All message frames begin with this.
    163  *
    164  * Bits  Field          Meaning
    165  * ----  -------------  ----------------------------------------------------
    166  * 0-2   msgflags       Message header version. Must be 001 (little endian).
    167  * 3     msgflags	Reserved.
    168  * 4-7   msgflags       Offset to SGLs expressed as # of 32-bit words.
    169  * 8-15  msgflags       Control flags.
    170  * 16-31 msgflags       Message frame size expressed as # of 32-bit words.
    171  * 0-11  msgfunc	TID of target.
    172  * 12-23 msgfunc        TID of initiator.
    173  * 24-31 msgfunc        Function (i.e., type of message).
    174  */
    175 struct i2o_msg {
    176 	u_int32_t	msgflags;
    177 	u_int32_t	msgfunc;
    178 	u_int32_t	msgictx;	/* Initiator context */
    179 	u_int32_t	msgtctx;	/* Transaction context */
    180 
    181 	/* Message payload */
    182 
    183 } __packed;
    184 
    185 #define	I2O_MSGFLAGS_STATICMF		0x0100
    186 #define	I2O_MSGFLAGS_64BIT		0x0200
    187 #define	I2O_MSGFLAGS_MULTI		0x1000
    188 #define	I2O_MSGFLAGS_FAIL		0x2000
    189 #define	I2O_MSGFLAGS_LAST_REPLY		0x4000
    190 #define	I2O_MSGFLAGS_REPLY		0x8000
    191 
    192 /*
    193  * Standard reply frame.  msgflags, msgfunc, msgictx and msgtctx have the
    194  * same meaning as in `struct i2o_msg'.
    195  */
    196 struct i2o_reply {
    197 	u_int32_t	msgflags;
    198 	u_int32_t	msgfunc;
    199 	u_int32_t	msgictx;
    200 	u_int32_t	msgtctx;
    201 	u_int16_t	detail;		/* Detailed status code */
    202 	u_int8_t	reserved;
    203 	u_int8_t	reqstatus;	/* Request status code */
    204 
    205 	/* Reply payload */
    206 
    207 } __packed;
    208 
    209 /*
    210  * Fault notification reply, returned when a message frame can not be
    211  * processed (i.e I2O_MSGFLAGS_FAIL is set in the reply).
    212  */
    213 struct i2o_fault_notify {
    214 	u_int32_t	msgflags;
    215 	u_int32_t	msgfunc;
    216 	u_int32_t	msgictx;
    217 	u_int32_t	msgtctx;	/* Not valid! */
    218 	u_int8_t	lowestver;
    219 	u_int8_t	highestver;
    220 	u_int8_t	severity;
    221 	u_int8_t	failurecode;
    222 	u_int16_t	failingiop;	/* Bits 0-12 only */
    223 	u_int16_t	failinghostunit;
    224 	u_int32_t	agelimit;
    225 	u_int32_t	lowmfa;
    226 	u_int32_t	highmfa;
    227 };
    228 
    229 /*
    230  * Hardware resource table.  Not documented here.
    231  */
    232 struct i2o_hrt_entry {
    233 	u_int32_t	adapterid;
    234 	u_int16_t	controllingtid;
    235 	u_int8_t	busnumber;
    236 	u_int8_t	bustype;
    237 	u_int8_t	businfo[8];
    238 } __packed;
    239 
    240 struct i2o_hrt {
    241 	u_int16_t	numentries;
    242 	u_int8_t	entrysize;
    243 	u_int8_t	hrtversion;
    244 	u_int32_t	changeindicator;
    245 	struct i2o_hrt_entry	entry[1];
    246 } __packed;
    247 
    248 /*
    249  * Logical configuration table entry.  Bitfields are broken down as follows:
    250  *
    251  * Bits   Field           Meaning
    252  * -----  --------------  ---------------------------------------------------
    253  *  0-11  classid         Class ID.
    254  * 12-15  classid         Class version.
    255  *  0-11  usertid         User TID
    256  * 12-23  usertid         Parent TID.
    257  * 24-31  usertid         BIOS info.
    258  */
    259 struct i2o_lct_entry {
    260 	u_int16_t	entrysize;
    261 	u_int16_t	localtid;		/* Bits 0-12 only */
    262 	u_int32_t	changeindicator;
    263 	u_int32_t	deviceflags;
    264 	u_int16_t	classid;
    265 	u_int16_t	orgid;
    266 	u_int32_t	subclassinfo;
    267 	u_int32_t	usertid;
    268 	u_int8_t	identitytag[8];
    269 	u_int32_t	eventcaps;
    270 } __packed;
    271 
    272 /*
    273  * Logical configuration table header.
    274  */
    275 struct i2o_lct {
    276 	u_int16_t	tablesize;
    277 	u_int16_t	flags;
    278 	u_int32_t	iopflags;
    279 	u_int32_t	changeindicator;
    280 	struct i2o_lct_entry	entry[1];
    281 } __packed;
    282 
    283 /*
    284  * IOP system table.  Bitfields are broken down as follows:
    285  *
    286  * Bits   Field           Meaning
    287  * -----  --------------  ---------------------------------------------------
    288  *  0-11  iopid           IOP ID.
    289  * 12-31  iopid           Reserved.
    290  *  0-11  segnumber       Segment number.
    291  * 12-15  segnumber       I2O version.
    292  * 16-23  segnumber       IOP state.
    293  * 24-31  segnumber       Messenger type.
    294  */
    295 struct i2o_systab_entry {
    296 	u_int16_t	orgid;
    297 	u_int16_t	reserved0;
    298 	u_int32_t	iopid;
    299 	u_int32_t	segnumber;
    300 	u_int16_t	inboundmsgframesize;
    301 	u_int16_t	reserved1;
    302 	u_int32_t	lastchanged;
    303 	u_int32_t	iopcaps;
    304 	u_int32_t	inboundmsgportaddresslow;
    305 	u_int32_t	inboundmsgportaddresshigh;
    306 } __packed;
    307 
    308 struct i2o_systab {
    309 	u_int8_t	numentries;
    310 	u_int8_t	version;
    311 	u_int16_t	reserved0;
    312 	u_int32_t	changeindicator;
    313 	u_int32_t	reserved1[2];
    314 	struct	i2o_systab_entry entry[1];
    315 } __packed;
    316 
    317 /*
    318  * IOP status record.  Bitfields are broken down as follows:
    319  *
    320  * Bits   Field           Meaning
    321  * -----  --------------  ---------------------------------------------------
    322  *  0-11  iopid           IOP ID.
    323  * 12-15  iopid           Reserved.
    324  * 16-31  iopid           Host unit ID.
    325  *  0-11  segnumber       Segment number.
    326  * 12-15  segnumber       I2O version.
    327  * 16-23  segnumber       IOP state.
    328  * 24-31  segnumber       Messenger type.
    329  */
    330 struct i2o_status {
    331 	u_int16_t	orgid;
    332 	u_int16_t	reserved0;
    333 	u_int32_t	iopid;
    334 	u_int32_t	segnumber;
    335 	u_int16_t	inboundmframesize;
    336 	u_int8_t	initcode;
    337 	u_int8_t	reserved1;
    338 	u_int32_t	maxinboundmframes;
    339 	u_int32_t	currentinboundmframes;
    340 	u_int32_t	maxoutboundmframes;
    341 	u_int8_t	productid[24];
    342 	u_int32_t	expectedlctsize;
    343 	u_int32_t	iopcaps;
    344 	u_int32_t	desiredprivmemsize;
    345 	u_int32_t	currentprivmemsize;
    346 	u_int32_t	currentprivmembase;
    347 	u_int32_t	desiredpriviosize;
    348 	u_int32_t	currentpriviosize;
    349 	u_int32_t	currentpriviobase;
    350 	u_int8_t	reserved2[3];
    351 	u_int8_t	syncbyte;
    352 } __packed;
    353 
    354 #define	I2O_IOP_STATE_INITIALIZING		0x01
    355 #define	I2O_IOP_STATE_RESET			0x02
    356 #define	I2O_IOP_STATE_HOLD			0x04
    357 #define	I2O_IOP_STATE_READY			0x05
    358 #define	I2O_IOP_STATE_OPERATIONAL		0x08
    359 #define	I2O_IOP_STATE_FAILED			0x10
    360 #define	I2O_IOP_STATE_FAULTED			0x11
    361 
    362 /*
    363  * ================= Executive class messages =================
    364  */
    365 
    366 #define	I2O_EXEC_STATUS_GET		0xa0
    367 struct i2o_exec_status_get {
    368 	u_int32_t	msgflags;
    369 	u_int32_t	msgfunc;
    370 	u_int32_t	reserved[4];
    371 	u_int32_t	addrlow;
    372 	u_int32_t	addrhigh;
    373 	u_int32_t	length;
    374 } __packed;
    375 
    376 #define	I2O_EXEC_OUTBOUND_INIT		0xa1
    377 struct i2o_exec_outbound_init {
    378 	u_int32_t	msgflags;
    379 	u_int32_t	msgfunc;
    380 	u_int32_t	msgictx;
    381 	u_int32_t	msgtctx;
    382 	u_int32_t	pagesize;
    383 	u_int32_t	flags;		/* init code, outbound msg size */
    384 } __packed;
    385 
    386 #define	I2O_EXEC_OUTBOUND_INIT_IN_PROGRESS	1
    387 #define	I2O_EXEC_OUTBOUND_INIT_REJECTED		2
    388 #define	I2O_EXEC_OUTBOUND_INIT_FAILED		3
    389 #define	I2O_EXEC_OUTBOUND_INIT_COMPLETE		4
    390 
    391 #define	I2O_EXEC_LCT_NOTIFY		0xa2
    392 struct i2o_exec_lct_notify {
    393 	u_int32_t	msgflags;
    394 	u_int32_t	msgfunc;
    395 	u_int32_t	msgictx;
    396 	u_int32_t	msgtctx;
    397 	u_int32_t	classid;
    398 	u_int32_t	changeindicator;
    399 } __packed;
    400 
    401 #define	I2O_EXEC_SYS_TAB_SET		0xa3
    402 struct i2o_exec_sys_tab_set {
    403 	u_int32_t	msgflags;
    404 	u_int32_t	msgfunc;
    405 	u_int32_t	msgictx;
    406 	u_int32_t	msgtctx;
    407 	u_int32_t	iopid;
    408 	u_int32_t	segnumber;
    409 } __packed;
    410 
    411 #define	I2O_EXEC_HRT_GET		0xa8
    412 struct i2o_exec_hrt_get {
    413 	u_int32_t	msgflags;
    414 	u_int32_t	msgfunc;
    415 	u_int32_t	msgictx;
    416 	u_int32_t	msgtctx;
    417 } __packed;
    418 
    419 #define	I2O_EXEC_IOP_RESET		0xbd
    420 struct i2o_exec_iop_reset {
    421 	u_int32_t	msgflags;
    422 	u_int32_t	msgfunc;
    423 	u_int32_t	reserved[4];
    424 	u_int32_t	statuslow;
    425 	u_int32_t	statushigh;
    426 } __packed;
    427 
    428 #define	I2O_RESET_IN_PROGRESS		0x01
    429 #define	I2O_RESET_REJECTED		0x02
    430 
    431 /*
    432  * ================= Executive class parameter groups =================
    433  */
    434 
    435 #define	I2O_PARAM_EXEC_LCT_SCALAR	0x0101
    436 #define	I2O_PARAM_EXEC_LCT_TABLE	0x0102
    437 
    438 /*
    439  * ================= HBA class messages =================
    440  */
    441 
    442 #define	I2O_HBA_BUS_SCAN		0x89
    443 struct i2o_hba_bus_scan {
    444 	u_int32_t	msgflags;
    445 	u_int32_t	msgfunc;
    446 	u_int32_t	msgictx;
    447 	u_int32_t	msgtctx;
    448 } __packed;
    449 
    450 /*
    451  * ================= HBA class parameter groups =================
    452  */
    453 
    454 #define	I2O_PARAM_HBA_CTLR_INFO		0x0000
    455 struct i2o_param_hba_ctlr_info {
    456 	u_int8_t	bustype;
    457 	u_int8_t	busstate;
    458 	u_int16_t	reserved;
    459 	u_int8_t	busname[12];
    460 } __packed;
    461 
    462 #define	I2O_HBA_BUS_GENERIC		0x00
    463 #define	I2O_HBA_BUS_SCSI		0x01
    464 #define	I2O_HBA_BUS_FCA			0x10
    465 
    466 #define	I2O_PARAM_HBA_SCSI_PORT_INFO	0x0001
    467 struct i2o_param_hba_scsi_port_info {
    468 	u_int8_t	physicalif;
    469 	u_int8_t	electricalif;
    470 	u_int8_t	isosynchonrous;
    471 	u_int8_t	connectortype;
    472 	u_int8_t	connectorgender;
    473 	u_int8_t	reserved1;
    474 	u_int16_t	reserved2;
    475 	u_int32_t	maxnumberofdevices;
    476 } __packed;
    477 
    478 #define	I2O_PARAM_HBA_SCSI_PORT_GENERIC	0x01
    479 #define	I2O_PARAM_HBA_SCSI_PORT_UNKNOWN	0x02
    480 #define	I2O_PARAM_HBA_SCSI_PORT_PARINTF	0x03
    481 #define	I2O_PARAM_HBA_SCSI_PORT_FCL	0x04
    482 #define	I2O_PARAM_HBA_SCSI_PORT_1394	0x05
    483 #define	I2O_PARAM_HBA_SCSI_PORT_SSA	0x06
    484 
    485 #define	I2O_PARAM_HBA_SCSI_PORT_SE	0x03
    486 #define	I2O_PARAM_HBA_SCSI_PORT_DIFF	0x04
    487 #define	I2O_PARAM_HBA_SCSI_PORT_LVD	0x05
    488 #define	I2O_PARAM_HBA_SCSI_PORT_OPTCL	0x06
    489 
    490 #define	I2O_PARAM_HBA_SCSI_PORT_HDBS50	0x04
    491 #define	I2O_PARAM_HBA_SCSI_PORT_HDBU50	0x05
    492 #define	I2O_PARAM_HBA_SCSI_PORT_DBS50	0x06
    493 #define	I2O_PARAM_HBA_SCSI_PORT_DBU50	0x07
    494 #define	I2O_PARAM_HBA_SCSI_PORT_HDBS68	0x08
    495 #define	I2O_PARAM_HBA_SCSI_PORT_HDBU68	0x09
    496 #define	I2O_PARAM_HBA_SCSI_PORT_SCA1	0x0a
    497 #define	I2O_PARAM_HBA_SCSI_PORT_SCA2	0x0b
    498 #define	I2O_PARAM_HBA_SCSI_PORT_FCDB9	0x0c
    499 #define	I2O_PARAM_HBA_SCSI_PORT_FC	0x0d
    500 #define	I2O_PARAM_HBA_SCSI_PORT_FCSCA40	0x0e
    501 #define	I2O_PARAM_HBA_SCSI_PORT_FCSCA20	0x0f
    502 #define	I2O_PARAM_HBA_SCSI_PORT_FCBNC	0x10
    503 
    504 #define	I2O_PARAM_HBA_SCSI_PORT_FEMALE	0x03
    505 #define	I2O_PARAM_HBA_SCSI_PORT_MALE	0x04
    506 
    507 #define	I2O_PARAM_HBA_SCSI_CTLR_INFO	0x0200
    508 struct i2o_param_hba_scsi_ctlr_info {
    509 	u_int8_t	scsitype;
    510 	u_int8_t	protection;
    511 	u_int8_t	settings;
    512 	u_int8_t	reserved;
    513 	u_int32_t	initiatorid;
    514 	u_int64_t	scanlun0only;
    515 	u_int16_t	disabledevice;
    516 	u_int8_t	maxoffset;
    517 	u_int8_t	maxdatawidth;
    518 	u_int64_t	maxsyncrate;
    519 } __packed;
    520 
    521 /*
    522  * ================= Utility messages =================
    523  */
    524 
    525 #define	I2O_UTIL_ABORT			0x01
    526 struct i2o_util_abort {
    527 	u_int32_t	msgflags;
    528 	u_int32_t	msgfunc;
    529 	u_int32_t	msgictx;
    530 	u_int32_t	msgtctx;
    531 	u_int32_t	flags;		/* abort type and function type */
    532 	u_int32_t	tctxabort;
    533 } __packed;
    534 
    535 #define	I2O_UTIL_ABORT_EXACT		0x00000000
    536 #define	I2O_UTIL_ABORT_FUNCTION		0x00010000
    537 #define	I2O_UTIL_ABORT_TRANSACTION	0x00020000
    538 #define	I2O_UTIL_ABORT_WILD		0x00030000
    539 
    540 #define	I2O_UTIL_ABORT_CLEAN		0x00040000
    541 
    542 struct i2o_util_abort_reply {
    543 	u_int32_t	msgflags;
    544 	u_int32_t	msgfunc;
    545 	u_int32_t	msgictx;
    546 	u_int32_t	msgtctx;
    547 	u_int32_t	count;
    548 } __packed;
    549 
    550 #define	I2O_UTIL_PARAMS_SET		0x05
    551 #define	I2O_UTIL_PARAMS_GET		0x06
    552 struct i2o_util_params_op {
    553 	u_int32_t	msgflags;
    554 	u_int32_t	msgfunc;
    555 	u_int32_t	msgictx;
    556 	u_int32_t	msgtctx;
    557 	u_int32_t	flags;
    558 } __packed;
    559 
    560 #define	I2O_PARAMS_OP_FIELD_GET		1
    561 #define	I2O_PARAMS_OP_LIST_GET		2
    562 #define	I2O_PARAMS_OP_MORE_GET		3
    563 #define	I2O_PARAMS_OP_SIZE_GET		4
    564 #define	I2O_PARAMS_OP_TABLE_GET		5
    565 #define	I2O_PARAMS_OP_FIELD_SET		6
    566 #define	I2O_PARAMS_OP_LIST_SET		7
    567 #define	I2O_PARAMS_OP_ROW_ADD		8
    568 #define	I2O_PARAMS_OP_ROW_DELETE	9
    569 #define	I2O_PARAMS_OP_TABLE_CLEAR	10
    570 
    571 struct i2o_param_op_list_header {
    572 	u_int16_t	count;
    573 	u_int16_t	reserved;
    574 } __packed;
    575 
    576 struct i2o_param_op_all_template {
    577 	u_int16_t	operation;
    578 	u_int16_t	group;
    579 	u_int16_t	fieldcount;
    580 	u_int16_t	fields[1];
    581 } __packed;
    582 
    583 struct i2o_param_op_results {
    584 	u_int16_t	count;
    585 	u_int16_t	reserved;
    586 } __packed;
    587 
    588 struct i2o_param_read_results {
    589 	u_int16_t	blocksize;
    590 	u_int8_t	blockstatus;
    591 	u_int8_t	errorinfosize;
    592 } __packed;
    593 
    594 struct i2o_param_table_results {
    595 	u_int16_t	blocksize;
    596 	u_int8_t	blockstatus;
    597 	u_int8_t	errorinfosize;
    598 	u_int16_t	rowcount;
    599 	u_int16_t	moreflag;
    600 } __packed;
    601 
    602 #define	I2O_UTIL_CLAIM			0x09
    603 struct i2o_util_claim {
    604 	u_int32_t	msgflags;
    605 	u_int32_t	msgfunc;
    606 	u_int32_t	msgictx;
    607 	u_int32_t	msgtctx;
    608 	u_int32_t	flags;
    609 } __packed;
    610 
    611 #define	I2O_UTIL_CLAIM_RESET_SENSITIVE		0x00000002
    612 #define	I2O_UTIL_CLAIM_STATE_SENSITIVE		0x00000004
    613 #define	I2O_UTIL_CLAIM_CAPACITY_SENSITIVE	0x00000008
    614 #define	I2O_UTIL_CLAIM_NO_PEER_SERVICE		0x00000010
    615 #define	I2O_UTIL_CLAIM_NO_MANAGEMENT_SERVICE	0x00000020
    616 
    617 #define	I2O_UTIL_CLAIM_PRIMARY_USER		0x01000000
    618 #define	I2O_UTIL_CLAIM_AUTHORIZED_USER		0x02000000
    619 #define	I2O_UTIL_CLAIM_SECONDARY_USER		0x03000000
    620 #define	I2O_UTIL_CLAIM_MANAGEMENT_USER		0x04000000
    621 
    622 #define	I2O_UTIL_CLAIM_RELEASE		0x0b
    623 struct i2o_util_claim_release {
    624 	u_int32_t	msgflags;
    625 	u_int32_t	msgfunc;
    626 	u_int32_t	msgictx;
    627 	u_int32_t	msgtctx;
    628 	u_int32_t	flags;		/* User flags as per I2O_UTIL_CLAIM */
    629 } __packed;
    630 
    631 #define	I2O_UTIL_CLAIM_RELEASE_CONDITIONAL	0x00000001
    632 
    633 #define	I2O_UTIL_CONFIG_DIALOG		0x10
    634 struct i2o_util_config_dialog {
    635 	u_int32_t	msgflags;
    636 	u_int32_t	msgfunc;
    637 	u_int32_t	msgictx;
    638 	u_int32_t	msgtctx;
    639 	u_int32_t	pageno;
    640 } __packed;
    641 
    642 #define	I2O_UTIL_EVENT_REGISTER		0x13
    643 struct i2o_util_event_register {
    644 	u_int32_t	msgflags;
    645 	u_int32_t	msgfunc;
    646 	u_int32_t	msgictx;
    647 	u_int32_t	msgtctx;
    648 	u_int32_t	eventmask;
    649 } __packed;
    650 
    651 struct i2o_util_event_register_reply {
    652 	u_int32_t	msgflags;
    653 	u_int32_t	msgfunc;
    654 	u_int32_t	msgictx;
    655 	u_int32_t	msgtctx;
    656 	u_int32_t	event;
    657 	u_int32_t	eventdata[1];
    658 } __packed;
    659 
    660 /* Generic events. */
    661 #define	I2O_EVENT_GEN_DEVICE_STATE		0x00400000
    662 #define	I2O_EVENT_GEN_VENDOR_EVENT		0x00800000
    663 #define	I2O_EVENT_GEN_FIELD_MODIFIED		0x01000000
    664 #define	I2O_EVENT_GEN_EVENT_MASK_MODIFIED	0x02000000
    665 #define	I2O_EVENT_GEN_DEVICE_RESET		0x04000000
    666 #define	I2O_EVENT_GEN_CAPABILITY_CHANGE		0x08000000
    667 #define	I2O_EVENT_GEN_LOCK_RELEASE		0x10000000
    668 #define	I2O_EVENT_GEN_NEED_CONFIGURATION	0x20000000
    669 #define	I2O_EVENT_GEN_GENERAL_WARNING		0x40000000
    670 #define	I2O_EVENT_GEN_STATE_CHANGE		0x80000000
    671 
    672 /* Executive class events. */
    673 #define	I2O_EVENT_EXEC_RESOURCE_LIMITS		0x00000001
    674 #define	I2O_EVENT_EXEC_CONNECTION_FAIL		0x00000002
    675 #define	I2O_EVENT_EXEC_ADAPTER_FAULT		0x00000004
    676 #define	I2O_EVENT_EXEC_POWER_FAIL		0x00000008
    677 #define	I2O_EVENT_EXEC_RESET_PENDING		0x00000010
    678 #define	I2O_EVENT_EXEC_RESET_IMMINENT		0x00000020
    679 #define	I2O_EVENT_EXEC_HARDWARE_FAIL		0x00000040
    680 #define	I2O_EVENT_EXEC_XCT_CHANGE		0x00000080
    681 #define	I2O_EVENT_EXEC_NEW_LCT_ENTRY		0x00000100
    682 #define	I2O_EVENT_EXEC_MODIFIED_LCT		0x00000200
    683 #define	I2O_EVENT_EXEC_DDM_AVAILIBILITY		0x00000400
    684 
    685 /*
    686  * ================= Utility parameter groups =================
    687  */
    688 
    689 #define	I2O_PARAM_DEVICE_IDENTITY	0xf100
    690 struct i2o_param_device_identity {
    691 	u_int32_t	classid;
    692 	u_int16_t	ownertid;
    693 	u_int16_t	parenttid;
    694 	u_int8_t	vendorinfo[16];
    695 	u_int8_t	productinfo[16];
    696 	u_int8_t	description[16];
    697 	u_int8_t	revlevel[8];
    698 	u_int8_t	snformat;
    699 	u_int8_t	serialnumber[1];
    700 } __packed;
    701 
    702 #define	I2O_PARAM_DDM_IDENTITY		0xf101
    703 struct i2o_param_ddm_identity {
    704 	u_int16_t	ddmtid;
    705 	u_int8_t	name[24];
    706 	u_int8_t	revlevel[8];
    707 	u_int8_t	snformat;
    708 	u_int8_t	serialnumber[12];
    709 } __packed;
    710 
    711 /*
    712  * ================= Block storage class messages =================
    713  */
    714 
    715 #define	I2O_RBS_BLOCK_READ		0x30
    716 struct i2o_rbs_block_read {
    717 	u_int32_t	msgflags;
    718 	u_int32_t	msgfunc;
    719 	u_int32_t	msgictx;
    720 	u_int32_t	msgtctx;
    721 	u_int32_t	flags;		/* flags, time multiplier, read ahead */
    722 	u_int32_t	datasize;
    723 	u_int32_t	lowoffset;
    724 	u_int32_t	highoffset;
    725 } __packed;
    726 
    727 #define	I2O_RBS_BLOCK_READ_NO_RETRY	0x01
    728 #define	I2O_RBS_BLOCK_READ_SOLO		0x02
    729 #define	I2O_RBS_BLOCK_READ_CACHE_READ	0x04
    730 #define	I2O_RBS_BLOCK_READ_PREFETCH	0x08
    731 #define	I2O_RBS_BLOCK_READ_CACHE_ONLY	0x10
    732 
    733 #define	I2O_RBS_BLOCK_WRITE             0x31
    734 struct i2o_rbs_block_write {
    735 	u_int32_t	msgflags;
    736 	u_int32_t	msgfunc;
    737 	u_int32_t	msgictx;
    738 	u_int32_t	msgtctx;
    739 	u_int32_t	flags;		/* flags, time multiplier */
    740 	u_int32_t	datasize;
    741 	u_int32_t	lowoffset;
    742 	u_int32_t	highoffset;
    743 } __packed;
    744 
    745 #define	I2O_RBS_BLOCK_WRITE_NO_RETRY	0x01
    746 #define	I2O_RBS_BLOCK_WRITE_SOLO	0x02
    747 #define	I2O_RBS_BLOCK_WRITE_CACHE_NONE	0x04
    748 #define	I2O_RBS_BLOCK_WRITE_CACHE_WT	0x08
    749 #define	I2O_RBS_BLOCK_WRITE_CACHE_WB	0x10
    750 
    751 #define	I2O_RBS_CACHE_FLUSH             0x37
    752 struct i2o_rbs_cache_flush {
    753 	u_int32_t	msgflags;
    754 	u_int32_t	msgfunc;
    755 	u_int32_t	msgictx;
    756 	u_int32_t	msgtctx;
    757 	u_int32_t	flags;		/* flags, time multiplier */
    758 } __packed;
    759 
    760 #define	I2O_RBS_MEDIA_MOUNT		0x41
    761 struct i2o_rbs_media_mount {
    762 	u_int32_t	msgflags;
    763 	u_int32_t	msgfunc;
    764 	u_int32_t	msgictx;
    765 	u_int32_t	msgtctx;
    766 	u_int32_t	mediaid;
    767 	u_int32_t	loadflags;
    768 } __packed;
    769 
    770 #define	I2O_RBS_MEDIA_EJECT             0x43
    771 struct i2o_rbs_media_eject {
    772 	u_int32_t	msgflags;
    773 	u_int32_t	msgfunc;
    774 	u_int32_t	msgictx;
    775 	u_int32_t	msgtctx;
    776 	u_int32_t	mediaid;
    777 } __packed;
    778 
    779 #define	I2O_RBS_MEDIA_LOCK		0x49
    780 struct i2o_rbs_media_lock {
    781 	u_int32_t	msgflags;
    782 	u_int32_t	msgfunc;
    783 	u_int32_t	msgictx;
    784 	u_int32_t	msgtctx;
    785 	u_int32_t	mediaid;
    786 } __packed;
    787 
    788 #define	I2O_RBS_MEDIA_UNLOCK		0x4b
    789 struct i2o_rbs_media_unlock {
    790 	u_int32_t	msgflags;
    791 	u_int32_t	msgfunc;
    792 	u_int32_t	msgictx;
    793 	u_int32_t	msgtctx;
    794 	u_int32_t	mediaid;
    795 } __packed;
    796 
    797 /* Standard RBS reply frame. */
    798 struct i2o_rbs_reply {
    799 	u_int32_t	msgflags;
    800 	u_int32_t	msgfunc;
    801 	u_int32_t	msgictx;
    802 	u_int32_t	msgtctx;
    803 	u_int16_t	detail;
    804 	u_int8_t	retrycount;
    805 	u_int8_t	reqstatus;
    806 	u_int32_t	transfercount;
    807 	u_int64_t	offset;		/* Error replies only */
    808 } __packed;
    809 
    810 /*
    811  * ================= Block storage class parameter groups =================
    812  */
    813 
    814 #define	I2O_PARAM_RBS_DEVICE_INFO	0x0000
    815 struct i2o_param_rbs_device_info {
    816 	u_int8_t	type;
    817 	u_int8_t	npaths;
    818 	u_int16_t	powerstate;
    819 	u_int32_t	blocksize;
    820 	u_int64_t	capacity;
    821 	u_int32_t	capabilities;
    822 	u_int32_t	state;
    823 } __packed;
    824 
    825 #define	I2O_RBS_TYPE_DIRECT		0x00
    826 #define	I2O_RBS_TYPE_WORM		0x04
    827 #define	I2O_RBS_TYPE_CDROM		0x05
    828 #define	I2O_RBS_TYPE_OPTICAL		0x07
    829 
    830 #define	I2O_RBS_CAP_CACHING		0x00000001
    831 #define	I2O_RBS_CAP_MULTI_PATH		0x00000002
    832 #define	I2O_RBS_CAP_DYNAMIC_CAPACITY	0x00000004
    833 #define	I2O_RBS_CAP_REMOVABLE_MEDIA	0x00000008
    834 #define	I2O_RBS_CAP_REMOVABLE_DEVICE	0x00000010
    835 #define	I2O_RBS_CAP_READ_ONLY		0x00000020
    836 #define	I2O_RBS_CAP_LOCKOUT		0x00000040
    837 #define	I2O_RBS_CAP_BOOT_BYPASS		0x00000080
    838 #define	I2O_RBS_CAP_COMPRESSION		0x00000100
    839 #define	I2O_RBS_CAP_DATA_SECURITY	0x00000200
    840 #define	I2O_RBS_CAP_RAID		0x00000400
    841 
    842 #define	I2O_RBS_STATE_CACHING		0x00000001
    843 #define	I2O_RBS_STATE_POWERED_ON	0x00000002
    844 #define	I2O_RBS_STATE_READY		0x00000004
    845 #define	I2O_RBS_STATE_MEDIA_LOADED	0x00000008
    846 #define	I2O_RBS_STATE_DEVICE_LOADED	0x00000010
    847 #define	I2O_RBS_STATE_READ_ONLY		0x00000020
    848 #define	I2O_RBS_STATE_LOCKOUT		0x00000040
    849 #define	I2O_RBS_STATE_BOOT_BYPASS	0x00000080
    850 #define	I2O_RBS_STATE_COMPRESSION	0x00000100
    851 #define	I2O_RBS_STATE_DATA_SECURITY	0x00000200
    852 #define	I2O_RBS_STATE_RAID		0x00000400
    853 
    854 #define	I2O_PARAM_RBS_OPERATION		0x0001
    855 struct i2o_param_rbs_operation {
    856 	u_int8_t	autoreass;
    857 	u_int8_t	reasstolerance;
    858 	u_int8_t	numretries;
    859 	u_int8_t	reserved0;
    860 	u_int32_t	reasssize;
    861 	u_int32_t	expectedtimeout;
    862 	u_int32_t	rwvtimeout;
    863 	u_int32_t	rwvtimeoutbase;
    864 	u_int32_t	timeoutbase;
    865 	u_int32_t	orderedreqdepth;
    866 	u_int32_t	atomicwritesize;
    867 } __packed;
    868 
    869 #define	I2O_PARAM_RBS_OPERATION_autoreass		0
    870 #define	I2O_PARAM_RBS_OPERATION_reasstolerance		1
    871 #define	I2O_PARAM_RBS_OPERATION_numretries		2
    872 #define	I2O_PARAM_RBS_OPERATION_reserved0		3
    873 #define	I2O_PARAM_RBS_OPERATION_reasssize		4
    874 #define	I2O_PARAM_RBS_OPERATION_expectedtimeout		5
    875 #define	I2O_PARAM_RBS_OPERATION_rwvtimeout		6
    876 #define	I2O_PARAM_RBS_OPERATION_rwvtimeoutbase		7
    877 #define	I2O_PARAM_RBS_OPERATION_timeoutbase		8
    878 #define	I2O_PARAM_RBS_OPERATION_orderedreqdepth		9
    879 #define	I2O_PARAM_RBS_OPERATION_atomicwritesize		10
    880 
    881 #define	I2O_PARAM_RBS_CACHE_CONTROL	0x0003
    882 struct i2o_param_rbs_cache_control {
    883 	u_int32_t	totalcachesize;
    884 	u_int32_t	readcachesize;
    885 	u_int32_t	writecachesize;
    886 	u_int8_t	writepolicy;
    887 	u_int8_t	readpolicy;
    888 	u_int8_t	errorcorrection;
    889 	u_int8_t	reserved;
    890 } __packed;
    891 
    892 /*
    893  * ================= SCSI peripheral class messages =================
    894  */
    895 
    896 #define	I2O_SCSI_DEVICE_RESET		0x27
    897 struct i2o_scsi_device_reset {
    898 	u_int32_t	msgflags;
    899 	u_int32_t	msgfunc;
    900 	u_int32_t	msgictx;
    901 	u_int32_t	msgtctx;
    902 } __packed;
    903 
    904 #define	I2O_SCSI_SCB_EXEC		0x81
    905 struct i2o_scsi_scb_exec {
    906 	u_int32_t	msgflags;
    907 	u_int32_t	msgfunc;
    908 	u_int32_t	msgictx;
    909 	u_int32_t	msgtctx;
    910 	u_int32_t	flags;		/* CDB length and flags */
    911 	u_int8_t	cdb[16];
    912 	u_int32_t	datalen;
    913 } __packed;
    914 
    915 #define	I2O_SCB_FLAG_SENSE_DATA_IN_MESSAGE  0x00200000
    916 #define	I2O_SCB_FLAG_SENSE_DATA_IN_BUFFER   0x00600000
    917 #define	I2O_SCB_FLAG_SIMPLE_QUEUE_TAG       0x00800000
    918 #define	I2O_SCB_FLAG_HEAD_QUEUE_TAG         0x01000000
    919 #define	I2O_SCB_FLAG_ORDERED_QUEUE_TAG      0x01800000
    920 #define	I2O_SCB_FLAG_ACA_QUEUE_TAG          0x02000000
    921 #define	I2O_SCB_FLAG_ENABLE_DISCONNECT      0x20000000
    922 #define	I2O_SCB_FLAG_XFER_FROM_DEVICE       0x40000000
    923 #define	I2O_SCB_FLAG_XFER_TO_DEVICE         0x80000000
    924 
    925 #define	I2O_SCSI_SCB_ABORT		0x83
    926 struct i2o_scsi_scb_abort {
    927 	u_int32_t	msgflags;
    928 	u_int32_t	msgfunc;
    929 	u_int32_t	msgictx;
    930 	u_int32_t	msgtctx;
    931 	u_int32_t	tctxabort;
    932 } __packed;
    933 
    934 struct i2o_scsi_reply {
    935 	u_int32_t	msgflags;
    936 	u_int32_t	msgfunc;
    937 	u_int32_t	msgictx;
    938 	u_int32_t	msgtctx;
    939 	u_int8_t	scsistatus;
    940 	u_int8_t	hbastatus;
    941 	u_int8_t	reserved;
    942 	u_int8_t	reqstatus;
    943 	u_int32_t	datalen;
    944 	u_int32_t	senselen;
    945 	u_int8_t	sense[40];
    946 } __packed;
    947 
    948 #define	I2O_SCSI_DSC_SUCCESS                0x00
    949 #define	I2O_SCSI_DSC_REQUEST_ABORTED        0x02
    950 #define	I2O_SCSI_DSC_UNABLE_TO_ABORT        0x03
    951 #define	I2O_SCSI_DSC_COMPLETE_WITH_ERROR    0x04
    952 #define	I2O_SCSI_DSC_ADAPTER_BUSY           0x05
    953 #define	I2O_SCSI_DSC_REQUEST_INVALID        0x06
    954 #define	I2O_SCSI_DSC_PATH_INVALID           0x07
    955 #define	I2O_SCSI_DSC_DEVICE_NOT_PRESENT     0x08
    956 #define	I2O_SCSI_DSC_UNABLE_TO_TERMINATE    0x09
    957 #define	I2O_SCSI_DSC_SELECTION_TIMEOUT      0x0a
    958 #define	I2O_SCSI_DSC_COMMAND_TIMEOUT        0x0b
    959 #define	I2O_SCSI_DSC_MR_MESSAGE_RECEIVED    0x0d
    960 #define	I2O_SCSI_DSC_SCSI_BUS_RESET         0x0e
    961 #define	I2O_SCSI_DSC_PARITY_ERROR_FAILURE   0x0f
    962 #define	I2O_SCSI_DSC_AUTOSENSE_FAILED       0x10
    963 #define	I2O_SCSI_DSC_NO_ADAPTER             0x11
    964 #define	I2O_SCSI_DSC_DATA_OVERRUN           0x12
    965 #define	I2O_SCSI_DSC_UNEXPECTED_BUS_FREE    0x13
    966 #define	I2O_SCSI_DSC_SEQUENCE_FAILURE       0x14
    967 #define	I2O_SCSI_DSC_REQUEST_LENGTH_ERROR   0x15
    968 #define	I2O_SCSI_DSC_PROVIDE_FAILURE        0x16
    969 #define	I2O_SCSI_DSC_BDR_MESSAGE_SENT       0x17
    970 #define	I2O_SCSI_DSC_REQUEST_TERMINATED     0x18
    971 #define	I2O_SCSI_DSC_IDE_MESSAGE_SENT       0x33
    972 #define	I2O_SCSI_DSC_RESOURCE_UNAVAILABLE   0x34
    973 #define	I2O_SCSI_DSC_UNACKNOWLEDGED_EVENT   0x35
    974 #define	I2O_SCSI_DSC_MESSAGE_RECEIVED       0x36
    975 #define	I2O_SCSI_DSC_INVALID_CDB            0x37
    976 #define	I2O_SCSI_DSC_LUN_INVALID            0x38
    977 #define	I2O_SCSI_DSC_SCSI_TID_INVALID       0x39
    978 #define	I2O_SCSI_DSC_FUNCTION_UNAVAILABLE   0x3a
    979 #define	I2O_SCSI_DSC_NO_NEXUS               0x3b
    980 #define	I2O_SCSI_DSC_SCSI_IID_INVALID       0x3c
    981 #define	I2O_SCSI_DSC_CDB_RECEIVED           0x3d
    982 #define	I2O_SCSI_DSC_LUN_ALREADY_ENABLED    0x3e
    983 #define	I2O_SCSI_DSC_BUS_BUSY               0x3f
    984 #define	I2O_SCSI_DSC_QUEUE_FROZEN           0x40
    985 
    986 /*
    987  * ================= SCSI peripheral class parameter groups =================
    988  */
    989 
    990 #define	I2O_PARAM_SCSI_DEVICE_INFO	0x0000
    991 struct i2o_param_scsi_device_info {
    992 	u_int8_t	devicetype;
    993 	u_int8_t	flags;
    994 	u_int16_t	reserved0;
    995 	u_int32_t	identifier;
    996 	u_int8_t	luninfo[8];
    997 	u_int32_t	queuedepth;
    998 	u_int8_t	reserved1;
    999 	u_int8_t	negoffset;
   1000 	u_int8_t	negdatawidth;
   1001 	u_int8_t	reserved2;
   1002 	u_int64_t	negsyncrate;
   1003 } __packed;
   1004 
   1005 #endif	/* !defined _I2O_I2O_H_ */
   1006