linux/drivers/scsi/mpt3sas/mpi/mpi2_init.h

/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright 2000-2020 Broadcom Inc. All rights reserved.
 *
 *
 *          Name:  mpi2_init.h
 *         Title:  MPI SCSI initiator mode messages and structures
 * Creation Date:  June 23, 2006
 *
 * mpi2_init.h Version:  02.00.21
 *
 * 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.
 * 10-31-07  02.00.01  Fixed name for pMpi2SCSITaskManagementRequest_t.
 * 12-18-07  02.00.02  Modified Task Management Target Reset Method defines.
 * 02-29-08  02.00.03  Added Query Task Set and Query Unit Attention.
 * 03-03-08  02.00.04  Fixed name of struct _MPI2_SCSI_TASK_MANAGE_REPLY.
 * 05-21-08  02.00.05  Fixed typo in name of Mpi2SepRequest_t.
 * 10-02-08  02.00.06  Removed Untagged and No Disconnect values from SCSI IO
 *                     Control field Task Attribute flags.
 *                     Moved LUN field defines to mpi2.h becasue they are
 *                     common to many structures.
 * 05-06-09  02.00.07  Changed task management type of Query Unit Attention to
 *                     Query Asynchronous Event.
 *                     Defined two new bits in the SlotStatus field of the SCSI
 *                     Enclosure Processor Request and Reply.
 * 10-28-09  02.00.08  Added defines for decoding the ResponseInfo bytes for
 *                     both SCSI IO Error Reply and SCSI Task Management Reply.
 *                     Added ResponseInfo field to MPI2_SCSI_TASK_MANAGE_REPLY.
 *                     Added MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG define.
 * 02-10-10  02.00.09  Removed unused structure that had "#if 0" around it.
 * 05-12-10  02.00.10  Added optional vendor-unique region to SCSI IO Request.
 * 11-10-10  02.00.11  Added MPI2_SCSIIO_NUM_SGLOFFSETS define.
 * 11-18-11  02.00.12  Incorporating additions for MPI v2.5.
 * 02-06-12  02.00.13  Added alternate defines for Task Priority / Command
 *                     Priority to match SAM-4.
 *                     Added EEDPErrorOffset to MPI2_SCSI_IO_REPLY.
 * 07-10-12  02.00.14  Added MPI2_SCSIIO_CONTROL_SHIFT_DATADIRECTION.
 * 04-09-13  02.00.15  Added SCSIStatusQualifier field to MPI2_SCSI_IO_REPLY,
 *                     replacing the Reserved4 field.
 * 11-18-14  02.00.16  Updated copyright information.
 * 03-16-15  02.00.17  Updated for MPI v2.6.
 *                     Added MPI26_SCSIIO_IOFLAGS_ESCAPE_PASSTHROUGH.
 *                     Added MPI2_SEP_REQ_SLOTSTATUS_DEV_OFF and
 *                     MPI2_SEP_REPLY_SLOTSTATUS_DEV_OFF.
 * 08-26-15  02.00.18  Added SCSITASKMGMT_MSGFLAGS for Target Reset.
 * 12-18-15  02.00.19  Added EEDPObservedValue added to SCSI IO Reply message.
 * 01-04-16  02.00.20  Modified EEDP reported values in SCSI IO Reply message.
 * 01-21-16  02.00.21  Modified MPI26_SCSITASKMGMT_MSGFLAGS_PCIE* defines to
 *                     be unique within first 32 characters.
 * --------------------------------------------------------------------------
 */

#ifndef MPI2_INIT_H
#define MPI2_INIT_H

/*****************************************************************************
*
*              SCSI Initiator Messages
*
*****************************************************************************/

/****************************************************************************
* SCSI IO messages and associated structures
****************************************************************************/

pMpi2ScsiIoCdbEedp32_t;

/*MPI v2.0 CDB field */
pMpi2ScsiIoCdb_t;

/*MPI v2.0 SCSI IO Request Message */
pMpi2SCSIIORequest_t;

/*SCSI IO MsgFlags bits */

