Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.13.7.
   1// SPDX-License-Identifier: GPL-2.0
   2/* Copyright (c) 2018, Intel Corporation. */
   3
   4#include "ice.h"
   5#include "ice_lib.h"
   6
   7/**
   8 * ice_err_to_virt err - translate errors for VF return code
   9 * @ice_err: error return code
  10 */
  11static enum virtchnl_status_code ice_err_to_virt_err(enum ice_status ice_err)
  12{
  13	switch (ice_err) {
  14	case ICE_SUCCESS:
  15		return VIRTCHNL_STATUS_SUCCESS;
  16	case ICE_ERR_BAD_PTR:
  17	case ICE_ERR_INVAL_SIZE:
  18	case ICE_ERR_DEVICE_NOT_SUPPORTED:
  19	case ICE_ERR_PARAM:
  20	case ICE_ERR_CFG:
  21		return VIRTCHNL_STATUS_ERR_PARAM;
  22	case ICE_ERR_NO_MEMORY:
  23		return VIRTCHNL_STATUS_ERR_NO_MEMORY;
  24	case ICE_ERR_NOT_READY:
  25	case ICE_ERR_RESET_FAILED:
  26	case ICE_ERR_FW_API_VER:
  27	case ICE_ERR_AQ_ERROR:
  28	case ICE_ERR_AQ_TIMEOUT:
  29	case ICE_ERR_AQ_FULL:
  30	case ICE_ERR_AQ_NO_WORK:
  31	case ICE_ERR_AQ_EMPTY:
  32		return VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR;
  33	default:
  34		return VIRTCHNL_STATUS_ERR_NOT_SUPPORTED;
  35	}
  36}
  37
  38/**
  39 * ice_vc_vf_broadcast - Broadcast a message to all VFs on PF
  40 * @pf: pointer to the PF structure
  41 * @v_opcode: operation code
  42 * @v_retval: return value
  43 * @msg: pointer to the msg buffer
  44 * @msglen: msg length
  45 */
  46static void
  47ice_vc_vf_broadcast(struct ice_pf *pf, enum virtchnl_ops v_opcode,
  48		    enum virtchnl_status_code v_retval, u8 *msg, u16 msglen)
  49{
  50	struct ice_hw *hw = &pf->hw;
  51	struct ice_vf *vf = pf->vf;
  52	int i;
  53
  54	for (i = 0; i < pf->num_alloc_vfs; i++, vf++) {
  55		/* Not all vfs are enabled so skip the ones that are not */
  56		if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states) &&
  57		    !test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states))
  58			continue;
  59
  60		/* Ignore return value on purpose - a given VF may fail, but
  61		 * we need to keep going and send to all of them
  62		 */
  63		ice_aq_send_msg_to_vf(hw, vf->vf_id, v_opcode, v_retval, msg,
  64				      msglen, NULL);
  65	}
  66}
  67
  68/**
  69 * ice_set_pfe_link - Set the link speed/status of the virtchnl_pf_event
  70 * @vf: pointer to the VF structure
  71 * @pfe: pointer to the virtchnl_pf_event to set link speed/status for
  72 * @ice_link_speed: link speed specified by ICE_AQ_LINK_SPEED_*
  73 * @link_up: whether or not to set the link up/down
  74 */
  75static void
  76ice_set_pfe_link(struct ice_vf *vf, struct virtchnl_pf_event *pfe,
  77		 int ice_link_speed, bool link_up)
  78{
  79	if (vf->driver_caps & VIRTCHNL_VF_CAP_ADV_LINK_SPEED) {
  80		pfe->event_data.link_event_adv.link_status = link_up;
  81		/* Speed in Mbps */
  82		pfe->event_data.link_event_adv.link_speed =
  83			ice_conv_link_speed_to_virtchnl(true, ice_link_speed);
  84	} else {
  85		pfe->event_data.link_event.link_status = link_up;
  86		/* Legacy method for virtchnl link speeds */
  87		pfe->event_data.link_event.link_speed =
  88			(enum virtchnl_link_speed)
  89			ice_conv_link_speed_to_virtchnl(false, ice_link_speed);
  90	}
  91}
  92
  93/**
  94 * ice_set_pfe_link_forced - Force the virtchnl_pf_event link speed/status
  95 * @vf: pointer to the VF structure
  96 * @pfe: pointer to the virtchnl_pf_event to set link speed/status for
  97 * @link_up: whether or not to set the link up/down
  98 */
  99static void
 100ice_set_pfe_link_forced(struct ice_vf *vf, struct virtchnl_pf_event *pfe,
 101			bool link_up)
 102{
 103	u16 link_speed;
 104
 105	if (link_up)
 106		link_speed = ICE_AQ_LINK_SPEED_100GB;
 107	else
 108		link_speed = ICE_AQ_LINK_SPEED_UNKNOWN;
 109
 110	ice_set_pfe_link(vf, pfe, link_speed, link_up);
 111}
 112
 113/**
 114 * ice_vc_notify_vf_link_state - Inform a VF of link status
 115 * @vf: pointer to the VF structure
 116 *
 117 * send a link status message to a single VF
 118 */
 119static void ice_vc_notify_vf_link_state(struct ice_vf *vf)
 120{
 121	struct virtchnl_pf_event pfe = { 0 };
 122	struct ice_link_status *ls;
 123	struct ice_pf *pf = vf->pf;
 124	struct ice_hw *hw;
 125
 126	hw = &pf->hw;
 127	ls = &hw->port_info->phy.link_info;
 128
 129	pfe.event = VIRTCHNL_EVENT_LINK_CHANGE;
 130	pfe.severity = PF_EVENT_SEVERITY_INFO;
 131
 132	/* Always report link is down if the VF queues aren't enabled */
 133	if (!vf->num_qs_ena)
 134		ice_set_pfe_link(vf, &pfe, ICE_AQ_LINK_SPEED_UNKNOWN, false);
 135	else if (vf->link_forced)
 136		ice_set_pfe_link_forced(vf, &pfe, vf->link_up);
 137	else
 138		ice_set_pfe_link(vf, &pfe, ls->link_speed, ls->link_info &
 139				 ICE_AQ_LINK_UP);
 140
 141	ice_aq_send_msg_to_vf(hw, vf->vf_id, VIRTCHNL_OP_EVENT,
 142			      VIRTCHNL_STATUS_SUCCESS, (u8 *)&pfe,
 143			      sizeof(pfe), NULL);
 144}
 145
 146/**
 147 * ice_free_vf_res - Free a VF's resources
 148 * @vf: pointer to the VF info
 149 */
 150static void ice_free_vf_res(struct ice_vf *vf)
 151{
 152	struct ice_pf *pf = vf->pf;
 153	int i, last_vector_idx;
 154
 155	/* First, disable VF's configuration API to prevent OS from
 156	 * accessing the VF's VSI after it's freed or invalidated.
 157	 */
 158	clear_bit(ICE_VF_STATE_INIT, vf->vf_states);
 159
 160	/* free VSI and disconnect it from the parent uplink */
 161	if (vf->lan_vsi_idx) {
 162		ice_vsi_release(pf->vsi[vf->lan_vsi_idx]);
 163		vf->lan_vsi_idx = 0;
 164		vf->lan_vsi_num = 0;
 165		vf->num_mac = 0;
 166	}
 167
 168	last_vector_idx = vf->first_vector_idx + pf->num_vf_msix - 1;
 169	/* Disable interrupts so that VF starts in a known state */
 170	for (i = vf->first_vector_idx; i <= last_vector_idx; i++) {
 171		wr32(&pf->hw, GLINT_DYN_CTL(i), GLINT_DYN_CTL_CLEARPBA_M);
 172		ice_flush(&pf->hw);
 173	}
 174	/* reset some of the state variables keeping track of the resources */
 175	clear_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states);
 176	clear_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states);
 177}
 178
 179/**
 180 * ice_dis_vf_mappings
 181 * @vf: pointer to the VF structure
 182 */
 183static void ice_dis_vf_mappings(struct ice_vf *vf)
 184{
 185	struct ice_pf *pf = vf->pf;
 186	struct ice_vsi *vsi;
 187	int first, last, v;
 188	struct ice_hw *hw;
 189
 190	hw = &pf->hw;
 191	vsi = pf->vsi[vf->lan_vsi_idx];
 192
 193	wr32(hw, VPINT_ALLOC(vf->vf_id), 0);
 194	wr32(hw, VPINT_ALLOC_PCI(vf->vf_id), 0);
 195
 196	first = vf->first_vector_idx;
 197	last = first + pf->num_vf_msix - 1;
 198	for (v = first; v <= last; v++) {
 199		u32 reg;
 200
 201		reg = (((1 << GLINT_VECT2FUNC_IS_PF_S) &
 202			GLINT_VECT2FUNC_IS_PF_M) |
 203		       ((hw->pf_id << GLINT_VECT2FUNC_PF_NUM_S) &
 204			GLINT_VECT2FUNC_PF_NUM_M));
 205		wr32(hw, GLINT_VECT2FUNC(v), reg);
 206	}
 207
 208	if (vsi->tx_mapping_mode == ICE_VSI_MAP_CONTIG)
 209		wr32(hw, VPLAN_TX_QBASE(vf->vf_id), 0);
 210	else
 211		dev_err(&pf->pdev->dev,
 212			"Scattered mode for VF Tx queues is not yet implemented\n");
 213
 214	if (vsi->rx_mapping_mode == ICE_VSI_MAP_CONTIG)
 215		wr32(hw, VPLAN_RX_QBASE(vf->vf_id), 0);
 216	else
 217		dev_err(&pf->pdev->dev,
 218			"Scattered mode for VF Rx queues is not yet implemented\n");
 219}
 220
 221/**
 222 * ice_sriov_free_msix_res - Reset/free any used MSIX resources
 223 * @pf: pointer to the PF structure
 224 *
 225 * If MSIX entries from the pf->irq_tracker were needed then we need to
 226 * reset the irq_tracker->end and give back the entries we needed to
 227 * num_avail_sw_msix.
 228 *
 229 * If no MSIX entries were taken from the pf->irq_tracker then just clear
 230 * the pf->sriov_base_vector.
 231 *
 232 * Returns 0 on success, and -EINVAL on error.
 233 */
 234static int ice_sriov_free_msix_res(struct ice_pf *pf)
 235{
 236	struct ice_res_tracker *res;
 237
 238	if (!pf)
 239		return -EINVAL;
 240
 241	res = pf->irq_tracker;
 242	if (!res)
 243		return -EINVAL;
 244
 245	/* give back irq_tracker resources used */
 246	if (pf->sriov_base_vector < res->num_entries) {
 247		res->end = res->num_entries;
 248		pf->num_avail_sw_msix +=
 249			res->num_entries - pf->sriov_base_vector;
 250	}
 251
 252	pf->sriov_base_vector = 0;
 253
 254	return 0;
 255}
 256
 257/**
 258 * ice_set_vf_state_qs_dis - Set VF queues state to disabled
 259 * @vf: pointer to the VF structure
 260 */
 261void ice_set_vf_state_qs_dis(struct ice_vf *vf)
 262{
 263	/* Clear Rx/Tx enabled queues flag */
 264	bitmap_zero(vf->txq_ena, ICE_MAX_BASE_QS_PER_VF);
 265	bitmap_zero(vf->rxq_ena, ICE_MAX_BASE_QS_PER_VF);
 266	vf->num_qs_ena = 0;
 267	clear_bit(ICE_VF_STATE_QS_ENA, vf->vf_states);
 268}
 269
 270/**
 271 * ice_dis_vf_qs - Disable the VF queues
 272 * @vf: pointer to the VF structure
 273 */
 274static void ice_dis_vf_qs(struct ice_vf *vf)
 275{
 276	struct ice_pf *pf = vf->pf;
 277	struct ice_vsi *vsi;
 278
 279	vsi = pf->vsi[vf->lan_vsi_idx];
 280
 281	ice_vsi_stop_lan_tx_rings(vsi, ICE_NO_RESET, vf->vf_id);
 282	ice_vsi_stop_rx_rings(vsi);
 283	ice_set_vf_state_qs_dis(vf);
 284}
 285
 286/**
 287 * ice_free_vfs - Free all VFs
 288 * @pf: pointer to the PF structure
 289 */
 290void ice_free_vfs(struct ice_pf *pf)
 291{
 292	struct ice_hw *hw = &pf->hw;
 293	int tmp, i;
 294
 295	if (!pf->vf)
 296		return;
 297
 298	while (test_and_set_bit(__ICE_VF_DIS, pf->state))
 299		usleep_range(1000, 2000);
 300
 301	/* Avoid wait time by stopping all VFs at the same time */
 302	for (i = 0; i < pf->num_alloc_vfs; i++)
 303		if (test_bit(ICE_VF_STATE_QS_ENA, pf->vf[i].vf_states))
 304			ice_dis_vf_qs(&pf->vf[i]);
 305
 306	/* Disable IOV before freeing resources. This lets any VF drivers
 307	 * running in the host get themselves cleaned up before we yank
 308	 * the carpet out from underneath their feet.
 309	 */
 310	if (!pci_vfs_assigned(pf->pdev))
 311		pci_disable_sriov(pf->pdev);
 312	else
 313		dev_warn(&pf->pdev->dev, "VFs are assigned - not disabling SR-IOV\n");
 314
 315	tmp = pf->num_alloc_vfs;
 316	pf->num_vf_qps = 0;
 317	pf->num_alloc_vfs = 0;
 318	for (i = 0; i < tmp; i++) {
 319		if (test_bit(ICE_VF_STATE_INIT, pf->vf[i].vf_states)) {
 320			/* disable VF qp mappings */
 321			ice_dis_vf_mappings(&pf->vf[i]);
 322			ice_free_vf_res(&pf->vf[i]);
 323		}
 324	}
 325
 326	if (ice_sriov_free_msix_res(pf))
 327		dev_err(&pf->pdev->dev,
 328			"Failed to free MSIX resources used by SR-IOV\n");
 329
 330	devm_kfree(&pf->pdev->dev, pf->vf);
 331	pf->vf = NULL;
 332
 333	/* This check is for when the driver is unloaded while VFs are
 334	 * assigned. Setting the number of VFs to 0 through sysfs is caught
 335	 * before this function ever gets called.
 336	 */
 337	if (!pci_vfs_assigned(pf->pdev)) {
 338		int vf_id;
 339
 340		/* Acknowledge VFLR for all VFs. Without this, VFs will fail to
 341		 * work correctly when SR-IOV gets re-enabled.
 342		 */
 343		for (vf_id = 0; vf_id < tmp; vf_id++) {
 344			u32 reg_idx, bit_idx;
 345
 346			reg_idx = (hw->func_caps.vf_base_id + vf_id) / 32;
 347			bit_idx = (hw->func_caps.vf_base_id + vf_id) % 32;
 348			wr32(hw, GLGEN_VFLRSTAT(reg_idx), BIT(bit_idx));
 349		}
 350	}
 351	clear_bit(__ICE_VF_DIS, pf->state);
 352	clear_bit(ICE_FLAG_SRIOV_ENA, pf->flags);
 353}
 354
 355/**
 356 * ice_trigger_vf_reset - Reset a VF on HW
 357 * @vf: pointer to the VF structure
 358 * @is_vflr: true if VFLR was issued, false if not
 359 * @is_pfr: true if the reset was triggered due to a previous PFR
 360 *
 361 * Trigger hardware to start a reset for a particular VF. Expects the caller
 362 * to wait the proper amount of time to allow hardware to reset the VF before
 363 * it cleans up and restores VF functionality.
 364 */
 365static void ice_trigger_vf_reset(struct ice_vf *vf, bool is_vflr, bool is_pfr)
 366{
 367	struct ice_pf *pf = vf->pf;
 368	u32 reg, reg_idx, bit_idx;
 369	struct ice_hw *hw;
 370	int vf_abs_id, i;
 371
 372	hw = &pf->hw;
 373	vf_abs_id = vf->vf_id + hw->func_caps.vf_base_id;
 374
 375	/* Inform VF that it is no longer active, as a warning */
 376	clear_bit(ICE_VF_STATE_ACTIVE, vf->vf_states);
 377
 378	/* Disable VF's configuration API during reset. The flag is re-enabled
 379	 * in ice_alloc_vf_res(), when it's safe again to access VF's VSI.
 380	 * It's normally disabled in ice_free_vf_res(), but it's safer
 381	 * to do it earlier to give some time to finish to any VF config
 382	 * functions that may still be running at this point.
 383	 */
 384	clear_bit(ICE_VF_STATE_INIT, vf->vf_states);
 385
 386	/* VF_MBX_ARQLEN is cleared by PFR, so the driver needs to clear it
 387	 * in the case of VFR. If this is done for PFR, it can mess up VF
 388	 * resets because the VF driver may already have started cleanup
 389	 * by the time we get here.
 390	 */
 391	if (!is_pfr)
 392		wr32(hw, VF_MBX_ARQLEN(vf_abs_id), 0);
 393
 394	/* In the case of a VFLR, the HW has already reset the VF and we
 395	 * just need to clean up, so don't hit the VFRTRIG register.
 396	 */
 397	if (!is_vflr) {
 398		/* reset VF using VPGEN_VFRTRIG reg */
 399		reg = rd32(hw, VPGEN_VFRTRIG(vf->vf_id));
 400		reg |= VPGEN_VFRTRIG_VFSWR_M;
 401		wr32(hw, VPGEN_VFRTRIG(vf->vf_id), reg);
 402	}
 403	/* clear the VFLR bit in GLGEN_VFLRSTAT */
 404	reg_idx = (vf_abs_id) / 32;
 405	bit_idx = (vf_abs_id) % 32;
 406	wr32(hw, GLGEN_VFLRSTAT(reg_idx), BIT(bit_idx));
 407	ice_flush(hw);
 408
 409	wr32(hw, PF_PCI_CIAA,
 410	     VF_DEVICE_STATUS | (vf_abs_id << PF_PCI_CIAA_VF_NUM_S));
 411	for (i = 0; i < ICE_PCI_CIAD_WAIT_COUNT; i++) {
 412		reg = rd32(hw, PF_PCI_CIAD);
 413		/* no transactions pending so stop polling */
 414		if ((reg & VF_TRANS_PENDING_M) == 0)
 415			break;
 416
 417		dev_err(&pf->pdev->dev,
 418			"VF %d PCI transactions stuck\n", vf->vf_id);
 419		udelay(ICE_PCI_CIAD_WAIT_DELAY_US);
 420	}
 421}
 422
 423/**
 424 * ice_vsi_set_pvid_fill_ctxt - Set VSI ctxt for add PVID
 425 * @ctxt: the VSI ctxt to fill
 426 * @vid: the VLAN ID to set as a PVID
 427 */
 428static void ice_vsi_set_pvid_fill_ctxt(struct ice_vsi_ctx *ctxt, u16 vid)
 429{
 430	ctxt->info.vlan_flags = (ICE_AQ_VSI_VLAN_MODE_UNTAGGED |
 431				 ICE_AQ_VSI_PVLAN_INSERT_PVID |
 432				 ICE_AQ_VSI_VLAN_EMOD_STR);
 433	ctxt->info.pvid = cpu_to_le16(vid);
 434	ctxt->info.sw_flags2 |= ICE_AQ_VSI_SW_FLAG_RX_VLAN_PRUNE_ENA;
 435	ctxt->info.valid_sections = cpu_to_le16(ICE_AQ_VSI_PROP_VLAN_VALID |
 436						ICE_AQ_VSI_PROP_SW_VALID);
 437}
 438
 439/**
 440 * ice_vsi_kill_pvid_fill_ctxt - Set VSI ctx for remove PVID
 441 * @ctxt: the VSI ctxt to fill
 442 */
 443static void ice_vsi_kill_pvid_fill_ctxt(struct ice_vsi_ctx *ctxt)
 444{
 445	ctxt->info.vlan_flags = ICE_AQ_VSI_VLAN_EMOD_NOTHING;
 446	ctxt->info.vlan_flags |= ICE_AQ_VSI_VLAN_MODE_ALL;
 447	ctxt->info.sw_flags2 &= ~ICE_AQ_VSI_SW_FLAG_RX_VLAN_PRUNE_ENA;
 448	ctxt->info.valid_sections = cpu_to_le16(ICE_AQ_VSI_PROP_VLAN_VALID |
 449						ICE_AQ_VSI_PROP_SW_VALID);
 450}
 451
 452/**
 453 * ice_vsi_manage_pvid - Enable or disable port VLAN for VSI
 454 * @vsi: the VSI to update
 455 * @vid: the VLAN ID to set as a PVID
 456 * @enable: true for enable PVID false for disable
 457 */
 458static int ice_vsi_manage_pvid(struct ice_vsi *vsi, u16 vid, bool enable)
 459{
 460	struct device *dev = &vsi->back->pdev->dev;
 461	struct ice_hw *hw = &vsi->back->hw;
 462	struct ice_vsi_ctx *ctxt;
 463	enum ice_status status;
 464	int ret = 0;
 465
 466	ctxt = devm_kzalloc(dev, sizeof(*ctxt), GFP_KERNEL);
 467	if (!ctxt)
 468		return -ENOMEM;
 469
 470	ctxt->info = vsi->info;
 471	if (enable)
 472		ice_vsi_set_pvid_fill_ctxt(ctxt, vid);
 473	else
 474		ice_vsi_kill_pvid_fill_ctxt(ctxt);
 475
 476	status = ice_update_vsi(hw, vsi->idx, ctxt, NULL);
 477	if (status) {
 478		dev_info(dev, "update VSI for port VLAN failed, err %d aq_err %d\n",
 479			 status, hw->adminq.sq_last_status);
 480		ret = -EIO;
 481		goto out;
 482	}
 483
 484	vsi->info = ctxt->info;
 485out:
 486	devm_kfree(dev, ctxt);
 487	return ret;
 488}
 489
 490/**
 491 * ice_vf_vsi_setup - Set up a VF VSI
 492 * @pf: board private structure
 493 * @pi: pointer to the port_info instance
 494 * @vf_id: defines VF ID to which this VSI connects.
 495 *
 496 * Returns pointer to the successfully allocated VSI struct on success,
 497 * otherwise returns NULL on failure.
 498 */
 499static struct ice_vsi *
 500ice_vf_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi, u16 vf_id)
 501{
 502	return ice_vsi_setup(pf, pi, ICE_VSI_VF, vf_id);
 503}
 504
 505/**
 506 * ice_calc_vf_first_vector_idx - Calculate MSIX vector index in the PF space
 507 * @pf: pointer to PF structure
 508 * @vf: pointer to VF that the first MSIX vector index is being calculated for
 509 *
 510 * This returns the first MSIX vector index in PF space that is used by this VF.
 511 * This index is used when accessing PF relative registers such as
 512 * GLINT_VECT2FUNC and GLINT_DYN_CTL.
 513 * This will always be the OICR index in the AVF driver so any functionality
 514 * using vf->first_vector_idx for queue configuration will have to increment by
 515 * 1 to avoid meddling with the OICR index.
 516 */
 517static int ice_calc_vf_first_vector_idx(struct ice_pf *pf, struct ice_vf *vf)
 518{
 519	return pf->sriov_base_vector + vf->vf_id * pf->num_vf_msix;
 520}
 521
 522/**
 523 * ice_alloc_vsi_res - Setup VF VSI and its resources
 524 * @vf: pointer to the VF structure
 525 *
 526 * Returns 0 on success, negative value on failure
 527 */
 528static int ice_alloc_vsi_res(struct ice_vf *vf)
 529{
 530	struct ice_pf *pf = vf->pf;
 531	LIST_HEAD(tmp_add_list);
 532	u8 broadcast[ETH_ALEN];
 533	struct ice_vsi *vsi;
 534	int status = 0;
 535
 536	/* first vector index is the VFs OICR index */
 537	vf->first_vector_idx = ice_calc_vf_first_vector_idx(pf, vf);
 538
 539	vsi = ice_vf_vsi_setup(pf, pf->hw.port_info, vf->vf_id);
 540	if (!vsi) {
 541		dev_err(&pf->pdev->dev, "Failed to create VF VSI\n");
 542		return -ENOMEM;
 543	}
 544
 545	vf->lan_vsi_idx = vsi->idx;
 546	vf->lan_vsi_num = vsi->vsi_num;
 547
 548	/* Check if port VLAN exist before, and restore it accordingly */
 549	if (vf->port_vlan_id) {
 550		ice_vsi_manage_pvid(vsi, vf->port_vlan_id, true);
 551		ice_vsi_add_vlan(vsi, vf->port_vlan_id & ICE_VLAN_M);
 552	}
 553
 554	eth_broadcast_addr(broadcast);
 555
 556	status = ice_add_mac_to_list(vsi, &tmp_add_list, broadcast);
 557	if (status)
 558		goto ice_alloc_vsi_res_exit;
 559
 560	if (is_valid_ether_addr(vf->dflt_lan_addr.addr)) {
 561		status = ice_add_mac_to_list(vsi, &tmp_add_list,
 562					     vf->dflt_lan_addr.addr);
 563		if (status)
 564			goto ice_alloc_vsi_res_exit;
 565	}
 566
 567	status = ice_add_mac(&pf->hw, &tmp_add_list);
 568	if (status)
 569		dev_err(&pf->pdev->dev,
 570			"could not add mac filters error %d\n", status);
 571	else
 572		vf->num_mac = 1;
 573
 574	/* Clear this bit after VF initialization since we shouldn't reclaim
 575	 * and reassign interrupts for synchronous or asynchronous VFR events.
 576	 * We don't want to reconfigure interrupts since AVF driver doesn't
 577	 * expect vector assignment to be changed unless there is a request for
 578	 * more vectors.
 579	 */
 580ice_alloc_vsi_res_exit:
 581	ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
 582	return status;
 583}
 584
 585/**
 586 * ice_alloc_vf_res - Allocate VF resources
 587 * @vf: pointer to the VF structure
 588 */
 589static int ice_alloc_vf_res(struct ice_vf *vf)
 590{
 591	struct ice_pf *pf = vf->pf;
 592	int tx_rx_queue_left;
 593	int status;
 594
 595	/* Update number of VF queues, in case VF had requested for queue
 596	 * changes
 597	 */
 598	tx_rx_queue_left = min_t(int, ice_get_avail_txq_count(pf),
 599				 ice_get_avail_rxq_count(pf));
 600	tx_rx_queue_left += ICE_DFLT_QS_PER_VF;
 601	if (vf->num_req_qs && vf->num_req_qs <= tx_rx_queue_left &&
 602	    vf->num_req_qs != vf->num_vf_qs)
 603		vf->num_vf_qs = vf->num_req_qs;
 604
 605	/* setup VF VSI and necessary resources */
 606	status = ice_alloc_vsi_res(vf);
 607	if (status)
 608		goto ice_alloc_vf_res_exit;
 609
 610	if (vf->trusted)
 611		set_bit(ICE_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps);
 612	else
 613		clear_bit(ICE_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps);
 614
 615	/* VF is now completely initialized */
 616	set_bit(ICE_VF_STATE_INIT, vf->vf_states);
 617
 618	return status;
 619
 620ice_alloc_vf_res_exit:
 621	ice_free_vf_res(vf);
 622	return status;
 623}
 624
 625/**
 626 * ice_ena_vf_mappings
 627 * @vf: pointer to the VF structure
 628 *
 629 * Enable VF vectors and queues allocation by writing the details into
 630 * respective registers.
 631 */
 632static void ice_ena_vf_mappings(struct ice_vf *vf)
 633{
 634	int abs_vf_id, abs_first, abs_last;
 635	struct ice_pf *pf = vf->pf;
 636	struct ice_vsi *vsi;
 637	int first, last, v;
 638	struct ice_hw *hw;
 639	u32 reg;
 640
 641	hw = &pf->hw;
 642	vsi = pf->vsi[vf->lan_vsi_idx];
 643	first = vf->first_vector_idx;
 644	last = (first + pf->num_vf_msix) - 1;
 645	abs_first = first + pf->hw.func_caps.common_cap.msix_vector_first_id;
 646	abs_last = (abs_first + pf->num_vf_msix) - 1;
 647	abs_vf_id = vf->vf_id + hw->func_caps.vf_base_id;
 648
 649	/* VF Vector allocation */
 650	reg = (((abs_first << VPINT_ALLOC_FIRST_S) & VPINT_ALLOC_FIRST_M) |
 651	       ((abs_last << VPINT_ALLOC_LAST_S) & VPINT_ALLOC_LAST_M) |
 652	       VPINT_ALLOC_VALID_M);
 653	wr32(hw, VPINT_ALLOC(vf->vf_id), reg);
 654
 655	reg = (((abs_first << VPINT_ALLOC_PCI_FIRST_S)
 656		 & VPINT_ALLOC_PCI_FIRST_M) |
 657	       ((abs_last << VPINT_ALLOC_PCI_LAST_S) & VPINT_ALLOC_PCI_LAST_M) |
 658	       VPINT_ALLOC_PCI_VALID_M);
 659	wr32(hw, VPINT_ALLOC_PCI(vf->vf_id), reg);
 660	/* map the interrupts to its functions */
 661	for (v = first; v <= last; v++) {
 662		reg = (((abs_vf_id << GLINT_VECT2FUNC_VF_NUM_S) &
 663			GLINT_VECT2FUNC_VF_NUM_M) |
 664		       ((hw->pf_id << GLINT_VECT2FUNC_PF_NUM_S) &
 665			GLINT_VECT2FUNC_PF_NUM_M));
 666		wr32(hw, GLINT_VECT2FUNC(v), reg);
 667	}
 668
 669	/* Map mailbox interrupt. We put an explicit 0 here to remind us that
 670	 * VF admin queue interrupts will go to VF MSI-X vector 0.
 671	 */
 672	wr32(hw, VPINT_MBX_CTL(abs_vf_id), VPINT_MBX_CTL_CAUSE_ENA_M | 0);
 673	/* set regardless of mapping mode */
 674	wr32(hw, VPLAN_TXQ_MAPENA(vf->vf_id), VPLAN_TXQ_MAPENA_TX_ENA_M);
 675
 676	/* VF Tx queues allocation */
 677	if (vsi->tx_mapping_mode == ICE_VSI_MAP_CONTIG) {
 678		/* set the VF PF Tx queue range
 679		 * VFNUMQ value should be set to (number of queues - 1). A value
 680		 * of 0 means 1 queue and a value of 255 means 256 queues
 681		 */
 682		reg = (((vsi->txq_map[0] << VPLAN_TX_QBASE_VFFIRSTQ_S) &
 683			VPLAN_TX_QBASE_VFFIRSTQ_M) |
 684		       (((vsi->alloc_txq - 1) << VPLAN_TX_QBASE_VFNUMQ_S) &
 685			VPLAN_TX_QBASE_VFNUMQ_M));
 686		wr32(hw, VPLAN_TX_QBASE(vf->vf_id), reg);
 687	} else {
 688		dev_err(&pf->pdev->dev,
 689			"Scattered mode for VF Tx queues is not yet implemented\n");
 690	}
 691
 692	/* set regardless of mapping mode */
 693	wr32(hw, VPLAN_RXQ_MAPENA(vf->vf_id), VPLAN_RXQ_MAPENA_RX_ENA_M);
 694
 695	/* VF Rx queues allocation */
 696	if (vsi->rx_mapping_mode == ICE_VSI_MAP_CONTIG) {
 697		/* set the VF PF Rx queue range
 698		 * VFNUMQ value should be set to (number of queues - 1). A value
 699		 * of 0 means 1 queue and a value of 255 means 256 queues
 700		 */
 701		reg = (((vsi->rxq_map[0] << VPLAN_RX_QBASE_VFFIRSTQ_S) &
 702			VPLAN_RX_QBASE_VFFIRSTQ_M) |
 703		       (((vsi->alloc_txq - 1) << VPLAN_RX_QBASE_VFNUMQ_S) &
 704			VPLAN_RX_QBASE_VFNUMQ_M));
 705		wr32(hw, VPLAN_RX_QBASE(vf->vf_id), reg);
 706	} else {
 707		dev_err(&pf->pdev->dev,
 708			"Scattered mode for VF Rx queues is not yet implemented\n");
 709	}
 710}
 711
 712/**
 713 * ice_determine_res
 714 * @pf: pointer to the PF structure
 715 * @avail_res: available resources in the PF structure
 716 * @max_res: maximum resources that can be given per VF
 717 * @min_res: minimum resources that can be given per VF
 718 *
 719 * Returns non-zero value if resources (queues/vectors) are available or
 720 * returns zero if PF cannot accommodate for all num_alloc_vfs.
 721 */
 722static int
 723ice_determine_res(struct ice_pf *pf, u16 avail_res, u16 max_res, u16 min_res)
 724{
 725	bool checked_min_res = false;
 726	int res;
 727
 728	/* start by checking if PF can assign max number of resources for
 729	 * all num_alloc_vfs.
 730	 * if yes, return number per VF
 731	 * If no, divide by 2 and roundup, check again
 732	 * repeat the loop till we reach a point where even minimum resources
 733	 * are not available, in that case return 0
 734	 */
 735	res = max_res;
 736	while ((res >= min_res) && !checked_min_res) {
 737		int num_all_res;
 738
 739		num_all_res = pf->num_alloc_vfs * res;
 740		if (num_all_res <= avail_res)
 741			return res;
 742
 743		if (res == min_res)
 744			checked_min_res = true;
 745
 746		res = DIV_ROUND_UP(res, 2);
 747	}
 748	return 0;
 749}
 750
 751/**
 752 * ice_calc_vf_reg_idx - Calculate the VF's register index in the PF space
 753 * @vf: VF to calculate the register index for
 754 * @q_vector: a q_vector associated to the VF
 755 */
 756int ice_calc_vf_reg_idx(struct ice_vf *vf, struct ice_q_vector *q_vector)
 757{
 758	struct ice_pf *pf;
 759
 760	if (!vf || !q_vector)
 761		return -EINVAL;
 762
 763	pf = vf->pf;
 764
 765	/* always add one to account for the OICR being the first MSIX */
 766	return pf->sriov_base_vector + pf->num_vf_msix * vf->vf_id +
 767		q_vector->v_idx + 1;
 768}
 769
 770/**
 771 * ice_get_max_valid_res_idx - Get the max valid resource index
 772 * @res: pointer to the resource to find the max valid index for
 773 *
 774 * Start from the end of the ice_res_tracker and return right when we find the
 775 * first res->list entry with the ICE_RES_VALID_BIT set. This function is only
 776 * valid for SR-IOV because it is the only consumer that manipulates the
 777 * res->end and this is always called when res->end is set to res->num_entries.
 778 */
 779static int ice_get_max_valid_res_idx(struct ice_res_tracker *res)
 780{
 781	int i;
 782
 783	if (!res)
 784		return -EINVAL;
 785
 786	for (i = res->num_entries - 1; i >= 0; i--)
 787		if (res->list[i] & ICE_RES_VALID_BIT)
 788			return i;
 789
 790	return 0;
 791}
 792
 793/**
 794 * ice_sriov_set_msix_res - Set any used MSIX resources
 795 * @pf: pointer to PF structure
 796 * @num_msix_needed: number of MSIX vectors needed for all SR-IOV VFs
 797 *
 798 * This function allows SR-IOV resources to be taken from the end of the PF's
 799 * allowed HW MSIX vectors so in many cases the irq_tracker will not
 800 * be needed. In these cases we just set the pf->sriov_base_vector and return
 801 * success.
 802 *
 803 * If SR-IOV needs to use any pf->irq_tracker entries it updates the
 804 * irq_tracker->end based on the first entry needed for SR-IOV. This makes it
 805 * so any calls to ice_get_res() using the irq_tracker will not try to use
 806 * resources at or beyond the newly set value.
 807 *
 808 * Return 0 on success, and -EINVAL when there are not enough MSIX vectors in
 809 * in the PF's space available for SR-IOV.
 810 */
 811static int ice_sriov_set_msix_res(struct ice_pf *pf, u16 num_msix_needed)
 812{
 813	int max_valid_res_idx = ice_get_max_valid_res_idx(pf->irq_tracker);
 814	u16 pf_total_msix_vectors =
 815		pf->hw.func_caps.common_cap.num_msix_vectors;
 816	struct ice_res_tracker *res = pf->irq_tracker;
 817	int sriov_base_vector;
 818
 819	if (max_valid_res_idx < 0)
 820		return max_valid_res_idx;
 821
 822	sriov_base_vector = pf_total_msix_vectors - num_msix_needed;
 823
 824	/* make sure we only grab irq_tracker entries from the list end and
 825	 * that we have enough available MSIX vectors
 826	 */
 827	if (sriov_base_vector <= max_valid_res_idx)
 828		return -EINVAL;
 829
 830	pf->sriov_base_vector = sriov_base_vector;
 831
 832	/* dip into irq_tracker entries and update used resources */
 833	if (num_msix_needed > (pf_total_msix_vectors - res->num_entries)) {
 834		pf->num_avail_sw_msix -=
 835			res->num_entries - pf->sriov_base_vector;
 836		res->end = pf->sriov_base_vector;
 837	}
 838
 839	return 0;
 840}
 841
 842/**
 843 * ice_check_avail_res - check if vectors and queues are available
 844 * @pf: pointer to the PF structure
 845 *
 846 * This function is where we calculate actual number of resources for VF VSIs,
 847 * we don't reserve ahead of time during probe. Returns success if vectors and
 848 * queues resources are available, otherwise returns error code
 849 */
 850static int ice_check_avail_res(struct ice_pf *pf)
 851{
 852	int max_valid_res_idx = ice_get_max_valid_res_idx(pf->irq_tracker);
 853	u16 num_msix, num_txq, num_rxq, num_avail_msix;
 854
 855	if (!pf->num_alloc_vfs || max_valid_res_idx < 0)
 856		return -EINVAL;
 857
 858	/* add 1 to max_valid_res_idx to account for it being 0-based */
 859	num_avail_msix = pf->hw.func_caps.common_cap.num_msix_vectors -
 860		(max_valid_res_idx + 1);
 861
 862	/* Grab from HW interrupts common pool
 863	 * Note: By the time the user decides it needs more vectors in a VF
 864	 * its already too late since one must decide this prior to creating the
 865	 * VF interface. So the best we can do is take a guess as to what the
 866	 * user might want.
 867	 *
 868	 * We have two policies for vector allocation:
 869	 * 1. if num_alloc_vfs is from 1 to 16, then we consider this as small
 870	 * number of NFV VFs used for NFV appliances, since this is a special
 871	 * case, we try to assign maximum vectors per VF (65) as much as
 872	 * possible, based on determine_resources algorithm.
 873	 * 2. if num_alloc_vfs is from 17 to 256, then its large number of
 874	 * regular VFs which are not used for any special purpose. Hence try to
 875	 * grab default interrupt vectors (5 as supported by AVF driver).
 876	 */
 877	if (pf->num_alloc_vfs <= 16) {
 878		num_msix = ice_determine_res(pf, num_avail_msix,
 879					     ICE_MAX_INTR_PER_VF,
 880					     ICE_MIN_INTR_PER_VF);
 881	} else if (pf->num_alloc_vfs <= ICE_MAX_VF_COUNT) {
 882		num_msix = ice_determine_res(pf, num_avail_msix,
 883					     ICE_DFLT_INTR_PER_VF,
 884					     ICE_MIN_INTR_PER_VF);
 885	} else {
 886		dev_err(&pf->pdev->dev,
 887			"Number of VFs %d exceeds max VF count %d\n",
 888			pf->num_alloc_vfs, ICE_MAX_VF_COUNT);
 889		return -EIO;
 890	}
 891
 892	if (!num_msix)
 893		return -EIO;
 894
 895	/* Grab from the common pool
 896	 * start by requesting Default queues (4 as supported by AVF driver),
 897	 * Note that, the main difference between queues and vectors is, latter
 898	 * can only be reserved at init time but queues can be requested by VF
 899	 * at runtime through Virtchnl, that is the reason we start by reserving
 900	 * few queues.
 901	 */
 902	num_txq = ice_determine_res(pf, ice_get_avail_txq_count(pf),
 903				    ICE_DFLT_QS_PER_VF, ICE_MIN_QS_PER_VF);
 904
 905	num_rxq = ice_determine_res(pf, ice_get_avail_rxq_count(pf),
 906				    ICE_DFLT_QS_PER_VF, ICE_MIN_QS_PER_VF);
 907
 908	if (!num_txq || !num_rxq)
 909		return -EIO;
 910
 911	if (ice_sriov_set_msix_res(pf, num_msix * pf->num_alloc_vfs))
 912		return -EINVAL;
 913
 914	/* since AVF driver works with only queue pairs which means, it expects
 915	 * to have equal number of Rx and Tx queues, so take the minimum of
 916	 * available Tx or Rx queues
 917	 */
 918	pf->num_vf_qps = min_t(int, num_txq, num_rxq);
 919	pf->num_vf_msix = num_msix;
 920
 921	return 0;
 922}
 923
 924/**
 925 * ice_cleanup_and_realloc_vf - Clean up VF and reallocate resources after reset
 926 * @vf: pointer to the VF structure
 927 *
 928 * Cleanup a VF after the hardware reset is finished. Expects the caller to
 929 * have verified whether the reset is finished properly, and ensure the
 930 * minimum amount of wait time has passed. Reallocate VF resources back to make
 931 * VF state active
 932 */
 933static void ice_cleanup_and_realloc_vf(struct ice_vf *vf)
 934{
 935	struct ice_pf *pf = vf->pf;
 936	struct ice_hw *hw;
 937	u32 reg;
 938
 939	hw = &pf->hw;
 940
 941	/* PF software completes the flow by notifying VF that reset flow is
 942	 * completed. This is done by enabling hardware by clearing the reset
 943	 * bit in the VPGEN_VFRTRIG reg and setting VFR_STATE in the VFGEN_RSTAT
 944	 * register to VFR completed (done at the end of this function)
 945	 * By doing this we allow HW to access VF memory at any point. If we
 946	 * did it any sooner, HW could access memory while it was being freed
 947	 * in ice_free_vf_res(), causing an IOMMU fault.
 948	 *
 949	 * On the other hand, this needs to be done ASAP, because the VF driver
 950	 * is waiting for this to happen and may report a timeout. It's
 951	 * harmless, but it gets logged into Guest OS kernel log, so best avoid
 952	 * it.
 953	 */
 954	reg = rd32(hw, VPGEN_VFRTRIG(vf->vf_id));
 955	reg &= ~VPGEN_VFRTRIG_VFSWR_M;
 956	wr32(hw, VPGEN_VFRTRIG(vf->vf_id), reg);
 957
 958	/* reallocate VF resources to finish resetting the VSI state */
 959	if (!ice_alloc_vf_res(vf)) {
 960		ice_ena_vf_mappings(vf);
 961		set_bit(ICE_VF_STATE_ACTIVE, vf->vf_states);
 962		clear_bit(ICE_VF_STATE_DIS, vf->vf_states);
 963		vf->num_vlan = 0;
 964	}
 965
 966	/* Tell the VF driver the reset is done. This needs to be done only
 967	 * after VF has been fully initialized, because the VF driver may
 968	 * request resources immediately after setting this flag.
 969	 */
 970	wr32(hw, VFGEN_RSTAT(vf->vf_id), VIRTCHNL_VFR_VFACTIVE);
 971}
 972
 973/**
 974 * ice_vf_set_vsi_promisc - set given VF VSI to given promiscuous mode(s)
 975 * @vf: pointer to the VF info
 976 * @vsi: the VSI being configured
 977 * @promisc_m: mask of promiscuous config bits
 978 * @rm_promisc: promisc flag request from the VF to remove or add filter
 979 *
 980 * This function configures VF VSI promiscuous mode, based on the VF requests,
 981 * for Unicast, Multicast and VLAN
 982 */
 983static enum ice_status
 984ice_vf_set_vsi_promisc(struct ice_vf *vf, struct ice_vsi *vsi, u8 promisc_m,
 985		       bool rm_promisc)
 986{
 987	struct ice_pf *pf = vf->pf;
 988	enum ice_status status = 0;
 989	struct ice_hw *hw;
 990
 991	hw = &pf->hw;
 992	if (vf->num_vlan) {
 993		status = ice_set_vlan_vsi_promisc(hw, vsi->idx, promisc_m,
 994						  rm_promisc);
 995	} else if (vf->port_vlan_id) {
 996		if (rm_promisc)
 997			status = ice_clear_vsi_promisc(hw, vsi->idx, promisc_m,
 998						       vf->port_vlan_id);
 999		else
1000			status = ice_set_vsi_promisc(hw, vsi->idx, promisc_m,
1001						     vf->port_vlan_id);
1002	} else {
1003		if (rm_promisc)
1004			status = ice_clear_vsi_promisc(hw, vsi->idx, promisc_m,
1005						       0);
1006		else
1007			status = ice_set_vsi_promisc(hw, vsi->idx, promisc_m,
1008						     0);
1009	}
1010
1011	return status;
1012}
1013
1014/**
1015 * ice_config_res_vfs - Finalize allocation of VFs resources in one go
1016 * @pf: pointer to the PF structure
1017 *
1018 * This function is being called as last part of resetting all VFs, or when
1019 * configuring VFs for the first time, where there is no resource to be freed
1020 * Returns true if resources were properly allocated for all VFs, and false
1021 * otherwise.
1022 */
1023static bool ice_config_res_vfs(struct ice_pf *pf)
1024{
1025	struct ice_hw *hw = &pf->hw;
1026	int v;
1027
1028	if (ice_check_avail_res(pf)) {
1029		dev_err(&pf->pdev->dev,
1030			"Cannot allocate VF resources, try with fewer number of VFs\n");
1031		return false;
1032	}
1033
1034	/* rearm global interrupts */
1035	if (test_and_clear_bit(__ICE_OICR_INTR_DIS, pf->state))
1036		ice_irq_dynamic_ena(hw, NULL, NULL);
1037
1038	/* Finish resetting each VF and allocate resources */
1039	for (v = 0; v < pf->num_alloc_vfs; v++) {
1040		struct ice_vf *vf = &pf->vf[v];
1041
1042		vf->num_vf_qs = pf->num_vf_qps;
1043		dev_dbg(&pf->pdev->dev,
1044			"VF-id %d has %d queues configured\n",
1045			vf->vf_id, vf->num_vf_qs);
1046		ice_cleanup_and_realloc_vf(vf);
1047	}
1048
1049	ice_flush(hw);
1050	clear_bit(__ICE_VF_DIS, pf->state);
1051
1052	return true;
1053}
1054
1055/**
1056 * ice_reset_all_vfs - reset all allocated VFs in one go
1057 * @pf: pointer to the PF structure
1058 * @is_vflr: true if VFLR was issued, false if not
1059 *
1060 * First, tell the hardware to reset each VF, then do all the waiting in one
1061 * chunk, and finally finish restoring each VF after the wait. This is useful
1062 * during PF routines which need to reset all VFs, as otherwise it must perform
1063 * these resets in a serialized fashion.
1064 *
1065 * Returns true if any VFs were reset, and false otherwise.
1066 */
1067bool ice_reset_all_vfs(struct ice_pf *pf, bool is_vflr)
1068{
1069	struct ice_hw *hw = &pf->hw;
1070	struct ice_vf *vf;
1071	int v, i;
1072
1073	/* If we don't have any VFs, then there is nothing to reset */
1074	if (!pf->num_alloc_vfs)
1075		return false;
1076
1077	/* If VFs have been disabled, there is no need to reset */
1078	if (test_and_set_bit(__ICE_VF_DIS, pf->state))
1079		return false;
1080
1081	/* Begin reset on all VFs at once */
1082	for (v = 0; v < pf->num_alloc_vfs; v++)
1083		ice_trigger_vf_reset(&pf->vf[v], is_vflr, true);
1084
1085	for (v = 0; v < pf->num_alloc_vfs; v++) {
1086		struct ice_vsi *vsi;
1087
1088		vf = &pf->vf[v];
1089		vsi = pf->vsi[vf->lan_vsi_idx];
1090		if (test_bit(ICE_VF_STATE_QS_ENA, vf->vf_states))
1091			ice_dis_vf_qs(vf);
1092		ice_dis_vsi_txq(vsi->port_info, vsi->idx, 0, 0, NULL, NULL,
1093				NULL, ICE_VF_RESET, vf->vf_id, NULL);
1094	}
1095
1096	/* HW requires some time to make sure it can flush the FIFO for a VF
1097	 * when it resets it. Poll the VPGEN_VFRSTAT register for each VF in
1098	 * sequence to make sure that it has completed. We'll keep track of
1099	 * the VFs using a simple iterator that increments once that VF has
1100	 * finished resetting.
1101	 */
1102	for (i = 0, v = 0; i < 10 && v < pf->num_alloc_vfs; i++) {
1103
1104		/* Check each VF in sequence */
1105		while (v < pf->num_alloc_vfs) {
1106			u32 reg;
1107
1108			vf = &pf->vf[v];
1109			reg = rd32(hw, VPGEN_VFRSTAT(vf->vf_id));
1110			if (!(reg & VPGEN_VFRSTAT_VFRD_M)) {
1111				/* only delay if the check failed */
1112				usleep_range(10, 20);
1113				break;
1114			}
1115
1116			/* If the current VF has finished resetting, move on
1117			 * to the next VF in sequence.
1118			 */
1119			v++;
1120		}
1121	}
1122
1123	/* Display a warning if at least one VF didn't manage to reset in
1124	 * time, but continue on with the operation.
1125	 */
1126	if (v < pf->num_alloc_vfs)
1127		dev_warn(&pf->pdev->dev, "VF reset check timeout\n");
1128
1129	/* free VF resources to begin resetting the VSI state */
1130	for (v = 0; v < pf->num_alloc_vfs; v++) {
1131		vf = &pf->vf[v];
1132
1133		ice_free_vf_res(vf);
1134
1135		/* Free VF queues as well, and reallocate later.
1136		 * If a given VF has different number of queues
1137		 * configured, the request for update will come
1138		 * via mailbox communication.
1139		 */
1140		vf->num_vf_qs = 0;
1141	}
1142
1143	if (ice_sriov_free_msix_res(pf))
1144		dev_err(&pf->pdev->dev,
1145			"Failed to free MSIX resources used by SR-IOV\n");
1146
1147	if (!ice_config_res_vfs(pf))
1148		return false;
1149
1150	return true;
1151}
1152
1153/**
1154 * ice_reset_vf - Reset a particular VF
1155 * @vf: pointer to the VF structure
1156 * @is_vflr: true if VFLR was issued, false if not
1157 *
1158 * Returns true if the VF is reset, false otherwise.
1159 */
1160static bool ice_reset_vf(struct ice_vf *vf, bool is_vflr)
1161{
1162	struct ice_pf *pf = vf->pf;
1163	struct ice_vsi *vsi;
1164	struct ice_hw *hw;
1165	bool rsd = false;
1166	u8 promisc_m;
1167	u32 reg;
1168	int i;
1169
1170	/* If the PF has been disabled, there is no need resetting VF until
1171	 * PF is active again.
1172	 */
1173	if (test_bit(__ICE_VF_DIS, pf->state))
1174		return false;
1175
1176	/* If the VF has been disabled, this means something else is
1177	 * resetting the VF, so we shouldn't continue. Otherwise, set
1178	 * disable VF state bit for actual reset, and continue.
1179	 */
1180	if (test_and_set_bit(ICE_VF_STATE_DIS, vf->vf_states))
1181		return false;
1182
1183	ice_trigger_vf_reset(vf, is_vflr, false);
1184
1185	vsi = pf->vsi[vf->lan_vsi_idx];
1186
1187	if (test_bit(ICE_VF_STATE_QS_ENA, vf->vf_states))
1188		ice_dis_vf_qs(vf);
1189
1190	/* Call Disable LAN Tx queue AQ whether or not queues are
1191	 * enabled. This is needed for successful completion of VFR.
1192	 */
1193	ice_dis_vsi_txq(vsi->port_info, vsi->idx, 0, 0, NULL, NULL,
1194			NULL, ICE_VF_RESET, vf->vf_id, NULL);
1195
1196	hw = &pf->hw;
1197	/* poll VPGEN_VFRSTAT reg to make sure
1198	 * that reset is complete
1199	 */
1200	for (i = 0; i < 10; i++) {
1201		/* VF reset requires driver to first reset the VF and then
1202		 * poll the status register to make sure that the reset
1203		 * completed successfully.
1204		 */
1205		reg = rd32(hw, VPGEN_VFRSTAT(vf->vf_id));
1206		if (reg & VPGEN_VFRSTAT_VFRD_M) {
1207			rsd = true;
1208			break;
1209		}
1210
1211		/* only sleep if the reset is not done */
1212		usleep_range(10, 20);
1213	}
1214
1215	/* Display a warning if VF didn't manage to reset in time, but need to
1216	 * continue on with the operation.
1217	 */
1218	if (!rsd)
1219		dev_warn(&pf->pdev->dev, "VF reset check timeout on VF %d\n",
1220			 vf->vf_id);
1221
1222	/* disable promiscuous modes in case they were enabled
1223	 * ignore any error if disabling process failed
1224	 */
1225	if (test_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states) ||
1226	    test_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states)) {
1227		if (vf->port_vlan_id ||  vf->num_vlan)
1228			promisc_m = ICE_UCAST_VLAN_PROMISC_BITS;
1229		else
1230			promisc_m = ICE_UCAST_PROMISC_BITS;
1231
1232		vsi = pf->vsi[vf->lan_vsi_idx];
1233		if (ice_vf_set_vsi_promisc(vf, vsi, promisc_m, true))
1234			dev_err(&pf->pdev->dev, "disabling promiscuous mode failed\n");
1235	}
1236
1237	/* free VF resources to begin resetting the VSI state */
1238	ice_free_vf_res(vf);
1239
1240	ice_cleanup_and_realloc_vf(vf);
1241
1242	ice_flush(hw);
1243
1244	return true;
1245}
1246
1247/**
1248 * ice_vc_notify_link_state - Inform all VFs on a PF of link status
1249 * @pf: pointer to the PF structure
1250 */
1251void ice_vc_notify_link_state(struct ice_pf *pf)
1252{
1253	int i;
1254
1255	for (i = 0; i < pf->num_alloc_vfs; i++)
1256		ice_vc_notify_vf_link_state(&pf->vf[i]);
1257}
1258
1259/**
1260 * ice_vc_notify_reset - Send pending reset message to all VFs
1261 * @pf: pointer to the PF structure
1262 *
1263 * indicate a pending reset to all VFs on a given PF
1264 */
1265void ice_vc_notify_reset(struct ice_pf *pf)
1266{
1267	struct virtchnl_pf_event pfe;
1268
1269	if (!pf->num_alloc_vfs)
1270		return;
1271
1272	pfe.event = VIRTCHNL_EVENT_RESET_IMPENDING;
1273	pfe.severity = PF_EVENT_SEVERITY_CERTAIN_DOOM;
1274	ice_vc_vf_broadcast(pf, VIRTCHNL_OP_EVENT, VIRTCHNL_STATUS_SUCCESS,
1275			    (u8 *)&pfe, sizeof(struct virtchnl_pf_event));
1276}
1277
1278/**
1279 * ice_vc_notify_vf_reset - Notify VF of a reset event
1280 * @vf: pointer to the VF structure
1281 */
1282static void ice_vc_notify_vf_reset(struct ice_vf *vf)
1283{
1284	struct virtchnl_pf_event pfe;
1285
1286	/* validate the request */
1287	if (!vf || vf->vf_id >= vf->pf->num_alloc_vfs)
1288		return;
1289
1290	/* verify if the VF is in either init or active before proceeding */
1291	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states) &&
1292	    !test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states))
1293		return;
1294
1295	pfe.event = VIRTCHNL_EVENT_RESET_IMPENDING;
1296	pfe.severity = PF_EVENT_SEVERITY_CERTAIN_DOOM;
1297	ice_aq_send_msg_to_vf(&vf->pf->hw, vf->vf_id, VIRTCHNL_OP_EVENT,
1298			      VIRTCHNL_STATUS_SUCCESS, (u8 *)&pfe, sizeof(pfe),
1299			      NULL);
1300}
1301
1302/**
1303 * ice_alloc_vfs - Allocate and set up VFs resources
1304 * @pf: pointer to the PF structure
1305 * @num_alloc_vfs: number of VFs to allocate
1306 */
1307static int ice_alloc_vfs(struct ice_pf *pf, u16 num_alloc_vfs)
1308{
1309	struct ice_hw *hw = &pf->hw;
1310	struct ice_vf *vfs;
1311	int i, ret;
1312
1313	/* Disable global interrupt 0 so we don't try to handle the VFLR. */
1314	wr32(hw, GLINT_DYN_CTL(pf->oicr_idx),
1315	     ICE_ITR_NONE << GLINT_DYN_CTL_ITR_INDX_S);
1316	set_bit(__ICE_OICR_INTR_DIS, pf->state);
1317	ice_flush(hw);
1318
1319	ret = pci_enable_sriov(pf->pdev, num_alloc_vfs);
1320	if (ret) {
1321		pf->num_alloc_vfs = 0;
1322		goto err_unroll_intr;
1323	}
1324	/* allocate memory */
1325	vfs = devm_kcalloc(&pf->pdev->dev, num_alloc_vfs, sizeof(*vfs),
1326			   GFP_KERNEL);
1327	if (!vfs) {
1328		ret = -ENOMEM;
1329		goto err_pci_disable_sriov;
1330	}
1331	pf->vf = vfs;
1332
1333	/* apply default profile */
1334	for (i = 0; i < num_alloc_vfs; i++) {
1335		vfs[i].pf = pf;
1336		vfs[i].vf_sw_id = pf->first_sw;
1337		vfs[i].vf_id = i;
1338
1339		/* assign default capabilities */
1340		set_bit(ICE_VIRTCHNL_VF_CAP_L2, &vfs[i].vf_caps);
1341		vfs[i].spoofchk = true;
1342	}
1343	pf->num_alloc_vfs = num_alloc_vfs;
1344
1345	/* VF resources get allocated with initialization */
1346	if (!ice_config_res_vfs(pf)) {
1347		ret = -EIO;
1348		goto err_unroll_sriov;
1349	}
1350
1351	return ret;
1352
1353err_unroll_sriov:
1354	pf->vf = NULL;
1355	devm_kfree(&pf->pdev->dev, vfs);
1356	vfs = NULL;
1357	pf->num_alloc_vfs = 0;
1358err_pci_disable_sriov:
1359	pci_disable_sriov(pf->pdev);
1360err_unroll_intr:
1361	/* rearm interrupts here */
1362	ice_irq_dynamic_ena(hw, NULL, NULL);
1363	clear_bit(__ICE_OICR_INTR_DIS, pf->state);
1364	return ret;
1365}
1366
1367/**
1368 * ice_pf_state_is_nominal - checks the PF for nominal state
1369 * @pf: pointer to PF to check
1370 *
1371 * Check the PF's state for a collection of bits that would indicate
1372 * the PF is in a state that would inhibit normal operation for
1373 * driver functionality.
1374 *
1375 * Returns true if PF is in a nominal state.
1376 * Returns false otherwise
1377 */
1378static bool ice_pf_state_is_nominal(struct ice_pf *pf)
1379{
1380	DECLARE_BITMAP(check_bits, __ICE_STATE_NBITS) = { 0 };
1381
1382	if (!pf)
1383		return false;
1384
1385	bitmap_set(check_bits, 0, __ICE_STATE_NOMINAL_CHECK_BITS);
1386	if (bitmap_intersects(pf->state, check_bits, __ICE_STATE_NBITS))
1387		return false;
1388
1389	return true;
1390}
1391
1392/**
1393 * ice_pci_sriov_ena - Enable or change number of VFs
1394 * @pf: pointer to the PF structure
1395 * @num_vfs: number of VFs to allocate
1396 */
1397static int ice_pci_sriov_ena(struct ice_pf *pf, int num_vfs)
1398{
1399	int pre_existing_vfs = pci_num_vf(pf->pdev);
1400	struct device *dev = &pf->pdev->dev;
1401	int err;
1402
1403	if (!ice_pf_state_is_nominal(pf)) {
1404		dev_err(dev, "Cannot enable SR-IOV, device not ready\n");
1405		return -EBUSY;
1406	}
1407
1408	if (!test_bit(ICE_FLAG_SRIOV_CAPABLE, pf->flags)) {
1409		dev_err(dev, "This device is not capable of SR-IOV\n");
1410		return -ENODEV;
1411	}
1412
1413	if (pre_existing_vfs && pre_existing_vfs != num_vfs)
1414		ice_free_vfs(pf);
1415	else if (pre_existing_vfs && pre_existing_vfs == num_vfs)
1416		return num_vfs;
1417
1418	if (num_vfs > pf->num_vfs_supported) {
1419		dev_err(dev, "Can't enable %d VFs, max VFs supported is %d\n",
1420			num_vfs, pf->num_vfs_supported);
1421		return -ENOTSUPP;
1422	}
1423
1424	dev_info(dev, "Allocating %d VFs\n", num_vfs);
1425	err = ice_alloc_vfs(pf, num_vfs);
1426	if (err) {
1427		dev_err(dev, "Failed to enable SR-IOV: %d\n", err);
1428		return err;
1429	}
1430
1431	set_bit(ICE_FLAG_SRIOV_ENA, pf->flags);
1432	return num_vfs;
1433}
1434
1435/**
1436 * ice_sriov_configure - Enable or change number of VFs via sysfs
1437 * @pdev: pointer to a pci_dev structure
1438 * @num_vfs: number of VFs to allocate
1439 *
1440 * This function is called when the user updates the number of VFs in sysfs.
1441 */
1442int ice_sriov_configure(struct pci_dev *pdev, int num_vfs)
1443{
1444	struct ice_pf *pf = pci_get_drvdata(pdev);
1445
1446	if (ice_is_safe_mode(pf)) {
1447		dev_err(&pf->pdev->dev,
1448			"SR-IOV cannot be configured - Device is in Safe Mode\n");
1449		return -EOPNOTSUPP;
1450	}
1451
1452	if (num_vfs)
1453		return ice_pci_sriov_ena(pf, num_vfs);
1454
1455	if (!pci_vfs_assigned(pdev)) {
1456		ice_free_vfs(pf);
1457	} else {
1458		dev_err(&pf->pdev->dev,
1459			"can't free VFs because some are assigned to VMs.\n");
1460		return -EBUSY;
1461	}
1462
1463	return 0;
1464}
1465
1466/**
1467 * ice_process_vflr_event - Free VF resources via IRQ calls
1468 * @pf: pointer to the PF structure
1469 *
1470 * called from the VFLR IRQ handler to
1471 * free up VF resources and state variables
1472 */
1473void ice_process_vflr_event(struct ice_pf *pf)
1474{
1475	struct ice_hw *hw = &pf->hw;
1476	int vf_id;
1477	u32 reg;
1478
1479	if (!test_and_clear_bit(__ICE_VFLR_EVENT_PENDING, pf->state) ||
1480	    !pf->num_alloc_vfs)
1481		return;
1482
1483	for (vf_id = 0; vf_id < pf->num_alloc_vfs; vf_id++) {
1484		struct ice_vf *vf = &pf->vf[vf_id];
1485		u32 reg_idx, bit_idx;
1486
1487		reg_idx = (hw->func_caps.vf_base_id + vf_id) / 32;
1488		bit_idx = (hw->func_caps.vf_base_id + vf_id) % 32;
1489		/* read GLGEN_VFLRSTAT register to find out the flr VFs */
1490		reg = rd32(hw, GLGEN_VFLRSTAT(reg_idx));
1491		if (reg & BIT(bit_idx))
1492			/* GLGEN_VFLRSTAT bit will be cleared in ice_reset_vf */
1493			ice_reset_vf(vf, true);
1494	}
1495}
1496
1497/**
1498 * ice_vc_dis_vf - Disable a given VF via SW reset
1499 * @vf: pointer to the VF info
1500 *
1501 * Disable the VF through a SW reset
1502 */
1503static void ice_vc_dis_vf(struct ice_vf *vf)
1504{
1505	ice_vc_notify_vf_reset(vf);
1506	ice_reset_vf(vf, false);
1507}
1508
1509/**
1510 * ice_vc_send_msg_to_vf - Send message to VF
1511 * @vf: pointer to the VF info
1512 * @v_opcode: virtual channel opcode
1513 * @v_retval: virtual channel return value
1514 * @msg: pointer to the msg buffer
1515 * @msglen: msg length
1516 *
1517 * send msg to VF
1518 */
1519static int
1520ice_vc_send_msg_to_vf(struct ice_vf *vf, u32 v_opcode,
1521		      enum virtchnl_status_code v_retval, u8 *msg, u16 msglen)
1522{
1523	enum ice_status aq_ret;
1524	struct ice_pf *pf;
1525
1526	/* validate the request */
1527	if (!vf || vf->vf_id >= vf->pf->num_alloc_vfs)
1528		return -EINVAL;
1529
1530	pf = vf->pf;
1531
1532	/* single place to detect unsuccessful return values */
1533	if (v_retval) {
1534		vf->num_inval_msgs++;
1535		dev_info(&pf->pdev->dev, "VF %d failed opcode %d, retval: %d\n",
1536			 vf->vf_id, v_opcode, v_retval);
1537		if (vf->num_inval_msgs > ICE_DFLT_NUM_INVAL_MSGS_ALLOWED) {
1538			dev_err(&pf->pdev->dev,
1539				"Number of invalid messages exceeded for VF %d\n",
1540				vf->vf_id);
1541			dev_err(&pf->pdev->dev, "Use PF Control I/F to enable the VF\n");
1542			set_bit(ICE_VF_STATE_DIS, vf->vf_states);
1543			return -EIO;
1544		}
1545	} else {
1546		vf->num_valid_msgs++;
1547		/* reset the invalid counter, if a valid message is received. */
1548		vf->num_inval_msgs = 0;
1549	}
1550
1551	aq_ret = ice_aq_send_msg_to_vf(&pf->hw, vf->vf_id, v_opcode, v_retval,
1552				       msg, msglen, NULL);
1553	if (aq_ret && pf->hw.mailboxq.sq_last_status != ICE_AQ_RC_ENOSYS) {
1554		dev_info(&pf->pdev->dev,
1555			 "Unable to send the message to VF %d ret %d aq_err %d\n",
1556			 vf->vf_id, aq_ret, pf->hw.mailboxq.sq_last_status);
1557		return -EIO;
1558	}
1559
1560	return 0;
1561}
1562
1563/**
1564 * ice_vc_get_ver_msg
1565 * @vf: pointer to the VF info
1566 * @msg: pointer to the msg buffer
1567 *
1568 * called from the VF to request the API version used by the PF
1569 */
1570static int ice_vc_get_ver_msg(struct ice_vf *vf, u8 *msg)
1571{
1572	struct virtchnl_version_info info = {
1573		VIRTCHNL_VERSION_MAJOR, VIRTCHNL_VERSION_MINOR
1574	};
1575
1576	vf->vf_ver = *(struct virtchnl_version_info *)msg;
1577	/* VFs running the 1.0 API expect to get 1.0 back or they will cry. */
1578	if (VF_IS_V10(&vf->vf_ver))
1579		info.minor = VIRTCHNL_VERSION_MINOR_NO_VF_CAPS;
1580
1581	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_VERSION,
1582				     VIRTCHNL_STATUS_SUCCESS, (u8 *)&info,
1583				     sizeof(struct virtchnl_version_info));
1584}
1585
1586/**
1587 * ice_vc_get_vf_res_msg
1588 * @vf: pointer to the VF info
1589 * @msg: pointer to the msg buffer
1590 *
1591 * called from the VF to request its resources
1592 */
1593static int ice_vc_get_vf_res_msg(struct ice_vf *vf, u8 *msg)
1594{
1595	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
1596	struct virtchnl_vf_resource *vfres = NULL;
1597	struct ice_pf *pf = vf->pf;
1598	struct ice_vsi *vsi;
1599	int len = 0;
1600	int ret;
1601
1602	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
1603		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1604		goto err;
1605	}
1606
1607	len = sizeof(struct virtchnl_vf_resource);
1608
1609	vfres = devm_kzalloc(&pf->pdev->dev, len, GFP_KERNEL);
1610	if (!vfres) {
1611		v_ret = VIRTCHNL_STATUS_ERR_NO_MEMORY;
1612		len = 0;
1613		goto err;
1614	}
1615	if (VF_IS_V11(&vf->vf_ver))
1616		vf->driver_caps = *(u32 *)msg;
1617	else
1618		vf->driver_caps = VIRTCHNL_VF_OFFLOAD_L2 |
1619				  VIRTCHNL_VF_OFFLOAD_RSS_REG |
1620				  VIRTCHNL_VF_OFFLOAD_VLAN;
1621
1622	vfres->vf_cap_flags = VIRTCHNL_VF_OFFLOAD_L2;
1623	vsi = pf->vsi[vf->lan_vsi_idx];
1624	if (!vsi) {
1625		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1626		goto err;
1627	}
1628
1629	if (!vsi->info.pvid)
1630		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_VLAN;
1631
1632	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_PF) {
1633		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_PF;
1634	} else {
1635		if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_AQ)
1636			vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_AQ;
1637		else
1638			vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_REG;
1639	}
1640
1641	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2)
1642		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2;
1643
1644	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_ENCAP)
1645		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_ENCAP;
1646
1647	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM)
1648		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM;
1649
1650	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RX_POLLING)
1651		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RX_POLLING;
1652
1653	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_WB_ON_ITR)
1654		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_WB_ON_ITR;
1655
1656	if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_REQ_QUEUES)
1657		vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_REQ_QUEUES;
1658
1659	if (vf->driver_caps & VIRTCHNL_VF_CAP_ADV_LINK_SPEED)
1660		vfres->vf_cap_flags |= VIRTCHNL_VF_CAP_ADV_LINK_SPEED;
1661
1662	vfres->num_vsis = 1;
1663	/* Tx and Rx queue are equal for VF */
1664	vfres->num_queue_pairs = vsi->num_txq;
1665	vfres->max_vectors = pf->num_vf_msix;
1666	vfres->rss_key_size = ICE_VSIQF_HKEY_ARRAY_SIZE;
1667	vfres->rss_lut_size = ICE_VSIQF_HLUT_ARRAY_SIZE;
1668
1669	vfres->vsi_res[0].vsi_id = vf->lan_vsi_num;
1670	vfres->vsi_res[0].vsi_type = VIRTCHNL_VSI_SRIOV;
1671	vfres->vsi_res[0].num_queue_pairs = vsi->num_txq;
1672	ether_addr_copy(vfres->vsi_res[0].default_mac_addr,
1673			vf->dflt_lan_addr.addr);
1674
1675	set_bit(ICE_VF_STATE_ACTIVE, vf->vf_states);
1676
1677err:
1678	/* send the response back to the VF */
1679	ret = ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_GET_VF_RESOURCES, v_ret,
1680				    (u8 *)vfres, len);
1681
1682	devm_kfree(&pf->pdev->dev, vfres);
1683	return ret;
1684}
1685
1686/**
1687 * ice_vc_reset_vf_msg
1688 * @vf: pointer to the VF info
1689 *
1690 * called from the VF to reset itself,
1691 * unlike other virtchnl messages, PF driver
1692 * doesn't send the response back to the VF
1693 */
1694static void ice_vc_reset_vf_msg(struct ice_vf *vf)
1695{
1696	if (test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states))
1697		ice_reset_vf(vf, false);
1698}
1699
1700/**
1701 * ice_find_vsi_from_id
1702 * @pf: the PF structure to search for the VSI
1703 * @id: ID of the VSI it is searching for
1704 *
1705 * searches for the VSI with the given ID
1706 */
1707static struct ice_vsi *ice_find_vsi_from_id(struct ice_pf *pf, u16 id)
1708{
1709	int i;
1710
1711	ice_for_each_vsi(pf, i)
1712		if (pf->vsi[i] && pf->vsi[i]->vsi_num == id)
1713			return pf->vsi[i];
1714
1715	return NULL;
1716}
1717
1718/**
1719 * ice_vc_isvalid_vsi_id
1720 * @vf: pointer to the VF info
1721 * @vsi_id: VF relative VSI ID
1722 *
1723 * check for the valid VSI ID
1724 */
1725static bool ice_vc_isvalid_vsi_id(struct ice_vf *vf, u16 vsi_id)
1726{
1727	struct ice_pf *pf = vf->pf;
1728	struct ice_vsi *vsi;
1729
1730	vsi = ice_find_vsi_from_id(pf, vsi_id);
1731
1732	return (vsi && (vsi->vf_id == vf->vf_id));
1733}
1734
1735/**
1736 * ice_vc_isvalid_q_id
1737 * @vf: pointer to the VF info
1738 * @vsi_id: VSI ID
1739 * @qid: VSI relative queue ID
1740 *
1741 * check for the valid queue ID
1742 */
1743static bool ice_vc_isvalid_q_id(struct ice_vf *vf, u16 vsi_id, u8 qid)
1744{
1745	struct ice_vsi *vsi = ice_find_vsi_from_id(vf->pf, vsi_id);
1746	/* allocated Tx and Rx queues should be always equal for VF VSI */
1747	return (vsi && (qid < vsi->alloc_txq));
1748}
1749
1750/**
1751 * ice_vc_isvalid_ring_len
1752 * @ring_len: length of ring
1753 *
1754 * check for the valid ring count, should be multiple of ICE_REQ_DESC_MULTIPLE
1755 * or zero
1756 */
1757static bool ice_vc_isvalid_ring_len(u16 ring_len)
1758{
1759	return ring_len == 0 ||
1760	       (ring_len >= ICE_MIN_NUM_DESC &&
1761		ring_len <= ICE_MAX_NUM_DESC &&
1762		!(ring_len % ICE_REQ_DESC_MULTIPLE));
1763}
1764
1765/**
1766 * ice_vc_config_rss_key
1767 * @vf: pointer to the VF info
1768 * @msg: pointer to the msg buffer
1769 *
1770 * Configure the VF's RSS key
1771 */
1772static int ice_vc_config_rss_key(struct ice_vf *vf, u8 *msg)
1773{
1774	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
1775	struct virtchnl_rss_key *vrk =
1776		(struct virtchnl_rss_key *)msg;
1777	struct ice_pf *pf = vf->pf;
1778	struct ice_vsi *vsi = NULL;
1779
1780	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
1781		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1782		goto error_param;
1783	}
1784
1785	if (!ice_vc_isvalid_vsi_id(vf, vrk->vsi_id)) {
1786		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1787		goto error_param;
1788	}
1789
1790	if (vrk->key_len != ICE_VSIQF_HKEY_ARRAY_SIZE) {
1791		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1792		goto error_param;
1793	}
1794
1795	if (!test_bit(ICE_FLAG_RSS_ENA, vf->pf->flags)) {
1796		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1797		goto error_param;
1798	}
1799
1800	vsi = pf->vsi[vf->lan_vsi_idx];
1801	if (!vsi) {
1802		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1803		goto error_param;
1804	}
1805
1806	if (ice_set_rss(vsi, vrk->key, NULL, 0))
1807		v_ret = VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR;
1808error_param:
1809	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_RSS_KEY, v_ret,
1810				     NULL, 0);
1811}
1812
1813/**
1814 * ice_vc_config_rss_lut
1815 * @vf: pointer to the VF info
1816 * @msg: pointer to the msg buffer
1817 *
1818 * Configure the VF's RSS LUT
1819 */
1820static int ice_vc_config_rss_lut(struct ice_vf *vf, u8 *msg)
1821{
1822	struct virtchnl_rss_lut *vrl = (struct virtchnl_rss_lut *)msg;
1823	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
1824	struct ice_pf *pf = vf->pf;
1825	struct ice_vsi *vsi = NULL;
1826
1827	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
1828		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1829		goto error_param;
1830	}
1831
1832	if (!ice_vc_isvalid_vsi_id(vf, vrl->vsi_id)) {
1833		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1834		goto error_param;
1835	}
1836
1837	if (vrl->lut_entries != ICE_VSIQF_HLUT_ARRAY_SIZE) {
1838		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1839		goto error_param;
1840	}
1841
1842	if (!test_bit(ICE_FLAG_RSS_ENA, vf->pf->flags)) {
1843		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1844		goto error_param;
1845	}
1846
1847	vsi = pf->vsi[vf->lan_vsi_idx];
1848	if (!vsi) {
1849		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1850		goto error_param;
1851	}
1852
1853	if (ice_set_rss(vsi, NULL, vrl->lut, ICE_VSIQF_HLUT_ARRAY_SIZE))
1854		v_ret = VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR;
1855error_param:
1856	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_RSS_LUT, v_ret,
1857				     NULL, 0);
1858}
1859
1860/**
1861 * ice_vc_get_stats_msg
1862 * @vf: pointer to the VF info
1863 * @msg: pointer to the msg buffer
1864 *
1865 * called from the VF to get VSI stats
1866 */
1867static int ice_vc_get_stats_msg(struct ice_vf *vf, u8 *msg)
1868{
1869	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
1870	struct virtchnl_queue_select *vqs =
1871		(struct virtchnl_queue_select *)msg;
1872	struct ice_pf *pf = vf->pf;
1873	struct ice_eth_stats stats;
1874	struct ice_vsi *vsi;
1875
1876	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
1877		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1878		goto error_param;
1879	}
1880
1881	if (!ice_vc_isvalid_vsi_id(vf, vqs->vsi_id)) {
1882		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1883		goto error_param;
1884	}
1885
1886	vsi = pf->vsi[vf->lan_vsi_idx];
1887	if (!vsi) {
1888		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1889		goto error_param;
1890	}
1891
1892	memset(&stats, 0, sizeof(struct ice_eth_stats));
1893	ice_update_eth_stats(vsi);
1894
1895	stats = vsi->eth_stats;
1896
1897error_param:
1898	/* send the response to the VF */
1899	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_GET_STATS, v_ret,
1900				     (u8 *)&stats, sizeof(stats));
1901}
1902
1903/**
1904 * ice_vc_ena_qs_msg
1905 * @vf: pointer to the VF info
1906 * @msg: pointer to the msg buffer
1907 *
1908 * called from the VF to enable all or specific queue(s)
1909 */
1910static int ice_vc_ena_qs_msg(struct ice_vf *vf, u8 *msg)
1911{
1912	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
1913	struct virtchnl_queue_select *vqs =
1914	    (struct virtchnl_queue_select *)msg;
1915	struct ice_pf *pf = vf->pf;
1916	struct ice_vsi *vsi;
1917	unsigned long q_map;
1918	u16 vf_q_id;
1919
1920	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
1921		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1922		goto error_param;
1923	}
1924
1925	if (!ice_vc_isvalid_vsi_id(vf, vqs->vsi_id)) {
1926		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1927		goto error_param;
1928	}
1929
1930	if (!vqs->rx_queues && !vqs->tx_queues) {
1931		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1932		goto error_param;
1933	}
1934
1935	if (vqs->rx_queues > ICE_MAX_BASE_QS_PER_VF ||
1936	    vqs->tx_queues > ICE_MAX_BASE_QS_PER_VF) {
1937		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1938		goto error_param;
1939	}
1940
1941	vsi = pf->vsi[vf->lan_vsi_idx];
1942	if (!vsi) {
1943		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1944		goto error_param;
1945	}
1946
1947	/* Enable only Rx rings, Tx rings were enabled by the FW when the
1948	 * Tx queue group list was configured and the context bits were
1949	 * programmed using ice_vsi_cfg_txqs
1950	 */
1951	q_map = vqs->rx_queues;
1952	for_each_set_bit(vf_q_id, &q_map, ICE_MAX_BASE_QS_PER_VF) {
1953		if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
1954			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1955			goto error_param;
1956		}
1957
1958		/* Skip queue if enabled */
1959		if (test_bit(vf_q_id, vf->rxq_ena))
1960			continue;
1961
1962		if (ice_vsi_ctrl_rx_ring(vsi, true, vf_q_id)) {
1963			dev_err(&vsi->back->pdev->dev,
1964				"Failed to enable Rx ring %d on VSI %d\n",
1965				vf_q_id, vsi->vsi_num);
1966			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1967			goto error_param;
1968		}
1969
1970		set_bit(vf_q_id, vf->rxq_ena);
1971		vf->num_qs_ena++;
1972	}
1973
1974	vsi = pf->vsi[vf->lan_vsi_idx];
1975	q_map = vqs->tx_queues;
1976	for_each_set_bit(vf_q_id, &q_map, ICE_MAX_BASE_QS_PER_VF) {
1977		if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
1978			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
1979			goto error_param;
1980		}
1981
1982		/* Skip queue if enabled */
1983		if (test_bit(vf_q_id, vf->txq_ena))
1984			continue;
1985
1986		set_bit(vf_q_id, vf->txq_ena);
1987		vf->num_qs_ena++;
1988	}
1989
1990	/* Set flag to indicate that queues are enabled */
1991	if (v_ret == VIRTCHNL_STATUS_SUCCESS)
1992		set_bit(ICE_VF_STATE_QS_ENA, vf->vf_states);
1993
1994error_param:
1995	/* send the response to the VF */
1996	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_ENABLE_QUEUES, v_ret,
1997				     NULL, 0);
1998}
1999
2000/**
2001 * ice_vc_dis_qs_msg
2002 * @vf: pointer to the VF info
2003 * @msg: pointer to the msg buffer
2004 *
2005 * called from the VF to disable all or specific
2006 * queue(s)
2007 */
2008static int ice_vc_dis_qs_msg(struct ice_vf *vf, u8 *msg)
2009{
2010	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2011	struct virtchnl_queue_select *vqs =
2012	    (struct virtchnl_queue_select *)msg;
2013	struct ice_pf *pf = vf->pf;
2014	struct ice_vsi *vsi;
2015	unsigned long q_map;
2016	u16 vf_q_id;
2017
2018	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states) &&
2019	    !test_bit(ICE_VF_STATE_QS_ENA, vf->vf_states)) {
2020		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2021		goto error_param;
2022	}
2023
2024	if (!ice_vc_isvalid_vsi_id(vf, vqs->vsi_id)) {
2025		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2026		goto error_param;
2027	}
2028
2029	if (!vqs->rx_queues && !vqs->tx_queues) {
2030		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2031		goto error_param;
2032	}
2033
2034	if (vqs->rx_queues > ICE_MAX_BASE_QS_PER_VF ||
2035	    vqs->tx_queues > ICE_MAX_BASE_QS_PER_VF) {
2036		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2037		goto error_param;
2038	}
2039
2040	vsi = pf->vsi[vf->lan_vsi_idx];
2041	if (!vsi) {
2042		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2043		goto error_param;
2044	}
2045
2046	if (vqs->tx_queues) {
2047		q_map = vqs->tx_queues;
2048
2049		for_each_set_bit(vf_q_id, &q_map, ICE_MAX_BASE_QS_PER_VF) {
2050			struct ice_ring *ring = vsi->tx_rings[vf_q_id];
2051			struct ice_txq_meta txq_meta = { 0 };
2052
2053			if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
2054				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2055				goto error_param;
2056			}
2057
2058			/* Skip queue if not enabled */
2059			if (!test_bit(vf_q_id, vf->txq_ena))
2060				continue;
2061
2062			ice_fill_txq_meta(vsi, ring, &txq_meta);
2063
2064			if (ice_vsi_stop_tx_ring(vsi, ICE_NO_RESET, vf->vf_id,
2065						 ring, &txq_meta)) {
2066				dev_err(&vsi->back->pdev->dev,
2067					"Failed to stop Tx ring %d on VSI %d\n",
2068					vf_q_id, vsi->vsi_num);
2069				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2070				goto error_param;
2071			}
2072
2073			/* Clear enabled queues flag */
2074			clear_bit(vf_q_id, vf->txq_ena);
2075			vf->num_qs_ena--;
2076		}
2077	}
2078
2079	if (vqs->rx_queues) {
2080		q_map = vqs->rx_queues;
2081
2082		for_each_set_bit(vf_q_id, &q_map, ICE_MAX_BASE_QS_PER_VF) {
2083			if (!ice_vc_isvalid_q_id(vf, vqs->vsi_id, vf_q_id)) {
2084				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2085				goto error_param;
2086			}
2087
2088			/* Skip queue if not enabled */
2089			if (!test_bit(vf_q_id, vf->rxq_ena))
2090				continue;
2091
2092			if (ice_vsi_ctrl_rx_ring(vsi, false, vf_q_id)) {
2093				dev_err(&vsi->back->pdev->dev,
2094					"Failed to stop Rx ring %d on VSI %d\n",
2095					vf_q_id, vsi->vsi_num);
2096				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2097				goto error_param;
2098			}
2099
2100			/* Clear enabled queues flag */
2101			clear_bit(vf_q_id, vf->rxq_ena);
2102			vf->num_qs_ena--;
2103		}
2104	}
2105
2106	/* Clear enabled queues flag */
2107	if (v_ret == VIRTCHNL_STATUS_SUCCESS && !vf->num_qs_ena)
2108		clear_bit(ICE_VF_STATE_QS_ENA, vf->vf_states);
2109
2110error_param:
2111	/* send the response to the VF */
2112	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_DISABLE_QUEUES, v_ret,
2113				     NULL, 0);
2114}
2115
2116/**
2117 * ice_vc_cfg_irq_map_msg
2118 * @vf: pointer to the VF info
2119 * @msg: pointer to the msg buffer
2120 *
2121 * called from the VF to configure the IRQ to queue map
2122 */
2123static int ice_vc_cfg_irq_map_msg(struct ice_vf *vf, u8 *msg)
2124{
2125	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2126	struct virtchnl_irq_map_info *irqmap_info;
2127	u16 vsi_id, vsi_q_id, vector_id;
2128	struct virtchnl_vector_map *map;
2129	struct ice_pf *pf = vf->pf;
2130	u16 num_q_vectors_mapped;
2131	struct ice_vsi *vsi;
2132	unsigned long qmap;
2133	int i;
2134
2135	irqmap_info = (struct virtchnl_irq_map_info *)msg;
2136	num_q_vectors_mapped = irqmap_info->num_vectors;
2137
2138	/* Check to make sure number of VF vectors mapped is not greater than
2139	 * number of VF vectors originally allocated, and check that
2140	 * there is actually at least a single VF queue vector mapped
2141	 */
2142	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states) ||
2143	    pf->num_vf_msix < num_q_vectors_mapped ||
2144	    !irqmap_info->num_vectors) {
2145		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2146		goto error_param;
2147	}
2148
2149	vsi = pf->vsi[vf->lan_vsi_idx];
2150	if (!vsi) {
2151		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2152		goto error_param;
2153	}
2154
2155	for (i = 0; i < num_q_vectors_mapped; i++) {
2156		struct ice_q_vector *q_vector;
2157
2158		map = &irqmap_info->vecmap[i];
2159
2160		vector_id = map->vector_id;
2161		vsi_id = map->vsi_id;
2162		/* validate msg params */
2163		if (!(vector_id < pf->hw.func_caps.common_cap
2164		    .num_msix_vectors) || !ice_vc_isvalid_vsi_id(vf, vsi_id) ||
2165		    (!vector_id && (map->rxq_map || map->txq_map))) {
2166			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2167			goto error_param;
2168		}
2169
2170		/* No need to map VF miscellaneous or rogue vector */
2171		if (!vector_id)
2172			continue;
2173
2174		/* Subtract non queue vector from vector_id passed by VF
2175		 * to get actual number of VSI queue vector array index
2176		 */
2177		q_vector = vsi->q_vectors[vector_id - ICE_NONQ_VECS_VF];
2178		if (!q_vector) {
2179			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2180			goto error_param;
2181		}
2182
2183		/* lookout for the invalid queue index */
2184		qmap = map->rxq_map;
2185		q_vector->num_ring_rx = 0;
2186		for_each_set_bit(vsi_q_id, &qmap, ICE_MAX_BASE_QS_PER_VF) {
2187			if (!ice_vc_isvalid_q_id(vf, vsi_id, vsi_q_id)) {
2188				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2189				goto error_param;
2190			}
2191			q_vector->num_ring_rx++;
2192			q_vector->rx.itr_idx = map->rxitr_idx;
2193			vsi->rx_rings[vsi_q_id]->q_vector = q_vector;
2194			ice_cfg_rxq_interrupt(vsi, vsi_q_id, vector_id,
2195					      q_vector->rx.itr_idx);
2196		}
2197
2198		qmap = map->txq_map;
2199		q_vector->num_ring_tx = 0;
2200		for_each_set_bit(vsi_q_id, &qmap, ICE_MAX_BASE_QS_PER_VF) {
2201			if (!ice_vc_isvalid_q_id(vf, vsi_id, vsi_q_id)) {
2202				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2203				goto error_param;
2204			}
2205			q_vector->num_ring_tx++;
2206			q_vector->tx.itr_idx = map->txitr_idx;
2207			vsi->tx_rings[vsi_q_id]->q_vector = q_vector;
2208			ice_cfg_txq_interrupt(vsi, vsi_q_id, vector_id,
2209					      q_vector->tx.itr_idx);
2210		}
2211	}
2212
2213error_param:
2214	/* send the response to the VF */
2215	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_IRQ_MAP, v_ret,
2216				     NULL, 0);
2217}
2218
2219/**
2220 * ice_vc_cfg_qs_msg
2221 * @vf: pointer to the VF info
2222 * @msg: pointer to the msg buffer
2223 *
2224 * called from the VF to configure the Rx/Tx queues
2225 */
2226static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8 *msg)
2227{
2228	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2229	struct virtchnl_vsi_queue_config_info *qci =
2230	    (struct virtchnl_vsi_queue_config_info *)msg;
2231	struct virtchnl_queue_pair_info *qpi;
2232	u16 num_rxq = 0, num_txq = 0;
2233	struct ice_pf *pf = vf->pf;
2234	struct ice_vsi *vsi;
2235	int i;
2236
2237	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
2238		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2239		goto error_param;
2240	}
2241
2242	if (!ice_vc_isvalid_vsi_id(vf, qci->vsi_id)) {
2243		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2244		goto error_param;
2245	}
2246
2247	vsi = pf->vsi[vf->lan_vsi_idx];
2248	if (!vsi) {
2249		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2250		goto error_param;
2251	}
2252
2253	if (qci->num_queue_pairs > ICE_MAX_BASE_QS_PER_VF ||
2254	    qci->num_queue_pairs > min_t(u16, vsi->alloc_txq, vsi->alloc_rxq)) {
2255		dev_err(&pf->pdev->dev,
2256			"VF-%d requesting more than supported number of queues: %d\n",
2257			vf->vf_id, min_t(u16, vsi->alloc_txq, vsi->alloc_rxq));
2258		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2259		goto error_param;
2260	}
2261
2262	for (i = 0; i < qci->num_queue_pairs; i++) {
2263		qpi = &qci->qpair[i];
2264		if (qpi->txq.vsi_id != qci->vsi_id ||
2265		    qpi->rxq.vsi_id != qci->vsi_id ||
2266		    qpi->rxq.queue_id != qpi->txq.queue_id ||
2267		    qpi->txq.headwb_enabled ||
2268		    !ice_vc_isvalid_ring_len(qpi->txq.ring_len) ||
2269		    !ice_vc_isvalid_ring_len(qpi->rxq.ring_len) ||
2270		    !ice_vc_isvalid_q_id(vf, qci->vsi_id, qpi->txq.queue_id)) {
2271			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2272			goto error_param;
2273		}
2274		/* copy Tx queue info from VF into VSI */
2275		if (qpi->txq.ring_len > 0) {
2276			num_txq++;
2277			vsi->tx_rings[i]->dma = qpi->txq.dma_ring_addr;
2278			vsi->tx_rings[i]->count = qpi->txq.ring_len;
2279		}
2280
2281		/* copy Rx queue info from VF into VSI */
2282		if (qpi->rxq.ring_len > 0) {
2283			num_rxq++;
2284			vsi->rx_rings[i]->dma = qpi->rxq.dma_ring_addr;
2285			vsi->rx_rings[i]->count = qpi->rxq.ring_len;
2286
2287			if (qpi->rxq.databuffer_size != 0 &&
2288			    (qpi->rxq.databuffer_size > ((16 * 1024) - 128) ||
2289			     qpi->rxq.databuffer_size < 1024)) {
2290				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2291				goto error_param;
2292			}
2293			vsi->rx_buf_len = qpi->rxq.databuffer_size;
2294			vsi->rx_rings[i]->rx_buf_len = vsi->rx_buf_len;
2295			if (qpi->rxq.max_pkt_size >= (16 * 1024) ||
2296			    qpi->rxq.max_pkt_size < 64) {
2297				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2298				goto error_param;
2299			}
2300		}
2301
2302		vsi->max_frame = qpi->rxq.max_pkt_size;
2303	}
2304
2305	/* VF can request to configure less than allocated queues
2306	 * or default allocated queues. So update the VSI with new number
2307	 */
2308	vsi->num_txq = num_txq;
2309	vsi->num_rxq = num_rxq;
2310	/* All queues of VF VSI are in TC 0 */
2311	vsi->tc_cfg.tc_info[0].qcount_tx = num_txq;
2312	vsi->tc_cfg.tc_info[0].qcount_rx = num_rxq;
2313
2314	if (ice_vsi_cfg_lan_txqs(vsi) || ice_vsi_cfg_rxqs(vsi))
2315		v_ret = VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR;
2316
2317error_param:
2318	/* send the response to the VF */
2319	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_CONFIG_VSI_QUEUES, v_ret,
2320				     NULL, 0);
2321}
2322
2323/**
2324 * ice_is_vf_trusted
2325 * @vf: pointer to the VF info
2326 */
2327static bool ice_is_vf_trusted(struct ice_vf *vf)
2328{
2329	return test_bit(ICE_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps);
2330}
2331
2332/**
2333 * ice_can_vf_change_mac
2334 * @vf: pointer to the VF info
2335 *
2336 * Return true if the VF is allowed to change its MAC filters, false otherwise
2337 */
2338static bool ice_can_vf_change_mac(struct ice_vf *vf)
2339{
2340	/* If the VF MAC address has been set administratively (via the
2341	 * ndo_set_vf_mac command), then deny permission to the VF to
2342	 * add/delete unicast MAC addresses, unless the VF is trusted
2343	 */
2344	if (vf->pf_set_mac && !ice_is_vf_trusted(vf))
2345		return false;
2346
2347	return true;
2348}
2349
2350/**
2351 * ice_vc_handle_mac_addr_msg
2352 * @vf: pointer to the VF info
2353 * @msg: pointer to the msg buffer
2354 * @set: true if MAC filters are being set, false otherwise
2355 *
2356 * add guest MAC address filter
2357 */
2358static int
2359ice_vc_handle_mac_addr_msg(struct ice_vf *vf, u8 *msg, bool set)
2360{
2361	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2362	struct virtchnl_ether_addr_list *al =
2363	    (struct virtchnl_ether_addr_list *)msg;
2364	struct ice_pf *pf = vf->pf;
2365	enum virtchnl_ops vc_op;
2366	enum ice_status status;
2367	struct ice_vsi *vsi;
2368	int mac_count = 0;
2369	int i;
2370
2371	if (set)
2372		vc_op = VIRTCHNL_OP_ADD_ETH_ADDR;
2373	else
2374		vc_op = VIRTCHNL_OP_DEL_ETH_ADDR;
2375
2376	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states) ||
2377	    !ice_vc_isvalid_vsi_id(vf, al->vsi_id)) {
2378		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2379		goto handle_mac_exit;
2380	}
2381
2382	if (set && !ice_is_vf_trusted(vf) &&
2383	    (vf->num_mac + al->num_elements) > ICE_MAX_MACADDR_PER_VF) {
2384		dev_err(&pf->pdev->dev,
2385			"Can't add more MAC addresses, because VF-%d is not trusted, switch the VF to trusted mode in order to add more functionalities\n",
2386			vf->vf_id);
2387		/* There is no need to let VF know about not being trusted
2388		 * to add more MAC addr, so we can just return success message.
2389		 */
2390		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2391		goto handle_mac_exit;
2392	}
2393
2394	vsi = pf->vsi[vf->lan_vsi_idx];
2395	if (!vsi) {
2396		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2397		goto handle_mac_exit;
2398	}
2399
2400	for (i = 0; i < al->num_elements; i++) {
2401		u8 *maddr = al->list[i].addr;
2402
2403		if (ether_addr_equal(maddr, vf->dflt_lan_addr.addr) ||
2404		    is_broadcast_ether_addr(maddr)) {
2405			if (set) {
2406				/* VF is trying to add filters that the PF
2407				 * already added. Just continue.
2408				 */
2409				dev_info(&pf->pdev->dev,
2410					 "MAC %pM already set for VF %d\n",
2411					 maddr, vf->vf_id);
2412				continue;
2413			} else {
2414				/* VF can't remove dflt_lan_addr/bcast MAC */
2415				dev_err(&pf->pdev->dev,
2416					"VF can't remove default MAC address or MAC %pM programmed by PF for VF %d\n",
2417					maddr, vf->vf_id);
2418				continue;
2419			}
2420		}
2421
2422		/* check for the invalid cases and bail if necessary */
2423		if (is_zero_ether_addr(maddr)) {
2424			dev_err(&pf->pdev->dev,
2425				"invalid MAC %pM provided for VF %d\n",
2426				maddr, vf->vf_id);
2427			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2428			goto handle_mac_exit;
2429		}
2430
2431		if (is_unicast_ether_addr(maddr) &&
2432		    !ice_can_vf_change_mac(vf)) {
2433			dev_err(&pf->pdev->dev,
2434				"can't change unicast MAC for untrusted VF %d\n",
2435				vf->vf_id);
2436			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2437			goto handle_mac_exit;
2438		}
2439
2440		/* program the updated filter list */
2441		status = ice_vsi_cfg_mac_fltr(vsi, maddr, set);
2442		if (status == ICE_ERR_DOES_NOT_EXIST ||
2443		    status == ICE_ERR_ALREADY_EXISTS) {
2444			dev_info(&pf->pdev->dev,
2445				 "can't %s MAC filters %pM for VF %d, error %d\n",
2446				 set ? "add" : "remove", maddr, vf->vf_id,
2447				 status);
2448		} else if (status) {
2449			dev_err(&pf->pdev->dev,
2450				"can't %s MAC filters for VF %d, error %d\n",
2451				set ? "add" : "remove", vf->vf_id, status);
2452			v_ret = ice_err_to_virt_err(status);
2453			goto handle_mac_exit;
2454		}
2455
2456		mac_count++;
2457	}
2458
2459	/* Track number of MAC filters programmed for the VF VSI */
2460	if (set)
2461		vf->num_mac += mac_count;
2462	else
2463		vf->num_mac -= mac_count;
2464
2465handle_mac_exit:
2466	/* send the response to the VF */
2467	return ice_vc_send_msg_to_vf(vf, vc_op, v_ret, NULL, 0);
2468}
2469
2470/**
2471 * ice_vc_add_mac_addr_msg
2472 * @vf: pointer to the VF info
2473 * @msg: pointer to the msg buffer
2474 *
2475 * add guest MAC address filter
2476 */
2477static int ice_vc_add_mac_addr_msg(struct ice_vf *vf, u8 *msg)
2478{
2479	return ice_vc_handle_mac_addr_msg(vf, msg, true);
2480}
2481
2482/**
2483 * ice_vc_del_mac_addr_msg
2484 * @vf: pointer to the VF info
2485 * @msg: pointer to the msg buffer
2486 *
2487 * remove guest MAC address filter
2488 */
2489static int ice_vc_del_mac_addr_msg(struct ice_vf *vf, u8 *msg)
2490{
2491	return ice_vc_handle_mac_addr_msg(vf, msg, false);
2492}
2493
2494/**
2495 * ice_vc_request_qs_msg
2496 * @vf: pointer to the VF info
2497 * @msg: pointer to the msg buffer
2498 *
2499 * VFs get a default number of queues but can use this message to request a
2500 * different number. If the request is successful, PF will reset the VF and
2501 * return 0. If unsuccessful, PF will send message informing VF of number of
2502 * available queue pairs via virtchnl message response to VF.
2503 */
2504static int ice_vc_request_qs_msg(struct ice_vf *vf, u8 *msg)
2505{
2506	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2507	struct virtchnl_vf_res_request *vfres =
2508		(struct virtchnl_vf_res_request *)msg;
2509	u16 req_queues = vfres->num_queue_pairs;
2510	struct ice_pf *pf = vf->pf;
2511	u16 max_allowed_vf_queues;
2512	u16 tx_rx_queue_left;
2513	u16 cur_queues;
2514
2515	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
2516		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2517		goto error_param;
2518	}
2519
2520	cur_queues = vf->num_vf_qs;
2521	tx_rx_queue_left = min_t(u16, ice_get_avail_txq_count(pf),
2522				 ice_get_avail_rxq_count(pf));
2523	max_allowed_vf_queues = tx_rx_queue_left + cur_queues;
2524	if (!req_queues) {
2525		dev_err(&pf->pdev->dev,
2526			"VF %d tried to request 0 queues. Ignoring.\n",
2527			vf->vf_id);
2528	} else if (req_queues > ICE_MAX_BASE_QS_PER_VF) {
2529		dev_err(&pf->pdev->dev,
2530			"VF %d tried to request more than %d queues.\n",
2531			vf->vf_id, ICE_MAX_BASE_QS_PER_VF);
2532		vfres->num_queue_pairs = ICE_MAX_BASE_QS_PER_VF;
2533	} else if (req_queues > cur_queues &&
2534		   req_queues - cur_queues > tx_rx_queue_left) {
2535		dev_warn(&pf->pdev->dev,
2536			 "VF %d requested %u more queues, but only %u left.\n",
2537			 vf->vf_id, req_queues - cur_queues, tx_rx_queue_left);
2538		vfres->num_queue_pairs = min_t(u16, max_allowed_vf_queues,
2539					       ICE_MAX_BASE_QS_PER_VF);
2540	} else {
2541		/* request is successful, then reset VF */
2542		vf->num_req_qs = req_queues;
2543		ice_vc_dis_vf(vf);
2544		dev_info(&pf->pdev->dev,
2545			 "VF %d granted request of %u queues.\n",
2546			 vf->vf_id, req_queues);
2547		return 0;
2548	}
2549
2550error_param:
2551	/* send the response to the VF */
2552	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_REQUEST_QUEUES,
2553				     v_ret, (u8 *)vfres, sizeof(*vfres));
2554}
2555
2556/**
2557 * ice_set_vf_port_vlan
2558 * @netdev: network interface device structure
2559 * @vf_id: VF identifier
2560 * @vlan_id: VLAN ID being set
2561 * @qos: priority setting
2562 * @vlan_proto: VLAN protocol
2563 *
2564 * program VF Port VLAN ID and/or QoS
2565 */
2566int
2567ice_set_vf_port_vlan(struct net_device *netdev, int vf_id, u16 vlan_id, u8 qos,
2568		     __be16 vlan_proto)
2569{
2570	u16 vlanprio = vlan_id | (qos << ICE_VLAN_PRIORITY_S);
2571	struct ice_netdev_priv *np = netdev_priv(netdev);
2572	struct ice_pf *pf = np->vsi->back;
2573	struct ice_vsi *vsi;
2574	struct ice_vf *vf;
2575	int ret = 0;
2576
2577	/* validate the request */
2578	if (vf_id >= pf->num_alloc_vfs) {
2579		dev_err(&pf->pdev->dev, "invalid VF id: %d\n", vf_id);
2580		return -EINVAL;
2581	}
2582
2583	if (vlan_id > ICE_MAX_VLANID || qos > 7) {
2584		dev_err(&pf->pdev->dev, "Invalid VF Parameters\n");
2585		return -EINVAL;
2586	}
2587
2588	if (vlan_proto != htons(ETH_P_8021Q)) {
2589		dev_err(&pf->pdev->dev, "VF VLAN protocol is not supported\n");
2590		return -EPROTONOSUPPORT;
2591	}
2592
2593	vf = &pf->vf[vf_id];
2594	vsi = pf->vsi[vf->lan_vsi_idx];
2595	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
2596		dev_err(&pf->pdev->dev, "VF %d in reset. Try again.\n", vf_id);
2597		return -EBUSY;
2598	}
2599
2600	if (le16_to_cpu(vsi->info.pvid) == vlanprio) {
2601		/* duplicate request, so just return success */
2602		dev_info(&pf->pdev->dev,
2603			 "Duplicate pvid %d request\n", vlanprio);
2604		return ret;
2605	}
2606
2607	/* If PVID, then remove all filters on the old VLAN */
2608	if (vsi->info.pvid)
2609		ice_vsi_kill_vlan(vsi, (le16_to_cpu(vsi->info.pvid) &
2610				  VLAN_VID_MASK));
2611
2612	if (vlan_id || qos) {
2613		ret = ice_vsi_manage_pvid(vsi, vlanprio, true);
2614		if (ret)
2615			goto error_set_pvid;
2616	} else {
2617		ice_vsi_manage_pvid(vsi, 0, false);
2618		vsi->info.pvid = 0;
2619	}
2620
2621	if (vlan_id) {
2622		dev_info(&pf->pdev->dev, "Setting VLAN %d, QOS 0x%x on VF %d\n",
2623			 vlan_id, qos, vf_id);
2624
2625		/* add new VLAN filter for each MAC */
2626		ret = ice_vsi_add_vlan(vsi, vlan_id);
2627		if (ret)
2628			goto error_set_pvid;
2629	}
2630
2631	/* The Port VLAN needs to be saved across resets the same as the
2632	 * default LAN MAC address.
2633	 */
2634	vf->port_vlan_id = le16_to_cpu(vsi->info.pvid);
2635
2636error_set_pvid:
2637	return ret;
2638}
2639
2640/**
2641 * ice_vc_process_vlan_msg
2642 * @vf: pointer to the VF info
2643 * @msg: pointer to the msg buffer
2644 * @add_v: Add VLAN if true, otherwise delete VLAN
2645 *
2646 * Process virtchnl op to add or remove programmed guest VLAN ID
2647 */
2648static int ice_vc_process_vlan_msg(struct ice_vf *vf, u8 *msg, bool add_v)
2649{
2650	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2651	struct virtchnl_vlan_filter_list *vfl =
2652	    (struct virtchnl_vlan_filter_list *)msg;
2653	struct ice_pf *pf = vf->pf;
2654	bool vlan_promisc = false;
2655	struct ice_vsi *vsi;
2656	struct ice_hw *hw;
2657	int status = 0;
2658	u8 promisc_m;
2659	int i;
2660
2661	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
2662		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2663		goto error_param;
2664	}
2665
2666	if (!ice_vc_isvalid_vsi_id(vf, vfl->vsi_id)) {
2667		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2668		goto error_param;
2669	}
2670
2671	if (add_v && !ice_is_vf_trusted(vf) &&
2672	    vf->num_vlan >= ICE_MAX_VLAN_PER_VF) {
2673		dev_info(&pf->pdev->dev,
2674			 "VF-%d is not trusted, switch the VF to trusted mode, in order to add more VLAN addresses\n",
2675			 vf->vf_id);
2676		/* There is no need to let VF know about being not trusted,
2677		 * so we can just return success message here
2678		 */
2679		goto error_param;
2680	}
2681
2682	for (i = 0; i < vfl->num_elements; i++) {
2683		if (vfl->vlan_id[i] > ICE_MAX_VLANID) {
2684			v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2685			dev_err(&pf->pdev->dev,
2686				"invalid VF VLAN id %d\n", vfl->vlan_id[i]);
2687			goto error_param;
2688		}
2689	}
2690
2691	hw = &pf->hw;
2692	vsi = pf->vsi[vf->lan_vsi_idx];
2693	if (!vsi) {
2694		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2695		goto error_param;
2696	}
2697
2698	if (vsi->info.pvid) {
2699		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2700		goto error_param;
2701	}
2702
2703	if (ice_vsi_manage_vlan_stripping(vsi, add_v)) {
2704		dev_err(&pf->pdev->dev,
2705			"%sable VLAN stripping failed for VSI %i\n",
2706			 add_v ? "en" : "dis", vsi->vsi_num);
2707		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2708		goto error_param;
2709	}
2710
2711	if (test_bit(ICE_VF_STATE_UC_PROMISC, vf->vf_states) ||
2712	    test_bit(ICE_VF_STATE_MC_PROMISC, vf->vf_states))
2713		vlan_promisc = true;
2714
2715	if (add_v) {
2716		for (i = 0; i < vfl->num_elements; i++) {
2717			u16 vid = vfl->vlan_id[i];
2718
2719			if (!ice_is_vf_trusted(vf) &&
2720			    vf->num_vlan >= ICE_MAX_VLAN_PER_VF) {
2721				dev_info(&pf->pdev->dev,
2722					 "VF-%d is not trusted, switch the VF to trusted mode, in order to add more VLAN addresses\n",
2723					 vf->vf_id);
2724				/* There is no need to let VF know about being
2725				 * not trusted, so we can just return success
2726				 * message here as well.
2727				 */
2728				goto error_param;
2729			}
2730
2731			if (ice_vsi_add_vlan(vsi, vid)) {
2732				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2733				goto error_param;
2734			}
2735
2736			vf->num_vlan++;
2737			/* Enable VLAN pruning when VLAN is added */
2738			if (!vlan_promisc) {
2739				status = ice_cfg_vlan_pruning(vsi, true, false);
2740				if (status) {
2741					v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2742					dev_err(&pf->pdev->dev,
2743						"Enable VLAN pruning on VLAN ID: %d failed error-%d\n",
2744						vid, status);
2745					goto error_param;
2746				}
2747			} else {
2748				/* Enable Ucast/Mcast VLAN promiscuous mode */
2749				promisc_m = ICE_PROMISC_VLAN_TX |
2750					    ICE_PROMISC_VLAN_RX;
2751
2752				status = ice_set_vsi_promisc(hw, vsi->idx,
2753							     promisc_m, vid);
2754				if (status) {
2755					v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2756					dev_err(&pf->pdev->dev,
2757						"Enable Unicast/multicast promiscuous mode on VLAN ID:%d failed error-%d\n",
2758						vid, status);
2759				}
2760			}
2761		}
2762	} else {
2763		/* In case of non_trusted VF, number of VLAN elements passed
2764		 * to PF for removal might be greater than number of VLANs
2765		 * filter programmed for that VF - So, use actual number of
2766		 * VLANS added earlier with add VLAN opcode. In order to avoid
2767		 * removing VLAN that doesn't exist, which result to sending
2768		 * erroneous failed message back to the VF
2769		 */
2770		int num_vf_vlan;
2771
2772		num_vf_vlan = vf->num_vlan;
2773		for (i = 0; i < vfl->num_elements && i < num_vf_vlan; i++) {
2774			u16 vid = vfl->vlan_id[i];
2775
2776			/* Make sure ice_vsi_kill_vlan is successful before
2777			 * updating VLAN information
2778			 */
2779			if (ice_vsi_kill_vlan(vsi, vid)) {
2780				v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2781				goto error_param;
2782			}
2783
2784			vf->num_vlan--;
2785			/* Disable VLAN pruning when the last VLAN is removed */
2786			if (!vf->num_vlan)
2787				ice_cfg_vlan_pruning(vsi, false, false);
2788
2789			/* Disable Unicast/Multicast VLAN promiscuous mode */
2790			if (vlan_promisc) {
2791				promisc_m = ICE_PROMISC_VLAN_TX |
2792					    ICE_PROMISC_VLAN_RX;
2793
2794				ice_clear_vsi_promisc(hw, vsi->idx,
2795						      promisc_m, vid);
2796			}
2797		}
2798	}
2799
2800error_param:
2801	/* send the response to the VF */
2802	if (add_v)
2803		return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_ADD_VLAN, v_ret,
2804					     NULL, 0);
2805	else
2806		return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_DEL_VLAN, v_ret,
2807					     NULL, 0);
2808}
2809
2810/**
2811 * ice_vc_add_vlan_msg
2812 * @vf: pointer to the VF info
2813 * @msg: pointer to the msg buffer
2814 *
2815 * Add and program guest VLAN ID
2816 */
2817static int ice_vc_add_vlan_msg(struct ice_vf *vf, u8 *msg)
2818{
2819	return ice_vc_process_vlan_msg(vf, msg, true);
2820}
2821
2822/**
2823 * ice_vc_remove_vlan_msg
2824 * @vf: pointer to the VF info
2825 * @msg: pointer to the msg buffer
2826 *
2827 * remove programmed guest VLAN ID
2828 */
2829static int ice_vc_remove_vlan_msg(struct ice_vf *vf, u8 *msg)
2830{
2831	return ice_vc_process_vlan_msg(vf, msg, false);
2832}
2833
2834/**
2835 * ice_vc_ena_vlan_stripping
2836 * @vf: pointer to the VF info
2837 *
2838 * Enable VLAN header stripping for a given VF
2839 */
2840static int ice_vc_ena_vlan_stripping(struct ice_vf *vf)
2841{
2842	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2843	struct ice_pf *pf = vf->pf;
2844	struct ice_vsi *vsi;
2845
2846	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
2847		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2848		goto error_param;
2849	}
2850
2851	vsi = pf->vsi[vf->lan_vsi_idx];
2852	if (ice_vsi_manage_vlan_stripping(vsi, true))
2853		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2854
2855error_param:
2856	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_ENABLE_VLAN_STRIPPING,
2857				     v_ret, NULL, 0);
2858}
2859
2860/**
2861 * ice_vc_dis_vlan_stripping
2862 * @vf: pointer to the VF info
2863 *
2864 * Disable VLAN header stripping for a given VF
2865 */
2866static int ice_vc_dis_vlan_stripping(struct ice_vf *vf)
2867{
2868	enum virtchnl_status_code v_ret = VIRTCHNL_STATUS_SUCCESS;
2869	struct ice_pf *pf = vf->pf;
2870	struct ice_vsi *vsi;
2871
2872	if (!test_bit(ICE_VF_STATE_ACTIVE, vf->vf_states)) {
2873		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2874		goto error_param;
2875	}
2876
2877	vsi = pf->vsi[vf->lan_vsi_idx];
2878	if (!vsi) {
2879		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2880		goto error_param;
2881	}
2882
2883	if (ice_vsi_manage_vlan_stripping(vsi, false))
2884		v_ret = VIRTCHNL_STATUS_ERR_PARAM;
2885
2886error_param:
2887	return ice_vc_send_msg_to_vf(vf, VIRTCHNL_OP_DISABLE_VLAN_STRIPPING,
2888				     v_ret, NULL, 0);
2889}
2890
2891/**
2892 * ice_vc_process_vf_msg - Process request from VF
2893 * @pf: pointer to the PF structure
2894 * @event: pointer to the AQ event
2895 *
2896 * called from the common asq/arq handler to
2897 * process request from VF
2898 */
2899void ice_vc_process_vf_msg(struct ice_pf *pf, struct ice_rq_event_info *event)
2900{
2901	u32 v_opcode = le32_to_cpu(event->desc.cookie_high);
2902	s16 vf_id = le16_to_cpu(event->desc.retval);
2903	u16 msglen = event->msg_len;
2904	u8 *msg = event->msg_buf;
2905	struct ice_vf *vf = NULL;
2906	int err = 0;
2907
2908	if (vf_id >= pf->num_alloc_vfs) {
2909		err = -EINVAL;
2910		goto error_handler;
2911	}
2912
2913	vf = &pf->vf[vf_id];
2914
2915	/* Check if VF is disabled. */
2916	if (test_bit(ICE_VF_STATE_DIS, vf->vf_states)) {
2917		err = -EPERM;
2918		goto error_handler;
2919	}
2920
2921	/* Perform basic checks on the msg */
2922	err = virtchnl_vc_validate_vf_msg(&vf->vf_ver, v_opcode, msg, msglen);
2923	if (err) {
2924		if (err == VIRTCHNL_STATUS_ERR_PARAM)
2925			err = -EPERM;
2926		else
2927			err = -EINVAL;
2928	}
2929
2930error_handler:
2931	if (err) {
2932		ice_vc_send_msg_to_vf(vf, v_opcode, VIRTCHNL_STATUS_ERR_PARAM,
2933				      NULL, 0);
2934		dev_err(&pf->pdev->dev, "Invalid message from VF %d, opcode %d, len %d, error %d\n",
2935			vf_id, v_opcode, msglen, err);
2936		return;
2937	}
2938
2939	switch (v_opcode) {
2940	case VIRTCHNL_OP_VERSION:
2941		err = ice_vc_get_ver_msg(vf, msg);
2942		break;
2943	case VIRTCHNL_OP_GET_VF_RESOURCES:
2944		err = ice_vc_get_vf_res_msg(vf, msg);
2945		ice_vc_notify_vf_link_state(vf);
2946		break;
2947	case VIRTCHNL_OP_RESET_VF:
2948		ice_vc_reset_vf_msg(vf);
2949		break;
2950	case VIRTCHNL_OP_ADD_ETH_ADDR:
2951		err = ice_vc_add_mac_addr_msg(vf, msg);
2952		break;
2953	case VIRTCHNL_OP_DEL_ETH_ADDR:
2954		err = ice_vc_del_mac_addr_msg(vf, msg);
2955		break;
2956	case VIRTCHNL_OP_CONFIG_VSI_QUEUES:
2957		err = ice_vc_cfg_qs_msg(vf, msg);
2958		break;
2959	case VIRTCHNL_OP_ENABLE_QUEUES:
2960		err = ice_vc_ena_qs_msg(vf, msg);
2961		ice_vc_notify_vf_link_state(vf);
2962		break;
2963	case VIRTCHNL_OP_DISABLE_QUEUES:
2964		err = ice_vc_dis_qs_msg(vf, msg);
2965		break;
2966	case VIRTCHNL_OP_REQUEST_QUEUES:
2967		err = ice_vc_request_qs_msg(vf, msg);
2968		break;
2969	case VIRTCHNL_OP_CONFIG_IRQ_MAP:
2970		err = ice_vc_cfg_irq_map_msg(vf, msg);
2971		break;
2972	case VIRTCHNL_OP_CONFIG_RSS_KEY:
2973		err = ice_vc_config_rss_key(vf, msg);
2974		break;
2975	case VIRTCHNL_OP_CONFIG_RSS_LUT:
2976		err = ice_vc_config_rss_lut(vf, msg);
2977		break;
2978	case VIRTCHNL_OP_GET_STATS:
2979		err = ice_vc_get_stats_msg(vf, msg);
2980		break;
2981	case VIRTCHNL_OP_ADD_VLAN:
2982		err = ice_vc_add_vlan_msg(vf, msg);
2983		break;
2984	case VIRTCHNL_OP_DEL_VLAN:
2985		err = ice_vc_remove_vlan_msg(vf, msg);
2986		break;
2987	case VIRTCHNL_OP_ENABLE_VLAN_STRIPPING:
2988		err = ice_vc_ena_vlan_stripping(vf);
2989		break;
2990	case VIRTCHNL_OP_DISABLE_VLAN_STRIPPING:
2991		err = ice_vc_dis_vlan_stripping(vf);
2992		break;
2993	case VIRTCHNL_OP_UNKNOWN:
2994	default:
2995		dev_err(&pf->pdev->dev, "Unsupported opcode %d from VF %d\n",
2996			v_opcode, vf_id);
2997		err = ice_vc_send_msg_to_vf(vf, v_opcode,
2998					    VIRTCHNL_STATUS_ERR_NOT_SUPPORTED,
2999					    NULL, 0);
3000		break;
3001	}
3002	if (err) {
3003		/* Helper function cares less about error return values here
3004		 * as it is busy with pending work.
3005		 */
3006		dev_info(&pf->pdev->dev,
3007			 "PF failed to honor VF %d, opcode %d, error %d\n",
3008			 vf_id, v_opcode, err);
3009	}
3010}
3011
3012/**
3013 * ice_get_vf_cfg
3014 * @netdev: network interface device structure
3015 * @vf_id: VF identifier
3016 * @ivi: VF configuration structure
3017 *
3018 * return VF configuration
3019 */
3020int
3021ice_get_vf_cfg(struct net_device *netdev, int vf_id, struct ifla_vf_info *ivi)
3022{
3023	struct ice_netdev_priv *np = netdev_priv(netdev);
3024	struct ice_vsi *vsi = np->vsi;
3025	struct ice_pf *pf = vsi->back;
3026	struct ice_vf *vf;
3027
3028	/* validate the request */
3029	if (vf_id >= pf->num_alloc_vfs) {
3030		netdev_err(netdev, "invalid VF id: %d\n", vf_id);
3031		return -EINVAL;
3032	}
3033
3034	vf = &pf->vf[vf_id];
3035	vsi = pf->vsi[vf->lan_vsi_idx];
3036
3037	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
3038		netdev_err(netdev, "VF %d in reset. Try again.\n", vf_id);
3039		return -EBUSY;
3040	}
3041
3042	ivi->vf = vf_id;
3043	ether_addr_copy(ivi->mac, vf->dflt_lan_addr.addr);
3044
3045	/* VF configuration for VLAN and applicable QoS */
3046	ivi->vlan = le16_to_cpu(vsi->info.pvid) & ICE_VLAN_M;
3047	ivi->qos = (le16_to_cpu(vsi->info.pvid) & ICE_PRIORITY_M) >>
3048		    ICE_VLAN_PRIORITY_S;
3049
3050	ivi->trusted = vf->trusted;
3051	ivi->spoofchk = vf->spoofchk;
3052	if (!vf->link_forced)
3053		ivi->linkstate = IFLA_VF_LINK_STATE_AUTO;
3054	else if (vf->link_up)
3055		ivi->linkstate = IFLA_VF_LINK_STATE_ENABLE;
3056	else
3057		ivi->linkstate = IFLA_VF_LINK_STATE_DISABLE;
3058	ivi->max_tx_rate = vf->tx_rate;
3059	ivi->min_tx_rate = 0;
3060	return 0;
3061}
3062
3063/**
3064 * ice_set_vf_spoofchk
3065 * @netdev: network interface device structure
3066 * @vf_id: VF identifier
3067 * @ena: flag to enable or disable feature
3068 *
3069 * Enable or disable VF spoof checking
3070 */
3071int ice_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool ena)
3072{
3073	struct ice_netdev_priv *np = netdev_priv(netdev);
3074	struct ice_vsi *vsi = np->vsi;
3075	struct ice_pf *pf = vsi->back;
3076	struct ice_vsi_ctx *ctx;
3077	enum ice_status status;
3078	struct ice_vf *vf;
3079	int ret = 0;
3080
3081	/* validate the request */
3082	if (vf_id >= pf->num_alloc_vfs) {
3083		netdev_err(netdev, "invalid VF id: %d\n", vf_id);
3084		return -EINVAL;
3085	}
3086
3087	vf = &pf->vf[vf_id];
3088	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
3089		netdev_err(netdev, "VF %d in reset. Try again.\n", vf_id);
3090		return -EBUSY;
3091	}
3092
3093	if (ena == vf->spoofchk) {
3094		dev_dbg(&pf->pdev->dev, "VF spoofchk already %s\n",
3095			ena ? "ON" : "OFF");
3096		return 0;
3097	}
3098
3099	ctx = devm_kzalloc(&pf->pdev->dev, sizeof(*ctx), GFP_KERNEL);
3100	if (!ctx)
3101		return -ENOMEM;
3102
3103	ctx->info.valid_sections = cpu_to_le16(ICE_AQ_VSI_PROP_SECURITY_VALID);
3104
3105	if (ena) {
3106		ctx->info.sec_flags |= ICE_AQ_VSI_SEC_FLAG_ENA_MAC_ANTI_SPOOF;
3107		ctx->info.sw_flags2 |= ICE_AQ_VSI_SW_FLAG_RX_PRUNE_EN_M;
3108	}
3109
3110	status = ice_update_vsi(&pf->hw, vsi->idx, ctx, NULL);
3111	if (status) {
3112		dev_dbg(&pf->pdev->dev,
3113			"Error %d, failed to update VSI* parameters\n", status);
3114		ret = -EIO;
3115		goto out;
3116	}
3117
3118	vf->spoofchk = ena;
3119	vsi->info.sec_flags = ctx->info.sec_flags;
3120	vsi->info.sw_flags2 = ctx->info.sw_flags2;
3121out:
3122	devm_kfree(&pf->pdev->dev, ctx);
3123	return ret;
3124}
3125
3126/**
3127 * ice_set_vf_mac
3128 * @netdev: network interface device structure
3129 * @vf_id: VF identifier
3130 * @mac: MAC address
3131 *
3132 * program VF MAC address
3133 */
3134int ice_set_vf_mac(struct net_device *netdev, int vf_id, u8 *mac)
3135{
3136	struct ice_netdev_priv *np = netdev_priv(netdev);
3137	struct ice_vsi *vsi = np->vsi;
3138	struct ice_pf *pf = vsi->back;
3139	struct ice_vf *vf;
3140	int ret = 0;
3141
3142	/* validate the request */
3143	if (vf_id >= pf->num_alloc_vfs) {
3144		netdev_err(netdev, "invalid VF id: %d\n", vf_id);
3145		return -EINVAL;
3146	}
3147
3148	vf = &pf->vf[vf_id];
3149	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
3150		netdev_err(netdev, "VF %d in reset. Try again.\n", vf_id);
3151		return -EBUSY;
3152	}
3153
3154	if (is_zero_ether_addr(mac) || is_multicast_ether_addr(mac)) {
3155		netdev_err(netdev, "%pM not a valid unicast address\n", mac);
3156		return -EINVAL;
3157	}
3158
3159	/* copy MAC into dflt_lan_addr and trigger a VF reset. The reset
3160	 * flow will use the updated dflt_lan_addr and add a MAC filter
3161	 * using ice_add_mac. Also set pf_set_mac to indicate that the PF has
3162	 * set the MAC address for this VF.
3163	 */
3164	ether_addr_copy(vf->dflt_lan_addr.addr, mac);
3165	vf->pf_set_mac = true;
3166	netdev_info(netdev,
3167		    "MAC on VF %d set to %pM. VF driver will be reinitialized\n",
3168		    vf_id, mac);
3169
3170	ice_vc_dis_vf(vf);
3171	return ret;
3172}
3173
3174/**
3175 * ice_set_vf_trust
3176 * @netdev: network interface device structure
3177 * @vf_id: VF identifier
3178 * @trusted: Boolean value to enable/disable trusted VF
3179 *
3180 * Enable or disable a given VF as trusted
3181 */
3182int ice_set_vf_trust(struct net_device *netdev, int vf_id, bool trusted)
3183{
3184	struct ice_netdev_priv *np = netdev_priv(netdev);
3185	struct ice_vsi *vsi = np->vsi;
3186	struct ice_pf *pf = vsi->back;
3187	struct ice_vf *vf;
3188
3189	/* validate the request */
3190	if (vf_id >= pf->num_alloc_vfs) {
3191		dev_err(&pf->pdev->dev, "invalid VF id: %d\n", vf_id);
3192		return -EINVAL;
3193	}
3194
3195	vf = &pf->vf[vf_id];
3196	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
3197		dev_err(&pf->pdev->dev, "VF %d in reset. Try again.\n", vf_id);
3198		return -EBUSY;
3199	}
3200
3201	/* Check if already trusted */
3202	if (trusted == vf->trusted)
3203		return 0;
3204
3205	vf->trusted = trusted;
3206	ice_vc_dis_vf(vf);
3207	dev_info(&pf->pdev->dev, "VF %u is now %strusted\n",
3208		 vf_id, trusted ? "" : "un");
3209
3210	return 0;
3211}
3212
3213/**
3214 * ice_set_vf_link_state
3215 * @netdev: network interface device structure
3216 * @vf_id: VF identifier
3217 * @link_state: required link state
3218 *
3219 * Set VF's link state, irrespective of physical link state status
3220 */
3221int ice_set_vf_link_state(struct net_device *netdev, int vf_id, int link_state)
3222{
3223	struct ice_netdev_priv *np = netdev_priv(netdev);
3224	struct ice_pf *pf = np->vsi->back;
3225	struct virtchnl_pf_event pfe = { 0 };
3226	struct ice_link_status *ls;
3227	struct ice_vf *vf;
3228	struct ice_hw *hw;
3229
3230	if (vf_id >= pf->num_alloc_vfs) {
3231		dev_err(&pf->pdev->dev, "Invalid VF Identifier %d\n", vf_id);
3232		return -EINVAL;
3233	}
3234
3235	vf = &pf->vf[vf_id];
3236	hw = &pf->hw;
3237	ls = &pf->hw.port_info->phy.link_info;
3238
3239	if (!test_bit(ICE_VF_STATE_INIT, vf->vf_states)) {
3240		dev_err(&pf->pdev->dev, "vf %d in reset. Try again.\n", vf_id);
3241		return -EBUSY;
3242	}
3243
3244	pfe.event = VIRTCHNL_EVENT_LINK_CHANGE;
3245	pfe.severity = PF_EVENT_SEVERITY_INFO;
3246
3247	switch (link_state) {
3248	case IFLA_VF_LINK_STATE_AUTO:
3249		vf->link_forced = false;
3250		vf->link_up = ls->link_info & ICE_AQ_LINK_UP;
3251		break;
3252	case IFLA_VF_LINK_STATE_ENABLE:
3253		vf->link_forced = true;
3254		vf->link_up = true;
3255		break;
3256	case IFLA_VF_LINK_STATE_DISABLE:
3257		vf->link_forced = true;
3258		vf->link_up = false;
3259		break;
3260	default:
3261		return -EINVAL;
3262	}
3263
3264	if (vf->link_forced)
3265		ice_set_pfe_link_forced(vf, &pfe, vf->link_up);
3266	else
3267		ice_set_pfe_link(vf, &pfe, ls->link_speed, vf->link_up);
3268
3269	/* Notify the VF of its new link state */
3270	ice_aq_send_msg_to_vf(hw, vf->vf_id, VIRTCHNL_OP_EVENT,
3271			      VIRTCHNL_STATUS_SUCCESS, (u8 *)&pfe,
3272			      sizeof(pfe), NULL);
3273
3274	return 0;
3275}