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