xref: /dpdk/drivers/net/nfp/nfp_net_common.h (revision 8bd6f5403743ccea850514e29d38fb239312f61d)
111e9eae4SChaoyong He /* SPDX-License-Identifier: BSD-3-Clause
211e9eae4SChaoyong He  * Copyright (c) 2014-2018 Netronome Systems, Inc.
311e9eae4SChaoyong He  * All rights reserved.
411e9eae4SChaoyong He  */
511e9eae4SChaoyong He 
611e9eae4SChaoyong He #ifndef __NFP_NET_COMMON_H__
711e9eae4SChaoyong He #define __NFP_NET_COMMON_H__
811e9eae4SChaoyong He 
911e9eae4SChaoyong He #include <bus_pci_driver.h>
1011e9eae4SChaoyong He #include <ethdev_driver.h>
11503ac807SChaoyong He #include <nfp_common.h>
124967a1c8SChaoyong He #include <nfp_dev.h>
1311e9eae4SChaoyong He #include <rte_spinlock.h>
1411e9eae4SChaoyong He 
156b4273a0SLong Wu #include "nfpcore/nfp_sync.h"
16e2018e37SChaoyong He #include "nfp_net_ctrl.h"
17600f6d2cSLong Wu #include "nfp_service.h"
18ddcd598fSLong Wu #include "nfp_net_meta.h"
1911e9eae4SChaoyong He 
2011e9eae4SChaoyong He /* Interrupt definitions */
2111e9eae4SChaoyong He #define NFP_NET_IRQ_LSC_IDX             0
2211e9eae4SChaoyong He 
2311e9eae4SChaoyong He /* Default values for RX/TX configuration */
2411e9eae4SChaoyong He #define DEFAULT_RX_FREE_THRESH  32
2511e9eae4SChaoyong He #define DEFAULT_RX_PTHRESH      8
2611e9eae4SChaoyong He #define DEFAULT_RX_HTHRESH      8
2711e9eae4SChaoyong He #define DEFAULT_RX_WTHRESH      0
2811e9eae4SChaoyong He 
2911e9eae4SChaoyong He #define DEFAULT_TX_RS_THRESH    32
3011e9eae4SChaoyong He #define DEFAULT_TX_FREE_THRESH  32
3111e9eae4SChaoyong He #define DEFAULT_TX_PTHRESH      32
3211e9eae4SChaoyong He #define DEFAULT_TX_HTHRESH      0
3311e9eae4SChaoyong He #define DEFAULT_TX_WTHRESH      0
3411e9eae4SChaoyong He #define DEFAULT_TX_RSBIT_THRESH 32
3511e9eae4SChaoyong He 
3611e9eae4SChaoyong He /* Alignment for dma zones */
3711e9eae4SChaoyong He #define NFP_MEMZONE_ALIGN       128
3811e9eae4SChaoyong He 
3911e9eae4SChaoyong He /* Number of supported physical ports */
4011e9eae4SChaoyong He #define NFP_MAX_PHYPORTS        12
4111e9eae4SChaoyong He 
428ba461d1SPeng Zhang #define NFP_BEAT_LENGTH         8
438ba461d1SPeng Zhang 
44b458a2a0SLong Wu /* RSS capability*/
45b458a2a0SLong Wu #define NFP_NET_RSS_CAP (RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_IPV6  | \
46b458a2a0SLong Wu 				RTE_ETH_RSS_NONFRAG_IPV4_TCP  | \
47b458a2a0SLong Wu 				RTE_ETH_RSS_NONFRAG_IPV4_UDP  | \
48b458a2a0SLong Wu 				RTE_ETH_RSS_NONFRAG_IPV4_SCTP | \
49b458a2a0SLong Wu 				RTE_ETH_RSS_NONFRAG_IPV6_TCP  | \
50b458a2a0SLong Wu 				RTE_ETH_RSS_NONFRAG_IPV6_UDP  | \
51b458a2a0SLong Wu 				RTE_ETH_RSS_NONFRAG_IPV6_SCTP)
52b458a2a0SLong Wu 
53b7adbb2eSZerun Fu /* The length of firmware version string */
54b7adbb2eSZerun Fu #define FW_VER_LEN        32
55b7adbb2eSZerun Fu 
568ba461d1SPeng Zhang /*
578ba461d1SPeng Zhang  * Each PF has corresponding word to beat:
588ba461d1SPeng Zhang  * Offset | Usage
598ba461d1SPeng Zhang  *   0    | magic number
608ba461d1SPeng Zhang  *   8    | beat of Pf0
618ba461d1SPeng Zhang  *   16   | beat of Pf1
628ba461d1SPeng Zhang  *   24   | beat of Pf2
638ba461d1SPeng Zhang  *   32   | beat of Pf3
648ba461d1SPeng Zhang  */
658ba461d1SPeng Zhang #define NFP_BEAT_OFFSET(_x)     (((_x) + 1) * NFP_BEAT_LENGTH)
668ba461d1SPeng Zhang 
6711e9eae4SChaoyong He /* Firmware application ID's */
6811e9eae4SChaoyong He enum nfp_app_fw_id {
6911e9eae4SChaoyong He 	NFP_APP_FW_CORE_NIC               = 0x1,
7011e9eae4SChaoyong He 	NFP_APP_FW_FLOWER_NIC             = 0x3,
7111e9eae4SChaoyong He };
7211e9eae4SChaoyong He 
7311e9eae4SChaoyong He /* Parsed control BAR TLV capabilities */
7411e9eae4SChaoyong He struct nfp_net_tlv_caps {
7511e9eae4SChaoyong He 	uint32_t mbox_off;               /**< VNIC mailbox area offset */
7611e9eae4SChaoyong He 	uint32_t mbox_len;               /**< VNIC mailbox area length */
7711e9eae4SChaoyong He 	uint32_t mbox_cmsg_types;        /**< Cmsgs which can be passed through the mailbox */
7811e9eae4SChaoyong He };
7911e9eae4SChaoyong He 
808ad2cc8fSPeng Zhang struct nfp_multi_pf {
818ad2cc8fSPeng Zhang 	/** Support multiple PF */
828ad2cc8fSPeng Zhang 	bool enabled;
833b00109dSPeng Zhang 	/** Function index */
843b00109dSPeng Zhang 	uint8_t function_id;
858ba461d1SPeng Zhang 	/** Pointer to CPP area for beat to keepalive */
868ba461d1SPeng Zhang 	struct nfp_cpp_area *beat_area;
878ba461d1SPeng Zhang 	/** Pointer to mapped beat address used for keepalive */
888ba461d1SPeng Zhang 	uint8_t *beat_addr;
898ad2cc8fSPeng Zhang };
908ad2cc8fSPeng Zhang 
91ff9f5a56SChaoyong He struct nfp_flower_service;
92ff9f5a56SChaoyong He 
9342f603aaSLong Wu struct nfp_process_share {
9442f603aaSLong Wu 	struct nfp_flower_service *fl_service;
9542f603aaSLong Wu };
9642f603aaSLong Wu 
97b301fd73SPeng Zhang struct nfp_devargs {
98b301fd73SPeng Zhang 	/** Force reload firmware */
99b301fd73SPeng Zhang 	bool force_reload_fw;
100c50bf4f0SLong Wu 
101c50bf4f0SLong Wu 	/** Enable CPP bridge service */
102c50bf4f0SLong Wu 	bool cpp_service_enable;
103b301fd73SPeng Zhang };
104b301fd73SPeng Zhang 
10511e9eae4SChaoyong He struct nfp_pf_dev {
10611e9eae4SChaoyong He 	/** Backpointer to associated pci device */
10711e9eae4SChaoyong He 	struct rte_pci_device *pci_dev;
10811e9eae4SChaoyong He 
10911e9eae4SChaoyong He 	enum nfp_app_fw_id app_fw_id;
11011e9eae4SChaoyong He 
111000feb4cSChaoyong He 	struct nfp_net_fw_ver ver;
112000feb4cSChaoyong He 
11311e9eae4SChaoyong He 	/** Pointer to the app running on the PF */
11411e9eae4SChaoyong He 	void *app_fw_priv;
11511e9eae4SChaoyong He 
11611e9eae4SChaoyong He 	/** The eth table reported by firmware */
11711e9eae4SChaoyong He 	struct nfp_eth_table *nfp_eth_table;
11811e9eae4SChaoyong He 
11911e9eae4SChaoyong He 	uint8_t *ctrl_bar;
12019bd7cceSChaoyong He 	uint32_t ctrl_bar_size;
12111e9eae4SChaoyong He 
12211e9eae4SChaoyong He 	struct nfp_cpp *cpp;
12311e9eae4SChaoyong He 	struct nfp_cpp_area *ctrl_area;
12411e9eae4SChaoyong He 	struct nfp_cpp_area *qc_area;
12511e9eae4SChaoyong He 
12619542093SPeng Zhang 	/** Pointer to the CPP area for the VF configuration BAR */
12719542093SPeng Zhang 	struct nfp_cpp_area *vf_area;
12819542093SPeng Zhang 	/** Pointer to mapped VF configuration area */
12919542093SPeng Zhang 	uint8_t *vf_bar;
13019542093SPeng Zhang 	/** Pointer to the CPP area for the VF config table */
13119542093SPeng Zhang 	struct nfp_cpp_area *vf_cfg_tbl_area;
13219542093SPeng Zhang 	/** Pointer to mapped VF config table */
13319542093SPeng Zhang 	uint8_t *vf_cfg_tbl_bar;
13419542093SPeng Zhang 
13511e9eae4SChaoyong He 	uint8_t *qc_bar;
13611e9eae4SChaoyong He 
137e54d68a0SChaoyong He 	struct nfp_cpp_area *mac_stats_area;
138e54d68a0SChaoyong He 	uint8_t *mac_stats_bar;
139e54d68a0SChaoyong He 
14011e9eae4SChaoyong He 	struct nfp_hwinfo *hwinfo;
14111e9eae4SChaoyong He 	struct nfp_rtsym_table *sym_tbl;
14211e9eae4SChaoyong He 
143600f6d2cSLong Wu 	/** Service info of cpp bridge service */
144600f6d2cSLong Wu 	struct nfp_service_info cpp_service_info;
1458ad2cc8fSPeng Zhang 
1468ad2cc8fSPeng Zhang 	/** Multiple PF configuration */
1478ad2cc8fSPeng Zhang 	struct nfp_multi_pf multi_pf;
1483110ab73SZerun Fu 
1493110ab73SZerun Fu 	/** Supported speeds bitmap */
1503110ab73SZerun Fu 	uint32_t speed_capa;
1516b4273a0SLong Wu 
1526b4273a0SLong Wu 	/** Synchronized info */
1536b4273a0SLong Wu 	struct nfp_sync *sync;
15442f603aaSLong Wu 	struct nfp_process_share process_share;
155b301fd73SPeng Zhang 
156b301fd73SPeng Zhang 	/** NFP devarg param */
157b301fd73SPeng Zhang 	struct nfp_devargs devargs;
1586408420cSPeng Zhang 
15920086cb8SPeng Zhang 	/** Number of VFs supported by firmware shared by all PFs */
16020086cb8SPeng Zhang 	uint16_t max_vfs;
16120086cb8SPeng Zhang 	/** Number of VFs supported by firmware for this PF */
16220086cb8SPeng Zhang 	uint16_t sriov_vf;
16320086cb8SPeng Zhang 
1646408420cSPeng Zhang 	uint8_t total_phyports;
165d4e160acSPeng Zhang 	/** Id of first VF that belongs to this PF */
166d4e160acSPeng Zhang 	uint8_t vf_base_id;
167bb24eb38SPeng Zhang 	/** Number of queues per VF */
168bb24eb38SPeng Zhang 	uint32_t queue_per_vf;
169aaa57548SZerun Fu 
170aaa57548SZerun Fu 	/** Record the speed uptade */
171aaa57548SZerun Fu 	bool speed_updated;
172636e133eSPeng Zhang 
173636e133eSPeng Zhang 	/** Function pointer used to check the metadata of recv pkts. */
174636e133eSPeng Zhang 	bool (*recv_pkt_meta_check_t)(struct nfp_net_meta_parsed *meta);
17511e9eae4SChaoyong He };
17611e9eae4SChaoyong He 
177849a9ffbSLong Wu #define NFP_NET_ETH_FLOW_LIMIT    8
178849a9ffbSLong Wu #define NFP_NET_IPV4_FLOW_LIMIT   1024
179849a9ffbSLong Wu #define NFP_NET_IPV6_FLOW_LIMIT   1024
180849a9ffbSLong Wu 
181849a9ffbSLong Wu #define NFP_NET_FLOW_LIMIT    ((NFP_NET_ETH_FLOW_LIMIT) +   \
182849a9ffbSLong Wu 				(NFP_NET_IPV4_FLOW_LIMIT) + \
183849a9ffbSLong Wu 				(NFP_NET_IPV6_FLOW_LIMIT))
184849a9ffbSLong Wu 
185849a9ffbSLong Wu struct nfp_net_flow_count {
186849a9ffbSLong Wu 	uint16_t eth_count;
187849a9ffbSLong Wu 	uint16_t ipv4_count;
188849a9ffbSLong Wu 	uint16_t ipv6_count;
189849a9ffbSLong Wu };
1908153bc6fSChaoyong He 
19150c033c2SLong Wu #define NFP_NET_HASH_REDUNDANCE (1.2)
19250c033c2SLong Wu 
1938153bc6fSChaoyong He struct nfp_net_priv {
1948153bc6fSChaoyong He 	uint32_t hash_seed; /**< Hash seed for hash tables in this structure. */
1958153bc6fSChaoyong He 	struct rte_hash *flow_table; /**< Hash table to store flow rules. */
196849a9ffbSLong Wu 	struct nfp_net_flow_count flow_count; /**< Flow count in hash table */
19766df893fSChaoyong He 	uint32_t flow_limit; /**< Flow limit of hash table */
19866df893fSChaoyong He 	bool *flow_position; /**< Flow position array */
1998153bc6fSChaoyong He };
2008153bc6fSChaoyong He 
20111e9eae4SChaoyong He struct nfp_app_fw_nic {
20211e9eae4SChaoyong He 	/**
20311e9eae4SChaoyong He 	 * Array of physical ports belonging to this CoreNIC app.
20411e9eae4SChaoyong He 	 * This is really a list of vNIC's, one for each physical port.
20511e9eae4SChaoyong He 	 */
20611e9eae4SChaoyong He 	struct nfp_net_hw *ports[NFP_MAX_PHYPORTS];
20711e9eae4SChaoyong He 
20811e9eae4SChaoyong He 	bool multiport;
20911e9eae4SChaoyong He };
21011e9eae4SChaoyong He 
211ff9f5a56SChaoyong He struct nfp_net_hw_priv {
212ff9f5a56SChaoyong He 	struct nfp_pf_dev *pf_dev;
213d81e2b51SChaoyong He 
214d81e2b51SChaoyong He 	/** NFP ASIC params */
215d81e2b51SChaoyong He 	const struct nfp_dev_info *dev_info;
216c2b4f0d5SChaoyong He 
217c2b4f0d5SChaoyong He 	bool is_pf;
218ff9f5a56SChaoyong He };
219ff9f5a56SChaoyong He 
22011e9eae4SChaoyong He struct nfp_net_hw {
22175a76c73SChaoyong He 	/** The parent class */
22275a76c73SChaoyong He 	struct nfp_hw super;
22375a76c73SChaoyong He 
224ff9da649SLong Wu 	/** TX pointer ring write back memzone */
225ff9da649SLong Wu 	const struct rte_memzone *txrwb_mz;
226ff9da649SLong Wu 
22711e9eae4SChaoyong He 	/** Info from the firmware */
22811e9eae4SChaoyong He 	uint32_t max_mtu;
22911e9eae4SChaoyong He 	uint32_t mtu;
23011e9eae4SChaoyong He 	uint32_t rx_offset;
23111e9eae4SChaoyong He 	enum nfp_net_meta_format meta_format;
23211e9eae4SChaoyong He 
23311e9eae4SChaoyong He 	uint8_t *tx_bar;
23411e9eae4SChaoyong He 	uint8_t *rx_bar;
23511e9eae4SChaoyong He 
23611e9eae4SChaoyong He 	int stride_rx;
23711e9eae4SChaoyong He 	int stride_tx;
23811e9eae4SChaoyong He 
23911e9eae4SChaoyong He 	uint16_t vxlan_ports[NFP_NET_N_VXLAN_PORTS];
24011e9eae4SChaoyong He 	uint8_t vxlan_usecnt[NFP_NET_N_VXLAN_PORTS];
24111e9eae4SChaoyong He 
24211e9eae4SChaoyong He 	uint32_t max_tx_queues;
24311e9eae4SChaoyong He 	uint32_t max_rx_queues;
24411e9eae4SChaoyong He 	uint16_t flbufsz;
245b5fae3a5SLong Wu 	bool flbufsz_set_flag;
24611e9eae4SChaoyong He 	uint16_t device_id;
24711e9eae4SChaoyong He 	uint16_t vendor_id;
24811e9eae4SChaoyong He 	uint16_t subsystem_device_id;
24911e9eae4SChaoyong He 	uint16_t subsystem_vendor_id;
25011e9eae4SChaoyong He 
25111e9eae4SChaoyong He 	/** Records starting point for counters */
25211e9eae4SChaoyong He 	struct rte_eth_stats eth_stats_base;
25311e9eae4SChaoyong He 	struct rte_eth_xstat *eth_xstats_base;
25411e9eae4SChaoyong He 
25511e9eae4SChaoyong He 	struct nfp_cpp_area *ctrl_area;
25611e9eae4SChaoyong He 	uint8_t *mac_stats;
25711e9eae4SChaoyong He 
25811e9eae4SChaoyong He 	/** Sequential physical port number, only valid for CoreNIC firmware */
25911e9eae4SChaoyong He 	uint8_t idx;
26011e9eae4SChaoyong He 	/** Internal port number as seen from NFP */
26111e9eae4SChaoyong He 	uint8_t nfp_idx;
26211e9eae4SChaoyong He 
26311e9eae4SChaoyong He 	struct nfp_net_tlv_caps tlv_caps;
26411e9eae4SChaoyong He 
26511e9eae4SChaoyong He 	struct nfp_net_ipsec_data *ipsec_data;
2668153bc6fSChaoyong He 
2678153bc6fSChaoyong He 	/** Used for rte_flow of CoreNIC firmware */
2688153bc6fSChaoyong He 	struct nfp_net_priv *priv;
269b7adbb2eSZerun Fu 
270b7adbb2eSZerun Fu 	/** Used for firmware version */
271b7adbb2eSZerun Fu 	char fw_version[FW_VER_LEN];
27211e9eae4SChaoyong He };
27311e9eae4SChaoyong He 
27411e9eae4SChaoyong He static inline uint32_t
27511e9eae4SChaoyong He nfp_qcp_queue_offset(const struct nfp_dev_info *dev_info,
27611e9eae4SChaoyong He 		uint16_t queue)
27711e9eae4SChaoyong He {
27811e9eae4SChaoyong He 	return dev_info->qc_addr_offset + NFP_QCP_QUEUE_ADDR_SZ *
27911e9eae4SChaoyong He 			(queue & dev_info->qc_idx_mask);
28011e9eae4SChaoyong He }
28111e9eae4SChaoyong He 
28211e9eae4SChaoyong He /* Prototypes for common NFP functions */
28311e9eae4SChaoyong He int nfp_net_mbox_reconfig(struct nfp_net_hw *hw, uint32_t mbox_cmd);
28411e9eae4SChaoyong He int nfp_net_configure(struct rte_eth_dev *dev);
285000feb4cSChaoyong He int nfp_net_common_init(struct nfp_pf_dev *pf_dev, struct nfp_net_hw *hw);
286000feb4cSChaoyong He void nfp_net_log_device_information(const struct nfp_net_hw *hw,
287000feb4cSChaoyong He 		struct nfp_pf_dev *pf_dev);
28811e9eae4SChaoyong He void nfp_net_enable_queues(struct rte_eth_dev *dev);
28911e9eae4SChaoyong He void nfp_net_disable_queues(struct rte_eth_dev *dev);
29011e9eae4SChaoyong He void nfp_net_params_setup(struct nfp_net_hw *hw);
29111e9eae4SChaoyong He int nfp_net_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr);
29211e9eae4SChaoyong He int nfp_configure_rx_interrupt(struct rte_eth_dev *dev,
29311e9eae4SChaoyong He 		struct rte_intr_handle *intr_handle);
29411e9eae4SChaoyong He uint32_t nfp_check_offloads(struct rte_eth_dev *dev);
29511e9eae4SChaoyong He int nfp_net_promisc_enable(struct rte_eth_dev *dev);
29611e9eae4SChaoyong He int nfp_net_promisc_disable(struct rte_eth_dev *dev);
2974a86c36bSQin Ke int nfp_net_allmulticast_enable(struct rte_eth_dev *dev);
2984a86c36bSQin Ke int nfp_net_allmulticast_disable(struct rte_eth_dev *dev);
299c4de52ecSChaoyong He int nfp_net_link_update_common(struct rte_eth_dev *dev,
300c4de52ecSChaoyong He 		struct rte_eth_link *link,
301c4de52ecSChaoyong He 		uint32_t link_status);
30211e9eae4SChaoyong He int nfp_net_link_update(struct rte_eth_dev *dev,
30311e9eae4SChaoyong He 		__rte_unused int wait_to_complete);
30411e9eae4SChaoyong He int nfp_net_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats);
30511e9eae4SChaoyong He int nfp_net_stats_reset(struct rte_eth_dev *dev);
30611e9eae4SChaoyong He uint32_t nfp_net_xstats_size(const struct rte_eth_dev *dev);
30711e9eae4SChaoyong He int nfp_net_xstats_get_names(struct rte_eth_dev *dev,
30811e9eae4SChaoyong He 		struct rte_eth_xstat_name *xstats_names,
30911e9eae4SChaoyong He 		unsigned int size __rte_unused);
31011e9eae4SChaoyong He int nfp_net_xstats_get(struct rte_eth_dev *dev,
31111e9eae4SChaoyong He 		struct rte_eth_xstat *xstats,
31211e9eae4SChaoyong He 		unsigned int n __rte_unused);
31311e9eae4SChaoyong He int nfp_net_xstats_get_names_by_id(struct rte_eth_dev *dev,
31411e9eae4SChaoyong He 		const uint64_t *ids,
31511e9eae4SChaoyong He 		struct rte_eth_xstat_name *xstats_names,
31611e9eae4SChaoyong He 		unsigned int size);
31711e9eae4SChaoyong He int nfp_net_xstats_get_by_id(struct rte_eth_dev *dev,
31811e9eae4SChaoyong He 		const uint64_t *ids,
31911e9eae4SChaoyong He 		uint64_t *values,
32011e9eae4SChaoyong He 		unsigned int n);
32111e9eae4SChaoyong He int nfp_net_xstats_reset(struct rte_eth_dev *dev);
32211e9eae4SChaoyong He int nfp_net_infos_get(struct rte_eth_dev *dev,
32311e9eae4SChaoyong He 		struct rte_eth_dev_info *dev_info);
324ba6a168aSSivaramakrishnan Venkat const uint32_t *nfp_net_supported_ptypes_get(struct rte_eth_dev *dev,
325ba6a168aSSivaramakrishnan Venkat 					     size_t *no_of_elements);
326a498019dSLong Wu int nfp_net_ptypes_set(struct rte_eth_dev *dev, uint32_t ptype_mask);
32711e9eae4SChaoyong He int nfp_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id);
32811e9eae4SChaoyong He int nfp_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id);
32911e9eae4SChaoyong He void nfp_net_params_setup(struct nfp_net_hw *hw);
33011e9eae4SChaoyong He void nfp_net_cfg_queue_setup(struct nfp_net_hw *hw);
33194d0631aSPeng Zhang void nfp_net_irq_unmask(struct rte_eth_dev *dev);
33211e9eae4SChaoyong He void nfp_net_dev_interrupt_handler(void *param);
33311e9eae4SChaoyong He void nfp_net_dev_interrupt_delayed_handler(void *param);
33411e9eae4SChaoyong He int nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
33511e9eae4SChaoyong He int nfp_net_vlan_offload_set(struct rte_eth_dev *dev, int mask);
33611e9eae4SChaoyong He int nfp_net_reta_update(struct rte_eth_dev *dev,
33711e9eae4SChaoyong He 		struct rte_eth_rss_reta_entry64 *reta_conf,
33811e9eae4SChaoyong He 		uint16_t reta_size);
33911e9eae4SChaoyong He int nfp_net_reta_query(struct rte_eth_dev *dev,
34011e9eae4SChaoyong He 		struct rte_eth_rss_reta_entry64 *reta_conf,
34111e9eae4SChaoyong He 		uint16_t reta_size);
34211e9eae4SChaoyong He int nfp_net_rss_hash_update(struct rte_eth_dev *dev,
34311e9eae4SChaoyong He 		struct rte_eth_rss_conf *rss_conf);
34411e9eae4SChaoyong He int nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev,
34511e9eae4SChaoyong He 		struct rte_eth_rss_conf *rss_conf);
34611e9eae4SChaoyong He int nfp_net_rss_config_default(struct rte_eth_dev *dev);
34711e9eae4SChaoyong He void nfp_net_stop_rx_queue(struct rte_eth_dev *dev);
34811e9eae4SChaoyong He void nfp_net_close_rx_queue(struct rte_eth_dev *dev);
34911e9eae4SChaoyong He void nfp_net_stop_tx_queue(struct rte_eth_dev *dev);
35011e9eae4SChaoyong He void nfp_net_close_tx_queue(struct rte_eth_dev *dev);
3515b81c1e2SLong Wu int nfp_net_set_vxlan_port(struct nfp_net_hw *hw,
3525b81c1e2SLong Wu 		size_t idx,
3535b81c1e2SLong Wu 		uint16_t port,
3545b81c1e2SLong Wu 		uint32_t ctrl);
355d81e2b51SChaoyong He void nfp_net_rx_desc_limits(struct nfp_net_hw_priv *hw_priv,
35611e9eae4SChaoyong He 		uint16_t *min_rx_desc,
35711e9eae4SChaoyong He 		uint16_t *max_rx_desc);
358000feb4cSChaoyong He void nfp_net_tx_desc_limits(struct nfp_net_hw_priv *hw_priv,
35911e9eae4SChaoyong He 		uint16_t *min_tx_desc,
36011e9eae4SChaoyong He 		uint16_t *max_tx_desc);
361000feb4cSChaoyong He int nfp_net_check_dma_mask(struct nfp_pf_dev *pf_dev, char *name);
36211e9eae4SChaoyong He int nfp_net_firmware_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size);
36311e9eae4SChaoyong He bool nfp_net_is_valid_nfd_version(struct nfp_net_fw_ver version);
36419bd7cceSChaoyong He bool nfp_net_is_valid_version_class(struct nfp_net_fw_ver version);
365b12d2b2eSChaoyong He struct nfp_net_hw *nfp_net_get_hw(const struct rte_eth_dev *dev);
366441839f1SQin Ke uint8_t nfp_net_get_idx(const struct rte_eth_dev *dev);
367c4de52ecSChaoyong He int nfp_net_stop(struct rte_eth_dev *dev);
36851d15e82SZerun Fu int nfp_net_flow_ctrl_get(struct rte_eth_dev *dev,
36951d15e82SZerun Fu 		struct rte_eth_fc_conf *fc_conf);
37068aa3537SZerun Fu int nfp_net_flow_ctrl_set(struct rte_eth_dev *dev,
37168aa3537SZerun Fu 		struct rte_eth_fc_conf *fc_conf);
372ff9f5a56SChaoyong He void nfp_pf_uninit(struct nfp_net_hw_priv *hw_priv);
3730786add9SZerun Fu int nfp_net_fec_get_capability(struct rte_eth_dev *dev,
3740786add9SZerun Fu 		struct rte_eth_fec_capa *speed_fec_capa,
3750786add9SZerun Fu 		unsigned int num);
376c6835a32SZerun Fu int nfp_net_fec_get(struct rte_eth_dev *dev,
377c6835a32SZerun Fu 		uint32_t *fec_capa);
37837bd1b84SZerun Fu int nfp_net_fec_set(struct rte_eth_dev *dev,
37937bd1b84SZerun Fu 		uint32_t fec_capa);
380b3c21344SChaoyong He void nfp_net_get_fw_version(struct nfp_cpp *cpp,
381a2bc299dSPeng Zhang 		uint32_t *fw_version);
382ff9da649SLong Wu int nfp_net_txrwb_alloc(struct rte_eth_dev *eth_dev);
383ff9da649SLong Wu void nfp_net_txrwb_free(struct rte_eth_dev *eth_dev);
384eac7eda4SChaoyong He uint32_t nfp_net_get_phyports_from_nsp(struct nfp_pf_dev *pf_dev);
385eac7eda4SChaoyong He uint32_t nfp_net_get_phyports_from_fw(struct nfp_pf_dev *pf_dev);
386a807bcebSPeng Zhang uint8_t nfp_function_id_get(const struct nfp_pf_dev *pf_dev,
387a807bcebSPeng Zhang 		uint8_t port_id);
38887abbaf9SPeng Zhang int nfp_net_vf_config_app_init(struct nfp_net_hw *net_hw,
38987abbaf9SPeng Zhang 		struct nfp_pf_dev *pf_dev);
390000feb4cSChaoyong He bool nfp_net_version_check(struct nfp_hw *hw,
391000feb4cSChaoyong He 		struct nfp_pf_dev *pf_dev);
39219bd7cceSChaoyong He void nfp_net_ctrl_bar_size_set(struct nfp_pf_dev *pf_dev);
39322548137SZerun Fu void nfp_net_notify_port_speed(struct nfp_net_hw *hw,
39422548137SZerun Fu 		struct rte_eth_link *link);
395636e133eSPeng Zhang bool nfp_net_recv_pkt_meta_check_register(struct nfp_net_hw_priv *hw_priv);
39611e9eae4SChaoyong He 
3977f693813SChaoyong He int nfp_net_get_eeprom_len(struct rte_eth_dev *dev);
3987f693813SChaoyong He int nfp_net_get_eeprom(struct rte_eth_dev *dev, struct rte_dev_eeprom_info *eeprom);
3997f693813SChaoyong He int nfp_net_set_eeprom(struct rte_eth_dev *dev, struct rte_dev_eeprom_info *eeprom);
4007f693813SChaoyong He int nfp_net_get_module_info(struct rte_eth_dev *dev, struct rte_eth_dev_module_info *info);
4017f693813SChaoyong He int nfp_net_get_module_eeprom(struct rte_eth_dev *dev, struct rte_dev_eeprom_info *info);
402*8bd6f540SChaoyong He int nfp_net_led_on(struct rte_eth_dev *dev);
403*8bd6f540SChaoyong He int nfp_net_led_off(struct rte_eth_dev *dev);
4047f693813SChaoyong He 
40511e9eae4SChaoyong He #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\
40611e9eae4SChaoyong He 	((struct nfp_app_fw_nic *)app_fw_priv)
40711e9eae4SChaoyong He 
40811e9eae4SChaoyong He #define NFP_PRIV_TO_APP_FW_FLOWER(app_fw_priv)\
40911e9eae4SChaoyong He 	((struct nfp_app_fw_flower *)app_fw_priv)
41011e9eae4SChaoyong He 
41111e9eae4SChaoyong He #endif /* __NFP_NET_COMMON_H__ */
412