xref: /dpdk/drivers/net/dpaa2/dpaa2_ethdev.h (revision 25e5845b5272764d8c2cbf64a9fc5989b34a932c)
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 
3425d0ae62SJun Yang #define DPAA2_EXTRACT_PARAM_MAX_SIZE 256
3525d0ae62SJun Yang #define DPAA2_EXTRACT_ALLOC_KEY_MAX_SIZE 256
3625d0ae62SJun Yang 
37e35ead33SHemant Agrawal #define DPAA2_RX_DEFAULT_NBDESC 512
38e35ead33SHemant Agrawal 
39043b5715SSteve Yang #define DPAA2_ETH_MAX_LEN (RTE_ETHER_MTU + \
40043b5715SSteve Yang 			   RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + \
41043b5715SSteve Yang 			   VLAN_TAG_SIZE)
42043b5715SSteve Yang 
433e5a335dSHemant Agrawal /*default tc to be used for ,congestion, distribution etc configuration. */
443e5a335dSHemant Agrawal #define DPAA2_DEF_TC		0
453e5a335dSHemant Agrawal 
4629dfa62fSHemant Agrawal /* Threshold for a Tx queue to *Enter* Congestion state.
477ae777d0SHemant Agrawal  */
4829dfa62fSHemant Agrawal #define CONG_ENTER_TX_THRESHOLD   512
497ae777d0SHemant Agrawal 
507ae777d0SHemant Agrawal /* Threshold for a queue to *Exit* Congestion state.
517ae777d0SHemant Agrawal  */
5229dfa62fSHemant Agrawal #define CONG_EXIT_TX_THRESHOLD    480
537ae777d0SHemant Agrawal 
54a0840963SHemant Agrawal #define CONG_RETRY_COUNT 18000
55a0840963SHemant Agrawal 
5623d6a87eSHemant Agrawal /* RX queue tail drop threshold
5713b856acSHemant Agrawal  * currently considering 64 KB packets
5823d6a87eSHemant Agrawal  */
5913b856acSHemant Agrawal #define CONG_THRESHOLD_RX_BYTES_Q  (64 * 1024)
60d47f0292SHemant Agrawal #define CONG_RX_OAL	128
6123d6a87eSHemant Agrawal 
6289c2ea8fSHemant Agrawal /* Size of the input SMMU mapped memory required by MC */
6389c2ea8fSHemant Agrawal #define DIST_PARAM_IOVA_SIZE 256
6489c2ea8fSHemant Agrawal 
657ae777d0SHemant Agrawal /* Enable TX Congestion control support
667ae777d0SHemant Agrawal  * default is disable
677ae777d0SHemant Agrawal  */
68a0840963SHemant Agrawal #define DPAA2_TX_CGR_OFF	0x01
697ae777d0SHemant Agrawal 
7023d6a87eSHemant Agrawal /* Disable RX tail drop, default is enable */
7123d6a87eSHemant Agrawal #define DPAA2_RX_TAILDROP_OFF	0x04
728d21c563SHemant Agrawal /* Tx confirmation enabled */
7390762e5cSVanshika Shukla #define DPAA2_TX_CONF_ENABLE	0x06
7423d6a87eSHemant Agrawal 
75e45956ceSVanshika Shukla /* DPDMUX index for DPMAC */
76e45956ceSVanshika Shukla #define DPAA2_DPDMUX_DPMAC_IDX 0
77e45956ceSVanshika Shukla 
78f023d059SJun Yang /* HW loopback the egress traffic to self ingress*/
79f023d059SJun Yang #define DPAA2_TX_MAC_LOOPBACK_MODE 0x20
80f023d059SJun Yang 
81f023d059SJun Yang #define DPAA2_TX_SERDES_LOOPBACK_MODE 0x40
82f023d059SJun Yang 
83f023d059SJun Yang #define DPAA2_TX_DPNI_LOOPBACK_MODE 0x80
84f023d059SJun Yang 
85f023d059SJun Yang #define DPAA2_TX_LOOPBACK_MODE \
86f023d059SJun Yang 	(DPAA2_TX_MAC_LOOPBACK_MODE | \
87f023d059SJun Yang 	DPAA2_TX_SERDES_LOOPBACK_MODE | \
88f023d059SJun Yang 	DPAA2_TX_DPNI_LOOPBACK_MODE)
89f023d059SJun Yang 
90762b275fSHemant Agrawal #define DPAA2_RSS_OFFLOAD_ALL ( \
91295968d1SFerruh Yigit 	RTE_ETH_RSS_L2_PAYLOAD | \
92295968d1SFerruh Yigit 	RTE_ETH_RSS_IP | \
93295968d1SFerruh Yigit 	RTE_ETH_RSS_UDP | \
94295968d1SFerruh Yigit 	RTE_ETH_RSS_TCP | \
95295968d1SFerruh Yigit 	RTE_ETH_RSS_SCTP | \
96295968d1SFerruh Yigit 	RTE_ETH_RSS_MPLS | \
97295968d1SFerruh Yigit 	RTE_ETH_RSS_C_VLAN | \
98295968d1SFerruh Yigit 	RTE_ETH_RSS_S_VLAN | \
99295968d1SFerruh Yigit 	RTE_ETH_RSS_ESP | \
100295968d1SFerruh Yigit 	RTE_ETH_RSS_AH | \
101295968d1SFerruh Yigit 	RTE_ETH_RSS_PPPOE)
102762b275fSHemant Agrawal 
103a5852a94SNipun Gupta /* LX2 FRC Parsed values (Little Endian) */
104a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_ETHER		0x0060
105a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4		0x0000
106a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6		0x0020
107a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_EXT \
108a5852a94SNipun Gupta 			(0x0001 | DPAA2_PKT_TYPE_IPV4)
109a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_EXT \
110a5852a94SNipun Gupta 			(0x0001 | DPAA2_PKT_TYPE_IPV6)
111a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_TCP \
112a5852a94SNipun Gupta 			(0x000e | DPAA2_PKT_TYPE_IPV4)
113a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_TCP \
114a5852a94SNipun Gupta 			(0x000e | DPAA2_PKT_TYPE_IPV6)
115a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_UDP \
116a5852a94SNipun Gupta 			(0x0010 | DPAA2_PKT_TYPE_IPV4)
117a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_UDP \
118a5852a94SNipun Gupta 			(0x0010 | DPAA2_PKT_TYPE_IPV6)
119a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_SCTP	\
120a5852a94SNipun Gupta 			(0x000f | DPAA2_PKT_TYPE_IPV4)
121a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_SCTP	\
122a5852a94SNipun Gupta 			(0x000f | DPAA2_PKT_TYPE_IPV6)
123a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV4_ICMP \
124a5852a94SNipun Gupta 			(0x0003 | DPAA2_PKT_TYPE_IPV4_EXT)
125a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_IPV6_ICMP \
126a5852a94SNipun Gupta 			(0x0003 | DPAA2_PKT_TYPE_IPV6_EXT)
127a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_VLAN_1		0x0160
128a5852a94SNipun Gupta #define DPAA2_PKT_TYPE_VLAN_2		0x0260
129a5852a94SNipun Gupta 
13075e2a1d4SGagandeep Singh /* Global pool used by driver for SG list TX */
13175e2a1d4SGagandeep Singh extern struct rte_mempool *dpaa2_tx_sg_pool;
13275e2a1d4SGagandeep Singh /* Maximum SG segments */
13375e2a1d4SGagandeep Singh #define DPAA2_MAX_SGS 128
13475e2a1d4SGagandeep Singh /* SG pool size */
13575e2a1d4SGagandeep Singh #define DPAA2_POOL_SIZE 2048
13675e2a1d4SGagandeep Singh /* SG pool cache size */
13775e2a1d4SGagandeep Singh #define DPAA2_POOL_CACHE_SIZE 256
138b0074a7bSGagandeep Singh /* structure to free external and indirect
139b0074a7bSGagandeep Singh  * buffers.
140b0074a7bSGagandeep Singh  */
141b0074a7bSGagandeep Singh struct sw_buf_free {
142b0074a7bSGagandeep Singh 	/* To which packet this segment belongs */
143b0074a7bSGagandeep Singh 	uint16_t pkt_id;
144b0074a7bSGagandeep Singh 	/* The actual segment */
145b0074a7bSGagandeep Singh 	struct rte_mbuf *seg;
146b0074a7bSGagandeep Singh };
14775e2a1d4SGagandeep Singh 
148c1870f65SAkhil Goyal /* enable timestamp in mbuf*/
149724f79dfSHemant Agrawal extern bool dpaa2_enable_ts[];
15061c41e2eSThomas Monjalon extern uint64_t dpaa2_timestamp_rx_dynflag;
15161c41e2eSThomas Monjalon extern int dpaa2_timestamp_dynfield_offset;
152c1870f65SAkhil Goyal 
1537be78d02SJosh Soref /* Externally defined */
154fe2b986aSSunil Kumar Kori extern const struct rte_flow_ops dpaa2_flow_ops;
155fe2b986aSSunil Kumar Kori 
156ac624068SGagandeep Singh extern const struct rte_tm_ops dpaa2_tm_ops;
157ac624068SGagandeep Singh 
1584690a611SNipun Gupta extern bool dpaa2_enable_err_queue;
1594690a611SNipun Gupta 
16093e41cb3SJun Yang extern bool dpaa2_print_parser_result;
16193e41cb3SJun Yang 
16293e41cb3SJun Yang #define DPAA2_FAPR_SIZE \
16393e41cb3SJun Yang 	(sizeof(struct dpaa2_annot_hdr) - \
16493e41cb3SJun Yang 	offsetof(struct dpaa2_annot_hdr, word3))
16593e41cb3SJun Yang 
16693e41cb3SJun Yang #define DPAA2_PR_NXTHDR_OFFSET 0
16793e41cb3SJun Yang 
16893e41cb3SJun Yang #define DPAA2_FAFE_PSR_OFFSET 2
16993e41cb3SJun Yang #define DPAA2_FAFE_PSR_SIZE 2
17093e41cb3SJun Yang 
17193e41cb3SJun Yang #define DPAA2_FAF_PSR_OFFSET 4
17293e41cb3SJun Yang #define DPAA2_FAF_PSR_SIZE 12
17393e41cb3SJun Yang 
17493e41cb3SJun Yang #define DPAA2_FAF_TOTAL_SIZE \
17593e41cb3SJun Yang 	(DPAA2_FAFE_PSR_SIZE + DPAA2_FAF_PSR_SIZE)
17693e41cb3SJun Yang 
17793e41cb3SJun Yang /* Just most popular Frame attribute flags (FAF) here.*/
17893e41cb3SJun Yang enum dpaa2_rx_faf_offset {
17993e41cb3SJun Yang 	/* Set by SP start*/
18093e41cb3SJun Yang 	FAFE_VXLAN_IN_VLAN_FRAM = 0,
18193e41cb3SJun Yang 	FAFE_VXLAN_IN_IPV4_FRAM = 1,
18293e41cb3SJun Yang 	FAFE_VXLAN_IN_IPV6_FRAM = 2,
18393e41cb3SJun Yang 	FAFE_VXLAN_IN_UDP_FRAM = 3,
18493e41cb3SJun Yang 	FAFE_VXLAN_IN_TCP_FRAM = 4,
185a8a6b82eSJun Yang 
186a8a6b82eSJun Yang 	FAFE_ECPRI_FRAM = 7,
18793e41cb3SJun Yang 	/* Set by SP end*/
18893e41cb3SJun Yang 
18993e41cb3SJun Yang 	FAF_GTP_PRIMED_FRAM = 1 + DPAA2_FAFE_PSR_SIZE * 8,
19093e41cb3SJun Yang 	FAF_PTP_FRAM = 3 + DPAA2_FAFE_PSR_SIZE * 8,
19193e41cb3SJun Yang 	FAF_VXLAN_FRAM = 4 + DPAA2_FAFE_PSR_SIZE * 8,
19293e41cb3SJun Yang 	FAF_ETH_FRAM = 10 + DPAA2_FAFE_PSR_SIZE * 8,
19393e41cb3SJun Yang 	FAF_LLC_SNAP_FRAM = 18 + DPAA2_FAFE_PSR_SIZE * 8,
19493e41cb3SJun Yang 	FAF_VLAN_FRAM = 21 + DPAA2_FAFE_PSR_SIZE * 8,
19593e41cb3SJun Yang 	FAF_PPPOE_PPP_FRAM = 25 + DPAA2_FAFE_PSR_SIZE * 8,
19693e41cb3SJun Yang 	FAF_MPLS_FRAM = 27 + DPAA2_FAFE_PSR_SIZE * 8,
19793e41cb3SJun Yang 	FAF_ARP_FRAM = 30 + DPAA2_FAFE_PSR_SIZE * 8,
19893e41cb3SJun Yang 	FAF_IPV4_FRAM = 34 + DPAA2_FAFE_PSR_SIZE * 8,
19993e41cb3SJun Yang 	FAF_IPV6_FRAM = 42 + DPAA2_FAFE_PSR_SIZE * 8,
20093e41cb3SJun Yang 	FAF_IP_FRAM = 48 + DPAA2_FAFE_PSR_SIZE * 8,
201*25e5845bSJun Yang 	FAF_IP_FRAG_FRAM = 50 + DPAA2_FAFE_PSR_SIZE * 8,
20293e41cb3SJun Yang 	FAF_ICMP_FRAM = 57 + DPAA2_FAFE_PSR_SIZE * 8,
20393e41cb3SJun Yang 	FAF_IGMP_FRAM = 58 + DPAA2_FAFE_PSR_SIZE * 8,
20493e41cb3SJun Yang 	FAF_GRE_FRAM = 65 + DPAA2_FAFE_PSR_SIZE * 8,
20593e41cb3SJun Yang 	FAF_UDP_FRAM = 70 + DPAA2_FAFE_PSR_SIZE * 8,
20693e41cb3SJun Yang 	FAF_TCP_FRAM = 72 + DPAA2_FAFE_PSR_SIZE * 8,
20793e41cb3SJun Yang 	FAF_IPSEC_FRAM = 77 + DPAA2_FAFE_PSR_SIZE * 8,
20893e41cb3SJun Yang 	FAF_IPSEC_ESP_FRAM = 78 + DPAA2_FAFE_PSR_SIZE * 8,
20993e41cb3SJun Yang 	FAF_IPSEC_AH_FRAM = 79 + DPAA2_FAFE_PSR_SIZE * 8,
21093e41cb3SJun Yang 	FAF_SCTP_FRAM = 81 + DPAA2_FAFE_PSR_SIZE * 8,
21193e41cb3SJun Yang 	FAF_DCCP_FRAM = 83 + DPAA2_FAFE_PSR_SIZE * 8,
21293e41cb3SJun Yang 	FAF_GTP_FRAM = 87 + DPAA2_FAFE_PSR_SIZE * 8,
21393e41cb3SJun Yang 	FAF_ESP_FRAM = 89 + DPAA2_FAFE_PSR_SIZE * 8,
21493e41cb3SJun Yang };
21593e41cb3SJun Yang 
216a8a6b82eSJun Yang enum dpaa2_ecpri_fafe_type {
217a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_0 = (8 - FAFE_ECPRI_FRAM),
218a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_1 = (8 - FAFE_ECPRI_FRAM) | (1 << 1),
219a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_2 = (8 - FAFE_ECPRI_FRAM) | (2 << 1),
220a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_3 = (8 - FAFE_ECPRI_FRAM) | (3 << 1),
221a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_4 = (8 - FAFE_ECPRI_FRAM) | (4 << 1),
222a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_5 = (8 - FAFE_ECPRI_FRAM) | (5 << 1),
223a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_6 = (8 - FAFE_ECPRI_FRAM) | (6 << 1),
224a8a6b82eSJun Yang 	ECPRI_FAFE_TYPE_7 = (8 - FAFE_ECPRI_FRAM) | (7 << 1)
225a8a6b82eSJun Yang };
226a8a6b82eSJun Yang 
22793e41cb3SJun Yang #define DPAA2_PR_ETH_OFF_OFFSET 19
22893e41cb3SJun Yang #define DPAA2_PR_TCI_OFF_OFFSET 21
22993e41cb3SJun Yang #define DPAA2_PR_LAST_ETYPE_OFFSET 23
23093e41cb3SJun Yang #define DPAA2_PR_L3_OFF_OFFSET 27
23193e41cb3SJun Yang #define DPAA2_PR_L4_OFF_OFFSET 30
23293e41cb3SJun Yang #define DPAA2_PR_L5_OFF_OFFSET 31
23393e41cb3SJun Yang #define DPAA2_PR_NXTHDR_OFF_OFFSET 34
23493e41cb3SJun Yang 
23593e41cb3SJun Yang /* Set by SP for vxlan distribution start*/
23693e41cb3SJun Yang #define DPAA2_VXLAN_IN_TCI_OFFSET 16
23793e41cb3SJun Yang 
23893e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR0_OFFSET 20
23993e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR1_OFFSET 22
24093e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR2_OFFSET 24
24193e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR3_OFFSET 25
24293e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR4_OFFSET 26
24393e41cb3SJun Yang #define DPAA2_VXLAN_IN_DADDR5_OFFSET 28
24493e41cb3SJun Yang 
24593e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR0_OFFSET 29
24693e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR1_OFFSET 32
24793e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR2_OFFSET 33
24893e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR3_OFFSET 35
24993e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR4_OFFSET 41
25093e41cb3SJun Yang #define DPAA2_VXLAN_IN_SADDR5_OFFSET 42
25193e41cb3SJun Yang 
25293e41cb3SJun Yang #define DPAA2_VXLAN_VNI_OFFSET 43
25393e41cb3SJun Yang #define DPAA2_VXLAN_IN_TYPE_OFFSET 46
25493e41cb3SJun Yang /* Set by SP for vxlan distribution end*/
25593e41cb3SJun Yang 
256a8a6b82eSJun Yang /* ECPRI shares SP context with VXLAN*/
257a8a6b82eSJun Yang #define DPAA2_ECPRI_MSG_OFFSET DPAA2_VXLAN_VNI_OFFSET
258a8a6b82eSJun Yang 
259a8a6b82eSJun Yang #define DPAA2_ECPRI_MAX_EXTRACT_NB 8
260a8a6b82eSJun Yang 
26156c1817dSJun Yang struct ipv4_sd_addr_extract_rule {
26256c1817dSJun Yang 	uint32_t ipv4_src;
26356c1817dSJun Yang 	uint32_t ipv4_dst;
26456c1817dSJun Yang };
2655f176728SJun Yang 
26656c1817dSJun Yang struct ipv6_sd_addr_extract_rule {
26756c1817dSJun Yang 	uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
26856c1817dSJun Yang 	uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
26956c1817dSJun Yang };
27056c1817dSJun Yang 
27156c1817dSJun Yang struct ipv4_ds_addr_extract_rule {
27256c1817dSJun Yang 	uint32_t ipv4_dst;
27356c1817dSJun Yang 	uint32_t ipv4_src;
27456c1817dSJun Yang };
27556c1817dSJun Yang 
27656c1817dSJun Yang struct ipv6_ds_addr_extract_rule {
27756c1817dSJun Yang 	uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
27856c1817dSJun Yang 	uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
27956c1817dSJun Yang };
28056c1817dSJun Yang 
28156c1817dSJun Yang union ip_addr_extract_rule {
28256c1817dSJun Yang 	struct ipv4_sd_addr_extract_rule ipv4_sd_addr;
28356c1817dSJun Yang 	struct ipv6_sd_addr_extract_rule ipv6_sd_addr;
28456c1817dSJun Yang 	struct ipv4_ds_addr_extract_rule ipv4_ds_addr;
28556c1817dSJun Yang 	struct ipv6_ds_addr_extract_rule ipv6_ds_addr;
28656c1817dSJun Yang };
28756c1817dSJun Yang 
28856c1817dSJun Yang union ip_src_addr_extract_rule {
28956c1817dSJun Yang 	uint32_t ipv4_src;
29056c1817dSJun Yang 	uint8_t ipv6_src[NH_FLD_IPV6_ADDR_SIZE];
29156c1817dSJun Yang };
29256c1817dSJun Yang 
29356c1817dSJun Yang union ip_dst_addr_extract_rule {
29456c1817dSJun Yang 	uint32_t ipv4_dst;
29556c1817dSJun Yang 	uint8_t ipv6_dst[NH_FLD_IPV6_ADDR_SIZE];
29656c1817dSJun Yang };
29756c1817dSJun Yang 
29856c1817dSJun Yang enum ip_addr_extract_type {
29956c1817dSJun Yang 	IP_NONE_ADDR_EXTRACT,
30056c1817dSJun Yang 	IP_SRC_EXTRACT,
30156c1817dSJun Yang 	IP_DST_EXTRACT,
30256c1817dSJun Yang 	IP_SRC_DST_EXTRACT,
30356c1817dSJun Yang 	IP_DST_SRC_EXTRACT
30456c1817dSJun Yang };
30556c1817dSJun Yang 
30693e41cb3SJun Yang enum key_prot_type {
30739c8044fSJun Yang 	/* HW extracts from standard protocol fields*/
30893e41cb3SJun Yang 	DPAA2_NET_PROT_KEY,
30939c8044fSJun Yang 	/* HW extracts from FAF of PR*/
31039c8044fSJun Yang 	DPAA2_FAF_KEY,
31139c8044fSJun Yang 	/* HW extracts from PR other than FAF*/
31239c8044fSJun Yang 	DPAA2_PR_KEY
31393e41cb3SJun Yang };
31493e41cb3SJun Yang 
31556c1817dSJun Yang struct key_prot_field {
31693e41cb3SJun Yang 	enum key_prot_type type;
31756c1817dSJun Yang 	enum net_prot prot;
31856c1817dSJun Yang 	uint32_t key_field;
31956c1817dSJun Yang };
32056c1817dSJun Yang 
321e21bff64SJun Yang struct dpaa2_raw_region {
322e21bff64SJun Yang 	uint8_t raw_start;
323e21bff64SJun Yang 	uint8_t raw_size;
324e21bff64SJun Yang };
325e21bff64SJun Yang 
32656c1817dSJun Yang struct dpaa2_key_profile {
32756c1817dSJun Yang 	uint8_t num;
3285f176728SJun Yang 	uint8_t key_offset[DPKG_MAX_NUM_OF_EXTRACTS];
3295f176728SJun Yang 	uint8_t key_size[DPKG_MAX_NUM_OF_EXTRACTS];
33056c1817dSJun Yang 
33156c1817dSJun Yang 	enum ip_addr_extract_type ip_addr_type;
33256c1817dSJun Yang 	uint8_t ip_addr_extract_pos;
33356c1817dSJun Yang 	uint8_t ip_addr_extract_off;
33456c1817dSJun Yang 
335e21bff64SJun Yang 	uint8_t raw_extract_pos;
336e21bff64SJun Yang 	uint8_t raw_extract_off;
337e21bff64SJun Yang 	uint8_t raw_extract_num;
338e21bff64SJun Yang 
33956c1817dSJun Yang 	uint8_t l4_src_port_present;
34056c1817dSJun Yang 	uint8_t l4_src_port_pos;
34156c1817dSJun Yang 	uint8_t l4_src_port_offset;
34256c1817dSJun Yang 	uint8_t l4_dst_port_present;
34356c1817dSJun Yang 	uint8_t l4_dst_port_pos;
34456c1817dSJun Yang 	uint8_t l4_dst_port_offset;
34556c1817dSJun Yang 	struct key_prot_field prot_field[DPKG_MAX_NUM_OF_EXTRACTS];
34656c1817dSJun Yang 	uint16_t key_max_size;
347e21bff64SJun Yang 	struct dpaa2_raw_region raw_region;
3485f176728SJun Yang };
3495f176728SJun Yang 
3505f176728SJun Yang struct dpaa2_key_extract {
3515f176728SJun Yang 	struct dpkg_profile_cfg dpkg;
35256c1817dSJun Yang 	struct dpaa2_key_profile key_profile;
3535f176728SJun Yang };
3545f176728SJun Yang 
3555f176728SJun Yang struct extract_s {
3565f176728SJun Yang 	struct dpaa2_key_extract qos_key_extract;
3575f176728SJun Yang 	struct dpaa2_key_extract tc_key_extract[MAX_TCS];
35856c1817dSJun Yang 	uint8_t *qos_extract_param;
35956c1817dSJun Yang 	uint8_t *tc_extract_param[MAX_TCS];
3605f176728SJun Yang };
3615f176728SJun Yang 
362c147eae0SHemant Agrawal struct dpaa2_dev_priv {
363c147eae0SHemant Agrawal 	void *hw;
364c147eae0SHemant Agrawal 	int32_t hw_id;
3653e5a335dSHemant Agrawal 	int32_t qdid;
366c147eae0SHemant Agrawal 	uint16_t token;
3673e5a335dSHemant Agrawal 	uint8_t nb_tx_queues;
3683e5a335dSHemant Agrawal 	uint8_t nb_rx_queues;
36916c4a3c4SNipun Gupta 	uint32_t options;
3703e5a335dSHemant Agrawal 	void *rx_vq[MAX_RX_QUEUES];
3713e5a335dSHemant Agrawal 	void *tx_vq[MAX_TX_QUEUES];
372bee61d86SHemant Agrawal 	struct dpaa2_bp_list *bp_list; /**<Attached buffer pool list */
37372100f0dSGagandeep Singh 	void *tx_conf_vq[MAX_TX_QUEUES * DPAA2_MAX_CHANNELS];
3744690a611SNipun Gupta 	void *rx_err_vq;
3758d21c563SHemant Agrawal 	uint8_t flags; /*dpaa2 config flags */
37633fad432SHemant Agrawal 	uint8_t max_mac_filters;
37733fad432SHemant Agrawal 	uint8_t max_vlan_filters;
37816bbc98aSShreyansh Jain 	uint8_t num_rx_tc;
37972100f0dSGagandeep Singh 	uint8_t num_tx_tc;
3804ce58f8aSJun Yang 	uint16_t qos_entries;
3814ce58f8aSJun Yang 	uint16_t fs_entries;
3824ce58f8aSJun Yang 	uint8_t dist_queues;
38372100f0dSGagandeep Singh 	uint8_t num_channels;
38416c4a3c4SNipun Gupta 	uint8_t en_ordered;
38516c4a3c4SNipun Gupta 	uint8_t en_loose_ordered;
38613b856acSHemant Agrawal 	uint8_t max_cgs;
38713b856acSHemant Agrawal 	uint8_t cgid_in_use[MAX_RX_QUEUES];
388fe2b986aSSunil Kumar Kori 
389a0f8ddc4SJun Yang 	enum rte_dpaa2_dev_type ep_dev_type;   /**< Endpoint Device Type */
390a0f8ddc4SJun Yang 	uint16_t ep_object_id;                 /**< Endpoint DPAA2 Object ID */
391a0f8ddc4SJun Yang 	char ep_name[RTE_DEV_NAME_MAX_LEN];
392a0f8ddc4SJun Yang 
3935f176728SJun Yang 	struct extract_s extract;
394bc767866SPriyanka Jain 
39572ec7a67SSunil Kumar Kori 	uint16_t ss_offset;
39672ec7a67SSunil Kumar Kori 	uint64_t ss_iova;
39772ec7a67SSunil Kumar Kori 	uint64_t ss_param_iova;
398bc767866SPriyanka Jain 	/*stores timestamp of last received packet on dev*/
399bc767866SPriyanka Jain 	uint64_t rx_timestamp;
400bc767866SPriyanka Jain 	/*stores timestamp of last received tx confirmation packet on dev*/
401bc767866SPriyanka Jain 	uint64_t tx_timestamp;
402bc767866SPriyanka Jain 	/* stores pointer to next tx_conf queue that should be processed,
403bc767866SPriyanka Jain 	 * it corresponds to last packet transmitted
404bc767866SPriyanka Jain 	 */
405bc767866SPriyanka Jain 	struct dpaa2_queue *next_tx_conf_queue;
40681c42c84SShreyansh Jain 
40781c42c84SShreyansh Jain 	struct rte_eth_dev *eth_dev; /**< Pointer back to holding ethdev */
408f023d059SJun Yang 	rte_spinlock_t lpbk_qp_lock;
40981c42c84SShreyansh Jain 
41072100f0dSGagandeep Singh 	uint8_t channel_inuse;
4112013e308SVanshika Shukla 	/* Stores correction offset for one step timestamping */
4122013e308SVanshika Shukla 	uint16_t ptp_correction_offset;
4132013e308SVanshika Shukla 
41456c1817dSJun Yang 	struct dpaa2_dev_flow *curr;
41556c1817dSJun Yang 	LIST_HEAD(, dpaa2_dev_flow) flows;
416ac624068SGagandeep Singh 	LIST_HEAD(nodes, dpaa2_tm_node) nodes;
417ac624068SGagandeep Singh 	LIST_HEAD(shaper_profiles, dpaa2_tm_shaper_profile) shaper_profiles;
418c147eae0SHemant Agrawal };
41989c2ea8fSHemant Agrawal 
420fe2b986aSSunil Kumar Kori int dpaa2_distset_to_dpkg_profile_cfg(uint64_t req_dist_set,
421fe2b986aSSunil Kumar Kori 				      struct dpkg_profile_cfg *kg_cfg);
422fe2b986aSSunil Kumar Kori 
42389c2ea8fSHemant Agrawal int dpaa2_setup_flow_dist(struct rte_eth_dev *eth_dev,
424271f5aeeSJun Yang 		uint64_t req_dist_set, int tc_index);
42589c2ea8fSHemant Agrawal 
42689c2ea8fSHemant Agrawal int dpaa2_remove_flow_dist(struct rte_eth_dev *eth_dev,
42789c2ea8fSHemant Agrawal 			   uint8_t tc_index);
42889c2ea8fSHemant Agrawal 
4296ac5a55bSJun Yang int dpaa2_attach_bp_list(struct dpaa2_dev_priv *priv,
4306ac5a55bSJun Yang 	struct fsl_mc_io *dpni, void *blist);
431bee61d86SHemant Agrawal 
4326b6ca751SHemant Agrawal __rte_internal
433b677d4c6SNipun Gupta int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
434b677d4c6SNipun Gupta 		int eth_rx_queue_id,
4353835cc22SNipun Gupta 		struct dpaa2_dpcon_dev *dpcon,
436b677d4c6SNipun Gupta 		const struct rte_event_eth_rx_adapter_queue_conf *queue_conf);
437b677d4c6SNipun Gupta 
4386b6ca751SHemant Agrawal __rte_internal
439b677d4c6SNipun Gupta int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
440b677d4c6SNipun Gupta 		int eth_rx_queue_id);
441b677d4c6SNipun Gupta 
44220191ab3SNipun Gupta uint16_t dpaa2_dev_rx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);
44320191ab3SNipun Gupta 
444a3a997f0SHemant Agrawal uint16_t dpaa2_dev_loopback_rx(void *queue, struct rte_mbuf **bufs,
445a3a997f0SHemant Agrawal 				uint16_t nb_pkts);
446a3a997f0SHemant Agrawal 
4475c6942fdSHemant Agrawal uint16_t dpaa2_dev_prefetch_rx(void *queue, struct rte_mbuf **bufs,
4485c6942fdSHemant Agrawal 			       uint16_t nb_pkts);
449b677d4c6SNipun Gupta void dpaa2_dev_process_parallel_event(struct qbman_swp *swp,
450b677d4c6SNipun Gupta 				      const struct qbman_fd *fd,
451b677d4c6SNipun Gupta 				      const struct qbman_result *dq,
452b677d4c6SNipun Gupta 				      struct dpaa2_queue *rxq,
453b677d4c6SNipun Gupta 				      struct rte_event *ev);
4542d378863SNipun Gupta void dpaa2_dev_process_atomic_event(struct qbman_swp *swp,
4552d378863SNipun Gupta 				    const struct qbman_fd *fd,
4562d378863SNipun Gupta 				    const struct qbman_result *dq,
4572d378863SNipun Gupta 				    struct dpaa2_queue *rxq,
4582d378863SNipun Gupta 				    struct rte_event *ev);
45916c4a3c4SNipun Gupta void dpaa2_dev_process_ordered_event(struct qbman_swp *swp,
46016c4a3c4SNipun Gupta 				     const struct qbman_fd *fd,
46116c4a3c4SNipun Gupta 				     const struct qbman_result *dq,
46216c4a3c4SNipun Gupta 				     struct dpaa2_queue *rxq,
46316c4a3c4SNipun Gupta 				     struct rte_event *ev);
464cd9935ceSHemant Agrawal uint16_t dpaa2_dev_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts);
46516c4a3c4SNipun Gupta uint16_t dpaa2_dev_tx_ordered(void *queue, struct rte_mbuf **bufs,
46616c4a3c4SNipun Gupta 			      uint16_t nb_pkts);
467ed1cdbedSJun Yang __rte_internal
468ed1cdbedSJun Yang uint16_t dpaa2_dev_tx_multi_txq_ordered(void **queue,
469ed1cdbedSJun Yang 		struct rte_mbuf **bufs, uint16_t nb_pkts);
470ed1cdbedSJun Yang 
47195af364bSGagandeep Singh void dpaa2_dev_free_eqresp_buf(uint16_t eqresp_ci, struct dpaa2_queue *dpaa2_q);
4726a556bd6SHemant Agrawal void dpaa2_flow_clean(struct rte_eth_dev *dev);
473f2fc83b4SThomas Monjalon uint16_t dpaa2_dev_tx_conf(void *queue)  __rte_unused;
47416c4a3c4SNipun Gupta 
475bc767866SPriyanka Jain int dpaa2_timesync_enable(struct rte_eth_dev *dev);
476bc767866SPriyanka Jain int dpaa2_timesync_disable(struct rte_eth_dev *dev);
477bc767866SPriyanka Jain int dpaa2_timesync_read_time(struct rte_eth_dev *dev,
478bc767866SPriyanka Jain 					struct timespec *timestamp);
479bc767866SPriyanka Jain int dpaa2_timesync_write_time(struct rte_eth_dev *dev,
480bc767866SPriyanka Jain 					const struct timespec *timestamp);
481bc767866SPriyanka Jain int dpaa2_timesync_adjust_time(struct rte_eth_dev *dev, int64_t delta);
482bc767866SPriyanka Jain int dpaa2_timesync_read_rx_timestamp(struct rte_eth_dev *dev,
483bc767866SPriyanka Jain 						struct timespec *timestamp,
484bc767866SPriyanka Jain 						uint32_t flags __rte_unused);
485bc767866SPriyanka Jain int dpaa2_timesync_read_tx_timestamp(struct rte_eth_dev *dev,
486bc767866SPriyanka Jain 					  struct timespec *timestamp);
487f023d059SJun Yang 
488f023d059SJun Yang int dpaa2_dev_recycle_config(struct rte_eth_dev *eth_dev);
489f023d059SJun Yang int dpaa2_dev_recycle_deconfig(struct rte_eth_dev *eth_dev);
49099400780SJun Yang int dpaa2_soft_parser_loaded(void);
49199400780SJun Yang 
492f023d059SJun Yang int dpaa2_dev_recycle_qp_setup(struct rte_dpaa2_device *dpaa2_dev,
493f023d059SJun Yang 	uint16_t qidx, uint64_t cntx,
494f023d059SJun Yang 	eth_rx_burst_t tx_lpbk, eth_tx_burst_t rx_lpbk,
495f023d059SJun Yang 	struct dpaa2_queue **txq,
496f023d059SJun Yang 	struct dpaa2_queue **rxq);
497f023d059SJun Yang 
498c147eae0SHemant Agrawal #endif /* _DPAA2_ETHDEV_H */
499