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_buffer_split: 189 190Buffer Split on Rx 191------------------ 192 193Scatters the packets being received on specified boundaries to segmented mbufs. 194 195* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``. 196* **[uses] rte_eth_rxconf**: ``rx_conf.rx_seg, rx_conf.rx_nseg``. 197* **[implements] datapath**: ``Buffer Split functionality``. 198* **[provides] rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``. 199* **[related] API**: ``rte_eth_rx_queue_setup()``. 200 201 202.. _nic_features_lro: 203 204LRO 205--- 206 207Supports Large Receive Offload. 208 209* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``. 210 ``dev_conf.rxmode.max_lro_pkt_size``. 211* **[implements] datapath**: ``LRO functionality``. 212* **[implements] rte_eth_dev_data**: ``lro``. 213* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``. 214* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``. 215* **[provides] rte_eth_dev_info**: ``max_lro_pkt_size``. 216 217 218.. _nic_features_tso: 219 220TSO 221--- 222 223Supports TCP Segmentation Offloading. 224 225* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``. 226* **[uses] rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``. 227* **[uses] mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``. 228* **[uses] mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``. 229* **[implements] datapath**: ``TSO functionality``. 230* **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``. 231 232 233.. _nic_features_promiscuous_mode: 234 235Promiscuous mode 236---------------- 237 238Supports enabling/disabling promiscuous mode for a port. 239 240* **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``. 241* **[implements] rte_eth_dev_data**: ``promiscuous``. 242* **[related] API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``, 243 ``rte_eth_promiscuous_get()``. 244 245 246.. _nic_features_allmulticast_mode: 247 248Allmulticast mode 249----------------- 250 251Supports enabling/disabling receiving multicast frames. 252 253* **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``. 254* **[implements] rte_eth_dev_data**: ``all_multicast``. 255* **[related] API**: ``rte_eth_allmulticast_enable()``, 256 ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``. 257 258 259.. _nic_features_unicast_mac_filter: 260 261Unicast MAC filter 262------------------ 263 264Supports adding MAC addresses to enable incoming filtering of packets. 265 266* **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``. 267* **[implements] rte_eth_dev_data**: ``mac_addrs``. 268* **[related] API**: ``rte_eth_dev_default_mac_addr_set()``, 269 ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``, 270 ``rte_eth_macaddr_get()``. 271 272 273.. _nic_features_multicast_mac_filter: 274 275Multicast MAC filter 276-------------------- 277 278Supports setting multicast addresses to filter. 279 280* **[implements] eth_dev_ops**: ``set_mc_addr_list``. 281* **[related] API**: ``rte_eth_dev_set_mc_addr_list()``. 282 283 284.. _nic_features_rss_hash: 285 286RSS hash 287-------- 288 289Supports RSS hashing on RX. 290 291* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``. 292* **[uses] user config**: ``dev_conf.rx_adv_conf.rss_conf``. 293* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``. 294* **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``. 295* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``. 296 297 298.. _nic_features_inner_rss: 299 300Inner RSS 301--------- 302 303Supports RX RSS hashing on Inner headers. 304 305* **[uses] rte_flow_action_rss**: ``level``. 306* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``. 307* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``. 308 309 310.. _nic_features_rss_key_update: 311 312RSS key update 313-------------- 314 315Supports configuration of Receive Side Scaling (RSS) hash computation. Updating 316Receive Side Scaling (RSS) hash key. 317 318* **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``. 319* **[provides] rte_eth_dev_info**: ``hash_key_size``. 320* **[related] API**: ``rte_eth_dev_rss_hash_update()``, 321 ``rte_eth_dev_rss_hash_conf_get()``. 322 323 324.. _nic_features_rss_reta_update: 325 326RSS reta update 327--------------- 328 329Supports updating Redirection Table of the Receive Side Scaling (RSS). 330 331* **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``. 332* **[provides] rte_eth_dev_info**: ``reta_size``. 333* **[related] API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``. 334 335 336.. _nic_features_vmdq: 337 338VMDq 339---- 340 341Supports Virtual Machine Device Queues (VMDq). 342 343* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``. 344* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``. 345* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``. 346* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``. 347* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``. 348 349 350.. _nic_features_sriov: 351 352SR-IOV 353------ 354 355Driver supports creating Virtual Functions. 356 357* **[implements] rte_eth_dev_data**: ``sriov``. 358 359.. _nic_features_dcb: 360 361DCB 362--- 363 364Supports Data Center Bridging (DCB). 365 366* **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``. 367* **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``. 368* **[uses] user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``. 369* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``. 370* **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``. 371* **[implements] eth_dev_ops**: ``get_dcb_info``. 372* **[related] API**: ``rte_eth_dev_get_dcb_info()``. 373 374 375.. _nic_features_vlan_filter: 376 377VLAN filter 378----------- 379 380Supports filtering of a VLAN Tag identifier. 381 382* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``. 383* **[implements] eth_dev_ops**: ``vlan_filter_set``. 384* **[related] API**: ``rte_eth_dev_vlan_filter()``. 385 386 387.. _nic_features_flow_control: 388 389Flow control 390------------ 391 392Supports configuring link flow control. 393 394* **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``, 395 ``priority_flow_ctrl_set``. 396* **[related] API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``, 397 ``rte_eth_dev_priority_flow_ctrl_set()``. 398 399 400.. _nic_features_rate_limitation: 401 402Rate limitation 403--------------- 404 405Supports Tx rate limitation for a queue. 406 407* **[implements] eth_dev_ops**: ``set_queue_rate_limit``. 408* **[related] API**: ``rte_eth_set_queue_rate_limit()``. 409 410 411.. _nic_features_traffic_mirroring: 412 413Traffic mirroring 414----------------- 415 416Supports adding traffic mirroring rules. 417 418* **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``. 419* **[related] API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``. 420 421 422.. _nic_features_inline_crypto_doc: 423 424Inline crypto 425------------- 426 427Supports inline crypto processing defined by rte_security library to perform crypto 428operations of security protocol while packet is received in NIC. NIC is not aware 429of protocol operations. See Security library and PMD documentation for more details. 430 431* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``, 432* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``. 433* **[uses] mbuf**: ``mbuf.l2_len``. 434* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 435 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``. 436* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``, 437 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``. 438* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``, 439 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``. 440* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO`` 441 442 443.. _nic_features_inline_protocol_doc: 444 445Inline protocol 446--------------- 447 448Supports inline protocol processing defined by rte_security library to perform 449protocol processing for the security protocol (e.g. IPsec, MACSEC) while the 450packet is received at NIC. The NIC is capable of understanding the security 451protocol operations. See security library and PMD documentation for more details. 452 453* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``, 454* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``. 455* **[uses] mbuf**: ``mbuf.l2_len``. 456* **[implements] rte_security_ops**: ``session_create``, ``session_update``, 457 ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``, 458 ``capabilities_get``. 459* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``, 460 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``. 461* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``, 462 ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``. 463* **[provides] rte_security_ops, capabilities_get**: ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL`` 464 465 466.. _nic_features_crc_offload: 467 468CRC offload 469----------- 470 471Supports CRC stripping by hardware. 472A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC. 473 474* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``. 475 476 477.. _nic_features_vlan_offload: 478 479VLAN offload 480------------ 481 482Supports VLAN offload to hardware. 483 484* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``. 485* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``. 486* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``. 487* **[implements] eth_dev_ops**: ``vlan_offload_set``. 488* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``. 489* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``, 490 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``. 491* **[related] API**: ``rte_eth_dev_set_vlan_offload()``, 492 ``rte_eth_dev_get_vlan_offload()``. 493 494 495.. _nic_features_qinq_offload: 496 497QinQ offload 498------------ 499 500Supports QinQ (queue in queue) offload. 501 502* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``. 503* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``. 504* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``. 505* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``, 506 ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` 507 ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``. 508* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``, 509 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``. 510 511 512.. _nic_features_fec: 513 514FEC 515--- 516 517Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode. 518It adds error correction information to data packets at the transmit end, and uses the error correction 519information to correct the bit errors generated during data packet transmission at the receive end. This 520improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required. 521 522* **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``. 523* **[provides] rte_eth_fec_capa**: ``speed:ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``. 524* **[related] API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``. 525 526 527.. _nic_features_l3_checksum_offload: 528 529L3 checksum offload 530------------------- 531 532Supports L3 checksum offload. 533 534* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``. 535* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``. 536* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 537 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``. 538* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 539* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` | 540 ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` | 541 ``PKT_RX_IP_CKSUM_NONE``. 542* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``, 543 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``. 544 545 546.. _nic_features_l4_checksum_offload: 547 548L4 checksum offload 549------------------- 550 551Supports L4 checksum offload. 552 553* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``. 554* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 555* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 556 ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` | 557 ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``. 558* **[uses] mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``. 559* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` | 560 ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` | 561 ``PKT_RX_L4_CKSUM_NONE``. 562* **[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``, 563 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``. 564 565.. _nic_features_hw_timestamp: 566 567Timestamp offload 568----------------- 569 570Supports Timestamp. 571 572* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``. 573* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``. 574* **[provides] mbuf**: ``mbuf.timestamp``. 575* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``. 576* **[related] eth_dev_ops**: ``read_clock``. 577 578.. _nic_features_macsec_offload: 579 580MACsec offload 581-------------- 582 583Supports MACsec. 584 585* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``. 586* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``. 587* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``. 588* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``, 589 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``. 590 591 592.. _nic_features_inner_l3_checksum: 593 594Inner L3 checksum 595----------------- 596 597Supports inner packet L3 checksum. 598 599* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``. 600* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 601* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``, 602 ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``, 603 ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``, 604 ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 605* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 606* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_IP_CKSUM_BAD``. 607* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``, 608 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``. 609 610 611.. _nic_features_inner_l4_checksum: 612 613Inner L4 checksum 614----------------- 615 616Supports inner packet L4 checksum. 617 618* **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``. 619* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` | 620 ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``. 621* **[uses] rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 622* **[uses] mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``. 623 ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``. 624* **[uses] mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``. 625* **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``, 626 ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``. 627 628 629.. _nic_features_packet_type_parsing: 630 631Packet type parsing 632------------------- 633 634Supports packet type parsing and returns a list of supported types. 635Allows application to set ptypes it is interested in. 636 637* **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``, 638* **[related] API**: ``rte_eth_dev_get_supported_ptypes()``, 639 ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``. 640* **[provides] mbuf**: ``mbuf.packet_type``. 641 642 643.. _nic_features_timesync: 644 645Timesync 646-------- 647 648Supports IEEE1588/802.1AS timestamping. 649 650* **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable`` 651 ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``, 652 ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``. 653* **[related] API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``, 654 ``rte_eth_timesync_read_rx_timestamp()``, 655 ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``, 656 ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``. 657 658 659.. _nic_features_rx_descriptor_status: 660 661Rx descriptor status 662-------------------- 663 664Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is 665used, status can be "Available", "Done" or "Unavailable". When 666``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is 667not set". 668 669* **[implements] rte_eth_dev**: ``rx_descriptor_status``. 670* **[related] API**: ``rte_eth_rx_descriptor_status()``. 671* **[implements] rte_eth_dev**: ``rx_descriptor_done``. 672* **[related] API**: ``rte_eth_rx_descriptor_done()``. 673 674 675.. _nic_features_tx_descriptor_status: 676 677Tx descriptor status 678-------------------- 679 680Supports checking the status of a Tx descriptor. Status can be "Full", "Done" 681or "Unavailable." 682 683* **[implements] rte_eth_dev**: ``tx_descriptor_status``. 684* **[related] API**: ``rte_eth_tx_descriptor_status()``. 685 686 687.. _nic_features_basic_stats: 688 689Basic stats 690----------- 691 692Support basic statistics such as: ipackets, opackets, ibytes, obytes, 693imissed, ierrors, oerrors, rx_nombuf. 694 695And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors. 696 697These apply to all drivers. 698 699* **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``. 700* **[related] API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``. 701 702 703.. _nic_features_extended_stats: 704 705Extended stats 706-------------- 707 708Supports Extended Statistics, changes from driver to driver. 709 710* **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``. 711* **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``. 712* **[related] API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``, 713 ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``, 714 ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``. 715 716 717.. _nic_features_stats_per_queue: 718 719Stats per queue 720--------------- 721 722Supports configuring per-queue stat counter mapping. 723 724* **[implements] eth_dev_ops**: ``queue_stats_mapping_set``. 725* **[related] API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``, 726 ``rte_eth_dev_set_tx_queue_stats_mapping()``. 727 728 729.. _nic_features_fw_version: 730 731FW version 732---------- 733 734Supports getting device hardware firmware information. 735 736* **[implements] eth_dev_ops**: ``fw_version_get``. 737* **[related] API**: ``rte_eth_dev_fw_version_get()``. 738 739 740.. _nic_features_eeprom_dump: 741 742EEPROM dump 743----------- 744 745Supports getting/setting device eeprom data. 746 747* **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``. 748* **[related] API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``, 749 ``rte_eth_dev_set_eeprom()``. 750 751 752.. _nic_features_module_eeprom_dump: 753 754Module EEPROM dump 755------------------ 756 757Supports getting information and data of plugin module eeprom. 758 759* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. 760* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. 761 762 763.. _nic_features_register_dump: 764 765Registers dump 766-------------- 767 768Supports retrieving device registers and registering attributes (number of 769registers and register size). 770 771* **[implements] eth_dev_ops**: ``get_reg``. 772* **[related] API**: ``rte_eth_dev_get_reg_info()``. 773 774 775.. _nic_features_led: 776 777LED 778--- 779 780Supports turning on/off a software controllable LED on a device. 781 782* **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``. 783* **[related] API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``. 784 785 786.. _nic_features_multiprocess_aware: 787 788Multiprocess aware 789------------------ 790 791Driver can be used for primary-secondary process model. 792 793 794.. _nic_features_freebsd: 795 796FreeBSD 797------- 798 799Supports running on FreeBSD. 800 801 802.. _nic_features_linux: 803 804Linux 805----- 806 807Supports running on Linux. 808 809 810.. _nic_features_windows: 811 812Windows 813------- 814 815Supports running on Windows. 816 817 818.. _nic_features_armv7: 819 820ARMv7 821----- 822 823Support armv7 architecture. 824 825 826.. _nic_features_armv8: 827 828ARMv8 829----- 830 831Support armv8a (64bit) architecture. 832 833 834.. _nic_features_power8: 835 836Power8 837------ 838 839Support PowerPC architecture. 840 841 842.. _nic_features_x86-32: 843 844x86-32 845------ 846 847Support 32bits x86 architecture. 848 849 850.. _nic_features_x86-64: 851 852x86-64 853------ 854 855Support 64bits x86 architecture. 856 857 858.. _nic_features_usage_doc: 859 860Usage doc 861--------- 862 863Documentation describes usage. 864 865See ``doc/guides/nics/*.rst`` 866 867 868.. _nic_features_design_doc: 869 870Design doc 871---------- 872 873Documentation describes design. 874 875See ``doc/guides/nics/*.rst``. 876 877 878.. _nic_features_perf_doc: 879 880Perf doc 881-------- 882 883Documentation describes performance values. 884 885See ``dpdk.org/doc/perf/*``. 886 887.. _nic_features_runtime_rx_queue_setup: 888 889Runtime Rx queue setup 890---------------------- 891 892Supports Rx queue setup after device started. 893 894* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``. 895* **[related] API**: ``rte_eth_dev_info_get()``. 896 897.. _nic_features_runtime_tx_queue_setup: 898 899Runtime Tx queue setup 900---------------------- 901 902Supports Tx queue setup after device started. 903 904* **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``. 905* **[related] API**: ``rte_eth_dev_info_get()``. 906 907.. _nic_features_burst_mode_info: 908 909Burst mode info 910--------------- 911 912Supports to get Rx/Tx packet burst mode information. 913 914* **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``. 915* **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``. 916 917.. _nic_features_get_monitor_addr: 918 919PMD power management using monitor addresses 920-------------------------------------------- 921 922Supports getting a monitoring condition to use together with Ethernet PMD power 923management (see :doc:`../prog_guide/power_man` for more details). 924 925* **[implements] eth_dev_ops**: ``get_monitor_addr`` 926 927.. _nic_features_other: 928 929Other dev ops not represented by a Feature 930------------------------------------------ 931 932* ``rxq_info_get`` 933* ``txq_info_get`` 934* ``vlan_tpid_set`` 935* ``vlan_strip_queue_set`` 936* ``vlan_pvid_set`` 937* ``rx_queue_count`` 938* ``uc_hash_table_set`` 939* ``uc_all_hash_table_set`` 940* ``udp_tunnel_port_add`` 941* ``udp_tunnel_port_del`` 942* ``tx_pkt_prepare`` 943