1c4f7ac64SKashyap Desai /* SPDX-License-Identifier: GPL-2.0-or-later */ 2c4f7ac64SKashyap Desai /* 3*e74f2fbdSRanjan Kumar * Copyright 2016-2023 Broadcom Inc. All rights reserved. 4c4f7ac64SKashyap Desai */ 5c4f7ac64SKashyap Desai #ifndef MPI30_INIT_H 6c4f7ac64SKashyap Desai #define MPI30_INIT_H 1 7c4f7ac64SKashyap Desai struct mpi3_scsi_io_cdb_eedp32 { 8c4f7ac64SKashyap Desai u8 cdb[20]; 9c4f7ac64SKashyap Desai __be32 primary_reference_tag; 10c4f7ac64SKashyap Desai __le16 primary_application_tag; 11c4f7ac64SKashyap Desai __le16 primary_application_tag_mask; 12c4f7ac64SKashyap Desai __le32 transfer_length; 13c4f7ac64SKashyap Desai }; 14c4f7ac64SKashyap Desai 15ec5ebd2cSSreekanth Reddy union mpi3_scsi_io_cdb_union { 16c4f7ac64SKashyap Desai u8 cdb32[32]; 17c4f7ac64SKashyap Desai struct mpi3_scsi_io_cdb_eedp32 eedp32; 18c4f7ac64SKashyap Desai struct mpi3_sge_common sge; 19c4f7ac64SKashyap Desai }; 20c4f7ac64SKashyap Desai 21c4f7ac64SKashyap Desai struct mpi3_scsi_io_request { 22c4f7ac64SKashyap Desai __le16 host_tag; 23c4f7ac64SKashyap Desai u8 ioc_use_only02; 24c4f7ac64SKashyap Desai u8 function; 25c4f7ac64SKashyap Desai __le16 ioc_use_only04; 26c4f7ac64SKashyap Desai u8 ioc_use_only06; 27c4f7ac64SKashyap Desai u8 msg_flags; 28c4f7ac64SKashyap Desai __le16 change_count; 29c4f7ac64SKashyap Desai __le16 dev_handle; 30c4f7ac64SKashyap Desai __le32 flags; 31c4f7ac64SKashyap Desai __le32 skip_count; 32c4f7ac64SKashyap Desai __le32 data_length; 33c4f7ac64SKashyap Desai u8 lun[8]; 34ec5ebd2cSSreekanth Reddy union mpi3_scsi_io_cdb_union cdb; 35c4f7ac64SKashyap Desai union mpi3_sge_union sgl[4]; 36c4f7ac64SKashyap Desai }; 37c4f7ac64SKashyap Desai 38c4f7ac64SKashyap Desai #define MPI3_SCSIIO_MSGFLAGS_METASGL_VALID (0x80) 39ec5ebd2cSSreekanth Reddy #define MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE (0x40) 40c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_LARGE_CDB (0x60000000) 41c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS (0x00000000) 42c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16 (0x20000000) 43c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER (0x40000000) 44c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK (0x07000000) 45c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ (0x00000000) 46c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ (0x01000000) 47c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ORDEREDQ (0x02000000) 48c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ACAQ (0x04000000) 49c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CMDPRI_MASK (0x00f00000) 50c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_CMDPRI_SHIFT (20) 51c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_MASK (0x000c0000) 52c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_NO_DATA_TRANSFER (0x00000000) 53c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_WRITE (0x00040000) 54c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DATADIRECTION_READ (0x00080000) 55c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DMAOPERATION_MASK (0x00030000) 56c4f7ac64SKashyap Desai #define MPI3_SCSIIO_FLAGS_DMAOPERATION_HOST_PI (0x00010000) 5704b27e53SSreekanth Reddy #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_MASK (0x000000f0) 5804b27e53SSreekanth Reddy #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_IO_THROTTLING (0x00000010) 59e5f596bcSRanjan Kumar #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_WRITE_SAME_TOO_LARGE (0x00000020) 6004b27e53SSreekanth Reddy #define MPI3_SCSIIO_FLAGS_DIVERT_REASON_PROD_SPECIFIC (0x00000080) 61c4f7ac64SKashyap Desai #define MPI3_SCSIIO_METASGL_INDEX (3) 62c4f7ac64SKashyap Desai struct mpi3_scsi_io_reply { 63c4f7ac64SKashyap Desai __le16 host_tag; 64c4f7ac64SKashyap Desai u8 ioc_use_only02; 65c4f7ac64SKashyap Desai u8 function; 66c4f7ac64SKashyap Desai __le16 ioc_use_only04; 67c4f7ac64SKashyap Desai u8 ioc_use_only06; 68c4f7ac64SKashyap Desai u8 msg_flags; 69c4f7ac64SKashyap Desai __le16 ioc_use_only08; 70c4f7ac64SKashyap Desai __le16 ioc_status; 71c4f7ac64SKashyap Desai __le32 ioc_log_info; 72c4f7ac64SKashyap Desai u8 scsi_status; 73c4f7ac64SKashyap Desai u8 scsi_state; 74c4f7ac64SKashyap Desai __le16 dev_handle; 75c4f7ac64SKashyap Desai __le32 transfer_count; 76c4f7ac64SKashyap Desai __le32 sense_count; 77c4f7ac64SKashyap Desai __le32 response_data; 78c4f7ac64SKashyap Desai __le16 task_tag; 79c4f7ac64SKashyap Desai __le16 scsi_status_qualifier; 80c4f7ac64SKashyap Desai __le32 eedp_error_offset; 81c4f7ac64SKashyap Desai __le16 eedp_observed_app_tag; 82c4f7ac64SKashyap Desai __le16 eedp_observed_guard; 83c4f7ac64SKashyap Desai __le32 eedp_observed_ref_tag; 84c4f7ac64SKashyap Desai __le64 sense_data_buffer_address; 85c4f7ac64SKashyap Desai }; 86c4f7ac64SKashyap Desai 87c4f7ac64SKashyap Desai #define MPI3_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID (0x01) 88c4f7ac64SKashyap Desai #define MPI3_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID (0x02) 89c4f7ac64SKashyap Desai #define MPI3_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID (0x04) 90c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_GOOD (0x00) 91c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_CHECK_CONDITION (0x02) 92c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_CONDITION_MET (0x04) 93c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_BUSY (0x08) 94c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_INTERMEDIATE (0x10) 95c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_INTERMEDIATE_CONDMET (0x14) 96c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_RESERVATION_CONFLICT (0x18) 97c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_COMMAND_TERMINATED (0x22) 98c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_TASK_SET_FULL (0x28) 99c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_ACA_ACTIVE (0x30) 100c4f7ac64SKashyap Desai #define MPI3_SCSI_STATUS_TASK_ABORTED (0x40) 101c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_MASK (0x03) 102c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_VALID (0x00) 103c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_FAILED (0x01) 104c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_BUFF_Q_EMPTY (0x02) 105c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_SENSE_NOT_AVAILABLE (0x03) 106c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_NO_SCSI_STATUS (0x04) 107c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_TERMINATED (0x08) 108c4f7ac64SKashyap Desai #define MPI3_SCSI_STATE_RESPONSE_DATA_VALID (0x10) 109c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_RESPONSECODE_MASK (0x000000ff) 110c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_RESPONSECODE_SHIFT (0) 111c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI2_MASK (0x0000ff00) 112c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI2_SHIFT (8) 113c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI1_MASK (0x00ff0000) 114c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI1_SHIFT (16) 115c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI0_MASK (0xff000000) 116c4f7ac64SKashyap Desai #define MPI3_SCSI_RSP_ARI0_SHIFT (24) 117c4f7ac64SKashyap Desai #define MPI3_SCSI_TASKTAG_UNKNOWN (0xffff) 118e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU (0x08) 119e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK (0x01) 120e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK_SET (0x02) 121e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET (0x03) 122e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET (0x05) 123e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET (0x06) 124e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK (0x07) 125e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_ACA (0x08) 126e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK_SET (0x09) 127e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_ASYNC_EVENT (0x0a) 128e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_TASKTYPE_I_T_NEXUS_RESET (0x0b) 129e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_COMPLETE (0x00) 130e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_INVALID_FRAME (0x02) 131e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_FUNCTION_NOT_SUPPORTED (0x04) 132e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_FAILED (0x05) 133e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_SUCCEEDED (0x08) 134e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_INVALID_LUN (0x09) 135e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_OVERLAPPED_TAG (0x0a) 136e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_IO_QUEUED_ON_IOC (0x80) 137e5f596bcSRanjan Kumar #define MPI3_SCSITASKMGMT_RSPCODE_TM_NVME_DENIED (0x81) 138c4f7ac64SKashyap Desai #endif 139