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