/*MsgFlags for SenseBufferAddressSpace */
#define MPI2_SCSIIO_MSGFLAGS_MASK_SENSE_ADDR
#define MPI2_SCSIIO_MSGFLAGS_SYSTEM_SENSE_ADDR
#define MPI2_SCSIIO_MSGFLAGS_IOCDDR_SENSE_ADDR
#define MPI2_SCSIIO_MSGFLAGS_IOCPLB_SENSE_ADDR
#define MPI2_SCSIIO_MSGFLAGS_IOCPLBNTA_SENSE_ADDR
#define MPI26_SCSIIO_MSGFLAGS_IOCCTL_SENSE_ADDR

/*SCSI IO SGLFlags bits */

/*base values for Data Location Address Space */
#define MPI2_SCSIIO_SGLFLAGS_ADDR_MASK
#define MPI2_SCSIIO_SGLFLAGS_SYSTEM_ADDR
#define MPI2_SCSIIO_SGLFLAGS_IOCDDR_ADDR
#define MPI2_SCSIIO_SGLFLAGS_IOCPLB_ADDR
#define MPI2_SCSIIO_SGLFLAGS_IOCPLBNTA_ADDR

/*base values for Type */
#define MPI2_SCSIIO_SGLFLAGS_TYPE_MASK
#define MPI2_SCSIIO_SGLFLAGS_TYPE_MPI
#define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE32
#define MPI2_SCSIIO_SGLFLAGS_TYPE_IEEE64

/*shift values for each sub-field */
#define MPI2_SCSIIO_SGLFLAGS_SGL3_SHIFT
#define MPI2_SCSIIO_SGLFLAGS_SGL2_SHIFT
#define MPI2_SCSIIO_SGLFLAGS_SGL1_SHIFT
#define MPI2_SCSIIO_SGLFLAGS_SGL0_SHIFT

/*number of SGLOffset fields */
#define MPI2_SCSIIO_NUM_SGLOFFSETS

/*SCSI IO IoFlags bits */

/*Large CDB Address Space */
#define MPI2_SCSIIO_CDB_ADDR_MASK
#define MPI2_SCSIIO_CDB_ADDR_SYSTEM
#define MPI2_SCSIIO_CDB_ADDR_IOCDDR
#define MPI2_SCSIIO_CDB_ADDR_IOCPLB
#define MPI2_SCSIIO_CDB_ADDR_IOCPLBNTA

#define MPI2_SCSIIO_IOFLAGS_LARGE_CDB
#define MPI2_SCSIIO_IOFLAGS_BIDIRECTIONAL
#define MPI2_SCSIIO_IOFLAGS_MULTICAST
#define MPI2_SCSIIO_IOFLAGS_CMD_DETERMINES_DATA_DIR
#define MPI2_SCSIIO_IOFLAGS_CDBLENGTH_MASK

/*SCSI IO EEDPFlags bits */

#define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_REFTAG
#define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_REFTAG
#define MPI2_SCSIIO_EEDPFLAGS_INC_PRI_APPTAG
#define MPI2_SCSIIO_EEDPFLAGS_INC_SEC_APPTAG

#define MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG
#define MPI2_SCSIIO_EEDPFLAGS_CHECK_APPTAG
#define MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD

#define MPI2_SCSIIO_EEDPFLAGS_PASSTHRU_REFTAG

#define MPI2_SCSIIO_EEDPFLAGS_MASK_OP
#define MPI2_SCSIIO_EEDPFLAGS_NOOP_OP
#define MPI2_SCSIIO_EEDPFLAGS_CHECK_OP
#define MPI2_SCSIIO_EEDPFLAGS_STRIP_OP
#define MPI2_SCSIIO_EEDPFLAGS_CHECK_REMOVE_OP
#define MPI2_SCSIIO_EEDPFLAGS_INSERT_OP
#define MPI2_SCSIIO_EEDPFLAGS_REPLACE_OP
#define MPI2_SCSIIO_EEDPFLAGS_CHECK_REGEN_OP

