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