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