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