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