doc: add inline crypto feature
[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_inline_crypto_doc:
510
511 Inline crypto
512 -------------
513
514 Supports inline crypto processing (eg. inline IPsec). See Security library and PMD documentation for more details.
515
516 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
517 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
518 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
519   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
520 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
521   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
522 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
523   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
524
525
526 .. _nic_features_crc_offload:
527
528 CRC offload
529 -----------
530
531 Supports CRC stripping by hardware.
532
533 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_CRC_STRIP``.
534
535
536 .. _nic_features_vlan_offload:
537
538 VLAN offload
539 ------------
540
541 Supports VLAN offload to hardware.
542
543 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
544 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
545 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
546 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
547 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
548   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
549 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
550   ``rte_eth_dev_get_vlan_offload()``.
551
552
553 .. _nic_features_qinq_offload:
554
555 QinQ offload
556 ------------
557
558 Supports QinQ (queue in queue) offload.
559
560 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
561 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
562 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
563 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
564    ``mbuf.vlan_tci_outer``.
565 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
566   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
567
568
569 .. _nic_features_l3_checksum_offload:
570
571 L3 checksum offload
572 -------------------
573
574 Supports L3 checksum offload.
575
576 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
577 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
578 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
579   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
580 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
581   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
582   ``PKT_RX_IP_CKSUM_NONE``.
583 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
584   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
585
586
587 .. _nic_features_l4_checksum_offload:
588
589 L4 checksum offload
590 -------------------
591
592 Supports L4 checksum offload.
593
594 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.
595 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
596 * **[uses]     user config**: ``dev_conf.rxmode.hw_ip_checksum``.
597 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
598   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
599   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
600 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
601   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
602   ``PKT_RX_L4_CKSUM_NONE``.
603 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
604   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
605
606 .. _nic_features_hw_timestamp:
607
608 Timestamp offload
609 -----------------
610
611 Supports Timestamp.
612
613 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
614 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
615 * **[provides] mbuf**: ``mbuf.timestamp``.
616 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
617
618 .. _nic_features_macsec_offload:
619
620 MACsec offload
621 --------------
622
623 Supports MACsec.
624
625 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
626 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
627 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
628 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
629   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
630
631
632 .. _nic_features_inner_l3_checksum:
633
634 Inner L3 checksum
635 -----------------
636
637 Supports inner packet L3 checksum.
638
639 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
640 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
641 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
642   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
643   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
644   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
645 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
646 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
647 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
648   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
649
650
651 .. _nic_features_inner_l4_checksum:
652
653 Inner L4 checksum
654 -----------------
655
656 Supports inner packet L4 checksum.
657
658
659 .. _nic_features_packet_type_parsing:
660
661 Packet type parsing
662 -------------------
663
664 Supports packet type parsing and returns a list of supported types.
665
666 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
667 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
668
669
670 .. _nic_features_timesync:
671
672 Timesync
673 --------
674
675 Supports IEEE1588/802.1AS timestamping.
676
677 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
678   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
679   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
680 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
681   ``rte_eth_timesync_read_rx_timestamp()``,
682   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
683   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
684
685
686 .. _nic_features_rx_descriptor_status:
687
688 Rx descriptor status
689 --------------------
690
691 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
692 used, status can be "Available", "Done" or "Unavailable". When
693 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
694 not set".
695
696 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
697 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
698 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
699 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
700
701
702 .. _nic_features_tx_descriptor_status:
703
704 Tx descriptor status
705 --------------------
706
707 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
708 or "Unavailable."
709
710 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
711 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
712
713
714 .. _nic_features_basic_stats:
715
716 Basic stats
717 -----------
718
719 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
720 imissed, ierrors, oerrors, rx_nombuf.
721
722 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
723
724 These apply to all drivers.
725
726 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
727 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
728
729
730 .. _nic_features_extended_stats:
731
732 Extended stats
733 --------------
734
735 Supports Extended Statistics, changes from driver to driver.
736
737 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
738 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
739 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
740   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
741   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
742
743
744 .. _nic_features_stats_per_queue:
745
746 Stats per queue
747 ---------------
748
749 Supports configuring per-queue stat counter mapping.
750
751 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
752 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
753   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
754
755
756 .. _nic_features_fw_version:
757
758 FW version
759 ----------
760
761 Supports getting device hardware firmware information.
762
763 * **[implements] eth_dev_ops**: ``fw_version_get``.
764 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
765
766
767 .. _nic_features_eeprom_dump:
768
769 EEPROM dump
770 -----------
771
772 Supports getting/setting device eeprom data.
773
774 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
775 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
776   ``rte_eth_dev_set_eeprom()``.
777
778
779 .. _nic_features_register_dump:
780
781 Registers dump
782 --------------
783
784 Supports retrieving device registers and registering attributes (number of
785 registers and register size).
786
787 * **[implements] eth_dev_ops**: ``get_reg``.
788 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
789
790
791 .. _nic_features_led:
792
793 LED
794 ---
795
796 Supports turning on/off a software controllable LED on a device.
797
798 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
799 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
800
801
802 .. _nic_features_multiprocess_aware:
803
804 Multiprocess aware
805 ------------------
806
807 Driver can be used for primary-secondary process model.
808
809
810 .. _nic_features_bsd_nic_uio:
811
812 BSD nic_uio
813 -----------
814
815 BSD ``nic_uio`` module supported.
816
817
818 .. _nic_features_linux_uio:
819
820 Linux UIO
821 ---------
822
823 Works with ``igb_uio`` kernel module.
824
825 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
826
827 .. _nic_features_linux_vfio:
828
829 Linux VFIO
830 ----------
831
832 Works with ``vfio-pci`` kernel module.
833
834 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
835
836 .. _nic_features_other_kdrv:
837
838 Other kdrv
839 ----------
840
841 Kernel module other than above ones supported.
842
843
844 .. _nic_features_armv7:
845
846 ARMv7
847 -----
848
849 Support armv7 architecture.
850
851 Use ``defconfig_arm-armv7a-*-*``.
852
853
854 .. _nic_features_armv8:
855
856 ARMv8
857 -----
858
859 Support armv8a (64bit) architecture.
860
861 Use ``defconfig_arm64-armv8a-*-*``
862
863
864 .. _nic_features_power8:
865
866 Power8
867 ------
868
869 Support PowerPC architecture.
870
871 Use ``defconfig_ppc_64-power8-*-*``
872
873 .. _nic_features_x86-32:
874
875 x86-32
876 ------
877
878 Support 32bits x86 architecture.
879
880 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
881
882
883 .. _nic_features_x86-64:
884
885 x86-64
886 ------
887
888 Support 64bits x86 architecture.
889
890 Use ``defconfig_x86_64-native-*-*``.
891
892
893 .. _nic_features_usage_doc:
894
895 Usage doc
896 ---------
897
898 Documentation describes usage.
899
900 See ``doc/guides/nics/*.rst``
901
902
903 .. _nic_features_design_doc:
904
905 Design doc
906 ----------
907
908 Documentation describes design.
909
910 See ``doc/guides/nics/*.rst``.
911
912
913 .. _nic_features_perf_doc:
914
915 Perf doc
916 --------
917
918 Documentation describes performance values.
919
920 See ``dpdk.org/doc/perf/*``.
921
922
923
924 .. _nic_features_other:
925
926 Other dev ops not represented by a Feature
927 ------------------------------------------
928
929 * ``rxq_info_get``
930 * ``txq_info_get``
931 * ``vlan_tpid_set``
932 * ``vlan_strip_queue_set``
933 * ``vlan_pvid_set``
934 * ``rx_queue_count``
935 * ``l2_tunnel_offload_set``
936 * ``uc_hash_table_set``
937 * ``uc_all_hash_table_set``
938 * ``udp_tunnel_port_add``
939 * ``udp_tunnel_port_del``
940 * ``l2_tunnel_eth_type_conf``
941 * ``l2_tunnel_offload_set``
942 * ``tx_pkt_prepare``