/*
 * Copyright (c) 2000-2014 LSI Corporation.
 *
 *
 *          Name:  mpi2_sas.h
 *         Title:  MPI Serial Attached SCSI structures and definitions
 * Creation Date:  February 9, 2007
 *
 * mpi2_sas.h Version:  02.00.08
 *
 * NOTE: Names (typedefs, defines, etc.) beginning with an MPI25 or Mpi25
 *       prefix are for use only on MPI v2.5 products, and must not be used
 *       with MPI v2.0 products. Unless otherwise noted, names beginning with
 *       MPI2 or Mpi2 are for use with both MPI v2.0 and MPI v2.5 products.
 *
 * Version History
 * ---------------
 *
 * Date      Version   Description
 * --------  --------  ------------------------------------------------------
 * 04-30-07  02.00.00  Corresponds to Fusion-MPT MPI Specification Rev A.
 * 06-26-07  02.00.01  Added Clear All Persistent Operation to SAS IO Unit
 *                     Control Request.
 * 10-02-08  02.00.02  Added Set IOC Parameter Operation to SAS IO Unit Control
 *                     Request.
 * 10-28-09  02.00.03  Changed the type of SGL in MPI2_SATA_PASSTHROUGH_REQUEST
 *                     to MPI2_SGE_IO_UNION since it supports chained SGLs.
 * 05-12-10  02.00.04  Modified some comments.
 * 08-11-10  02.00.05  Added NCQ operations to SAS IO Unit Control.
 * 11-18-11  02.00.06  Incorporating additions for MPI v2.5.
 * 07-10-12  02.00.07  Added MPI2_SATA_PT_SGE_UNION for use in the SATA
 *                     Passthrough Request message.
 * 08-19-13  02.00.08  Made MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL obsolete
 *			for anything newer than MPI v2.0.
 * --------------------------------------------------------------------------
 */

#ifndef MPI2_SAS_H
#define MPI2_SAS_H

/*
 *Values for SASStatus.
 */
#define MPI2_SASSTATUS_SUCCESS                          (0x00)
#define MPI2_SASSTATUS_UNKNOWN_ERROR                    (0x01)
#define MPI2_SASSTATUS_INVALID_FRAME                    (0x02)
#define MPI2_SASSTATUS_UTC_BAD_DEST                     (0x03)
#define MPI2_SASSTATUS_UTC_BREAK_RECEIVED               (0x04)
#define MPI2_SASSTATUS_UTC_CONNECT_RATE_NOT_SUPPORTED   (0x05)
#define MPI2_SASSTATUS_UTC_PORT_LAYER_REQUEST           (0x06)
#define MPI2_SASSTATUS_UTC_PROTOCOL_NOT_SUPPORTED       (0x07)
#define MPI2_SASSTATUS_UTC_STP_RESOURCES_BUSY           (0x08)
#define MPI2_SASSTATUS_UTC_WRONG_DESTINATION            (0x09)
#define MPI2_SASSTATUS_SHORT_INFORMATION_UNIT           (0x0A)
#define MPI2_SASSTATUS_LONG_INFORMATION_UNIT            (0x0B)
#define MPI2_SASSTATUS_XFER_RDY_INCORRECT_WRITE_DATA    (0x0C)
#define MPI2_SASSTATUS_XFER_RDY_REQUEST_OFFSET_ERROR    (0x0D)
#define MPI2_SASSTATUS_XFER_RDY_NOT_EXPECTED            (0x0E)
#define MPI2_SASSTATUS_DATA_INCORRECT_DATA_LENGTH       (0x0F)
#define MPI2_SASSTATUS_DATA_TOO_MUCH_READ_DATA          (0x10)
#define MPI2_SASSTATUS_DATA_OFFSET_ERROR                (0x11)
#define MPI2_SASSTATUS_SDSF_NAK_RECEIVED                (0x12)
#define MPI2_SASSTATUS_SDSF_CONNECTION_FAILED           (0x13)
#define MPI2_SASSTATUS_INITIATOR_RESPONSE_TIMEOUT       (0x14)

/*
 *Values for the SAS DeviceInfo field used in SAS Device Status Change Event
 *data and SAS Configuration pages.
 */
