Loading...
Note: File does not exist in v3.1.
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