net/octeontx2: add link stats operations
[dpdk.git] / doc / guides / nics / features.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2017 Intel Corporation.
3
4 Features Overview
5 =================
6
7 This section explains the supported features that are listed in the
8 :doc:`overview`.
9
10 As a guide to implementers it also shows the structs where the features are
11 defined and the APIs that can be use to get/set the values.
12
13 Following tags used for feature details, these are from driver point of view:
14
15 ``[uses]``       : Driver uses some kind of input from the application.
16
17 ``[implements]`` : Driver implements a functionality.
18
19 ``[provides]``   : Driver provides some kind of data to the application. It is possible
20 to provide data by implementing some function, but "provides" is used
21 for cases where provided data can't be represented simply by a function.
22
23 ``[related]``    : Related API with that feature.
24
25
26 .. _nic_features_speed_capabilities:
27
28 Speed capabilities
29 ------------------
30
31 Supports getting the speed capabilities that the current device is capable of.
32
33 * **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
34 * **[related]  API**: ``rte_eth_dev_info_get()``.
35
36
37 .. _nic_features_link_status:
38
39 Link status
40 -----------
41
42 Supports getting the link speed, duplex mode and link state (up/down).
43
44 * **[implements] eth_dev_ops**: ``link_update``.
45 * **[implements] rte_eth_dev_data**: ``dev_link``.
46 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
47
48
49 .. _nic_features_link_status_event:
50
51 Link status event
52 -----------------
53
54 Supports Link Status Change interrupts.
55
56 * **[uses]       user config**: ``dev_conf.intr_conf.lsc``.
57 * **[uses]       rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
58 * **[uses]       rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
59 * **[implements] rte_eth_dev_data**: ``dev_link``.
60 * **[provides]   rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
61 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
62
63
64 .. _nic_features_removal_event:
65
66 Removal event
67 -------------
68
69 Supports device removal interrupts.
70
71 * **[uses]     user config**: ``dev_conf.intr_conf.rmv``.
72 * **[uses]     rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
73 * **[uses]     rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
74 * **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
75
76
77 .. _nic_features_queue_status_event:
78
79 Queue status event
80 ------------------
81
82 Supports queue enable/disable events.
83
84 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87 .. _nic_features_rx_interrupt:
88
89 Rx interrupt
90 ------------
91
92 Supports Rx interrupts.
93
94 * **[uses]       user config**: ``dev_conf.intr_conf.rxq``.
95 * **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
96 * **[related]    API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
97
98
99 .. _nic_features_lock-free_tx_queue:
100
101 Lock-free Tx queue
102 ------------------
103
104 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105 invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
106
107 * **[uses]    rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MT_LOCKFREE``.
108 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
109 * **[related]  API**: ``rte_eth_tx_burst()``.
110
111
112 .. _nic_features_fast_mbuf_free:
113
114 Fast mbuf free
115 --------------
116
117 Supports optimization for fast release of mbufs following successful Tx.
118 Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
119
120 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
121 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
122
123
124 .. _nic_features_free_tx_mbuf_on_demand:
125
126 Free Tx mbuf on demand
127 ----------------------
128
129 Supports freeing consumed buffers on a Tx ring.
130
131 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
132 * **[related]    API**: ``rte_eth_tx_done_cleanup()``.
133
134
135 .. _nic_features_queue_start_stop:
136
137 Queue start/stop
138 ----------------
139
140 Supports starting/stopping a specific Rx/Tx queue of a port.
141
142 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
143   ``tx_queue_stop``.
144 * **[related]    API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
145   ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
146
147
148 .. _nic_features_mtu_update:
149
150 MTU update
151 ----------
152
153 Supports updating port MTU.
154
155 * **[implements] eth_dev_ops**: ``mtu_set``.
156 * **[implements] rte_eth_dev_data**: ``mtu``.
157 * **[provides]   rte_eth_dev_info**: ``max_rx_pktlen``.
158 * **[related]    API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
159
160
161 .. _nic_features_jumbo_frame:
162
163 Jumbo frame
164 -----------
165
166 Supports Rx jumbo frames.
167
168 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
169   ``dev_conf.rxmode.max_rx_pkt_len``.
170 * **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
171 * **[related] API**: ``rte_eth_dev_set_mtu()``.
172
173
174 .. _nic_features_scattered_rx:
175
176 Scattered Rx
177 ------------
178
179 Supports receiving segmented mbufs.
180
181 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
182 * **[implements] datapath**: ``Scattered Rx function``.
183 * **[implements] rte_eth_dev_data**: ``scattered_rx``.
184 * **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
185 * **[related]    eth_dev_ops**: ``rx_pkt_burst``.
186
187
188 .. _nic_features_lro:
189
190 LRO
191 ---
192
193 Supports Large Receive Offload.
194
195 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
196 * **[implements] datapath**: ``LRO functionality``.
197 * **[implements] rte_eth_dev_data**: ``lro``.
198 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
199 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
200
201
202 .. _nic_features_tso:
203
204 TSO
205 ---
206
207 Supports TCP Segmentation Offloading.
208
209 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
210 * **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
211 * **[uses]       mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
212 * **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
213 * **[implements] datapath**: ``TSO functionality``.
214 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
215
216
217 .. _nic_features_promiscuous_mode:
218
219 Promiscuous mode
220 ----------------
221
222 Supports enabling/disabling promiscuous mode for a port.
223
224 * **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
225 * **[implements] rte_eth_dev_data**: ``promiscuous``.
226 * **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
227   ``rte_eth_promiscuous_get()``.
228
229
230 .. _nic_features_allmulticast_mode:
231
232 Allmulticast mode
233 -----------------
234
235 Supports enabling/disabling receiving multicast frames.
236
237 * **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
238 * **[implements] rte_eth_dev_data**: ``all_multicast``.
239 * **[related]    API**: ``rte_eth_allmulticast_enable()``,
240   ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
241
242
243 .. _nic_features_unicast_mac_filter:
244
245 Unicast MAC filter
246 ------------------
247
248 Supports adding MAC addresses to enable whitelist filtering to accept packets.
249
250 * **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
251 * **[implements] rte_eth_dev_data**: ``mac_addrs``.
252 * **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
253   ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
254   ``rte_eth_macaddr_get()``.
255
256
257 .. _nic_features_multicast_mac_filter:
258
259 Multicast MAC filter
260 --------------------
261
262 Supports setting multicast addresses to filter.
263
264 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
265 * **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
266
267
268 .. _nic_features_rss_hash:
269
270 RSS hash
271 --------
272
273 Supports RSS hashing on RX.
274
275 * **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
276 * **[uses]     user config**: ``dev_conf.rx_adv_conf.rss_conf``.
277 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
278 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
279
280
281 .. _nic_features_inner_rss:
282
283 Inner RSS
284 ---------
285
286 Supports RX RSS hashing on Inner headers.
287
288 * **[uses]    rte_flow_action_rss**: ``level``.
289 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
290
291
292 .. _nic_features_rss_key_update:
293
294 RSS key update
295 --------------
296
297 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
298 Receive Side Scaling (RSS) hash key.
299
300 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
301 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
302 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
303   ``rte_eth_dev_rss_hash_conf_get()``.
304
305
306 .. _nic_features_rss_reta_update:
307
308 RSS reta update
309 ---------------
310
311 Supports updating Redirection Table of the Receive Side Scaling (RSS).
312
313 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
314 * **[provides]   rte_eth_dev_info**: ``reta_size``.
315 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
316
317
318 .. _nic_features_vmdq:
319
320 VMDq
321 ----
322
323 Supports Virtual Machine Device Queues (VMDq).
324
325 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
326 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
327 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
328 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
329 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
330
331
332 .. _nic_features_sriov:
333
334 SR-IOV
335 ------
336
337 Driver supports creating Virtual Functions.
338
339 * **[implements] rte_eth_dev_data**: ``sriov``.
340
341 .. _nic_features_dcb:
342
343 DCB
344 ---
345
346 Supports Data Center Bridging (DCB).
347
348 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
349 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
350 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
351 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
352 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
353 * **[implements] eth_dev_ops**: ``get_dcb_info``.
354 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
355
356
357 .. _nic_features_vlan_filter:
358
359 VLAN filter
360 -----------
361
362 Supports filtering of a VLAN Tag identifier.
363
364 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
365 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
366 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
367
368
369 .. _nic_features_ethertype_filter:
370
371 Ethertype filter
372 ----------------
373
374 Supports filtering on Ethernet type.
375
376 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
377 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
378
379 .. _nic_features_ntuple_filter:
380
381 N-tuple filter
382 --------------
383
384 Supports filtering on N-tuple values.
385
386 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
387 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
388
389
390 .. _nic_features_syn_filter:
391
392 SYN filter
393 ----------
394
395 Supports TCP syn filtering.
396
397 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
398 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
399
400
401 .. _nic_features_tunnel_filter:
402
403 Tunnel filter
404 -------------
405
406 Supports tunnel filtering.
407
408 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
409 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
410
411
412 .. _nic_features_flexible_filter:
413
414 Flexible filter
415 ---------------
416
417 Supports a flexible (non-tuple or Ethertype) filter.
418
419 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
420 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
421
422
423 .. _nic_features_hash_filter:
424
425 Hash filter
426 -----------
427
428 Supports Hash filtering.
429
430 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
431 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
432
433
434 .. _nic_features_flow_director:
435
436 Flow director
437 -------------
438
439 Supports Flow Director style filtering to queues.
440
441 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
442 * **[provides]   mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
443   ``PKT_RX_FDIR_FLX``.
444 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
445
446
447 .. _nic_features_flow_control:
448
449 Flow control
450 ------------
451
452 Supports configuring link flow control.
453
454 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
455   ``priority_flow_ctrl_set``.
456 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
457   ``rte_eth_dev_priority_flow_ctrl_set()``.
458
459
460 .. _nic_features_flow_api:
461
462 Flow API
463 --------
464
465 Supports the DPDK Flow API for generic filtering.
466
467 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
468 * **[implements] rte_flow_ops**: ``All``.
469
470
471 .. _nic_features_rate_limitation:
472
473 Rate limitation
474 ---------------
475
476 Supports Tx rate limitation for a queue.
477
478 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
479 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
480
481
482 .. _nic_features_traffic_mirroring:
483
484 Traffic mirroring
485 -----------------
486
487 Supports adding traffic mirroring rules.
488
489 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
490 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
491
492
493 .. _nic_features_inline_crypto_doc:
494
495 Inline crypto
496 -------------
497
498 Supports inline crypto processing (e.g. inline IPsec). See Security library and PMD documentation for more details.
499
500 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
501 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
502 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
503   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
504 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
505   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
506 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
507   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
508
509
510 .. _nic_features_crc_offload:
511
512 CRC offload
513 -----------
514
515 Supports CRC stripping by hardware.
516 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
517
518 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
519
520
521 .. _nic_features_vlan_offload:
522
523 VLAN offload
524 ------------
525
526 Supports VLAN offload to hardware.
527
528 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
529 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
530 * **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
531 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
532 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
533 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
534   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
535 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
536   ``rte_eth_dev_get_vlan_offload()``.
537
538
539 .. _nic_features_qinq_offload:
540
541 QinQ offload
542 ------------
543
544 Supports QinQ (queue in queue) offload.
545
546 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
547 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
548 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
549 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
550   ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
551   ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
552 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
553   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
554
555
556 .. _nic_features_l3_checksum_offload:
557
558 L3 checksum offload
559 -------------------
560
561 Supports L3 checksum offload.
562
563 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
564 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
565 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
566   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
567 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
568 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
569   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
570   ``PKT_RX_IP_CKSUM_NONE``.
571 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
572   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
573
574
575 .. _nic_features_l4_checksum_offload:
576
577 L4 checksum offload
578 -------------------
579
580 Supports L4 checksum offload.
581
582 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
583 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
584 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
585   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
586   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
587 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
588 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
589   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
590   ``PKT_RX_L4_CKSUM_NONE``.
591 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``,
592   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
593
594 .. _nic_features_hw_timestamp:
595
596 Timestamp offload
597 -----------------
598
599 Supports Timestamp.
600
601 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
602 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
603 * **[provides] mbuf**: ``mbuf.timestamp``.
604 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
605 * **[related] eth_dev_ops**: ``read_clock``.
606
607 .. _nic_features_macsec_offload:
608
609 MACsec offload
610 --------------
611
612 Supports MACsec.
613
614 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
615 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
616 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
617 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
618   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
619
620
621 .. _nic_features_inner_l3_checksum:
622
623 Inner L3 checksum
624 -----------------
625
626 Supports inner packet L3 checksum.
627
628 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
629 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
630 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
631   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
632   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
633   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
634 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
635 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
636 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
637   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
638
639
640 .. _nic_features_inner_l4_checksum:
641
642 Inner L4 checksum
643 -----------------
644
645 Supports inner packet L4 checksum.
646
647 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
648 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
649   ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
650 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
651 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
652   ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
653 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
654 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
655   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
656
657
658 .. _nic_features_packet_type_parsing:
659
660 Packet type parsing
661 -------------------
662
663 Supports packet type parsing and returns a list of supported types.
664
665 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
666 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
667
668
669 .. _nic_features_timesync:
670
671 Timesync
672 --------
673
674 Supports IEEE1588/802.1AS timestamping.
675
676 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
677   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
678   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
679 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
680   ``rte_eth_timesync_read_rx_timestamp()``,
681   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
682   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
683
684
685 .. _nic_features_rx_descriptor_status:
686
687 Rx descriptor status
688 --------------------
689
690 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
691 used, status can be "Available", "Done" or "Unavailable". When
692 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
693 not set".
694
695 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
696 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
697 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
698 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
699
700
701 .. _nic_features_tx_descriptor_status:
702
703 Tx descriptor status
704 --------------------
705
706 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
707 or "Unavailable."
708
709 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
710 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
711
712
713 .. _nic_features_basic_stats:
714
715 Basic stats
716 -----------
717
718 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
719 imissed, ierrors, oerrors, rx_nombuf.
720
721 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
722
723 These apply to all drivers.
724
725 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
726 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
727
728
729 .. _nic_features_extended_stats:
730
731 Extended stats
732 --------------
733
734 Supports Extended Statistics, changes from driver to driver.
735
736 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
737 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
738 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
739   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
740   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
741
742
743 .. _nic_features_stats_per_queue:
744
745 Stats per queue
746 ---------------
747
748 Supports configuring per-queue stat counter mapping.
749
750 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
751 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
752   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
753
754
755 .. _nic_features_fw_version:
756
757 FW version
758 ----------
759
760 Supports getting device hardware firmware information.
761
762 * **[implements] eth_dev_ops**: ``fw_version_get``.
763 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
764
765
766 .. _nic_features_eeprom_dump:
767
768 EEPROM dump
769 -----------
770
771 Supports getting/setting device eeprom data.
772
773 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
774 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
775   ``rte_eth_dev_set_eeprom()``.
776
777
778 .. _nic_features_module_eeprom_dump:
779
780 Module EEPROM dump
781 ------------------
782
783 Supports getting information and data of plugin module eeprom.
784
785 * **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
786 * **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
787
788
789 .. _nic_features_register_dump:
790
791 Registers dump
792 --------------
793
794 Supports retrieving device registers and registering attributes (number of
795 registers and register size).
796
797 * **[implements] eth_dev_ops**: ``get_reg``.
798 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
799
800
801 .. _nic_features_led:
802
803 LED
804 ---
805
806 Supports turning on/off a software controllable LED on a device.
807
808 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
809 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
810
811
812 .. _nic_features_multiprocess_aware:
813
814 Multiprocess aware
815 ------------------
816
817 Driver can be used for primary-secondary process model.
818
819
820 .. _nic_features_bsd_nic_uio:
821
822 BSD nic_uio
823 -----------
824
825 BSD ``nic_uio`` module supported.
826
827
828 .. _nic_features_linux_uio:
829
830 Linux UIO
831 ---------
832
833 Works with ``igb_uio`` kernel module.
834
835 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
836
837 .. _nic_features_linux_vfio:
838
839 Linux VFIO
840 ----------
841
842 Works with ``vfio-pci`` kernel module.
843
844 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
845
846 .. _nic_features_other_kdrv:
847
848 Other kdrv
849 ----------
850
851 Kernel module other than above ones supported.
852
853
854 .. _nic_features_armv7:
855
856 ARMv7
857 -----
858
859 Support armv7 architecture.
860
861 Use ``defconfig_arm-armv7a-*-*``.
862
863
864 .. _nic_features_armv8:
865
866 ARMv8
867 -----
868
869 Support armv8a (64bit) architecture.
870
871 Use ``defconfig_arm64-armv8a-*-*``
872
873
874 .. _nic_features_power8:
875
876 Power8
877 ------
878
879 Support PowerPC architecture.
880
881 Use ``defconfig_ppc_64-power8-*-*``
882
883 .. _nic_features_x86-32:
884
885 x86-32
886 ------
887
888 Support 32bits x86 architecture.
889
890 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
891
892
893 .. _nic_features_x86-64:
894
895 x86-64
896 ------
897
898 Support 64bits x86 architecture.
899
900 Use ``defconfig_x86_64-native-*-*``.
901
902
903 .. _nic_features_usage_doc:
904
905 Usage doc
906 ---------
907
908 Documentation describes usage.
909
910 See ``doc/guides/nics/*.rst``
911
912
913 .. _nic_features_design_doc:
914
915 Design doc
916 ----------
917
918 Documentation describes design.
919
920 See ``doc/guides/nics/*.rst``.
921
922
923 .. _nic_features_perf_doc:
924
925 Perf doc
926 --------
927
928 Documentation describes performance values.
929
930 See ``dpdk.org/doc/perf/*``.
931
932 .. _nic_features_runtime_rx_queue_setup:
933
934 Runtime Rx queue setup
935 ----------------------
936
937 Supports Rx queue setup after device started.
938
939 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
940 * **[related]  API**: ``rte_eth_dev_info_get()``.
941
942 .. _nic_features_runtime_tx_queue_setup:
943
944 Runtime Tx queue setup
945 ----------------------
946
947 Supports Tx queue setup after device started.
948
949 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
950 * **[related]  API**: ``rte_eth_dev_info_get()``.
951
952 .. _nic_features_other:
953
954 Other dev ops not represented by a Feature
955 ------------------------------------------
956
957 * ``rxq_info_get``
958 * ``txq_info_get``
959 * ``vlan_tpid_set``
960 * ``vlan_strip_queue_set``
961 * ``vlan_pvid_set``
962 * ``rx_queue_count``
963 * ``l2_tunnel_offload_set``
964 * ``uc_hash_table_set``
965 * ``uc_all_hash_table_set``
966 * ``udp_tunnel_port_add``
967 * ``udp_tunnel_port_del``
968 * ``l2_tunnel_eth_type_conf``
969 * ``l2_tunnel_offload_set``
970 * ``tx_pkt_prepare``