1 /*
2  * Copyright 2014-2017 Cavium, Inc.
3  * The contents of this file are subject to the terms of the Common Development
4  * and Distribution License, v.1,  (the "License").
5  *
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the License at available
9  * at http://opensource.org/licenses/CDDL-1.0
10  *
11  * See the License for the specific language governing permissions and
12  * limitations under the License.
13  */
14 
15 
16 #ifndef _l5_defs_h_
17 #define _l5_defs_h_
18 
19 #include "5706_reg.h"
20 #include "l2_defs.h"
21 #include "l2_ftq.h"
22 
23 /* data structure defs: */
24 
25 typedef struct ddp_tagged_msg_header
26 {
27     u16_t   mpa_length;
28 	u16_t   control;
29     u32_t   stag;
30 	u64_t   to;
31 } ddp_tagged_msg_header_t;
32 
33 typedef struct ddp_untagged_msg_header
34 {
35     u16_t   mpa_length;
36 	u16_t   control;
37 	union
38 	{
39         u32_t   reserved;
40         u32_t   invalidated_stag;
41     } rdmap_rsvd;
42 	u32_t   queue_number;
43 	u32_t   msn;
44 	u32_t   mo;
45 } ddp_untagged_msg_header_t;
46 
47 typedef struct rdmap_read_request_header
48 {
49     ddp_untagged_msg_header_t  ddp_header;
50 	u32_t  sink_stag;
51 	u64_t  sink_to;
52 	u32_t  length;
53 	u32_t  source_stag;
54 	u64_t  source_to;
55 } rdmap_read_request_header_t;
56 
57 
58 /****************************************************************************
59  * L5 Window Reference Count Table Entry
60  ****************************************************************************/
61 
62 typedef struct l5_window_ref_cnt_table_entry
63 {
64     u8_t wrcte_pidx;    /* Incremented by CP whenever a SQ work request or
65                            incoming RDMA Read Request is processed that
66                            references the associated window for source data. */
67 
68     u8_t wrcte_cidx;    /* Incremented by COM whenever an entry is removed from
69                            the command queue where the associated window is
70                            the data source. */
71 
72 } l5_window_ref_cnt_table_entry_t;
73 
74 
75 /* constants and macros: */
76 
77 #define   RDMA_WRITE_CMD      0
78 #define   RDMA_READ_REQ_CMD   1
79 #define   RDMA_READ_RSP_CMD   2
80 #define   RDMA_SEND_CMD       3
81 #define   RDMA_SEND_W_EVENT   4
82 
83 #define   RDMA_MPA_HDR_LENGTH            2
84 #define   RDMA_MPA_CRC_LENGTH            4
85 #define   RDMA_MPA_MARKER_SIZE           4
86 
87 #define   RDMA_DDP_TAGGED_HDR_LENGTH     14
88 #define   RDMA_DDP_UNTAGGED_HDR_LENGTH   18
89 
90 #define   RDMA_READ_REQ_MSG_LENGTH       28
91 
92 #define   RDMA_WRITE_HDR_LENGTH          (RDMA_MPA_HDR_LENGTH + RDMA_DDP_TAGGED_HDR_LENGTH)
93 #define   RDMA_SEND_MSG_HDR_LENGTH       (RDMA_MPA_HDR_LENGTH + RDMA_DDP_UNTAGGED_HDR_LENGTH)
94 #define   RDMA_READ_REQ_HDR_LENGTH       (RDMA_MPA_HDR_LENGTH + RDMA_DDP_UNTAGGED_HDR_LENGTH + RDMA_READ_REQ_MSG_LENGTH)
95 #define   RDMA_READ_RESP_HDR_LENGTH      (RDMA_MPA_HDR_LENGTH + RDMA_DDP_TAGGED_HDR_LENGTH)
96 
97 #define   RDMA_STANDARD_L5_OVERHEAD (RDMA_STANDARD_HDR_LENGTH + RDMA_MPA_HDR_LENGTH + RDMA_MPA_CRC_LENGTH)
98 #define   RDMA_READ_REQ_L5_OVERHEAD (RDMA_READ_REQ_HDR_LENGTH + RDMA_MPA_HDR_LENGTH + RDMA_MPA_CRC_LENGTH)
99 
100 #define   RDMA_SEND_QUEUE_NUMBER    0x00000000
101 #define   RDMA_READ_QUEUE_NUMBER    0x00000001
102 #define   RDMA_TERM_QUEUE_NUMBER    0x00000002
103 
104 #define   RDMA_MPA_MARKER_INTERVAL       512                                                /* MPA marker interval */
105 #define   RDMA_DATA_MARKER_INTERVAL      (RDMA_MPA_MARKER_INTERVAL - RDMA_MPA_MARKER_SIZE)  /* Data between markers */
106 #define   RDMA_MPA_MARKER_INTERVAL_SHIFT   9
107 
108 #define   DDP_CTRL_RDMA_WRITE           0x8000
109 #define   DDP_CTRL_RDMA_READ_REQ        0x0001
110 #define   DDP_CTRL_RDMA_READ_RSP        0x8002
111 #define   DDP_CTRL_SEND_MSG             0x0003
112 #define   DDP_CTRL_SEND_INV_MSG         0x0004
113 #define   DDP_CTRL_SEND_EVT_MSG         0x0005
114 #define   DDP_CTRL_SEND_INV_EVT_MSG     0x0006
115 
116 #define   DDP_CTRL_L_BIT                0x4000
117 #define   DDP_CTRL_T_BIT                0x8000
118 
119 #define   DDP_CTRL_DDP_VERSION_MASK     0x0300
120 #define   DDP_CTRL_DDP_VERSION          0x0000
121 
122 #define   DDP_TAGGED_HDR_LENGTH         14
123 #define   DDP_UNTAGGED_HDR_LENGTH       18
124 
125 #define   DDP_QN_SEND_MESSAGE_QUEUE       0x00000000
126 #define   DDP_QN_RDMA_READ_REQUEST_QUEUE  0x00000001
127 #define   DDP_QN_RDMA_TERMINATE_QUEUE     0x00000002
128 
129 #define   DDP_MAX_UNTAGGED_QUEUES         0x00000003
130 
131 #define   RDMAP_CTRL_RDMAP_VERSION_MASK   0x00C0
132 #define   RDMAP_CTRL_RDMAP_VERSION        0x0000
133 
134 #define   RDMAP_CTRL_RDMAP_OPCODE_MASK    0x0F
135 
136 #define   RDMAP_CTRL_RDMA_WRITE           0x00
137 #define   RDMAP_CTRL_RDMA_READ_REQ        0x01
138 #define   RDMAP_CTRL_RDMA_READ_RSP        0x02
139 #define   RDMAP_CTRL_SEND_MSG             0x03
140 #define   RDMAP_CTRL_SEND_W_INV_MSG       0x04
141 #define   RDMAP_CTRL_SEND_W_EVT_MSG       0x05
142 #define   RDMAP_CTRL_SEND_W_INV_EVT_MSG   0x06
143 
144 #define   L5_MEMORY_REGION_STAG_BIT       0x00800000
145 #define   L5_STAG_INDEX_MASK              0x00FFFFFF
146 #define   L5_STAG_KEY_MASK                0xFF000000
147 #define   L5_MIN_HOST_PAGE_SIZE           0x100    /* 256 bytes */
148 #define   L5_WINDOW_CACHE_KEY_BASE        0x2000
149 
150 
151 /* define context memory-related constants for things
152    like STag validation: */
153 
154 #define   L5_RX_VCID_SIZE                 128
155 
156 
157 /* L5 RxP protocol errors: */
158 
159 #define   RX_PROTO_ERR_MPA_LEN_NON_MULT_FOUR     0x00000001
160 #define   RX_PROTO_ERR_INVALID_MPA_LEN           0x00000002
161 #define   RX_PROTO_ERR_INVALID_MARKER            0x00000003
162 #define   RX_PROTO_ERR_INVALID_TAGGED_OPCODE     0x00000004
163 #define   RX_PROTO_ERR_INVALID_UNTAGGED_OPCODE   0x00000005
164 
165 #define   RX_PROTO_ERR_STAG_INVALID              0x00000006
166 #define   RX_PROTO_ERR_STAG_BASE_BOUNDS          0x00000007
167 #define   RX_PROTO_ERR_STAG_ACCESS_RIGHTS        0x00000008
168 #define   RX_PROTO_ERR_STAG_PROTECTION           0x00000009
169 #define   RX_PROTO_ERR_STAG_TO_WRAP              0x0000000A
170 
171 #define   RX_PROTO_ERR_INVALID_DDP_VERSION       0x0000000B
172 #define   RX_PROTO_ERR_INVALID_RDMAP_VERSION     0x0000000C
173 #define   RX_PROTO_ERR_INVALID_DDP_QUEUE_NUMBER  0x0000000D
174 #define   RX_PROTO_ERR_IRD_EXCEEDED              0x0000000E
175 
176 #define   RX_PROTO_ERR_MSN_GAP                   0x0000000F
177 #define   RX_PROTO_ERR_MSN_RANGE                 0x00000010
178 
179 #define   RX_PROTO_ERR_NO_RCV_BUFF_AVAIL         0x00000011
180 #define   RX_PROTO_ERR_RCV_BASE_BOUNDS           0x00000012
181 #define   RX_PROTO_ERR_RCV_MO_WRAP               0x00000013
182 
183 #define   RX_PROTO_ERR_INVALID_MPA_CRC           0x00000014
184 
185 #define   RX_PROTO_ERR_NO_RCV_BUFF_POSTED        0x00000080
186 
187 #define   RX_PROTO_ERR_TERM_MSG_RECEIVED         0x000000FF
188 
189 /* L5 */
190 #define L5_TCP_MAX_DACK		2
191 
192 /* Iscsi */
193 
194 //#define THIN_CONN_ESTAB
195 
196 #define RDMA_CONFIG_CRC_OFFSET_SHIFT	18
197 
198 #define VCID_SIZE          128
199 #define VCID_SHIFT         7
200 
201 #define CID_ENC(_idx)      ((_idx)<<VCID_SHIFT)
202 
203 #define CID_ISCSI_CONF_PARAMS CID_ENC(46) // context ID of iSCSI configuration params
204 
205 #define	MAX_RQ_BUF_SIZE			256
206 #define ISCSI_CRC_SIZE			4
207 #define ISCSI_CRC_SIZE_LOG2		2
208 #define ISCSI_HDR_SIZE			48
209 #define ISCSI_CRC_RESULT		0x1c2d19ed
210 
211 #define ISCSI_CRC_TABLE_SIZE 256
212 
213 #define ISCSI_PROCESS_ERROR			(-1)
214 #define ISCSI_PROCESS_WARNING		(-2)
215 #define ISCSI_SILENT_DROP			(-3)
216 
217 /* Completion types */
218 #define ISCSI_COMP_TYPE_MP			(0<<0)
219 #define ISCSI_COMP_TYPE_FP			(1<<0)
220 
221 /* Command types for placement in RV2P */
222 #define ISCSI_PLACE_TYPE_RQ			(0<<0)
223 #define ISCSI_PLACE_TYPE_SGL		(1<<0)
224 
225 /* RV2P iscsi placement opcodes */
226 #define GENERIC_OPCODE_RV2PPQ_VALUE_ISCSI_SGL_PLACE	(22<<0)
227 #define GENERIC_OPCODE_RV2PPQ_VALUE_ISCSI_RQ_PLACE 	(23<<0)
228 #define GENERIC_OPCODE_RV2PPQ_VALUE_ISCSI_RQ_FLUSH	(24<<0)
229 #define GENERIC_OPCODE_RV2PPQ_VALUE_ISCSI_SGL_FLUSH	(25<<0)
230 
231 /* COM L5 (iSCSI/RDMA) opaque types */
232 #define L5_OPAQUE_TCP_ACK_TYPE			(0x80)
233 #define L5_OPAQUE_TCP_ERROR_TYPE		(0x81)
234 
235 /* COM iSCSI opaque types */
236 #define ISCSI_OPAQUE_COMPLETION_TYPE	(0x82)
237 #define ISCSI_OPAQUE_FREE_MBUF_TYPE		(0x83)
238 #define ISCSI_OPAQUE_ERROR_TYPE			(0x84)
239 #define ISCSI_OPAQUE_FREE_CU_MBUF_TYPE  (0x85)
240 
241 #define HDR_ISCSI_OPCODE			(0x3f<<0)
242 
243 #define ISCSI_INVALID_VALUE			(0xffffffff)
244 
245 #define TCP_L5CM_MAX_RETRIES 3
246 
247 typedef struct iscsi_ctx_offsets
248 {
249     u32_t task_offset;     // offset of the task array
250     u32_t r2tq_offset;     // offset of R2TQ section
251 
252     u32_t max_num_of_tasks;     // maximal number of pending tasks
253     u32_t max_num_of_ccells;    // maximal number of ccells
254 } iscsi_ctx_offsets_t;
255 
256 
257 /*
258  *  rv2ppq_iscsi_sgl_place definition
259  */
260 typedef struct rv2ppq_iscsi_sgl_place
261 {
262 	u32_t	iscsi_sgl_place_cid;
263 	u32_t 	iscsi_sgl_place_mbuf_cluster;
264 	u16_t 	iscsi_sgl_place_operand_flags;
265 		#define ISCSI_PLACE_OPERAND_FLAGS_LAST_PKT		(1<<7)
266         #define ISCSI_PLACE_OPERAND_FLAGS_FLUSH			(1<<11)
267 		#define ISCSI_PLACE_OPERAND_FLAGS_USE_SEED		(1<<12)
268 		#define ISCSI_PLACE_OPERAND_FLAGS_DIGEST_EN		(1<<13)
269 		#define ISCSI_PLACE_OPERAND_FLAGS_COMPLETE		(1<<14)
270         /* overloading bit 14 */
271         #define ISCSI_PLACE_OPERAND_FLAGS_CU_PKT        (1<<14)
272 		#define ISCSI_PLACE_OPERAND_FLAGS_FREE_MBUF		(1<<15)
273 
274 	u8_t	iscsi_sgl_place_tcp_flags;
275 	u8_t	iscsi_sgl_place_opcode;
276     u16_t 	iscsi_sgl_place_offset; //cut in COM
277 	u16_t 	iscsi_sgl_place_length; //cut in COM
278 	u16_t 	iscsi_sgl_place_ctx_offset_to_pad_baddr;
279 	u16_t 	iscsi_sgl_place_num_pad_bytes;
280 	u32_t	iscsi_sgl_place_reserved1;
281 	u32_t	iscsi_sgl_place_tcp_ack_sn;
282 	u32_t	iscsi_sgl_place_reserved2[2]; //cut in COM
283 	u32_t	iscsi_sgl_place_crc_seed;
284 		#define ISCSI_PLACE_CRC_SEED_VAL		(0xFFFFFFFF)
285 
286 	u32_t	iscsi_sgl_place_task_cache_key;
287 	u32_t	iscsi_sgl_place_task_cid;
288 	u32_t	iscsi_sgl_place_rdma_action;
289 } rv2ppq_iscsi_sgl_place_t;
290 
291 /*
292  *  rv2ppq_iscsi_rq_place definition
293  */
294 typedef struct rv2ppq_iscsi_rq_place
295 {
296 	u32_t	iscsi_rq_place_cid;
297 	u32_t	iscsi_rq_place_mbuf_cluster;
298 	u16_t	iscsi_rq_place_operand_flags;
299 		#define ISCSI_PLACE_OPERAND_FLAGS_PAGE_SIZE_SHIFT	(8)
300 		#define ISCSI_PLACE_OPERAND_FLAGS_PAGE_SIZE_MASK	(0xf<<8)
301 
302 	u8_t	iscsi_rq_place_tcp_flags;
303 	u8_t	iscsi_rq_place_opcode;
304 	u16_t	iscsi_rq_place_offset; //cut in COM
305 	u16_t	iscsi_rq_place_length; //cut in COM
306 	u16_t	iscsi_rq_place_ctx_offset_to_pad_baddr;
307 	u16_t 	iscsi_rq_place_num_pad_bytes;
308     u32_t	iscsi_rq_place_first_page_offset;
309 	u32_t	iscsi_rq_place_tcp_ack_sn;
310 	u32_t	iscsi_rq_place_page_table_base_addr_h; //cut in COM
311 	u32_t	iscsi_rq_place_page_table_base_addr_l; //cut in COM
312 	u32_t	iscsi_rq_place_crc_seed;
313 	u32_t	iscsi_rq_place_rbdc_key;
314     u32_t	iscsi_rq_place_rq_buffer_offset;
315 	u32_t	iscsi_rq_place_rdma_action;
316 } rv2ppq_iscsi_rq_place_t;
317 
318 /*
319  *  rv2ppq_iscsi_sgl_flush definition
320  */
321 typedef struct rv2ppq_iscsi_sgl_flush
322 {
323 	u32_t	iscsi_sgl_flush_task_cid;
324 	u32_t 	iscsi_sgl_flush_unused_a;
325 	u16_t	iscsi_sgl_flush_unsused_b;
326 	u8_t	iscsi_sgl_flush_unsused_c;
327 	u8_t	iscsi_sgl_flush_opcode;
328 	u32_t	iscsi_sgl_flush_unsused_d[9];
329 } rv2ppq_iscsi_sgl_flush_t;
330 
331 /*
332  *  rv2ppq_iscsi_rq_flush definition
333  */
334 typedef struct rv2ppq_iscsi_rq_flush
335 {
336 	u32_t	iscsi_rq_flush_cid;
337 	u32_t	iscsi_rq_flush_unsused_a;
338 	u16_t	iscsi_rq_flush_unsused_b;
339 	u8_t	iscsi_rq_flush_unsused_c;
340 	u8_t	iscsi_rq_flush_opcode;
341 	u32_t	iscsi_rq_flush_unsused_d;
342 	u16_t	iscsi_rq_flush_rbdc_key;
343 	u16_t	iscsi_rq_flush_unsused_e;
344 	u32_t	iscsi_rq_flush_unsused_f[7];
345 	u32_t	iscsi_rq_flush_rdma_spec;
346 } rv2ppq_iscsi_rq_flush_t;
347 
348 /*
349  *  comq_iscsi_sgl_place definition
350  */
351 typedef struct comq_iscsi_sgl_place
352 {
353 	u32_t	cid;
354 	u32_t	mbuf_cluster;
355 	u16_t	operand_flags;
356 	u8_t	tcp_flags;
357 	u8_t	opcode;
358 	u16_t   ctx_offset_to_pad_baddr;
359 	u16_t	num_pad_bytes;
360 	u32_t   unused;
361 	u32_t   tcp_ack_sn;
362 	u32_t   crc_result;
363 	u32_t   reserved;
364 	u32_t   task_cid;
365 
366 } comq_iscsi_sgl_place_t;
367 
368 typedef struct itt32_fields
369 {
370 	u32_t   task_rsrv	: 16;
371 	u32_t 	task_type 	: 2;
372 	u32_t   task_idx 	: 14;
373 
374 } itt32_fields_t;
375 
376 typedef union itt32_union
377 {
378     itt32_fields_t 	fields;
379     u32_t           itt32;
380 
381 } itt32_union_t;
382 
383 /*
384  *  rv2ppq_opaque_iscsi definition
385  */
386 typedef struct rv2ppq_opaque_iscsi_comp_msg_a
387 {
388 	u32_t	cid;
389 	u8_t	unused_a;
390 	u8_t	iscsi_err_code;
391     u16_t	hdr_itt;
392 	u16_t	opaque_flags_opcode;
393 	u8_t	tcp_flags;				// Only 8 bits relevant
394 	u8_t	opcode;
395 	u16_t 	o_iscsi_unused_b[2];
396 	u32_t	hdr_dword0;
397 	u32_t	hdr_dword1;
398 	u32_t	tcp_ack_sn;
399     u32_t 	o_iscsi_unused_c[2];
400 	u32_t	hdr_exp_cmd_sn;
401 	u32_t	hdr_max_cmd_sn;
402 	u32_t	hdr_res_count;
403 } rv2ppq_opaque_iscsi_comp_msg_a_t;
404 
405 typedef struct rv2ppq_opaque_iscsi_comp_msg_b
406 {
407 	u32_t	cid;
408 	u32_t	reserved0;
409     u16_t	opaque_flags_opcode;
410 	u8_t	reserved1;
411 	u8_t	opcode;
412 	u16_t 	o_iscsi_unused_a[2];
413     u32_t	hdr_dword2;
414 	u32_t	hdr_dword3;
415 	u32_t	hdr_ttt;
416     u32_t 	o_iscsi_unused_b[2];
417 	u32_t	hdr_stat_sn;
418 	u32_t	hdr_dword9;
419 	u32_t	hdr_dword10;
420 } rv2ppq_opaque_iscsi_comp_msg_b_t;
421 
422 typedef struct rv2ppq_opaque_iscsi_free_mbuf
423 {
424 	u32_t	cid;
425 	u32_t 	mbuf_cluster;
426 	u16_t	opaque_flags_opcode;
427 	u8_t	rsrv;
428 	u8_t	opcode;
429 	u16_t 	o_iscsi_unused_a[2];
430 	u16_t 	o_iscsi_allowed16[6];
431 	u32_t 	o_iscsi_unused_b[2];
432 	u32_t 	o_iscsi_allowed32[3];
433 } rv2ppq_opaque_iscsi_free_mbuf_t;
434 
435 typedef union rv2ppq_opaque_iscsi
436 {
437 	rv2ppq_opaque_iscsi_comp_msg_a_t	rv2p_o_comp_msg_a;
438     rv2ppq_opaque_iscsi_comp_msg_b_t	rv2p_o_comp_msg_b;
439 	rv2ppq_opaque_iscsi_free_mbuf_t		rv2p_o_free_mbuf;
440 
441 } rv2ppq_opaque_iscsi_t;
442 
443 // Used for TCP messages from RXP to COM (Mutual to RDMA and iSCSI)
444 typedef struct rv2ppq_opaque_l5
445 {
446 	u32_t	cid;
447 	u32_t 	o_l5_allowed32_a;
448 	u16_t	opaque_flags_opcode;
449 	u8_t	tcp_flags;
450 	u8_t	opcode;
451 	u16_t 	o_l5_unused_a[2];
452 	u16_t 	o_l5_allowed16[4];
453 	u32_t	tcp_ack_sn;
454 	u32_t 	o_l5_unused_b[2];
455 	u32_t 	o_l5_allowed32_b[3];
456 } rv2ppq_opaque_l5_t;
457 
458 /*
459  *  comq_opaque_iscsi definition
460  */
461 typedef struct comq_opaque_iscsi_comp_msg_a
462 {
463 	u32_t	cid;
464 	u8_t	unused;
465 	u8_t	iscsi_err_code;
466     u16_t	hdr_itt;
467 	u16_t	opaque_flags_opcode;
468 	u8_t	tcp_flags;				// Only 8 bits relevant
469 	u8_t	opcode;
470     u32_t	hdr_dword0;
471 	u32_t	hdr_dword1;
472 	u32_t	tcp_ack_sn;
473 	u32_t	hdr_exp_cmd_sn;
474 	u32_t	hdr_max_cmd_sn;
475 	u32_t	hdr_res_count;
476 
477 } comq_opaque_iscsi_comp_msg_a_t;
478 
479 typedef struct comq_opaque_iscsi_comp_msg_b
480 {
481 	u32_t	cid;
482 	u32_t	reserved0;
483 	u16_t	opaque_flags_opcode;
484 	u8_t	reserved1;
485 	u8_t	opcode;
486 	u32_t	hdr_dword2;
487 	u32_t	hdr_dword3;
488     u32_t	hdr_ttt;
489 	u32_t	hdr_stat_sn;
490 	u32_t	hdr_dword9;
491 	u32_t	hdr_dword10;
492 
493 } comq_opaque_iscsi_comp_msg_b_t;
494 
495 typedef union comq_opaque_iscsi
496 {
497 	comq_opaque_iscsi_comp_msg_a_t 	com_o_comp_msg_a;
498 	comq_opaque_iscsi_comp_msg_b_t 	com_o_comp_msg_b;
499 
500 } comq_opaque_iscsi_t;
501 
502 // TCP opaque message for L5 (no data)
503 typedef struct comq_opaque_l5
504 {
505 	u32_t	cid;
506 	u32_t 	o_l5_allowed32_a;
507 	u16_t	opaque_flags_opcode;
508 	u8_t	tcp_flags;
509 	u8_t	opcode;
510 	u16_t 	o_l5_allowed16[4];
511 	u32_t	tcp_ack_sn;
512     u32_t 	o_l5_allowed32_b[3];
513 
514 } comq_opaque_l5_t;
515 
516 typedef struct rv2ppq_opaque_iscsi_kcqe_comp
517 {
518     u32_t cid;
519     u32_t iscsi_conn_id;
520     u16_t opaque_flags_opcode;
521     u8_t reserved1;
522     u8_t opcode;
523     u16_t unused_a[2];
524 	u32_t reserved2[3];
525     u32_t unused_b[2];
526 	u32_t status_code;
527     u32_t reserved3[2];
528 } rv2ppq_opaque_iscsi_kcqe_comp_t;
529 
530 typedef struct comq_opaque_iscsi_kcqe_comp
531 {
532 	u32_t cid;
533 	u32_t iscsi_conn_id;
534 	u16_t opaque_flags_opcode;
535 	u8_t reserved1;
536 	u8_t opcode;
537 	u32_t reserved2[3];
538 	u32_t status_code;
539 	u32_t reserved3[2];
540 
541 } comq_opaque_iscsi_kcqe_comp_t;
542 
543 // L5 context manager parameters context struct
544 typedef struct l5_cm_fixed_connect_context
545 {
546     u32_t fixed_seed /* 32 bits of secret passed by the driver for port 0 */;
547     u32_t rsrv[31] /*  */;
548 
549 } l5_cm_fixed_connect_context_t;
550 
551 // TCP general message for L5
552 typedef struct comq_l5_tcp
553 {
554 	u32_t	cid;
555 	u32_t	reserved0;
556 	u16_t	reserved1;
557 	u8_t	tcp_flags;
558 		#define L5_FLAGS_TCP_SMALL_WIN		(1<<0)
559 		#define L5_FLAGS_TCP_SILENT_DROP	(1<<1)
560 		#define L5_FLAGS_TCP_RELEASE_MBUF	(1<<2)
561 		#define L5_FLAGS_TCP_ACK_PROCESS	(1<<3)
562 		#define L5_FLAGS_TCP_PURE_ACK		(1<<4) // No payload and no window update
563 		#define L5_FLAGS_TCP_IP_FRAG		(1<<5)
564 		#define L5_FLAGS_TCP_IP_OPTION		(1<<6)
565 		#define L5_FLAGS_TCP_URGENT_FLAG	(1<<7)
566 
567 	u8_t	reserved2;
568     u32_t	reserved3[2];
569 	u32_t	tcp_ack_sn;
570 	u32_t	reserved4[3];
571 
572 } comq_l5_tcp_t;
573 
574 
575 
576 
577 /*
578  *  rv2ppq_l5_place definition
579  */
580 typedef struct rv2ppq_l5_place_b
581 {
582     u32_t l5_place_cid;
583     u32_t l5_place_mbuf_cluster;
584     u16_t l5_place_operand_flags;
585         #define L5_PLACE_OPERAND_FLAGS_MARKERS_PRESENT      (1<<0)
586         #define L5_PLACE_OPERAND_FLAGS_NEW_ISLAND           (1<<1)
587         #define L5_PLACE_OPERAND_FLAGS_TCP_HOLE_CLOSED      (1<<2)
588         #define L5_PLACE_OPERAND_FLAGS_IN_ORDER             (1<<3)
589         #define L5_PLACE_OPERAND_FLAGS_LBIT_STATUS          (1<<4)
590         #define L5_PLACE_OPERAND_FLAGS_FLUSH                (1<<5)
591         #define L5_PLACE_OPERAND_FLAGS_PG_SZ                (0xf<<8)
592             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_256        (0<<8)
593             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_512        (1<<8)
594             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_1K         (2<<8)
595             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_2K         (3<<8)
596             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_4K         (4<<8)
597             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_8K         (5<<8)
598             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_16K        (6<<8)
599             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_32K        (7<<8)
600             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_64K        (8<<8)
601             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_128K       (9<<8)
602             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_256K       (10<<8)
603             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_512K       (11<<8)
604             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_1M         (12<<8)
605             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_2M         (13<<8)
606             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_4M         (14<<8)
607             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_8M         (15<<8)
608 
609     u8_t l5_place_knum;
610     u8_t l5_place_opcode;
611     u16_t l5_place_offset;
612     u16_t l5_place_length;
613     u16_t l5_place_offset_to_first_marker;
614     u16_t l5_place_rbdc_key;
615     u32_t l5_place_first_page_offset;
616     u16_t l5_place_l5_header_length;
617     u16_t l5_place_l5_cmd_type;
618         #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE              (0xf<<0)
619             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_UNDEFINED  (0<<0)
620             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND     (1<<0)
621             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND_W_SE  (2<<0)
622             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND_W_INV  (3<<0)
623             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND_W_SE_INV  (4<<0)
624             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_WRITE  (5<<0)
625             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_READ  (6<<0)
626             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_READ_W_INV  (7<<0)
627             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_WINDOW_BIND  (8<<0)
628             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_FAST_REGISTER  (9<<0)
629             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_LOCAL_INVALIDATE  (10<<0)
630             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_READ_RESPONSE  (11<<0)
631             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_TCP_ACK  (12<<0)
632 
633     u32_t l5_place_page_table_base_addr_h;
634     u32_t l5_place_page_table_base_addr_l;
635     u32_t l5_place_tcp_ack_seq;
636     u32_t l5_place_sink_bfr_target_offset_h;
637     u32_t l5_place_sink_bfr_target_offset_l;
638     u8_t l5_place_rdma_action;  // no need to be cleared by RXP, RV2P will do it
639     u8_t l5_place_cs16_pkt_len;
640     u16_t l5_place_cs16;
641 } rv2ppq_l5_place_b_t;
642 
643 typedef struct rv2ppq_l5_place_l
644 {
645     u32_t l5_place_cid;
646     u32_t l5_place_mbuf_cluster;
647     u8_t l5_place_opcode;
648     u8_t l5_place_knum;
649     u16_t l5_place_operand_flags;
650     u16_t l5_place_length;
651     u16_t l5_place_offset;
652     u16_t l5_place_rbdc_key;
653     u16_t l5_place_offset_to_first_marker;
654     u32_t l5_place_first_page_offset;
655     u16_t l5_place_l5_cmd_type;
656     u16_t l5_place_l5_header_length;
657     u32_t l5_place_page_table_base_addr_h;
658     u32_t l5_place_page_table_base_addr_l;
659     u32_t l5_place_tcp_ack_seq;
660     u32_t l5_place_sink_bfr_target_offset_h;
661     u32_t l5_place_sink_bfr_target_offset_l;
662     u16_t l5_place_cs16;
663     u8_t l5_place_cs16_pkt_len;
664     u8_t l5_place_rdma_action;  // no need to be cleared by RXP, RV2P will do it
665 } rv2ppq_l5_place_l_t;
666 
667 #if defined(LITTLE_ENDIAN)
668     typedef rv2ppq_l5_place_l_t rv2ppq_l5_place_t;
669 #elif defined(BIG_ENDIAN)
670     typedef rv2ppq_l5_place_b_t rv2ppq_l5_place_t;
671 #endif
672 
673 
674 /*
675  *  rv2ppq_l5_flush definition
676  */
677 typedef struct rv2ppq_l5_flush_b
678 {
679     u32_t unused_0[2];
680     u16_t unused_1;
681     u8_t unused_2;
682     u8_t l5_flush_opcode;
683     u32_t unused_3;
684     u16_t l5_flush_rbdc_key;
685     u16_t unused_4;
686     u32_t unused_5[7];
687     u8_t l5_flush_rdma_action;  // no need to be cleared by RXP, RV2P will do it
688     u8_t l5_flush_cs16_pkt_len;
689     u16_t l5_flush_cs16;
690 } rv2ppq_l5_flush_b_t;
691 
692 typedef struct rv2ppq_l5_flush_l
693 {
694     u32_t unused_0[2];
695     u8_t l5_flush_opcode;
696     u8_t unused_2;
697     u16_t unused_1;
698     u32_t unused_3;
699     u16_t unused_4;
700     u16_t l5_flush_rbdc_key;
701     u32_t unused_5[7];
702     u16_t l5_flush_cs16;
703     u8_t l5_flush_cs16_pkt_len;
704     u8_t l5_flush_rdma_action;  // no need to be cleared by RXP, RV2P will do it
705 } rv2ppq_l5_flush_l_t;
706 
707 #if defined(LITTLE_ENDIAN)
708     typedef rv2ppq_l5_flush_l_t rv2ppq_l5_flush_t;
709 #elif defined(BIG_ENDIAN)
710     typedef rv2ppq_l5_flush_b_t rv2ppq_l5_flush_t;
711 #endif
712 
713 
714 
715 /*
716  *  comq_l5_place definition
717  */
718 typedef struct comq_l5_place_b
719 {
720     u32_t l5_place_cid;
721     u32_t l5_place_mbuf_cluster;
722     u16_t l5_place_operand_flags;
723         #define L5_PLACE_OPERAND_FLAGS_MARKERS_PRESENT      (1<<0)
724         #define L5_PLACE_OPERAND_FLAGS_NEW_ISLAND           (1<<1)
725         #define L5_PLACE_OPERAND_FLAGS_TCP_HOLE_CLOSED      (1<<2)
726         #define L5_PLACE_OPERAND_FLAGS_IN_ORDER             (1<<3)
727         #define L5_PLACE_OPERAND_FLAGS_LBIT_STATUS          (1<<4)
728         #define L5_PLACE_OPERAND_FLAGS_PG_SZ                (0xf<<8)
729             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_256        (0<<8)
730             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_512        (1<<8)
731             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_1K         (2<<8)
732             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_2K         (3<<8)
733             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_4K         (4<<8)
734             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_8K         (5<<8)
735             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_16K        (6<<8)
736             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_32K        (7<<8)
737             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_64K        (8<<8)
738             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_128K       (9<<8)
739             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_256K       (10<<8)
740             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_512K       (11<<8)
741             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_1M         (12<<8)
742             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_2M         (13<<8)
743             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_4M         (14<<8)
744             #define L5_PLACE_OPERAND_FLAGS_PG_SZ_8M         (15<<8)
745 
746     u8_t l5_place_knum;
747     u8_t l5_place_opcode;
748     u16_t l5_place_offset_to_first_marker;
749     u16_t l5_place_rbdc_key;
750     u32_t l5_place_first_page_offset;
751     u16_t l5_place_l5_header_length;
752     u16_t l5_place_l5_cmd_type;
753         #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE              (0xf<<0)
754             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_UNDEFINED  (0<<0)
755             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND     (1<<0)
756             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND_W_SE  (2<<0)
757             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND_W_INV  (3<<0)
758             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_SEND_W_SE_INV  (4<<0)
759             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_WRITE  (5<<0)
760             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_READ  (6<<0)
761             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_READ_W_INV  (7<<0)
762             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_WINDOW_BIND  (8<<0)
763             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_FAST_REGISTER  (9<<0)
764             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_LOCAL_INVALIDATE  (10<<0)
765             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_RDMA_READ_RESPONSE  (11<<0)
766             #define L5_PLACE_L5_CMD_TYPE_CMD_VALUE_TCP_ACK  (12<<0)
767 
768     u32_t l5_place_tcp_ack_seq;
769     u32_t l5_place_sink_bfr_target_offset_h;
770     u32_t l5_place_sink_bfr_target_offset_l;
771     u8_t l5_place_rdma_action;
772     u8_t l5_place_cs16_pkt_len;
773     u16_t l5_place_cs16;
774 } comq_l5_place_b_t;
775 
776 typedef struct comq_l5_place_l
777 
778 {
779     u32_t l5_place_cid;
780     u32_t l5_place_mbuf_cluster;
781     u8_t l5_place_opcode;
782     u8_t l5_place_knum;
783     u16_t l5_place_operand_flags;
784     u16_t l5_place_rbdc_key;
785     u16_t l5_place_offset_to_first_marker;
786     u32_t l5_place_first_page_offset;
787     u16_t l5_place_l5_cmd_type;
788     u16_t l5_place_l5_header_length;
789     u32_t l5_place_tcp_ack_seq;
790     u32_t l5_place_sink_bfr_target_offset_h;
791     u32_t l5_place_sink_bfr_target_offset_l;
792     u16_t l5_place_cs16;
793     u8_t l5_place_cs16_pkt_len;
794     u8_t l5_place_rdma_action;
795 } comq_l5_place_l_t;
796 
797 #if defined(LITTLE_ENDIAN)
798     typedef comq_l5_place_l_t comq_l5_place_t;
799 #elif defined(BIG_ENDIAN)
800     typedef comq_l5_place_b_t comq_l5_place_t;
801 #endif
802 
803 
804 /*
805  *  comq_l5_flush definition
806  */
807 typedef struct comq_l5_flush_b
808 {
809     u32_t unused_0[2];
810     u16_t unused_1;
811     u8_t unused_2;
812     u8_t l5_flush_opcode;
813     u16_t l5_flush_rbdc_key;
814     u16_t unused_3;
815     u32_t unused_4[5];
816     u8_t l5_flush_rdma_action;
817     u8_t l5_flush_cs16_pkt_len;
818     u16_t l5_flush_cs16;
819 } comq_l5_flush_b_t;
820 
821 typedef struct comq_l5_flush_l
822 {
823     u32_t unused_0[2];
824     u8_t l5_flush_opcode;
825     u8_t unused_2;
826     u16_t unused_1;
827     u16_t unused_3;
828     u16_t l5_flush_rbdc_key;
829     u32_t unused_4[5];
830     u16_t l5_flush_cs16;
831     u8_t l5_flush_cs16_pkt_len;
832     u8_t l5_flush_rdma_action;
833 } comq_l5_flush_l_t;
834 
835 #if defined(LITTLE_ENDIAN)
836     typedef comq_l5_flush_l_t comq_l5_flush_t;
837 #elif defined(BIG_ENDIAN)
838     typedef comq_l5_flush_b_t comq_l5_flush_t;
839 #endif
840 
841 /*
842  *  l5_local_region_table_entry_b definition
843  */
844 typedef struct l5_local_region_table_entry_b
845 {
846     u8_t rte_flags;
847 
848     u8_t rte_bind_cnt;
849     u16_t rte_pd;
850 } l5_local_region_table_entry_b_t;
851 
852 
853 
854 /*
855  *  l5_local_region_table_entry_b definition
856  */
857 typedef struct l5_local_region_table_entry_b_xi
858 {
859     u8_t rte_flags;
860         #define RTE_FLAGS_FLAGS_MASK                        (0xff<<0)
861             #define RTE_FLAGS_FLAGS_MASK_UNDEFINED          (0<<0)
862             #define RTE_FLAGS_FLAGS_MASK_VALID              (1<<0)
863             #define RTE_FLAGS_FLAGS_MASK_LOCAL_READ         (2<<0)
864             #define RTE_FLAGS_FLAGS_MASK_LOCAL_WRITE        (4<<0)
865             #define RTE_FLAGS_FLAGS_MASK_REMOTE_REGION      (8<<0)
866             #define RTE_FLAGS_FLAGS_MASK_ALLOW_WIND_BIND    (16<<0)
867             #define RTE_FLAGS_FLAGS_MASK_INVALIDATE_IN_PROGRESS  (32<<0)
868             #define RTE_FLAGS_FLAGS_MASK_RX_FLUSH_IN_PROGRESS  (64<<0)
869 
870     u8_t rte_bind_cnt;
871     u16_t rte_pd;
872 } l5_local_region_table_entry_b_xi_t;
873 
874 
875 /*
876  *  l5_local_region_table_entry_l definition
877  */
878 typedef struct l5_local_region_table_entry_l
879 {
880     u16_t rte_pd;
881     u8_t rte_bind_cnt;
882     u8_t rte_flags;
883 
884 } l5_local_region_table_entry_l_t;
885 
886 
887 
888 /*
889  *  l5_local_region_table_entry_l definition
890  */
891 typedef struct l5_local_region_table_entry_l_xi
892 {
893     u16_t rte_pd;
894     u8_t rte_bind_cnt;
895     u8_t rte_flags;
896         #define RTE_FLAGS_FLAGS_MASK                        (0xff<<0)
897             #define RTE_FLAGS_FLAGS_MASK_UNDEFINED          (0<<0)
898             #define RTE_FLAGS_FLAGS_MASK_VALID              (1<<0)
899             #define RTE_FLAGS_FLAGS_MASK_LOCAL_READ         (2<<0)
900             #define RTE_FLAGS_FLAGS_MASK_LOCAL_WRITE        (4<<0)
901             #define RTE_FLAGS_FLAGS_MASK_REMOTE_REGION      (8<<0)
902             #define RTE_FLAGS_FLAGS_MASK_ALLOW_WIND_BIND    (16<<0)
903             #define RTE_FLAGS_FLAGS_MASK_INVALIDATE_IN_PROGRESS  (32<<0)
904             #define RTE_FLAGS_FLAGS_MASK_RX_FLUSH_IN_PROGRESS  (64<<0)
905 
906 } l5_local_region_table_entry_l_xi_t;
907 
908 
909 /*
910  * l5_local_region_table_entry select
911  */
912 #if defined(LITTLE_ENDIAN)
913     typedef l5_local_region_table_entry_l_t l5_local_region_table_entry_t;
914     typedef l5_local_region_table_entry_l_xi_t l5_local_region_table_entry_xi_t;
915 #elif defined(BIG_ENDIAN)
916     typedef l5_local_region_table_entry_b_t l5_local_region_table_entry_t;
917     typedef l5_local_region_table_entry_b_xi_t l5_local_region_table_entry_xi_t;
918 #endif
919 
920 
921 /*
922  *  l5_remote_region_table_entry_b definition
923  */
924 typedef struct l5_remote_region_table_entry_b
925 {
926     u8_t rte_flags;
927 
928     u8_t rte_wintbl_stag_hi;
929     u16_t rte_wintbl_stag_lo;
930 } l5_remote_region_table_entry_b_t;
931 
932 
933 
934 /*
935  *  l5_remote_region_table_entry_b definition
936  */
937 typedef struct l5_remote_region_table_entry_b_xi
938 {
939     u8_t rte_flags;
940         #define RTE_FLAGS_FLAGS_MASK                        (0xff<<0)
941             #define RTE_FLAGS_FLAGS_MASK_UNDEFINED          (0<<0)
942             #define RTE_FLAGS_FLAGS_MASK_VALID              (1<<0)
943             #define RTE_FLAGS_FLAGS_MASK_LOCAL_READ         (2<<0)
944             #define RTE_FLAGS_FLAGS_MASK_LOCAL_WRITE        (4<<0)
945             #define RTE_FLAGS_FLAGS_MASK_REMOTE_REGION      (8<<0)
946             #define RTE_FLAGS_FLAGS_MASK_ALLOW_WIND_BIND    (16<<0)
947             #define RTE_FLAGS_FLAGS_MASK_INVALIDATE_IN_PROGRESS  (32<<0)
948             #define RTE_FLAGS_FLAGS_MASK_RX_FLUSH_IN_PROGRESS  (64<<0)
949 
950     u8_t rte_wintbl_stag_hi;
951     u16_t rte_wintbl_stag_lo;
952 } l5_remote_region_table_entry_b_xi_t;
953 
954 
955 /*
956  *  l5_remote_region_table_entry_l definition
957  */
958 typedef struct l5_remote_region_table_entry_l
959 {
960     u16_t rte_wintbl_stag_lo;
961     u8_t rte_wintbl_stag_hi;
962     u8_t rte_flags;
963 
964 } l5_remote_region_table_entry_l_t;
965 
966 
967 
968 /*
969  *  l5_remote_region_table_entry_l definition
970  */
971 typedef struct l5_remote_region_table_entry_l_xi
972 {
973     u16_t rte_wintbl_stag_lo;
974     u8_t rte_wintbl_stag_hi;
975     u8_t rte_flags;
976         #define RTE_FLAGS_FLAGS_MASK                        (0xff<<0)
977             #define RTE_FLAGS_FLAGS_MASK_UNDEFINED          (0<<0)
978             #define RTE_FLAGS_FLAGS_MASK_VALID              (1<<0)
979             #define RTE_FLAGS_FLAGS_MASK_LOCAL_READ         (2<<0)
980             #define RTE_FLAGS_FLAGS_MASK_LOCAL_WRITE        (4<<0)
981             #define RTE_FLAGS_FLAGS_MASK_REMOTE_REGION      (8<<0)
982             #define RTE_FLAGS_FLAGS_MASK_ALLOW_WIND_BIND    (16<<0)
983             #define RTE_FLAGS_FLAGS_MASK_INVALIDATE_IN_PROGRESS  (32<<0)
984             #define RTE_FLAGS_FLAGS_MASK_RX_FLUSH_IN_PROGRESS  (64<<0)
985 
986 } l5_remote_region_table_entry_l_xi_t;
987 
988 
989 /*
990  * l5_remote_region_table_entry select
991  */
992 #if defined(LITTLE_ENDIAN)
993     typedef l5_remote_region_table_entry_l_t l5_remote_region_table_entry_t;
994     typedef l5_remote_region_table_entry_l_xi_t l5_remote_region_table_entry_xi_t;
995 #elif defined(BIG_ENDIAN)
996     typedef l5_remote_region_table_entry_b_t l5_remote_region_table_entry_t;
997     typedef l5_remote_region_table_entry_b_xi_t l5_remote_region_table_entry_xi_t;
998 #endif
999 
1000 
1001 /*
1002  *  l5_region_ref_cnt_table_entry_b definition
1003  */
1004 typedef struct l5_region_ref_cnt_table_entry_b
1005 {
1006     u16_t rrcte_pidx;
1007     u16_t rrcte_cidx;
1008 } l5_region_ref_cnt_table_entry_b_t;
1009 
1010 
1011 
1012 /*
1013  *  l5_region_ref_cnt_table_entry_b definition
1014  */
1015 typedef struct l5_region_ref_cnt_table_entry_b_xi
1016 {
1017     u16_t rrcte_pidx;
1018     u16_t rrcte_cidx;
1019 } l5_region_ref_cnt_table_entry_b_xi_t;
1020 
1021 
1022 /*
1023  *  l5_region_ref_cnt_table_entry_l definition
1024  */
1025 typedef struct l5_region_ref_cnt_table_entry_l
1026 {
1027     u16_t rrcte_cidx;
1028     u16_t rrcte_pidx;
1029 } l5_region_ref_cnt_table_entry_l_t;
1030 
1031 
1032 
1033 /*
1034  *  l5_region_ref_cnt_table_entry_l definition
1035  */
1036 typedef struct l5_region_ref_cnt_table_entry_l_xi
1037 {
1038     u16_t rrcte_cidx;
1039     u16_t rrcte_pidx;
1040 } l5_region_ref_cnt_table_entry_l_xi_t;
1041 
1042 
1043 /*
1044  * l5_region_ref_cnt_table_entry select
1045  */
1046 #if defined(LITTLE_ENDIAN)
1047     typedef l5_region_ref_cnt_table_entry_l_t l5_region_ref_cnt_table_entry_t;
1048     typedef l5_region_ref_cnt_table_entry_l_xi_t l5_region_ref_cnt_table_entry_xi_t;
1049 #elif defined(BIG_ENDIAN)
1050     typedef l5_region_ref_cnt_table_entry_b_t l5_region_ref_cnt_table_entry_t;
1051     typedef l5_region_ref_cnt_table_entry_b_xi_t l5_region_ref_cnt_table_entry_xi_t;
1052 #endif
1053 
1054 
1055 /*
1056  *  l5_window_table_entry_b definition
1057  */
1058 typedef struct l5_window_table_entry_b
1059 {
1060     u32_t wte_virtual_base_addr_hi;
1061     u32_t wte_virtual_base_addr_lo;
1062     u32_t wte_pt_phy_base_addr_hi;
1063     u32_t wte_pt_phy_base_addr_lo;
1064     u32_t wte_length;
1065     u32_t wte_qp_or_pd;
1066     u16_t wte_region_table_index;
1067     u16_t wte_cache_key;
1068     u16_t wte_flags;
1069 
1070     u8_t wte_bind_cnt;
1071     u8_t wte_stag_key;
1072 } l5_window_table_entry_b_t;
1073 
1074 
1075 
1076 /*
1077  *  l5_window_table_entry_b definition
1078  */
1079 typedef struct l5_window_table_entry_b_xi
1080 {
1081     u32_t wte_virtual_base_addr_hi;
1082     u32_t wte_virtual_base_addr_lo;
1083     u32_t wte_pt_phy_base_addr_hi;
1084     u32_t wte_pt_phy_base_addr_lo;
1085     u32_t wte_length;
1086     u32_t wte_qp_or_pd;
1087     u16_t wte_region_table_index;
1088     u16_t wte_cache_key;
1089     u16_t wte_flags;
1090         #define WTE_FLAGS_REGION_PAGE_SIZE                  (0xf<<0)
1091             #define WTE_FLAGS_REGION_PAGE_SIZE_256          (0<<0)
1092             #define WTE_FLAGS_REGION_PAGE_SIZE_512          (1<<0)
1093             #define WTE_FLAGS_REGION_PAGE_SIZE_1K           (2<<0)
1094             #define WTE_FLAGS_REGION_PAGE_SIZE_2K           (3<<0)
1095             #define WTE_FLAGS_REGION_PAGE_SIZE_4K           (4<<0)
1096             #define WTE_FLAGS_REGION_PAGE_SIZE_8K           (5<<0)
1097             #define WTE_FLAGS_REGION_PAGE_SIZE_16K          (6<<0)
1098             #define WTE_FLAGS_REGION_PAGE_SIZE_32K          (7<<0)
1099             #define WTE_FLAGS_REGION_PAGE_SIZE_64K          (8<<0)
1100             #define WTE_FLAGS_REGION_PAGE_SIZE_128K         (9<<0)
1101             #define WTE_FLAGS_REGION_PAGE_SIZE_256K         (10<<0)
1102             #define WTE_FLAGS_REGION_PAGE_SIZE_512K         (11<<0)
1103             #define WTE_FLAGS_REGION_PAGE_SIZE_1M           (12<<0)
1104             #define WTE_FLAGS_REGION_PAGE_SIZE_2M           (13<<0)
1105             #define WTE_FLAGS_REGION_PAGE_SIZE_4M           (14<<0)
1106             #define WTE_FLAGS_REGION_PAGE_SIZE_8M           (15<<0)
1107         #define WTE_FLAGS_WT_FLAGS                          (0xfff<<4)
1108             #define WTE_FLAGS_WT_FLAGS_WT_UNDEFINED         (0<<4)
1109             #define WTE_FLAGS_WT_FLAGS_VALID                (1<<4)
1110             #define WTE_FLAGS_WT_FLAGS_REGION               (2<<4)
1111             #define WTE_FLAGS_WT_FLAGS_UNBOUND_WINDOW       (4<<4)
1112             #define WTE_FLAGS_WT_FLAGS_BOUND_WINDOW         (8<<4)
1113             #define WTE_FLAGS_WT_FLAGS_REMOTE_READ          (16<<4)
1114             #define WTE_FLAGS_WT_FLAGS_REMOTE_WRITE         (32<<4)
1115             #define WTE_FLAGS_WT_FLAGS_ALLOW_WINDOW_BINDS   (64<<4)
1116             #define WTE_FLAGS_WT_FLAGS_INVALIDATE_IN_PROGRESS  (128<<4)
1117             #define WTE_FLAGS_WT_FLAGS_RX_FLUSH_IN_PROGRESS  (256<<4)
1118             #define WTE_FLAGS_WT_FLAGS_READ_W_LINV_IN_PROGRESS  (512<<4)
1119             #define WTE_FLAGS_WT_FLAGS_DEALLOCATE_FLUSH_INITIATED  (1024<<4)
1120             #define WTE_FLAGS_WT_FLAGS_DEALLOCATE_FLUSH_COMPLETE  (2048<<4)
1121 
1122     u8_t wte_bind_cnt;
1123     u8_t wte_stag_key;
1124 } l5_window_table_entry_b_xi_t;
1125 
1126 
1127 /*
1128  *  l5_window_table_entry_l definition
1129  */
1130 typedef struct l5_window_table_entry_l
1131 {
1132     u32_t wte_virtual_base_addr_hi;
1133     u32_t wte_virtual_base_addr_lo;
1134     u32_t wte_pt_phy_base_addr_hi;
1135     u32_t wte_pt_phy_base_addr_lo;
1136     u32_t wte_length;
1137     u32_t wte_qp_or_pd;
1138     u16_t wte_cache_key;
1139     u16_t wte_region_table_index;
1140     u8_t wte_stag_key;
1141     u8_t wte_bind_cnt;
1142     u16_t wte_flags;
1143 
1144 } l5_window_table_entry_l_t;
1145 
1146 
1147 
1148 /*
1149  *  l5_window_table_entry_l definition
1150  */
1151 typedef struct l5_window_table_entry_l_xi
1152 {
1153     u32_t wte_virtual_base_addr_hi;
1154     u32_t wte_virtual_base_addr_lo;
1155     u32_t wte_pt_phy_base_addr_hi;
1156     u32_t wte_pt_phy_base_addr_lo;
1157     u32_t wte_length;
1158     u32_t wte_qp_or_pd;
1159     u16_t wte_cache_key;
1160     u16_t wte_region_table_index;
1161     u8_t wte_stag_key;
1162     u8_t wte_bind_cnt;
1163     u16_t wte_flags;
1164         #define WTE_FLAGS_REGION_PAGE_SIZE                  (0xf<<0)
1165             #define WTE_FLAGS_REGION_PAGE_SIZE_256          (0<<0)
1166             #define WTE_FLAGS_REGION_PAGE_SIZE_512          (1<<0)
1167             #define WTE_FLAGS_REGION_PAGE_SIZE_1K           (2<<0)
1168             #define WTE_FLAGS_REGION_PAGE_SIZE_2K           (3<<0)
1169             #define WTE_FLAGS_REGION_PAGE_SIZE_4K           (4<<0)
1170             #define WTE_FLAGS_REGION_PAGE_SIZE_8K           (5<<0)
1171             #define WTE_FLAGS_REGION_PAGE_SIZE_16K          (6<<0)
1172             #define WTE_FLAGS_REGION_PAGE_SIZE_32K          (7<<0)
1173             #define WTE_FLAGS_REGION_PAGE_SIZE_64K          (8<<0)
1174             #define WTE_FLAGS_REGION_PAGE_SIZE_128K         (9<<0)
1175             #define WTE_FLAGS_REGION_PAGE_SIZE_256K         (10<<0)
1176             #define WTE_FLAGS_REGION_PAGE_SIZE_512K         (11<<0)
1177             #define WTE_FLAGS_REGION_PAGE_SIZE_1M           (12<<0)
1178             #define WTE_FLAGS_REGION_PAGE_SIZE_2M           (13<<0)
1179             #define WTE_FLAGS_REGION_PAGE_SIZE_4M           (14<<0)
1180             #define WTE_FLAGS_REGION_PAGE_SIZE_8M           (15<<0)
1181         #define WTE_FLAGS_WT_FLAGS                          (0xfff<<4)
1182             #define WTE_FLAGS_WT_FLAGS_WT_UNDEFINED         (0<<4)
1183             #define WTE_FLAGS_WT_FLAGS_VALID                (1<<4)
1184             #define WTE_FLAGS_WT_FLAGS_REGION               (2<<4)
1185             #define WTE_FLAGS_WT_FLAGS_UNBOUND_WINDOW       (4<<4)
1186             #define WTE_FLAGS_WT_FLAGS_BOUND_WINDOW         (8<<4)
1187             #define WTE_FLAGS_WT_FLAGS_REMOTE_READ          (16<<4)
1188             #define WTE_FLAGS_WT_FLAGS_REMOTE_WRITE         (32<<4)
1189             #define WTE_FLAGS_WT_FLAGS_ALLOW_WINDOW_BINDS   (64<<4)
1190             #define WTE_FLAGS_WT_FLAGS_INVALIDATE_IN_PROGRESS  (128<<4)
1191             #define WTE_FLAGS_WT_FLAGS_RX_FLUSH_IN_PROGRESS  (256<<4)
1192             #define WTE_FLAGS_WT_FLAGS_READ_W_LINV_IN_PROGRESS  (512<<4)
1193             #define WTE_FLAGS_WT_FLAGS_DEALLOCATE_FLUSH_INITIATED  (1024<<4)
1194             #define WTE_FLAGS_WT_FLAGS_DEALLOCATE_FLUSH_COMPLETE  (2048<<4)
1195 
1196 } l5_window_table_entry_l_xi_t;
1197 
1198 
1199 /*
1200  * l5_window_table_entry select
1201  */
1202 #if defined(LITTLE_ENDIAN)
1203     typedef l5_window_table_entry_l_t l5_window_table_entry_t;
1204     typedef l5_window_table_entry_l_xi_t l5_window_table_entry_xi_t;
1205 #elif defined(BIG_ENDIAN)
1206     typedef l5_window_table_entry_b_t l5_window_table_entry_t;
1207     typedef l5_window_table_entry_b_xi_t l5_window_table_entry_xi_t;
1208 #endif
1209 
1210 
1211 /*
1212  *  l5_cq_table_entry_b definition
1213  */
1214 typedef struct l5_cq_table_entry_b
1215 {
1216     u32_t cqte_pgtbl_phaddr_hi;
1217     u8_t cqte_pgtbl_phaddr_lo[3];
1218     u8_t cqte_flags;
1219 
1220     u16_t cqte_pidx;
1221     u16_t cqte_cqes_per_page;
1222     u16_t cqte_max_cqes;
1223     u16_t cqte_nx_qe_self_seq;
1224     u16_t cqte_nx_pg_qidx;
1225     u16_t cqte_pgtbl_pgidx;
1226     u16_t cqte_pgtbl_npages;
1227     u16_t cqte_cqe_pidx;
1228     u32_t cqte_cached_pte_phaddr_hi;
1229     u32_t cqte_cached_pte_phaddr_lo;
1230 } l5_cq_table_entry_b_t;
1231 
1232 
1233 /*
1234  *  l5_cq_table_entry_b definition
1235  */
1236 typedef struct l5_cq_table_entry_b_xi
1237 {
1238     u32_t cqte_pgtbl_phaddr_hi;
1239     u8_t cqte_pgtbl_phaddr_lo[3];
1240     u8_t cqte_flags;
1241         #define CQTE_FLAGS_PAGE_SIZE                        (0xf<<0)
1242             #define CQTE_FLAGS_PAGE_SIZE_256                (0<<0)
1243             #define CQTE_FLAGS_PAGE_SIZE_512                (1<<0)
1244             #define CQTE_FLAGS_PAGE_SIZE_1K                 (2<<0)
1245             #define CQTE_FLAGS_PAGE_SIZE_2K                 (3<<0)
1246             #define CQTE_FLAGS_PAGE_SIZE_4K                 (4<<0)
1247             #define CQTE_FLAGS_PAGE_SIZE_8K                 (5<<0)
1248             #define CQTE_FLAGS_PAGE_SIZE_16K                (6<<0)
1249             #define CQTE_FLAGS_PAGE_SIZE_32K                (7<<0)
1250             #define CQTE_FLAGS_PAGE_SIZE_64K                (8<<0)
1251             #define CQTE_FLAGS_PAGE_SIZE_128K               (9<<0)
1252             #define CQTE_FLAGS_PAGE_SIZE_256K               (10<<0)
1253             #define CQTE_FLAGS_PAGE_SIZE_512K               (11<<0)
1254             #define CQTE_FLAGS_PAGE_SIZE_1M                 (12<<0)
1255             #define CQTE_FLAGS_PAGE_SIZE_2M                 (13<<0)
1256         #define CQTE_FLAGS_FLAGS                            (0xf<<4)
1257             #define CQTE_FLAGS_FLAGS_UNDEFINED              (0<<4)
1258             #define CQTE_FLAGS_FLAGS_VALID                  (1<<4)
1259             #define CQTE_FLAGS_FLAGS_ARMED                  (2<<4)
1260             #define CQTE_FLAGS_FLAGS_ARMED_SEND_SE          (4<<4)
1261             #define CQTE_FLAGS_FLAGS_CQE_NOT_ARMED          (8<<4)
1262 
1263     u16_t cqte_pidx;
1264     u16_t cqte_cqes_per_page;
1265     u16_t cqte_max_cqes;
1266     u16_t cqte_nx_qe_self_seq;
1267     u16_t cqte_nx_pg_qidx;
1268     u16_t cqte_pgtbl_pgidx;
1269     u16_t cqte_pgtbl_npages;
1270     u16_t cqte_cqe_pidx;
1271     u32_t cqte_cached_pte_phaddr_hi;
1272     u32_t cqte_cached_pte_phaddr_lo;
1273 } l5_cq_table_entry_b_xi_t;
1274 
1275 
1276 /*
1277  *  l5_cq_table_entry_l definition
1278  */
1279 typedef struct l5_cq_table_entry_l
1280 {
1281     u32_t cqte_pgtbl_phaddr_hi;
1282     u8_t cqte_flags;
1283 
1284     u8_t cqte_pgtbl_phaddr_lo[3];
1285     u16_t cqte_cqes_per_page;
1286     u16_t cqte_pidx;
1287     u16_t cqte_nx_qe_self_seq;
1288     u16_t cqte_max_cqes;
1289     u16_t cqte_pgtbl_pgidx;
1290     u16_t cqte_nx_pg_qidx;
1291     u16_t cqte_cqe_pidx;
1292     u16_t cqte_pgtbl_npages;
1293     u32_t cqte_cached_pte_phaddr_hi;
1294     u32_t cqte_cached_pte_phaddr_lo;
1295 } l5_cq_table_entry_l_t;
1296 
1297 
1298 
1299 /*
1300  *  l5_cq_table_entry_l definition
1301  */
1302 typedef struct l5_cq_table_entry_l_xi
1303 {
1304     u32_t cqte_pgtbl_phaddr_hi;
1305     u8_t cqte_flags;
1306         #define CQTE_FLAGS_PAGE_SIZE                        (0xf<<0)
1307             #define CQTE_FLAGS_PAGE_SIZE_256                (0<<0)
1308             #define CQTE_FLAGS_PAGE_SIZE_512                (1<<0)
1309             #define CQTE_FLAGS_PAGE_SIZE_1K                 (2<<0)
1310             #define CQTE_FLAGS_PAGE_SIZE_2K                 (3<<0)
1311             #define CQTE_FLAGS_PAGE_SIZE_4K                 (4<<0)
1312             #define CQTE_FLAGS_PAGE_SIZE_8K                 (5<<0)
1313             #define CQTE_FLAGS_PAGE_SIZE_16K                (6<<0)
1314             #define CQTE_FLAGS_PAGE_SIZE_32K                (7<<0)
1315             #define CQTE_FLAGS_PAGE_SIZE_64K                (8<<0)
1316             #define CQTE_FLAGS_PAGE_SIZE_128K               (9<<0)
1317             #define CQTE_FLAGS_PAGE_SIZE_256K               (10<<0)
1318             #define CQTE_FLAGS_PAGE_SIZE_512K               (11<<0)
1319             #define CQTE_FLAGS_PAGE_SIZE_1M                 (12<<0)
1320             #define CQTE_FLAGS_PAGE_SIZE_2M                 (13<<0)
1321         #define CQTE_FLAGS_FLAGS                            (0xf<<4)
1322             #define CQTE_FLAGS_FLAGS_UNDEFINED              (0<<4)
1323             #define CQTE_FLAGS_FLAGS_VALID                  (1<<4)
1324             #define CQTE_FLAGS_FLAGS_ARMED                  (2<<4)
1325             #define CQTE_FLAGS_FLAGS_ARMED_SEND_SE          (4<<4)
1326             #define CQTE_FLAGS_FLAGS_CQE_NOT_ARMED          (8<<4)
1327 
1328     u8_t cqte_pgtbl_phaddr_lo[3];
1329     u16_t cqte_cqes_per_page;
1330     u16_t cqte_pidx;
1331     u16_t cqte_nx_qe_self_seq;
1332     u16_t cqte_max_cqes;
1333     u16_t cqte_pgtbl_pgidx;
1334     u16_t cqte_nx_pg_qidx;
1335     u16_t cqte_cqe_pidx;
1336     u16_t cqte_pgtbl_npages;
1337     u32_t cqte_cached_pte_phaddr_hi;
1338     u32_t cqte_cached_pte_phaddr_lo;
1339 } l5_cq_table_entry_l_xi_t;
1340 
1341 
1342 /*
1343  * l5_cq_table_entry select
1344  */
1345 #if defined(LITTLE_ENDIAN)
1346     typedef l5_cq_table_entry_l_t l5_cq_table_entry_t;
1347     typedef l5_cq_table_entry_l_xi_t l5_cq_table_entry_xi_t;
1348 #elif defined(BIG_ENDIAN)
1349     typedef l5_cq_table_entry_b_t l5_cq_table_entry_t;
1350     typedef l5_cq_table_entry_b_xi_t l5_cq_table_entry_xi_t;
1351 #endif
1352 
1353 
1354 /*
1355  *  l5_cmd_cell_b definition
1356  */
1357 typedef struct l5_cmd_cell_b
1358 {
1359     u16_t l5ccell_cmd_type;
1360 
1361     u16_t l5ccell_wq_idx;
1362     u8_t unused_0;
1363     u8_t l5ccell_cmd_val;
1364     u16_t l5ccell_distance_to_first_marker;
1365     u32_t unused_1;
1366     u32_t l5ccell_ddp_hdr_word1;
1367     u32_t l5ccell_ddp_hdr_word2;
1368     u32_t l5ccell_ddp_hdr_word3;
1369     u32_t l5ccell_tcp_sn_first_byte;
1370     u32_t l5ccell_tcp_sn_last_byte;
1371 } l5_cmd_cell_b_t;
1372 
1373 
1374 
1375 /*
1376  *  l5_cmd_cell_l definition
1377  */
1378 typedef struct l5_cmd_cell_l
1379 {
1380     u16_t l5ccell_wq_idx;
1381     u16_t l5ccell_cmd_type;
1382 
1383     u16_t l5ccell_distance_to_first_marker;
1384     u8_t l5ccell_cmd_val;
1385     u8_t unused_0;
1386     u32_t unused_1;
1387     u32_t l5ccell_ddp_hdr_word1;
1388     u32_t l5ccell_ddp_hdr_word2;
1389     u32_t l5ccell_ddp_hdr_word3;
1390     u32_t l5ccell_tcp_sn_first_byte;
1391     u32_t l5ccell_tcp_sn_last_byte;
1392 } l5_cmd_cell_l_t;
1393 
1394 
1395 
1396 /*
1397  * l5_cmd_cell select
1398  */
1399 #if defined(LITTLE_ENDIAN)
1400     typedef l5_cmd_cell_l_t l5_cmd_cell_t;
1401 #elif defined(BIG_ENDIAN)
1402     typedef l5_cmd_cell_b_t l5_cmd_cell_t;
1403 #endif
1404 
1405 
1406 /*
1407  *  l5_abuf_cell_b definition
1408  */
1409 typedef struct l5_abuf_cell_b
1410 {
1411     u32_t l5acell_pgtbl_phaddr_hi;
1412     u8_t l5acell_pgtbl_phaddr_lo[3];
1413     u8_t l5acell_flags;
1414 
1415     u16_t l5acell_wq_idx;
1416     u16_t l5acell_first_page_offset;
1417     u32_t l5acell_buffer_offset;
1418     u16_t l5acell_rbdc_key;
1419     u16_t l5acell_receive_length;
1420     u32_t l5acell_buffer_length;
1421     u32_t l5acell_tcp_sn_L_bit_segment;
1422 } l5_abuf_cell_b_t;
1423 
1424 
1425 
1426 /*
1427  *  l5_abuf_cell_b definition
1428  */
1429 typedef struct l5_abuf_cell_b_xi
1430 {
1431     u32_t l5acell_pgtbl_phaddr_hi;
1432     u8_t l5acell_pgtbl_phaddr_lo[3];
1433     u8_t l5acell_flags;
1434         #define L5ACELL_FLAGS_REGION_PAGE_SIZE              (0xf<<0)
1435             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_256      (0<<0)
1436             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_512      (1<<0)
1437             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_1K       (2<<0)
1438             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_2K       (3<<0)
1439             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_4K       (4<<0)
1440             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_8K       (5<<0)
1441             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_16K      (6<<0)
1442             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_32K      (7<<0)
1443             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_64K      (8<<0)
1444             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_128K     (9<<0)
1445             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_256K     (10<<0)
1446             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_512K     (11<<0)
1447             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_1M       (12<<0)
1448             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_2M       (13<<0)
1449             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_4M       (14<<0)
1450             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_8M       (15<<0)
1451         #define L5ACELL_FLAGS_ABUF_FLAGS                    (0xf<<4)
1452             #define L5ACELL_FLAGS_ABUF_FLAGS_ABUF_UNDEFINED  (0<<4)
1453             #define L5ACELL_FLAGS_ABUF_FLAGS_L_BIT_RCVD     (1<<4)
1454             #define L5ACELL_FLAGS_ABUF_FLAGS_GEN_EVT        (2<<4)
1455             #define L5ACELL_FLAGS_ABUF_FLAGS_INV_STAG       (4<<4)
1456             #define L5ACELL_FLAGS_ABUF_FLAGS_COMP_ERROR     (8<<4)
1457 
1458     u16_t l5acell_wq_idx;
1459     u16_t l5acell_first_page_offset;
1460     u32_t l5acell_buffer_offset;
1461     u16_t l5acell_rbdc_key;
1462     u16_t l5acell_receive_length;
1463     u32_t l5acell_buffer_length;
1464     u32_t l5acell_tcp_sn_L_bit_segment;
1465 } l5_abuf_cell_b_xi_t;
1466 
1467 
1468 /*
1469  *  l5_abuf_cell_l definition
1470  */
1471 typedef struct l5_abuf_cell_l
1472 {
1473     u32_t l5acell_pgtbl_phaddr_hi;
1474     u8_t l5acell_flags;
1475 
1476     u8_t l5acell_pgtbl_phaddr_lo[3];
1477     u16_t l5acell_first_page_offset;
1478     u16_t l5acell_wq_idx;
1479     u32_t l5acell_buffer_offset;
1480     u16_t l5acell_receive_length;
1481     u16_t l5acell_rbdc_key;
1482     u32_t l5acell_buffer_length;
1483     u32_t l5acell_tcp_sn_L_bit_segment;
1484 } l5_abuf_cell_l_t;
1485 
1486 
1487 
1488 /*
1489  *  l5_abuf_cell_l definition
1490  */
1491 typedef struct l5_abuf_cell_l_xi
1492 {
1493     u32_t l5acell_pgtbl_phaddr_hi;
1494     u8_t l5acell_flags;
1495         #define L5ACELL_FLAGS_REGION_PAGE_SIZE              (0xf<<0)
1496             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_256      (0<<0)
1497             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_512      (1<<0)
1498             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_1K       (2<<0)
1499             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_2K       (3<<0)
1500             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_4K       (4<<0)
1501             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_8K       (5<<0)
1502             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_16K      (6<<0)
1503             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_32K      (7<<0)
1504             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_64K      (8<<0)
1505             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_128K     (9<<0)
1506             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_256K     (10<<0)
1507             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_512K     (11<<0)
1508             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_1M       (12<<0)
1509             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_2M       (13<<0)
1510             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_4M       (14<<0)
1511             #define L5ACELL_FLAGS_REGION_PAGE_SIZE_8M       (15<<0)
1512         #define L5ACELL_FLAGS_ABUF_FLAGS                    (0xf<<4)
1513             #define L5ACELL_FLAGS_ABUF_FLAGS_ABUF_UNDEFINED  (0<<4)
1514             #define L5ACELL_FLAGS_ABUF_FLAGS_L_BIT_RCVD     (1<<4)
1515             #define L5ACELL_FLAGS_ABUF_FLAGS_GEN_EVT        (2<<4)
1516             #define L5ACELL_FLAGS_ABUF_FLAGS_INV_STAG       (4<<4)
1517             #define L5ACELL_FLAGS_ABUF_FLAGS_COMP_ERROR     (8<<4)
1518 
1519     u8_t l5acell_pgtbl_phaddr_lo[3];
1520     u16_t l5acell_first_page_offset;
1521     u16_t l5acell_wq_idx;
1522     u32_t l5acell_buffer_offset;
1523     u16_t l5acell_receive_length;
1524     u16_t l5acell_rbdc_key;
1525     u32_t l5acell_buffer_length;
1526     u32_t l5acell_tcp_sn_L_bit_segment;
1527 } l5_abuf_cell_l_xi_t;
1528 
1529 
1530 /*
1531  * l5_abuf_cell select
1532  */
1533 #if defined(LITTLE_ENDIAN)
1534     typedef l5_abuf_cell_l_t l5_abuf_cell_t;
1535     typedef l5_abuf_cell_l_xi_t l5_abuf_cell_xi_t;
1536 #elif defined(BIG_ENDIAN)
1537     typedef l5_abuf_cell_b_t l5_abuf_cell_t;
1538     typedef l5_abuf_cell_b_xi_t l5_abuf_cell_xi_t;
1539 #endif
1540 
1541 
1542 /*
1543  *  l5_irrq_entry_b definition
1544  */
1545 typedef struct l5_irrq_entry_b
1546 {
1547     u32_t irrqe_sink_stag;
1548     u32_t irrqe_sink_to_hi;
1549     u32_t irrqe_sink_to_lo;
1550     u32_t irrqe_msg_length;
1551     u32_t irrqe_source_stag;
1552     u32_t irrqe_source_to_hi;
1553     u32_t irrqe_source_to_lo;
1554 } l5_irrq_entry_b_t;
1555 
1556 
1557 
1558 /*
1559  *  l5_irrq_entry_b definition
1560  */
1561 typedef struct l5_irrq_entry_b_xi
1562 {
1563     u32_t irrqe_sink_stag;
1564     u32_t irrqe_sink_to_hi;
1565     u32_t irrqe_sink_to_lo;
1566     u32_t irrqe_msg_length;
1567     u32_t irrqe_source_stag;
1568     u32_t irrqe_source_to_hi;
1569     u32_t irrqe_source_to_lo;
1570 } l5_irrq_entry_b_xi_t;
1571 
1572 
1573 /*
1574  *  l5_irrq_entry_l definition
1575  */
1576 typedef struct l5_irrq_entry_l
1577 {
1578     u32_t irrqe_sink_stag;
1579     u32_t irrqe_sink_to_hi;
1580     u32_t irrqe_sink_to_lo;
1581     u32_t irrqe_msg_length;
1582     u32_t irrqe_source_stag;
1583     u32_t irrqe_source_to_hi;
1584     u32_t irrqe_source_to_lo;
1585 } l5_irrq_entry_l_t;
1586 
1587 
1588 
1589 /*
1590  *  l5_irrq_entry_l definition
1591  */
1592 typedef struct l5_irrq_entry_l_xi
1593 {
1594     u32_t irrqe_sink_stag;
1595     u32_t irrqe_sink_to_hi;
1596     u32_t irrqe_sink_to_lo;
1597     u32_t irrqe_msg_length;
1598     u32_t irrqe_source_stag;
1599     u32_t irrqe_source_to_hi;
1600     u32_t irrqe_source_to_lo;
1601 } l5_irrq_entry_l_xi_t;
1602 
1603 
1604 /*
1605  * l5_irrq_entry select
1606  */
1607 #if defined(LITTLE_ENDIAN)
1608     typedef l5_irrq_entry_l_t l5_irrq_entry_t;
1609     typedef l5_irrq_entry_l_xi_t l5_irrq_entry_xi_t;
1610 #elif defined(BIG_ENDIAN)
1611     typedef l5_irrq_entry_b_t l5_irrq_entry_t;
1612     typedef l5_irrq_entry_b_xi_t l5_irrq_entry_xi_t;
1613 #endif
1614 
1615 
1616 /*
1617  *  l5_orrq_entry_b definition
1618  */
1619 typedef struct l5_orrq_entry_b
1620 {
1621     u32_t orrqe_tcp_sn_read_rsp_L_bit_segment;
1622     u32_t orrqe_source_to_hi;
1623     u32_t orrqe_source_to_low;
1624 } l5_orrq_entry_b_t;
1625 
1626 
1627 
1628 /*
1629  *  l5_orrq_entry_b definition
1630  */
1631 typedef struct l5_orrq_entry_b_xi
1632 {
1633     u32_t orrqe_tcp_sn_read_rsp_L_bit_segment;
1634     u32_t orrqe_source_to_hi;
1635     u32_t orrqe_source_to_low;
1636 } l5_orrq_entry_b_xi_t;
1637 
1638 
1639 /*
1640  *  l5_orrq_entry_l definition
1641  */
1642 typedef struct l5_orrq_entry_l
1643 {
1644     u32_t orrqe_tcp_sn_read_rsp_L_bit_segment;
1645     u32_t orrqe_source_to_hi;
1646     u32_t orrqe_source_to_low;
1647 } l5_orrq_entry_l_t;
1648 
1649 
1650 
1651 /*
1652  *  l5_orrq_entry_l definition
1653  */
1654 typedef struct l5_orrq_entry_l_xi
1655 {
1656     u32_t orrqe_tcp_sn_read_rsp_L_bit_segment;
1657     u32_t orrqe_source_to_hi;
1658     u32_t orrqe_source_to_low;
1659 } l5_orrq_entry_l_xi_t;
1660 
1661 
1662 /*
1663  * l5_orrq_entry select
1664  */
1665 #if defined(LITTLE_ENDIAN)
1666     typedef l5_orrq_entry_l_t l5_orrq_entry_t;
1667     typedef l5_orrq_entry_l_xi_t l5_orrq_entry_xi_t;
1668 #elif defined(BIG_ENDIAN)
1669     typedef l5_orrq_entry_b_t l5_orrq_entry_t;
1670     typedef l5_orrq_entry_b_xi_t l5_orrq_entry_xi_t;
1671 #endif
1672 
1673 
1674 /*
1675  *  l5_context_b definition
1676  */
1677 typedef struct l5_context_b
1678 {
1679     u8_t l5ctx_type;
1680 
1681     u8_t l5ctx_size;
1682     u16_t l5ctx_cq_cidx;
1683     u8_t l5ctx_gen_bd_max;
1684     u8_t l5ctx_oubits;
1685 
1686     u16_t l5ctx_sq_pidx;
1687     u16_t l5ctx_tcp_pgid;
1688     u16_t l5ctx_rq_pidx;
1689     u32_t l5ctx_tcp_timer1;
1690 
1691     u16_t l5ctx_tcp_timer2;
1692 
1693     u16_t l5ctx_tcp_timer3;
1694 
1695     u16_t l5ctx_tcp_timer4;
1696 
1697     u16_t l5ctx_tcp_timer5;
1698 
1699     u32_t l5ctx_tcp_snd_wl1;
1700     u32_t l5ctx_tcp_snd_wl2;
1701     u8_t l5ctx_tcp_ttl;
1702     u8_t l5ctx_tcp_tos;
1703     u8_t l5ctx_tcp_dack;
1704     u8_t l5ctx_tcp_modes;
1705 
1706     u32_t l5ctx_tcp_max_adv_win;
1707     u32_t l5ctx_tcp_timer;
1708     u32_t l5ctx_tcp_ip_src;
1709     u32_t l5ctx_tcp_ip_dst;
1710     u8_t l5ctx_tcp_iphdr_nbytes;
1711     u8_t l5ctx_tcp_snd_seg_scale;
1712     u8_t l5ctx_tcp_rcv_seg_scale;
1713     u8_t l5ctx_tcp_tcp_hlen;
1714     u16_t l5ctx_tcp_src_port;
1715     u16_t l5ctx_tcp_dst_port;
1716     u16_t l5ctx_tcp_mss;
1717     u8_t l5ctx_tcp_flags;
1718 
1719     u8_t l5ctx_tcp_state;
1720 
1721     u32_t l5ctx_tcp_rcv_next;
1722     u32_t l5ctx_last_ack_sent;
1723     u32_t l5ctx_tcp_rcv_win_seq;
1724     u32_t l5ctx_tcp_snd_una;
1725     u32_t l5ctx_tcp_snd_next;
1726     u32_t l5ctx_tcp_snd_max;
1727     u32_t l5ctx_tcp_snd_win;
1728     u32_t l5ctx_tcp_snd_cwin;
1729     u32_t l5ctx_tcp_tstamp;
1730     u32_t l5ctx_tcp_ssthresh;
1731     u16_t l5ctx_tcp_sm_rtt;
1732     u16_t l5ctx_tcp_sm_delta;
1733     u32_t l5ctx_tcp_max_snd_win;
1734     u32_t l5ctx_tcp_tsch_snd_next;
1735     u32_t l5ctx_tcp_slot_size;
1736 
1737     u8_t l5ctx_tcp_cp_cmd;
1738     u8_t l5ctx_tcp_tsch_cmd;
1739     u8_t l5ctx_tcp_cons_retx_num;
1740     u8_t l5ctx_tcp_tsch_xnum;
1741 
1742     u8_t l5ctx_tcp_num_dupack;
1743     u8_t l5ctx_tcp_tx_protocol_flags;
1744 
1745     u8_t l5ctx_tcp_prod_retx_num;
1746     u8_t l5ctx_tcp_tsch_cons_retx_num;
1747     u8_t l5ctx_tcp_comp_cons_retx_num;
1748     u8_t l5ctx_tcp_num_retx;
1749     u8_t l5ctx_tcp_upload_reason;
1750 
1751     u8_t l5ctx_tcp_txp_cmd;
1752     u32_t unused_0;
1753     tcp_context_cmd_cell_b_te_t l5ctx_cmd[3];
1754     u16_t l5ctx_snd_q_max_wqes;
1755     u16_t l5ctx_snd_q_fw_qidx;
1756     u16_t l5ctx_snd_q_nx_pg_qidx;
1757     u16_t l5ctx_snd_q_pgtbl_pgidx;
1758     u16_t l5ctx_snd_q_wqes_per_page;
1759     u16_t l5ctx_snd_q_num_pages;
1760     u8_t l5ctx_snd_q_pidx;
1761     u8_t l5ctx_snd_q_cidx;
1762     u8_t l5ctx_snd_q_max_cached_wqes;
1763     u8_t l5ctx_snd_q_flags;
1764 
1765     u32_t l5ctx_snd_q_pgtbl_phaddr_hi;
1766     u8_t l5ctx_snd_q_pgtbl_phaddr_lo[3];
1767     u8_t l5ctx_snd_q_read_rsp_wait;
1768     u32_t l5ctx_snd_q_cached_pte_phaddr_hi;
1769     u32_t l5ctx_snd_q_cached_pte_phaddr_lo;
1770     l5_cmd_cell_b_t l5ctx_snd_q_cmd[3];
1771     u16_t l5ctx_rcv_q_max_wqes;
1772     u16_t l5ctx_rcv_q_fw_qidx;
1773     u16_t l5ctx_rcv_q_nx_pg_qidx;
1774     u16_t l5ctx_rcv_q_pgtbl_pgidx;
1775     u16_t l5ctx_rcv_q_wqes_per_page;
1776     u16_t l5ctx_rcv_q_num_pages;
1777     u8_t l5ctx_rcv_q_pidx;
1778     u8_t l5ctx_rcv_q_rxp_cidx;
1779     u8_t l5ctx_rcv_q_com_cidx;
1780     u8_t l5ctx_rcv_q_flags;
1781 
1782     u32_t l5ctx_rcv_q_pgtbl_phaddr_hi;
1783     u8_t l5ctx_rcv_q_pgtbl_phaddr_lo[3];
1784     u8_t l5ctx_rcv_q_qp_ou_state;
1785         #define L5CTX_RCV_Q_QP_OU_STATE_UPLOADED            (1<<0)
1786         #define L5CTX_RCV_Q_QP_OU_STATE_OFFLOADED           (1<<1)
1787         #define L5CTX_RCV_Q_QP_OU_STATE_UPLOAD_REQ          (1<<2)
1788         #define L5CTX_RCV_Q_QP_OU_STATE_OFFLOAD_REQ         (1<<3)
1789 
1790     u32_t l5ctx_rcv_q_cached_pte_phaddr_hi;
1791     u32_t l5ctx_rcv_q_cached_pte_phaddr_lo;
1792     l5_abuf_cell_b_t l5ctx_rcv_q_abuf[2];
1793     u32_t l5ctx_cq_cid;
1794     u32_t l5ctx_curr_send_msn;
1795     u32_t l5ctx_curr_rdma_read_msn;
1796     u16_t l5ctx_pd;
1797     u8_t l5ctx_rcv_path_op_state;
1798 
1799     u8_t l5ctx_ird;
1800     u32_t l5ctx_tx_initial_tcp_sn;
1801     u16_t l5ctx_tsch_mult_value;
1802     u8_t l5ctx_null_cmd_cell_pidx;
1803     u8_t l5ctx_null_cmd_cell_cidx;
1804     l5_orrq_entry_b_t l5ctx_orrq[1];
1805     l5_irrq_entry_b_t l5ctx_irrq[1];
1806     u8_t l5ctx_miq_index;
1807     u8_t l5ctx_rx_comp_flags;
1808 
1809     u8_t l5ctx_qp_flags;
1810 
1811     u8_t l5ctx_upload_flag;
1812 
1813     u8_t l5ctx_upload_rxp;
1814 
1815     u8_t l5ctx_ooo_read_resp_segs_w_L_bit;
1816     u8_t l5ctx_ooo_send_msg_segs_w_L_bit;
1817     u8_t l5ctx_ooo_read_request_msgs;
1818     u32_t l5ctx_high_tcp_ack_sn_rcvd;
1819     u32_t l5ctx_rx_initial_tcp_sn;
1820     u32_t l5ctx_send_msg_high_msn_completed;
1821     u32_t l5ctx_read_req_high_msn_queued;
1822     u32_t l5ctx_rsvd_l4_hole_mgmt[3];
1823     u16_t l5ctx_cam_index;
1824     u16_t l5ctx_offload_flag;
1825 } l5_context_b_t;
1826 
1827 
1828 
1829 /*
1830  *  l5_context_b definition
1831  */
1832 typedef struct l5_context_b_xi
1833 {
1834     u32_t l5ctx_tcp_tsch_snd_next;
1835     u32_t l5ctx_tcp_snd_max;
1836     u8_t l5ctx_tcp_cp_cmd;
1837     u8_t l5ctx_tcp_tsch_cmd;
1838     u8_t l5ctx_tcp_cons_retx_num;
1839     u8_t l5ctx_tcp_tsch_xnum;
1840         #define L5CTX_TCP_TSCH_XNUM_VAL                     (0x7f<<0)
1841         #define L5CTX_TCP_TSCH_XNUM_L4                      (1<<7)
1842 
1843     u16_t l5ctx_tcp_pgid;
1844         #define L5CTX_TCP_PGID_VAL                          (0x3fff<<0)
1845 
1846     u8_t l5ctx_tcp_prod_retx_num;
1847     u8_t l5ctx_tcp_tsch_cons_retx_num;
1848     u8_t l5ctx_tcp_l2_slot_size;
1849     u8_t unused_0;
1850     u16_t unused_1;
1851     u32_t unused_2;
1852     u8_t l5ctx_tcp_ttl;
1853     u8_t l5ctx_tcp_tos;
1854     u8_t l5ctx_tcp_dack;
1855     u8_t l5ctx_tcp_modes;
1856         #define L5CTX_TCP_MODES_RST_INDICATED               (1<<0)
1857         #define L5CTX_TCP_MODES_DISC_BD                     (1<<1)
1858         #define L5CTX_TCP_MODES_UPLOAD_INITED               (1<<2)
1859         #define L5CTX_TCP_MODES_RMT_DISC                    (1<<3)
1860         #define L5CTX_TCP_MODES_PG_INVALIDATED              (1<<4)
1861         #define L5CTX_TCP_MODES_ABORT_PENDING               (1<<5)
1862         #define L5CTX_TCP_MODES_DISC_PENDING                (1<<6)
1863         #define L5CTX_TCP_MODES_SS                          (1<<7)
1864 
1865     u32_t l5ctx_tcp_max_adv_win;
1866     u32_t l5ctx_timer;
1867     u32_t l5ctx_tcp_ip_src;
1868     u32_t l5ctx_tcp_ip_dst;
1869     u8_t l5ctx_tcp_iphdr_nbytes;
1870     u8_t l5ctx_tcp_snd_seg_scale;
1871     u8_t l5ctx_tcp_rcv_seg_scale;
1872     u8_t l5ctx_tcp_tcp_hlen;
1873     u16_t l5ctx_tcp_src_port;
1874     u16_t l5ctx_tcp_dst_port;
1875     u32_t l5ctx_tx_initial_tcp_sn;
1876     u8_t l5ctx_upload_flag;
1877         #define L5CTX_UPLOAD_FLAG_TXP                       (1<<0)
1878         #define L5CTX_UPLOAD_FLAG_TXP_COM                   (1<<1)
1879     u8_t unused_3;
1880     u16_t unused_4;
1881     u32_t unused_5[17];
1882 
1883     u8_t l5ctx_type;
1884         #define L5CTX_TYPE_TYPE                             (0xf<<4)
1885             #define L5CTX_TYPE_TYPE_EMPTY                   (0<<4)
1886             #define L5CTX_TYPE_TYPE_L2                      (1<<4)
1887             #define L5CTX_TYPE_TYPE_TCP                     (2<<4)
1888             #define L5CTX_TYPE_TYPE_L5                      (3<<4)
1889             #define L5CTX_TYPE_TYPE_L2_BD_CHN               (4<<4)
1890 
1891     u8_t l5ctx_size;
1892         #define L5CTX_SIZE_ARM_CQ                           (1<<0)
1893 
1894     u16_t l5ctx_cq_cidx;
1895     u8_t l5ctx_gen_bd_max;
1896     u8_t l5ctx_oubits;
1897         #define L5CTX_OUBITS_ACTIVATE                       (1<<0)
1898         #define L5CTX_OUBITS_CP_UPLOAD                      (1<<1)
1899         #define L5CTX_OUBITS_RXP_UPLOAD                     (1<<2)
1900         #define L5CTX_OUBITS_TXP_UPLOAD                     (1<<3)
1901         #define L5CTX_OUBITS_COM_RX_UPLOAD                  (1<<4)
1902         #define L5CTX_OUBITS_COM_TX_UPLOAD                  (1<<5)
1903         #define L5CTX_OUBITS_CP_UPLOAD_COMP                 (1<<6)
1904         #define L5CTX_OUBITS_HOST_ACK                       (1<<7)
1905 
1906     u16_t l5ctx_sq_pidx;
1907     u16_t unused_6;
1908     u16_t l5ctx_rq_pidx;
1909     u32_t l5ctx_tcp_timer1;
1910         #define L5CTX_TCP_TIMER1_DISABLE                    (1UL<<0)
1911         #define L5CTX_TCP_TIMER1_VALUE                      (0x7fffffffL<<1)
1912 
1913     u16_t l5ctx_tcp_timer2;
1914         #define L5CTX_TCP_TIMER2_DISABLE                    (1<<0)
1915         #define L5CTX_TCP_TIMER2_VALUE                      (0x7fff<<1)
1916 
1917     u16_t l5ctx_tcp_timer3;
1918         #define L5CTX_TCP_TIMER3_DISABLE                    (1<<0)
1919         #define L5CTX_TCP_TIMER3_VALUE                      (0x7fff<<1)
1920 
1921     u16_t l5ctx_tcp_timer4;
1922         #define L5CTX_TCP_TIMER4_DISABLE                    (1<<0)
1923         #define L5CTX_TCP_TIMER4_VALUE                      (0x7fff<<1)
1924 
1925     u16_t l5ctx_tcp_timer5;
1926         #define L5CTX_TCP_TIMER5_DISABLE                    (1<<0)
1927         #define L5CTX_TCP_TIMER5_VALUE                      (0x7fff<<1)
1928 
1929     u32_t l5ctx_tcp_slot_size;
1930         #define L5CTX_TCP_SLOT_SIZE_SLOT_SIZE               (0xffffffL<<0)
1931         #define L5CTX_TCP_SLOT_SIZE_CMD_MAX                 (0x7fL<<24)
1932         #define L5CTX_TCP_SLOT_SIZE_STOP                    (1UL<<31)
1933 
1934     u32_t l5ctx_tcp_snd_cwin;
1935     u32_t l5ctx_tcp_snd_win;
1936     u8_t l5ctx_tcp_num_dupack;
1937     u8_t l5ctx_tcp_tx_protocol_flags;
1938         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_TIMER_DELAY_ACK  (1<<0)
1939         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_UPLOAD          (1<<1)
1940         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_FORCE_ACK       (1<<2)
1941         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_LAST_ACK        (1<<3)
1942         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_LAST_RST        (1<<4)
1943         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_FORCE_RST       (1<<5)
1944         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_FORCE_ACK_MINUS  (1<<6)
1945         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_TSCH_WA         (1<<7)
1946 
1947     u8_t l5ctx_upload_rxp;
1948         #define L5CTX_UPLOAD_RXP_COM                        (1<<0)
1949 
1950     u8_t l5ctx_qp_ou_state;
1951         #define L5CTX_QP_OU_STATE_UPLOADED                  (1<<0)
1952         #define L5CTX_QP_OU_STATE_OFFLOADED                 (1<<1)
1953         #define L5CTX_QP_OU_STATE_UPLOAD_REQ                (1<<2)
1954         #define L5CTX_QP_OU_STATE_OFFLOAD_REQ               (1<<3)
1955     u32_t unused_7;
1956 
1957     u16_t l5ctx_tcp_mss;
1958     u8_t l5ctx_tcp_flags;
1959         #define L5CTX_TCP_FLAGS_NO_DELAY_ACK                (1<<0)
1960         #define L5CTX_TCP_FLAGS_KEEP_ALIVE                  (1<<1)
1961         #define L5CTX_TCP_FLAGS_NAGLE                       (1<<2)
1962         #define L5CTX_TCP_FLAGS_TIME_STAMP                  (1<<3)
1963         #define L5CTX_TCP_FLAGS_SACK                        (1<<4)
1964         #define L5CTX_TCP_FLAGS_SEG_SCALING                 (1<<5)
1965 
1966     u8_t l5ctx_tcp_state;
1967         #define L5CTX_TCP_STATE_VALUE                       (0xff<<0)
1968             #define L5CTX_TCP_STATE_VALUE_UNDEFINED         (0<<0)
1969             #define L5CTX_TCP_STATE_VALUE_LISTEN            (2<<0)
1970             #define L5CTX_TCP_STATE_VALUE_SYN_SENT          (4<<0)
1971             #define L5CTX_TCP_STATE_VALUE_SYN_RECV          (6<<0)
1972             #define L5CTX_TCP_STATE_VALUE_CLOSE_WAIT        (8<<0)
1973             #define L5CTX_TCP_STATE_VALUE_ESTABLISHED       (10<<0)
1974             #define L5CTX_TCP_STATE_VALUE_FIN_WAIT1         (12<<0)
1975             #define L5CTX_TCP_STATE_VALUE_FIN_WAIT2         (14<<0)
1976             #define L5CTX_TCP_STATE_VALUE_TIME_WAIT         (16<<0)
1977             #define L5CTX_TCP_STATE_VALUE_CLOSE             (18<<0)
1978             #define L5CTX_TCP_STATE_VALUE_LAST_ACK          (20<<0)
1979             #define L5CTX_TCP_STATE_VALUE_CLOSING           (22<<0)
1980 
1981     u32_t l5ctx_tcp_rcv_next;
1982     u32_t l5ctx_last_ack_sent;
1983     u32_t l5ctx_tcp_rcv_win_seq;
1984     u32_t l5ctx_tcp_snd_una;
1985     u32_t l5ctx_tcp_snd_next;
1986     u32_t l5ctx_tcp_tstamp;
1987     u32_t l5ctx_tcp_ssthresh;
1988     u16_t l5ctx_tcp_sm_rtt;
1989     u16_t l5ctx_tcp_sm_delta;
1990     u32_t l5ctx_tcp_max_snd_win;
1991     u8_t l5ctx_tcp_comp_cons_retx_num;
1992     u8_t l5ctx_tcp_num_retx;
1993     u8_t unused_8;
1994     u8_t l5ctx_tcp_txp_cmd;
1995     u32_t unused_9;
1996     u8_t l5ctx_snd_q_max_cached_wqes;
1997     u8_t l5ctx_null_cmd_cell_pidx;
1998     u8_t l5ctx_null_cmd_cell_cidx;
1999     u8_t l5ctx_qp_flags;
2000         #define L5CTX_QP_FLAGS_QP_VALID                     (1<<0)
2001         #define L5CTX_QP_FLAGS_SUPPORTS_LAZY_WQES           (1<<1)
2002         #define L5CTX_QP_FLAGS_INBOUND_RDMA_READ_DISABLED   (1<<2)
2003         #define L5CTX_QP_FLAGS_INBOUND_RDMA_WRITE_DISABLED  (1<<3)
2004         #define L5CTX_QP_FLAGS_WINDOW_BINDS_ENABLED         (1<<4)
2005         #define L5CTX_QP_FLAGS_LOCAL_INVALIDATE_IN_PROGRESS  (1<<5)
2006 
2007     l5_orrq_entry_b_xi_t l5ctx_orrq[1];
2008     u32_t l5ctx_cq_cid;
2009     u32_t unused_10[4];
2010     u32_t l5ctx_rdma_crc;
2011     u32_t l5ctx_tcp_snd_wl1;
2012     u32_t l5ctx_tcp_snd_wl2;
2013     u16_t unused_11;
2014     u8_t l5ctx_tcp_upload_reason;
2015         #define L5CTX_TCP_UPLOAD_REASON_KEEP_ALIVE          (1<<0)
2016         #define L5CTX_TCP_UPLOAD_REASON_FIN                 (1<<1)
2017         #define L5CTX_TCP_UPLOAD_REASON_URG                 (1<<2)
2018         #define L5CTX_TCP_UPLOAD_REASON_FRAGMENT            (1<<3)
2019         #define L5CTX_TCP_UPLOAD_REASON_IP_OPTION           (1<<4)
2020         #define L5CTX_TCP_UPLOAD_REASON_RST                 (1<<5)
2021         #define L5CTX_TCP_UPLOAD_REASON_SYN                 (1<<6)
2022         #define L5CTX_TCP_UPLOAD_REASON_TIMEOUT             (1<<7)
2023     u8_t unused_12;
2024 
2025     u32_t l5ctx_tcp_offload_seq;
2026     u32_t l5ctx_pg_cwin;
2027     u32_t l5ctx_high_tcp_ack_sn_rcvd;
2028     u16_t l5ctx_pd;
2029     u8_t l5ctx_snd_q_cidx;
2030     u8_t l5ctx_snd_q_pidx;
2031     u8_t l5ctx_read_rsp_wait;
2032     u8_t l5ctx_rcv_q_flags;
2033         #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE                 (0xf<<0)
2034             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_256         (0<<0)
2035             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_512         (1<<0)
2036             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_1K          (2<<0)
2037             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_2K          (3<<0)
2038             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_4K          (4<<0)
2039             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_8K          (5<<0)
2040             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_16K         (6<<0)
2041             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_32K         (7<<0)
2042             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_64K         (8<<0)
2043             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_128K        (9<<0)
2044             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_256K        (10<<0)
2045             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_512K        (11<<0)
2046             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_1M          (12<<0)
2047             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_2M          (13<<0)
2048         #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE                (0xf<<4)
2049             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_1          (0<<4)
2050             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_2          (1<<4)
2051             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_4          (2<<4)
2052             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_8          (3<<4)
2053             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_16         (4<<4)
2054             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_32         (5<<4)
2055             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_64         (6<<4)
2056             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_128        (7<<4)
2057 
2058     u8_t l5ctx_rcv_q_pidx;
2059     u8_t l5ctx_rcv_q_rxp_cidx;
2060     u8_t l5ctx_rcv_q_com_cidx;
2061     u8_t l5ctx_ird;
2062     u8_t l5ctx_rx_comp_flags;
2063         #define L5CTX_RX_COMP_FLAGS_TCP_HOLE_EXISTS         (1<<0)
2064         #define L5CTX_RX_COMP_FLAGS_MARKER_IN_ISLAND        (1<<1)
2065         #define L5CTX_RX_COMP_FLAGS_READ_REQ_OUTSTANDING    (1<<2)
2066         #define L5CTX_RX_COMP_FLAGS_TCP_ISLAND_CREATED      (1<<3)
2067 
2068     u8_t l5ctx_ooo_read_resp_segs_w_L_bit;
2069     u8_t l5ctx_ooo_send_msg_segs_w_L_bit;
2070     u8_t l5ctx_ooo_read_request_msgs;
2071     u8_t l5ctx_miq_index;
2072     u8_t l5ctx_rcv_path_op_state;
2073         #define L5CTX_RCV_PATH_OP_STATE_OPERATIONAL         (1<<0)
2074         #define L5CTX_RCV_PATH_OP_STATE_BYPASS              (1<<1)
2075 
2076     u32_t l5ctx_send_msg_high_msn_completed;
2077     u32_t l5ctx_read_req_high_msn_queued;
2078     u32_t l5ctx_rx_initial_tcp_sn;
2079     u32_t l5ctx_rsvd_l4_hole_mgmt[4];
2080     l5_irrq_entry_b_xi_t l5ctx_irrq[1];
2081     l5_abuf_cell_b_xi_t l5ctx_rcv_q_abuf[2];
2082     u32_t unused_13[9];
2083     u16_t l5ctx_snd_q_max_wqes;
2084     u16_t l5ctx_snd_q_fw_qidx;
2085     u16_t l5ctx_snd_q_pgtbl_pgidx;
2086     u16_t l5ctx_snd_q_wqes_per_page;
2087     u16_t l5ctx_snd_q_num_pages;
2088     u16_t l5ctx_snd_q_nx_pg_qidx;
2089     u32_t l5ctx_snd_q_pgtbl_phaddr_hi;
2090     u8_t l5ctx_snd_q_pgtbl_phaddr_lo[3];
2091     u8_t l5ctx_snd_q_flags;
2092         #define L5CTX_SND_Q_FLAGS_PAGE_SIZE                 (0xf<<0)
2093             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_256         (0<<0)
2094             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_512         (1<<0)
2095             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_1K          (2<<0)
2096             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_2K          (3<<0)
2097             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_4K          (4<<0)
2098             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_8K          (5<<0)
2099             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_16K         (6<<0)
2100             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_32K         (7<<0)
2101             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_64K         (8<<0)
2102             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_128K        (9<<0)
2103             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_256K        (10<<0)
2104             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_512K        (11<<0)
2105             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_1M          (12<<0)
2106             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_2M          (13<<0)
2107         #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE                (0xf<<4)
2108             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_1          (0<<4)
2109             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_2          (1<<4)
2110             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_4          (2<<4)
2111             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_8          (3<<4)
2112             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_16         (4<<4)
2113             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_32         (5<<4)
2114             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_64         (6<<4)
2115             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_128        (7<<4)
2116 
2117     u32_t l5ctx_rcv_q_pgtbl_phaddr_hi;
2118     u8_t l5ctx_rcv_q_pgtbl_phaddr_lo[3];
2119     u8_t l5ctx_ord;
2120     u16_t l5ctx_rcv_q_nx_pg_qidx;
2121     u16_t l5ctx_tsch_mult_value;
2122     u16_t l5ctx_rcv_q_max_wqes;
2123     u16_t l5ctx_rcv_q_fw_qidx;
2124     u16_t l5ctx_rcv_q_pgtbl_pgidx;
2125     u16_t l5ctx_rcv_q_wqes_per_page;
2126     u16_t l5ctx_rcv_q_num_pages;
2127     u8_t l5ctx_max_scatter_list_elements;
2128     u8_t l5ctx_max_gather_list_elements;
2129     u32_t l5ctx_curr_send_msn;
2130     u32_t l5ctx_curr_rdma_read_msn;
2131     u32_t l5ctx_snd_q_cached_pte_phaddr_hi;
2132     u32_t l5ctx_snd_q_cached_pte_phaddr_lo;
2133     u32_t l5ctx_rcv_q_cached_pte_phaddr_hi;
2134     u32_t l5ctx_rcv_q_cached_pte_phaddr_lo;
2135     u32_t unused_14[15];
2136     tcp_context_cmd_cell_b_xi_t l5ctx_cmd[3];
2137 } l5_context_b_xi_t;
2138 
2139 
2140 /*
2141  *  l5_context_l definition
2142  */
2143 typedef struct l5_context_l
2144 {
2145     u16_t l5ctx_cq_cidx;
2146     u8_t l5ctx_size;
2147     u8_t l5ctx_type;
2148 
2149     u16_t l5ctx_sq_pidx;
2150     u8_t l5ctx_oubits;
2151 
2152     u8_t l5ctx_gen_bd_max;
2153     u16_t l5ctx_rq_pidx;
2154     u16_t l5ctx_tcp_pgid;
2155     u32_t l5ctx_tcp_timer1;
2156 
2157     u16_t l5ctx_tcp_timer3;
2158 
2159     u16_t l5ctx_tcp_timer2;
2160 
2161     u16_t l5ctx_tcp_timer5;
2162 
2163     u16_t l5ctx_tcp_timer4;
2164 
2165     u32_t l5ctx_tcp_snd_wl1;
2166     u32_t l5ctx_tcp_snd_wl2;
2167     u8_t l5ctx_tcp_modes;
2168 
2169     u8_t l5ctx_tcp_dack;
2170     u8_t l5ctx_tcp_tos;
2171     u8_t l5ctx_tcp_ttl;
2172     u32_t l5ctx_tcp_max_adv_win;
2173     u32_t l5ctx_tcp_timer;
2174     u32_t l5ctx_tcp_ip_src;
2175     u32_t l5ctx_tcp_ip_dst;
2176     u8_t l5ctx_tcp_tcp_hlen;
2177     u8_t l5ctx_tcp_rcv_seg_scale;
2178     u8_t l5ctx_tcp_snd_seg_scale;
2179     u8_t l5ctx_tcp_iphdr_nbytes;
2180     u16_t l5ctx_tcp_dst_port;
2181     u16_t l5ctx_tcp_src_port;
2182     u8_t l5ctx_tcp_state;
2183 
2184     u8_t l5ctx_tcp_flags;
2185 
2186     u16_t l5ctx_tcp_mss;
2187     u32_t l5ctx_tcp_rcv_next;
2188     u32_t l5ctx_last_ack_sent;
2189     u32_t l5ctx_tcp_rcv_win_seq;
2190     u32_t l5ctx_tcp_snd_una;
2191     u32_t l5ctx_tcp_snd_next;
2192     u32_t l5ctx_tcp_snd_max;
2193     u32_t l5ctx_tcp_snd_win;
2194     u32_t l5ctx_tcp_snd_cwin;
2195     u32_t l5ctx_tcp_tstamp;
2196     u32_t l5ctx_tcp_ssthresh;
2197     u16_t l5ctx_tcp_sm_delta;
2198     u16_t l5ctx_tcp_sm_rtt;
2199     u32_t l5ctx_tcp_max_snd_win;
2200     u32_t l5ctx_tcp_tsch_snd_next;
2201     u32_t l5ctx_tcp_slot_size;
2202 
2203     u8_t l5ctx_tcp_tsch_xnum;
2204 
2205     u8_t l5ctx_tcp_cons_retx_num;
2206     u8_t l5ctx_tcp_tsch_cmd;
2207     u8_t l5ctx_tcp_cp_cmd;
2208     u8_t l5ctx_tcp_tsch_cons_retx_num;
2209     u8_t l5ctx_tcp_prod_retx_num;
2210     u8_t l5ctx_tcp_tx_protocol_flags;
2211 
2212     u8_t l5ctx_tcp_num_dupack;
2213     u8_t l5ctx_tcp_txp_cmd;
2214     u8_t l5ctx_tcp_upload_reason;
2215 
2216     u8_t l5ctx_tcp_num_retx;
2217     u8_t l5ctx_tcp_comp_cons_retx_num;
2218     u32_t unused_0;
2219     tcp_context_cmd_cell_l_te_t l5ctx_cmd[3];
2220     u16_t l5ctx_snd_q_fw_qidx;
2221     u16_t l5ctx_snd_q_max_wqes;
2222     u16_t l5ctx_snd_q_pgtbl_pgidx;
2223     u16_t l5ctx_snd_q_nx_pg_qidx;
2224     u16_t l5ctx_snd_q_num_pages;
2225     u16_t l5ctx_snd_q_wqes_per_page;
2226     u8_t l5ctx_snd_q_flags;
2227 
2228     u8_t l5ctx_snd_q_max_cached_wqes;
2229     u8_t l5ctx_snd_q_cidx;
2230     u8_t l5ctx_snd_q_pidx;
2231     u32_t l5ctx_snd_q_pgtbl_phaddr_hi;
2232     u8_t l5ctx_snd_q_read_rsp_wait;
2233     u8_t l5ctx_snd_q_pgtbl_phaddr_lo[3];
2234     u32_t l5ctx_snd_q_cached_pte_phaddr_hi;
2235     u32_t l5ctx_snd_q_cached_pte_phaddr_lo;
2236     l5_cmd_cell_l_t l5ctx_snd_q_cmd[3];
2237     u16_t l5ctx_rcv_q_fw_qidx;
2238     u16_t l5ctx_rcv_q_max_wqes;
2239     u16_t l5ctx_rcv_q_pgtbl_pgidx;
2240     u16_t l5ctx_rcv_q_nx_pg_qidx;
2241     u16_t l5ctx_rcv_q_num_pages;
2242     u16_t l5ctx_rcv_q_wqes_per_page;
2243     u8_t l5ctx_rcv_q_flags;
2244 
2245     u8_t l5ctx_rcv_q_com_cidx;
2246     u8_t l5ctx_rcv_q_rxp_cidx;
2247     u8_t l5ctx_rcv_q_pidx;
2248     u32_t l5ctx_rcv_q_pgtbl_phaddr_hi;
2249     u8_t l5ctx_rcv_q_qp_ou_state;
2250         #define L5CTX_RCV_Q_QP_OU_STATE_UPLOADED            (1<<0)
2251         #define L5CTX_RCV_Q_QP_OU_STATE_OFFLOADED           (1<<1)
2252         #define L5CTX_RCV_Q_QP_OU_STATE_UPLOAD_REQ          (1<<2)
2253         #define L5CTX_RCV_Q_QP_OU_STATE_OFFLOAD_REQ         (1<<3)
2254 
2255     u8_t l5ctx_rcv_q_pgtbl_phaddr_lo[3];
2256     u32_t l5ctx_rcv_q_cached_pte_phaddr_hi;
2257     u32_t l5ctx_rcv_q_cached_pte_phaddr_lo;
2258     l5_abuf_cell_l_t l5ctx_rcv_q_abuf[2];
2259     u32_t l5ctx_cq_cid;
2260     u32_t l5ctx_curr_send_msn;
2261     u32_t l5ctx_curr_rdma_read_msn;
2262     u8_t l5ctx_ird;
2263     u8_t l5ctx_rcv_path_op_state;
2264 
2265     u16_t l5ctx_pd;
2266     u32_t l5ctx_tx_initial_tcp_sn;
2267     u8_t l5ctx_null_cmd_cell_cidx;
2268     u8_t l5ctx_null_cmd_cell_pidx;
2269     u16_t l5ctx_tsch_mult_value;
2270     l5_orrq_entry_l_t l5ctx_orrq[1];
2271     l5_irrq_entry_l_t l5ctx_irrq[1];
2272     u8_t l5ctx_upload_flag;
2273 
2274     u8_t l5ctx_qp_flags;
2275 
2276     u8_t l5ctx_rx_comp_flags;
2277 
2278     u8_t l5ctx_miq_index;
2279     u8_t l5ctx_ooo_read_request_msgs;
2280     u8_t l5ctx_ooo_send_msg_segs_w_L_bit;
2281     u8_t l5ctx_ooo_read_resp_segs_w_L_bit;
2282     u8_t l5ctx_upload_rxp;
2283 
2284     u32_t l5ctx_high_tcp_ack_sn_rcvd;
2285     u32_t l5ctx_rx_initial_tcp_sn;
2286     u32_t l5ctx_send_msg_high_msn_completed;
2287     u32_t l5ctx_read_req_high_msn_queued;
2288     u32_t l5ctx_rsvd_l4_hole_mgmt[3];
2289     u16_t l5ctx_offload_flag;
2290     u16_t l5ctx_cam_index;
2291 } l5_context_l_t;
2292 
2293 
2294 
2295 /*
2296  *  l5_context_l definition
2297  */
2298 typedef struct l5_context_l_xi
2299 {
2300     u32_t l5ctx_tcp_tsch_snd_next;
2301     u32_t l5ctx_tcp_snd_max;
2302     u8_t l5ctx_tcp_tsch_xnum;
2303         #define L5CTX_TCP_TSCH_XNUM_VAL                     (0x7f<<0)
2304         #define L5CTX_TCP_TSCH_XNUM_L4                      (1<<7)
2305 
2306     u8_t l5ctx_tcp_cons_retx_num;
2307     u8_t l5ctx_tcp_tsch_cmd;
2308     u8_t l5ctx_tcp_cp_cmd;
2309     u8_t l5ctx_tcp_tsch_cons_retx_num;
2310     u8_t l5ctx_tcp_prod_retx_num;
2311     u16_t l5ctx_tcp_pgid;
2312         #define L5CTX_TCP_PGID_VAL                          (0x3fff<<0)
2313     u16_t unused_0;
2314     u8_t unused_1;
2315 
2316     u8_t l5ctx_tcp_l2_slot_size;
2317     u32_t unused_2;
2318     u8_t l5ctx_tcp_modes;
2319         #define L5CTX_TCP_MODES_RST_INDICATED               (1<<0)
2320         #define L5CTX_TCP_MODES_DISC_BD                     (1<<1)
2321         #define L5CTX_TCP_MODES_UPLOAD_INITED               (1<<2)
2322         #define L5CTX_TCP_MODES_RMT_DISC                    (1<<3)
2323         #define L5CTX_TCP_MODES_PG_INVALIDATED              (1<<4)
2324         #define L5CTX_TCP_MODES_ABORT_PENDING               (1<<5)
2325         #define L5CTX_TCP_MODES_DISC_PENDING                (1<<6)
2326         #define L5CTX_TCP_MODES_SS                          (1<<7)
2327 
2328     u8_t l5ctx_tcp_dack;
2329     u8_t l5ctx_tcp_tos;
2330     u8_t l5ctx_tcp_ttl;
2331     u32_t l5ctx_tcp_max_adv_win;
2332     u32_t l5ctx_timer;
2333     u32_t l5ctx_tcp_ip_src;
2334     u32_t l5ctx_tcp_ip_dst;
2335     u8_t l5ctx_tcp_tcp_hlen;
2336     u8_t l5ctx_tcp_rcv_seg_scale;
2337     u8_t l5ctx_tcp_snd_seg_scale;
2338     u8_t l5ctx_tcp_iphdr_nbytes;
2339     u16_t l5ctx_tcp_dst_port;
2340     u16_t l5ctx_tcp_src_port;
2341     u32_t l5ctx_tx_initial_tcp_sn;
2342     u16_t unused_3;
2343     u8_t unused_4;
2344     u8_t l5ctx_upload_flag;
2345         #define L5CTX_UPLOAD_FLAG_TXP                       (1<<0)
2346         #define L5CTX_UPLOAD_FLAG_TXP_COM                   (1<<1)
2347     u32_t unused_5[17];
2348 
2349     u16_t l5ctx_cq_cidx;
2350     u8_t l5ctx_size;
2351         #define L5CTX_SIZE_ARM_CQ                           (1<<0)
2352 
2353     u8_t l5ctx_type;
2354         #define L5CTX_TYPE_TYPE                             (0xf<<4)
2355             #define L5CTX_TYPE_TYPE_EMPTY                   (0<<4)
2356             #define L5CTX_TYPE_TYPE_L2                      (1<<4)
2357             #define L5CTX_TYPE_TYPE_TCP                     (2<<4)
2358             #define L5CTX_TYPE_TYPE_L5                      (3<<4)
2359             #define L5CTX_TYPE_TYPE_L2_BD_CHN               (4<<4)
2360 
2361     u16_t l5ctx_sq_pidx;
2362     u8_t l5ctx_oubits;
2363         #define L5CTX_OUBITS_ACTIVATE                       (1<<0)
2364         #define L5CTX_OUBITS_CP_UPLOAD                      (1<<1)
2365         #define L5CTX_OUBITS_RXP_UPLOAD                     (1<<2)
2366         #define L5CTX_OUBITS_TXP_UPLOAD                     (1<<3)
2367         #define L5CTX_OUBITS_COM_RX_UPLOAD                  (1<<4)
2368         #define L5CTX_OUBITS_COM_TX_UPLOAD                  (1<<5)
2369         #define L5CTX_OUBITS_CP_UPLOAD_COMP                 (1<<6)
2370         #define L5CTX_OUBITS_HOST_ACK                       (1<<7)
2371 
2372     u8_t l5ctx_gen_bd_max;
2373     u16_t l5ctx_rq_pidx;
2374     u16_t unused_6;
2375     u32_t l5ctx_tcp_timer1;
2376         #define L5CTX_TCP_TIMER1_DISABLE                    (1UL<<0)
2377         #define L5CTX_TCP_TIMER1_VALUE                      (0x7fffffffL<<1)
2378 
2379     u16_t l5ctx_tcp_timer3;
2380         #define L5CTX_TCP_TIMER3_DISABLE                    (1<<0)
2381         #define L5CTX_TCP_TIMER3_VALUE                      (0x7fff<<1)
2382 
2383     u16_t l5ctx_tcp_timer2;
2384         #define L5CTX_TCP_TIMER2_DISABLE                    (1<<0)
2385         #define L5CTX_TCP_TIMER2_VALUE                      (0x7fff<<1)
2386 
2387     u16_t l5ctx_tcp_timer5;
2388         #define L5CTX_TCP_TIMER5_DISABLE                    (1<<0)
2389         #define L5CTX_TCP_TIMER5_VALUE                      (0x7fff<<1)
2390 
2391     u16_t l5ctx_tcp_timer4;
2392         #define L5CTX_TCP_TIMER4_DISABLE                    (1<<0)
2393         #define L5CTX_TCP_TIMER4_VALUE                      (0x7fff<<1)
2394 
2395     u32_t l5ctx_tcp_slot_size;
2396         #define L5CTX_TCP_SLOT_SIZE_SLOT_SIZE               (0xffffffL<<0)
2397         #define L5CTX_TCP_SLOT_SIZE_CMD_MAX                 (0x7fL<<24)
2398         #define L5CTX_TCP_SLOT_SIZE_STOP                    (1UL<<31)
2399 
2400     u32_t l5ctx_tcp_snd_cwin;
2401     u32_t l5ctx_tcp_snd_win;
2402     u8_t l5ctx_qp_ou_state;
2403         #define L5CTX_QP_OU_STATE_UPLOADED                  (1<<0)
2404         #define L5CTX_QP_OU_STATE_OFFLOADED                 (1<<1)
2405         #define L5CTX_QP_OU_STATE_UPLOAD_REQ                (1<<2)
2406         #define L5CTX_QP_OU_STATE_OFFLOAD_REQ               (1<<3)
2407 
2408     u8_t l5ctx_upload_rxp;
2409         #define L5CTX_UPLOAD_RXP_COM                        (1<<0)
2410 
2411     u8_t l5ctx_tcp_tx_protocol_flags;
2412         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_TIMER_DELAY_ACK  (1<<0)
2413         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_UPLOAD          (1<<1)
2414         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_FORCE_ACK       (1<<2)
2415         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_LAST_ACK        (1<<3)
2416         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_LAST_RST        (1<<4)
2417         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_FORCE_RST       (1<<5)
2418         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_FORCE_ACK_MINUS  (1<<6)
2419         #define L5CTX_TCP_TX_PROTOCOL_FLAGS_TSCH_WA         (1<<7)
2420 
2421     u8_t l5ctx_tcp_num_dupack;
2422     u32_t unused_7;
2423     u8_t l5ctx_tcp_state;
2424         #define L5CTX_TCP_STATE_VALUE                       (0xff<<0)
2425             #define L5CTX_TCP_STATE_VALUE_UNDEFINED         (0<<0)
2426             #define L5CTX_TCP_STATE_VALUE_LISTEN            (2<<0)
2427             #define L5CTX_TCP_STATE_VALUE_SYN_SENT          (4<<0)
2428             #define L5CTX_TCP_STATE_VALUE_SYN_RECV          (6<<0)
2429             #define L5CTX_TCP_STATE_VALUE_CLOSE_WAIT        (8<<0)
2430             #define L5CTX_TCP_STATE_VALUE_ESTABLISHED       (10<<0)
2431             #define L5CTX_TCP_STATE_VALUE_FIN_WAIT1         (12<<0)
2432             #define L5CTX_TCP_STATE_VALUE_FIN_WAIT2         (14<<0)
2433             #define L5CTX_TCP_STATE_VALUE_TIME_WAIT         (16<<0)
2434             #define L5CTX_TCP_STATE_VALUE_CLOSE             (18<<0)
2435             #define L5CTX_TCP_STATE_VALUE_LAST_ACK          (20<<0)
2436             #define L5CTX_TCP_STATE_VALUE_CLOSING           (22<<0)
2437 
2438     u8_t l5ctx_tcp_flags;
2439         #define L5CTX_TCP_FLAGS_NO_DELAY_ACK                (1<<0)
2440         #define L5CTX_TCP_FLAGS_KEEP_ALIVE                  (1<<1)
2441         #define L5CTX_TCP_FLAGS_NAGLE                       (1<<2)
2442         #define L5CTX_TCP_FLAGS_TIME_STAMP                  (1<<3)
2443         #define L5CTX_TCP_FLAGS_SACK                        (1<<4)
2444         #define L5CTX_TCP_FLAGS_SEG_SCALING                 (1<<5)
2445 
2446     u16_t l5ctx_tcp_mss;
2447     u32_t l5ctx_tcp_rcv_next;
2448     u32_t l5ctx_last_ack_sent;
2449     u32_t l5ctx_tcp_rcv_win_seq;
2450     u32_t l5ctx_tcp_snd_una;
2451     u32_t l5ctx_tcp_snd_next;
2452     u32_t l5ctx_tcp_tstamp;
2453     u32_t l5ctx_tcp_ssthresh;
2454     u16_t l5ctx_tcp_sm_delta;
2455     u16_t l5ctx_tcp_sm_rtt;
2456     u32_t l5ctx_tcp_max_snd_win;
2457     u8_t l5ctx_tcp_txp_cmd;
2458     u8_t unused_8;
2459     u8_t l5ctx_tcp_num_retx;
2460     u8_t l5ctx_tcp_comp_cons_retx_num;
2461     u32_t unused_9;
2462     u8_t l5ctx_qp_flags;
2463         #define L5CTX_QP_FLAGS_QP_VALID                     (1<<0)
2464         #define L5CTX_QP_FLAGS_SUPPORTS_LAZY_WQES           (1<<1)
2465         #define L5CTX_QP_FLAGS_INBOUND_RDMA_READ_DISABLED   (1<<2)
2466         #define L5CTX_QP_FLAGS_INBOUND_RDMA_WRITE_DISABLED  (1<<3)
2467         #define L5CTX_QP_FLAGS_WINDOW_BINDS_ENABLED         (1<<4)
2468         #define L5CTX_QP_FLAGS_LOCAL_INVALIDATE_IN_PROGRESS  (1<<5)
2469 
2470     u8_t l5ctx_null_cmd_cell_cidx;
2471     u8_t l5ctx_null_cmd_cell_pidx;
2472     u8_t l5ctx_snd_q_max_cached_wqes;
2473     l5_orrq_entry_l_xi_t l5ctx_orrq[1];
2474     u32_t l5ctx_cq_cid;
2475     u32_t unused_10[4];
2476     u32_t l5ctx_rdma_crc;
2477     u32_t l5ctx_tcp_snd_wl1;
2478     u32_t l5ctx_tcp_snd_wl2;
2479     u8_t unused_11;
2480     u8_t l5ctx_tcp_upload_reason;
2481         #define L5CTX_TCP_UPLOAD_REASON_KEEP_ALIVE          (1<<0)
2482         #define L5CTX_TCP_UPLOAD_REASON_FIN                 (1<<1)
2483         #define L5CTX_TCP_UPLOAD_REASON_URG                 (1<<2)
2484         #define L5CTX_TCP_UPLOAD_REASON_FRAGMENT            (1<<3)
2485         #define L5CTX_TCP_UPLOAD_REASON_IP_OPTION           (1<<4)
2486         #define L5CTX_TCP_UPLOAD_REASON_RST                 (1<<5)
2487         #define L5CTX_TCP_UPLOAD_REASON_SYN                 (1<<6)
2488         #define L5CTX_TCP_UPLOAD_REASON_TIMEOUT             (1<<7)
2489     u16_t unused_12;
2490 
2491     u32_t l5ctx_tcp_offload_seq;
2492     u32_t l5ctx_pg_cwin;
2493     u32_t l5ctx_high_tcp_ack_sn_rcvd;
2494     u8_t l5ctx_snd_q_pidx;
2495     u8_t l5ctx_snd_q_cidx;
2496     u16_t l5ctx_pd;
2497     u8_t l5ctx_rcv_q_rxp_cidx;
2498     u8_t l5ctx_rcv_q_pidx;
2499     u8_t l5ctx_rcv_q_flags;
2500         #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE                 (0xf<<0)
2501             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_256         (0<<0)
2502             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_512         (1<<0)
2503             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_1K          (2<<0)
2504             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_2K          (3<<0)
2505             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_4K          (4<<0)
2506             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_8K          (5<<0)
2507             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_16K         (6<<0)
2508             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_32K         (7<<0)
2509             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_64K         (8<<0)
2510             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_128K        (9<<0)
2511             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_256K        (10<<0)
2512             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_512K        (11<<0)
2513             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_1M          (12<<0)
2514             #define L5CTX_RCV_Q_FLAGS_PAGE_SIZE_2M          (13<<0)
2515         #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE                (0xf<<4)
2516             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_1          (0<<4)
2517             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_2          (1<<4)
2518             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_4          (2<<4)
2519             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_8          (3<<4)
2520             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_16         (4<<4)
2521             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_32         (5<<4)
2522             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_64         (6<<4)
2523             #define L5CTX_RCV_Q_FLAGS_QUEUE_SIZE_128        (7<<4)
2524 
2525     u8_t l5ctx_read_rsp_wait;
2526     u8_t l5ctx_ooo_read_resp_segs_w_L_bit;
2527     u8_t l5ctx_rx_comp_flags;
2528         #define L5CTX_RX_COMP_FLAGS_TCP_HOLE_EXISTS         (1<<0)
2529         #define L5CTX_RX_COMP_FLAGS_MARKER_IN_ISLAND        (1<<1)
2530         #define L5CTX_RX_COMP_FLAGS_READ_REQ_OUTSTANDING    (1<<2)
2531         #define L5CTX_RX_COMP_FLAGS_TCP_ISLAND_CREATED      (1<<3)
2532 
2533     u8_t l5ctx_ird;
2534     u8_t l5ctx_rcv_q_com_cidx;
2535     u8_t l5ctx_rcv_path_op_state;
2536         #define L5CTX_RCV_PATH_OP_STATE_OPERATIONAL         (1<<0)
2537         #define L5CTX_RCV_PATH_OP_STATE_BYPASS              (1<<1)
2538 
2539     u8_t l5ctx_miq_index;
2540     u8_t l5ctx_ooo_read_request_msgs;
2541     u8_t l5ctx_ooo_send_msg_segs_w_L_bit;
2542     u32_t l5ctx_send_msg_high_msn_completed;
2543     u32_t l5ctx_read_req_high_msn_queued;
2544     u32_t l5ctx_rx_initial_tcp_sn;
2545     u32_t l5ctx_rsvd_l4_hole_mgmt[4];
2546     l5_irrq_entry_l_xi_t l5ctx_irrq[1];
2547     l5_abuf_cell_l_xi_t l5ctx_rcv_q_abuf[2];
2548     u32_t unused_13[9];
2549     u16_t l5ctx_snd_q_fw_qidx;
2550     u16_t l5ctx_snd_q_max_wqes;
2551     u16_t l5ctx_snd_q_wqes_per_page;
2552     u16_t l5ctx_snd_q_pgtbl_pgidx;
2553     u16_t l5ctx_snd_q_nx_pg_qidx;
2554     u16_t l5ctx_snd_q_num_pages;
2555     u32_t l5ctx_snd_q_pgtbl_phaddr_hi;
2556     u8_t l5ctx_snd_q_flags;
2557         #define L5CTX_SND_Q_FLAGS_PAGE_SIZE                 (0xf<<0)
2558             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_256         (0<<0)
2559             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_512         (1<<0)
2560             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_1K          (2<<0)
2561             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_2K          (3<<0)
2562             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_4K          (4<<0)
2563             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_8K          (5<<0)
2564             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_16K         (6<<0)
2565             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_32K         (7<<0)
2566             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_64K         (8<<0)
2567             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_128K        (9<<0)
2568             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_256K        (10<<0)
2569             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_512K        (11<<0)
2570             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_1M          (12<<0)
2571             #define L5CTX_SND_Q_FLAGS_PAGE_SIZE_2M          (13<<0)
2572         #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE                (0xf<<4)
2573             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_1          (0<<4)
2574             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_2          (1<<4)
2575             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_4          (2<<4)
2576             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_8          (3<<4)
2577             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_16         (4<<4)
2578             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_32         (5<<4)
2579             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_64         (6<<4)
2580             #define L5CTX_SND_Q_FLAGS_QUEUE_SIZE_128        (7<<4)
2581 
2582     u8_t l5ctx_snd_q_pgtbl_phaddr_lo[3];
2583     u32_t l5ctx_rcv_q_pgtbl_phaddr_hi;
2584     u8_t l5ctx_ord;
2585     u8_t l5ctx_rcv_q_pgtbl_phaddr_lo[3];
2586     u16_t l5ctx_tsch_mult_value;
2587     u16_t l5ctx_rcv_q_nx_pg_qidx;
2588     u16_t l5ctx_rcv_q_fw_qidx;
2589     u16_t l5ctx_rcv_q_max_wqes;
2590     u16_t l5ctx_rcv_q_wqes_per_page;
2591     u16_t l5ctx_rcv_q_pgtbl_pgidx;
2592     u8_t l5ctx_max_gather_list_elements;
2593     u8_t l5ctx_max_scatter_list_elements;
2594     u16_t l5ctx_rcv_q_num_pages;
2595     u32_t l5ctx_curr_send_msn;
2596     u32_t l5ctx_curr_rdma_read_msn;
2597     u32_t l5ctx_snd_q_cached_pte_phaddr_hi;
2598     u32_t l5ctx_snd_q_cached_pte_phaddr_lo;
2599     u32_t l5ctx_rcv_q_cached_pte_phaddr_hi;
2600     u32_t l5ctx_rcv_q_cached_pte_phaddr_lo;
2601     u32_t unused_14[15];
2602     tcp_context_cmd_cell_l_xi_t l5ctx_cmd[3];
2603 } l5_context_l_xi_t;
2604 
2605 
2606 /*
2607  * l5_context select
2608  */
2609 #if defined(LITTLE_ENDIAN)
2610     typedef l5_context_l_t l5_context_t;
2611     typedef l5_context_l_xi_t l5_context_xi_t;
2612 #elif defined(BIG_ENDIAN)
2613     typedef l5_context_b_t l5_context_t;
2614     typedef l5_context_b_xi_t l5_context_xi_t;
2615 #endif
2616 
2617 
2618 #endif /* _l5_defs_h_ */
2619