Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Copyright 2000-2020 Broadcom Inc. All rights reserved.
0004  *
0005  *
0006  *          Name:  mpi2_sas.h
0007  *         Title:  MPI Serial Attached SCSI structures and definitions
0008  * Creation Date:  February 9, 2007
0009  *
0010  * mpi2_sas.h Version:  02.00.10
0011  *
0012  * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
0013  *       prefix are for use only on MPI v2.5 products, and must not be used
0014  *       with MPI v2.0 products. Unless otherwise noted, names beginning with
0015  *       MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
0016  *
0017  * Version History
0018  * ---------------
0019  *
0020  * Date      Version   Description
0021  * --------  --------  ------------------------------------------------------
0022  * 04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
0023  * 06-26-07  02.00.01  Added Clear All Persistent Operation to SAS IO Unit
0024  *                     Control Request.
0025  * 10-02-08  02.00.02  Added Set IOC Parameter Operation to SAS IO Unit Control
0026  *                     Request.
0027  * 10-28-09  02.00.03  Changed the type of SGL in MPI2_SATA_PASSTHROUGH_REQUEST
0028  *                     to MPI2_SGE_IO_UNION since it supports chained SGLs.
0029  * 05-12-10  02.00.04  Modified some comments.
0030  * 08-11-10  02.00.05  Added NCQ operations to SAS IO Unit Control.
0031  * 11-18-11  02.00.06  Incorporating additions for MPI v2.5.
0032  * 07-10-12  02.00.07  Added MPI2_SATA_PT_SGE_UNION for use in the SATA
0033  *                     Passthrough Request message.
0034  * 08-19-13  02.00.08  Made MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL obsolete
0035  *          for anything newer than MPI v2.0.
0036  * 11-18-14  02.00.09  Updated copyright information.
0037  * 03-16-15  02.00.10  Updated for MPI v2.6.
0038  *                     Added MPI2_SATA_PT_REQ_PT_FLAGS_FPDMA.
0039  * --------------------------------------------------------------------------
0040  */
0041 
0042 #ifndef MPI2_SAS_H
0043 #define MPI2_SAS_H
0044 
0045 /*
0046  *Values for SASStatus.
0047  */
0048 #define MPI2_SASSTATUS_SUCCESS                          (0x00)
0049 #define MPI2_SASSTATUS_UNKNOWN_ERROR                    (0x01)
0050 #define MPI2_SASSTATUS_INVALID_FRAME                    (0x02)
0051 #define MPI2_SASSTATUS_UTC_BAD_DEST                     (0x03)
0052 #define MPI2_SASSTATUS_UTC_BREAK_RECEIVED               (0x04)
0053 #define MPI2_SASSTATUS_UTC_CONNECT_RATE_NOT_SUPPORTED   (0x05)
0054 #define MPI2_SASSTATUS_UTC_PORT_LAYER_REQUEST           (0x06)
0055 #define MPI2_SASSTATUS_UTC_PROTOCOL_NOT_SUPPORTED       (0x07)
0056 #define MPI2_SASSTATUS_UTC_STP_RESOURCES_BUSY           (0x08)
0057 #define MPI2_SASSTATUS_UTC_WRONG_DESTINATION            (0x09)
0058 #define MPI2_SASSTATUS_SHORT_INFORMATION_UNIT           (0x0A)
0059 #define MPI2_SASSTATUS_LONG_INFORMATION_UNIT            (0x0B)
0060 #define MPI2_SASSTATUS_XFER_RDY_INCORRECT_WRITE_DATA    (0x0C)
0061 #define MPI2_SASSTATUS_XFER_RDY_REQUEST_OFFSET_ERROR    (0x0D)
0062 #define MPI2_SASSTATUS_XFER_RDY_NOT_EXPECTED            (0x0E)
0063 #define MPI2_SASSTATUS_DATA_INCORRECT_DATA_LENGTH       (0x0F)
0064 #define MPI2_SASSTATUS_DATA_TOO_MUCH_READ_DATA          (0x10)
0065 #define MPI2_SASSTATUS_DATA_OFFSET_ERROR                (0x11)
0066 #define MPI2_SASSTATUS_SDSF_NAK_RECEIVED                (0x12)
0067 #define MPI2_SASSTATUS_SDSF_CONNECTION_FAILED           (0x13)
0068 #define MPI2_SASSTATUS_INITIATOR_RESPONSE_TIMEOUT       (0x14)
0069 
0070 /*
0071  *Values for the SAS DeviceInfo field used in SAS Device Status Change Event
0072  *data and SAS Configuration pages.
0073  */
0074 #define MPI2_SAS_DEVICE_INFO_SEP                (0x00004000)
0075 #define MPI2_SAS_DEVICE_INFO_ATAPI_DEVICE       (0x00002000)
0076 #define MPI2_SAS_DEVICE_INFO_LSI_DEVICE         (0x00001000)
0077 #define MPI2_SAS_DEVICE_INFO_DIRECT_ATTACH      (0x00000800)
0078 #define MPI2_SAS_DEVICE_INFO_SSP_TARGET         (0x00000400)
0079 #define MPI2_SAS_DEVICE_INFO_STP_TARGET         (0x00000200)
0080 #define MPI2_SAS_DEVICE_INFO_SMP_TARGET         (0x00000100)
0081 #define MPI2_SAS_DEVICE_INFO_SATA_DEVICE        (0x00000080)
0082 #define MPI2_SAS_DEVICE_INFO_SSP_INITIATOR      (0x00000040)
0083 #define MPI2_SAS_DEVICE_INFO_STP_INITIATOR      (0x00000020)
0084 #define MPI2_SAS_DEVICE_INFO_SMP_INITIATOR      (0x00000010)
0085 #define MPI2_SAS_DEVICE_INFO_SATA_HOST          (0x00000008)
0086 
0087 #define MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE   (0x00000007)
0088 #define MPI2_SAS_DEVICE_INFO_NO_DEVICE          (0x00000000)
0089 #define MPI2_SAS_DEVICE_INFO_END_DEVICE         (0x00000001)
0090 #define MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER      (0x00000002)
0091 #define MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER    (0x00000003)
0092 
0093 /*****************************************************************************
0094 *
0095 *       SAS Messages
0096 *
0097 *****************************************************************************/
0098 
0099 /****************************************************************************
0100 * SMP Passthrough messages
0101 ****************************************************************************/
0102 
0103 /*SMP Passthrough Request Message */
0104 typedef struct _MPI2_SMP_PASSTHROUGH_REQUEST {
0105     U8 PassthroughFlags;    /*0x00 */
0106     U8 PhysicalPort;    /*0x01 */
0107     U8 ChainOffset;     /*0x02 */
0108     U8 Function;        /*0x03 */
0109     U16 RequestDataLength;  /*0x04 */
0110     U8 SGLFlags;        /*0x06*//*MPI v2.0 only. Reserved on MPI v2.5*/
0111     U8 MsgFlags;        /*0x07 */
0112     U8 VP_ID;       /*0x08 */
0113     U8 VF_ID;       /*0x09 */
0114     U16 Reserved1;      /*0x0A */
0115     U32 Reserved2;      /*0x0C */
0116     U64 SASAddress;     /*0x10 */
0117     U32 Reserved3;      /*0x18 */
0118     U32 Reserved4;      /*0x1C */
0119     MPI2_SIMPLE_SGE_UNION SGL;/*0x20 */
0120 } MPI2_SMP_PASSTHROUGH_REQUEST, *PTR_MPI2_SMP_PASSTHROUGH_REQUEST,
0121     Mpi2SmpPassthroughRequest_t, *pMpi2SmpPassthroughRequest_t;
0122 
0123 /*values for PassthroughFlags field */
0124 #define MPI2_SMP_PT_REQ_PT_FLAGS_IMMEDIATE      (0x80)
0125 
0126 /*MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
0127 
0128 /*SMP Passthrough Reply Message */
0129 typedef struct _MPI2_SMP_PASSTHROUGH_REPLY {
0130     U8 PassthroughFlags;    /*0x00 */
0131     U8 PhysicalPort;    /*0x01 */
0132     U8 MsgLength;       /*0x02 */
0133     U8 Function;        /*0x03 */
0134     U16 ResponseDataLength; /*0x04 */
0135     U8 SGLFlags;        /*0x06 */
0136     U8 MsgFlags;        /*0x07 */
0137     U8 VP_ID;       /*0x08 */
0138     U8 VF_ID;       /*0x09 */
0139     U16 Reserved1;      /*0x0A */
0140     U8 Reserved2;       /*0x0C */
0141     U8 SASStatus;       /*0x0D */
0142     U16 IOCStatus;      /*0x0E */
0143     U32 IOCLogInfo;     /*0x10 */
0144     U32 Reserved3;      /*0x14 */
0145     U8 ResponseData[4]; /*0x18 */
0146 } MPI2_SMP_PASSTHROUGH_REPLY, *PTR_MPI2_SMP_PASSTHROUGH_REPLY,
0147     Mpi2SmpPassthroughReply_t, *pMpi2SmpPassthroughReply_t;
0148 
0149 /*values for PassthroughFlags field */
0150 #define MPI2_SMP_PT_REPLY_PT_FLAGS_IMMEDIATE    (0x80)
0151 
0152 /*values for SASStatus field are at the top of this file */
0153 
0154 /****************************************************************************
0155 * SATA Passthrough messages
0156 ****************************************************************************/
0157 
0158 typedef union _MPI2_SATA_PT_SGE_UNION {
0159     MPI2_SGE_SIMPLE_UNION MpiSimple;    /*MPI v2.0 only */
0160     MPI2_SGE_CHAIN_UNION MpiChain;  /*MPI v2.0 only */
0161     MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
0162     MPI2_IEEE_SGE_CHAIN_UNION IeeeChain;    /*MPI v2.0 only */
0163     MPI25_IEEE_SGE_CHAIN64 IeeeChain64; /*MPI v2.5 only */
0164 } MPI2_SATA_PT_SGE_UNION, *PTR_MPI2_SATA_PT_SGE_UNION,
0165     Mpi2SataPTSGEUnion_t, *pMpi2SataPTSGEUnion_t;
0166 
0167 /*SATA Passthrough Request Message */
0168 typedef struct _MPI2_SATA_PASSTHROUGH_REQUEST {
0169     U16 DevHandle;      /*0x00 */
0170     U8 ChainOffset;     /*0x02 */
0171     U8 Function;        /*0x03 */
0172     U16 PassthroughFlags;   /*0x04 */
0173     U8 SGLFlags;        /*0x06*//*MPI v2.0 only. Reserved on MPI v2.5*/
0174     U8 MsgFlags;        /*0x07 */
0175     U8 VP_ID;       /*0x08 */
0176     U8 VF_ID;       /*0x09 */
0177     U16 Reserved1;      /*0x0A */
0178     U32 Reserved2;      /*0x0C */
0179     U32 Reserved3;      /*0x10 */
0180     U32 Reserved4;      /*0x14 */
0181     U32 DataLength;     /*0x18 */
0182     U8 CommandFIS[20];  /*0x1C */
0183     MPI2_SATA_PT_SGE_UNION SGL;/*0x30*//*MPI v2.5: IEEE 64 elements only*/
0184 } MPI2_SATA_PASSTHROUGH_REQUEST, *PTR_MPI2_SATA_PASSTHROUGH_REQUEST,
0185     Mpi2SataPassthroughRequest_t,
0186     *pMpi2SataPassthroughRequest_t;
0187 
0188 /*values for PassthroughFlags field */
0189 #define MPI2_SATA_PT_REQ_PT_FLAGS_EXECUTE_DIAG      (0x0100)
0190 #define MPI2_SATA_PT_REQ_PT_FLAGS_FPDMA             (0x0040)
0191 #define MPI2_SATA_PT_REQ_PT_FLAGS_DMA               (0x0020)
0192 #define MPI2_SATA_PT_REQ_PT_FLAGS_PIO               (0x0010)
0193 #define MPI2_SATA_PT_REQ_PT_FLAGS_UNSPECIFIED_VU    (0x0004)
0194 #define MPI2_SATA_PT_REQ_PT_FLAGS_WRITE             (0x0002)
0195 #define MPI2_SATA_PT_REQ_PT_FLAGS_READ              (0x0001)
0196 
0197 /*MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */
0198 
0199 /*SATA Passthrough Reply Message */
0200 typedef struct _MPI2_SATA_PASSTHROUGH_REPLY {
0201     U16 DevHandle;      /*0x00 */
0202     U8 MsgLength;       /*0x02 */
0203     U8 Function;        /*0x03 */
0204     U16 PassthroughFlags;   /*0x04 */
0205     U8 SGLFlags;        /*0x06 */
0206     U8 MsgFlags;        /*0x07 */
0207     U8 VP_ID;       /*0x08 */
0208     U8 VF_ID;       /*0x09 */
0209     U16 Reserved1;      /*0x0A */
0210     U8 Reserved2;       /*0x0C */
0211     U8 SASStatus;       /*0x0D */
0212     U16 IOCStatus;      /*0x0E */
0213     U32 IOCLogInfo;     /*0x10 */
0214     U8 StatusFIS[20];   /*0x14 */
0215     U32 StatusControlRegisters; /*0x28 */
0216     U32 TransferCount;  /*0x2C */
0217 } MPI2_SATA_PASSTHROUGH_REPLY, *PTR_MPI2_SATA_PASSTHROUGH_REPLY,
0218     Mpi2SataPassthroughReply_t, *pMpi2SataPassthroughReply_t;
0219 
0220 /*values for SASStatus field are at the top of this file */
0221 
0222 /****************************************************************************
0223 * SAS IO Unit Control messages
0224 * (MPI v2.5 and earlier only.
0225 * Replaced by IO Unit Control messages in MPI v2.6 and later.)
0226 ****************************************************************************/
0227 
0228 /*SAS IO Unit Control Request Message */
0229 typedef struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST {
0230     U8 Operation;       /*0x00 */
0231     U8 Reserved1;       /*0x01 */
0232     U8 ChainOffset;     /*0x02 */
0233     U8 Function;        /*0x03 */
0234     U16 DevHandle;      /*0x04 */
0235     U8 IOCParameter;    /*0x06 */
0236     U8 MsgFlags;        /*0x07 */
0237     U8 VP_ID;       /*0x08 */
0238     U8 VF_ID;       /*0x09 */
0239     U16 Reserved3;      /*0x0A */
0240     U16 Reserved4;      /*0x0C */
0241     U8 PhyNum;      /*0x0E */
0242     U8 PrimFlags;       /*0x0F */
0243     U32 Primitive;      /*0x10 */
0244     U8 LookupMethod;    /*0x14 */
0245     U8 Reserved5;       /*0x15 */
0246     U16 SlotNumber;     /*0x16 */
0247     U64 LookupAddress;  /*0x18 */
0248     U32 IOCParameterValue;  /*0x20 */
0249     U32 Reserved7;      /*0x24 */
0250     U32 Reserved8;      /*0x28 */
0251 } MPI2_SAS_IOUNIT_CONTROL_REQUEST,
0252     *PTR_MPI2_SAS_IOUNIT_CONTROL_REQUEST,
0253     Mpi2SasIoUnitControlRequest_t,
0254     *pMpi2SasIoUnitControlRequest_t;
0255 
0256 /*values for the Operation field */
0257 #define MPI2_SAS_OP_CLEAR_ALL_PERSISTENT        (0x02)
0258 #define MPI2_SAS_OP_PHY_LINK_RESET              (0x06)
0259 #define MPI2_SAS_OP_PHY_HARD_RESET              (0x07)
0260 #define MPI2_SAS_OP_PHY_CLEAR_ERROR_LOG         (0x08)
0261 #define MPI2_SAS_OP_SEND_PRIMITIVE              (0x0A)
0262 #define MPI2_SAS_OP_FORCE_FULL_DISCOVERY        (0x0B)
0263 #define MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL (0x0C) /* MPI v2.0 only */
0264 #define MPI2_SAS_OP_REMOVE_DEVICE               (0x0D)
0265 #define MPI2_SAS_OP_LOOKUP_MAPPING              (0x0E)
0266 #define MPI2_SAS_OP_SET_IOC_PARAMETER           (0x0F)
0267 #define MPI25_SAS_OP_ENABLE_FP_DEVICE           (0x10)
0268 #define MPI25_SAS_OP_DISABLE_FP_DEVICE          (0x11)
0269 #define MPI25_SAS_OP_ENABLE_FP_ALL              (0x12)
0270 #define MPI25_SAS_OP_DISABLE_FP_ALL             (0x13)
0271 #define MPI2_SAS_OP_DEV_ENABLE_NCQ              (0x14)
0272 #define MPI2_SAS_OP_DEV_DISABLE_NCQ             (0x15)
0273 #define MPI2_SAS_OP_PRODUCT_SPECIFIC_MIN        (0x80)
0274 
0275 /*values for the PrimFlags field */
0276 #define MPI2_SAS_PRIMFLAGS_SINGLE               (0x08)
0277 #define MPI2_SAS_PRIMFLAGS_TRIPLE               (0x02)
0278 #define MPI2_SAS_PRIMFLAGS_REDUNDANT            (0x01)
0279 
0280 /*values for the LookupMethod field */
0281 #define MPI2_SAS_LOOKUP_METHOD_SAS_ADDRESS          (0x01)
0282 #define MPI2_SAS_LOOKUP_METHOD_SAS_ENCLOSURE_SLOT   (0x02)
0283 #define MPI2_SAS_LOOKUP_METHOD_SAS_DEVICE_NAME      (0x03)
0284 
0285 /*SAS IO Unit Control Reply Message */
0286 typedef struct _MPI2_SAS_IOUNIT_CONTROL_REPLY {
0287     U8 Operation;       /*0x00 */
0288     U8 Reserved1;       /*0x01 */
0289     U8 MsgLength;       /*0x02 */
0290     U8 Function;        /*0x03 */
0291     U16 DevHandle;      /*0x04 */
0292     U8 IOCParameter;    /*0x06 */
0293     U8 MsgFlags;        /*0x07 */
0294     U8 VP_ID;       /*0x08 */
0295     U8 VF_ID;       /*0x09 */
0296     U16 Reserved3;      /*0x0A */
0297     U16 Reserved4;      /*0x0C */
0298     U16 IOCStatus;      /*0x0E */
0299     U32 IOCLogInfo;     /*0x10 */
0300 } MPI2_SAS_IOUNIT_CONTROL_REPLY,
0301     *PTR_MPI2_SAS_IOUNIT_CONTROL_REPLY,
0302     Mpi2SasIoUnitControlReply_t, *pMpi2SasIoUnitControlReply_t;
0303 
0304 #endif