xref: /dpdk/drivers/net/dpaa2/dpaa2_ethdev.h (revision e21bff64e25667bddb8889e2d34fc7226e21e057)
1131a75b6SHemant Agrawal /* SPDX-License-Identifier: BSD-3-Clause
2c147eae0SHemant Agrawal  *
3c147eae0SHemant Agrawal  *   Copyright (c) 2015-2016 Freescale Semiconductor, Inc. All rights reserved.
495af364bSGagandeep Singh  *   Copyright 2016-2022 NXP
5c147eae0SHemant Agrawal  *
6c147eae0SHemant Agrawal  */
7c147eae0SHemant Agrawal 
8c147eae0SHemant Agrawal #ifndef _DPAA2_ETHDEV_H
9c147eae0SHemant Agrawal #define _DPAA2_ETHDEV_H
10c147eae0SHemant Agrawal 
111094dd94SDavid Marchand #include <rte_compat.h>
12b677d4c6SNipun Gupta #include <rte_event_eth_rx_adapter.h>
13c1870f65SAkhil Goyal #include <rte_pmd_dpaa2.h>
14b677d4c6SNipun Gupta 
15b4f22ca5SDavid Marchand #include <bus_fslmc_driver.h>
161def64c2SNipun Gupta #include <dpaa2_hw_pvt.h>
17ac624068SGagandeep Singh #include "dpaa2_tm.h"
181def64c2SNipun Gupta 
193e5a335dSHemant Agrawal #include <mc/fsl_dpni.h>
203e5a335dSHemant Agrawal #include <mc/fsl_mc_sys.h>
213e5a335dSHemant Agrawal 
2293e41cb3SJun Yang #include "base/dpaa2_hw_dpni_annot.h"
2393e41cb3SJun Yang 
24bee61d86SHemant Agrawal #define DPAA2_MIN_RX_BUF_SIZE 512
25bee61d86SHemant Agrawal #define DPAA2_MAX_RX_PKT_LEN  10240 /*WRIOP support*/
264ed8a733SVanshika Shukla #define NET_DPAA2_PMD_DRIVER_NAME net_dpaa2
27bee61d86SHemant Agrawal 
2889c2ea8fSHemant Agrawal #define MAX_TCS			DPNI_MAX_TC
292d5f7f52SAshish Jain #define MAX_RX_QUEUES		128
303e5a335dSHemant Agrawal #define MAX_TX_QUEUES		16
3172ec7a67SSunil Kumar Kori #define MAX_DPNI		8
3272100f0dSGagandeep Singh #define DPAA2_MAX_CHANNELS	16
333e5a335dSHemant Agrawal 
34e35ead33SHemant Agrawal #define DPAA2_RX_DEFAULT_NBDESC 512
35e35ead33SHemant Agrawal 
36043b5715SSteve Yang #define DPAA2_ETH_MAX_LEN (RTE_ETHER_MTU + \
37043b5715SSteve Yang 			   RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + \
38043b5715SSteve Yang 			   VLAN_TAG_SIZE)
39043b5715SSteve Yang 
403e5a335dSHemant Agrawal /*default tc to be used for ,congestion, distribution etc configuration. */
413e5a335dSHemant Agrawal #define DPAA2_DEF_TC		0
423e5a335dSHemant Agrawal 
4329dfa62fSHemant Agrawal /* Threshold for a Tx queue to *Enter* Congestion state.
447ae777d0SHemant Agrawal  */
4529dfa62fSHemant Agrawal #define CONG_ENTER_TX_THRESHOLD   512
467ae777d0SHemant Agrawal 
477ae777d0SHemant Agrawal /* Threshold for a queue to *Exit* Congestion state.
487ae777d0SHemant Agrawal  */
4929dfa62fSHemant Agrawal #define CONG_EXIT_TX_THRESHOLD    480
507ae777d0SHemant Agrawal 
51a0840963SHemant Agrawal #define CONG_RETRY_COUNT 18000
52a0840963SHemant Agrawal 
5323d6a87eSHemant Agrawal /* RX queue tail drop threshold
5413b856acSHemant Agrawal  * currently considering 64 KB packets
5523d6a87eSHemant Agrawal  */
5613b856acSHemant Agrawal #define CONG_THRESHOLD_RX_BYTES_Q  (64 * 1024)
57d47f0292SHemant Agrawal #define CONG_RX_OAL	128
5823d6a87eSHemant Agrawal 
5989c2ea8fSHemant Agrawal /* Size of the input SMMU mapped memory required by MC */
6089c2ea8fSHemant Agrawal #define DIST_PARAM_IOVA_SIZE 256
6189c2ea8fSHemant Agrawal 
627ae777d0SHemant Agrawal /* Enable TX Congestion control support
637ae777d0SHemant Agrawal  * default is disable
647ae777d0SHemant Agrawal  */
65a0840963SHemant Agrawal #define DPAA2_TX_CGR_OFF	0x01
667ae777d0SHemant Agrawal 
6723d6a87eSHemant Agrawal /* Disable RX tail drop, default is enable */
6823d6a87eSHemant Agrawal #define DPAA2_RX_TAILDROP_OFF	0x04
698d21c563SHemant Agrawal /* Tx confirmation enabled */
7090762e5cSVanshika Shukla #define DPAA2_TX_CONF_ENABLE	0x06
7123d6a87eSHemant Agrawal 
72e45956ceSVanshika Shukla /* DPDMUX index for DPMAC */
73e45956ceSVanshika Shukla #define DPAA2_DPDMUX_DPMAC_IDX 0
74e45956ceSVanshika Shukla 
75f023d059SJun Yang /* HW loopback the egress traffic to self ingress*/
76f023d059SJun Yang #define DPAA2_TX_MAC_LOOPBACK_MODE 0x20
77f023d059SJun Yang 
78f023d059SJun Yang #define DPAA2_TX_SERDES_LOOPBACK_MODE 0x40
79f023d059SJun Yang 
80f023d059SJun Yang #define DPAA2_TX_DPNI_LOOPBACK_MODE 0x80
81f023d059SJun Yang 
82f023d059SJun Yang #define DPAA2_TX_LOOPBACK_MODE \
83f023d059SJun Yang 	(DPAA2_TX_MAC_LOOPBACK_MODE | \
84f023d059SJun Yang 	DPAA2_TX_SERDES_LOOPBACK_MODE | \
85f023d059SJun Yang 	DPAA2_TX_DPNI_LOOPBACK_MODE)
86f023d059SJun Yang 
87762b275fSHemant Agrawal #define DPAA2_RSS_OFFLOAD_ALL ( \
88295968d1SFerruh Yigit 	RTE_ETH_RSS_L2_PAYLOAD | \
89295968d1SFerruh Yigit 	RTE_ETH_RSS_IP | \
90295968d1SFerruh Yigit 	RTE_ETH_RSS_UDP | \
91295968d1SFerruh Yigit 	RTE_ETH_RSS_TCP | \
92295968d1SFerruh Yigit 	RTE_ETH_RSS_SCTP | \
93295968d1SFerruh Yigit 	RTE_ETH_RSS_MPLS | \
94295968d1SFerruh Yigit 	RTE_ETH_RSS_C_VLAN | \
95295968d1SFerruh Yigit 	RTE_ETH_RSS_S_VLAN | \
96295968d1SFerruh Yigit 	RTE_ETH_RSS_ESP | \
97295968d1SFerruh Yigit 	RTE_ETH_RSS_AH | \
98295968d1SFerruh Yigit 	RTE_ETH_RSS_PPPOE)
99762b275fSHemant Agrawal 
100a5852a94SNipun Gupta /* LX2 FRC Parsed values (Little Endian) */
101a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_ETHER		0x0060
102a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4		0x0000
103a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6		0x0020
104a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_EXT \
105a5852a94SNipun Gupta 			(0x0001 | DPAA2_PKT_TYPE_IPV4)
106a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_EXT \
107a5852a94SNipun Gupta 			(0x0001 | DPAA2_PKT_TYPE_IPV6)
108a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_TCP \
109a5852a94SNipun Gupta 			(0x000e | DPAA2_PKT_TYPE_IPV4)
110a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_TCP \
111a5852a94SNipun Gupta 			(0x000e | DPAA2_PKT_TYPE_IPV6)
112a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_UDP \
113a5852a94SNipun Gupta 			(0x0010 | DPAA2_PKT_TYPE_IPV4)
114a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_UDP \
115a5852a94SNipun Gupta 			(0x0010 | DPAA2_PKT_TYPE_IPV6)
116a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_SCTP	\
117a5852a94SNipun Gupta 			(0x000f | DPAA2_PKT_TYPE_IPV4)
118a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_SCTP	\
119a5852a94SNipun Gupta 			(0x000f | DPAA2_PKT_TYPE_IPV6)
120a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_ICMP \
121a5852a94SNipun Gupta 			(0x0003 | DPAA2_PKT_TYPE_IPV4_EXT)
122a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_ICMP \
123a5852a94SNipun Gupta 			(0x0003 | DPAA2_PKT_TYPE_IPV6_EXT)
124a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_VLAN_1		0x0160
125a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_VLAN_2		0x0260
126a5852a94SNipun Gupta 
12775e2a1d4SGagandeep Singh /* Global pool used by driver for SG list TX */
12875e2a1d4SGagandeep Singh extern struct rte_mempool *dpaa2_tx_sg_pool;
12975e2a1d4SGagandeep Singh /* Maximum SG segments */
13075e2a1d4SGagandeep Singh #define DPAA2_MAX_SGS 128
13175e2a1d4SGagandeep Singh /* SG pool size */
13275e2a1d4SGagandeep Singh #define DPAA2_POOL_SIZE 2048
13375e2a1d4SGagandeep Singh /* SG pool cache size */
13475e2a1d4SGagandeep Singh #define DPAA2_POOL_CACHE_SIZE 256
135b0074a7bSGagandeep Singh /* structure to free external and indirect
136b0074a7bSGagandeep Singh  * buffers.
137b0074a7bSGagandeep Singh  */
138b0074a7bSGagandeep Singh struct sw_buf_free {
139b0074a7bSGagandeep Singh 	/* To which packet this segment belongs */
140b0074a7bSGagandeep Singh 	uint16_t pkt_id;
141b0074a7bSGagandeep Singh 	/* The actual segment */
142b0074a7bSGagandeep Singh 	struct rte_mbuf *seg;
143b0074a7bSGagandeep Singh };
14475e2a1d4SGagandeep Singh 
145c1870f65SAkhil Goyal /* enable timestamp in mbuf*/
146724f79dfSHemant Agrawal extern bool dpaa2_enable_ts[];
14761c41e2eSThomas Monjalon extern uint64_t dpaa2_timestamp_rx_dynflag;
14861c41e2eSThomas Monjalon extern int dpaa2_timestamp_dynfield_offset;
149c1870f65SAkhil Goyal 
1507be78d02SJosh Soref /* Externally defined */
151fe2b986aSSunil Kumar Kori extern const struct rte_flow_ops dpaa2_flow_ops;
152fe2b986aSSunil Kumar Kori 
153ac624068SGagandeep Singh extern const struct rte_tm_ops dpaa2_tm_ops;
154ac624068SGagandeep Singh 
1554690a611SNipun Gupta extern bool dpaa2_enable_err_queue;
1564690a611SNipun Gupta 
15793e41cb3SJun Yang extern bool dpaa2_print_parser_result;
15893e41cb3SJun Yang 
15993e41cb3SJun Yang #define DPAA2_FAPR_SIZE \
16093e41cb3SJun Yang 	(sizeof(struct dpaa2_annot_hdr) - \
16193e41cb3SJun Yang 	offsetof(struct dpaa2_annot_hdr, word3))
16293e41cb3SJun Yang 
16393e41cb3SJun Yang #define DPAA2_PR_NXTHDR_OFFSET 0
16493e41cb3SJun Yang 
16593e41cb3SJun Yang #define DPAA2_FAFE_PSR_OFFSET 2
16693e41cb3SJun Yang #define DPAA2_FAFE_PSR_SIZE 2
16793e41cb3SJun Yang 
16893e41cb3SJun Yang #define DPAA2_FAF_PSR_OFFSET 4
16993e41cb3SJun Yang #define DPAA2_FAF_PSR_SIZE 12
17093e41cb3SJun Yang 
17193e41cb3SJun Yang #define DPAA2_FAF_TOTAL_SIZE \
17293e41cb3SJun Yang 	(DPAA2_FAFE_PSR_SIZE + DPAA2_FAF_PSR_SIZE)
17393e41cb3SJun Yang 
17493e41cb3SJun Yang /* Just most popular Frame attribute flags (FAF) here.*/
17593e41cb3SJun Yang enum dpaa2_rx_faf_offset {
17693e41cb3SJun Yang 	/* Set by SP start*/
17793e41cb3SJun Yang 	FAFE_VXLAN_IN_VLAN_FRAM = 0,
17893e41cb3SJun Yang 	FAFE_VXLAN_IN_IPV4_FRAM = 1,
17993e41cb3SJun Yang 	FAFE_VXLAN_IN_IPV6_FRAM = 2,
18093e41cb3SJun Yang 	FAFE_VXLAN_IN_UDP_FRAM = 3,
18193e41cb3SJun Yang 	FAFE_VXLAN_IN_TCP_FRAM = 4,
18293e41cb3SJun Yang 	/* Set by SP end*/
18393e41cb3SJun Yang 
18493e41cb3SJun Yang 	FAF_GTP_PRIMED_FRAM = 1 + DPAA2_FAFE_PSR_SIZE * 8,
18593e41cb3SJun Yang 	FAF_PTP_FRAM = 3 + DPAA2_FAFE_PSR_SIZE * 8,
18693e41cb3SJun Yang 	FAF_VXLAN_FRAM = 4 + DPAA2_FAFE_PSR_SIZE * 8,
18793e41cb3SJun Yang 	FAF_ETH_FRAM = 10 + DPAA2_FAFE_PSR_SIZE * 8,
18893e41cb3SJun Yang 	FAF_LLC_SNAP_FRAM = 18 + DPAA2_FAFE_PSR_SIZE * 8,
18993e41cb3SJun Yang 	FAF_VLAN_FRAM = 21 + DPAA2_FAFE_PSR_SIZE * 8,
19093e41cb3SJun Yang 	FAF_PPPOE_PPP_FRAM = 25 + DPAA2_FAFE_PSR_SIZE * 8,
19193e41cb3SJun Yang 	FAF_MPLS_FRAM = 27 + DPAA2_FAFE_PSR_SIZE * 8,
19293e41cb3SJun Yang 	FAF_ARP_FRAM = 30 + DPAA2_FAFE_PSR_SIZE * 8,
19393e41cb3SJun Yang 	FAF_IPV4_FRAM = 34 + DPAA2_FAFE_PSR_SIZE * 8,
19493e41cb3SJun Yang 	FAF_IPV6_FRAM = 42 + DPAA2_FAFE_PSR_SIZE * 8,
19593e41cb3SJun Yang 	FAF_IP_FRAM = 48 + DPAA2_FAFE_PSR_SIZE * 8,
19693e41cb3SJun Yang 	FAF_ICMP_FRAM = 57 + DPAA2_FAFE_PSR_SIZE * 8,
19793e41cb3SJun Yang 	FAF_IGMP_FRAM = 58 + DPAA2_FAFE_PSR_SIZE * 8,
19893e41cb3SJun Yang 	FAF_GRE_FRAM = 65 + DPAA2_FAFE_PSR_SIZE * 8,
19993e41cb3SJun Yang 	FAF_UDP_FRAM = 70 + DPAA2_FAFE_PSR_SIZE * 8,
20093e41cb3SJun Yang 	FAF_TCP_FRAM = 72 + DPAA2_FAFE_PSR_SIZE * 8,
20193e41cb3SJun Yang 	FAF_IPSEC_FRAM = 77 + DPAA2_FAFE_PSR_SIZE * 8,
20293e41cb3SJun Yang 	FAF_IPSEC_ESP_FRAM = 78 + DPAA2_FAFE_PSR_SIZE * 8,
20393e41cb3SJun Yang 	FAF_IPSEC_AH_FRAM = 79 + DPAA2_FAFE_PSR_SIZE * 8,
20493e41cb3SJun Yang 	FAF_SCTP_FRAM = 81 + DPAA2_FAFE_PSR_SIZE * 8,
20593e41cb3SJun Yang 	FAF_DCCP_FRAM = 83 + DPAA2_FAFE_PSR_SIZE * 8,
20693e41cb3SJun Yang 	FAF_GTP_FRAM = 87 + DPAA2_FAFE_PSR_SIZE * 8,
20793e41cb3SJun Yang 	FAF_ESP_FRAM = 89 + DPAA2_FAFE_PSR_SIZE * 8,
20893e41cb3SJun Yang };
20993e41cb3SJun Yang 
21093e41cb3SJun Yang #define DPAA2_PR_ETH_OFF_OFFSET 19
21193e41cb3SJun Yang #define DPAA2_PR_TCI_OFF_OFFSET 21
21293e41cb3SJun Yang #define DPAA2_PR_LAST_ETYPE_OFFSET 23
21393e41cb3SJun Yang #define DPAA2_PR_L3_OFF_OFFSET 27
21493e41cb3SJun Yang #define DPAA2_PR_L4_OFF_OFFSET 30
21593e41cb3SJun Yang #define DPAA2_PR_L5_OFF_OFFSET 31
21693e41cb3SJun Yang #define DPAA2_PR_NXTHDR_OFF_OFFSET 34
21793e41cb3SJun Yang 
21893e41cb3SJun Yang /* Set by SP for vxlan distribution start*/
21993e41cb3SJun Yang #define DPAA2_VXLAN_IN_TCI_OFFSET 16
22093e41cb3SJun Yang 
22193e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR0_OFFSET 20
22293e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR1_OFFSET 22
22393e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR2_OFFSET 24
22493e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR3_OFFSET 25
22593e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR4_OFFSET 26
22693e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR5_OFFSET 28
22793e41cb3SJun Yang 
22893e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR0_OFFSET 29
22993e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR1_OFFSET 32
23093e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR2_OFFSET 33
23193e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR3_OFFSET 35
23293e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR4_OFFSET 41
23393e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR5_OFFSET 42
23493e41cb3SJun Yang 
23593e41cb3SJun Yang #define DPAA2_VXLAN_VNI_OFFSET 43
23693e41cb3SJun Yang #define DPAA2_VXLAN_IN_TYPE_OFFSET 46
23793e41cb3SJun Yang /* Set by SP for vxlan distribution end*/
23893e41cb3SJun Yang 
23956c1817dSJun Yang struct ipv4_sd_addr_extract_rule {
24056c1817dSJun Yang 	uint32_t ipv4_src;
24156c1817dSJun Yang 	uint32_t ipv4_dst;
24256c1817dSJun Yang };
2435f176728SJun Yang 
24456c1817dSJun Yang struct ipv6_sd_addr_extract_rule {
24556c1817dSJun Yang 	uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
24656c1817dSJun Yang 	uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
24756c1817dSJun Yang };
24856c1817dSJun Yang 
24956c1817dSJun Yang struct ipv4_ds_addr_extract_rule {
25056c1817dSJun Yang 	uint32_t ipv4_dst;
25156c1817dSJun Yang 	uint32_t ipv4_src;
25256c1817dSJun Yang };
25356c1817dSJun Yang 
25456c1817dSJun Yang struct ipv6_ds_addr_extract_rule {
25556c1817dSJun Yang 	uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
25656c1817dSJun Yang 	uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
25756c1817dSJun Yang };
25856c1817dSJun Yang 
25956c1817dSJun Yang union ip_addr_extract_rule {
26056c1817dSJun Yang 	struct ipv4_sd_addr_extract_rule ipv4_sd_addr;
26156c1817dSJun Yang 	struct ipv6_sd_addr_extract_rule ipv6_sd_addr;
26256c1817dSJun Yang 	struct ipv4_ds_addr_extract_rule ipv4_ds_addr;
26356c1817dSJun Yang 	struct ipv6_ds_addr_extract_rule ipv6_ds_addr;
26456c1817dSJun Yang };
26556c1817dSJun Yang 
26656c1817dSJun Yang union ip_src_addr_extract_rule {
26756c1817dSJun Yang 	uint32_t ipv4_src;
26856c1817dSJun Yang 	uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
26956c1817dSJun Yang };
27056c1817dSJun Yang 
27156c1817dSJun Yang union ip_dst_addr_extract_rule {
27256c1817dSJun Yang 	uint32_t ipv4_dst;
27356c1817dSJun Yang 	uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
27456c1817dSJun Yang };
27556c1817dSJun Yang 
27656c1817dSJun Yang enum ip_addr_extract_type {
27756c1817dSJun Yang 	IP_NONE_ADDR_EXTRACT,
27856c1817dSJun Yang 	IP_SRC_EXTRACT,
27956c1817dSJun Yang 	IP_DST_EXTRACT,
28056c1817dSJun Yang 	IP_SRC_DST_EXTRACT,
28156c1817dSJun Yang 	IP_DST_SRC_EXTRACT
28256c1817dSJun Yang };
28356c1817dSJun Yang 
28493e41cb3SJun Yang enum key_prot_type {
28593e41cb3SJun Yang 	DPAA2_NET_PROT_KEY,
28693e41cb3SJun Yang 	DPAA2_FAF_KEY
28793e41cb3SJun Yang };
28893e41cb3SJun Yang 
28956c1817dSJun Yang struct key_prot_field {
29093e41cb3SJun Yang 	enum key_prot_type type;
29156c1817dSJun Yang 	enum net_prot prot;
29256c1817dSJun Yang 	uint32_t key_field;
29356c1817dSJun Yang };
29456c1817dSJun Yang 
295*e21bff64SJun Yang struct dpaa2_raw_region {
296*e21bff64SJun Yang 	uint8_t raw_start;
297*e21bff64SJun Yang 	uint8_t raw_size;
298*e21bff64SJun Yang };
299*e21bff64SJun Yang 
30056c1817dSJun Yang struct dpaa2_key_profile {
30156c1817dSJun Yang 	uint8_t num;
3025f176728SJun Yang 	uint8_t key_offset[DPKG_MAX_NUM_OF_EXTRACTS];
3035f176728SJun Yang 	uint8_t key_size[DPKG_MAX_NUM_OF_EXTRACTS];
30456c1817dSJun Yang 
30556c1817dSJun Yang 	enum ip_addr_extract_type ip_addr_type;
30656c1817dSJun Yang 	uint8_t ip_addr_extract_pos;
30756c1817dSJun Yang 	uint8_t ip_addr_extract_off;
30856c1817dSJun Yang 
309*e21bff64SJun Yang 	uint8_t raw_extract_pos;
310*e21bff64SJun Yang 	uint8_t raw_extract_off;
311*e21bff64SJun Yang 	uint8_t raw_extract_num;
312*e21bff64SJun Yang 
31356c1817dSJun Yang 	uint8_t l4_src_port_present;
31456c1817dSJun Yang 	uint8_t l4_src_port_pos;
31556c1817dSJun Yang 	uint8_t l4_src_port_offset;
31656c1817dSJun Yang 	uint8_t l4_dst_port_present;
31756c1817dSJun Yang 	uint8_t l4_dst_port_pos;
31856c1817dSJun Yang 	uint8_t l4_dst_port_offset;
31956c1817dSJun Yang 	struct key_prot_field prot_field[DPKG_MAX_NUM_OF_EXTRACTS];
32056c1817dSJun Yang 	uint16_t key_max_size;
321*e21bff64SJun Yang 	struct dpaa2_raw_region raw_region;
3225f176728SJun Yang };
3235f176728SJun Yang 
3245f176728SJun Yang struct dpaa2_key_extract {
3255f176728SJun Yang 	struct dpkg_profile_cfg dpkg;
32656c1817dSJun Yang 	struct dpaa2_key_profile key_profile;
3275f176728SJun Yang };
3285f176728SJun Yang 
3295f176728SJun Yang struct extract_s {
3305f176728SJun Yang 	struct dpaa2_key_extract qos_key_extract;
3315f176728SJun Yang 	struct dpaa2_key_extract tc_key_extract[MAX_TCS];
33256c1817dSJun Yang 	uint8_t *qos_extract_param;
33356c1817dSJun Yang 	uint8_t *tc_extract_param[MAX_TCS];
3345f176728SJun Yang };
3355f176728SJun Yang 
336c147eae0SHemant Agrawal struct dpaa2_dev_priv {
337c147eae0SHemant Agrawal 	void *hw;
338c147eae0SHemant Agrawal 	int32_t hw_id;
3393e5a335dSHemant Agrawal 	int32_t qdid;
340c147eae0SHemant Agrawal 	uint16_t token;
3413e5a335dSHemant Agrawal 	uint8_t nb_tx_queues;
3423e5a335dSHemant Agrawal 	uint8_t nb_rx_queues;
34316c4a3c4SNipun Gupta 	uint32_t options;
3443e5a335dSHemant Agrawal 	void *rx_vq[MAX_RX_QUEUES];
3453e5a335dSHemant Agrawal 	void *tx_vq[MAX_TX_QUEUES];
346bee61d86SHemant Agrawal 	struct dpaa2_bp_list *bp_list; /**<Attached buffer pool list */
34772100f0dSGagandeep Singh 	void *tx_conf_vq[MAX_TX_QUEUES * DPAA2_MAX_CHANNELS];
3484690a611SNipun Gupta 	void *rx_err_vq;
3498d21c563SHemant Agrawal 	uint8_t flags; /*dpaa2 config flags */
35033fad432SHemant Agrawal 	uint8_t max_mac_filters;
35133fad432SHemant Agrawal 	uint8_t max_vlan_filters;
35216bbc98aSShreyansh Jain 	uint8_t num_rx_tc;
35372100f0dSGagandeep Singh 	uint8_t num_tx_tc;
3544ce58f8aSJun Yang 	uint16_t qos_entries;
3554ce58f8aSJun Yang 	uint16_t fs_entries;
3564ce58f8aSJun Yang 	uint8_t dist_queues;
35772100f0dSGagandeep Singh 	uint8_t num_channels;
35816c4a3c4SNipun Gupta 	uint8_t en_ordered;
35916c4a3c4SNipun Gupta 	uint8_t en_loose_ordered;
36013b856acSHemant Agrawal 	uint8_t max_cgs;
36113b856acSHemant Agrawal 	uint8_t cgid_in_use[MAX_RX_QUEUES];
362fe2b986aSSunil Kumar Kori 
3635f176728SJun Yang 	struct extract_s extract;
364bc767866SPriyanka Jain 
36572ec7a67SSunil Kumar Kori 	uint16_t ss_offset;
36672ec7a67SSunil Kumar Kori 	uint64_t ss_iova;
36772ec7a67SSunil Kumar Kori 	uint64_t ss_param_iova;
368bc767866SPriyanka Jain 	/*stores timestamp of last received packet on dev*/
369bc767866SPriyanka Jain 	uint64_t rx_timestamp;
370bc767866SPriyanka Jain 	/*stores timestamp of last received tx confirmation packet on dev*/
371bc767866SPriyanka Jain 	uint64_t tx_timestamp;
372bc767866SPriyanka Jain 	/* stores pointer to next tx_conf queue that should be processed,
373bc767866SPriyanka Jain 	 * it corresponds to last packet transmitted
374bc767866SPriyanka Jain 	 */
375bc767866SPriyanka Jain 	struct dpaa2_queue *next_tx_conf_queue;
37681c42c84SShreyansh Jain 
37781c42c84SShreyansh Jain 	struct rte_eth_dev *eth_dev; /**< Pointer back to holding ethdev */
378f023d059SJun Yang 	rte_spinlock_t lpbk_qp_lock;
37981c42c84SShreyansh Jain 
38072100f0dSGagandeep Singh 	uint8_t channel_inuse;
3812013e308SVanshika Shukla 	/* Stores correction offset for one step timestamping */
3822013e308SVanshika Shukla 	uint16_t ptp_correction_offset;
3832013e308SVanshika Shukla 
38456c1817dSJun Yang 	struct dpaa2_dev_flow *curr;
38556c1817dSJun Yang 	LIST_HEAD(, dpaa2_dev_flow) flows;
386ac624068SGagandeep Singh 	LIST_HEAD(nodes, dpaa2_tm_node) nodes;
387ac624068SGagandeep Singh 	LIST_HEAD(shaper_profiles, dpaa2_tm_shaper_profile) shaper_profiles;
388c147eae0SHemant Agrawal };
38989c2ea8fSHemant Agrawal 
390fe2b986aSSunil Kumar Kori int dpaa2_distset_to_dpkg_profile_cfg(uint64_t req_dist_set,
391fe2b986aSSunil Kumar Kori 				      struct dpkg_profile_cfg *kg_cfg);
392fe2b986aSSunil Kumar Kori 
39389c2ea8fSHemant Agrawal int dpaa2_setup_flow_dist(struct rte_eth_dev *eth_dev,
394271f5aeeSJun Yang 		uint64_t req_dist_set, int tc_index);
39589c2ea8fSHemant Agrawal 
39689c2ea8fSHemant Agrawal int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
39789c2ea8fSHemant Agrawal 			   uint8_t tc_index);
39889c2ea8fSHemant Agrawal 
3996ac5a55bSJun Yang int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv,
4006ac5a55bSJun Yang 	struct fsl_mc_io *dpni, void *blist);
401bee61d86SHemant Agrawal 
4026b6ca751SHemant Agrawal __rte_internal
403b677d4c6SNipun Gupta int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
404b677d4c6SNipun Gupta 		int eth_rx_queue_id,
4053835cc22SNipun Gupta 		struct dpaa2_dpcon_dev *dpcon,
406b677d4c6SNipun Gupta 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
407b677d4c6SNipun Gupta 
4086b6ca751SHemant Agrawal __rte_internal
409b677d4c6SNipun Gupta int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
410b677d4c6SNipun Gupta 		int eth_rx_queue_id);
411b677d4c6SNipun Gupta 
41220191ab3SNipun Gupta uint16_t dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);
41320191ab3SNipun Gupta 
414a3a997f0SHemant Agrawal uint16_t dpaa2_dev_loopback_rx(void *queue, struct rte_mbuf **bufs,
415a3a997f0SHemant Agrawal 				uint16_t nb_pkts);
416a3a997f0SHemant Agrawal 
4175c6942fdSHemant Agrawal uint16_t dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs,
4185c6942fdSHemant Agrawal 			       uint16_t nb_pkts);
419b677d4c6SNipun Gupta void dpaa2_dev_process_parallel_event(struct qbman_swp *swp,
420b677d4c6SNipun Gupta 				      const struct qbman_fd *fd,
421b677d4c6SNipun Gupta 				      const struct qbman_result *dq,
422b677d4c6SNipun Gupta 				      struct dpaa2_queue *rxq,
423b677d4c6SNipun Gupta 				      struct rte_event *ev);
4242d378863SNipun Gupta void dpaa2_dev_process_atomic_event(struct qbman_swp *swp,
4252d378863SNipun Gupta 				    const struct qbman_fd *fd,
4262d378863SNipun Gupta 				    const struct qbman_result *dq,
4272d378863SNipun Gupta 				    struct dpaa2_queue *rxq,
4282d378863SNipun Gupta 				    struct rte_event *ev);
42916c4a3c4SNipun Gupta void dpaa2_dev_process_ordered_event(struct qbman_swp *swp,
43016c4a3c4SNipun Gupta 				     const struct qbman_fd *fd,
43116c4a3c4SNipun Gupta 				     const struct qbman_result *dq,
43216c4a3c4SNipun Gupta 				     struct dpaa2_queue *rxq,
43316c4a3c4SNipun Gupta 				     struct rte_event *ev);
434cd9935ceSHemant Agrawal uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);
43516c4a3c4SNipun Gupta uint16_t dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs,
43616c4a3c4SNipun Gupta 			      uint16_t nb_pkts);
437ed1cdbedSJun Yang __rte_internal
438ed1cdbedSJun Yang uint16_t dpaa2_dev_tx_multi_txq_ordered(void **queue,
439ed1cdbedSJun Yang 		struct rte_mbuf **bufs, uint16_t nb_pkts);
440ed1cdbedSJun Yang 
44195af364bSGagandeep Singh void dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci, struct dpaa2_queue *dpaa2_q);
4426a556bd6SHemant Agrawal void dpaa2_flow_clean(struct rte_eth_dev *dev);
443f2fc83b4SThomas Monjalon uint16_t dpaa2_dev_tx_conf(void *queue)  __rte_unused;
44416c4a3c4SNipun Gupta 
445bc767866SPriyanka Jain int dpaa2_timesync_enable(struct rte_eth_dev *dev);
446bc767866SPriyanka Jain int dpaa2_timesync_disable(struct rte_eth_dev *dev);
447bc767866SPriyanka Jain int dpaa2_timesync_read_time(struct rte_eth_dev *dev,
448bc767866SPriyanka Jain 					struct timespec *timestamp);
449bc767866SPriyanka Jain int dpaa2_timesync_write_time(struct rte_eth_dev *dev,
450bc767866SPriyanka Jain 					const struct timespec *timestamp);
451bc767866SPriyanka Jain int dpaa2_timesync_adjust_time(struct rte_eth_dev *dev, int64_t delta);
452bc767866SPriyanka Jain int dpaa2_timesync_read_rx_timestamp(struct rte_eth_dev *dev,
453bc767866SPriyanka Jain 						struct timespec *timestamp,
454bc767866SPriyanka Jain 						uint32_t flags __rte_unused);
455bc767866SPriyanka Jain int dpaa2_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
456bc767866SPriyanka Jain 					  struct timespec *timestamp);
457f023d059SJun Yang 
458f023d059SJun Yang int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
459f023d059SJun Yang int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
460f023d059SJun Yang int dpaa2_dev_recycle_qp_setup(struct rte_dpaa2_device *dpaa2_dev,
461f023d059SJun Yang 	uint16_t qidx, uint64_t cntx,
462f023d059SJun Yang 	eth_rx_burst_t tx_lpbk, eth_tx_burst_t rx_lpbk,
463f023d059SJun Yang 	struct dpaa2_queue **txq,
464f023d059SJun Yang 	struct dpaa2_queue **rxq);
465f023d059SJun Yang 
466c147eae0SHemant Agrawal #endif /* _DPAA2_ETHDEV_H */
467