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