/*SCSI IO LUN fields: use MPI2_LUN_ from mpi2.h */

/*SCSI IO Control bits */
#define MPI2_SCSIIO_CONTROL_ADDCDBLEN_MASK
#define MPI2_SCSIIO_CONTROL_ADDCDBLEN_SHIFT

#define MPI2_SCSIIO_CONTROL_DATADIRECTION_MASK
#define MPI2_SCSIIO_CONTROL_SHIFT_DATADIRECTION
#define MPI2_SCSIIO_CONTROL_NODATATRANSFER
#define MPI2_SCSIIO_CONTROL_WRITE
#define MPI2_SCSIIO_CONTROL_READ
#define MPI2_SCSIIO_CONTROL_BIDIRECTIONAL

#define MPI2_SCSIIO_CONTROL_TASKPRI_MASK
#define MPI2_SCSIIO_CONTROL_TASKPRI_SHIFT
/*alternate name for the previous field; called Command Priority in SAM-4 */
#define MPI2_SCSIIO_CONTROL_CMDPRI_MASK
#define MPI2_SCSIIO_CONTROL_CMDPRI_SHIFT

#define MPI2_SCSIIO_CONTROL_TASKATTRIBUTE_MASK
#define MPI2_SCSIIO_CONTROL_SIMPLEQ
#define MPI2_SCSIIO_CONTROL_HEADOFQ
#define MPI2_SCSIIO_CONTROL_ORDEREDQ
#define MPI2_SCSIIO_CONTROL_ACAQ

#define MPI2_SCSIIO_CONTROL_TLR_MASK
#define MPI2_SCSIIO_CONTROL_NO_TLR
#define MPI2_SCSIIO_CONTROL_TLR_ON
#define MPI2_SCSIIO_CONTROL_TLR_OFF

/*MPI v2.5 CDB field */
pMpi25ScsiIoCdb_t;

/*MPI v2.5/2.6 SCSI IO Request Message */
pMpi25SCSIIORequest_t;

/*use MPI2_SCSIIO_MSGFLAGS_ defines for the MsgFlags field */

/*Defines for the DMAFlags field
 * Each setting affects 4 SGLS, from SGL0 to SGL3.
 *     D = Data
 *     C = Cache DIF
 *     I = Interleaved
 *     H = Host DIF
 */
#define MPI25_SCSIIO_DMAFLAGS_OP_MASK
#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_D
#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_C
#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_D_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_C
#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_C_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_D_I_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_C
#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_C_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_C_I_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_I_I_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_D
#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_C
#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_D_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_C
#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_C_I
#define MPI25_SCSIIO_DMAFLAGS_OP_D_H_I_I

/*number of SGLOffset fields */
#define MPI25_SCSIIO_NUM_SGLOFFSETS

/*defines for the IoFlags field */
#define MPI25_SCSIIO_IOFLAGS_IO_PATH_MASK
#define MPI25_SCSIIO_IOFLAGS_NORMAL_PATH
#define MPI25_SCSIIO_IOFLAGS_FAST_PATH

#define MPI26_SCSIIO_IOFLAGS_ESCAPE_PASSTHROUGH
#define MPI25_SCSIIO_IOFLAGS_LARGE_CDB
#define MPI25_SCSIIO_IOFLAGS_BIDIRECTIONAL
#define MPI26_SCSIIO_IOFLAGS_PORT_REQUEST
#define MPI25_SCSIIO_IOFLAGS_CDBLENGTH_MASK

/*MPI v2.5 defines for the EEDPFlags bits */
/*use MPI2_SCSIIO_EEDPFLAGS_ defines for the other EEDPFlags bits */
#define MPI25_SCSIIO_EEDPFLAGS_ESCAPE_MODE_MASK
#define MPI25_SCSIIO_EEDPFLAGS_COMPATIBLE_MODE
#define MPI25_SCSIIO_EEDPFLAGS_DO_NOT_DISABLE_MODE
#define MPI25_SCSIIO_EEDPFLAGS_APPTAG_DISABLE_MODE
#define MPI25_SCSIIO_EEDPFLAGS_APPTAG_REFTAG_DISABLE_MODE

