bfeae80efff39f1e5427eef8c02be4a3e200297e
[deb_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 * **[uses]    rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MT_LOCKFREE``.
135 * **[provides] rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MT_LOCKFREE``.
136 * **[related]  API**: ``rte_eth_tx_burst()``.
137
138
139 .. _nic_features_free_tx_mbuf_on_demand:
140
141 Free Tx mbuf on demand
142 ----------------------
143
144 Supports freeing consumed buffers on a Tx ring.
145
146 * **[implements] eth_dev_ops**: ``tx_done_cleanup``.
147 * **[related]    API**: ``rte_eth_tx_done_cleanup()``.
148
149
150 .. _nic_features_queue_start_stop:
151
152 Queue start/stop
153 ----------------
154
155 Supports starting/stopping a specific Rx/Tx queue of a port.
156
157 * **[implements] eth_dev_ops**: ``rx_queue_start``, ``rx_queue_stop``, ``tx_queue_start``,
158   ``tx_queue_stop``.
159 * **[related]    API**: ``rte_eth_dev_rx_queue_start()``, ``rte_eth_dev_rx_queue_stop()``,
160   ``rte_eth_dev_tx_queue_start()``, ``rte_eth_dev_tx_queue_stop()``.
161
162
163 .. _nic_features_mtu_update:
164
165 MTU update
166 ----------
167
168 Supports updating port MTU.
169
170 * **[implements] eth_dev_ops**: ``mtu_set``.
171 * **[implements] rte_eth_dev_data**: ``mtu``.
172 * **[provides]   rte_eth_dev_info**: ``max_rx_pktlen``.
173 * **[related]    API**: ``rte_eth_dev_set_mtu()``, ``rte_eth_dev_get_mtu()``.
174
175
176 .. _nic_features_jumbo_frame:
177
178 Jumbo frame
179 -----------
180
181 Supports Rx jumbo frames.
182
183 * **[uses]    rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_JUMBO_FRAME``.
184   ``dev_conf.rxmode.max_rx_pkt_len``.
185 * **[related] rte_eth_dev_info**: ``max_rx_pktlen``.
186 * **[related] API**: ``rte_eth_dev_set_mtu()``.
187
188
189 .. _nic_features_scattered_rx:
190
191 Scattered Rx
192 ------------
193
194 Supports receiving segmented mbufs.
195
196 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_SCATTER``.
197 * **[implements] datapath**: ``Scattered Rx function``.
198 * **[implements] rte_eth_dev_data**: ``scattered_rx``.
199 * **[provides]   eth_dev_ops**: ``rxq_info_get:scattered_rx``.
200 * **[related]    eth_dev_ops**: ``rx_pkt_burst``.
201
202
203 .. _nic_features_lro:
204
205 LRO
206 ---
207
208 Supports Large Receive Offload.
209
210 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TCP_LRO``.
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
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``.
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 whitelist filtering to accept 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 * **[provides] rte_eth_dev_info**: ``flow_type_rss_offloads``.
293 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_RSS_HASH``, ``mbuf.rss``.
294
295
296 .. _nic_features_rss_key_update:
297
298 RSS key update
299 --------------
300
301 Supports configuration of Receive Side Scaling (RSS) hash computation. Updating
302 Receive Side Scaling (RSS) hash key.
303
304 * **[implements] eth_dev_ops**: ``rss_hash_update``, ``rss_hash_conf_get``.
305 * **[provides]   rte_eth_dev_info**: ``hash_key_size``.
306 * **[related]    API**: ``rte_eth_dev_rss_hash_update()``,
307   ``rte_eth_dev_rss_hash_conf_get()``.
308
309
310 .. _nic_features_rss_reta_update:
311
312 RSS reta update
313 ---------------
314
315 Supports updating Redirection Table of the Receive Side Scaling (RSS).
316
317 * **[implements] eth_dev_ops**: ``reta_update``, ``reta_query``.
318 * **[provides]   rte_eth_dev_info**: ``reta_size``.
319 * **[related]    API**: ``rte_eth_dev_rss_reta_update()``, ``rte_eth_dev_rss_reta_query()``.
320
321
322 .. _nic_features_vmdq:
323
324 VMDq
325 ----
326
327 Supports Virtual Machine Device Queues (VMDq).
328
329 * **[uses] user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_VMDQ_FLAG``.
330 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
331 * **[uses] user config**: ``dev_conf.rx_adv_conf.vmdq_rx_conf``.
332 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
333 * **[uses] user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
334
335
336 .. _nic_features_sriov:
337
338 SR-IOV
339 ------
340
341 Driver supports creating Virtual Functions.
342
343 * **[implements] rte_eth_dev_data**: ``sriov``.
344
345 .. _nic_features_dcb:
346
347 DCB
348 ---
349
350 Supports Data Center Bridging (DCB).
351
352 * **[uses]       user config**: ``dev_conf.rxmode.mq_mode`` = ``ETH_MQ_RX_DCB_FLAG``.
353 * **[uses]       user config**: ``dev_conf.rx_adv_conf.vmdq_dcb_conf``.
354 * **[uses]       user config**: ``dev_conf.rx_adv_conf.dcb_rx_conf``.
355 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_dcb_tx_conf``.
356 * **[uses]       user config**: ``dev_conf.tx_adv_conf.vmdq_tx_conf``.
357 * **[implements] eth_dev_ops**: ``get_dcb_info``.
358 * **[related]    API**: ``rte_eth_dev_get_dcb_info()``.
359
360
361 .. _nic_features_vlan_filter:
362
363 VLAN filter
364 -----------
365
366 Supports filtering of a VLAN Tag identifier.
367
368 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_FILTER``.
369 * **[implements] eth_dev_ops**: ``vlan_filter_set``.
370 * **[related]    API**: ``rte_eth_dev_vlan_filter()``.
371
372
373 .. _nic_features_ethertype_filter:
374
375 Ethertype filter
376 ----------------
377
378 Supports filtering on Ethernet type.
379
380 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_ETHERTYPE``.
381 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
382
383 .. _nic_features_ntuple_filter:
384
385 N-tuple filter
386 --------------
387
388 Supports filtering on N-tuple values.
389
390 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_NTUPLE``.
391 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
392
393
394 .. _nic_features_syn_filter:
395
396 SYN filter
397 ----------
398
399 Supports TCP syn filtering.
400
401 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_SYN``.
402 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
403
404
405 .. _nic_features_tunnel_filter:
406
407 Tunnel filter
408 -------------
409
410 Supports tunnel filtering.
411
412 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_TUNNEL``.
413 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
414
415
416 .. _nic_features_flexible_filter:
417
418 Flexible filter
419 ---------------
420
421 Supports a flexible (non-tuple or Ethertype) filter.
422
423 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FLEXIBLE``.
424 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
425
426
427 .. _nic_features_hash_filter:
428
429 Hash filter
430 -----------
431
432 Supports Hash filtering.
433
434 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_HASH``.
435 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
436
437
438 .. _nic_features_flow_director:
439
440 Flow director
441 -------------
442
443 Supports Flow Director style filtering to queues.
444
445 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_FDIR``.
446 * **[provides]   mbuf**: ``mbuf.ol_flags:`` ``PKT_RX_FDIR``, ``PKT_RX_FDIR_ID``,
447   ``PKT_RX_FDIR_FLX``.
448 * **[related]    API**: ``rte_eth_dev_filter_ctrl()``, ``rte_eth_dev_filter_supported()``.
449
450
451 .. _nic_features_flow_control:
452
453 Flow control
454 ------------
455
456 Supports configuring link flow control.
457
458 * **[implements] eth_dev_ops**: ``flow_ctrl_get``, ``flow_ctrl_set``,
459   ``priority_flow_ctrl_set``.
460 * **[related]    API**: ``rte_eth_dev_flow_ctrl_get()``, ``rte_eth_dev_flow_ctrl_set()``,
461   ``rte_eth_dev_priority_flow_ctrl_set()``.
462
463
464 .. _nic_features_flow_api:
465
466 Flow API
467 --------
468
469 Supports the DPDK Flow API for generic filtering.
470
471 * **[implements] eth_dev_ops**: ``filter_ctrl:RTE_ETH_FILTER_GENERIC``.
472 * **[implements] rte_flow_ops**: ``All``.
473
474
475 .. _nic_features_rate_limitation:
476
477 Rate limitation
478 ---------------
479
480 Supports Tx rate limitation for a queue.
481
482 * **[implements] eth_dev_ops**: ``set_queue_rate_limit``.
483 * **[related]    API**: ``rte_eth_set_queue_rate_limit()``.
484
485
486 .. _nic_features_traffic_mirroring:
487
488 Traffic mirroring
489 -----------------
490
491 Supports adding traffic mirroring rules.
492
493 * **[implements] eth_dev_ops**: ``mirror_rule_set``, ``mirror_rule_reset``.
494 * **[related]    API**: ``rte_eth_mirror_rule_set()``, ``rte_eth_mirror_rule_reset()``.
495
496
497 .. _nic_features_crc_offload:
498
499 CRC offload
500 -----------
501
502 Supports CRC stripping by hardware.
503
504 * **[uses] rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_CRC_STRIP``.
505
506
507 .. _nic_features_vlan_offload:
508
509 VLAN offload
510 ------------
511
512 Supports VLAN offload to hardware.
513
514 * **[uses]       rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_VLAN_STRIP,DEV_RX_OFFLOAD_VLAN_FILTER,DEV_RX_OFFLOAD_VLAN_EXTEND``.
515 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_VLAN_INSERT``.
516 * **[implements] eth_dev_ops**: ``vlan_offload_set``.
517 * **[provides]   mbuf**: ``mbuf.ol_flags:PKT_RX_VLAN_STRIPPED``, ``mbuf.vlan_tci``.
518 * **[provides]   rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_VLAN_STRIP``,
519   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_VLAN_INSERT``.
520 * **[related]    API**: ``rte_eth_dev_set_vlan_offload()``,
521   ``rte_eth_dev_get_vlan_offload()``.
522
523
524 .. _nic_features_qinq_offload:
525
526 QinQ offload
527 ------------
528
529 Supports QinQ (queue in queue) offload.
530
531 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_QINQ_STRIP``.
532 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_QINQ_INSERT``.
533 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_QINQ_PKT``.
534 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_QINQ_STRIPPED``, ``mbuf.vlan_tci``,
535    ``mbuf.vlan_tci_outer``.
536 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_QINQ_STRIP``,
537   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_QINQ_INSERT``.
538
539
540 .. _nic_features_l3_checksum_offload:
541
542 L3 checksum offload
543 -------------------
544
545 Supports L3 checksum offload.
546
547 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_IPV4_CKSUM``.
548 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_IPV4_CKSUM``.
549 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
550   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``.
551 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_IP_CKSUM_UNKNOWN`` |
552   ``PKT_RX_IP_CKSUM_BAD`` | ``PKT_RX_IP_CKSUM_GOOD`` |
553   ``PKT_RX_IP_CKSUM_NONE``.
554 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_IPV4_CKSUM``,
555   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_IPV4_CKSUM``.
556
557
558 .. _nic_features_l4_checksum_offload:
559
560 L4 checksum offload
561 -------------------
562
563 Supports L4 checksum offload.
564
565 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``.
566 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
567 * **[uses]     user config**: ``dev_conf.rxmode.hw_ip_checksum``.
568 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
569   ``mbuf.ol_flags:PKT_TX_L4_NO_CKSUM`` | ``PKT_TX_TCP_CKSUM`` |
570   ``PKT_TX_SCTP_CKSUM`` | ``PKT_TX_UDP_CKSUM``.
571 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_L4_CKSUM_UNKNOWN`` |
572   ``PKT_RX_L4_CKSUM_BAD`` | ``PKT_RX_L4_CKSUM_GOOD`` |
573   ``PKT_RX_L4_CKSUM_NONE``.
574 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
575   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
576
577 .. _nic_features_hw_timestamp:
578
579 Timestamp offload
580 -----------------
581
582 Supports Timestamp.
583
584 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
585 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
586 * **[provides] mbuf**: ``mbuf.timestamp``.
587 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP``.
588
589 .. _nic_features_macsec_offload:
590
591 MACsec offload
592 --------------
593
594 Supports MACsec.
595
596 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_MACSEC_STRIP``.
597 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MACSEC_INSERT``.
598 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_MACSEC``.
599 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_MACSEC_STRIP``,
600   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MACSEC_INSERT``.
601
602
603 .. _nic_features_inner_l3_checksum:
604
605 Inner L3 checksum
606 -----------------
607
608 Supports inner packet L3 checksum.
609
610 * **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``.
611 * **[uses]     rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
612 * **[uses]     mbuf**: ``mbuf.ol_flags:PKT_TX_IP_CKSUM``,
613   ``mbuf.ol_flags:PKT_TX_IPV4`` | ``PKT_TX_IPV6``,
614   ``mbuf.ol_flags:PKT_TX_OUTER_IP_CKSUM``,
615   ``mbuf.ol_flags:PKT_TX_OUTER_IPV4`` | ``PKT_TX_OUTER_IPV6``.
616 * **[uses]     mbuf**: ``mbuf.outer_l2_len``, ``mbuf.outer_l3_len``.
617 * **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_EIP_CKSUM_BAD``.
618 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM``,
619   ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM``.
620
621
622 .. _nic_features_inner_l4_checksum:
623
624 Inner L4 checksum
625 -----------------
626
627 Supports inner packet L4 checksum.
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
637 * **[implements] eth_dev_ops**: ``dev_supported_ptypes_get``.
638 * **[related]    API**: ``rte_eth_dev_get_supported_ptypes()``.
639
640
641 .. _nic_features_timesync:
642
643 Mbuf fast free
644 --------------
645
646 Supports optimization for fast release of mbufs following successful Tx.
647 Requires that per queue, all mbufs come from the same mempool and has refcnt = 1.
648
649 * **[uses]       rte_eth_txconf,rte_eth_txmode**: ``offloads:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
650 * **[provides]   rte_eth_dev_info**: ``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_MBUF_FAST_FREE``.
651
652 Timesync
653 --------
654
655 Supports IEEE1588/802.1AS timestamping.
656
657 * **[implements] eth_dev_ops**: ``timesync_enable``, ``timesync_disable``
658   ``timesync_read_rx_timestamp``, ``timesync_read_tx_timestamp``,
659   ``timesync_adjust_time``, ``timesync_read_time``, ``timesync_write_time``.
660 * **[related]    API**: ``rte_eth_timesync_enable()``, ``rte_eth_timesync_disable()``,
661   ``rte_eth_timesync_read_rx_timestamp()``,
662   ``rte_eth_timesync_read_tx_timestamp``, ``rte_eth_timesync_adjust_time()``,
663   ``rte_eth_timesync_read_time()``, ``rte_eth_timesync_write_time()``.
664
665
666 .. _nic_features_rx_descriptor_status:
667
668 Rx descriptor status
669 --------------------
670
671 Supports check the status of a Rx descriptor. When ``rx_descriptor_status`` is
672 used, status can be "Available", "Done" or "Unavailable". When
673 ``rx_descriptor_done`` is used, status can be "DD bit is set" or "DD bit is
674 not set".
675
676 * **[implements] eth_dev_ops**: ``rx_descriptor_status``.
677 * **[related]    API**: ``rte_eth_rx_descriptor_status()``.
678 * **[implements] eth_dev_ops**: ``rx_descriptor_done``.
679 * **[related]    API**: ``rte_eth_rx_descriptor_done()``.
680
681
682 .. _nic_features_tx_descriptor_status:
683
684 Tx descriptor status
685 --------------------
686
687 Supports checking the status of a Tx descriptor. Status can be "Full", "Done"
688 or "Unavailable."
689
690 * **[implements] eth_dev_ops**: ``tx_descriptor_status``.
691 * **[related]    API**: ``rte_eth_tx_descriptor_status()``.
692
693
694 .. _nic_features_basic_stats:
695
696 Basic stats
697 -----------
698
699 Support basic statistics such as: ipackets, opackets, ibytes, obytes,
700 imissed, ierrors, oerrors, rx_nombuf.
701
702 And per queue stats: q_ipackets, q_opackets, q_ibytes, q_obytes, q_errors.
703
704 These apply to all drivers.
705
706 * **[implements] eth_dev_ops**: ``stats_get``, ``stats_reset``.
707 * **[related]    API**: ``rte_eth_stats_get``, ``rte_eth_stats_reset()``.
708
709
710 .. _nic_features_extended_stats:
711
712 Extended stats
713 --------------
714
715 Supports Extended Statistics, changes from driver to driver.
716
717 * **[implements] eth_dev_ops**: ``xstats_get``, ``xstats_reset``, ``xstats_get_names``.
718 * **[implements] eth_dev_ops**: ``xstats_get_by_id``, ``xstats_get_names_by_id``.
719 * **[related]    API**: ``rte_eth_xstats_get()``, ``rte_eth_xstats_reset()``,
720   ``rte_eth_xstats_get_names``, ``rte_eth_xstats_get_by_id()``,
721   ``rte_eth_xstats_get_names_by_id()``, ``rte_eth_xstats_get_id_by_name()``.
722
723
724 .. _nic_features_stats_per_queue:
725
726 Stats per queue
727 ---------------
728
729 Supports configuring per-queue stat counter mapping.
730
731 * **[implements] eth_dev_ops**: ``queue_stats_mapping_set``.
732 * **[related]    API**: ``rte_eth_dev_set_rx_queue_stats_mapping()``,
733   ``rte_eth_dev_set_tx_queue_stats_mapping()``.
734
735
736 .. _nic_features_fw_version:
737
738 FW version
739 ----------
740
741 Supports getting device hardware firmware information.
742
743 * **[implements] eth_dev_ops**: ``fw_version_get``.
744 * **[related]    API**: ``rte_eth_dev_fw_version_get()``.
745
746
747 .. _nic_features_eeprom_dump:
748
749 EEPROM dump
750 -----------
751
752 Supports getting/setting device eeprom data.
753
754 * **[implements] eth_dev_ops**: ``get_eeprom_length``, ``get_eeprom``, ``set_eeprom``.
755 * **[related]    API**: ``rte_eth_dev_get_eeprom_length()``, ``rte_eth_dev_get_eeprom()``,
756   ``rte_eth_dev_set_eeprom()``.
757
758
759 .. _nic_features_register_dump:
760
761 Registers dump
762 --------------
763
764 Supports retrieving device registers and registering attributes (number of
765 registers and register size).
766
767 * **[implements] eth_dev_ops**: ``get_reg``.
768 * **[related]    API**: ``rte_eth_dev_get_reg_info()``.
769
770
771 .. _nic_features_led:
772
773 LED
774 ---
775
776 Supports turning on/off a software controllable LED on a device.
777
778 * **[implements] eth_dev_ops**: ``dev_led_on``, ``dev_led_off``.
779 * **[related]    API**: ``rte_eth_led_on()``, ``rte_eth_led_off()``.
780
781
782 .. _nic_features_multiprocess_aware:
783
784 Multiprocess aware
785 ------------------
786
787 Driver can be used for primary-secondary process model.
788
789
790 .. _nic_features_bsd_nic_uio:
791
792 BSD nic_uio
793 -----------
794
795 BSD ``nic_uio`` module supported.
796
797
798 .. _nic_features_linux_uio:
799
800 Linux UIO
801 ---------
802
803 Works with ``igb_uio`` kernel module.
804
805 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``igb_uio``.
806
807 .. _nic_features_linux_vfio:
808
809 Linux VFIO
810 ----------
811
812 Works with ``vfio-pci`` kernel module.
813
814 * **[provides] RTE_PMD_REGISTER_KMOD_DEP**: ``vfio-pci``.
815
816 .. _nic_features_other_kdrv:
817
818 Other kdrv
819 ----------
820
821 Kernel module other than above ones supported.
822
823
824 .. _nic_features_armv7:
825
826 ARMv7
827 -----
828
829 Support armv7 architecture.
830
831 Use ``defconfig_arm-armv7a-*-*``.
832
833
834 .. _nic_features_armv8:
835
836 ARMv8
837 -----
838
839 Support armv8a (64bit) architecture.
840
841 Use ``defconfig_arm64-armv8a-*-*``
842
843
844 .. _nic_features_power8:
845
846 Power8
847 ------
848
849 Support PowerPC architecture.
850
851 Use ``defconfig_ppc_64-power8-*-*``
852
853 .. _nic_features_x86-32:
854
855 x86-32
856 ------
857
858 Support 32bits x86 architecture.
859
860 Use ``defconfig_x86_x32-native-*-*`` and ``defconfig_i686-native-*-*``.
861
862
863 .. _nic_features_x86-64:
864
865 x86-64
866 ------
867
868 Support 64bits x86 architecture.
869
870 Use ``defconfig_x86_64-native-*-*``.
871
872
873 .. _nic_features_usage_doc:
874
875 Usage doc
876 ---------
877
878 Documentation describes usage.
879
880 See ``doc/guides/nics/*.rst``
881
882
883 .. _nic_features_design_doc:
884
885 Design doc
886 ----------
887
888 Documentation describes design.
889
890 See ``doc/guides/nics/*.rst``.
891
892
893 .. _nic_features_perf_doc:
894
895 Perf doc
896 --------
897
898 Documentation describes performance values.
899
900 See ``dpdk.org/doc/perf/*``.
901
902
903
904 .. _nic_features_other:
905
906 Other dev ops not represented by a Feature
907 ------------------------------------------
908
909 * ``rxq_info_get``
910 * ``txq_info_get``
911 * ``vlan_tpid_set``
912 * ``vlan_strip_queue_set``
913 * ``vlan_pvid_set``
914 * ``rx_queue_count``
915 * ``l2_tunnel_offload_set``
916 * ``uc_hash_table_set``
917 * ``uc_all_hash_table_set``
918 * ``udp_tunnel_port_add``
919 * ``udp_tunnel_port_del``
920 * ``l2_tunnel_eth_type_conf``
921 * ``l2_tunnel_offload_set``
922 * ``tx_pkt_prepare``