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