#define MPI25_SCSIIO_EEDPFLAGS_HOST_GUARD_METHOD_MASK
#define MPI25_SCSIIO_EEDPFLAGS_T10_CRC_HOST_GUARD
#define MPI25_SCSIIO_EEDPFLAGS_IP_CHKSUM_HOST_GUARD

/*use MPI2_LUN_ defines from mpi2.h for the LUN field */

/*use MPI2_SCSIIO_CONTROL_ defines for the Control field */

/*NOTE: The SCSI IO Reply is nearly the same for MPI 2.0 and MPI 2.5, so
 *      MPI2_SCSI_IO_REPLY is used for both.
 */

/*SCSI IO Error Reply Message */
pMpi2SCSIIOReply_t;

/*SCSI IO Reply MsgFlags bits */
#define MPI26_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID
#define MPI26_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID
#define MPI26_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID

/*SCSI IO Reply SCSIStatus values (SAM-4 status codes) */

#define MPI2_SCSI_STATUS_GOOD
#define MPI2_SCSI_STATUS_CHECK_CONDITION
#define MPI2_SCSI_STATUS_CONDITION_MET
#define MPI2_SCSI_STATUS_BUSY
#define MPI2_SCSI_STATUS_INTERMEDIATE
#define MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET
#define MPI2_SCSI_STATUS_RESERVATION_CONFLICT
#define MPI2_SCSI_STATUS_COMMAND_TERMINATED
#define MPI2_SCSI_STATUS_TASK_SET_FULL
#define MPI2_SCSI_STATUS_ACA_ACTIVE
#define MPI2_SCSI_STATUS_TASK_ABORTED

/*SCSI IO Reply SCSIState flags */

#define MPI2_SCSI_STATE_RESPONSE_INFO_VALID
#define MPI2_SCSI_STATE_TERMINATED
#define MPI2_SCSI_STATE_NO_SCSI_STATUS
#define MPI2_SCSI_STATE_AUTOSENSE_FAILED
#define MPI2_SCSI_STATE_AUTOSENSE_VALID

/*masks and shifts for the ResponseInfo field */

#define MPI2_SCSI_RI_MASK_REASONCODE
#define MPI2_SCSI_RI_SHIFT_REASONCODE

#define MPI2_SCSI_TASKTAG_UNKNOWN

/****************************************************************************
* SCSI Task Management messages
****************************************************************************/

/*SCSI Task Management Request Message */
pMpi2SCSITaskManagementRequest_t;

/*TaskType values */

#define MPI2_SCSITASKMGMT_TASKTYPE_ABORT_TASK
#define MPI2_SCSITASKMGMT_TASKTYPE_ABRT_TASK_SET
#define MPI2_SCSITASKMGMT_TASKTYPE_TARGET_RESET
#define MPI2_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET
#define MPI2_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET
#define MPI2_SCSITASKMGMT_TASKTYPE_QUERY_TASK
#define MPI2_SCSITASKMGMT_TASKTYPE_CLR_ACA
#define MPI2_SCSITASKMGMT_TASKTYPE_QRY_TASK_SET
#define MPI2_SCSITASKMGMT_TASKTYPE_QRY_ASYNC_EVENT

/*obsolete TaskType name */
#define MPI2_SCSITASKMGMT_TASKTYPE_QRY_UNIT_ATTENTION

/*MsgFlags bits */

#define MPI2_SCSITASKMGMT_MSGFLAGS_MASK_TARGET_RESET
#define MPI26_SCSITASKMGMT_MSGFLAGS_HOT_RESET_PCIE
#define MPI2_SCSITASKMGMT_MSGFLAGS_LINK_RESET
#define MPI2_SCSITASKMGMT_MSGFLAGS_NEXUS_RESET_SRST
#define MPI2_SCSITASKMGMT_MSGFLAGS_SAS_HARD_LINK_RESET

#define MPI2_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU
#define MPI26_SCSITASKMGMT_MSGFLAGS_PROTOCOL_LVL_RST_PCIE

