]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/cxgb/common/cxgb_t3_cpl.h
MFV r361938:
[FreeBSD/FreeBSD.git] / sys / dev / cxgb / common / cxgb_t3_cpl.h
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 */