1 .. SPDX-License-Identifier: BSD-3-Clause
2 Copyright(c) 2017 Intel Corporation.
7 This section explains the supported features that are listed in the
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.
13 Following tags used for feature details, these are from driver point of view:
15 ``[uses]`` : Driver uses some kind of input from the application.
17 ``[implements]`` : Driver implements a functionality.
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.
23 ``[related]`` : Related API with that feature.
26 .. _nic_features_speed_capabilities:
31 Supports getting the speed capabilities that the current device is capable of.
33 * **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
34 * **[related] API**: ``rte_eth_dev_info_get()``.
37 .. _nic_features_link_status:
42 Supports getting the link speed, duplex mode and link state (up/down).
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()``.
49 .. _nic_features_link_status_event:
54 Supports Link Status Change interrupts.
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()``.
64 .. _nic_features_removal_event:
69 Supports device removal interrupts.
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``.
77 .. _nic_features_queue_status_event:
82 Supports queue enable/disable events.
84 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
87 .. _nic_features_rx_interrupt:
92 Supports Rx interrupts.
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()``.
99 .. _nic_features_lock-free_tx_queue:
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.
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()``.
112 .. _nic_features_fast_mbuf_free:
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.
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``.
124 .. _nic_features_free_tx_mbuf_on_demand:
126 Free Tx mbuf on demand
127 ----------------------
129 Supports freeing consumed buffers on a Tx ring.
131 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
132 * **[related] API**: ``rte_eth_tx_done_cleanup()``.
135 .. _nic_features_queue_start_stop:
140 Supports starting/stopping a specific Rx/Tx queue of a port.
142 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
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()``.
148 .. _nic_features_mtu_update:
153 Supports updating port MTU.
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()``.
161 .. _nic_features_jumbo_frame:
166 Supports Rx jumbo frames.
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()``.
174 .. _nic_features_scattered_rx:
179 Supports receiving segmented mbufs.
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``.
188 .. _nic_features_lro:
193 Supports Large Receive Offload.
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``.
202 .. _nic_features_tso:
207 Supports TCP Segmentation Offloading.
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``.
217 .. _nic_features_promiscuous_mode:
222 Supports enabling/disabling promiscuous mode for a port.
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()``.
230 .. _nic_features_allmulticast_mode:
235 Supports enabling/disabling receiving multicast frames.
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()``.
243 .. _nic_features_unicast_mac_filter:
248 Supports adding MAC addresses to enable whitelist filtering to accept packets.
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()``.
257 .. _nic_features_multicast_mac_filter:
262 Supports setting multicast addresses to filter.
264 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
265 * **[related] API**: ``rte_eth_dev_set_mc_addr_list()``.
268 .. _nic_features_rss_hash:
273 Supports RSS hashing on RX.
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``.
281 .. _nic_features_inner_rss:
286 Supports RX RSS hashing on Inner headers.
288 * **[uses] rte_flow_action_rss**: ``level``.
289 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
292 .. _nic_features_rss_key_update:
297 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
298 Receive Side Scaling (RSS) hash key.
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()``.
306 .. _nic_features_rss_reta_update:
311 Supports updating Redirection Table of the Receive Side Scaling (RSS).
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()``.
318 .. _nic_features_vmdq:
323 Supports Virtual Machine Device Queues (VMDq).
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``.
332 .. _nic_features_sriov:
337 Driver supports creating Virtual Functions.
339 * **[implements] rte_eth_dev_data**: ``sriov``.
341 .. _nic_features_dcb:
346 Supports Data Center Bridging (DCB).
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()``.
357 .. _nic_features_vlan_filter:
362 Supports filtering of a VLAN Tag identifier.
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()``.
369 .. _nic_features_ethertype_filter:
374 Supports filtering on Ethernet type.
376 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
377 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
379 .. _nic_features_ntuple_filter:
384 Supports filtering on N-tuple values.
386 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
387 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
390 .. _nic_features_syn_filter:
395 Supports TCP syn filtering.
397 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
398 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
401 .. _nic_features_tunnel_filter:
406 Supports tunnel filtering.
408 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
409 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
412 .. _nic_features_flexible_filter:
417 Supports a flexible (non-tuple or Ethertype) filter.
419 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
420 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
423 .. _nic_features_hash_filter:
428 Supports Hash filtering.
430 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
431 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
434 .. _nic_features_flow_director:
439 Supports Flow Director style filtering to queues.
441 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
442 * **[provides] mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
444 * **[related] API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
447 .. _nic_features_flow_control:
452 Supports configuring link flow control.
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()``.
460 .. _nic_features_flow_api:
465 Supports the DPDK Flow API for generic filtering.
467 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
468 * **[implements] rte_flow_ops**: ``All``.
471 .. _nic_features_rate_limitation:
476 Supports Tx rate limitation for a queue.
478 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
479 * **[related] API**: ``rte_eth_set_queue_rate_limit()``.
482 .. _nic_features_traffic_mirroring:
487 Supports adding traffic mirroring rules.
489 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
490 * **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
493 .. _nic_features_inline_crypto_doc:
498 Supports inline crypto processing (e.g. inline IPsec). See Security library and PMD documentation for more details.
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``.
510 .. _nic_features_crc_offload:
515 Supports CRC stripping by hardware.
516 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
518 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
521 .. _nic_features_vlan_offload:
526 Supports VLAN offload to hardware.
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()``.
539 .. _nic_features_qinq_offload:
544 Supports QinQ (queue in queue) offload.
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``.
556 .. _nic_features_l3_checksum_offload:
561 Supports L3 checksum offload.
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``.
575 .. _nic_features_l4_checksum_offload:
580 Supports L4 checksum offload.
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``.
594 .. _nic_features_hw_timestamp:
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``.
607 .. _nic_features_macsec_offload:
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``.
621 .. _nic_features_inner_l3_checksum:
626 Supports inner packet L3 checksum.
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``.
640 .. _nic_features_inner_l4_checksum:
645 Supports inner packet L4 checksum.
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``.
658 .. _nic_features_packet_type_parsing:
663 Supports packet type parsing and returns a list of supported types.
665 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
666 * **[related] API**: ``rte_eth_dev_get_supported_ptypes()``.
669 .. _nic_features_timesync:
674 Supports IEEE1588/802.1AS timestamping.
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()``.
685 .. _nic_features_rx_descriptor_status:
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
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()``.
701 .. _nic_features_tx_descriptor_status:
706 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
709 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
710 * **[related] API**: ``rte_eth_tx_descriptor_status()``.
713 .. _nic_features_basic_stats:
718 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
719 imissed, ierrors, oerrors, rx_nombuf.
721 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
723 These apply to all drivers.
725 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
726 * **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
729 .. _nic_features_extended_stats:
734 Supports Extended Statistics, changes from driver to driver.
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()``.
743 .. _nic_features_stats_per_queue:
748 Supports configuring per-queue stat counter mapping.
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()``.
755 .. _nic_features_fw_version:
760 Supports getting device hardware firmware information.
762 * **[implements] eth_dev_ops**: ``fw_version_get``.
763 * **[related] API**: ``rte_eth_dev_fw_version_get()``.
766 .. _nic_features_eeprom_dump:
771 Supports getting/setting device eeprom data.
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()``.
778 .. _nic_features_module_eeprom_dump:
783 Supports getting information and data of plugin module eeprom.
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()``.
789 .. _nic_features_register_dump:
794 Supports retrieving device registers and registering attributes (number of
795 registers and register size).
797 * **[implements] eth_dev_ops**: ``get_reg``.
798 * **[related] API**: ``rte_eth_dev_get_reg_info()``.
801 .. _nic_features_led:
806 Supports turning on/off a software controllable LED on a device.
808 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
809 * **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
812 .. _nic_features_multiprocess_aware:
817 Driver can be used for primary-secondary process model.
820 .. _nic_features_bsd_nic_uio:
825 BSD ``nic_uio`` module supported.
828 .. _nic_features_linux_uio:
833 Works with ``igb_uio`` kernel module.
835 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
837 .. _nic_features_linux_vfio:
842 Works with ``vfio-pci`` kernel module.
844 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
846 .. _nic_features_other_kdrv:
851 Kernel module other than above ones supported.
854 .. _nic_features_armv7:
859 Support armv7 architecture.
861 Use ``defconfig_arm-armv7a-*-*``.
864 .. _nic_features_armv8:
869 Support armv8a (64bit) architecture.
871 Use ``defconfig_arm64-armv8a-*-*``
874 .. _nic_features_power8:
879 Support PowerPC architecture.
881 Use ``defconfig_ppc_64-power8-*-*``
883 .. _nic_features_x86-32:
888 Support 32bits x86 architecture.
890 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
893 .. _nic_features_x86-64:
898 Support 64bits x86 architecture.
900 Use ``defconfig_x86_64-native-*-*``.
903 .. _nic_features_usage_doc:
908 Documentation describes usage.
910 See ``doc/guides/nics/*.rst``
913 .. _nic_features_design_doc:
918 Documentation describes design.
920 See ``doc/guides/nics/*.rst``.
923 .. _nic_features_perf_doc:
928 Documentation describes performance values.
930 See ``dpdk.org/doc/perf/*``.
932 .. _nic_features_runtime_rx_queue_setup:
934 Runtime Rx queue setup
935 ----------------------
937 Supports Rx queue setup after device started.
939 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
940 * **[related] API**: ``rte_eth_dev_info_get()``.
942 .. _nic_features_runtime_tx_queue_setup:
944 Runtime Tx queue setup
945 ----------------------
947 Supports Tx queue setup after device started.
949 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
950 * **[related] API**: ``rte_eth_dev_info_get()``.
952 .. _nic_features_other:
954 Other dev ops not represented by a Feature
955 ------------------------------------------
960 * ``vlan_strip_queue_set``
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``