Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : *
3 : : * Copyright (c) 2015-2016 Freescale Semiconductor, Inc. All rights reserved.
4 : : * Copyright 2016-2025 NXP
5 : : *
6 : : */
7 : :
8 : : #ifndef _DPAA2_ETHDEV_H
9 : : #define _DPAA2_ETHDEV_H
10 : :
11 : : #include <rte_compat.h>
12 : : #include <rte_event_eth_rx_adapter.h>
13 : : #include <rte_pmd_dpaa2.h>
14 : :
15 : : #include <bus_fslmc_driver.h>
16 : : #include <dpaa2_hw_pvt.h>
17 : : #include "dpaa2_tm.h"
18 : :
19 : : #include <mc/fsl_dpni.h>
20 : : #include <mc/fsl_mc_sys.h>
21 : : #include <mc/fsl_dpmac.h>
22 : :
23 : : #include "base/dpaa2_hw_dpni_annot.h"
24 : :
25 : : #define DPAA2_MIN_RX_BUF_SIZE 512
26 : : #define DPAA2_MAX_RX_PKT_LEN 10240 /*WRIOP support*/
27 : : #define NET_DPAA2_PMD_DRIVER_NAME net_dpaa2
28 : :
29 : : #define MAX_TCS DPNI_MAX_TC
30 : : #define MAX_RX_QUEUES 128
31 : : #define MAX_TX_QUEUES 16
32 : : #define MAX_DPNI 8
33 : : #define DPAA2_MAX_CHANNELS 16
34 : :
35 : : #define DPAA2_EXTRACT_PARAM_MAX_SIZE \
36 : : RTE_ALIGN(sizeof(struct dpni_ext_set_rx_tc_dist), 256)
37 : :
38 : : #define DPAA2_EXTRACT_ALLOC_KEY_MAX_SIZE 256
39 : :
40 : : #define DPAA2_RX_DEFAULT_NBDESC 512
41 : :
42 : : #define DPAA2_ETH_MAX_LEN (RTE_ETHER_MTU + \
43 : : RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + \
44 : : VLAN_TAG_SIZE)
45 : :
46 : : /*default tc to be used for ,congestion, distribution etc configuration. */
47 : : #define DPAA2_DEF_TC 0
48 : :
49 : : /* Threshold for a Tx queue to *Enter* Congestion state.
50 : : */
51 : : #define CONG_ENTER_TX_THRESHOLD 512
52 : :
53 : : /* Threshold for a queue to *Exit* Congestion state.
54 : : */
55 : : #define CONG_EXIT_TX_THRESHOLD 480
56 : :
57 : : #define CONG_RETRY_COUNT 18000
58 : :
59 : : /* RX queue tail drop threshold
60 : : * currently considering 64 KB packets
61 : : */
62 : : #define CONG_THRESHOLD_RX_BYTES_Q (64 * 1024)
63 : : #define CONG_RX_OAL 128
64 : :
65 : : /* Size of the input SMMU mapped memory required by MC */
66 : : #define DIST_PARAM_IOVA_SIZE DPAA2_EXTRACT_PARAM_MAX_SIZE
67 : :
68 : : /* Enable TX Congestion control support
69 : : * default is disable
70 : : */
71 : : #define DPAA2_TX_CGR_OFF RTE_BIT32(0)
72 : :
73 : : /* Drop packets with parsing error in hw */
74 : : #define DPAA2_PARSE_ERR_DROP RTE_BIT32(1)
75 : :
76 : : /* Disable RX tail drop, default is enable */
77 : : #define DPAA2_RX_TAILDROP_OFF RTE_BIT32(2)
78 : :
79 : : /* Disable prefetch Rx mode to get exact requested packets */
80 : : #define DPAA2_NO_PREFETCH_RX RTE_BIT32(3)
81 : :
82 : : /* Driver level loop mode to simply transmit the ingress traffic */
83 : : #define DPAA2_RX_LOOPBACK_MODE RTE_BIT32(4)
84 : :
85 : : /* HW loopback the egress traffic to self ingress*/
86 : : #define DPAA2_TX_MAC_LOOPBACK_MODE RTE_BIT32(5)
87 : :
88 : : #define DPAA2_TX_SERDES_LOOPBACK_MODE RTE_BIT32(6)
89 : :
90 : : #define DPAA2_TX_DPNI_LOOPBACK_MODE RTE_BIT32(7)
91 : :
92 : : /* Tx confirmation enabled */
93 : : #define DPAA2_TX_CONF_ENABLE RTE_BIT32(8)
94 : :
95 : : /* Tx dynamic confirmation enabled,
96 : : * only valid with Tx confirmation enabled.
97 : : */
98 : : #define DPAA2_TX_DYNAMIC_CONF_ENABLE RTE_BIT32(9)
99 : :
100 : : #define DPAAX_RX_ERROR_QUEUE_FLAG RTE_BIT32(11)
101 : :
102 : : /* DPDMUX index for DPMAC */
103 : : #define DPAA2_DPDMUX_DPMAC_IDX 0
104 : :
105 : : #define DPAA2_TX_LOOPBACK_MODE \
106 : : (DPAA2_TX_MAC_LOOPBACK_MODE | \
107 : : DPAA2_TX_SERDES_LOOPBACK_MODE | \
108 : : DPAA2_TX_DPNI_LOOPBACK_MODE)
109 : :
110 : : #define DPAA2_RSS_OFFLOAD_ALL ( \
111 : : RTE_ETH_RSS_L2_PAYLOAD | \
112 : : RTE_ETH_RSS_IP | \
113 : : RTE_ETH_RSS_UDP | \
114 : : RTE_ETH_RSS_TCP | \
115 : : RTE_ETH_RSS_SCTP | \
116 : : RTE_ETH_RSS_MPLS | \
117 : : RTE_ETH_RSS_C_VLAN | \
118 : : RTE_ETH_RSS_S_VLAN | \
119 : : RTE_ETH_RSS_ESP | \
120 : : RTE_ETH_RSS_AH | \
121 : : RTE_ETH_RSS_PPPOE)
122 : :
123 : : /* LX2 FRC Parsed values (Little Endian) */
124 : : #define DPAA2_PKT_TYPE_ETHER 0x0060
125 : : #define DPAA2_PKT_TYPE_IPV4 0x0000
126 : : #define DPAA2_PKT_TYPE_IPV6 0x0020
127 : : #define DPAA2_PKT_TYPE_IPV4_EXT \
128 : : (0x0001 | DPAA2_PKT_TYPE_IPV4)
129 : : #define DPAA2_PKT_TYPE_IPV6_EXT \
130 : : (0x0001 | DPAA2_PKT_TYPE_IPV6)
131 : : #define DPAA2_PKT_TYPE_IPV4_TCP \
132 : : (0x000e | DPAA2_PKT_TYPE_IPV4)
133 : : #define DPAA2_PKT_TYPE_IPV6_TCP \
134 : : (0x000e | DPAA2_PKT_TYPE_IPV6)
135 : : #define DPAA2_PKT_TYPE_IPV4_UDP \
136 : : (0x0010 | DPAA2_PKT_TYPE_IPV4)
137 : : #define DPAA2_PKT_TYPE_IPV6_UDP \
138 : : (0x0010 | DPAA2_PKT_TYPE_IPV6)
139 : : #define DPAA2_PKT_TYPE_IPV4_SCTP \
140 : : (0x000f | DPAA2_PKT_TYPE_IPV4)
141 : : #define DPAA2_PKT_TYPE_IPV6_SCTP \
142 : : (0x000f | DPAA2_PKT_TYPE_IPV6)
143 : : #define DPAA2_PKT_TYPE_IPV4_ICMP \
144 : : (0x0003 | DPAA2_PKT_TYPE_IPV4_EXT)
145 : : #define DPAA2_PKT_TYPE_IPV6_ICMP \
146 : : (0x0003 | DPAA2_PKT_TYPE_IPV6_EXT)
147 : : #define DPAA2_PKT_TYPE_VLAN_1 0x0160
148 : : #define DPAA2_PKT_TYPE_VLAN_2 0x0260
149 : :
150 : : /* mac counters */
151 : : #define DPAA2_MAC_NUM_STATS (DPMAC_CNT_EGR_CONTROL_FRAME + 1)
152 : : #define DPAA2_MAC_STATS_INDEX_DMA_SIZE (DPAA2_MAC_NUM_STATS * sizeof(uint32_t))
153 : : #define DPAA2_MAC_STATS_VALUE_DMA_SIZE (DPAA2_MAC_NUM_STATS * sizeof(uint64_t))
154 : :
155 : : /* Global pool used by driver for SG list TX */
156 : : extern struct rte_mempool *dpaa2_tx_sg_pool;
157 : : /* Maximum SG segments */
158 : : #define DPAA2_MAX_SGS 128
159 : : /* SG pool size */
160 : : #define DPAA2_POOL_SIZE 2048
161 : : /* SG pool cache size */
162 : : #define DPAA2_POOL_CACHE_SIZE 256
163 : : /* structure to free external and indirect
164 : : * buffers.
165 : : */
166 : : struct sw_buf_free {
167 : : /* To which packet this segment belongs */
168 : : uint16_t pkt_id;
169 : : /* The actual segment */
170 : : struct rte_mbuf *seg;
171 : : };
172 : :
173 : : /* enable timestamp in mbuf*/
174 : : extern bool dpaa2_enable_ts[];
175 : : extern uint64_t dpaa2_timestamp_rx_dynflag;
176 : : extern int dpaa2_timestamp_dynfield_offset;
177 : :
178 : : /* Externally defined */
179 : : extern const struct rte_flow_ops dpaa2_flow_ops;
180 : :
181 : : extern const struct rte_tm_ops dpaa2_tm_ops;
182 : :
183 : : extern bool dpaa2_print_parser_result;
184 : :
185 : : #define DPAA2_FAPR_SIZE \
186 : : (sizeof(struct dpaa2_annot_hdr) - \
187 : : offsetof(struct dpaa2_annot_hdr, word3))
188 : :
189 : : #define DPAA2_PR_NXTHDR_OFFSET 0
190 : :
191 : : #define DPAA2_FAFE_PSR_OFFSET 2
192 : : #define DPAA2_FAFE_PSR_SIZE 2
193 : :
194 : : #define DPAA2_FAF_PSR_OFFSET 4
195 : : #define DPAA2_FAF_PSR_SIZE 12
196 : :
197 : : #define DPAA2_FAF_TOTAL_SIZE \
198 : : (DPAA2_FAFE_PSR_SIZE + DPAA2_FAF_PSR_SIZE)
199 : :
200 : : /* Just most popular Frame attribute flags (FAF) here.*/
201 : : enum dpaa2_rx_faf_offset {
202 : : /* Set by SP start*/
203 : : FAFE_VXLAN_IN_VLAN_FRAM = 0,
204 : : FAFE_VXLAN_IN_IPV4_FRAM = 1,
205 : : FAFE_VXLAN_IN_IPV6_FRAM = 2,
206 : : FAFE_VXLAN_IN_UDP_FRAM = 3,
207 : : FAFE_VXLAN_IN_TCP_FRAM = 4,
208 : :
209 : : FAFE_ECPRI_FRAM = 7,
210 : : /* Set by SP end*/
211 : :
212 : : FAF_GTP_PRIMED_FRAM = 1 + DPAA2_FAFE_PSR_SIZE * 8,
213 : : FAF_PTP_FRAM = 3 + DPAA2_FAFE_PSR_SIZE * 8,
214 : : FAF_VXLAN_FRAM = 4 + DPAA2_FAFE_PSR_SIZE * 8,
215 : : FAF_ETH_FRAM = 10 + DPAA2_FAFE_PSR_SIZE * 8,
216 : : FAF_LLC_SNAP_FRAM = 18 + DPAA2_FAFE_PSR_SIZE * 8,
217 : : FAF_VLAN_FRAM = 21 + DPAA2_FAFE_PSR_SIZE * 8,
218 : : FAF_PPPOE_PPP_FRAM = 25 + DPAA2_FAFE_PSR_SIZE * 8,
219 : : FAF_MPLS_FRAM = 27 + DPAA2_FAFE_PSR_SIZE * 8,
220 : : FAF_ARP_FRAM = 30 + DPAA2_FAFE_PSR_SIZE * 8,
221 : : FAF_IPV4_FRAM = 34 + DPAA2_FAFE_PSR_SIZE * 8,
222 : : FAF_IPV6_FRAM = 42 + DPAA2_FAFE_PSR_SIZE * 8,
223 : : FAF_IP_FRAM = 48 + DPAA2_FAFE_PSR_SIZE * 8,
224 : : FAF_IP_FRAG_FRAM = 50 + DPAA2_FAFE_PSR_SIZE * 8,
225 : : FAF_ICMP_FRAM = 57 + DPAA2_FAFE_PSR_SIZE * 8,
226 : : FAF_IGMP_FRAM = 58 + DPAA2_FAFE_PSR_SIZE * 8,
227 : : FAF_GRE_FRAM = 65 + DPAA2_FAFE_PSR_SIZE * 8,
228 : : FAF_UDP_FRAM = 70 + DPAA2_FAFE_PSR_SIZE * 8,
229 : : FAF_TCP_FRAM = 72 + DPAA2_FAFE_PSR_SIZE * 8,
230 : : FAF_IPSEC_FRAM = 77 + DPAA2_FAFE_PSR_SIZE * 8,
231 : : FAF_IPSEC_ESP_FRAM = 78 + DPAA2_FAFE_PSR_SIZE * 8,
232 : : FAF_IPSEC_AH_FRAM = 79 + DPAA2_FAFE_PSR_SIZE * 8,
233 : : FAF_SCTP_FRAM = 81 + DPAA2_FAFE_PSR_SIZE * 8,
234 : : FAF_DCCP_FRAM = 83 + DPAA2_FAFE_PSR_SIZE * 8,
235 : : FAF_GTP_FRAM = 87 + DPAA2_FAFE_PSR_SIZE * 8,
236 : : FAF_ESP_FRAM = 89 + DPAA2_FAFE_PSR_SIZE * 8,
237 : : };
238 : :
239 : : enum dpaa2_ecpri_fafe_type {
240 : : ECPRI_FAFE_TYPE_0 = (8 - FAFE_ECPRI_FRAM),
241 : : ECPRI_FAFE_TYPE_1 = (8 - FAFE_ECPRI_FRAM) | (1 << 1),
242 : : ECPRI_FAFE_TYPE_2 = (8 - FAFE_ECPRI_FRAM) | (2 << 1),
243 : : ECPRI_FAFE_TYPE_3 = (8 - FAFE_ECPRI_FRAM) | (3 << 1),
244 : : ECPRI_FAFE_TYPE_4 = (8 - FAFE_ECPRI_FRAM) | (4 << 1),
245 : : ECPRI_FAFE_TYPE_5 = (8 - FAFE_ECPRI_FRAM) | (5 << 1),
246 : : ECPRI_FAFE_TYPE_6 = (8 - FAFE_ECPRI_FRAM) | (6 << 1),
247 : : ECPRI_FAFE_TYPE_7 = (8 - FAFE_ECPRI_FRAM) | (7 << 1)
248 : : };
249 : :
250 : : #define DPAA2_PR_ETH_OFF_OFFSET 19
251 : : #define DPAA2_PR_TCI_OFF_OFFSET 21
252 : : #define DPAA2_PR_LAST_ETYPE_OFFSET 23
253 : : #define DPAA2_PR_L3_OFF_OFFSET 27
254 : : #define DPAA2_PR_L4_OFF_OFFSET 30
255 : : #define DPAA2_PR_L5_OFF_OFFSET 31
256 : : #define DPAA2_PR_NXTHDR_OFF_OFFSET 34
257 : :
258 : : /* Set by SP for vxlan distribution start*/
259 : : #define DPAA2_VXLAN_IN_TCI_OFFSET 16
260 : :
261 : : #define DPAA2_VXLAN_IN_DADDR0_OFFSET 20
262 : : #define DPAA2_VXLAN_IN_DADDR1_OFFSET 22
263 : : #define DPAA2_VXLAN_IN_DADDR2_OFFSET 24
264 : : #define DPAA2_VXLAN_IN_DADDR3_OFFSET 25
265 : : #define DPAA2_VXLAN_IN_DADDR4_OFFSET 26
266 : : #define DPAA2_VXLAN_IN_DADDR5_OFFSET 28
267 : :
268 : : #define DPAA2_VXLAN_IN_SADDR0_OFFSET 29
269 : : #define DPAA2_VXLAN_IN_SADDR1_OFFSET 32
270 : : #define DPAA2_VXLAN_IN_SADDR2_OFFSET 33
271 : : #define DPAA2_VXLAN_IN_SADDR3_OFFSET 35
272 : : #define DPAA2_VXLAN_IN_SADDR4_OFFSET 41
273 : : #define DPAA2_VXLAN_IN_SADDR5_OFFSET 42
274 : :
275 : : #define DPAA2_VXLAN_VNI_OFFSET 43
276 : : #define DPAA2_VXLAN_IN_TYPE_OFFSET 46
277 : : /* Set by SP for vxlan distribution end*/
278 : :
279 : : /* ECPRI shares SP context with VXLAN*/
280 : : #define DPAA2_ECPRI_MSG_OFFSET DPAA2_VXLAN_VNI_OFFSET
281 : :
282 : : #define DPAA2_ECPRI_MAX_EXTRACT_NB 8
283 : :
284 : : struct ipv4_sd_addr_extract_rule {
285 : : uint32_t ipv4_src;
286 : : uint32_t ipv4_dst;
287 : : };
288 : :
289 : : struct ipv6_sd_addr_extract_rule {
290 : : uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
291 : : uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
292 : : };
293 : :
294 : : struct ipv4_ds_addr_extract_rule {
295 : : uint32_t ipv4_dst;
296 : : uint32_t ipv4_src;
297 : : };
298 : :
299 : : struct ipv6_ds_addr_extract_rule {
300 : : uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
301 : : uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
302 : : };
303 : :
304 : : union ip_addr_extract_rule {
305 : : struct ipv4_sd_addr_extract_rule ipv4_sd_addr;
306 : : struct ipv6_sd_addr_extract_rule ipv6_sd_addr;
307 : : struct ipv4_ds_addr_extract_rule ipv4_ds_addr;
308 : : struct ipv6_ds_addr_extract_rule ipv6_ds_addr;
309 : : };
310 : :
311 : : union ip_src_addr_extract_rule {
312 : : uint32_t ipv4_src;
313 : : uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
314 : : };
315 : :
316 : : union ip_dst_addr_extract_rule {
317 : : uint32_t ipv4_dst;
318 : : uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
319 : : };
320 : :
321 : : enum ip_addr_extract_type {
322 : : IP_NONE_ADDR_EXTRACT,
323 : : IP_SRC_EXTRACT,
324 : : IP_DST_EXTRACT,
325 : : IP_SRC_DST_EXTRACT,
326 : : IP_DST_SRC_EXTRACT
327 : : };
328 : :
329 : : enum key_prot_type {
330 : : /* HW extracts from standard protocol fields*/
331 : : DPAA2_NET_PROT_KEY,
332 : : /* HW extracts from FAF of PR*/
333 : : DPAA2_FAF_KEY,
334 : : /* HW extracts from PR other than FAF*/
335 : : DPAA2_PR_KEY
336 : : };
337 : :
338 : : struct key_prot_field {
339 : : enum key_prot_type type;
340 : : enum net_prot prot;
341 : : uint32_t key_field;
342 : : };
343 : :
344 : : struct dpaa2_raw_region {
345 : : uint8_t raw_start;
346 : : uint8_t raw_size;
347 : : };
348 : :
349 : : struct dpaa2_key_profile {
350 : : uint8_t num;
351 : : uint8_t key_offset[DPKG_MAX_NUM_OF_EXTRACTS];
352 : : uint8_t key_size[DPKG_MAX_NUM_OF_EXTRACTS];
353 : :
354 : : enum ip_addr_extract_type ip_addr_type;
355 : : uint8_t ip_addr_extract_pos;
356 : : uint8_t ip_addr_extract_off;
357 : :
358 : : uint8_t raw_extract_pos;
359 : : uint8_t raw_extract_off;
360 : : uint8_t raw_extract_num;
361 : :
362 : : uint8_t l4_src_port_present;
363 : : uint8_t l4_src_port_pos;
364 : : uint8_t l4_src_port_offset;
365 : : uint8_t l4_dst_port_present;
366 : : uint8_t l4_dst_port_pos;
367 : : uint8_t l4_dst_port_offset;
368 : : struct key_prot_field prot_field[DPKG_MAX_NUM_OF_EXTRACTS];
369 : : uint16_t key_max_size;
370 : : struct dpaa2_raw_region raw_region;
371 : : };
372 : :
373 : : struct dpaa2_key_extract {
374 : : struct dpkg_profile_cfg dpkg;
375 : : struct dpaa2_key_profile key_profile;
376 : : };
377 : :
378 : : struct extract_s {
379 : : struct dpaa2_key_extract qos_key_extract;
380 : : struct dpaa2_key_extract tc_key_extract[MAX_TCS];
381 : : uint8_t *qos_extract_param;
382 : : uint8_t *tc_extract_param[MAX_TCS];
383 : : };
384 : :
385 : : struct dpaa2_dev_priv {
386 : : void *hw;
387 : : int32_t hw_id;
388 : : int32_t qdid;
389 : : uint16_t token;
390 : : uint8_t nb_tx_queues;
391 : : uint8_t nb_rx_queues;
392 : : uint32_t options;
393 : : void *rx_vq[MAX_RX_QUEUES];
394 : : void *tx_vq[MAX_TX_QUEUES];
395 : : struct dpaa2_bp_list *bp_list; /**<Attached buffer pool list */
396 : : void *tx_conf_vq[MAX_TX_QUEUES * DPAA2_MAX_CHANNELS];
397 : : void *rx_err_vq;
398 : : uint32_t flags; /*dpaa2 config flags */
399 : : uint8_t max_mac_filters;
400 : : uint8_t max_vlan_filters;
401 : : uint8_t num_rx_tc;
402 : : uint8_t num_tx_tc;
403 : : uint16_t qos_entries;
404 : : uint16_t fs_entries;
405 : : uint8_t dist_queues;
406 : : uint8_t num_channels;
407 : : uint8_t en_ordered;
408 : : uint8_t en_loose_ordered;
409 : : uint8_t max_cgs;
410 : : uint8_t cgid_in_use[MAX_RX_QUEUES];
411 : :
412 : : uint16_t dpni_ver_major;
413 : : uint16_t dpni_ver_minor;
414 : : uint32_t speed_capa;
415 : :
416 : : enum rte_dpaa2_dev_type ep_dev_type; /**< Endpoint Device Type */
417 : : uint16_t ep_object_id; /**< Endpoint DPAA2 Object ID */
418 : : char ep_name[RTE_DEV_NAME_MAX_LEN];
419 : :
420 : : struct extract_s extract;
421 : :
422 : : uint16_t ss_offset;
423 : : uint64_t ss_iova;
424 : : uint64_t ss_param_iova;
425 : : /*stores timestamp of last received packet on dev*/
426 : : uint64_t rx_timestamp;
427 : : /*stores timestamp of last received tx confirmation packet on dev*/
428 : : uint64_t tx_timestamp;
429 : : /* stores pointer to next tx_conf queue that should be processed,
430 : : * it corresponds to last packet transmitted
431 : : */
432 : : struct dpaa2_queue *next_tx_conf_queue;
433 : :
434 : : struct rte_eth_dev *eth_dev; /**< Pointer back to holding ethdev */
435 : : rte_spinlock_t lpbk_qp_lock;
436 : :
437 : : uint8_t channel_inuse;
438 : : /* Stores correction offset for one step timestamping */
439 : : uint16_t ptp_correction_offset;
440 : : /* for mac counters */
441 : : uint32_t *cnt_idx_dma_mem;
442 : : uint64_t *cnt_values_dma_mem;
443 : : uint64_t cnt_idx_iova, cnt_values_iova;
444 : :
445 : : struct dpaa2_dev_flow *curr;
446 : : LIST_HEAD(, dpaa2_dev_flow) flows;
447 : : LIST_HEAD(nodes, dpaa2_tm_node) nodes;
448 : : LIST_HEAD(shaper_profiles, dpaa2_tm_shaper_profile) shaper_profiles;
449 : : };
450 : :
451 : : #define DPNI_GET_MAC_SUPPORTED_IFS_VER_MAJOR 8
452 : : #define DPNI_GET_MAC_SUPPORTED_IFS_VER_MINOR 6
453 : :
454 : : static inline int dpaa2_dev_cmp_dpni_ver(struct dpaa2_dev_priv *priv,
455 : : uint16_t ver_major, uint16_t ver_minor)
456 : : {
457 [ # # ]: 0 : if (priv->dpni_ver_major == ver_major)
458 : 0 : return priv->dpni_ver_minor - ver_minor;
459 : 0 : return priv->dpni_ver_major - ver_major;
460 : : }
461 : :
462 : : int dpaa2_distset_to_dpkg_profile_cfg(uint64_t req_dist_set,
463 : : struct dpkg_profile_cfg *kg_cfg);
464 : :
465 : : int dpaa2_setup_flow_dist(struct rte_eth_dev *eth_dev,
466 : : uint64_t req_dist_set, int tc_index);
467 : :
468 : : int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
469 : : uint8_t tc_index);
470 : :
471 : : int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv,
472 : : struct fsl_mc_io *dpni, void *blist);
473 : :
474 : : __rte_internal
475 : : int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
476 : : int eth_rx_queue_id,
477 : : struct dpaa2_dpcon_dev *dpcon,
478 : : const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
479 : :
480 : : __rte_internal
481 : : int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
482 : : int eth_rx_queue_id);
483 : :
484 : : uint16_t dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);
485 : :
486 : : uint16_t dpaa2_dev_loopback_rx(void *queue, struct rte_mbuf **bufs,
487 : : uint16_t nb_pkts);
488 : :
489 : : uint16_t dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs,
490 : : uint16_t nb_pkts);
491 : : void dpaa2_dev_process_parallel_event(struct qbman_swp *swp,
492 : : const struct qbman_fd *fd,
493 : : const struct qbman_result *dq,
494 : : struct dpaa2_queue *rxq,
495 : : struct rte_event *ev);
496 : : void dpaa2_dev_process_atomic_event(struct qbman_swp *swp,
497 : : const struct qbman_fd *fd,
498 : : const struct qbman_result *dq,
499 : : struct dpaa2_queue *rxq,
500 : : struct rte_event *ev);
501 : : void dpaa2_dev_process_ordered_event(struct qbman_swp *swp,
502 : : const struct qbman_fd *fd,
503 : : const struct qbman_result *dq,
504 : : struct dpaa2_queue *rxq,
505 : : struct rte_event *ev);
506 : : uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);
507 : : uint16_t dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs,
508 : : uint16_t nb_pkts);
509 : : __rte_internal
510 : : uint16_t dpaa2_dev_tx_multi_txq_ordered(void **queue,
511 : : struct rte_mbuf **bufs, uint16_t nb_pkts);
512 : :
513 : : void dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci, struct dpaa2_queue *dpaa2_q);
514 : : void dpaa2_flow_clean(struct rte_eth_dev *dev);
515 : : uint16_t dpaa2_dev_tx_conf(void *queue) __rte_unused;
516 : :
517 : : int dpaa2_timesync_enable(struct rte_eth_dev *dev);
518 : : int dpaa2_timesync_disable(struct rte_eth_dev *dev);
519 : : int dpaa2_timesync_read_time(struct rte_eth_dev *dev,
520 : : struct timespec *timestamp);
521 : : int dpaa2_timesync_write_time(struct rte_eth_dev *dev,
522 : : const struct timespec *timestamp);
523 : : int dpaa2_timesync_adjust_time(struct rte_eth_dev *dev, int64_t delta);
524 : : int dpaa2_timesync_read_rx_timestamp(struct rte_eth_dev *dev,
525 : : struct timespec *timestamp,
526 : : uint32_t flags __rte_unused);
527 : : int dpaa2_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
528 : : struct timespec *timestamp);
529 : :
530 : : int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
531 : : int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
532 : : int dpaa2_soft_parser_loaded(void);
533 : :
534 : : int dpaa2_dev_recycle_qp_setup(struct rte_dpaa2_device *dpaa2_dev,
535 : : uint16_t qidx, uint64_t cntx,
536 : : eth_rx_burst_t tx_lpbk, eth_tx_burst_t rx_lpbk,
537 : : struct dpaa2_queue **txq,
538 : : struct dpaa2_queue **rxq);
539 : :
540 : : void
541 : : dpaa2_dev_mac_setup_stats(struct rte_eth_dev *dev);
542 : :
543 : : #endif /* _DPAA2_ETHDEV_H */
|