1 /**************************************************************************
2 SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3
4 Copyright (c) 2007-2009 Chelsio Inc.
5 All rights reserved.
6
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions are met:
9
10 1. Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
12
13 2. Neither the name of the Chelsio Corporation nor the names of its
14 contributors may be used to endorse or promote products derived from
15 this software without specific prior written permission.
16
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 POSSIBILITY OF SUCH DAMAGE.
28
29 $FreeBSD$
30
31 ***************************************************************************/
32 #ifndef T3_CPL_H
33 #define T3_CPL_H
34
35 enum CPL_opcode {
36 CPL_PASS_OPEN_REQ = 0x1,
37 CPL_PASS_ACCEPT_RPL = 0x2,
38 CPL_ACT_OPEN_REQ = 0x3,
39 CPL_SET_TCB = 0x4,
40 CPL_SET_TCB_FIELD = 0x5,
41 CPL_GET_TCB = 0x6,
42 CPL_PCMD = 0x7,
43 CPL_CLOSE_CON_REQ = 0x8,
44 CPL_CLOSE_LISTSRV_REQ = 0x9,
45 CPL_ABORT_REQ = 0xA,
46 CPL_ABORT_RPL = 0xB,
47 CPL_TX_DATA = 0xC,
48 CPL_RX_DATA_ACK = 0xD,
49 CPL_TX_PKT = 0xE,
50 CPL_RTE_DELETE_REQ = 0xF,
51 CPL_RTE_WRITE_REQ = 0x10,
52 CPL_RTE_READ_REQ = 0x11,
53 CPL_L2T_WRITE_REQ = 0x12,
54 CPL_L2T_READ_REQ = 0x13,
55 CPL_SMT_WRITE_REQ = 0x14,
56 CPL_SMT_READ_REQ = 0x15,
57 CPL_TX_PKT_LSO = 0x16,
58 CPL_PCMD_READ = 0x17,
59 CPL_BARRIER = 0x18,
60 CPL_TID_RELEASE = 0x1A,
61
62 CPL_CLOSE_LISTSRV_RPL = 0x20,
63 CPL_ERROR = 0x21,
64 CPL_GET_TCB_RPL = 0x22,
65 CPL_L2T_WRITE_RPL = 0x23,
66 CPL_PCMD_READ_RPL = 0x24,
67 CPL_PCMD_RPL = 0x25,
68 CPL_PEER_CLOSE = 0x26,
69 CPL_RTE_DELETE_RPL = 0x27,
70 CPL_RTE_WRITE_RPL = 0x28,
71 CPL_RX_DDP_COMPLETE = 0x29,
72 CPL_RX_PHYS_ADDR = 0x2A,
73 CPL_RX_PKT = 0x2B,
74 CPL_RX_URG_NOTIFY = 0x2C,
75 CPL_SET_TCB_RPL = 0x2D,
76 CPL_SMT_WRITE_RPL = 0x2E,
77 CPL_TX_DATA_ACK = 0x2F,
78
79 CPL_ABORT_REQ_RSS = 0x30,
80 CPL_ABORT_RPL_RSS = 0x31,
81 CPL_CLOSE_CON_RPL = 0x32,
82 CPL_ISCSI_HDR = 0x33,
83 CPL_L2T_READ_RPL = 0x34,
84 CPL_RDMA_CQE = 0x35,
85 CPL_RDMA_CQE_READ_RSP = 0x36,
86 CPL_RDMA_CQE_ERR = 0x37,
87 CPL_RTE_READ_RPL = 0x38,
88 CPL_RX_DATA = 0x39,
89
90 CPL_ACT_OPEN_RPL = 0x40,
91 CPL_PASS_OPEN_RPL = 0x41,
92 CPL_RX_DATA_DDP = 0x42,
93 CPL_SMT_READ_RPL = 0x43,
94
95 CPL_ACT_ESTABLISH = 0x50,
96 CPL_PASS_ESTABLISH = 0x51,
97
98 CPL_PASS_ACCEPT_REQ = 0x70,
99
100 CPL_ASYNC_NOTIF = 0x80, /* fake opcode for async notifications */
101
102 CPL_TX_DMA_ACK = 0xA0,
103 CPL_RDMA_READ_REQ = 0xA1,
104 CPL_RDMA_TERMINATE = 0xA2,
105 CPL_TRACE_PKT = 0xA3,
106 CPL_RDMA_EC_STATUS = 0xA5,
107 CPL_SGE_EC_CR_RETURN = 0xA6,
108
109 NUM_CPL_CMDS /* must be last and previous entries must be sorted */
110 };
111
112 enum CPL_error {
113 CPL_ERR_NONE = 0,
114 CPL_ERR_TCAM_PARITY = 1,
115 CPL_ERR_TCAM_FULL = 3,
116 CPL_ERR_CONN_RESET = 20,
117 CPL_ERR_CONN_EXIST = 22,
118 CPL_ERR_ARP_MISS = 23,
119 CPL_ERR_BAD_SYN = 24,
120 CPL_ERR_CONN_TIMEDOUT = 30,
121 CPL_ERR_XMIT_TIMEDOUT = 31,
122 CPL_ERR_PERSIST_TIMEDOUT = 32,
123 CPL_ERR_FINWAIT2_TIMEDOUT = 33,
124 CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
125 CPL_ERR_RTX_NEG_ADVICE = 35,
126 CPL_ERR_PERSIST_NEG_ADVICE = 36,
127 CPL_ERR_ABORT_FAILED = 42,
128 CPL_ERR_GENERAL = 99
129 };
130
131 enum {
132 CPL_CONN_POLICY_AUTO = 0,
133 CPL_CONN_POLICY_ASK = 1,
134 CPL_CONN_POLICY_FILTER = 2,
135 CPL_CONN_POLICY_DENY = 3
136 };
137
138 enum {
139 ULP_MODE_NONE = 0,
140 ULP_MODE_TCP_DDP = 1,
141 ULP_MODE_ISCSI = 2,
142 ULP_MODE_RDMA = 4,
143 ULP_MODE_TCPDDP = 5
144 };
145
146 enum {
147 ULP_CRC_HEADER = 1 << 0,
148 ULP_CRC_DATA = 1 << 1
149 };
150
151 enum {
152 CPL_PASS_OPEN_ACCEPT,
153 CPL_PASS_OPEN_REJECT,
154 CPL_PASS_OPEN_ACCEPT_TNL
155 };
156
157 enum {
158 CPL_ABORT_SEND_RST = 0,
159 CPL_ABORT_NO_RST,
160 CPL_ABORT_POST_CLOSE_REQ = 2
161 };
162
163 enum { /* TX_PKT_LSO ethernet types */
164 CPL_ETH_II,
165 CPL_ETH_II_VLAN,
166 CPL_ETH_802_3,
167 CPL_ETH_802_3_VLAN
168 };
169
170 enum { /* TCP congestion control algorithms */
171 CONG_ALG_RENO,
172 CONG_ALG_TAHOE,
173 CONG_ALG_NEWRENO,
174 CONG_ALG_HIGHSPEED
175 };
176
177 enum { /* RSS hash type */
178 RSS_HASH_NONE = 0,
179 RSS_HASH_2_TUPLE = 1,
180 RSS_HASH_4_TUPLE = 2,
181 RSS_HASH_TCPV6 = 3
182 };
183
184 union opcode_tid {
185 __be32 opcode_tid;
186 __u8 opcode;
187 };
188
189 #define S_OPCODE 24
190 #define V_OPCODE(x) ((x) << S_OPCODE)
191 #define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)
192 #define G_TID(x) ((x) & 0xFFFFFF)
193
194 /* tid is assumed to be 24-bits */
195 #define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))
196
197 #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
198
199 /* extract the TID from a CPL command */
200 #define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))
201
202 struct tcp_options {
203 __be16 mss;
204 __u8 wsf;
205 #if defined(__LITTLE_ENDIAN_BITFIELD)
206 __u8 :5;
207 __u8 ecn:1;
208 __u8 sack:1;
209 __u8 tstamp:1;
210 #else
211 __u8 tstamp:1;
212 __u8 sack:1;
213 __u8 ecn:1;
214 __u8 :5;
215 #endif
216 };
217
218 struct rss_header {
219 __u8 opcode;
220 #if defined(__LITTLE_ENDIAN_BITFIELD)
221 __u8 cpu_idx:6;
222 __u8 hash_type:2;
223 #else
224 __u8 hash_type:2;
225 __u8 cpu_idx:6;
226 #endif
227 __be16 cq_idx;
228 __be32 rss_hash_val;
229 };
230
231 #define S_HASHTYPE 22
232 #define M_HASHTYPE 0x3
233 #define G_HASHTYPE(x) (((x) >> S_HASHTYPE) & M_HASHTYPE)
234
235 #define S_QNUM 0
236 #define M_QNUM 0xFFFF
237 #define G_QNUM(x) (((x) >> S_QNUM) & M_QNUM)
238
239 #ifndef CHELSIO_FW
240 struct work_request_hdr {
241 union {
242 struct {
243 __be32 wr_hi;
244 __be32 wr_lo;
245 } ilp32;
246 struct {
247 __be64 wr_hilo;
248 } lp64;
249 } u;
250 };
251
252 #define wrh_hi u.ilp32.wr_hi
253 #define wrh_lo u.ilp32.wr_lo
254 #define wrh_hilo u.lp64.wr_hilo
255
256 /* wr_hi fields */
257 #define S_WR_SGE_CREDITS 0
258 #define M_WR_SGE_CREDITS 0xFF
259 #define V_WR_SGE_CREDITS(x) ((x) << S_WR_SGE_CREDITS)
260 #define G_WR_SGE_CREDITS(x) (((x) >> S_WR_SGE_CREDITS) & M_WR_SGE_CREDITS)
261
262 #define S_WR_SGLSFLT 8
263 #define M_WR_SGLSFLT 0xFF
264 #define V_WR_SGLSFLT(x) ((x) << S_WR_SGLSFLT)
265 #define G_WR_SGLSFLT(x) (((x) >> S_WR_SGLSFLT) & M_WR_SGLSFLT)
266
267 #define S_WR_BCNTLFLT 16
268 #define M_WR_BCNTLFLT 0xF
269 #define V_WR_BCNTLFLT(x) ((x) << S_WR_BCNTLFLT)
270 #define G_WR_BCNTLFLT(x) (((x) >> S_WR_BCNTLFLT) & M_WR_BCNTLFLT)
271
272 /*
273 * Applicable to BYPASS WRs only: the uP will add a CPL_BARRIER before
274 * and after the BYPASS WR if the ATOMIC bit is set.
275 */
276 #define S_WR_ATOMIC 16
277 #define V_WR_ATOMIC(x) ((x) << S_WR_ATOMIC)
278 #define F_WR_ATOMIC V_WR_ATOMIC(1U)
279
280 /*
281 * Applicable to BYPASS WRs only: the uP will flush buffered non abort
282 * related WRs.
283 */
284 #define S_WR_FLUSH 17
285 #define V_WR_FLUSH(x) ((x) << S_WR_FLUSH)
286 #define F_WR_FLUSH V_WR_FLUSH(1U)
287
288 #define S_WR_CHN 18
289 #define V_WR_CHN(x) ((x) << S_WR_CHN)
290 #define F_WR_CHN V_WR_CHN(1U)
291
292 #define S_WR_CHN_VLD 19
293 #define V_WR_CHN_VLD(x) ((x) << S_WR_CHN_VLD)
294 #define F_WR_CHN_VLD V_WR_CHN_VLD(1U)
295
296 #define S_WR_DATATYPE 20
297 #define V_WR_DATATYPE(x) ((x) << S_WR_DATATYPE)
298 #define F_WR_DATATYPE V_WR_DATATYPE(1U)
299
300 #define S_WR_COMPL 21
301 #define V_WR_COMPL(x) ((x) << S_WR_COMPL)
302 #define F_WR_COMPL V_WR_COMPL(1U)
303
304 #define S_WR_EOP 22
305 #define V_WR_EOP(x) ((x) << S_WR_EOP)
306 #define F_WR_EOP V_WR_EOP(1U)
307
308 #define S_WR_SOP 23
309 #define V_WR_SOP(x) ((x) << S_WR_SOP)
310 #define F_WR_SOP V_WR_SOP(1U)
311
312 #define S_WR_OP 24
313 #define M_WR_OP 0xFF
314 #define V_WR_OP(x) ((x) << S_WR_OP)
315 #define G_WR_OP(x) (((x) >> S_WR_OP) & M_WR_OP)
316
317 /* wr_lo fields */
318 #define S_WR_LEN 0
319 #define M_WR_LEN 0xFF
320 #define V_WR_LEN(x) ((x) << S_WR_LEN)
321 #define G_WR_LEN(x) (((x) >> S_WR_LEN) & M_WR_LEN)
322
323 #define S_WR_TID 8
324 #define M_WR_TID 0xFFFFF
325 #define V_WR_TID(x) ((x) << S_WR_TID)
326 #define G_WR_TID(x) (((x) >> S_WR_TID) & M_WR_TID)
327
328 #define S_WR_CR_FLUSH 30
329 #define V_WR_CR_FLUSH(x) ((x) << S_WR_CR_FLUSH)
330 #define F_WR_CR_FLUSH V_WR_CR_FLUSH(1U)
331
332 #define S_WR_GEN 31
333 #define V_WR_GEN(x) ((x) << S_WR_GEN)
334 #define F_WR_GEN V_WR_GEN(1U)
335 #define G_WR_GEN(x) ((x) >> S_WR_GEN)
336
337 # define WR_HDR struct work_request_hdr wr
338 # define RSS_HDR
339 #else
340 # define WR_HDR
341 # define RSS_HDR struct rss_header rss_hdr;
342 #endif
343
344 /* option 0 lower-half fields */
345 #define S_CPL_STATUS 0
346 #define M_CPL_STATUS 0xFF
347 #define V_CPL_STATUS(x) ((x) << S_CPL_STATUS)
348 #define G_CPL_STATUS(x) (((x) >> S_CPL_STATUS) & M_CPL_STATUS)
349
350 #define S_INJECT_TIMER 6
351 #define V_INJECT_TIMER(x) ((x) << S_INJECT_TIMER)
352 #define F_INJECT_TIMER V_INJECT_TIMER(1U)
353
354 #define S_NO_OFFLOAD 7
355 #define V_NO_OFFLOAD(x) ((x) << S_NO_OFFLOAD)
356 #define F_NO_OFFLOAD V_NO_OFFLOAD(1U)
357
358 #define S_ULP_MODE 8
359 #define M_ULP_MODE 0xF
360 #define V_ULP_MODE(x) ((x) << S_ULP_MODE)
361 #define G_ULP_MODE(x) (((x) >> S_ULP_MODE) & M_ULP_MODE)
362
363 #define S_RCV_BUFSIZ 12
364 #define M_RCV_BUFSIZ 0x3FFF
365 #define V_RCV_BUFSIZ(x) ((x) << S_RCV_BUFSIZ)
366 #define G_RCV_BUFSIZ(x) (((x) >> S_RCV_BUFSIZ) & M_RCV_BUFSIZ)
367
368 #define S_TOS 26
369 #define M_TOS 0x3F
370 #define V_TOS(x) ((x) << S_TOS)
371 #define G_TOS(x) (((x) >> S_TOS) & M_TOS)
372
373 /* option 0 upper-half fields */
374 #define S_DELACK 0
375 #define V_DELACK(x) ((x) << S_DELACK)
376 #define F_DELACK V_DELACK(1U)
377
378 #define S_NO_CONG 1
379 #define V_NO_CONG(x) ((x) << S_NO_CONG)
380 #define F_NO_CONG V_NO_CONG(1U)
381
382 #define S_SRC_MAC_SEL 2
383 #define M_SRC_MAC_SEL 0x3
384 #define V_SRC_MAC_SEL(x) ((x) << S_SRC_MAC_SEL)
385 #define G_SRC_MAC_SEL(x) (((x) >> S_SRC_MAC_SEL) & M_SRC_MAC_SEL)
386
387 #define S_L2T_IDX 4
388 #define M_L2T_IDX 0x7FF
389 #define V_L2T_IDX(x) ((x) << S_L2T_IDX)
390 #define G_L2T_IDX(x) (((x) >> S_L2T_IDX) & M_L2T_IDX)
391
392 #define S_TX_CHANNEL 15
393 #define V_TX_CHANNEL(x) ((x) << S_TX_CHANNEL)
394 #define F_TX_CHANNEL V_TX_CHANNEL(1U)
395
396 #define S_TCAM_BYPASS 16
397 #define V_TCAM_BYPASS(x) ((x) << S_TCAM_BYPASS)
398 #define F_TCAM_BYPASS V_TCAM_BYPASS(1U)
399
400 #define S_NAGLE 17
401 #define V_NAGLE(x) ((x) << S_NAGLE)
402 #define F_NAGLE V_NAGLE(1U)
403
404 #define S_WND_SCALE 18
405 #define M_WND_SCALE 0xF
406 #define V_WND_SCALE(x) ((x) << S_WND_SCALE)
407 #define G_WND_SCALE(x) (((x) >> S_WND_SCALE) & M_WND_SCALE)
408
409 #define S_KEEP_ALIVE 22
410 #define V_KEEP_ALIVE(x) ((x) << S_KEEP_ALIVE)
411 #define F_KEEP_ALIVE V_KEEP_ALIVE(1U)
412
413 #define S_MAX_RETRANS 23
414 #define M_MAX_RETRANS 0xF
415 #define V_MAX_RETRANS(x) ((x) << S_MAX_RETRANS)
416 #define G_MAX_RETRANS(x) (((x) >> S_MAX_RETRANS) & M_MAX_RETRANS)
417
418 #define S_MAX_RETRANS_OVERRIDE 27
419 #define V_MAX_RETRANS_OVERRIDE(x) ((x) << S_MAX_RETRANS_OVERRIDE)
420 #define F_MAX_RETRANS_OVERRIDE V_MAX_RETRANS_OVERRIDE(1U)
421
422 #define S_MSS_IDX 28
423 #define M_MSS_IDX 0xF
424 #define V_MSS_IDX(x) ((x) << S_MSS_IDX)
425 #define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX)
426
427 /* option 1 fields */
428 #define S_RSS_ENABLE 0
429 #define V_RSS_ENABLE(x) ((x) << S_RSS_ENABLE)
430 #define F_RSS_ENABLE V_RSS_ENABLE(1U)
431
432 #define S_RSS_MASK_LEN 1
433 #define M_RSS_MASK_LEN 0x7
434 #define V_RSS_MASK_LEN(x) ((x) << S_RSS_MASK_LEN)
435 #define G_RSS_MASK_LEN(x) (((x) >> S_RSS_MASK_LEN) & M_RSS_MASK_LEN)
436
437 #define S_CPU_IDX 4
438 #define M_CPU_IDX 0x3F
439 #define V_CPU_IDX(x) ((x) << S_CPU_IDX)
440 #define G_CPU_IDX(x) (((x) >> S_CPU_IDX) & M_CPU_IDX)
441
442 #define S_OPT1_VLAN 6
443 #define M_OPT1_VLAN 0xFFF
444 #define V_OPT1_VLAN(x) ((x) << S_OPT1_VLAN)
445 #define G_OPT1_VLAN(x) (((x) >> S_OPT1_VLAN) & M_OPT1_VLAN)
446
447 #define S_MAC_MATCH_VALID 18
448 #define V_MAC_MATCH_VALID(x) ((x) << S_MAC_MATCH_VALID)
449 #define F_MAC_MATCH_VALID V_MAC_MATCH_VALID(1U)
450
451 #define S_CONN_POLICY 19
452 #define M_CONN_POLICY 0x3
453 #define V_CONN_POLICY(x) ((x) << S_CONN_POLICY)
454 #define G_CONN_POLICY(x) (((x) >> S_CONN_POLICY) & M_CONN_POLICY)
455
456 #define S_SYN_DEFENSE 21
457 #define V_SYN_DEFENSE(x) ((x) << S_SYN_DEFENSE)
458 #define F_SYN_DEFENSE V_SYN_DEFENSE(1U)
459
460 #define S_VLAN_PRI 22
461 #define M_VLAN_PRI 0x3
462 #define V_VLAN_PRI(x) ((x) << S_VLAN_PRI)
463 #define G_VLAN_PRI(x) (((x) >> S_VLAN_PRI) & M_VLAN_PRI)
464
465 #define S_VLAN_PRI_VALID 24
466 #define V_VLAN_PRI_VALID(x) ((x) << S_VLAN_PRI_VALID)
467 #define F_VLAN_PRI_VALID V_VLAN_PRI_VALID(1U)
468
469 #define S_PKT_TYPE 25
470 #define M_PKT_TYPE 0x3
471 #define V_PKT_TYPE(x) ((x) << S_PKT_TYPE)
472 #define G_PKT_TYPE(x) (((x) >> S_PKT_TYPE) & M_PKT_TYPE)
473
474 #define S_MAC_MATCH 27
475 #define M_MAC_MATCH 0x1F
476 #define V_MAC_MATCH(x) ((x) << S_MAC_MATCH)
477 #define G_MAC_MATCH(x) (((x) >> S_MAC_MATCH) & M_MAC_MATCH)
478
479 /* option 2 fields */
480 #define S_CPU_INDEX 0
481 #define M_CPU_INDEX 0x7F
482 #define V_CPU_INDEX(x) ((x) << S_CPU_INDEX)
483 #define G_CPU_INDEX(x) (((x) >> S_CPU_INDEX) & M_CPU_INDEX)
484
485 #define S_CPU_INDEX_VALID 7
486 #define V_CPU_INDEX_VALID(x) ((x) << S_CPU_INDEX_VALID)
487 #define F_CPU_INDEX_VALID V_CPU_INDEX_VALID(1U)
488
489 #define S_RX_COALESCE 8
490 #define M_RX_COALESCE 0x3
491 #define V_RX_COALESCE(x) ((x) << S_RX_COALESCE)
492 #define G_RX_COALESCE(x) (((x) >> S_RX_COALESCE) & M_RX_COALESCE)
493
494 #define S_RX_COALESCE_VALID 10
495 #define V_RX_COALESCE_VALID(x) ((x) << S_RX_COALESCE_VALID)
496 #define F_RX_COALESCE_VALID V_RX_COALESCE_VALID(1U)
497
498 #define S_CONG_CONTROL_FLAVOR 11
499 #define M_CONG_CONTROL_FLAVOR 0x3
500 #define V_CONG_CONTROL_FLAVOR(x) ((x) << S_CONG_CONTROL_FLAVOR)
501 #define G_CONG_CONTROL_FLAVOR(x) (((x) >> S_CONG_CONTROL_FLAVOR) & M_CONG_CONTROL_FLAVOR)
502
503 #define S_PACING_FLAVOR 13
504 #define M_PACING_FLAVOR 0x3
505 #define V_PACING_FLAVOR(x) ((x) << S_PACING_FLAVOR)
506 #define G_PACING_FLAVOR(x) (((x) >> S_PACING_FLAVOR) & M_PACING_FLAVOR)
507
508 #define S_FLAVORS_VALID 15
509 #define V_FLAVORS_VALID(x) ((x) << S_FLAVORS_VALID)
510 #define F_FLAVORS_VALID V_FLAVORS_VALID(1U)
511
512 #define S_RX_FC_DISABLE 16
513 #define V_RX_FC_DISABLE(x) ((x) << S_RX_FC_DISABLE)
514 #define F_RX_FC_DISABLE V_RX_FC_DISABLE(1U)
515
516 #define S_RX_FC_VALID 17
517 #define V_RX_FC_VALID(x) ((x) << S_RX_FC_VALID)
518 #define F_RX_FC_VALID V_RX_FC_VALID(1U)
519
520 struct cpl_pass_open_req {
521 WR_HDR;
522 union opcode_tid ot;
523 __be16 local_port;
524 __be16 peer_port;
525 __be32 local_ip;
526 __be32 peer_ip;
527 __be32 opt0h;
528 __be32 opt0l;
529 __be32 peer_netmask;
530 __be32 opt1;
531 };
532
533 struct cpl_pass_open_rpl {
534 RSS_HDR
535 union opcode_tid ot;
536 __be16 local_port;
537 __be16 peer_port;
538 __be32 local_ip;
539 __be32 peer_ip;
540 __u8 resvd[7];
541 __u8 status;
542 };
543
544 struct cpl_pass_establish {
545 RSS_HDR
546 union opcode_tid ot;
547 __be16 local_port;
548 __be16 peer_port;
549 __be32 local_ip;
550 __be32 peer_ip;
551 __be32 tos_tid;
552 __be16 l2t_idx;
553 __be16 tcp_opt;
554 __be32 snd_isn;
555 __be32 rcv_isn;
556 };
557
558 /* cpl_pass_establish.tos_tid fields */
559 #define S_PASS_OPEN_TID 0
560 #define M_PASS_OPEN_TID 0xFFFFFF
561 #define V_PASS_OPEN_TID(x) ((x) << S_PASS_OPEN_TID)
562 #define G_PASS_OPEN_TID(x) (((x) >> S_PASS_OPEN_TID) & M_PASS_OPEN_TID)
563
564 #define S_PASS_OPEN_TOS 24
565 #define M_PASS_OPEN_TOS 0xFF
566 #define V_PASS_OPEN_TOS(x) ((x) << S_PASS_OPEN_TOS)
567 #define G_PASS_OPEN_TOS(x) (((x) >> S_PASS_OPEN_TOS) & M_PASS_OPEN_TOS)
568
569 /* cpl_pass_establish.l2t_idx fields */
570 #define S_L2T_IDX16 5
571 #define M_L2T_IDX16 0x7FF
572 #define V_L2T_IDX16(x) ((x) << S_L2T_IDX16)
573 #define G_L2T_IDX16(x) (((x) >> S_L2T_IDX16) & M_L2T_IDX16)
574
575 /* cpl_pass_establish.tcp_opt fields (also applies act_open_establish) */
576 #define G_TCPOPT_WSCALE_OK(x) (((x) >> 5) & 1)
577 #define G_TCPOPT_SACK(x) (((x) >> 6) & 1)
578 #define G_TCPOPT_TSTAMP(x) (((x) >> 7) & 1)
579 #define G_TCPOPT_SND_WSCALE(x) (((x) >> 8) & 0xf)
580 #define G_TCPOPT_MSS(x) (((x) >> 12) & 0xf)
581
582 struct cpl_pass_accept_req {
583 RSS_HDR
584 union opcode_tid ot;
585 __be16 local_port;
586 __be16 peer_port;
587 __be32 local_ip;
588 __be32 peer_ip;
589 __be32 tos_tid;
590 struct tcp_options tcp_options;
591 __u8 dst_mac[6];
592 __be16 vlan_tag;
593 __u8 src_mac[6];
594 #if defined(__LITTLE_ENDIAN_BITFIELD)
595 __u8 :3;
596 __u8 addr_idx:3;
597 __u8 port_idx:1;
598 __u8 exact_match:1;
599 #else
600 __u8 exact_match:1;
601 __u8 port_idx:1;
602 __u8 addr_idx:3;
603 __u8 :3;
604 #endif
605 __u8 rsvd;
606 __be32 rcv_isn;
607 __be32 rsvd2;
608 };
609
610 struct cpl_pass_accept_rpl {
611 WR_HDR;
612 union opcode_tid ot;
613 __be32 opt2;
614 __be32 rsvd;
615 __be32 peer_ip;
616 __be32 opt0h;
617 __be32 opt0l_status;
618 };
619
620 struct cpl_act_open_req {
621 WR_HDR;
622 union opcode_tid ot;
623 __be16 local_port;
624 __be16 peer_port;
625 __be32 local_ip;
626 __be32 peer_ip;
627 __be32 opt0h;
628 __be32 opt0l;
629 __be32 params;
630 __be32 opt2;
631 };
632
633 /* cpl_act_open_req.params fields */
634 #define S_AOPEN_VLAN_PRI 9
635 #define M_AOPEN_VLAN_PRI 0x3
636 #define V_AOPEN_VLAN_PRI(x) ((x) << S_AOPEN_VLAN_PRI)
637 #define G_AOPEN_VLAN_PRI(x) (((x) >> S_AOPEN_VLAN_PRI) & M_AOPEN_VLAN_PRI)
638
639 #define S_AOPEN_VLAN_PRI_VALID 11
640 #define V_AOPEN_VLAN_PRI_VALID(x) ((x) << S_AOPEN_VLAN_PRI_VALID)
641 #define F_AOPEN_VLAN_PRI_VALID V_AOPEN_VLAN_PRI_VALID(1U)
642
643 #define S_AOPEN_PKT_TYPE 12
644 #define M_AOPEN_PKT_TYPE 0x3
645 #define V_AOPEN_PKT_TYPE(x) ((x) << S_AOPEN_PKT_TYPE)
646 #define G_AOPEN_PKT_TYPE(x) (((x) >> S_AOPEN_PKT_TYPE) & M_AOPEN_PKT_TYPE)
647
648 #define S_AOPEN_MAC_MATCH 14
649 #define M_AOPEN_MAC_MATCH 0x1F
650 #define V_AOPEN_MAC_MATCH(x) ((x) << S_AOPEN_MAC_MATCH)
651 #define G_AOPEN_MAC_MATCH(x) (((x) >> S_AOPEN_MAC_MATCH) & M_AOPEN_MAC_MATCH)
652
653 #define S_AOPEN_MAC_MATCH_VALID 19
654 #define V_AOPEN_MAC_MATCH_VALID(x) ((x) << S_AOPEN_MAC_MATCH_VALID)
655 #define F_AOPEN_MAC_MATCH_VALID V_AOPEN_MAC_MATCH_VALID(1U)
656
657 #define S_AOPEN_IFF_VLAN 20
658 #define M_AOPEN_IFF_VLAN 0xFFF
659 #define V_AOPEN_IFF_VLAN(x) ((x) << S_AOPEN_IFF_VLAN)
660 #define G_AOPEN_IFF_VLAN(x) (((x) >> S_AOPEN_IFF_VLAN) & M_AOPEN_IFF_VLAN)
661
662 struct cpl_act_open_rpl {
663 RSS_HDR
664 union opcode_tid ot;
665 __be16 local_port;
666 __be16 peer_port;
667 __be32 local_ip;
668 __be32 peer_ip;
669 __be32 atid;
670 __u8 rsvd[3];
671 __u8 status;
672 };
673
674 struct cpl_act_establish {
675 RSS_HDR
676 union opcode_tid ot;
677 __be16 local_port;
678 __be16 peer_port;
679 __be32 local_ip;
680 __be32 peer_ip;
681 __be32 tos_tid;
682 __be16 l2t_idx;
683 __be16 tcp_opt;
684 __be32 snd_isn;
685 __be32 rcv_isn;
686 };
687
688 struct cpl_get_tcb {
689 WR_HDR;
690 union opcode_tid ot;
691 __be16 cpuno;
692 __be16 rsvd;
693 };
694
695 struct cpl_get_tcb_rpl {
696 RSS_HDR
697 union opcode_tid ot;
698 __u8 rsvd;
699 __u8 status;
700 __be16 len;
701 };
702
703 struct cpl_set_tcb {
704 WR_HDR;
705 union opcode_tid ot;
706 __u8 reply;
707 __u8 cpu_idx;
708 __be16 len;
709 };
710
711 /* cpl_set_tcb.reply fields */
712 #define S_NO_REPLY 7
713 #define V_NO_REPLY(x) ((x) << S_NO_REPLY)
714 #define F_NO_REPLY V_NO_REPLY(1U)
715
716 struct cpl_set_tcb_field {
717 WR_HDR;
718 union opcode_tid ot;
719 __u8 reply;
720 __u8 cpu_idx;
721 __be16 word;
722 __be64 mask;
723 __be64 val;
724 };
725
726 struct cpl_set_tcb_rpl {
727 RSS_HDR
728 union opcode_tid ot;
729 __u8 rsvd[3];
730 __u8 status;
731 };
732
733 struct cpl_pcmd {
734 WR_HDR;
735 union opcode_tid ot;
736 __u8 rsvd[3];
737 #if defined(__LITTLE_ENDIAN_BITFIELD)
738 __u8 src:1;
739 __u8 bundle:1;
740 __u8 channel:1;
741 __u8 :5;
742 #else
743 __u8 :5;
744 __u8 channel:1;
745 __u8 bundle:1;
746 __u8 src:1;
747 #endif
748 __be32 pcmd_parm[2];
749 };
750
751 struct cpl_pcmd_reply {
752 RSS_HDR
753 union opcode_tid ot;
754 __u8 status;
755 __u8 rsvd;
756 __be16 len;
757 };
758
759 struct cpl_close_con_req {
760 WR_HDR;
761 union opcode_tid ot;
762 __be32 rsvd;
763 };
764
765 struct cpl_close_con_rpl {
766 RSS_HDR
767 union opcode_tid ot;
768 __u8 rsvd[3];
769 __u8 status;
770 __be32 snd_nxt;
771 __be32 rcv_nxt;
772 };
773
774 struct cpl_close_listserv_req {
775 WR_HDR;
776 union opcode_tid ot;
777 __u8 rsvd0;
778 __u8 cpu_idx;
779 __be16 rsvd1;
780 };
781
782 struct cpl_close_listserv_rpl {
783 RSS_HDR
784 union opcode_tid ot;
785 __u8 rsvd[3];
786 __u8 status;
787 };
788
789 struct cpl_abort_req_rss {
790 RSS_HDR
791 union opcode_tid ot;
792 __be32 rsvd0;
793 __u8 rsvd1;
794 __u8 status;
795 __u8 rsvd2[6];
796 };
797
798 struct cpl_abort_req {
799 WR_HDR;
800 union opcode_tid ot;
801 __be32 rsvd0;
802 __u8 rsvd1;
803 __u8 cmd;
804 __u8 rsvd2[6];
805 };
806
807 struct cpl_abort_rpl_rss {
808 RSS_HDR
809 union opcode_tid ot;
810 __be32 rsvd0;
811 __u8 rsvd1;
812 __u8 status;
813 __u8 rsvd2[6];
814 };
815
816 struct cpl_abort_rpl {
817 WR_HDR;
818 union opcode_tid ot;
819 __be32 rsvd0;
820 __u8 rsvd1;
821 __u8 cmd;
822 __u8 rsvd2[6];
823 };
824
825 struct cpl_peer_close {
826 RSS_HDR
827 union opcode_tid ot;
828 __be32 rcv_nxt;
829 };
830
831 struct tx_data_wr {
832 WR_HDR;
833 __be32 len;
834 __be32 flags;
835 __be32 sndseq;
836 __be32 param;
837 };
838
839 /* tx_data_wr.flags fields */
840 #define S_TX_ACK_PAGES 21
841 #define M_TX_ACK_PAGES 0x7
842 #define V_TX_ACK_PAGES(x) ((x) << S_TX_ACK_PAGES)
843 #define G_TX_ACK_PAGES(x) (((x) >> S_TX_ACK_PAGES) & M_TX_ACK_PAGES)
844
845 /* tx_data_wr.param fields */
846 #define S_TX_PORT 0
847 #define M_TX_PORT 0x7
848 #define V_TX_PORT(x) ((x) << S_TX_PORT)
849 #define G_TX_PORT(x) (((x) >> S_TX_PORT) & M_TX_PORT)
850
851 #define S_TX_MSS 4
852 #define M_TX_MSS 0xF
853 #define V_TX_MSS(x) ((x) << S_TX_MSS)
854 #define G_TX_MSS(x) (((x) >> S_TX_MSS) & M_TX_MSS)
855
856 #define S_TX_QOS 8
857 #define M_TX_QOS 0xFF
858 #define V_TX_QOS(x) ((x) << S_TX_QOS)
859 #define G_TX_QOS(x) (((x) >> S_TX_QOS) & M_TX_QOS)
860
861 #define S_TX_SNDBUF 16
862 #define M_TX_SNDBUF 0xFFFF
863 #define V_TX_SNDBUF(x) ((x) << S_TX_SNDBUF)
864 #define G_TX_SNDBUF(x) (((x) >> S_TX_SNDBUF) & M_TX_SNDBUF)
865
866 struct cpl_tx_data {
867 union opcode_tid ot;
868 __be32 len;
869 __be32 rsvd;
870 __be16 urg;
871 __be16 flags;
872 };
873
874 /* cpl_tx_data.flags fields */
875 #define S_TX_ULP_SUBMODE 6
876 #define M_TX_ULP_SUBMODE 0xF
877 #define V_TX_ULP_SUBMODE(x) ((x) << S_TX_ULP_SUBMODE)
878 #define G_TX_ULP_SUBMODE(x) (((x) >> S_TX_ULP_SUBMODE) & M_TX_ULP_SUBMODE)
879
880 #define S_TX_ULP_MODE 10
881 #define M_TX_ULP_MODE 0xF
882 #define V_TX_ULP_MODE(x) ((x) << S_TX_ULP_MODE)
883 #define G_TX_ULP_MODE(x) (((x) >> S_TX_ULP_MODE) & M_TX_ULP_MODE)
884
885 #define S_TX_SHOVE 14
886 #define V_TX_SHOVE(x) ((x) << S_TX_SHOVE)
887 #define F_TX_SHOVE V_TX_SHOVE(1U)
888
889 #define S_TX_MORE 15
890 #define V_TX_MORE(x) ((x) << S_TX_MORE)
891 #define F_TX_MORE V_TX_MORE(1U)
892
893 /* additional tx_data_wr.flags fields */
894 #define S_TX_CPU_IDX 0
895 #define M_TX_CPU_IDX 0x3F
896 #define V_TX_CPU_IDX(x) ((x) << S_TX_CPU_IDX)
897 #define G_TX_CPU_IDX(x) (((x) >> S_TX_CPU_IDX) & M_TX_CPU_IDX)
898
899 #define S_TX_URG 16
900 #define V_TX_URG(x) ((x) << S_TX_URG)
901 #define F_TX_URG V_TX_URG(1U)
902
903 #define S_TX_CLOSE 17
904 #define V_TX_CLOSE(x) ((x) << S_TX_CLOSE)
905 #define F_TX_CLOSE V_TX_CLOSE(1U)
906
907 #define S_TX_INIT 18
908 #define V_TX_INIT(x) ((x) << S_TX_INIT)
909 #define F_TX_INIT V_TX_INIT(1U)
910
911 #define S_TX_IMM_ACK 19
912 #define V_TX_IMM_ACK(x) ((x) << S_TX_IMM_ACK)
913 #define F_TX_IMM_ACK V_TX_IMM_ACK(1U)
914
915 #define S_TX_IMM_DMA 20
916 #define V_TX_IMM_DMA(x) ((x) << S_TX_IMM_DMA)
917 #define F_TX_IMM_DMA V_TX_IMM_DMA(1U)
918
919 struct cpl_tx_data_ack {
920 RSS_HDR
921 union opcode_tid ot;
922 __be32 ack_seq;
923 };
924
925 struct cpl_wr_ack {
926 RSS_HDR
927 union opcode_tid ot;
928 __be16 credits;
929 __be16 rsvd;
930 __be32 snd_nxt;
931 __be32 snd_una;
932 };
933
934 struct cpl_sge_ec_cr_return {
935 RSS_HDR
936 union opcode_tid ot;
937 __be16 sge_ec_id;
938 __u8 cr;
939 __u8 rsvd;
940 };
941
942 struct cpl_rdma_ec_status {
943 RSS_HDR
944 union opcode_tid ot;
945 __u8 rsvd[3];
946 __u8 status;
947 };
948
949 struct mngt_pktsched_wr {
950 WR_HDR;
951 __u8 mngt_opcode;
952 __u8 rsvd[7];
953 __u8 sched;
954 __u8 idx;
955 __u8 min;
956 __u8 max;
957 __u8 binding;
958 __u8 rsvd1[3];
959 };
960
961 struct cpl_iscsi_hdr {
962 RSS_HDR
963 union opcode_tid ot;
964 __be16 pdu_len_ddp;
965 __be16 len;
966 __be32 seq;
967 __be16 urg;
968 __u8 rsvd;
969 __u8 status;
970 };
971
972 /* cpl_iscsi_hdr.pdu_len_ddp fields */
973 #define S_ISCSI_PDU_LEN 0
974 #define M_ISCSI_PDU_LEN 0x7FFF
975 #define V_ISCSI_PDU_LEN(x) ((x) << S_ISCSI_PDU_LEN)
976 #define G_ISCSI_PDU_LEN(x) (((x) >> S_ISCSI_PDU_LEN) & M_ISCSI_PDU_LEN)
977
978 #define S_ISCSI_DDP 15
979 #define V_ISCSI_DDP(x) ((x) << S_ISCSI_DDP)
980 #define F_ISCSI_DDP V_ISCSI_DDP(1U)
981
982 struct cpl_rx_data {
983 RSS_HDR
984 union opcode_tid ot;
985 __be16 rsvd;
986 __be16 len;
987 __be32 seq;
988 __be16 urg;
989 #if defined(__LITTLE_ENDIAN_BITFIELD)
990 __u8 dack_mode:2;
991 __u8 psh:1;
992 __u8 heartbeat:1;
993 __u8 ddp_off:1;
994 __u8 :3;
995 #else
996 __u8 :3;
997 __u8 ddp_off:1;
998 __u8 heartbeat:1;
999 __u8 psh:1;
1000 __u8 dack_mode:2;
1001 #endif
1002 __u8 status;
1003 };
1004
1005 struct cpl_rx_data_ack {
1006 WR_HDR;
1007 union opcode_tid ot;
1008 __be32 credit_dack;
1009 };
1010
1011 /* cpl_rx_data_ack.ack_seq fields */
1012 #define S_RX_CREDITS 0
1013 #define M_RX_CREDITS 0x7FFFFFF
1014 #define V_RX_CREDITS(x) ((x) << S_RX_CREDITS)
1015 #define G_RX_CREDITS(x) (((x) >> S_RX_CREDITS) & M_RX_CREDITS)
1016
1017 #define S_RX_MODULATE 27
1018 #define V_RX_MODULATE(x) ((x) << S_RX_MODULATE)
1019 #define F_RX_MODULATE V_RX_MODULATE(1U)
1020
1021 #define S_RX_FORCE_ACK 28
1022 #define V_RX_FORCE_ACK(x) ((x) << S_RX_FORCE_ACK)
1023 #define F_RX_FORCE_ACK V_RX_FORCE_ACK(1U)
1024
1025 #define S_RX_DACK_MODE 29
1026 #define M_RX_DACK_MODE 0x3
1027 #define V_RX_DACK_MODE(x) ((x) << S_RX_DACK_MODE)
1028 #define G_RX_DACK_MODE(x) (((x) >> S_RX_DACK_MODE) & M_RX_DACK_MODE)
1029
1030 #define S_RX_DACK_CHANGE 31
1031 #define V_RX_DACK_CHANGE(x) ((x) << S_RX_DACK_CHANGE)
1032 #define F_RX_DACK_CHANGE V_RX_DACK_CHANGE(1U)
1033
1034 struct cpl_rx_urg_notify {
1035 RSS_HDR
1036 union opcode_tid ot;
1037 __be32 seq;
1038 };
1039
1040 struct cpl_rx_ddp_complete {
1041 RSS_HDR
1042 union opcode_tid ot;
1043 __be32 ddp_report;
1044 };
1045
1046 struct cpl_rx_data_ddp {
1047 RSS_HDR
1048 union opcode_tid ot;
1049 __be16 urg;
1050 __be16 len;
1051 __be32 seq;
1052 union {
1053 __be32 nxt_seq;
1054 __be32 ddp_report;
1055 } u;
1056 __be32 ulp_crc;
1057 __be32 ddpvld_status;
1058 };
1059
1060 /* cpl_rx_data_ddp.ddpvld_status fields */
1061 #define S_DDP_STATUS 0
1062 #define M_DDP_STATUS 0xFF
1063 #define V_DDP_STATUS(x) ((x) << S_DDP_STATUS)
1064 #define G_DDP_STATUS(x) (((x) >> S_DDP_STATUS) & M_DDP_STATUS)
1065
1066 #define S_DDP_VALID 15
1067 #define M_DDP_VALID 0x1FFFF
1068 #define V_DDP_VALID(x) ((x) << S_DDP_VALID)
1069 #define G_DDP_VALID(x) (((x) >> S_DDP_VALID) & M_DDP_VALID)
1070
1071 #define S_DDP_PPOD_MISMATCH 15
1072 #define V_DDP_PPOD_MISMATCH(x) ((x) << S_DDP_PPOD_MISMATCH)
1073 #define F_DDP_PPOD_MISMATCH V_DDP_PPOD_MISMATCH(1U)
1074
1075 #define S_DDP_PDU 16
1076 #define V_DDP_PDU(x) ((x) << S_DDP_PDU)
1077 #define F_DDP_PDU V_DDP_PDU(1U)
1078
1079 #define S_DDP_LLIMIT_ERR 17
1080 #define V_DDP_LLIMIT_ERR(x) ((x) << S_DDP_LLIMIT_ERR)
1081 #define F_DDP_LLIMIT_ERR V_DDP_LLIMIT_ERR(1U)
1082
1083 #define S_DDP_PPOD_PARITY_ERR 18
1084 #define V_DDP_PPOD_PARITY_ERR(x) ((x) << S_DDP_PPOD_PARITY_ERR)
1085 #define F_DDP_PPOD_PARITY_ERR V_DDP_PPOD_PARITY_ERR(1U)
1086
1087 #define S_DDP_PADDING_ERR 19
1088 #define V_DDP_PADDING_ERR(x) ((x) << S_DDP_PADDING_ERR)
1089 #define F_DDP_PADDING_ERR V_DDP_PADDING_ERR(1U)
1090
1091 #define S_DDP_HDRCRC_ERR 20
1092 #define V_DDP_HDRCRC_ERR(x) ((x) << S_DDP_HDRCRC_ERR)
1093 #define F_DDP_HDRCRC_ERR V_DDP_HDRCRC_ERR(1U)
1094
1095 #define S_DDP_DATACRC_ERR 21
1096 #define V_DDP_DATACRC_ERR(x) ((x) << S_DDP_DATACRC_ERR)
1097 #define F_DDP_DATACRC_ERR V_DDP_DATACRC_ERR(1U)
1098
1099 #define S_DDP_INVALID_TAG 22
1100 #define V_DDP_INVALID_TAG(x) ((x) << S_DDP_INVALID_TAG)
1101 #define F_DDP_INVALID_TAG V_DDP_INVALID_TAG(1U)
1102
1103 #define S_DDP_ULIMIT_ERR 23
1104 #define V_DDP_ULIMIT_ERR(x) ((x) << S_DDP_ULIMIT_ERR)
1105 #define F_DDP_ULIMIT_ERR V_DDP_ULIMIT_ERR(1U)
1106
1107 #define S_DDP_OFFSET_ERR 24
1108 #define V_DDP_OFFSET_ERR(x) ((x) << S_DDP_OFFSET_ERR)
1109 #define F_DDP_OFFSET_ERR V_DDP_OFFSET_ERR(1U)
1110
1111 #define S_DDP_COLOR_ERR 25
1112 #define V_DDP_COLOR_ERR(x) ((x) << S_DDP_COLOR_ERR)
1113 #define F_DDP_COLOR_ERR V_DDP_COLOR_ERR(1U)
1114
1115 #define S_DDP_TID_MISMATCH 26
1116 #define V_DDP_TID_MISMATCH(x) ((x) << S_DDP_TID_MISMATCH)
1117 #define F_DDP_TID_MISMATCH V_DDP_TID_MISMATCH(1U)
1118
1119 #define S_DDP_INVALID_PPOD 27
1120 #define V_DDP_INVALID_PPOD(x) ((x) << S_DDP_INVALID_PPOD)
1121 #define F_DDP_INVALID_PPOD V_DDP_INVALID_PPOD(1U)
1122
1123 #define S_DDP_ULP_MODE 28
1124 #define M_DDP_ULP_MODE 0xF
1125 #define V_DDP_ULP_MODE(x) ((x) << S_DDP_ULP_MODE)
1126 #define G_DDP_ULP_MODE(x) (((x) >> S_DDP_ULP_MODE) & M_DDP_ULP_MODE)
1127
1128 /* cpl_rx_data_ddp.ddp_report fields */
1129 #define S_DDP_OFFSET 0
1130 #define M_DDP_OFFSET 0x3FFFFF
1131 #define V_DDP_OFFSET(x) ((x) << S_DDP_OFFSET)
1132 #define G_DDP_OFFSET(x) (((x) >> S_DDP_OFFSET) & M_DDP_OFFSET)
1133
1134 #define S_DDP_DACK_MODE 22
1135 #define M_DDP_DACK_MODE 0x3
1136 #define V_DDP_DACK_MODE(x) ((x) << S_DDP_DACK_MODE)
1137 #define G_DDP_DACK_MODE(x) (((x) >> S_DDP_DACK_MODE) & M_DDP_DACK_MODE)
1138
1139 #define S_DDP_URG 24
1140 #define V_DDP_URG(x) ((x) << S_DDP_URG)
1141 #define F_DDP_URG V_DDP_URG(1U)
1142
1143 #define S_DDP_PSH 25
1144 #define V_DDP_PSH(x) ((x) << S_DDP_PSH)
1145 #define F_DDP_PSH V_DDP_PSH(1U)
1146
1147 #define S_DDP_BUF_COMPLETE 26
1148 #define V_DDP_BUF_COMPLETE(x) ((x) << S_DDP_BUF_COMPLETE)
1149 #define F_DDP_BUF_COMPLETE V_DDP_BUF_COMPLETE(1U)
1150
1151 #define S_DDP_BUF_TIMED_OUT 27
1152 #define V_DDP_BUF_TIMED_OUT(x) ((x) << S_DDP_BUF_TIMED_OUT)
1153 #define F_DDP_BUF_TIMED_OUT V_DDP_BUF_TIMED_OUT(1U)
1154
1155 #define S_DDP_BUF_IDX 28
1156 #define V_DDP_BUF_IDX(x) ((x) << S_DDP_BUF_IDX)
1157 #define F_DDP_BUF_IDX V_DDP_BUF_IDX(1U)
1158
1159 struct cpl_tx_pkt {
1160 WR_HDR;
1161 __be32 cntrl;
1162 __be32 len;
1163 };
1164
1165 struct cpl_tx_pkt_coalesce {
1166 __be32 cntrl;
1167 __be32 len;
1168 __be64 addr;
1169 };
1170
1171 struct tx_pkt_coalesce_wr {
1172 WR_HDR;
1173 struct cpl_tx_pkt_coalesce cpl[0];
1174 };
1175
1176 struct cpl_tx_pkt_lso {
1177 WR_HDR;
1178 __be32 cntrl;
1179 __be32 len;
1180
1181 __be32 rsvd;
1182 __be32 lso_info;
1183 };
1184
1185 struct cpl_tx_pkt_batch_entry {
1186 __be32 cntrl;
1187 __be32 len;
1188 __be64 addr;
1189 };
1190
1191 struct cpl_tx_pkt_batch {
1192 WR_HDR;
1193 struct cpl_tx_pkt_batch_entry pkt_entry[7];
1194 };
1195
1196
1197 /* cpl_tx_pkt*.cntrl fields */
1198 #define S_TXPKT_VLAN 0
1199 #define M_TXPKT_VLAN 0xFFFF
1200 #define V_TXPKT_VLAN(x) ((x) << S_TXPKT_VLAN)
1201 #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
1202
1203 #define S_TXPKT_INTF 16
1204 #define M_TXPKT_INTF 0xF
1205 #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
1206 #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
1207
1208 #define S_TXPKT_IPCSUM_DIS 20
1209 #define V_TXPKT_IPCSUM_DIS(x) ((x) << S_TXPKT_IPCSUM_DIS)
1210 #define F_TXPKT_IPCSUM_DIS V_TXPKT_IPCSUM_DIS(1U)
1211
1212 #define S_TXPKT_L4CSUM_DIS 21
1213 #define V_TXPKT_L4CSUM_DIS(x) ((x) << S_TXPKT_L4CSUM_DIS)
1214 #define F_TXPKT_L4CSUM_DIS V_TXPKT_L4CSUM_DIS(1U)
1215
1216 #define S_TXPKT_VLAN_VLD 22
1217 #define V_TXPKT_VLAN_VLD(x) ((x) << S_TXPKT_VLAN_VLD)
1218 #define F_TXPKT_VLAN_VLD V_TXPKT_VLAN_VLD(1U)
1219
1220 #define S_TXPKT_LOOPBACK 23
1221 #define V_TXPKT_LOOPBACK(x) ((x) << S_TXPKT_LOOPBACK)
1222 #define F_TXPKT_LOOPBACK V_TXPKT_LOOPBACK(1U)
1223
1224 #define S_TXPKT_OPCODE 24
1225 #define M_TXPKT_OPCODE 0xFF
1226 #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
1227 #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
1228
1229 /* cpl_tx_pkt_lso.lso_info fields */
1230 #define S_LSO_MSS 0
1231 #define M_LSO_MSS 0x3FFF
1232 #define V_LSO_MSS(x) ((x) << S_LSO_MSS)
1233 #define G_LSO_MSS(x) (((x) >> S_LSO_MSS) & M_LSO_MSS)
1234
1235 #define S_LSO_ETH_TYPE 14
1236 #define M_LSO_ETH_TYPE 0x3
1237 #define V_LSO_ETH_TYPE(x) ((x) << S_LSO_ETH_TYPE)
1238 #define G_LSO_ETH_TYPE(x) (((x) >> S_LSO_ETH_TYPE) & M_LSO_ETH_TYPE)
1239
1240 #define S_LSO_TCPHDR_WORDS 16
1241 #define M_LSO_TCPHDR_WORDS 0xF
1242 #define V_LSO_TCPHDR_WORDS(x) ((x) << S_LSO_TCPHDR_WORDS)
1243 #define G_LSO_TCPHDR_WORDS(x) (((x) >> S_LSO_TCPHDR_WORDS) & M_LSO_TCPHDR_WORDS)
1244
1245 #define S_LSO_IPHDR_WORDS 20
1246 #define M_LSO_IPHDR_WORDS 0xF
1247 #define V_LSO_IPHDR_WORDS(x) ((x) << S_LSO_IPHDR_WORDS)
1248 #define G_LSO_IPHDR_WORDS(x) (((x) >> S_LSO_IPHDR_WORDS) & M_LSO_IPHDR_WORDS)
1249
1250 #define S_LSO_IPV6 24
1251 #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
1252 #define F_LSO_IPV6 V_LSO_IPV6(1U)
1253
1254 struct cpl_trace_pkt {
1255 #ifdef CHELSIO_FW
1256 __u8 rss_opcode;
1257 #if defined(__LITTLE_ENDIAN_BITFIELD)
1258 __u8 err:1;
1259 __u8 :7;
1260 #else
1261 __u8 :7;
1262 __u8 err:1;
1263 #endif
1264 __u8 rsvd0;
1265 #if defined(__LITTLE_ENDIAN_BITFIELD)
1266 __u8 qid:4;
1267 __u8 :4;
1268 #else
1269 __u8 :4;
1270 __u8 qid:4;
1271 #endif
1272 __be32 tstamp;
1273 #endif /* CHELSIO_FW */
1274
1275 __u8 opcode;
1276 #if defined(__LITTLE_ENDIAN_BITFIELD)
1277 __u8 iff:4;
1278 __u8 :4;
1279 #else
1280 __u8 :4;
1281 __u8 iff:4;
1282 #endif
1283 __u8 rsvd[4];
1284 __be16 len;
1285 };
1286
1287 struct cpl_rx_pkt {
1288 RSS_HDR
1289 __u8 opcode;
1290 #if defined(__LITTLE_ENDIAN_BITFIELD)
1291 __u8 iff:4;
1292 __u8 csum_valid:1;
1293 __u8 ipmi_pkt:1;
1294 __u8 vlan_valid:1;
1295 __u8 fragment:1;
1296 #else
1297 __u8 fragment:1;
1298 __u8 vlan_valid:1;
1299 __u8 ipmi_pkt:1;
1300 __u8 csum_valid:1;
1301 __u8 iff:4;
1302 #endif
1303 __be16 csum;
1304 __be16 vlan;
1305 __be16 len;
1306 };
1307
1308 struct cpl_l2t_write_req {
1309 WR_HDR;
1310 union opcode_tid ot;
1311 __be32 params;
1312 __u8 rsvd;
1313 __u8 port_idx;
1314 __u8 dst_mac[6];
1315 };
1316
1317 /* cpl_l2t_write_req.params fields */
1318 #define S_L2T_W_IDX 0
1319 #define M_L2T_W_IDX 0x7FF
1320 #define V_L2T_W_IDX(x) ((x) << S_L2T_W_IDX)
1321 #define G_L2T_W_IDX(x) (((x) >> S_L2T_W_IDX) & M_L2T_W_IDX)
1322
1323 #define S_L2T_W_VLAN 11
1324 #define M_L2T_W_VLAN 0xFFF
1325 #define V_L2T_W_VLAN(x) ((x) << S_L2T_W_VLAN)
1326 #define G_L2T_W_VLAN(x) (((x) >> S_L2T_W_VLAN) & M_L2T_W_VLAN)
1327
1328 #define S_L2T_W_IFF 23
1329 #define M_L2T_W_IFF 0xF
1330 #define V_L2T_W_IFF(x) ((x) << S_L2T_W_IFF)
1331 #define G_L2T_W_IFF(x) (((x) >> S_L2T_W_IFF) & M_L2T_W_IFF)
1332
1333 #define S_L2T_W_PRIO 27
1334 #define M_L2T_W_PRIO 0x7
1335 #define V_L2T_W_PRIO(x) ((x) << S_L2T_W_PRIO)
1336 #define G_L2T_W_PRIO(x) (((x) >> S_L2T_W_PRIO) & M_L2T_W_PRIO)
1337
1338 struct cpl_l2t_write_rpl {
1339 RSS_HDR
1340 union opcode_tid ot;
1341 __u8 status;
1342 __u8 rsvd[3];
1343 };
1344
1345 struct cpl_l2t_read_req {
1346 WR_HDR;
1347 union opcode_tid ot;
1348 __be16 rsvd;
1349 __be16 l2t_idx;
1350 };
1351
1352 struct cpl_l2t_read_rpl {
1353 RSS_HDR
1354 union opcode_tid ot;
1355 __be32 params;
1356 __u8 rsvd[2];
1357 __u8 dst_mac[6];
1358 };
1359
1360 /* cpl_l2t_read_rpl.params fields */
1361 #define S_L2T_R_PRIO 0
1362 #define M_L2T_R_PRIO 0x7
1363 #define V_L2T_R_PRIO(x) ((x) << S_L2T_R_PRIO)
1364 #define G_L2T_R_PRIO(x) (((x) >> S_L2T_R_PRIO) & M_L2T_R_PRIO)
1365
1366 #define S_L2T_R_VLAN 8
1367 #define M_L2T_R_VLAN 0xFFF
1368 #define V_L2T_R_VLAN(x) ((x) << S_L2T_R_VLAN)
1369 #define G_L2T_R_VLAN(x) (((x) >> S_L2T_R_VLAN) & M_L2T_R_VLAN)
1370
1371 #define S_L2T_R_IFF 20
1372 #define M_L2T_R_IFF 0xF
1373 #define V_L2T_R_IFF(x) ((x) << S_L2T_R_IFF)
1374 #define G_L2T_R_IFF(x) (((x) >> S_L2T_R_IFF) & M_L2T_R_IFF)
1375
1376 #define S_L2T_STATUS 24
1377 #define M_L2T_STATUS 0xFF
1378 #define V_L2T_STATUS(x) ((x) << S_L2T_STATUS)
1379 #define G_L2T_STATUS(x) (((x) >> S_L2T_STATUS) & M_L2T_STATUS)
1380
1381 struct cpl_smt_write_req {
1382 WR_HDR;
1383 union opcode_tid ot;
1384 __u8 rsvd0;
1385 #if defined(__LITTLE_ENDIAN_BITFIELD)
1386 __u8 mtu_idx:4;
1387 __u8 iff:4;
1388 #else
1389 __u8 iff:4;
1390 __u8 mtu_idx:4;
1391 #endif
1392 __be16 rsvd2;
1393 __be16 rsvd3;
1394 __u8 src_mac1[6];
1395 __be16 rsvd4;
1396 __u8 src_mac0[6];
1397 };
1398
1399 struct cpl_smt_write_rpl {
1400 RSS_HDR
1401 union opcode_tid ot;
1402 __u8 status;
1403 __u8 rsvd[3];
1404 };
1405
1406 struct cpl_smt_read_req {
1407 WR_HDR;
1408 union opcode_tid ot;
1409 __u8 rsvd0;
1410 #if defined(__LITTLE_ENDIAN_BITFIELD)
1411 __u8 :4;
1412 __u8 iff:4;
1413 #else
1414 __u8 iff:4;
1415 __u8 :4;
1416 #endif
1417 __be16 rsvd2;
1418 };
1419
1420 struct cpl_smt_read_rpl {
1421 RSS_HDR
1422 union opcode_tid ot;
1423 __u8 status;
1424 #if defined(__LITTLE_ENDIAN_BITFIELD)
1425 __u8 mtu_idx:4;
1426 __u8 :4;
1427 #else
1428 __u8 :4;
1429 __u8 mtu_idx:4;
1430 #endif
1431 __be16 rsvd2;
1432 __be16 rsvd3;
1433 __u8 src_mac1[6];
1434 __be16 rsvd4;
1435 __u8 src_mac0[6];
1436 };
1437
1438 struct cpl_rte_delete_req {
1439 WR_HDR;
1440 union opcode_tid ot;
1441 __be32 params;
1442 };
1443
1444 /* { cpl_rte_delete_req, cpl_rte_read_req }.params fields */
1445 #define S_RTE_REQ_LUT_IX 8
1446 #define M_RTE_REQ_LUT_IX 0x7FF
1447 #define V_RTE_REQ_LUT_IX(x) ((x) << S_RTE_REQ_LUT_IX)
1448 #define G_RTE_REQ_LUT_IX(x) (((x) >> S_RTE_REQ_LUT_IX) & M_RTE_REQ_LUT_IX)
1449
1450 #define S_RTE_REQ_LUT_BASE 19
1451 #define M_RTE_REQ_LUT_BASE 0x7FF
1452 #define V_RTE_REQ_LUT_BASE(x) ((x) << S_RTE_REQ_LUT_BASE)
1453 #define G_RTE_REQ_LUT_BASE(x) (((x) >> S_RTE_REQ_LUT_BASE) & M_RTE_REQ_LUT_BASE)
1454
1455 #define S_RTE_READ_REQ_SELECT 31
1456 #define V_RTE_READ_REQ_SELECT(x) ((x) << S_RTE_READ_REQ_SELECT)
1457 #define F_RTE_READ_REQ_SELECT V_RTE_READ_REQ_SELECT(1U)
1458
1459 struct cpl_rte_delete_rpl {
1460 RSS_HDR
1461 union opcode_tid ot;
1462 __u8 status;
1463 __u8 rsvd[3];
1464 };
1465
1466 struct cpl_rte_write_req {
1467 WR_HDR;
1468 union opcode_tid ot;
1469 #if defined(__LITTLE_ENDIAN_BITFIELD)
1470 __u8 :6;
1471 __u8 write_tcam:1;
1472 __u8 write_l2t_lut:1;
1473 #else
1474 __u8 write_l2t_lut:1;
1475 __u8 write_tcam:1;
1476 __u8 :6;
1477 #endif
1478 __u8 rsvd[3];
1479 __be32 lut_params;
1480 __be16 rsvd2;
1481 __be16 l2t_idx;
1482 __be32 netmask;
1483 __be32 faddr;
1484 };
1485
1486 /* cpl_rte_write_req.lut_params fields */
1487 #define S_RTE_WRITE_REQ_LUT_IX 10
1488 #define M_RTE_WRITE_REQ_LUT_IX 0x7FF
1489 #define V_RTE_WRITE_REQ_LUT_IX(x) ((x) << S_RTE_WRITE_REQ_LUT_IX)
1490 #define G_RTE_WRITE_REQ_LUT_IX(x) (((x) >> S_RTE_WRITE_REQ_LUT_IX) & M_RTE_WRITE_REQ_LUT_IX)
1491
1492 #define S_RTE_WRITE_REQ_LUT_BASE 21
1493 #define M_RTE_WRITE_REQ_LUT_BASE 0x7FF
1494 #define V_RTE_WRITE_REQ_LUT_BASE(x) ((x) << S_RTE_WRITE_REQ_LUT_BASE)
1495 #define G_RTE_WRITE_REQ_LUT_BASE(x) (((x) >> S_RTE_WRITE_REQ_LUT_BASE) & M_RTE_WRITE_REQ_LUT_BASE)
1496
1497 struct cpl_rte_write_rpl {
1498 RSS_HDR
1499 union opcode_tid ot;
1500 __u8 status;
1501 __u8 rsvd[3];
1502 };
1503
1504 struct cpl_rte_read_req {
1505 WR_HDR;
1506 union opcode_tid ot;
1507 __be32 params;
1508 };
1509
1510 struct cpl_rte_read_rpl {
1511 RSS_HDR
1512 union opcode_tid ot;
1513 __u8 status;
1514 __u8 rsvd0;
1515 __be16 l2t_idx;
1516 #if defined(__LITTLE_ENDIAN_BITFIELD)
1517 __u8 :7;
1518 __u8 select:1;
1519 #else
1520 __u8 select:1;
1521 __u8 :7;
1522 #endif
1523 __u8 rsvd2[3];
1524 __be32 addr;
1525 };
1526
1527 struct cpl_tid_release {
1528 WR_HDR;
1529 union opcode_tid ot;
1530 __be32 rsvd;
1531 };
1532
1533 struct cpl_barrier {
1534 WR_HDR;
1535 __u8 opcode;
1536 __u8 rsvd[7];
1537 };
1538
1539 struct cpl_rdma_read_req {
1540 __u8 opcode;
1541 __u8 rsvd[15];
1542 };
1543
1544 struct cpl_rdma_terminate {
1545 #ifdef CHELSIO_FW
1546 __u8 opcode;
1547 __u8 rsvd[2];
1548 #if defined(__LITTLE_ENDIAN_BITFIELD)
1549 __u8 rspq:3;
1550 __u8 :5;
1551 #else
1552 __u8 :5;
1553 __u8 rspq:3;
1554 #endif
1555 __be32 tid_len;
1556 #endif
1557 __be32 msn;
1558 __be32 mo;
1559 __u8 data[0];
1560 };
1561
1562 /* cpl_rdma_terminate.tid_len fields */
1563 #define S_FLIT_CNT 0
1564 #define M_FLIT_CNT 0xFF
1565 #define V_FLIT_CNT(x) ((x) << S_FLIT_CNT)
1566 #define G_FLIT_CNT(x) (((x) >> S_FLIT_CNT) & M_FLIT_CNT)
1567
1568 #define S_TERM_TID 8
1569 #define M_TERM_TID 0xFFFFF
1570 #define V_TERM_TID(x) ((x) << S_TERM_TID)
1571 #define G_TERM_TID(x) (((x) >> S_TERM_TID) & M_TERM_TID)
1572
1573 /* ULP_TX opcodes */
1574 enum { ULP_MEM_READ = 2, ULP_MEM_WRITE = 3, ULP_TXPKT = 4 };
1575
1576 #define S_ULPTX_CMD 28
1577 #define M_ULPTX_CMD 0xF
1578 #define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
1579
1580 #define S_ULPTX_NFLITS 0
1581 #define M_ULPTX_NFLITS 0xFF
1582 #define V_ULPTX_NFLITS(x) ((x) << S_ULPTX_NFLITS)
1583
1584 struct ulp_mem_io {
1585 WR_HDR;
1586 __be32 cmd_lock_addr;
1587 __be32 len;
1588 };
1589
1590 /* ulp_mem_io.cmd_lock_addr fields */
1591 #define S_ULP_MEMIO_ADDR 0
1592 #define M_ULP_MEMIO_ADDR 0x7FFFFFF
1593 #define V_ULP_MEMIO_ADDR(x) ((x) << S_ULP_MEMIO_ADDR)
1594
1595 #define S_ULP_MEMIO_LOCK 27
1596 #define V_ULP_MEMIO_LOCK(x) ((x) << S_ULP_MEMIO_LOCK)
1597 #define F_ULP_MEMIO_LOCK V_ULP_MEMIO_LOCK(1U)
1598
1599 /* ulp_mem_io.len fields */
1600 #define S_ULP_MEMIO_DATA_LEN 28
1601 #define M_ULP_MEMIO_DATA_LEN 0xF
1602 #define V_ULP_MEMIO_DATA_LEN(x) ((x) << S_ULP_MEMIO_DATA_LEN)
1603
1604 struct ulp_txpkt {
1605 __be32 cmd_dest;
1606 __be32 len;
1607 };
1608
1609 /* ulp_txpkt.cmd_dest fields */
1610 #define S_ULP_TXPKT_DEST 24
1611 #define M_ULP_TXPKT_DEST 0xF
1612 #define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST)
1613
1614 #endif /* T3_CPL_H */
Cache object: 70194057ad2ce3864e1b374db72bc693
|