New upstream version 18.02
[deb_dpdk.git] / doc / guides / nics / features.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2017 Intel Corporation.
3
4 Features Overview
5 =================
6
7 This section explains the supported features that are listed in the
8 :doc:`overview`.
9
10 As a guide to implementers it also shows the structs where the features are
11 defined and the APIs that can be use to get/set the values.
12
13 Following 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
20 to provide data by implementing some function, but "provides" is used
21 for cases where provided data can't be represented simply by a function.
22
23 ``[related]``    : Related API with that feature.
24
25
26 .. _nic_features_speed_capabilities:
27
28 Speed capabilities
29 ------------------
30
31 Supports 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
39 Link status
40 -----------
41
42 Supports 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
51 Link status event
52 -----------------
53
54 Supports 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
66 Removal event
67 -------------
68
69 Supports 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
79 Queue status event
80 ------------------
81
82 Supports queue enable/disable events.
83
84 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87 .. _nic_features_rx_interrupt:
88
89 Rx interrupt
90 ------------
91
92 Supports 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
101 Lock-free Tx queue
102 ------------------
103
104 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105 invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
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
114 Fast mbuf free
115 --------------
116
117 Supports optimization for fast release of mbufs following successful Tx.
118 Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
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
126 Free Tx mbuf on demand
127 ----------------------
128
129 Supports 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
137 Queue start/stop
138 ----------------
139
140 Supports 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
150 MTU update
151 ----------
152
153 Supports 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
163 Jumbo frame
164 -----------
165
166 Supports 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
176 Scattered Rx
177 ------------
178
179 Supports 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
190 LRO
191 ---
192
193 Supports 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
204 TSO
205 ---
206
207 Supports 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``.
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
219 Promiscuous mode
220 ----------------
221
222 Supports 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
232 Allmulticast mode
233 -----------------
234
235 Supports 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
245 Unicast MAC filter
246 ------------------
247
248 Supports 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
259 Multicast MAC filter
260 --------------------
261
262 Supports 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
270 RSS hash
271 --------
272
273 Supports 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_rss_key_update:
282
283 RSS key update
284 --------------
285
286 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
287 Receive Side Scaling (RSS) hash key.
288
289 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
290 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
291 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
292   ``rte_eth_dev_rss_hash_conf_get()``.
293
294
295 .. _nic_features_rss_reta_update:
296
297 RSS reta update
298 ---------------
299
300 Supports updating Redirection Table of the Receive Side Scaling (RSS).
301
302 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
303 * **[provides]   rte_eth_dev_info**: ``reta_size``.
304 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
305
306
307 .. _nic_features_vmdq:
308
309 VMDq
310 ----
311
312 Supports Virtual Machine Device Queues (VMDq).
313
314 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
315 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
316 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
317 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
318 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
319
320
321 .. _nic_features_sriov:
322
323 SR-IOV
324 ------
325
326 Driver supports creating Virtual Functions.
327
328 * **[implements] rte_eth_dev_data**: ``sriov``.
329
330 .. _nic_features_dcb:
331
332 DCB
333 ---
334
335 Supports Data Center Bridging (DCB).
336
337 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
338 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
339 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
340 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
341 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
342 * **[implements] eth_dev_ops**: ``get_dcb_info``.
343 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
344
345
346 .. _nic_features_vlan_filter:
347
348 VLAN filter
349 -----------
350
351 Supports filtering of a VLAN Tag identifier.
352
353 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
354 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
355 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
356
357
358 .. _nic_features_ethertype_filter:
359
360 Ethertype filter
361 ----------------
362
363 Supports filtering on Ethernet type.
364
365 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
366 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
367
368 .. _nic_features_ntuple_filter:
369
370 N-tuple filter
371 --------------
372
373 Supports filtering on N-tuple values.
374
375 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
376 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
377
378
379 .. _nic_features_syn_filter:
380
381 SYN filter
382 ----------
383
384 Supports TCP syn filtering.
385
386 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
387 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
388
389
390 .. _nic_features_tunnel_filter:
391
392 Tunnel filter
393 -------------
394
395 Supports tunnel filtering.
396
397 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
398 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
399
400
401 .. _nic_features_flexible_filter:
402
403 Flexible filter
404 ---------------
405
406 Supports a flexible (non-tuple or Ethertype) filter.
407
408 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
409 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
410
411
412 .. _nic_features_hash_filter:
413
414 Hash filter
415 -----------
416
417 Supports Hash filtering.
418
419 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
420 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
421
422
423 .. _nic_features_flow_director:
424
425 Flow director
426 -------------
427
428 Supports Flow Director style filtering to queues.
429
430 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
431 * **[provides]   mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
432   ``PKT_RX_FDIR_FLX``.
433 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
434
435
436 .. _nic_features_flow_control:
437
438 Flow control
439 ------------
440
441 Supports configuring link flow control.
442
443 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
444   ``priority_flow_ctrl_set``.
445 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
446   ``rte_eth_dev_priority_flow_ctrl_set()``.
447
448
449 .. _nic_features_flow_api:
450
451 Flow API
452 --------
453
454 Supports the DPDK Flow API for generic filtering.
455
456 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
457 * **[implements] rte_flow_ops**: ``All``.
458
459
460 .. _nic_features_rate_limitation:
461
462 Rate limitation
463 ---------------
464
465 Supports Tx rate limitation for a queue.
466
467 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
468 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
469
470
471 .. _nic_features_traffic_mirroring:
472
473 Traffic mirroring
474 -----------------
475
476 Supports adding traffic mirroring rules.
477
478 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
479 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
480
481
482 .. _nic_features_inline_crypto_doc:
483
484 Inline crypto
485 -------------
486
487 Supports inline crypto processing (eg. inline IPsec). See Security library and PMD documentation for more details.
488
489 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
490 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
491 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
492   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
493 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
494   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
495 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
496   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
497
498
499 .. _nic_features_crc_offload:
500
501 CRC offload
502 -----------
503
504 Supports CRC stripping by hardware.
505
506 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_CRC_STRIP``.
507
508
509 .. _nic_features_vlan_offload:
510
511 VLAN offload
512 ------------
513
514 Supports VLAN offload to hardware.
515
516 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
517 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
518 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
519 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
520 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
521   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
522 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
523   ``rte_eth_dev_get_vlan_offload()``.
524
525
526 .. _nic_features_qinq_offload:
527
528 QinQ offload
529 ------------
530
531 Supports QinQ (queue in queue) offload.
532
533 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
534 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
535 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
536 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
537    ``mbuf.vlan_tci_outer``.
538 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
539   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
540
541
542 .. _nic_features_l3_checksum_offload:
543
544 L3 checksum offload
545 -------------------
546
547 Supports L3 checksum offload.
548
549 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
550 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
551 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
552   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
553 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
554   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
555   ``PKT_RX_IP_CKSUM_NONE``.
556 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
557   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
558
559
560 .. _nic_features_l4_checksum_offload:
561
562 L4 checksum offload
563 -------------------
564
565 Supports L4 checksum offload.
566
567 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.
568 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
569 * **[uses]     user config**: ``dev_conf.rxmode.hw_ip_checksum``.
570 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
571   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
572   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
573 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
574   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
575   ``PKT_RX_L4_CKSUM_NONE``.
576 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
577   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
578
579 .. _nic_features_hw_timestamp:
580
581 Timestamp offload
582 -----------------
583
584 Supports Timestamp.
585
586 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
587 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
588 * **[provides] mbuf**: ``mbuf.timestamp``.
589 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
590
591 .. _nic_features_macsec_offload:
592
593 MACsec offload
594 --------------
595
596 Supports MACsec.
597
598 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
599 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
600 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
601 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
602   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
603
604
605 .. _nic_features_inner_l3_checksum:
606
607 Inner L3 checksum
608 -----------------
609
610 Supports inner packet L3 checksum.
611
612 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
613 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
614 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
615   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
616   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
617   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
618 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
619 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
620 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
621   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
622
623
624 .. _nic_features_inner_l4_checksum:
625
626 Inner L4 checksum
627 -----------------
628
629 Supports inner packet L4 checksum.
630
631
632 .. _nic_features_packet_type_parsing:
633
634 Packet type parsing
635 -------------------
636
637 Supports packet type parsing and returns a list of supported types.
638
639 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
640 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
641
642
643 .. _nic_features_timesync:
644
645 Timesync
646 --------
647
648 Supports 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
661 Rx descriptor status
662 --------------------
663
664 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
665 used, 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
667 not set".
668
669 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
670 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
671 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
672 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
673
674
675 .. _nic_features_tx_descriptor_status:
676
677 Tx descriptor status
678 --------------------
679
680 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
681 or "Unavailable."
682
683 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
684 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
685
686
687 .. _nic_features_basic_stats:
688
689 Basic stats
690 -----------
691
692 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
693 imissed, ierrors, oerrors, rx_nombuf.
694
695 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
696
697 These 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
705 Extended stats
706 --------------
707
708 Supports 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
719 Stats per queue
720 ---------------
721
722 Supports 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
731 FW version
732 ----------
733
734 Supports 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
742 EEPROM dump
743 -----------
744
745 Supports 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_register_dump:
753
754 Registers dump
755 --------------
756
757 Supports retrieving device registers and registering attributes (number of
758 registers and register size).
759
760 * **[implements] eth_dev_ops**: ``get_reg``.
761 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
762
763
764 .. _nic_features_led:
765
766 LED
767 ---
768
769 Supports turning on/off a software controllable LED on a device.
770
771 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
772 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
773
774
775 .. _nic_features_multiprocess_aware:
776
777 Multiprocess aware
778 ------------------
779
780 Driver can be used for primary-secondary process model.
781
782
783 .. _nic_features_bsd_nic_uio:
784
785 BSD nic_uio
786 -----------
787
788 BSD ``nic_uio`` module supported.
789
790
791 .. _nic_features_linux_uio:
792
793 Linux UIO
794 ---------
795
796 Works with ``igb_uio`` kernel module.
797
798 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
799
800 .. _nic_features_linux_vfio:
801
802 Linux VFIO
803 ----------
804
805 Works with ``vfio-pci`` kernel module.
806
807 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
808
809 .. _nic_features_other_kdrv:
810
811 Other kdrv
812 ----------
813
814 Kernel module other than above ones supported.
815
816
817 .. _nic_features_armv7:
818
819 ARMv7
820 -----
821
822 Support armv7 architecture.
823
824 Use ``defconfig_arm-armv7a-*-*``.
825
826
827 .. _nic_features_armv8:
828
829 ARMv8
830 -----
831
832 Support armv8a (64bit) architecture.
833
834 Use ``defconfig_arm64-armv8a-*-*``
835
836
837 .. _nic_features_power8:
838
839 Power8
840 ------
841
842 Support PowerPC architecture.
843
844 Use ``defconfig_ppc_64-power8-*-*``
845
846 .. _nic_features_x86-32:
847
848 x86-32
849 ------
850
851 Support 32bits x86 architecture.
852
853 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
854
855
856 .. _nic_features_x86-64:
857
858 x86-64
859 ------
860
861 Support 64bits x86 architecture.
862
863 Use ``defconfig_x86_64-native-*-*``.
864
865
866 .. _nic_features_usage_doc:
867
868 Usage doc
869 ---------
870
871 Documentation describes usage.
872
873 See ``doc/guides/nics/*.rst``
874
875
876 .. _nic_features_design_doc:
877
878 Design doc
879 ----------
880
881 Documentation describes design.
882
883 See ``doc/guides/nics/*.rst``.
884
885
886 .. _nic_features_perf_doc:
887
888 Perf doc
889 --------
890
891 Documentation describes performance values.
892
893 See ``dpdk.org/doc/perf/*``.
894
895
896
897 .. _nic_features_other:
898
899 Other dev ops not represented by a Feature
900 ------------------------------------------
901
902 * ``rxq_info_get``
903 * ``txq_info_get``
904 * ``vlan_tpid_set``
905 * ``vlan_strip_queue_set``
906 * ``vlan_pvid_set``
907 * ``rx_queue_count``
908 * ``l2_tunnel_offload_set``
909 * ``uc_hash_table_set``
910 * ``uc_all_hash_table_set``
911 * ``udp_tunnel_port_add``
912 * ``udp_tunnel_port_del``
913 * ``l2_tunnel_eth_type_conf``
914 * ``l2_tunnel_offload_set``
915 * ``tx_pkt_prepare``