xref: /linux-6.15/include/linux/qed/iscsi_common.h (revision 564f7dfd)
1 /* QLogic qed NIC Driver
2  * Copyright (c) 2015-2017  QLogic Corporation
3  *
4  * 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.
31  */
32 
33 #ifndef __ISCSI_COMMON__
34 #define __ISCSI_COMMON__
35 /**********************/
36 /* ISCSI FW CONSTANTS */
37 /**********************/
38 
39 /* iSCSI HSI constants */
40 #define ISCSI_DEFAULT_MTU       (1500)
41 
42 /* Current iSCSI HSI version number composed of two fields (16 bit) */
43 #define ISCSI_HSI_MAJOR_VERSION (0)
44 #define ISCSI_HSI_MINOR_VERSION (0)
45 
46 /* KWQ (kernel work queue) layer codes */
47 #define ISCSI_SLOW_PATH_LAYER_CODE   (6)
48 
49 /* CQE completion status */
50 #define ISCSI_EQE_COMPLETION_SUCCESS (0x0)
51 #define ISCSI_EQE_RST_CONN_RCVD (0x1)
52 
53 /* iSCSI parameter defaults */
54 #define ISCSI_DEFAULT_HEADER_DIGEST         (0)
55 #define ISCSI_DEFAULT_DATA_DIGEST           (0)
56 #define ISCSI_DEFAULT_INITIAL_R2T           (1)
57 #define ISCSI_DEFAULT_IMMEDIATE_DATA        (1)
58 #define ISCSI_DEFAULT_MAX_PDU_LENGTH        (0x2000)
59 #define ISCSI_DEFAULT_FIRST_BURST_LENGTH    (0x10000)
60 #define ISCSI_DEFAULT_MAX_BURST_LENGTH      (0x40000)
61 #define ISCSI_DEFAULT_MAX_OUTSTANDING_R2T   (1)
62 
63 /* iSCSI parameter limits */
64 #define ISCSI_MIN_VAL_MAX_PDU_LENGTH        (0x200)
65 #define ISCSI_MAX_VAL_MAX_PDU_LENGTH        (0xffffff)
66 #define ISCSI_MIN_VAL_BURST_LENGTH          (0x200)
67 #define ISCSI_MAX_VAL_BURST_LENGTH          (0xffffff)
68 #define ISCSI_MIN_VAL_MAX_OUTSTANDING_R2T   (1)
69 #define ISCSI_MAX_VAL_MAX_OUTSTANDING_R2T   (0xff)
70 
71 /* iSCSI reserved params */
72 #define ISCSI_ITT_ALL_ONES	(0xffffffff)
73 #define ISCSI_TTT_ALL_ONES	(0xffffffff)
74 
75 #define ISCSI_OPTION_1_OFF_CHIP_TCP 1
76 #define ISCSI_OPTION_2_ON_CHIP_TCP 2
77 
78 #define ISCSI_INITIATOR_MODE 0
79 #define ISCSI_TARGET_MODE 1
80 
81 /* iSCSI request op codes */
82 #define ISCSI_OPCODE_NOP_OUT_NO_IMM                     (0)
83 #define ISCSI_OPCODE_NOP_OUT                            ( \
84 		ISCSI_OPCODE_NOP_OUT_NO_IMM | 0x40)
85 #define ISCSI_OPCODE_SCSI_CMD_NO_IMM            (1)
86 #define ISCSI_OPCODE_SCSI_CMD                           ( \
87 		ISCSI_OPCODE_SCSI_CMD_NO_IMM | 0x40)
88 #define ISCSI_OPCODE_TMF_REQUEST_NO_IMM         (2)
89 #define ISCSI_OPCODE_TMF_REQUEST                        ( \
90 		ISCSI_OPCODE_TMF_REQUEST_NO_IMM | 0x40)
91 #define ISCSI_OPCODE_LOGIN_REQUEST_NO_IMM       (3)
92 #define ISCSI_OPCODE_LOGIN_REQUEST                      ( \
93 		ISCSI_OPCODE_LOGIN_REQUEST_NO_IMM | 0x40)
94 #define ISCSI_OPCODE_TEXT_REQUEST_NO_IMM        (4)
95 #define ISCSI_OPCODE_TEXT_REQUEST                       ( \
96 		ISCSI_OPCODE_TEXT_REQUEST_NO_IMM | 0x40)
97 #define ISCSI_OPCODE_DATA_OUT                           (5)
98 #define ISCSI_OPCODE_LOGOUT_REQUEST_NO_IMM      (6)
99 #define ISCSI_OPCODE_LOGOUT_REQUEST                     ( \
100 		ISCSI_OPCODE_LOGOUT_REQUEST_NO_IMM | 0x40)
101 
102 /* iSCSI response/messages op codes */
103 #define ISCSI_OPCODE_NOP_IN             (0x20)
104 #define ISCSI_OPCODE_SCSI_RESPONSE      (0x21)
105 #define ISCSI_OPCODE_TMF_RESPONSE       (0x22)
106 #define ISCSI_OPCODE_LOGIN_RESPONSE     (0x23)
107 #define ISCSI_OPCODE_TEXT_RESPONSE      (0x24)
108 #define ISCSI_OPCODE_DATA_IN            (0x25)
109 #define ISCSI_OPCODE_LOGOUT_RESPONSE    (0x26)
110 #define ISCSI_OPCODE_R2T                (0x31)
111 #define ISCSI_OPCODE_ASYNC_MSG          (0x32)
112 #define ISCSI_OPCODE_REJECT             (0x3f)
113 
114 /* iSCSI stages */
115 #define ISCSI_STAGE_SECURITY_NEGOTIATION            (0)
116 #define ISCSI_STAGE_LOGIN_OPERATIONAL_NEGOTIATION   (1)
117 #define ISCSI_STAGE_FULL_FEATURE_PHASE              (3)
118 
119 /* iSCSI CQE errors */
120 #define CQE_ERROR_BITMAP_DATA_DIGEST          (0x08)
121 #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN  (0x10)
122 #define CQE_ERROR_BITMAP_DATA_TRUNCATED       (0x20)
123 
124 struct cqe_error_bitmap {
125 	u8 cqe_error_status_bits;
126 #define CQE_ERROR_BITMAP_DIF_ERR_BITS_MASK         0x7
127 #define CQE_ERROR_BITMAP_DIF_ERR_BITS_SHIFT        0
128 #define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_MASK      0x1
129 #define CQE_ERROR_BITMAP_DATA_DIGEST_ERR_SHIFT     3
130 #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_MASK  0x1
131 #define CQE_ERROR_BITMAP_RCV_ON_INVALID_CONN_SHIFT 4
132 #define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_MASK   0x1
133 #define CQE_ERROR_BITMAP_DATA_TRUNCATED_ERR_SHIFT  5
134 #define CQE_ERROR_BITMAP_UNDER_RUN_ERR_MASK        0x1
135 #define CQE_ERROR_BITMAP_UNDER_RUN_ERR_SHIFT       6
136 #define CQE_ERROR_BITMAP_RESERVED2_MASK            0x1
137 #define CQE_ERROR_BITMAP_RESERVED2_SHIFT           7
138 };
139 
140 union cqe_error_status {
141 	u8 error_status;
142 	struct cqe_error_bitmap error_bits;
143 };
144 
145 struct data_hdr {
146 	__le32 data[12];
147 };
148 
149 struct iscsi_async_msg_hdr {
150 	__le16 reserved0;
151 	u8 flags_attr;
152 #define ISCSI_ASYNC_MSG_HDR_RSRV_MASK           0x7F
153 #define ISCSI_ASYNC_MSG_HDR_RSRV_SHIFT          0
154 #define ISCSI_ASYNC_MSG_HDR_CONST1_MASK         0x1
155 #define ISCSI_ASYNC_MSG_HDR_CONST1_SHIFT        7
156 	u8 opcode;
157 	__le32 hdr_second_dword;
158 #define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
159 #define ISCSI_ASYNC_MSG_HDR_DATA_SEG_LEN_SHIFT  0
160 #define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_MASK  0xFF
161 #define ISCSI_ASYNC_MSG_HDR_TOTAL_AHS_LEN_SHIFT 24
162 	struct regpair lun;
163 	__le32 all_ones;
164 	__le32 reserved1;
165 	__le32 stat_sn;
166 	__le32 exp_cmd_sn;
167 	__le32 max_cmd_sn;
168 	__le16 param1_rsrv;
169 	u8 async_vcode;
170 	u8 async_event;
171 	__le16 param3_rsrv;
172 	__le16 param2_rsrv;
173 	__le32 reserved7;
174 };
175 
176 struct iscsi_sge {
177 	struct regpair sge_addr;
178 	__le16 sge_len;
179 	__le16 reserved0;
180 	__le32 reserved1;
181 };
182 
183 struct iscsi_cached_sge_ctx {
184 	struct iscsi_sge sge;
185 	struct regpair reserved;
186 	__le32 dsgl_curr_offset[2];
187 };
188 
189 struct iscsi_cmd_hdr {
190 	__le16 reserved1;
191 	u8 flags_attr;
192 #define ISCSI_CMD_HDR_ATTR_MASK           0x7
193 #define ISCSI_CMD_HDR_ATTR_SHIFT          0
194 #define ISCSI_CMD_HDR_RSRV_MASK           0x3
195 #define ISCSI_CMD_HDR_RSRV_SHIFT          3
196 #define ISCSI_CMD_HDR_WRITE_MASK          0x1
197 #define ISCSI_CMD_HDR_WRITE_SHIFT         5
198 #define ISCSI_CMD_HDR_READ_MASK           0x1
199 #define ISCSI_CMD_HDR_READ_SHIFT          6
200 #define ISCSI_CMD_HDR_FINAL_MASK          0x1
201 #define ISCSI_CMD_HDR_FINAL_SHIFT         7
202 	u8 opcode;
203 	__le32 hdr_second_dword;
204 #define ISCSI_CMD_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
205 #define ISCSI_CMD_HDR_DATA_SEG_LEN_SHIFT  0
206 #define ISCSI_CMD_HDR_TOTAL_AHS_LEN_MASK  0xFF
207 #define ISCSI_CMD_HDR_TOTAL_AHS_LEN_SHIFT 24
208 	struct regpair lun;
209 	__le32 itt;
210 	__le32 expected_transfer_length;
211 	__le32 cmd_sn;
212 	__le32 exp_stat_sn;
213 	__le32 cdb[4];
214 };
215 
216 struct iscsi_common_hdr {
217 	u8 hdr_status;
218 	u8 hdr_response;
219 	u8 hdr_flags;
220 	u8 hdr_first_byte;
221 #define ISCSI_COMMON_HDR_OPCODE_MASK         0x3F
222 #define ISCSI_COMMON_HDR_OPCODE_SHIFT        0
223 #define ISCSI_COMMON_HDR_IMM_MASK            0x1
224 #define ISCSI_COMMON_HDR_IMM_SHIFT           6
225 #define ISCSI_COMMON_HDR_RSRV_MASK           0x1
226 #define ISCSI_COMMON_HDR_RSRV_SHIFT          7
227 	__le32 hdr_second_dword;
228 #define ISCSI_COMMON_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
229 #define ISCSI_COMMON_HDR_DATA_SEG_LEN_SHIFT  0
230 #define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_MASK  0xFF
231 #define ISCSI_COMMON_HDR_TOTAL_AHS_LEN_SHIFT 24
232 	__le32 lun_reserved[4];
233 	__le32 data[6];
234 };
235 
236 struct iscsi_conn_offload_params {
237 	struct regpair sq_pbl_addr;
238 	struct regpair r2tq_pbl_addr;
239 	struct regpair xhq_pbl_addr;
240 	struct regpair uhq_pbl_addr;
241 	__le32 initial_ack;
242 	__le16 physical_q0;
243 	__le16 physical_q1;
244 	u8 flags;
245 #define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_MASK  0x1
246 #define ISCSI_CONN_OFFLOAD_PARAMS_TCP_ON_CHIP_1B_SHIFT 0
247 #define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_MASK     0x1
248 #define ISCSI_CONN_OFFLOAD_PARAMS_TARGET_MODE_SHIFT    1
249 #define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_MASK       0x3F
250 #define ISCSI_CONN_OFFLOAD_PARAMS_RESERVED1_SHIFT      2
251 	u8 pbl_page_size_log;
252 	u8 pbe_page_size_log;
253 	u8 default_cq;
254 	__le32 stat_sn;
255 };
256 
257 struct iscsi_slow_path_hdr {
258 	u8 op_code;
259 	u8 flags;
260 #define ISCSI_SLOW_PATH_HDR_RESERVED0_MASK   0xF
261 #define ISCSI_SLOW_PATH_HDR_RESERVED0_SHIFT  0
262 #define ISCSI_SLOW_PATH_HDR_LAYER_CODE_MASK  0x7
263 #define ISCSI_SLOW_PATH_HDR_LAYER_CODE_SHIFT 4
264 #define ISCSI_SLOW_PATH_HDR_RESERVED1_MASK   0x1
265 #define ISCSI_SLOW_PATH_HDR_RESERVED1_SHIFT  7
266 };
267 
268 struct iscsi_conn_update_ramrod_params {
269 	struct iscsi_slow_path_hdr hdr;
270 	__le16 conn_id;
271 	__le32 fw_cid;
272 	u8 flags;
273 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_MASK           0x1
274 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_HD_EN_SHIFT          0
275 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_MASK           0x1
276 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_DD_EN_SHIFT          1
277 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_MASK     0x1
278 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_INITIAL_R2T_SHIFT    2
279 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_MASK  0x1
280 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_IMMEDIATE_DATA_SHIFT 3
281 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_RESERVED1_MASK       0xF
282 #define ISCSI_CONN_UPDATE_RAMROD_PARAMS_RESERVED1_SHIFT      4
283 	u8 reserved0[3];
284 	__le32 max_seq_size;
285 	__le32 max_send_pdu_length;
286 	__le32 max_recv_pdu_length;
287 	__le32 first_seq_length;
288 	__le32 exp_stat_sn;
289 };
290 
291 struct iscsi_ext_cdb_cmd_hdr {
292 	__le16 reserved1;
293 	u8 flags_attr;
294 #define ISCSI_EXT_CDB_CMD_HDR_ATTR_MASK          0x7
295 #define ISCSI_EXT_CDB_CMD_HDR_ATTR_SHIFT         0
296 #define ISCSI_EXT_CDB_CMD_HDR_RSRV_MASK          0x3
297 #define ISCSI_EXT_CDB_CMD_HDR_RSRV_SHIFT         3
298 #define ISCSI_EXT_CDB_CMD_HDR_WRITE_MASK         0x1
299 #define ISCSI_EXT_CDB_CMD_HDR_WRITE_SHIFT        5
300 #define ISCSI_EXT_CDB_CMD_HDR_READ_MASK          0x1
301 #define ISCSI_EXT_CDB_CMD_HDR_READ_SHIFT         6
302 #define ISCSI_EXT_CDB_CMD_HDR_FINAL_MASK         0x1
303 #define ISCSI_EXT_CDB_CMD_HDR_FINAL_SHIFT        7
304 	u8 opcode;
305 	__le32 hdr_second_dword;
306 #define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_MASK  0xFFFFFF
307 #define ISCSI_EXT_CDB_CMD_HDR_DATA_SEG_LEN_SHIFT 0
308 #define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_MASK      0xFF
309 #define ISCSI_EXT_CDB_CMD_HDR_CDB_SIZE_SHIFT     24
310 	struct regpair lun;
311 	__le32 itt;
312 	__le32 expected_transfer_length;
313 	__le32 cmd_sn;
314 	__le32 exp_stat_sn;
315 	struct iscsi_sge cdb_sge;
316 };
317 
318 struct iscsi_login_req_hdr {
319 	u8 version_min;
320 	u8 version_max;
321 	u8 flags_attr;
322 #define ISCSI_LOGIN_REQ_HDR_NSG_MASK            0x3
323 #define ISCSI_LOGIN_REQ_HDR_NSG_SHIFT           0
324 #define ISCSI_LOGIN_REQ_HDR_CSG_MASK            0x3
325 #define ISCSI_LOGIN_REQ_HDR_CSG_SHIFT           2
326 #define ISCSI_LOGIN_REQ_HDR_RSRV_MASK           0x3
327 #define ISCSI_LOGIN_REQ_HDR_RSRV_SHIFT          4
328 #define ISCSI_LOGIN_REQ_HDR_C_MASK              0x1
329 #define ISCSI_LOGIN_REQ_HDR_C_SHIFT             6
330 #define ISCSI_LOGIN_REQ_HDR_T_MASK              0x1
331 #define ISCSI_LOGIN_REQ_HDR_T_SHIFT             7
332 	u8 opcode;
333 	__le32 hdr_second_dword;
334 #define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
335 #define ISCSI_LOGIN_REQ_HDR_DATA_SEG_LEN_SHIFT  0
336 #define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_MASK  0xFF
337 #define ISCSI_LOGIN_REQ_HDR_TOTAL_AHS_LEN_SHIFT 24
338 	__le32 isid_tabc;
339 	__le16 tsih;
340 	__le16 isid_d;
341 	__le32 itt;
342 	__le16 reserved1;
343 	__le16 cid;
344 	__le32 cmd_sn;
345 	__le32 exp_stat_sn;
346 	__le32 reserved2[4];
347 };
348 
349 struct iscsi_logout_req_hdr {
350 	__le16 reserved0;
351 	u8 reason_code;
352 	u8 opcode;
353 	__le32 reserved1;
354 	__le32 reserved2[2];
355 	__le32 itt;
356 	__le16 reserved3;
357 	__le16 cid;
358 	__le32 cmd_sn;
359 	__le32 exp_stat_sn;
360 	__le32 reserved4[4];
361 };
362 
363 struct iscsi_data_out_hdr {
364 	__le16 reserved1;
365 	u8 flags_attr;
366 #define ISCSI_DATA_OUT_HDR_RSRV_MASK   0x7F
367 #define ISCSI_DATA_OUT_HDR_RSRV_SHIFT  0
368 #define ISCSI_DATA_OUT_HDR_FINAL_MASK  0x1
369 #define ISCSI_DATA_OUT_HDR_FINAL_SHIFT 7
370 	u8 opcode;
371 	__le32 reserved2;
372 	struct regpair lun;
373 	__le32 itt;
374 	__le32 ttt;
375 	__le32 reserved3;
376 	__le32 exp_stat_sn;
377 	__le32 reserved4;
378 	__le32 data_sn;
379 	__le32 buffer_offset;
380 	__le32 reserved5;
381 };
382 
383 struct iscsi_data_in_hdr {
384 	u8 status_rsvd;
385 	u8 reserved1;
386 	u8 flags;
387 #define ISCSI_DATA_IN_HDR_STATUS_MASK     0x1
388 #define ISCSI_DATA_IN_HDR_STATUS_SHIFT    0
389 #define ISCSI_DATA_IN_HDR_UNDERFLOW_MASK  0x1
390 #define ISCSI_DATA_IN_HDR_UNDERFLOW_SHIFT 1
391 #define ISCSI_DATA_IN_HDR_OVERFLOW_MASK   0x1
392 #define ISCSI_DATA_IN_HDR_OVERFLOW_SHIFT  2
393 #define ISCSI_DATA_IN_HDR_RSRV_MASK       0x7
394 #define ISCSI_DATA_IN_HDR_RSRV_SHIFT      3
395 #define ISCSI_DATA_IN_HDR_ACK_MASK        0x1
396 #define ISCSI_DATA_IN_HDR_ACK_SHIFT       6
397 #define ISCSI_DATA_IN_HDR_FINAL_MASK      0x1
398 #define ISCSI_DATA_IN_HDR_FINAL_SHIFT     7
399 	u8 opcode;
400 	__le32 reserved2;
401 	struct regpair lun;
402 	__le32 itt;
403 	__le32 ttt;
404 	__le32 stat_sn;
405 	__le32 exp_cmd_sn;
406 	__le32 max_cmd_sn;
407 	__le32 data_sn;
408 	__le32 buffer_offset;
409 	__le32 residual_count;
410 };
411 
412 struct iscsi_r2t_hdr {
413 	u8 reserved0[3];
414 	u8 opcode;
415 	__le32 reserved2;
416 	struct regpair lun;
417 	__le32 itt;
418 	__le32 ttt;
419 	__le32 stat_sn;
420 	__le32 exp_cmd_sn;
421 	__le32 max_cmd_sn;
422 	__le32 r2t_sn;
423 	__le32 buffer_offset;
424 	__le32 desired_data_trns_len;
425 };
426 
427 struct iscsi_nop_out_hdr {
428 	__le16 reserved1;
429 	u8 flags_attr;
430 #define ISCSI_NOP_OUT_HDR_RSRV_MASK    0x7F
431 #define ISCSI_NOP_OUT_HDR_RSRV_SHIFT   0
432 #define ISCSI_NOP_OUT_HDR_CONST1_MASK  0x1
433 #define ISCSI_NOP_OUT_HDR_CONST1_SHIFT 7
434 	u8 opcode;
435 	__le32 reserved2;
436 	struct regpair lun;
437 	__le32 itt;
438 	__le32 ttt;
439 	__le32 cmd_sn;
440 	__le32 exp_stat_sn;
441 	__le32 reserved3;
442 	__le32 reserved4;
443 	__le32 reserved5;
444 	__le32 reserved6;
445 };
446 
447 struct iscsi_nop_in_hdr {
448 	__le16 reserved0;
449 	u8 flags_attr;
450 #define ISCSI_NOP_IN_HDR_RSRV_MASK           0x7F
451 #define ISCSI_NOP_IN_HDR_RSRV_SHIFT          0
452 #define ISCSI_NOP_IN_HDR_CONST1_MASK         0x1
453 #define ISCSI_NOP_IN_HDR_CONST1_SHIFT        7
454 	u8 opcode;
455 	__le32 hdr_second_dword;
456 #define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
457 #define ISCSI_NOP_IN_HDR_DATA_SEG_LEN_SHIFT  0
458 #define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_MASK  0xFF
459 #define ISCSI_NOP_IN_HDR_TOTAL_AHS_LEN_SHIFT 24
460 	struct regpair lun;
461 	__le32 itt;
462 	__le32 ttt;
463 	__le32 stat_sn;
464 	__le32 exp_cmd_sn;
465 	__le32 max_cmd_sn;
466 	__le32 reserved5;
467 	__le32 reserved6;
468 	__le32 reserved7;
469 };
470 
471 struct iscsi_login_response_hdr {
472 	u8 version_active;
473 	u8 version_max;
474 	u8 flags_attr;
475 #define ISCSI_LOGIN_RESPONSE_HDR_NSG_MASK            0x3
476 #define ISCSI_LOGIN_RESPONSE_HDR_NSG_SHIFT           0
477 #define ISCSI_LOGIN_RESPONSE_HDR_CSG_MASK            0x3
478 #define ISCSI_LOGIN_RESPONSE_HDR_CSG_SHIFT           2
479 #define ISCSI_LOGIN_RESPONSE_HDR_RSRV_MASK           0x3
480 #define ISCSI_LOGIN_RESPONSE_HDR_RSRV_SHIFT          4
481 #define ISCSI_LOGIN_RESPONSE_HDR_C_MASK              0x1
482 #define ISCSI_LOGIN_RESPONSE_HDR_C_SHIFT             6
483 #define ISCSI_LOGIN_RESPONSE_HDR_T_MASK              0x1
484 #define ISCSI_LOGIN_RESPONSE_HDR_T_SHIFT             7
485 	u8 opcode;
486 	__le32 hdr_second_dword;
487 #define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
488 #define ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_SHIFT  0
489 #define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_MASK  0xFF
490 #define ISCSI_LOGIN_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
491 	__le32 isid_tabc;
492 	__le16 tsih;
493 	__le16 isid_d;
494 	__le32 itt;
495 	__le32 reserved1;
496 	__le32 stat_sn;
497 	__le32 exp_cmd_sn;
498 	__le32 max_cmd_sn;
499 	__le16 reserved2;
500 	u8 status_detail;
501 	u8 status_class;
502 	__le32 reserved4[2];
503 };
504 
505 struct iscsi_logout_response_hdr {
506 	u8 reserved1;
507 	u8 response;
508 	u8 flags;
509 	u8 opcode;
510 	__le32 hdr_second_dword;
511 #define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
512 #define ISCSI_LOGOUT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT  0
513 #define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK  0xFF
514 #define ISCSI_LOGOUT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
515 	__le32 reserved2[2];
516 	__le32 itt;
517 	__le32 reserved3;
518 	__le32 stat_sn;
519 	__le32 exp_cmd_sn;
520 	__le32 max_cmd_sn;
521 	__le32 reserved4;
522 	__le16 time2retain;
523 	__le16 time2wait;
524 	__le32 reserved5[1];
525 };
526 
527 struct iscsi_text_request_hdr {
528 	__le16 reserved0;
529 	u8 flags_attr;
530 #define ISCSI_TEXT_REQUEST_HDR_RSRV_MASK           0x3F
531 #define ISCSI_TEXT_REQUEST_HDR_RSRV_SHIFT          0
532 #define ISCSI_TEXT_REQUEST_HDR_C_MASK              0x1
533 #define ISCSI_TEXT_REQUEST_HDR_C_SHIFT             6
534 #define ISCSI_TEXT_REQUEST_HDR_F_MASK              0x1
535 #define ISCSI_TEXT_REQUEST_HDR_F_SHIFT             7
536 	u8 opcode;
537 	__le32 hdr_second_dword;
538 #define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
539 #define ISCSI_TEXT_REQUEST_HDR_DATA_SEG_LEN_SHIFT  0
540 #define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_MASK  0xFF
541 #define ISCSI_TEXT_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
542 	struct regpair lun;
543 	__le32 itt;
544 	__le32 ttt;
545 	__le32 cmd_sn;
546 	__le32 exp_stat_sn;
547 	__le32 reserved4[4];
548 };
549 
550 struct iscsi_text_response_hdr {
551 	__le16 reserved1;
552 	u8 flags;
553 #define ISCSI_TEXT_RESPONSE_HDR_RSRV_MASK           0x3F
554 #define ISCSI_TEXT_RESPONSE_HDR_RSRV_SHIFT          0
555 #define ISCSI_TEXT_RESPONSE_HDR_C_MASK              0x1
556 #define ISCSI_TEXT_RESPONSE_HDR_C_SHIFT             6
557 #define ISCSI_TEXT_RESPONSE_HDR_F_MASK              0x1
558 #define ISCSI_TEXT_RESPONSE_HDR_F_SHIFT             7
559 	u8 opcode;
560 	__le32 hdr_second_dword;
561 #define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
562 #define ISCSI_TEXT_RESPONSE_HDR_DATA_SEG_LEN_SHIFT  0
563 #define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_MASK  0xFF
564 #define ISCSI_TEXT_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
565 	struct regpair lun;
566 	__le32 itt;
567 	__le32 ttt;
568 	__le32 stat_sn;
569 	__le32 exp_cmd_sn;
570 	__le32 max_cmd_sn;
571 	__le32 reserved4[3];
572 };
573 
574 struct iscsi_tmf_request_hdr {
575 	__le16 reserved0;
576 	u8 function;
577 	u8 opcode;
578 	__le32 hdr_second_dword;
579 #define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
580 #define ISCSI_TMF_REQUEST_HDR_DATA_SEG_LEN_SHIFT  0
581 #define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_MASK  0xFF
582 #define ISCSI_TMF_REQUEST_HDR_TOTAL_AHS_LEN_SHIFT 24
583 	struct regpair lun;
584 	__le32 itt;
585 	__le32 rtt;
586 	__le32 cmd_sn;
587 	__le32 exp_stat_sn;
588 	__le32 ref_cmd_sn;
589 	__le32 exp_data_sn;
590 	__le32 reserved4[2];
591 };
592 
593 struct iscsi_tmf_response_hdr {
594 	u8 reserved2;
595 	u8 hdr_response;
596 	u8 hdr_flags;
597 	u8 opcode;
598 	__le32 hdr_second_dword;
599 #define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
600 #define ISCSI_TMF_RESPONSE_HDR_DATA_SEG_LEN_SHIFT  0
601 #define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_MASK  0xFF
602 #define ISCSI_TMF_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
603 	struct regpair reserved0;
604 	__le32 itt;
605 	__le32 rtt;
606 	__le32 stat_sn;
607 	__le32 exp_cmd_sn;
608 	__le32 max_cmd_sn;
609 	__le32 reserved4[3];
610 };
611 
612 struct iscsi_response_hdr {
613 	u8 hdr_status;
614 	u8 hdr_response;
615 	u8 hdr_flags;
616 	u8 opcode;
617 	__le32 hdr_second_dword;
618 #define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
619 #define ISCSI_RESPONSE_HDR_DATA_SEG_LEN_SHIFT  0
620 #define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_MASK  0xFF
621 #define ISCSI_RESPONSE_HDR_TOTAL_AHS_LEN_SHIFT 24
622 	struct regpair lun;
623 	__le32 itt;
624 	__le32 snack_tag;
625 	__le32 stat_sn;
626 	__le32 exp_cmd_sn;
627 	__le32 max_cmd_sn;
628 	__le32 exp_data_sn;
629 	__le32 bi_residual_count;
630 	__le32 residual_count;
631 };
632 
633 struct iscsi_reject_hdr {
634 	u8 reserved4;
635 	u8 hdr_reason;
636 	u8 hdr_flags;
637 	u8 opcode;
638 	__le32 hdr_second_dword;
639 #define ISCSI_REJECT_HDR_DATA_SEG_LEN_MASK   0xFFFFFF
640 #define ISCSI_REJECT_HDR_DATA_SEG_LEN_SHIFT  0
641 #define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_MASK  0xFF
642 #define ISCSI_REJECT_HDR_TOTAL_AHS_LEN_SHIFT 24
643 	struct regpair reserved0;
644 	__le32 reserved1;
645 	__le32 reserved2;
646 	__le32 stat_sn;
647 	__le32 exp_cmd_sn;
648 	__le32 max_cmd_sn;
649 	__le32 data_sn;
650 	__le32 reserved3[2];
651 };
652 
653 union iscsi_task_hdr {
654 	struct iscsi_common_hdr common;
655 	struct data_hdr data;
656 	struct iscsi_cmd_hdr cmd;
657 	struct iscsi_ext_cdb_cmd_hdr ext_cdb_cmd;
658 	struct iscsi_login_req_hdr login_req;
659 	struct iscsi_logout_req_hdr logout_req;
660 	struct iscsi_data_out_hdr data_out;
661 	struct iscsi_data_in_hdr data_in;
662 	struct iscsi_r2t_hdr r2t;
663 	struct iscsi_nop_out_hdr nop_out;
664 	struct iscsi_nop_in_hdr nop_in;
665 	struct iscsi_login_response_hdr login_response;
666 	struct iscsi_logout_response_hdr logout_response;
667 	struct iscsi_text_request_hdr text_request;
668 	struct iscsi_text_response_hdr text_response;
669 	struct iscsi_tmf_request_hdr tmf_request;
670 	struct iscsi_tmf_response_hdr tmf_response;
671 	struct iscsi_response_hdr response;
672 	struct iscsi_reject_hdr reject;
673 	struct iscsi_async_msg_hdr async_msg;
674 };
675 
676 struct iscsi_cqe_common {
677 	__le16 conn_id;
678 	u8 cqe_type;
679 	union cqe_error_status error_bitmap;
680 	__le32 reserved[3];
681 	union iscsi_task_hdr iscsi_hdr;
682 };
683 
684 struct iscsi_cqe_solicited {
685 	__le16 conn_id;
686 	u8 cqe_type;
687 	union cqe_error_status error_bitmap;
688 	__le16 itid;
689 	u8 task_type;
690 	u8 fw_dbg_field;
691 	__le32 reserved1[2];
692 	union iscsi_task_hdr iscsi_hdr;
693 };
694 
695 struct iscsi_cqe_unsolicited {
696 	__le16 conn_id;
697 	u8 cqe_type;
698 	union cqe_error_status error_bitmap;
699 	__le16 reserved0;
700 	u8 reserved1;
701 	u8 unsol_cqe_type;
702 	struct regpair rqe_opaque;
703 	union iscsi_task_hdr iscsi_hdr;
704 };
705 
706 union iscsi_cqe {
707 	struct iscsi_cqe_common cqe_common;
708 	struct iscsi_cqe_solicited cqe_solicited;
709 	struct iscsi_cqe_unsolicited cqe_unsolicited;
710 };
711 
712 enum iscsi_cqes_type {
713 	ISCSI_CQE_TYPE_SOLICITED = 1,
714 	ISCSI_CQE_TYPE_UNSOLICITED,
715 	ISCSI_CQE_TYPE_SOLICITED_WITH_SENSE,
716 	ISCSI_CQE_TYPE_TASK_CLEANUP,
717 	ISCSI_CQE_TYPE_DUMMY,
718 	MAX_ISCSI_CQES_TYPE
719 };
720 
721 enum iscsi_cqe_unsolicited_type {
722 	ISCSI_CQE_UNSOLICITED_NONE,
723 	ISCSI_CQE_UNSOLICITED_SINGLE,
724 	ISCSI_CQE_UNSOLICITED_FIRST,
725 	ISCSI_CQE_UNSOLICITED_MIDDLE,
726 	ISCSI_CQE_UNSOLICITED_LAST,
727 	MAX_ISCSI_CQE_UNSOLICITED_TYPE
728 };
729 
730 struct iscsi_virt_sgl_ctx {
731 	struct regpair sgl_base;
732 	struct regpair dsgl_base;
733 	__le32 sgl_initial_offset;
734 	__le32 dsgl_initial_offset;
735 	__le32 dsgl_curr_offset[2];
736 };
737 
738 struct iscsi_sgl_var_params {
739 	u8 sgl_ptr;
740 	u8 dsgl_ptr;
741 	__le16 sge_offset;
742 	__le16 dsge_offset;
743 };
744 
745 struct iscsi_phys_sgl_ctx {
746 	struct regpair sgl_base;
747 	struct regpair dsgl_base;
748 	u8 sgl_size;
749 	u8 dsgl_size;
750 	__le16 reserved;
751 	struct iscsi_sgl_var_params var_params[2];
752 };
753 
754 union iscsi_data_desc_ctx {
755 	struct iscsi_virt_sgl_ctx virt_sgl;
756 	struct iscsi_phys_sgl_ctx phys_sgl;
757 	struct iscsi_cached_sge_ctx cached_sge;
758 };
759 
760 struct iscsi_debug_modes {
761 	u8 flags;
762 #define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_MASK         0x1
763 #define ISCSI_DEBUG_MODES_ASSERT_IF_RX_CONN_ERROR_SHIFT        0
764 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_MASK            0x1
765 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_RESET_SHIFT           1
766 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_MASK              0x1
767 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_FIN_SHIFT             2
768 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_MASK          0x1
769 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_CLEANUP_SHIFT         3
770 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_MASK  0x1
771 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_REJECT_OR_ASYNC_SHIFT 4
772 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_MASK              0x1
773 #define ISCSI_DEBUG_MODES_ASSERT_IF_RECV_NOP_SHIFT             5
774 #define ISCSI_DEBUG_MODES_RESERVED0_MASK                       0x3
775 #define ISCSI_DEBUG_MODES_RESERVED0_SHIFT                      6
776 };
777 
778 struct iscsi_dif_flags {
779 	u8 flags;
780 #define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_MASK  0xF
781 #define ISCSI_DIF_FLAGS_PROT_INTERVAL_SIZE_LOG_SHIFT 0
782 #define ISCSI_DIF_FLAGS_DIF_TO_PEER_MASK             0x1
783 #define ISCSI_DIF_FLAGS_DIF_TO_PEER_SHIFT            4
784 #define ISCSI_DIF_FLAGS_HOST_INTERFACE_MASK          0x7
785 #define ISCSI_DIF_FLAGS_HOST_INTERFACE_SHIFT         5
786 };
787 
788 enum iscsi_eqe_opcode {
789 	ISCSI_EVENT_TYPE_INIT_FUNC = 0,
790 	ISCSI_EVENT_TYPE_DESTROY_FUNC,
791 	ISCSI_EVENT_TYPE_OFFLOAD_CONN,
792 	ISCSI_EVENT_TYPE_UPDATE_CONN,
793 	ISCSI_EVENT_TYPE_CLEAR_SQ,
794 	ISCSI_EVENT_TYPE_TERMINATE_CONN,
795 	ISCSI_EVENT_TYPE_MAC_UPDATE_CONN,
796 	ISCSI_EVENT_TYPE_ASYN_CONNECT_COMPLETE,
797 	ISCSI_EVENT_TYPE_ASYN_TERMINATE_DONE,
798 	RESERVED9,
799 	ISCSI_EVENT_TYPE_START_OF_ERROR_TYPES = 10,
800 	ISCSI_EVENT_TYPE_ASYN_ABORT_RCVD,
801 	ISCSI_EVENT_TYPE_ASYN_CLOSE_RCVD,
802 	ISCSI_EVENT_TYPE_ASYN_SYN_RCVD,
803 	ISCSI_EVENT_TYPE_ASYN_MAX_RT_TIME,
804 	ISCSI_EVENT_TYPE_ASYN_MAX_RT_CNT,
805 	ISCSI_EVENT_TYPE_ASYN_MAX_KA_PROBES_CNT,
806 	ISCSI_EVENT_TYPE_ASYN_FIN_WAIT2,
807 	ISCSI_EVENT_TYPE_ISCSI_CONN_ERROR,
808 	ISCSI_EVENT_TYPE_TCP_CONN_ERROR,
809 	ISCSI_EVENT_TYPE_ASYN_DELETE_OOO_ISLES,
810 	MAX_ISCSI_EQE_OPCODE
811 };
812 
813 enum iscsi_error_types {
814 	ISCSI_STATUS_NONE = 0,
815 	ISCSI_CQE_ERROR_UNSOLICITED_RCV_ON_INVALID_CONN = 1,
816 	ISCSI_CONN_ERROR_TASK_CID_MISMATCH,
817 	ISCSI_CONN_ERROR_TASK_NOT_VALID,
818 	ISCSI_CONN_ERROR_RQ_RING_IS_FULL,
819 	ISCSI_CONN_ERROR_CMDQ_RING_IS_FULL,
820 	ISCSI_CONN_ERROR_HQE_CACHING_FAILED,
821 	ISCSI_CONN_ERROR_HEADER_DIGEST_ERROR,
822 	ISCSI_CONN_ERROR_LOCAL_COMPLETION_ERROR,
823 	ISCSI_CONN_ERROR_DATA_OVERRUN,
824 	ISCSI_CONN_ERROR_OUT_OF_SGES_ERROR,
825 	ISCSI_CONN_ERROR_TCP_SEG_PROC_URG_ERROR,
826 	ISCSI_CONN_ERROR_TCP_SEG_PROC_IP_OPTIONS_ERROR,
827 	ISCSI_CONN_ERROR_TCP_SEG_PROC_CONNECT_INVALID_WS_OPTION,
828 	ISCSI_CONN_ERROR_TCP_IP_FRAGMENT_ERROR,
829 	ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_LEN,
830 	ISCSI_CONN_ERROR_PROTOCOL_ERR_AHS_TYPE,
831 	ISCSI_CONN_ERROR_PROTOCOL_ERR_ITT_OUT_OF_RANGE,
832 	ISCSI_CONN_ERROR_PROTOCOL_ERR_TTT_OUT_OF_RANGE,
833 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_EXCEEDS_PDU_SIZE,
834 	ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE,
835 	ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_OPCODE_BEFORE_UPDATE,
836 	ISCSI_CONN_ERROR_UNVALID_NOPIN_DSL,
837 	ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_CARRIES_NO_DATA,
838 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SN,
839 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_IN_TTT,
840 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_OUT_ITT,
841 	ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_TTT,
842 	ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_BUFFER_OFFSET,
843 	ISCSI_CONN_ERROR_PROTOCOL_ERR_BUFFER_OFFSET_OOO,
844 	ISCSI_CONN_ERROR_PROTOCOL_ERR_R2T_SN,
845 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_0,
846 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_1,
847 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DESIRED_DATA_TRNS_LEN_2,
848 	ISCSI_CONN_ERROR_PROTOCOL_ERR_LUN,
849 	ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO,
850 	ISCSI_CONN_ERROR_PROTOCOL_ERR_F_BIT_ZERO_S_BIT_ONE,
851 	ISCSI_CONN_ERROR_PROTOCOL_ERR_EXP_STAT_SN,
852 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DSL_NOT_ZERO,
853 	ISCSI_CONN_ERROR_PROTOCOL_ERR_INVALID_DSL,
854 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DATA_SEG_LEN_TOO_BIG,
855 	ISCSI_CONN_ERROR_PROTOCOL_ERR_OUTSTANDING_R2T_COUNT,
856 	ISCSI_CONN_ERROR_PROTOCOL_ERR_DIF_TX,
857 	ISCSI_CONN_ERROR_SENSE_DATA_LENGTH,
858 	ISCSI_CONN_ERROR_DATA_PLACEMENT_ERROR,
859 	ISCSI_ERROR_UNKNOWN,
860 	MAX_ISCSI_ERROR_TYPES
861 };
862 
863 struct iscsi_mflags {
864 	u8 mflags;
865 #define ISCSI_MFLAGS_SLOW_IO_MASK     0x1
866 #define ISCSI_MFLAGS_SLOW_IO_SHIFT    0
867 #define ISCSI_MFLAGS_SINGLE_SGE_MASK  0x1
868 #define ISCSI_MFLAGS_SINGLE_SGE_SHIFT 1
869 #define ISCSI_MFLAGS_RESERVED_MASK    0x3F
870 #define ISCSI_MFLAGS_RESERVED_SHIFT   2
871 };
872 
873 struct iscsi_sgl {
874 	struct regpair sgl_addr;
875 	__le16 updated_sge_size;
876 	__le16 updated_sge_offset;
877 	__le32 byte_offset;
878 };
879 
880 union iscsi_mstorm_sgl {
881 	struct iscsi_sgl sgl_struct;
882 	struct iscsi_sge single_sge;
883 };
884 
885 enum iscsi_ramrod_cmd_id {
886 	ISCSI_RAMROD_CMD_ID_UNUSED = 0,
887 	ISCSI_RAMROD_CMD_ID_INIT_FUNC = 1,
888 	ISCSI_RAMROD_CMD_ID_DESTROY_FUNC = 2,
889 	ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN = 3,
890 	ISCSI_RAMROD_CMD_ID_UPDATE_CONN = 4,
891 	ISCSI_RAMROD_CMD_ID_TERMINATION_CONN = 5,
892 	ISCSI_RAMROD_CMD_ID_CLEAR_SQ = 6,
893 	ISCSI_RAMROD_CMD_ID_MAC_UPDATE = 7,
894 	MAX_ISCSI_RAMROD_CMD_ID
895 };
896 
897 struct iscsi_reg1 {
898 	__le32 reg1_map;
899 #define ISCSI_REG1_NUM_FAST_SGES_MASK  0x7
900 #define ISCSI_REG1_NUM_FAST_SGES_SHIFT 0
901 #define ISCSI_REG1_RESERVED1_MASK      0x1FFFFFFF
902 #define ISCSI_REG1_RESERVED1_SHIFT     3
903 };
904 
905 union iscsi_seq_num {
906 	__le16 data_sn;
907 	__le16 r2t_sn;
908 };
909 
910 struct iscsi_spe_conn_mac_update {
911 	struct iscsi_slow_path_hdr hdr;
912 	__le16 conn_id;
913 	__le32 fw_cid;
914 	__le16 remote_mac_addr_lo;
915 	__le16 remote_mac_addr_mid;
916 	__le16 remote_mac_addr_hi;
917 	u8 reserved0[2];
918 };
919 
920 struct iscsi_spe_conn_offload {
921 	struct iscsi_slow_path_hdr hdr;
922 	__le16 conn_id;
923 	__le32 fw_cid;
924 	struct iscsi_conn_offload_params iscsi;
925 	struct tcp_offload_params tcp;
926 };
927 
928 struct iscsi_spe_conn_offload_option2 {
929 	struct iscsi_slow_path_hdr hdr;
930 	__le16 conn_id;
931 	__le32 fw_cid;
932 	struct iscsi_conn_offload_params iscsi;
933 	struct tcp_offload_params_opt2 tcp;
934 };
935 
936 struct iscsi_spe_conn_termination {
937 	struct iscsi_slow_path_hdr hdr;
938 	__le16 conn_id;
939 	__le32 fw_cid;
940 	u8 abortive;
941 	u8 reserved0[7];
942 	struct regpair queue_cnts_addr;
943 	struct regpair query_params_addr;
944 };
945 
946 struct iscsi_spe_func_dstry {
947 	struct iscsi_slow_path_hdr hdr;
948 	__le16 reserved0;
949 	__le32 reserved1;
950 };
951 
952 struct iscsi_spe_func_init {
953 	struct iscsi_slow_path_hdr hdr;
954 	__le16 half_way_close_timeout;
955 	u8 num_sq_pages_in_ring;
956 	u8 num_r2tq_pages_in_ring;
957 	u8 num_uhq_pages_in_ring;
958 	u8 ll2_rx_queue_id;
959 	u8 ooo_enable;
960 	struct iscsi_debug_modes debug_mode;
961 	__le16 reserved1;
962 	__le32 reserved2;
963 	__le32 reserved3;
964 	__le32 reserved4;
965 	struct scsi_init_func_params func_params;
966 	struct scsi_init_func_queues q_params;
967 };
968 
969 struct ystorm_iscsi_task_state {
970 	union iscsi_data_desc_ctx sgl_ctx_union;
971 	__le32 buffer_offset[2];
972 	__le16 bytes_nxt_dif;
973 	__le16 rxmit_bytes_nxt_dif;
974 	union iscsi_seq_num seq_num_union;
975 	u8 dif_bytes_leftover;
976 	u8 rxmit_dif_bytes_leftover;
977 	__le16 reuse_count;
978 	struct iscsi_dif_flags dif_flags;
979 	u8 local_comp;
980 	__le32 exp_r2t_sn;
981 	__le32 sgl_offset[2];
982 };
983 
984 struct ystorm_iscsi_task_st_ctx {
985 	struct ystorm_iscsi_task_state state;
986 	union iscsi_task_hdr pdu_hdr;
987 };
988 
989 struct ystorm_iscsi_task_ag_ctx {
990 	u8 reserved;
991 	u8 byte1;
992 	__le16 word0;
993 	u8 flags0;
994 #define YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK     0xF
995 #define YSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT    0
996 #define YSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK        0x1
997 #define YSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT       4
998 #define YSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK        0x1
999 #define YSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT       5
1000 #define YSTORM_ISCSI_TASK_AG_CTX_VALID_MASK       0x1
1001 #define YSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT      6
1002 #define YSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK        0x1
1003 #define YSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT       7
1004 	u8 flags1;
1005 #define YSTORM_ISCSI_TASK_AG_CTX_CF0_MASK         0x3
1006 #define YSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT        0
1007 #define YSTORM_ISCSI_TASK_AG_CTX_CF1_MASK         0x3
1008 #define YSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT        2
1009 #define YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_MASK  0x3
1010 #define YSTORM_ISCSI_TASK_AG_CTX_CF2SPECIAL_SHIFT 4
1011 #define YSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK       0x1
1012 #define YSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT      6
1013 #define YSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK       0x1
1014 #define YSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT      7
1015 	u8 flags2;
1016 #define YSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK        0x1
1017 #define YSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT       0
1018 #define YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK     0x1
1019 #define YSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT    1
1020 #define YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK     0x1
1021 #define YSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT    2
1022 #define YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK     0x1
1023 #define YSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT    3
1024 #define YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK     0x1
1025 #define YSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT    4
1026 #define YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK     0x1
1027 #define YSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT    5
1028 #define YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK     0x1
1029 #define YSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT    6
1030 #define YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK     0x1
1031 #define YSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT    7
1032 	u8 byte2;
1033 	__le32 TTT;
1034 	u8 byte3;
1035 	u8 byte4;
1036 	__le16 word1;
1037 };
1038 
1039 struct mstorm_iscsi_task_ag_ctx {
1040 	u8 cdu_validation;
1041 	u8 byte1;
1042 	__le16 task_cid;
1043 	u8 flags0;
1044 #define MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK     0xF
1045 #define MSTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT    0
1046 #define MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK        0x1
1047 #define MSTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT       4
1048 #define MSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK                0x1
1049 #define MSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT               5
1050 #define MSTORM_ISCSI_TASK_AG_CTX_VALID_MASK               0x1
1051 #define MSTORM_ISCSI_TASK_AG_CTX_VALID_SHIFT              6
1052 #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_MASK   0x1
1053 #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_FLAG_SHIFT  7
1054 	u8 flags1;
1055 #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_MASK     0x3
1056 #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_SHIFT    0
1057 #define MSTORM_ISCSI_TASK_AG_CTX_CF1_MASK                 0x3
1058 #define MSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT                2
1059 #define MSTORM_ISCSI_TASK_AG_CTX_CF2_MASK                 0x3
1060 #define MSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT                4
1061 #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_MASK  0x1
1062 #define MSTORM_ISCSI_TASK_AG_CTX_TASK_CLEANUP_CF_EN_SHIFT 6
1063 #define MSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK               0x1
1064 #define MSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT              7
1065 	u8 flags2;
1066 #define MSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK               0x1
1067 #define MSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT              0
1068 #define MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK             0x1
1069 #define MSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT            1
1070 #define MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK             0x1
1071 #define MSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT            2
1072 #define MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK             0x1
1073 #define MSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT            3
1074 #define MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK             0x1
1075 #define MSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT            4
1076 #define MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK             0x1
1077 #define MSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT            5
1078 #define MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK             0x1
1079 #define MSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT            6
1080 #define MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK             0x1
1081 #define MSTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT            7
1082 	u8 byte2;
1083 	__le32 reg0;
1084 	u8 byte3;
1085 	u8 byte4;
1086 	__le16 word1;
1087 };
1088 
1089 struct ustorm_iscsi_task_ag_ctx {
1090 	u8 reserved;
1091 	u8 state;
1092 	__le16 icid;
1093 	u8 flags0;
1094 #define USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_MASK        0xF
1095 #define USTORM_ISCSI_TASK_AG_CTX_CONNECTION_TYPE_SHIFT       0
1096 #define USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_MASK           0x1
1097 #define USTORM_ISCSI_TASK_AG_CTX_EXIST_IN_QM0_SHIFT          4
1098 #define USTORM_ISCSI_TASK_AG_CTX_BIT1_MASK                   0x1
1099 #define USTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT                  5
1100 #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_MASK          0x3
1101 #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_SHIFT         6
1102 	u8 flags1;
1103 #define USTORM_ISCSI_TASK_AG_CTX_RESERVED1_MASK              0x3
1104 #define USTORM_ISCSI_TASK_AG_CTX_RESERVED1_SHIFT             0
1105 #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_MASK               0x3
1106 #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_SHIFT              2
1107 #define USTORM_ISCSI_TASK_AG_CTX_CF3_MASK                    0x3
1108 #define USTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT                   4
1109 #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_MASK           0x3
1110 #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_SHIFT          6
1111 	u8 flags2;
1112 #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_MASK       0x1
1113 #define USTORM_ISCSI_TASK_AG_CTX_HQ_SCANNED_CF_EN_SHIFT      0
1114 #define USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_MASK     0x1
1115 #define USTORM_ISCSI_TASK_AG_CTX_DISABLE_DATA_ACKED_SHIFT    1
1116 #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_MASK            0x1
1117 #define USTORM_ISCSI_TASK_AG_CTX_R2T2RECV_EN_SHIFT           2
1118 #define USTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK                  0x1
1119 #define USTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT                 3
1120 #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_MASK        0x1
1121 #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_CF_EN_SHIFT       4
1122 #define USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_MASK  0x1
1123 #define USTORM_ISCSI_TASK_AG_CTX_CMP_DATA_TOTAL_EXP_EN_SHIFT 5
1124 #define USTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK                0x1
1125 #define USTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT               6
1126 #define USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_MASK    0x1
1127 #define USTORM_ISCSI_TASK_AG_CTX_CMP_CONT_RCV_EXP_EN_SHIFT   7
1128 	u8 flags3;
1129 #define USTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK                0x1
1130 #define USTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT               0
1131 #define USTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK                0x1
1132 #define USTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT               1
1133 #define USTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK                0x1
1134 #define USTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT               2
1135 #define USTORM_ISCSI_TASK_AG_CTX_RULE6EN_MASK                0x1
1136 #define USTORM_ISCSI_TASK_AG_CTX_RULE6EN_SHIFT               3
1137 #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_MASK         0xF
1138 #define USTORM_ISCSI_TASK_AG_CTX_DIF_ERROR_TYPE_SHIFT        4
1139 	__le32 dif_err_intervals;
1140 	__le32 dif_error_1st_interval;
1141 	__le32 rcv_cont_len;
1142 	__le32 exp_cont_len;
1143 	__le32 total_data_acked;
1144 	__le32 exp_data_acked;
1145 	u8 next_tid_valid;
1146 	u8 byte3;
1147 	__le16 word1;
1148 	__le16 next_tid;
1149 	__le16 word3;
1150 	__le32 hdr_residual_count;
1151 	__le32 exp_r2t_sn;
1152 };
1153 
1154 struct mstorm_iscsi_task_st_ctx {
1155 	union iscsi_mstorm_sgl sgl_union;
1156 	struct iscsi_dif_flags dif_flags;
1157 	struct iscsi_mflags flags;
1158 	u8 sgl_size;
1159 	u8 host_sge_index;
1160 	__le16 dix_cur_sge_offset;
1161 	__le16 dix_cur_sge_size;
1162 	__le32 data_offset_rtid;
1163 	u8 dif_offset;
1164 	u8 dix_sgl_size;
1165 	u8 dix_sge_index;
1166 	u8 task_type;
1167 	struct regpair sense_db;
1168 	struct regpair dix_sgl_cur_sge;
1169 	__le32 rem_task_size;
1170 	__le16 reuse_count;
1171 	__le16 dif_data_residue;
1172 	u8 reserved0[4];
1173 	__le32 reserved1[1];
1174 };
1175 
1176 struct ustorm_iscsi_task_st_ctx {
1177 	__le32 rem_rcv_len;
1178 	__le32 exp_data_transfer_len;
1179 	__le32 exp_data_sn;
1180 	struct regpair lun;
1181 	struct iscsi_reg1 reg1;
1182 	u8 flags2;
1183 #define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_MASK             0x1
1184 #define USTORM_ISCSI_TASK_ST_CTX_AHS_EXIST_SHIFT            0
1185 #define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_MASK             0x7F
1186 #define USTORM_ISCSI_TASK_ST_CTX_RESERVED1_SHIFT            1
1187 	u8 reserved2;
1188 	__le16 reserved3;
1189 	__le32 reserved4;
1190 	__le32 reserved5;
1191 	__le32 reserved6;
1192 	__le32 reserved7;
1193 	u8 task_type;
1194 	u8 error_flags;
1195 #define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_MASK     0x1
1196 #define USTORM_ISCSI_TASK_ST_CTX_DATA_DIGEST_ERROR_SHIFT    0
1197 #define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_MASK  0x1
1198 #define USTORM_ISCSI_TASK_ST_CTX_DATA_TRUNCATED_ERROR_SHIFT 1
1199 #define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_MASK       0x1
1200 #define USTORM_ISCSI_TASK_ST_CTX_UNDER_RUN_ERROR_SHIFT      2
1201 #define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_MASK             0x1F
1202 #define USTORM_ISCSI_TASK_ST_CTX_RESERVED8_SHIFT            3
1203 	u8 flags;
1204 #define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_MASK             0x3
1205 #define USTORM_ISCSI_TASK_ST_CTX_CQE_WRITE_SHIFT            0
1206 #define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_MASK            0x1
1207 #define USTORM_ISCSI_TASK_ST_CTX_LOCAL_COMP_SHIFT           2
1208 #define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_MASK        0x1
1209 #define USTORM_ISCSI_TASK_ST_CTX_Q0_R2TQE_WRITE_SHIFT       3
1210 #define USTORM_ISCSI_TASK_ST_CTX_TOTALDATAACKED_DONE_MASK   0x1
1211 #define USTORM_ISCSI_TASK_ST_CTX_TOTALDATAACKED_DONE_SHIFT  4
1212 #define USTORM_ISCSI_TASK_ST_CTX_HQSCANNED_DONE_MASK        0x1
1213 #define USTORM_ISCSI_TASK_ST_CTX_HQSCANNED_DONE_SHIFT       5
1214 #define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_MASK         0x1
1215 #define USTORM_ISCSI_TASK_ST_CTX_R2T2RECV_DONE_SHIFT        6
1216 #define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_MASK             0x1
1217 #define USTORM_ISCSI_TASK_ST_CTX_RESERVED0_SHIFT            7
1218 	u8 cq_rss_number;
1219 };
1220 
1221 struct iscsi_task_context {
1222 	struct ystorm_iscsi_task_st_ctx ystorm_st_context;
1223 	struct regpair ystorm_st_padding[2];
1224 	struct ystorm_iscsi_task_ag_ctx ystorm_ag_context;
1225 	struct regpair ystorm_ag_padding[2];
1226 	struct tdif_task_context tdif_context;
1227 	struct mstorm_iscsi_task_ag_ctx mstorm_ag_context;
1228 	struct regpair mstorm_ag_padding[2];
1229 	struct ustorm_iscsi_task_ag_ctx ustorm_ag_context;
1230 	struct mstorm_iscsi_task_st_ctx mstorm_st_context;
1231 	struct ustorm_iscsi_task_st_ctx ustorm_st_context;
1232 	struct rdif_task_context rdif_context;
1233 };
1234 
1235 enum iscsi_task_type {
1236 	ISCSI_TASK_TYPE_INITIATOR_WRITE,
1237 	ISCSI_TASK_TYPE_INITIATOR_READ,
1238 	ISCSI_TASK_TYPE_MIDPATH,
1239 	ISCSI_TASK_TYPE_UNSOLIC,
1240 	ISCSI_TASK_TYPE_EXCHCLEANUP,
1241 	ISCSI_TASK_TYPE_IRRELEVANT,
1242 	ISCSI_TASK_TYPE_TARGET_WRITE,
1243 	ISCSI_TASK_TYPE_TARGET_READ,
1244 	ISCSI_TASK_TYPE_TARGET_RESPONSE,
1245 	ISCSI_TASK_TYPE_LOGIN_RESPONSE,
1246 	MAX_ISCSI_TASK_TYPE
1247 };
1248 
1249 union iscsi_ttt_txlen_union {
1250 	__le32 desired_tx_len;
1251 	__le32 ttt;
1252 };
1253 
1254 struct iscsi_uhqe {
1255 	__le32 reg1;
1256 #define ISCSI_UHQE_PDU_PAYLOAD_LEN_MASK     0xFFFFF
1257 #define ISCSI_UHQE_PDU_PAYLOAD_LEN_SHIFT    0
1258 #define ISCSI_UHQE_LOCAL_COMP_MASK          0x1
1259 #define ISCSI_UHQE_LOCAL_COMP_SHIFT         20
1260 #define ISCSI_UHQE_TOGGLE_BIT_MASK          0x1
1261 #define ISCSI_UHQE_TOGGLE_BIT_SHIFT         21
1262 #define ISCSI_UHQE_PURE_PAYLOAD_MASK        0x1
1263 #define ISCSI_UHQE_PURE_PAYLOAD_SHIFT       22
1264 #define ISCSI_UHQE_LOGIN_RESPONSE_PDU_MASK  0x1
1265 #define ISCSI_UHQE_LOGIN_RESPONSE_PDU_SHIFT 23
1266 #define ISCSI_UHQE_TASK_ID_HI_MASK          0xFF
1267 #define ISCSI_UHQE_TASK_ID_HI_SHIFT         24
1268 	__le32 reg2;
1269 #define ISCSI_UHQE_BUFFER_OFFSET_MASK       0xFFFFFF
1270 #define ISCSI_UHQE_BUFFER_OFFSET_SHIFT      0
1271 #define ISCSI_UHQE_TASK_ID_LO_MASK          0xFF
1272 #define ISCSI_UHQE_TASK_ID_LO_SHIFT         24
1273 };
1274 
1275 struct iscsi_wqe_field {
1276 	__le32 contlen_cdbsize_field;
1277 #define ISCSI_WQE_FIELD_CONT_LEN_MASK  0xFFFFFF
1278 #define ISCSI_WQE_FIELD_CONT_LEN_SHIFT 0
1279 #define ISCSI_WQE_FIELD_CDB_SIZE_MASK  0xFF
1280 #define ISCSI_WQE_FIELD_CDB_SIZE_SHIFT 24
1281 };
1282 
1283 union iscsi_wqe_field_union {
1284 	struct iscsi_wqe_field cont_field;
1285 	__le32 prev_tid;
1286 };
1287 
1288 struct iscsi_wqe {
1289 	__le16 task_id;
1290 	u8 flags;
1291 #define ISCSI_WQE_WQE_TYPE_MASK        0x7
1292 #define ISCSI_WQE_WQE_TYPE_SHIFT       0
1293 #define ISCSI_WQE_NUM_FAST_SGES_MASK   0x7
1294 #define ISCSI_WQE_NUM_FAST_SGES_SHIFT  3
1295 #define ISCSI_WQE_PTU_INVALIDATE_MASK  0x1
1296 #define ISCSI_WQE_PTU_INVALIDATE_SHIFT 6
1297 #define ISCSI_WQE_RESPONSE_MASK        0x1
1298 #define ISCSI_WQE_RESPONSE_SHIFT       7
1299 	struct iscsi_dif_flags prot_flags;
1300 	union iscsi_wqe_field_union cont_prevtid_union;
1301 };
1302 
1303 enum iscsi_wqe_type {
1304 	ISCSI_WQE_TYPE_NORMAL,
1305 	ISCSI_WQE_TYPE_TASK_CLEANUP,
1306 	ISCSI_WQE_TYPE_MIDDLE_PATH,
1307 	ISCSI_WQE_TYPE_LOGIN,
1308 	ISCSI_WQE_TYPE_FIRST_R2T_CONT,
1309 	ISCSI_WQE_TYPE_NONFIRST_R2T_CONT,
1310 	ISCSI_WQE_TYPE_RESPONSE,
1311 	MAX_ISCSI_WQE_TYPE
1312 };
1313 
1314 struct iscsi_xhqe {
1315 	union iscsi_ttt_txlen_union ttt_or_txlen;
1316 	__le32 exp_stat_sn;
1317 	struct iscsi_dif_flags prot_flags;
1318 	u8 total_ahs_length;
1319 	u8 opcode;
1320 	u8 flags;
1321 #define ISCSI_XHQE_NUM_FAST_SGES_MASK  0x7
1322 #define ISCSI_XHQE_NUM_FAST_SGES_SHIFT 0
1323 #define ISCSI_XHQE_FINAL_MASK          0x1
1324 #define ISCSI_XHQE_FINAL_SHIFT         3
1325 #define ISCSI_XHQE_SUPER_IO_MASK       0x1
1326 #define ISCSI_XHQE_SUPER_IO_SHIFT      4
1327 #define ISCSI_XHQE_STATUS_BIT_MASK     0x1
1328 #define ISCSI_XHQE_STATUS_BIT_SHIFT    5
1329 #define ISCSI_XHQE_RESERVED_MASK       0x3
1330 #define ISCSI_XHQE_RESERVED_SHIFT      6
1331 	union iscsi_seq_num seq_num_union;
1332 	__le16 reserved1;
1333 };
1334 
1335 struct mstorm_iscsi_stats_drv {
1336 	struct regpair iscsi_rx_dropped_pdus_task_not_valid;
1337 };
1338 
1339 struct pstorm_iscsi_stats_drv {
1340 	struct regpair iscsi_tx_bytes_cnt;
1341 	struct regpair iscsi_tx_packet_cnt;
1342 };
1343 
1344 struct tstorm_iscsi_stats_drv {
1345 	struct regpair iscsi_rx_bytes_cnt;
1346 	struct regpair iscsi_rx_packet_cnt;
1347 	struct regpair iscsi_rx_new_ooo_isle_events_cnt;
1348 	__le32 iscsi_cmdq_threshold_cnt;
1349 	__le32 iscsi_rq_threshold_cnt;
1350 	__le32 iscsi_immq_threshold_cnt;
1351 };
1352 
1353 struct ustorm_iscsi_stats_drv {
1354 	struct regpair iscsi_rx_data_pdu_cnt;
1355 	struct regpair iscsi_rx_r2t_pdu_cnt;
1356 	struct regpair iscsi_rx_total_pdu_cnt;
1357 };
1358 
1359 struct xstorm_iscsi_stats_drv {
1360 	struct regpair iscsi_tx_go_to_slow_start_event_cnt;
1361 	struct regpair iscsi_tx_fast_retransmit_event_cnt;
1362 };
1363 
1364 struct ystorm_iscsi_stats_drv {
1365 	struct regpair iscsi_tx_data_pdu_cnt;
1366 	struct regpair iscsi_tx_r2t_pdu_cnt;
1367 	struct regpair iscsi_tx_total_pdu_cnt;
1368 };
1369 
1370 struct iscsi_db_data {
1371 	u8 params;
1372 #define ISCSI_DB_DATA_DEST_MASK         0x3
1373 #define ISCSI_DB_DATA_DEST_SHIFT        0
1374 #define ISCSI_DB_DATA_AGG_CMD_MASK      0x3
1375 #define ISCSI_DB_DATA_AGG_CMD_SHIFT     2
1376 #define ISCSI_DB_DATA_BYPASS_EN_MASK    0x1
1377 #define ISCSI_DB_DATA_BYPASS_EN_SHIFT   4
1378 #define ISCSI_DB_DATA_RESERVED_MASK     0x1
1379 #define ISCSI_DB_DATA_RESERVED_SHIFT    5
1380 #define ISCSI_DB_DATA_AGG_VAL_SEL_MASK  0x3
1381 #define ISCSI_DB_DATA_AGG_VAL_SEL_SHIFT 6
1382 	u8 agg_flags;
1383 	__le16 sq_prod;
1384 };
1385 
1386 struct tstorm_iscsi_task_ag_ctx {
1387 	u8 byte0;
1388 	u8 byte1;
1389 	__le16 word0;
1390 	u8 flags0;
1391 #define TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_MASK  0xF
1392 #define TSTORM_ISCSI_TASK_AG_CTX_NIBBLE0_SHIFT 0
1393 #define TSTORM_ISCSI_TASK_AG_CTX_BIT0_MASK     0x1
1394 #define TSTORM_ISCSI_TASK_AG_CTX_BIT0_SHIFT    4
1395 #define TSTORM_ISCSI_TASK_AG_CTX_BIT1_MASK     0x1
1396 #define TSTORM_ISCSI_TASK_AG_CTX_BIT1_SHIFT    5
1397 #define TSTORM_ISCSI_TASK_AG_CTX_BIT2_MASK     0x1
1398 #define TSTORM_ISCSI_TASK_AG_CTX_BIT2_SHIFT    6
1399 #define TSTORM_ISCSI_TASK_AG_CTX_BIT3_MASK     0x1
1400 #define TSTORM_ISCSI_TASK_AG_CTX_BIT3_SHIFT    7
1401 	u8 flags1;
1402 #define TSTORM_ISCSI_TASK_AG_CTX_BIT4_MASK     0x1
1403 #define TSTORM_ISCSI_TASK_AG_CTX_BIT4_SHIFT    0
1404 #define TSTORM_ISCSI_TASK_AG_CTX_BIT5_MASK     0x1
1405 #define TSTORM_ISCSI_TASK_AG_CTX_BIT5_SHIFT    1
1406 #define TSTORM_ISCSI_TASK_AG_CTX_CF0_MASK      0x3
1407 #define TSTORM_ISCSI_TASK_AG_CTX_CF0_SHIFT     2
1408 #define TSTORM_ISCSI_TASK_AG_CTX_CF1_MASK      0x3
1409 #define TSTORM_ISCSI_TASK_AG_CTX_CF1_SHIFT     4
1410 #define TSTORM_ISCSI_TASK_AG_CTX_CF2_MASK      0x3
1411 #define TSTORM_ISCSI_TASK_AG_CTX_CF2_SHIFT     6
1412 	u8 flags2;
1413 #define TSTORM_ISCSI_TASK_AG_CTX_CF3_MASK      0x3
1414 #define TSTORM_ISCSI_TASK_AG_CTX_CF3_SHIFT     0
1415 #define TSTORM_ISCSI_TASK_AG_CTX_CF4_MASK      0x3
1416 #define TSTORM_ISCSI_TASK_AG_CTX_CF4_SHIFT     2
1417 #define TSTORM_ISCSI_TASK_AG_CTX_CF5_MASK      0x3
1418 #define TSTORM_ISCSI_TASK_AG_CTX_CF5_SHIFT     4
1419 #define TSTORM_ISCSI_TASK_AG_CTX_CF6_MASK      0x3
1420 #define TSTORM_ISCSI_TASK_AG_CTX_CF6_SHIFT     6
1421 	u8 flags3;
1422 #define TSTORM_ISCSI_TASK_AG_CTX_CF7_MASK      0x3
1423 #define TSTORM_ISCSI_TASK_AG_CTX_CF7_SHIFT     0
1424 #define TSTORM_ISCSI_TASK_AG_CTX_CF0EN_MASK    0x1
1425 #define TSTORM_ISCSI_TASK_AG_CTX_CF0EN_SHIFT   2
1426 #define TSTORM_ISCSI_TASK_AG_CTX_CF1EN_MASK    0x1
1427 #define TSTORM_ISCSI_TASK_AG_CTX_CF1EN_SHIFT   3
1428 #define TSTORM_ISCSI_TASK_AG_CTX_CF2EN_MASK    0x1
1429 #define TSTORM_ISCSI_TASK_AG_CTX_CF2EN_SHIFT   4
1430 #define TSTORM_ISCSI_TASK_AG_CTX_CF3EN_MASK    0x1
1431 #define TSTORM_ISCSI_TASK_AG_CTX_CF3EN_SHIFT   5
1432 #define TSTORM_ISCSI_TASK_AG_CTX_CF4EN_MASK    0x1
1433 #define TSTORM_ISCSI_TASK_AG_CTX_CF4EN_SHIFT   6
1434 #define TSTORM_ISCSI_TASK_AG_CTX_CF5EN_MASK    0x1
1435 #define TSTORM_ISCSI_TASK_AG_CTX_CF5EN_SHIFT   7
1436 	u8 flags4;
1437 #define TSTORM_ISCSI_TASK_AG_CTX_CF6EN_MASK    0x1
1438 #define TSTORM_ISCSI_TASK_AG_CTX_CF6EN_SHIFT   0
1439 #define TSTORM_ISCSI_TASK_AG_CTX_CF7EN_MASK    0x1
1440 #define TSTORM_ISCSI_TASK_AG_CTX_CF7EN_SHIFT   1
1441 #define TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_MASK  0x1
1442 #define TSTORM_ISCSI_TASK_AG_CTX_RULE0EN_SHIFT 2
1443 #define TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_MASK  0x1
1444 #define TSTORM_ISCSI_TASK_AG_CTX_RULE1EN_SHIFT 3
1445 #define TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_MASK  0x1
1446 #define TSTORM_ISCSI_TASK_AG_CTX_RULE2EN_SHIFT 4
1447 #define TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_MASK  0x1
1448 #define TSTORM_ISCSI_TASK_AG_CTX_RULE3EN_SHIFT 5
1449 #define TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_MASK  0x1
1450 #define TSTORM_ISCSI_TASK_AG_CTX_RULE4EN_SHIFT 6
1451 #define TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_MASK  0x1
1452 #define TSTORM_ISCSI_TASK_AG_CTX_RULE5EN_SHIFT 7
1453 	u8 byte2;
1454 	__le16 word1;
1455 	__le32 reg0;
1456 	u8 byte3;
1457 	u8 byte4;
1458 	__le16 word2;
1459 	__le16 word3;
1460 	__le16 word4;
1461 	__le32 reg1;
1462 	__le32 reg2;
1463 };
1464 
1465 #endif /* __ISCSI_COMMON__ */
1466