xref: /openbsd-src/sys/dev/pci/mpiireg.h (revision e0fb840d78dfbd942efc8e899cf8d7965b4a8427)
1*e0fb840dSjmatthew /*	$OpenBSD: mpiireg.h,v 1.15 2019/12/29 09:34:43 jmatthew Exp $	*/
27f1310d0Sdlg /*
34c95c4b8Smikeb  * Copyright (c) 2010 Mike Belopuhov
47f1310d0Sdlg  * Copyright (c) 2009 James Giannoules
57f1310d0Sdlg  * Copyright (c) 2005 - 2010 David Gwynne <dlg@openbsd.org>
67f1310d0Sdlg  * Copyright (c) 2005 - 2010 Marco Peereboom <marco@openbsd.org>
77f1310d0Sdlg  *
87f1310d0Sdlg  * Permission to use, copy, modify, and distribute this software for any
97f1310d0Sdlg  * purpose with or without fee is hereby granted, provided that the above
107f1310d0Sdlg  * copyright notice and this permission notice appear in all copies.
117f1310d0Sdlg  *
127f1310d0Sdlg  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
137f1310d0Sdlg  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
147f1310d0Sdlg  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
157f1310d0Sdlg  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
167f1310d0Sdlg  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
177f1310d0Sdlg  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
187f1310d0Sdlg  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
197f1310d0Sdlg  */
207f1310d0Sdlg 
217f1310d0Sdlg #define MPII_DOORBELL			(0x00)
227f1310d0Sdlg /* doorbell read bits */
237f1310d0Sdlg #define MPII_DOORBELL_STATE		(0xf<<28) /* ioc state */
247f1310d0Sdlg #define  MPII_DOORBELL_STATE_RESET	(0x0<<28)
257f1310d0Sdlg #define  MPII_DOORBELL_STATE_READY	(0x1<<28)
267f1310d0Sdlg #define  MPII_DOORBELL_STATE_OPER	(0x2<<28)
277f1310d0Sdlg #define  MPII_DOORBELL_STATE_FAULT	(0x4<<28)
287f1310d0Sdlg #define  MPII_DOORBELL_INUSE		(0x1<<27) /* doorbell used */
297f1310d0Sdlg #define MPII_DOORBELL_WHOINIT		(0x7<<24) /* last to reset ioc */
307f1310d0Sdlg #define  MPII_DOORBELL_WHOINIT_NOONE	(0x0<<24) /* not initialized */
317f1310d0Sdlg #define  MPII_DOORBELL_WHOINIT_SYSBIOS	(0x1<<24) /* system bios */
327f1310d0Sdlg #define  MPII_DOORBELL_WHOINIT_ROMBIOS	(0x2<<24) /* rom bios */
337f1310d0Sdlg #define  MPII_DOORBELL_WHOINIT_PCIPEER	(0x3<<24) /* pci peer */
347f1310d0Sdlg #define  MPII_DOORBELL_WHOINIT_DRIVER	(0x4<<24) /* host driver */
357f1310d0Sdlg #define  MPII_DOORBELL_WHOINIT_MANUFACT	(0x5<<24) /* manufacturing */
367f1310d0Sdlg #define MPII_DOORBELL_FAULT		(0xffff<<0) /* fault code */
377f1310d0Sdlg /* doorbell write bits */
387f1310d0Sdlg #define MPII_DOORBELL_FUNCTION_SHIFT	(24)
397f1310d0Sdlg #define MPII_DOORBELL_FUNCTION_MASK	(0xff << MPII_DOORBELL_FUNCTION_SHIFT)
407f1310d0Sdlg #define MPII_DOORBELL_FUNCTION(x)	\
417f1310d0Sdlg     (((x) << MPII_DOORBELL_FUNCTION_SHIFT) & MPII_DOORBELL_FUNCTION_MASK)
427f1310d0Sdlg #define MPII_DOORBELL_DWORDS_SHIFT	16
437f1310d0Sdlg #define MPII_DOORBELL_DWORDS_MASK	(0xff << MPII_DOORBELL_DWORDS_SHIFT)
447f1310d0Sdlg #define MPII_DOORBELL_DWORDS(x)		\
457f1310d0Sdlg     (((x) << MPII_DOORBELL_DWORDS_SHIFT) & MPII_DOORBELL_DWORDS_MASK)
467f1310d0Sdlg #define MPII_DOORBELL_DATA_MASK		(0xffff)
477f1310d0Sdlg 
487f1310d0Sdlg #define MPII_WRITESEQ			(0x04)
497f1310d0Sdlg #define  MPII_WRITESEQ_KEY_VALUE_MASK	(0x0000000f) /* key value */
507f1310d0Sdlg #define  MPII_WRITESEQ_FLUSH		(0x00)
517f1310d0Sdlg #define  MPII_WRITESEQ_1		(0x0f)
527f1310d0Sdlg #define  MPII_WRITESEQ_2		(0x04)
537f1310d0Sdlg #define  MPII_WRITESEQ_3		(0x0b)
547f1310d0Sdlg #define  MPII_WRITESEQ_4		(0x02)
557f1310d0Sdlg #define  MPII_WRITESEQ_5		(0x07)
567f1310d0Sdlg #define  MPII_WRITESEQ_6		(0x0d)
577f1310d0Sdlg 
587f1310d0Sdlg #define MPII_HOSTDIAG			(0x08)
597f1310d0Sdlg #define  MPII_HOSTDIAG_BDS_MASK		(0x00001800) /* boot device select */
607f1310d0Sdlg #define   MPII_HOSTDIAG_BDS_DEFAULT	(0<<11)	/* default address map, flash */
617f1310d0Sdlg #define   MPII_HOSTDIAG_BDS_HCDW	(1<<11)	/* host code and data window */
627f1310d0Sdlg #define  MPII_HOSTDIAG_CLEARFBS		(1<<10) /* clear flash bad sig */
637f1310d0Sdlg #define  MPII_HOSTDIAG_FORCE_HCB_ONBOOT (1<<9)	/* force host controlled boot */
647f1310d0Sdlg #define  MPII_HOSTDIAG_HCB_MODE		(1<<8)	/* host controlled boot mode */
657f1310d0Sdlg #define  MPII_HOSTDIAG_DWRE		(1<<7)	/* diag reg write enabled */
667f1310d0Sdlg #define  MPII_HOSTDIAG_FBS		(1<<6)	/* flash bad sig */
677f1310d0Sdlg #define  MPII_HOSTDIAG_RESET_HIST	(1<<5)	/* reset history */
687f1310d0Sdlg #define  MPII_HOSTDIAG_DIAGWR_EN	(1<<4)	/* diagnostic write enabled */
697f1310d0Sdlg #define  MPII_HOSTDIAG_RESET_ADAPTER	(1<<2)	/* reset adapter */
707f1310d0Sdlg #define  MPII_HOSTDIAG_HOLD_IOC_RESET	(1<<1)	/* hold ioc in reset */
717f1310d0Sdlg #define  MPII_HOSTDIAG_DIAGMEM_EN	(1<<0)	/* diag mem enable */
727f1310d0Sdlg 
737f1310d0Sdlg #define MPII_DIAGRWDATA			(0x10)
747f1310d0Sdlg 
757f1310d0Sdlg #define MPII_DIAGRWADDRLOW		(0x14)
767f1310d0Sdlg 
777f1310d0Sdlg #define MPII_DIAGRWADDRHIGH		(0x18)
787f1310d0Sdlg 
797f1310d0Sdlg #define MPII_INTR_STATUS		(0x30)
807f1310d0Sdlg #define  MPII_INTR_STATUS_SYS2IOCDB	(1<<31) /* ioc written to by host */
817f1310d0Sdlg #define  MPII_INTR_STATUS_RESET		(1<<30) /* physical ioc reset */
827f1310d0Sdlg #define  MPII_INTR_STATUS_REPLY		(1<<3)	/* reply message interrupt */
837f1310d0Sdlg #define  MPII_INTR_STATUS_IOC2SYSDB	(1<<0)	/* ioc write to doorbell */
847f1310d0Sdlg 
857f1310d0Sdlg #define MPII_INTR_MASK			(0x34)
867f1310d0Sdlg #define  MPII_INTR_MASK_RESET		(1<<30) /* ioc reset intr mask */
877f1310d0Sdlg #define  MPII_INTR_MASK_REPLY		(1<<3)	/* reply message intr mask */
887f1310d0Sdlg #define  MPII_INTR_MASK_DOORBELL	(1<<0)	/* doorbell interrupt mask */
897f1310d0Sdlg 
907f1310d0Sdlg #define MPII_DCR_DATA			(0x38)
917f1310d0Sdlg 
927f1310d0Sdlg #define MPII_DCR_ADDRESS		(0x3c)
937f1310d0Sdlg 
947f1310d0Sdlg #define MPII_REPLY_FREE_HOST_INDEX	(0x48)
957f1310d0Sdlg 
967f1310d0Sdlg #define MPII_REPLY_POST_HOST_INDEX	(0x6c)
977f1310d0Sdlg 
987f1310d0Sdlg #define MPII_HCB_SIZE			(0x74)
997f1310d0Sdlg 
1007f1310d0Sdlg #define MPII_HCB_ADDRESS_LOW		(0x78)
1017f1310d0Sdlg #define MPII_HCB_ADDRESS_HIGH		(0x7c)
1027f1310d0Sdlg 
1037f1310d0Sdlg #define MPII_REQ_DESCR_POST_LOW		(0xc0)
1047f1310d0Sdlg #define MPII_REQ_DESCR_POST_HIGH	(0xc4)
1057f1310d0Sdlg 
1067f1310d0Sdlg /*
1077f1310d0Sdlg  * Scatter Gather Lists
1087f1310d0Sdlg  */
1097f1310d0Sdlg 
1107f1310d0Sdlg #define MPII_SGE_FL_LAST		(0x1<<31) /* last element in segment */
1117f1310d0Sdlg #define MPII_SGE_FL_EOB			(0x1<<30) /* last element of buffer */
1127f1310d0Sdlg #define MPII_SGE_FL_TYPE		(0x3<<28) /* element type */
1137f1310d0Sdlg  #define MPII_SGE_FL_TYPE_SIMPLE	(0x1<<28) /* simple element */
1147f1310d0Sdlg  #define MPII_SGE_FL_TYPE_CHAIN		(0x3<<28) /* chain element */
1157f1310d0Sdlg  #define MPII_SGE_FL_TYPE_XACTCTX	(0x0<<28) /* transaction context */
1167f1310d0Sdlg #define MPII_SGE_FL_LOCAL		(0x1<<27) /* local address */
1177f1310d0Sdlg #define MPII_SGE_FL_DIR			(0x1<<26) /* direction */
1187f1310d0Sdlg  #define MPII_SGE_FL_DIR_OUT		(0x1<<26)
1197f1310d0Sdlg  #define MPII_SGE_FL_DIR_IN		(0x0<<26)
1207f1310d0Sdlg #define MPII_SGE_FL_SIZE		(0x1<<25) /* address size */
1217f1310d0Sdlg  #define MPII_SGE_FL_SIZE_32		(0x0<<25)
1227f1310d0Sdlg  #define MPII_SGE_FL_SIZE_64		(0x1<<25)
1237f1310d0Sdlg #define MPII_SGE_FL_EOL			(0x1<<24) /* end of list */
1247f1310d0Sdlg 
1257f1310d0Sdlg struct mpii_sge {
1267f1310d0Sdlg 	u_int32_t		sg_hdr;
127a83d1839Sdlg 	u_int32_t		sg_addr_lo;
128a83d1839Sdlg 	u_int32_t		sg_addr_hi;
12978ebbcdbSdlg } __packed __aligned(4);
1307f1310d0Sdlg 
131aae9631eSjmatthew /*
132aae9631eSjmatthew  * SAS3 (IEEE) Scatter Gather Lists
133aae9631eSjmatthew  */
134aae9631eSjmatthew 
135aae9631eSjmatthew #define MPII_IEEE_SGE_ADDR_MASK		(0x03)
136aae9631eSjmatthew #define MPII_IEEE_SGE_ADDR_SYSTEM	(0x00)
137aae9631eSjmatthew #define MPII_IEEE_SGE_ADDR_IOCDDR	(0x01)
138aae9631eSjmatthew #define MPII_IEEE_SGE_ADDR_IOCPLB	(0x02)
139aae9631eSjmatthew #define MPII_IEEE_SGE_ADDR_IOCPLBNTA	(0x03)
140aae9631eSjmatthew #define MPII_IEEE_SGE_END_OF_LIST	(0x40)
141aae9631eSjmatthew #define MPII_IEEE_SGE_CHAIN_ELEMENT	(0x80)
142aae9631eSjmatthew 
143aae9631eSjmatthew struct mpii_ieee_sge {
144aae9631eSjmatthew 	u_int64_t		sg_addr;
145aae9631eSjmatthew 	u_int32_t		sg_len;
146aae9631eSjmatthew 	u_int16_t		_reserved;
147aae9631eSjmatthew 	u_int8_t		sg_next_chain_offset;
148aae9631eSjmatthew 	u_int8_t		sg_flags;
149aae9631eSjmatthew } __packed __aligned(8);
150aae9631eSjmatthew 
1517f1310d0Sdlg struct mpii_fw_tce {
1527f1310d0Sdlg 	u_int8_t		reserved1;
1537f1310d0Sdlg 	u_int8_t		context_size;
1547f1310d0Sdlg 	u_int8_t		details_length;
1557f1310d0Sdlg 	u_int8_t		flags;
1567f1310d0Sdlg 
1577f1310d0Sdlg 	u_int32_t		reserved2;
1587f1310d0Sdlg 
1597f1310d0Sdlg 	u_int32_t		image_offset;
1607f1310d0Sdlg 
1617f1310d0Sdlg 	u_int32_t		image_size;
16283bc770dSdlg } __packed __aligned(4);
1637f1310d0Sdlg 
1647f1310d0Sdlg /*
1657f1310d0Sdlg  * Messages
1667f1310d0Sdlg  */
1677f1310d0Sdlg 
1687f1310d0Sdlg /* functions */
1697f1310d0Sdlg #define MPII_FUNCTION_SCSI_IO_REQUEST			(0x00)
1707f1310d0Sdlg #define MPII_FUNCTION_SCSI_TASK_MGMT			(0x01)
1717f1310d0Sdlg #define MPII_FUNCTION_IOC_INIT				(0x02)
1727f1310d0Sdlg #define MPII_FUNCTION_IOC_FACTS				(0x03)
1737f1310d0Sdlg #define MPII_FUNCTION_CONFIG				(0x04)
1747f1310d0Sdlg #define MPII_FUNCTION_PORT_FACTS			(0x05)
1757f1310d0Sdlg #define MPII_FUNCTION_PORT_ENABLE			(0x06)
1767f1310d0Sdlg #define MPII_FUNCTION_EVENT_NOTIFICATION		(0x07)
1777f1310d0Sdlg #define MPII_FUNCTION_EVENT_ACK				(0x08)
1787f1310d0Sdlg #define MPII_FUNCTION_FW_DOWNLOAD			(0x09)
1797f1310d0Sdlg #define MPII_FUNCTION_TARGET_CMD_BUFFER_POST		(0x0a)
1807f1310d0Sdlg #define MPII_FUNCTION_TARGET_ASSIST			(0x0b)
1817f1310d0Sdlg #define MPII_FUNCTION_TARGET_STATUS_SEND		(0x0c)
1827f1310d0Sdlg #define MPII_FUNCTION_TARGET_MODE_ABORT			(0x0d)
1837f1310d0Sdlg #define MPII_FUNCTION_FW_UPLOAD				(0x12)
1847f1310d0Sdlg 
1857f1310d0Sdlg #define MPII_FUNCTION_RAID_ACTION			(0x15)
1867f1310d0Sdlg #define MPII_FUNCTION_RAID_SCSI_IO_PASSTHROUGH		(0x16)
1877f1310d0Sdlg 
1887f1310d0Sdlg #define MPII_FUNCTION_TOOLBOX				(0x17)
1897f1310d0Sdlg 
1907f1310d0Sdlg #define MPII_FUNCTION_SCSI_ENCLOSURE_PROCESSOR		(0x18)
1917f1310d0Sdlg 
1927f1310d0Sdlg #define MPII_FUNCTION_SMP_PASSTHROUGH			(0x1a)
1937f1310d0Sdlg #define MPII_FUNCTION_SAS_IO_UNIT_CONTROL		(0x1b)
1947f1310d0Sdlg #define MPII_FUNCTION_SATA_PASSTHROUGH			(0x1c)
1957f1310d0Sdlg 
1967f1310d0Sdlg #define MPII_FUNCTION_DIAG_BUFFER_POST			(0x1d)
1977f1310d0Sdlg #define MPII_FUNCTION_DIAG_RELEASE			(0x1e)
1987f1310d0Sdlg 
1997f1310d0Sdlg #define MPII_FUNCTION_TARGET_CMD_BUF_BASE_POST		(0x24)
2007f1310d0Sdlg #define MPII_FUNCTION_TARGET_CMD_BUF_LIST_POST		(0x25)
2017f1310d0Sdlg 
2027f1310d0Sdlg #define MPII_FUNCTION_IOC_MESSAGE_UNIT_RESET		(0x40)
2037f1310d0Sdlg #define MPII_FUNCTION_IO_UNIT_RESET			(0x41)
2047f1310d0Sdlg #define MPII_FUNCTION_HANDSHAKE				(0x42)
2057f1310d0Sdlg 
2067f1310d0Sdlg /* Common IOCStatus values for all replies */
2077f1310d0Sdlg #define MPII_IOCSTATUS_MASK				(0x7fff)
2087f1310d0Sdlg #define  MPII_IOCSTATUS_SUCCESS				(0x0000)
2097f1310d0Sdlg #define  MPII_IOCSTATUS_INVALID_FUNCTION		(0x0001)
2107f1310d0Sdlg #define  MPII_IOCSTATUS_BUSY				(0x0002)
2117f1310d0Sdlg #define  MPII_IOCSTATUS_INVALID_SGL			(0x0003)
2127f1310d0Sdlg #define  MPII_IOCSTATUS_INTERNAL_ERROR			(0x0004)
2137f1310d0Sdlg #define  MPII_IOCSTATUS_INVALID_VPID			(0x0005)
2147f1310d0Sdlg #define  MPII_IOCSTATUS_INSUFFICIENT_RESOURCES		(0x0006)
2157f1310d0Sdlg #define  MPII_IOCSTATUS_INVALID_FIELD			(0x0007)
2167f1310d0Sdlg #define  MPII_IOCSTATUS_INVALID_STATE			(0x0008)
2177f1310d0Sdlg #define  MPII_IOCSTATUS_OP_STATE_NOT_SUPPORTED		(0x0009)
2187f1310d0Sdlg /* Config IOCStatus values */
2197f1310d0Sdlg #define  MPII_IOCSTATUS_CONFIG_INVALID_ACTION		(0x0020)
2207f1310d0Sdlg #define  MPII_IOCSTATUS_CONFIG_INVALID_TYPE		(0x0021)
2217f1310d0Sdlg #define  MPII_IOCSTATUS_CONFIG_INVALID_PAGE		(0x0022)
2227f1310d0Sdlg #define  MPII_IOCSTATUS_CONFIG_INVALID_DATA		(0x0023)
2237f1310d0Sdlg #define  MPII_IOCSTATUS_CONFIG_NO_DEFAULTS		(0x0024)
2247f1310d0Sdlg #define  MPII_IOCSTATUS_CONFIG_CANT_COMMIT		(0x0025)
2257f1310d0Sdlg /* SCSIIO Reply initiator values */
2267f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_RECOVERED_ERROR		(0x0040)
2277f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_INVALID_DEVHANDLE		(0x0042)
2287f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_DEVICE_NOT_THERE		(0x0043)
2297f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_DATA_OVERRUN		(0x0044)
2307f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_DATA_UNDERRUN		(0x0045)
2317f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_IO_DATA_ERROR		(0x0046)
2327f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_PROTOCOL_ERROR		(0x0047)
2337f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_TASK_TERMINATED		(0x0048)
2347f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_RESIDUAL_MISMATCH		(0x0049)
2357f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_TASK_MGMT_FAILED		(0x004a)
2367f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_IOC_TERMINATED		(0x004b)
2377f1310d0Sdlg #define  MPII_IOCSTATUS_SCSI_EXT_TERMINATED		(0x004c)
2387f1310d0Sdlg /* For use by SCSI Initiator and SCSI Target end-to-end data protection */
2397f1310d0Sdlg #define  MPII_IOCSTATUS_EEDP_GUARD_ERROR		(0x004d)
2407f1310d0Sdlg #define  MPII_IOCSTATUS_EEDP_REF_TAG_ERROR		(0x004e)
2417f1310d0Sdlg #define  MPII_IOCSTATUS_EEDP_APP_TAG_ERROR		(0x004f)
2427f1310d0Sdlg /* SCSI (SPI & FCP) target values */
2437f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_INVALID_IO_INDEX		(0x0062)
2447f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_ABORTED			(0x0063)
2457f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_NO_CONN_RETRYABLE	(0x0064)
2467f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_NO_CONNECTION		(0x0065)
2477f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_XFER_COUNT_MISMATCH	(0x006a)
2487f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_DATA_OFFSET_ERROR	(0x006d)
2497f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_TOO_MUCH_WRITE_DATA	(0x006e)
2507f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_IU_TOO_SHORT		(0x006f)
2517f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_ACK_NAK_TIMEOUT		(0x0070)
2527f1310d0Sdlg #define  MPII_IOCSTATUS_TARGET_NAK_RECEIVED		(0x0071)
2537f1310d0Sdlg /* Serial Attached SCSI values */
2547f1310d0Sdlg #define  MPII_IOCSTATUS_SAS_SMP_REQUEST_FAILED		(0x0090)
2557f1310d0Sdlg #define  MPII_IOCSTATUS_SAS_SMP_DATA_OVERRUN		(0x0091)
2567f1310d0Sdlg /* Diagnostic Tools values */
2577f1310d0Sdlg #define  MPII_IOCSTATUS_DIAGNOSTIC_RELEASED		(0x00a0)
2587f1310d0Sdlg 
2597f1310d0Sdlg #define MPII_REP_IOCLOGINFO_TYPE			(0xf<<28)
2607f1310d0Sdlg #define MPII_REP_IOCLOGINFO_TYPE_NONE			(0x0<<28)
2617f1310d0Sdlg #define MPII_REP_IOCLOGINFO_TYPE_SCSI			(0x1<<28)
2627f1310d0Sdlg #define MPII_REP_IOCLOGINFO_TYPE_FC			(0x2<<28)
2637f1310d0Sdlg #define MPII_REP_IOCLOGINFO_TYPE_SAS			(0x3<<28)
2647f1310d0Sdlg #define MPII_REP_IOCLOGINFO_TYPE_ISCSI			(0x4<<28)
2657f1310d0Sdlg #define MPII_REP_IOCLOGINFO_DATA			(0x0fffffff)
2667f1310d0Sdlg 
2677f1310d0Sdlg /* event notification types */
2687f1310d0Sdlg #define MPII_EVENT_NONE					(0x00)
2697f1310d0Sdlg #define MPII_EVENT_LOG_DATA				(0x01)
2707f1310d0Sdlg #define MPII_EVENT_STATE_CHANGE				(0x02)
2717f1310d0Sdlg #define MPII_EVENT_HARD_RESET_RECEIVED			(0x05)
2727f1310d0Sdlg #define MPII_EVENT_EVENT_CHANGE				(0x0a)
2737f1310d0Sdlg #define MPII_EVENT_TASK_SET_FULL			(0x0e)
2747f1310d0Sdlg #define MPII_EVENT_SAS_DEVICE_STATUS_CHANGE		(0x0f)
2757f1310d0Sdlg #define MPII_EVENT_IR_OPERATION_STATUS			(0x14)
2767f1310d0Sdlg #define MPII_EVENT_SAS_DISCOVERY			(0x16)
2777f1310d0Sdlg #define MPII_EVENT_SAS_BROADCAST_PRIMITIVE		(0x17)
2787f1310d0Sdlg #define MPII_EVENT_SAS_INIT_DEVICE_STATUS_CHANGE	(0x18)
2797f1310d0Sdlg #define MPII_EVENT_SAS_INIT_TABLE_OVERFLOW		(0x19)
2807f1310d0Sdlg #define MPII_EVENT_SAS_TOPOLOGY_CHANGE_LIST		(0x1c)
2817f1310d0Sdlg #define MPII_EVENT_SAS_ENCL_DEVICE_STATUS_CHANGE	(0x1d)
2827f1310d0Sdlg #define MPII_EVENT_IR_VOLUME				(0x1e)
2837f1310d0Sdlg #define MPII_EVENT_IR_PHYSICAL_DISK			(0x1f)
2847f1310d0Sdlg #define MPII_EVENT_IR_CONFIGURATION_CHANGE_LIST		(0x20)
2857f1310d0Sdlg #define MPII_EVENT_LOG_ENTRY_ADDED			(0x21)
2867f1310d0Sdlg 
2877f1310d0Sdlg /* messages */
2887f1310d0Sdlg 
2897f1310d0Sdlg #define MPII_WHOINIT_NOONE				(0x00)
2907f1310d0Sdlg #define MPII_WHOINIT_SYSTEM_BIOS			(0x01)
2917f1310d0Sdlg #define MPII_WHOINIT_ROM_BIOS				(0x02)
2927f1310d0Sdlg #define MPII_WHOINIT_PCI_PEER				(0x03)
2937f1310d0Sdlg #define MPII_WHOINIT_HOST_DRIVER			(0x04)
2947f1310d0Sdlg #define MPII_WHOINIT_MANUFACTURER			(0x05)
2957f1310d0Sdlg 
2967f1310d0Sdlg /* default messages */
2977f1310d0Sdlg 
2987f1310d0Sdlg struct mpii_msg_request {
2997f1310d0Sdlg 	u_int8_t		reserved1;
3007f1310d0Sdlg 	u_int8_t		reserved2;
3017f1310d0Sdlg 	u_int8_t		chain_offset;
3027f1310d0Sdlg 	u_int8_t		function;
3037f1310d0Sdlg 
3047f1310d0Sdlg 	u_int8_t		reserved3;
3057f1310d0Sdlg 	u_int8_t		reserved4;
3067f1310d0Sdlg 	u_int8_t		reserved5;
3077f1310d0Sdlg 	u_int8_t		msg_flags;
3087f1310d0Sdlg 
3097f1310d0Sdlg 	u_int8_t		vp_id;
3107f1310d0Sdlg 	u_int8_t		vf_id;
3117f1310d0Sdlg 	u_int16_t		reserved6;
31283bc770dSdlg } __packed __aligned(4);
3137f1310d0Sdlg 
3147f1310d0Sdlg struct mpii_msg_reply {
3157f1310d0Sdlg 	u_int16_t		reserved1;
3167f1310d0Sdlg 	u_int8_t		msg_length;
3177f1310d0Sdlg 	u_int8_t		function;
3187f1310d0Sdlg 
3197f1310d0Sdlg 	u_int16_t		reserved2;
3207f1310d0Sdlg 	u_int8_t		reserved3;
3217f1310d0Sdlg 	u_int8_t		msg_flags;
3227f1310d0Sdlg 
3237f1310d0Sdlg 	u_int8_t		vp_id;
3247f1310d0Sdlg 	u_int8_t		vf_if;
3257f1310d0Sdlg 	u_int16_t		reserved4;
3267f1310d0Sdlg 
3277f1310d0Sdlg 	u_int16_t		reserved5;
3287f1310d0Sdlg 	u_int16_t		ioc_status;
3297f1310d0Sdlg 
3307f1310d0Sdlg 	u_int32_t		ioc_loginfo;
33183bc770dSdlg } __packed __aligned(4);
3327f1310d0Sdlg 
3337f1310d0Sdlg /* ioc init */
3347f1310d0Sdlg 
3357f1310d0Sdlg struct mpii_msg_iocinit_request {
3367f1310d0Sdlg 	u_int8_t		whoinit;
3377f1310d0Sdlg 	u_int8_t		reserved1;
3387f1310d0Sdlg 	u_int8_t		chain_offset;
3397f1310d0Sdlg 	u_int8_t		function;
3407f1310d0Sdlg 
3417f1310d0Sdlg 	u_int16_t		reserved2;
3427f1310d0Sdlg 	u_int8_t		reserved3;
3437f1310d0Sdlg 	u_int8_t		msg_flags;
3447f1310d0Sdlg 
3457f1310d0Sdlg 	u_int8_t		vp_id;
3467f1310d0Sdlg 	u_int8_t		vf_id;
3477f1310d0Sdlg 	u_int16_t		reserved4;
3487f1310d0Sdlg 
3497f1310d0Sdlg 	u_int8_t		msg_version_min;
3507f1310d0Sdlg 	u_int8_t		msg_version_maj;
3517f1310d0Sdlg 	u_int8_t		hdr_version_unit;
3527f1310d0Sdlg 	u_int8_t		hdr_version_dev;
3537f1310d0Sdlg 
3547f1310d0Sdlg 	u_int32_t		reserved5;
3557f1310d0Sdlg 
3567f1310d0Sdlg 	u_int32_t		reserved6;
3577f1310d0Sdlg 
3587f1310d0Sdlg 	u_int16_t		reserved7;
3597f1310d0Sdlg 	u_int16_t		system_request_frame_size;
3607f1310d0Sdlg 
3617f1310d0Sdlg 	u_int16_t		reply_descriptor_post_queue_depth;
3627f1310d0Sdlg 	u_int16_t		reply_free_queue_depth;
3637f1310d0Sdlg 
3647f1310d0Sdlg 	u_int32_t		sense_buffer_address_high;
3657f1310d0Sdlg 
3667f1310d0Sdlg 	u_int32_t		system_reply_address_high;
3677f1310d0Sdlg 
368bb52f9e6Sdlg 	u_int32_t		system_request_frame_base_address_lo;
369bb52f9e6Sdlg 	u_int32_t		system_request_frame_base_address_hi;
3707f1310d0Sdlg 
371bb52f9e6Sdlg 	u_int32_t		reply_descriptor_post_queue_address_lo;
372bb52f9e6Sdlg 	u_int32_t		reply_descriptor_post_queue_address_hi;
3737f1310d0Sdlg 
374bb52f9e6Sdlg 	u_int32_t		reply_free_queue_address_lo;
375bb52f9e6Sdlg 	u_int32_t		reply_free_queue_address_hi;
3767f1310d0Sdlg 
3777f1310d0Sdlg 	u_int64_t		timestamp;
37883bc770dSdlg } __packed __aligned(4);
3797f1310d0Sdlg 
3807f1310d0Sdlg struct mpii_msg_iocinit_reply {
3817f1310d0Sdlg 	u_int8_t		whoinit;
3827f1310d0Sdlg 	u_int8_t		reserved1;
3837f1310d0Sdlg 	u_int8_t		msg_length;
3847f1310d0Sdlg 	u_int8_t		function;
3857f1310d0Sdlg 
3867f1310d0Sdlg 	u_int16_t		reserved2;
3877f1310d0Sdlg 	u_int8_t		reserved3;
3887f1310d0Sdlg 	u_int8_t		msg_flags;
3897f1310d0Sdlg 
3907f1310d0Sdlg 	u_int8_t		vp_id;
3917f1310d0Sdlg 	u_int8_t		vf_id;
3927f1310d0Sdlg 	u_int16_t		reserved4;
3937f1310d0Sdlg 
3947f1310d0Sdlg 	u_int16_t		reserved5;
3957f1310d0Sdlg 	u_int16_t		ioc_status;
3967f1310d0Sdlg 
3977f1310d0Sdlg 	u_int32_t		ioc_loginfo;
39883bc770dSdlg } __packed __aligned(4);
3997f1310d0Sdlg 
4007f1310d0Sdlg struct mpii_msg_iocfacts_request {
4017f1310d0Sdlg 	u_int16_t		reserved1;
4027f1310d0Sdlg 	u_int8_t		chain_offset;
4037f1310d0Sdlg 	u_int8_t		function;
4047f1310d0Sdlg 
4057f1310d0Sdlg 	u_int16_t		reserved2;
4067f1310d0Sdlg 	u_int8_t		reserved3;
4077f1310d0Sdlg 	u_int8_t		msg_flags;
4087f1310d0Sdlg 
4097f1310d0Sdlg 	u_int8_t		vp_id;
4107f1310d0Sdlg 	u_int8_t		vf_id;
4117f1310d0Sdlg 	u_int16_t		reserved4;
41283bc770dSdlg } __packed __aligned(4);
4137f1310d0Sdlg 
4147f1310d0Sdlg struct mpii_msg_iocfacts_reply {
4157f1310d0Sdlg 	u_int8_t		msg_version_min;
4167f1310d0Sdlg 	u_int8_t		msg_version_maj;
4177f1310d0Sdlg 	u_int8_t		msg_length;
4187f1310d0Sdlg 	u_int8_t		function;
4197f1310d0Sdlg 
4207f1310d0Sdlg 	u_int8_t		header_version_dev;
4217f1310d0Sdlg 	u_int8_t		header_version_unit;
4227f1310d0Sdlg 	u_int8_t		ioc_number;
4237f1310d0Sdlg 	u_int8_t		msg_flags;
4247f1310d0Sdlg 
4257f1310d0Sdlg 	u_int8_t		vp_id;
4267f1310d0Sdlg 	u_int8_t		vf_id;
4277f1310d0Sdlg 	u_int16_t		reserved1;
4287f1310d0Sdlg 
4297f1310d0Sdlg 	u_int16_t		ioc_exceptions;
4307f1310d0Sdlg #define MPII_IOCFACTS_EXCEPT_CONFIG_CHECKSUM_FAIL	(1<<0)
4317f1310d0Sdlg #define MPII_IOCFACTS_EXCEPT_RAID_CONFIG_INVALID	(1<<1)
4327f1310d0Sdlg #define MPII_IOCFACTS_EXCEPT_FW_CHECKSUM_FAIL		(1<<2)
4337f1310d0Sdlg #define MPII_IOCFACTS_EXCEPT_MANUFACT_CHECKSUM_FAIL	(1<<3)
4347f1310d0Sdlg #define MPII_IOCFACTS_EXCEPT_METADATA_UNSUPPORTED	(1<<4)
4357f1310d0Sdlg #define MPII_IOCFACTS_EXCEPT_IR_FOREIGN_CONFIG_MAC	(1<<8)
4367f1310d0Sdlg 	/* XXX JPG BOOT_STATUS in bits[7:5] */
4377f1310d0Sdlg 	/* XXX JPG all these #defines need to be fixed up */
4387f1310d0Sdlg 	u_int16_t		ioc_status;
4397f1310d0Sdlg 
4407f1310d0Sdlg 	u_int32_t		ioc_loginfo;
4417f1310d0Sdlg 
4427f1310d0Sdlg 	u_int8_t		max_chain_depth;
4437f1310d0Sdlg 	u_int8_t		whoinit;
4447f1310d0Sdlg 	u_int8_t		number_of_ports;
4457f1310d0Sdlg 	u_int8_t		reserved2;
4467f1310d0Sdlg 
4477f1310d0Sdlg 	u_int16_t		request_credit;
4487f1310d0Sdlg 	u_int16_t		product_id;
4497f1310d0Sdlg 
4507f1310d0Sdlg 	u_int32_t		ioc_capabilities;
4517f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_EVENT_REPLAY           (1<<13)
4527f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_INTEGRATED_RAID        (1<<12)
4537f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_TLR                    (1<<11)
4547f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_MULTICAST              (1<<8)
4557f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_BIDIRECTIONAL_TARGET   (1<<7)
4567f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_EEDP                   (1<<6)
4577f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER        (1<<4)
4587f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER      (1<<3)
4597f1310d0Sdlg #define MPII_IOCFACTS_CAPABILITY_TASK_SET_FULL_HANDLING (1<<2)
4607f1310d0Sdlg 
4617f1310d0Sdlg 	u_int8_t		fw_version_dev;
4627f1310d0Sdlg 	u_int8_t		fw_version_unit;
4637f1310d0Sdlg 	u_int8_t		fw_version_min;
4647f1310d0Sdlg 	u_int8_t		fw_version_maj;
4657f1310d0Sdlg 
4667f1310d0Sdlg 	u_int16_t		ioc_request_frame_size;
4671aae1d19Sjmatthew 	u_int16_t		ioc_max_chain_seg_size;
4687f1310d0Sdlg 
4697f1310d0Sdlg 	u_int16_t		max_initiators;
4707f1310d0Sdlg 	u_int16_t		max_targets;
4717f1310d0Sdlg 
4727f1310d0Sdlg 	u_int16_t		max_sas_expanders;
4737f1310d0Sdlg 	u_int16_t		max_enclosures;
4747f1310d0Sdlg 
4757f1310d0Sdlg 	u_int16_t		protocol_flags;
4767f1310d0Sdlg 	u_int16_t		high_priority_credit;
4777f1310d0Sdlg 
4787f1310d0Sdlg 	u_int16_t		max_reply_descriptor_post_queue_depth;
4797f1310d0Sdlg 	u_int8_t		reply_frame_size;
4807f1310d0Sdlg 	u_int8_t		max_volumes;
4817f1310d0Sdlg 
4827f1310d0Sdlg 	u_int16_t		max_dev_handle;
4837f1310d0Sdlg 	u_int16_t		max_persistent_entries;
4847f1310d0Sdlg 
4857f1310d0Sdlg 	u_int32_t		reserved4;
48683bc770dSdlg } __packed __aligned(4);
4877f1310d0Sdlg 
4887f1310d0Sdlg struct mpii_msg_portfacts_request {
4897f1310d0Sdlg 	u_int16_t		reserved1;
4907f1310d0Sdlg 	u_int8_t		chain_offset;
4917f1310d0Sdlg 	u_int8_t		function;
4927f1310d0Sdlg 
4937f1310d0Sdlg 	u_int16_t		reserved2;
4947f1310d0Sdlg 	u_int8_t		port_number;
4957f1310d0Sdlg 	u_int8_t		msg_flags;
4967f1310d0Sdlg 
4977f1310d0Sdlg 	u_int8_t		vp_id;
4987f1310d0Sdlg 	u_int8_t		vf_id;
4997f1310d0Sdlg 	u_int16_t		reserved3;
50083bc770dSdlg } __packed __aligned(4);
5017f1310d0Sdlg 
5027f1310d0Sdlg struct mpii_msg_portfacts_reply {
5037f1310d0Sdlg 	u_int16_t		reserved1;
5047f1310d0Sdlg 	u_int8_t		msg_length;
5057f1310d0Sdlg 	u_int8_t		function;
5067f1310d0Sdlg 
5077f1310d0Sdlg 	u_int16_t		reserved2;
5087f1310d0Sdlg 	u_int8_t		port_number;
5097f1310d0Sdlg 	u_int8_t		msg_flags;
5107f1310d0Sdlg 
5117f1310d0Sdlg 	u_int8_t		vp_id;
5127f1310d0Sdlg 	u_int8_t		vf_id;
5137f1310d0Sdlg 	u_int16_t		reserved3;
5147f1310d0Sdlg 
5157f1310d0Sdlg 	u_int16_t		reserved4;
5167f1310d0Sdlg 	u_int16_t		ioc_status;
5177f1310d0Sdlg 
5187f1310d0Sdlg 	u_int32_t		ioc_loginfo;
5197f1310d0Sdlg 
5207f1310d0Sdlg 	u_int8_t		reserved5;
5217f1310d0Sdlg 	u_int8_t		port_type;
5227f1310d0Sdlg #define MPII_PORTFACTS_PORTTYPE_INACTIVE		(0x00)
5237f1310d0Sdlg #define MPII_PORTFACTS_PORTTYPE_FC			(0x10)
5247f1310d0Sdlg #define MPII_PORTFACTS_PORTTYPE_ISCSI			(0x20)
5257f1310d0Sdlg #define MPII_PORTFACTS_PORTTYPE_SAS_PHYSICAL		(0x30)
5267f1310d0Sdlg #define MPII_PORTFACTS_PORTTYPE_SAS_VIRTUAL		(0x31)
5279b998bc8Sjmatthew #define MPII_PORTFACTS_PORTTYPE_TRI_MODE		(0x40)
5287f1310d0Sdlg 	u_int16_t		reserved6;
5297f1310d0Sdlg 
5307f1310d0Sdlg 	u_int16_t		max_posted_cmd_buffers;
5317f1310d0Sdlg 	u_int16_t		reserved7;
53283bc770dSdlg } __packed __aligned(4);
5337f1310d0Sdlg 
5347f1310d0Sdlg struct mpii_msg_portenable_request {
5357f1310d0Sdlg 	u_int16_t		reserved1;
5367f1310d0Sdlg 	u_int8_t		chain_offset;
5377f1310d0Sdlg 	u_int8_t		function;
5387f1310d0Sdlg 
5397f1310d0Sdlg 	u_int8_t		reserved2;
5407f1310d0Sdlg 	u_int8_t		port_flags;
5417f1310d0Sdlg 	u_int8_t		reserved3;
5427f1310d0Sdlg 	u_int8_t		msg_flags;
5437f1310d0Sdlg 
5447f1310d0Sdlg 	u_int8_t		vp_id;
5457f1310d0Sdlg 	u_int8_t		vf_id;
5467f1310d0Sdlg 	u_int16_t		reserved4;
54783bc770dSdlg } __packed __aligned(4);
5487f1310d0Sdlg 
5497f1310d0Sdlg struct mpii_msg_portenable_reply {
5507f1310d0Sdlg 	u_int16_t		reserved1;
5517f1310d0Sdlg 	u_int8_t		msg_length;
5527f1310d0Sdlg 	u_int8_t		function;
5537f1310d0Sdlg 
5547f1310d0Sdlg 	u_int8_t		reserved2;
5557f1310d0Sdlg 	u_int8_t		port_flags;
5567f1310d0Sdlg 	u_int8_t		reserved3;
5577f1310d0Sdlg 	u_int8_t		msg_flags;
5587f1310d0Sdlg 
5597f1310d0Sdlg 	u_int8_t		vp_id;
5607f1310d0Sdlg 	u_int8_t		vf_id;
5617f1310d0Sdlg 	u_int16_t		reserved4;
5627f1310d0Sdlg 
5637f1310d0Sdlg 	u_int16_t		reserved5;
5647f1310d0Sdlg 	u_int16_t		ioc_status;
5657f1310d0Sdlg 
5667f1310d0Sdlg 	u_int32_t		ioc_loginfo;
56783bc770dSdlg } __packed __aligned(4);
5687f1310d0Sdlg 
5697f1310d0Sdlg struct mpii_msg_event_request {
5707f1310d0Sdlg 	u_int16_t		reserved1;
5717f1310d0Sdlg 	u_int8_t		chain_offset;
5727f1310d0Sdlg 	u_int8_t		function;
5737f1310d0Sdlg 
5747f1310d0Sdlg 	u_int16_t		reserved2;
5757f1310d0Sdlg 	u_int8_t		reserved3;
5767f1310d0Sdlg 	u_int8_t		msg_flags;
5777f1310d0Sdlg 
5787f1310d0Sdlg 	u_int8_t		vp_id;
5797f1310d0Sdlg 	u_int8_t		vf_id;
5807f1310d0Sdlg 	u_int16_t		reserved4;
5817f1310d0Sdlg 
5827f1310d0Sdlg 	u_int32_t		reserved5;
5837f1310d0Sdlg 
5847f1310d0Sdlg 	u_int32_t		reserved6;
5857f1310d0Sdlg 
5867f1310d0Sdlg 	u_int32_t		event_masks[4];
5877f1310d0Sdlg 
5887f1310d0Sdlg 	u_int16_t		sas_broadcase_primitive_masks;
5897f1310d0Sdlg 	u_int16_t		reserved7;
5907f1310d0Sdlg 
5917f1310d0Sdlg 	u_int32_t		reserved8;
59283bc770dSdlg } __packed __aligned(4);
5937f1310d0Sdlg 
5947f1310d0Sdlg struct mpii_msg_event_reply {
5957f1310d0Sdlg 	u_int16_t		event_data_length;
5967f1310d0Sdlg 	u_int8_t		msg_length;
5977f1310d0Sdlg 	u_int8_t		function;
5987f1310d0Sdlg 
5997f1310d0Sdlg 	u_int16_t		reserved1;
6007f1310d0Sdlg 	u_int8_t		ack_required;
6017f1310d0Sdlg #define MPII_EVENT_ACK_REQUIRED				(0x01)
6027f1310d0Sdlg 	u_int8_t		msg_flags;
6037f1310d0Sdlg #define MPII_EVENT_FLAGS_REPLY_KEPT			(1<<7)
6047f1310d0Sdlg 
6057f1310d0Sdlg 	u_int8_t		vp_id;
6067f1310d0Sdlg 	u_int8_t		vf_id;
6077f1310d0Sdlg 	u_int16_t		reserved2;
6087f1310d0Sdlg 
6097f1310d0Sdlg 	u_int16_t		reserved3;
6107f1310d0Sdlg 	u_int16_t		ioc_status;
6117f1310d0Sdlg 
6127f1310d0Sdlg 	u_int32_t		ioc_loginfo;
6137f1310d0Sdlg 
6147f1310d0Sdlg 	u_int16_t		event;
6157f1310d0Sdlg 	u_int16_t		reserved4;
6167f1310d0Sdlg 
6177f1310d0Sdlg 	u_int32_t		event_context;
6187f1310d0Sdlg 
6197f1310d0Sdlg 	/* event data follows */
62083bc770dSdlg } __packed __aligned(4);
6217f1310d0Sdlg 
6227f1310d0Sdlg struct mpii_msg_eventack_request {
6237f1310d0Sdlg 	u_int16_t		reserved1;
6247f1310d0Sdlg 	u_int8_t		chain_offset;
6257f1310d0Sdlg 	u_int8_t		function;
6267f1310d0Sdlg 
6277f1310d0Sdlg 	u_int8_t		reserved2[3];
6287f1310d0Sdlg 	u_int8_t		msg_flags;
6297f1310d0Sdlg 
6307f1310d0Sdlg 	u_int8_t		vp_id;
6317f1310d0Sdlg 	u_int8_t		vf_id;
6327f1310d0Sdlg 	u_int16_t		reserved3;
6337f1310d0Sdlg 
6347f1310d0Sdlg 	u_int16_t		event;
6357f1310d0Sdlg 	u_int16_t		reserved4;
6367f1310d0Sdlg 
6377f1310d0Sdlg 	u_int32_t		event_context;
63883bc770dSdlg } __packed __aligned(4);
6397f1310d0Sdlg 
6407f1310d0Sdlg struct mpii_msg_eventack_reply {
6417f1310d0Sdlg 	u_int16_t		reserved1;
6427f1310d0Sdlg 	u_int8_t		msg_length;
6437f1310d0Sdlg 	u_int8_t		function;
6447f1310d0Sdlg 
6457f1310d0Sdlg 	u_int8_t		reserved2[3];
6467f1310d0Sdlg 	u_int8_t		msg_flags;
6477f1310d0Sdlg 
6487f1310d0Sdlg 	u_int8_t		vp_id;
6497f1310d0Sdlg 	u_int8_t		vf_id;
6507f1310d0Sdlg 	u_int16_t		reserved3;
6517f1310d0Sdlg 
6527f1310d0Sdlg 	u_int16_t		reserved4;
6537f1310d0Sdlg 	u_int16_t		ioc_status;
6547f1310d0Sdlg 
6557f1310d0Sdlg 	u_int32_t		ioc_loginfo;
65683bc770dSdlg } __packed __aligned(4);
6577f1310d0Sdlg 
6587f1310d0Sdlg struct mpii_msg_fwupload_request {
6597f1310d0Sdlg 	u_int8_t		image_type;
6607f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_IOC_FW			(0x00)
6617f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_FW			(0x01)
6627f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_BACKUP		(0x05)
6637f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_MANUFACTURING	(0x06)
6647f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_CONFIG_1		(0x07)
6657f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_CONFIG_2		(0x08)
6667f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_MEGARAID		(0x09)
6677f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_NV_COMPLETE		(0x0a)
6687f1310d0Sdlg #define MPII_FWUPLOAD_IMAGETYPE_COMMON_BOOT_BLOCK	(0x0b)
6697f1310d0Sdlg 	u_int8_t		reserved1;
6707f1310d0Sdlg 	u_int8_t		chain_offset;
6717f1310d0Sdlg 	u_int8_t		function;
6727f1310d0Sdlg 
6737f1310d0Sdlg 	u_int8_t		reserved2[3];
6747f1310d0Sdlg 	u_int8_t		msg_flags;
6757f1310d0Sdlg 
6767f1310d0Sdlg 	u_int8_t		vp_id;
6777f1310d0Sdlg 	u_int8_t		vf_id;
6787f1310d0Sdlg 	u_int16_t		reserved3;
6797f1310d0Sdlg 
6807f1310d0Sdlg 	u_int32_t		reserved4;
6817f1310d0Sdlg 
6827f1310d0Sdlg 	u_int32_t		reserved5;
6837f1310d0Sdlg 
6847f1310d0Sdlg 	struct mpii_fw_tce	tce;
6857f1310d0Sdlg 
6867f1310d0Sdlg 	/* followed by an sgl */
68783bc770dSdlg } __packed __aligned(4);
6887f1310d0Sdlg 
6897f1310d0Sdlg struct mpii_msg_fwupload_reply {
6907f1310d0Sdlg 	u_int8_t		image_type;
6917f1310d0Sdlg 	u_int8_t		reserved1;
6927f1310d0Sdlg 	u_int8_t		msg_length;
6937f1310d0Sdlg 	u_int8_t		function;
6947f1310d0Sdlg 
6957f1310d0Sdlg 	u_int8_t		reserved2[3];
6967f1310d0Sdlg 	u_int8_t		msg_flags;
6977f1310d0Sdlg 
6987f1310d0Sdlg 	u_int8_t		vp_id;
6997f1310d0Sdlg 	u_int8_t		vf_id;
7007f1310d0Sdlg 	u_int16_t		reserved3;
7017f1310d0Sdlg 
7027f1310d0Sdlg 	u_int16_t		reserved4;
7037f1310d0Sdlg 	u_int16_t		ioc_status;
7047f1310d0Sdlg 
7057f1310d0Sdlg 	u_int32_t		ioc_loginfo;
7067f1310d0Sdlg 
7077f1310d0Sdlg 	u_int32_t		actual_image_size;
70883bc770dSdlg } __packed __aligned(4);
7097f1310d0Sdlg 
7107f1310d0Sdlg struct mpii_msg_scsi_io {
7117f1310d0Sdlg 	u_int16_t		dev_handle;
7127f1310d0Sdlg 	u_int8_t		chain_offset;
7137f1310d0Sdlg 	u_int8_t		function;
7147f1310d0Sdlg 
7157f1310d0Sdlg 	u_int16_t		reserved1;
7167f1310d0Sdlg 	u_int8_t		reserved2;
7177f1310d0Sdlg 	u_int8_t		msg_flags;
7187f1310d0Sdlg 
7197f1310d0Sdlg 	u_int8_t		vp_id;
7207f1310d0Sdlg 	u_int8_t		vf_id;
7217f1310d0Sdlg 	u_int16_t		reserved3;
7227f1310d0Sdlg 
7237f1310d0Sdlg 	u_int32_t		sense_buffer_low_address;
7247f1310d0Sdlg 
7257f1310d0Sdlg 	u_int16_t		sgl_flags;
7267f1310d0Sdlg 	u_int8_t		sense_buffer_length;
7277f1310d0Sdlg 	u_int8_t		reserved4;
7287f1310d0Sdlg 
7297f1310d0Sdlg 	u_int8_t		sgl_offset0;
7307f1310d0Sdlg 	u_int8_t		sgl_offset1;
7317f1310d0Sdlg 	u_int8_t		sgl_offset2;
7327f1310d0Sdlg 	u_int8_t		sgl_offset3;
7337f1310d0Sdlg 
7347f1310d0Sdlg 	u_int32_t		skip_count;
7357f1310d0Sdlg 
7367f1310d0Sdlg 	u_int32_t		data_length;
7377f1310d0Sdlg 
7387f1310d0Sdlg 	u_int32_t		bidirectional_data_length;
7397f1310d0Sdlg 
7407f1310d0Sdlg 	u_int16_t		io_flags;
7417f1310d0Sdlg 	u_int16_t		eedp_flags;
7427f1310d0Sdlg 
7437f1310d0Sdlg 	u_int32_t		eedp_block_size;
7447f1310d0Sdlg 
7457f1310d0Sdlg 	u_int32_t		secondary_reference_tag;
7467f1310d0Sdlg 
7477f1310d0Sdlg 	u_int16_t		secondary_application_tag;
7487f1310d0Sdlg 	u_int16_t		application_tag_translation_mask;
7497f1310d0Sdlg 
7507f1310d0Sdlg 	u_int16_t		lun[4];
7517f1310d0Sdlg 
7527f1310d0Sdlg /* the following 16 bits are defined in MPI2 as the control field */
7537f1310d0Sdlg 	u_int8_t		reserved5;
7547f1310d0Sdlg 	u_int8_t		tagging;
7557f1310d0Sdlg #define MPII_SCSIIO_ATTR_SIMPLE_Q			(0x0)
7567f1310d0Sdlg #define MPII_SCSIIO_ATTR_HEAD_OF_Q			(0x1)
7577f1310d0Sdlg #define MPII_SCSIIO_ATTR_ORDERED_Q			(0x2)
7587f1310d0Sdlg #define MPII_SCSIIO_ATTR_ACA_Q				(0x4)
7597f1310d0Sdlg #define MPII_SCSIIO_ATTR_UNTAGGED			(0x5)
7607f1310d0Sdlg #define MPII_SCSIIO_ATTR_NO_DISCONNECT			(0x7)
7617f1310d0Sdlg 	u_int8_t		reserved6;
7627f1310d0Sdlg 	u_int8_t		direction;
7637f1310d0Sdlg #define MPII_SCSIIO_DIR_NONE				(0x0)
7647f1310d0Sdlg #define MPII_SCSIIO_DIR_WRITE				(0x1)
7657f1310d0Sdlg #define MPII_SCSIIO_DIR_READ				(0x2)
7667f1310d0Sdlg 
7677f1310d0Sdlg #define	MPII_CDB_LEN					(32)
7687f1310d0Sdlg 	u_int8_t		cdb[MPII_CDB_LEN];
7697f1310d0Sdlg 
7707f1310d0Sdlg 	/* followed by an sgl */
7712069ca5aSdlg } __packed __aligned(4);
7727f1310d0Sdlg 
7737f1310d0Sdlg struct mpii_msg_scsi_io_error {
7747f1310d0Sdlg 	u_int16_t		dev_handle;
7757f1310d0Sdlg 	u_int8_t		msg_length;
7767f1310d0Sdlg 	u_int8_t		function;
7777f1310d0Sdlg 
7787f1310d0Sdlg 	u_int16_t		reserved1;
7797f1310d0Sdlg 	u_int8_t		reserved2;
7807f1310d0Sdlg 	u_int8_t		msg_flags;
7817f1310d0Sdlg 
7827f1310d0Sdlg 	u_int8_t		vp_id;
7837f1310d0Sdlg 	u_int8_t		vf_id;
7847f1310d0Sdlg 	u_int16_t		reserved3;
7857f1310d0Sdlg 
7867f1310d0Sdlg 	u_int8_t		scsi_status;
7874341e70aSmikeb #define MPII_SCSIIO_STATUS_GOOD				(0x00)
7884341e70aSmikeb #define MPII_SCSIIO_STATUS_CHECK_COND			(0x02)
7894341e70aSmikeb #define MPII_SCSIIO_STATUS_COND_MET			(0x04)
7904341e70aSmikeb #define MPII_SCSIIO_STATUS_BUSY				(0x08)
7914341e70aSmikeb #define MPII_SCSIIO_STATUS_INTERMEDIATE			(0x10)
7924341e70aSmikeb #define MPII_SCSIIO_STATUS_INTERMEDIATE_CONDMET		(0x14)
7934341e70aSmikeb #define MPII_SCSIIO_STATUS_RESERVATION_CONFLICT		(0x18)
7944341e70aSmikeb #define MPII_SCSIIO_STATUS_CMD_TERM			(0x22)
7954341e70aSmikeb #define MPII_SCSIIO_STATUS_TASK_SET_FULL		(0x28)
7964341e70aSmikeb #define MPII_SCSIIO_STATUS_ACA_ACTIVE			(0x30)
7974341e70aSmikeb #define MPII_SCSIIO_STATUS_TASK_ABORTED			(0x40)
7987f1310d0Sdlg 	u_int8_t		scsi_state;
7994341e70aSmikeb #define MPII_SCSIIO_STATE_AUTOSENSE_VALID		(1<<0)
8004341e70aSmikeb #define MPII_SCSIIO_STATE_AUTOSENSE_FAILED		(1<<1)
8014341e70aSmikeb #define MPII_SCSIIO_STATE_NO_SCSI_STATUS		(1<<2)
8024341e70aSmikeb #define MPII_SCSIIO_STATE_TERMINATED			(1<<3)
8034341e70aSmikeb #define MPII_SCSIIO_STATE_RESPONSE_INFO_VALID		(1<<4)
8047f1310d0Sdlg 	u_int16_t		ioc_status;
8057f1310d0Sdlg 
8067f1310d0Sdlg 	u_int32_t		ioc_loginfo;
8077f1310d0Sdlg 
8087f1310d0Sdlg 	u_int32_t		transfer_count;
8097f1310d0Sdlg 
8107f1310d0Sdlg 	u_int32_t		sense_count;
8117f1310d0Sdlg 
8127f1310d0Sdlg 	u_int32_t		response_info;
8137f1310d0Sdlg 
8147f1310d0Sdlg 	u_int16_t		task_tag;
8157f1310d0Sdlg 	u_int16_t		reserved4;
8167f1310d0Sdlg 
8177f1310d0Sdlg 	u_int32_t		bidirectional_transfer_count;
8187f1310d0Sdlg 
8197f1310d0Sdlg 	u_int32_t		reserved5;
8207f1310d0Sdlg 
8217f1310d0Sdlg 	u_int32_t		reserved6;
8222069ca5aSdlg } __packed __aligned(4);
8237f1310d0Sdlg 
8247f1310d0Sdlg struct mpii_request_descr {
8257f1310d0Sdlg 	u_int8_t		request_flags;
8267f1310d0Sdlg #define MPII_REQ_DESCR_TYPE_MASK			(0x0e)
8277f1310d0Sdlg #define MPII_REQ_DESCR_SCSI_IO				(0x00)
8287f1310d0Sdlg #define MPII_REQ_DESCR_SCSI_TARGET			(0x02)
8297f1310d0Sdlg #define MPII_REQ_DESCR_HIGH_PRIORITY			(0x06)
8307f1310d0Sdlg #define MPII_REQ_DESCR_DEFAULT				(0x08)
8317f1310d0Sdlg 	u_int8_t		vf_id;
8327f1310d0Sdlg 	u_int16_t		smid;
8337f1310d0Sdlg 
8347f1310d0Sdlg 	u_int16_t		lmid;
8357f1310d0Sdlg 	u_int16_t		dev_handle;
836ad2e4b32Sdlg } __packed __aligned(8);
8377f1310d0Sdlg 
8387f1310d0Sdlg struct mpii_reply_descr {
8397f1310d0Sdlg 	u_int8_t		reply_flags;
8407f1310d0Sdlg #define MPII_REPLY_DESCR_TYPE_MASK			(0x0f)
8417f1310d0Sdlg #define MPII_REPLY_DESCR_SCSI_IO_SUCCESS		(0x00)
8427f1310d0Sdlg #define MPII_REPLY_DESCR_ADDRESS_REPLY			(0x01)
8437f1310d0Sdlg #define MPII_REPLY_DESCR_TARGET_ASSIST_SUCCESS		(0x02)
8447f1310d0Sdlg #define MPII_REPLY_DESCR_TARGET_COMMAND_BUFFER		(0x03)
8457f1310d0Sdlg #define MPII_REPLY_DESCR_UNUSED				(0x0f)
8467f1310d0Sdlg 	u_int8_t		vf_id;
8477f1310d0Sdlg 	u_int16_t		smid;
8487f1310d0Sdlg 
8497f1310d0Sdlg 	union {
8507f1310d0Sdlg 		u_int32_t	data;
8517f1310d0Sdlg 		u_int32_t	frame_addr;	/* Address Reply */
8527f1310d0Sdlg 	};
853ad2e4b32Sdlg } __packed __aligned(8);
8547f1310d0Sdlg 
8557f1310d0Sdlg struct mpii_request_header {
8567f1310d0Sdlg 	u_int16_t		function_dependent1;
8577f1310d0Sdlg 	u_int8_t		chain_offset;
8587f1310d0Sdlg 	u_int8_t		function;
8597f1310d0Sdlg 
8607f1310d0Sdlg 	u_int16_t		function_dependent2;
8617f1310d0Sdlg 	u_int8_t		function_dependent3;
8627f1310d0Sdlg 	u_int8_t		message_flags;
8637f1310d0Sdlg 
8647f1310d0Sdlg 	u_int8_t		vp_id;
8657f1310d0Sdlg 	u_int8_t		vf_id;
8667f1310d0Sdlg 	u_int16_t		reserved;
86783bc770dSdlg } __packed __aligned(4);
8687f1310d0Sdlg 
8697f1310d0Sdlg struct mpii_msg_scsi_task_request {
8707f1310d0Sdlg 	u_int16_t		dev_handle;
8717f1310d0Sdlg 	u_int8_t		chain_offset;
8727f1310d0Sdlg 	u_int8_t		function;
8737f1310d0Sdlg 
8747f1310d0Sdlg 	u_int8_t		reserved1;
8757f1310d0Sdlg 	u_int8_t		task_type;
8767f1310d0Sdlg #define MPII_SCSI_TASK_ABORT_TASK			(0x01)
8777f1310d0Sdlg #define MPII_SCSI_TASK_ABRT_TASK_SET			(0x02)
8787f1310d0Sdlg #define MPII_SCSI_TASK_TARGET_RESET			(0x03)
8797f1310d0Sdlg #define MPII_SCSI_TASK_RESET_BUS			(0x04)
8807f1310d0Sdlg #define MPII_SCSI_TASK_LOGICAL_UNIT_RESET		(0x05)
8817f1310d0Sdlg 	u_int8_t		reserved2;
8827f1310d0Sdlg 	u_int8_t		msg_flags;
8837f1310d0Sdlg 
8847f1310d0Sdlg 	u_int8_t		vp_id;
8857f1310d0Sdlg 	u_int8_t		vf_id;
8867f1310d0Sdlg 	u_int16_t		reserved3;
8877f1310d0Sdlg 
8887f1310d0Sdlg 	u_int16_t		lun[4];
8897f1310d0Sdlg 
8907f1310d0Sdlg 	u_int32_t		reserved4[7];
8917f1310d0Sdlg 
8927f1310d0Sdlg 	u_int16_t		task_mid;
8937f1310d0Sdlg 	u_int16_t		reserved5;
89483bc770dSdlg } __packed __aligned(4);
8957f1310d0Sdlg 
8967f1310d0Sdlg struct mpii_msg_scsi_task_reply {
8977f1310d0Sdlg 	u_int16_t		dev_handle;
8987f1310d0Sdlg 	u_int8_t		msg_length;
8997f1310d0Sdlg 	u_int8_t		function;
9007f1310d0Sdlg 
9017f1310d0Sdlg 	u_int8_t		response_code;
9027f1310d0Sdlg 	u_int8_t		task_type;
9037f1310d0Sdlg 	u_int8_t		reserved1;
9047f1310d0Sdlg 	u_int8_t		msg_flags;
9057f1310d0Sdlg 
9067f1310d0Sdlg 	u_int8_t		vp_id;
9077f1310d0Sdlg 	u_int8_t		vf_id;
9087f1310d0Sdlg 	u_int16_t		reserved2;
9097f1310d0Sdlg 
9107f1310d0Sdlg 	u_int16_t		reserved3;
9117f1310d0Sdlg 	u_int16_t		ioc_status;
9127f1310d0Sdlg 
9137f1310d0Sdlg 	u_int32_t		ioc_loginfo;
9147f1310d0Sdlg 
9157f1310d0Sdlg 	u_int32_t		termination_count;
91683bc770dSdlg } __packed __aligned(4);
9177f1310d0Sdlg 
9187f1310d0Sdlg struct mpii_msg_sas_oper_request {
9197f1310d0Sdlg 	u_int8_t		operation;
9207f1310d0Sdlg #define MPII_SAS_OP_CLEAR_PERSISTENT		(0x02)
9217f1310d0Sdlg #define MPII_SAS_OP_PHY_LINK_RESET		(0x06)
9227f1310d0Sdlg #define MPII_SAS_OP_PHY_HARD_RESET		(0x07)
9237f1310d0Sdlg #define MPII_SAS_OP_PHY_CLEAR_ERROR_LOG		(0x08)
9247f1310d0Sdlg #define MPII_SAS_OP_SEND_PRIMITIVE		(0x0a)
9257f1310d0Sdlg #define MPII_SAS_OP_FORCE_FULL_DISCOVERY	(0x0b)
9267f1310d0Sdlg #define MPII_SAS_OP_TRANSMIT_PORT_SELECT	(0x0c)
9277f1310d0Sdlg #define MPII_SAS_OP_REMOVE_DEVICE		(0x0d)
9287f1310d0Sdlg #define MPII_SAS_OP_LOOKUP_MAPPING		(0x0e)
9297f1310d0Sdlg #define MPII_SAS_OP_SET_IOC_PARAM		(0x0f)
9307f1310d0Sdlg 	u_int8_t		reserved1;
9317f1310d0Sdlg 	u_int8_t		chain_offset;
9327f1310d0Sdlg 	u_int8_t		function;
9337f1310d0Sdlg 
9347f1310d0Sdlg 	u_int16_t		dev_handle;
9357f1310d0Sdlg 	u_int8_t		ioc_param;
9367f1310d0Sdlg 	u_int8_t		msg_flags;
9377f1310d0Sdlg 
9387f1310d0Sdlg 	u_int8_t		vp_id;
9397f1310d0Sdlg 	u_int8_t		vf_id;
9407f1310d0Sdlg 	u_int16_t		reserved2;
9417f1310d0Sdlg 
9427f1310d0Sdlg 	u_int16_t		reserved3;
9437f1310d0Sdlg 	u_int8_t		phy_num;
9447f1310d0Sdlg 	u_int8_t		prim_flags;
9457f1310d0Sdlg 
9467f1310d0Sdlg 	u_int32_t		primitive;
9477f1310d0Sdlg 
9487f1310d0Sdlg 	u_int8_t		lookup_method;
9497f1310d0Sdlg #define MPII_SAS_LOOKUP_METHOD_SAS_ADDR		(0x01)
9507f1310d0Sdlg #define MPII_SAS_LOOKUP_METHOD_SAS_ENCL		(0x02)
9517f1310d0Sdlg #define MPII_SAS_LOOKUP_METHOD_SAS_DEVNAME	(0x03)
9527f1310d0Sdlg 	u_int8_t		reserved4;
9537f1310d0Sdlg 	u_int16_t		slot_num;
9547f1310d0Sdlg 
9557f1310d0Sdlg 	u_int64_t		lookup_addr;
9567f1310d0Sdlg 
9577f1310d0Sdlg 	u_int32_t		ioc_param_value;
9587f1310d0Sdlg 
9597f1310d0Sdlg 	u_int64_t		reserved5;
96083bc770dSdlg } __packed __aligned(4);
9617f1310d0Sdlg 
9627f1310d0Sdlg struct mpii_msg_sas_oper_reply {
9637f1310d0Sdlg 	u_int8_t		operation;
9647f1310d0Sdlg 	u_int8_t		reserved1;
9657f1310d0Sdlg 	u_int8_t		chain_offset;
9667f1310d0Sdlg 	u_int8_t		function;
9677f1310d0Sdlg 
9687f1310d0Sdlg 	u_int16_t		dev_handle;
9697f1310d0Sdlg 	u_int8_t		ioc_param;
9707f1310d0Sdlg 	u_int8_t		msg_flags;
9717f1310d0Sdlg 
9727f1310d0Sdlg 	u_int8_t		vp_id;
9737f1310d0Sdlg 	u_int8_t		vf_id;
9747f1310d0Sdlg 	u_int16_t		reserved2;
9757f1310d0Sdlg 
9767f1310d0Sdlg 	u_int16_t		reserved3;
9777f1310d0Sdlg 	u_int16_t		ioc_status;
9787f1310d0Sdlg 
9797f1310d0Sdlg 	u_int32_t		ioc_loginfo;
98083bc770dSdlg } __packed __aligned(4);
9817f1310d0Sdlg 
9827f1310d0Sdlg struct mpii_msg_raid_action_request {
9837f1310d0Sdlg 	u_int8_t	action;
9847f1310d0Sdlg #define MPII_RAID_ACTION_CHANGE_VOL_WRITE_CACHE	(0x17)
9857f1310d0Sdlg 	u_int8_t	reserved1;
9867f1310d0Sdlg 	u_int8_t	chain_offset;
9877f1310d0Sdlg 	u_int8_t	function;
9887f1310d0Sdlg 
9897f1310d0Sdlg 	u_int16_t	vol_dev_handle;
9907f1310d0Sdlg 	u_int8_t	phys_disk_num;
9917f1310d0Sdlg 	u_int8_t	msg_flags;
9927f1310d0Sdlg 
9937f1310d0Sdlg 	u_int8_t	vp_id;
9947f1310d0Sdlg 	u_int8_t	vf_if;
9957f1310d0Sdlg 	u_int16_t	reserved2;
9967f1310d0Sdlg 
9977f1310d0Sdlg 	u_int32_t	reserved3;
9987f1310d0Sdlg 
9997f1310d0Sdlg 	u_int32_t	action_data;
10007f1310d0Sdlg #define MPII_RAID_VOL_WRITE_CACHE_MASK			(0x03)
10017f1310d0Sdlg #define MPII_RAID_VOL_WRITE_CACHE_DISABLE		(0x01)
10027f1310d0Sdlg #define MPII_RAID_VOL_WRITE_CACHE_ENABLE		(0x02)
10037f1310d0Sdlg 
10047f1310d0Sdlg 	struct mpii_sge	action_sge;
100583bc770dSdlg } __packed __aligned(4);
10067f1310d0Sdlg 
10077f1310d0Sdlg struct mpii_msg_raid_action_reply {
10087f1310d0Sdlg 	u_int8_t	action;
10097f1310d0Sdlg 	u_int8_t	reserved1;
10107f1310d0Sdlg 	u_int8_t	chain_offset;
10117f1310d0Sdlg 	u_int8_t	function;
10127f1310d0Sdlg 
10137f1310d0Sdlg 	u_int16_t	vol_dev_handle;
10147f1310d0Sdlg 	u_int8_t	phys_disk_num;
10157f1310d0Sdlg 	u_int8_t	msg_flags;
10167f1310d0Sdlg 
10177f1310d0Sdlg 	u_int8_t	vp_id;
10187f1310d0Sdlg 	u_int8_t	vf_if;
10197f1310d0Sdlg 	u_int16_t	reserved2;
10207f1310d0Sdlg 
10217f1310d0Sdlg 	u_int16_t	reserved3;
10227f1310d0Sdlg 	u_int16_t	ioc_status;
10237f1310d0Sdlg 
10247f1310d0Sdlg 	u_int32_t	action_data[5];
102583bc770dSdlg } __packed __aligned(4);
10267f1310d0Sdlg 
10277f1310d0Sdlg struct mpii_cfg_hdr {
10287f1310d0Sdlg 	u_int8_t		page_version;
10297f1310d0Sdlg 	u_int8_t		page_length;
10307f1310d0Sdlg 	u_int8_t		page_number;
10317f1310d0Sdlg 	u_int8_t		page_type;
10327f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_ATTRIBUTE		(0xf0)
10337f1310d0Sdlg #define MPI2_CONFIG_PAGEATTR_READ_ONLY			(0x00)
10347f1310d0Sdlg #define MPI2_CONFIG_PAGEATTR_CHANGEABLE			(0x10)
10357f1310d0Sdlg #define MPI2_CONFIG_PAGEATTR_PERSISTENT			(0x20)
10367f1310d0Sdlg 
10377f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_MASK			(0x0f)
10387f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_IO_UNIT		(0x00)
10397f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_IOC			(0x01)
10407f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_BIOS			(0x02)
10417f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_RAID_VOL		(0x08)
10427f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_MANUFACTURING		(0x09)
10437f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_RAID_PD		(0x0a)
10447f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_EXTENDED		(0x0f)
104583bc770dSdlg } __packed __aligned(4);
10467f1310d0Sdlg 
10477f1310d0Sdlg struct mpii_ecfg_hdr {
10487f1310d0Sdlg 	u_int8_t		page_version;
10497f1310d0Sdlg 	u_int8_t		reserved1;
10507f1310d0Sdlg 	u_int8_t		page_number;
10517f1310d0Sdlg 	u_int8_t		page_type;
10527f1310d0Sdlg 
10537f1310d0Sdlg 	u_int16_t		ext_page_length;
10547f1310d0Sdlg 	u_int8_t		ext_page_type;
10557f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_SAS_DEVICE		(0x12)
10567f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_RAID_CONFIG		(0x16)
10577f1310d0Sdlg #define MPII_CONFIG_REQ_PAGE_TYPE_DRIVER_MAPPING	(0x17)
10587f1310d0Sdlg 	u_int8_t		reserved2;
105983bc770dSdlg } __packed __aligned(4);
10607f1310d0Sdlg 
106123646fe4Sdlg /* config page address formats */
106223646fe4Sdlg #define MPII_PGAD_SAS_DEVICE_FORM_MASK			(0xf0000000)
106323646fe4Sdlg #define MPII_PGAD_SAS_DEVICE_FORM_GET_NEXT_HANDLE	(0x00000000)
106423646fe4Sdlg #define MPII_PGAD_SAS_DEVICE_FORM_HANDLE		(0x20000000)
106523646fe4Sdlg 
106623646fe4Sdlg #define MPII_PGAD_SAS_DEVICE_HANDLE_MASK		(0x0000ffff)
106723646fe4Sdlg 
10687f1310d0Sdlg struct mpii_msg_config_request {
10697f1310d0Sdlg 	u_int8_t		action;
10707f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_HEADER		(0x00)
10717f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_READ_CURRENT	(0x01)
10727f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_WRITE_CURRENT	(0x02)
10737f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_DEFAULT		(0x03)
10747f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_WRITE_NVRAM		(0x04)
10757f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_READ_DEFAULT	(0x05)
10767f1310d0Sdlg #define MPII_CONFIG_REQ_ACTION_PAGE_READ_NVRAM		(0x06)
10777f1310d0Sdlg 	u_int8_t		sgl_flags;
10787f1310d0Sdlg 	u_int8_t		chain_offset;
10797f1310d0Sdlg 	u_int8_t		function;
10807f1310d0Sdlg 
10817f1310d0Sdlg 	u_int16_t		ext_page_len;
10827f1310d0Sdlg 	u_int8_t		ext_page_type;
10837f1310d0Sdlg #define MPII_CONFIG_REQ_EXTPAGE_TYPE_SAS_IO_UNIT	(0x10)
10847f1310d0Sdlg #define MPII_CONFIG_REQ_EXTPAGE_TYPE_SAS_EXPANDER	(0x11)
10857f1310d0Sdlg #define MPII_CONFIG_REQ_EXTPAGE_TYPE_SAS_DEVICE		(0x12)
10867f1310d0Sdlg #define MPII_CONFIG_REQ_EXTPAGE_TYPE_SAS_PHY		(0x13)
10877f1310d0Sdlg #define MPII_CONFIG_REQ_EXTPAGE_TYPE_LOG		(0x14)
10887f1310d0Sdlg #define MPI2_CONFIG_EXTPAGETYPE_ENCLOSURE		(0x15)
10897f1310d0Sdlg #define MPI2_CONFIG_EXTPAGETYPE_RAID_CONFIG		(0x16)
10907f1310d0Sdlg #define MPI2_CONFIG_EXTPAGETYPE_DRIVER_MAPPING		(0x17)
10917f1310d0Sdlg #define MPI2_CONFIG_EXTPAGETYPE_SAS_PORT		(0x18)
10927f1310d0Sdlg 	u_int8_t		msg_flags;
10937f1310d0Sdlg 
10947f1310d0Sdlg 	u_int8_t		vp_id;
10957f1310d0Sdlg 	u_int8_t		vf_id;
10967f1310d0Sdlg 	u_int16_t		reserved1;
10977f1310d0Sdlg 
10987f1310d0Sdlg 	u_int32_t		reserved2[2];
10997f1310d0Sdlg 
11007f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
11017f1310d0Sdlg 
11027f1310d0Sdlg 	u_int32_t		page_address;
11037f1310d0Sdlg /* XXX lots of defns here */
11047f1310d0Sdlg 
11057f1310d0Sdlg 	struct mpii_sge		page_buffer;
110683bc770dSdlg } __packed __aligned(4);
11077f1310d0Sdlg 
11087f1310d0Sdlg struct mpii_msg_config_reply {
11097f1310d0Sdlg 	u_int8_t		action;
11107f1310d0Sdlg 	u_int8_t		sgl_flags;
11117f1310d0Sdlg 	u_int8_t		msg_length;
11127f1310d0Sdlg 	u_int8_t		function;
11137f1310d0Sdlg 
11147f1310d0Sdlg 	u_int16_t		ext_page_length;
11157f1310d0Sdlg 	u_int8_t		ext_page_type;
11167f1310d0Sdlg 	u_int8_t		msg_flags;
11177f1310d0Sdlg 
11187f1310d0Sdlg 	u_int8_t		vp_id;
11197f1310d0Sdlg 	u_int8_t		vf_id;
11207f1310d0Sdlg 	u_int16_t		reserved1;
11217f1310d0Sdlg 
11227f1310d0Sdlg 	u_int16_t		reserved2;
11237f1310d0Sdlg 	u_int16_t		ioc_status;
11247f1310d0Sdlg 
11257f1310d0Sdlg 	u_int32_t		ioc_loginfo;
11267f1310d0Sdlg 
11277f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
112883bc770dSdlg } __packed __aligned(4);
11297f1310d0Sdlg 
11307f1310d0Sdlg struct mpii_cfg_manufacturing_pg0 {
11317f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
11327f1310d0Sdlg 
11337f1310d0Sdlg 	char			chip_name[16];
11347f1310d0Sdlg 	char			chip_revision[8];
11357f1310d0Sdlg 	char			board_name[16];
11367f1310d0Sdlg 	char			board_assembly[16];
11377f1310d0Sdlg 	char			board_tracer_number[16];
113883bc770dSdlg } __packed __aligned(4);
11397f1310d0Sdlg 
11407f1310d0Sdlg struct mpii_cfg_ioc_pg1 {
11417f1310d0Sdlg 	struct mpii_cfg_hdr     config_header;
11427f1310d0Sdlg 
11437f1310d0Sdlg 	u_int32_t       flags;
11447f1310d0Sdlg 
11457f1310d0Sdlg 	u_int32_t       coalescing_timeout;
11467f1310d0Sdlg #define	MPII_CFG_IOC_1_REPLY_COALESCING			(1<<0)
11477f1310d0Sdlg 
11487f1310d0Sdlg 	u_int8_t        coalescing_depth;
11497f1310d0Sdlg 	u_int8_t        pci_slot_num;
11507f1310d0Sdlg 	u_int8_t        pci_bus_num;
11517f1310d0Sdlg 	u_int8_t        pci_domain_segment;
11527f1310d0Sdlg 
11537f1310d0Sdlg 	u_int32_t       reserved1;
11547f1310d0Sdlg 
11557f1310d0Sdlg 	u_int32_t       reserved2;
115683bc770dSdlg } __packed __aligned(4);
11577f1310d0Sdlg 
11587f1310d0Sdlg struct mpii_cfg_ioc_pg3 {
11597f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
11607f1310d0Sdlg 
11617f1310d0Sdlg 	u_int8_t		no_phys_disks;
11627f1310d0Sdlg 	u_int8_t		reserved[3];
11637f1310d0Sdlg 
11647f1310d0Sdlg 	/* followed by a list of mpii_cfg_raid_physdisk structs */
116583bc770dSdlg } __packed __aligned(4);
11667f1310d0Sdlg 
11677f1310d0Sdlg struct mpii_cfg_ioc_pg8 {
11687f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
11697f1310d0Sdlg 
11707f1310d0Sdlg 	u_int8_t		num_devs_per_enclosure;
11717f1310d0Sdlg 	u_int8_t		reserved1;
11727f1310d0Sdlg 	u_int16_t		reserved2;
11737f1310d0Sdlg 
11747f1310d0Sdlg 	u_int16_t		max_persistent_entries;
11757f1310d0Sdlg 	u_int16_t		max_num_physical_mapped_ids;
11767f1310d0Sdlg 
11777f1310d0Sdlg 	u_int16_t		flags;
11787f1310d0Sdlg #define	MPII_IOC_PG8_FLAGS_DA_START_SLOT_1		(1<<5)
11797f1310d0Sdlg #define MPII_IOC_PG8_FLAGS_RESERVED_TARGETID_0		(1<<4)
11807f1310d0Sdlg #define MPII_IOC_PG8_FLAGS_MAPPING_MODE_MASK		(0x0000000e)
11817f1310d0Sdlg #define MPII_IOC_PG8_FLAGS_DEVICE_PERSISTENCE_MAPPING	(0<<1)
11827f1310d0Sdlg #define MPII_IOC_PG8_FLAGS_ENCLOSURE_SLOT_MAPPING	(1<<1)
11837f1310d0Sdlg #define MPII_IOC_PG8_FLAGS_DISABLE_PERSISTENT_MAPPING	(1<<0)
11847f1310d0Sdlg #define	MPII_IOC_PG8_FLAGS_ENABLE_PERSISTENT_MAPPING	(0<<0)
11857f1310d0Sdlg 	u_int16_t		reserved3;
11867f1310d0Sdlg 
11877f1310d0Sdlg 	u_int16_t		ir_volume_mapping_flags;
11887f1310d0Sdlg #define	MPII_IOC_PG8_IRFLAGS_VOLUME_MAPPING_MODE_MASK	(0x00000003)
11897f1310d0Sdlg #define	MPII_IOC_PG8_IRFLAGS_LOW_VOLUME_MAPPING		(0<<0)
11907f1310d0Sdlg #define	MPII_IOC_PG8_IRFLAGS_HIGH_VOLUME_MAPPING	(1<<0)
11917f1310d0Sdlg 	u_int16_t		reserved4;
11927f1310d0Sdlg 
11937f1310d0Sdlg 	u_int32_t		reserved5;
119483bc770dSdlg } __packed __aligned(4);
11957f1310d0Sdlg 
11967f1310d0Sdlg struct mpii_cfg_raid_physdisk {
11977f1310d0Sdlg 	u_int8_t		phys_disk_id;
11987f1310d0Sdlg 	u_int8_t		phys_disk_bus;
11997f1310d0Sdlg 	u_int8_t		phys_disk_ioc;
12007f1310d0Sdlg 	u_int8_t		phys_disk_num;
120183bc770dSdlg } __packed __aligned(4);
12027f1310d0Sdlg 
12037f1310d0Sdlg struct mpii_cfg_fc_port_pg0 {
12047f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
12057f1310d0Sdlg 
12067f1310d0Sdlg 	u_int32_t		flags;
12077f1310d0Sdlg 
12087f1310d0Sdlg 	u_int8_t		mpii_port_nr;
12097f1310d0Sdlg 	u_int8_t		link_type;
12107f1310d0Sdlg 	u_int8_t		port_state;
12117f1310d0Sdlg 	u_int8_t		reserved1;
12127f1310d0Sdlg 
12137f1310d0Sdlg 	u_int32_t		port_id;
12147f1310d0Sdlg 
12157f1310d0Sdlg 	u_int64_t		wwnn;
12167f1310d0Sdlg 
12177f1310d0Sdlg 	u_int64_t		wwpn;
12187f1310d0Sdlg 
12197f1310d0Sdlg 	u_int32_t		supported_service_class;
12207f1310d0Sdlg 
12217f1310d0Sdlg 	u_int32_t		supported_speeds;
12227f1310d0Sdlg 
12237f1310d0Sdlg 	u_int32_t		current_speed;
12247f1310d0Sdlg 
12257f1310d0Sdlg 	u_int32_t		max_frame_size;
12267f1310d0Sdlg 
12277f1310d0Sdlg 	u_int64_t		fabric_wwnn;
12287f1310d0Sdlg 
12297f1310d0Sdlg 	u_int64_t		fabric_wwpn;
12307f1310d0Sdlg 
12317f1310d0Sdlg 	u_int32_t		discovered_port_count;
12327f1310d0Sdlg 
12337f1310d0Sdlg 	u_int32_t		max_initiators;
12347f1310d0Sdlg 
12357f1310d0Sdlg 	u_int8_t		max_aliases_supported;
12367f1310d0Sdlg 	u_int8_t		max_hard_aliases_supported;
12377f1310d0Sdlg 	u_int8_t		num_current_aliases;
12387f1310d0Sdlg 	u_int8_t		reserved2;
123983bc770dSdlg } __packed __aligned(4);
12407f1310d0Sdlg 
12417f1310d0Sdlg struct mpii_cfg_fc_port_pg1 {
12427f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
12437f1310d0Sdlg 
12447f1310d0Sdlg 	u_int32_t		flags;
12457f1310d0Sdlg 
12467f1310d0Sdlg 	u_int64_t		noseepromwwnn;
12477f1310d0Sdlg 
12487f1310d0Sdlg 	u_int64_t		noseepromwwpn;
12497f1310d0Sdlg 
12507f1310d0Sdlg 	u_int8_t		hard_alpa;
12517f1310d0Sdlg 	u_int8_t		link_config;
12527f1310d0Sdlg 	u_int8_t		topology_config;
12537f1310d0Sdlg 	u_int8_t		alt_connector;
12547f1310d0Sdlg 
12557f1310d0Sdlg 	u_int8_t		num_req_aliases;
12567f1310d0Sdlg 	u_int8_t		rr_tov;
12577f1310d0Sdlg 	u_int8_t		initiator_dev_to;
12587f1310d0Sdlg 	u_int8_t		initiator_lo_pend_to;
125983bc770dSdlg } __packed __aligned(4);
12607f1310d0Sdlg 
12617f1310d0Sdlg struct mpii_cfg_fc_device_pg0 {
12627f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
12637f1310d0Sdlg 
12647f1310d0Sdlg 	u_int64_t		wwnn;
12657f1310d0Sdlg 
12667f1310d0Sdlg 	u_int64_t		wwpn;
12677f1310d0Sdlg 
12687f1310d0Sdlg 	u_int32_t		port_id;
12697f1310d0Sdlg 
12707f1310d0Sdlg 	u_int8_t		protocol;
12717f1310d0Sdlg 	u_int8_t		flags;
12727f1310d0Sdlg 	u_int16_t		bb_credit;
12737f1310d0Sdlg 
12747f1310d0Sdlg 	u_int16_t		max_rx_frame_size;
12757f1310d0Sdlg 	u_int8_t		adisc_hard_alpa;
12767f1310d0Sdlg 	u_int8_t		port_nr;
12777f1310d0Sdlg 
12787f1310d0Sdlg 	u_int8_t		fc_ph_low_version;
12797f1310d0Sdlg 	u_int8_t		fc_ph_high_version;
12807f1310d0Sdlg 	u_int8_t		current_target_id;
12817f1310d0Sdlg 	u_int8_t		current_bus;
128283bc770dSdlg } __packed __aligned(4);
12837f1310d0Sdlg 
12847f1310d0Sdlg #define MPII_CFG_RAID_VOL_ADDR_HANDLE		(1<<28)
12857f1310d0Sdlg 
12867f1310d0Sdlg struct mpii_cfg_raid_vol_pg0 {
12877f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
12887f1310d0Sdlg 
12897f1310d0Sdlg 	u_int16_t		volume_handle;
12907f1310d0Sdlg 	u_int8_t		volume_state;
12917f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATE_MISSING		(0x00)
12927f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATE_FAILED		(0x01)
12937f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATE_INITIALIZING		(0x02)
12947f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATE_ONLINE		(0x03)
12957f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATE_DEGRADED		(0x04)
12967f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATE_OPTIMAL		(0x05)
12977f1310d0Sdlg 	u_int8_t		volume_type;
12987f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_TYPE_RAID0			(0x00)
12997f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_TYPE_RAID1E			(0x01)
13007f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_TYPE_RAID1			(0x02)
13017f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_TYPE_RAID10			(0x05)
13027f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_TYPE_UNKNOWN		(0xff)
13037f1310d0Sdlg 
13047f1310d0Sdlg 	u_int32_t		volume_status;
13057f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATUS_SCRUB		(1<<20)
13067f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_STATUS_RESYNC		(1<<16)
13077f1310d0Sdlg 
13087f1310d0Sdlg 	u_int16_t		volume_settings;
13097f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_SETTINGS_CACHE_MASK		(0x3<<0)
13107f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_SETTINGS_CACHE_UNCHANGED	(0x0<<0)
13117f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_SETTINGS_CACHE_DISABLED	(0x1<<0)
13127f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_SETTINGS_CACHE_ENABLED	(0x2<<0)
13137f1310d0Sdlg 
13147f1310d0Sdlg 	u_int8_t		hot_spare_pool;
13157f1310d0Sdlg 	u_int8_t		reserved1;
13167f1310d0Sdlg 
13177f1310d0Sdlg 	u_int64_t		max_lba;
13187f1310d0Sdlg 
13197f1310d0Sdlg 	u_int32_t		stripe_size;
13207f1310d0Sdlg 
13217f1310d0Sdlg 	u_int16_t		block_size;
13227f1310d0Sdlg 	u_int16_t		reserved2;
13237f1310d0Sdlg 
13247f1310d0Sdlg 	u_int8_t		phys_disk_types;
13257f1310d0Sdlg 	u_int8_t		resync_rate;
13267f1310d0Sdlg 	u_int16_t		data_scrub_rate;
13277f1310d0Sdlg 
13287f1310d0Sdlg 	u_int8_t		num_phys_disks;
13297f1310d0Sdlg 	u_int16_t		reserved3;
13307f1310d0Sdlg 	u_int8_t		inactive_status;
13317f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_INACTIVE_UNKNOWN		(0x00)
13327f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_INACTIVE_STALE_META		(0x01)
13337f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_INACTIVE_FOREIGN_VOL	(0x02)
13347f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_INACTIVE_NO_RESOURCES	(0x03)
13357f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_INACTIVE_CLONED_VOL		(0x04)
13367f1310d0Sdlg #define MPII_CFG_RAID_VOL_0_INACTIVE_INSUF_META		(0x05)
13377f1310d0Sdlg 
13387f1310d0Sdlg 	/* followed by a list of mpii_cfg_raid_vol_pg0_physdisk structs */
133983bc770dSdlg } __packed __aligned(4);
13407f1310d0Sdlg 
13417f1310d0Sdlg struct mpii_cfg_raid_vol_pg0_physdisk {
13427f1310d0Sdlg 	u_int8_t		raid_set_num;
13437f1310d0Sdlg 	u_int8_t		phys_disk_map;
13447f1310d0Sdlg 	u_int8_t		phys_disk_num;
13457f1310d0Sdlg 	u_int8_t		reserved;
134683bc770dSdlg } __packed __aligned(4);
13477f1310d0Sdlg 
13487f1310d0Sdlg struct mpii_cfg_raid_vol_pg1 {
13497f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
13507f1310d0Sdlg 
13517f1310d0Sdlg 	u_int8_t		volume_id;
13527f1310d0Sdlg 	u_int8_t		volume_bus;
13537f1310d0Sdlg 	u_int8_t		volume_ioc;
13547f1310d0Sdlg 	u_int8_t		reserved1;
13557f1310d0Sdlg 
13567f1310d0Sdlg 	u_int8_t		guid[24];
13577f1310d0Sdlg 
1358*e0fb840dSjmatthew 	u_int8_t		name[16];
13597f1310d0Sdlg 
13607f1310d0Sdlg 	u_int64_t		wwid;
13617f1310d0Sdlg 
13627f1310d0Sdlg 	u_int32_t		reserved2;
13637f1310d0Sdlg 
13647f1310d0Sdlg 	u_int32_t		reserved3;
136583bc770dSdlg } __packed __aligned(4);
13667f1310d0Sdlg 
13677f1310d0Sdlg #define MPII_CFG_RAID_PHYS_DISK_ADDR_NUMBER		(1<<28)
13687f1310d0Sdlg 
13697f1310d0Sdlg struct mpii_cfg_raid_physdisk_pg0 {
13707f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
13717f1310d0Sdlg 
13727f1310d0Sdlg 	u_int16_t		dev_handle;
13737f1310d0Sdlg 	u_int8_t		reserved1;
13747f1310d0Sdlg 	u_int8_t		phys_disk_num;
13757f1310d0Sdlg 
13767f1310d0Sdlg 	u_int8_t		enc_id;
13777f1310d0Sdlg 	u_int8_t		enc_bus;
13787f1310d0Sdlg 	u_int8_t		hot_spare_pool;
13797f1310d0Sdlg 	u_int8_t		enc_type;
13807f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_ENCTYPE_NONE		(0x0)
13817f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_ENCTYPE_SAFTE		(0x1)
13827f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_ENCTYPE_SES		(0x2)
13837f1310d0Sdlg 
13847f1310d0Sdlg 	u_int32_t		reserved2;
13857f1310d0Sdlg 
13867f1310d0Sdlg 	u_int8_t		vendor_id[8];
13877f1310d0Sdlg 
13887f1310d0Sdlg 	u_int8_t		product_id[16];
13897f1310d0Sdlg 
13907f1310d0Sdlg 	u_int8_t		product_rev[4];
13917f1310d0Sdlg 
13927f1310d0Sdlg 	u_int8_t		serial[32];
13937f1310d0Sdlg 
13947f1310d0Sdlg 	u_int32_t		reserved3;
13957f1310d0Sdlg 
13967f1310d0Sdlg 	u_int8_t		phys_disk_state;
13977f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_NOTCONFIGURED	(0x00)
13987f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_NOTCOMPATIBLE	(0x01)
13997f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_OFFLINE		(0x02)
14007f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_ONLINE		(0x03)
14017f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_HOTSPARE		(0x04)
14027f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_DEGRADED		(0x05)
14037f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_REBUILDING	(0x06)
14047f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATE_OPTIMAL		(0x07)
14057f1310d0Sdlg 	u_int8_t		offline_reason;
14067f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_OFFLINE_MISSING		(0x01)
14077f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_OFFLINE_FAILED		(0x03)
14087f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_OFFLINE_INITIALIZING	(0x04)
14097f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_OFFLINE_REQUESTED	(0x05)
14107f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_OFFLINE_FAILEDREQ	(0x06)
14117f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_OFFLINE_OTHER		(0xff)
14127f1310d0Sdlg 
14137f1310d0Sdlg 	u_int8_t		incompat_reason;
14147f1310d0Sdlg 	u_int8_t		phys_disk_attrs;
14157f1310d0Sdlg 
14167f1310d0Sdlg 	u_int32_t		phys_disk_status;
14177f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATUS_OUTOFSYNC	(1<<0)
14187f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_0_STATUS_QUIESCED		(1<<1)
14197f1310d0Sdlg 
14207f1310d0Sdlg 	u_int64_t		dev_max_lba;
14217f1310d0Sdlg 
14227f1310d0Sdlg 	u_int64_t		host_max_lba;
14237f1310d0Sdlg 
14247f1310d0Sdlg 	u_int64_t		coerced_max_lba;
14257f1310d0Sdlg 
14267f1310d0Sdlg 	u_int16_t		block_size;
14277f1310d0Sdlg 	u_int16_t		reserved4;
14287f1310d0Sdlg 
14297f1310d0Sdlg 	u_int32_t		reserved5;
143083bc770dSdlg } __packed __aligned(4);
14317f1310d0Sdlg 
14327f1310d0Sdlg struct mpii_cfg_raid_physdisk_pg1 {
14337f1310d0Sdlg 	struct mpii_cfg_hdr	config_header;
14347f1310d0Sdlg 
14357f1310d0Sdlg 	u_int8_t		num_phys_disk_paths;
14367f1310d0Sdlg 	u_int8_t		phys_disk_num;
14377f1310d0Sdlg 	u_int16_t		reserved1;
14387f1310d0Sdlg 
14397f1310d0Sdlg 	u_int32_t		reserved2;
14407f1310d0Sdlg 
14417f1310d0Sdlg 	/* followed by mpii_cfg_raid_physdisk_path structs */
144283bc770dSdlg } __packed __aligned(4);
14437f1310d0Sdlg 
14447f1310d0Sdlg struct mpii_cfg_raid_physdisk_path {
14457f1310d0Sdlg 	u_int8_t		phys_disk_id;
14467f1310d0Sdlg 	u_int8_t		phys_disk_bus;
14477f1310d0Sdlg 	u_int16_t		reserved1;
14487f1310d0Sdlg 
14497f1310d0Sdlg 	u_int64_t		wwwid;
14507f1310d0Sdlg 
14517f1310d0Sdlg 	u_int64_t		owner_wwid;
14527f1310d0Sdlg 
14537f1310d0Sdlg 	u_int8_t		ownder_id;
14547f1310d0Sdlg 	u_int8_t		reserved2;
14557f1310d0Sdlg 	u_int16_t		flags;
14567f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_PATH_INVALID	(1<<0)
14577f1310d0Sdlg #define MPII_CFG_RAID_PHYDISK_PATH_BROKEN	(1<<1)
145883bc770dSdlg } __packed __aligned(4);
14597f1310d0Sdlg 
14607f1310d0Sdlg #define MPII_CFG_SAS_DEV_ADDR_NEXT		(0<<28)
14617f1310d0Sdlg #define MPII_CFG_SAS_DEV_ADDR_BUS		(1<<28)
14627f1310d0Sdlg #define MPII_CFG_SAS_DEV_ADDR_HANDLE		(2<<28)
14637f1310d0Sdlg 
14647f1310d0Sdlg struct mpii_cfg_sas_dev_pg0 {
14657f1310d0Sdlg 	struct mpii_ecfg_hdr	config_header;
14667f1310d0Sdlg 
14677f1310d0Sdlg 	u_int16_t		slot;
14687f1310d0Sdlg 	u_int16_t		enc_handle;
14697f1310d0Sdlg 
14707f1310d0Sdlg 	u_int64_t		sas_addr;
14717f1310d0Sdlg 
14727f1310d0Sdlg 	u_int16_t		parent_dev_handle;
14737f1310d0Sdlg 	u_int8_t		phy_num;
14747f1310d0Sdlg 	u_int8_t		access_status;
14757f1310d0Sdlg 
14767f1310d0Sdlg 	u_int16_t		dev_handle;
14777f1310d0Sdlg 	u_int8_t		target;
14787f1310d0Sdlg 	u_int8_t		bus;
14797f1310d0Sdlg 
14807f1310d0Sdlg 	u_int32_t		device_info;
14817f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_TYPE			(0x7)
14827f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_TYPE_NONE		(0x0)
14837f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_TYPE_END		(0x1)
14847f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_TYPE_EDGE_EXPANDER	(0x2)
14857f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_TYPE_FANOUT_EXPANDER	(0x3)
14867f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SATA_HOST		(1<<3)
14877f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SMP_INITIATOR	(1<<4)
14887f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_STP_INITIATOR	(1<<5)
14897f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SSP_INITIATOR	(1<<6)
14907f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SATA_DEVICE		(1<<7)
14917f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SMP_TARGET		(1<<8)
14927f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_STP_TARGET		(1<<9)
14937f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SSP_TARGET		(1<<10)
14947f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_DIRECT_ATTACHED	(1<<11)
14957f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_LSI_DEVICE		(1<<12)
14967f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_ATAPI_DEVICE		(1<<13)
14977f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_DEVINFO_SEP_DEVICE		(1<<14)
14987f1310d0Sdlg 
14997f1310d0Sdlg 	u_int16_t		flags;
15007f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_DEV_PRESENT		(1<<0)
15017f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_DEV_MAPPED		(1<<1)
15027f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_DEV_MAPPED_PERSISTENT	(1<<2)
15037f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_SATA_PORT_SELECTOR	(1<<3)
15047f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_SATA_FUA		(1<<4)
15057f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_SATA_NCQ		(1<<5)
15067f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_SATA_SMART		(1<<6)
15077f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_SATA_LBA48		(1<<7)
15087f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_UNSUPPORTED		(1<<8)
15097f1310d0Sdlg #define MPII_CFG_SAS_DEV_0_FLAGS_SATA_SETTINGS		(1<<9)
15107f1310d0Sdlg 	u_int8_t		physical_port;
15117f1310d0Sdlg 	u_int8_t		max_port_conn;
15127f1310d0Sdlg 
15137f1310d0Sdlg 	u_int64_t		device_name;
15147f1310d0Sdlg 
15157f1310d0Sdlg 	u_int8_t		port_groups;
15167f1310d0Sdlg 	u_int8_t		dma_group;
15177f1310d0Sdlg 	u_int8_t		ctrl_group;
15187f1310d0Sdlg 	u_int8_t		reserved1;
15197f1310d0Sdlg 
15207f1310d0Sdlg 	u_int64_t		reserved2;
152183bc770dSdlg } __packed __aligned(4);
15227f1310d0Sdlg 
15237f1310d0Sdlg #define MPII_CFG_RAID_CONFIG_ACTIVE_CONFIG		(2<<28)
15247f1310d0Sdlg 
15257f1310d0Sdlg struct mpii_cfg_raid_config_pg0 {
15267f1310d0Sdlg 	struct	mpii_ecfg_hdr	config_header;
15277f1310d0Sdlg 
15287f1310d0Sdlg 	u_int8_t		num_hot_spares;
15297f1310d0Sdlg 	u_int8_t		num_phys_disks;
15307f1310d0Sdlg 	u_int8_t		num_volumes;
15317f1310d0Sdlg 	u_int8_t		config_num;
15327f1310d0Sdlg 
15337f1310d0Sdlg 	u_int32_t		flags;
15347f1310d0Sdlg #define MPII_CFG_RAID_CONFIG_0_FLAGS_NATIVE		(0<<0)
15357f1310d0Sdlg #define MPII_CFG_RAID_CONFIG_0_FLAGS_FOREIGN		(1<<0)
15367f1310d0Sdlg 
15377f1310d0Sdlg 	u_int32_t		config_guid[6];
15387f1310d0Sdlg 
15397f1310d0Sdlg 	u_int32_t		reserved1;
15407f1310d0Sdlg 
15417f1310d0Sdlg 	u_int8_t		num_elements;
15427f1310d0Sdlg 	u_int8_t		reserved2[3];
15437f1310d0Sdlg 
15447f1310d0Sdlg 	/* followed by struct mpii_raid_config_element structs */
154583bc770dSdlg } __packed __aligned(4);
15467f1310d0Sdlg 
15477f1310d0Sdlg struct mpii_raid_config_element {
15487f1310d0Sdlg 	u_int16_t		element_flags;
15497f1310d0Sdlg #define MPII_RAID_CONFIG_ELEMENT_FLAG_VOLUME		(0x0)
15507f1310d0Sdlg #define MPII_RAID_CONFIG_ELEMENT_FLAG_VOLUME_PHYS_DISK	(0x1)
15517f1310d0Sdlg #define	MPII_RAID_CONFIG_ELEMENT_FLAG_HSP_PHYS_DISK	(0x2)
15527f1310d0Sdlg #define MPII_RAID_CONFIG_ELEMENT_ONLINE_CE_PHYS_DISK	(0x3)
15537f1310d0Sdlg 	u_int16_t		vol_dev_handle;
15547f1310d0Sdlg 
15557f1310d0Sdlg 	u_int8_t		hot_spare_pool;
15567f1310d0Sdlg 	u_int8_t		phys_disk_num;
15577f1310d0Sdlg 	u_int16_t		phys_disk_dev_handle;
155883bc770dSdlg } __packed __aligned(4);
15597f1310d0Sdlg 
15607f1310d0Sdlg struct mpii_cfg_dpm_pg0 {
15617f1310d0Sdlg 	struct mpii_ecfg_hdr	config_header;
15627f1310d0Sdlg #define MPII_DPM_ADDRESS_FORM_MASK			(0xf0000000)
15637f1310d0Sdlg #define MPII_DPM_ADDRESS_FORM_ENTRY_RANGE		(0x00000000)
15647f1310d0Sdlg #define MPII_DPM_ADDRESS_ENTRY_COUNT_MASK		(0x0fff0000)
15657f1310d0Sdlg #define MPII_DPM_ADDRESS_ENTRY_COUNT_SHIFT		(16)
15667f1310d0Sdlg #define MPII_DPM_ADDRESS_START_ENTRY_MASK		(0x0000ffff)
15677f1310d0Sdlg 
15687f1310d0Sdlg 	/* followed by struct mpii_dpm_entry structs */
156983bc770dSdlg } __packed __aligned(4);
15707f1310d0Sdlg 
15717f1310d0Sdlg struct mpii_dpm_entry {
15727f1310d0Sdlg 	u_int64_t		physical_identifier;
15737f1310d0Sdlg 
15747f1310d0Sdlg 	u_int16_t		mapping_information;
15757f1310d0Sdlg 	u_int16_t		device_index;
15767f1310d0Sdlg 
15777f1310d0Sdlg 	u_int32_t		physical_bits_mapping;
15787f1310d0Sdlg 
15797f1310d0Sdlg 	u_int32_t		reserved1;
158083bc770dSdlg } __packed __aligned(4);
15817f1310d0Sdlg 
15827f1310d0Sdlg struct mpii_evt_sas_discovery {
15837f1310d0Sdlg 	u_int8_t		flags;
15847f1310d0Sdlg #define	MPII_EVENT_SAS_DISC_FLAGS_DEV_CHANGE_MASK	(1<<1)
15857f1310d0Sdlg #define MPII_EVENT_SAS_DISC_FLAGS_DEV_CHANGE_NO_CHANGE	(0<<1)
15867f1310d0Sdlg #define MPII_EVENT_SAS_DISC_FLAGS_DEV_CHANGE_CHANGE	(1<<1)
15877f1310d0Sdlg #define MPII_EVENT_SAS_DISC_FLAGS_DISC_IN_PROG_MASK	(1<<0)
15887f1310d0Sdlg #define MPII_EVENT_SAS_DISC_FLAGS_DISC_NOT_IN_PROGRESS	(1<<0)
15897f1310d0Sdlg #define MPII_EVENT_SAS_DISC_FLAGS_DISC_IN_PROGRESS	(0<<0)
15907f1310d0Sdlg 	u_int8_t		reason_code;
15917f1310d0Sdlg #define MPII_EVENT_SAS_DISC_REASON_CODE_STARTED		(0x01)
15927f1310d0Sdlg #define	MPII_EVENT_SAS_DISC_REASON_CODE_COMPLETED	(0x02)
15937f1310d0Sdlg 	u_int8_t		physical_port;
15947f1310d0Sdlg 	u_int8_t		reserved1;
15957f1310d0Sdlg 
15967f1310d0Sdlg 	u_int32_t		discovery_status;
159783bc770dSdlg } __packed __aligned(4);
15987f1310d0Sdlg 
15997f1310d0Sdlg struct mpii_evt_ir_status {
16007f1310d0Sdlg 	u_int16_t		vol_dev_handle;
16017f1310d0Sdlg 	u_int16_t		reserved1;
16027f1310d0Sdlg 
16037f1310d0Sdlg 	u_int8_t		operation;
16047f1310d0Sdlg #define MPII_EVENT_IR_RAIDOP_RESYNC			(0x00)
16057f1310d0Sdlg #define MPII_EVENT_IR_RAIDOP_OCE			(0x01)
16067f1310d0Sdlg #define MPII_EVENT_IR_RAIDOP_CONS_CHECK			(0x02)
16077f1310d0Sdlg #define MPII_EVENT_IR_RAIDOP_BG_INIT			(0x03)
16087f1310d0Sdlg #define MPII_EVENT_IR_RAIDOP_MAKE_CONS			(0x04)
16097f1310d0Sdlg 	u_int8_t		percent;
16107f1310d0Sdlg 	u_int16_t		reserved2;
16117f1310d0Sdlg 
16127f1310d0Sdlg 	u_int32_t		reserved3;
16137f1310d0Sdlg };
16147f1310d0Sdlg 
16157f1310d0Sdlg struct mpii_evt_ir_volume {
16167f1310d0Sdlg 	u_int16_t		vol_dev_handle;
16177f1310d0Sdlg 	u_int8_t		reason_code;
16187f1310d0Sdlg #define MPII_EVENT_IR_VOL_RC_SETTINGS_CHANGED		(0x01)
16197f1310d0Sdlg #define MPII_EVENT_IR_VOL_RC_STATUS_CHANGED		(0x02)
16207f1310d0Sdlg #define MPII_EVENT_IR_VOL_RC_STATE_CHANGED		(0x03)
16217f1310d0Sdlg 	u_int8_t		reserved1;
16227f1310d0Sdlg 
16237f1310d0Sdlg 	u_int32_t		new_value;
16247f1310d0Sdlg 	u_int32_t		prev_value;
162583bc770dSdlg } __packed __aligned(4);
16267f1310d0Sdlg 
16277f1310d0Sdlg struct mpii_evt_ir_physical_disk {
16287f1310d0Sdlg 	u_int16_t		reserved1;
16297f1310d0Sdlg 	u_int8_t		reason_code;
16307f1310d0Sdlg #define MPII_EVENT_IR_PD_RC_SETTINGS_CHANGED		(0x01)
16317f1310d0Sdlg #define MPII_EVENT_IR_PD_RC_STATUS_FLAGS_CHANGED	(0x02)
16327f1310d0Sdlg #define MPII_EVENT_IR_PD_RC_STATUS_CHANGED		(0x03)
16337f1310d0Sdlg 	u_int8_t		phys_disk_num;
16347f1310d0Sdlg 
16357f1310d0Sdlg 	u_int16_t		phys_disk_dev_handle;
16367f1310d0Sdlg 	u_int16_t		reserved2;
16377f1310d0Sdlg 
16387f1310d0Sdlg 	u_int16_t		slot;
16397f1310d0Sdlg 	u_int16_t		enclosure_handle;
16407f1310d0Sdlg 
16417f1310d0Sdlg 	u_int32_t		new_value;
16427f1310d0Sdlg 	u_int32_t		previous_value;
164383bc770dSdlg } __packed __aligned(4);
16447f1310d0Sdlg 
16457f1310d0Sdlg struct mpii_evt_sas_tcl {
16467f1310d0Sdlg 	u_int16_t		enclosure_handle;
16477f1310d0Sdlg 	u_int16_t		expander_handle;
16487f1310d0Sdlg 
16497f1310d0Sdlg 	u_int8_t		num_phys;
16507f1310d0Sdlg 	u_int8_t		reserved1[3];
16517f1310d0Sdlg 
16527f1310d0Sdlg 	u_int8_t		num_entries;
16537f1310d0Sdlg 	u_int8_t		start_phy_num;
16547f1310d0Sdlg 	u_int8_t		expn_status;
16557f1310d0Sdlg #define	MPII_EVENT_SAS_TOPO_ES_ADDED			(0x01)
16567f1310d0Sdlg #define MPII_EVENT_SAS_TOPO_ES_NOT_RESPONDING		(0x02)
16577f1310d0Sdlg #define MPII_EVENT_SAS_TOPO_ES_RESPONDING		(0x03)
16587f1310d0Sdlg #define MPII_EVENT_SAS_TOPO_ES_DELAY_NOT_RESPONDING	(0x04)
16597f1310d0Sdlg 	u_int8_t		physical_port;
16607f1310d0Sdlg 
16617f1310d0Sdlg 	/* followed by num_entries number of struct mpii_evt_phy_entry */
166283bc770dSdlg } __packed __aligned(4);
16637f1310d0Sdlg 
16647f1310d0Sdlg struct mpii_evt_phy_entry {
16657f1310d0Sdlg 	u_int16_t		dev_handle;
16667f1310d0Sdlg 	u_int8_t		link_rate;
16677f1310d0Sdlg 	u_int8_t		phy_status;
16687f1310d0Sdlg #define MPII_EVENT_SAS_TOPO_PS_RC_MASK			(0x0f)
16697f1310d0Sdlg #define MPII_EVENT_SAS_TOPO_PS_RC_ADDED			(0x01)
16707f1310d0Sdlg #define MPII_EVENT_SAS_TOPO_PS_RC_MISSING		(0x02)
167183bc770dSdlg } __packed __aligned(4);
16727f1310d0Sdlg 
16737f1310d0Sdlg struct mpii_evt_ir_cfg_change_list {
16747f1310d0Sdlg 	u_int8_t		num_elements;
16757f1310d0Sdlg 	u_int16_t		reserved;
16767f1310d0Sdlg 	u_int8_t		config_num;
16777f1310d0Sdlg 
16787f1310d0Sdlg 	u_int32_t		flags;
16797f1310d0Sdlg #define MPII_EVT_IR_CFG_CHANGE_LIST_FOREIGN		(0x1)
16807f1310d0Sdlg 
16817f1310d0Sdlg 	/* followed by num_elements struct mpii_evt_ir_cfg_elements */
168283bc770dSdlg } __packed __aligned(4);
16837f1310d0Sdlg 
16847f1310d0Sdlg struct mpii_evt_ir_cfg_element {
16857f1310d0Sdlg 	u_int16_t		element_flags;
16867f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_TYPE_MASK		(0xf)
16877f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_TYPE_VOLUME		(0x0)
16887f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_TYPE_VOLUME_DISK	(0x1)
16897f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_TYPE_HOT_SPARE		(0x2)
16907f1310d0Sdlg 	u_int16_t		vol_dev_handle;
16917f1310d0Sdlg 
16927f1310d0Sdlg 	u_int8_t		reason_code;
16937f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_ADDED		(0x01)
16947f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_REMOVED		(0x02)
16957f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_NO_CHANGE		(0x03)
16967f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_HIDE			(0x04)
16977f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_UNHIDE		(0x05)
16987f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_VOLUME_CREATED	(0x06)
16997f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_VOLUME_DELETED	(0x07)
17007f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_PD_CREATED		(0x08)
17017f1310d0Sdlg #define MPII_EVT_IR_CFG_ELEMENT_RC_PD_DELETED		(0x09)
17027f1310d0Sdlg 	u_int8_t		phys_disk_num;
17037f1310d0Sdlg 	u_int16_t		phys_disk_dev_handle;
170483bc770dSdlg } __packed __aligned(4);
1705