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