ethdev: add mbuf RSS update as an offload
[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``, ``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
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 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
278 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
279 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
280
281
282 .. _nic_features_inner_rss:
283
284 Inner RSS
285 ---------
286
287 Supports RX RSS hashing on Inner headers.
288
289 * **[uses]    rte_flow_action_rss**: ``level``.
290 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
291 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
292
293
294 .. _nic_features_rss_key_update:
295
296 RSS key update
297 --------------
298
299 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
300 Receive Side Scaling (RSS) hash key.
301
302 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
303 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
304 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
305   ``rte_eth_dev_rss_hash_conf_get()``.
306
307
308 .. _nic_features_rss_reta_update:
309
310 RSS reta update
311 ---------------
312
313 Supports updating Redirection Table of the Receive Side Scaling (RSS).
314
315 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
316 * **[provides]   rte_eth_dev_info**: ``reta_size``.
317 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
318
319
320 .. _nic_features_vmdq:
321
322 VMDq
323 ----
324
325 Supports Virtual Machine Device Queues (VMDq).
326
327 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
328 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
329 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
330 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
331 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
332
333
334 .. _nic_features_sriov:
335
336 SR-IOV
337 ------
338
339 Driver supports creating Virtual Functions.
340
341 * **[implements] rte_eth_dev_data**: ``sriov``.
342
343 .. _nic_features_dcb:
344
345 DCB
346 ---
347
348 Supports Data Center Bridging (DCB).
349
350 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
351 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
352 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
353 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
354 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
355 * **[implements] eth_dev_ops**: ``get_dcb_info``.
356 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
357
358
359 .. _nic_features_vlan_filter:
360
361 VLAN filter
362 -----------
363
364 Supports filtering of a VLAN Tag identifier.
365
366 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
367 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
368 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
369
370
371 .. _nic_features_flow_control:
372
373 Flow control
374 ------------
375
376 Supports configuring link flow control.
377
378 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
379   ``priority_flow_ctrl_set``.
380 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
381   ``rte_eth_dev_priority_flow_ctrl_set()``.
382
383
384 .. _nic_features_flow_api:
385
386 Flow API
387 --------
388
389 Supports the DPDK Flow API for generic filtering.
390
391 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
392 * **[implements] rte_flow_ops**: ``All``.
393
394
395 .. _nic_features_rate_limitation:
396
397 Rate limitation
398 ---------------
399
400 Supports Tx rate limitation for a queue.
401
402 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
403 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
404
405
406 .. _nic_features_traffic_mirroring:
407
408 Traffic mirroring
409 -----------------
410
411 Supports adding traffic mirroring rules.
412
413 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
414 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
415
416
417 .. _nic_features_inline_crypto_doc:
418
419 Inline crypto
420 -------------
421
422 Supports inline crypto processing (e.g. inline IPsec). See Security library and PMD documentation for more details.
423
424 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
425 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
426 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
427   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
428 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
429   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
430 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
431   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
432
433
434 .. _nic_features_crc_offload:
435
436 CRC offload
437 -----------
438
439 Supports CRC stripping by hardware.
440 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
441
442 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
443
444
445 .. _nic_features_vlan_offload:
446
447 VLAN offload
448 ------------
449
450 Supports VLAN offload to hardware.
451
452 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
453 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
454 * **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
455 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
456 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
457 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
458   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
459 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
460   ``rte_eth_dev_get_vlan_offload()``.
461
462
463 .. _nic_features_qinq_offload:
464
465 QinQ offload
466 ------------
467
468 Supports QinQ (queue in queue) offload.
469
470 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
471 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
472 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
473 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
474   ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
475   ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
476 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
477   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
478
479
480 .. _nic_features_l3_checksum_offload:
481
482 L3 checksum offload
483 -------------------
484
485 Supports L3 checksum offload.
486
487 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
488 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
489 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
490   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
491 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
492 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
493   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
494   ``PKT_RX_IP_CKSUM_NONE``.
495 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
496   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
497
498
499 .. _nic_features_l4_checksum_offload:
500
501 L4 checksum offload
502 -------------------
503
504 Supports L4 checksum offload.
505
506 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
507 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
508 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
509   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
510   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
511 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
512 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
513   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
514   ``PKT_RX_L4_CKSUM_NONE``.
515 * **[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``,
516   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
517
518 .. _nic_features_hw_timestamp:
519
520 Timestamp offload
521 -----------------
522
523 Supports Timestamp.
524
525 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
526 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
527 * **[provides] mbuf**: ``mbuf.timestamp``.
528 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
529 * **[related] eth_dev_ops**: ``read_clock``.
530
531 .. _nic_features_macsec_offload:
532
533 MACsec offload
534 --------------
535
536 Supports MACsec.
537
538 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
539 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
540 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
541 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
542   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
543
544
545 .. _nic_features_inner_l3_checksum:
546
547 Inner L3 checksum
548 -----------------
549
550 Supports inner packet L3 checksum.
551
552 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
553 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
554 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
555   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
556   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
557   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
558 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
559 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
560 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
561   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
562
563
564 .. _nic_features_inner_l4_checksum:
565
566 Inner L4 checksum
567 -----------------
568
569 Supports inner packet L4 checksum.
570
571 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
572 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
573   ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
574 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
575 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
576   ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
577 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
578 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
579   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
580
581
582 .. _nic_features_packet_type_parsing:
583
584 Packet type parsing
585 -------------------
586
587 Supports packet type parsing and returns a list of supported types.
588 Allows application to set ptypes it is interested in.
589
590 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
591 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
592   ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
593 * **[provides]   mbuf**: ``mbuf.packet_type``.
594
595
596 .. _nic_features_timesync:
597
598 Timesync
599 --------
600
601 Supports IEEE1588/802.1AS timestamping.
602
603 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
604   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
605   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
606 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
607   ``rte_eth_timesync_read_rx_timestamp()``,
608   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
609   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
610
611
612 .. _nic_features_rx_descriptor_status:
613
614 Rx descriptor status
615 --------------------
616
617 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
618 used, status can be "Available", "Done" or "Unavailable". When
619 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
620 not set".
621
622 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
623 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
624 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
625 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
626
627
628 .. _nic_features_tx_descriptor_status:
629
630 Tx descriptor status
631 --------------------
632
633 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
634 or "Unavailable."
635
636 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
637 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
638
639
640 .. _nic_features_basic_stats:
641
642 Basic stats
643 -----------
644
645 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
646 imissed, ierrors, oerrors, rx_nombuf.
647
648 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
649
650 These apply to all drivers.
651
652 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
653 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
654
655
656 .. _nic_features_extended_stats:
657
658 Extended stats
659 --------------
660
661 Supports Extended Statistics, changes from driver to driver.
662
663 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
664 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
665 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
666   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
667   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
668
669
670 .. _nic_features_stats_per_queue:
671
672 Stats per queue
673 ---------------
674
675 Supports configuring per-queue stat counter mapping.
676
677 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
678 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
679   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
680
681
682 .. _nic_features_fw_version:
683
684 FW version
685 ----------
686
687 Supports getting device hardware firmware information.
688
689 * **[implements] eth_dev_ops**: ``fw_version_get``.
690 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
691
692
693 .. _nic_features_eeprom_dump:
694
695 EEPROM dump
696 -----------
697
698 Supports getting/setting device eeprom data.
699
700 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
701 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
702   ``rte_eth_dev_set_eeprom()``.
703
704
705 .. _nic_features_module_eeprom_dump:
706
707 Module EEPROM dump
708 ------------------
709
710 Supports getting information and data of plugin module eeprom.
711
712 * **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
713 * **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
714
715
716 .. _nic_features_register_dump:
717
718 Registers dump
719 --------------
720
721 Supports retrieving device registers and registering attributes (number of
722 registers and register size).
723
724 * **[implements] eth_dev_ops**: ``get_reg``.
725 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
726
727
728 .. _nic_features_led:
729
730 LED
731 ---
732
733 Supports turning on/off a software controllable LED on a device.
734
735 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
736 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
737
738
739 .. _nic_features_multiprocess_aware:
740
741 Multiprocess aware
742 ------------------
743
744 Driver can be used for primary-secondary process model.
745
746
747 .. _nic_features_bsd_nic_uio:
748
749 BSD nic_uio
750 -----------
751
752 BSD ``nic_uio`` module supported.
753
754
755 .. _nic_features_linux_uio:
756
757 Linux UIO
758 ---------
759
760 Works with ``igb_uio`` kernel module.
761
762 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
763
764 .. _nic_features_linux_vfio:
765
766 Linux VFIO
767 ----------
768
769 Works with ``vfio-pci`` kernel module.
770
771 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
772
773 .. _nic_features_other_kdrv:
774
775 Other kdrv
776 ----------
777
778 Kernel module other than above ones supported.
779
780
781 .. _nic_features_armv7:
782
783 ARMv7
784 -----
785
786 Support armv7 architecture.
787
788 Use ``defconfig_arm-armv7a-*-*``.
789
790
791 .. _nic_features_armv8:
792
793 ARMv8
794 -----
795
796 Support armv8a (64bit) architecture.
797
798 Use ``defconfig_arm64-armv8a-*-*``
799
800
801 .. _nic_features_power8:
802
803 Power8
804 ------
805
806 Support PowerPC architecture.
807
808 Use ``defconfig_ppc_64-power8-*-*``
809
810 .. _nic_features_x86-32:
811
812 x86-32
813 ------
814
815 Support 32bits x86 architecture.
816
817 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
818
819
820 .. _nic_features_x86-64:
821
822 x86-64
823 ------
824
825 Support 64bits x86 architecture.
826
827 Use ``defconfig_x86_64-native-*-*``.
828
829
830 .. _nic_features_usage_doc:
831
832 Usage doc
833 ---------
834
835 Documentation describes usage.
836
837 See ``doc/guides/nics/*.rst``
838
839
840 .. _nic_features_design_doc:
841
842 Design doc
843 ----------
844
845 Documentation describes design.
846
847 See ``doc/guides/nics/*.rst``.
848
849
850 .. _nic_features_perf_doc:
851
852 Perf doc
853 --------
854
855 Documentation describes performance values.
856
857 See ``dpdk.org/doc/perf/*``.
858
859 .. _nic_features_runtime_rx_queue_setup:
860
861 Runtime Rx queue setup
862 ----------------------
863
864 Supports Rx queue setup after device started.
865
866 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
867 * **[related]  API**: ``rte_eth_dev_info_get()``.
868
869 .. _nic_features_runtime_tx_queue_setup:
870
871 Runtime Tx queue setup
872 ----------------------
873
874 Supports Tx queue setup after device started.
875
876 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
877 * **[related]  API**: ``rte_eth_dev_info_get()``.
878
879 .. _nic_features_burst_mode_info:
880
881 Burst mode info
882 ---------------
883
884 Supports to get Rx/Tx packet burst mode information.
885
886 * **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
887 * **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
888
889 .. _nic_features_other:
890
891 Other dev ops not represented by a Feature
892 ------------------------------------------
893
894 * ``rxq_info_get``
895 * ``txq_info_get``
896 * ``vlan_tpid_set``
897 * ``vlan_strip_queue_set``
898 * ``vlan_pvid_set``
899 * ``rx_queue_count``
900 * ``l2_tunnel_offload_set``
901 * ``uc_hash_table_set``
902 * ``uc_all_hash_table_set``
903 * ``udp_tunnel_port_add``
904 * ``udp_tunnel_port_del``
905 * ``l2_tunnel_eth_type_conf``
906 * ``l2_tunnel_offload_set``
907 * ``tx_pkt_prepare``