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