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