#define MPI2_SAS_DEVICE_INFO_SEP                (0x00004000)
#define MPI2_SAS_DEVICE_INFO_ATAPI_DEVICE       (0x00002000)
#define MPI2_SAS_DEVICE_INFO_LSI_DEVICE         (0x00001000)
#define MPI2_SAS_DEVICE_INFO_DIRECT_ATTACH      (0x00000800)
#define MPI2_SAS_DEVICE_INFO_SSP_TARGET         (0x00000400)
#define MPI2_SAS_DEVICE_INFO_STP_TARGET         (0x00000200)
#define MPI2_SAS_DEVICE_INFO_SMP_TARGET         (0x00000100)
#define MPI2_SAS_DEVICE_INFO_SATA_DEVICE        (0x00000080)
#define MPI2_SAS_DEVICE_INFO_SSP_INITIATOR      (0x00000040)
#define MPI2_SAS_DEVICE_INFO_STP_INITIATOR      (0x00000020)
#define MPI2_SAS_DEVICE_INFO_SMP_INITIATOR      (0x00000010)
#define MPI2_SAS_DEVICE_INFO_SATA_HOST          (0x00000008)

#define MPI2_SAS_DEVICE_INFO_MASK_DEVICE_TYPE   (0x00000007)
#define MPI2_SAS_DEVICE_INFO_NO_DEVICE          (0x00000000)
#define MPI2_SAS_DEVICE_INFO_END_DEVICE         (0x00000001)
#define MPI2_SAS_DEVICE_INFO_EDGE_EXPANDER      (0x00000002)
#define MPI2_SAS_DEVICE_INFO_FANOUT_EXPANDER    (0x00000003)

/*****************************************************************************
*
*       SAS Messages
*
*****************************************************************************/

/****************************************************************************
* SMP Passthrough messages
****************************************************************************/

/*SMP Passthrough Request Message */
typedef struct _MPI2_SMP_PASSTHROUGH_REQUEST {
	U8 PassthroughFlags;	/*0x00 */
	U8 PhysicalPort;	/*0x01 */
	U8 ChainOffset;		/*0x02 */
	U8 Function;		/*0x03 */
	U16 RequestDataLength;	/*0x04 */
	U8 SGLFlags;		/*0x06*//*MPI v2.0 only. Reserved on MPI v2.5*/
	U8 MsgFlags;		/*0x07 */
	U8 VP_ID;		/*0x08 */
	U8 VF_ID;		/*0x09 */
	U16 Reserved1;		/*0x0A */
	U32 Reserved2;		/*0x0C */
	U64 SASAddress;		/*0x10 */
	U32 Reserved3;		/*0x18 */
	U32 Reserved4;		/*0x1C */
	MPI2_SIMPLE_SGE_UNION SGL;/*0x20 */
} MPI2_SMP_PASSTHROUGH_REQUEST, *PTR_MPI2_SMP_PASSTHROUGH_REQUEST,
	Mpi2SmpPassthroughRequest_t, *pMpi2SmpPassthroughRequest_t;

/*values for PassthroughFlags field */
#define MPI2_SMP_PT_REQ_PT_FLAGS_IMMEDIATE      (0x80)

/*MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */

/*SMP Passthrough Reply Message */
typedef struct _MPI2_SMP_PASSTHROUGH_REPLY {
	U8 PassthroughFlags;	/*0x00 */
	U8 PhysicalPort;	/*0x01 */
	U8 MsgLength;		/*0x02 */
	U8 Function;		/*0x03 */
	U16 ResponseDataLength;	/*0x04 */
	U8 SGLFlags;		/*0x06 */
	U8 MsgFlags;		/*0x07 */
	U8 VP_ID;		/*0x08 */
	U8 VF_ID;		/*0x09 */
	U16 Reserved1;		/*0x0A */
	U8 Reserved2;		/*0x0C */
	U8 SASStatus;		/*0x0D */
	U16 IOCStatus;		/*0x0E */
	U32 IOCLogInfo;		/*0x10 */
	U32 Reserved3;		/*0x14 */
	U8 ResponseData[4];	/*0x18 */
} MPI2_SMP_PASSTHROUGH_REPLY, *PTR_MPI2_SMP_PASSTHROUGH_REPLY,
	Mpi2SmpPassthroughReply_t, *pMpi2SmpPassthroughReply_t;

/*values for PassthroughFlags field */
#define MPI2_SMP_PT_REPLY_PT_FLAGS_IMMEDIATE    (0x80)

/*values for SASStatus field are at the top of this file */

/****************************************************************************
* SATA Passthrough messages
****************************************************************************/

