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