1265236Sken/*- 2265236Sken * Copyright (c) 2013 LSI Corp. 3265236Sken * All rights reserved. 4265236Sken * 5265236Sken * Redistribution and use in source and binary forms, with or without 6265236Sken * modification, are permitted provided that the following conditions 7265236Sken * are met: 8265236Sken * 1. Redistributions of source code must retain the above copyright 9265236Sken * notice, this list of conditions and the following disclaimer. 10265236Sken * 2. Redistributions in binary form must reproduce the above copyright 11265236Sken * notice, this list of conditions and the following disclaimer in the 12265236Sken * documentation and/or other materials provided with the distribution. 13265236Sken * 3. Neither the name of the author nor the names of any co-contributors 14265236Sken * may be used to endorse or promote products derived from this software 15265236Sken * without specific prior written permission. 16265236Sken * 17265236Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18265236Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19265236Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20265236Sken * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21265236Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22265236Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23265236Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24265236Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25265236Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26265236Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27265236Sken * SUCH DAMAGE. 28265236Sken * 29265236Sken * LSI MPT-Fusion Host Adapter FreeBSD 30265236Sken * 31265236Sken * $FreeBSD$ 32265236Sken */ 33265236Sken 34265236Sken/* 35265236Sken * Copyright (c) 2000-2013 LSI Corporation. 36265236Sken * 37265236Sken * 38265236Sken * Name: mpi2_sas.h 39265236Sken * Title: MPI Serial Attached SCSI structures and definitions 40265236Sken * Creation Date: February 9, 2007 41265236Sken * 42265236Sken * mpi2_sas.h Version: 02.00.08 43265236Sken * 44265236Sken * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25 45265236Sken * prefix are for use only on MPI v2.5 products, and must not be used 46265236Sken * with MPI v2.0 products. Unless otherwise noted, names beginning with 47265236Sken * MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products. 48265236Sken * 49265236Sken * Version History 50265236Sken * --------------- 51265236Sken * 52265236Sken * Date Version Description 53265236Sken * -------- -------- ------------------------------------------------------ 54265236Sken * 04-30-07 02.00.00 Corresponds to Fusion-MPT MPI Specification Rev A. 55265236Sken * 06-26-07 02.00.01 Added Clear All Persistent Operation to SAS IO Unit 56265236Sken * Control Request. 57265236Sken * 10-02-08 02.00.02 Added Set IOC Parameter Operation to SAS IO Unit Control 58265236Sken * Request. 59265236Sken * 10-28-09 02.00.03 Changed the type of SGL in MPI2_SATA_PASSTHROUGH_REQUEST 60265236Sken * to MPI2_SGE_IO_UNION since it supports chained SGLs. 61265236Sken * 05-12-10 02.00.04 Modified some comments. 62265236Sken * 08-11-10 02.00.05 Added NCQ operations to SAS IO Unit Control. 63265236Sken * 11-18-11 02.00.06 Incorporating additions for MPI v2.5. 64265236Sken * 07-10-12 02.00.07 Added MPI2_SATA_PT_SGE_UNION for use in the SATA 65265236Sken * Passthrough Request message. 66265236Sken * 08-19-13 02.00.08 Made MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL obsolete 67265236Sken * for anything newer than MPI v2.0. 68265236Sken * -------------------------------------------------------------------------- 69265236Sken */ 70265236Sken 71265236Sken#ifndef MPI2_SAS_H 72265236Sken#define MPI2_SAS_H 73265236Sken 74265236Sken/* 75265236Sken * Values for SASStatus. 76265236Sken */ 77265236Sken#define MPI2_SASSTATUS_SUCCESS (0x00) 78265236Sken#define MPI2_SASSTATUS_UNKNOWN_ERROR (0x01) 79265236Sken#define MPI2_SASSTATUS_INVALID_FRAME (0x02) 80265236Sken#define MPI2_SASSTATUS_UTC_BAD_DEST (0x03) 81265236Sken#define MPI2_SASSTATUS_UTC_BREAK_RECEIVED (0x04) 82265236Sken#define MPI2_SASSTATUS_UTC_CONNECT_RATE_NOT_SUPPORTED (0x05) 83265236Sken#define MPI2_SASSTATUS_UTC_PORT_LAYER_REQUEST (0x06) 84265236Sken#define MPI2_SASSTATUS_UTC_PROTOCOL_NOT_SUPPORTED (0x07) 85265236Sken#define MPI2_SASSTATUS_UTC_STP_RESOURCES_BUSY (0x08) 86265236Sken#define MPI2_SASSTATUS_UTC_WRONG_DESTINATION (0x09) 87265236Sken#define MPI2_SASSTATUS_SHORT_INFORMATION_UNIT (0x0A) 88265236Sken#define MPI2_SASSTATUS_LONG_INFORMATION_UNIT (0x0B) 89265236Sken#define MPI2_SASSTATUS_XFER_RDY_INCORRECT_WRITE_DATA (0x0C) 90265236Sken#define MPI2_SASSTATUS_XFER_RDY_REQUEST_OFFSET_ERROR (0x0D) 91265236Sken#define MPI2_SASSTATUS_XFER_RDY_NOT_EXPECTED (0x0E) 92265236Sken#define MPI2_SASSTATUS_DATA_INCORRECT_DATA_LENGTH (0x0F) 93265236Sken#define MPI2_SASSTATUS_DATA_TOO_MUCH_READ_DATA (0x10) 94265236Sken#define MPI2_SASSTATUS_DATA_OFFSET_ERROR (0x11) 95265236Sken#define MPI2_SASSTATUS_SDSF_NAK_RECEIVED (0x12) 96265236Sken#define MPI2_SASSTATUS_SDSF_CONNECTION_FAILED (0x13) 97265236Sken#define MPI2_SASSTATUS_INITIATOR_RESPONSE_TIMEOUT (0x14) 98265236Sken 99265236Sken 100265236Sken/* 101265236Sken * Values for the SAS DeviceInfo field used in SAS Device Status Change Event 102265236Sken * data and SAS Configuration pages. 103265236Sken */ 104265236Sken#define MPI2_SAS_DEVICE_INFO_SEP (0x00004000) 105265236Sken#define MPI2_SAS_DEVICE_INFO_ATAPI_DEVICE (0x00002000) 106265236Sken#define MPI2_SAS_DEVICE_INFO_LSI_DEVICE (0x00001000) 107265236Sken#define MPI2_SAS_DEVICE_INFO_DIRECT_ATTACH (0x00000800) 108265236Sken#define MPI2_SAS_DEVICE_INFO_SSP_TARGET (0x00000400) 109265236Sken#define MPI2_SAS_DEVICE_INFO_STP_TARGET (0x00000200) 110265236Sken#define MPI2_SAS_DEVICE_INFO_SMP_TARGET (0x00000100) 111265236Sken#define MPI2_SAS_DEVICE_INFO_SATA_DEVICE (0x00000080) 112265236Sken#define MPI2_SAS_DEVICE_INFO_SSP_INITIATOR (0x00000040) 113265236Sken#define MPI2_SAS_DEVICE_INFO_STP_INITIATOR (0x00000020) 114265236Sken#define MPI2_SAS_DEVICE_INFO_SMP_INITIATOR (0x00000010) 115265236Sken#define MPI2_SAS_DEVICE_INFO_SATA_HOST (0x00000008) 116265236Sken 117265236Sken#define MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE (0x00000007) 118265236Sken#define MPI2_SAS_DEVICE_INFO_NO_DEVICE (0x00000000) 119265236Sken#define MPI2_SAS_DEVICE_INFO_END_DEVICE (0x00000001) 120265236Sken#define MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER (0x00000002) 121265236Sken#define MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER (0x00000003) 122265236Sken 123265236Sken 124265236Sken/***************************************************************************** 125265236Sken* 126265236Sken* SAS Messages 127265236Sken* 128265236Sken*****************************************************************************/ 129265236Sken 130265236Sken/**************************************************************************** 131265236Sken* SMP Passthrough messages 132265236Sken****************************************************************************/ 133265236Sken 134265236Sken/* SMP Passthrough Request Message */ 135265236Skentypedef struct _MPI2_SMP_PASSTHROUGH_REQUEST 136265236Sken{ 137265236Sken U8 PassthroughFlags; /* 0x00 */ 138265236Sken U8 PhysicalPort; /* 0x01 */ 139265236Sken U8 ChainOffset; /* 0x02 */ 140265236Sken U8 Function; /* 0x03 */ 141265236Sken U16 RequestDataLength; /* 0x04 */ 142265236Sken U8 SGLFlags; /* 0x06 */ /* MPI v2.0 only. Reserved on MPI v2.5. */ 143265236Sken U8 MsgFlags; /* 0x07 */ 144265236Sken U8 VP_ID; /* 0x08 */ 145265236Sken U8 VF_ID; /* 0x09 */ 146265236Sken U16 Reserved1; /* 0x0A */ 147265236Sken U32 Reserved2; /* 0x0C */ 148265236Sken U64 SASAddress; /* 0x10 */ 149265236Sken U32 Reserved3; /* 0x18 */ 150265236Sken U32 Reserved4; /* 0x1C */ 151265236Sken MPI2_SIMPLE_SGE_UNION SGL; /* 0x20 */ /* MPI v2.5: IEEE Simple 64 elements only */ 152265236Sken} MPI2_SMP_PASSTHROUGH_REQUEST, MPI2_POINTER PTR_MPI2_SMP_PASSTHROUGH_REQUEST, 153265236Sken Mpi2SmpPassthroughRequest_t, MPI2_POINTER pMpi2SmpPassthroughRequest_t; 154265236Sken 155265236Sken/* values for PassthroughFlags field */ 156265236Sken#define MPI2_SMP_PT_REQ_PT_FLAGS_IMMEDIATE (0x80) 157265236Sken 158265236Sken/* MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 159265236Sken 160265236Sken 161265236Sken/* SMP Passthrough Reply Message */ 162265236Skentypedef struct _MPI2_SMP_PASSTHROUGH_REPLY 163265236Sken{ 164265236Sken U8 PassthroughFlags; /* 0x00 */ 165265236Sken U8 PhysicalPort; /* 0x01 */ 166265236Sken U8 MsgLength; /* 0x02 */ 167265236Sken U8 Function; /* 0x03 */ 168265236Sken U16 ResponseDataLength; /* 0x04 */ 169265236Sken U8 SGLFlags; /* 0x06 */ 170265236Sken U8 MsgFlags; /* 0x07 */ 171265236Sken U8 VP_ID; /* 0x08 */ 172265236Sken U8 VF_ID; /* 0x09 */ 173265236Sken U16 Reserved1; /* 0x0A */ 174265236Sken U8 Reserved2; /* 0x0C */ 175265236Sken U8 SASStatus; /* 0x0D */ 176265236Sken U16 IOCStatus; /* 0x0E */ 177265236Sken U32 IOCLogInfo; /* 0x10 */ 178265236Sken U32 Reserved3; /* 0x14 */ 179265236Sken U8 ResponseData[4]; /* 0x18 */ 180265236Sken} MPI2_SMP_PASSTHROUGH_REPLY, MPI2_POINTER PTR_MPI2_SMP_PASSTHROUGH_REPLY, 181265236Sken Mpi2SmpPassthroughReply_t, MPI2_POINTER pMpi2SmpPassthroughReply_t; 182265236Sken 183265236Sken/* values for PassthroughFlags field */ 184265236Sken#define MPI2_SMP_PT_REPLY_PT_FLAGS_IMMEDIATE (0x80) 185265236Sken 186265236Sken/* values for SASStatus field are at the top of this file */ 187265236Sken 188265236Sken 189265236Sken/**************************************************************************** 190265236Sken* SATA Passthrough messages 191265236Sken****************************************************************************/ 192265236Sken 193265236Skentypedef union _MPI2_SATA_PT_SGE_UNION 194265236Sken{ 195265236Sken MPI2_SGE_SIMPLE_UNION MpiSimple; /* MPI v2.0 only */ 196265236Sken MPI2_SGE_CHAIN_UNION MpiChain; /* MPI v2.0 only */ 197265236Sken MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple; 198265236Sken MPI2_IEEE_SGE_CHAIN_UNION IeeeChain; /* MPI v2.0 only */ 199265236Sken MPI25_IEEE_SGE_CHAIN64 IeeeChain64; /* MPI v2.5 only */ 200265236Sken} MPI2_SATA_PT_SGE_UNION, MPI2_POINTER PTR_MPI2_SATA_PT_SGE_UNION, 201265236Sken Mpi2SataPTSGEUnion_t, MPI2_POINTER pMpi2SataPTSGEUnion_t; 202265236Sken 203265236Sken 204265236Sken/* SATA Passthrough Request Message */ 205265236Skentypedef struct _MPI2_SATA_PASSTHROUGH_REQUEST 206265236Sken{ 207265236Sken U16 DevHandle; /* 0x00 */ 208265236Sken U8 ChainOffset; /* 0x02 */ 209265236Sken U8 Function; /* 0x03 */ 210265236Sken U16 PassthroughFlags; /* 0x04 */ 211265236Sken U8 SGLFlags; /* 0x06 */ /* MPI v2.0 only. Reserved on MPI v2.5. */ 212265236Sken U8 MsgFlags; /* 0x07 */ 213265236Sken U8 VP_ID; /* 0x08 */ 214265236Sken U8 VF_ID; /* 0x09 */ 215265236Sken U16 Reserved1; /* 0x0A */ 216265236Sken U32 Reserved2; /* 0x0C */ 217265236Sken U32 Reserved3; /* 0x10 */ 218265236Sken U32 Reserved4; /* 0x14 */ 219265236Sken U32 DataLength; /* 0x18 */ 220265236Sken U8 CommandFIS[20]; /* 0x1C */ 221265236Sken MPI2_SATA_PT_SGE_UNION SGL; /* 0x30 */ /* MPI v2.5: IEEE 64 elements only */ 222265236Sken} MPI2_SATA_PASSTHROUGH_REQUEST, MPI2_POINTER PTR_MPI2_SATA_PASSTHROUGH_REQUEST, 223265236Sken Mpi2SataPassthroughRequest_t, MPI2_POINTER pMpi2SataPassthroughRequest_t; 224265236Sken 225265236Sken/* values for PassthroughFlags field */ 226265236Sken#define MPI2_SATA_PT_REQ_PT_FLAGS_EXECUTE_DIAG (0x0100) 227265236Sken#define MPI2_SATA_PT_REQ_PT_FLAGS_DMA (0x0020) 228265236Sken#define MPI2_SATA_PT_REQ_PT_FLAGS_PIO (0x0010) 229265236Sken#define MPI2_SATA_PT_REQ_PT_FLAGS_UNSPECIFIED_VU (0x0004) 230265236Sken#define MPI2_SATA_PT_REQ_PT_FLAGS_WRITE (0x0002) 231265236Sken#define MPI2_SATA_PT_REQ_PT_FLAGS_READ (0x0001) 232265236Sken 233265236Sken/* MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */ 234265236Sken 235265236Sken 236265236Sken/* SATA Passthrough Reply Message */ 237265236Skentypedef struct _MPI2_SATA_PASSTHROUGH_REPLY 238265236Sken{ 239265236Sken U16 DevHandle; /* 0x00 */ 240265236Sken U8 MsgLength; /* 0x02 */ 241265236Sken U8 Function; /* 0x03 */ 242265236Sken U16 PassthroughFlags; /* 0x04 */ 243265236Sken U8 SGLFlags; /* 0x06 */ 244265236Sken U8 MsgFlags; /* 0x07 */ 245265236Sken U8 VP_ID; /* 0x08 */ 246265236Sken U8 VF_ID; /* 0x09 */ 247265236Sken U16 Reserved1; /* 0x0A */ 248265236Sken U8 Reserved2; /* 0x0C */ 249265236Sken U8 SASStatus; /* 0x0D */ 250265236Sken U16 IOCStatus; /* 0x0E */ 251265236Sken U32 IOCLogInfo; /* 0x10 */ 252265236Sken U8 StatusFIS[20]; /* 0x14 */ 253265236Sken U32 StatusControlRegisters; /* 0x28 */ 254265236Sken U32 TransferCount; /* 0x2C */ 255265236Sken} MPI2_SATA_PASSTHROUGH_REPLY, MPI2_POINTER PTR_MPI2_SATA_PASSTHROUGH_REPLY, 256265236Sken Mpi2SataPassthroughReply_t, MPI2_POINTER pMpi2SataPassthroughReply_t; 257265236Sken 258265236Sken/* values for SASStatus field are at the top of this file */ 259265236Sken 260265236Sken 261265236Sken/**************************************************************************** 262265236Sken* SAS IO Unit Control messages 263265236Sken****************************************************************************/ 264265236Sken 265265236Sken/* SAS IO Unit Control Request Message */ 266265236Skentypedef struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST 267265236Sken{ 268265236Sken U8 Operation; /* 0x00 */ 269265236Sken U8 Reserved1; /* 0x01 */ 270265236Sken U8 ChainOffset; /* 0x02 */ 271265236Sken U8 Function; /* 0x03 */ 272265236Sken U16 DevHandle; /* 0x04 */ 273265236Sken U8 IOCParameter; /* 0x06 */ 274265236Sken U8 MsgFlags; /* 0x07 */ 275265236Sken U8 VP_ID; /* 0x08 */ 276265236Sken U8 VF_ID; /* 0x09 */ 277265236Sken U16 Reserved3; /* 0x0A */ 278265236Sken U16 Reserved4; /* 0x0C */ 279265236Sken U8 PhyNum; /* 0x0E */ 280265236Sken U8 PrimFlags; /* 0x0F */ 281265236Sken U32 Primitive; /* 0x10 */ 282265236Sken U8 LookupMethod; /* 0x14 */ 283265236Sken U8 Reserved5; /* 0x15 */ 284265236Sken U16 SlotNumber; /* 0x16 */ 285265236Sken U64 LookupAddress; /* 0x18 */ 286265236Sken U32 IOCParameterValue; /* 0x20 */ 287265236Sken U32 Reserved7; /* 0x24 */ 288265236Sken U32 Reserved8; /* 0x28 */ 289265236Sken} MPI2_SAS_IOUNIT_CONTROL_REQUEST, 290265236Sken MPI2_POINTER PTR_MPI2_SAS_IOUNIT_CONTROL_REQUEST, 291265236Sken Mpi2SasIoUnitControlRequest_t, MPI2_POINTER pMpi2SasIoUnitControlRequest_t; 292265236Sken 293265236Sken/* values for the Operation field */ 294265236Sken#define MPI2_SAS_OP_CLEAR_ALL_PERSISTENT (0x02) 295265236Sken#define MPI2_SAS_OP_PHY_LINK_RESET (0x06) 296265236Sken#define MPI2_SAS_OP_PHY_HARD_RESET (0x07) 297265236Sken#define MPI2_SAS_OP_PHY_CLEAR_ERROR_LOG (0x08) 298265236Sken#define MPI2_SAS_OP_SEND_PRIMITIVE (0x0A) 299265236Sken#define MPI2_SAS_OP_FORCE_FULL_DISCOVERY (0x0B) 300265236Sken#define MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL (0x0C) /* MPI v2.0 only */ 301265236Sken#define MPI2_SAS_OP_REMOVE_DEVICE (0x0D) 302265236Sken#define MPI2_SAS_OP_LOOKUP_MAPPING (0x0E) 303265236Sken#define MPI2_SAS_OP_SET_IOC_PARAMETER (0x0F) 304265236Sken#define MPI25_SAS_OP_ENABLE_FP_DEVICE (0x10) 305265236Sken#define MPI25_SAS_OP_DISABLE_FP_DEVICE (0x11) 306265236Sken#define MPI25_SAS_OP_ENABLE_FP_ALL (0x12) 307265236Sken#define MPI25_SAS_OP_DISABLE_FP_ALL (0x13) 308265236Sken#define MPI2_SAS_OP_DEV_ENABLE_NCQ (0x14) 309265236Sken#define MPI2_SAS_OP_DEV_DISABLE_NCQ (0x15) 310265236Sken#define MPI2_SAS_OP_PRODUCT_SPECIFIC_MIN (0x80) 311265236Sken 312265236Sken/* values for the PrimFlags field */ 313265236Sken#define MPI2_SAS_PRIMFLAGS_SINGLE (0x08) 314265236Sken#define MPI2_SAS_PRIMFLAGS_TRIPLE (0x02) 315265236Sken#define MPI2_SAS_PRIMFLAGS_REDUNDANT (0x01) 316265236Sken 317265236Sken/* values for the LookupMethod field */ 318265236Sken#define MPI2_SAS_LOOKUP_METHOD_SAS_ADDRESS (0x01) 319265236Sken#define MPI2_SAS_LOOKUP_METHOD_SAS_ENCLOSURE_SLOT (0x02) 320265236Sken#define MPI2_SAS_LOOKUP_METHOD_SAS_DEVICE_NAME (0x03) 321265236Sken 322265236Sken 323265236Sken/* SAS IO Unit Control Reply Message */ 324265236Skentypedef struct _MPI2_SAS_IOUNIT_CONTROL_REPLY 325265236Sken{ 326265236Sken U8 Operation; /* 0x00 */ 327265236Sken U8 Reserved1; /* 0x01 */ 328265236Sken U8 MsgLength; /* 0x02 */ 329265236Sken U8 Function; /* 0x03 */ 330265236Sken U16 DevHandle; /* 0x04 */ 331265236Sken U8 IOCParameter; /* 0x06 */ 332265236Sken U8 MsgFlags; /* 0x07 */ 333265236Sken U8 VP_ID; /* 0x08 */ 334265236Sken U8 VF_ID; /* 0x09 */ 335265236Sken U16 Reserved3; /* 0x0A */ 336265236Sken U16 Reserved4; /* 0x0C */ 337265236Sken U16 IOCStatus; /* 0x0E */ 338265236Sken U32 IOCLogInfo; /* 0x10 */ 339265236Sken} MPI2_SAS_IOUNIT_CONTROL_REPLY, 340265236Sken MPI2_POINTER PTR_MPI2_SAS_IOUNIT_CONTROL_REPLY, 341265236Sken Mpi2SasIoUnitControlReply_t, MPI2_POINTER pMpi2SasIoUnitControlReply_t; 342265236Sken 343265236Sken 344265236Sken#endif 345265236Sken 346265236Sken 347