typedef union _MPI2_SATA_PT_SGE_UNION {
	MPI2_SGE_SIMPLE_UNION MpiSimple;	/*MPI v2.0 only */
	MPI2_SGE_CHAIN_UNION MpiChain;	/*MPI v2.0 only */
	MPI2_IEEE_SGE_SIMPLE_UNION IeeeSimple;
	MPI2_IEEE_SGE_CHAIN_UNION IeeeChain;	/*MPI v2.0 only */
	MPI25_IEEE_SGE_CHAIN64 IeeeChain64;	/*MPI v2.5 only */
} MPI2_SATA_PT_SGE_UNION, *PTR_MPI2_SATA_PT_SGE_UNION,
	Mpi2SataPTSGEUnion_t, *pMpi2SataPTSGEUnion_t;

/*SATA Passthrough Request Message */
typedef struct _MPI2_SATA_PASSTHROUGH_REQUEST {
	U16 DevHandle;		/*0x00 */
	U8 ChainOffset;		/*0x02 */
	U8 Function;		/*0x03 */
	U16 PassthroughFlags;	/*0x04 */
	U8 SGLFlags;		/*0x06*//*MPI v2.0 only. Reserved on MPI v2.5*/
	U8 MsgFlags;		/*0x07 */
	U8 VP_ID;		/*0x08 */
	U8 VF_ID;		/*0x09 */
	U16 Reserved1;		/*0x0A */
	U32 Reserved2;		/*0x0C */
	U32 Reserved3;		/*0x10 */
	U32 Reserved4;		/*0x14 */
	U32 DataLength;		/*0x18 */
	U8 CommandFIS[20];	/*0x1C */
	MPI2_SATA_PT_SGE_UNION SGL;/*0x30*//*MPI v2.5: IEEE 64 elements only*/
} MPI2_SATA_PASSTHROUGH_REQUEST, *PTR_MPI2_SATA_PASSTHROUGH_REQUEST,
	Mpi2SataPassthroughRequest_t,
	*pMpi2SataPassthroughRequest_t;

/*values for PassthroughFlags field */
#define MPI2_SATA_PT_REQ_PT_FLAGS_EXECUTE_DIAG      (0x0100)
#define MPI2_SATA_PT_REQ_PT_FLAGS_DMA               (0x0020)
#define MPI2_SATA_PT_REQ_PT_FLAGS_PIO               (0x0010)
#define MPI2_SATA_PT_REQ_PT_FLAGS_UNSPECIFIED_VU    (0x0004)
#define MPI2_SATA_PT_REQ_PT_FLAGS_WRITE             (0x0002)
#define MPI2_SATA_PT_REQ_PT_FLAGS_READ              (0x0001)

/*MPI v2.0: use MPI2_SGLFLAGS_ defines from mpi2.h for the SGLFlags field */

/*SATA Passthrough Reply Message */
typedef struct _MPI2_SATA_PASSTHROUGH_REPLY {
	U16 DevHandle;		/*0x00 */
	U8 MsgLength;		/*0x02 */
	U8 Function;		/*0x03 */
	U16 PassthroughFlags;	/*0x04 */
	U8 SGLFlags;		/*0x06 */
	U8 MsgFlags;		/*0x07 */
	U8 VP_ID;		/*0x08 */
	U8 VF_ID;		/*0x09 */
	U16 Reserved1;		/*0x0A */
	U8 Reserved2;		/*0x0C */
	U8 SASStatus;		/*0x0D */
	U16 IOCStatus;		/*0x0E */
	U32 IOCLogInfo;		/*0x10 */
	U8 StatusFIS[20];	/*0x14 */
	U32 StatusControlRegisters;	/*0x28 */
	U32 TransferCount;	/*0x2C */
} MPI2_SATA_PASSTHROUGH_REPLY, *PTR_MPI2_SATA_PASSTHROUGH_REPLY,
	Mpi2SataPassthroughReply_t, *pMpi2SataPassthroughReply_t;

/*values for SASStatus field are at the top of this file */

/****************************************************************************
* SAS IO Unit Control messages
****************************************************************************/

