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