ethdev: introduce Rx queue offloads API
[dpdk.git] / doc / guides / nics / features.rst
1 ..  BSD LICENSE
2     Copyright(c) 2017 Intel Corporation. All rights reserved.
3     All rights reserved.
4
5     Redistribution and use in source and binary forms, with or without
6     modification, are permitted provided that the following conditions
7     are met:
8
9     * Redistributions of source code must retain the above copyright
10     notice, this list of conditions and the following disclaimer.
11     * Redistributions in binary form must reproduce the above copyright
12     notice, this list of conditions and the following disclaimer in
13     the documentation and/or other materials provided with the
14     distribution.
15     * Neither the name of Intel Corporation nor the names of its
16     contributors may be used to endorse or promote products derived
17     from this software without specific prior written permission.
18
19     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20     "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22     A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23     OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 Features Overview
32 =================
33
34 This section explains the supported features that are listed in the
35 :doc:`overview`.
36
37 As a guide to implementers it also shows the structs where the features are
38 defined and the APIs that can be use to get/set the values.
39
40 Following tags used for feature details, these are from driver point of view:
41
42 ``[uses]``       : Driver uses some kind of input from the application.
43
44 ``[implements]`` : Driver implements a functionality.
45
46 ``[provides]``   : Driver provides some kind of data to the application. It is possible
47 to provide data by implementing some function, but "provides" is used
48 for cases where provided data can't be represented simply by a function.
49
50 ``[related]``    : Related API with that feature.
51
52
53 .. _nic_features_speed_capabilities:
54
55 Speed capabilities
56 ------------------
57
58 Supports getting the speed capabilities that the current device is capable of.
59
60 * **[provides] rte_eth_dev_info**: ``speed_capa:ETH_LINK_SPEED_*``.
61 * **[related]  API**: ``rte_eth_dev_info_get()``.
62
63
64 .. _nic_features_link_status:
65
66 Link status
67 -----------
68
69 Supports getting the link speed, duplex mode and link state (up/down).
70
71 * **[implements] eth_dev_ops**: ``link_update``.
72 * **[implements] rte_eth_dev_data**: ``dev_link``.
73 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
74
75
76 .. _nic_features_link_status_event:
77
78 Link status event
79 -----------------
80
81 Supports Link Status Change interrupts.
82
83 * **[uses]       user config**: ``dev_conf.intr_conf.lsc``.
84 * **[uses]       rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_LSC``.
85 * **[uses]       rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_LSC``.
86 * **[implements] rte_eth_dev_data**: ``dev_link``.
87 * **[provides]   rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_LSC``.
88 * **[related]    API**: ``rte_eth_link_get()``, ``rte_eth_link_get_nowait()``.
89
90
91 .. _nic_features_removal_event:
92
93 Removal event
94 -------------
95
96 Supports device removal interrupts.
97
98 * **[uses]     user config**: ``dev_conf.intr_conf.rmv``.
99 * **[uses]     rte_eth_dev_data**: ``dev_flags:RTE_ETH_DEV_INTR_RMV``.
100 * **[uses]     rte_eth_event_type**: ``RTE_ETH_EVENT_INTR_RMV``.
101 * **[provides] rte_pci_driver.drv_flags**: ``RTE_PCI_DRV_INTR_RMV``.
102
103
104 .. _nic_features_queue_status_event:
105
106 Queue status event
107 ------------------
108
109 Supports queue enable/disable events.
110
111 * **[uses] rte_eth_event_type**: ``RTE_ETH_EVENT_QUEUE_STATE``.
112
113
114 .. _nic_features_rx_interrupt:
115
116 Rx interrupt
117 ------------
118
119 Supports Rx interrupts.
120
121 * **[uses]       user config**: ``dev_conf.intr_conf.rxq``.
122 * **[implements] eth_dev_ops**: ``rx_queue_intr_enable``, ``rx_queue_intr_disable``.
123 * **[related]    API**: ``rte_eth_dev_rx_intr_enable()``, ``rte_eth_dev_rx_intr_disable()``.
124
125
126 .. _nic_features_lock-free_tx_queue:
127
128 Lock-free Tx queue
129 ------------------
130
131 If a PMD advertises DEV_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can
132 invoke rte_eth_tx_burst() concurrently on the same Tx queue without SW lock.
133
134 * **[provides] rte_eth_dev_info**: ``tx_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
135 * **[related]  API**: ``rte_eth_tx_burst()``.
136
137
138 .. _nic_features_free_tx_mbuf_on_demand:
139
140 Free Tx mbuf on demand
141 ----------------------
142
143 Supports freeing consumed buffers on a Tx ring.
144
145 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
146 * **[related]    API**: ``rte_eth_tx_done_cleanup()``.
147
148
149 .. _nic_features_queue_start_stop:
150
151 Queue start/stop
152 ----------------
153
154 Supports starting/stopping a specific Rx/Tx queue of a port.
155
156 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
157   ``tx_queue_stop``.
158 * **[related]    API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
159   ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
160
161
162 .. _nic_features_mtu_update:
163
164 MTU update
165 ----------
166
167 Supports updating port MTU.
168
169 * **[implements] eth_dev_ops**: ``mtu_set``.
170 * **[implements] rte_eth_dev_data**: ``mtu``.
171 * **[provides]   rte_eth_dev_info**: ``max_rx_pktlen``.
172 * **[related]    API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
173
174
175 .. _nic_features_jumbo_frame:
176
177 Jumbo frame
178 -----------
179
180 Supports Rx jumbo frames.
181
182 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
183   ``dev_conf.rxmode.max_rx_pkt_len``.
184 * **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
185 * **[related] API**: ``rte_eth_dev_set_mtu()``.
186
187
188 .. _nic_features_scattered_rx:
189
190 Scattered Rx
191 ------------
192
193 Supports receiving segmented mbufs.
194
195 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
196 * **[implements] datapath**: ``Scattered Rx function``.
197 * **[implements] rte_eth_dev_data**: ``scattered_rx``.
198 * **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
199 * **[related]    eth_dev_ops**: ``rx_pkt_burst``.
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 * **[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
215
216 .. _nic_features_tso:
217
218 TSO
219 ---
220
221 Supports TCP Segmentation Offloading.
222
223 * **[uses]       rte_eth_desc_lim**: ``nb_seg_max``, ``nb_mtu_seg_max``.
224 * **[uses]       mbuf**: ``mbuf.ol_flags:PKT_TX_TCP_SEG``.
225 * **[uses]       mbuf**: ``mbuf.tso_segsz``, ``mbuf.l2_len``, ``mbuf.l3_len``, ``mbuf.l4_len``.
226 * **[implements] datapath**: ``TSO functionality``.
227 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa:DEV_TX_OFFLOAD_TCP_TSO,DEV_TX_OFFLOAD_UDP_TSO``.
228
229
230 .. _nic_features_promiscuous_mode:
231
232 Promiscuous mode
233 ----------------
234
235 Supports enabling/disabling promiscuous mode for a port.
236
237 * **[implements] eth_dev_ops**: ``promiscuous_enable``, ``promiscuous_disable``.
238 * **[implements] rte_eth_dev_data**: ``promiscuous``.
239 * **[related]    API**: ``rte_eth_promiscuous_enable()``, ``rte_eth_promiscuous_disable()``,
240   ``rte_eth_promiscuous_get()``.
241
242
243 .. _nic_features_allmulticast_mode:
244
245 Allmulticast mode
246 -----------------
247
248 Supports enabling/disabling receiving multicast frames.
249
250 * **[implements] eth_dev_ops**: ``allmulticast_enable``, ``allmulticast_disable``.
251 * **[implements] rte_eth_dev_data**: ``all_multicast``.
252 * **[related]    API**: ``rte_eth_allmulticast_enable()``,
253   ``rte_eth_allmulticast_disable()``, ``rte_eth_allmulticast_get()``.
254
255
256 .. _nic_features_unicast_mac_filter:
257
258 Unicast MAC filter
259 ------------------
260
261 Supports adding MAC addresses to enable whitelist filtering to accept packets.
262
263 * **[implements] eth_dev_ops**: ``mac_addr_set``, ``mac_addr_add``, ``mac_addr_remove``.
264 * **[implements] rte_eth_dev_data**: ``mac_addrs``.
265 * **[related]    API**: ``rte_eth_dev_default_mac_addr_set()``,
266   ``rte_eth_dev_mac_addr_add()``, ``rte_eth_dev_mac_addr_remove()``,
267   ``rte_eth_macaddr_get()``.
268
269
270 .. _nic_features_multicast_mac_filter:
271
272 Multicast MAC filter
273 --------------------
274
275 Supports setting multicast addresses to filter.
276
277 * **[implements] eth_dev_ops**: ``set_mc_addr_list``.
278 * **[related]    API**: ``rte_eth_dev_set_mc_addr_list()``.
279
280
281 .. _nic_features_rss_hash:
282
283 RSS hash
284 --------
285
286 Supports RSS hashing on RX.
287
288 * **[uses]     user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_RSS_FLAG``.
289 * **[uses]     user config**: ``dev_conf.rx_adv_conf.rss_conf``.
290 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
291 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
292
293
294 .. _nic_features_rss_key_update:
295
296 RSS key update
297 --------------
298
299 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
300 Receive Side Scaling (RSS) hash key.
301
302 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
303 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
304 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
305   ``rte_eth_dev_rss_hash_conf_get()``.
306
307
308 .. _nic_features_rss_reta_update:
309
310 RSS reta update
311 ---------------
312
313 Supports updating Redirection Table of the Receive Side Scaling (RSS).
314
315 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
316 * **[provides]   rte_eth_dev_info**: ``reta_size``.
317 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
318
319
320 .. _nic_features_vmdq:
321
322 VMDq
323 ----
324
325 Supports Virtual Machine Device Queues (VMDq).
326
327 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
328 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
329 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
330 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
331 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
332
333
334 .. _nic_features_sriov:
335
336 SR-IOV
337 ------
338
339 Driver supports creating Virtual Functions.
340
341 * **[implements] rte_eth_dev_data**: ``sriov``.
342
343 .. _nic_features_dcb:
344
345 DCB
346 ---
347
348 Supports Data Center Bridging (DCB).
349
350 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
351 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
352 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
353 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
354 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
355 * **[implements] eth_dev_ops**: ``get_dcb_info``.
356 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
357
358
359 .. _nic_features_vlan_filter:
360
361 VLAN filter
362 -----------
363
364 Supports filtering of a VLAN Tag identifier.
365
366 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
367 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
368 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
369
370
371 .. _nic_features_ethertype_filter:
372
373 Ethertype filter
374 ----------------
375
376 Supports filtering on Ethernet type.
377
378 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
379 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
380
381 .. _nic_features_ntuple_filter:
382
383 N-tuple filter
384 --------------
385
386 Supports filtering on N-tuple values.
387
388 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
389 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
390
391
392 .. _nic_features_syn_filter:
393
394 SYN filter
395 ----------
396
397 Supports TCP syn filtering.
398
399 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
400 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
401
402
403 .. _nic_features_tunnel_filter:
404
405 Tunnel filter
406 -------------
407
408 Supports tunnel filtering.
409
410 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
411 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
412
413
414 .. _nic_features_flexible_filter:
415
416 Flexible filter
417 ---------------
418
419 Supports a flexible (non-tuple or Ethertype) filter.
420
421 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
422 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
423
424
425 .. _nic_features_hash_filter:
426
427 Hash filter
428 -----------
429
430 Supports Hash filtering.
431
432 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
433 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
434
435
436 .. _nic_features_flow_director:
437
438 Flow director
439 -------------
440
441 Supports Flow Director style filtering to queues.
442
443 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
444 * **[provides]   mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
445   ``PKT_RX_FDIR_FLX``.
446 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
447
448
449 .. _nic_features_flow_control:
450
451 Flow control
452 ------------
453
454 Supports configuring link flow control.
455
456 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
457   ``priority_flow_ctrl_set``.
458 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
459   ``rte_eth_dev_priority_flow_ctrl_set()``.
460
461
462 .. _nic_features_flow_api:
463
464 Flow API
465 --------
466
467 Supports the DPDK Flow API for generic filtering.
468
469 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
470 * **[implements] rte_flow_ops**: ``All``.
471
472
473 .. _nic_features_rate_limitation:
474
475 Rate limitation
476 ---------------
477
478 Supports Tx rate limitation for a queue.
479
480 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
481 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
482
483
484 .. _nic_features_traffic_mirroring:
485
486 Traffic mirroring
487 -----------------
488
489 Supports adding traffic mirroring rules.
490
491 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
492 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
493
494
495 .. _nic_features_crc_offload:
496
497 CRC offload
498 -----------
499
500 Supports CRC stripping by hardware.
501
502 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_CRC_STRIP``.
503
504
505 .. _nic_features_vlan_offload:
506
507 VLAN offload
508 ------------
509
510 Supports VLAN offload to hardware.
511
512 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
513 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
514 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
515 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
516   ``tx_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
517 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
518   ``rte_eth_dev_get_vlan_offload()``.
519
520
521 .. _nic_features_qinq_offload:
522
523 QinQ offload
524 ------------
525
526 Supports QinQ (queue in queue) offload.
527
528 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
529 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
530 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
531    ``mbuf.vlan_tci_outer``.
532 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
533   ``tx_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
534
535
536 .. _nic_features_l3_checksum_offload:
537
538 L3 checksum offload
539 -------------------
540
541 Supports L3 checksum offload.
542
543 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
544 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
545   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
546 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
547   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
548   ``PKT_RX_IP_CKSUM_NONE``.
549 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
550   ``tx_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
551
552
553 .. _nic_features_l4_checksum_offload:
554
555 L4 checksum offload
556 -------------------
557
558 Supports L4 checksum offload.
559
560 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.
561 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
562   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
563   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
564 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
565   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
566   ``PKT_RX_L4_CKSUM_NONE``.
567 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
568   ``tx_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
569
570
571 .. _nic_features_macsec_offload:
572
573 MACsec offload
574 --------------
575
576 Supports MACsec.
577
578 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
579 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
580 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
581   ``tx_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
582
583
584 .. _nic_features_inner_l3_checksum:
585
586 Inner L3 checksum
587 -----------------
588
589 Supports inner packet L3 checksum.
590
591 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
592 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
593   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
594   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
595   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
596 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
597 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
598 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
599   ``tx_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
600
601
602 .. _nic_features_inner_l4_checksum:
603
604 Inner L4 checksum
605 -----------------
606
607 Supports inner packet L4 checksum.
608
609
610 .. _nic_features_packet_type_parsing:
611
612 Packet type parsing
613 -------------------
614
615 Supports packet type parsing and returns a list of supported types.
616
617 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
618 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
619
620
621 .. _nic_features_timesync:
622
623 Timesync
624 --------
625
626 Supports IEEE1588/802.1AS timestamping.
627
628 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
629   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
630   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
631 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
632   ``rte_eth_timesync_read_rx_timestamp()``,
633   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
634   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
635
636
637 .. _nic_features_rx_descriptor_status:
638
639 Rx descriptor status
640 --------------------
641
642 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
643 used, status can be "Available", "Done" or "Unavailable". When
644 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
645 not set".
646
647 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
648 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
649 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
650 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
651
652
653 .. _nic_features_tx_descriptor_status:
654
655 Tx descriptor status
656 --------------------
657
658 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
659 or "Unavailable."
660
661 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
662 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
663
664
665 .. _nic_features_basic_stats:
666
667 Basic stats
668 -----------
669
670 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
671 imissed, ierrors, oerrors, rx_nombuf.
672
673 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
674
675 These apply to all drivers.
676
677 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
678 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
679
680
681 .. _nic_features_extended_stats:
682
683 Extended stats
684 --------------
685
686 Supports Extended Statistics, changes from driver to driver.
687
688 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
689 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
690 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
691   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
692   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
693
694
695 .. _nic_features_stats_per_queue:
696
697 Stats per queue
698 ---------------
699
700 Supports configuring per-queue stat counter mapping.
701
702 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
703 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
704   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
705
706
707 .. _nic_features_fw_version:
708
709 FW version
710 ----------
711
712 Supports getting device hardware firmware information.
713
714 * **[implements] eth_dev_ops**: ``fw_version_get``.
715 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
716
717
718 .. _nic_features_eeprom_dump:
719
720 EEPROM dump
721 -----------
722
723 Supports getting/setting device eeprom data.
724
725 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
726 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
727   ``rte_eth_dev_set_eeprom()``.
728
729
730 .. _nic_features_register_dump:
731
732 Registers dump
733 --------------
734
735 Supports retrieving device registers and registering attributes (number of
736 registers and register size).
737
738 * **[implements] eth_dev_ops**: ``get_reg``.
739 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
740
741
742 .. _nic_features_led:
743
744 LED
745 ---
746
747 Supports turning on/off a software controllable LED on a device.
748
749 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
750 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
751
752
753 .. _nic_features_multiprocess_aware:
754
755 Multiprocess aware
756 ------------------
757
758 Driver can be used for primary-secondary process model.
759
760
761 .. _nic_features_bsd_nic_uio:
762
763 BSD nic_uio
764 -----------
765
766 BSD ``nic_uio`` module supported.
767
768
769 .. _nic_features_linux_uio:
770
771 Linux UIO
772 ---------
773
774 Works with ``igb_uio`` kernel module.
775
776 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
777
778 .. _nic_features_linux_vfio:
779
780 Linux VFIO
781 ----------
782
783 Works with ``vfio-pci`` kernel module.
784
785 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
786
787 .. _nic_features_other_kdrv:
788
789 Other kdrv
790 ----------
791
792 Kernel module other than above ones supported.
793
794
795 .. _nic_features_armv7:
796
797 ARMv7
798 -----
799
800 Support armv7 architecture.
801
802 Use ``defconfig_arm-armv7a-*-*``.
803
804
805 .. _nic_features_armv8:
806
807 ARMv8
808 -----
809
810 Support armv8a (64bit) architecture.
811
812 Use ``defconfig_arm64-armv8a-*-*``
813
814
815 .. _nic_features_power8:
816
817 Power8
818 ------
819
820 Support PowerPC architecture.
821
822 Use ``defconfig_ppc_64-power8-*-*``
823
824 .. _nic_features_x86-32:
825
826 x86-32
827 ------
828
829 Support 32bits x86 architecture.
830
831 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
832
833
834 .. _nic_features_x86-64:
835
836 x86-64
837 ------
838
839 Support 64bits x86 architecture.
840
841 Use ``defconfig_x86_64-native-*-*``.
842
843
844 .. _nic_features_usage_doc:
845
846 Usage doc
847 ---------
848
849 Documentation describes usage.
850
851 See ``doc/guides/nics/*.rst``
852
853
854 .. _nic_features_design_doc:
855
856 Design doc
857 ----------
858
859 Documentation describes design.
860
861 See ``doc/guides/nics/*.rst``.
862
863
864 .. _nic_features_perf_doc:
865
866 Perf doc
867 --------
868
869 Documentation describes performance values.
870
871 See ``dpdk.org/doc/perf/*``.
872
873
874
875 .. _nic_features_other:
876
877 Other dev ops not represented by a Feature
878 ------------------------------------------
879
880 * ``rxq_info_get``
881 * ``txq_info_get``
882 * ``vlan_tpid_set``
883 * ``vlan_strip_queue_set``
884 * ``vlan_pvid_set``
885 * ``rx_queue_count``
886 * ``l2_tunnel_offload_set``
887 * ``uc_hash_table_set``
888 * ``uc_all_hash_table_set``
889 * ``udp_tunnel_port_add``
890 * ``udp_tunnel_port_del``
891 * ``l2_tunnel_eth_type_conf``
892 * ``l2_tunnel_offload_set``
893 * ``tx_pkt_prepare``