2018-09-20 08:23:04 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
/* Copyright (c) 2018, Intel Corporation. */
|
|
|
|
|
|
|
|
#ifndef _ICE_LIB_H_
|
|
|
|
#define _ICE_LIB_H_
|
|
|
|
|
|
|
|
#include "ice.h"
|
|
|
|
|
2019-08-02 16:25:19 +08:00
|
|
|
struct ice_txq_meta {
|
|
|
|
/* Tx-scheduler element identifier */
|
|
|
|
u32 q_teid;
|
|
|
|
/* Entry in VSI's txq_map bitmap */
|
|
|
|
u16 q_id;
|
|
|
|
/* Relative index of Tx queue within TC */
|
|
|
|
u16 q_handle;
|
|
|
|
/* VSI index that Tx queue belongs to */
|
|
|
|
u16 vsi_idx;
|
|
|
|
/* TC number that Tx queue belongs to */
|
|
|
|
u8 tc;
|
|
|
|
};
|
|
|
|
|
|
|
|
int
|
|
|
|
ice_add_mac_to_list(struct ice_vsi *vsi, struct list_head *add_list,
|
|
|
|
const u8 *macaddr);
|
2018-09-20 08:23:04 +08:00
|
|
|
|
|
|
|
void ice_free_fltr_list(struct device *dev, struct list_head *h);
|
|
|
|
|
|
|
|
void ice_update_eth_stats(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:05 +08:00
|
|
|
int ice_vsi_cfg_rxqs(struct ice_vsi *vsi);
|
|
|
|
|
2018-12-20 02:03:27 +08:00
|
|
|
int ice_vsi_cfg_lan_txqs(struct ice_vsi *vsi);
|
2018-09-20 08:23:05 +08:00
|
|
|
|
|
|
|
void ice_vsi_cfg_msix(struct ice_vsi *vsi);
|
|
|
|
|
2019-04-17 01:34:51 +08:00
|
|
|
#ifdef CONFIG_PCI_IOV
|
|
|
|
void
|
|
|
|
ice_cfg_txq_interrupt(struct ice_vsi *vsi, u16 txq, u16 msix_idx, u16 itr_idx);
|
|
|
|
|
|
|
|
void
|
|
|
|
ice_cfg_rxq_interrupt(struct ice_vsi *vsi, u16 rxq, u16 msix_idx, u16 itr_idx);
|
2019-08-02 16:25:20 +08:00
|
|
|
|
|
|
|
int
|
|
|
|
ice_vsi_stop_tx_ring(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
|
|
|
|
u16 rel_vmvf_num, struct ice_ring *ring,
|
|
|
|
struct ice_txq_meta *txq_meta);
|
|
|
|
|
|
|
|
void ice_fill_txq_meta(struct ice_vsi *vsi, struct ice_ring *ring,
|
|
|
|
struct ice_txq_meta *txq_meta);
|
|
|
|
|
|
|
|
int ice_vsi_ctrl_rx_ring(struct ice_vsi *vsi, bool ena, u16 rxq_idx);
|
2019-04-17 01:34:51 +08:00
|
|
|
#endif /* CONFIG_PCI_IOV */
|
|
|
|
|
2018-09-20 08:23:04 +08:00
|
|
|
int ice_vsi_add_vlan(struct ice_vsi *vsi, u16 vid);
|
|
|
|
|
|
|
|
int ice_vsi_kill_vlan(struct ice_vsi *vsi, u16 vid);
|
|
|
|
|
|
|
|
int ice_vsi_manage_vlan_insertion(struct ice_vsi *vsi);
|
|
|
|
|
|
|
|
int ice_vsi_manage_vlan_stripping(struct ice_vsi *vsi, bool ena);
|
2018-09-20 08:23:05 +08:00
|
|
|
|
|
|
|
int ice_vsi_start_rx_rings(struct ice_vsi *vsi);
|
|
|
|
|
|
|
|
int ice_vsi_stop_rx_rings(struct ice_vsi *vsi);
|
|
|
|
|
2018-12-20 02:03:27 +08:00
|
|
|
int
|
|
|
|
ice_vsi_stop_lan_tx_rings(struct ice_vsi *vsi, enum ice_disq_rst_src rst_src,
|
2018-09-20 08:42:55 +08:00
|
|
|
u16 rel_vmvf_num);
|
2018-09-20 08:23:05 +08:00
|
|
|
|
2019-02-27 08:35:14 +08:00
|
|
|
int ice_cfg_vlan_pruning(struct ice_vsi *vsi, bool ena, bool vlan_promisc);
|
2018-09-20 08:23:06 +08:00
|
|
|
|
2019-04-17 01:34:55 +08:00
|
|
|
void ice_cfg_sw_lldp(struct ice_vsi *vsi, bool tx, bool create);
|
|
|
|
|
2018-09-20 08:23:06 +08:00
|
|
|
void ice_vsi_delete(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:08 +08:00
|
|
|
int ice_vsi_clear(struct ice_vsi *vsi);
|
|
|
|
|
2019-03-01 07:24:24 +08:00
|
|
|
#ifdef CONFIG_DCB
|
|
|
|
int ice_vsi_cfg_tc(struct ice_vsi *vsi, u8 ena_tc);
|
|
|
|
#endif /* CONFIG_DCB */
|
|
|
|
|
2018-09-20 08:23:10 +08:00
|
|
|
struct ice_vsi *
|
|
|
|
ice_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi,
|
|
|
|
enum ice_vsi_type type, u16 vf_id);
|
|
|
|
|
2019-04-17 01:34:50 +08:00
|
|
|
void ice_napi_del(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:09 +08:00
|
|
|
int ice_vsi_release(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:08 +08:00
|
|
|
void ice_vsi_close(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:06 +08:00
|
|
|
int ice_free_res(struct ice_res_tracker *res, u16 index, u16 id);
|
|
|
|
|
|
|
|
int
|
|
|
|
ice_get_res(struct ice_pf *pf, struct ice_res_tracker *res, u16 needed, u16 id);
|
|
|
|
|
2018-09-20 08:23:09 +08:00
|
|
|
int ice_vsi_rebuild(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:11 +08:00
|
|
|
bool ice_is_reset_in_progress(unsigned long *state);
|
2018-09-20 08:23:06 +08:00
|
|
|
|
2018-09-20 08:23:09 +08:00
|
|
|
void ice_vsi_free_q_vectors(struct ice_vsi *vsi);
|
|
|
|
|
2019-04-17 01:30:51 +08:00
|
|
|
void ice_trigger_sw_intr(struct ice_hw *hw, struct ice_q_vector *q_vector);
|
|
|
|
|
2018-09-20 08:23:06 +08:00
|
|
|
void ice_vsi_put_qs(struct ice_vsi *vsi);
|
|
|
|
|
2019-03-01 07:24:24 +08:00
|
|
|
#ifdef CONFIG_DCB
|
|
|
|
void ice_vsi_map_rings_to_vectors(struct ice_vsi *vsi);
|
|
|
|
#endif /* CONFIG_DCB */
|
|
|
|
|
2018-09-20 08:23:06 +08:00
|
|
|
void ice_vsi_dis_irq(struct ice_vsi *vsi);
|
|
|
|
|
|
|
|
void ice_vsi_free_irq(struct ice_vsi *vsi);
|
|
|
|
|
|
|
|
void ice_vsi_free_rx_rings(struct ice_vsi *vsi);
|
|
|
|
|
|
|
|
void ice_vsi_free_tx_rings(struct ice_vsi *vsi);
|
|
|
|
|
2018-09-20 08:23:17 +08:00
|
|
|
int ice_vsi_manage_rss_lut(struct ice_vsi *vsi, bool ena);
|
|
|
|
|
2019-03-01 07:25:55 +08:00
|
|
|
u32 ice_intrl_usec_to_reg(u8 intrl, u8 gran);
|
ice: Fix issues updating VSI MAC filters
VSI, especially VF could request to add or remove filter for another VSI,
driver should really guide such request and disallow it.
However, instead of returning error for such malicious request, driver
can simply return success.
In addition, we are not tracking number of MAC filters configured per
VF correctly - and this leads to issue updating VF MAC filters whenever
they were removed and re-configured via bringing VF interface down and
up. Also, since VF could send request to update multiple MAC filters at
once, driver should program those filters individually in the switch, in
order to determine which action resulted to error, and communicate
accordingly to the VF.
So, with this changes, we now track number of filters added right from
when VF resources allocation is done, and could properly add filters for
both trusted and non_trusted VFs, without MAC filters mis-match issue in
the switch...
Also refactor code, so that driver can use new function to add or remove
MAC filters.
Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2019-07-25 17:53:51 +08:00
|
|
|
|
2019-09-09 21:47:43 +08:00
|
|
|
char *ice_nvm_version_str(struct ice_hw *hw);
|
|
|
|
|
ice: Fix issues updating VSI MAC filters
VSI, especially VF could request to add or remove filter for another VSI,
driver should really guide such request and disallow it.
However, instead of returning error for such malicious request, driver
can simply return success.
In addition, we are not tracking number of MAC filters configured per
VF correctly - and this leads to issue updating VF MAC filters whenever
they were removed and re-configured via bringing VF interface down and
up. Also, since VF could send request to update multiple MAC filters at
once, driver should program those filters individually in the switch, in
order to determine which action resulted to error, and communicate
accordingly to the VF.
So, with this changes, we now track number of filters added right from
when VF resources allocation is done, and could properly add filters for
both trusted and non_trusted VFs, without MAC filters mis-match issue in
the switch...
Also refactor code, so that driver can use new function to add or remove
MAC filters.
Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2019-07-25 17:53:51 +08:00
|
|
|
enum ice_status
|
|
|
|
ice_vsi_cfg_mac_fltr(struct ice_vsi *vsi, const u8 *macaddr, bool set);
|
|
|
|
|
2018-09-20 08:23:04 +08:00
|
|
|
#endif /* !_ICE_LIB_H_ */
|