xref: /freebsd/sys/dev/pst/pst-iop.h (revision 718cf2cc)
127da7e6fSSøren Schmidt /*-
2718cf2ccSPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
3718cf2ccSPedro F. Giffuni  *
49a14aa01SUlrich Spörlein  * Copyright (c) 2001,2002,2003 Søren Schmidt <sos@FreeBSD.org>
527da7e6fSSøren Schmidt  * All rights reserved.
627da7e6fSSøren Schmidt  *
727da7e6fSSøren Schmidt  * Redistribution and use in source and binary forms, with or without
827da7e6fSSøren Schmidt  * modification, are permitted provided that the following conditions
927da7e6fSSøren Schmidt  * are met:
1027da7e6fSSøren Schmidt  * 1. Redistributions of source code must retain the above copyright
1127da7e6fSSøren Schmidt  *    notice, this list of conditions and the following disclaimer,
1227da7e6fSSøren Schmidt  *    without modification, immediately at the beginning of the file.
1327da7e6fSSøren Schmidt  * 2. Redistributions in binary form must reproduce the above copyright
1427da7e6fSSøren Schmidt  *    notice, this list of conditions and the following disclaimer in the
1527da7e6fSSøren Schmidt  *    documentation and/or other materials provided with the distribution.
1627da7e6fSSøren Schmidt  * 3. The name of the author may not be used to endorse or promote products
1727da7e6fSSøren Schmidt  *    derived from this software without specific prior written permission.
1827da7e6fSSøren Schmidt  *
1927da7e6fSSøren Schmidt  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2027da7e6fSSøren Schmidt  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2127da7e6fSSøren Schmidt  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2227da7e6fSSøren Schmidt  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2327da7e6fSSøren Schmidt  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2427da7e6fSSøren Schmidt  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2527da7e6fSSøren Schmidt  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2627da7e6fSSøren Schmidt  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2727da7e6fSSøren Schmidt  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2827da7e6fSSøren Schmidt  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2927da7e6fSSøren Schmidt  *
3027da7e6fSSøren Schmidt  * $FreeBSD$
3127da7e6fSSøren Schmidt  */
3227da7e6fSSøren Schmidt 
3327da7e6fSSøren Schmidt /* misc defines */
3427da7e6fSSøren Schmidt MALLOC_DECLARE(M_PSTIOP);
3527da7e6fSSøren Schmidt #define I2O_IOP_OUTBOUND_FRAME_COUNT	32
3627da7e6fSSøren Schmidt #define I2O_IOP_OUTBOUND_FRAME_SIZE	0x20
3727da7e6fSSøren Schmidt 
3827da7e6fSSøren Schmidt /* structure defs */
3927da7e6fSSøren Schmidt struct out_mfa_buf {
4027da7e6fSSøren Schmidt     u_int32_t	buf[I2O_IOP_OUTBOUND_FRAME_SIZE];
4127da7e6fSSøren Schmidt };
4227da7e6fSSøren Schmidt 
4327da7e6fSSøren Schmidt struct iop_softc {
4427da7e6fSSøren Schmidt     struct resource		*r_mem;
4527da7e6fSSøren Schmidt     struct resource		*r_irq;
4627da7e6fSSøren Schmidt     caddr_t			ibase;
4727da7e6fSSøren Schmidt     caddr_t			obase;
4827da7e6fSSøren Schmidt     u_int32_t			phys_obase;
4927da7e6fSSøren Schmidt     struct i2o_registers	*reg;
5027da7e6fSSøren Schmidt     struct i2o_status_get_reply	*status;
5127da7e6fSSøren Schmidt     int				lct_count;
5227da7e6fSSøren Schmidt     struct i2o_lct_entry	*lct;
53ac9953bfSSøren Schmidt     int				ism;
5427da7e6fSSøren Schmidt     device_t			dev;
55ac9953bfSSøren Schmidt     struct mtx			mtx;
56ac9953bfSSøren Schmidt     int				outstanding;
5727da7e6fSSøren Schmidt     void			*handle;
5827da7e6fSSøren Schmidt     struct intr_config_hook	*iop_delayed_attach;
5927da7e6fSSøren Schmidt };
6027da7e6fSSøren Schmidt 
6127da7e6fSSøren Schmidt /* structure at start of IOP shared mem */
6227da7e6fSSøren Schmidt struct i2o_registers {
6327da7e6fSSøren Schmidt     volatile u_int32_t	apic_select;
6427da7e6fSSøren Schmidt     volatile u_int32_t	reserved0;
6527da7e6fSSøren Schmidt     volatile u_int32_t	apic_winreg;
6627da7e6fSSøren Schmidt     volatile u_int32_t	reserved1;
6727da7e6fSSøren Schmidt     volatile u_int32_t	iqueue_reg0;
6827da7e6fSSøren Schmidt     volatile u_int32_t	iqueue_reg1;
6927da7e6fSSøren Schmidt     volatile u_int32_t	oqueue_reg0;
7027da7e6fSSøren Schmidt     volatile u_int32_t	oqueue_reg1;
7127da7e6fSSøren Schmidt     volatile u_int32_t	iqueue_event;
7227da7e6fSSøren Schmidt     volatile u_int32_t	iqueue_intr_status;
7327da7e6fSSøren Schmidt     volatile u_int32_t	iqueue_intr_mask;
7427da7e6fSSøren Schmidt     volatile u_int32_t	oqueue_event;
7527da7e6fSSøren Schmidt     volatile u_int32_t	oqueue_intr_status;
7627da7e6fSSøren Schmidt     volatile u_int32_t	oqueue_intr_mask;
7727da7e6fSSøren Schmidt #define I2O_OUT_INTR_QUEUE				0x08
7827da7e6fSSøren Schmidt #define I2O_OUT_INTR_BELL				0x04
7927da7e6fSSøren Schmidt #define I2O_OUT_INTR_MSG1				0x02
8027da7e6fSSøren Schmidt #define I2O_OUT_INTR_MSG0				0x01
8127da7e6fSSøren Schmidt 
8227da7e6fSSøren Schmidt     volatile u_int64_t	reserved2;
8327da7e6fSSøren Schmidt     volatile u_int32_t	iqueue;
8427da7e6fSSøren Schmidt     volatile u_int32_t	oqueue;
8527da7e6fSSøren Schmidt     volatile u_int64_t	reserved3;
8627da7e6fSSøren Schmidt     volatile u_int64_t	mac_addr;
8727da7e6fSSøren Schmidt     volatile u_int32_t	ip_addr;
8827da7e6fSSøren Schmidt     volatile u_int32_t	ip_mask;
8927da7e6fSSøren Schmidt };
9027da7e6fSSøren Schmidt 
9127da7e6fSSøren Schmidt /* Scatter/Gather List management  */
9227da7e6fSSøren Schmidt struct i2o_sgl {
9327da7e6fSSøren Schmidt     u_int32_t		count:24;
9427da7e6fSSøren Schmidt #define I2O_SGL_CNT_MASK				0xffffff
9527da7e6fSSøren Schmidt 
9627da7e6fSSøren Schmidt     u_int32_t		flags:8;
9727da7e6fSSøren Schmidt #define I2O_SGL_SIMPLE					0x10
9827da7e6fSSøren Schmidt #define I2O_SGL_PAGELIST				0x20
9927da7e6fSSøren Schmidt #define I2O_SGL_CHAIN					0x30
10027da7e6fSSøren Schmidt #define I2O_SGL_ATTRIBUTE				0x7c
10127da7e6fSSøren Schmidt #define I2O_SGL_BC0					0x01
10227da7e6fSSøren Schmidt #define I2O_SGL_BC1					0x02
10327da7e6fSSøren Schmidt #define I2O_SGL_DIR					0x04
10427da7e6fSSøren Schmidt #define I2O_SGL_LA					0x08
10527da7e6fSSøren Schmidt #define I2O_SGL_EOB					0x40
10627da7e6fSSøren Schmidt #define I2O_SGL_END					0x80
10727da7e6fSSøren Schmidt 
10827da7e6fSSøren Schmidt     u_int32_t		phys_addr[1];
1094f492bfaSAlfred Perlstein } __packed;
11027da7e6fSSøren Schmidt 
11127da7e6fSSøren Schmidt #define I2O_SGL_MAX_SEGS	((I2O_IOP_OUTBOUND_FRAME_SIZE - (8 + 2)) + 1)
11227da7e6fSSøren Schmidt 
11327da7e6fSSøren Schmidt /* i2o command codes */
11427da7e6fSSøren Schmidt #define I2O_UTIL_NOP					0x00
11527da7e6fSSøren Schmidt #define I2O_UTIL_PARAMS_GET				0x06
11627da7e6fSSøren Schmidt #define I2O_UTIL_CLAIM					0x09
11727da7e6fSSøren Schmidt #define I2O_UTIL_CONFIG_DIALOG				0x10
11827da7e6fSSøren Schmidt #define I2O_UTIL_EVENT_REGISTER				0x13
11927da7e6fSSøren Schmidt #define I2O_BSA_BLOCK_READ				0x30
12027da7e6fSSøren Schmidt #define I2O_BSA_BLOCK_WRITE				0x31
12127da7e6fSSøren Schmidt #define I2O_BSA_CACHE_FLUSH				0x37
12227da7e6fSSøren Schmidt #define I2O_EXEC_STATUS_GET				0xa0
12327da7e6fSSøren Schmidt #define I2O_EXEC_OUTBOUND_INIT				0xa1
12427da7e6fSSøren Schmidt #define I2O_EXEC_LCT_NOTIFY				0xa2
12527da7e6fSSøren Schmidt #define I2O_EXEC_SYSTAB_SET				0xa3
12627da7e6fSSøren Schmidt #define I2O_EXEC_IOP_RESET				0xbd
12727da7e6fSSøren Schmidt #define I2O_EXEC_SYS_ENABLE				0xd1
128ac9953bfSSøren Schmidt #define I2O_PRIVATE_MESSAGE				0xff
12927da7e6fSSøren Schmidt 
13027da7e6fSSøren Schmidt /* basic message layout */
13127da7e6fSSøren Schmidt struct i2o_basic_message {
13227da7e6fSSøren Schmidt     u_int8_t		version:4;
13327da7e6fSSøren Schmidt     u_int8_t		offset:4;
13427da7e6fSSøren Schmidt     u_int8_t		message_flags;
13527da7e6fSSøren Schmidt     u_int16_t		message_size;
13627da7e6fSSøren Schmidt     u_int32_t		target_address:12;
13727da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
13827da7e6fSSøren Schmidt     u_int32_t		function:8;
13927da7e6fSSøren Schmidt     u_int32_t		initiator_context;
1401652b7bdSSøren Schmidt     u_int32_t		transaction_context;
1414f492bfaSAlfred Perlstein } __packed;
14227da7e6fSSøren Schmidt 
14327da7e6fSSøren Schmidt /* basic reply layout */
14427da7e6fSSøren Schmidt struct i2o_single_reply {
14527da7e6fSSøren Schmidt     u_int8_t		version_offset;
14627da7e6fSSøren Schmidt     u_int8_t		message_flags;
14727da7e6fSSøren Schmidt #define I2O_MESSAGE_FLAGS_STATIC			0x01
14827da7e6fSSøren Schmidt #define I2O_MESSAGE_FLAGS_64BIT				0x02
14927da7e6fSSøren Schmidt #define I2O_MESSAGE_FLAGS_MULTIPLE			0x10
15027da7e6fSSøren Schmidt #define I2O_MESSAGE_FLAGS_FAIL				0x20
15127da7e6fSSøren Schmidt #define I2O_MESSAGE_FLAGS_LAST				0x40
15227da7e6fSSøren Schmidt #define I2O_MESSAGE_FLAGS_REPLY				0x80
15327da7e6fSSøren Schmidt 
15427da7e6fSSøren Schmidt     u_int16_t		message_size;
15527da7e6fSSøren Schmidt     u_int32_t		target_address:12;
15627da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
15727da7e6fSSøren Schmidt     u_int32_t		function:8;
15827da7e6fSSøren Schmidt     u_int32_t		initiator_context;
15927da7e6fSSøren Schmidt     u_int32_t		transaction_context;
16027da7e6fSSøren Schmidt     u_int16_t		detailed_status;
16127da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_SUCCESS			0x0000
16227da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_BAD_KEY			0x0002
16327da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_TCL_ERROR			0x0003
16427da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_REPLY_BUFFER_FULL		0x0004
16527da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_NO_SUCH_PAGE			0x0005
16627da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_SOFT	0x0006
16727da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_HARD	0x0007
16827da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_CHAIN_BUFFER_TOO_LARGE	0x0009
16927da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_UNSUPPORTED_FUNCTION		0x000a
17027da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_DEVICE_LOCKED			0x000b
17127da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_DEVICE_RESET			0x000c
17227da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INAPPROPRIATE_FUNCTION	0x000d
17327da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INVALID_INITIATOR_ADDRESS	0x000e
17427da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INVALID_MESSAGE_FLAGS		0x000f
17527da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INVALID_OFFSET		0x0010
17627da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INVALID_PARAMETER		0x0011
17727da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INVALID_REQUEST		0x0012
17827da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_INVALID_TARGET_ADDRESS	0x0013
17927da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_MESSAGE_TOO_LARGE		0x0014
18027da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_MESSAGE_TOO_SMALL		0x0015
18127da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_MISSING_PARAMETER		0x0016
18227da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_TIMEOUT			0x0017
18327da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_UNKNOWN_ERROR			0x0018
18427da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_UNKNOWN_FUNCTION		0x0019
18527da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_UNSUPPORTED_VERSION		0x001a
18627da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_DEVICE_BUSY			0x001b
18727da7e6fSSøren Schmidt #define I2O_DETAIL_STATUS_DEVICE_NOT_AVAILABLE		0x001c
18827da7e6fSSøren Schmidt 
18927da7e6fSSøren Schmidt     u_int8_t		retry_count;
19027da7e6fSSøren Schmidt     u_int8_t		status;
19127da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_SUCCESS			0x00
19227da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_ABORT_DIRTY			0x01
19327da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER		0x02
19427da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER		0x03
19527da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_ERROR_DIRTY			0x04
19627da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER		0x05
19727da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER		0x06
19827da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY		0x08
19927da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09
20027da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0a
20127da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_TRANSACTION_ERROR		0x0b
20227da7e6fSSøren Schmidt #define I2O_REPLY_STATUS_PROGRESS_REPORT		0x80
20327da7e6fSSøren Schmidt 
20427da7e6fSSøren Schmidt     u_int32_t		donecount;
2054f492bfaSAlfred Perlstein } __packed;
20627da7e6fSSøren Schmidt 
20727da7e6fSSøren Schmidt struct i2o_fault_reply {
20827da7e6fSSøren Schmidt     u_int8_t		version_offset;
20927da7e6fSSøren Schmidt     u_int8_t		message_flags;
21027da7e6fSSøren Schmidt     u_int16_t		message_size;
21127da7e6fSSøren Schmidt     u_int32_t		target_address:12;
21227da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
21327da7e6fSSøren Schmidt     u_int32_t		function:8;
21427da7e6fSSøren Schmidt     u_int32_t		initiator_context;
21527da7e6fSSøren Schmidt     u_int32_t		transaction_context;
21627da7e6fSSøren Schmidt     u_int8_t		lowest_version;
21727da7e6fSSøren Schmidt     u_int8_t		highest_version;
21827da7e6fSSøren Schmidt     u_int8_t		severity;
21927da7e6fSSøren Schmidt #define I2O_SEVERITY_FORMAT_ERROR			0x01
22027da7e6fSSøren Schmidt #define I2O_SEVERITY_PATH_ERROR				0x02
22127da7e6fSSøren Schmidt #define I2O_SEVERITY_PATH_STATE				0x04
22227da7e6fSSøren Schmidt #define I2O_SEVERITY_CONGESTION				0x08
22327da7e6fSSøren Schmidt 
22427da7e6fSSøren Schmidt     u_int8_t		failure_code;
22527da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_SERVICE_SUSPENDED	0x81
22627da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_SERVICE_TERMINATED	0x82
22727da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_CONGESTION		0x83
22827da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_FAIL			0x84
22927da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_STATE_ERROR		0x85
23027da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_TIME_OUT		0x86
23127da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_ROUTING_FAILURE	0x87
23227da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_INVALID_VERSION	0x88
23327da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_INVALID_OFFSET	0x89
23427da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_INVALID_MSG_FLAGS	0x8A
23527da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_FRAME_TOO_SMALL	0x8B
23627da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_FRAME_TOO_LARGE	0x8C
23727da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_INVALID_TARGET_ID	0x8D
23827da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_INVALID_INITIATOR_ID 0x8E
23927da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_INVALID_INITIATOR_CONTEXT	0x8F
24027da7e6fSSøren Schmidt #define I2O_FAILURE_CODE_TRANSPORT_UNKNOWN_FAILURE	0xFF
24127da7e6fSSøren Schmidt 
24227da7e6fSSøren Schmidt     u_int32_t		failing_iop_id:12;
24327da7e6fSSøren Schmidt     u_int32_t		reserved:4;
24427da7e6fSSøren Schmidt     u_int32_t		failing_host_unit_id:16;
24527da7e6fSSøren Schmidt     u_int32_t		age_limit;
24627da7e6fSSøren Schmidt     u_int64_t		preserved_mfa;
2474f492bfaSAlfred Perlstein } __packed;
24827da7e6fSSøren Schmidt 
24927da7e6fSSøren Schmidt struct i2o_exec_iop_reset_message {
25027da7e6fSSøren Schmidt     u_int8_t		version_offset;
25127da7e6fSSøren Schmidt     u_int8_t		message_flags;
25227da7e6fSSøren Schmidt     u_int16_t		message_size;
25327da7e6fSSøren Schmidt     u_int32_t		target_address:12;
25427da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
25527da7e6fSSøren Schmidt     u_int32_t		function:8;
25627da7e6fSSøren Schmidt     u_int8_t		reserved[16];
25727da7e6fSSøren Schmidt     u_int32_t		status_word_low_addr;
25827da7e6fSSøren Schmidt     u_int32_t		status_word_high_addr;
2594f492bfaSAlfred Perlstein } __packed;
26027da7e6fSSøren Schmidt 
26127da7e6fSSøren Schmidt struct i2o_exec_status_get_message {
26227da7e6fSSøren Schmidt     u_int8_t		version_offset;
26327da7e6fSSøren Schmidt     u_int8_t		message_flags;
26427da7e6fSSøren Schmidt     u_int16_t		message_size;
26527da7e6fSSøren Schmidt     u_int32_t		target_address:12;
26627da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
26727da7e6fSSøren Schmidt     u_int32_t		function:8;
26827da7e6fSSøren Schmidt     u_int8_t		reserved[16];
26927da7e6fSSøren Schmidt     u_int32_t		reply_buf_low_addr;
27027da7e6fSSøren Schmidt     u_int32_t		reply_buf_high_addr;
27127da7e6fSSøren Schmidt     u_int32_t		reply_buf_length;
2724f492bfaSAlfred Perlstein } __packed;
27327da7e6fSSøren Schmidt 
27427da7e6fSSøren Schmidt struct i2o_status_get_reply {
27527da7e6fSSøren Schmidt     u_int16_t		organization_id;
27627da7e6fSSøren Schmidt     u_int16_t		reserved;
27727da7e6fSSøren Schmidt     u_int32_t		iop_id:12;
27827da7e6fSSøren Schmidt     u_int32_t		reserved1:4;
27927da7e6fSSøren Schmidt     u_int32_t		host_unit_id:16;
28027da7e6fSSøren Schmidt     u_int32_t		segment_number:12;
28127da7e6fSSøren Schmidt     u_int32_t		i2o_version:4;
28227da7e6fSSøren Schmidt     u_int32_t		iop_state:8;
28327da7e6fSSøren Schmidt #define I2O_IOP_STATE_INITIALIZING			0x01
28427da7e6fSSøren Schmidt #define I2O_IOP_STATE_RESET				0x02
28527da7e6fSSøren Schmidt #define I2O_IOP_STATE_HOLD				0x04
28627da7e6fSSøren Schmidt #define I2O_IOP_STATE_READY				0x05
28727da7e6fSSøren Schmidt #define I2O_IOP_STATE_OPERATIONAL			0x08
28827da7e6fSSøren Schmidt #define I2O_IOP_STATE_FAILED				0x10
28927da7e6fSSøren Schmidt #define I2O_IOP_STATE_FAULTED				0x11
29027da7e6fSSøren Schmidt 
29127da7e6fSSøren Schmidt     u_int32_t		messenger_type:8;
29227da7e6fSSøren Schmidt     u_int16_t		inbound_mframe_size;
29327da7e6fSSøren Schmidt     u_int8_t		init_code;
29427da7e6fSSøren Schmidt     u_int8_t		reserved2;
29527da7e6fSSøren Schmidt     u_int32_t		max_inbound_mframes;
29627da7e6fSSøren Schmidt     u_int32_t		current_ibound_mframes;
29727da7e6fSSøren Schmidt     u_int32_t		max_outbound_mframes;
29827da7e6fSSøren Schmidt     u_int8_t		product_idstring[24];
29927da7e6fSSøren Schmidt     u_int32_t		expected_lct_size;
30027da7e6fSSøren Schmidt     u_int32_t		iop_capabilities;
30127da7e6fSSøren Schmidt     u_int32_t		desired_private_memsize;
30227da7e6fSSøren Schmidt     u_int32_t		current_private_memsize;
30327da7e6fSSøren Schmidt     u_int32_t		current_private_membase;
30427da7e6fSSøren Schmidt     u_int32_t		desired_private_iosize;
30527da7e6fSSøren Schmidt     u_int32_t		current_private_iosize;
30627da7e6fSSøren Schmidt     u_int32_t		current_private_iobase;
30727da7e6fSSøren Schmidt     u_int8_t		reserved3[3];
30827da7e6fSSøren Schmidt     u_int8_t		sync_byte;
3094f492bfaSAlfred Perlstein } __packed;
31027da7e6fSSøren Schmidt 
31127da7e6fSSøren Schmidt struct i2o_exec_init_outqueue_message {
31227da7e6fSSøren Schmidt     u_int8_t		version_offset;
31327da7e6fSSøren Schmidt     u_int8_t		message_flags;
31427da7e6fSSøren Schmidt     u_int16_t		message_size;
31527da7e6fSSøren Schmidt     u_int32_t		target_address:12;
31627da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
31727da7e6fSSøren Schmidt     u_int32_t		function:8;
31827da7e6fSSøren Schmidt     u_int32_t		initiator_context;
31927da7e6fSSøren Schmidt     u_int32_t		transaction_context;
32027da7e6fSSøren Schmidt     u_int32_t		host_pagesize;
32127da7e6fSSøren Schmidt     u_int8_t		init_code;
32227da7e6fSSøren Schmidt     u_int8_t		reserved;
32327da7e6fSSøren Schmidt     u_int16_t		queue_framesize;
32427da7e6fSSøren Schmidt     struct i2o_sgl	sgl[2];
3254f492bfaSAlfred Perlstein } __packed;
32627da7e6fSSøren Schmidt 
32727da7e6fSSøren Schmidt #define I2O_EXEC_OUTBOUND_INIT_IN_PROGRESS		0x01
32827da7e6fSSøren Schmidt #define I2O_EXEC_OUTBOUND_INIT_REJECTED			0x02
32927da7e6fSSøren Schmidt #define I2O_EXEC_OUTBOUND_INIT_FAILED			0x03
33027da7e6fSSøren Schmidt #define I2O_EXEC_OUTBOUND_INIT_COMPLETE			0x04
33127da7e6fSSøren Schmidt 
33227da7e6fSSøren Schmidt struct i2o_exec_systab_set_message {
33327da7e6fSSøren Schmidt     u_int8_t		version_offset;
33427da7e6fSSøren Schmidt     u_int8_t		message_flags;
33527da7e6fSSøren Schmidt     u_int16_t		message_size;
33627da7e6fSSøren Schmidt     u_int32_t		target_address:12;
33727da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
33827da7e6fSSøren Schmidt     u_int32_t		function:8;
33927da7e6fSSøren Schmidt     u_int32_t		initiator_context;
34027da7e6fSSøren Schmidt     u_int32_t		transaction_context;
34127da7e6fSSøren Schmidt     u_int32_t		iop_id:12;
34227da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_IOP_ID_LOCAL_IOP		0x000
34327da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_IOP_ID_LOCAL_HOST		0x001
34427da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_IOP_ID_UNKNOWN_IOP		0xfff
34527da7e6fSSøren Schmidt 
34627da7e6fSSøren Schmidt     u_int32_t		reserved1:4;
34727da7e6fSSøren Schmidt     u_int32_t		host_unit_id:16;
34827da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_HOST_UNIT_ID_LOCAL_UNIT	0x0000
34927da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_HOST_UNIT_ID_UNKNOWN_UNIT	0xffff
35027da7e6fSSøren Schmidt 
35127da7e6fSSøren Schmidt     u_int32_t		segment_number:12;
35227da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_SEG_NUMBER_LOCAL_SEGMENT	0x000
35327da7e6fSSøren Schmidt #define I2O_EXEC_SYS_TAB_SEG_NUMBER_UNKNOWN_SEGMENT	0xfff
35427da7e6fSSøren Schmidt 
35527da7e6fSSøren Schmidt     u_int32_t		reserved2:4;
35627da7e6fSSøren Schmidt     u_int32_t		reserved3:8;
35727da7e6fSSøren Schmidt     struct i2o_sgl	sgl[3];
3584f492bfaSAlfred Perlstein } __packed;
35927da7e6fSSøren Schmidt 
36027da7e6fSSøren Schmidt struct i2o_exec_systab {
36127da7e6fSSøren Schmidt     u_int8_t		entries;
36227da7e6fSSøren Schmidt     u_int8_t		version;
36327da7e6fSSøren Schmidt #define	   I2O_RESOURCE_MANAGER_VERSION			0
36427da7e6fSSøren Schmidt 
36527da7e6fSSøren Schmidt     u_int16_t		reserved1;
36627da7e6fSSøren Schmidt     u_int32_t		change_id;
36727da7e6fSSøren Schmidt     u_int64_t		reserved2;
36827da7e6fSSøren Schmidt     u_int16_t		organization_id;
36927da7e6fSSøren Schmidt     u_int16_t		reserved3;
37027da7e6fSSøren Schmidt     u_int32_t		iop_id:12;
37127da7e6fSSøren Schmidt     u_int32_t		reserved4:20;
37227da7e6fSSøren Schmidt     u_int32_t		segment_number:12;
37327da7e6fSSøren Schmidt     u_int32_t		i2o_version:4;
37427da7e6fSSøren Schmidt     u_int32_t		iop_state:8;
37527da7e6fSSøren Schmidt     u_int32_t		messenger_type:8;
37627da7e6fSSøren Schmidt     u_int16_t		inbound_mframe_size;
37727da7e6fSSøren Schmidt     u_int16_t		reserved5;
37827da7e6fSSøren Schmidt     u_int32_t		last_changed;
37927da7e6fSSøren Schmidt     u_int32_t		iop_capabilities;
38027da7e6fSSøren Schmidt     u_int64_t		messenger_info;
3814f492bfaSAlfred Perlstein } __packed;
38227da7e6fSSøren Schmidt 
38327da7e6fSSøren Schmidt struct i2o_exec_get_lct_message {
38427da7e6fSSøren Schmidt     u_int8_t		version_offset;
38527da7e6fSSøren Schmidt     u_int8_t		message_flags;
38627da7e6fSSøren Schmidt     u_int16_t		message_size;
38727da7e6fSSøren Schmidt     u_int32_t		target_address:12;
38827da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
38927da7e6fSSøren Schmidt     u_int32_t		function:8;
39027da7e6fSSøren Schmidt     u_int32_t		initiator_context;
39127da7e6fSSøren Schmidt     u_int32_t		transaction_context;
39227da7e6fSSøren Schmidt     u_int32_t		class;
39327da7e6fSSøren Schmidt     u_int32_t		last_change_id;
39427da7e6fSSøren Schmidt     struct i2o_sgl	sgl;
3954f492bfaSAlfred Perlstein } __packed;
39627da7e6fSSøren Schmidt 
39727da7e6fSSøren Schmidt #define I2O_TID_IOP					0x000
39827da7e6fSSøren Schmidt #define I2O_TID_HOST					0x001
39927da7e6fSSøren Schmidt #define I2O_TID_NONE					0xfff
40027da7e6fSSøren Schmidt 
40127da7e6fSSøren Schmidt struct i2o_lct_entry {
40227da7e6fSSøren Schmidt     u_int32_t		entry_size:16;
40327da7e6fSSøren Schmidt     u_int32_t		local_tid:12;
40427da7e6fSSøren Schmidt     u_int32_t		reserved:4;
40527da7e6fSSøren Schmidt     u_int32_t		change_id;
40627da7e6fSSøren Schmidt     u_int32_t		device_flags;
40727da7e6fSSøren Schmidt     u_int32_t		class:12;
40827da7e6fSSøren Schmidt #define I2O_CLASS_EXECUTIVE				0x000
40927da7e6fSSøren Schmidt #define I2O_CLASS_DDM					0x001
41027da7e6fSSøren Schmidt #define I2O_CLASS_RANDOM_BLOCK_STORAGE			0x010
41127da7e6fSSøren Schmidt #define I2O_CLASS_SEQUENTIAL_STORAGE			0x011
41227da7e6fSSøren Schmidt #define I2O_CLASS_LAN					0x020
41327da7e6fSSøren Schmidt #define I2O_CLASS_WAN					0x030
41427da7e6fSSøren Schmidt #define I2O_CLASS_FIBRE_CHANNEL_PORT			0x040
41527da7e6fSSøren Schmidt #define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL		0x041
41627da7e6fSSøren Schmidt #define I2O_CLASS_SCSI_PERIPHERAL			0x051
41727da7e6fSSøren Schmidt #define I2O_CLASS_ATE_PORT				0x060
41827da7e6fSSøren Schmidt #define I2O_CLASS_ATE_PERIPHERAL			0x061
41927da7e6fSSøren Schmidt #define I2O_CLASS_FLOPPY_CONTROLLER			0x070
42027da7e6fSSøren Schmidt #define I2O_CLASS_FLOPPY_DEVICE				0x071
42127da7e6fSSøren Schmidt #define I2O_CLASS_BUS_ADAPTER_PORT			0x080
42227da7e6fSSøren Schmidt #define I2O_CLASS_MATCH_ANYCLASS			0xffffffff
42327da7e6fSSøren Schmidt 
42427da7e6fSSøren Schmidt     u_int32_t		class_version:4;
42527da7e6fSSøren Schmidt     u_int32_t		class_org:16;
42627da7e6fSSøren Schmidt     u_int32_t		sub_class;
42727da7e6fSSøren Schmidt #define I2O_SUBCLASS_i960				0x001
42827da7e6fSSøren Schmidt #define I2O_SUBCLASS_HDM				0x020
42927da7e6fSSøren Schmidt #define I2O_SUBCLASS_ISM				0x021
43027da7e6fSSøren Schmidt 
43127da7e6fSSøren Schmidt     u_int32_t		user_tid:12;
43227da7e6fSSøren Schmidt     u_int32_t		parent_tid:12;
43327da7e6fSSøren Schmidt     u_int32_t		bios_info:8;
43427da7e6fSSøren Schmidt     u_int8_t		identity_tag[8];
43527da7e6fSSøren Schmidt     u_int32_t		event_capabilities;
4364f492bfaSAlfred Perlstein } __packed;
43727da7e6fSSøren Schmidt 
43827da7e6fSSøren Schmidt #define I2O_LCT_ENTRYSIZE (sizeof(struct i2o_lct_entry)/sizeof(u_int32_t))
43927da7e6fSSøren Schmidt 
44027da7e6fSSøren Schmidt struct i2o_get_lct_reply {
44127da7e6fSSøren Schmidt     u_int32_t		table_size:16;
44227da7e6fSSøren Schmidt     u_int32_t		boot_device:12;
44327da7e6fSSøren Schmidt     u_int32_t		lct_version:4;
44427da7e6fSSøren Schmidt     u_int32_t		iop_flags;
44527da7e6fSSøren Schmidt     u_int32_t		current_change_id;
44627da7e6fSSøren Schmidt     struct i2o_lct_entry entry[1];
4474f492bfaSAlfred Perlstein } __packed;
44827da7e6fSSøren Schmidt 
44927da7e6fSSøren Schmidt struct i2o_util_get_param_message {
45027da7e6fSSøren Schmidt     u_int8_t		version_offset;
45127da7e6fSSøren Schmidt     u_int8_t		message_flags;
45227da7e6fSSøren Schmidt     u_int16_t		message_size;
45327da7e6fSSøren Schmidt     u_int32_t		target_address:12;
45427da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
45527da7e6fSSøren Schmidt     u_int32_t		function:8;
45627da7e6fSSøren Schmidt     u_int32_t		initiator_context;
45727da7e6fSSøren Schmidt     u_int32_t		transaction_context;
45827da7e6fSSøren Schmidt     u_int32_t		operation_flags;
45927da7e6fSSøren Schmidt     struct i2o_sgl	sgl[2];
4604f492bfaSAlfred Perlstein } __packed;
46127da7e6fSSøren Schmidt 
46227da7e6fSSøren Schmidt struct i2o_get_param_template {
46327da7e6fSSøren Schmidt     u_int16_t		operation;
46427da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_FIELD_GET			0x0001
46527da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_LIST_GET			0x0002
46627da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_MORE_GET			0x0003
46727da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_SIZE_GET			0x0004
46827da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_TABLE_GET			0x0005
46927da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_FIELD_SET			0x0006
47027da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_LIST_SET			0x0007
47127da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_ROW_ADD			0x0008
47227da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_ROW_DELETE			0x0009
47327da7e6fSSøren Schmidt #define I2O_PARAMS_OPERATION_TABLE_CLEAR		0x000A
47427da7e6fSSøren Schmidt 
47527da7e6fSSøren Schmidt     u_int16_t		group;
47627da7e6fSSøren Schmidt #define I2O_BSA_DEVICE_INFO_GROUP_NO			0x0000
47727da7e6fSSøren Schmidt #define I2O_BSA_OPERATIONAL_CONTROL_GROUP_NO		0x0001
47827da7e6fSSøren Schmidt #define I2O_BSA_POWER_CONTROL_GROUP_NO			0x0002
47927da7e6fSSøren Schmidt #define I2O_BSA_CACHE_CONTROL_GROUP_NO			0x0003
48027da7e6fSSøren Schmidt #define I2O_BSA_MEDIA_INFO_GROUP_NO			0x0004
48127da7e6fSSøren Schmidt #define I2O_BSA_ERROR_LOG_GROUP_NO			0x0005
48227da7e6fSSøren Schmidt 
48327da7e6fSSøren Schmidt #define I2O_UTIL_PARAMS_DESCRIPTOR_GROUP_NO		0xF000
48427da7e6fSSøren Schmidt #define I2O_UTIL_PHYSICAL_DEVICE_TABLE_GROUP_NO		0xF001
48527da7e6fSSøren Schmidt #define I2O_UTIL_CLAIMED_TABLE_GROUP_NO			0xF002
48627da7e6fSSøren Schmidt #define I2O_UTIL_USER_TABLE_GROUP_NO			0xF003
48727da7e6fSSøren Schmidt #define I2O_UTIL_PRIVATE_MESSAGE_EXTENSIONS_GROUP_NO	0xF005
48827da7e6fSSøren Schmidt #define I2O_UTIL_AUTHORIZED_USER_TABLE_GROUP_NO		0xF006
48927da7e6fSSøren Schmidt #define I2O_UTIL_DEVICE_IDENTITY_GROUP_NO		0xF100
49027da7e6fSSøren Schmidt #define I2O_UTIL_DDM_IDENTITY_GROUP_NO			0xF101
49127da7e6fSSøren Schmidt #define I2O_UTIL_USER_INFORMATION_GROUP_NO		0xF102
49227da7e6fSSøren Schmidt #define I2O_UTIL_SGL_OPERATING_LIMITS_GROUP_NO		0xF103
49327da7e6fSSøren Schmidt #define I2O_UTIL_SENSORS_GROUP_NO			0xF200
49427da7e6fSSøren Schmidt 
49527da7e6fSSøren Schmidt     u_int16_t		field_count;
49627da7e6fSSøren Schmidt     u_int16_t		pad;
4974f492bfaSAlfred Perlstein } __packed;
49827da7e6fSSøren Schmidt 
49927da7e6fSSøren Schmidt struct i2o_get_param_operation {
50027da7e6fSSøren Schmidt     u_int16_t		operation_count;
50127da7e6fSSøren Schmidt     u_int16_t		reserved;
50227da7e6fSSøren Schmidt     struct i2o_get_param_template operation[1];
5034f492bfaSAlfred Perlstein } __packed;
50427da7e6fSSøren Schmidt 
50527da7e6fSSøren Schmidt struct i2o_get_param_reply {
506ac9953bfSSøren Schmidt     u_int16_t		result_count;
50727da7e6fSSøren Schmidt     u_int16_t		reserved;
50827da7e6fSSøren Schmidt     u_int16_t		block_size;
50927da7e6fSSøren Schmidt     u_int8_t		block_status;
51027da7e6fSSøren Schmidt     u_int8_t		error_info_size;
51127da7e6fSSøren Schmidt     u_int32_t		result[1];
5124f492bfaSAlfred Perlstein } __packed;
51327da7e6fSSøren Schmidt 
51427da7e6fSSøren Schmidt struct i2o_device_identity {
51527da7e6fSSøren Schmidt     u_int32_t		class;
51627da7e6fSSøren Schmidt     u_int16_t		owner;
51727da7e6fSSøren Schmidt     u_int16_t		parent;
51827da7e6fSSøren Schmidt     u_int8_t		vendor[16];
51927da7e6fSSøren Schmidt     u_int8_t		product[16];
52027da7e6fSSøren Schmidt     u_int8_t		description[16];
52127da7e6fSSøren Schmidt     u_int8_t		revision[8];
52227da7e6fSSøren Schmidt     u_int8_t		sn_format;
52327da7e6fSSøren Schmidt     u_int8_t		serial[256];
5244f492bfaSAlfred Perlstein } __packed;
52527da7e6fSSøren Schmidt 
52627da7e6fSSøren Schmidt struct i2o_bsa_device {
52727da7e6fSSøren Schmidt     u_int8_t		device_type;
52827da7e6fSSøren Schmidt     u_int8_t		path_count;
52927da7e6fSSøren Schmidt     u_int16_t		power_state;
53027da7e6fSSøren Schmidt     u_int32_t		block_size;
53127da7e6fSSøren Schmidt     u_int64_t		capacity;
53227da7e6fSSøren Schmidt     u_int32_t		capabilities;
53327da7e6fSSøren Schmidt     u_int32_t		state;
5344f492bfaSAlfred Perlstein } __packed;
53527da7e6fSSøren Schmidt 
53627da7e6fSSøren Schmidt struct i2o_util_claim_message {
53727da7e6fSSøren Schmidt     u_int8_t		version_offset;
53827da7e6fSSøren Schmidt     u_int8_t		message_flags;
53927da7e6fSSøren Schmidt     u_int16_t		message_size;
54027da7e6fSSøren Schmidt     u_int32_t		target_address:12;
54127da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
54227da7e6fSSøren Schmidt     u_int32_t		function:8;
54327da7e6fSSøren Schmidt     u_int32_t		initiator_context;
54427da7e6fSSøren Schmidt     u_int32_t		transaction_context;
54527da7e6fSSøren Schmidt     u_int16_t		claim_flags;
54627da7e6fSSøren Schmidt     u_int8_t		reserved;
54727da7e6fSSøren Schmidt     u_int8_t		claim_type;
5484f492bfaSAlfred Perlstein } __packed;
54927da7e6fSSøren Schmidt 
55027da7e6fSSøren Schmidt struct i2o_util_event_register_message {
55127da7e6fSSøren Schmidt     u_int8_t		version_offset;
55227da7e6fSSøren Schmidt     u_int8_t		message_flags;
55327da7e6fSSøren Schmidt     u_int16_t		message_size;
55427da7e6fSSøren Schmidt     u_int32_t		target_address:12;
55527da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
55627da7e6fSSøren Schmidt     u_int32_t		function:8;
55727da7e6fSSøren Schmidt     u_int32_t		initiator_context;
55827da7e6fSSøren Schmidt     u_int32_t		transaction_context;
55927da7e6fSSøren Schmidt     u_int32_t		event_mask;
5604f492bfaSAlfred Perlstein } __packed;
56127da7e6fSSøren Schmidt 
56227da7e6fSSøren Schmidt struct i2o_util_event_reply_message {
56327da7e6fSSøren Schmidt     u_int8_t		version_offset;
56427da7e6fSSøren Schmidt     u_int8_t		message_flags;
56527da7e6fSSøren Schmidt     u_int16_t		message_size;
56627da7e6fSSøren Schmidt     u_int32_t		target_address:12;
56727da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
56827da7e6fSSøren Schmidt     u_int32_t		function:8;
56927da7e6fSSøren Schmidt     u_int32_t		initiator_context;
57027da7e6fSSøren Schmidt     u_int32_t		transaction_context;
57127da7e6fSSøren Schmidt     u_int32_t		event_mask;
57227da7e6fSSøren Schmidt     u_int32_t		event_data[1];
5734f492bfaSAlfred Perlstein } __packed;
57427da7e6fSSøren Schmidt 
57527da7e6fSSøren Schmidt struct i2o_util_config_dialog_message {
57627da7e6fSSøren Schmidt     u_int8_t		version_offset;
57727da7e6fSSøren Schmidt     u_int8_t		message_flags;
57827da7e6fSSøren Schmidt     u_int16_t		message_size;
57927da7e6fSSøren Schmidt     u_int32_t		target_address:12;
58027da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
58127da7e6fSSøren Schmidt     u_int32_t		function:8;
58227da7e6fSSøren Schmidt     u_int32_t		initiator_context;
58327da7e6fSSøren Schmidt     u_int32_t		transaction_context;
58427da7e6fSSøren Schmidt     u_int32_t		page_number;
58527da7e6fSSøren Schmidt     struct i2o_sgl	sgl[2];
5864f492bfaSAlfred Perlstein } __packed;
58727da7e6fSSøren Schmidt 
588ac9953bfSSøren Schmidt struct i2o_private_message {
589ac9953bfSSøren Schmidt     u_int8_t		version_offset;
590ac9953bfSSøren Schmidt     u_int8_t		message_flags;
591ac9953bfSSøren Schmidt     u_int16_t		message_size;
592ac9953bfSSøren Schmidt     u_int32_t		target_address:12;
593ac9953bfSSøren Schmidt     u_int32_t		initiator_address:12;
594ac9953bfSSøren Schmidt     u_int32_t		function:8;
595ac9953bfSSøren Schmidt     u_int32_t		initiator_context;
596ac9953bfSSøren Schmidt     u_int32_t		transaction_context;
597ac9953bfSSøren Schmidt     u_int16_t		function_code;
598ac9953bfSSøren Schmidt     u_int16_t		organization_id;
599ac9953bfSSøren Schmidt     struct i2o_sgl	in_sgl;
600ac9953bfSSøren Schmidt     struct i2o_sgl	out_sgl;
601ac9953bfSSøren Schmidt } __packed;
602ac9953bfSSøren Schmidt 
60327da7e6fSSøren Schmidt struct i2o_bsa_rw_block_message {
60427da7e6fSSøren Schmidt     u_int8_t		version_offset;
60527da7e6fSSøren Schmidt     u_int8_t		message_flags;
60627da7e6fSSøren Schmidt     u_int16_t		message_size;
60727da7e6fSSøren Schmidt     u_int32_t		target_address:12;
60827da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
60927da7e6fSSøren Schmidt     u_int32_t		function:8;
61027da7e6fSSøren Schmidt     u_int32_t		initiator_context;
61127da7e6fSSøren Schmidt     u_int32_t		transaction_context;
61227da7e6fSSøren Schmidt     u_int16_t		control_flags;
61327da7e6fSSøren Schmidt     u_int8_t		time_multiplier;
61427da7e6fSSøren Schmidt     u_int8_t		fetch_ahead;
61527da7e6fSSøren Schmidt     u_int32_t		bytecount;
61627da7e6fSSøren Schmidt     u_int64_t		lba;
61727da7e6fSSøren Schmidt     struct i2o_sgl	sgl;
6184f492bfaSAlfred Perlstein } __packed;
61927da7e6fSSøren Schmidt 
62027da7e6fSSøren Schmidt struct i2o_bsa_cache_flush_message {
62127da7e6fSSøren Schmidt     u_int8_t		version_offset;
62227da7e6fSSøren Schmidt     u_int8_t		message_flags;
62327da7e6fSSøren Schmidt     u_int16_t		message_size;
62427da7e6fSSøren Schmidt     u_int32_t		target_address:12;
62527da7e6fSSøren Schmidt     u_int32_t		initiator_address:12;
62627da7e6fSSøren Schmidt     u_int32_t		function:8;
62727da7e6fSSøren Schmidt     u_int32_t		initiator_context;
62827da7e6fSSøren Schmidt     u_int32_t		transaction_context;
62927da7e6fSSøren Schmidt     u_int16_t		control_flags;
63027da7e6fSSøren Schmidt     u_int8_t		time_multiplier;
63127da7e6fSSøren Schmidt     u_int8_t		reserved;
6324f492bfaSAlfred Perlstein } __packed;
63327da7e6fSSøren Schmidt 
63427da7e6fSSøren Schmidt /* prototypes */
63527da7e6fSSøren Schmidt int iop_init(struct iop_softc *);
636b3fc3d57SStefan Farfeleder void iop_attach(void *);
63727da7e6fSSøren Schmidt void iop_intr(void *);
63827da7e6fSSøren Schmidt int iop_reset(struct iop_softc *);
63927da7e6fSSøren Schmidt int iop_init_outqueue(struct iop_softc *);
64027da7e6fSSøren Schmidt int iop_get_lct(struct iop_softc *);
64127da7e6fSSøren Schmidt struct i2o_get_param_reply *iop_get_util_params(struct iop_softc *,int,int,int);
64227da7e6fSSøren Schmidt u_int32_t iop_get_mfa(struct iop_softc *);
64327da7e6fSSøren Schmidt void iop_free_mfa(struct iop_softc *, int);
64427da7e6fSSøren Schmidt int iop_queue_wait_msg(struct iop_softc *, int, struct i2o_basic_message *);
64527da7e6fSSøren Schmidt int iop_create_sgl(struct i2o_basic_message *, caddr_t, int, int);
64627da7e6fSSøren Schmidt 
64727da7e6fSSøren Schmidt /* global prototypes */
64827da7e6fSSøren Schmidt int pst_add_raid(struct iop_softc *, struct i2o_lct_entry *);
649