xref: /dpdk/doc/guides/nics/features.rst (revision 089e5ed727a15da2729cfee9b63533dd120bd04c)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2017 Intel Corporation.
3
4Features Overview
5=================
6
7This section explains the supported features that are listed in the
8:doc:`overview`.
9
10As a guide to implementers it also shows the structs where the features are
11defined and the APIs that can be use to get/set the values.
12
13Following 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
20to provide data by implementing some function, but "provides" is used
21for 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
28Speed capabilities
29------------------
30
31Supports 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
39Link status
40-----------
41
42Supports 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
51Link status event
52-----------------
53
54Supports 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
66Removal event
67-------------
68
69Supports 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
79Queue status event
80------------------
81
82Supports queue enable/disable events.
83
84* **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87.. _nic_features_rx_interrupt:
88
89Rx interrupt
90------------
91
92Supports 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
101Lock-free Tx queue
102------------------
103
104If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105invoke 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
114Fast mbuf free
115--------------
116
117Supports optimization for fast release of mbufs following successful Tx.
118Requires 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
126Free Tx mbuf on demand
127----------------------
128
129Supports 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
137Queue start/stop
138----------------
139
140Supports 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
150MTU update
151----------
152
153Supports 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
163Jumbo frame
164-----------
165
166Supports 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
176Scattered Rx
177------------
178
179Supports 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
190LRO
191---
192
193Supports 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
204TSO
205---
206
207Supports 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
219Promiscuous mode
220----------------
221
222Supports 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
232Allmulticast mode
233-----------------
234
235Supports 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
245Unicast MAC filter
246------------------
247
248Supports 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
259Multicast MAC filter
260--------------------
261
262Supports 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
270RSS hash
271--------
272
273Supports 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
283Inner RSS
284---------
285
286Supports 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
294RSS key update
295--------------
296
297Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
298Receive 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
308RSS reta update
309---------------
310
311Supports 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
320VMDq
321----
322
323Supports 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
334SR-IOV
335------
336
337Driver supports creating Virtual Functions.
338
339* **[implements] rte_eth_dev_data**: ``sriov``.
340
341.. _nic_features_dcb:
342
343DCB
344---
345
346Supports 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
359VLAN filter
360-----------
361
362Supports 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_flow_control:
370
371Flow control
372------------
373
374Supports configuring link flow control.
375
376* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
377  ``priority_flow_ctrl_set``.
378* **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
379  ``rte_eth_dev_priority_flow_ctrl_set()``.
380
381
382.. _nic_features_flow_api:
383
384Flow API
385--------
386
387Supports the DPDK Flow API for generic filtering.
388
389* **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
390* **[implements] rte_flow_ops**: ``All``.
391
392
393.. _nic_features_rate_limitation:
394
395Rate limitation
396---------------
397
398Supports Tx rate limitation for a queue.
399
400* **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
401* **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
402
403
404.. _nic_features_traffic_mirroring:
405
406Traffic mirroring
407-----------------
408
409Supports adding traffic mirroring rules.
410
411* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
412* **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
413
414
415.. _nic_features_inline_crypto_doc:
416
417Inline crypto
418-------------
419
420Supports inline crypto processing (e.g. inline IPsec). See Security library and PMD documentation for more details.
421
422* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
423* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
424* **[implements] rte_security_ops**: ``session_create``, ``session_update``,
425  ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
426* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
427  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
428* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
429  ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
430
431
432.. _nic_features_crc_offload:
433
434CRC offload
435-----------
436
437Supports CRC stripping by hardware.
438A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
439
440* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
441
442
443.. _nic_features_vlan_offload:
444
445VLAN offload
446------------
447
448Supports VLAN offload to hardware.
449
450* **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
451* **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
452* **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
453* **[implements] eth_dev_ops**: ``vlan_offload_set``.
454* **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
455* **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
456  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
457* **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
458  ``rte_eth_dev_get_vlan_offload()``.
459
460
461.. _nic_features_qinq_offload:
462
463QinQ offload
464------------
465
466Supports QinQ (queue in queue) offload.
467
468* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
469* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
470* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
471* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
472  ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
473  ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
474* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
475  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
476
477
478.. _nic_features_l3_checksum_offload:
479
480L3 checksum offload
481-------------------
482
483Supports L3 checksum offload.
484
485* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
486* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
487* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
488  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
489* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
490* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
491  ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
492  ``PKT_RX_IP_CKSUM_NONE``.
493* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
494  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
495
496
497.. _nic_features_l4_checksum_offload:
498
499L4 checksum offload
500-------------------
501
502Supports L4 checksum offload.
503
504* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
505* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
506* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
507  ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
508  ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
509* **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
510* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
511  ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
512  ``PKT_RX_L4_CKSUM_NONE``.
513* **[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``,
514  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
515
516.. _nic_features_hw_timestamp:
517
518Timestamp offload
519-----------------
520
521Supports Timestamp.
522
523* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
524* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
525* **[provides] mbuf**: ``mbuf.timestamp``.
526* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
527* **[related] eth_dev_ops**: ``read_clock``.
528
529.. _nic_features_macsec_offload:
530
531MACsec offload
532--------------
533
534Supports MACsec.
535
536* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
537* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
538* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
539* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
540  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
541
542
543.. _nic_features_inner_l3_checksum:
544
545Inner L3 checksum
546-----------------
547
548Supports inner packet L3 checksum.
549
550* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
551* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
552* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
553  ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
554  ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
555  ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
556* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
557* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
558* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
559  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
560
561
562.. _nic_features_inner_l4_checksum:
563
564Inner L4 checksum
565-----------------
566
567Supports inner packet L4 checksum.
568
569* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
570* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
571  ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
572* **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
573* **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
574  ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
575* **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
576* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
577  ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
578
579
580.. _nic_features_packet_type_parsing:
581
582Packet type parsing
583-------------------
584
585Supports packet type parsing and returns a list of supported types.
586
587* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
588* **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
589
590
591.. _nic_features_timesync:
592
593Timesync
594--------
595
596Supports IEEE1588/802.1AS timestamping.
597
598* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
599  ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
600  ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
601* **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
602  ``rte_eth_timesync_read_rx_timestamp()``,
603  ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
604  ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
605
606
607.. _nic_features_rx_descriptor_status:
608
609Rx descriptor status
610--------------------
611
612Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
613used, status can be "Available", "Done" or "Unavailable". When
614``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
615not set".
616
617* **[implements] eth_dev_ops**: ``rx_descriptor_status``.
618* **[related]    API**: ``rte_eth_rx_descriptor_status()``.
619* **[implements] eth_dev_ops**: ``rx_descriptor_done``.
620* **[related]    API**: ``rte_eth_rx_descriptor_done()``.
621
622
623.. _nic_features_tx_descriptor_status:
624
625Tx descriptor status
626--------------------
627
628Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
629or "Unavailable."
630
631* **[implements] eth_dev_ops**: ``tx_descriptor_status``.
632* **[related]    API**: ``rte_eth_tx_descriptor_status()``.
633
634
635.. _nic_features_basic_stats:
636
637Basic stats
638-----------
639
640Support basic statistics such as: ipackets, opackets, ibytes, obytes,
641imissed, ierrors, oerrors, rx_nombuf.
642
643And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
644
645These apply to all drivers.
646
647* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
648* **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
649
650
651.. _nic_features_extended_stats:
652
653Extended stats
654--------------
655
656Supports Extended Statistics, changes from driver to driver.
657
658* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
659* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
660* **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
661  ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
662  ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
663
664
665.. _nic_features_stats_per_queue:
666
667Stats per queue
668---------------
669
670Supports configuring per-queue stat counter mapping.
671
672* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
673* **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
674  ``rte_eth_dev_set_tx_queue_stats_mapping()``.
675
676
677.. _nic_features_fw_version:
678
679FW version
680----------
681
682Supports getting device hardware firmware information.
683
684* **[implements] eth_dev_ops**: ``fw_version_get``.
685* **[related]    API**: ``rte_eth_dev_fw_version_get()``.
686
687
688.. _nic_features_eeprom_dump:
689
690EEPROM dump
691-----------
692
693Supports getting/setting device eeprom data.
694
695* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
696* **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
697  ``rte_eth_dev_set_eeprom()``.
698
699
700.. _nic_features_module_eeprom_dump:
701
702Module EEPROM dump
703------------------
704
705Supports getting information and data of plugin module eeprom.
706
707* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
708* **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
709
710
711.. _nic_features_register_dump:
712
713Registers dump
714--------------
715
716Supports retrieving device registers and registering attributes (number of
717registers and register size).
718
719* **[implements] eth_dev_ops**: ``get_reg``.
720* **[related]    API**: ``rte_eth_dev_get_reg_info()``.
721
722
723.. _nic_features_led:
724
725LED
726---
727
728Supports turning on/off a software controllable LED on a device.
729
730* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
731* **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
732
733
734.. _nic_features_multiprocess_aware:
735
736Multiprocess aware
737------------------
738
739Driver can be used for primary-secondary process model.
740
741
742.. _nic_features_bsd_nic_uio:
743
744BSD nic_uio
745-----------
746
747BSD ``nic_uio`` module supported.
748
749
750.. _nic_features_linux_uio:
751
752Linux UIO
753---------
754
755Works with ``igb_uio`` kernel module.
756
757* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
758
759.. _nic_features_linux_vfio:
760
761Linux VFIO
762----------
763
764Works with ``vfio-pci`` kernel module.
765
766* **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
767
768.. _nic_features_other_kdrv:
769
770Other kdrv
771----------
772
773Kernel module other than above ones supported.
774
775
776.. _nic_features_armv7:
777
778ARMv7
779-----
780
781Support armv7 architecture.
782
783Use ``defconfig_arm-armv7a-*-*``.
784
785
786.. _nic_features_armv8:
787
788ARMv8
789-----
790
791Support armv8a (64bit) architecture.
792
793Use ``defconfig_arm64-armv8a-*-*``
794
795
796.. _nic_features_power8:
797
798Power8
799------
800
801Support PowerPC architecture.
802
803Use ``defconfig_ppc_64-power8-*-*``
804
805.. _nic_features_x86-32:
806
807x86-32
808------
809
810Support 32bits x86 architecture.
811
812Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
813
814
815.. _nic_features_x86-64:
816
817x86-64
818------
819
820Support 64bits x86 architecture.
821
822Use ``defconfig_x86_64-native-*-*``.
823
824
825.. _nic_features_usage_doc:
826
827Usage doc
828---------
829
830Documentation describes usage.
831
832See ``doc/guides/nics/*.rst``
833
834
835.. _nic_features_design_doc:
836
837Design doc
838----------
839
840Documentation describes design.
841
842See ``doc/guides/nics/*.rst``.
843
844
845.. _nic_features_perf_doc:
846
847Perf doc
848--------
849
850Documentation describes performance values.
851
852See ``dpdk.org/doc/perf/*``.
853
854.. _nic_features_runtime_rx_queue_setup:
855
856Runtime Rx queue setup
857----------------------
858
859Supports Rx queue setup after device started.
860
861* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
862* **[related]  API**: ``rte_eth_dev_info_get()``.
863
864.. _nic_features_runtime_tx_queue_setup:
865
866Runtime Tx queue setup
867----------------------
868
869Supports Tx queue setup after device started.
870
871* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
872* **[related]  API**: ``rte_eth_dev_info_get()``.
873
874.. _nic_features_other:
875
876Other dev ops not represented by a Feature
877------------------------------------------
878
879* ``rxq_info_get``
880* ``txq_info_get``
881* ``vlan_tpid_set``
882* ``vlan_strip_queue_set``
883* ``vlan_pvid_set``
884* ``rx_queue_count``
885* ``l2_tunnel_offload_set``
886* ``uc_hash_table_set``
887* ``uc_all_hash_table_set``
888* ``udp_tunnel_port_add``
889* ``udp_tunnel_port_del``
890* ``l2_tunnel_eth_type_conf``
891* ``l2_tunnel_offload_set``
892* ``tx_pkt_prepare``
893