blob: 66aba505ec56b3ae0b9365b521ed00f5253d843e [file] [log] [blame]
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001/* QLogic qed NIC Driver
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02002 * Copyright (c) 2015-2017 QLogic Corporation
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03003 *
Mintz, Yuvale8f1cb52017-01-01 13:57:00 +02004 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and /or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030031 */
32
33#ifndef __ISCSI_COMMON__
34#define __ISCSI_COMMON__
Tomer Tayara2e76992017-12-27 19:30:05 +020035
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030036/**********************/
37/* ISCSI FW CONSTANTS */
38/**********************/
39
40/* iSCSI HSI constants */
Tomer Tayara2e76992017-12-27 19:30:05 +020041#define ISCSI_DEFAULT_MTU (1500)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030042
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030043/* KWQ (kernel work queue) layer codes */
Tomer Tayara2e76992017-12-27 19:30:05 +020044#define ISCSI_SLOW_PATH_LAYER_CODE (6)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030045
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030046/* iSCSI parameter defaults */
Tomer Tayara2e76992017-12-27 19:30:05 +020047#define ISCSI_DEFAULT_HEADER_DIGEST (0)
48#define ISCSI_DEFAULT_DATA_DIGEST (0)
49#define ISCSI_DEFAULT_INITIAL_R2T (1)
50#define ISCSI_DEFAULT_IMMEDIATE_DATA (1)
51#define ISCSI_DEFAULT_MAX_PDU_LENGTH (0x2000)
52#define ISCSI_DEFAULT_FIRST_BURST_LENGTH (0x10000)
53#define ISCSI_DEFAULT_MAX_BURST_LENGTH (0x40000)
54#define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T (1)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030055
56/* iSCSI parameter limits */
Tomer Tayara2e76992017-12-27 19:30:05 +020057#define ISCSI_MIN_VAL_MAX_PDU_LENGTH (0x200)
58#define ISCSI_MAX_VAL_MAX_PDU_LENGTH (0xffffff)
59#define ISCSI_MIN_VAL_BURST_LENGTH (0x200)
60#define ISCSI_MAX_VAL_BURST_LENGTH (0xffffff)
61#define ISCSI_MIN_VAL_MAX_OUTSTANDING_R2T (1)
62#define ISCSI_MAX_VAL_MAX_OUTSTANDING_R2T (0xff)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030063
Tomer Tayara2e76992017-12-27 19:30:05 +020064#define ISCSI_AHS_CNTL_SIZE 4
Mintz, Yuvalbe086e72017-03-11 18:39:18 +020065
Tomer Tayara2e76992017-12-27 19:30:05 +020066#define ISCSI_WQE_NUM_SGES_SLOWIO (0xf)
Mintz, Yuvalbe086e72017-03-11 18:39:18 +020067
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030068/* iSCSI reserved params */
69#define ISCSI_ITT_ALL_ONES (0xffffffff)
70#define ISCSI_TTT_ALL_ONES (0xffffffff)
71
Tomer Tayara2e76992017-12-27 19:30:05 +020072#define ISCSI_OPTION_1_OFF_CHIP_TCP 1
73#define ISCSI_OPTION_2_ON_CHIP_TCP 2
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030074
Tomer Tayara2e76992017-12-27 19:30:05 +020075#define ISCSI_INITIATOR_MODE 0
76#define ISCSI_TARGET_MODE 1
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030077
78/* iSCSI request op codes */
Mintz, Yuval7b6859f2017-05-18 19:41:04 +030079#define ISCSI_OPCODE_NOP_OUT (0)
80#define ISCSI_OPCODE_SCSI_CMD (1)
81#define ISCSI_OPCODE_TMF_REQUEST (2)
82#define ISCSI_OPCODE_LOGIN_REQUEST (3)
83#define ISCSI_OPCODE_TEXT_REQUEST (4)
84#define ISCSI_OPCODE_DATA_OUT (5)
85#define ISCSI_OPCODE_LOGOUT_REQUEST (6)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030086
87/* iSCSI response/messages op codes */
Tomer Tayara2e76992017-12-27 19:30:05 +020088#define ISCSI_OPCODE_NOP_IN (0x20)
89#define ISCSI_OPCODE_SCSI_RESPONSE (0x21)
90#define ISCSI_OPCODE_TMF_RESPONSE (0x22)
91#define ISCSI_OPCODE_LOGIN_RESPONSE (0x23)
92#define ISCSI_OPCODE_TEXT_RESPONSE (0x24)
93#define ISCSI_OPCODE_DATA_IN (0x25)
94#define ISCSI_OPCODE_LOGOUT_RESPONSE (0x26)
95#define ISCSI_OPCODE_R2T (0x31)
96#define ISCSI_OPCODE_ASYNC_MSG (0x32)
97#define ISCSI_OPCODE_REJECT (0x3f)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +030098
99/* iSCSI stages */
Tomer Tayara2e76992017-12-27 19:30:05 +0200100#define ISCSI_STAGE_SECURITY_NEGOTIATION (0)
101#define ISCSI_STAGE_LOGIN_OPERATIONAL_NEGOTIATION (1)
102#define ISCSI_STAGE_FULL_FEATURE_PHASE (3)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300103
104/* iSCSI CQE errors */
Tomer Tayara2e76992017-12-27 19:30:05 +0200105#define CQE_ERROR_BITMAP_DATA_DIGEST (0x08)
106#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN (0x10)
107#define CQE_ERROR_BITMAP_DATA_TRUNCATED (0x20)
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300108
Tomer Tayarda090912017-12-27 19:30:07 +0200109/* Union of data bd_opaque/ tq_tid */
110union bd_opaque_tq_union {
111 __le16 bd_opaque;
112 __le16 tq_tid;
113};
114
Tomer Tayara2e76992017-12-27 19:30:05 +0200115/* ISCSI SGL entry */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300116struct cqe_error_bitmap {
117 u8 cqe_error_status_bits;
Tomer Tayara2e76992017-12-27 19:30:05 +0200118#define CQE_ERROR_BITMAP_DIF_ERR_BITS_MASK 0x7
119#define CQE_ERROR_BITMAP_DIF_ERR_BITS_SHIFT 0
120#define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_MASK 0x1
121#define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_SHIFT 3
122#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_MASK 0x1
123#define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_SHIFT 4
124#define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_MASK 0x1
125#define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_SHIFT 5
126#define CQE_ERROR_BITMAP_UNDER_RUN_ERR_MASK 0x1
127#define CQE_ERROR_BITMAP_UNDER_RUN_ERR_SHIFT 6
128#define CQE_ERROR_BITMAP_RESERVED2_MASK 0x1
129#define CQE_ERROR_BITMAP_RESERVED2_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300130};
131
132union cqe_error_status {
133 u8 error_status;
134 struct cqe_error_bitmap error_bits;
135};
136
Tomer Tayara2e76992017-12-27 19:30:05 +0200137/* iSCSI Login Response PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300138struct data_hdr {
139 __le32 data[12];
140};
141
Tomer Tayarda090912017-12-27 19:30:07 +0200142struct lun_mapper_addr_reserved {
143 struct regpair lun_mapper_addr;
144 u8 reserved0[8];
145};
146
147/* rdif conetxt for dif on immediate */
148struct dif_on_immediate_params {
149 __le32 initial_ref_tag;
150 __le16 application_tag;
151 __le16 application_tag_mask;
152 __le16 flags1;
153#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_GUARD_MASK 0x1
154#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_GUARD_SHIFT 0
155#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_APP_TAG_MASK 0x1
156#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_APP_TAG_SHIFT 1
157#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_REF_TAG_MASK 0x1
158#define DIF_ON_IMMEDIATE_PARAMS_VALIDATE_REF_TAG_SHIFT 2
159#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_GUARD_MASK 0x1
160#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_GUARD_SHIFT 3
161#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_MASK 0x1
162#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_SHIFT 4
163#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_MASK 0x1
164#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_SHIFT 5
165#define DIF_ON_IMMEDIATE_PARAMS_INTERVAL_SIZE_MASK 0x1
166#define DIF_ON_IMMEDIATE_PARAMS_INTERVAL_SIZE_SHIFT 6
167#define DIF_ON_IMMEDIATE_PARAMS_NETWORK_INTERFACE_MASK 0x1
168#define DIF_ON_IMMEDIATE_PARAMS_NETWORK_INTERFACE_SHIFT 7
169#define DIF_ON_IMMEDIATE_PARAMS_HOST_INTERFACE_MASK 0x3
170#define DIF_ON_IMMEDIATE_PARAMS_HOST_INTERFACE_SHIFT 8
171#define DIF_ON_IMMEDIATE_PARAMS_REF_TAG_MASK_MASK 0xF
172#define DIF_ON_IMMEDIATE_PARAMS_REF_TAG_MASK_SHIFT 10
173#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_WITH_MASK_MASK 0x1
174#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_APP_TAG_WITH_MASK_SHIFT 14
175#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_WITH_MASK_MASK 0x1
176#define DIF_ON_IMMEDIATE_PARAMS_FORWARD_REF_TAG_WITH_MASK_SHIFT 15
177 u8 flags0;
178#define DIF_ON_IMMEDIATE_PARAMS_RESERVED_MASK 0x1
179#define DIF_ON_IMMEDIATE_PARAMS_RESERVED_SHIFT 0
180#define DIF_ON_IMMEDIATE_PARAMS_IGNORE_APP_TAG_MASK 0x1
181#define DIF_ON_IMMEDIATE_PARAMS_IGNORE_APP_TAG_SHIFT 1
182#define DIF_ON_IMMEDIATE_PARAMS_INITIAL_REF_TAG_IS_VALID_MASK 0x1
183#define DIF_ON_IMMEDIATE_PARAMS_INITIAL_REF_TAG_IS_VALID_SHIFT 2
184#define DIF_ON_IMMEDIATE_PARAMS_HOST_GUARD_TYPE_MASK 0x1
185#define DIF_ON_IMMEDIATE_PARAMS_HOST_GUARD_TYPE_SHIFT 3
186#define DIF_ON_IMMEDIATE_PARAMS_PROTECTION_TYPE_MASK 0x3
187#define DIF_ON_IMMEDIATE_PARAMS_PROTECTION_TYPE_SHIFT 4
188#define DIF_ON_IMMEDIATE_PARAMS_CRC_SEED_MASK 0x1
189#define DIF_ON_IMMEDIATE_PARAMS_CRC_SEED_SHIFT 6
190#define DIF_ON_IMMEDIATE_PARAMS_KEEP_REF_TAG_CONST_MASK 0x1
191#define DIF_ON_IMMEDIATE_PARAMS_KEEP_REF_TAG_CONST_SHIFT 7
192 u8 reserved_zero[5];
193};
194
195/* iSCSI dif on immediate mode attributes union */
196union dif_configuration_params {
197 struct lun_mapper_addr_reserved lun_mapper_address;
198 struct dif_on_immediate_params def_dif_conf;
199};
200
Tomer Tayara2e76992017-12-27 19:30:05 +0200201/* Union of data/r2t sequence number */
202union iscsi_seq_num {
203 __le16 data_sn;
204 __le16 r2t_sn;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300205};
206
Tomer Tayara2e76992017-12-27 19:30:05 +0200207/* iSCSI DIF flags */
208struct iscsi_dif_flags {
209 u8 flags;
210#define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK 0xF
211#define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0
212#define ISCSI_DIF_FLAGS_DIF_TO_PEER_MASK 0x1
213#define ISCSI_DIF_FLAGS_DIF_TO_PEER_SHIFT 4
214#define ISCSI_DIF_FLAGS_HOST_INTERFACE_MASK 0x7
215#define ISCSI_DIF_FLAGS_HOST_INTERFACE_SHIFT 5
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300216};
217
Tomer Tayara2e76992017-12-27 19:30:05 +0200218/* The iscsi storm task context of Ystorm */
219struct ystorm_iscsi_task_state {
220 struct scsi_cached_sges data_desc;
221 struct scsi_sgl_params sgl_params;
222 __le32 exp_r2t_sn;
223 __le32 buffer_offset;
224 union iscsi_seq_num seq_num;
225 struct iscsi_dif_flags dif_flags;
226 u8 flags;
227#define YSTORM_ISCSI_TASK_STATE_LOCAL_COMP_MASK 0x1
228#define YSTORM_ISCSI_TASK_STATE_LOCAL_COMP_SHIFT 0
229#define YSTORM_ISCSI_TASK_STATE_SLOW_IO_MASK 0x1
230#define YSTORM_ISCSI_TASK_STATE_SLOW_IO_SHIFT 1
Tomer Tayarda090912017-12-27 19:30:07 +0200231#define YSTORM_ISCSI_TASK_STATE_SET_DIF_OFFSET_MASK 0x1
232#define YSTORM_ISCSI_TASK_STATE_SET_DIF_OFFSET_SHIFT 2
233#define YSTORM_ISCSI_TASK_STATE_RESERVED0_MASK 0x1F
234#define YSTORM_ISCSI_TASK_STATE_RESERVED0_SHIFT 3
Tomer Tayara2e76992017-12-27 19:30:05 +0200235};
236
237/* The iscsi storm task context of Ystorm */
238struct ystorm_iscsi_task_rxmit_opt {
239 __le32 fast_rxmit_sge_offset;
240 __le32 scan_start_buffer_offset;
241 __le32 fast_rxmit_buffer_offset;
242 u8 scan_start_sgl_index;
243 u8 fast_rxmit_sgl_index;
244 __le16 reserved;
245};
246
247/* iSCSI Common PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300248struct iscsi_common_hdr {
249 u8 hdr_status;
250 u8 hdr_response;
251 u8 hdr_flags;
252 u8 hdr_first_byte;
Tomer Tayara2e76992017-12-27 19:30:05 +0200253#define ISCSI_COMMON_HDR_OPCODE_MASK 0x3F
254#define ISCSI_COMMON_HDR_OPCODE_SHIFT 0
255#define ISCSI_COMMON_HDR_IMM_MASK 0x1
256#define ISCSI_COMMON_HDR_IMM_SHIFT 6
257#define ISCSI_COMMON_HDR_RSRV_MASK 0x1
258#define ISCSI_COMMON_HDR_RSRV_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300259 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200260#define ISCSI_COMMON_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
261#define ISCSI_COMMON_HDR_DATA_SEG_LEN_SHIFT 0
262#define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_MASK 0xFF
263#define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_SHIFT 24
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200264 struct regpair lun_reserved;
265 __le32 itt;
266 __le32 ttt;
267 __le32 cmdstat_sn;
268 __le32 exp_statcmd_sn;
269 __le32 max_cmd_sn;
270 __le32 data[3];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300271};
272
Tomer Tayara2e76992017-12-27 19:30:05 +0200273/* iSCSI Command PDU header */
274struct iscsi_cmd_hdr {
275 __le16 reserved1;
276 u8 flags_attr;
277#define ISCSI_CMD_HDR_ATTR_MASK 0x7
278#define ISCSI_CMD_HDR_ATTR_SHIFT 0
279#define ISCSI_CMD_HDR_RSRV_MASK 0x3
280#define ISCSI_CMD_HDR_RSRV_SHIFT 3
281#define ISCSI_CMD_HDR_WRITE_MASK 0x1
282#define ISCSI_CMD_HDR_WRITE_SHIFT 5
283#define ISCSI_CMD_HDR_READ_MASK 0x1
284#define ISCSI_CMD_HDR_READ_SHIFT 6
285#define ISCSI_CMD_HDR_FINAL_MASK 0x1
286#define ISCSI_CMD_HDR_FINAL_SHIFT 7
287 u8 hdr_first_byte;
288#define ISCSI_CMD_HDR_OPCODE_MASK 0x3F
289#define ISCSI_CMD_HDR_OPCODE_SHIFT 0
290#define ISCSI_CMD_HDR_IMM_MASK 0x1
291#define ISCSI_CMD_HDR_IMM_SHIFT 6
292#define ISCSI_CMD_HDR_RSRV1_MASK 0x1
293#define ISCSI_CMD_HDR_RSRV1_SHIFT 7
294 __le32 hdr_second_dword;
295#define ISCSI_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
296#define ISCSI_CMD_HDR_DATA_SEG_LEN_SHIFT 0
297#define ISCSI_CMD_HDR_TOTAL_AHS_LEN_MASK 0xFF
298#define ISCSI_CMD_HDR_TOTAL_AHS_LEN_SHIFT 24
299 struct regpair lun;
300 __le32 itt;
301 __le32 expected_transfer_length;
302 __le32 cmd_sn;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300303 __le32 exp_stat_sn;
Tomer Tayara2e76992017-12-27 19:30:05 +0200304 __le32 cdb[4];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300305};
306
Tomer Tayara2e76992017-12-27 19:30:05 +0200307/* iSCSI Command PDU header with Extended CDB (Initiator Mode) */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300308struct iscsi_ext_cdb_cmd_hdr {
309 __le16 reserved1;
310 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200311#define ISCSI_EXT_CDB_CMD_HDR_ATTR_MASK 0x7
312#define ISCSI_EXT_CDB_CMD_HDR_ATTR_SHIFT 0
313#define ISCSI_EXT_CDB_CMD_HDR_RSRV_MASK 0x3
314#define ISCSI_EXT_CDB_CMD_HDR_RSRV_SHIFT 3
315#define ISCSI_EXT_CDB_CMD_HDR_WRITE_MASK 0x1
316#define ISCSI_EXT_CDB_CMD_HDR_WRITE_SHIFT 5
317#define ISCSI_EXT_CDB_CMD_HDR_READ_MASK 0x1
318#define ISCSI_EXT_CDB_CMD_HDR_READ_SHIFT 6
319#define ISCSI_EXT_CDB_CMD_HDR_FINAL_MASK 0x1
320#define ISCSI_EXT_CDB_CMD_HDR_FINAL_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300321 u8 opcode;
322 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200323#define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
324#define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_SHIFT 0
325#define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_MASK 0xFF
326#define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300327 struct regpair lun;
328 __le32 itt;
329 __le32 expected_transfer_length;
330 __le32 cmd_sn;
331 __le32 exp_stat_sn;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200332 struct scsi_sge cdb_sge;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300333};
334
Tomer Tayara2e76992017-12-27 19:30:05 +0200335/* iSCSI login request PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300336struct iscsi_login_req_hdr {
337 u8 version_min;
338 u8 version_max;
339 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200340#define ISCSI_LOGIN_REQ_HDR_NSG_MASK 0x3
341#define ISCSI_LOGIN_REQ_HDR_NSG_SHIFT 0
342#define ISCSI_LOGIN_REQ_HDR_CSG_MASK 0x3
343#define ISCSI_LOGIN_REQ_HDR_CSG_SHIFT 2
344#define ISCSI_LOGIN_REQ_HDR_RSRV_MASK 0x3
345#define ISCSI_LOGIN_REQ_HDR_RSRV_SHIFT 4
346#define ISCSI_LOGIN_REQ_HDR_C_MASK 0x1
347#define ISCSI_LOGIN_REQ_HDR_C_SHIFT 6
348#define ISCSI_LOGIN_REQ_HDR_T_MASK 0x1
349#define ISCSI_LOGIN_REQ_HDR_T_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300350 u8 opcode;
351 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200352#define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
353#define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_SHIFT 0
354#define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_MASK 0xFF
355#define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300356 __le32 isid_tabc;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300357 __le16 tsih;
358 __le16 isid_d;
359 __le32 itt;
360 __le16 reserved1;
361 __le16 cid;
362 __le32 cmd_sn;
363 __le32 exp_stat_sn;
364 __le32 reserved2[4];
365};
366
Tomer Tayara2e76992017-12-27 19:30:05 +0200367/* iSCSI logout request PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300368struct iscsi_logout_req_hdr {
369 __le16 reserved0;
370 u8 reason_code;
371 u8 opcode;
372 __le32 reserved1;
373 __le32 reserved2[2];
374 __le32 itt;
375 __le16 reserved3;
376 __le16 cid;
377 __le32 cmd_sn;
378 __le32 exp_stat_sn;
379 __le32 reserved4[4];
380};
381
Tomer Tayara2e76992017-12-27 19:30:05 +0200382/* iSCSI Data-out PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300383struct iscsi_data_out_hdr {
384 __le16 reserved1;
385 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200386#define ISCSI_DATA_OUT_HDR_RSRV_MASK 0x7F
387#define ISCSI_DATA_OUT_HDR_RSRV_SHIFT 0
388#define ISCSI_DATA_OUT_HDR_FINAL_MASK 0x1
389#define ISCSI_DATA_OUT_HDR_FINAL_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300390 u8 opcode;
391 __le32 reserved2;
392 struct regpair lun;
393 __le32 itt;
394 __le32 ttt;
395 __le32 reserved3;
396 __le32 exp_stat_sn;
397 __le32 reserved4;
398 __le32 data_sn;
399 __le32 buffer_offset;
400 __le32 reserved5;
401};
402
Tomer Tayara2e76992017-12-27 19:30:05 +0200403/* iSCSI Data-in PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300404struct iscsi_data_in_hdr {
405 u8 status_rsvd;
406 u8 reserved1;
407 u8 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +0200408#define ISCSI_DATA_IN_HDR_STATUS_MASK 0x1
409#define ISCSI_DATA_IN_HDR_STATUS_SHIFT 0
410#define ISCSI_DATA_IN_HDR_UNDERFLOW_MASK 0x1
411#define ISCSI_DATA_IN_HDR_UNDERFLOW_SHIFT 1
412#define ISCSI_DATA_IN_HDR_OVERFLOW_MASK 0x1
413#define ISCSI_DATA_IN_HDR_OVERFLOW_SHIFT 2
414#define ISCSI_DATA_IN_HDR_RSRV_MASK 0x7
415#define ISCSI_DATA_IN_HDR_RSRV_SHIFT 3
416#define ISCSI_DATA_IN_HDR_ACK_MASK 0x1
417#define ISCSI_DATA_IN_HDR_ACK_SHIFT 6
418#define ISCSI_DATA_IN_HDR_FINAL_MASK 0x1
419#define ISCSI_DATA_IN_HDR_FINAL_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300420 u8 opcode;
421 __le32 reserved2;
422 struct regpair lun;
423 __le32 itt;
424 __le32 ttt;
425 __le32 stat_sn;
426 __le32 exp_cmd_sn;
427 __le32 max_cmd_sn;
428 __le32 data_sn;
429 __le32 buffer_offset;
430 __le32 residual_count;
431};
432
Tomer Tayara2e76992017-12-27 19:30:05 +0200433/* iSCSI R2T PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300434struct iscsi_r2t_hdr {
435 u8 reserved0[3];
436 u8 opcode;
437 __le32 reserved2;
438 struct regpair lun;
439 __le32 itt;
440 __le32 ttt;
441 __le32 stat_sn;
442 __le32 exp_cmd_sn;
443 __le32 max_cmd_sn;
444 __le32 r2t_sn;
445 __le32 buffer_offset;
446 __le32 desired_data_trns_len;
447};
448
Tomer Tayara2e76992017-12-27 19:30:05 +0200449/* iSCSI NOP-out PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300450struct iscsi_nop_out_hdr {
451 __le16 reserved1;
452 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200453#define ISCSI_NOP_OUT_HDR_RSRV_MASK 0x7F
454#define ISCSI_NOP_OUT_HDR_RSRV_SHIFT 0
455#define ISCSI_NOP_OUT_HDR_CONST1_MASK 0x1
456#define ISCSI_NOP_OUT_HDR_CONST1_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300457 u8 opcode;
458 __le32 reserved2;
459 struct regpair lun;
460 __le32 itt;
461 __le32 ttt;
462 __le32 cmd_sn;
463 __le32 exp_stat_sn;
464 __le32 reserved3;
465 __le32 reserved4;
466 __le32 reserved5;
467 __le32 reserved6;
468};
469
Tomer Tayara2e76992017-12-27 19:30:05 +0200470/* iSCSI NOP-in PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300471struct iscsi_nop_in_hdr {
472 __le16 reserved0;
473 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200474#define ISCSI_NOP_IN_HDR_RSRV_MASK 0x7F
475#define ISCSI_NOP_IN_HDR_RSRV_SHIFT 0
476#define ISCSI_NOP_IN_HDR_CONST1_MASK 0x1
477#define ISCSI_NOP_IN_HDR_CONST1_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300478 u8 opcode;
479 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200480#define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
481#define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_SHIFT 0
482#define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_MASK 0xFF
483#define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300484 struct regpair lun;
485 __le32 itt;
486 __le32 ttt;
487 __le32 stat_sn;
488 __le32 exp_cmd_sn;
489 __le32 max_cmd_sn;
490 __le32 reserved5;
491 __le32 reserved6;
492 __le32 reserved7;
493};
494
Tomer Tayara2e76992017-12-27 19:30:05 +0200495/* iSCSI Login Response PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300496struct iscsi_login_response_hdr {
497 u8 version_active;
498 u8 version_max;
499 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200500#define ISCSI_LOGIN_RESPONSE_HDR_NSG_MASK 0x3
501#define ISCSI_LOGIN_RESPONSE_HDR_NSG_SHIFT 0
502#define ISCSI_LOGIN_RESPONSE_HDR_CSG_MASK 0x3
503#define ISCSI_LOGIN_RESPONSE_HDR_CSG_SHIFT 2
504#define ISCSI_LOGIN_RESPONSE_HDR_RSRV_MASK 0x3
505#define ISCSI_LOGIN_RESPONSE_HDR_RSRV_SHIFT 4
506#define ISCSI_LOGIN_RESPONSE_HDR_C_MASK 0x1
507#define ISCSI_LOGIN_RESPONSE_HDR_C_SHIFT 6
508#define ISCSI_LOGIN_RESPONSE_HDR_T_MASK 0x1
509#define ISCSI_LOGIN_RESPONSE_HDR_T_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300510 u8 opcode;
511 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200512#define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
513#define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
514#define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
515#define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz05fafbf2016-08-19 09:33:31 +0300516 __le32 isid_tabc;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300517 __le16 tsih;
518 __le16 isid_d;
519 __le32 itt;
520 __le32 reserved1;
521 __le32 stat_sn;
522 __le32 exp_cmd_sn;
523 __le32 max_cmd_sn;
524 __le16 reserved2;
525 u8 status_detail;
526 u8 status_class;
527 __le32 reserved4[2];
528};
529
Tomer Tayara2e76992017-12-27 19:30:05 +0200530/* iSCSI Logout Response PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300531struct iscsi_logout_response_hdr {
532 u8 reserved1;
533 u8 response;
534 u8 flags;
535 u8 opcode;
536 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200537#define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
538#define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
539#define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
540#define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300541 __le32 reserved2[2];
542 __le32 itt;
543 __le32 reserved3;
544 __le32 stat_sn;
545 __le32 exp_cmd_sn;
546 __le32 max_cmd_sn;
547 __le32 reserved4;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200548 __le16 time_2_retain;
549 __le16 time_2_wait;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300550 __le32 reserved5[1];
551};
552
Tomer Tayara2e76992017-12-27 19:30:05 +0200553/* iSCSI Text Request PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300554struct iscsi_text_request_hdr {
555 __le16 reserved0;
556 u8 flags_attr;
Tomer Tayara2e76992017-12-27 19:30:05 +0200557#define ISCSI_TEXT_REQUEST_HDR_RSRV_MASK 0x3F
558#define ISCSI_TEXT_REQUEST_HDR_RSRV_SHIFT 0
559#define ISCSI_TEXT_REQUEST_HDR_C_MASK 0x1
560#define ISCSI_TEXT_REQUEST_HDR_C_SHIFT 6
561#define ISCSI_TEXT_REQUEST_HDR_F_MASK 0x1
562#define ISCSI_TEXT_REQUEST_HDR_F_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300563 u8 opcode;
564 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200565#define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
566#define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0
567#define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF
568#define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300569 struct regpair lun;
570 __le32 itt;
571 __le32 ttt;
572 __le32 cmd_sn;
573 __le32 exp_stat_sn;
574 __le32 reserved4[4];
575};
576
Tomer Tayara2e76992017-12-27 19:30:05 +0200577/* iSCSI Text Response PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300578struct iscsi_text_response_hdr {
579 __le16 reserved1;
580 u8 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +0200581#define ISCSI_TEXT_RESPONSE_HDR_RSRV_MASK 0x3F
582#define ISCSI_TEXT_RESPONSE_HDR_RSRV_SHIFT 0
583#define ISCSI_TEXT_RESPONSE_HDR_C_MASK 0x1
584#define ISCSI_TEXT_RESPONSE_HDR_C_SHIFT 6
585#define ISCSI_TEXT_RESPONSE_HDR_F_MASK 0x1
586#define ISCSI_TEXT_RESPONSE_HDR_F_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300587 u8 opcode;
588 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200589#define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
590#define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
591#define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
592#define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300593 struct regpair lun;
594 __le32 itt;
595 __le32 ttt;
596 __le32 stat_sn;
597 __le32 exp_cmd_sn;
598 __le32 max_cmd_sn;
599 __le32 reserved4[3];
600};
601
Tomer Tayara2e76992017-12-27 19:30:05 +0200602/* iSCSI TMF Request PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300603struct iscsi_tmf_request_hdr {
604 __le16 reserved0;
605 u8 function;
606 u8 opcode;
607 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200608#define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
609#define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_SHIFT 0
610#define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_MASK 0xFF
611#define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300612 struct regpair lun;
613 __le32 itt;
614 __le32 rtt;
615 __le32 cmd_sn;
616 __le32 exp_stat_sn;
617 __le32 ref_cmd_sn;
618 __le32 exp_data_sn;
619 __le32 reserved4[2];
620};
621
622struct iscsi_tmf_response_hdr {
623 u8 reserved2;
624 u8 hdr_response;
625 u8 hdr_flags;
626 u8 opcode;
627 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200628#define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
629#define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
630#define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
631#define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300632 struct regpair reserved0;
633 __le32 itt;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200634 __le32 reserved1;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300635 __le32 stat_sn;
636 __le32 exp_cmd_sn;
637 __le32 max_cmd_sn;
638 __le32 reserved4[3];
639};
640
Tomer Tayara2e76992017-12-27 19:30:05 +0200641/* iSCSI Response PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300642struct iscsi_response_hdr {
643 u8 hdr_status;
644 u8 hdr_response;
645 u8 hdr_flags;
646 u8 opcode;
647 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200648#define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
649#define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_SHIFT 0
650#define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_MASK 0xFF
651#define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300652 struct regpair lun;
653 __le32 itt;
654 __le32 snack_tag;
655 __le32 stat_sn;
656 __le32 exp_cmd_sn;
657 __le32 max_cmd_sn;
658 __le32 exp_data_sn;
659 __le32 bi_residual_count;
660 __le32 residual_count;
661};
662
Tomer Tayara2e76992017-12-27 19:30:05 +0200663/* iSCSI Reject PDU header */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300664struct iscsi_reject_hdr {
665 u8 reserved4;
666 u8 hdr_reason;
667 u8 hdr_flags;
668 u8 opcode;
669 __le32 hdr_second_dword;
Tomer Tayara2e76992017-12-27 19:30:05 +0200670#define ISCSI_REJECT_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
671#define ISCSI_REJECT_HDR_DATA_SEG_LEN_SHIFT 0
672#define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_MASK 0xFF
673#define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300674 struct regpair reserved0;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +0200675 __le32 all_ones;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300676 __le32 reserved2;
677 __le32 stat_sn;
678 __le32 exp_cmd_sn;
679 __le32 max_cmd_sn;
680 __le32 data_sn;
681 __le32 reserved3[2];
682};
683
Tomer Tayara2e76992017-12-27 19:30:05 +0200684/* iSCSI Asynchronous Message PDU header */
685struct iscsi_async_msg_hdr {
686 __le16 reserved0;
687 u8 flags_attr;
688#define ISCSI_ASYNC_MSG_HDR_RSRV_MASK 0x7F
689#define ISCSI_ASYNC_MSG_HDR_RSRV_SHIFT 0
690#define ISCSI_ASYNC_MSG_HDR_CONST1_MASK 0x1
691#define ISCSI_ASYNC_MSG_HDR_CONST1_SHIFT 7
692 u8 opcode;
693 __le32 hdr_second_dword;
694#define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_MASK 0xFFFFFF
695#define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_SHIFT 0
696#define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_MASK 0xFF
697#define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_SHIFT 24
698 struct regpair lun;
699 __le32 all_ones;
700 __le32 reserved1;
701 __le32 stat_sn;
702 __le32 exp_cmd_sn;
703 __le32 max_cmd_sn;
704 __le16 param1_rsrv;
705 u8 async_vcode;
706 u8 async_event;
707 __le16 param3_rsrv;
708 __le16 param2_rsrv;
709 __le32 reserved7;
710};
711
712/* PDU header part of Ystorm task context */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +0300713union iscsi_task_hdr {
714 struct iscsi_common_hdr common;
715 struct data_hdr data;
716 struct iscsi_cmd_hdr cmd;
717 struct iscsi_ext_cdb_cmd_hdr ext_cdb_cmd;
718 struct iscsi_login_req_hdr login_req;
719 struct iscsi_logout_req_hdr logout_req;
720 struct iscsi_data_out_hdr data_out;
721 struct iscsi_data_in_hdr data_in;
722 struct iscsi_r2t_hdr r2t;
723 struct iscsi_nop_out_hdr nop_out;
724 struct iscsi_nop_in_hdr nop_in;
725 struct iscsi_login_response_hdr login_response;
726 struct iscsi_logout_response_hdr logout_response;
727 struct iscsi_text_request_hdr text_request;
728 struct iscsi_text_response_hdr text_response;
729 struct iscsi_tmf_request_hdr tmf_request;
730 struct iscsi_tmf_response_hdr tmf_response;
731 struct iscsi_response_hdr response;
732 struct iscsi_reject_hdr reject;
733 struct iscsi_async_msg_hdr async_msg;
734};
735
Tomer Tayara2e76992017-12-27 19:30:05 +0200736/* The iscsi storm task context of Ystorm */
737struct ystorm_iscsi_task_st_ctx {
738 struct ystorm_iscsi_task_state state;
739 struct ystorm_iscsi_task_rxmit_opt rxmit_opt;
740 union iscsi_task_hdr pdu_hdr;
741};
742
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200743struct e4_ystorm_iscsi_task_ag_ctx {
Tomer Tayara2e76992017-12-27 19:30:05 +0200744 u8 reserved;
745 u8 byte1;
746 __le16 word0;
747 u8 flags0;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200748#define E4_YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF
749#define E4_YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
750#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1
751#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4
752#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
753#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
754#define E4_YSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1
755#define E4_YSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6
Michal Kalderon50bc60c2018-03-28 11:42:16 +0300756#define E4_YSTORM_ISCSI_TASK_AG_CTX_TTT_VALID_MASK 0x1 /* bit3 */
757#define E4_YSTORM_ISCSI_TASK_AG_CTX_TTT_VALID_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200758 u8 flags1;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200759#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3
760#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 0
761#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
762#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2
763#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_MASK 0x3
764#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_SHIFT 4
765#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1
766#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 6
767#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
768#define E4_YSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200769 u8 flags2;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200770#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1
771#define E4_YSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0
772#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
773#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1
774#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
775#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2
776#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
777#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3
778#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
779#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4
780#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
781#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5
782#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
783#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6
784#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
785#define E4_YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200786 u8 byte2;
787 __le32 TTT;
788 u8 byte3;
789 u8 byte4;
790 __le16 word1;
791};
792
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200793struct e4_mstorm_iscsi_task_ag_ctx {
Tomer Tayara2e76992017-12-27 19:30:05 +0200794 u8 cdu_validation;
795 u8 byte1;
796 __le16 task_cid;
797 u8 flags0;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200798#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
799#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
800#define E4_MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
801#define E4_MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
Michal Kalderond52c89f2018-06-05 13:11:16 +0300802#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1
803#define E4_MSTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200804#define E4_MSTORM_ISCSI_TASK_AG_CTX_VALID_MASK 0x1
805#define E4_MSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT 6
806#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_MASK 0x1
807#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200808 u8 flags1;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200809#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_MASK 0x3
810#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_SHIFT 0
811#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
812#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 2
813#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3
814#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 4
815#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_MASK 0x1
816#define E4_MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_SHIFT 6
817#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
818#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200819 u8 flags2;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200820#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1
821#define E4_MSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 0
822#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
823#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 1
824#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
825#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 2
826#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
827#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 3
828#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
829#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 4
830#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
831#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 5
832#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
833#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 6
834#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
835#define E4_MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200836 u8 byte2;
837 __le32 reg0;
838 u8 byte3;
839 u8 byte4;
840 __le16 word1;
841};
842
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200843struct e4_ustorm_iscsi_task_ag_ctx {
Tomer Tayara2e76992017-12-27 19:30:05 +0200844 u8 reserved;
845 u8 state;
846 __le16 icid;
847 u8 flags0;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200848#define E4_USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK 0xF
849#define E4_USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT 0
850#define E4_USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK 0x1
851#define E4_USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT 4
Michal Kalderond52c89f2018-06-05 13:11:16 +0300852#define E4_USTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_MASK 0x1
853#define E4_USTORM_ISCSI_TASK_AG_CTX_CONN_CLEAR_SQ_FLAG_SHIFT 5
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200854#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_MASK 0x3
855#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_SHIFT 6
Tomer Tayara2e76992017-12-27 19:30:05 +0200856 u8 flags1;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200857#define E4_USTORM_ISCSI_TASK_AG_CTX_RESERVED1_MASK 0x3
858#define E4_USTORM_ISCSI_TASK_AG_CTX_RESERVED1_SHIFT 0
859#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_MASK 0x3
860#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_SHIFT 2
861#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3
862#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 4
863#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_MASK 0x3
864#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_SHIFT 6
Tomer Tayara2e76992017-12-27 19:30:05 +0200865 u8 flags2;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200866#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_MASK 0x1
867#define E4_USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_SHIFT 0
868#define E4_USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_MASK 0x1
869#define E4_USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_SHIFT 1
870#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_MASK 0x1
871#define E4_USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_SHIFT 2
872#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1
873#define E4_USTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 3
874#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK 0x1
875#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT 4
876#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_MASK 0x1
877#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_SHIFT 5
878#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
879#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 6
880#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_MASK 0x1
881#define E4_USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +0200882 u8 flags3;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200883#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
884#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 0
885#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
886#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 1
887#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
888#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 2
889#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK 0x1
890#define E4_USTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT 3
891#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_MASK 0xF
892#define E4_USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT 4
Tomer Tayara2e76992017-12-27 19:30:05 +0200893 __le32 dif_err_intervals;
894 __le32 dif_error_1st_interval;
895 __le32 rcv_cont_len;
896 __le32 exp_cont_len;
897 __le32 total_data_acked;
898 __le32 exp_data_acked;
Denis Bolotina3f72302018-09-05 18:35:55 +0300899 u8 byte2;
Tomer Tayara2e76992017-12-27 19:30:05 +0200900 u8 byte3;
901 __le16 word1;
902 __le16 next_tid;
903 __le16 word3;
904 __le32 hdr_residual_count;
905 __le32 exp_r2t_sn;
906};
907
908/* The iscsi storm task context of Mstorm */
909struct mstorm_iscsi_task_st_ctx {
910 struct scsi_cached_sges data_desc;
911 struct scsi_sgl_params sgl_params;
912 __le32 rem_task_size;
913 __le32 data_buffer_offset;
914 u8 task_type;
915 struct iscsi_dif_flags dif_flags;
Tomer Tayarda090912017-12-27 19:30:07 +0200916 __le16 dif_task_icid;
Tomer Tayara2e76992017-12-27 19:30:05 +0200917 struct regpair sense_db;
918 __le32 expected_itt;
919 __le32 reserved1;
920};
921
922struct iscsi_reg1 {
923 __le32 reg1_map;
924#define ISCSI_REG1_NUM_SGES_MASK 0xF
925#define ISCSI_REG1_NUM_SGES_SHIFT 0
926#define ISCSI_REG1_RESERVED1_MASK 0xFFFFFFF
927#define ISCSI_REG1_RESERVED1_SHIFT 4
928};
929
Tomer Tayarda090912017-12-27 19:30:07 +0200930struct tqe_opaque {
931 __le16 opaque[2];
932};
933
Tomer Tayara2e76992017-12-27 19:30:05 +0200934/* The iscsi storm task context of Ustorm */
935struct ustorm_iscsi_task_st_ctx {
936 __le32 rem_rcv_len;
937 __le32 exp_data_transfer_len;
938 __le32 exp_data_sn;
939 struct regpair lun;
940 struct iscsi_reg1 reg1;
941 u8 flags2;
942#define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_MASK 0x1
943#define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_SHIFT 0
944#define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_MASK 0x7F
945#define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_SHIFT 1
946 struct iscsi_dif_flags dif_flags;
947 __le16 reserved3;
Tomer Tayarda090912017-12-27 19:30:07 +0200948 struct tqe_opaque tqe_opaque_list;
Tomer Tayara2e76992017-12-27 19:30:05 +0200949 __le32 reserved5;
950 __le32 reserved6;
951 __le32 reserved7;
952 u8 task_type;
953 u8 error_flags;
954#define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_MASK 0x1
955#define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_SHIFT 0
956#define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_MASK 0x1
957#define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_SHIFT 1
958#define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_MASK 0x1
959#define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_SHIFT 2
960#define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_MASK 0x1F
961#define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_SHIFT 3
962 u8 flags;
963#define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_MASK 0x3
964#define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_SHIFT 0
965#define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_MASK 0x1
966#define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_SHIFT 2
967#define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_MASK 0x1
968#define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_SHIFT 3
969#define USTORM_ISCSI_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_MASK 0x1
970#define USTORM_ISCSI_TASK_ST_CTX_TOTAL_DATA_ACKED_DONE_SHIFT 4
971#define USTORM_ISCSI_TASK_ST_CTX_HQ_SCANNED_DONE_MASK 0x1
972#define USTORM_ISCSI_TASK_ST_CTX_HQ_SCANNED_DONE_SHIFT 5
973#define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_MASK 0x1
974#define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_SHIFT 6
975#define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_MASK 0x1
976#define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_SHIFT 7
977 u8 cq_rss_number;
978};
979
980/* iscsi task context */
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200981struct e4_iscsi_task_context {
Tomer Tayara2e76992017-12-27 19:30:05 +0200982 struct ystorm_iscsi_task_st_ctx ystorm_st_context;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200983 struct e4_ystorm_iscsi_task_ag_ctx ystorm_ag_context;
Tomer Tayara2e76992017-12-27 19:30:05 +0200984 struct regpair ystorm_ag_padding[2];
985 struct tdif_task_context tdif_context;
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200986 struct e4_mstorm_iscsi_task_ag_ctx mstorm_ag_context;
Tomer Tayara2e76992017-12-27 19:30:05 +0200987 struct regpair mstorm_ag_padding[2];
Tomer Tayar21dd79e2017-12-27 19:30:06 +0200988 struct e4_ustorm_iscsi_task_ag_ctx ustorm_ag_context;
Tomer Tayara2e76992017-12-27 19:30:05 +0200989 struct mstorm_iscsi_task_st_ctx mstorm_st_context;
990 struct ustorm_iscsi_task_st_ctx ustorm_st_context;
991 struct rdif_task_context rdif_context;
992};
993
994/* iSCSI connection offload params passed by driver to FW in ISCSI offload
995 * ramrod.
996 */
997struct iscsi_conn_offload_params {
998 struct regpair sq_pbl_addr;
999 struct regpair r2tq_pbl_addr;
1000 struct regpair xhq_pbl_addr;
1001 struct regpair uhq_pbl_addr;
1002 __le32 initial_ack;
1003 __le16 physical_q0;
1004 __le16 physical_q1;
1005 u8 flags;
1006#define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK 0x1
1007#define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0
1008#define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK 0x1
1009#define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT 1
1010#define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_MASK 0x1
1011#define ISCSI_CONN_OFFLOAD_PARAMS_RESTRICTED_MODE_SHIFT 2
1012#define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_MASK 0x1F
1013#define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT 3
1014 u8 pbl_page_size_log;
1015 u8 pbe_page_size_log;
1016 u8 default_cq;
1017 __le32 stat_sn;
1018};
1019
Tomer Tayarda090912017-12-27 19:30:07 +02001020/* iSCSI connection statistics */
1021struct iscsi_conn_stats_params {
1022 struct regpair iscsi_tcp_tx_packets_cnt;
1023 struct regpair iscsi_tcp_tx_bytes_cnt;
1024 struct regpair iscsi_tcp_tx_rxmit_cnt;
1025 struct regpair iscsi_tcp_rx_packets_cnt;
1026 struct regpair iscsi_tcp_rx_bytes_cnt;
1027 struct regpair iscsi_tcp_rx_dup_ack_cnt;
1028 __le32 iscsi_tcp_rx_chksum_err_cnt;
1029 __le32 reserved;
1030};
1031
Tomer Tayara2e76992017-12-27 19:30:05 +02001032/* spe message header */
1033struct iscsi_slow_path_hdr {
1034 u8 op_code;
1035 u8 flags;
1036#define ISCSI_SLOW_PATH_HDR_RESERVED0_MASK 0xF
1037#define ISCSI_SLOW_PATH_HDR_RESERVED0_SHIFT 0
1038#define ISCSI_SLOW_PATH_HDR_LAYER_CODE_MASK 0x7
1039#define ISCSI_SLOW_PATH_HDR_LAYER_CODE_SHIFT 4
1040#define ISCSI_SLOW_PATH_HDR_RESERVED1_MASK 0x1
1041#define ISCSI_SLOW_PATH_HDR_RESERVED1_SHIFT 7
1042};
1043
1044/* iSCSI connection update params passed by driver to FW in ISCSI update
1045 *ramrod.
1046 */
1047struct iscsi_conn_update_ramrod_params {
1048 struct iscsi_slow_path_hdr hdr;
1049 __le16 conn_id;
1050 __le32 fw_cid;
1051 u8 flags;
1052#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK 0x1
1053#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT 0
1054#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK 0x1
1055#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT 1
1056#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_MASK 0x1
1057#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_SHIFT 2
1058#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_MASK 0x1
1059#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_SHIFT 3
1060#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_MASK 0x1
1061#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_BLOCK_SIZE_SHIFT 4
1062#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_MASK 0x1
1063#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_HOST_EN_SHIFT 5
Tomer Tayarda090912017-12-27 19:30:07 +02001064#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_MASK 0x1
1065#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DIF_ON_IMM_EN_SHIFT 6
1066#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_MASK 0x1
1067#define ISCSI_CONN_UPDATE_RAMROD_PARAMS_LUN_MAPPER_EN_SHIFT 7
Tomer Tayara2e76992017-12-27 19:30:05 +02001068 u8 reserved0[3];
1069 __le32 max_seq_size;
1070 __le32 max_send_pdu_length;
1071 __le32 max_recv_pdu_length;
1072 __le32 first_seq_length;
1073 __le32 exp_stat_sn;
Tomer Tayarda090912017-12-27 19:30:07 +02001074 union dif_configuration_params dif_on_imme_params;
Tomer Tayara2e76992017-12-27 19:30:05 +02001075};
1076
1077/* iSCSI CQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001078struct iscsi_cqe_common {
1079 __le16 conn_id;
1080 u8 cqe_type;
1081 union cqe_error_status error_bitmap;
1082 __le32 reserved[3];
1083 union iscsi_task_hdr iscsi_hdr;
1084};
1085
Tomer Tayara2e76992017-12-27 19:30:05 +02001086/* iSCSI CQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001087struct iscsi_cqe_solicited {
1088 __le16 conn_id;
1089 u8 cqe_type;
1090 union cqe_error_status error_bitmap;
1091 __le16 itid;
1092 u8 task_type;
1093 u8 fw_dbg_field;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +02001094 u8 caused_conn_err;
1095 u8 reserved0[3];
Tomer Tayarda090912017-12-27 19:30:07 +02001096 __le32 data_truncated_bytes;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001097 union iscsi_task_hdr iscsi_hdr;
1098};
1099
Tomer Tayara2e76992017-12-27 19:30:05 +02001100/* iSCSI CQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001101struct iscsi_cqe_unsolicited {
1102 __le16 conn_id;
1103 u8 cqe_type;
1104 union cqe_error_status error_bitmap;
1105 __le16 reserved0;
1106 u8 reserved1;
1107 u8 unsol_cqe_type;
Tomer Tayarda090912017-12-27 19:30:07 +02001108 __le16 rqe_opaque;
1109 __le16 reserved2[3];
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001110 union iscsi_task_hdr iscsi_hdr;
1111};
1112
Tomer Tayara2e76992017-12-27 19:30:05 +02001113/* iSCSI CQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001114union iscsi_cqe {
1115 struct iscsi_cqe_common cqe_common;
1116 struct iscsi_cqe_solicited cqe_solicited;
1117 struct iscsi_cqe_unsolicited cqe_unsolicited;
1118};
1119
Tomer Tayara2e76992017-12-27 19:30:05 +02001120/* iSCSI CQE type */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001121enum iscsi_cqes_type {
1122 ISCSI_CQE_TYPE_SOLICITED = 1,
1123 ISCSI_CQE_TYPE_UNSOLICITED,
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001124 ISCSI_CQE_TYPE_SOLICITED_WITH_SENSE,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001125 ISCSI_CQE_TYPE_TASK_CLEANUP,
1126 ISCSI_CQE_TYPE_DUMMY,
1127 MAX_ISCSI_CQES_TYPE
1128};
1129
Tomer Tayara2e76992017-12-27 19:30:05 +02001130/* iSCSI CQE type */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001131enum iscsi_cqe_unsolicited_type {
1132 ISCSI_CQE_UNSOLICITED_NONE,
1133 ISCSI_CQE_UNSOLICITED_SINGLE,
1134 ISCSI_CQE_UNSOLICITED_FIRST,
1135 ISCSI_CQE_UNSOLICITED_MIDDLE,
1136 ISCSI_CQE_UNSOLICITED_LAST,
1137 MAX_ISCSI_CQE_UNSOLICITED_TYPE
1138};
1139
Tomer Tayara2e76992017-12-27 19:30:05 +02001140/* iscsi debug modes */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001141struct iscsi_debug_modes {
1142 u8 flags;
Tomer Tayarda090912017-12-27 19:30:07 +02001143#define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_MASK 0x1
1144#define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_SHIFT 0
1145#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_MASK 0x1
1146#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_SHIFT 1
1147#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_MASK 0x1
1148#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_SHIFT 2
1149#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_MASK 0x1
1150#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_SHIFT 3
1151#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_MASK 0x1
1152#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_SHIFT 4
1153#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_MASK 0x1
1154#define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_SHIFT 5
1155#define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_MASK 0x1
1156#define ISCSI_DEBUG_MODES_ASSERT_IF_DIF_OR_DATA_DIGEST_ERROR_SHIFT 6
1157#define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_MASK 0x1
1158#define ISCSI_DEBUG_MODES_ASSERT_IF_HQ_CORRUPT_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001159};
1160
Tomer Tayara2e76992017-12-27 19:30:05 +02001161/* iSCSI kernel completion queue IDs */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001162enum iscsi_eqe_opcode {
1163 ISCSI_EVENT_TYPE_INIT_FUNC = 0,
1164 ISCSI_EVENT_TYPE_DESTROY_FUNC,
1165 ISCSI_EVENT_TYPE_OFFLOAD_CONN,
1166 ISCSI_EVENT_TYPE_UPDATE_CONN,
1167 ISCSI_EVENT_TYPE_CLEAR_SQ,
1168 ISCSI_EVENT_TYPE_TERMINATE_CONN,
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001169 ISCSI_EVENT_TYPE_MAC_UPDATE_CONN,
Tomer Tayarda090912017-12-27 19:30:07 +02001170 ISCSI_EVENT_TYPE_COLLECT_STATS_CONN,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001171 ISCSI_EVENT_TYPE_ASYN_CONNECT_COMPLETE,
1172 ISCSI_EVENT_TYPE_ASYN_TERMINATE_DONE,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001173 ISCSI_EVENT_TYPE_START_OF_ERROR_TYPES = 10,
1174 ISCSI_EVENT_TYPE_ASYN_ABORT_RCVD,
1175 ISCSI_EVENT_TYPE_ASYN_CLOSE_RCVD,
1176 ISCSI_EVENT_TYPE_ASYN_SYN_RCVD,
1177 ISCSI_EVENT_TYPE_ASYN_MAX_RT_TIME,
1178 ISCSI_EVENT_TYPE_ASYN_MAX_RT_CNT,
1179 ISCSI_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT,
1180 ISCSI_EVENT_TYPE_ASYN_FIN_WAIT2,
1181 ISCSI_EVENT_TYPE_ISCSI_CONN_ERROR,
1182 ISCSI_EVENT_TYPE_TCP_CONN_ERROR,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001183 MAX_ISCSI_EQE_OPCODE
1184};
1185
Tomer Tayara2e76992017-12-27 19:30:05 +02001186/* iSCSI EQE and CQE completion status */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001187enum iscsi_error_types {
1188 ISCSI_STATUS_NONE = 0,
1189 ISCSI_CQE_ERROR_UNSOLICITED_RCV_ON_INVALID_CONN = 1,
1190 ISCSI_CONN_ERROR_TASK_CID_MISMATCH,
1191 ISCSI_CONN_ERROR_TASK_NOT_VALID,
1192 ISCSI_CONN_ERROR_RQ_RING_IS_FULL,
1193 ISCSI_CONN_ERROR_CMDQ_RING_IS_FULL,
1194 ISCSI_CONN_ERROR_HQE_CACHING_FAILED,
1195 ISCSI_CONN_ERROR_HEADER_DIGEST_ERROR,
1196 ISCSI_CONN_ERROR_LOCAL_COMPLETION_ERROR,
1197 ISCSI_CONN_ERROR_DATA_OVERRUN,
1198 ISCSI_CONN_ERROR_OUT_OF_SGES_ERROR,
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001199 ISCSI_CONN_ERROR_IP_OPTIONS_ERROR,
1200 ISCSI_CONN_ERROR_PRS_ERRORS,
1201 ISCSI_CONN_ERROR_CONNECT_INVALID_TCP_OPTION,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001202 ISCSI_CONN_ERROR_TCP_IP_FRAGMENT_ERROR,
1203 ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_LEN,
1204 ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_TYPE,
1205 ISCSI_CONN_ERROR_PROTOCOL_ERR_ITT_OUT_OF_RANGE,
1206 ISCSI_CONN_ERROR_PROTOCOL_ERR_TTT_OUT_OF_RANGE,
1207 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_EXCEEDS_PDU_SIZE,
1208 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE,
1209 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE_BEFORE_UPDATE,
1210 ISCSI_CONN_ERROR_UNVALID_NOPIN_DSL,
1211 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_CARRIES_NO_DATA,
1212 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SN,
1213 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_IN_TTT,
1214 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_OUT_ITT,
1215 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_TTT,
1216 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_BUFFER_OFFSET,
1217 ISCSI_CONN_ERROR_PROTOCOL_ERR_BUFFER_OFFSET_OOO,
1218 ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_SN,
1219 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_0,
1220 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_1,
1221 ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_2,
1222 ISCSI_CONN_ERROR_PROTOCOL_ERR_LUN,
1223 ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO,
1224 ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO_S_BIT_ONE,
1225 ISCSI_CONN_ERROR_PROTOCOL_ERR_EXP_STAT_SN,
1226 ISCSI_CONN_ERROR_PROTOCOL_ERR_DSL_NOT_ZERO,
1227 ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_DSL,
1228 ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_TOO_BIG,
1229 ISCSI_CONN_ERROR_PROTOCOL_ERR_OUTSTANDING_R2T_COUNT,
1230 ISCSI_CONN_ERROR_PROTOCOL_ERR_DIF_TX,
1231 ISCSI_CONN_ERROR_SENSE_DATA_LENGTH,
1232 ISCSI_CONN_ERROR_DATA_PLACEMENT_ERROR,
Mintz, Yuvalbe086e72017-03-11 18:39:18 +02001233 ISCSI_CONN_ERROR_INVALID_ITT,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001234 ISCSI_ERROR_UNKNOWN,
1235 MAX_ISCSI_ERROR_TYPES
1236};
1237
Tomer Tayara2e76992017-12-27 19:30:05 +02001238/* iSCSI Ramrod Command IDs */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001239enum iscsi_ramrod_cmd_id {
1240 ISCSI_RAMROD_CMD_ID_UNUSED = 0,
1241 ISCSI_RAMROD_CMD_ID_INIT_FUNC = 1,
1242 ISCSI_RAMROD_CMD_ID_DESTROY_FUNC = 2,
1243 ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN = 3,
1244 ISCSI_RAMROD_CMD_ID_UPDATE_CONN = 4,
1245 ISCSI_RAMROD_CMD_ID_TERMINATION_CONN = 5,
1246 ISCSI_RAMROD_CMD_ID_CLEAR_SQ = 6,
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001247 ISCSI_RAMROD_CMD_ID_MAC_UPDATE = 7,
Tomer Tayarda090912017-12-27 19:30:07 +02001248 ISCSI_RAMROD_CMD_ID_CONN_STATS = 8,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001249 MAX_ISCSI_RAMROD_CMD_ID
1250};
1251
Tomer Tayara2e76992017-12-27 19:30:05 +02001252/* iSCSI connection termination request */
Yuval Mintz05fafbf2016-08-19 09:33:31 +03001253struct iscsi_spe_conn_mac_update {
1254 struct iscsi_slow_path_hdr hdr;
1255 __le16 conn_id;
1256 __le32 fw_cid;
1257 __le16 remote_mac_addr_lo;
1258 __le16 remote_mac_addr_mid;
1259 __le16 remote_mac_addr_hi;
1260 u8 reserved0[2];
1261};
1262
Tomer Tayara2e76992017-12-27 19:30:05 +02001263/* iSCSI and TCP connection (Option 1) offload params passed by driver to FW in
1264 * iSCSI offload ramrod.
1265 */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001266struct iscsi_spe_conn_offload {
1267 struct iscsi_slow_path_hdr hdr;
1268 __le16 conn_id;
1269 __le32 fw_cid;
1270 struct iscsi_conn_offload_params iscsi;
1271 struct tcp_offload_params tcp;
1272};
1273
Tomer Tayara2e76992017-12-27 19:30:05 +02001274/* iSCSI and TCP connection(Option 2) offload params passed by driver to FW in
1275 * iSCSI offload ramrod.
1276 */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001277struct iscsi_spe_conn_offload_option2 {
1278 struct iscsi_slow_path_hdr hdr;
1279 __le16 conn_id;
1280 __le32 fw_cid;
1281 struct iscsi_conn_offload_params iscsi;
1282 struct tcp_offload_params_opt2 tcp;
1283};
1284
Tomer Tayarda090912017-12-27 19:30:07 +02001285/* iSCSI collect connection statistics request */
1286struct iscsi_spe_conn_statistics {
1287 struct iscsi_slow_path_hdr hdr;
1288 __le16 conn_id;
1289 __le32 fw_cid;
1290 u8 reset_stats;
1291 u8 reserved0[7];
1292 struct regpair stats_cnts_addr;
1293};
1294
Tomer Tayara2e76992017-12-27 19:30:05 +02001295/* iSCSI connection termination request */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001296struct iscsi_spe_conn_termination {
1297 struct iscsi_slow_path_hdr hdr;
1298 __le16 conn_id;
1299 __le32 fw_cid;
1300 u8 abortive;
1301 u8 reserved0[7];
1302 struct regpair queue_cnts_addr;
1303 struct regpair query_params_addr;
1304};
1305
Tomer Tayara2e76992017-12-27 19:30:05 +02001306/* iSCSI firmware function destroy parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001307struct iscsi_spe_func_dstry {
1308 struct iscsi_slow_path_hdr hdr;
1309 __le16 reserved0;
1310 __le32 reserved1;
1311};
1312
Tomer Tayara2e76992017-12-27 19:30:05 +02001313/* iSCSI firmware function init parameters */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001314struct iscsi_spe_func_init {
1315 struct iscsi_slow_path_hdr hdr;
1316 __le16 half_way_close_timeout;
1317 u8 num_sq_pages_in_ring;
1318 u8 num_r2tq_pages_in_ring;
1319 u8 num_uhq_pages_in_ring;
1320 u8 ll2_rx_queue_id;
Tomer Tayarda090912017-12-27 19:30:07 +02001321 u8 flags;
1322#define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_MASK 0x1
1323#define ISCSI_SPE_FUNC_INIT_COUNTERS_EN_SHIFT 0
1324#define ISCSI_SPE_FUNC_INIT_RESERVED0_MASK 0x7F
1325#define ISCSI_SPE_FUNC_INIT_RESERVED0_SHIFT 1
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001326 struct iscsi_debug_modes debug_mode;
1327 __le16 reserved1;
1328 __le32 reserved2;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001329 struct scsi_init_func_params func_params;
1330 struct scsi_init_func_queues q_params;
1331};
1332
Tomer Tayara2e76992017-12-27 19:30:05 +02001333/* iSCSI task type */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001334enum iscsi_task_type {
1335 ISCSI_TASK_TYPE_INITIATOR_WRITE,
1336 ISCSI_TASK_TYPE_INITIATOR_READ,
1337 ISCSI_TASK_TYPE_MIDPATH,
1338 ISCSI_TASK_TYPE_UNSOLIC,
1339 ISCSI_TASK_TYPE_EXCHCLEANUP,
1340 ISCSI_TASK_TYPE_IRRELEVANT,
1341 ISCSI_TASK_TYPE_TARGET_WRITE,
1342 ISCSI_TASK_TYPE_TARGET_READ,
1343 ISCSI_TASK_TYPE_TARGET_RESPONSE,
1344 ISCSI_TASK_TYPE_LOGIN_RESPONSE,
Tomer Tayarda090912017-12-27 19:30:07 +02001345 ISCSI_TASK_TYPE_TARGET_IMM_W_DIF,
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001346 MAX_ISCSI_TASK_TYPE
1347};
1348
Tomer Tayara2e76992017-12-27 19:30:05 +02001349/* iSCSI DesiredDataTransferLength/ttt union */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001350union iscsi_ttt_txlen_union {
1351 __le32 desired_tx_len;
1352 __le32 ttt;
1353};
1354
Tomer Tayara2e76992017-12-27 19:30:05 +02001355/* iSCSI uHQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001356struct iscsi_uhqe {
1357 __le32 reg1;
Tomer Tayara2e76992017-12-27 19:30:05 +02001358#define ISCSI_UHQE_PDU_PAYLOAD_LEN_MASK 0xFFFFF
1359#define ISCSI_UHQE_PDU_PAYLOAD_LEN_SHIFT 0
1360#define ISCSI_UHQE_LOCAL_COMP_MASK 0x1
1361#define ISCSI_UHQE_LOCAL_COMP_SHIFT 20
1362#define ISCSI_UHQE_TOGGLE_BIT_MASK 0x1
1363#define ISCSI_UHQE_TOGGLE_BIT_SHIFT 21
1364#define ISCSI_UHQE_PURE_PAYLOAD_MASK 0x1
1365#define ISCSI_UHQE_PURE_PAYLOAD_SHIFT 22
1366#define ISCSI_UHQE_LOGIN_RESPONSE_PDU_MASK 0x1
1367#define ISCSI_UHQE_LOGIN_RESPONSE_PDU_SHIFT 23
1368#define ISCSI_UHQE_TASK_ID_HI_MASK 0xFF
1369#define ISCSI_UHQE_TASK_ID_HI_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001370 __le32 reg2;
Tomer Tayara2e76992017-12-27 19:30:05 +02001371#define ISCSI_UHQE_BUFFER_OFFSET_MASK 0xFFFFFF
1372#define ISCSI_UHQE_BUFFER_OFFSET_SHIFT 0
1373#define ISCSI_UHQE_TASK_ID_LO_MASK 0xFF
1374#define ISCSI_UHQE_TASK_ID_LO_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001375};
1376
Tomer Tayara2e76992017-12-27 19:30:05 +02001377/* iSCSI WQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001378struct iscsi_wqe {
1379 __le16 task_id;
1380 u8 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +02001381#define ISCSI_WQE_WQE_TYPE_MASK 0x7
1382#define ISCSI_WQE_WQE_TYPE_SHIFT 0
1383#define ISCSI_WQE_NUM_SGES_MASK 0xF
1384#define ISCSI_WQE_NUM_SGES_SHIFT 3
1385#define ISCSI_WQE_RESPONSE_MASK 0x1
1386#define ISCSI_WQE_RESPONSE_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001387 struct iscsi_dif_flags prot_flags;
Mintz, Yuvalbe086e72017-03-11 18:39:18 +02001388 __le32 contlen_cdbsize;
Tomer Tayara2e76992017-12-27 19:30:05 +02001389#define ISCSI_WQE_CONT_LEN_MASK 0xFFFFFF
1390#define ISCSI_WQE_CONT_LEN_SHIFT 0
1391#define ISCSI_WQE_CDB_SIZE_MASK 0xFF
1392#define ISCSI_WQE_CDB_SIZE_SHIFT 24
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001393};
1394
Tomer Tayara2e76992017-12-27 19:30:05 +02001395/* iSCSI wqe type */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001396enum iscsi_wqe_type {
1397 ISCSI_WQE_TYPE_NORMAL,
1398 ISCSI_WQE_TYPE_TASK_CLEANUP,
1399 ISCSI_WQE_TYPE_MIDDLE_PATH,
1400 ISCSI_WQE_TYPE_LOGIN,
1401 ISCSI_WQE_TYPE_FIRST_R2T_CONT,
1402 ISCSI_WQE_TYPE_NONFIRST_R2T_CONT,
1403 ISCSI_WQE_TYPE_RESPONSE,
1404 MAX_ISCSI_WQE_TYPE
1405};
1406
Tomer Tayara2e76992017-12-27 19:30:05 +02001407/* iSCSI xHQ element */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001408struct iscsi_xhqe {
1409 union iscsi_ttt_txlen_union ttt_or_txlen;
1410 __le32 exp_stat_sn;
1411 struct iscsi_dif_flags prot_flags;
1412 u8 total_ahs_length;
1413 u8 opcode;
1414 u8 flags;
Tomer Tayara2e76992017-12-27 19:30:05 +02001415#define ISCSI_XHQE_FINAL_MASK 0x1
1416#define ISCSI_XHQE_FINAL_SHIFT 0
1417#define ISCSI_XHQE_STATUS_BIT_MASK 0x1
1418#define ISCSI_XHQE_STATUS_BIT_SHIFT 1
1419#define ISCSI_XHQE_NUM_SGES_MASK 0xF
1420#define ISCSI_XHQE_NUM_SGES_SHIFT 2
1421#define ISCSI_XHQE_RESERVED0_MASK 0x3
1422#define ISCSI_XHQE_RESERVED0_SHIFT 6
Mintz, Yuvalbe086e72017-03-11 18:39:18 +02001423 union iscsi_seq_num seq_num;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001424 __le16 reserved1;
1425};
1426
Tomer Tayara2e76992017-12-27 19:30:05 +02001427/* Per PF iSCSI receive path statistics - mStorm RAM structure */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001428struct mstorm_iscsi_stats_drv {
1429 struct regpair iscsi_rx_dropped_pdus_task_not_valid;
Tomer Tayarda090912017-12-27 19:30:07 +02001430 struct regpair iscsi_rx_dup_ack_cnt;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001431};
1432
Tomer Tayara2e76992017-12-27 19:30:05 +02001433/* Per PF iSCSI transmit path statistics - pStorm RAM structure */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001434struct pstorm_iscsi_stats_drv {
1435 struct regpair iscsi_tx_bytes_cnt;
1436 struct regpair iscsi_tx_packet_cnt;
1437};
1438
Tomer Tayara2e76992017-12-27 19:30:05 +02001439/* Per PF iSCSI receive path statistics - tStorm RAM structure */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001440struct tstorm_iscsi_stats_drv {
1441 struct regpair iscsi_rx_bytes_cnt;
1442 struct regpair iscsi_rx_packet_cnt;
1443 struct regpair iscsi_rx_new_ooo_isle_events_cnt;
Tomer Tayarda090912017-12-27 19:30:07 +02001444 struct regpair iscsi_rx_tcp_payload_bytes_cnt;
1445 struct regpair iscsi_rx_tcp_pkt_cnt;
1446 struct regpair iscsi_rx_pure_ack_cnt;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001447 __le32 iscsi_cmdq_threshold_cnt;
1448 __le32 iscsi_rq_threshold_cnt;
1449 __le32 iscsi_immq_threshold_cnt;
1450};
1451
Tomer Tayara2e76992017-12-27 19:30:05 +02001452/* Per PF iSCSI receive path statistics - uStorm RAM structure */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001453struct ustorm_iscsi_stats_drv {
1454 struct regpair iscsi_rx_data_pdu_cnt;
1455 struct regpair iscsi_rx_r2t_pdu_cnt;
1456 struct regpair iscsi_rx_total_pdu_cnt;
1457};
1458
Tomer Tayara2e76992017-12-27 19:30:05 +02001459/* Per PF iSCSI transmit path statistics - xStorm RAM structure */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001460struct xstorm_iscsi_stats_drv {
1461 struct regpair iscsi_tx_go_to_slow_start_event_cnt;
1462 struct regpair iscsi_tx_fast_retransmit_event_cnt;
Tomer Tayarda090912017-12-27 19:30:07 +02001463 struct regpair iscsi_tx_pure_ack_cnt;
1464 struct regpair iscsi_tx_delayed_ack_cnt;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001465};
1466
Tomer Tayara2e76992017-12-27 19:30:05 +02001467/* Per PF iSCSI transmit path statistics - yStorm RAM structure */
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001468struct ystorm_iscsi_stats_drv {
1469 struct regpair iscsi_tx_data_pdu_cnt;
1470 struct regpair iscsi_tx_r2t_pdu_cnt;
1471 struct regpair iscsi_tx_total_pdu_cnt;
Tomer Tayarda090912017-12-27 19:30:07 +02001472 struct regpair iscsi_tx_tcp_payload_bytes_cnt;
1473 struct regpair iscsi_tx_tcp_pkt_cnt;
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001474};
1475
Tomer Tayar21dd79e2017-12-27 19:30:06 +02001476struct e4_tstorm_iscsi_task_ag_ctx {
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001477 u8 byte0;
1478 u8 byte1;
1479 __le16 word0;
1480 u8 flags0;
Tomer Tayar21dd79e2017-12-27 19:30:06 +02001481#define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK 0xF
1482#define E4_TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
1483#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK 0x1
1484#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT 4
1485#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK 0x1
1486#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT 5
1487#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_MASK 0x1
1488#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT2_SHIFT 6
1489#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK 0x1
1490#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001491 u8 flags1;
Tomer Tayar21dd79e2017-12-27 19:30:06 +02001492#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK 0x1
1493#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT 0
1494#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_MASK 0x1
1495#define E4_TSTORM_ISCSI_TASK_AG_CTX_BIT5_SHIFT 1
1496#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_MASK 0x3
1497#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT 2
1498#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_MASK 0x3
1499#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT 4
1500#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_MASK 0x3
1501#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT 6
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001502 u8 flags2;
Tomer Tayar21dd79e2017-12-27 19:30:06 +02001503#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_MASK 0x3
1504#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT 0
1505#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_MASK 0x3
1506#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4_SHIFT 2
1507#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_MASK 0x3
1508#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5_SHIFT 4
1509#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_MASK 0x3
1510#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6_SHIFT 6
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001511 u8 flags3;
Tomer Tayar21dd79e2017-12-27 19:30:06 +02001512#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_MASK 0x3
1513#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7_SHIFT 0
1514#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK 0x1
1515#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT 2
1516#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK 0x1
1517#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT 3
1518#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK 0x1
1519#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT 4
1520#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK 0x1
1521#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT 5
1522#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_MASK 0x1
1523#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF4EN_SHIFT 6
1524#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_MASK 0x1
1525#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF5EN_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001526 u8 flags4;
Tomer Tayar21dd79e2017-12-27 19:30:06 +02001527#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_MASK 0x1
1528#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF6EN_SHIFT 0
1529#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_MASK 0x1
1530#define E4_TSTORM_ISCSI_TASK_AG_CTX_CF7EN_SHIFT 1
1531#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK 0x1
1532#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 2
1533#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK 0x1
1534#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 3
1535#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK 0x1
1536#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 4
1537#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK 0x1
1538#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 5
1539#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK 0x1
1540#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 6
1541#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK 0x1
1542#define E4_TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 7
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001543 u8 byte2;
1544 __le16 word1;
1545 __le32 reg0;
1546 u8 byte3;
1547 u8 byte4;
1548 __le16 word2;
1549 __le16 word3;
1550 __le16 word4;
1551 __le32 reg1;
1552 __le32 reg2;
1553};
Tomer Tayara2e76992017-12-27 19:30:05 +02001554
1555/* iSCSI doorbell data */
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001556struct iscsi_db_data {
1557 u8 params;
Tomer Tayara2e76992017-12-27 19:30:05 +02001558#define ISCSI_DB_DATA_DEST_MASK 0x3
1559#define ISCSI_DB_DATA_DEST_SHIFT 0
1560#define ISCSI_DB_DATA_AGG_CMD_MASK 0x3
1561#define ISCSI_DB_DATA_AGG_CMD_SHIFT 2
1562#define ISCSI_DB_DATA_BYPASS_EN_MASK 0x1
1563#define ISCSI_DB_DATA_BYPASS_EN_SHIFT 4
1564#define ISCSI_DB_DATA_RESERVED_MASK 0x1
1565#define ISCSI_DB_DATA_RESERVED_SHIFT 5
1566#define ISCSI_DB_DATA_AGG_VAL_SEL_MASK 0x3
1567#define ISCSI_DB_DATA_AGG_VAL_SEL_SHIFT 6
Mintz, Yuval7b6859f2017-05-18 19:41:04 +03001568 u8 agg_flags;
1569 __le16 sq_prod;
1570};
Yuval Mintz7a9b6b82016-06-03 14:35:33 +03001571
1572#endif /* __ISCSI_COMMON__ */