162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2018, Intel Corporation. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _ICE_LIB_H_
562306a36Sopenharmony_ci#define _ICE_LIB_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "ice.h"
862306a36Sopenharmony_ci#include "ice_vlan.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/* Flags used for VSI configuration and rebuild */
1162306a36Sopenharmony_ci#define ICE_VSI_FLAG_INIT	BIT(0)
1262306a36Sopenharmony_ci#define ICE_VSI_FLAG_NO_INIT	0
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/**
1562306a36Sopenharmony_ci * struct ice_vsi_cfg_params - VSI configuration parameters
1662306a36Sopenharmony_ci * @pi: pointer to the port_info instance for the VSI
1762306a36Sopenharmony_ci * @ch: pointer to the channel structure for the VSI, may be NULL
1862306a36Sopenharmony_ci * @vf: pointer to the VF associated with this VSI, may be NULL
1962306a36Sopenharmony_ci * @type: the type of VSI to configure
2062306a36Sopenharmony_ci * @flags: VSI flags used for rebuild and configuration
2162306a36Sopenharmony_ci *
2262306a36Sopenharmony_ci * Parameter structure used when configuring a new VSI.
2362306a36Sopenharmony_ci */
2462306a36Sopenharmony_cistruct ice_vsi_cfg_params {
2562306a36Sopenharmony_ci	struct ice_port_info *pi;
2662306a36Sopenharmony_ci	struct ice_channel *ch;
2762306a36Sopenharmony_ci	struct ice_vf *vf;
2862306a36Sopenharmony_ci	enum ice_vsi_type type;
2962306a36Sopenharmony_ci	u32 flags;
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci/**
3362306a36Sopenharmony_ci * ice_vsi_to_params - Get parameters for an existing VSI
3462306a36Sopenharmony_ci * @vsi: the VSI to get parameters for
3562306a36Sopenharmony_ci *
3662306a36Sopenharmony_ci * Fill a parameter structure for reconfiguring a VSI with its current
3762306a36Sopenharmony_ci * parameters, such as during a rebuild operation.
3862306a36Sopenharmony_ci */
3962306a36Sopenharmony_cistatic inline struct ice_vsi_cfg_params ice_vsi_to_params(struct ice_vsi *vsi)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	struct ice_vsi_cfg_params params = {};
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	params.pi = vsi->port_info;
4462306a36Sopenharmony_ci	params.ch = vsi->ch;
4562306a36Sopenharmony_ci	params.vf = vsi->vf;
4662306a36Sopenharmony_ci	params.type = vsi->type;
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci	return params;
4962306a36Sopenharmony_ci}
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciconst char *ice_vsi_type_str(enum ice_vsi_type vsi_type);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cibool ice_pf_state_is_nominal(struct ice_pf *pf);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_civoid ice_update_eth_stats(struct ice_vsi *vsi);
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciint ice_vsi_cfg_single_rxq(struct ice_vsi *vsi, u16 q_idx);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciint ice_vsi_cfg_single_txq(struct ice_vsi *vsi, struct ice_tx_ring **tx_rings, u16 q_idx);
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ciint ice_vsi_cfg_rxqs(struct ice_vsi *vsi);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciint ice_vsi_cfg_lan_txqs(struct ice_vsi *vsi);
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_civoid ice_vsi_cfg_msix(struct ice_vsi *vsi);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciint ice_vsi_start_all_rx_rings(struct ice_vsi *vsi);
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ciint ice_vsi_stop_all_rx_rings(struct ice_vsi *vsi);
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ciint
7262306a36Sopenharmony_ciice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
7362306a36Sopenharmony_ci			  u16 rel_vmvf_num);
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciint ice_vsi_cfg_xdp_txqs(struct ice_vsi *vsi);
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciint ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_civoid ice_cfg_sw_lldp(struct ice_vsi *vsi, bool tx, bool create);
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ciint ice_set_link(struct ice_vsi *vsi, bool ena);
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_civoid ice_vsi_delete(struct ice_vsi *vsi);
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciint ice_vsi_cfg_tc(struct ice_vsi *vsi, u8 ena_tc);
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciint ice_vsi_cfg_rss_lut_key(struct ice_vsi *vsi);
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_civoid ice_vsi_cfg_netdev_tc(struct ice_vsi *vsi, u8 ena_tc);
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cistruct ice_vsi *
9262306a36Sopenharmony_ciice_vsi_setup(struct ice_pf *pf, struct ice_vsi_cfg_params *params);
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ciint ice_vsi_release(struct ice_vsi *vsi);
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_civoid ice_vsi_close(struct ice_vsi *vsi);
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ciint ice_ena_vsi(struct ice_vsi *vsi, bool locked);
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_civoid ice_vsi_decfg(struct ice_vsi *vsi);
10162306a36Sopenharmony_civoid ice_dis_vsi(struct ice_vsi *vsi, bool locked);
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ciint ice_vsi_rebuild(struct ice_vsi *vsi, u32 vsi_flags);
10462306a36Sopenharmony_ciint ice_vsi_cfg(struct ice_vsi *vsi, struct ice_vsi_cfg_params *params);
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_cibool ice_is_reset_in_progress(unsigned long *state);
10762306a36Sopenharmony_ciint ice_wait_for_reset(struct ice_pf *pf, unsigned long timeout);
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_civoid
11062306a36Sopenharmony_ciice_write_qrxflxp_cntxt(struct ice_hw *hw, u16 pf_q, u32 rxdid, u32 prio,
11162306a36Sopenharmony_ci			bool ena_ts);
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_civoid ice_vsi_dis_irq(struct ice_vsi *vsi);
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_civoid ice_vsi_free_irq(struct ice_vsi *vsi);
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_civoid ice_vsi_free_rx_rings(struct ice_vsi *vsi);
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_civoid ice_vsi_free_tx_rings(struct ice_vsi *vsi);
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_civoid ice_vsi_manage_rss_lut(struct ice_vsi *vsi, bool ena);
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_civoid ice_vsi_cfg_crc_strip(struct ice_vsi *vsi, bool disable);
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_civoid ice_update_tx_ring_stats(struct ice_tx_ring *ring, u64 pkts, u64 bytes);
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_civoid ice_update_rx_ring_stats(struct ice_rx_ring *ring, u64 pkts, u64 bytes);
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_civoid ice_write_intrl(struct ice_q_vector *q_vector, u8 intrl);
13062306a36Sopenharmony_civoid ice_write_itr(struct ice_ring_container *rc, u16 itr);
13162306a36Sopenharmony_civoid ice_set_q_vector_intrl(struct ice_q_vector *q_vector);
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ciint ice_vsi_cfg_mac_fltr(struct ice_vsi *vsi, const u8 *macaddr, bool set);
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cibool ice_is_safe_mode(struct ice_pf *pf);
13662306a36Sopenharmony_cibool ice_is_rdma_ena(struct ice_pf *pf);
13762306a36Sopenharmony_cibool ice_is_dflt_vsi_in_use(struct ice_port_info *pi);
13862306a36Sopenharmony_cibool ice_is_vsi_dflt_vsi(struct ice_vsi *vsi);
13962306a36Sopenharmony_ciint ice_set_dflt_vsi(struct ice_vsi *vsi);
14062306a36Sopenharmony_ciint ice_clear_dflt_vsi(struct ice_vsi *vsi);
14162306a36Sopenharmony_ciint ice_set_min_bw_limit(struct ice_vsi *vsi, u64 min_tx_rate);
14262306a36Sopenharmony_ciint ice_set_max_bw_limit(struct ice_vsi *vsi, u64 max_tx_rate);
14362306a36Sopenharmony_ciint ice_get_link_speed_kbps(struct ice_vsi *vsi);
14462306a36Sopenharmony_ciint ice_get_link_speed_mbps(struct ice_vsi *vsi);
14562306a36Sopenharmony_ciint
14662306a36Sopenharmony_ciice_vsi_update_security(struct ice_vsi *vsi, void (*fill)(struct ice_vsi_ctx *));
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_civoid ice_vsi_ctx_set_antispoof(struct ice_vsi_ctx *ctx);
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_civoid ice_vsi_ctx_clear_antispoof(struct ice_vsi_ctx *ctx);
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_civoid ice_vsi_ctx_set_allow_override(struct ice_vsi_ctx *ctx);
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_civoid ice_vsi_ctx_clear_allow_override(struct ice_vsi_ctx *ctx);
15562306a36Sopenharmony_ciint ice_vsi_update_local_lb(struct ice_vsi *vsi, bool set);
15662306a36Sopenharmony_ciint ice_vsi_add_vlan_zero(struct ice_vsi *vsi);
15762306a36Sopenharmony_ciint ice_vsi_del_vlan_zero(struct ice_vsi *vsi);
15862306a36Sopenharmony_cibool ice_vsi_has_non_zero_vlans(struct ice_vsi *vsi);
15962306a36Sopenharmony_ciu16 ice_vsi_num_non_zero_vlans(struct ice_vsi *vsi);
16062306a36Sopenharmony_cibool ice_is_feature_supported(struct ice_pf *pf, enum ice_feature f);
16162306a36Sopenharmony_civoid ice_set_feature_support(struct ice_pf *pf, enum ice_feature f);
16262306a36Sopenharmony_civoid ice_clear_feature_support(struct ice_pf *pf, enum ice_feature f);
16362306a36Sopenharmony_civoid ice_init_feature_support(struct ice_pf *pf);
16462306a36Sopenharmony_cibool ice_vsi_is_rx_queue_active(struct ice_vsi *vsi);
16562306a36Sopenharmony_ci#endif /* !_ICE_LIB_H_ */
166