1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef _NFP_NET_CTRL_H_
14 #define _NFP_NET_CTRL_H_
15
16 #include <linux/types.h>
17
18
19
20
21
22
23
24 #define NFP_NET_CFG_BAR_SZ (32 * 1024)
25
26
27
28
29 #define NFP_NET_RX_OFFSET 32
30
31
32
33
34
35
36 #define NFP_NET_LSO_MAX_HDR_SZ 255
37 #define NFP_NET_LSO_MAX_SEGS 64
38
39
40
41
42 #define NFP_NET_META_FIELD_SIZE 4
43 #define NFP_NET_META_HASH 1
44 #define NFP_NET_META_MARK 2
45 #define NFP_NET_META_PORTID 5
46 #define NFP_NET_META_CSUM 6
47 #define NFP_NET_META_CONN_HANDLE 7
48
49 #define NFP_META_PORT_ID_CTRL ~0U
50
51
52
53
54 #define NFP_NET_RSS_NONE 0
55 #define NFP_NET_RSS_IPV4 1
56 #define NFP_NET_RSS_IPV6 2
57 #define NFP_NET_RSS_IPV6_EX 3
58 #define NFP_NET_RSS_IPV4_TCP 4
59 #define NFP_NET_RSS_IPV6_TCP 5
60 #define NFP_NET_RSS_IPV6_EX_TCP 6
61 #define NFP_NET_RSS_IPV4_UDP 7
62 #define NFP_NET_RSS_IPV6_UDP 8
63 #define NFP_NET_RSS_IPV6_EX_UDP 9
64
65
66
67
68
69
70 #define NFP_NET_TXR_MAX 64
71 #define NFP_NET_RXR_MAX 64
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 #define NFP_NET_CFG_CTRL 0x0000
89 #define NFP_NET_CFG_CTRL_ENABLE (0x1 << 0)
90 #define NFP_NET_CFG_CTRL_PROMISC (0x1 << 1)
91 #define NFP_NET_CFG_CTRL_L2BC (0x1 << 2)
92 #define NFP_NET_CFG_CTRL_L2MC (0x1 << 3)
93 #define NFP_NET_CFG_CTRL_RXCSUM (0x1 << 4)
94 #define NFP_NET_CFG_CTRL_TXCSUM (0x1 << 5)
95 #define NFP_NET_CFG_CTRL_RXVLAN (0x1 << 6)
96 #define NFP_NET_CFG_CTRL_TXVLAN (0x1 << 7)
97 #define NFP_NET_CFG_CTRL_SCATTER (0x1 << 8)
98 #define NFP_NET_CFG_CTRL_GATHER (0x1 << 9)
99 #define NFP_NET_CFG_CTRL_LSO (0x1 << 10)
100 #define NFP_NET_CFG_CTRL_CTAG_FILTER (0x1 << 11)
101 #define NFP_NET_CFG_CTRL_CMSG_DATA (0x1 << 12)
102 #define NFP_NET_CFG_CTRL_RINGCFG (0x1 << 16)
103 #define NFP_NET_CFG_CTRL_RSS (0x1 << 17)
104 #define NFP_NET_CFG_CTRL_IRQMOD (0x1 << 18)
105 #define NFP_NET_CFG_CTRL_RINGPRIO (0x1 << 19)
106 #define NFP_NET_CFG_CTRL_MSIXAUTO (0x1 << 20)
107 #define NFP_NET_CFG_CTRL_TXRWB (0x1 << 21)
108 #define NFP_NET_CFG_CTRL_VXLAN (0x1 << 24)
109 #define NFP_NET_CFG_CTRL_NVGRE (0x1 << 25)
110 #define NFP_NET_CFG_CTRL_BPF (0x1 << 27)
111 #define NFP_NET_CFG_CTRL_LSO2 (0x1 << 28)
112 #define NFP_NET_CFG_CTRL_RSS2 (0x1 << 29)
113 #define NFP_NET_CFG_CTRL_CSUM_COMPLETE (0x1 << 30)
114 #define NFP_NET_CFG_CTRL_LIVE_ADDR (0x1 << 31)
115
116 #define NFP_NET_CFG_CTRL_LSO_ANY (NFP_NET_CFG_CTRL_LSO | \
117 NFP_NET_CFG_CTRL_LSO2)
118 #define NFP_NET_CFG_CTRL_RSS_ANY (NFP_NET_CFG_CTRL_RSS | \
119 NFP_NET_CFG_CTRL_RSS2)
120 #define NFP_NET_CFG_CTRL_RXCSUM_ANY (NFP_NET_CFG_CTRL_RXCSUM | \
121 NFP_NET_CFG_CTRL_CSUM_COMPLETE)
122 #define NFP_NET_CFG_CTRL_CHAIN_META (NFP_NET_CFG_CTRL_RSS2 | \
123 NFP_NET_CFG_CTRL_CSUM_COMPLETE)
124
125 #define NFP_NET_CFG_UPDATE 0x0004
126 #define NFP_NET_CFG_UPDATE_GEN (0x1 << 0)
127 #define NFP_NET_CFG_UPDATE_RING (0x1 << 1)
128 #define NFP_NET_CFG_UPDATE_RSS (0x1 << 2)
129 #define NFP_NET_CFG_UPDATE_TXRPRIO (0x1 << 3)
130 #define NFP_NET_CFG_UPDATE_RXRPRIO (0x1 << 4)
131 #define NFP_NET_CFG_UPDATE_MSIX (0x1 << 5)
132 #define NFP_NET_CFG_UPDATE_RESET (0x1 << 7)
133 #define NFP_NET_CFG_UPDATE_IRQMOD (0x1 << 8)
134 #define NFP_NET_CFG_UPDATE_VXLAN (0x1 << 9)
135 #define NFP_NET_CFG_UPDATE_BPF (0x1 << 10)
136 #define NFP_NET_CFG_UPDATE_MACADDR (0x1 << 11)
137 #define NFP_NET_CFG_UPDATE_MBOX (0x1 << 12)
138 #define NFP_NET_CFG_UPDATE_VF (0x1 << 13)
139 #define NFP_NET_CFG_UPDATE_CRYPTO (0x1 << 14)
140 #define NFP_NET_CFG_UPDATE_ERR (0x1 << 31)
141 #define NFP_NET_CFG_TXRS_ENABLE 0x0008
142 #define NFP_NET_CFG_RXRS_ENABLE 0x0010
143 #define NFP_NET_CFG_MTU 0x0018
144 #define NFP_NET_CFG_FLBUFSZ 0x001c
145 #define NFP_NET_CFG_EXN 0x001f
146 #define NFP_NET_CFG_LSC 0x0020
147 #define NFP_NET_CFG_MACADDR 0x0024
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163 #define NFP_NET_CFG_VERSION 0x0030
164 #define NFP_NET_CFG_VERSION_RESERVED_MASK (0xff << 24)
165 #define NFP_NET_CFG_VERSION_CLASS_MASK (0xff << 16)
166 #define NFP_NET_CFG_VERSION_CLASS(x) (((x) & 0xff) << 16)
167 #define NFP_NET_CFG_VERSION_CLASS_GENERIC 0
168 #define NFP_NET_CFG_VERSION_MAJOR_MASK (0xff << 8)
169 #define NFP_NET_CFG_VERSION_MAJOR(x) (((x) & 0xff) << 8)
170 #define NFP_NET_CFG_VERSION_MINOR_MASK (0xff << 0)
171 #define NFP_NET_CFG_VERSION_MINOR(x) (((x) & 0xff) << 0)
172 #define NFP_NET_CFG_STS 0x0034
173 #define NFP_NET_CFG_STS_LINK (0x1 << 0)
174
175 #define NFP_NET_CFG_STS_LINK_RATE_SHIFT 1
176 #define NFP_NET_CFG_STS_LINK_RATE_MASK 0xF
177 #define NFP_NET_CFG_STS_LINK_RATE \
178 (NFP_NET_CFG_STS_LINK_RATE_MASK << NFP_NET_CFG_STS_LINK_RATE_SHIFT)
179 #define NFP_NET_CFG_STS_LINK_RATE_UNSUPPORTED 0
180 #define NFP_NET_CFG_STS_LINK_RATE_UNKNOWN 1
181 #define NFP_NET_CFG_STS_LINK_RATE_1G 2
182 #define NFP_NET_CFG_STS_LINK_RATE_10G 3
183 #define NFP_NET_CFG_STS_LINK_RATE_25G 4
184 #define NFP_NET_CFG_STS_LINK_RATE_40G 5
185 #define NFP_NET_CFG_STS_LINK_RATE_50G 6
186 #define NFP_NET_CFG_STS_LINK_RATE_100G 7
187 #define NFP_NET_CFG_CAP 0x0038
188 #define NFP_NET_CFG_MAX_TXRINGS 0x003c
189 #define NFP_NET_CFG_MAX_RXRINGS 0x0040
190 #define NFP_NET_CFG_MAX_MTU 0x0044
191
192 #define NFP_NET_CFG_START_TXQ 0x0048
193 #define NFP_NET_CFG_START_RXQ 0x004c
194
195
196
197
198 #define NFP_NET_CFG_RX_OFFSET 0x0050
199 #define NFP_NET_CFG_RX_OFFSET_DYNAMIC 0
200
201
202
203
204
205
206 #define NFP_NET_CFG_RSS_CAP 0x0054
207 #define NFP_NET_CFG_RSS_CAP_HFUNC 0xff000000
208
209
210
211
212
213 #define NFP_NET_CFG_TLV_BASE 0x0058
214
215
216
217
218
219
220 #define NFP_NET_CFG_VXLAN_PORT 0x0060
221 #define NFP_NET_CFG_VXLAN_SZ 0x0008
222
223
224
225
226
227
228
229
230
231
232
233
234
235 #define NFP_NET_CFG_BPF_ABI 0x0080
236 #define NFP_NET_CFG_BPF_CAP 0x0081
237 #define NFP_NET_BPF_CAP_RELO (1 << 0)
238 #define NFP_NET_CFG_BPF_MAX_LEN 0x0082
239 #define NFP_NET_CFG_BPF_START 0x0084
240 #define NFP_NET_CFG_BPF_DONE 0x0086
241 #define NFP_NET_CFG_BPF_STACK_SZ 0x0088
242 #define NFP_NET_CFG_BPF_INL_MTU 0x0089
243 #define NFP_NET_CFG_BPF_SIZE 0x008e
244 #define NFP_NET_CFG_BPF_ADDR 0x0090
245 #define NFP_NET_CFG_BPF_CFG_8CTX (1 << 0)
246 #define NFP_NET_CFG_BPF_CFG_MASK 7ULL
247 #define NFP_NET_CFG_BPF_ADDR_MASK (~NFP_NET_CFG_BPF_CFG_MASK)
248
249
250
251
252 #define NFP_NET_CFG_RESERVED 0x0098
253 #define NFP_NET_CFG_RESERVED_SZ 0x0028
254
255
256
257
258
259
260
261
262 #define NFP_NET_CFG_RSS_BASE 0x0100
263 #define NFP_NET_CFG_RSS_CTRL NFP_NET_CFG_RSS_BASE
264 #define NFP_NET_CFG_RSS_MASK (0x7f)
265 #define NFP_NET_CFG_RSS_MASK_of(_x) ((_x) & 0x7f)
266 #define NFP_NET_CFG_RSS_IPV4 (1 << 8)
267 #define NFP_NET_CFG_RSS_IPV6 (1 << 9)
268 #define NFP_NET_CFG_RSS_IPV4_TCP (1 << 10)
269 #define NFP_NET_CFG_RSS_IPV4_UDP (1 << 11)
270 #define NFP_NET_CFG_RSS_IPV6_TCP (1 << 12)
271 #define NFP_NET_CFG_RSS_IPV6_UDP (1 << 13)
272 #define NFP_NET_CFG_RSS_HFUNC 0xff000000
273 #define NFP_NET_CFG_RSS_TOEPLITZ (1 << 24)
274 #define NFP_NET_CFG_RSS_XOR (1 << 25)
275 #define NFP_NET_CFG_RSS_CRC32 (1 << 26)
276 #define NFP_NET_CFG_RSS_HFUNCS 3
277 #define NFP_NET_CFG_RSS_KEY (NFP_NET_CFG_RSS_BASE + 0x4)
278 #define NFP_NET_CFG_RSS_KEY_SZ 0x28
279 #define NFP_NET_CFG_RSS_ITBL (NFP_NET_CFG_RSS_BASE + 0x4 + \
280 NFP_NET_CFG_RSS_KEY_SZ)
281 #define NFP_NET_CFG_RSS_ITBL_SZ 0x80
282
283
284
285
286
287
288
289
290
291
292
293 #define NFP_NET_CFG_TXR_BASE 0x0200
294 #define NFP_NET_CFG_TXR_ADDR(_x) (NFP_NET_CFG_TXR_BASE + ((_x) * 0x8))
295 #define NFP_NET_CFG_TXR_WB_ADDR(_x) (NFP_NET_CFG_TXR_BASE + 0x200 + \
296 ((_x) * 0x8))
297 #define NFP_NET_CFG_TXR_SZ(_x) (NFP_NET_CFG_TXR_BASE + 0x400 + (_x))
298 #define NFP_NET_CFG_TXR_VEC(_x) (NFP_NET_CFG_TXR_BASE + 0x440 + (_x))
299 #define NFP_NET_CFG_TXR_PRIO(_x) (NFP_NET_CFG_TXR_BASE + 0x480 + (_x))
300 #define NFP_NET_CFG_TXR_IRQ_MOD(_x) (NFP_NET_CFG_TXR_BASE + 0x500 + \
301 ((_x) * 0x4))
302
303
304
305
306
307
308
309
310
311
312 #define NFP_NET_CFG_RXR_BASE 0x0800
313 #define NFP_NET_CFG_RXR_ADDR(_x) (NFP_NET_CFG_RXR_BASE + ((_x) * 0x8))
314 #define NFP_NET_CFG_RXR_SZ(_x) (NFP_NET_CFG_RXR_BASE + 0x200 + (_x))
315 #define NFP_NET_CFG_RXR_VEC(_x) (NFP_NET_CFG_RXR_BASE + 0x240 + (_x))
316 #define NFP_NET_CFG_RXR_PRIO(_x) (NFP_NET_CFG_RXR_BASE + 0x280 + (_x))
317 #define NFP_NET_CFG_RXR_IRQ_MOD(_x) (NFP_NET_CFG_RXR_BASE + 0x300 + \
318 ((_x) * 0x4))
319
320
321
322
323
324
325
326
327
328
329
330 #define NFP_NET_CFG_ICR_BASE 0x0c00
331 #define NFP_NET_CFG_ICR(_x) (NFP_NET_CFG_ICR_BASE + (_x))
332 #define NFP_NET_CFG_ICR_UNMASKED 0x0
333 #define NFP_NET_CFG_ICR_RXTX 0x1
334 #define NFP_NET_CFG_ICR_LSC 0x2
335
336
337
338
339
340 #define NFP_NET_CFG_STATS_BASE 0x0d00
341 #define NFP_NET_CFG_STATS_RX_DISCARDS (NFP_NET_CFG_STATS_BASE + 0x00)
342 #define NFP_NET_CFG_STATS_RX_ERRORS (NFP_NET_CFG_STATS_BASE + 0x08)
343 #define NFP_NET_CFG_STATS_RX_OCTETS (NFP_NET_CFG_STATS_BASE + 0x10)
344 #define NFP_NET_CFG_STATS_RX_UC_OCTETS (NFP_NET_CFG_STATS_BASE + 0x18)
345 #define NFP_NET_CFG_STATS_RX_MC_OCTETS (NFP_NET_CFG_STATS_BASE + 0x20)
346 #define NFP_NET_CFG_STATS_RX_BC_OCTETS (NFP_NET_CFG_STATS_BASE + 0x28)
347 #define NFP_NET_CFG_STATS_RX_FRAMES (NFP_NET_CFG_STATS_BASE + 0x30)
348 #define NFP_NET_CFG_STATS_RX_MC_FRAMES (NFP_NET_CFG_STATS_BASE + 0x38)
349 #define NFP_NET_CFG_STATS_RX_BC_FRAMES (NFP_NET_CFG_STATS_BASE + 0x40)
350
351 #define NFP_NET_CFG_STATS_TX_DISCARDS (NFP_NET_CFG_STATS_BASE + 0x48)
352 #define NFP_NET_CFG_STATS_TX_ERRORS (NFP_NET_CFG_STATS_BASE + 0x50)
353 #define NFP_NET_CFG_STATS_TX_OCTETS (NFP_NET_CFG_STATS_BASE + 0x58)
354 #define NFP_NET_CFG_STATS_TX_UC_OCTETS (NFP_NET_CFG_STATS_BASE + 0x60)
355 #define NFP_NET_CFG_STATS_TX_MC_OCTETS (NFP_NET_CFG_STATS_BASE + 0x68)
356 #define NFP_NET_CFG_STATS_TX_BC_OCTETS (NFP_NET_CFG_STATS_BASE + 0x70)
357 #define NFP_NET_CFG_STATS_TX_FRAMES (NFP_NET_CFG_STATS_BASE + 0x78)
358 #define NFP_NET_CFG_STATS_TX_MC_FRAMES (NFP_NET_CFG_STATS_BASE + 0x80)
359 #define NFP_NET_CFG_STATS_TX_BC_FRAMES (NFP_NET_CFG_STATS_BASE + 0x88)
360
361 #define NFP_NET_CFG_STATS_APP0_FRAMES (NFP_NET_CFG_STATS_BASE + 0x90)
362 #define NFP_NET_CFG_STATS_APP0_BYTES (NFP_NET_CFG_STATS_BASE + 0x98)
363 #define NFP_NET_CFG_STATS_APP1_FRAMES (NFP_NET_CFG_STATS_BASE + 0xa0)
364 #define NFP_NET_CFG_STATS_APP1_BYTES (NFP_NET_CFG_STATS_BASE + 0xa8)
365 #define NFP_NET_CFG_STATS_APP2_FRAMES (NFP_NET_CFG_STATS_BASE + 0xb0)
366 #define NFP_NET_CFG_STATS_APP2_BYTES (NFP_NET_CFG_STATS_BASE + 0xb8)
367 #define NFP_NET_CFG_STATS_APP3_FRAMES (NFP_NET_CFG_STATS_BASE + 0xc0)
368 #define NFP_NET_CFG_STATS_APP3_BYTES (NFP_NET_CFG_STATS_BASE + 0xc8)
369
370
371
372
373
374
375
376 #define NFP_NET_CFG_TXR_STATS_BASE 0x1000
377 #define NFP_NET_CFG_TXR_STATS(_x) (NFP_NET_CFG_TXR_STATS_BASE + \
378 ((_x) * 0x10))
379 #define NFP_NET_CFG_RXR_STATS_BASE 0x1400
380 #define NFP_NET_CFG_RXR_STATS(_x) (NFP_NET_CFG_RXR_STATS_BASE + \
381 ((_x) * 0x10))
382
383
384
385
386
387
388 #define NFP_NET_CFG_MBOX_BASE 0x1800
389 #define NFP_NET_CFG_MBOX_VAL_MAX_SZ 0x1F8
390
391 #define NFP_NET_CFG_MBOX_SIMPLE_CMD 0x0
392 #define NFP_NET_CFG_MBOX_SIMPLE_RET 0x4
393 #define NFP_NET_CFG_MBOX_SIMPLE_VAL 0x8
394
395 #define NFP_NET_CFG_MBOX_CMD_CTAG_FILTER_ADD 1
396 #define NFP_NET_CFG_MBOX_CMD_CTAG_FILTER_KILL 2
397
398 #define NFP_NET_CFG_MBOX_CMD_PCI_DSCP_PRIOMAP_SET 5
399 #define NFP_NET_CFG_MBOX_CMD_TLV_CMSG 6
400
401
402
403
404
405
406
407
408 #define NFP_NET_CFG_VLAN_FILTER NFP_NET_CFG_MBOX_SIMPLE_VAL
409 #define NFP_NET_CFG_VLAN_FILTER_VID NFP_NET_CFG_VLAN_FILTER
410 #define NFP_NET_CFG_VLAN_FILTER_PROTO (NFP_NET_CFG_VLAN_FILTER + 2)
411 #define NFP_NET_CFG_VLAN_FILTER_SZ 0x0004
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430 #define NFP_NET_CFG_TLV_TYPE 0x00
431 #define NFP_NET_CFG_TLV_TYPE_REQUIRED 0x8000
432 #define NFP_NET_CFG_TLV_LENGTH 0x02
433 #define NFP_NET_CFG_TLV_LENGTH_INC 4
434 #define NFP_NET_CFG_TLV_VALUE 0x04
435
436 #define NFP_NET_CFG_TLV_HEADER_REQUIRED 0x80000000
437 #define NFP_NET_CFG_TLV_HEADER_TYPE 0x7fff0000
438 #define NFP_NET_CFG_TLV_HEADER_LENGTH 0x0000ffff
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483 #define NFP_NET_CFG_TLV_TYPE_UNKNOWN 0
484 #define NFP_NET_CFG_TLV_TYPE_RESERVED 1
485 #define NFP_NET_CFG_TLV_TYPE_END 2
486 #define NFP_NET_CFG_TLV_TYPE_ME_FREQ 3
487 #define NFP_NET_CFG_TLV_TYPE_MBOX 4
488 #define NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL0 5
489 #define NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL1 6
490 #define NFP_NET_CFG_TLV_TYPE_REPR_CAP 7
491 #define NFP_NET_CFG_TLV_TYPE_MBOX_CMSG_TYPES 10
492 #define NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS 11
493
494 struct device;
495
496
497
498
499
500
501
502
503
504
505
506 struct nfp_net_tlv_caps {
507 u32 me_freq_mhz;
508 unsigned int mbox_off;
509 unsigned int mbox_len;
510 u32 repr_cap;
511 u32 mbox_cmsg_types;
512 u32 crypto_ops;
513 unsigned int crypto_enable_off;
514 };
515
516 int nfp_net_tlv_caps_parse(struct device *dev, u8 __iomem *ctrl_mem,
517 struct nfp_net_tlv_caps *caps);
518 #endif