43d1cb66fa63ecec7081b7b1fd72371949fc9960
[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_SET_TCB_RPL       = 0x3A,
11         CPL_SGE_EGR_UPDATE    = 0xA5,
12         CPL_FW4_MSG           = 0xC0,
13         CPL_FW6_MSG           = 0xE0,
14         CPL_TX_PKT_LSO        = 0xED,
15         CPL_TX_PKT_XT         = 0xEE,
16 };
17
18 enum {                     /* TX_PKT_XT checksum types */
19         TX_CSUM_TCPIP  = 8,
20         TX_CSUM_UDPIP  = 9,
21         TX_CSUM_TCPIP6 = 10,
22 };
23
24 union opcode_tid {
25         __be32 opcode_tid;
26         __u8 opcode;
27 };
28
29 #define G_TID(x)    ((x) & 0xFFFFFF)
30
31 #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
32
33 /* extract the TID from a CPL command */
34 #define GET_TID(cmd) (G_TID(be32_to_cpu(OPCODE_TID(cmd))))
35
36 struct rss_header {
37         __u8 opcode;
38 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
39         __u8 channel:2;
40         __u8 filter_hit:1;
41         __u8 filter_tid:1;
42         __u8 hash_type:2;
43         __u8 ipv6:1;
44         __u8 send2fw:1;
45 #else
46         __u8 send2fw:1;
47         __u8 ipv6:1;
48         __u8 hash_type:2;
49         __u8 filter_tid:1;
50         __u8 filter_hit:1;
51         __u8 channel:2;
52 #endif
53         __be16 qid;
54         __be32 hash_val;
55 };
56
57 #if defined(RSS_HDR_VLD) || defined(CHELSIO_FW)
58 #define RSS_HDR struct rss_header rss_hdr
59 #else
60 #define RSS_HDR
61 #endif
62
63 #ifndef CHELSIO_FW
64 struct work_request_hdr {
65         __be32 wr_hi;
66         __be32 wr_mid;
67         __be64 wr_lo;
68 };
69
70 #define WR_HDR struct work_request_hdr wr
71 #define WR_HDR_SIZE sizeof(struct work_request_hdr)
72 #else
73 #define WR_HDR
74 #define WR_HDR_SIZE 0
75 #endif
76
77 #define S_COOKIE    5
78 #define M_COOKIE    0x7
79 #define V_COOKIE(x) ((x) << S_COOKIE)
80 #define G_COOKIE(x) (((x) >> S_COOKIE) & M_COOKIE)
81
82 struct cpl_set_tcb_rpl {
83         RSS_HDR
84         union opcode_tid ot;
85         __be16 rsvd;
86         __u8   cookie;
87         __u8   status;
88         __be64 oldval;
89 };
90
91 struct cpl_tx_data {
92         union opcode_tid ot;
93         __be32 len;
94         __be32 rsvd;
95         __be32 flags;
96 };
97
98 struct cpl_tx_pkt_core {
99         __be32 ctrl0;
100         __be16 pack;
101         __be16 len;
102         __be64 ctrl1;
103 };
104
105 struct cpl_tx_pkt {
106         WR_HDR;
107         struct cpl_tx_pkt_core c;
108 };
109
110 /* cpl_tx_pkt_core.ctrl0 fields */
111 #define S_TXPKT_PF    8
112 #define M_TXPKT_PF    0x7
113 #define V_TXPKT_PF(x) ((x) << S_TXPKT_PF)
114 #define G_TXPKT_PF(x) (((x) >> S_TXPKT_PF) & M_TXPKT_PF)
115
116 #define S_TXPKT_INTF    16
117 #define M_TXPKT_INTF    0xF
118 #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
119 #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
120
121 #define S_TXPKT_OPCODE    24
122 #define M_TXPKT_OPCODE    0xFF
123 #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
124 #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
125
126 /* cpl_tx_pkt_core.ctrl1 fields */
127 #define S_TXPKT_IPHDR_LEN    20
128 #define M_TXPKT_IPHDR_LEN    0x3FFF
129 #define V_TXPKT_IPHDR_LEN(x) ((__u64)(x) << S_TXPKT_IPHDR_LEN)
130 #define G_TXPKT_IPHDR_LEN(x) (((x) >> S_TXPKT_IPHDR_LEN) & M_TXPKT_IPHDR_LEN)
131
132 #define S_TXPKT_ETHHDR_LEN    34
133 #define M_TXPKT_ETHHDR_LEN    0x3F
134 #define V_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_TXPKT_ETHHDR_LEN)
135 #define G_TXPKT_ETHHDR_LEN(x) (((x) >> S_TXPKT_ETHHDR_LEN) & M_TXPKT_ETHHDR_LEN)
136
137 #define S_T6_TXPKT_ETHHDR_LEN    32
138 #define M_T6_TXPKT_ETHHDR_LEN    0xFF
139 #define V_T6_TXPKT_ETHHDR_LEN(x) ((__u64)(x) << S_T6_TXPKT_ETHHDR_LEN)
140 #define G_T6_TXPKT_ETHHDR_LEN(x) \
141         (((x) >> S_T6_TXPKT_ETHHDR_LEN) & M_T6_TXPKT_ETHHDR_LEN)
142
143 #define S_TXPKT_CSUM_TYPE    40
144 #define M_TXPKT_CSUM_TYPE    0xF
145 #define V_TXPKT_CSUM_TYPE(x) ((__u64)(x) << S_TXPKT_CSUM_TYPE)
146 #define G_TXPKT_CSUM_TYPE(x) (((x) >> S_TXPKT_CSUM_TYPE) & M_TXPKT_CSUM_TYPE)
147
148 #define S_TXPKT_VLAN    44
149 #define M_TXPKT_VLAN    0xFFFF
150 #define V_TXPKT_VLAN(x) ((__u64)(x) << S_TXPKT_VLAN)
151 #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
152
153 #define S_TXPKT_VLAN_VLD    60
154 #define V_TXPKT_VLAN_VLD(x) ((__u64)(x) << S_TXPKT_VLAN_VLD)
155 #define F_TXPKT_VLAN_VLD    V_TXPKT_VLAN_VLD(1ULL)
156
157 #define S_TXPKT_IPCSUM_DIS    62
158 #define V_TXPKT_IPCSUM_DIS(x) ((__u64)(x) << S_TXPKT_IPCSUM_DIS)
159 #define F_TXPKT_IPCSUM_DIS    V_TXPKT_IPCSUM_DIS(1ULL)
160
161 #define S_TXPKT_L4CSUM_DIS    63
162 #define V_TXPKT_L4CSUM_DIS(x) ((__u64)(x) << S_TXPKT_L4CSUM_DIS)
163 #define F_TXPKT_L4CSUM_DIS    V_TXPKT_L4CSUM_DIS(1ULL)
164
165 struct cpl_tx_pkt_lso_core {
166         __be32 lso_ctrl;
167         __be16 ipid_ofst;
168         __be16 mss;
169         __be32 seqno_offset;
170         __be32 len;
171         /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
172 };
173
174 struct cpl_tx_pkt_lso {
175         WR_HDR;
176         struct cpl_tx_pkt_lso_core c;
177         /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
178 };
179
180 /* cpl_tx_pkt_lso_core.lso_ctrl fields */
181 #define S_LSO_TCPHDR_LEN    0
182 #define M_LSO_TCPHDR_LEN    0xF
183 #define V_LSO_TCPHDR_LEN(x) ((x) << S_LSO_TCPHDR_LEN)
184 #define G_LSO_TCPHDR_LEN(x) (((x) >> S_LSO_TCPHDR_LEN) & M_LSO_TCPHDR_LEN)
185
186 #define S_LSO_IPHDR_LEN    4
187 #define M_LSO_IPHDR_LEN    0xFFF
188 #define V_LSO_IPHDR_LEN(x) ((x) << S_LSO_IPHDR_LEN)
189 #define G_LSO_IPHDR_LEN(x) (((x) >> S_LSO_IPHDR_LEN) & M_LSO_IPHDR_LEN)
190
191 #define S_LSO_ETHHDR_LEN    16
192 #define M_LSO_ETHHDR_LEN    0xF
193 #define V_LSO_ETHHDR_LEN(x) ((x) << S_LSO_ETHHDR_LEN)
194 #define G_LSO_ETHHDR_LEN(x) (((x) >> S_LSO_ETHHDR_LEN) & M_LSO_ETHHDR_LEN)
195
196 #define S_LSO_IPV6    20
197 #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
198 #define F_LSO_IPV6    V_LSO_IPV6(1U)
199
200 #define S_LSO_LAST_SLICE    22
201 #define V_LSO_LAST_SLICE(x) ((x) << S_LSO_LAST_SLICE)
202 #define F_LSO_LAST_SLICE    V_LSO_LAST_SLICE(1U)
203
204 #define S_LSO_FIRST_SLICE    23
205 #define V_LSO_FIRST_SLICE(x) ((x) << S_LSO_FIRST_SLICE)
206 #define F_LSO_FIRST_SLICE    V_LSO_FIRST_SLICE(1U)
207
208 #define S_LSO_OPCODE    24
209 #define M_LSO_OPCODE    0xFF
210 #define V_LSO_OPCODE(x) ((x) << S_LSO_OPCODE)
211 #define G_LSO_OPCODE(x) (((x) >> S_LSO_OPCODE) & M_LSO_OPCODE)
212
213 #define S_LSO_T5_XFER_SIZE         0
214 #define M_LSO_T5_XFER_SIZE    0xFFFFFFF
215 #define V_LSO_T5_XFER_SIZE(x) ((x) << S_LSO_T5_XFER_SIZE)
216 #define G_LSO_T5_XFER_SIZE(x) (((x) >> S_LSO_T5_XFER_SIZE) & M_LSO_T5_XFER_SIZE)
217
218 struct cpl_rx_pkt {
219         RSS_HDR;
220         __u8 opcode;
221 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
222         __u8 iff:4;
223         __u8 csum_calc:1;
224         __u8 ipmi_pkt:1;
225         __u8 vlan_ex:1;
226         __u8 ip_frag:1;
227 #else
228         __u8 ip_frag:1;
229         __u8 vlan_ex:1;
230         __u8 ipmi_pkt:1;
231         __u8 csum_calc:1;
232         __u8 iff:4;
233 #endif
234         __be16 csum;
235         __be16 vlan;
236         __be16 len;
237         __be32 l2info;
238         __be16 hdr_len;
239         __be16 err_vec;
240 };
241
242 /* rx_pkt.l2info fields */
243 #define S_RXF_UDP    22
244 #define V_RXF_UDP(x) ((x) << S_RXF_UDP)
245 #define F_RXF_UDP    V_RXF_UDP(1U)
246
247 #define S_RXF_TCP    23
248 #define V_RXF_TCP(x) ((x) << S_RXF_TCP)
249 #define F_RXF_TCP    V_RXF_TCP(1U)
250
251 #define S_RXF_IP    24
252 #define V_RXF_IP(x) ((x) << S_RXF_IP)
253 #define F_RXF_IP    V_RXF_IP(1U)
254
255 #define S_RXF_IP6    25
256 #define V_RXF_IP6(x) ((x) << S_RXF_IP6)
257 #define F_RXF_IP6    V_RXF_IP6(1U)
258
259 /* rx_pkt.err_vec fields */
260 /* In T6, rx_pkt.err_vec indicates
261  * RxError Error vector (16b) or
262  * Encapsulating header length (8b),
263  * Outer encapsulation type (2b) and
264  * compressed error vector (6b) if CRxPktEnc is
265  * enabled in TP_OUT_CONFIG
266  */
267 #define S_T6_COMPR_RXERR_VEC    0
268 #define M_T6_COMPR_RXERR_VEC    0x3F
269 #define V_T6_COMPR_RXERR_VEC(x) ((x) << S_T6_COMPR_RXERR_VEC)
270 #define G_T6_COMPR_RXERR_VEC(x) \
271         (((x) >> S_T6_COMPR_RXERR_VEC) & M_T6_COMPR_RXERR_VEC)
272
273 /* cpl_fw*.type values */
274 enum {
275         FW_TYPE_RSSCPL = 4,
276 };
277
278 struct cpl_fw4_msg {
279         RSS_HDR;
280         u8 opcode;
281         u8 type;
282         __be16 rsvd0;
283         __be32 rsvd1;
284         __be64 data[2];
285 };
286
287 struct cpl_fw6_msg {
288         RSS_HDR;
289         u8 opcode;
290         u8 type;
291         __be16 rsvd0;
292         __be32 rsvd1;
293         __be64 data[4];
294 };
295
296 enum {
297         ULP_TX_SC_IMM  = 0x81,
298         ULP_TX_SC_DSGL = 0x82,
299         ULP_TX_SC_ISGL = 0x83
300 };
301
302 #define S_ULPTX_CMD    24
303 #define M_ULPTX_CMD    0xFF
304 #define V_ULPTX_CMD(x) ((x) << S_ULPTX_CMD)
305
306 #define S_ULP_TX_SC_MORE 23
307 #define V_ULP_TX_SC_MORE(x) ((x) << S_ULP_TX_SC_MORE)
308 #define F_ULP_TX_SC_MORE  V_ULP_TX_SC_MORE(1U)
309
310 struct ulptx_sge_pair {
311         __be32 len[2];
312         __be64 addr[2];
313 };
314
315 struct ulptx_sgl {
316         __be32 cmd_nsge;
317         __be32 len0;
318         __be64 addr0;
319
320 #if !(defined C99_NOT_SUPPORTED)
321         struct ulptx_sge_pair sge[0];
322 #endif
323
324 };
325
326 struct ulptx_idata {
327         __be32 cmd_more;
328         __be32 len;
329 };
330
331 #define S_ULPTX_NSGE    0
332 #define M_ULPTX_NSGE    0xFFFF
333 #define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE)
334
335 struct ulp_txpkt {
336         __be32 cmd_dest;
337         __be32 len;
338 };
339
340 /* ulp_txpkt.cmd_dest fields */
341 #define S_ULP_TXPKT_DEST    16
342 #define M_ULP_TXPKT_DEST    0x3
343 #define V_ULP_TXPKT_DEST(x) ((x) << S_ULP_TXPKT_DEST)
344
345 #define S_ULP_TXPKT_FID     4
346 #define M_ULP_TXPKT_FID     0x7ff
347 #define V_ULP_TXPKT_FID(x)  ((x) << S_ULP_TXPKT_FID)
348
349 #define S_ULP_TXPKT_RO      3
350 #define V_ULP_TXPKT_RO(x) ((x) << S_ULP_TXPKT_RO)
351 #define F_ULP_TXPKT_RO V_ULP_TXPKT_RO(1U)
352
353 #endif  /* T4_MSG_H */