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