145d3d428SAnirudh Venkataramanan /* SPDX-License-Identifier: GPL-2.0 */
245d3d428SAnirudh Venkataramanan /* Copyright (c) 2018, Intel Corporation. */
345d3d428SAnirudh Venkataramanan 
445d3d428SAnirudh Venkataramanan #ifndef _ICE_LIB_H_
545d3d428SAnirudh Venkataramanan #define _ICE_LIB_H_
645d3d428SAnirudh Venkataramanan 
745d3d428SAnirudh Venkataramanan #include "ice.h"
8fb05ba12SBrett Creeley #include "ice_vlan.h"
945d3d428SAnirudh Venkataramanan 
105e509ab2SJacob Keller /* Flags used for VSI configuration and rebuild */
115e509ab2SJacob Keller #define ICE_VSI_FLAG_INIT	BIT(0)
125e509ab2SJacob Keller #define ICE_VSI_FLAG_NO_INIT	0
135e509ab2SJacob Keller 
145e509ab2SJacob Keller /**
155e509ab2SJacob Keller  * struct ice_vsi_cfg_params - VSI configuration parameters
165e509ab2SJacob Keller  * @pi: pointer to the port_info instance for the VSI
175e509ab2SJacob Keller  * @ch: pointer to the channel structure for the VSI, may be NULL
185e509ab2SJacob Keller  * @vf: pointer to the VF associated with this VSI, may be NULL
195e509ab2SJacob Keller  * @type: the type of VSI to configure
205e509ab2SJacob Keller  * @flags: VSI flags used for rebuild and configuration
215e509ab2SJacob Keller  *
225e509ab2SJacob Keller  * Parameter structure used when configuring a new VSI.
235e509ab2SJacob Keller  */
245e509ab2SJacob Keller struct ice_vsi_cfg_params {
255e509ab2SJacob Keller 	struct ice_port_info *pi;
265e509ab2SJacob Keller 	struct ice_channel *ch;
275e509ab2SJacob Keller 	struct ice_vf *vf;
285e509ab2SJacob Keller 	enum ice_vsi_type type;
295e509ab2SJacob Keller 	u32 flags;
305e509ab2SJacob Keller };
315e509ab2SJacob Keller 
325e509ab2SJacob Keller /**
335e509ab2SJacob Keller  * ice_vsi_to_params - Get parameters for an existing VSI
345e509ab2SJacob Keller  * @vsi: the VSI to get parameters for
355e509ab2SJacob Keller  *
365e509ab2SJacob Keller  * Fill a parameter structure for reconfiguring a VSI with its current
375e509ab2SJacob Keller  * parameters, such as during a rebuild operation.
385e509ab2SJacob Keller  */
ice_vsi_to_params(struct ice_vsi * vsi)395e509ab2SJacob Keller static inline struct ice_vsi_cfg_params ice_vsi_to_params(struct ice_vsi *vsi)
405e509ab2SJacob Keller {
415e509ab2SJacob Keller 	struct ice_vsi_cfg_params params = {};
425e509ab2SJacob Keller 
435e509ab2SJacob Keller 	params.pi = vsi->port_info;
445e509ab2SJacob Keller 	params.ch = vsi->ch;
455e509ab2SJacob Keller 	params.vf = vsi->vf;
465e509ab2SJacob Keller 	params.type = vsi->type;
475e509ab2SJacob Keller 
485e509ab2SJacob Keller 	return params;
495e509ab2SJacob Keller }
505e509ab2SJacob Keller 
516dae8aa0SBruce Allan const char *ice_vsi_type_str(enum ice_vsi_type vsi_type);
52964674f1SAnirudh Venkataramanan 
53769c500dSAkeem G Abodunrin bool ice_pf_state_is_nominal(struct ice_pf *pf);
54769c500dSAkeem G Abodunrin 
5545d3d428SAnirudh Venkataramanan void ice_update_eth_stats(struct ice_vsi *vsi);
5645d3d428SAnirudh Venkataramanan 
577ad15440SBrett Creeley int ice_vsi_cfg_single_rxq(struct ice_vsi *vsi, u16 q_idx);
587ad15440SBrett Creeley 
59e72bba21SMaciej Fijalkowski int ice_vsi_cfg_single_txq(struct ice_vsi *vsi, struct ice_tx_ring **tx_rings, u16 q_idx);
607ad15440SBrett Creeley 
6172adf242SAnirudh Venkataramanan int ice_vsi_cfg_rxqs(struct ice_vsi *vsi);
6272adf242SAnirudh Venkataramanan 
6303f7a986SAnirudh Venkataramanan int ice_vsi_cfg_lan_txqs(struct ice_vsi *vsi);
6472adf242SAnirudh Venkataramanan 
6572adf242SAnirudh Venkataramanan void ice_vsi_cfg_msix(struct ice_vsi *vsi);
6672adf242SAnirudh Venkataramanan 
6713a6233bSBrett Creeley int ice_vsi_start_all_rx_rings(struct ice_vsi *vsi);
6872adf242SAnirudh Venkataramanan 
6913a6233bSBrett Creeley int ice_vsi_stop_all_rx_rings(struct ice_vsi *vsi);
7072adf242SAnirudh Venkataramanan 
7103f7a986SAnirudh Venkataramanan int
7203f7a986SAnirudh Venkataramanan ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
73ddf30f7fSAnirudh Venkataramanan 			  u16 rel_vmvf_num);
7472adf242SAnirudh Venkataramanan 
75efc2214bSMaciej Fijalkowski int ice_vsi_cfg_xdp_txqs(struct ice_vsi *vsi);
76efc2214bSMaciej Fijalkowski 
77efc2214bSMaciej Fijalkowski int ice_vsi_stop_xdp_tx_rings(struct ice_vsi *vsi);
78efc2214bSMaciej Fijalkowski 
792e0e6228SDave Ertman void ice_cfg_sw_lldp(struct ice_vsi *vsi, bool tx, bool create);
802e0e6228SDave Ertman 
81d348d517SAnirudh Venkataramanan int ice_set_link(struct ice_vsi *vsi, bool ena);
82d348d517SAnirudh Venkataramanan 
830754d65bSKiran Patil void ice_vsi_delete(struct ice_vsi *vsi);
840754d65bSKiran Patil 
857b9ffc76SAnirudh Venkataramanan int ice_vsi_cfg_tc(struct ice_vsi *vsi, u8 ena_tc);
860754d65bSKiran Patil 
870754d65bSKiran Patil int ice_vsi_cfg_rss_lut_key(struct ice_vsi *vsi);
880754d65bSKiran Patil 
890754d65bSKiran Patil void ice_vsi_cfg_netdev_tc(struct ice_vsi *vsi, u8 ena_tc);
907b9ffc76SAnirudh Venkataramanan 
9137bb8390SAnirudh Venkataramanan struct ice_vsi *
925e509ab2SJacob Keller ice_vsi_setup(struct ice_pf *pf, struct ice_vsi_cfg_params *params);
9337bb8390SAnirudh Venkataramanan 
94df0f8479SAnirudh Venkataramanan int ice_vsi_release(struct ice_vsi *vsi);
95df0f8479SAnirudh Venkataramanan 
9607309a0eSAnirudh Venkataramanan void ice_vsi_close(struct ice_vsi *vsi);
9707309a0eSAnirudh Venkataramanan 
989d614b64SAnirudh Venkataramanan int ice_ena_vsi(struct ice_vsi *vsi, bool locked);
999d614b64SAnirudh Venkataramanan 
1006624e780SMichal Swiatkowski void ice_vsi_decfg(struct ice_vsi *vsi);
1019d614b64SAnirudh Venkataramanan void ice_dis_vsi(struct ice_vsi *vsi, bool locked);
1029d614b64SAnirudh Venkataramanan 
1035e509ab2SJacob Keller int ice_vsi_rebuild(struct ice_vsi *vsi, u32 vsi_flags);
1045e509ab2SJacob Keller int ice_vsi_cfg(struct ice_vsi *vsi, struct ice_vsi_cfg_params *params);
105df0f8479SAnirudh Venkataramanan 
1065df7e45dSDave Ertman bool ice_is_reset_in_progress(unsigned long *state);
1071c08052eSJacob Keller int ice_wait_for_reset(struct ice_pf *pf, unsigned long timeout);
1085153a18eSAnirudh Venkataramanan 
109401ce33bSBrett Creeley void
11077a78115SJacob Keller ice_write_qrxflxp_cntxt(struct ice_hw *hw, u16 pf_q, u32 rxdid, u32 prio,
11177a78115SJacob Keller 			bool ena_ts);
112401ce33bSBrett Creeley 
1135153a18eSAnirudh Venkataramanan void ice_vsi_dis_irq(struct ice_vsi *vsi);
1145153a18eSAnirudh Venkataramanan 
1155153a18eSAnirudh Venkataramanan void ice_vsi_free_irq(struct ice_vsi *vsi);
1165153a18eSAnirudh Venkataramanan 
1175153a18eSAnirudh Venkataramanan void ice_vsi_free_rx_rings(struct ice_vsi *vsi);
1185153a18eSAnirudh Venkataramanan 
1195153a18eSAnirudh Venkataramanan void ice_vsi_free_tx_rings(struct ice_vsi *vsi);
1205153a18eSAnirudh Venkataramanan 
1214fe36226SPaul M Stillwell Jr void ice_vsi_manage_rss_lut(struct ice_vsi *vsi, bool ena);
122492af0abSMd Fahad Iqbal Polash 
123dddd406dSJesse Brandeburg void ice_vsi_cfg_crc_strip(struct ice_vsi *vsi, bool disable);
124dddd406dSJesse Brandeburg 
125e72bba21SMaciej Fijalkowski void ice_update_tx_ring_stats(struct ice_tx_ring *ring, u64 pkts, u64 bytes);
1262d4238f5SKrzysztof Kazimierczak 
127e72bba21SMaciej Fijalkowski void ice_update_rx_ring_stats(struct ice_rx_ring *ring, u64 pkts, u64 bytes);
1282d4238f5SKrzysztof Kazimierczak 
129b8b47723SJesse Brandeburg void ice_write_intrl(struct ice_q_vector *q_vector, u8 intrl);
130b8b47723SJesse Brandeburg void ice_write_itr(struct ice_ring_container *rc, u16 itr);
131d8eb7ad5SJesse Brandeburg void ice_set_q_vector_intrl(struct ice_q_vector *q_vector);
132bbb968e8SAkeem G Abodunrin 
1335518ac2aSTony Nguyen int ice_vsi_cfg_mac_fltr(struct ice_vsi *vsi, const u8 *macaddr, bool set);
134bbb968e8SAkeem G Abodunrin 
135462acf6aSTony Nguyen bool ice_is_safe_mode(struct ice_pf *pf);
13688f62aeaSDave Ertman bool ice_is_rdma_ena(struct ice_pf *pf);
137d7393425SMichal Wilczynski bool ice_is_dflt_vsi_in_use(struct ice_port_info *pi);
138d7393425SMichal Wilczynski bool ice_is_vsi_dflt_vsi(struct ice_vsi *vsi);
139d7393425SMichal Wilczynski int ice_set_dflt_vsi(struct ice_vsi *vsi);
140d7393425SMichal Wilczynski int ice_clear_dflt_vsi(struct ice_vsi *vsi);
1414ecc8633SBrett Creeley int ice_set_min_bw_limit(struct ice_vsi *vsi, u64 min_tx_rate);
1424ecc8633SBrett Creeley int ice_set_max_bw_limit(struct ice_vsi *vsi, u64 max_tx_rate);
143fbc7b27aSKiran Patil int ice_get_link_speed_kbps(struct ice_vsi *vsi);
1444ecc8633SBrett Creeley int ice_get_link_speed_mbps(struct ice_vsi *vsi);
145ff5411efSMichal Swiatkowski int
146ff5411efSMichal Swiatkowski ice_vsi_update_security(struct ice_vsi *vsi, void (*fill)(struct ice_vsi_ctx *));
147ff5411efSMichal Swiatkowski 
148ff5411efSMichal Swiatkowski void ice_vsi_ctx_set_antispoof(struct ice_vsi_ctx *ctx);
149ff5411efSMichal Swiatkowski 
150ff5411efSMichal Swiatkowski void ice_vsi_ctx_clear_antispoof(struct ice_vsi_ctx *ctx);
151ff5411efSMichal Swiatkowski 
152ff5411efSMichal Swiatkowski void ice_vsi_ctx_set_allow_override(struct ice_vsi_ctx *ctx);
153ff5411efSMichal Swiatkowski 
154ff5411efSMichal Swiatkowski void ice_vsi_ctx_clear_allow_override(struct ice_vsi_ctx *ctx);
1556c0f4441SWojciech Drewek int ice_vsi_update_local_lb(struct ice_vsi *vsi, bool set);
1563e0b5971SBrett Creeley int ice_vsi_add_vlan_zero(struct ice_vsi *vsi);
157c31af68aSBrett Creeley int ice_vsi_del_vlan_zero(struct ice_vsi *vsi);
158c31af68aSBrett Creeley bool ice_vsi_has_non_zero_vlans(struct ice_vsi *vsi);
159c31af68aSBrett Creeley u16 ice_vsi_num_non_zero_vlans(struct ice_vsi *vsi);
16040b24760SAnirudh Venkataramanan bool ice_is_feature_supported(struct ice_pf *pf, enum ice_feature f);
161*bb52f42aSDave Ertman void ice_set_feature_support(struct ice_pf *pf, enum ice_feature f);
162325b2064SMaciej Machnikowski void ice_clear_feature_support(struct ice_pf *pf, enum ice_feature f);
16340b24760SAnirudh Venkataramanan void ice_init_feature_support(struct ice_pf *pf);
164f23df522SNorbert Zulinski bool ice_vsi_is_rx_queue_active(struct ice_vsi *vsi);
16545d3d428SAnirudh Venkataramanan #endif /* !_ICE_LIB_H_ */
166