e346018e4b806355770a8007fd54d38f69a671d9
[dpdk.git] / doc / guides / nics / features.rst
1 ..  SPDX-License-Identifier: BSD-3-Clause
2     Copyright(c) 2017 Intel Corporation.
3
4 Features Overview
5 =================
6
7 This section explains the supported features that are listed in the
8 :doc:`overview`.
9
10 As a guide to implementers it also shows the structs where the features are
11 defined and the APIs that can be use to get/set the values.
12
13 Following tags used for feature details, these are from driver point of view:
14
15 ``[uses]``       : Driver uses some kind of input from the application.
16
17 ``[implements]`` : Driver implements a functionality.
18
19 ``[provides]``   : Driver provides some kind of data to the application. It is possible
20 to provide data by implementing some function, but "provides" is used
21 for cases where provided data can't be represented simply by a function.
22
23 ``[related]``    : Related API with that feature.
24
25
26 .. _nic_features_speed_capabilities:
27
28 Speed capabilities
29 ------------------
30
31 Supports getting the speed capabilities that the current device is capable of.
32
33 * **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
34 * **[related]  API**: ``rte_eth_dev_info_get()``.
35
36
37 .. _nic_features_link_status:
38
39 Link status
40 -----------
41
42 Supports getting the link speed, duplex mode and link state (up/down).
43
44 * **[implements] eth_dev_ops**: ``link_update``.
45 * **[implements] rte_eth_dev_data**: ``dev_link``.
46 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
47
48
49 .. _nic_features_link_status_event:
50
51 Link status event
52 -----------------
53
54 Supports Link Status Change interrupts.
55
56 * **[uses]       user config**: ``dev_conf.intr_conf.lsc``.
57 * **[uses]       rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
58 * **[uses]       rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
59 * **[implements] rte_eth_dev_data**: ``dev_link``.
60 * **[provides]   rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
61 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
62
63
64 .. _nic_features_removal_event:
65
66 Removal event
67 -------------
68
69 Supports device removal interrupts.
70
71 * **[uses]     user config**: ``dev_conf.intr_conf.rmv``.
72 * **[uses]     rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
73 * **[uses]     rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
74 * **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
75
76
77 .. _nic_features_queue_status_event:
78
79 Queue status event
80 ------------------
81
82 Supports queue enable/disable events.
83
84 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
85
86
87 .. _nic_features_rx_interrupt:
88
89 Rx interrupt
90 ------------
91
92 Supports Rx interrupts.
93
94 * **[uses]       user config**: ``dev_conf.intr_conf.rxq``.
95 * **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
96 * **[related]    API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
97
98
99 .. _nic_features_lock-free_tx_queue:
100
101 Lock-free Tx queue
102 ------------------
103
104 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
105 invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
106
107 * **[uses]    rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MT_LOCKFREE``.
108 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
109 * **[related]  API**: ``rte_eth_tx_burst()``.
110
111
112 .. _nic_features_fast_mbuf_free:
113
114 Fast mbuf free
115 --------------
116
117 Supports optimization for fast release of mbufs following successful Tx.
118 Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
119
120 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
121 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
122
123
124 .. _nic_features_free_tx_mbuf_on_demand:
125
126 Free Tx mbuf on demand
127 ----------------------
128
129 Supports freeing consumed buffers on a Tx ring.
130
131 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
132 * **[related]    API**: ``rte_eth_tx_done_cleanup()``.
133
134
135 .. _nic_features_queue_start_stop:
136
137 Queue start/stop
138 ----------------
139
140 Supports starting/stopping a specific Rx/Tx queue of a port.
141
142 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
143   ``tx_queue_stop``.
144 * **[related]    API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
145   ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
146
147
148 .. _nic_features_mtu_update:
149
150 MTU update
151 ----------
152
153 Supports updating port MTU.
154
155 * **[implements] eth_dev_ops**: ``mtu_set``.
156 * **[implements] rte_eth_dev_data**: ``mtu``.
157 * **[provides]   rte_eth_dev_info**: ``max_rx_pktlen``.
158 * **[related]    API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
159
160
161 .. _nic_features_jumbo_frame:
162
163 Jumbo frame
164 -----------
165
166 Supports Rx jumbo frames.
167
168 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
169   ``dev_conf.rxmode.max_rx_pkt_len``.
170 * **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
171 * **[related] API**: ``rte_eth_dev_set_mtu()``.
172
173
174 .. _nic_features_scattered_rx:
175
176 Scattered Rx
177 ------------
178
179 Supports receiving segmented mbufs.
180
181 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
182 * **[implements] datapath**: ``Scattered Rx function``.
183 * **[implements] rte_eth_dev_data**: ``scattered_rx``.
184 * **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
185 * **[related]    eth_dev_ops**: ``rx_pkt_burst``.
186
187
188 .. _nic_features_buffer_split:
189
190 Buffer Split on Rx
191 ------------------
192
193 Scatters the packets being received on specified boundaries to segmented mbufs.
194
195 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
196 * **[uses]       rte_eth_rxconf**: ``rx_conf.rx_seg, rx_conf.rx_nseg``.
197 * **[implements] datapath**: ``Buffer Split functionality``.
198 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa:RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT``.
199 * **[related] API**: ``rte_eth_rx_queue_setup()``.
200
201
202 .. _nic_features_lro:
203
204 LRO
205 ---
206
207 Supports Large Receive Offload.
208
209 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
210   ``dev_conf.rxmode.max_lro_pkt_size``.
211 * **[implements] datapath**: ``LRO functionality``.
212 * **[implements] rte_eth_dev_data**: ``lro``.
213 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_LRO``, ``mbuf.tso_segsz``.
214 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_TCP_LRO``.
215 * **[provides]   rte_eth_dev_info**: ``max_lro_pkt_size``.
216
217
218 .. _nic_features_tso:
219
220 TSO
221 ---
222
223 Supports TCP Segmentation Offloading.
224
225 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_TCP_TSO``.
226 * **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
227 * **[uses]       mbuf**: ``mbuf.ol_flags:`` ``PKT_TX_TCP_SEG``, ``PKT_TX_IPV4``, ``PKT_TX_IPV6``, ``PKT_TX_IP_CKSUM``.
228 * **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
229 * **[implements] datapath**: ``TSO functionality``.
230 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
231
232
233 .. _nic_features_promiscuous_mode:
234
235 Promiscuous mode
236 ----------------
237
238 Supports enabling/disabling promiscuous mode for a port.
239
240 * **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
241 * **[implements] rte_eth_dev_data**: ``promiscuous``.
242 * **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
243   ``rte_eth_promiscuous_get()``.
244
245
246 .. _nic_features_allmulticast_mode:
247
248 Allmulticast mode
249 -----------------
250
251 Supports enabling/disabling receiving multicast frames.
252
253 * **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
254 * **[implements] rte_eth_dev_data**: ``all_multicast``.
255 * **[related]    API**: ``rte_eth_allmulticast_enable()``,
256   ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
257
258
259 .. _nic_features_unicast_mac_filter:
260
261 Unicast MAC filter
262 ------------------
263
264 Supports adding MAC addresses to enable incoming filtering of packets.
265
266 * **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
267 * **[implements] rte_eth_dev_data**: ``mac_addrs``.
268 * **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
269   ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
270   ``rte_eth_macaddr_get()``.
271
272
273 .. _nic_features_multicast_mac_filter:
274
275 Multicast MAC filter
276 --------------------
277
278 Supports setting multicast addresses to filter.
279
280 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
281 * **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
282
283
284 .. _nic_features_rss_hash:
285
286 RSS hash
287 --------
288
289 Supports RSS hashing on RX.
290
291 * **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
292 * **[uses]     user config**: ``dev_conf.rx_adv_conf.rss_conf``.
293 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
294 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
295 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
296
297
298 .. _nic_features_inner_rss:
299
300 Inner RSS
301 ---------
302
303 Supports RX RSS hashing on Inner headers.
304
305 * **[uses]    rte_flow_action_rss**: ``level``.
306 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_RSS_HASH``.
307 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
308
309
310 .. _nic_features_rss_key_update:
311
312 RSS key update
313 --------------
314
315 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
316 Receive Side Scaling (RSS) hash key.
317
318 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
319 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
320 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
321   ``rte_eth_dev_rss_hash_conf_get()``.
322
323
324 .. _nic_features_rss_reta_update:
325
326 RSS reta update
327 ---------------
328
329 Supports updating Redirection Table of the Receive Side Scaling (RSS).
330
331 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
332 * **[provides]   rte_eth_dev_info**: ``reta_size``.
333 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
334
335
336 .. _nic_features_vmdq:
337
338 VMDq
339 ----
340
341 Supports Virtual Machine Device Queues (VMDq).
342
343 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
344 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
345 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
346 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
347 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
348
349
350 .. _nic_features_sriov:
351
352 SR-IOV
353 ------
354
355 Driver supports creating Virtual Functions.
356
357 * **[implements] rte_eth_dev_data**: ``sriov``.
358
359 .. _nic_features_dcb:
360
361 DCB
362 ---
363
364 Supports Data Center Bridging (DCB).
365
366 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
367 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
368 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
369 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
370 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
371 * **[implements] eth_dev_ops**: ``get_dcb_info``.
372 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
373
374
375 .. _nic_features_vlan_filter:
376
377 VLAN filter
378 -----------
379
380 Supports filtering of a VLAN Tag identifier.
381
382 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
383 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
384 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
385
386
387 .. _nic_features_flow_control:
388
389 Flow control
390 ------------
391
392 Supports configuring link flow control.
393
394 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
395   ``priority_flow_ctrl_set``.
396 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
397   ``rte_eth_dev_priority_flow_ctrl_set()``.
398
399
400 .. _nic_features_rate_limitation:
401
402 Rate limitation
403 ---------------
404
405 Supports Tx rate limitation for a queue.
406
407 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
408 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
409
410
411 .. _nic_features_inline_crypto_doc:
412
413 Inline crypto
414 -------------
415
416 Supports inline crypto processing defined by rte_security library to perform crypto
417 operations of security protocol while packet is received in NIC. NIC is not aware
418 of protocol operations. See Security library and PMD documentation for more details.
419
420 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
421 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
422 * **[uses]       mbuf**: ``mbuf.l2_len``.
423 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
424   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``capabilities_get``.
425 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
426   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
427 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
428   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
429 * **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO``
430
431
432 .. _nic_features_inline_protocol_doc:
433
434 Inline protocol
435 ---------------
436
437 Supports inline protocol processing defined by rte_security library to perform
438 protocol processing for the security protocol (e.g. IPsec, MACSEC) while the
439 packet is received at NIC. The NIC is capable of understanding the security
440 protocol operations. See security library and PMD documentation for more details.
441
442 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SECURITY``,
443 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_SECURITY``.
444 * **[uses]       mbuf**: ``mbuf.l2_len``.
445 * **[implements] rte_security_ops**: ``session_create``, ``session_update``,
446   ``session_stats_get``, ``session_destroy``, ``set_pkt_metadata``, ``get_userdata``,
447   ``capabilities_get``.
448 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_SECURITY``,
449   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_SECURITY``.
450 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD``,
451   ``mbuf.ol_flags:PKT_TX_SEC_OFFLOAD``, ``mbuf.ol_flags:PKT_RX_SEC_OFFLOAD_FAILED``.
452 * **[provides]   rte_security_ops, capabilities_get**:  ``action: RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL``
453
454
455 .. _nic_features_crc_offload:
456
457 CRC offload
458 -----------
459
460 Supports CRC stripping by hardware.
461 A PMD assumed to support CRC stripping by default. PMD should advertise if it supports keeping CRC.
462
463 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_KEEP_CRC``.
464
465
466 .. _nic_features_vlan_offload:
467
468 VLAN offload
469 ------------
470
471 Supports VLAN offload to hardware.
472
473 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
474 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
475 * **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_VLAN``, ``mbuf.vlan_tci``.
476 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
477 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN`` ``mbuf.vlan_tci``.
478 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
479   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
480 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
481   ``rte_eth_dev_get_vlan_offload()``.
482
483
484 .. _nic_features_qinq_offload:
485
486 QinQ offload
487 ------------
488
489 Supports QinQ (queue in queue) offload.
490
491 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
492 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
493 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ``, ``mbuf.vlan_tci_outer``.
494 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.ol_flags:PKT_RX_QINQ``,
495   ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.ol_flags:PKT_RX_VLAN``
496   ``mbuf.vlan_tci``, ``mbuf.vlan_tci_outer``.
497 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
498   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
499
500
501 .. _nic_features_fec:
502
503 FEC
504 ---
505
506 Supports Forward error correction. Forward error correction (FEC) is a bit error correction mode.
507 It adds error correction information to data packets at the transmit end, and uses the error correction
508 information to correct the bit errors generated during data packet transmission at the receive end. This
509 improves signal quality but also brings a delay to signals. This function can be enabled or disabled as required.
510
511 * **[implements] eth_dev_ops**: ``fec_get_capability``, ``fec_get``, ``fec_set``.
512 * **[provides]   rte_eth_fec_capa**: ``speed:ETH_SPEED_NUM_*``, ``capa:RTE_ETH_FEC_MODE_TO_CAPA()``.
513 * **[related]    API**: ``rte_eth_fec_get_capability()``, ``rte_eth_fec_get()``, ``rte_eth_fec_set()``.
514
515
516 .. _nic_features_l3_checksum_offload:
517
518 L3 checksum offload
519 -------------------
520
521 Supports L3 checksum offload.
522
523 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
524 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
525 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
526   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
527 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
528 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
529   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
530   ``PKT_RX_IP_CKSUM_NONE``.
531 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
532   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
533
534
535 .. _nic_features_l4_checksum_offload:
536
537 L4 checksum offload
538 -------------------
539
540 Supports L4 checksum offload.
541
542 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM,DEV_RX_OFFLOAD_SCTP_CKSUM``.
543 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
544 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
545   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
546   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
547 * **[uses]     mbuf**: ``mbuf.l2_len``, ``mbuf.l3_len``.
548 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
549   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
550   ``PKT_RX_L4_CKSUM_NONE``.
551 * **[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``,
552   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
553
554 .. _nic_features_hw_timestamp:
555
556 Timestamp offload
557 -----------------
558
559 Supports Timestamp.
560
561 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
562 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
563 * **[provides] mbuf**: ``mbuf.timestamp``.
564 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
565 * **[related] eth_dev_ops**: ``read_clock``.
566
567 .. _nic_features_macsec_offload:
568
569 MACsec offload
570 --------------
571
572 Supports MACsec.
573
574 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
575 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
576 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
577 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
578   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
579
580
581 .. _nic_features_inner_l3_checksum:
582
583 Inner L3 checksum
584 -----------------
585
586 Supports inner packet L3 checksum.
587
588 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
589 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
590 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
591   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
592   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
593   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
594 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
595 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_IP_CKSUM_BAD``.
596 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
597   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
598
599
600 .. _nic_features_inner_l4_checksum:
601
602 Inner L4 checksum
603 -----------------
604
605 Supports inner packet L4 checksum.
606
607 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``.
608 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_OUTER_L4_CKSUM_UNKNOWN`` |
609   ``PKT_RX_OUTER_L4_CKSUM_BAD`` | ``PKT_RX_OUTER_L4_CKSUM_GOOD`` | ``PKT_RX_OUTER_L4_CKSUM_INVALID``.
610 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
611 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
612   ``mbuf.ol_flags:PKT_TX_OUTER_UDP_CKSUM``.
613 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
614 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_UDP_CKSUM``,
615   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
616
617
618 .. _nic_features_packet_type_parsing:
619
620 Packet type parsing
621 -------------------
622
623 Supports packet type parsing and returns a list of supported types.
624 Allows application to set ptypes it is interested in.
625
626 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``,
627 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``,
628   ``rte_eth_dev_set_ptypes()``, ``dev_ptypes_set``.
629 * **[provides]   mbuf**: ``mbuf.packet_type``.
630
631
632 .. _nic_features_timesync:
633
634 Timesync
635 --------
636
637 Supports IEEE1588/802.1AS timestamping.
638
639 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
640   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
641   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
642 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
643   ``rte_eth_timesync_read_rx_timestamp()``,
644   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
645   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
646
647
648 .. _nic_features_rx_descriptor_status:
649
650 Rx descriptor status
651 --------------------
652
653 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
654 used, status can be "Available", "Done" or "Unavailable". When
655 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
656 not set".
657
658 * **[implements] rte_eth_dev**: ``rx_descriptor_status``.
659 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
660 * **[implements] rte_eth_dev**: ``rx_descriptor_done``.
661 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
662
663
664 .. _nic_features_tx_descriptor_status:
665
666 Tx descriptor status
667 --------------------
668
669 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
670 or "Unavailable."
671
672 * **[implements] rte_eth_dev**: ``tx_descriptor_status``.
673 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
674
675
676 .. _nic_features_basic_stats:
677
678 Basic stats
679 -----------
680
681 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
682 imissed, ierrors, oerrors, rx_nombuf.
683
684 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
685
686 These apply to all drivers.
687
688 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
689 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
690
691
692 .. _nic_features_extended_stats:
693
694 Extended stats
695 --------------
696
697 Supports Extended Statistics, changes from driver to driver.
698
699 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
700 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
701 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
702   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
703   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
704
705
706 .. _nic_features_stats_per_queue:
707
708 Stats per queue
709 ---------------
710
711 Supports configuring per-queue stat counter mapping.
712
713 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
714 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
715   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
716
717
718 .. _nic_features_fw_version:
719
720 FW version
721 ----------
722
723 Supports getting device hardware firmware information.
724
725 * **[implements] eth_dev_ops**: ``fw_version_get``.
726 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
727
728
729 .. _nic_features_eeprom_dump:
730
731 EEPROM dump
732 -----------
733
734 Supports getting/setting device eeprom data.
735
736 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
737 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
738   ``rte_eth_dev_set_eeprom()``.
739
740
741 .. _nic_features_module_eeprom_dump:
742
743 Module EEPROM dump
744 ------------------
745
746 Supports getting information and data of plugin module eeprom.
747
748 * **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``.
749 * **[related]    API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``.
750
751
752 .. _nic_features_register_dump:
753
754 Registers dump
755 --------------
756
757 Supports retrieving device registers and registering attributes (number of
758 registers and register size).
759
760 * **[implements] eth_dev_ops**: ``get_reg``.
761 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
762
763
764 .. _nic_features_led:
765
766 LED
767 ---
768
769 Supports turning on/off a software controllable LED on a device.
770
771 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
772 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
773
774
775 .. _nic_features_multiprocess_aware:
776
777 Multiprocess aware
778 ------------------
779
780 Driver can be used for primary-secondary process model.
781
782
783 .. _nic_features_freebsd:
784
785 FreeBSD
786 -------
787
788 Supports running on FreeBSD.
789
790
791 .. _nic_features_linux:
792
793 Linux
794 -----
795
796 Supports running on Linux.
797
798
799 .. _nic_features_windows:
800
801 Windows
802 -------
803
804 Supports running on Windows.
805
806
807 .. _nic_features_armv7:
808
809 ARMv7
810 -----
811
812 Support armv7 architecture.
813
814
815 .. _nic_features_armv8:
816
817 ARMv8
818 -----
819
820 Support armv8a (64bit) architecture.
821
822
823 .. _nic_features_power8:
824
825 Power8
826 ------
827
828 Support PowerPC architecture.
829
830
831 .. _nic_features_x86-32:
832
833 x86-32
834 ------
835
836 Support 32bits x86 architecture.
837
838
839 .. _nic_features_x86-64:
840
841 x86-64
842 ------
843
844 Support 64bits x86 architecture.
845
846
847 .. _nic_features_usage_doc:
848
849 Usage doc
850 ---------
851
852 Documentation describes usage.
853
854 See ``doc/guides/nics/*.rst``
855
856
857 .. _nic_features_design_doc:
858
859 Design doc
860 ----------
861
862 Documentation describes design.
863
864 See ``doc/guides/nics/*.rst``.
865
866
867 .. _nic_features_perf_doc:
868
869 Perf doc
870 --------
871
872 Documentation describes performance values.
873
874 See ``dpdk.org/doc/perf/*``.
875
876 .. _nic_features_runtime_rx_queue_setup:
877
878 Runtime Rx queue setup
879 ----------------------
880
881 Supports Rx queue setup after device started.
882
883 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP``.
884 * **[related]  API**: ``rte_eth_dev_info_get()``.
885
886 .. _nic_features_runtime_tx_queue_setup:
887
888 Runtime Tx queue setup
889 ----------------------
890
891 Supports Tx queue setup after device started.
892
893 * **[provides] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP``.
894 * **[related]  API**: ``rte_eth_dev_info_get()``.
895
896 .. _nic_features_burst_mode_info:
897
898 Burst mode info
899 ---------------
900
901 Supports to get Rx/Tx packet burst mode information.
902
903 * **[implements] eth_dev_ops**: ``rx_burst_mode_get``, ``tx_burst_mode_get``.
904 * **[related] API**: ``rte_eth_rx_burst_mode_get()``, ``rte_eth_tx_burst_mode_get()``.
905
906 .. _nic_features_get_monitor_addr:
907
908 PMD power management using monitor addresses
909 --------------------------------------------
910
911 Supports getting a monitoring condition to use together with Ethernet PMD power
912 management (see :doc:`../prog_guide/power_man` for more details).
913
914 * **[implements] eth_dev_ops**: ``get_monitor_addr``
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 * ``uc_hash_table_set``
928 * ``uc_all_hash_table_set``
929 * ``udp_tunnel_port_add``
930 * ``udp_tunnel_port_del``
931 * ``tx_pkt_prepare``