doc: move fast mbuf free feature in net guide
[dpdk.git] / doc / guides / nics / features.rst
1 ..  BSD LICENSE
2     Copyright(c) 2017 Intel Corporation. All rights reserved.
3     All rights reserved.
4
5     Redistribution and use in source and binary forms, with or without
6     modification, are permitted provided that the following conditions
7     are met:
8
9     * Redistributions of source code must retain the above copyright
10     notice, this list of conditions and the following disclaimer.
11     * Redistributions in binary form must reproduce the above copyright
12     notice, this list of conditions and the following disclaimer in
13     the documentation and/or other materials provided with the
14     distribution.
15     * Neither the name of Intel Corporation nor the names of its
16     contributors may be used to endorse or promote products derived
17     from this software without specific prior written permission.
18
19     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22     A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23     OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 Features Overview
32 =================
33
34 This section explains the supported features that are listed in the
35 :doc:`overview`.
36
37 As a guide to implementers it also shows the structs where the features are
38 defined and the APIs that can be use to get/set the values.
39
40 Following tags used for feature details, these are from driver point of view:
41
42 ``[uses]``       : Driver uses some kind of input from the application.
43
44 ``[implements]`` : Driver implements a functionality.
45
46 ``[provides]``   : Driver provides some kind of data to the application. It is possible
47 to provide data by implementing some function, but "provides" is used
48 for cases where provided data can't be represented simply by a function.
49
50 ``[related]``    : Related API with that feature.
51
52
53 .. _nic_features_speed_capabilities:
54
55 Speed capabilities
56 ------------------
57
58 Supports getting the speed capabilities that the current device is capable of.
59
60 * **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
61 * **[related]  API**: ``rte_eth_dev_info_get()``.
62
63
64 .. _nic_features_link_status:
65
66 Link status
67 -----------
68
69 Supports getting the link speed, duplex mode and link state (up/down).
70
71 * **[implements] eth_dev_ops**: ``link_update``.
72 * **[implements] rte_eth_dev_data**: ``dev_link``.
73 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
74
75
76 .. _nic_features_link_status_event:
77
78 Link status event
79 -----------------
80
81 Supports Link Status Change interrupts.
82
83 * **[uses]       user config**: ``dev_conf.intr_conf.lsc``.
84 * **[uses]       rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
85 * **[uses]       rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
86 * **[implements] rte_eth_dev_data**: ``dev_link``.
87 * **[provides]   rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
88 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
89
90
91 .. _nic_features_removal_event:
92
93 Removal event
94 -------------
95
96 Supports device removal interrupts.
97
98 * **[uses]     user config**: ``dev_conf.intr_conf.rmv``.
99 * **[uses]     rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
100 * **[uses]     rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
101 * **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
102
103
104 .. _nic_features_queue_status_event:
105
106 Queue status event
107 ------------------
108
109 Supports queue enable/disable events.
110
111 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
112
113
114 .. _nic_features_rx_interrupt:
115
116 Rx interrupt
117 ------------
118
119 Supports Rx interrupts.
120
121 * **[uses]       user config**: ``dev_conf.intr_conf.rxq``.
122 * **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
123 * **[related]    API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
124
125
126 .. _nic_features_lock-free_tx_queue:
127
128 Lock-free Tx queue
129 ------------------
130
131 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
132 invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
133
134 * **[uses]    rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MT_LOCKFREE``.
135 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
136 * **[related]  API**: ``rte_eth_tx_burst()``.
137
138
139 .. _nic_features_fast_mbuf_free:
140
141 Fast mbuf free
142 --------------
143
144 Supports optimization for fast release of mbufs following successful Tx.
145 Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
146
147 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
148 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
149
150
151 .. _nic_features_free_tx_mbuf_on_demand:
152
153 Free Tx mbuf on demand
154 ----------------------
155
156 Supports freeing consumed buffers on a Tx ring.
157
158 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
159 * **[related]    API**: ``rte_eth_tx_done_cleanup()``.
160
161
162 .. _nic_features_queue_start_stop:
163
164 Queue start/stop
165 ----------------
166
167 Supports starting/stopping a specific Rx/Tx queue of a port.
168
169 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
170   ``tx_queue_stop``.
171 * **[related]    API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
172   ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
173
174
175 .. _nic_features_mtu_update:
176
177 MTU update
178 ----------
179
180 Supports updating port MTU.
181
182 * **[implements] eth_dev_ops**: ``mtu_set``.
183 * **[implements] rte_eth_dev_data**: ``mtu``.
184 * **[provides]   rte_eth_dev_info**: ``max_rx_pktlen``.
185 * **[related]    API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
186
187
188 .. _nic_features_jumbo_frame:
189
190 Jumbo frame
191 -----------
192
193 Supports Rx jumbo frames.
194
195 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
196   ``dev_conf.rxmode.max_rx_pkt_len``.
197 * **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
198 * **[related] API**: ``rte_eth_dev_set_mtu()``.
199
200
201 .. _nic_features_scattered_rx:
202
203 Scattered Rx
204 ------------
205
206 Supports receiving segmented mbufs.
207
208 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
209 * **[implements] datapath**: ``Scattered Rx function``.
210 * **[implements] rte_eth_dev_data**: ``scattered_rx``.
211 * **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
212 * **[related]    eth_dev_ops**: ``rx_pkt_burst``.
213
214
215 .. _nic_features_lro:
216
217 LRO
218 ---
219
220 Supports Large Receive Offload.
221
222 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
223 * **[implements] datapath**: ``LRO functionality``.
224 * **[implements] rte_eth_dev_data**: ``lro``.
225 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
226 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
227
228
229 .. _nic_features_tso:
230
231 TSO
232 ---
233
234 Supports TCP Segmentation Offloading.
235
236 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
237 * **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
238 * **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_TCP_SEG``.
239 * **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
240 * **[implements] datapath**: ``TSO functionality``.
241 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
242
243
244 .. _nic_features_promiscuous_mode:
245
246 Promiscuous mode
247 ----------------
248
249 Supports enabling/disabling promiscuous mode for a port.
250
251 * **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
252 * **[implements] rte_eth_dev_data**: ``promiscuous``.
253 * **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
254   ``rte_eth_promiscuous_get()``.
255
256
257 .. _nic_features_allmulticast_mode:
258
259 Allmulticast mode
260 -----------------
261
262 Supports enabling/disabling receiving multicast frames.
263
264 * **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
265 * **[implements] rte_eth_dev_data**: ``all_multicast``.
266 * **[related]    API**: ``rte_eth_allmulticast_enable()``,
267   ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
268
269
270 .. _nic_features_unicast_mac_filter:
271
272 Unicast MAC filter
273 ------------------
274
275 Supports adding MAC addresses to enable whitelist filtering to accept packets.
276
277 * **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
278 * **[implements] rte_eth_dev_data**: ``mac_addrs``.
279 * **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
280   ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
281   ``rte_eth_macaddr_get()``.
282
283
284 .. _nic_features_multicast_mac_filter:
285
286 Multicast MAC filter
287 --------------------
288
289 Supports setting multicast addresses to filter.
290
291 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
292 * **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
293
294
295 .. _nic_features_rss_hash:
296
297 RSS hash
298 --------
299
300 Supports RSS hashing on RX.
301
302 * **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
303 * **[uses]     user config**: ``dev_conf.rx_adv_conf.rss_conf``.
304 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
305 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
306
307
308 .. _nic_features_rss_key_update:
309
310 RSS key update
311 --------------
312
313 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
314 Receive Side Scaling (RSS) hash key.
315
316 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
317 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
318 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
319   ``rte_eth_dev_rss_hash_conf_get()``.
320
321
322 .. _nic_features_rss_reta_update:
323
324 RSS reta update
325 ---------------
326
327 Supports updating Redirection Table of the Receive Side Scaling (RSS).
328
329 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
330 * **[provides]   rte_eth_dev_info**: ``reta_size``.
331 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
332
333
334 .. _nic_features_vmdq:
335
336 VMDq
337 ----
338
339 Supports Virtual Machine Device Queues (VMDq).
340
341 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
342 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
343 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
344 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
345 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
346
347
348 .. _nic_features_sriov:
349
350 SR-IOV
351 ------
352
353 Driver supports creating Virtual Functions.
354
355 * **[implements] rte_eth_dev_data**: ``sriov``.
356
357 .. _nic_features_dcb:
358
359 DCB
360 ---
361
362 Supports Data Center Bridging (DCB).
363
364 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
365 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
366 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
367 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
368 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
369 * **[implements] eth_dev_ops**: ``get_dcb_info``.
370 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
371
372
373 .. _nic_features_vlan_filter:
374
375 VLAN filter
376 -----------
377
378 Supports filtering of a VLAN Tag identifier.
379
380 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
381 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
382 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
383
384
385 .. _nic_features_ethertype_filter:
386
387 Ethertype filter
388 ----------------
389
390 Supports filtering on Ethernet type.
391
392 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
393 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
394
395 .. _nic_features_ntuple_filter:
396
397 N-tuple filter
398 --------------
399
400 Supports filtering on N-tuple values.
401
402 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
403 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
404
405
406 .. _nic_features_syn_filter:
407
408 SYN filter
409 ----------
410
411 Supports TCP syn filtering.
412
413 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
414 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
415
416
417 .. _nic_features_tunnel_filter:
418
419 Tunnel filter
420 -------------
421
422 Supports tunnel filtering.
423
424 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
425 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
426
427
428 .. _nic_features_flexible_filter:
429
430 Flexible filter
431 ---------------
432
433 Supports a flexible (non-tuple or Ethertype) filter.
434
435 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
436 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
437
438
439 .. _nic_features_hash_filter:
440
441 Hash filter
442 -----------
443
444 Supports Hash filtering.
445
446 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
447 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
448
449
450 .. _nic_features_flow_director:
451
452 Flow director
453 -------------
454
455 Supports Flow Director style filtering to queues.
456
457 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
458 * **[provides]   mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
459   ``PKT_RX_FDIR_FLX``.
460 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
461
462
463 .. _nic_features_flow_control:
464
465 Flow control
466 ------------
467
468 Supports configuring link flow control.
469
470 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
471   ``priority_flow_ctrl_set``.
472 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
473   ``rte_eth_dev_priority_flow_ctrl_set()``.
474
475
476 .. _nic_features_flow_api:
477
478 Flow API
479 --------
480
481 Supports the DPDK Flow API for generic filtering.
482
483 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
484 * **[implements] rte_flow_ops**: ``All``.
485
486
487 .. _nic_features_rate_limitation:
488
489 Rate limitation
490 ---------------
491
492 Supports Tx rate limitation for a queue.
493
494 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
495 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
496
497
498 .. _nic_features_traffic_mirroring:
499
500 Traffic mirroring
501 -----------------
502
503 Supports adding traffic mirroring rules.
504
505 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
506 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
507
508
509 .. _nic_features_crc_offload:
510
511 CRC offload
512 -----------
513
514 Supports CRC stripping by hardware.
515
516 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_CRC_STRIP``.
517
518
519 .. _nic_features_vlan_offload:
520
521 VLAN offload
522 ------------
523
524 Supports VLAN offload to hardware.
525
526 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
527 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
528 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
529 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
530 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
531   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
532 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
533   ``rte_eth_dev_get_vlan_offload()``.
534
535
536 .. _nic_features_qinq_offload:
537
538 QinQ offload
539 ------------
540
541 Supports QinQ (queue in queue) offload.
542
543 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
544 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
545 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
546 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
547    ``mbuf.vlan_tci_outer``.
548 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
549   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
550
551
552 .. _nic_features_l3_checksum_offload:
553
554 L3 checksum offload
555 -------------------
556
557 Supports L3 checksum offload.
558
559 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
560 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
561 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
562   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
563 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
564   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
565   ``PKT_RX_IP_CKSUM_NONE``.
566 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
567   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
568
569
570 .. _nic_features_l4_checksum_offload:
571
572 L4 checksum offload
573 -------------------
574
575 Supports L4 checksum offload.
576
577 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.
578 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
579 * **[uses]     user config**: ``dev_conf.rxmode.hw_ip_checksum``.
580 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
581   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
582   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
583 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
584   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
585   ``PKT_RX_L4_CKSUM_NONE``.
586 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
587   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
588
589 .. _nic_features_hw_timestamp:
590
591 Timestamp offload
592 -----------------
593
594 Supports Timestamp.
595
596 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
597 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
598 * **[provides] mbuf**: ``mbuf.timestamp``.
599 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
600
601 .. _nic_features_macsec_offload:
602
603 MACsec offload
604 --------------
605
606 Supports MACsec.
607
608 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
609 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
610 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
611 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
612   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
613
614
615 .. _nic_features_inner_l3_checksum:
616
617 Inner L3 checksum
618 -----------------
619
620 Supports inner packet L3 checksum.
621
622 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
623 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
624 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
625   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
626   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
627   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
628 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
629 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
630 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
631   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
632
633
634 .. _nic_features_inner_l4_checksum:
635
636 Inner L4 checksum
637 -----------------
638
639 Supports inner packet L4 checksum.
640
641
642 .. _nic_features_packet_type_parsing:
643
644 Packet type parsing
645 -------------------
646
647 Supports packet type parsing and returns a list of supported types.
648
649 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
650 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
651
652
653 .. _nic_features_timesync:
654
655 Timesync
656 --------
657
658 Supports IEEE1588/802.1AS timestamping.
659
660 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
661   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
662   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
663 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
664   ``rte_eth_timesync_read_rx_timestamp()``,
665   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
666   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
667
668
669 .. _nic_features_rx_descriptor_status:
670
671 Rx descriptor status
672 --------------------
673
674 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
675 used, status can be "Available", "Done" or "Unavailable". When
676 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
677 not set".
678
679 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
680 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
681 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
682 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
683
684
685 .. _nic_features_tx_descriptor_status:
686
687 Tx descriptor status
688 --------------------
689
690 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
691 or "Unavailable."
692
693 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
694 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
695
696
697 .. _nic_features_basic_stats:
698
699 Basic stats
700 -----------
701
702 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
703 imissed, ierrors, oerrors, rx_nombuf.
704
705 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
706
707 These apply to all drivers.
708
709 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
710 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
711
712
713 .. _nic_features_extended_stats:
714
715 Extended stats
716 --------------
717
718 Supports Extended Statistics, changes from driver to driver.
719
720 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
721 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
722 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
723   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
724   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
725
726
727 .. _nic_features_stats_per_queue:
728
729 Stats per queue
730 ---------------
731
732 Supports configuring per-queue stat counter mapping.
733
734 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
735 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
736   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
737
738
739 .. _nic_features_fw_version:
740
741 FW version
742 ----------
743
744 Supports getting device hardware firmware information.
745
746 * **[implements] eth_dev_ops**: ``fw_version_get``.
747 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
748
749
750 .. _nic_features_eeprom_dump:
751
752 EEPROM dump
753 -----------
754
755 Supports getting/setting device eeprom data.
756
757 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
758 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
759   ``rte_eth_dev_set_eeprom()``.
760
761
762 .. _nic_features_register_dump:
763
764 Registers dump
765 --------------
766
767 Supports retrieving device registers and registering attributes (number of
768 registers and register size).
769
770 * **[implements] eth_dev_ops**: ``get_reg``.
771 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
772
773
774 .. _nic_features_led:
775
776 LED
777 ---
778
779 Supports turning on/off a software controllable LED on a device.
780
781 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
782 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
783
784
785 .. _nic_features_multiprocess_aware:
786
787 Multiprocess aware
788 ------------------
789
790 Driver can be used for primary-secondary process model.
791
792
793 .. _nic_features_bsd_nic_uio:
794
795 BSD nic_uio
796 -----------
797
798 BSD ``nic_uio`` module supported.
799
800
801 .. _nic_features_linux_uio:
802
803 Linux UIO
804 ---------
805
806 Works with ``igb_uio`` kernel module.
807
808 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
809
810 .. _nic_features_linux_vfio:
811
812 Linux VFIO
813 ----------
814
815 Works with ``vfio-pci`` kernel module.
816
817 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
818
819 .. _nic_features_other_kdrv:
820
821 Other kdrv
822 ----------
823
824 Kernel module other than above ones supported.
825
826
827 .. _nic_features_armv7:
828
829 ARMv7
830 -----
831
832 Support armv7 architecture.
833
834 Use ``defconfig_arm-armv7a-*-*``.
835
836
837 .. _nic_features_armv8:
838
839 ARMv8
840 -----
841
842 Support armv8a (64bit) architecture.
843
844 Use ``defconfig_arm64-armv8a-*-*``
845
846
847 .. _nic_features_power8:
848
849 Power8
850 ------
851
852 Support PowerPC architecture.
853
854 Use ``defconfig_ppc_64-power8-*-*``
855
856 .. _nic_features_x86-32:
857
858 x86-32
859 ------
860
861 Support 32bits x86 architecture.
862
863 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
864
865
866 .. _nic_features_x86-64:
867
868 x86-64
869 ------
870
871 Support 64bits x86 architecture.
872
873 Use ``defconfig_x86_64-native-*-*``.
874
875
876 .. _nic_features_usage_doc:
877
878 Usage doc
879 ---------
880
881 Documentation describes usage.
882
883 See ``doc/guides/nics/*.rst``
884
885
886 .. _nic_features_design_doc:
887
888 Design doc
889 ----------
890
891 Documentation describes design.
892
893 See ``doc/guides/nics/*.rst``.
894
895
896 .. _nic_features_perf_doc:
897
898 Perf doc
899 --------
900
901 Documentation describes performance values.
902
903 See ``dpdk.org/doc/perf/*``.
904
905
906
907 .. _nic_features_other:
908
909 Other dev ops not represented by a Feature
910 ------------------------------------------
911
912 * ``rxq_info_get``
913 * ``txq_info_get``
914 * ``vlan_tpid_set``
915 * ``vlan_strip_queue_set``
916 * ``vlan_pvid_set``
917 * ``rx_queue_count``
918 * ``l2_tunnel_offload_set``
919 * ``uc_hash_table_set``
920 * ``uc_all_hash_table_set``
921 * ``udp_tunnel_port_add``
922 * ``udp_tunnel_port_del``
923 * ``l2_tunnel_eth_type_conf``
924 * ``l2_tunnel_offload_set``
925 * ``tx_pkt_prepare``