1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright 2016-2021 Broadcom Inc. All rights reserved.
8 struct mpi3_scsi_io_cdb_eedp32 {
10 __be32 primary_reference_tag;
11 __le16 primary_application_tag;
12 __le16 primary_application_tag_mask;
13 __le32 transfer_length;
16 union mpi3_scsi_io_cdb_union {
18 struct mpi3_scsi_io_cdb_eedp32 eedp32;
19 struct mpi3_sge_common sge;
22 struct mpi3_scsi_io_request {
26 __le16 ioc_use_only04;
35 union mpi3_scsi_io_cdb_union cdb;
36 union mpi3_sge_union sgl[4];
39 #define MPI3_SCSIIO_MSGFLAGS_METASGL_VALID (0x80)
40 #define MPI3_SCSIIO_MSGFLAGS_DIVERT_TO_FIRMWARE (0x40)
41 #define MPI3_SCSIIO_FLAGS_LARGE_CDB (0x60000000)
42 #define MPI3_SCSIIO_FLAGS_CDB_16_OR_LESS (0x00000000)
43 #define MPI3_SCSIIO_FLAGS_CDB_GREATER_THAN_16 (0x20000000)
44 #define MPI3_SCSIIO_FLAGS_CDB_IN_SEPARATE_BUFFER (0x40000000)
45 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_MASK (0x07000000)
46 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_SIMPLEQ (0x00000000)
47 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_HEADOFQ (0x01000000)
48 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ORDEREDQ (0x02000000)
49 #define MPI3_SCSIIO_FLAGS_TASKATTRIBUTE_ACAQ (0x04000000)
50 #define MPI3_SCSIIO_FLAGS_CMDPRI_MASK (0x00f00000)
51 #define MPI3_SCSIIO_FLAGS_CMDPRI_SHIFT (20)
52 #define MPI3_SCSIIO_FLAGS_DATADIRECTION_MASK (0x000c0000)
53 #define MPI3_SCSIIO_FLAGS_DATADIRECTION_NO_DATA_TRANSFER (0x00000000)
54 #define MPI3_SCSIIO_FLAGS_DATADIRECTION_WRITE (0x00040000)
55 #define MPI3_SCSIIO_FLAGS_DATADIRECTION_READ (0x00080000)
56 #define MPI3_SCSIIO_FLAGS_DMAOPERATION_MASK (0x00030000)
57 #define MPI3_SCSIIO_FLAGS_DMAOPERATION_HOST_PI (0x00010000)
58 #define MPI3_SCSIIO_METASGL_INDEX (3)
59 struct mpi3_scsi_io_reply {
63 __le16 ioc_use_only04;
66 __le16 ioc_use_only08;
72 __le32 transfer_count;
76 __le16 scsi_status_qualifier;
77 __le32 eedp_error_offset;
78 __le16 eedp_observed_app_tag;
79 __le16 eedp_observed_guard;
80 __le32 eedp_observed_ref_tag;
81 __le64 sense_data_buffer_address;
84 #define MPI3_SCSIIO_REPLY_MSGFLAGS_REFTAG_OBSERVED_VALID (0x01)
85 #define MPI3_SCSIIO_REPLY_MSGFLAGS_APPTAG_OBSERVED_VALID (0x02)
86 #define MPI3_SCSIIO_REPLY_MSGFLAGS_GUARD_OBSERVED_VALID (0x04)
87 #define MPI3_SCSI_STATUS_GOOD (0x00)
88 #define MPI3_SCSI_STATUS_CHECK_CONDITION (0x02)
89 #define MPI3_SCSI_STATUS_CONDITION_MET (0x04)
90 #define MPI3_SCSI_STATUS_BUSY (0x08)
91 #define MPI3_SCSI_STATUS_INTERMEDIATE (0x10)
92 #define MPI3_SCSI_STATUS_INTERMEDIATE_CONDMET (0x14)
93 #define MPI3_SCSI_STATUS_RESERVATION_CONFLICT (0x18)
94 #define MPI3_SCSI_STATUS_COMMAND_TERMINATED (0x22)
95 #define MPI3_SCSI_STATUS_TASK_SET_FULL (0x28)
96 #define MPI3_SCSI_STATUS_ACA_ACTIVE (0x30)
97 #define MPI3_SCSI_STATUS_TASK_ABORTED (0x40)
98 #define MPI3_SCSI_STATE_SENSE_MASK (0x03)
99 #define MPI3_SCSI_STATE_SENSE_VALID (0x00)
100 #define MPI3_SCSI_STATE_SENSE_FAILED (0x01)
101 #define MPI3_SCSI_STATE_SENSE_BUFF_Q_EMPTY (0x02)
102 #define MPI3_SCSI_STATE_SENSE_NOT_AVAILABLE (0x03)
103 #define MPI3_SCSI_STATE_NO_SCSI_STATUS (0x04)
104 #define MPI3_SCSI_STATE_TERMINATED (0x08)
105 #define MPI3_SCSI_STATE_RESPONSE_DATA_VALID (0x10)
106 #define MPI3_SCSI_RSP_RESPONSECODE_MASK (0x000000ff)
107 #define MPI3_SCSI_RSP_RESPONSECODE_SHIFT (0)
108 #define MPI3_SCSI_RSP_ARI2_MASK (0x0000ff00)
109 #define MPI3_SCSI_RSP_ARI2_SHIFT (8)
110 #define MPI3_SCSI_RSP_ARI1_MASK (0x00ff0000)
111 #define MPI3_SCSI_RSP_ARI1_SHIFT (16)
112 #define MPI3_SCSI_RSP_ARI0_MASK (0xff000000)
113 #define MPI3_SCSI_RSP_ARI0_SHIFT (24)
114 #define MPI3_SCSI_TASKTAG_UNKNOWN (0xffff)
115 struct mpi3_scsi_task_mgmt_request {
119 __le16 ioc_use_only04;
124 __le16 task_host_tag;
127 __le16 task_request_queue_id;
133 #define MPI3_SCSITASKMGMT_MSGFLAGS_DO_NOT_SEND_TASK_IU (0x08)
134 #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK (0x01)
135 #define MPI3_SCSITASKMGMT_TASKTYPE_ABORT_TASK_SET (0x02)
136 #define MPI3_SCSITASKMGMT_TASKTYPE_TARGET_RESET (0x03)
137 #define MPI3_SCSITASKMGMT_TASKTYPE_LOGICAL_UNIT_RESET (0x05)
138 #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_TASK_SET (0x06)
139 #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK (0x07)
140 #define MPI3_SCSITASKMGMT_TASKTYPE_CLEAR_ACA (0x08)
141 #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_TASK_SET (0x09)
142 #define MPI3_SCSITASKMGMT_TASKTYPE_QUERY_ASYNC_EVENT (0x0a)
143 #define MPI3_SCSITASKMGMT_TASKTYPE_I_T_NEXUS_RESET (0x0b)
144 struct mpi3_scsi_task_mgmt_reply {
148 __le16 ioc_use_only04;
151 __le16 ioc_use_only08;
154 __le32 termination_count;
155 __le32 response_data;
159 #define MPI3_SCSITASKMGMT_RSPCODE_TM_COMPLETE (0x00)
160 #define MPI3_SCSITASKMGMT_RSPCODE_INVALID_FRAME (0x02)
161 #define MPI3_SCSITASKMGMT_RSPCODE_TM_FUNCTION_NOT_SUPPORTED (0x04)
162 #define MPI3_SCSITASKMGMT_RSPCODE_TM_FAILED (0x05)
163 #define MPI3_SCSITASKMGMT_RSPCODE_TM_SUCCEEDED (0x08)
164 #define MPI3_SCSITASKMGMT_RSPCODE_TM_INVALID_LUN (0x09)
165 #define MPI3_SCSITASKMGMT_RSPCODE_TM_OVERLAPPED_TAG (0x0a)
166 #define MPI3_SCSITASKMGMT_RSPCODE_IO_QUEUED_ON_IOC (0x80)
167 #define MPI3_SCSITASKMGMT_RSPCODE_TM_NVME_DENIED (0x81)