xref: /openbsd-src/sys/dev/ic/mpireg.h (revision ccb011c7f1a0e1a3da657cd45e198cf6f4fc76f7)
1*ccb011c7Sdlg /*	$OpenBSD: mpireg.h,v 1.45 2014/03/25 05:41:44 dlg Exp $ */
293cbb4bdSdlg 
393cbb4bdSdlg /*
493cbb4bdSdlg  * Copyright (c) 2005 David Gwynne <dlg@openbsd.org>
593cbb4bdSdlg  * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
693cbb4bdSdlg  *
793cbb4bdSdlg  * Permission to use, copy, modify, and distribute this software for any
893cbb4bdSdlg  * purpose with or without fee is hereby granted, provided that the above
993cbb4bdSdlg  * copyright notice and this permission notice appear in all copies.
1093cbb4bdSdlg  *
1193cbb4bdSdlg  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1293cbb4bdSdlg  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1393cbb4bdSdlg  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1493cbb4bdSdlg  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1593cbb4bdSdlg  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1693cbb4bdSdlg  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1793cbb4bdSdlg  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1893cbb4bdSdlg  */
1993cbb4bdSdlg 
2093cbb4bdSdlg /*
2193cbb4bdSdlg  * System Interface Register Set
2293cbb4bdSdlg  */
2393cbb4bdSdlg 
2493cbb4bdSdlg #define MPI_DOORBELL		0x00
2593cbb4bdSdlg /* doorbell read bits */
2693cbb4bdSdlg #define  MPI_DOORBELL_STATE		(0xf<<28) /* ioc state */
2793cbb4bdSdlg #define  MPI_DOORBELL_STATE_RESET	(0x0<<28)
2893cbb4bdSdlg #define  MPI_DOORBELL_STATE_READY	(0x1<<28)
2993cbb4bdSdlg #define  MPI_DOORBELL_STATE_OPER	(0x2<<28)
3093cbb4bdSdlg #define  MPI_DOORBELL_STATE_FAULT	(0x4<<28)
3193cbb4bdSdlg #define  MPI_DOORBELL_INUSE		(0x1<<27) /* doorbell used */
3293cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT		(0x7<<24) /* last to reset ioc */
3393cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT_NOONE	(0x0<<24) /* not initialized */
3493cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT_SYSBIOS	(0x1<<24) /* system bios */
3593cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT_ROMBIOS	(0x2<<24) /* rom bios */
3693cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT_PCIPEER	(0x3<<24) /* pci peer */
3793cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT_DRIVER	(0x4<<24) /* host driver */
3893cbb4bdSdlg #define  MPI_DOORBELL_WHOINIT_MANUFACT	(0x5<<24) /* manufacturing */
3993cbb4bdSdlg #define  MPI_DOORBELL_FAULT		(0xffff<<0) /* fault code */
4093cbb4bdSdlg #define  MPI_DOORBELL_FAULT_REQ_PCIPAR	0x8111 /* req msg pci parity err */
4193cbb4bdSdlg #define  MPI_DOORBELL_FAULT_REQ_PCIBUS	0x8112 /* req msg pci bus err */
4293cbb4bdSdlg #define  MPI_DOORBELL_FAULT_REP_PCIPAR	0x8113 /* reply msg pci parity err */
4393cbb4bdSdlg #define  MPI_DOORBELL_FAULT_REP_PCIBUS	0x8114 /* reply msg pci bus err */
4493cbb4bdSdlg #define  MPI_DOORBELL_FAULT_SND_PCIPAR	0x8115 /* data send pci parity err */
4593cbb4bdSdlg #define  MPI_DOORBELL_FAULT_SND_PCIBUS	0x8116 /* data send pci bus err */
4693cbb4bdSdlg #define  MPI_DOORBELL_FAULT_RCV_PCIPAR	0x8117 /* data recv pci parity err */
4793cbb4bdSdlg #define  MPI_DOORBELL_FAULT_RCV_PCIBUS	0x8118 /* data recv pci bus err */
4893cbb4bdSdlg /* doorbell write bits */
4993cbb4bdSdlg #define  MPI_DOORBELL_FUNCTION_SHIFT	24
5093cbb4bdSdlg #define  MPI_DOORBELL_FUNCTION_MASK	(0xff << MPI_DOORBELL_FUNCTION_SHIFT)
5193cbb4bdSdlg #define  MPI_DOORBELL_FUNCTION(x)	\
5293cbb4bdSdlg     (((x) << MPI_DOORBELL_FUNCTION_SHIFT) & MPI_DOORBELL_FUNCTION_MASK)
5393cbb4bdSdlg #define  MPI_DOORBELL_DWORDS_SHIFT	16
5493cbb4bdSdlg #define  MPI_DOORBELL_DWORDS_MASK	(0xff << MPI_DOORBELL_DWORDS_SHIFT)
5593cbb4bdSdlg #define  MPI_DOORBELL_DWORDS(x)		\
5693cbb4bdSdlg     (((x) << MPI_DOORBELL_DWORDS_SHIFT) & MPI_DOORBELL_DWORDS_MASK)
5793cbb4bdSdlg #define  MPI_DOORBELL_DATA_MASK		0xffff
5893cbb4bdSdlg 
5993cbb4bdSdlg #define MPI_WRITESEQ		0x04
6093cbb4bdSdlg #define  MPI_WRITESEQ_VALUE		0x0000000f /* key value */
6193cbb4bdSdlg #define  MPI_WRITESEQ_1			0x04
6293cbb4bdSdlg #define  MPI_WRITESEQ_2			0x0b
6393cbb4bdSdlg #define  MPI_WRITESEQ_3			0x02
6493cbb4bdSdlg #define  MPI_WRITESEQ_4			0x07
6593cbb4bdSdlg #define  MPI_WRITESEQ_5			0x0d
6693cbb4bdSdlg 
6793cbb4bdSdlg #define MPI_HOSTDIAG		0x08
6893cbb4bdSdlg #define  MPI_HOSTDIAG_CLEARFBS		(1<<10) /* clear flash bad sig */
6993cbb4bdSdlg #define  MPI_HOSTDIAG_POICB		(1<<9) /* prevent ioc boot */
7093cbb4bdSdlg #define  MPI_HOSTDIAG_DWRE		(1<<7) /* diag reg write enabled */
7193cbb4bdSdlg #define  MPI_HOSTDIAG_FBS		(1<<6) /* flash bad sig */
7293cbb4bdSdlg #define  MPI_HOSTDIAG_RESET_HIST	(1<<5) /* reset history */
7393cbb4bdSdlg #define  MPI_HOSTDIAG_DIAGWR_EN		(1<<4) /* diagnostic write enabled */
7493cbb4bdSdlg #define  MPI_HOSTDIAG_RESET_ADAPTER	(1<<2) /* reset adapter */
7593cbb4bdSdlg #define  MPI_HOSTDIAG_DISABLE_ARM	(1<<1) /* disable arm */
7693cbb4bdSdlg #define  MPI_HOSTDIAG_DIAGMEM_EN	(1<<0) /* diag mem enable */
7793cbb4bdSdlg 
7893cbb4bdSdlg #define MPI_TESTBASE		0x0c
7993cbb4bdSdlg 
8093cbb4bdSdlg #define MPI_DIAGRWDATA		0x10
8193cbb4bdSdlg 
8293cbb4bdSdlg #define MPI_DIAGRWADDR		0x18
8393cbb4bdSdlg 
8493cbb4bdSdlg #define MPI_INTR_STATUS		0x30
8593cbb4bdSdlg #define  MPI_INTR_STATUS_IOCDOORBELL	(1<<31) /* ioc doorbell status */
8693cbb4bdSdlg #define  MPI_INTR_STATUS_REPLY		(1<<3) /* reply message interrupt */
8793cbb4bdSdlg #define  MPI_INTR_STATUS_DOORBELL	(1<<0) /* doorbell interrupt */
8893cbb4bdSdlg 
8993cbb4bdSdlg #define MPI_INTR_MASK		0x34
9093cbb4bdSdlg #define  MPI_INTR_MASK_REPLY		(1<<3) /* reply message intr mask */
9193cbb4bdSdlg #define  MPI_INTR_MASK_DOORBELL		(1<<0) /* doorbell interrupt mask */
9293cbb4bdSdlg 
9393cbb4bdSdlg #define MPI_REQ_QUEUE		0x40
9493cbb4bdSdlg 
9593cbb4bdSdlg #define MPI_REPLY_QUEUE		0x44
9693cbb4bdSdlg #define  MPI_REPLY_QUEUE_ADDRESS	(1<<31) /* address reply */
9793cbb4bdSdlg #define  MPI_REPLY_QUEUE_ADDRESS_MASK	0x7fffffff
9893cbb4bdSdlg #define  MPI_REPLY_QUEUE_TYPE_MASK	(3<<29)
9993cbb4bdSdlg #define  MPI_REPLY_QUEUE_TYPE_INIT	(0<<29) /* scsi initiator reply */
10093cbb4bdSdlg #define  MPI_REPLY_QUEUE_TYPE_TARGET	(1<<29) /* scsi target reply */
10193cbb4bdSdlg #define  MPI_REPLY_QUEUE_TYPE_LAN	(2<<29) /* lan reply */
10293cbb4bdSdlg #define  MPI_REPLY_QUEUE_CONTEXT	0x1fffffff /* not address and type */
10393cbb4bdSdlg 
10493cbb4bdSdlg #define MPI_PRIREQ_QUEUE	0x48
10593cbb4bdSdlg 
10693cbb4bdSdlg /*
10793cbb4bdSdlg  * Scatter Gather Lists
10893cbb4bdSdlg  */
10993cbb4bdSdlg 
11093cbb4bdSdlg #define MPI_SGE_FL_LAST			(0x1<<31) /* last element in segment */
11193cbb4bdSdlg #define MPI_SGE_FL_EOB			(0x1<<30) /* last element of buffer */
11293cbb4bdSdlg #define MPI_SGE_FL_TYPE			(0x3<<28) /* element type */
11393cbb4bdSdlg #define  MPI_SGE_FL_TYPE_SIMPLE		(0x1<<28) /* simple element */
11493cbb4bdSdlg #define  MPI_SGE_FL_TYPE_CHAIN		(0x3<<28) /* chain element */
11593cbb4bdSdlg #define  MPI_SGE_FL_TYPE_XACTCTX	(0x0<<28) /* transaction context */
11693cbb4bdSdlg #define MPI_SGE_FL_LOCAL		(0x1<<27) /* local address */
11793cbb4bdSdlg #define MPI_SGE_FL_DIR			(0x1<<26) /* direction */
11893cbb4bdSdlg #define  MPI_SGE_FL_DIR_OUT		(0x1<<26)
11993cbb4bdSdlg #define  MPI_SGE_FL_DIR_IN		(0x0<<26)
12093cbb4bdSdlg #define MPI_SGE_FL_SIZE			(0x1<<25) /* address size */
121800a91f7Sdlg #define  MPI_SGE_FL_SIZE_32		(0x0<<25)
122800a91f7Sdlg #define  MPI_SGE_FL_SIZE_64		(0x1<<25)
12393cbb4bdSdlg #define MPI_SGE_FL_EOL			(0x1<<24) /* end of list */
124465e56bfSmarco #define MPI_SGE_FLAGS_IOC_TO_HOST	(0x00)
125465e56bfSmarco #define MPI_SGE_FLAGS_HOST_TO_IOC	(0x04)
12693cbb4bdSdlg 
127d84cdbbaSdlg struct mpi_sge {
12893cbb4bdSdlg 	u_int32_t		sg_hdr;
1293480c703Sdlg 	u_int32_t		sg_addr_lo;
1303480c703Sdlg 	u_int32_t		sg_addr_hi;
1313480c703Sdlg } __packed __aligned(4);
13293cbb4bdSdlg 
133800a91f7Sdlg struct mpi_fw_tce {
134800a91f7Sdlg 	u_int8_t		reserved1;
135800a91f7Sdlg 	u_int8_t		context_size;
136800a91f7Sdlg 	u_int8_t		details_length;
137800a91f7Sdlg 	u_int8_t		flags;
13893cbb4bdSdlg 
139800a91f7Sdlg 	u_int32_t		reserved2;
140800a91f7Sdlg 
141800a91f7Sdlg 	u_int32_t		image_offset;
142800a91f7Sdlg 
143800a91f7Sdlg 	u_int32_t		image_size;
144*ccb011c7Sdlg } __packed __aligned(4);
14593cbb4bdSdlg 
14693cbb4bdSdlg /*
14793cbb4bdSdlg  * Messages
14893cbb4bdSdlg  */
14993cbb4bdSdlg 
15093cbb4bdSdlg /* functions */
15193cbb4bdSdlg #define MPI_FUNCTION_SCSI_IO_REQUEST			(0x00)
15293cbb4bdSdlg #define MPI_FUNCTION_SCSI_TASK_MGMT			(0x01)
15393cbb4bdSdlg #define MPI_FUNCTION_IOC_INIT				(0x02)
15493cbb4bdSdlg #define MPI_FUNCTION_IOC_FACTS				(0x03)
15593cbb4bdSdlg #define MPI_FUNCTION_CONFIG				(0x04)
15693cbb4bdSdlg #define MPI_FUNCTION_PORT_FACTS				(0x05)
15793cbb4bdSdlg #define MPI_FUNCTION_PORT_ENABLE			(0x06)
15893cbb4bdSdlg #define MPI_FUNCTION_EVENT_NOTIFICATION			(0x07)
15993cbb4bdSdlg #define MPI_FUNCTION_EVENT_ACK				(0x08)
16093cbb4bdSdlg #define MPI_FUNCTION_FW_DOWNLOAD			(0x09)
16193cbb4bdSdlg #define MPI_FUNCTION_TARGET_CMD_BUFFER_POST		(0x0A)
16293cbb4bdSdlg #define MPI_FUNCTION_TARGET_ASSIST			(0x0B)
16393cbb4bdSdlg #define MPI_FUNCTION_TARGET_STATUS_SEND			(0x0C)
16493cbb4bdSdlg #define MPI_FUNCTION_TARGET_MODE_ABORT			(0x0D)
16593cbb4bdSdlg #define MPI_FUNCTION_TARGET_FC_BUF_POST_LINK_SRVC	(0x0E) /* obsolete */
16693cbb4bdSdlg #define MPI_FUNCTION_TARGET_FC_RSP_LINK_SRVC		(0x0F) /* obsolete */
16793cbb4bdSdlg #define MPI_FUNCTION_TARGET_FC_EX_SEND_LINK_SRVC	(0x10) /* obsolete */
16893cbb4bdSdlg #define MPI_FUNCTION_TARGET_FC_ABORT			(0x11) /* obsolete */
16993cbb4bdSdlg #define MPI_FUNCTION_FC_LINK_SRVC_BUF_POST		(0x0E)
17093cbb4bdSdlg #define MPI_FUNCTION_FC_LINK_SRVC_RSP			(0x0F)
17193cbb4bdSdlg #define MPI_FUNCTION_FC_EX_LINK_SRVC_SEND		(0x10)
17293cbb4bdSdlg #define MPI_FUNCTION_FC_ABORT				(0x11)
17393cbb4bdSdlg #define MPI_FUNCTION_FW_UPLOAD				(0x12)
17493cbb4bdSdlg #define MPI_FUNCTION_FC_COMMON_TRANSPORT_SEND		(0x13)
17593cbb4bdSdlg #define MPI_FUNCTION_FC_PRIMITIVE_SEND			(0x14)
17693cbb4bdSdlg 
17793cbb4bdSdlg #define MPI_FUNCTION_RAID_ACTION			(0x15)
17893cbb4bdSdlg #define MPI_FUNCTION_RAID_SCSI_IO_PASSTHROUGH		(0x16)
17993cbb4bdSdlg 
18093cbb4bdSdlg #define MPI_FUNCTION_TOOLBOX				(0x17)
18193cbb4bdSdlg 
18293cbb4bdSdlg #define MPI_FUNCTION_SCSI_ENCLOSURE_PROCESSOR		(0x18)
18393cbb4bdSdlg 
18493cbb4bdSdlg #define MPI_FUNCTION_MAILBOX				(0x19)
18593cbb4bdSdlg 
18693cbb4bdSdlg #define MPI_FUNCTION_LAN_SEND				(0x20)
18793cbb4bdSdlg #define MPI_FUNCTION_LAN_RECEIVE			(0x21)
18893cbb4bdSdlg #define MPI_FUNCTION_LAN_RESET				(0x22)
18993cbb4bdSdlg 
19093cbb4bdSdlg #define MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET		(0x40)
19193cbb4bdSdlg #define MPI_FUNCTION_IO_UNIT_RESET			(0x41)
19293cbb4bdSdlg #define MPI_FUNCTION_HANDSHAKE				(0x42)
19393cbb4bdSdlg #define MPI_FUNCTION_REPLY_FRAME_REMOVAL		(0x43)
19493cbb4bdSdlg 
19593cbb4bdSdlg /* reply flags */
19693cbb4bdSdlg #define MPI_REP_FLAGS_CONT		(1<<7) /* continuation reply */
19793cbb4bdSdlg 
19893cbb4bdSdlg #define MPI_REP_IOCSTATUS_AVAIL		(1<<15) /* logging info available */
19993cbb4bdSdlg #define MPI_REP_IOCSTATUS		(0x7fff) /* status */
20093cbb4bdSdlg 
20193cbb4bdSdlg /* Common IOCStatus values for all replies */
20293cbb4bdSdlg #define  MPI_IOCSTATUS_SUCCESS				(0x0000)
20393cbb4bdSdlg #define  MPI_IOCSTATUS_INVALID_FUNCTION			(0x0001)
20493cbb4bdSdlg #define  MPI_IOCSTATUS_BUSY				(0x0002)
20593cbb4bdSdlg #define  MPI_IOCSTATUS_INVALID_SGL			(0x0003)
20693cbb4bdSdlg #define  MPI_IOCSTATUS_INTERNAL_ERROR			(0x0004)
20793cbb4bdSdlg #define  MPI_IOCSTATUS_RESERVED				(0x0005)
20893cbb4bdSdlg #define  MPI_IOCSTATUS_INSUFFICIENT_RESOURCES		(0x0006)
20993cbb4bdSdlg #define  MPI_IOCSTATUS_INVALID_FIELD			(0x0007)
21093cbb4bdSdlg #define  MPI_IOCSTATUS_INVALID_STATE			(0x0008)
21193cbb4bdSdlg #define  MPI_IOCSTATUS_OP_STATE_NOT_SUPPORTED		(0x0009)
21293cbb4bdSdlg /* Config IOCStatus values */
21393cbb4bdSdlg #define  MPI_IOCSTATUS_CONFIG_INVALID_ACTION		(0x0020)
21493cbb4bdSdlg #define  MPI_IOCSTATUS_CONFIG_INVALID_TYPE		(0x0021)
21593cbb4bdSdlg #define  MPI_IOCSTATUS_CONFIG_INVALID_PAGE		(0x0022)
21693cbb4bdSdlg #define  MPI_IOCSTATUS_CONFIG_INVALID_DATA		(0x0023)
21793cbb4bdSdlg #define  MPI_IOCSTATUS_CONFIG_NO_DEFAULTS		(0x0024)
21893cbb4bdSdlg #define  MPI_IOCSTATUS_CONFIG_CANT_COMMIT		(0x0025)
21993cbb4bdSdlg /* SCSIIO Reply (SPI & FCP) initiator values */
22093cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_RECOVERED_ERROR		(0x0040)
22193cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_INVALID_BUS			(0x0041)
22293cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_INVALID_TARGETID		(0x0042)
22393cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_DEVICE_NOT_THERE		(0x0043)
22493cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_DATA_OVERRUN		(0x0044)
22593cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_DATA_UNDERRUN		(0x0045)
22693cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_IO_DATA_ERROR		(0x0046)
22793cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_PROTOCOL_ERROR		(0x0047)
22893cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_TASK_TERMINATED		(0x0048)
22993cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH		(0x0049)
23093cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_TASK_MGMT_FAILED		(0x004A)
23193cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_IOC_TERMINATED		(0x004B)
23293cbb4bdSdlg #define  MPI_IOCSTATUS_SCSI_EXT_TERMINATED		(0x004C)
23393cbb4bdSdlg /* For use by SCSI Initiator and SCSI Target end-to-end data protection */
23493cbb4bdSdlg #define  MPI_IOCSTATUS_EEDP_GUARD_ERROR			(0x004D)
23593cbb4bdSdlg #define  MPI_IOCSTATUS_EEDP_REF_TAG_ERROR		(0x004E)
23693cbb4bdSdlg #define  MPI_IOCSTATUS_EEDP_APP_TAG_ERROR		(0x004F)
23793cbb4bdSdlg /* SCSI (SPI & FCP) target values */
23893cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_PRIORITY_IO		(0x0060)
23993cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_INVALID_PORT		(0x0061)
24093cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_INVALID_IOCINDEX		(0x0062) /* obsolete */
24193cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_INVALID_IO_INDEX		(0x0062)
24293cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_ABORTED			(0x0063)
24393cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_NO_CONN_RETRYABLE		(0x0064)
24493cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_NO_CONNECTION		(0x0065)
24593cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH	(0x006A)
24693cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_STS_DATA_NOT_SENT		(0x006B)
24793cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_DATA_OFFSET_ERROR		(0x006D)
24893cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA	(0x006E)
24993cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_IU_TOO_SHORT		(0x006F)
25093cbb4bdSdlg /* Additional FCP target values */
25193cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_FC_ABORTED		(0x0066) /* obsolete */
25293cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_FC_RX_ID_INVALID		(0x0067) /* obsolete */
25393cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_FC_DID_INVALID		(0x0068) /* obsolete */
25493cbb4bdSdlg #define  MPI_IOCSTATUS_TARGET_FC_NODE_LOGGED_OUT	(0x0069) /* obsolete */
25593cbb4bdSdlg /* Fibre Channel Direct Access values */
25693cbb4bdSdlg #define  MPI_IOCSTATUS_FC_ABORTED			(0x0066)
25793cbb4bdSdlg #define  MPI_IOCSTATUS_FC_RX_ID_INVALID			(0x0067)
25893cbb4bdSdlg #define  MPI_IOCSTATUS_FC_DID_INVALID			(0x0068)
25993cbb4bdSdlg #define  MPI_IOCSTATUS_FC_NODE_LOGGED_OUT		(0x0069)
26093cbb4bdSdlg #define  MPI_IOCSTATUS_FC_EXCHANGE_CANCELED		(0x006C)
26193cbb4bdSdlg /* LAN values */
26293cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_DEVICE_NOT_FOUND		(0x0080)
26393cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_DEVICE_FAILURE		(0x0081)
26493cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_TRANSMIT_ERROR		(0x0082)
26593cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_TRANSMIT_ABORTED		(0x0083)
26693cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_RECEIVE_ERROR		(0x0084)
26793cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_RECEIVE_ABORTED		(0x0085)
26893cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_PARTIAL_PACKET		(0x0086)
26993cbb4bdSdlg #define  MPI_IOCSTATUS_LAN_CANCELED			(0x0087)
27093cbb4bdSdlg /* Serial Attached SCSI values */
27193cbb4bdSdlg #define  MPI_IOCSTATUS_SAS_SMP_REQUEST_FAILED		(0x0090)
27293cbb4bdSdlg #define  MPI_IOCSTATUS_SAS_SMP_DATA_OVERRUN		(0x0091)
27393cbb4bdSdlg /* Inband values */
27493cbb4bdSdlg #define  MPI_IOCSTATUS_INBAND_ABORTED			(0x0098)
27593cbb4bdSdlg #define  MPI_IOCSTATUS_INBAND_NO_CONNECTION		(0x0099)
27693cbb4bdSdlg /* Diagnostic Tools values */
27793cbb4bdSdlg #define  MPI_IOCSTATUS_DIAGNOSTIC_RELEASED		(0x00A0)
27893cbb4bdSdlg 
27993cbb4bdSdlg #define MPI_REP_IOCLOGINFO_TYPE		(0xf<<28) /* logging info type */
28093cbb4bdSdlg #define MPI_REP_IOCLOGINFO_TYPE_NONE	(0x0<<28)
28193cbb4bdSdlg #define MPI_REP_IOCLOGINFO_TYPE_SCSI	(0x1<<28)
28293cbb4bdSdlg #define MPI_REP_IOCLOGINFO_TYPE_FC	(0x2<<28)
28393cbb4bdSdlg #define MPI_REP_IOCLOGINFO_TYPE_SAS	(0x3<<28)
28493cbb4bdSdlg #define MPI_REP_IOCLOGINFO_TYPE_ISCSI	(0x4<<28)
28593cbb4bdSdlg #define MPI_REP_IOCLOGINFO_DATA		(0x0fffffff) /* logging info data */
28693cbb4bdSdlg 
287e62a2b32Sdlg /* event notification types */
288e62a2b32Sdlg #define MPI_EVENT_NONE					0x00
289e62a2b32Sdlg #define MPI_EVENT_LOG_DATA				0x01
290e62a2b32Sdlg #define MPI_EVENT_STATE_CHANGE				0x02
291e62a2b32Sdlg #define MPI_EVENT_UNIT_ATTENTION			0x03
292e62a2b32Sdlg #define MPI_EVENT_IOC_BUS_RESET				0x04
293e62a2b32Sdlg #define MPI_EVENT_EXT_BUS_RESET				0x05
294e62a2b32Sdlg #define MPI_EVENT_RESCAN				0x06
295e62a2b32Sdlg #define MPI_EVENT_LINK_STATUS_CHANGE			0x07
296e62a2b32Sdlg #define MPI_EVENT_LOOP_STATE_CHANGE			0x08
297e62a2b32Sdlg #define MPI_EVENT_LOGOUT				0x09
298e62a2b32Sdlg #define MPI_EVENT_EVENT_CHANGE				0x0a
299e62a2b32Sdlg #define MPI_EVENT_INTEGRATED_RAID			0x0b
300e62a2b32Sdlg #define MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE		0x0c
301e62a2b32Sdlg #define MPI_EVENT_ON_BUS_TIMER_EXPIRED			0x0d
302e62a2b32Sdlg #define MPI_EVENT_QUEUE_FULL				0x0e
303e62a2b32Sdlg #define MPI_EVENT_SAS_DEVICE_STATUS_CHANGE		0x0f
304e62a2b32Sdlg #define MPI_EVENT_SAS_SES				0x10
305e62a2b32Sdlg #define MPI_EVENT_PERSISTENT_TABLE_FULL			0x11
306e62a2b32Sdlg #define MPI_EVENT_SAS_PHY_LINK_STATUS			0x12
307e62a2b32Sdlg #define MPI_EVENT_SAS_DISCOVERY_ERROR			0x13
308e62a2b32Sdlg #define MPI_EVENT_IR_RESYNC_UPDATE			0x14
309e62a2b32Sdlg #define MPI_EVENT_IR2					0x15
310e62a2b32Sdlg #define MPI_EVENT_SAS_DISCOVERY				0x16
311e62a2b32Sdlg #define MPI_EVENT_LOG_ENTRY_ADDED			0x21
312e62a2b32Sdlg 
31393cbb4bdSdlg /* messages */
31493cbb4bdSdlg 
31593cbb4bdSdlg #define MPI_WHOINIT_NOONE		0x00
31693cbb4bdSdlg #define MPI_WHOINIT_SYSTEM_BIOS		0x01
31793cbb4bdSdlg #define MPI_WHOINIT_ROM_BIOS		0x02
31893cbb4bdSdlg #define MPI_WHOINIT_PCI_PEER		0x03
31993cbb4bdSdlg #define MPI_WHOINIT_HOST_DRIVER		0x04
32093cbb4bdSdlg #define MPI_WHOINIT_MANUFACTURER	0x05
32193cbb4bdSdlg 
32250083d53Smarco /* page address fields */
32350083d53Smarco #define MPI_PAGE_ADDRESS_FC_BTID	(1<<24)	/* Bus Target ID */
32450083d53Smarco 
32593cbb4bdSdlg /* default messages */
32693cbb4bdSdlg 
32793cbb4bdSdlg struct mpi_msg_request {
32893cbb4bdSdlg 	u_int8_t		reserved1;
32993cbb4bdSdlg 	u_int8_t		reserved2;
33093cbb4bdSdlg 	u_int8_t		chain_offset;
33193cbb4bdSdlg 	u_int8_t		function;
33293cbb4bdSdlg 
33393cbb4bdSdlg 	u_int8_t		reserved3;
33493cbb4bdSdlg 	u_int8_t		reserved4;
33593cbb4bdSdlg 	u_int8_t		reserved5;
33693cbb4bdSdlg 	u_int8_t		msg_flags;
33793cbb4bdSdlg 
33893cbb4bdSdlg 	u_int32_t		msg_context;
339*ccb011c7Sdlg } __packed __aligned(4);
34093cbb4bdSdlg 
34193cbb4bdSdlg struct mpi_msg_reply {
34293cbb4bdSdlg 	u_int8_t		reserved1;
34393cbb4bdSdlg 	u_int8_t		reserved2;
34493cbb4bdSdlg 	u_int8_t		msg_length;
34593cbb4bdSdlg 	u_int8_t		function;
34693cbb4bdSdlg 
34793cbb4bdSdlg 	u_int8_t		reserved3;
34893cbb4bdSdlg 	u_int8_t		reserved4;
34993cbb4bdSdlg 	u_int8_t		reserved5;
35093cbb4bdSdlg 	u_int8_t		msg_flags;
35193cbb4bdSdlg 
35293cbb4bdSdlg 	u_int32_t		msg_context;
35393cbb4bdSdlg 
35493cbb4bdSdlg 	u_int8_t		reserved6;
35593cbb4bdSdlg 	u_int8_t		reserved7;
35693cbb4bdSdlg 	u_int16_t		ioc_status;
35793cbb4bdSdlg 
35893cbb4bdSdlg 	u_int32_t		ioc_loginfo;
359*ccb011c7Sdlg } __packed __aligned(4);
36093cbb4bdSdlg 
36193cbb4bdSdlg /* ioc init */
36293cbb4bdSdlg 
36393cbb4bdSdlg struct mpi_msg_iocinit_request {
36493cbb4bdSdlg 	u_int8_t		whoinit;
36593cbb4bdSdlg 	u_int8_t		reserved1;
36693cbb4bdSdlg 	u_int8_t		chain_offset;
36793cbb4bdSdlg 	u_int8_t		function;
36893cbb4bdSdlg 
36993cbb4bdSdlg 	u_int8_t		flags;
37093cbb4bdSdlg #define MPI_IOCINIT_F_DISCARD_FW			(1<<0)
37193cbb4bdSdlg #define MPI_IOCINIT_F_ENABLE_HOST_FIFO			(1<<1)
37293cbb4bdSdlg #define MPI_IOCINIT_F_HOST_PG_BUF_PERSIST		(1<<2)
37393cbb4bdSdlg 	u_int8_t		max_devices;
37493cbb4bdSdlg 	u_int8_t		max_buses;
37593cbb4bdSdlg 	u_int8_t		msg_flags;
37693cbb4bdSdlg 
37793cbb4bdSdlg 	u_int32_t		msg_context;
37893cbb4bdSdlg 
37993cbb4bdSdlg 	u_int16_t		reply_frame_size;
38093cbb4bdSdlg 	u_int16_t		reserved2;
38193cbb4bdSdlg 
38293cbb4bdSdlg 	u_int32_t		host_mfa_hi_addr;
383d84cdbbaSdlg 
38493cbb4bdSdlg 	u_int32_t		sense_buffer_hi_addr;
385d84cdbbaSdlg 
38693cbb4bdSdlg 	u_int32_t		reply_fifo_host_signalling_addr;
387d84cdbbaSdlg 
388d84cdbbaSdlg 	struct mpi_sge		host_page_buffer_sge;
38993cbb4bdSdlg 
39093cbb4bdSdlg 	u_int8_t		msg_version_min;
39193cbb4bdSdlg 	u_int8_t		msg_version_maj;
39293cbb4bdSdlg 
39393cbb4bdSdlg 	u_int8_t		hdr_version_unit;
39493cbb4bdSdlg 	u_int8_t		hdr_version_dev;
395*ccb011c7Sdlg } __packed __aligned(4);
39693cbb4bdSdlg 
39793cbb4bdSdlg struct mpi_msg_iocinit_reply {
39893cbb4bdSdlg 	u_int8_t		whoinit;
39993cbb4bdSdlg 	u_int8_t		reserved1;
40093cbb4bdSdlg 	u_int8_t		msg_length;
40193cbb4bdSdlg 	u_int8_t		function;
40293cbb4bdSdlg 
40393cbb4bdSdlg 	u_int8_t		flags;
40493cbb4bdSdlg 	u_int8_t		max_devices;
40593cbb4bdSdlg 	u_int8_t		max_buses;
40693cbb4bdSdlg 	u_int8_t		msg_flags;
40793cbb4bdSdlg 
40893cbb4bdSdlg 	u_int32_t		msg_context;
40993cbb4bdSdlg 
41093cbb4bdSdlg 	u_int16_t		reserved2;
41193cbb4bdSdlg 	u_int16_t		ioc_status;
41293cbb4bdSdlg 
41393cbb4bdSdlg 	u_int32_t		ioc_loginfo;
414*ccb011c7Sdlg } __packed __aligned(4);
41593cbb4bdSdlg 
41693cbb4bdSdlg 
41793cbb4bdSdlg /* ioc facts */
41893cbb4bdSdlg struct mpi_msg_iocfacts_request {
41993cbb4bdSdlg 	u_int8_t		reserved1;
42093cbb4bdSdlg 	u_int8_t		reserved2;
42193cbb4bdSdlg 	u_int8_t		chain_offset;
42293cbb4bdSdlg 	u_int8_t		function;
42393cbb4bdSdlg 
42493cbb4bdSdlg 	u_int8_t		reserved3;
42593cbb4bdSdlg 	u_int8_t		reserved4;
42693cbb4bdSdlg 	u_int8_t		reserved5;
42793cbb4bdSdlg 	u_int8_t		msg_flags;
42893cbb4bdSdlg 
42993cbb4bdSdlg 	u_int32_t		msg_context;
430*ccb011c7Sdlg } __packed __aligned(4);
43193cbb4bdSdlg 
43293cbb4bdSdlg struct mpi_msg_iocfacts_reply {
43393cbb4bdSdlg 	u_int8_t		msg_version_min;
43493cbb4bdSdlg 	u_int8_t		msg_version_maj;
43593cbb4bdSdlg 	u_int8_t		msg_length;
43693cbb4bdSdlg 	u_int8_t		function;
43793cbb4bdSdlg 
43893cbb4bdSdlg 	u_int8_t		header_version_min;
43993cbb4bdSdlg 	u_int8_t		header_version_maj;
44093cbb4bdSdlg 	u_int8_t		ioc_number;
44193cbb4bdSdlg 	u_int8_t		msg_flags;
44293cbb4bdSdlg 
44393cbb4bdSdlg 	u_int32_t		msg_context;
44493cbb4bdSdlg 
44593cbb4bdSdlg 	u_int16_t		ioc_exceptions;
44693cbb4bdSdlg #define MPI_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL	(1<<0)
44793cbb4bdSdlg #define MPI_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID		(1<<1)
44893cbb4bdSdlg #define MPI_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL		(1<<2)
44993cbb4bdSdlg #define MPI_IOCFACTS_EXCEPT_PERSISTENT_TABLE_FULL	(1<<3)
45093cbb4bdSdlg 	u_int16_t		ioc_status;
45193cbb4bdSdlg 
45293cbb4bdSdlg 	u_int32_t		ioc_loginfo;
45393cbb4bdSdlg 
45493cbb4bdSdlg 	u_int8_t		max_chain_depth;
45593cbb4bdSdlg 	u_int8_t		whoinit;
45693cbb4bdSdlg 	u_int8_t		block_size;
45793cbb4bdSdlg 	u_int8_t		flags;
45893cbb4bdSdlg #define MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT		(1<<0)
45993cbb4bdSdlg #define MPI_IOCFACTS_FLAGS_REPLY_FIFO_HOST_SIGNAL	(1<<1)
46093cbb4bdSdlg #define MPI_IOCFACTS_FLAGS_HOST_PAGE_BUFFER_PERSISTENT	(1<<2)
46193cbb4bdSdlg 
46293cbb4bdSdlg 	u_int16_t		reply_queue_depth;
46393cbb4bdSdlg 	u_int16_t		request_frame_size;
46493cbb4bdSdlg 
46593cbb4bdSdlg 	u_int16_t		reserved1;
46693cbb4bdSdlg 	u_int16_t		product_id;	/* product id */
46793cbb4bdSdlg 
46893cbb4bdSdlg 	u_int32_t		current_host_mfa_hi_addr;
46993cbb4bdSdlg 
47093cbb4bdSdlg 	u_int16_t		global_credits;
47193cbb4bdSdlg 	u_int8_t		number_of_ports;
47293cbb4bdSdlg 	u_int8_t		event_state;
47393cbb4bdSdlg 
47493cbb4bdSdlg 	u_int32_t		current_sense_buffer_hi_addr;
47593cbb4bdSdlg 
47693cbb4bdSdlg 	u_int16_t		current_reply_frame_size;
47793cbb4bdSdlg 	u_int8_t		max_devices;
47893cbb4bdSdlg 	u_int8_t		max_buses;
47993cbb4bdSdlg 
48093cbb4bdSdlg 	u_int32_t		fw_image_size;
48193cbb4bdSdlg 
48293cbb4bdSdlg 	u_int32_t		ioc_capabilities;
48393cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q		(1<<0)
48493cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_REPLY_HOST_SIGNAL	(1<<1)
48593cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_QUEUE_FULL_HANDLING	(1<<2)
48693cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER	(1<<3)
48793cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER		(1<<4)
48893cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_EXTENDED_BUFFER		(1<<5)
48993cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_EEDP			(1<<6)
49093cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_BIDIRECTIONAL		(1<<7)
49193cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_MULTICAST		(1<<8)
49293cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_SCSIIO32		(1<<9)
49393cbb4bdSdlg #define MPI_IOCFACTS_CAPABILITY_NO_SCSIIO16		(1<<10)
49493cbb4bdSdlg 
49593cbb4bdSdlg 	u_int8_t		fw_version_dev;
49693cbb4bdSdlg 	u_int8_t		fw_version_unit;
49793cbb4bdSdlg 	u_int8_t		fw_version_min;
49893cbb4bdSdlg 	u_int8_t		fw_version_maj;
49993cbb4bdSdlg 
50093cbb4bdSdlg 	u_int16_t		hi_priority_queue_depth;
50193cbb4bdSdlg 	u_int16_t		reserved2;
50293cbb4bdSdlg 
503d84cdbbaSdlg 	struct mpi_sge		host_page_buffer_sge;
50493cbb4bdSdlg 
50593cbb4bdSdlg 	u_int32_t		reply_fifo_host_signalling_addr;
506*ccb011c7Sdlg } __packed __aligned(4);
50793cbb4bdSdlg 
50893cbb4bdSdlg struct mpi_msg_portfacts_request {
50993cbb4bdSdlg 	u_int8_t		reserved1;
51093cbb4bdSdlg 	u_int8_t		reserved2;
51193cbb4bdSdlg 	u_int8_t		chain_offset;
51293cbb4bdSdlg 	u_int8_t		function;
51393cbb4bdSdlg 
51493cbb4bdSdlg 	u_int8_t		reserved3;
51593cbb4bdSdlg 	u_int8_t		reserved4;
51693cbb4bdSdlg 	u_int8_t		port_number;
51793cbb4bdSdlg 	u_int8_t		msg_flags;
51893cbb4bdSdlg 
51993cbb4bdSdlg 	u_int32_t		msg_context;
52093cbb4bdSdlg 
521*ccb011c7Sdlg } __packed __aligned(4);
52293cbb4bdSdlg 
52393cbb4bdSdlg struct mpi_msg_portfacts_reply {
52493cbb4bdSdlg 	u_int16_t		reserved1;
52593cbb4bdSdlg 	u_int8_t		msg_length;
52693cbb4bdSdlg 	u_int8_t		function;
52793cbb4bdSdlg 
52893cbb4bdSdlg 	u_int16_t		reserved2;
52993cbb4bdSdlg 	u_int8_t		port_number;
53093cbb4bdSdlg 	u_int8_t		msg_flags;
53193cbb4bdSdlg 
53293cbb4bdSdlg 	u_int32_t		msg_context;
53393cbb4bdSdlg 
53493cbb4bdSdlg 	u_int16_t		reserved3;
53593cbb4bdSdlg 	u_int16_t		ioc_status;
53693cbb4bdSdlg 
53793cbb4bdSdlg 	u_int32_t		ioc_loginfo;
53893cbb4bdSdlg 
53993cbb4bdSdlg 	u_int8_t		reserved4;
54093cbb4bdSdlg 	u_int8_t		port_type;
54193cbb4bdSdlg #define MPI_PORTFACTS_PORTTYPE_INACTIVE			0x00
54293cbb4bdSdlg #define MPI_PORTFACTS_PORTTYPE_SCSI			0x01
54393cbb4bdSdlg #define MPI_PORTFACTS_PORTTYPE_FC			0x10
54493cbb4bdSdlg #define MPI_PORTFACTS_PORTTYPE_ISCSI			0x20
54593cbb4bdSdlg #define MPI_PORTFACTS_PORTTYPE_SAS			0x30
54693cbb4bdSdlg 
54793cbb4bdSdlg 	u_int16_t		max_devices;
54893cbb4bdSdlg 
54993cbb4bdSdlg 	u_int16_t		port_scsi_id;
55093cbb4bdSdlg 	u_int16_t		protocol_flags;
55193cbb4bdSdlg #define MPI_PORTFACTS_PROTOCOL_LOGBUSADDR		(1<<0)
55293cbb4bdSdlg #define MPI_PORTFACTS_PROTOCOL_LAN			(1<<1)
55393cbb4bdSdlg #define MPI_PORTFACTS_PROTOCOL_TARGET			(1<<2)
55493cbb4bdSdlg #define MPI_PORTFACTS_PROTOCOL_INITIATOR		(1<<3)
55593cbb4bdSdlg 
55693cbb4bdSdlg 	u_int16_t		max_posted_cmd_buffers;
55793cbb4bdSdlg 	u_int16_t		max_persistent_ids;
55893cbb4bdSdlg 
55993cbb4bdSdlg 	u_int16_t		max_lan_buckets;
56093cbb4bdSdlg 	u_int16_t		reserved5;
56193cbb4bdSdlg 
56293cbb4bdSdlg 	u_int32_t		reserved6;
563*ccb011c7Sdlg } __packed __aligned(4);
56493cbb4bdSdlg 
56593cbb4bdSdlg struct mpi_msg_portenable_request {
56693cbb4bdSdlg 	u_int16_t		reserved1;
56793cbb4bdSdlg 	u_int8_t		chain_offset;
56893cbb4bdSdlg 	u_int8_t		function;
56993cbb4bdSdlg 
57093cbb4bdSdlg 	u_int16_t		reserved2;
57193cbb4bdSdlg 	u_int8_t		port_number;
57293cbb4bdSdlg 	u_int8_t		msg_flags;
57393cbb4bdSdlg 
57493cbb4bdSdlg 	u_int32_t		msg_context;
575*ccb011c7Sdlg } __packed __aligned(4);
57693cbb4bdSdlg 
57793cbb4bdSdlg struct mpi_msg_portenable_reply {
57893cbb4bdSdlg 	u_int16_t		reserved1;
57993cbb4bdSdlg 	u_int8_t		msg_length;
58093cbb4bdSdlg 	u_int8_t		function;
58193cbb4bdSdlg 
58293cbb4bdSdlg 	u_int16_t		reserved2;
58393cbb4bdSdlg 	u_int8_t		port_number;
58493cbb4bdSdlg 	u_int8_t		msg_flags;
58593cbb4bdSdlg 
58693cbb4bdSdlg 	u_int32_t		msg_context;
58793cbb4bdSdlg 
58893cbb4bdSdlg 	u_int16_t		reserved3;
58993cbb4bdSdlg 	u_int16_t		ioc_status;
59093cbb4bdSdlg 
59193cbb4bdSdlg 	u_int32_t		ioc_loginfo;
592*ccb011c7Sdlg } __packed __aligned(4);
59393cbb4bdSdlg 
59493cbb4bdSdlg struct mpi_msg_event_request {
595e62a2b32Sdlg 	u_int8_t		event_switch;
596e62a2b32Sdlg #define MPI_EVENT_SWITCH_ON				(0x01)
597e62a2b32Sdlg #define MPI_EVENT_SWITCH_OFF				(0x00)
59893cbb4bdSdlg 	u_int8_t		reserved1;
59993cbb4bdSdlg 	u_int8_t		chain_offset;
60093cbb4bdSdlg 	u_int8_t		function;
60193cbb4bdSdlg 
60293cbb4bdSdlg 	u_int8_t		reserved2[3];
60393cbb4bdSdlg 	u_int8_t		msg_flags;
60493cbb4bdSdlg 
60593cbb4bdSdlg 	u_int32_t		msg_context;
606*ccb011c7Sdlg } __packed __aligned(4);
60793cbb4bdSdlg 
60893cbb4bdSdlg struct mpi_msg_event_reply {
60993cbb4bdSdlg 	u_int16_t		data_length;
61093cbb4bdSdlg 	u_int8_t		msg_length;
61193cbb4bdSdlg 	u_int8_t		function;
61293cbb4bdSdlg 
61393cbb4bdSdlg 	u_int16_t		reserved1;
61493cbb4bdSdlg 	u_int8_t		ack_required;
615e62a2b32Sdlg #define MPI_EVENT_ACK_REQUIRED				(0x01)
61693cbb4bdSdlg 	u_int8_t		msg_flags;
617e62a2b32Sdlg #define MPI_EVENT_FLAGS_REPLY_KEPT			(1<<7)
61893cbb4bdSdlg 
61993cbb4bdSdlg 	u_int32_t		msg_context;
62093cbb4bdSdlg 
62193cbb4bdSdlg 	u_int16_t		reserved2;
62293cbb4bdSdlg 	u_int16_t		ioc_status;
62393cbb4bdSdlg 
62493cbb4bdSdlg 	u_int32_t		ioc_loginfo;
62593cbb4bdSdlg 
62693cbb4bdSdlg 	u_int32_t		event;
62793cbb4bdSdlg 
62893cbb4bdSdlg 	u_int32_t		event_context;
62993cbb4bdSdlg 
63093cbb4bdSdlg 	/* event data follows */
631*ccb011c7Sdlg } __packed __aligned(4);
63293cbb4bdSdlg 
633e62a2b32Sdlg struct mpi_evt_change {
634e62a2b32Sdlg 	u_int8_t		event_state;
635e62a2b32Sdlg 	u_int8_t		reserved[3];
636*ccb011c7Sdlg } __packed __aligned(4);
637e62a2b32Sdlg 
6387777fa1cSdlg struct mpi_evt_link_status_change {
6397777fa1cSdlg 	u_int8_t		state;
6407777fa1cSdlg #define MPI_EVT_LINK_STATUS_CHANGE_OFFLINE		0x00
6417777fa1cSdlg #define MPI_EVT_LINK_STATUS_CHANGE_ACTIVE		0x01
6427777fa1cSdlg 	u_int8_t		_reserved1[3];
6437777fa1cSdlg 
6447777fa1cSdlg 	u_int8_t		_reserved2[1];
6457777fa1cSdlg 	u_int8_t		port;
6467777fa1cSdlg 	u_int8_t		_reserved3[2];
647*ccb011c7Sdlg } __packed __aligned(4);
6487777fa1cSdlg 
6497777fa1cSdlg struct mpi_evt_loop_status_change {
6507777fa1cSdlg 	u_int8_t		character4;
6517777fa1cSdlg 	u_int8_t		character3;
6527777fa1cSdlg 	u_int8_t		type;
6537777fa1cSdlg #define MPI_EVT_LOOP_STATUS_CHANGE_TYPE_LIP		0x01
6547777fa1cSdlg #define MPI_EVT_LOOP_STATUS_CHANGE_TYPE_LPE		0x02
6557777fa1cSdlg #define MPI_EVT_LOOP_STATUS_CHANGE_TYPE_LPB		0x03
6567777fa1cSdlg 	u_int8_t		_reserved1[1];
6577777fa1cSdlg 
6587777fa1cSdlg 	u_int8_t		_reserved2[1];
6597777fa1cSdlg 	u_int8_t		port;
6607777fa1cSdlg 	u_int8_t		_reserved3[2];
661*ccb011c7Sdlg } __packed __aligned(4);
6627777fa1cSdlg 
6637777fa1cSdlg struct mpi_evt_logout {
6647777fa1cSdlg 	u_int32_t		n_portid;
6657777fa1cSdlg 
6667777fa1cSdlg 	u_int8_t		alias_index;
6677777fa1cSdlg 	u_int8_t		port;
6687777fa1cSdlg 	u_int8_t		_reserved[2];
669*ccb011c7Sdlg } __packed __aligned(4);
6707777fa1cSdlg 
6716c3358fbSdlg struct mpi_evt_sas_phy {
6726c3358fbSdlg 	u_int8_t		phy_num;
6736c3358fbSdlg 	u_int8_t		link_rates;
6746c3358fbSdlg #define MPI_EVT_SASPHY_LINK_CUR(x)			(((x) & 0xf0) >> 4)
6756c3358fbSdlg #define MPI_EVT_SASPHY_LINK_PREV(x)			((x) & 0x0f)
6766c3358fbSdlg #define MPI_EVT_SASPHY_LINK_ENABLED			0x0
6776c3358fbSdlg #define MPI_EVT_SASPHY_LINK_DISABLED			0x1
6786c3358fbSdlg #define MPI_EVT_SASPHY_LINK_NEGFAIL			0x2
6796c3358fbSdlg #define MPI_EVT_SASPHY_LINK_SATAOOB			0x3
6806c3358fbSdlg #define MPI_EVT_SASPHY_LINK_1_5GBPS			0x8
6816c3358fbSdlg #define MPI_EVT_SASPHY_LINK_3_0GBPS			0x9
6826c3358fbSdlg 	u_int16_t		dev_handle;
6836c3358fbSdlg 
6846c3358fbSdlg 	u_int64_t		sas_addr;
685*ccb011c7Sdlg } __packed __aligned(4);
6866c3358fbSdlg 
6876c3358fbSdlg struct mpi_evt_sas_change {
6886c3358fbSdlg 	u_int8_t		target;
6896c3358fbSdlg 	u_int8_t		bus;
6906c3358fbSdlg 	u_int8_t		reason;
6916c3358fbSdlg #define MPI_EVT_SASCH_REASON_ADDED			0x03
6926c3358fbSdlg #define MPI_EVT_SASCH_REASON_NOT_RESPONDING		0x04
6936c3358fbSdlg #define MPI_EVT_SASCH_REASON_SMART_DATA			0x05
6946c3358fbSdlg #define MPI_EVT_SASCH_REASON_NO_PERSIST_ADDED		0x06
6956c3358fbSdlg #define MPI_EVT_SASCH_REASON_UNSUPPORTED		0x07
6966c3358fbSdlg #define MPI_EVT_SASCH_REASON_INTERNAL_RESET		0x08
6976c3358fbSdlg 	u_int8_t		reserved1;
6986c3358fbSdlg 
6996c3358fbSdlg 	u_int8_t		asc;
7006c3358fbSdlg 	u_int8_t		ascq;
7016c3358fbSdlg 	u_int16_t		dev_handle;
7026c3358fbSdlg 
7036c3358fbSdlg 	u_int32_t		device_info;
7046c3358fbSdlg #define MPI_EVT_SASCH_INFO_ATAPI			(1<<13)
7056c3358fbSdlg #define MPI_EVT_SASCH_INFO_LSI				(1<<12)
7066c3358fbSdlg #define MPI_EVT_SASCH_INFO_DIRECT_ATTACHED		(1<<11)
7076c3358fbSdlg #define MPI_EVT_SASCH_INFO_SSP				(1<<10)
7086c3358fbSdlg #define MPI_EVT_SASCH_INFO_STP				(1<<9)
7096c3358fbSdlg #define MPI_EVT_SASCH_INFO_SMP				(1<<8)
7106c3358fbSdlg #define MPI_EVT_SASCH_INFO_SATA				(1<<7)
7116c3358fbSdlg #define MPI_EVT_SASCH_INFO_SSP_INITIATOR		(1<<6)
7126c3358fbSdlg #define MPI_EVT_SASCH_INFO_STP_INITIATOR		(1<<5)
7136c3358fbSdlg #define MPI_EVT_SASCH_INFO_SMP_INITIATOR		(1<<4)
7146c3358fbSdlg #define MPI_EVT_SASCH_INFO_SATA_HOST			(1<<3)
7156c3358fbSdlg #define MPI_EVT_SASCH_INFO_TYPE_MASK			0x7
7166c3358fbSdlg #define MPI_EVT_SASCH_INFO_TYPE_NONE			0x0
7176c3358fbSdlg #define MPI_EVT_SASCH_INFO_TYPE_END			0x1
7186c3358fbSdlg #define MPI_EVT_SASCH_INFO_TYPE_EDGE			0x2
7196c3358fbSdlg #define MPI_EVT_SASCH_INFO_TYPE_FANOUT			0x3
7206c3358fbSdlg 
7216c3358fbSdlg 	u_int16_t		parent_dev_handle;
7226c3358fbSdlg 	u_int8_t		phy_num;
7236c3358fbSdlg 	u_int8_t		reserved2;
7246c3358fbSdlg 
7256c3358fbSdlg 	u_int64_t		sas_addr;
726*ccb011c7Sdlg } __packed __aligned(4);
7276c3358fbSdlg 
728e62a2b32Sdlg struct mpi_msg_eventack_request {
729e62a2b32Sdlg 	u_int16_t		reserved1;
730e62a2b32Sdlg 	u_int8_t		chain_offset;
731e62a2b32Sdlg 	u_int8_t		function;
732e62a2b32Sdlg 
733e62a2b32Sdlg 	u_int8_t		reserved2[3];
734e62a2b32Sdlg 	u_int8_t		msg_flags;
735e62a2b32Sdlg 
736e62a2b32Sdlg 	u_int32_t		msg_context;
737e62a2b32Sdlg 
738e62a2b32Sdlg 	u_int32_t		event;
739e62a2b32Sdlg 
740e62a2b32Sdlg 	u_int32_t		event_context;
741*ccb011c7Sdlg } __packed __aligned(4);
742e62a2b32Sdlg 
743e62a2b32Sdlg struct mpi_msg_eventack_reply {
744e62a2b32Sdlg 	u_int16_t		reserved1;
745e62a2b32Sdlg 	u_int8_t		msg_length;
746e62a2b32Sdlg 	u_int8_t		function;
747e62a2b32Sdlg 
748e62a2b32Sdlg 	u_int8_t		reserved2[3];
749e62a2b32Sdlg 	u_int8_t		msg_flags;
750e62a2b32Sdlg 
751e62a2b32Sdlg 	u_int32_t		msg_context;
752e62a2b32Sdlg 
753e62a2b32Sdlg 	u_int16_t		reserved3;
754e62a2b32Sdlg 	u_int32_t		ioc_status;
755e62a2b32Sdlg 
756e62a2b32Sdlg 	u_int32_t		ioc_loginfo;
757*ccb011c7Sdlg } __packed __aligned(4);
758e62a2b32Sdlg 
759800a91f7Sdlg struct mpi_msg_fwupload_request {
760800a91f7Sdlg 	u_int8_t		image_type;
7614b010939Sdlg #define MPI_FWUPLOAD_IMAGETYPE_IOC_FW			(0x00)
7624b010939Sdlg #define MPI_FWUPLOAD_IMAGETYPE_NV_FW			(0x01)
7634b010939Sdlg #define MPI_FWUPLOAD_IMAGETYPE_MPI_NV_FW		(0x02)
7644b010939Sdlg #define MPI_FWUPLOAD_IMAGETYPE_NV_DATA			(0x03)
7654b010939Sdlg #define MPI_FWUPLOAD_IMAGETYPE_BOOT			(0x04)
7664b010939Sdlg #define MPI_FWUPLOAD_IMAGETYPE_NV_BACKUP		(0x05)
767800a91f7Sdlg 	u_int8_t		reserved1;
768800a91f7Sdlg 	u_int8_t		chain_offset;
769800a91f7Sdlg 	u_int8_t		function;
770800a91f7Sdlg 
771800a91f7Sdlg 	u_int8_t		reserved2[3];
772800a91f7Sdlg 	u_int8_t		msg_flags;
773800a91f7Sdlg 
774800a91f7Sdlg 	u_int32_t		msg_context;
775800a91f7Sdlg 
776800a91f7Sdlg 	struct mpi_fw_tce	tce;
777800a91f7Sdlg 
778800a91f7Sdlg 	/* followed by an sgl */
779*ccb011c7Sdlg } __packed __aligned(4);
780800a91f7Sdlg 
781800a91f7Sdlg struct mpi_msg_fwupload_reply {
782800a91f7Sdlg 	u_int8_t		image_type;
783800a91f7Sdlg 	u_int8_t		reserved1;
784800a91f7Sdlg 	u_int8_t		msg_length;
785800a91f7Sdlg 	u_int8_t		function;
786800a91f7Sdlg 
787800a91f7Sdlg 	u_int8_t		reserved2[3];
788800a91f7Sdlg 	u_int8_t		msg_flags;
789800a91f7Sdlg 
790800a91f7Sdlg 	u_int32_t		msg_context;
791800a91f7Sdlg 
792800a91f7Sdlg 	u_int16_t		reserved3;
793800a91f7Sdlg 	u_int16_t		ioc_status;
794800a91f7Sdlg 
795800a91f7Sdlg 	u_int32_t		ioc_loginfo;
796800a91f7Sdlg 
797800a91f7Sdlg 	u_int32_t		actual_image_size;
798*ccb011c7Sdlg } __packed __aligned(4);
799800a91f7Sdlg 
80093cbb4bdSdlg struct mpi_msg_scsi_io {
80193cbb4bdSdlg 	u_int8_t		target_id;
80293cbb4bdSdlg 	u_int8_t		bus;
80393cbb4bdSdlg 	u_int8_t		chain_offset;
80493cbb4bdSdlg 	u_int8_t		function;
80593cbb4bdSdlg 
80693cbb4bdSdlg 	u_int8_t		cdb_length;
80793cbb4bdSdlg 	u_int8_t		sense_buf_len;
80847a8549dSdlg 	u_int8_t		reserved1;
80993cbb4bdSdlg 	u_int8_t		msg_flags;
81093cbb4bdSdlg #define MPI_SCSIIO_EEDP					0xf0
81193cbb4bdSdlg #define MPI_SCSIIO_CMD_DATA_DIR				(1<<2)
81293cbb4bdSdlg #define MPI_SCSIIO_SENSE_BUF_LOC			(1<<1)
81393cbb4bdSdlg #define MPI_SCSIIO_SENSE_BUF_ADDR_WIDTH			(1<<0)
814d84cdbbaSdlg #define  MPI_SCSIIO_SENSE_BUF_ADDR_WIDTH_32		(0<<0)
815d84cdbbaSdlg #define  MPI_SCSIIO_SENSE_BUF_ADDR_WIDTH_64		(1<<0)
81693cbb4bdSdlg 
81793cbb4bdSdlg 	u_int32_t		msg_context;
81893cbb4bdSdlg 
81993cbb4bdSdlg 	u_int16_t		lun[4];
82093cbb4bdSdlg 
82147a8549dSdlg 	u_int8_t		reserved2;
82247a8549dSdlg 	u_int8_t		tagging;
82347a8549dSdlg #define MPI_SCSIIO_ATTR_SIMPLE_Q			(0x0)
82447a8549dSdlg #define MPI_SCSIIO_ATTR_HEAD_OF_Q			(0x1)
82547a8549dSdlg #define MPI_SCSIIO_ATTR_ORDERED_Q			(0x2)
82647a8549dSdlg #define MPI_SCSIIO_ATTR_ACA_Q				(0x4)
82747a8549dSdlg #define MPI_SCSIIO_ATTR_UNTAGGED			(0x5)
82847a8549dSdlg #define MPI_SCSIIO_ATTR_NO_DISCONNECT			(0x7)
8299e94d140Sdlg 	u_int8_t		reserved3;
83047a8549dSdlg 	u_int8_t		direction;
83147a8549dSdlg #define MPI_SCSIIO_DIR_NONE				(0x0)
83247a8549dSdlg #define MPI_SCSIIO_DIR_WRITE				(0x1)
83347a8549dSdlg #define MPI_SCSIIO_DIR_READ				(0x2)
83493cbb4bdSdlg 
83593cbb4bdSdlg #define MPI_CDB_LEN					16
83693cbb4bdSdlg 	u_int8_t		cdb[MPI_CDB_LEN];
83793cbb4bdSdlg 
83893cbb4bdSdlg 	u_int32_t		data_length;
83993cbb4bdSdlg 
84093cbb4bdSdlg 	u_int32_t		sense_buf_low_addr;
84193cbb4bdSdlg 
84293cbb4bdSdlg 	/* followed by an sgl */
8435406696dSdlg } __packed __aligned(4);
84493cbb4bdSdlg 
84593cbb4bdSdlg struct mpi_msg_scsi_io_error {
84693cbb4bdSdlg 	u_int8_t		target_id;
84793cbb4bdSdlg 	u_int8_t		bus;
84893cbb4bdSdlg 	u_int8_t		msg_length;
84993cbb4bdSdlg 	u_int8_t		function;
85093cbb4bdSdlg 
85193cbb4bdSdlg 	u_int8_t		cdb_length;
85293cbb4bdSdlg 	u_int8_t		sense_buf_len;
85393cbb4bdSdlg 	u_int8_t		reserved1;
85493cbb4bdSdlg 	u_int8_t		msg_flags;
85593cbb4bdSdlg 
85693cbb4bdSdlg 	u_int32_t		msg_context;
85793cbb4bdSdlg 
85893cbb4bdSdlg 	u_int8_t		scsi_status;
85993cbb4bdSdlg #if notyet
86093cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_SUCCESS
86193cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_CHECK_COND
86293cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_BUSY
86393cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_INTERMEDIATE
86493cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_INTERMEDIATE_CONDMET
86593cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_RESERVATION_CONFLICT
86693cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_CMD_TERM
86793cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_TASK_SET_FULL
86893cbb4bdSdlg #define MPI_SCSIIO_ERR_STATUS_ACA_ACTIVE
86993cbb4bdSdlg #endif
87093cbb4bdSdlg 	u_int8_t		scsi_state;
87193cbb4bdSdlg #define MPI_SCSIIO_ERR_STATE_AUTOSENSE_VALID		(1<<0)
87293cbb4bdSdlg #define MPI_SCSIIO_ERR_STATE_AUTOSENSE_FAILED		(1<<2)
87393cbb4bdSdlg #define MPI_SCSIIO_ERR_STATE_NO_SCSI_STATUS		(1<<3)
87493cbb4bdSdlg #define MPI_SCSIIO_ERR_STATE_TERMINATED			(1<<4)
87593cbb4bdSdlg #define MPI_SCSIIO_ERR_STATE_RESPONSE_INFO_VALID	(1<<5)
87693cbb4bdSdlg #define MPI_SCSIIO_ERR_STATE_QUEUE_TAG_REJECTED		(1<<6)
87793cbb4bdSdlg 	u_int16_t		ioc_status;
87893cbb4bdSdlg 
87993cbb4bdSdlg 	u_int32_t		ioc_loginfo;
88093cbb4bdSdlg 
88193cbb4bdSdlg 	u_int32_t		transfer_count;
88293cbb4bdSdlg 
88393cbb4bdSdlg 	u_int32_t		sense_count;
88493cbb4bdSdlg 
88593cbb4bdSdlg 	u_int32_t		response_info;
88693cbb4bdSdlg 
88793cbb4bdSdlg 	u_int16_t		tag;
88893cbb4bdSdlg 	u_int16_t		reserved2;
8895406696dSdlg } __packed __aligned(4);
890c0b5a6e4Sdlg 
891e2fe856eSdlg struct mpi_msg_scsi_task_request {
892e2fe856eSdlg 	u_int8_t		target_id;
893e2fe856eSdlg 	u_int8_t		bus;
894e2fe856eSdlg 	u_int8_t		chain_offset;
895e2fe856eSdlg 	u_int8_t		function;
896e2fe856eSdlg 
897e2fe856eSdlg 	u_int8_t		reserved1;
898e2fe856eSdlg 	u_int8_t		task_type;
899e2fe856eSdlg #define MPI_MSG_SCSI_TASK_TYPE_ABORT_TASK		(0x01)
900e2fe856eSdlg #define MPI_MSG_SCSI_TASK_TYPE_ABRT_TASK_SET		(0x02)
901e2fe856eSdlg #define MPI_MSG_SCSI_TASK_TYPE_TARGET_RESET		(0x03)
902e2fe856eSdlg #define MPI_MSG_SCSI_TASK_TYPE_RESET_BUS		(0x04)
903e2fe856eSdlg #define MPI_MSG_SCSI_TASK_TYPE_LOGICAL_UNIT_RESET	(0x05)
904e2fe856eSdlg 	u_int8_t		reserved2;
905e2fe856eSdlg 	u_int8_t		msg_flags;
906e2fe856eSdlg 
907e2fe856eSdlg 	u_int32_t		msg_context;
908e2fe856eSdlg 
909e2fe856eSdlg 	u_int16_t		lun[4];
910e2fe856eSdlg 
911e2fe856eSdlg 	u_int32_t		reserved3[7]; /* wtf? */
912e2fe856eSdlg 
913e2fe856eSdlg 	u_int32_t		target_msg_context;
914*ccb011c7Sdlg } __packed __aligned(4);
915e2fe856eSdlg 
916e2fe856eSdlg struct mpi_msg_scsi_task_reply {
917e2fe856eSdlg 	u_int8_t		target_id;
918e2fe856eSdlg 	u_int8_t		bus;
919e2fe856eSdlg 	u_int8_t		msg_length;
920e2fe856eSdlg 	u_int8_t		function;
921e2fe856eSdlg 
922e2fe856eSdlg 	u_int8_t		response_code;
923e2fe856eSdlg 	u_int8_t		task_type;
924e2fe856eSdlg 	u_int8_t		reserved1;
925e2fe856eSdlg 	u_int8_t		msg_flags;
926e2fe856eSdlg 
927e2fe856eSdlg 	u_int32_t		msg_context;
928e2fe856eSdlg 
929e2fe856eSdlg 	u_int16_t		reserved2;
930e2fe856eSdlg 	u_int16_t		ioc_status;
931e2fe856eSdlg 
932e2fe856eSdlg 	u_int32_t		ioc_loginfo;
933e2fe856eSdlg 
934e2fe856eSdlg 	u_int32_t		termination_count;
935*ccb011c7Sdlg } __packed __aligned(4);
936e2fe856eSdlg 
93787c4ae93Sdlg struct mpi_msg_raid_action_request {
93887c4ae93Sdlg 	u_int8_t		action;
93987c4ae93Sdlg #define MPI_MSG_RAID_ACTION_STATUS			(0x00)
94087c4ae93Sdlg #define MPI_MSG_RAID_ACTION_INDICATOR_STRUCT		(0x01)
94187c4ae93Sdlg #define MPI_MSG_RAID_ACTION_CREATE_VOLUME		(0x02)
94287c4ae93Sdlg #define MPI_MSG_RAID_ACTION_DELETE_VOLUME		(0x03)
94387c4ae93Sdlg #define MPI_MSG_RAID_ACTION_DISABLE_VOLUME		(0x04)
94487c4ae93Sdlg #define MPI_MSG_RAID_ACTION_ENABLE_VOLUME		(0x05)
94587c4ae93Sdlg #define MPI_MSG_RAID_ACTION_QUIESCE_PHYSIO		(0x06)
94687c4ae93Sdlg #define MPI_MSG_RAID_ACTION_ENABLE_PHYSIO		(0x07)
94787c4ae93Sdlg #define MPI_MSG_RAID_ACTION_CH_VOL_SETTINGS		(0x08)
94887c4ae93Sdlg #define MPI_MSG_RAID_ACTION_PHYSDISK_OFFLINE		(0x0a)
94987c4ae93Sdlg #define MPI_MSG_RAID_ACTION_PHYSDISK_ONLINE		(0x0b)
95087c4ae93Sdlg #define MPI_MSG_RAID_ACTION_CH_PHYSDISK_SETTINGS	(0x0c)
95187c4ae93Sdlg #define MPI_MSG_RAID_ACTION_CREATE_PHYSDISK		(0x0d)
95287c4ae93Sdlg #define MPI_MSG_RAID_ACTION_DELETE_PHYSDISK		(0x0e)
95387c4ae93Sdlg #define MPI_MSG_RAID_ACTION_PHYSDISK_FAIL		(0x0f)
95487c4ae93Sdlg #define MPI_MSG_RAID_ACTION_ACTIVATE_VOLUME		(0x11)
95587c4ae93Sdlg #define MPI_MSG_RAID_ACTION_DEACTIVATE_VOLUME		(0x12)
95687c4ae93Sdlg #define MPI_MSG_RAID_ACTION_SET_RESYNC_RATE		(0x13)
95787c4ae93Sdlg #define MPI_MSG_RAID_ACTION_SET_SCRUB_RATE		(0x14)
95887c4ae93Sdlg #define MPI_MSG_RAID_ACTION_DEVICE_FW_UPDATE_MODE	(0x15)
95987c4ae93Sdlg #define MPI_MSG_RAID_ACTION_SET_VOL_NAME		(0x16)
96087c4ae93Sdlg 	u_int8_t		_reserved1;
96187c4ae93Sdlg 	u_int8_t		chain_offset;
96287c4ae93Sdlg 	u_int8_t		function;
96387c4ae93Sdlg 
96487c4ae93Sdlg 	u_int8_t		vol_id;
96587c4ae93Sdlg 	u_int8_t		vol_bus;
96687c4ae93Sdlg 	u_int8_t		phys_disk_num;
96787c4ae93Sdlg 	u_int8_t		message_flags;
96887c4ae93Sdlg 
96987c4ae93Sdlg 	u_int32_t		msg_context;
97087c4ae93Sdlg 
97187c4ae93Sdlg 	u_int32_t		_reserved2;
97287c4ae93Sdlg 
97387c4ae93Sdlg 	u_int32_t		data_word;
97487c4ae93Sdlg 	u_int32_t		data_sge;
975*ccb011c7Sdlg } __packed __aligned(4);
97687c4ae93Sdlg 
97787c4ae93Sdlg struct mpi_msg_raid_action_reply {
97887c4ae93Sdlg 	u_int8_t		action;
97987c4ae93Sdlg 	u_int8_t		_reserved1;
98087c4ae93Sdlg 	u_int8_t		message_length;
98187c4ae93Sdlg 	u_int8_t		function;
98287c4ae93Sdlg 
98387c4ae93Sdlg 	u_int8_t		vol_id;
98487c4ae93Sdlg 	u_int8_t		vol_bus;
98587c4ae93Sdlg 	u_int8_t		phys_disk_num;
98687c4ae93Sdlg 	u_int8_t		message_flags;
98787c4ae93Sdlg 
98887c4ae93Sdlg 	u_int32_t		message_context;
98987c4ae93Sdlg 
99087c4ae93Sdlg 	u_int16_t		action_status;
99187c4ae93Sdlg #define MPI_RAID_ACTION_STATUS_OK			(0x0000)
99287c4ae93Sdlg #define MPI_RAID_ACTION_STATUS_INVALID			(0x0001)
99387c4ae93Sdlg #define MPI_RAID_ACTION_STATUS_FAILURE			(0x0002)
99487c4ae93Sdlg #define MPI_RAID_ACTION_STATUS_IN_PROGRESS		(0x0004)
99587c4ae93Sdlg 	u_int16_t		ioc_status;
99687c4ae93Sdlg 
99787c4ae93Sdlg 	u_int32_t		ioc_log_info;
99887c4ae93Sdlg 
99987c4ae93Sdlg 	u_int32_t		volume_status;
100087c4ae93Sdlg 
100187c4ae93Sdlg 	u_int32_t		action_data;
1002*ccb011c7Sdlg } __packed __aligned(4);
100387c4ae93Sdlg 
10041a2fe479Sdlg struct mpi_cfg_hdr {
10051a2fe479Sdlg 	u_int8_t		page_version;
10061a2fe479Sdlg 	u_int8_t		page_length;
10071a2fe479Sdlg 	u_int8_t		page_number;
10081a2fe479Sdlg 	u_int8_t		page_type;
10091a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_ATTRIBUTE		(0xf0)
10101a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_MASK			(0x0f)
10111a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_IO_UNIT		(0x00)
10121a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_IOC			(0x01)
10131a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_BIOS			(0x02)
10141a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_SCSI_SPI_PORT		(0x03)
10151a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_SCSI_SPI_DEV		(0x04)
10161a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_FC_PORT		(0x05)
10171a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_FC_DEV			(0x06)
10181a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_LAN			(0x07)
10191a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_RAID_VOL		(0x08)
10201a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_MANUFACTURING		(0x09)
10211a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_RAID_PD		(0x0A)
10221a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_INBAND			(0x0B)
10231a2fe479Sdlg #define MPI_CONFIG_REQ_PAGE_TYPE_EXTENDED		(0x0F)
1024*ccb011c7Sdlg } __packed __aligned(4);
10251a2fe479Sdlg 
102606c1541aSdlg struct mpi_ecfg_hdr {
102706c1541aSdlg 	u_int8_t		page_version;
102806c1541aSdlg 	u_int8_t		reserved1;
102906c1541aSdlg 	u_int8_t		page_number;
103006c1541aSdlg 	u_int8_t		page_type;
103106c1541aSdlg 
103206c1541aSdlg 	u_int16_t		ext_page_length;
103306c1541aSdlg 	u_int8_t		ext_page_type;
103406c1541aSdlg 	u_int8_t		reserved2;
1035*ccb011c7Sdlg } __packed __aligned(4);
103606c1541aSdlg 
1037c0b5a6e4Sdlg struct mpi_msg_config_request {
1038c0b5a6e4Sdlg 	u_int8_t		action;
1039c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_HEADER		(0x00)
1040c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_READ_CURRENT		(0x01)
1041c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_WRITE_CURRENT	(0x02)
1042c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_DEFAULT		(0x03)
1043c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_WRITE_NVRAM		(0x04)
1044c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_READ_DEFAULT		(0x05)
1045c0b5a6e4Sdlg #define MPI_CONFIG_REQ_ACTION_PAGE_READ_NVRAM		(0x06)
1046c0b5a6e4Sdlg 	u_int8_t		reserved1;
1047c0b5a6e4Sdlg 	u_int8_t		chain_offset;
1048c0b5a6e4Sdlg 	u_int8_t		function;
1049c0b5a6e4Sdlg 
1050c0b5a6e4Sdlg 	u_int16_t		ext_page_len;
1051c0b5a6e4Sdlg 	u_int8_t		ext_page_type;
1052c0b5a6e4Sdlg #define MPI_CONFIG_REQ_EXTPAGE_TYPE_SAS_IO_UNIT		(0x10)
1053c0b5a6e4Sdlg #define MPI_CONFIG_REQ_EXTPAGE_TYPE_SAS_EXPANDER	(0x11)
1054c0b5a6e4Sdlg #define MPI_CONFIG_REQ_EXTPAGE_TYPE_SAS_DEVICE		(0x12)
1055c0b5a6e4Sdlg #define MPI_CONFIG_REQ_EXTPAGE_TYPE_SAS_PHY		(0x13)
1056c0b5a6e4Sdlg #define MPI_CONFIG_REQ_EXTPAGE_TYPE_LOG			(0x14)
1057c0b5a6e4Sdlg 	u_int8_t		msg_flags;
1058c0b5a6e4Sdlg 
1059c0b5a6e4Sdlg 	u_int32_t		msg_context;
1060c0b5a6e4Sdlg 
1061c0b5a6e4Sdlg 	u_int32_t		reserved2[2];
1062c0b5a6e4Sdlg 
10631a2fe479Sdlg 	struct mpi_cfg_hdr	config_header;
1064c0b5a6e4Sdlg 
1065c0b5a6e4Sdlg 	u_int32_t		page_address;
1066c0b5a6e4Sdlg /* XXX lots of defns here */
1067c0b5a6e4Sdlg 
1068d84cdbbaSdlg 	struct mpi_sge		page_buffer;
1069*ccb011c7Sdlg } __packed __aligned(4);
1070c0b5a6e4Sdlg 
1071c0b5a6e4Sdlg struct mpi_msg_config_reply {
1072c0b5a6e4Sdlg 	u_int8_t		action;
1073c0b5a6e4Sdlg 	u_int8_t		reserved1;
1074c0b5a6e4Sdlg 	u_int8_t		msg_length;
1075c0b5a6e4Sdlg 	u_int8_t		function;
1076c0b5a6e4Sdlg 
1077c0b5a6e4Sdlg 	u_int16_t		ext_page_length;
1078c0b5a6e4Sdlg 	u_int8_t		ext_page_type;
1079c0b5a6e4Sdlg 	u_int8_t		msg_flags;
1080c0b5a6e4Sdlg 
1081c0b5a6e4Sdlg 	u_int32_t		msg_context;
1082c0b5a6e4Sdlg 
1083c0b5a6e4Sdlg 	u_int16_t		reserved2;
1084c0b5a6e4Sdlg 	u_int16_t		ioc_status;
1085c0b5a6e4Sdlg 
1086c0b5a6e4Sdlg 	u_int32_t		ioc_loginfo;
1087c0b5a6e4Sdlg 
10881a2fe479Sdlg 	struct mpi_cfg_hdr	config_header;
1089*ccb011c7Sdlg } __packed __aligned(4);
1090c0b5a6e4Sdlg 
1091e2fe856eSdlg struct mpi_cfg_spi_port_pg0 {
1092e2fe856eSdlg 	struct mpi_cfg_hdr	config_header;
1093e2fe856eSdlg 
109401ecf088Sdlg 	u_int8_t		capabilities1;
1095e2fe856eSdlg #define MPI_CFG_SPI_PORT_0_CAPABILITIES_PACKETIZED	(1<<0)
1096e2fe856eSdlg #define MPI_CFG_SPI_PORT_0_CAPABILITIES_DT		(1<<1)
1097e2fe856eSdlg #define MPI_CFG_SPI_PORT_0_CAPABILITIES_QAS		(1<<2)
109801ecf088Sdlg 	u_int8_t		min_period;
109901ecf088Sdlg 	u_int8_t		max_offset;
110001ecf088Sdlg 	u_int8_t		capabilities2;
110101ecf088Sdlg #define MPI_CFG_SPI_PORT_0_CAPABILITIES_IDP		(1<<3)
110201ecf088Sdlg #define MPI_CFG_SPI_PORT_0_CAPABILITIES_WIDTH		(1<<5)
110301ecf088Sdlg #define  MPI_CFG_SPI_PORT_0_CAPABILITIES_WIDTH_NARROW	(0<<5)
110401ecf088Sdlg #define  MPI_CFG_SPI_PORT_0_CAPABILITIES_WIDTH_WIDE	(1<<5)
110501ecf088Sdlg #define MPI_CFG_SPI_PORT_0_CAPABILITIES_AIP		(1<<7)
1106e2fe856eSdlg 
110701ecf088Sdlg 	u_int8_t		signalling_type;
110801ecf088Sdlg #define MPI_CFG_SPI_PORT_0_SIGNAL_HVD			(0x1)
110901ecf088Sdlg #define MPI_CFG_SPI_PORT_0_SIGNAL_SE			(0x2)
111001ecf088Sdlg #define MPI_CFG_SPI_PORT_0_SIGNAL_LVD			(0x3)
111101ecf088Sdlg 	u_int16_t		reserved;
111201ecf088Sdlg 	u_int8_t		connected_id;
111301ecf088Sdlg #define  MPI_CFG_SPI_PORT_0_CONNECTEDID_BUSFREE		(0xfe)
111401ecf088Sdlg #define  MPI_CFG_SPI_PORT_0_CONNECTEDID_UNKNOWN		(0xff)
1115*ccb011c7Sdlg } __packed __aligned(4);
1116c0b5a6e4Sdlg 
1117ec8107f2Sdlg struct mpi_cfg_spi_port_pg1 {
1118ec8107f2Sdlg 	struct mpi_cfg_hdr	config_header;
1119ec8107f2Sdlg 
1120ec8107f2Sdlg 	/* configuration */
1121ec8107f2Sdlg 	u_int8_t		port_scsi_id;
11224a669babSdlg 	u_int8_t		reserved1;
11234a669babSdlg 	u_int16_t		port_resp_ids;
1124ec8107f2Sdlg 
1125ec8107f2Sdlg 	u_int32_t		on_bus_timer_value;
1126ec8107f2Sdlg 
1127ec8107f2Sdlg 	u_int8_t		target_config;
1128ec8107f2Sdlg #define MPI_CFG_SPI_PORT_1_TARGCFG_TARGET_ONLY		(0x01)
1129ec8107f2Sdlg #define MPI_CFG_SPI_PORT_1_TARGCFG_INIT_TARGET		(0x02)
1130ec8107f2Sdlg 	u_int8_t		reserved2;
1131ec8107f2Sdlg 	u_int16_t		id_config;
1132*ccb011c7Sdlg } __packed __aligned(4);
1133ec8107f2Sdlg 
1134ec8107f2Sdlg struct mpi_cfg_spi_port_pg2 {
1135ec8107f2Sdlg 	struct mpi_cfg_hdr	config_header;
1136ec8107f2Sdlg 
1137ec8107f2Sdlg 	u_int32_t		port_flags;
1138ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_FLAGS_SCAN_HI2LOW	(1<<0)
1139ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_FLAGS_AVOID_RESET	(1<<2)
1140ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_FLAGS_ALT_CHS		(1<<3)
1141ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_FLAGS_TERM_DISABLED	(1<<4)
1142ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_FLAGS_DV_CTL		(0x3<<5)
1143ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_FLAGS_DV_HOST_BE	(0x0<<5)
1144ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_FLAGS_DV_HOST_B	(0x1<<5)
1145ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_FLAGS_DV_HOST_NONE	(0x3<<5)
1146ec8107f2Sdlg 
1147ec8107f2Sdlg 	u_int32_t		port_settings;
1148ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_SET_HOST_ID		(0x7<<0)
1149ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_SET_INIT_HBA		(0x3<<4)
1150ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_INIT_HBA_DISABLED	(0x0<<4)
1151ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_INIT_HBA_BIOS	(0x1<<4)
1152ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_INIT_HBA_OS	(0x2<<4)
1153ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_INIT_HBA_BIOS_OS	(0x3<<4)
1154ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_SET_REMOVABLE		(0x3<<6)
1155ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_SET_SPINUP_DELAY	(0xf<<8)
1156ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_PORT_SET_SYNC		(0x3<<12)
1157ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_NEG_SUPPORTED	(0x0<<12)
1158ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_NEG_NONE		(0x1<<12)
1159ec8107f2Sdlg #define  MPI_CFG_SPI_PORT_2_PORT_SET_NEG_ALL		(0x3<<12)
1160ec8107f2Sdlg 
1161ec8107f2Sdlg 	struct {
1162ec8107f2Sdlg 		u_int8_t		timeout;
1163ec8107f2Sdlg 		u_int8_t		sync_factor;
1164ec8107f2Sdlg 		u_int16_t		device_flags;
1165ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_DEV_FLAG_DISCONNECT_EN	(1<<0)
1166ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_DEV_FLAG_SCAN_ID_EN		(1<<1)
1167ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_DEV_FLAG_SCAN_LUN_EN		(1<<2)
1168ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_DEV_FLAG_TAQ_Q_EN		(1<<3)
1169ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_DEV_FLAG_WIDE_DIS		(1<<4)
1170ec8107f2Sdlg #define MPI_CFG_SPI_PORT_2_DEV_FLAG_BOOT_CHOICE		(1<<5)
1171ec8107f2Sdlg 	} __packed		device_settings[16];
1172ec8107f2Sdlg };
1173ec8107f2Sdlg 
11743233df6dSdlg struct mpi_cfg_spi_dev_pg0 {
11753233df6dSdlg 	struct mpi_cfg_hdr	config_header;
11763233df6dSdlg 
117701ecf088Sdlg 	u_int8_t		neg_params1;
11783233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_PACKETIZED		(1<<0)
11793233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_DUALXFERS		(1<<1)
11803233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_QAS			(1<<2)
11813233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_HOLD_MCS		(1<<3)
11823233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_WR_FLOW		(1<<4)
11833233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_RD_STRM		(1<<5)
11843233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_RTI			(1<<6)
11853233df6dSdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_PCOMP_EN		(1<<7)
118601ecf088Sdlg 	u_int8_t		neg_period;
118701ecf088Sdlg 	u_int8_t		neg_offset;
118801ecf088Sdlg 	u_int8_t		neg_params2;
118901ecf088Sdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_IDP_EN		(1<<3)
119001ecf088Sdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_WIDTH		(1<<5)
119101ecf088Sdlg #define  MPI_CFG_SPI_DEV_0_NEGPARAMS_WIDTH_NARROW	(0<<5)
119201ecf088Sdlg #define  MPI_CFG_SPI_DEV_0_NEGPARAMS_WIDTH_WIDE		(1<<5)
119301ecf088Sdlg #define MPI_CFG_SPI_DEV_0_NEGPARAMS_AIP			(1<<7)
11943233df6dSdlg 
11953233df6dSdlg 	u_int32_t		information;
11963233df6dSdlg #define MPI_CFG_SPI_DEV_0_INFO_NEG_OCCURRED		(1<<0)
11973233df6dSdlg #define MPI_CFG_SPI_DEV_0_INFO_SDTR_REJECTED		(1<<1)
11983233df6dSdlg #define MPI_CFG_SPI_DEV_0_INFO_WDTR_REJECTED		(1<<2)
11993233df6dSdlg #define MPI_CFG_SPI_DEV_0_INFO_PPR_REJECTED		(1<<3)
1200*ccb011c7Sdlg } __packed __aligned(4);
12013233df6dSdlg 
12023233df6dSdlg struct mpi_cfg_spi_dev_pg1 {
12033233df6dSdlg 	struct mpi_cfg_hdr	config_header;
12043233df6dSdlg 
120501ecf088Sdlg 	u_int8_t		req_params1;
12063233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_PACKETIZED		(1<<0)
12073233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_DUALXFERS		(1<<1)
12083233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_QAS			(1<<2)
12093233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_HOLD_MCS		(1<<3)
12103233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_WR_FLOW		(1<<4)
12113233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_RD_STRM		(1<<5)
12123233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_RTI			(1<<6)
12133233df6dSdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_PCOMP_EN		(1<<7)
121401ecf088Sdlg 	u_int8_t		req_period;
121501ecf088Sdlg 	u_int8_t		req_offset;
121601ecf088Sdlg 	u_int8_t		req_params2;
121701ecf088Sdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_IDP_EN		(1<<3)
121801ecf088Sdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_WIDTH		(1<<5)
121901ecf088Sdlg #define  MPI_CFG_SPI_DEV_1_REQPARAMS_WIDTH_NARROW	(0<<5)
122001ecf088Sdlg #define  MPI_CFG_SPI_DEV_1_REQPARAMS_WIDTH_WIDE		(1<<5)
122101ecf088Sdlg #define MPI_CFG_SPI_DEV_1_REQPARAMS_AIP			(1<<7)
12223233df6dSdlg 
12233233df6dSdlg 	u_int32_t		reserved;
12243233df6dSdlg 
12253233df6dSdlg 	u_int32_t		configuration;
1226f6ad03d5Sdlg #define MPI_CFG_SPI_DEV_1_CONF_WDTR_DISALLOWED		(1<<1)
1227f6ad03d5Sdlg #define MPI_CFG_SPI_DEV_1_CONF_SDTR_DISALLOWED		(1<<2)
1228f6ad03d5Sdlg #define MPI_CFG_SPI_DEV_1_CONF_EXTPARAMS		(1<<3)
1229f6ad03d5Sdlg #define MPI_CFG_SPI_DEV_1_CONF_FORCE_PPR		(1<<4)
1230*ccb011c7Sdlg } __packed __aligned(4);
12313233df6dSdlg 
1232a27f0cf5Sdlg struct mpi_cfg_spi_dev_pg2 {
1233a27f0cf5Sdlg 	struct mpi_cfg_hdr	config_header;
1234a27f0cf5Sdlg 
1235a27f0cf5Sdlg 	u_int32_t		domain_validation;
1236a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_ISI_ENABLED		(1<<4)
1237a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_SECONDARY_DRV_EN		(1<<5)
1238a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_SLEW_RATE_CTL		(0x7<<7)
1239a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_PRIMARY_DRV_STRENGTH	(0x7<<10)
1240a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_XCLKH_ST			(1<<28)
1241a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_XCLKS_ST			(1<<29)
1242a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_XCLKH_DT			(1<<30)
1243a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DV_XCLKS_DT			(1<<31)
1244a27f0cf5Sdlg 
1245a27f0cf5Sdlg 	u_int32_t		parity_pipe_select;
1246a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_PARITY_PIPE_SELECT		(0x3)
1247a27f0cf5Sdlg 
1248a27f0cf5Sdlg 	u_int32_t		data_pipe_select;
1249a27f0cf5Sdlg #define MPI_CFG_SPI_DEV_2_DATA_PIPE_SELECT(x)		(0x3<<((x)*2))
1250a27f0cf5Sdlg 
1251*ccb011c7Sdlg } __packed __aligned(4);
1252a27f0cf5Sdlg 
1253a27f0cf5Sdlg struct mpi_cfg_spi_dev_pg3 {
1254a27f0cf5Sdlg 	struct mpi_cfg_hdr	config_header;
1255a27f0cf5Sdlg 
1256a27f0cf5Sdlg 	u_int16_t		msg_reject_count;
1257a27f0cf5Sdlg 	u_int16_t		phase_error_count;
1258a27f0cf5Sdlg 
1259a27f0cf5Sdlg 	u_int16_t		parity_error_count;
1260a27f0cf5Sdlg 	u_int16_t		reserved;
1261*ccb011c7Sdlg } __packed __aligned(4);
1262a27f0cf5Sdlg 
12631a2fe479Sdlg struct mpi_cfg_manufacturing_pg0 {
12641a2fe479Sdlg 	struct mpi_cfg_hdr	config_header;
12651a2fe479Sdlg 
12661a2fe479Sdlg 	char			chip_name[16];
12671a2fe479Sdlg 	char			chip_revision[8];
12681a2fe479Sdlg 	char			board_name[16];
12691a2fe479Sdlg 	char			board_assembly[16];
12701a2fe479Sdlg 	char			board_tracer_number[16];
1271*ccb011c7Sdlg } __packed __aligned(4);
127208494a45Smarco 
127338b91f27Sdlg struct mpi_cfg_ioc_pg1 {
127438b91f27Sdlg 	struct mpi_cfg_hdr	config_header;
127538b91f27Sdlg 
127638b91f27Sdlg 	u_int32_t		flags;
127738b91f27Sdlg #define MPI_CFG_IOC_1_REPLY_COALESCING			(1<<0)
127838b91f27Sdlg #define MPI_CFG_IOC_1_CTX_REPLY_DISABLE			(1<<4)
127938b91f27Sdlg 
128038b91f27Sdlg 	u_int32_t		coalescing_timeout;
128138b91f27Sdlg 
128238b91f27Sdlg 	u_int8_t		coalescing_depth;
128338b91f27Sdlg 	u_int8_t		pci_slot_num;
128438b91f27Sdlg 	u_int8_t		_reserved[2];
1285*ccb011c7Sdlg } __packed __aligned(4);
128638b91f27Sdlg 
12878177d4f6Sdlg struct mpi_cfg_ioc_pg2 {
12888177d4f6Sdlg 	struct mpi_cfg_hdr	config_header;
12898177d4f6Sdlg 
12908177d4f6Sdlg 	u_int32_t		capabilities;
12918177d4f6Sdlg #define MPI_CFG_IOC_2_CAPABILITIES_IS			(1<<0)
12928177d4f6Sdlg #define MPI_CFG_IOC_2_CAPABILITIES_IME			(1<<1)
12938177d4f6Sdlg #define MPI_CFG_IOC_2_CAPABILITIES_IM			(1<<2)
12948177d4f6Sdlg #define  MPI_CFG_IOC_2_CAPABILITIES_RAID		( \
12958177d4f6Sdlg     MPI_CFG_IOC_2_CAPABILITIES_IS | MPI_CFG_IOC_2_CAPABILITIES_IME | \
12968177d4f6Sdlg     MPI_CFG_IOC_2_CAPABILITIES_IM)
12978177d4f6Sdlg #define MPI_CFG_IOC_2_CAPABILITIES_SES			(1<<29)
12988177d4f6Sdlg #define MPI_CFG_IOC_2_CAPABILITIES_SAFTE		(1<<30)
12998177d4f6Sdlg #define MPI_CFG_IOC_2_CAPABILITIES_XCHANNEL		(1<<31)
13008177d4f6Sdlg 
13018177d4f6Sdlg 	u_int8_t		active_vols;
13028177d4f6Sdlg 	u_int8_t		max_vols;
13038177d4f6Sdlg 	u_int8_t		active_physdisks;
130419472b82Sdlg 	u_int8_t		max_physdisks;
13058177d4f6Sdlg 
13061ac6db51Smarco 	/* followed by a list of mpi_cfg_raid_vol structs */
1307*ccb011c7Sdlg } __packed __aligned(4);
13088177d4f6Sdlg 
130908494a45Smarco struct mpi_cfg_raid_vol {
131008494a45Smarco 	u_int8_t		vol_id;
131108494a45Smarco 	u_int8_t		vol_bus;
131208494a45Smarco 	u_int8_t		vol_ioc;
131308494a45Smarco 	u_int8_t		vol_page;
13147c52961eSdlg 
131508494a45Smarco 	u_int8_t		vol_type;
13168177d4f6Sdlg #define MPI_CFG_RAID_TYPE_RAID_IS			(0x00)
13178177d4f6Sdlg #define MPI_CFG_RAID_TYPE_RAID_IME			(0x01)
13188177d4f6Sdlg #define MPI_CFG_RAID_TYPE_RAID_IM			(0x02)
13191ac6db51Smarco #define MPI_CFG_RAID_TYPE_RAID_5			(0x03)
13201ac6db51Smarco #define MPI_CFG_RAID_TYPE_RAID_6			(0x04)
13211ac6db51Smarco #define MPI_CFG_RAID_TYPE_RAID_10			(0x05)
13221ac6db51Smarco #define MPI_CFG_RAID_TYPE_RAID_50			(0x06)
132308494a45Smarco 	u_int8_t		flags;
132408494a45Smarco #define MPI_CFG_RAID_VOL_INACTIVE	(1<<3)
132508494a45Smarco 	u_int16_t		reserved;
1326*ccb011c7Sdlg } __packed __aligned(4);
132708494a45Smarco 
1328d0161c0fSmarco struct mpi_cfg_ioc_pg3 {
1329d0161c0fSmarco 	struct mpi_cfg_hdr	config_header;
1330d0161c0fSmarco 
1331d0161c0fSmarco 	u_int8_t		no_phys_disks;
1332d0161c0fSmarco 	u_int8_t		reserved[3];
13337c52961eSdlg 
13341ac6db51Smarco 	/* followed by a list of mpi_cfg_raid_physdisk structs */
1335*ccb011c7Sdlg } __packed __aligned(4);
13368177d4f6Sdlg 
13378177d4f6Sdlg struct mpi_cfg_raid_physdisk {
13388177d4f6Sdlg 	u_int8_t		phys_disk_id;
13398177d4f6Sdlg 	u_int8_t		phys_disk_bus;
13408177d4f6Sdlg 	u_int8_t		phys_disk_ioc;
13418177d4f6Sdlg 	u_int8_t		phys_disk_num;
1342*ccb011c7Sdlg } __packed __aligned(4);
134350083d53Smarco 
134450083d53Smarco struct mpi_cfg_fc_port_pg0 {
134550083d53Smarco 	struct mpi_cfg_hdr	config_header;
134650083d53Smarco 
134750083d53Smarco 	u_int32_t		flags;
13487c52961eSdlg 
134950083d53Smarco 	u_int8_t		mpi_port_nr;
135050083d53Smarco 	u_int8_t		link_type;
135150083d53Smarco 	u_int8_t		port_state;
135250083d53Smarco 	u_int8_t		reserved1;
13537c52961eSdlg 
135450083d53Smarco 	u_int32_t		port_id;
13557c52961eSdlg 
135650083d53Smarco 	u_int64_t		wwnn;
13577c52961eSdlg 
135850083d53Smarco 	u_int64_t		wwpn;
13597c52961eSdlg 
136050083d53Smarco 	u_int32_t		supported_service_class;
13617c52961eSdlg 
136250083d53Smarco 	u_int32_t		supported_speeds;
13637c52961eSdlg 
136450083d53Smarco 	u_int32_t		current_speed;
13657c52961eSdlg 
136650083d53Smarco 	u_int32_t		max_frame_size;
13677c52961eSdlg 
136850083d53Smarco 	u_int64_t		fabric_wwnn;
13697c52961eSdlg 
137050083d53Smarco 	u_int64_t		fabric_wwpn;
13717c52961eSdlg 
137250083d53Smarco 	u_int32_t		discovered_port_count;
13737c52961eSdlg 
137450083d53Smarco 	u_int32_t		max_initiators;
13757c52961eSdlg 
137650083d53Smarco 	u_int8_t		max_aliases_supported;
137750083d53Smarco 	u_int8_t		max_hard_aliases_supported;
137850083d53Smarco 	u_int8_t		num_current_aliases;
137950083d53Smarco 	u_int8_t		reserved2;
1380*ccb011c7Sdlg } __packed __aligned(4);
138150083d53Smarco 
1382af885d77Sdlg struct mpi_cfg_fc_port_pg1 {
1383af885d77Sdlg 	struct mpi_cfg_hdr	config_header;
1384af885d77Sdlg 
1385af885d77Sdlg 	u_int32_t		flags;
1386222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MAP_BY_D_ID		(1<<0)
1387222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MAINTAIN_LOGINS		(1<<1)
1388222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_PLOGI_AFTER_LOGO	(1<<2)
1389222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_SUPPRESS_PROT_REG	(1<<3)
1390222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MASK_RR_TOV_UNITS	(0x7<<4)
1391222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MASK_RR_TOV_UNIT_NONE		(0x0<<4)
1392222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MASK_RR_TOV_UNIT_0_001_SEC	(0x1<<4)
1393222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MASK_RR_TOV_UNIT_0_1_SEC	(0x3<<4)
1394222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_MASK_RR_TOV_UNIT_10_SEC		(0x5<<4)
1395222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_TGT_LARGE_CDB_EN	(1<<7)
1396222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_SOFT_ALPA_FALLBACK	(1<<21)
1397222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_PORT_OFFLINE		(1<<22)
1398222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_TGT_MODE_OXID		(1<<23)
1399222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_VERBOSE_RESCAN		(1<<24)
1400222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_FORCE_NOSEEPROM_WWNS	(1<<25)
1401222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_IMMEDIATE_ERROR		(1<<26)
1402222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_EXT_FCP_STATUS_EN	(1<<27)
1403222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_REQ_PROT_LOG_BUS_ADDR	(1<<28)
1404222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_REQ_PROT_LAN		(1<<29)
1405222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_REQ_PROT_TARGET		(1<<30)
1406222d47e4Sdlg #define MPI_CFG_FC_PORT_0_FLAGS_REQ_PROT_INITIATOR	(1<<31)
1407af885d77Sdlg 
1408af885d77Sdlg 	u_int64_t		noseepromwwnn;
1409af885d77Sdlg 
1410af885d77Sdlg 	u_int64_t		noseepromwwpn;
1411af885d77Sdlg 
1412af885d77Sdlg 	u_int8_t		hard_alpa;
1413af885d77Sdlg 	u_int8_t		link_config;
1414af885d77Sdlg 	u_int8_t		topology_config;
1415af885d77Sdlg 	u_int8_t		alt_connector;
1416af885d77Sdlg 
1417af885d77Sdlg 	u_int8_t		num_req_aliases;
1418af885d77Sdlg 	u_int8_t		rr_tov;
1419af885d77Sdlg 	u_int8_t		initiator_dev_to;
1420af885d77Sdlg 	u_int8_t		initiator_lo_pend_to;
1421*ccb011c7Sdlg } __packed __aligned(4);
1422af885d77Sdlg 
142350083d53Smarco struct mpi_cfg_fc_device_pg0 {
142450083d53Smarco 	struct mpi_cfg_hdr	config_header;
142550083d53Smarco 
142650083d53Smarco 	u_int64_t		wwnn;
14277c52961eSdlg 
142850083d53Smarco 	u_int64_t		wwpn;
14297c52961eSdlg 
143050083d53Smarco 	u_int32_t		port_id;
14317c52961eSdlg 
143250083d53Smarco 	u_int8_t		protocol;
143350083d53Smarco 	u_int8_t		flags;
1434bb28c276Sdlg #define MPI_CFG_FC_DEV_0_FLAGS_BUSADDR_VALID		(1<<0)
1435bb28c276Sdlg #define MPI_CFG_FC_DEV_0_FLAGS_PLOGI_INVALID		(1<<1)
1436bb28c276Sdlg #define MPI_CFG_FC_DEV_0_FLAGS_PRLI_INVALID		(1<<2)
143750083d53Smarco 	u_int16_t		bb_credit;
14387c52961eSdlg 
143950083d53Smarco 	u_int16_t		max_rx_frame_size;
144050083d53Smarco 	u_int8_t		adisc_hard_alpa;
144150083d53Smarco 	u_int8_t		port_nr;
14427c52961eSdlg 
144350083d53Smarco 	u_int8_t		fc_ph_low_version;
144450083d53Smarco 	u_int8_t		fc_ph_high_version;
144550083d53Smarco 	u_int8_t		current_target_id;
144650083d53Smarco 	u_int8_t		current_bus;
1447*ccb011c7Sdlg } __packed __aligned(4);
14489cd4a2dfSdlg 
144987c4ae93Sdlg struct mpi_raid_settings {
145087c4ae93Sdlg 	u_int16_t		volume_settings;
145187c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_WRITE_CACHE_EN	(1<<0)
145287c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_OFFLINE_SMART_ERR	(1<<1)
145387c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_OFFLINE_SMART	(1<<2)
145487c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_AUTO_SWAP		(1<<3)
145587c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_HI_PRI_RESYNC	(1<<4)
145687c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_PROD_SUFFIX		(1<<5)
145787c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_FAST_SCRUB		(1<<6) /* obsolete */
145887c4ae93Sdlg #define MPI_CFG_RAID_VOL_0_SETTINGS_DEFAULTS		(1<<15)
145987c4ae93Sdlg 	u_int8_t		hot_spare_pool;
146087c4ae93Sdlg 	u_int8_t		reserved2;
1461*ccb011c7Sdlg } __packed __aligned(4);
146287c4ae93Sdlg 
14639cd4a2dfSdlg struct mpi_cfg_raid_vol_pg0 {
14649cd4a2dfSdlg 	struct mpi_cfg_hdr	config_header;
14659cd4a2dfSdlg 
14669cd4a2dfSdlg 	u_int8_t		volume_id;
14679cd4a2dfSdlg 	u_int8_t		volume_bus;
14689cd4a2dfSdlg 	u_int8_t		volume_ioc;
14699cd4a2dfSdlg 	u_int8_t		volume_type;
14709cd4a2dfSdlg 
14719cd4a2dfSdlg 	u_int8_t		volume_status;
1472bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATUS_ENABLED		(1<<0)
1473bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATUS_QUIESCED		(1<<1)
1474bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATUS_RESYNCING		(1<<2)
1475bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATUS_ACTIVE		(1<<3)
1476ba9fcf36Smarco #define MPI_CFG_RAID_VOL_0_STATUS_BADBLOCK_FULL		(1<<4)
14779cd4a2dfSdlg 	u_int8_t		volume_state;
1478bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATE_OPTIMAL		(0x00)
1479bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATE_DEGRADED		(0x01)
1480bd565707Sdlg #define MPI_CFG_RAID_VOL_0_STATE_FAILED			(0x02)
1481ba9fcf36Smarco #define MPI_CFG_RAID_VOL_0_STATE_MISSING		(0x03)
148287c4ae93Sdlg 	u_int16_t		_reserved1;
14839cd4a2dfSdlg 
148487c4ae93Sdlg 	struct mpi_raid_settings settings;
14859cd4a2dfSdlg 
14869cd4a2dfSdlg 	u_int32_t		max_lba;
14879cd4a2dfSdlg 
148887c4ae93Sdlg 	u_int32_t		_reserved2;
14899cd4a2dfSdlg 
14909cd4a2dfSdlg 	u_int32_t		stripe_size;
14919cd4a2dfSdlg 
149287c4ae93Sdlg 	u_int32_t		_reserved3;
14939cd4a2dfSdlg 
149487c4ae93Sdlg 	u_int32_t		_reserved4;
14959cd4a2dfSdlg 
14969cd4a2dfSdlg 	u_int8_t		num_phys_disks;
14979cd4a2dfSdlg 	u_int8_t		data_scrub_rate;
14989cd4a2dfSdlg 	u_int8_t		resync_rate;
14999cd4a2dfSdlg 	u_int8_t		inactive_status;
1500bd565707Sdlg #define MPI_CFG_RAID_VOL_0_INACTIVE_UNKNOWN		(0x00)
1501bd565707Sdlg #define MPI_CFG_RAID_VOL_0_INACTIVE_STALE_META		(0x01)
1502bd565707Sdlg #define MPI_CFG_RAID_VOL_0_INACTIVE_FOREIGN_VOL		(0x02)
1503bd565707Sdlg #define MPI_CFG_RAID_VOL_0_INACTIVE_NO_RESOURCES	(0x03)
1504bd565707Sdlg #define MPI_CFG_RAID_VOL_0_INACTIVE_CLONED_VOL		(0x04)
1505bd565707Sdlg #define MPI_CFG_RAID_VOL_0_INACTIVE_INSUF_META		(0x05)
15069cd4a2dfSdlg 
15079cd4a2dfSdlg 	/* followed by a list of mpi_cfg_raid_vol_pg0_physdisk structs */
1508*ccb011c7Sdlg } __packed __aligned(4);
15099cd4a2dfSdlg 
15109cd4a2dfSdlg struct mpi_cfg_raid_vol_pg0_physdisk {
15119cd4a2dfSdlg 	u_int16_t		reserved;
15129cd4a2dfSdlg 	u_int8_t		phys_disk_map;
15139cd4a2dfSdlg 	u_int8_t		phys_disk_num;
1514*ccb011c7Sdlg } __packed __aligned(4);
15159cd4a2dfSdlg 
15169cd4a2dfSdlg struct mpi_cfg_raid_vol_pg1 {
15179cd4a2dfSdlg 	struct mpi_cfg_hdr	config_header;
15189cd4a2dfSdlg 
15199cd4a2dfSdlg 	u_int8_t		volume_id;
15209cd4a2dfSdlg 	u_int8_t		volume_bus;
15219cd4a2dfSdlg 	u_int8_t		volume_ioc;
15229cd4a2dfSdlg 	u_int8_t		reserved1;
15239cd4a2dfSdlg 
15249cd4a2dfSdlg 	u_int8_t		guid[24];
15259cd4a2dfSdlg 
15269cd4a2dfSdlg 	u_int8_t		name[32];
15279cd4a2dfSdlg 
15289cd4a2dfSdlg 	u_int64_t		wwid;
15299cd4a2dfSdlg 
15309cd4a2dfSdlg 	u_int32_t		reserved2;
15319cd4a2dfSdlg 
15329cd4a2dfSdlg 	u_int32_t		reserved3;
1533*ccb011c7Sdlg } __packed __aligned(4);
1534bd565707Sdlg 
1535bd565707Sdlg struct mpi_cfg_raid_physdisk_pg0 {
1536bd565707Sdlg 	struct mpi_cfg_hdr	config_header;
1537bd565707Sdlg 
1538bd565707Sdlg 	u_int8_t		phys_disk_id;
1539bd565707Sdlg 	u_int8_t		phys_disk_bus;
1540bd565707Sdlg 	u_int8_t		phys_disk_ioc;
1541bd565707Sdlg 	u_int8_t		phys_disk_num;
1542bd565707Sdlg 
1543bd565707Sdlg 	u_int8_t		enc_id;
1544bd565707Sdlg 	u_int8_t		enc_bus;
1545bd565707Sdlg 	u_int8_t		hot_spare_pool;
1546bd565707Sdlg 	u_int8_t		enc_type;
1547bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_ENCTYPE_NONE		(0x0)
1548bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_ENCTYPE_SAFTE		(0x1)
1549bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_ENCTYPE_SES		(0x2)
1550bd565707Sdlg 
1551bd565707Sdlg 	u_int32_t		reserved1;
1552bd565707Sdlg 
1553bd565707Sdlg 	u_int8_t		ext_disk_id[8];
1554bd565707Sdlg 
1555bd565707Sdlg 	u_int8_t		disk_id[16];
1556bd565707Sdlg 
1557bd565707Sdlg 	u_int8_t		vendor_id[8];
1558bd565707Sdlg 
1559bd565707Sdlg 	u_int8_t		product_id[16];
1560bd565707Sdlg 
1561bd565707Sdlg 	u_int8_t		product_rev[4];
1562bd565707Sdlg 
1563bd565707Sdlg 	u_int8_t		info[32];
1564bd565707Sdlg 
1565bd565707Sdlg 	u_int8_t		phys_disk_status;
1566bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATUS_OUTOFSYNC		(1<<0)
1567bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATUS_QUIESCED		(1<<1)
1568bd565707Sdlg 	u_int8_t		phys_disk_state;
1569bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_ONLINE		(0x00)
1570bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_MISSING		(0x01)
1571bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_INCOMPAT		(0x02)
1572bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_FAILED		(0x03)
1573bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_INIT		(0x04)
1574bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_OFFLINE		(0x05)
1575bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_HOSTFAIL		(0x06)
1576bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_0_STATE_OTHER		(0xff)
1577bd565707Sdlg 	u_int16_t		reserved2;
1578bd565707Sdlg 
1579bd565707Sdlg 	u_int32_t		max_lba;
1580bd565707Sdlg 
1581bd565707Sdlg 	u_int8_t		error_cdb_byte;
1582bd565707Sdlg 	u_int8_t		error_sense_key;
1583bd565707Sdlg 	u_int16_t		reserved3;
1584bd565707Sdlg 
1585bd565707Sdlg 	u_int16_t		error_count;
1586bd565707Sdlg 	u_int8_t		error_asc;
1587bd565707Sdlg 	u_int8_t		error_ascq;
1588bd565707Sdlg 
1589bd565707Sdlg 	u_int16_t		smart_count;
1590bd565707Sdlg 	u_int8_t		smart_asc;
1591bd565707Sdlg 	u_int8_t		smart_ascq;
1592*ccb011c7Sdlg } __packed __aligned(4);
1593bd565707Sdlg 
1594bd565707Sdlg struct mpi_cfg_raid_physdisk_pg1 {
1595bd565707Sdlg 	struct mpi_cfg_hdr	config_header;
1596bd565707Sdlg 
1597bd565707Sdlg 	u_int8_t		num_phys_disk_paths;
1598bd565707Sdlg 	u_int8_t		phys_disk_num;
1599bd565707Sdlg 	u_int16_t		reserved1;
1600bd565707Sdlg 
1601bd565707Sdlg 	u_int32_t		reserved2;
1602bd565707Sdlg 
1603bd565707Sdlg 	/* followed by mpi_cfg_raid_physdisk_path structs */
1604*ccb011c7Sdlg } __packed __aligned(4);
1605bd565707Sdlg 
1606bd565707Sdlg struct mpi_cfg_raid_physdisk_path {
1607bd565707Sdlg 	u_int8_t		phys_disk_id;
1608bd565707Sdlg 	u_int8_t		phys_disk_bus;
1609bd565707Sdlg 	u_int16_t		reserved1;
1610bd565707Sdlg 
1611bd565707Sdlg 	u_int64_t		wwwid;
1612bd565707Sdlg 
1613bd565707Sdlg 	u_int64_t		owner_wwid;
1614bd565707Sdlg 
1615bd565707Sdlg 	u_int8_t		ownder_id;
1616bd565707Sdlg 	u_int8_t		reserved2;
1617bd565707Sdlg 	u_int16_t		flags;
1618bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_PATH_INVALID		(1<<0)
1619bd565707Sdlg #define MPI_CFG_RAID_PHYDISK_PATH_BROKEN		(1<<1)
1620*ccb011c7Sdlg } __packed __aligned(4);
162106c1541aSdlg 
162258950645Sdlg struct mpi_cfg_sas_iou_pg0 {
162358950645Sdlg 	struct mpi_ecfg_hdr	config_header;
162458950645Sdlg 
162558950645Sdlg 	u_int16_t		nvdata_version_default;
162658950645Sdlg 	u_int16_t		nvdata_version_persistent;
162758950645Sdlg 
162858950645Sdlg 	u_int8_t		num_phys;
162958950645Sdlg 	u_int8_t		_reserved1[3];
163058950645Sdlg 
163158950645Sdlg 	/* followed by mpi_cfg_sas_iou_pg0_phy structs */
1632*ccb011c7Sdlg } __packed __aligned(4);
163358950645Sdlg 
163458950645Sdlg struct mpi_cfg_sas_iou_pg0_phy {
163558950645Sdlg 	u_int8_t		port;
163658950645Sdlg 	u_int8_t		port_flags;
163758950645Sdlg 	u_int8_t		phy_flags;
163858950645Sdlg 	u_int8_t		negotiated_link_rate;
163958950645Sdlg 
164058950645Sdlg 	u_int32_t		controller_phy_dev_info;
164158950645Sdlg 
164258950645Sdlg 	u_int16_t		attached_dev_handle;
164358950645Sdlg 	u_int16_t		controller_dev_handle;
164458950645Sdlg 
164558950645Sdlg 	u_int32_t		discovery_status;
1646*ccb011c7Sdlg } __packed __aligned(4);
164758950645Sdlg 
164858950645Sdlg struct mpi_cfg_sas_iou_pg1 {
164958950645Sdlg 	struct mpi_ecfg_hdr	config_header;
165058950645Sdlg 
165158950645Sdlg 	u_int16_t		control_flags;
165258950645Sdlg 	u_int16_t		max_sata_targets;
165358950645Sdlg 
165458950645Sdlg 	u_int16_t		additional_control_flags;
165558950645Sdlg 	u_int16_t		_reserved1;
165658950645Sdlg 
165758950645Sdlg 	u_int8_t		num_phys;
165858950645Sdlg 	u_int8_t		max_sata_q_depth;
165958950645Sdlg 	u_int8_t		report_dev_missing_delay;
166058950645Sdlg 	u_int8_t		io_dev_missing_delay;
166158950645Sdlg 
166258950645Sdlg 	/* followed by mpi_cfg_sas_iou_pg1_phy structs */
1663*ccb011c7Sdlg } __packed __aligned(4);
166458950645Sdlg 
166558950645Sdlg struct mpi_cfg_sas_iou_pg1_phy {
166658950645Sdlg 	u_int8_t		port;
166758950645Sdlg 	u_int8_t		port_flags;
166858950645Sdlg 	u_int8_t		phy_flags;
166958950645Sdlg 	u_int8_t		max_min_link_rate;
167058950645Sdlg 
167158950645Sdlg 	u_int32_t		controller_phy_dev_info;
167258950645Sdlg 
167358950645Sdlg 	u_int16_t		max_target_port_connect_time;
167458950645Sdlg 	u_int16_t		_reserved1;
1675*ccb011c7Sdlg } __packed __aligned(4);
167658950645Sdlg 
167706c1541aSdlg #define MPI_CFG_SAS_DEV_ADDR_NEXT		(0<<28)
167806c1541aSdlg #define MPI_CFG_SAS_DEV_ADDR_BUS		(1<<28)
167906c1541aSdlg #define MPI_CFG_SAS_DEV_ADDR_HANDLE		(2<<28)
168006c1541aSdlg 
168106c1541aSdlg struct mpi_cfg_sas_dev_pg0 {
168206c1541aSdlg 	struct mpi_ecfg_hdr	config_header;
168306c1541aSdlg 
168406c1541aSdlg 	u_int16_t		slot;
168506c1541aSdlg 	u_int16_t		enc_handle;
168606c1541aSdlg 
168706c1541aSdlg 	u_int64_t		sas_addr;
168806c1541aSdlg 
168906c1541aSdlg 	u_int16_t		parent_dev_handle;
169006c1541aSdlg 	u_int8_t		phy_num;
169106c1541aSdlg 	u_int8_t		access_status;
169206c1541aSdlg 
169306c1541aSdlg 	u_int16_t		dev_handle;
169406c1541aSdlg 	u_int8_t		target;
169506c1541aSdlg 	u_int8_t		bus;
169606c1541aSdlg 
169706c1541aSdlg 	u_int32_t		device_info;
169806c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_TYPE			(0x7)
169906c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_TYPE_NONE		(0x0)
170006c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_TYPE_END		(0x1)
170106c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_TYPE_EDGE_EXPANDER	(0x2)
170206c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_TYPE_FANOUT_EXPANDER	(0x3)
170306c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SATA_HOST		(1<<3)
170406c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SMP_INITIATOR		(1<<4)
170506c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_STP_INITIATOR		(1<<5)
170606c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SSP_INITIATOR		(1<<6)
170706c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SATA_DEVICE		(1<<7)
170806c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SMP_TARGET		(1<<8)
170906c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_STP_TARGET		(1<<9)
171006c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SSP_TARGET		(1<<10)
171106c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_DIRECT_ATTACHED	(1<<11)
171206c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_LSI_DEVICE		(1<<12)
171306c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_ATAPI_DEVICE		(1<<13)
171406c1541aSdlg #define MPI_CFG_SAS_DEV_0_DEVINFO_SEP_DEVICE		(1<<14)
171506c1541aSdlg 
171606c1541aSdlg 	u_int16_t		flags;
171706c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_DEV_PRESENT		(1<<0)
171806c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_DEV_MAPPED		(1<<1)
171906c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_DEV_MAPPED_PERSISTENT	(1<<2)
172006c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_SATA_PORT_SELECTOR	(1<<3)
172106c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_SATA_FUA		(1<<4)
172206c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_SATA_NCQ		(1<<5)
172306c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_SATA_SMART		(1<<6)
172406c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_SATA_LBA48		(1<<7)
172506c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_UNSUPPORTED		(1<<8)
172606c1541aSdlg #define MPI_CFG_SAS_DEV_0_FLAGS_SATA_SETTINGS		(1<<9)
172706c1541aSdlg 	u_int8_t		physical_port;
172806c1541aSdlg 	u_int8_t		reserved;
1729*ccb011c7Sdlg } __packed __aligned(4);
1730