/*SCSI Task Management Reply Message */
pMpi2SCSIManagementReply_t;

/*ResponseCode values */

#define MPI2_SCSITASKMGMT_RSP_TM_COMPLETE
#define MPI2_SCSITASKMGMT_RSP_INVALID_FRAME
#define MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED
#define MPI2_SCSITASKMGMT_RSP_TM_FAILED
#define MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED
#define MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN
#define MPI2_SCSITASKMGMT_RSP_TM_OVERLAPPED_TAG
#define MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC

/*masks and shifts for the ResponseInfo field */

#define MPI2_SCSITASKMGMT_RI_MASK_REASONCODE
#define MPI2_SCSITASKMGMT_RI_SHIFT_REASONCODE
#define MPI2_SCSITASKMGMT_RI_MASK_ARI2
#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI2
#define MPI2_SCSITASKMGMT_RI_MASK_ARI1
#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI1
#define MPI2_SCSITASKMGMT_RI_MASK_ARI0
#define MPI2_SCSITASKMGMT_RI_SHIFT_ARI0

/****************************************************************************
* SCSI Enclosure Processor messages
****************************************************************************/

/*SCSI Enclosure Processor Request Message */
pMpi2SepRequest_t;

/*Action defines */
#define MPI2_SEP_REQ_ACTION_WRITE_STATUS
#define MPI2_SEP_REQ_ACTION_READ_STATUS

/*Flags defines */
#define MPI2_SEP_REQ_FLAGS_DEVHANDLE_ADDRESS
#define MPI2_SEP_REQ_FLAGS_ENCLOSURE_SLOT_ADDRESS

/*SlotStatus defines */
#define MPI2_SEP_REQ_SLOTSTATUS_DEV_OFF
#define MPI2_SEP_REQ_SLOTSTATUS_REQUEST_REMOVE
#define MPI2_SEP_REQ_SLOTSTATUS_IDENTIFY_REQUEST
#define MPI2_SEP_REQ_SLOTSTATUS_REBUILD_STOPPED
#define MPI2_SEP_REQ_SLOTSTATUS_HOT_SPARE
#define MPI2_SEP_REQ_SLOTSTATUS_UNCONFIGURED
#define MPI2_SEP_REQ_SLOTSTATUS_PREDICTED_FAULT
#define MPI2_SEP_REQ_SLOTSTATUS_IN_CRITICAL_ARRAY
#define MPI2_SEP_REQ_SLOTSTATUS_IN_FAILED_ARRAY
#define MPI2_SEP_REQ_SLOTSTATUS_DEV_REBUILDING
#define MPI2_SEP_REQ_SLOTSTATUS_DEV_FAULTY
#define MPI2_SEP_REQ_SLOTSTATUS_NO_ERROR

/*SCSI Enclosure Processor Reply Message */
pMpi2SepReply_t;

/*SlotStatus defines */
#define MPI2_SEP_REPLY_SLOTSTATUS_DEV_OFF
#define MPI2_SEP_REPLY_SLOTSTATUS_REMOVE_READY
#define MPI2_SEP_REPLY_SLOTSTATUS_IDENTIFY_REQUEST
#define MPI2_SEP_REPLY_SLOTSTATUS_REBUILD_STOPPED
#define MPI2_SEP_REPLY_SLOTSTATUS_HOT_SPARE
#define MPI2_SEP_REPLY_SLOTSTATUS_UNCONFIGURED
#define MPI2_SEP_REPLY_SLOTSTATUS_PREDICTED_FAULT
#define MPI2_SEP_REPLY_SLOTSTATUS_IN_CRITICAL_ARRAY
#define MPI2_SEP_REPLY_SLOTSTATUS_IN_FAILED_ARRAY
#define MPI2_SEP_REPLY_SLOTSTATUS_DEV_REBUILDING
#define MPI2_SEP_REPLY_SLOTSTATUS_DEV_FAULTY
#define MPI2_SEP_REPLY_SLOTSTATUS_NO_ERROR

#endif