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 ``dev_conf.rxmode.max_lro_pkt_size``.
197 * **[implements] datapath**: ``LRO functionality``.
198 * **[implements] rte_eth_dev_data**: ``lro``.
199 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
200 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
201 * **[provides] rte_eth_dev_info**: ``max_lro_pkt_size``.
204 .. _nic_features_tso:
209 Supports TCP Segmentation Offloading.
211 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
212 * **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
213 * **[uses] mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
214 * **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
215 * **[implements] datapath**: ``TSO functionality``.
216 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
219 .. _nic_features_promiscuous_mode:
224 Supports enabling/disabling promiscuous mode for a port.
226 * **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
227 * **[implements] rte_eth_dev_data**: ``promiscuous``.
228 * **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
229 ``rte_eth_promiscuous_get()``.
232 .. _nic_features_allmulticast_mode:
237 Supports enabling/disabling receiving multicast frames.
239 * **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
240 * **[implements] rte_eth_dev_data**: ``all_multicast``.
241 * **[related] API**: ``rte_eth_allmulticast_enable()``,
242 ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
245 .. _nic_features_unicast_mac_filter:
250 Supports adding MAC addresses to enable whitelist filtering to accept packets.
252 * **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
253 * **[implements] rte_eth_dev_data**: ``mac_addrs``.
254 * **[related] API**: ``rte_eth_dev_default_mac_addr_set()``,
255 ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
256 ``rte_eth_macaddr_get()``.
259 .. _nic_features_multicast_mac_filter:
264 Supports setting multicast addresses to filter.
266 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
267 * **[related] API**: ``rte_eth_dev_set_mc_addr_list()``.
270 .. _nic_features_rss_hash:
275 Supports RSS hashing on RX.
277 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
278 * **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``.
279 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
280 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
281 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
284 .. _nic_features_inner_rss:
289 Supports RX RSS hashing on Inner headers.
291 * **[uses] rte_flow_action_rss**: ``level``.
292 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
293 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
296 .. _nic_features_rss_key_update:
301 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
302 Receive Side Scaling (RSS) hash key.
304 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
305 * **[provides] rte_eth_dev_info**: ``hash_key_size``.
306 * **[related] API**: ``rte_eth_dev_rss_hash_update()``,
307 ``rte_eth_dev_rss_hash_conf_get()``.
310 .. _nic_features_rss_reta_update:
315 Supports updating Redirection Table of the Receive Side Scaling (RSS).
317 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
318 * **[provides] rte_eth_dev_info**: ``reta_size``.
319 * **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
322 .. _nic_features_vmdq:
327 Supports Virtual Machine Device Queues (VMDq).
329 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
330 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
331 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
332 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
333 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
336 .. _nic_features_sriov:
341 Driver supports creating Virtual Functions.
343 * **[implements] rte_eth_dev_data**: ``sriov``.
345 .. _nic_features_dcb:
350 Supports Data Center Bridging (DCB).
352 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
353 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
354 * **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
355 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
356 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
357 * **[implements] eth_dev_ops**: ``get_dcb_info``.
358 * **[related] API**: ``rte_eth_dev_get_dcb_info()``.
361 .. _nic_features_vlan_filter:
366 Supports filtering of a VLAN Tag identifier.
368 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
369 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
370 * **[related] API**: ``rte_eth_dev_vlan_filter()``.
373 .. _nic_features_flow_control:
378 Supports configuring link flow control.
380 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
381 ``priority_flow_ctrl_set``.
382 * **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
383 ``rte_eth_dev_priority_flow_ctrl_set()``.
386 .. _nic_features_flow_api:
391 Supports the DPDK Flow API for generic filtering.
393 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
394 * **[implements] rte_flow_ops**: ``All``.
397 .. _nic_features_rate_limitation:
402 Supports Tx rate limitation for a queue.
404 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
405 * **[related] API**: ``rte_eth_set_queue_rate_limit()``.
408 .. _nic_features_traffic_mirroring:
413 Supports adding traffic mirroring rules.
415 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
416 * **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
419 .. _nic_features_inline_crypto_doc:
424 Supports inline crypto processing defined by rte_security library to perform crypto
425 operations of security protocol while packet is received in NIC. NIC is not aware
426 of protocol operations. See Security library and PMD documentation for more details.
428 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
429 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
430 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
431 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
432 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
433 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
434 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
435 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
436 * **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
439 .. _nic_features_inline_protocol_doc:
444 Supports inline protocol processing defined by rte_security library to perform
445 protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
446 packet is received at NIC. The NIC is capable of understanding the security
447 protocol operations. See security library and PMD documentation for more details.
449 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
450 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
451 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
452 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
453 ``capabilities_get``.
454 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
455 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
456 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
457 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
458 * **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
461 .. _nic_features_crc_offload:
466 Supports CRC stripping by hardware.
467 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
469 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
472 .. _nic_features_vlan_offload:
477 Supports VLAN offload to hardware.
479 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
480 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
481 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
482 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
483 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
484 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
485 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
486 * **[related] API**: ``rte_eth_dev_set_vlan_offload()``,
487 ``rte_eth_dev_get_vlan_offload()``.
490 .. _nic_features_qinq_offload:
495 Supports QinQ (queue in queue) offload.
497 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
498 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
499 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
500 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
501 ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
502 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
503 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
504 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
507 .. _nic_features_l3_checksum_offload:
512 Supports L3 checksum offload.
514 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
515 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
516 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
517 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
518 * **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
519 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
520 ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
521 ``PKT_RX_IP_CKSUM_NONE``.
522 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
523 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
526 .. _nic_features_l4_checksum_offload:
531 Supports L4 checksum offload.
533 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
534 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
535 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
536 ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
537 ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
538 * **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
539 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
540 ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
541 ``PKT_RX_L4_CKSUM_NONE``.
542 * **[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``,
543 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
545 .. _nic_features_hw_timestamp:
552 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
553 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
554 * **[provides] mbuf**: ``mbuf.timestamp``.
555 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
556 * **[related] eth_dev_ops**: ``read_clock``.
558 .. _nic_features_macsec_offload:
565 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
566 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
567 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
568 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
569 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
572 .. _nic_features_inner_l3_checksum:
577 Supports inner packet L3 checksum.
579 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
580 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
581 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
582 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
583 ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
584 ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
585 * **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
586 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
587 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
588 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
591 .. _nic_features_inner_l4_checksum:
596 Supports inner packet L4 checksum.
598 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
599 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
600 ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
601 * **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
602 * **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
603 ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
604 * **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
605 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
606 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
609 .. _nic_features_packet_type_parsing:
614 Supports packet type parsing and returns a list of supported types.
615 Allows application to set ptypes it is interested in.
617 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
618 * **[related] API**: ``rte_eth_dev_get_supported_ptypes()``,
619 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
620 * **[provides] mbuf**: ``mbuf.packet_type``.
623 .. _nic_features_timesync:
628 Supports IEEE1588/802.1AS timestamping.
630 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
631 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
632 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
633 * **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
634 ``rte_eth_timesync_read_rx_timestamp()``,
635 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
636 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
639 .. _nic_features_rx_descriptor_status:
644 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
645 used, status can be "Available", "Done" or "Unavailable". When
646 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
649 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
650 * **[related] API**: ``rte_eth_rx_descriptor_status()``.
651 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
652 * **[related] API**: ``rte_eth_rx_descriptor_done()``.
655 .. _nic_features_tx_descriptor_status:
660 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
663 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
664 * **[related] API**: ``rte_eth_tx_descriptor_status()``.
667 .. _nic_features_basic_stats:
672 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
673 imissed, ierrors, oerrors, rx_nombuf.
675 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
677 These apply to all drivers.
679 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
680 * **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
683 .. _nic_features_extended_stats:
688 Supports Extended Statistics, changes from driver to driver.
690 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
691 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
692 * **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
693 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
694 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
697 .. _nic_features_stats_per_queue:
702 Supports configuring per-queue stat counter mapping.
704 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
705 * **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
706 ``rte_eth_dev_set_tx_queue_stats_mapping()``.
709 .. _nic_features_fw_version:
714 Supports getting device hardware firmware information.
716 * **[implements] eth_dev_ops**: ``fw_version_get``.
717 * **[related] API**: ``rte_eth_dev_fw_version_get()``.
720 .. _nic_features_eeprom_dump:
725 Supports getting/setting device eeprom data.
727 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
728 * **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
729 ``rte_eth_dev_set_eeprom()``.
732 .. _nic_features_module_eeprom_dump:
737 Supports getting information and data of plugin module eeprom.
739 * **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
740 * **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
743 .. _nic_features_register_dump:
748 Supports retrieving device registers and registering attributes (number of
749 registers and register size).
751 * **[implements] eth_dev_ops**: ``get_reg``.
752 * **[related] API**: ``rte_eth_dev_get_reg_info()``.
755 .. _nic_features_led:
760 Supports turning on/off a software controllable LED on a device.
762 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
763 * **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
766 .. _nic_features_multiprocess_aware:
771 Driver can be used for primary-secondary process model.
774 .. _nic_features_bsd_nic_uio:
779 BSD ``nic_uio`` module supported.
782 .. _nic_features_linux_uio:
787 Works with ``igb_uio`` kernel module.
789 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
791 .. _nic_features_linux_vfio:
796 Works with ``vfio-pci`` kernel module.
798 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
800 .. _nic_features_other_kdrv:
805 Kernel module other than above ones supported.
808 .. _nic_features_armv7:
813 Support armv7 architecture.
815 Use ``defconfig_arm-armv7a-*-*``.
818 .. _nic_features_armv8:
823 Support armv8a (64bit) architecture.
825 Use ``defconfig_arm64-armv8a-*-*``
828 .. _nic_features_power8:
833 Support PowerPC architecture.
835 Use ``defconfig_ppc_64-power8-*-*``
837 .. _nic_features_x86-32:
842 Support 32bits x86 architecture.
844 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
847 .. _nic_features_x86-64:
852 Support 64bits x86 architecture.
854 Use ``defconfig_x86_64-native-*-*``.
857 .. _nic_features_usage_doc:
862 Documentation describes usage.
864 See ``doc/guides/nics/*.rst``
867 .. _nic_features_design_doc:
872 Documentation describes design.
874 See ``doc/guides/nics/*.rst``.
877 .. _nic_features_perf_doc:
882 Documentation describes performance values.
884 See ``dpdk.org/doc/perf/*``.
886 .. _nic_features_runtime_rx_queue_setup:
888 Runtime Rx queue setup
889 ----------------------
891 Supports Rx queue setup after device started.
893 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
894 * **[related] API**: ``rte_eth_dev_info_get()``.
896 .. _nic_features_runtime_tx_queue_setup:
898 Runtime Tx queue setup
899 ----------------------
901 Supports Tx queue setup after device started.
903 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
904 * **[related] API**: ``rte_eth_dev_info_get()``.
906 .. _nic_features_burst_mode_info:
911 Supports to get Rx/Tx packet burst mode information.
913 * **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
914 * **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
916 .. _nic_features_other:
918 Other dev ops not represented by a Feature
919 ------------------------------------------
924 * ``vlan_strip_queue_set``
927 * ``l2_tunnel_offload_set``
928 * ``uc_hash_table_set``
929 * ``uc_all_hash_table_set``
930 * ``udp_tunnel_port_add``
931 * ``udp_tunnel_port_del``
932 * ``l2_tunnel_eth_type_conf``
933 * ``l2_tunnel_offload_set``