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