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