094a153f2c716ba33a687311314cec0a1ec578e6
[dpdk.git] / drivers / net / cxgbe / base / t4_msg.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2014-2018 Chelsio Communications.
3  * All rights reserved.
4  */
5
6 #ifndef T4_MSG_H
7 #define T4_MSG_H
8
9 enum {
10         CPL_ACT_OPEN_REQ      = 0x3,
11         CPL_SET_TCB_FIELD     = 0x5,
12         CPL_ABORT_REQ         = 0xA,
13         CPL_ABORT_RPL         = 0xB,
14         CPL_L2T_WRITE_REQ     = 0x12,
15         CPL_TID_RELEASE       = 0x1A,
16         CPL_L2T_WRITE_RPL     = 0x23,
17         CPL_ACT_OPEN_RPL      = 0x25,
18         CPL_ABORT_RPL_RSS     = 0x2D,
19         CPL_SET_TCB_RPL       = 0x3A,
20         CPL_ACT_OPEN_REQ6     = 0x83,
21         CPL_SGE_EGR_UPDATE    = 0xA5,
22         CPL_FW4_MSG           = 0xC0,
23         CPL_FW6_MSG           = 0xE0,
24         CPL_TX_PKT_LSO        = 0xED,
25         CPL_TX_PKT_XT         = 0xEE,
26 };
27
28 enum CPL_error {
29         CPL_ERR_NONE               = 0,
30         CPL_ERR_TCAM_FULL          = 3,
31 };
32
33 enum {
34         ULP_MODE_NONE          = 0,
35 };
36
37 enum {
38         CPL_ABORT_SEND_RST = 0,
39         CPL_ABORT_NO_RST,
40 };
41
42 enum {                     /* TX_PKT_XT checksum types */
43         TX_CSUM_TCPIP  = 8,
44         TX_CSUM_UDPIP  = 9,
45         TX_CSUM_TCPIP6 = 10,
46 };
47
48 union opcode_tid {
49         __be32 opcode_tid;
50         __u8 opcode;
51 };
52
53 #define S_CPL_OPCODE    24
54 #define V_CPL_OPCODE(x) ((x) << S_CPL_OPCODE)
55
56 #define G_TID(x)    ((x) & 0xFFFFFF)
57
58 /* tid is assumed to be 24-bits */
59 #define MK_OPCODE_TID(opcode, tid) (V_CPL_OPCODE(opcode) | (tid))
60
61 #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
62
63 /* extract the TID from a CPL command */
64 #define GET_TID(cmd) (G_TID(be32_to_cpu(OPCODE_TID(cmd))))
65
66 /* partitioning of TID fields that also carry a queue id */
67 #define S_TID_TID    0
68 #define M_TID_TID    0x3fff
69 #define G_TID_TID(x) (((x) >> S_TID_TID) & M_TID_TID)
70
71 #define S_TID_QID    14
72 #define V_TID_QID(x) ((x) << S_TID_QID)
73
74 struct rss_header {
75         __u8 opcode;
76 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
77         __u8 channel:2;
78         __u8 filter_hit:1;
79         __u8 filter_tid:1;
80         __u8 hash_type:2;
81         __u8 ipv6:1;
82         __u8 send2fw:1;
83 #else
84         __u8 send2fw:1;
85         __u8 ipv6:1;
86         __u8 hash_type:2;
87         __u8 filter_tid:1;
88         __u8 filter_hit:1;
89         __u8 channel:2;
90 #endif
91         __be16 qid;
92         __be32 hash_val;
93 };
94
95 #if defined(RSS_HDR_VLD) || defined(CHELSIO_FW)
96 #define RSS_HDR struct rss_header rss_hdr
97 #else
98 #define RSS_HDR
99 #endif
100
101 #ifndef CHELSIO_FW
102 struct work_request_hdr {
103         __be32 wr_hi;
104         __be32 wr_mid;
105         __be64 wr_lo;
106 };
107
108 #define WR_HDR struct work_request_hdr wr
109 #define WR_HDR_SIZE sizeof(struct work_request_hdr)
110 #else
111 #define WR_HDR
112 #define WR_HDR_SIZE 0
113 #endif
114
115 #define S_COOKIE    5
116 #define M_COOKIE    0x7
117 #define V_COOKIE(x) ((x) << S_COOKIE)
118 #define G_COOKIE(x) (((x) >> S_COOKIE) & M_COOKIE)
119
120 /* option 0 fields */
121 #define S_TX_CHAN    2
122 #define V_TX_CHAN(x) ((x) << S_TX_CHAN)
123
124 #define S_DELACK    5
125 #define V_DELACK(x) ((x) << S_DELACK)
126
127 #define S_NON_OFFLOAD    7
128 #define V_NON_OFFLOAD(x) ((x) << S_NON_OFFLOAD)
129 #define F_NON_OFFLOAD    V_NON_OFFLOAD(1U)
130
131 #define S_ULP_MODE    8
132 #define V_ULP_MODE(x) ((x) << S_ULP_MODE)
133
134 #define S_SMAC_SEL    28
135 #define V_SMAC_SEL(x) ((__u64)(x) << S_SMAC_SEL)
136
137 #define S_TCAM_BYPASS    48
138 #define V_TCAM_BYPASS(x) ((__u64)(x) << S_TCAM_BYPASS)
139 #define F_TCAM_BYPASS    V_TCAM_BYPASS(1ULL)
140
141 /* option 2 fields */
142 #define S_RSS_QUEUE    0
143 #define V_RSS_QUEUE(x) ((x) << S_RSS_QUEUE)
144
145 #define S_RSS_QUEUE_VALID    10
146 #define V_RSS_QUEUE_VALID(x) ((x) << S_RSS_QUEUE_VALID)
147 #define F_RSS_QUEUE_VALID    V_RSS_QUEUE_VALID(1U)
148
149 #define S_CONG_CNTRL    14
150 #define V_CONG_CNTRL(x) ((x) << S_CONG_CNTRL)
151
152 #define S_RX_CHANNEL    26
153 #define V_RX_CHANNEL(x) ((x) << S_RX_CHANNEL)
154 #define F_RX_CHANNEL    V_RX_CHANNEL(1U)
155
156 #define S_CCTRL_ECN    27
157 #define V_CCTRL_ECN(x) ((x) << S_CCTRL_ECN)
158
159 #define S_T5_OPT_2_VALID    31
160 #define V_T5_OPT_2_VALID(x) ((x) << S_T5_OPT_2_VALID)
161 #define F_T5_OPT_2_VALID    V_T5_OPT_2_VALID(1U)
162
163 struct cpl_t6_act_open_req {
164         WR_HDR;
165         union opcode_tid ot;
166         __be16 local_port;
167         __be16 peer_port;
168         __be32 local_ip;
169         __be32 peer_ip;
170         __be64 opt0;
171         __be32 rsvd;
172         __be32 opt2;
173         __be64 params;
174         __be32 rsvd2;
175         __be32 opt3;
176 };
177
178 struct cpl_t6_act_open_req6 {
179         WR_HDR;
180         union opcode_tid ot;
181         __be16 local_port;
182         __be16 peer_port;
183         __be64 local_ip_hi;
184         __be64 local_ip_lo;
185         __be64 peer_ip_hi;
186         __be64 peer_ip_lo;
187         __be64 opt0;
188         __be32 rsvd;
189         __be32 opt2;
190         __be64 params;
191         __be32 rsvd2;
192         __be32 opt3;
193 };
194
195 #define S_FILTER_TUPLE  24
196 #define V_FILTER_TUPLE(x) ((x) << S_FILTER_TUPLE)
197
198 struct cpl_act_open_rpl {
199         RSS_HDR
200         union opcode_tid ot;
201         __be32 atid_status;
202 };
203
204 /* cpl_act_open_rpl.atid_status fields */
205 #define S_AOPEN_STATUS    0
206 #define M_AOPEN_STATUS    0xFF
207 #define G_AOPEN_STATUS(x) (((x) >> S_AOPEN_STATUS) & M_AOPEN_STATUS)
208
209 #define S_AOPEN_ATID    8
210 #define M_AOPEN_ATID    0xFFFFFF
211 #define G_AOPEN_ATID(x) (((x) >> S_AOPEN_ATID) & M_AOPEN_ATID)
212
213 struct cpl_set_tcb_field {
214         WR_HDR;
215         union opcode_tid ot;
216         __be16 reply_ctrl;
217         __be16 word_cookie;
218         __be64 mask;
219         __be64 val;
220 };
221
222 /* cpl_set_tcb_field.word_cookie fields */
223 #define S_WORD    0
224 #define V_WORD(x) ((x) << S_WORD)
225
226 /* cpl_get_tcb.reply_ctrl fields */
227 #define S_QUEUENO    0
228 #define V_QUEUENO(x) ((x) << S_QUEUENO)
229
230 #define S_REPLY_CHAN    14
231 #define V_REPLY_CHAN(x) ((x) << S_REPLY_CHAN)
232
233 #define S_NO_REPLY    15
234 #define V_NO_REPLY(x) ((x) << S_NO_REPLY)
235
236 struct cpl_set_tcb_rpl {
237         RSS_HDR
238         union opcode_tid ot;
239         __be16 rsvd;
240         __u8   cookie;
241         __u8   status;
242         __be64 oldval;
243 };
244
245 /* cpl_abort_req status command code
246  */
247 struct cpl_abort_req {
248         WR_HDR;
249         union opcode_tid ot;
250         __be32 rsvd0;
251         __u8  rsvd1;
252         __u8  cmd;
253         __u8  rsvd2[6];
254 };
255
256 struct cpl_abort_rpl_rss {
257         RSS_HDR
258         union opcode_tid ot;
259         __u8  rsvd[3];
260         __u8  status;
261 };
262
263 struct cpl_abort_rpl {
264         WR_HDR;
265         union opcode_tid ot;
266         __be32 rsvd0;
267         __u8  rsvd1;
268         __u8  cmd;
269         __u8  rsvd2[6];
270 };
271
272 struct cpl_tid_release {
273         WR_HDR;
274         union opcode_tid ot;
275         __be32 rsvd;
276 };
277
278 struct cpl_tx_data {
279         union opcode_tid ot;
280         __be32 len;
281         __be32 rsvd;
282         __be32 flags;
283 };
284
285 struct cpl_tx_pkt_core {
286         __be32 ctrl0;
287         __be16 pack;
288         __be16 len;
289         __be64 ctrl1;
290 };
291
292 struct cpl_tx_pkt {
293         WR_HDR;
294         struct cpl_tx_pkt_core c;
295 };
296
297 /* cpl_tx_pkt_core.ctrl0 fields */
298 #define S_TXPKT_PF    8
299 #define M_TXPKT_PF    0x7
300 #define V_TXPKT_PF(x) ((x) << S_TXPKT_PF)
301 #define G_TXPKT_PF(x) (((x) >> S_TXPKT_PF) & M_TXPKT_PF)
302
303 #define S_TXPKT_INTF    16
304 #define M_TXPKT_INTF    0xF
305 #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
306 #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
307
308 #define S_TXPKT_OPCODE    24
309 #define M_TXPKT_OPCODE    0xFF
310 #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
311 #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
312
313 /* cpl_tx_pkt_core.ctrl1 fields */
314 #define S_TXPKT_IPHDR_LEN    20
315 #define M_TXPKT_IPHDR_LEN    0x3FFF
316 #define V_TXPKT_IPHDR_LEN(x) ((__u64)(x) << S_TXPKT_IPHDR_LEN)
317 #define G_TXPKT_IPHDR_LEN(x) (((x) >> S_TXPKT_IPHDR_LEN) & M_TXPKT_IPHDR_LEN)
318
319 #define S_TXPKT_ETHHDR_LEN    34
320 #define M_TXPKT_ETHHDR_LEN    0x3F
321 #define V_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_TXPKT_ETHHDR_LEN)
322 #define G_TXPKT_ETHHDR_LEN(x) (((x) >> S_TXPKT_ETHHDR_LEN) & M_TXPKT_ETHHDR_LEN)
323
324 #define S_T6_TXPKT_ETHHDR_LEN    32
325 #define M_T6_TXPKT_ETHHDR_LEN    0xFF
326 #define V_T6_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_T6_TXPKT_ETHHDR_LEN)
327 #define G_T6_TXPKT_ETHHDR_LEN(x) \
328         (((x) >> S_T6_TXPKT_ETHHDR_LEN) & M_T6_TXPKT_ETHHDR_LEN)
329
330 #define S_TXPKT_CSUM_TYPE    40
331 #define M_TXPKT_CSUM_TYPE    0xF
332 #define V_TXPKT_CSUM_TYPE(x) ((__u64)(x) << S_TXPKT_CSUM_TYPE)
333 #define G_TXPKT_CSUM_TYPE(x) (((x) >> S_TXPKT_CSUM_TYPE) & M_TXPKT_CSUM_TYPE)
334
335 #define S_TXPKT_VLAN    44
336 #define M_TXPKT_VLAN    0xFFFF
337 #define V_TXPKT_VLAN(x) ((__u64)(x) << S_TXPKT_VLAN)
338 #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
339
340 #define S_TXPKT_VLAN_VLD    60
341 #define V_TXPKT_VLAN_VLD(x) ((__u64)(x) << S_TXPKT_VLAN_VLD)
342 #define F_TXPKT_VLAN_VLD    V_TXPKT_VLAN_VLD(1ULL)
343
344 #define S_TXPKT_IPCSUM_DIS    62
345 #define V_TXPKT_IPCSUM_DIS(x) ((__u64)(x) << S_TXPKT_IPCSUM_DIS)
346 #define F_TXPKT_IPCSUM_DIS    V_TXPKT_IPCSUM_DIS(1ULL)
347
348 #define S_TXPKT_L4CSUM_DIS    63
349 #define V_TXPKT_L4CSUM_DIS(x) ((__u64)(x) << S_TXPKT_L4CSUM_DIS)
350 #define F_TXPKT_L4CSUM_DIS    V_TXPKT_L4CSUM_DIS(1ULL)
351
352 struct cpl_tx_pkt_lso_core {
353         __be32 lso_ctrl;
354         __be16 ipid_ofst;
355         __be16 mss;
356         __be32 seqno_offset;
357         __be32 len;
358         /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
359 };
360
361 struct cpl_tx_pkt_lso {
362         WR_HDR;
363         struct cpl_tx_pkt_lso_core c;
364         /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
365 };
366
367 /* cpl_tx_pkt_lso_core.lso_ctrl fields */
368 #define S_LSO_TCPHDR_LEN    0
369 #define M_LSO_TCPHDR_LEN    0xF
370 #define V_LSO_TCPHDR_LEN(x) ((x) << S_LSO_TCPHDR_LEN)
371 #define G_LSO_TCPHDR_LEN(x) (((x) >> S_LSO_TCPHDR_LEN) & M_LSO_TCPHDR_LEN)
372
373 #define S_LSO_IPHDR_LEN    4
374 #define M_LSO_IPHDR_LEN    0xFFF
375 #define V_LSO_IPHDR_LEN(x) ((x) << S_LSO_IPHDR_LEN)
376 #define G_LSO_IPHDR_LEN(x) (((x) >> S_LSO_IPHDR_LEN) & M_LSO_IPHDR_LEN)
377
378 #define S_LSO_ETHHDR_LEN    16
379 #define M_LSO_ETHHDR_LEN    0xF
380 #define V_LSO_ETHHDR_LEN(x) ((x) << S_LSO_ETHHDR_LEN)
381 #define G_LSO_ETHHDR_LEN(x) (((x) >> S_LSO_ETHHDR_LEN) & M_LSO_ETHHDR_LEN)
382
383 #define S_LSO_IPV6    20
384 #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
385 #define F_LSO_IPV6    V_LSO_IPV6(1U)
386
387 #define S_LSO_LAST_SLICE    22
388 #define V_LSO_LAST_SLICE(x) ((x) << S_LSO_LAST_SLICE)
389 #define F_LSO_LAST_SLICE    V_LSO_LAST_SLICE(1U)
390
391 #define S_LSO_FIRST_SLICE    23
392 #define V_LSO_FIRST_SLICE(x) ((x) << S_LSO_FIRST_SLICE)
393 #define F_LSO_FIRST_SLICE    V_LSO_FIRST_SLICE(1U)
394
395 #define S_LSO_OPCODE    24
396 #define M_LSO_OPCODE    0xFF
397 #define V_LSO_OPCODE(x) ((x) << S_LSO_OPCODE)
398 #define G_LSO_OPCODE(x) (((x) >> S_LSO_OPCODE) & M_LSO_OPCODE)
399
400 #define S_LSO_T5_XFER_SIZE         0
401 #define M_LSO_T5_XFER_SIZE    0xFFFFFFF
402 #define V_LSO_T5_XFER_SIZE(x) ((x) << S_LSO_T5_XFER_SIZE)
403 #define G_LSO_T5_XFER_SIZE(x) (((x) >> S_LSO_T5_XFER_SIZE) & M_LSO_T5_XFER_SIZE)
404
405 struct cpl_rx_pkt {
406         RSS_HDR;
407         __u8 opcode;
408 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
409         __u8 iff:4;
410         __u8 csum_calc:1;
411         __u8 ipmi_pkt:1;
412         __u8 vlan_ex:1;
413         __u8 ip_frag:1;
414 #else
415         __u8 ip_frag:1;
416         __u8 vlan_ex:1;
417         __u8 ipmi_pkt:1;
418         __u8 csum_calc:1;
419         __u8 iff:4;
420 #endif
421         __be16 csum;
422         __be16 vlan;
423         __be16 len;
424         __be32 l2info;
425         __be16 hdr_len;
426         __be16 err_vec;
427 };
428
429 struct cpl_l2t_write_req {
430         WR_HDR;
431         union opcode_tid ot;
432         __be16 params;
433         __be16 l2t_idx;
434         __be16 vlan;
435         __u8   dst_mac[6];
436 };
437
438 /* cpl_l2t_write_req.params fields */
439 #define S_L2T_W_PORT    8
440 #define V_L2T_W_PORT(x) ((x) << S_L2T_W_PORT)
441
442 #define S_L2T_W_LPBK    10
443 #define V_L2T_W_LPBK(x) ((x) << S_L2T_W_LPBK)
444
445 #define S_L2T_W_ARPMISS         11
446 #define V_L2T_W_ARPMISS(x)      ((x) << S_L2T_W_ARPMISS)
447
448 #define S_L2T_W_NOREPLY    15
449 #define V_L2T_W_NOREPLY(x) ((x) << S_L2T_W_NOREPLY)
450
451 struct cpl_l2t_write_rpl {
452         RSS_HDR
453         union opcode_tid ot;
454         __u8 status;
455         __u8 rsvd[3];
456 };
457
458 /* rx_pkt.l2info fields */
459 #define S_RXF_UDP    22
460 #define V_RXF_UDP(x) ((x) << S_RXF_UDP)
461 #define F_RXF_UDP    V_RXF_UDP(1U)
462
463 #define S_RXF_TCP    23
464 #define V_RXF_TCP(x) ((x) << S_RXF_TCP)
465 #define F_RXF_TCP    V_RXF_TCP(1U)
466
467 #define S_RXF_IP    24
468 #define V_RXF_IP(x) ((x) << S_RXF_IP)
469 #define F_RXF_IP    V_RXF_IP(1U)
470
471 #define S_RXF_IP6    25
472 #define V_RXF_IP6(x) ((x) << S_RXF_IP6)
473 #define F_RXF_IP6    V_RXF_IP6(1U)
474
475 /* rx_pkt.err_vec fields */
476 /* In T6, rx_pkt.err_vec indicates
477  * RxError Error vector (16b) or
478  * Encapsulating header length (8b),
479  * Outer encapsulation type (2b) and
480  * compressed error vector (6b) if CRxPktEnc is
481  * enabled in TP_OUT_CONFIG
482  */
483 #define S_T6_COMPR_RXERR_VEC    0
484 #define M_T6_COMPR_RXERR_VEC    0x3F
485 #define V_T6_COMPR_RXERR_VEC(x) ((x) << S_T6_COMPR_RXERR_VEC)
486 #define G_T6_COMPR_RXERR_VEC(x) \
487         (((x) >> S_T6_COMPR_RXERR_VEC) & M_T6_COMPR_RXERR_VEC)
488
489 /* cpl_fw*.type values */
490 enum {
491         FW_TYPE_RSSCPL = 4,
492 };
493
494 struct cpl_fw4_msg {
495         RSS_HDR;
496         u8 opcode;
497         u8 type;
498         __be16 rsvd0;
499         __be32 rsvd1;
500         __be64 data[2];
501 };
502
503 struct cpl_fw6_msg {
504         RSS_HDR;
505         u8 opcode;
506         u8 type;
507         __be16 rsvd0;
508         __be32 rsvd1;
509         __be64 data[4];
510 };
511
512 /* ULP_TX opcodes */
513 enum {
514         ULP_TX_PKT = 4
515 };
516
517 enum {
518         ULP_TX_SC_NOOP = 0x80,
519         ULP_TX_SC_IMM  = 0x81,
520         ULP_TX_SC_DSGL = 0x82,
521         ULP_TX_SC_ISGL = 0x83
522 };
523
524 #define S_ULPTX_CMD    24
525 #define M_ULPTX_CMD    0xFF
526 #define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
527
528 #define S_ULP_TX_SC_MORE 23
529 #define V_ULP_TX_SC_MORE(x) ((x) << S_ULP_TX_SC_MORE)
530 #define F_ULP_TX_SC_MORE  V_ULP_TX_SC_MORE(1U)
531
532 struct ulptx_sge_pair {
533         __be32 len[2];
534         __be64 addr[2];
535 };
536
537 struct ulptx_sgl {
538         __be32 cmd_nsge;
539         __be32 len0;
540         __be64 addr0;
541
542 #if !(defined C99_NOT_SUPPORTED)
543         struct ulptx_sge_pair sge[0];
544 #endif
545
546 };
547
548 struct ulptx_idata {
549         __be32 cmd_more;
550         __be32 len;
551 };
552
553 #define S_ULPTX_NSGE    0
554 #define M_ULPTX_NSGE    0xFFFF
555 #define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE)
556
557 struct ulp_txpkt {
558         __be32 cmd_dest;
559         __be32 len;
560 };
561
562 /* ulp_txpkt.cmd_dest fields */
563 #define S_ULP_TXPKT_DEST    16
564 #define M_ULP_TXPKT_DEST    0x3
565 #define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST)
566
567 #define S_ULP_TXPKT_FID     4
568 #define M_ULP_TXPKT_FID     0x7ff
569 #define V_ULP_TXPKT_FID(x)  ((x) << S_ULP_TXPKT_FID)
570
571 #define S_ULP_TXPKT_RO      3
572 #define V_ULP_TXPKT_RO(x) ((x) << S_ULP_TXPKT_RO)
573 #define F_ULP_TXPKT_RO V_ULP_TXPKT_RO(1U)
574
575 #endif  /* T4_MSG_H */