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