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