/*SAS IO Unit Control Request Message */
typedef struct _MPI2_SAS_IOUNIT_CONTROL_REQUEST {
	U8 Operation;		/*0x00 */
	U8 Reserved1;		/*0x01 */
	U8 ChainOffset;		/*0x02 */
	U8 Function;		/*0x03 */
	U16 DevHandle;		/*0x04 */
	U8 IOCParameter;	/*0x06 */
	U8 MsgFlags;		/*0x07 */
	U8 VP_ID;		/*0x08 */
	U8 VF_ID;		/*0x09 */
	U16 Reserved3;		/*0x0A */
	U16 Reserved4;		/*0x0C */
	U8 PhyNum;		/*0x0E */
	U8 PrimFlags;		/*0x0F */
	U32 Primitive;		/*0x10 */
	U8 LookupMethod;	/*0x14 */
	U8 Reserved5;		/*0x15 */
	U16 SlotNumber;		/*0x16 */
	U64 LookupAddress;	/*0x18 */
	U32 IOCParameterValue;	/*0x20 */
	U32 Reserved7;		/*0x24 */
	U32 Reserved8;		/*0x28 */
} MPI2_SAS_IOUNIT_CONTROL_REQUEST,
	*PTR_MPI2_SAS_IOUNIT_CONTROL_REQUEST,
	Mpi2SasIoUnitControlRequest_t,
	*pMpi2SasIoUnitControlRequest_t;

/*values for the Operation field */
#define MPI2_SAS_OP_CLEAR_ALL_PERSISTENT        (0x02)
#define MPI2_SAS_OP_PHY_LINK_RESET              (0x06)
#define MPI2_SAS_OP_PHY_HARD_RESET              (0x07)
#define MPI2_SAS_OP_PHY_CLEAR_ERROR_LOG         (0x08)
#define MPI2_SAS_OP_SEND_PRIMITIVE              (0x0A)
#define MPI2_SAS_OP_FORCE_FULL_DISCOVERY        (0x0B)
#define MPI2_SAS_OP_TRANSMIT_PORT_SELECT_SIGNAL (0x0C) /* MPI v2.0 only */
#define MPI2_SAS_OP_REMOVE_DEVICE               (0x0D)
#define MPI2_SAS_OP_LOOKUP_MAPPING              (0x0E)
#define MPI2_SAS_OP_SET_IOC_PARAMETER           (0x0F)
#define MPI25_SAS_OP_ENABLE_FP_DEVICE           (0x10)
#define MPI25_SAS_OP_DISABLE_FP_DEVICE          (0x11)
#define MPI25_SAS_OP_ENABLE_FP_ALL              (0x12)
#define MPI25_SAS_OP_DISABLE_FP_ALL             (0x13)
#define MPI2_SAS_OP_DEV_ENABLE_NCQ              (0x14)
#define MPI2_SAS_OP_DEV_DISABLE_NCQ             (0x15)
#define MPI2_SAS_OP_PRODUCT_SPECIFIC_MIN        (0x80)

/*values for the PrimFlags field */
#define MPI2_SAS_PRIMFLAGS_SINGLE               (0x08)
#define MPI2_SAS_PRIMFLAGS_TRIPLE               (0x02)
#define MPI2_SAS_PRIMFLAGS_REDUNDANT            (0x01)

/*values for the LookupMethod field */
#define MPI2_SAS_LOOKUP_METHOD_SAS_ADDRESS          (0x01)
#define MPI2_SAS_LOOKUP_METHOD_SAS_ENCLOSURE_SLOT   (0x02)
#define MPI2_SAS_LOOKUP_METHOD_SAS_DEVICE_NAME      (0x03)

/*SAS IO Unit Control Reply Message */
typedef struct _MPI2_SAS_IOUNIT_CONTROL_REPLY {
	U8 Operation;		/*0x00 */
	U8 Reserved1;		/*0x01 */
	U8 MsgLength;		/*0x02 */
	U8 Function;		/*0x03 */
	U16 DevHandle;		/*0x04 */
	U8 IOCParameter;	/*0x06 */
	U8 MsgFlags;		/*0x07 */
	U8 VP_ID;		/*0x08 */
	U8 VF_ID;		/*0x09 */
	U16 Reserved3;		/*0x0A */
	U16 Reserved4;		/*0x0C */
	U16 IOCStatus;		/*0x0E */
	U32 IOCLogInfo;		/*0x10 */
} MPI2_SAS_IOUNIT_CONTROL_REPLY,
	*PTR_MPI2_SAS_IOUNIT_CONTROL_REPLY,
	Mpi2SasIoUnitControlReply_t, *pMpi2SasIoUnitControlReply_t;

#endif
