xref: /linux/drivers/net/ethernet/intel/ice/ice_main.c (revision 307797159ac25fe5a2048bf5c6a5718298edca57)
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2018, Intel Corporation. */
3 
4 /* Intel(R) Ethernet Connection E800 Series Linux Driver */
5 
6 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7 
8 #include "ice.h"
9 
10 #define DRV_VERSION	"ice-0.7.0-k"
11 #define DRV_SUMMARY	"Intel(R) Ethernet Connection E800 Series Linux Driver"
12 const char ice_drv_ver[] = DRV_VERSION;
13 static const char ice_driver_string[] = DRV_SUMMARY;
14 static const char ice_copyright[] = "Copyright (c) 2018, Intel Corporation.";
15 
16 MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
17 MODULE_DESCRIPTION(DRV_SUMMARY);
18 MODULE_LICENSE("GPL");
19 MODULE_VERSION(DRV_VERSION);
20 
21 static int debug = -1;
22 module_param(debug, int, 0644);
23 #ifndef CONFIG_DYNAMIC_DEBUG
24 MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all), hw debug_mask (0x8XXXXXXX)");
25 #else
26 MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all)");
27 #endif /* !CONFIG_DYNAMIC_DEBUG */
28 
29 static struct workqueue_struct *ice_wq;
30 static const struct net_device_ops ice_netdev_ops;
31 
32 static void ice_pf_dis_all_vsi(struct ice_pf *pf);
33 static void ice_rebuild(struct ice_pf *pf);
34 static int ice_vsi_release(struct ice_vsi *vsi);
35 static void ice_update_vsi_stats(struct ice_vsi *vsi);
36 static void ice_update_pf_stats(struct ice_pf *pf);
37 
38 /**
39  * ice_get_free_slot - get the next non-NULL location index in array
40  * @array: array to search
41  * @size: size of the array
42  * @curr: last known occupied index to be used as a search hint
43  *
44  * void * is being used to keep the functionality generic. This lets us use this
45  * function on any array of pointers.
46  */
47 static int ice_get_free_slot(void *array, int size, int curr)
48 {
49 	int **tmp_array = (int **)array;
50 	int next;
51 
52 	if (curr < (size - 1) && !tmp_array[curr + 1]) {
53 		next = curr + 1;
54 	} else {
55 		int i = 0;
56 
57 		while ((i < size) && (tmp_array[i]))
58 			i++;
59 		if (i == size)
60 			next = ICE_NO_VSI;
61 		else
62 			next = i;
63 	}
64 	return next;
65 }
66 
67 /**
68  * ice_search_res - Search the tracker for a block of resources
69  * @res: pointer to the resource
70  * @needed: size of the block needed
71  * @id: identifier to track owner
72  * Returns the base item index of the block, or -ENOMEM for error
73  */
74 static int ice_search_res(struct ice_res_tracker *res, u16 needed, u16 id)
75 {
76 	int start = res->search_hint;
77 	int end = start;
78 
79 	id |= ICE_RES_VALID_BIT;
80 
81 	do {
82 		/* skip already allocated entries */
83 		if (res->list[end++] & ICE_RES_VALID_BIT) {
84 			start = end;
85 			if ((start + needed) > res->num_entries)
86 				break;
87 		}
88 
89 		if (end == (start + needed)) {
90 			int i = start;
91 
92 			/* there was enough, so assign it to the requestor */
93 			while (i != end)
94 				res->list[i++] = id;
95 
96 			if (end == res->num_entries)
97 				end = 0;
98 
99 			res->search_hint = end;
100 			return start;
101 		}
102 	} while (1);
103 
104 	return -ENOMEM;
105 }
106 
107 /**
108  * ice_get_res - get a block of resources
109  * @pf: board private structure
110  * @res: pointer to the resource
111  * @needed: size of the block needed
112  * @id: identifier to track owner
113  *
114  * Returns the base item index of the block, or -ENOMEM for error
115  * The search_hint trick and lack of advanced fit-finding only works
116  * because we're highly likely to have all the same sized requests.
117  * Linear search time and any fragmentation should be minimal.
118  */
119 static int
120 ice_get_res(struct ice_pf *pf, struct ice_res_tracker *res, u16 needed, u16 id)
121 {
122 	int ret;
123 
124 	if (!res || !pf)
125 		return -EINVAL;
126 
127 	if (!needed || needed > res->num_entries || id >= ICE_RES_VALID_BIT) {
128 		dev_err(&pf->pdev->dev,
129 			"param err: needed=%d, num_entries = %d id=0x%04x\n",
130 			needed, res->num_entries, id);
131 		return -EINVAL;
132 	}
133 
134 	/* search based on search_hint */
135 	ret = ice_search_res(res, needed, id);
136 
137 	if (ret < 0) {
138 		/* previous search failed. Reset search hint and try again */
139 		res->search_hint = 0;
140 		ret = ice_search_res(res, needed, id);
141 	}
142 
143 	return ret;
144 }
145 
146 /**
147  * ice_free_res - free a block of resources
148  * @res: pointer to the resource
149  * @index: starting index previously returned by ice_get_res
150  * @id: identifier to track owner
151  * Returns number of resources freed
152  */
153 static int ice_free_res(struct ice_res_tracker *res, u16 index, u16 id)
154 {
155 	int count = 0;
156 	int i;
157 
158 	if (!res || index >= res->num_entries)
159 		return -EINVAL;
160 
161 	id |= ICE_RES_VALID_BIT;
162 	for (i = index; i < res->num_entries && res->list[i] == id; i++) {
163 		res->list[i] = 0;
164 		count++;
165 	}
166 
167 	return count;
168 }
169 
170 /**
171  * ice_add_mac_to_list - Add a mac address filter entry to the list
172  * @vsi: the VSI to be forwarded to
173  * @add_list: pointer to the list which contains MAC filter entries
174  * @macaddr: the MAC address to be added.
175  *
176  * Adds mac address filter entry to the temp list
177  *
178  * Returns 0 on success or ENOMEM on failure.
179  */
180 static int ice_add_mac_to_list(struct ice_vsi *vsi, struct list_head *add_list,
181 			       const u8 *macaddr)
182 {
183 	struct ice_fltr_list_entry *tmp;
184 	struct ice_pf *pf = vsi->back;
185 
186 	tmp = devm_kzalloc(&pf->pdev->dev, sizeof(*tmp), GFP_ATOMIC);
187 	if (!tmp)
188 		return -ENOMEM;
189 
190 	tmp->fltr_info.flag = ICE_FLTR_TX;
191 	tmp->fltr_info.src = vsi->vsi_num;
192 	tmp->fltr_info.lkup_type = ICE_SW_LKUP_MAC;
193 	tmp->fltr_info.fltr_act = ICE_FWD_TO_VSI;
194 	tmp->fltr_info.fwd_id.vsi_id = vsi->vsi_num;
195 	ether_addr_copy(tmp->fltr_info.l_data.mac.mac_addr, macaddr);
196 
197 	INIT_LIST_HEAD(&tmp->list_entry);
198 	list_add(&tmp->list_entry, add_list);
199 
200 	return 0;
201 }
202 
203 /**
204  * ice_add_mac_to_sync_list - creates list of mac addresses to be synced
205  * @netdev: the net device on which the sync is happening
206  * @addr: mac address to sync
207  *
208  * This is a callback function which is called by the in kernel device sync
209  * functions (like __dev_uc_sync, __dev_mc_sync, etc). This function only
210  * populates the tmp_sync_list, which is later used by ice_add_mac to add the
211  * mac filters from the hardware.
212  */
213 static int ice_add_mac_to_sync_list(struct net_device *netdev, const u8 *addr)
214 {
215 	struct ice_netdev_priv *np = netdev_priv(netdev);
216 	struct ice_vsi *vsi = np->vsi;
217 
218 	if (ice_add_mac_to_list(vsi, &vsi->tmp_sync_list, addr))
219 		return -EINVAL;
220 
221 	return 0;
222 }
223 
224 /**
225  * ice_add_mac_to_unsync_list - creates list of mac addresses to be unsynced
226  * @netdev: the net device on which the unsync is happening
227  * @addr: mac address to unsync
228  *
229  * This is a callback function which is called by the in kernel device unsync
230  * functions (like __dev_uc_unsync, __dev_mc_unsync, etc). This function only
231  * populates the tmp_unsync_list, which is later used by ice_remove_mac to
232  * delete the mac filters from the hardware.
233  */
234 static int ice_add_mac_to_unsync_list(struct net_device *netdev, const u8 *addr)
235 {
236 	struct ice_netdev_priv *np = netdev_priv(netdev);
237 	struct ice_vsi *vsi = np->vsi;
238 
239 	if (ice_add_mac_to_list(vsi, &vsi->tmp_unsync_list, addr))
240 		return -EINVAL;
241 
242 	return 0;
243 }
244 
245 /**
246  * ice_free_fltr_list - free filter lists helper
247  * @dev: pointer to the device struct
248  * @h: pointer to the list head to be freed
249  *
250  * Helper function to free filter lists previously created using
251  * ice_add_mac_to_list
252  */
253 static void ice_free_fltr_list(struct device *dev, struct list_head *h)
254 {
255 	struct ice_fltr_list_entry *e, *tmp;
256 
257 	list_for_each_entry_safe(e, tmp, h, list_entry) {
258 		list_del(&e->list_entry);
259 		devm_kfree(dev, e);
260 	}
261 }
262 
263 /**
264  * ice_vsi_fltr_changed - check if filter state changed
265  * @vsi: VSI to be checked
266  *
267  * returns true if filter state has changed, false otherwise.
268  */
269 static bool ice_vsi_fltr_changed(struct ice_vsi *vsi)
270 {
271 	return test_bit(ICE_VSI_FLAG_UMAC_FLTR_CHANGED, vsi->flags) ||
272 	       test_bit(ICE_VSI_FLAG_MMAC_FLTR_CHANGED, vsi->flags) ||
273 	       test_bit(ICE_VSI_FLAG_VLAN_FLTR_CHANGED, vsi->flags);
274 }
275 
276 /**
277  * ice_vsi_sync_fltr - Update the VSI filter list to the HW
278  * @vsi: ptr to the VSI
279  *
280  * Push any outstanding VSI filter changes through the AdminQ.
281  */
282 static int ice_vsi_sync_fltr(struct ice_vsi *vsi)
283 {
284 	struct device *dev = &vsi->back->pdev->dev;
285 	struct net_device *netdev = vsi->netdev;
286 	bool promisc_forced_on = false;
287 	struct ice_pf *pf = vsi->back;
288 	struct ice_hw *hw = &pf->hw;
289 	enum ice_status status = 0;
290 	u32 changed_flags = 0;
291 	int err = 0;
292 
293 	if (!vsi->netdev)
294 		return -EINVAL;
295 
296 	while (test_and_set_bit(__ICE_CFG_BUSY, vsi->state))
297 		usleep_range(1000, 2000);
298 
299 	changed_flags = vsi->current_netdev_flags ^ vsi->netdev->flags;
300 	vsi->current_netdev_flags = vsi->netdev->flags;
301 
302 	INIT_LIST_HEAD(&vsi->tmp_sync_list);
303 	INIT_LIST_HEAD(&vsi->tmp_unsync_list);
304 
305 	if (ice_vsi_fltr_changed(vsi)) {
306 		clear_bit(ICE_VSI_FLAG_UMAC_FLTR_CHANGED, vsi->flags);
307 		clear_bit(ICE_VSI_FLAG_MMAC_FLTR_CHANGED, vsi->flags);
308 		clear_bit(ICE_VSI_FLAG_VLAN_FLTR_CHANGED, vsi->flags);
309 
310 		/* grab the netdev's addr_list_lock */
311 		netif_addr_lock_bh(netdev);
312 		__dev_uc_sync(netdev, ice_add_mac_to_sync_list,
313 			      ice_add_mac_to_unsync_list);
314 		__dev_mc_sync(netdev, ice_add_mac_to_sync_list,
315 			      ice_add_mac_to_unsync_list);
316 		/* our temp lists are populated. release lock */
317 		netif_addr_unlock_bh(netdev);
318 	}
319 
320 	/* Remove mac addresses in the unsync list */
321 	status = ice_remove_mac(hw, &vsi->tmp_unsync_list);
322 	ice_free_fltr_list(dev, &vsi->tmp_unsync_list);
323 	if (status) {
324 		netdev_err(netdev, "Failed to delete MAC filters\n");
325 		/* if we failed because of alloc failures, just bail */
326 		if (status == ICE_ERR_NO_MEMORY) {
327 			err = -ENOMEM;
328 			goto out;
329 		}
330 	}
331 
332 	/* Add mac addresses in the sync list */
333 	status = ice_add_mac(hw, &vsi->tmp_sync_list);
334 	ice_free_fltr_list(dev, &vsi->tmp_sync_list);
335 	if (status) {
336 		netdev_err(netdev, "Failed to add MAC filters\n");
337 		/* If there is no more space for new umac filters, vsi
338 		 * should go into promiscuous mode. There should be some
339 		 * space reserved for promiscuous filters.
340 		 */
341 		if (hw->adminq.sq_last_status == ICE_AQ_RC_ENOSPC &&
342 		    !test_and_set_bit(__ICE_FLTR_OVERFLOW_PROMISC,
343 				      vsi->state)) {
344 			promisc_forced_on = true;
345 			netdev_warn(netdev,
346 				    "Reached MAC filter limit, forcing promisc mode on VSI %d\n",
347 				    vsi->vsi_num);
348 		} else {
349 			err = -EIO;
350 			goto out;
351 		}
352 	}
353 	/* check for changes in promiscuous modes */
354 	if (changed_flags & IFF_ALLMULTI)
355 		netdev_warn(netdev, "Unsupported configuration\n");
356 
357 	if (((changed_flags & IFF_PROMISC) || promisc_forced_on) ||
358 	    test_bit(ICE_VSI_FLAG_PROMISC_CHANGED, vsi->flags)) {
359 		clear_bit(ICE_VSI_FLAG_PROMISC_CHANGED, vsi->flags);
360 		if (vsi->current_netdev_flags & IFF_PROMISC) {
361 			/* Apply TX filter rule to get traffic from VMs */
362 			status = ice_cfg_dflt_vsi(hw, vsi->vsi_num, true,
363 						  ICE_FLTR_TX);
364 			if (status) {
365 				netdev_err(netdev, "Error setting default VSI %i tx rule\n",
366 					   vsi->vsi_num);
367 				vsi->current_netdev_flags &= ~IFF_PROMISC;
368 				err = -EIO;
369 				goto out_promisc;
370 			}
371 			/* Apply RX filter rule to get traffic from wire */
372 			status = ice_cfg_dflt_vsi(hw, vsi->vsi_num, true,
373 						  ICE_FLTR_RX);
374 			if (status) {
375 				netdev_err(netdev, "Error setting default VSI %i rx rule\n",
376 					   vsi->vsi_num);
377 				vsi->current_netdev_flags &= ~IFF_PROMISC;
378 				err = -EIO;
379 				goto out_promisc;
380 			}
381 		} else {
382 			/* Clear TX filter rule to stop traffic from VMs */
383 			status = ice_cfg_dflt_vsi(hw, vsi->vsi_num, false,
384 						  ICE_FLTR_TX);
385 			if (status) {
386 				netdev_err(netdev, "Error clearing default VSI %i tx rule\n",
387 					   vsi->vsi_num);
388 				vsi->current_netdev_flags |= IFF_PROMISC;
389 				err = -EIO;
390 				goto out_promisc;
391 			}
392 			/* Clear filter RX to remove traffic from wire */
393 			status = ice_cfg_dflt_vsi(hw, vsi->vsi_num, false,
394 						  ICE_FLTR_RX);
395 			if (status) {
396 				netdev_err(netdev, "Error clearing default VSI %i rx rule\n",
397 					   vsi->vsi_num);
398 				vsi->current_netdev_flags |= IFF_PROMISC;
399 				err = -EIO;
400 				goto out_promisc;
401 			}
402 		}
403 	}
404 	goto exit;
405 
406 out_promisc:
407 	set_bit(ICE_VSI_FLAG_PROMISC_CHANGED, vsi->flags);
408 	goto exit;
409 out:
410 	/* if something went wrong then set the changed flag so we try again */
411 	set_bit(ICE_VSI_FLAG_UMAC_FLTR_CHANGED, vsi->flags);
412 	set_bit(ICE_VSI_FLAG_MMAC_FLTR_CHANGED, vsi->flags);
413 exit:
414 	clear_bit(__ICE_CFG_BUSY, vsi->state);
415 	return err;
416 }
417 
418 /**
419  * ice_sync_fltr_subtask - Sync the VSI filter list with HW
420  * @pf: board private structure
421  */
422 static void ice_sync_fltr_subtask(struct ice_pf *pf)
423 {
424 	int v;
425 
426 	if (!pf || !(test_bit(ICE_FLAG_FLTR_SYNC, pf->flags)))
427 		return;
428 
429 	clear_bit(ICE_FLAG_FLTR_SYNC, pf->flags);
430 
431 	for (v = 0; v < pf->num_alloc_vsi; v++)
432 		if (pf->vsi[v] && ice_vsi_fltr_changed(pf->vsi[v]) &&
433 		    ice_vsi_sync_fltr(pf->vsi[v])) {
434 			/* come back and try again later */
435 			set_bit(ICE_FLAG_FLTR_SYNC, pf->flags);
436 			break;
437 		}
438 }
439 
440 /**
441  * ice_is_reset_recovery_pending - schedule a reset
442  * @state: pf state field
443  */
444 static bool ice_is_reset_recovery_pending(unsigned long int *state)
445 {
446 	return test_bit(__ICE_RESET_RECOVERY_PENDING, state);
447 }
448 
449 /**
450  * ice_prepare_for_reset - prep for the core to reset
451  * @pf: board private structure
452  *
453  * Inform or close all dependent features in prep for reset.
454  */
455 static void
456 ice_prepare_for_reset(struct ice_pf *pf)
457 {
458 	struct ice_hw *hw = &pf->hw;
459 	u32 v;
460 
461 	ice_for_each_vsi(pf, v)
462 		if (pf->vsi[v])
463 			ice_remove_vsi_fltr(hw, pf->vsi[v]->vsi_num);
464 
465 	dev_dbg(&pf->pdev->dev, "Tearing down internal switch for reset\n");
466 
467 	/* disable the VSIs and their queues that are not already DOWN */
468 	/* pf_dis_all_vsi modifies netdev structures -rtnl_lock needed */
469 	ice_pf_dis_all_vsi(pf);
470 
471 	ice_for_each_vsi(pf, v)
472 		if (pf->vsi[v])
473 			pf->vsi[v]->vsi_num = 0;
474 
475 	ice_shutdown_all_ctrlq(hw);
476 }
477 
478 /**
479  * ice_do_reset - Initiate one of many types of resets
480  * @pf: board private structure
481  * @reset_type: reset type requested
482  * before this function was called.
483  */
484 static void ice_do_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
485 {
486 	struct device *dev = &pf->pdev->dev;
487 	struct ice_hw *hw = &pf->hw;
488 
489 	dev_dbg(dev, "reset_type 0x%x requested\n", reset_type);
490 	WARN_ON(in_interrupt());
491 
492 	/* PFR is a bit of a special case because it doesn't result in an OICR
493 	 * interrupt. So for PFR, we prepare for reset, issue the reset and
494 	 * rebuild sequentially.
495 	 */
496 	if (reset_type == ICE_RESET_PFR) {
497 		set_bit(__ICE_RESET_RECOVERY_PENDING, pf->state);
498 		ice_prepare_for_reset(pf);
499 	}
500 
501 	/* trigger the reset */
502 	if (ice_reset(hw, reset_type)) {
503 		dev_err(dev, "reset %d failed\n", reset_type);
504 		set_bit(__ICE_RESET_FAILED, pf->state);
505 		clear_bit(__ICE_RESET_RECOVERY_PENDING, pf->state);
506 		return;
507 	}
508 
509 	if (reset_type == ICE_RESET_PFR) {
510 		pf->pfr_count++;
511 		ice_rebuild(pf);
512 		clear_bit(__ICE_RESET_RECOVERY_PENDING, pf->state);
513 	}
514 }
515 
516 /**
517  * ice_reset_subtask - Set up for resetting the device and driver
518  * @pf: board private structure
519  */
520 static void ice_reset_subtask(struct ice_pf *pf)
521 {
522 	enum ice_reset_req reset_type;
523 
524 	rtnl_lock();
525 
526 	/* When a CORER/GLOBR/EMPR is about to happen, the hardware triggers an
527 	 * OICR interrupt. The OICR handler (ice_misc_intr) determines what
528 	 * type of reset happened and sets __ICE_RESET_RECOVERY_PENDING bit in
529 	 * pf->state. So if reset/recovery is pending (as indicated by this bit)
530 	 * we do a rebuild and return.
531 	 */
532 	if (ice_is_reset_recovery_pending(pf->state)) {
533 		clear_bit(__ICE_GLOBR_RECV, pf->state);
534 		clear_bit(__ICE_CORER_RECV, pf->state);
535 		ice_prepare_for_reset(pf);
536 
537 		/* make sure we are ready to rebuild */
538 		if (ice_check_reset(&pf->hw))
539 			set_bit(__ICE_RESET_FAILED, pf->state);
540 		else
541 			ice_rebuild(pf);
542 		clear_bit(__ICE_RESET_RECOVERY_PENDING, pf->state);
543 		goto unlock;
544 	}
545 
546 	/* No pending resets to finish processing. Check for new resets */
547 	if (test_and_clear_bit(__ICE_GLOBR_REQ, pf->state))
548 		reset_type = ICE_RESET_GLOBR;
549 	else if (test_and_clear_bit(__ICE_CORER_REQ, pf->state))
550 		reset_type = ICE_RESET_CORER;
551 	else if (test_and_clear_bit(__ICE_PFR_REQ, pf->state))
552 		reset_type = ICE_RESET_PFR;
553 	else
554 		goto unlock;
555 
556 	/* reset if not already down or resetting */
557 	if (!test_bit(__ICE_DOWN, pf->state) &&
558 	    !test_bit(__ICE_CFG_BUSY, pf->state)) {
559 		ice_do_reset(pf, reset_type);
560 	}
561 
562 unlock:
563 	rtnl_unlock();
564 }
565 
566 /**
567  * ice_watchdog_subtask - periodic tasks not using event driven scheduling
568  * @pf: board private structure
569  */
570 static void ice_watchdog_subtask(struct ice_pf *pf)
571 {
572 	int i;
573 
574 	/* if interface is down do nothing */
575 	if (test_bit(__ICE_DOWN, pf->state) ||
576 	    test_bit(__ICE_CFG_BUSY, pf->state))
577 		return;
578 
579 	/* make sure we don't do these things too often */
580 	if (time_before(jiffies,
581 			pf->serv_tmr_prev + pf->serv_tmr_period))
582 		return;
583 
584 	pf->serv_tmr_prev = jiffies;
585 
586 	/* Update the stats for active netdevs so the network stack
587 	 * can look at updated numbers whenever it cares to
588 	 */
589 	ice_update_pf_stats(pf);
590 	for (i = 0; i < pf->num_alloc_vsi; i++)
591 		if (pf->vsi[i] && pf->vsi[i]->netdev)
592 			ice_update_vsi_stats(pf->vsi[i]);
593 }
594 
595 /**
596  * ice_print_link_msg - print link up or down message
597  * @vsi: the VSI whose link status is being queried
598  * @isup: boolean for if the link is now up or down
599  */
600 void ice_print_link_msg(struct ice_vsi *vsi, bool isup)
601 {
602 	const char *speed;
603 	const char *fc;
604 
605 	if (vsi->current_isup == isup)
606 		return;
607 
608 	vsi->current_isup = isup;
609 
610 	if (!isup) {
611 		netdev_info(vsi->netdev, "NIC Link is Down\n");
612 		return;
613 	}
614 
615 	switch (vsi->port_info->phy.link_info.link_speed) {
616 	case ICE_AQ_LINK_SPEED_40GB:
617 		speed = "40 G";
618 		break;
619 	case ICE_AQ_LINK_SPEED_25GB:
620 		speed = "25 G";
621 		break;
622 	case ICE_AQ_LINK_SPEED_20GB:
623 		speed = "20 G";
624 		break;
625 	case ICE_AQ_LINK_SPEED_10GB:
626 		speed = "10 G";
627 		break;
628 	case ICE_AQ_LINK_SPEED_5GB:
629 		speed = "5 G";
630 		break;
631 	case ICE_AQ_LINK_SPEED_2500MB:
632 		speed = "2.5 G";
633 		break;
634 	case ICE_AQ_LINK_SPEED_1000MB:
635 		speed = "1 G";
636 		break;
637 	case ICE_AQ_LINK_SPEED_100MB:
638 		speed = "100 M";
639 		break;
640 	default:
641 		speed = "Unknown";
642 		break;
643 	}
644 
645 	switch (vsi->port_info->fc.current_mode) {
646 	case ICE_FC_FULL:
647 		fc = "RX/TX";
648 		break;
649 	case ICE_FC_TX_PAUSE:
650 		fc = "TX";
651 		break;
652 	case ICE_FC_RX_PAUSE:
653 		fc = "RX";
654 		break;
655 	default:
656 		fc = "Unknown";
657 		break;
658 	}
659 
660 	netdev_info(vsi->netdev, "NIC Link is up %sbps, Flow Control: %s\n",
661 		    speed, fc);
662 }
663 
664 /**
665  * ice_init_link_events - enable/initialize link events
666  * @pi: pointer to the port_info instance
667  *
668  * Returns -EIO on failure, 0 on success
669  */
670 static int ice_init_link_events(struct ice_port_info *pi)
671 {
672 	u16 mask;
673 
674 	mask = ~((u16)(ICE_AQ_LINK_EVENT_UPDOWN | ICE_AQ_LINK_EVENT_MEDIA_NA |
675 		       ICE_AQ_LINK_EVENT_MODULE_QUAL_FAIL));
676 
677 	if (ice_aq_set_event_mask(pi->hw, pi->lport, mask, NULL)) {
678 		dev_dbg(ice_hw_to_dev(pi->hw),
679 			"Failed to set link event mask for port %d\n",
680 			pi->lport);
681 		return -EIO;
682 	}
683 
684 	if (ice_aq_get_link_info(pi, true, NULL, NULL)) {
685 		dev_dbg(ice_hw_to_dev(pi->hw),
686 			"Failed to enable link events for port %d\n",
687 			pi->lport);
688 		return -EIO;
689 	}
690 
691 	return 0;
692 }
693 
694 /**
695  * ice_vsi_link_event - update the vsi's netdev
696  * @vsi: the vsi on which the link event occurred
697  * @link_up: whether or not the vsi needs to be set up or down
698  */
699 static void ice_vsi_link_event(struct ice_vsi *vsi, bool link_up)
700 {
701 	if (!vsi || test_bit(__ICE_DOWN, vsi->state))
702 		return;
703 
704 	if (vsi->type == ICE_VSI_PF) {
705 		if (!vsi->netdev) {
706 			dev_dbg(&vsi->back->pdev->dev,
707 				"vsi->netdev is not initialized!\n");
708 			return;
709 		}
710 		if (link_up) {
711 			netif_carrier_on(vsi->netdev);
712 			netif_tx_wake_all_queues(vsi->netdev);
713 		} else {
714 			netif_carrier_off(vsi->netdev);
715 			netif_tx_stop_all_queues(vsi->netdev);
716 		}
717 	}
718 }
719 
720 /**
721  * ice_link_event - process the link event
722  * @pf: pf that the link event is associated with
723  * @pi: port_info for the port that the link event is associated with
724  *
725  * Returns -EIO if ice_get_link_status() fails
726  * Returns 0 on success
727  */
728 static int
729 ice_link_event(struct ice_pf *pf, struct ice_port_info *pi)
730 {
731 	u8 new_link_speed, old_link_speed;
732 	struct ice_phy_info *phy_info;
733 	bool new_link_same_as_old;
734 	bool new_link, old_link;
735 	u8 lport;
736 	u16 v;
737 
738 	phy_info = &pi->phy;
739 	phy_info->link_info_old = phy_info->link_info;
740 	/* Force ice_get_link_status() to update link info */
741 	phy_info->get_link_info = true;
742 
743 	old_link = (phy_info->link_info_old.link_info & ICE_AQ_LINK_UP);
744 	old_link_speed = phy_info->link_info_old.link_speed;
745 
746 	lport = pi->lport;
747 	if (ice_get_link_status(pi, &new_link)) {
748 		dev_dbg(&pf->pdev->dev,
749 			"Could not get link status for port %d\n", lport);
750 		return -EIO;
751 	}
752 
753 	new_link_speed = phy_info->link_info.link_speed;
754 
755 	new_link_same_as_old = (new_link == old_link &&
756 				new_link_speed == old_link_speed);
757 
758 	ice_for_each_vsi(pf, v) {
759 		struct ice_vsi *vsi = pf->vsi[v];
760 
761 		if (!vsi || !vsi->port_info)
762 			continue;
763 
764 		if (new_link_same_as_old &&
765 		    (test_bit(__ICE_DOWN, vsi->state) ||
766 		    new_link == netif_carrier_ok(vsi->netdev)))
767 			continue;
768 
769 		if (vsi->port_info->lport == lport) {
770 			ice_print_link_msg(vsi, new_link);
771 			ice_vsi_link_event(vsi, new_link);
772 		}
773 	}
774 
775 	return 0;
776 }
777 
778 /**
779  * ice_handle_link_event - handle link event via ARQ
780  * @pf: pf that the link event is associated with
781  *
782  * Return -EINVAL if port_info is null
783  * Return status on succes
784  */
785 static int ice_handle_link_event(struct ice_pf *pf)
786 {
787 	struct ice_port_info *port_info;
788 	int status;
789 
790 	port_info = pf->hw.port_info;
791 	if (!port_info)
792 		return -EINVAL;
793 
794 	status = ice_link_event(pf, port_info);
795 	if (status)
796 		dev_dbg(&pf->pdev->dev,
797 			"Could not process link event, error %d\n", status);
798 
799 	return status;
800 }
801 
802 /**
803  * __ice_clean_ctrlq - helper function to clean controlq rings
804  * @pf: ptr to struct ice_pf
805  * @q_type: specific Control queue type
806  */
807 static int __ice_clean_ctrlq(struct ice_pf *pf, enum ice_ctl_q q_type)
808 {
809 	struct ice_rq_event_info event;
810 	struct ice_hw *hw = &pf->hw;
811 	struct ice_ctl_q_info *cq;
812 	u16 pending, i = 0;
813 	const char *qtype;
814 	u32 oldval, val;
815 
816 	/* Do not clean control queue if/when PF reset fails */
817 	if (test_bit(__ICE_RESET_FAILED, pf->state))
818 		return 0;
819 
820 	switch (q_type) {
821 	case ICE_CTL_Q_ADMIN:
822 		cq = &hw->adminq;
823 		qtype = "Admin";
824 		break;
825 	default:
826 		dev_warn(&pf->pdev->dev, "Unknown control queue type 0x%x\n",
827 			 q_type);
828 		return 0;
829 	}
830 
831 	/* check for error indications - PF_xx_AxQLEN register layout for
832 	 * FW/MBX/SB are identical so just use defines for PF_FW_AxQLEN.
833 	 */
834 	val = rd32(hw, cq->rq.len);
835 	if (val & (PF_FW_ARQLEN_ARQVFE_M | PF_FW_ARQLEN_ARQOVFL_M |
836 		   PF_FW_ARQLEN_ARQCRIT_M)) {
837 		oldval = val;
838 		if (val & PF_FW_ARQLEN_ARQVFE_M)
839 			dev_dbg(&pf->pdev->dev,
840 				"%s Receive Queue VF Error detected\n", qtype);
841 		if (val & PF_FW_ARQLEN_ARQOVFL_M) {
842 			dev_dbg(&pf->pdev->dev,
843 				"%s Receive Queue Overflow Error detected\n",
844 				qtype);
845 		}
846 		if (val & PF_FW_ARQLEN_ARQCRIT_M)
847 			dev_dbg(&pf->pdev->dev,
848 				"%s Receive Queue Critical Error detected\n",
849 				qtype);
850 		val &= ~(PF_FW_ARQLEN_ARQVFE_M | PF_FW_ARQLEN_ARQOVFL_M |
851 			 PF_FW_ARQLEN_ARQCRIT_M);
852 		if (oldval != val)
853 			wr32(hw, cq->rq.len, val);
854 	}
855 
856 	val = rd32(hw, cq->sq.len);
857 	if (val & (PF_FW_ATQLEN_ATQVFE_M | PF_FW_ATQLEN_ATQOVFL_M |
858 		   PF_FW_ATQLEN_ATQCRIT_M)) {
859 		oldval = val;
860 		if (val & PF_FW_ATQLEN_ATQVFE_M)
861 			dev_dbg(&pf->pdev->dev,
862 				"%s Send Queue VF Error detected\n", qtype);
863 		if (val & PF_FW_ATQLEN_ATQOVFL_M) {
864 			dev_dbg(&pf->pdev->dev,
865 				"%s Send Queue Overflow Error detected\n",
866 				qtype);
867 		}
868 		if (val & PF_FW_ATQLEN_ATQCRIT_M)
869 			dev_dbg(&pf->pdev->dev,
870 				"%s Send Queue Critical Error detected\n",
871 				qtype);
872 		val &= ~(PF_FW_ATQLEN_ATQVFE_M | PF_FW_ATQLEN_ATQOVFL_M |
873 			 PF_FW_ATQLEN_ATQCRIT_M);
874 		if (oldval != val)
875 			wr32(hw, cq->sq.len, val);
876 	}
877 
878 	event.buf_len = cq->rq_buf_size;
879 	event.msg_buf = devm_kzalloc(&pf->pdev->dev, event.buf_len,
880 				     GFP_KERNEL);
881 	if (!event.msg_buf)
882 		return 0;
883 
884 	do {
885 		enum ice_status ret;
886 		u16 opcode;
887 
888 		ret = ice_clean_rq_elem(hw, cq, &event, &pending);
889 		if (ret == ICE_ERR_AQ_NO_WORK)
890 			break;
891 		if (ret) {
892 			dev_err(&pf->pdev->dev,
893 				"%s Receive Queue event error %d\n", qtype,
894 				ret);
895 			break;
896 		}
897 
898 		opcode = le16_to_cpu(event.desc.opcode);
899 
900 		switch (opcode) {
901 		case ice_aqc_opc_get_link_status:
902 			if (ice_handle_link_event(pf))
903 				dev_err(&pf->pdev->dev,
904 					"Could not handle link event");
905 			break;
906 		default:
907 			dev_dbg(&pf->pdev->dev,
908 				"%s Receive Queue unknown event 0x%04x ignored\n",
909 				qtype, opcode);
910 			break;
911 		}
912 	} while (pending && (i++ < ICE_DFLT_IRQ_WORK));
913 
914 	devm_kfree(&pf->pdev->dev, event.msg_buf);
915 
916 	return pending && (i == ICE_DFLT_IRQ_WORK);
917 }
918 
919 /**
920  * ice_clean_adminq_subtask - clean the AdminQ rings
921  * @pf: board private structure
922  */
923 static void ice_clean_adminq_subtask(struct ice_pf *pf)
924 {
925 	struct ice_hw *hw = &pf->hw;
926 	u32 val;
927 
928 	if (!test_bit(__ICE_ADMINQ_EVENT_PENDING, pf->state))
929 		return;
930 
931 	if (__ice_clean_ctrlq(pf, ICE_CTL_Q_ADMIN))
932 		return;
933 
934 	clear_bit(__ICE_ADMINQ_EVENT_PENDING, pf->state);
935 
936 	/* re-enable Admin queue interrupt causes */
937 	val = rd32(hw, PFINT_FW_CTL);
938 	wr32(hw, PFINT_FW_CTL, (val | PFINT_FW_CTL_CAUSE_ENA_M));
939 
940 	ice_flush(hw);
941 }
942 
943 /**
944  * ice_service_task_schedule - schedule the service task to wake up
945  * @pf: board private structure
946  *
947  * If not already scheduled, this puts the task into the work queue.
948  */
949 static void ice_service_task_schedule(struct ice_pf *pf)
950 {
951 	if (!test_bit(__ICE_DOWN, pf->state) &&
952 	    !test_and_set_bit(__ICE_SERVICE_SCHED, pf->state))
953 		queue_work(ice_wq, &pf->serv_task);
954 }
955 
956 /**
957  * ice_service_task_complete - finish up the service task
958  * @pf: board private structure
959  */
960 static void ice_service_task_complete(struct ice_pf *pf)
961 {
962 	WARN_ON(!test_bit(__ICE_SERVICE_SCHED, pf->state));
963 
964 	/* force memory (pf->state) to sync before next service task */
965 	smp_mb__before_atomic();
966 	clear_bit(__ICE_SERVICE_SCHED, pf->state);
967 }
968 
969 /**
970  * ice_service_timer - timer callback to schedule service task
971  * @t: pointer to timer_list
972  */
973 static void ice_service_timer(struct timer_list *t)
974 {
975 	struct ice_pf *pf = from_timer(pf, t, serv_tmr);
976 
977 	mod_timer(&pf->serv_tmr, round_jiffies(pf->serv_tmr_period + jiffies));
978 	ice_service_task_schedule(pf);
979 }
980 
981 /**
982  * ice_service_task - manage and run subtasks
983  * @work: pointer to work_struct contained by the PF struct
984  */
985 static void ice_service_task(struct work_struct *work)
986 {
987 	struct ice_pf *pf = container_of(work, struct ice_pf, serv_task);
988 	unsigned long start_time = jiffies;
989 
990 	/* subtasks */
991 
992 	/* process reset requests first */
993 	ice_reset_subtask(pf);
994 
995 	/* bail if a reset/recovery cycle is pending */
996 	if (ice_is_reset_recovery_pending(pf->state) ||
997 	    test_bit(__ICE_SUSPENDED, pf->state)) {
998 		ice_service_task_complete(pf);
999 		return;
1000 	}
1001 
1002 	ice_sync_fltr_subtask(pf);
1003 	ice_watchdog_subtask(pf);
1004 	ice_clean_adminq_subtask(pf);
1005 
1006 	/* Clear __ICE_SERVICE_SCHED flag to allow scheduling next event */
1007 	ice_service_task_complete(pf);
1008 
1009 	/* If the tasks have taken longer than one service timer period
1010 	 * or there is more work to be done, reset the service timer to
1011 	 * schedule the service task now.
1012 	 */
1013 	if (time_after(jiffies, (start_time + pf->serv_tmr_period)) ||
1014 	    test_bit(__ICE_ADMINQ_EVENT_PENDING, pf->state))
1015 		mod_timer(&pf->serv_tmr, jiffies);
1016 }
1017 
1018 /**
1019  * ice_set_ctrlq_len - helper function to set controlq length
1020  * @hw: pointer to the hw instance
1021  */
1022 static void ice_set_ctrlq_len(struct ice_hw *hw)
1023 {
1024 	hw->adminq.num_rq_entries = ICE_AQ_LEN;
1025 	hw->adminq.num_sq_entries = ICE_AQ_LEN;
1026 	hw->adminq.rq_buf_size = ICE_AQ_MAX_BUF_LEN;
1027 	hw->adminq.sq_buf_size = ICE_AQ_MAX_BUF_LEN;
1028 }
1029 
1030 /**
1031  * ice_irq_affinity_notify - Callback for affinity changes
1032  * @notify: context as to what irq was changed
1033  * @mask: the new affinity mask
1034  *
1035  * This is a callback function used by the irq_set_affinity_notifier function
1036  * so that we may register to receive changes to the irq affinity masks.
1037  */
1038 static void ice_irq_affinity_notify(struct irq_affinity_notify *notify,
1039 				    const cpumask_t *mask)
1040 {
1041 	struct ice_q_vector *q_vector =
1042 		container_of(notify, struct ice_q_vector, affinity_notify);
1043 
1044 	cpumask_copy(&q_vector->affinity_mask, mask);
1045 }
1046 
1047 /**
1048  * ice_irq_affinity_release - Callback for affinity notifier release
1049  * @ref: internal core kernel usage
1050  *
1051  * This is a callback function used by the irq_set_affinity_notifier function
1052  * to inform the current notification subscriber that they will no longer
1053  * receive notifications.
1054  */
1055 static void ice_irq_affinity_release(struct kref __always_unused *ref) {}
1056 
1057 /**
1058  * ice_vsi_dis_irq - Mask off queue interrupt generation on the VSI
1059  * @vsi: the VSI being un-configured
1060  */
1061 static void ice_vsi_dis_irq(struct ice_vsi *vsi)
1062 {
1063 	struct ice_pf *pf = vsi->back;
1064 	struct ice_hw *hw = &pf->hw;
1065 	int base = vsi->base_vector;
1066 	u32 val;
1067 	int i;
1068 
1069 	/* disable interrupt causation from each queue */
1070 	if (vsi->tx_rings) {
1071 		ice_for_each_txq(vsi, i) {
1072 			if (vsi->tx_rings[i]) {
1073 				u16 reg;
1074 
1075 				reg = vsi->tx_rings[i]->reg_idx;
1076 				val = rd32(hw, QINT_TQCTL(reg));
1077 				val &= ~QINT_TQCTL_CAUSE_ENA_M;
1078 				wr32(hw, QINT_TQCTL(reg), val);
1079 			}
1080 		}
1081 	}
1082 
1083 	if (vsi->rx_rings) {
1084 		ice_for_each_rxq(vsi, i) {
1085 			if (vsi->rx_rings[i]) {
1086 				u16 reg;
1087 
1088 				reg = vsi->rx_rings[i]->reg_idx;
1089 				val = rd32(hw, QINT_RQCTL(reg));
1090 				val &= ~QINT_RQCTL_CAUSE_ENA_M;
1091 				wr32(hw, QINT_RQCTL(reg), val);
1092 			}
1093 		}
1094 	}
1095 
1096 	/* disable each interrupt */
1097 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags)) {
1098 		for (i = vsi->base_vector;
1099 		     i < (vsi->num_q_vectors + vsi->base_vector); i++)
1100 			wr32(hw, GLINT_DYN_CTL(i), 0);
1101 
1102 		ice_flush(hw);
1103 		for (i = 0; i < vsi->num_q_vectors; i++)
1104 			synchronize_irq(pf->msix_entries[i + base].vector);
1105 	}
1106 }
1107 
1108 /**
1109  * ice_vsi_ena_irq - Enable IRQ for the given VSI
1110  * @vsi: the VSI being configured
1111  */
1112 static int ice_vsi_ena_irq(struct ice_vsi *vsi)
1113 {
1114 	struct ice_pf *pf = vsi->back;
1115 	struct ice_hw *hw = &pf->hw;
1116 
1117 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags)) {
1118 		int i;
1119 
1120 		for (i = 0; i < vsi->num_q_vectors; i++)
1121 			ice_irq_dynamic_ena(hw, vsi, vsi->q_vectors[i]);
1122 	}
1123 
1124 	ice_flush(hw);
1125 	return 0;
1126 }
1127 
1128 /**
1129  * ice_vsi_delete - delete a VSI from the switch
1130  * @vsi: pointer to VSI being removed
1131  */
1132 static void ice_vsi_delete(struct ice_vsi *vsi)
1133 {
1134 	struct ice_pf *pf = vsi->back;
1135 	struct ice_vsi_ctx ctxt;
1136 	enum ice_status status;
1137 
1138 	ctxt.vsi_num = vsi->vsi_num;
1139 
1140 	memcpy(&ctxt.info, &vsi->info, sizeof(struct ice_aqc_vsi_props));
1141 
1142 	status = ice_aq_free_vsi(&pf->hw, &ctxt, false, NULL);
1143 	if (status)
1144 		dev_err(&pf->pdev->dev, "Failed to delete VSI %i in FW\n",
1145 			vsi->vsi_num);
1146 }
1147 
1148 /**
1149  * ice_vsi_req_irq_msix - get MSI-X vectors from the OS for the VSI
1150  * @vsi: the VSI being configured
1151  * @basename: name for the vector
1152  */
1153 static int ice_vsi_req_irq_msix(struct ice_vsi *vsi, char *basename)
1154 {
1155 	int q_vectors = vsi->num_q_vectors;
1156 	struct ice_pf *pf = vsi->back;
1157 	int base = vsi->base_vector;
1158 	int rx_int_idx = 0;
1159 	int tx_int_idx = 0;
1160 	int vector, err;
1161 	int irq_num;
1162 
1163 	for (vector = 0; vector < q_vectors; vector++) {
1164 		struct ice_q_vector *q_vector = vsi->q_vectors[vector];
1165 
1166 		irq_num = pf->msix_entries[base + vector].vector;
1167 
1168 		if (q_vector->tx.ring && q_vector->rx.ring) {
1169 			snprintf(q_vector->name, sizeof(q_vector->name) - 1,
1170 				 "%s-%s-%d", basename, "TxRx", rx_int_idx++);
1171 			tx_int_idx++;
1172 		} else if (q_vector->rx.ring) {
1173 			snprintf(q_vector->name, sizeof(q_vector->name) - 1,
1174 				 "%s-%s-%d", basename, "rx", rx_int_idx++);
1175 		} else if (q_vector->tx.ring) {
1176 			snprintf(q_vector->name, sizeof(q_vector->name) - 1,
1177 				 "%s-%s-%d", basename, "tx", tx_int_idx++);
1178 		} else {
1179 			/* skip this unused q_vector */
1180 			continue;
1181 		}
1182 		err = devm_request_irq(&pf->pdev->dev,
1183 				       pf->msix_entries[base + vector].vector,
1184 				       vsi->irq_handler, 0, q_vector->name,
1185 				       q_vector);
1186 		if (err) {
1187 			netdev_err(vsi->netdev,
1188 				   "MSIX request_irq failed, error: %d\n", err);
1189 			goto free_q_irqs;
1190 		}
1191 
1192 		/* register for affinity change notifications */
1193 		q_vector->affinity_notify.notify = ice_irq_affinity_notify;
1194 		q_vector->affinity_notify.release = ice_irq_affinity_release;
1195 		irq_set_affinity_notifier(irq_num, &q_vector->affinity_notify);
1196 
1197 		/* assign the mask for this irq */
1198 		irq_set_affinity_hint(irq_num, &q_vector->affinity_mask);
1199 	}
1200 
1201 	vsi->irqs_ready = true;
1202 	return 0;
1203 
1204 free_q_irqs:
1205 	while (vector) {
1206 		vector--;
1207 		irq_num = pf->msix_entries[base + vector].vector,
1208 		irq_set_affinity_notifier(irq_num, NULL);
1209 		irq_set_affinity_hint(irq_num, NULL);
1210 		devm_free_irq(&pf->pdev->dev, irq_num, &vsi->q_vectors[vector]);
1211 	}
1212 	return err;
1213 }
1214 
1215 /**
1216  * ice_vsi_set_rss_params - Setup RSS capabilities per VSI type
1217  * @vsi: the VSI being configured
1218  */
1219 static void ice_vsi_set_rss_params(struct ice_vsi *vsi)
1220 {
1221 	struct ice_hw_common_caps *cap;
1222 	struct ice_pf *pf = vsi->back;
1223 
1224 	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags)) {
1225 		vsi->rss_size = 1;
1226 		return;
1227 	}
1228 
1229 	cap = &pf->hw.func_caps.common_cap;
1230 	switch (vsi->type) {
1231 	case ICE_VSI_PF:
1232 		/* PF VSI will inherit RSS instance of PF */
1233 		vsi->rss_table_size = cap->rss_table_size;
1234 		vsi->rss_size = min_t(int, num_online_cpus(),
1235 				      BIT(cap->rss_table_entry_width));
1236 		vsi->rss_lut_type = ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_PF;
1237 		break;
1238 	default:
1239 		dev_warn(&pf->pdev->dev, "Unknown VSI type %d\n", vsi->type);
1240 		break;
1241 	}
1242 }
1243 
1244 /**
1245  * ice_vsi_setup_q_map - Setup a VSI queue map
1246  * @vsi: the VSI being configured
1247  * @ctxt: VSI context structure
1248  */
1249 static void ice_vsi_setup_q_map(struct ice_vsi *vsi, struct ice_vsi_ctx *ctxt)
1250 {
1251 	u16 offset = 0, qmap = 0, numq_tc;
1252 	u16 pow = 0, max_rss = 0, qcount;
1253 	u16 qcount_tx = vsi->alloc_txq;
1254 	u16 qcount_rx = vsi->alloc_rxq;
1255 	bool ena_tc0 = false;
1256 	int i;
1257 
1258 	/* at least TC0 should be enabled by default */
1259 	if (vsi->tc_cfg.numtc) {
1260 		if (!(vsi->tc_cfg.ena_tc & BIT(0)))
1261 			ena_tc0 =  true;
1262 	} else {
1263 		ena_tc0 =  true;
1264 	}
1265 
1266 	if (ena_tc0) {
1267 		vsi->tc_cfg.numtc++;
1268 		vsi->tc_cfg.ena_tc |= 1;
1269 	}
1270 
1271 	numq_tc = qcount_rx / vsi->tc_cfg.numtc;
1272 
1273 	/* TC mapping is a function of the number of Rx queues assigned to the
1274 	 * VSI for each traffic class and the offset of these queues.
1275 	 * The first 10 bits are for queue offset for TC0, next 4 bits for no:of
1276 	 * queues allocated to TC0. No:of queues is a power-of-2.
1277 	 *
1278 	 * If TC is not enabled, the queue offset is set to 0, and allocate one
1279 	 * queue, this way, traffic for the given TC will be sent to the default
1280 	 * queue.
1281 	 *
1282 	 * Setup number and offset of Rx queues for all TCs for the VSI
1283 	 */
1284 
1285 	/* qcount will change if RSS is enabled */
1286 	if (test_bit(ICE_FLAG_RSS_ENA, vsi->back->flags)) {
1287 		if (vsi->type == ICE_VSI_PF)
1288 			max_rss = ICE_MAX_LG_RSS_QS;
1289 		else
1290 			max_rss = ICE_MAX_SMALL_RSS_QS;
1291 
1292 		qcount = min_t(int, numq_tc, max_rss);
1293 		qcount = min_t(int, qcount, vsi->rss_size);
1294 	} else {
1295 		qcount = numq_tc;
1296 	}
1297 
1298 	/* find higher power-of-2 of qcount */
1299 	pow = ilog2(qcount);
1300 
1301 	if (!is_power_of_2(qcount))
1302 		pow++;
1303 
1304 	for (i = 0; i < ICE_MAX_TRAFFIC_CLASS; i++) {
1305 		if (!(vsi->tc_cfg.ena_tc & BIT(i))) {
1306 			/* TC is not enabled */
1307 			vsi->tc_cfg.tc_info[i].qoffset = 0;
1308 			vsi->tc_cfg.tc_info[i].qcount = 1;
1309 			ctxt->info.tc_mapping[i] = 0;
1310 			continue;
1311 		}
1312 
1313 		/* TC is enabled */
1314 		vsi->tc_cfg.tc_info[i].qoffset = offset;
1315 		vsi->tc_cfg.tc_info[i].qcount = qcount;
1316 
1317 		qmap = ((offset << ICE_AQ_VSI_TC_Q_OFFSET_S) &
1318 			ICE_AQ_VSI_TC_Q_OFFSET_M) |
1319 			((pow << ICE_AQ_VSI_TC_Q_NUM_S) &
1320 			 ICE_AQ_VSI_TC_Q_NUM_M);
1321 		offset += qcount;
1322 		ctxt->info.tc_mapping[i] = cpu_to_le16(qmap);
1323 	}
1324 
1325 	vsi->num_txq = qcount_tx;
1326 	vsi->num_rxq = offset;
1327 
1328 	/* Rx queue mapping */
1329 	ctxt->info.mapping_flags |= cpu_to_le16(ICE_AQ_VSI_Q_MAP_CONTIG);
1330 	/* q_mapping buffer holds the info for the first queue allocated for
1331 	 * this VSI in the PF space and also the number of queues associated
1332 	 * with this VSI.
1333 	 */
1334 	ctxt->info.q_mapping[0] = cpu_to_le16(vsi->rxq_map[0]);
1335 	ctxt->info.q_mapping[1] = cpu_to_le16(vsi->num_rxq);
1336 }
1337 
1338 /**
1339  * ice_set_dflt_vsi_ctx - Set default VSI context before adding a VSI
1340  * @ctxt: the VSI context being set
1341  *
1342  * This initializes a default VSI context for all sections except the Queues.
1343  */
1344 static void ice_set_dflt_vsi_ctx(struct ice_vsi_ctx *ctxt)
1345 {
1346 	u32 table = 0;
1347 
1348 	memset(&ctxt->info, 0, sizeof(ctxt->info));
1349 	/* VSI's should be allocated from shared pool */
1350 	ctxt->alloc_from_pool = true;
1351 	/* Src pruning enabled by default */
1352 	ctxt->info.sw_flags = ICE_AQ_VSI_SW_FLAG_SRC_PRUNE;
1353 	/* Traffic from VSI can be sent to LAN */
1354 	ctxt->info.sw_flags2 = ICE_AQ_VSI_SW_FLAG_LAN_ENA;
1355 	/* Allow all packets untagged/tagged */
1356 	ctxt->info.port_vlan_flags = ((ICE_AQ_VSI_PVLAN_MODE_ALL &
1357 				       ICE_AQ_VSI_PVLAN_MODE_M) >>
1358 				      ICE_AQ_VSI_PVLAN_MODE_S);
1359 	/* Show VLAN/UP from packets in Rx descriptors */
1360 	ctxt->info.port_vlan_flags |= ((ICE_AQ_VSI_PVLAN_EMOD_STR_BOTH &
1361 					ICE_AQ_VSI_PVLAN_EMOD_M) >>
1362 				       ICE_AQ_VSI_PVLAN_EMOD_S);
1363 	/* Have 1:1 UP mapping for both ingress/egress tables */
1364 	table |= ICE_UP_TABLE_TRANSLATE(0, 0);
1365 	table |= ICE_UP_TABLE_TRANSLATE(1, 1);
1366 	table |= ICE_UP_TABLE_TRANSLATE(2, 2);
1367 	table |= ICE_UP_TABLE_TRANSLATE(3, 3);
1368 	table |= ICE_UP_TABLE_TRANSLATE(4, 4);
1369 	table |= ICE_UP_TABLE_TRANSLATE(5, 5);
1370 	table |= ICE_UP_TABLE_TRANSLATE(6, 6);
1371 	table |= ICE_UP_TABLE_TRANSLATE(7, 7);
1372 	ctxt->info.ingress_table = cpu_to_le32(table);
1373 	ctxt->info.egress_table = cpu_to_le32(table);
1374 	/* Have 1:1 UP mapping for outer to inner UP table */
1375 	ctxt->info.outer_up_table = cpu_to_le32(table);
1376 	/* No Outer tag support outer_tag_flags remains to zero */
1377 }
1378 
1379 /**
1380  * ice_set_rss_vsi_ctx - Set RSS VSI context before adding a VSI
1381  * @ctxt: the VSI context being set
1382  * @vsi: the VSI being configured
1383  */
1384 static void ice_set_rss_vsi_ctx(struct ice_vsi_ctx *ctxt, struct ice_vsi *vsi)
1385 {
1386 	u8 lut_type, hash_type;
1387 
1388 	switch (vsi->type) {
1389 	case ICE_VSI_PF:
1390 		/* PF VSI will inherit RSS instance of PF */
1391 		lut_type = ICE_AQ_VSI_Q_OPT_RSS_LUT_PF;
1392 		hash_type = ICE_AQ_VSI_Q_OPT_RSS_TPLZ;
1393 		break;
1394 	default:
1395 		dev_warn(&vsi->back->pdev->dev, "Unknown VSI type %d\n",
1396 			 vsi->type);
1397 		return;
1398 	}
1399 
1400 	ctxt->info.q_opt_rss = ((lut_type << ICE_AQ_VSI_Q_OPT_RSS_LUT_S) &
1401 				ICE_AQ_VSI_Q_OPT_RSS_LUT_M) |
1402 				((hash_type << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) &
1403 				 ICE_AQ_VSI_Q_OPT_RSS_HASH_M);
1404 }
1405 
1406 /**
1407  * ice_vsi_add - Create a new VSI or fetch preallocated VSI
1408  * @vsi: the VSI being configured
1409  *
1410  * This initializes a VSI context depending on the VSI type to be added and
1411  * passes it down to the add_vsi aq command to create a new VSI.
1412  */
1413 static int ice_vsi_add(struct ice_vsi *vsi)
1414 {
1415 	struct ice_vsi_ctx ctxt = { 0 };
1416 	struct ice_pf *pf = vsi->back;
1417 	struct ice_hw *hw = &pf->hw;
1418 	int ret = 0;
1419 
1420 	switch (vsi->type) {
1421 	case ICE_VSI_PF:
1422 		ctxt.flags = ICE_AQ_VSI_TYPE_PF;
1423 		break;
1424 	default:
1425 		return -ENODEV;
1426 	}
1427 
1428 	ice_set_dflt_vsi_ctx(&ctxt);
1429 	/* if the switch is in VEB mode, allow VSI loopback */
1430 	if (vsi->vsw->bridge_mode == BRIDGE_MODE_VEB)
1431 		ctxt.info.sw_flags |= ICE_AQ_VSI_SW_FLAG_ALLOW_LB;
1432 
1433 	/* Set LUT type and HASH type if RSS is enabled */
1434 	if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
1435 		ice_set_rss_vsi_ctx(&ctxt, vsi);
1436 
1437 	ctxt.info.sw_id = vsi->port_info->sw_id;
1438 	ice_vsi_setup_q_map(vsi, &ctxt);
1439 
1440 	ret = ice_aq_add_vsi(hw, &ctxt, NULL);
1441 	if (ret) {
1442 		dev_err(&vsi->back->pdev->dev,
1443 			"Add VSI AQ call failed, err %d\n", ret);
1444 		return -EIO;
1445 	}
1446 	vsi->info = ctxt.info;
1447 	vsi->vsi_num = ctxt.vsi_num;
1448 
1449 	return ret;
1450 }
1451 
1452 /**
1453  * ice_vsi_release_msix - Clear the queue to Interrupt mapping in HW
1454  * @vsi: the VSI being cleaned up
1455  */
1456 static void ice_vsi_release_msix(struct ice_vsi *vsi)
1457 {
1458 	struct ice_pf *pf = vsi->back;
1459 	u16 vector = vsi->base_vector;
1460 	struct ice_hw *hw = &pf->hw;
1461 	u32 txq = 0;
1462 	u32 rxq = 0;
1463 	int i, q;
1464 
1465 	for (i = 0; i < vsi->num_q_vectors; i++, vector++) {
1466 		struct ice_q_vector *q_vector = vsi->q_vectors[i];
1467 
1468 		wr32(hw, GLINT_ITR(ICE_RX_ITR, vector), 0);
1469 		wr32(hw, GLINT_ITR(ICE_TX_ITR, vector), 0);
1470 		for (q = 0; q < q_vector->num_ring_tx; q++) {
1471 			wr32(hw, QINT_TQCTL(vsi->txq_map[txq]), 0);
1472 			txq++;
1473 		}
1474 
1475 		for (q = 0; q < q_vector->num_ring_rx; q++) {
1476 			wr32(hw, QINT_RQCTL(vsi->rxq_map[rxq]), 0);
1477 			rxq++;
1478 		}
1479 	}
1480 
1481 	ice_flush(hw);
1482 }
1483 
1484 /**
1485  * ice_vsi_clear_rings - Deallocates the Tx and Rx rings for VSI
1486  * @vsi: the VSI having rings deallocated
1487  */
1488 static void ice_vsi_clear_rings(struct ice_vsi *vsi)
1489 {
1490 	int i;
1491 
1492 	if (vsi->tx_rings) {
1493 		for (i = 0; i < vsi->alloc_txq; i++) {
1494 			if (vsi->tx_rings[i]) {
1495 				kfree_rcu(vsi->tx_rings[i], rcu);
1496 				vsi->tx_rings[i] = NULL;
1497 			}
1498 		}
1499 	}
1500 	if (vsi->rx_rings) {
1501 		for (i = 0; i < vsi->alloc_rxq; i++) {
1502 			if (vsi->rx_rings[i]) {
1503 				kfree_rcu(vsi->rx_rings[i], rcu);
1504 				vsi->rx_rings[i] = NULL;
1505 			}
1506 		}
1507 	}
1508 }
1509 
1510 /**
1511  * ice_vsi_alloc_rings - Allocates Tx and Rx rings for the VSI
1512  * @vsi: VSI which is having rings allocated
1513  */
1514 static int ice_vsi_alloc_rings(struct ice_vsi *vsi)
1515 {
1516 	struct ice_pf *pf = vsi->back;
1517 	int i;
1518 
1519 	/* Allocate tx_rings */
1520 	for (i = 0; i < vsi->alloc_txq; i++) {
1521 		struct ice_ring *ring;
1522 
1523 		/* allocate with kzalloc(), free with kfree_rcu() */
1524 		ring = kzalloc(sizeof(*ring), GFP_KERNEL);
1525 
1526 		if (!ring)
1527 			goto err_out;
1528 
1529 		ring->q_index = i;
1530 		ring->reg_idx = vsi->txq_map[i];
1531 		ring->ring_active = false;
1532 		ring->vsi = vsi;
1533 		ring->netdev = vsi->netdev;
1534 		ring->dev = &pf->pdev->dev;
1535 		ring->count = vsi->num_desc;
1536 
1537 		vsi->tx_rings[i] = ring;
1538 	}
1539 
1540 	/* Allocate rx_rings */
1541 	for (i = 0; i < vsi->alloc_rxq; i++) {
1542 		struct ice_ring *ring;
1543 
1544 		/* allocate with kzalloc(), free with kfree_rcu() */
1545 		ring = kzalloc(sizeof(*ring), GFP_KERNEL);
1546 		if (!ring)
1547 			goto err_out;
1548 
1549 		ring->q_index = i;
1550 		ring->reg_idx = vsi->rxq_map[i];
1551 		ring->ring_active = false;
1552 		ring->vsi = vsi;
1553 		ring->netdev = vsi->netdev;
1554 		ring->dev = &pf->pdev->dev;
1555 		ring->count = vsi->num_desc;
1556 		vsi->rx_rings[i] = ring;
1557 	}
1558 
1559 	return 0;
1560 
1561 err_out:
1562 	ice_vsi_clear_rings(vsi);
1563 	return -ENOMEM;
1564 }
1565 
1566 /**
1567  * ice_vsi_free_irq - Free the irq association with the OS
1568  * @vsi: the VSI being configured
1569  */
1570 static void ice_vsi_free_irq(struct ice_vsi *vsi)
1571 {
1572 	struct ice_pf *pf = vsi->back;
1573 	int base = vsi->base_vector;
1574 
1575 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags)) {
1576 		int i;
1577 
1578 		if (!vsi->q_vectors || !vsi->irqs_ready)
1579 			return;
1580 
1581 		vsi->irqs_ready = false;
1582 		for (i = 0; i < vsi->num_q_vectors; i++) {
1583 			u16 vector = i + base;
1584 			int irq_num;
1585 
1586 			irq_num = pf->msix_entries[vector].vector;
1587 
1588 			/* free only the irqs that were actually requested */
1589 			if (!vsi->q_vectors[i] ||
1590 			    !(vsi->q_vectors[i]->num_ring_tx ||
1591 			      vsi->q_vectors[i]->num_ring_rx))
1592 				continue;
1593 
1594 			/* clear the affinity notifier in the IRQ descriptor */
1595 			irq_set_affinity_notifier(irq_num, NULL);
1596 
1597 			/* clear the affinity_mask in the IRQ descriptor */
1598 			irq_set_affinity_hint(irq_num, NULL);
1599 			synchronize_irq(irq_num);
1600 			devm_free_irq(&pf->pdev->dev, irq_num,
1601 				      vsi->q_vectors[i]);
1602 		}
1603 		ice_vsi_release_msix(vsi);
1604 	}
1605 }
1606 
1607 /**
1608  * ice_vsi_cfg_msix - MSIX mode Interrupt Config in the HW
1609  * @vsi: the VSI being configured
1610  */
1611 static void ice_vsi_cfg_msix(struct ice_vsi *vsi)
1612 {
1613 	struct ice_pf *pf = vsi->back;
1614 	u16 vector = vsi->base_vector;
1615 	struct ice_hw *hw = &pf->hw;
1616 	u32 txq = 0, rxq = 0;
1617 	int i, q, itr;
1618 	u8 itr_gran;
1619 
1620 	for (i = 0; i < vsi->num_q_vectors; i++, vector++) {
1621 		struct ice_q_vector *q_vector = vsi->q_vectors[i];
1622 
1623 		itr_gran = hw->itr_gran_200;
1624 
1625 		if (q_vector->num_ring_rx) {
1626 			q_vector->rx.itr =
1627 				ITR_TO_REG(vsi->rx_rings[rxq]->rx_itr_setting,
1628 					   itr_gran);
1629 			q_vector->rx.latency_range = ICE_LOW_LATENCY;
1630 		}
1631 
1632 		if (q_vector->num_ring_tx) {
1633 			q_vector->tx.itr =
1634 				ITR_TO_REG(vsi->tx_rings[txq]->tx_itr_setting,
1635 					   itr_gran);
1636 			q_vector->tx.latency_range = ICE_LOW_LATENCY;
1637 		}
1638 		wr32(hw, GLINT_ITR(ICE_RX_ITR, vector), q_vector->rx.itr);
1639 		wr32(hw, GLINT_ITR(ICE_TX_ITR, vector), q_vector->tx.itr);
1640 
1641 		/* Both Transmit Queue Interrupt Cause Control register
1642 		 * and Receive Queue Interrupt Cause control register
1643 		 * expects MSIX_INDX field to be the vector index
1644 		 * within the function space and not the absolute
1645 		 * vector index across PF or across device.
1646 		 * For SR-IOV VF VSIs queue vector index always starts
1647 		 * with 1 since first vector index(0) is used for OICR
1648 		 * in VF space. Since VMDq and other PF VSIs are withtin
1649 		 * the PF function space, use the vector index thats
1650 		 * tracked for this PF.
1651 		 */
1652 		for (q = 0; q < q_vector->num_ring_tx; q++) {
1653 			u32 val;
1654 
1655 			itr = ICE_TX_ITR;
1656 			val = QINT_TQCTL_CAUSE_ENA_M |
1657 			      (itr << QINT_TQCTL_ITR_INDX_S)  |
1658 			      (vector << QINT_TQCTL_MSIX_INDX_S);
1659 			wr32(hw, QINT_TQCTL(vsi->txq_map[txq]), val);
1660 			txq++;
1661 		}
1662 
1663 		for (q = 0; q < q_vector->num_ring_rx; q++) {
1664 			u32 val;
1665 
1666 			itr = ICE_RX_ITR;
1667 			val = QINT_RQCTL_CAUSE_ENA_M |
1668 			      (itr << QINT_RQCTL_ITR_INDX_S)  |
1669 			      (vector << QINT_RQCTL_MSIX_INDX_S);
1670 			wr32(hw, QINT_RQCTL(vsi->rxq_map[rxq]), val);
1671 			rxq++;
1672 		}
1673 	}
1674 
1675 	ice_flush(hw);
1676 }
1677 
1678 /**
1679  * ice_ena_misc_vector - enable the non-queue interrupts
1680  * @pf: board private structure
1681  */
1682 static void ice_ena_misc_vector(struct ice_pf *pf)
1683 {
1684 	struct ice_hw *hw = &pf->hw;
1685 	u32 val;
1686 
1687 	/* clear things first */
1688 	wr32(hw, PFINT_OICR_ENA, 0);	/* disable all */
1689 	rd32(hw, PFINT_OICR);		/* read to clear */
1690 
1691 	val = (PFINT_OICR_HLP_RDY_M |
1692 	       PFINT_OICR_CPM_RDY_M |
1693 	       PFINT_OICR_ECC_ERR_M |
1694 	       PFINT_OICR_MAL_DETECT_M |
1695 	       PFINT_OICR_GRST_M |
1696 	       PFINT_OICR_PCI_EXCEPTION_M |
1697 	       PFINT_OICR_GPIO_M |
1698 	       PFINT_OICR_STORM_DETECT_M |
1699 	       PFINT_OICR_HMC_ERR_M);
1700 
1701 	wr32(hw, PFINT_OICR_ENA, val);
1702 
1703 	/* SW_ITR_IDX = 0, but don't change INTENA */
1704 	wr32(hw, GLINT_DYN_CTL(pf->oicr_idx),
1705 	     GLINT_DYN_CTL_SW_ITR_INDX_M | GLINT_DYN_CTL_INTENA_MSK_M);
1706 }
1707 
1708 /**
1709  * ice_misc_intr - misc interrupt handler
1710  * @irq: interrupt number
1711  * @data: pointer to a q_vector
1712  */
1713 static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)
1714 {
1715 	struct ice_pf *pf = (struct ice_pf *)data;
1716 	struct ice_hw *hw = &pf->hw;
1717 	irqreturn_t ret = IRQ_NONE;
1718 	u32 oicr, ena_mask;
1719 
1720 	set_bit(__ICE_ADMINQ_EVENT_PENDING, pf->state);
1721 
1722 	oicr = rd32(hw, PFINT_OICR);
1723 	ena_mask = rd32(hw, PFINT_OICR_ENA);
1724 
1725 	if (oicr & PFINT_OICR_GRST_M) {
1726 		u32 reset;
1727 		/* we have a reset warning */
1728 		ena_mask &= ~PFINT_OICR_GRST_M;
1729 		reset = (rd32(hw, GLGEN_RSTAT) & GLGEN_RSTAT_RESET_TYPE_M) >>
1730 			GLGEN_RSTAT_RESET_TYPE_S;
1731 
1732 		if (reset == ICE_RESET_CORER)
1733 			pf->corer_count++;
1734 		else if (reset == ICE_RESET_GLOBR)
1735 			pf->globr_count++;
1736 		else
1737 			pf->empr_count++;
1738 
1739 		/* If a reset cycle isn't already in progress, we set a bit in
1740 		 * pf->state so that the service task can start a reset/rebuild.
1741 		 * We also make note of which reset happened so that peer
1742 		 * devices/drivers can be informed.
1743 		 */
1744 		if (!test_bit(__ICE_RESET_RECOVERY_PENDING, pf->state)) {
1745 			if (reset == ICE_RESET_CORER)
1746 				set_bit(__ICE_CORER_RECV, pf->state);
1747 			else if (reset == ICE_RESET_GLOBR)
1748 				set_bit(__ICE_GLOBR_RECV, pf->state);
1749 			else
1750 				set_bit(__ICE_EMPR_RECV, pf->state);
1751 
1752 			set_bit(__ICE_RESET_RECOVERY_PENDING, pf->state);
1753 		}
1754 	}
1755 
1756 	if (oicr & PFINT_OICR_HMC_ERR_M) {
1757 		ena_mask &= ~PFINT_OICR_HMC_ERR_M;
1758 		dev_dbg(&pf->pdev->dev,
1759 			"HMC Error interrupt - info 0x%x, data 0x%x\n",
1760 			rd32(hw, PFHMC_ERRORINFO),
1761 			rd32(hw, PFHMC_ERRORDATA));
1762 	}
1763 
1764 	/* Report and mask off any remaining unexpected interrupts */
1765 	oicr &= ena_mask;
1766 	if (oicr) {
1767 		dev_dbg(&pf->pdev->dev, "unhandled interrupt oicr=0x%08x\n",
1768 			oicr);
1769 		/* If a critical error is pending there is no choice but to
1770 		 * reset the device.
1771 		 */
1772 		if (oicr & (PFINT_OICR_PE_CRITERR_M |
1773 			    PFINT_OICR_PCI_EXCEPTION_M |
1774 			    PFINT_OICR_ECC_ERR_M)) {
1775 			set_bit(__ICE_PFR_REQ, pf->state);
1776 			ice_service_task_schedule(pf);
1777 		}
1778 		ena_mask &= ~oicr;
1779 	}
1780 	ret = IRQ_HANDLED;
1781 
1782 	/* re-enable interrupt causes that are not handled during this pass */
1783 	wr32(hw, PFINT_OICR_ENA, ena_mask);
1784 	if (!test_bit(__ICE_DOWN, pf->state)) {
1785 		ice_service_task_schedule(pf);
1786 		ice_irq_dynamic_ena(hw, NULL, NULL);
1787 	}
1788 
1789 	return ret;
1790 }
1791 
1792 /**
1793  * ice_vsi_map_rings_to_vectors - Map VSI rings to interrupt vectors
1794  * @vsi: the VSI being configured
1795  *
1796  * This function maps descriptor rings to the queue-specific vectors allotted
1797  * through the MSI-X enabling code. On a constrained vector budget, we map Tx
1798  * and Rx rings to the vector as "efficiently" as possible.
1799  */
1800 static void ice_vsi_map_rings_to_vectors(struct ice_vsi *vsi)
1801 {
1802 	int q_vectors = vsi->num_q_vectors;
1803 	int tx_rings_rem, rx_rings_rem;
1804 	int v_id;
1805 
1806 	/* initially assigning remaining rings count to VSIs num queue value */
1807 	tx_rings_rem = vsi->num_txq;
1808 	rx_rings_rem = vsi->num_rxq;
1809 
1810 	for (v_id = 0; v_id < q_vectors; v_id++) {
1811 		struct ice_q_vector *q_vector = vsi->q_vectors[v_id];
1812 		int tx_rings_per_v, rx_rings_per_v, q_id, q_base;
1813 
1814 		/* Tx rings mapping to vector */
1815 		tx_rings_per_v = DIV_ROUND_UP(tx_rings_rem, q_vectors - v_id);
1816 		q_vector->num_ring_tx = tx_rings_per_v;
1817 		q_vector->tx.ring = NULL;
1818 		q_base = vsi->num_txq - tx_rings_rem;
1819 
1820 		for (q_id = q_base; q_id < (q_base + tx_rings_per_v); q_id++) {
1821 			struct ice_ring *tx_ring = vsi->tx_rings[q_id];
1822 
1823 			tx_ring->q_vector = q_vector;
1824 			tx_ring->next = q_vector->tx.ring;
1825 			q_vector->tx.ring = tx_ring;
1826 		}
1827 		tx_rings_rem -= tx_rings_per_v;
1828 
1829 		/* Rx rings mapping to vector */
1830 		rx_rings_per_v = DIV_ROUND_UP(rx_rings_rem, q_vectors - v_id);
1831 		q_vector->num_ring_rx = rx_rings_per_v;
1832 		q_vector->rx.ring = NULL;
1833 		q_base = vsi->num_rxq - rx_rings_rem;
1834 
1835 		for (q_id = q_base; q_id < (q_base + rx_rings_per_v); q_id++) {
1836 			struct ice_ring *rx_ring = vsi->rx_rings[q_id];
1837 
1838 			rx_ring->q_vector = q_vector;
1839 			rx_ring->next = q_vector->rx.ring;
1840 			q_vector->rx.ring = rx_ring;
1841 		}
1842 		rx_rings_rem -= rx_rings_per_v;
1843 	}
1844 }
1845 
1846 /**
1847  * ice_vsi_set_num_qs - Set num queues, descriptors and vectors for a VSI
1848  * @vsi: the VSI being configured
1849  *
1850  * Return 0 on success and a negative value on error
1851  */
1852 static void ice_vsi_set_num_qs(struct ice_vsi *vsi)
1853 {
1854 	struct ice_pf *pf = vsi->back;
1855 
1856 	switch (vsi->type) {
1857 	case ICE_VSI_PF:
1858 		vsi->alloc_txq = pf->num_lan_tx;
1859 		vsi->alloc_rxq = pf->num_lan_rx;
1860 		vsi->num_desc = ALIGN(ICE_DFLT_NUM_DESC, ICE_REQ_DESC_MULTIPLE);
1861 		vsi->num_q_vectors = max_t(int, pf->num_lan_rx, pf->num_lan_tx);
1862 		break;
1863 	default:
1864 		dev_warn(&vsi->back->pdev->dev, "Unknown VSI type %d\n",
1865 			 vsi->type);
1866 		break;
1867 	}
1868 }
1869 
1870 /**
1871  * ice_vsi_alloc_arrays - Allocate queue and vector pointer arrays for the vsi
1872  * @vsi: VSI pointer
1873  * @alloc_qvectors: a bool to specify if q_vectors need to be allocated.
1874  *
1875  * On error: returns error code (negative)
1876  * On success: returns 0
1877  */
1878 static int ice_vsi_alloc_arrays(struct ice_vsi *vsi, bool alloc_qvectors)
1879 {
1880 	struct ice_pf *pf = vsi->back;
1881 
1882 	/* allocate memory for both Tx and Rx ring pointers */
1883 	vsi->tx_rings = devm_kcalloc(&pf->pdev->dev, vsi->alloc_txq,
1884 				     sizeof(struct ice_ring *), GFP_KERNEL);
1885 	if (!vsi->tx_rings)
1886 		goto err_txrings;
1887 
1888 	vsi->rx_rings = devm_kcalloc(&pf->pdev->dev, vsi->alloc_rxq,
1889 				     sizeof(struct ice_ring *), GFP_KERNEL);
1890 	if (!vsi->rx_rings)
1891 		goto err_rxrings;
1892 
1893 	if (alloc_qvectors) {
1894 		/* allocate memory for q_vector pointers */
1895 		vsi->q_vectors = devm_kcalloc(&pf->pdev->dev,
1896 					      vsi->num_q_vectors,
1897 					      sizeof(struct ice_q_vector *),
1898 					      GFP_KERNEL);
1899 		if (!vsi->q_vectors)
1900 			goto err_vectors;
1901 	}
1902 
1903 	return 0;
1904 
1905 err_vectors:
1906 	devm_kfree(&pf->pdev->dev, vsi->rx_rings);
1907 err_rxrings:
1908 	devm_kfree(&pf->pdev->dev, vsi->tx_rings);
1909 err_txrings:
1910 	return -ENOMEM;
1911 }
1912 
1913 /**
1914  * ice_msix_clean_rings - MSIX mode Interrupt Handler
1915  * @irq: interrupt number
1916  * @data: pointer to a q_vector
1917  */
1918 static irqreturn_t ice_msix_clean_rings(int __always_unused irq, void *data)
1919 {
1920 	struct ice_q_vector *q_vector = (struct ice_q_vector *)data;
1921 
1922 	if (!q_vector->tx.ring && !q_vector->rx.ring)
1923 		return IRQ_HANDLED;
1924 
1925 	napi_schedule(&q_vector->napi);
1926 
1927 	return IRQ_HANDLED;
1928 }
1929 
1930 /**
1931  * ice_vsi_alloc - Allocates the next available struct vsi in the PF
1932  * @pf: board private structure
1933  * @type: type of VSI
1934  *
1935  * returns a pointer to a VSI on success, NULL on failure.
1936  */
1937 static struct ice_vsi *ice_vsi_alloc(struct ice_pf *pf, enum ice_vsi_type type)
1938 {
1939 	struct ice_vsi *vsi = NULL;
1940 
1941 	/* Need to protect the allocation of the VSIs at the PF level */
1942 	mutex_lock(&pf->sw_mutex);
1943 
1944 	/* If we have already allocated our maximum number of VSIs,
1945 	 * pf->next_vsi will be ICE_NO_VSI. If not, pf->next_vsi index
1946 	 * is available to be populated
1947 	 */
1948 	if (pf->next_vsi == ICE_NO_VSI) {
1949 		dev_dbg(&pf->pdev->dev, "out of VSI slots!\n");
1950 		goto unlock_pf;
1951 	}
1952 
1953 	vsi = devm_kzalloc(&pf->pdev->dev, sizeof(*vsi), GFP_KERNEL);
1954 	if (!vsi)
1955 		goto unlock_pf;
1956 
1957 	vsi->type = type;
1958 	vsi->back = pf;
1959 	set_bit(__ICE_DOWN, vsi->state);
1960 	vsi->idx = pf->next_vsi;
1961 	vsi->work_lmt = ICE_DFLT_IRQ_WORK;
1962 
1963 	ice_vsi_set_num_qs(vsi);
1964 
1965 	switch (vsi->type) {
1966 	case ICE_VSI_PF:
1967 		if (ice_vsi_alloc_arrays(vsi, true))
1968 			goto err_rings;
1969 
1970 		/* Setup default MSIX irq handler for VSI */
1971 		vsi->irq_handler = ice_msix_clean_rings;
1972 		break;
1973 	default:
1974 		dev_warn(&pf->pdev->dev, "Unknown VSI type %d\n", vsi->type);
1975 		goto unlock_pf;
1976 	}
1977 
1978 	/* fill VSI slot in the PF struct */
1979 	pf->vsi[pf->next_vsi] = vsi;
1980 
1981 	/* prepare pf->next_vsi for next use */
1982 	pf->next_vsi = ice_get_free_slot(pf->vsi, pf->num_alloc_vsi,
1983 					 pf->next_vsi);
1984 	goto unlock_pf;
1985 
1986 err_rings:
1987 	devm_kfree(&pf->pdev->dev, vsi);
1988 	vsi = NULL;
1989 unlock_pf:
1990 	mutex_unlock(&pf->sw_mutex);
1991 	return vsi;
1992 }
1993 
1994 /**
1995  * ice_free_irq_msix_misc - Unroll misc vector setup
1996  * @pf: board private structure
1997  */
1998 static void ice_free_irq_msix_misc(struct ice_pf *pf)
1999 {
2000 	/* disable OICR interrupt */
2001 	wr32(&pf->hw, PFINT_OICR_ENA, 0);
2002 	ice_flush(&pf->hw);
2003 
2004 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags) && pf->msix_entries) {
2005 		synchronize_irq(pf->msix_entries[pf->oicr_idx].vector);
2006 		devm_free_irq(&pf->pdev->dev,
2007 			      pf->msix_entries[pf->oicr_idx].vector, pf);
2008 	}
2009 
2010 	ice_free_res(pf->irq_tracker, pf->oicr_idx, ICE_RES_MISC_VEC_ID);
2011 }
2012 
2013 /**
2014  * ice_req_irq_msix_misc - Setup the misc vector to handle non queue events
2015  * @pf: board private structure
2016  *
2017  * This sets up the handler for MSIX 0, which is used to manage the
2018  * non-queue interrupts, e.g. AdminQ and errors.  This is not used
2019  * when in MSI or Legacy interrupt mode.
2020  */
2021 static int ice_req_irq_msix_misc(struct ice_pf *pf)
2022 {
2023 	struct ice_hw *hw = &pf->hw;
2024 	int oicr_idx, err = 0;
2025 	u8 itr_gran;
2026 	u32 val;
2027 
2028 	if (!pf->int_name[0])
2029 		snprintf(pf->int_name, sizeof(pf->int_name) - 1, "%s-%s:misc",
2030 			 dev_driver_string(&pf->pdev->dev),
2031 			 dev_name(&pf->pdev->dev));
2032 
2033 	/* Do not request IRQ but do enable OICR interrupt since settings are
2034 	 * lost during reset. Note that this function is called only during
2035 	 * rebuild path and not while reset is in progress.
2036 	 */
2037 	if (ice_is_reset_recovery_pending(pf->state))
2038 		goto skip_req_irq;
2039 
2040 	/* reserve one vector in irq_tracker for misc interrupts */
2041 	oicr_idx = ice_get_res(pf, pf->irq_tracker, 1, ICE_RES_MISC_VEC_ID);
2042 	if (oicr_idx < 0)
2043 		return oicr_idx;
2044 
2045 	pf->oicr_idx = oicr_idx;
2046 
2047 	err = devm_request_irq(&pf->pdev->dev,
2048 			       pf->msix_entries[pf->oicr_idx].vector,
2049 			       ice_misc_intr, 0, pf->int_name, pf);
2050 	if (err) {
2051 		dev_err(&pf->pdev->dev,
2052 			"devm_request_irq for %s failed: %d\n",
2053 			pf->int_name, err);
2054 		ice_free_res(pf->irq_tracker, 1, ICE_RES_MISC_VEC_ID);
2055 		return err;
2056 	}
2057 
2058 skip_req_irq:
2059 	ice_ena_misc_vector(pf);
2060 
2061 	val = (pf->oicr_idx & PFINT_OICR_CTL_MSIX_INDX_M) |
2062 	      (ICE_RX_ITR & PFINT_OICR_CTL_ITR_INDX_M) |
2063 	      PFINT_OICR_CTL_CAUSE_ENA_M;
2064 	wr32(hw, PFINT_OICR_CTL, val);
2065 
2066 	/* This enables Admin queue Interrupt causes */
2067 	val = (pf->oicr_idx & PFINT_FW_CTL_MSIX_INDX_M) |
2068 	      (ICE_RX_ITR & PFINT_FW_CTL_ITR_INDX_M) |
2069 	      PFINT_FW_CTL_CAUSE_ENA_M;
2070 	wr32(hw, PFINT_FW_CTL, val);
2071 
2072 	itr_gran = hw->itr_gran_200;
2073 
2074 	wr32(hw, GLINT_ITR(ICE_RX_ITR, pf->oicr_idx),
2075 	     ITR_TO_REG(ICE_ITR_8K, itr_gran));
2076 
2077 	ice_flush(hw);
2078 	ice_irq_dynamic_ena(hw, NULL, NULL);
2079 
2080 	return 0;
2081 }
2082 
2083 /**
2084  * ice_vsi_get_qs_contig - Assign a contiguous chunk of queues to VSI
2085  * @vsi: the VSI getting queues
2086  *
2087  * Return 0 on success and a negative value on error
2088  */
2089 static int ice_vsi_get_qs_contig(struct ice_vsi *vsi)
2090 {
2091 	struct ice_pf *pf = vsi->back;
2092 	int offset, ret = 0;
2093 
2094 	mutex_lock(&pf->avail_q_mutex);
2095 	/* look for contiguous block of queues for tx */
2096 	offset = bitmap_find_next_zero_area(pf->avail_txqs, ICE_MAX_TXQS,
2097 					    0, vsi->alloc_txq, 0);
2098 	if (offset < ICE_MAX_TXQS) {
2099 		int i;
2100 
2101 		bitmap_set(pf->avail_txqs, offset, vsi->alloc_txq);
2102 		for (i = 0; i < vsi->alloc_txq; i++)
2103 			vsi->txq_map[i] = i + offset;
2104 	} else {
2105 		ret = -ENOMEM;
2106 		vsi->tx_mapping_mode = ICE_VSI_MAP_SCATTER;
2107 	}
2108 
2109 	/* look for contiguous block of queues for rx */
2110 	offset = bitmap_find_next_zero_area(pf->avail_rxqs, ICE_MAX_RXQS,
2111 					    0, vsi->alloc_rxq, 0);
2112 	if (offset < ICE_MAX_RXQS) {
2113 		int i;
2114 
2115 		bitmap_set(pf->avail_rxqs, offset, vsi->alloc_rxq);
2116 		for (i = 0; i < vsi->alloc_rxq; i++)
2117 			vsi->rxq_map[i] = i + offset;
2118 	} else {
2119 		ret = -ENOMEM;
2120 		vsi->rx_mapping_mode = ICE_VSI_MAP_SCATTER;
2121 	}
2122 	mutex_unlock(&pf->avail_q_mutex);
2123 
2124 	return ret;
2125 }
2126 
2127 /**
2128  * ice_vsi_get_qs_scatter - Assign a scattered queues to VSI
2129  * @vsi: the VSI getting queues
2130  *
2131  * Return 0 on success and a negative value on error
2132  */
2133 static int ice_vsi_get_qs_scatter(struct ice_vsi *vsi)
2134 {
2135 	struct ice_pf *pf = vsi->back;
2136 	int i, index = 0;
2137 
2138 	mutex_lock(&pf->avail_q_mutex);
2139 
2140 	if (vsi->tx_mapping_mode == ICE_VSI_MAP_SCATTER) {
2141 		for (i = 0; i < vsi->alloc_txq; i++) {
2142 			index = find_next_zero_bit(pf->avail_txqs,
2143 						   ICE_MAX_TXQS, index);
2144 			if (index < ICE_MAX_TXQS) {
2145 				set_bit(index, pf->avail_txqs);
2146 				vsi->txq_map[i] = index;
2147 			} else {
2148 				goto err_scatter_tx;
2149 			}
2150 		}
2151 	}
2152 
2153 	if (vsi->rx_mapping_mode == ICE_VSI_MAP_SCATTER) {
2154 		for (i = 0; i < vsi->alloc_rxq; i++) {
2155 			index = find_next_zero_bit(pf->avail_rxqs,
2156 						   ICE_MAX_RXQS, index);
2157 			if (index < ICE_MAX_RXQS) {
2158 				set_bit(index, pf->avail_rxqs);
2159 				vsi->rxq_map[i] = index;
2160 			} else {
2161 				goto err_scatter_rx;
2162 			}
2163 		}
2164 	}
2165 
2166 	mutex_unlock(&pf->avail_q_mutex);
2167 	return 0;
2168 
2169 err_scatter_rx:
2170 	/* unflag any queues we have grabbed (i is failed position) */
2171 	for (index = 0; index < i; index++) {
2172 		clear_bit(vsi->rxq_map[index], pf->avail_rxqs);
2173 		vsi->rxq_map[index] = 0;
2174 	}
2175 	i = vsi->alloc_txq;
2176 err_scatter_tx:
2177 	/* i is either position of failed attempt or vsi->alloc_txq */
2178 	for (index = 0; index < i; index++) {
2179 		clear_bit(vsi->txq_map[index], pf->avail_txqs);
2180 		vsi->txq_map[index] = 0;
2181 	}
2182 
2183 	mutex_unlock(&pf->avail_q_mutex);
2184 	return -ENOMEM;
2185 }
2186 
2187 /**
2188  * ice_vsi_get_qs - Assign queues from PF to VSI
2189  * @vsi: the VSI to assign queues to
2190  *
2191  * Returns 0 on success and a negative value on error
2192  */
2193 static int ice_vsi_get_qs(struct ice_vsi *vsi)
2194 {
2195 	int ret = 0;
2196 
2197 	vsi->tx_mapping_mode = ICE_VSI_MAP_CONTIG;
2198 	vsi->rx_mapping_mode = ICE_VSI_MAP_CONTIG;
2199 
2200 	/* NOTE: ice_vsi_get_qs_contig() will set the rx/tx mapping
2201 	 * modes individually to scatter if assigning contiguous queues
2202 	 * to rx or tx fails
2203 	 */
2204 	ret = ice_vsi_get_qs_contig(vsi);
2205 	if (ret < 0) {
2206 		if (vsi->tx_mapping_mode == ICE_VSI_MAP_SCATTER)
2207 			vsi->alloc_txq = max_t(u16, vsi->alloc_txq,
2208 					       ICE_MAX_SCATTER_TXQS);
2209 		if (vsi->rx_mapping_mode == ICE_VSI_MAP_SCATTER)
2210 			vsi->alloc_rxq = max_t(u16, vsi->alloc_rxq,
2211 					       ICE_MAX_SCATTER_RXQS);
2212 		ret = ice_vsi_get_qs_scatter(vsi);
2213 	}
2214 
2215 	return ret;
2216 }
2217 
2218 /**
2219  * ice_vsi_put_qs - Release queues from VSI to PF
2220  * @vsi: the VSI thats going to release queues
2221  */
2222 static void ice_vsi_put_qs(struct ice_vsi *vsi)
2223 {
2224 	struct ice_pf *pf = vsi->back;
2225 	int i;
2226 
2227 	mutex_lock(&pf->avail_q_mutex);
2228 
2229 	for (i = 0; i < vsi->alloc_txq; i++) {
2230 		clear_bit(vsi->txq_map[i], pf->avail_txqs);
2231 		vsi->txq_map[i] = ICE_INVAL_Q_INDEX;
2232 	}
2233 
2234 	for (i = 0; i < vsi->alloc_rxq; i++) {
2235 		clear_bit(vsi->rxq_map[i], pf->avail_rxqs);
2236 		vsi->rxq_map[i] = ICE_INVAL_Q_INDEX;
2237 	}
2238 
2239 	mutex_unlock(&pf->avail_q_mutex);
2240 }
2241 
2242 /**
2243  * ice_free_q_vector - Free memory allocated for a specific interrupt vector
2244  * @vsi: VSI having the memory freed
2245  * @v_idx: index of the vector to be freed
2246  */
2247 static void ice_free_q_vector(struct ice_vsi *vsi, int v_idx)
2248 {
2249 	struct ice_q_vector *q_vector;
2250 	struct ice_ring *ring;
2251 
2252 	if (!vsi->q_vectors[v_idx]) {
2253 		dev_dbg(&vsi->back->pdev->dev, "Queue vector at index %d not found\n",
2254 			v_idx);
2255 		return;
2256 	}
2257 	q_vector = vsi->q_vectors[v_idx];
2258 
2259 	ice_for_each_ring(ring, q_vector->tx)
2260 		ring->q_vector = NULL;
2261 	ice_for_each_ring(ring, q_vector->rx)
2262 		ring->q_vector = NULL;
2263 
2264 	/* only VSI with an associated netdev is set up with NAPI */
2265 	if (vsi->netdev)
2266 		netif_napi_del(&q_vector->napi);
2267 
2268 	devm_kfree(&vsi->back->pdev->dev, q_vector);
2269 	vsi->q_vectors[v_idx] = NULL;
2270 }
2271 
2272 /**
2273  * ice_vsi_free_q_vectors - Free memory allocated for interrupt vectors
2274  * @vsi: the VSI having memory freed
2275  */
2276 static void ice_vsi_free_q_vectors(struct ice_vsi *vsi)
2277 {
2278 	int v_idx;
2279 
2280 	for (v_idx = 0; v_idx < vsi->num_q_vectors; v_idx++)
2281 		ice_free_q_vector(vsi, v_idx);
2282 }
2283 
2284 /**
2285  * ice_cfg_netdev - Setup the netdev flags
2286  * @vsi: the VSI being configured
2287  *
2288  * Returns 0 on success, negative value on failure
2289  */
2290 static int ice_cfg_netdev(struct ice_vsi *vsi)
2291 {
2292 	netdev_features_t csumo_features;
2293 	netdev_features_t vlano_features;
2294 	netdev_features_t dflt_features;
2295 	netdev_features_t tso_features;
2296 	struct ice_netdev_priv *np;
2297 	struct net_device *netdev;
2298 	u8 mac_addr[ETH_ALEN];
2299 
2300 	netdev = alloc_etherdev_mqs(sizeof(struct ice_netdev_priv),
2301 				    vsi->alloc_txq, vsi->alloc_rxq);
2302 	if (!netdev)
2303 		return -ENOMEM;
2304 
2305 	vsi->netdev = netdev;
2306 	np = netdev_priv(netdev);
2307 	np->vsi = vsi;
2308 
2309 	dflt_features = NETIF_F_SG	|
2310 			NETIF_F_HIGHDMA	|
2311 			NETIF_F_RXHASH;
2312 
2313 	csumo_features = NETIF_F_RXCSUM	  |
2314 			 NETIF_F_IP_CSUM  |
2315 			 NETIF_F_IPV6_CSUM;
2316 
2317 	vlano_features = NETIF_F_HW_VLAN_CTAG_FILTER |
2318 			 NETIF_F_HW_VLAN_CTAG_TX     |
2319 			 NETIF_F_HW_VLAN_CTAG_RX;
2320 
2321 	tso_features = NETIF_F_TSO;
2322 
2323 	/* set features that user can change */
2324 	netdev->hw_features = dflt_features | csumo_features |
2325 			      vlano_features | tso_features;
2326 
2327 	/* enable features */
2328 	netdev->features |= netdev->hw_features;
2329 	/* encap and VLAN devices inherit default, csumo and tso features */
2330 	netdev->hw_enc_features |= dflt_features | csumo_features |
2331 				   tso_features;
2332 	netdev->vlan_features |= dflt_features | csumo_features |
2333 				 tso_features;
2334 
2335 	if (vsi->type == ICE_VSI_PF) {
2336 		SET_NETDEV_DEV(netdev, &vsi->back->pdev->dev);
2337 		ether_addr_copy(mac_addr, vsi->port_info->mac.perm_addr);
2338 
2339 		ether_addr_copy(netdev->dev_addr, mac_addr);
2340 		ether_addr_copy(netdev->perm_addr, mac_addr);
2341 	}
2342 
2343 	netdev->priv_flags |= IFF_UNICAST_FLT;
2344 
2345 	/* assign netdev_ops */
2346 	netdev->netdev_ops = &ice_netdev_ops;
2347 
2348 	/* setup watchdog timeout value to be 5 second */
2349 	netdev->watchdog_timeo = 5 * HZ;
2350 
2351 	ice_set_ethtool_ops(netdev);
2352 
2353 	netdev->min_mtu = ETH_MIN_MTU;
2354 	netdev->max_mtu = ICE_MAX_MTU;
2355 
2356 	return 0;
2357 }
2358 
2359 /**
2360  * ice_vsi_free_arrays - clean up vsi resources
2361  * @vsi: pointer to VSI being cleared
2362  * @free_qvectors: bool to specify if q_vectors should be deallocated
2363  */
2364 static void ice_vsi_free_arrays(struct ice_vsi *vsi, bool free_qvectors)
2365 {
2366 	struct ice_pf *pf = vsi->back;
2367 
2368 	/* free the ring and vector containers */
2369 	if (free_qvectors && vsi->q_vectors) {
2370 		devm_kfree(&pf->pdev->dev, vsi->q_vectors);
2371 		vsi->q_vectors = NULL;
2372 	}
2373 	if (vsi->tx_rings) {
2374 		devm_kfree(&pf->pdev->dev, vsi->tx_rings);
2375 		vsi->tx_rings = NULL;
2376 	}
2377 	if (vsi->rx_rings) {
2378 		devm_kfree(&pf->pdev->dev, vsi->rx_rings);
2379 		vsi->rx_rings = NULL;
2380 	}
2381 }
2382 
2383 /**
2384  * ice_vsi_clear - clean up and deallocate the provided vsi
2385  * @vsi: pointer to VSI being cleared
2386  *
2387  * This deallocates the vsi's queue resources, removes it from the PF's
2388  * VSI array if necessary, and deallocates the VSI
2389  *
2390  * Returns 0 on success, negative on failure
2391  */
2392 static int ice_vsi_clear(struct ice_vsi *vsi)
2393 {
2394 	struct ice_pf *pf = NULL;
2395 
2396 	if (!vsi)
2397 		return 0;
2398 
2399 	if (!vsi->back)
2400 		return -EINVAL;
2401 
2402 	pf = vsi->back;
2403 
2404 	if (!pf->vsi[vsi->idx] || pf->vsi[vsi->idx] != vsi) {
2405 		dev_dbg(&pf->pdev->dev, "vsi does not exist at pf->vsi[%d]\n",
2406 			vsi->idx);
2407 		return -EINVAL;
2408 	}
2409 
2410 	mutex_lock(&pf->sw_mutex);
2411 	/* updates the PF for this cleared vsi */
2412 
2413 	pf->vsi[vsi->idx] = NULL;
2414 	if (vsi->idx < pf->next_vsi)
2415 		pf->next_vsi = vsi->idx;
2416 
2417 	ice_vsi_free_arrays(vsi, true);
2418 	mutex_unlock(&pf->sw_mutex);
2419 	devm_kfree(&pf->pdev->dev, vsi);
2420 
2421 	return 0;
2422 }
2423 
2424 /**
2425  * ice_vsi_alloc_q_vector - Allocate memory for a single interrupt vector
2426  * @vsi: the VSI being configured
2427  * @v_idx: index of the vector in the vsi struct
2428  *
2429  * We allocate one q_vector.  If allocation fails we return -ENOMEM.
2430  */
2431 static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, int v_idx)
2432 {
2433 	struct ice_pf *pf = vsi->back;
2434 	struct ice_q_vector *q_vector;
2435 
2436 	/* allocate q_vector */
2437 	q_vector = devm_kzalloc(&pf->pdev->dev, sizeof(*q_vector), GFP_KERNEL);
2438 	if (!q_vector)
2439 		return -ENOMEM;
2440 
2441 	q_vector->vsi = vsi;
2442 	q_vector->v_idx = v_idx;
2443 	/* only set affinity_mask if the CPU is online */
2444 	if (cpu_online(v_idx))
2445 		cpumask_set_cpu(v_idx, &q_vector->affinity_mask);
2446 
2447 	if (vsi->netdev)
2448 		netif_napi_add(vsi->netdev, &q_vector->napi, ice_napi_poll,
2449 			       NAPI_POLL_WEIGHT);
2450 	/* tie q_vector and vsi together */
2451 	vsi->q_vectors[v_idx] = q_vector;
2452 
2453 	return 0;
2454 }
2455 
2456 /**
2457  * ice_vsi_alloc_q_vectors - Allocate memory for interrupt vectors
2458  * @vsi: the VSI being configured
2459  *
2460  * We allocate one q_vector per queue interrupt.  If allocation fails we
2461  * return -ENOMEM.
2462  */
2463 static int ice_vsi_alloc_q_vectors(struct ice_vsi *vsi)
2464 {
2465 	struct ice_pf *pf = vsi->back;
2466 	int v_idx = 0, num_q_vectors;
2467 	int err;
2468 
2469 	if (vsi->q_vectors[0]) {
2470 		dev_dbg(&pf->pdev->dev, "VSI %d has existing q_vectors\n",
2471 			vsi->vsi_num);
2472 		return -EEXIST;
2473 	}
2474 
2475 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags)) {
2476 		num_q_vectors = vsi->num_q_vectors;
2477 	} else {
2478 		err = -EINVAL;
2479 		goto err_out;
2480 	}
2481 
2482 	for (v_idx = 0; v_idx < num_q_vectors; v_idx++) {
2483 		err = ice_vsi_alloc_q_vector(vsi, v_idx);
2484 		if (err)
2485 			goto err_out;
2486 	}
2487 
2488 	return 0;
2489 
2490 err_out:
2491 	while (v_idx--)
2492 		ice_free_q_vector(vsi, v_idx);
2493 
2494 	dev_err(&pf->pdev->dev,
2495 		"Failed to allocate %d q_vector for VSI %d, ret=%d\n",
2496 		vsi->num_q_vectors, vsi->vsi_num, err);
2497 	vsi->num_q_vectors = 0;
2498 	return err;
2499 }
2500 
2501 /**
2502  * ice_vsi_setup_vector_base - Set up the base vector for the given VSI
2503  * @vsi: ptr to the VSI
2504  *
2505  * This should only be called after ice_vsi_alloc() which allocates the
2506  * corresponding SW VSI structure and initializes num_queue_pairs for the
2507  * newly allocated VSI.
2508  *
2509  * Returns 0 on success or negative on failure
2510  */
2511 static int ice_vsi_setup_vector_base(struct ice_vsi *vsi)
2512 {
2513 	struct ice_pf *pf = vsi->back;
2514 	int num_q_vectors = 0;
2515 
2516 	if (vsi->base_vector) {
2517 		dev_dbg(&pf->pdev->dev, "VSI %d has non-zero base vector %d\n",
2518 			vsi->vsi_num, vsi->base_vector);
2519 		return -EEXIST;
2520 	}
2521 
2522 	if (!test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
2523 		return -ENOENT;
2524 
2525 	switch (vsi->type) {
2526 	case ICE_VSI_PF:
2527 		num_q_vectors = vsi->num_q_vectors;
2528 		break;
2529 	default:
2530 		dev_warn(&vsi->back->pdev->dev, "Unknown VSI type %d\n",
2531 			 vsi->type);
2532 		break;
2533 	}
2534 
2535 	if (num_q_vectors)
2536 		vsi->base_vector = ice_get_res(pf, pf->irq_tracker,
2537 					       num_q_vectors, vsi->idx);
2538 
2539 	if (vsi->base_vector < 0) {
2540 		dev_err(&pf->pdev->dev,
2541 			"Failed to get tracking for %d vectors for VSI %d, err=%d\n",
2542 			num_q_vectors, vsi->vsi_num, vsi->base_vector);
2543 		return -ENOENT;
2544 	}
2545 
2546 	return 0;
2547 }
2548 
2549 /**
2550  * ice_fill_rss_lut - Fill the RSS lookup table with default values
2551  * @lut: Lookup table
2552  * @rss_table_size: Lookup table size
2553  * @rss_size: Range of queue number for hashing
2554  */
2555 void ice_fill_rss_lut(u8 *lut, u16 rss_table_size, u16 rss_size)
2556 {
2557 	u16 i;
2558 
2559 	for (i = 0; i < rss_table_size; i++)
2560 		lut[i] = i % rss_size;
2561 }
2562 
2563 /**
2564  * ice_vsi_cfg_rss - Configure RSS params for a VSI
2565  * @vsi: VSI to be configured
2566  */
2567 static int ice_vsi_cfg_rss(struct ice_vsi *vsi)
2568 {
2569 	u8 seed[ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE];
2570 	struct ice_aqc_get_set_rss_keys *key;
2571 	struct ice_pf *pf = vsi->back;
2572 	enum ice_status status;
2573 	int err = 0;
2574 	u8 *lut;
2575 
2576 	vsi->rss_size = min_t(int, vsi->rss_size, vsi->num_rxq);
2577 
2578 	lut = devm_kzalloc(&pf->pdev->dev, vsi->rss_table_size, GFP_KERNEL);
2579 	if (!lut)
2580 		return -ENOMEM;
2581 
2582 	if (vsi->rss_lut_user)
2583 		memcpy(lut, vsi->rss_lut_user, vsi->rss_table_size);
2584 	else
2585 		ice_fill_rss_lut(lut, vsi->rss_table_size, vsi->rss_size);
2586 
2587 	status = ice_aq_set_rss_lut(&pf->hw, vsi->vsi_num, vsi->rss_lut_type,
2588 				    lut, vsi->rss_table_size);
2589 
2590 	if (status) {
2591 		dev_err(&vsi->back->pdev->dev,
2592 			"set_rss_lut failed, error %d\n", status);
2593 		err = -EIO;
2594 		goto ice_vsi_cfg_rss_exit;
2595 	}
2596 
2597 	key = devm_kzalloc(&vsi->back->pdev->dev, sizeof(*key), GFP_KERNEL);
2598 	if (!key) {
2599 		err = -ENOMEM;
2600 		goto ice_vsi_cfg_rss_exit;
2601 	}
2602 
2603 	if (vsi->rss_hkey_user)
2604 		memcpy(seed, vsi->rss_hkey_user,
2605 		       ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE);
2606 	else
2607 		netdev_rss_key_fill((void *)seed,
2608 				    ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE);
2609 	memcpy(&key->standard_rss_key, seed,
2610 	       ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE);
2611 
2612 	status = ice_aq_set_rss_key(&pf->hw, vsi->vsi_num, key);
2613 
2614 	if (status) {
2615 		dev_err(&vsi->back->pdev->dev, "set_rss_key failed, error %d\n",
2616 			status);
2617 		err = -EIO;
2618 	}
2619 
2620 	devm_kfree(&pf->pdev->dev, key);
2621 ice_vsi_cfg_rss_exit:
2622 	devm_kfree(&pf->pdev->dev, lut);
2623 	return err;
2624 }
2625 
2626 /**
2627  * ice_vsi_reinit_setup - return resource and reallocate resource for a VSI
2628  * @vsi: pointer to the ice_vsi
2629  *
2630  * This reallocates the VSIs queue resources
2631  *
2632  * Returns 0 on success and negative value on failure
2633  */
2634 static int ice_vsi_reinit_setup(struct ice_vsi *vsi)
2635 {
2636 	u16 max_txqs[ICE_MAX_TRAFFIC_CLASS] = { 0 };
2637 	int ret, i;
2638 
2639 	if (!vsi)
2640 		return -EINVAL;
2641 
2642 	ice_vsi_free_q_vectors(vsi);
2643 	ice_free_res(vsi->back->irq_tracker, vsi->base_vector, vsi->idx);
2644 	vsi->base_vector = 0;
2645 	ice_vsi_clear_rings(vsi);
2646 	ice_vsi_free_arrays(vsi, false);
2647 	ice_vsi_set_num_qs(vsi);
2648 
2649 	/* Initialize VSI struct elements and create VSI in FW */
2650 	ret = ice_vsi_add(vsi);
2651 	if (ret < 0)
2652 		goto err_vsi;
2653 
2654 	ret = ice_vsi_alloc_arrays(vsi, false);
2655 	if (ret < 0)
2656 		goto err_vsi;
2657 
2658 	switch (vsi->type) {
2659 	case ICE_VSI_PF:
2660 		if (!vsi->netdev) {
2661 			ret = ice_cfg_netdev(vsi);
2662 			if (ret)
2663 				goto err_rings;
2664 
2665 			ret = register_netdev(vsi->netdev);
2666 			if (ret)
2667 				goto err_rings;
2668 
2669 			netif_carrier_off(vsi->netdev);
2670 			netif_tx_stop_all_queues(vsi->netdev);
2671 		}
2672 
2673 		ret = ice_vsi_alloc_q_vectors(vsi);
2674 		if (ret)
2675 			goto err_rings;
2676 
2677 		ret = ice_vsi_setup_vector_base(vsi);
2678 		if (ret)
2679 			goto err_vectors;
2680 
2681 		ret = ice_vsi_alloc_rings(vsi);
2682 		if (ret)
2683 			goto err_vectors;
2684 
2685 		ice_vsi_map_rings_to_vectors(vsi);
2686 		break;
2687 	default:
2688 		break;
2689 	}
2690 
2691 	ice_vsi_set_tc_cfg(vsi);
2692 
2693 	/* configure VSI nodes based on number of queues and TC's */
2694 	for (i = 0; i < vsi->tc_cfg.numtc; i++)
2695 		max_txqs[i] = vsi->num_txq;
2696 
2697 	ret = ice_cfg_vsi_lan(vsi->port_info, vsi->vsi_num,
2698 			      vsi->tc_cfg.ena_tc, max_txqs);
2699 	if (ret) {
2700 		dev_info(&vsi->back->pdev->dev,
2701 			 "Failed VSI lan queue config\n");
2702 		goto err_vectors;
2703 	}
2704 	return 0;
2705 
2706 err_vectors:
2707 	ice_vsi_free_q_vectors(vsi);
2708 err_rings:
2709 	if (vsi->netdev) {
2710 		vsi->current_netdev_flags = 0;
2711 		unregister_netdev(vsi->netdev);
2712 		free_netdev(vsi->netdev);
2713 		vsi->netdev = NULL;
2714 	}
2715 err_vsi:
2716 	ice_vsi_clear(vsi);
2717 	set_bit(__ICE_RESET_FAILED, vsi->back->state);
2718 	return ret;
2719 }
2720 
2721 /**
2722  * ice_vsi_setup - Set up a VSI by a given type
2723  * @pf: board private structure
2724  * @type: VSI type
2725  * @pi: pointer to the port_info instance
2726  *
2727  * This allocates the sw VSI structure and its queue resources.
2728  *
2729  * Returns pointer to the successfully allocated and configure VSI sw struct on
2730  * success, otherwise returns NULL on failure.
2731  */
2732 static struct ice_vsi *
2733 ice_vsi_setup(struct ice_pf *pf, enum ice_vsi_type type,
2734 	      struct ice_port_info *pi)
2735 {
2736 	u16 max_txqs[ICE_MAX_TRAFFIC_CLASS] = { 0 };
2737 	struct device *dev = &pf->pdev->dev;
2738 	struct ice_vsi_ctx ctxt = { 0 };
2739 	struct ice_vsi *vsi;
2740 	int ret, i;
2741 
2742 	vsi = ice_vsi_alloc(pf, type);
2743 	if (!vsi) {
2744 		dev_err(dev, "could not allocate VSI\n");
2745 		return NULL;
2746 	}
2747 
2748 	vsi->port_info = pi;
2749 	vsi->vsw = pf->first_sw;
2750 
2751 	if (ice_vsi_get_qs(vsi)) {
2752 		dev_err(dev, "Failed to allocate queues. vsi->idx = %d\n",
2753 			vsi->idx);
2754 		goto err_get_qs;
2755 	}
2756 
2757 	/* set RSS capabilities */
2758 	ice_vsi_set_rss_params(vsi);
2759 
2760 	/* create the VSI */
2761 	ret = ice_vsi_add(vsi);
2762 	if (ret)
2763 		goto err_vsi;
2764 
2765 	ctxt.vsi_num = vsi->vsi_num;
2766 
2767 	switch (vsi->type) {
2768 	case ICE_VSI_PF:
2769 		ret = ice_cfg_netdev(vsi);
2770 		if (ret)
2771 			goto err_cfg_netdev;
2772 
2773 		ret = register_netdev(vsi->netdev);
2774 		if (ret)
2775 			goto err_register_netdev;
2776 
2777 		netif_carrier_off(vsi->netdev);
2778 
2779 		/* make sure transmit queues start off as stopped */
2780 		netif_tx_stop_all_queues(vsi->netdev);
2781 		ret = ice_vsi_alloc_q_vectors(vsi);
2782 		if (ret)
2783 			goto err_msix;
2784 
2785 		ret = ice_vsi_setup_vector_base(vsi);
2786 		if (ret)
2787 			goto err_rings;
2788 
2789 		ret = ice_vsi_alloc_rings(vsi);
2790 		if (ret)
2791 			goto err_rings;
2792 
2793 		ice_vsi_map_rings_to_vectors(vsi);
2794 
2795 		/* Do not exit if configuring RSS had an issue, at least
2796 		 * receive traffic on first queue. Hence no need to capture
2797 		 * return value
2798 		 */
2799 		if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
2800 			ice_vsi_cfg_rss(vsi);
2801 		break;
2802 	default:
2803 		/* if vsi type is not recognized, clean up the resources and
2804 		 * exit
2805 		 */
2806 		goto err_rings;
2807 	}
2808 
2809 	ice_vsi_set_tc_cfg(vsi);
2810 
2811 	/* configure VSI nodes based on number of queues and TC's */
2812 	for (i = 0; i < vsi->tc_cfg.numtc; i++)
2813 		max_txqs[i] = vsi->num_txq;
2814 
2815 	ret = ice_cfg_vsi_lan(vsi->port_info, vsi->vsi_num,
2816 			      vsi->tc_cfg.ena_tc, max_txqs);
2817 	if (ret) {
2818 		dev_info(&pf->pdev->dev, "Failed VSI lan queue config\n");
2819 		goto err_rings;
2820 	}
2821 
2822 	return vsi;
2823 
2824 err_rings:
2825 	ice_vsi_free_q_vectors(vsi);
2826 err_msix:
2827 	if (vsi->netdev && vsi->netdev->reg_state == NETREG_REGISTERED)
2828 		unregister_netdev(vsi->netdev);
2829 err_register_netdev:
2830 	if (vsi->netdev) {
2831 		free_netdev(vsi->netdev);
2832 		vsi->netdev = NULL;
2833 	}
2834 err_cfg_netdev:
2835 	ret = ice_aq_free_vsi(&pf->hw, &ctxt, false, NULL);
2836 	if (ret)
2837 		dev_err(&vsi->back->pdev->dev,
2838 			"Free VSI AQ call failed, err %d\n", ret);
2839 err_vsi:
2840 	ice_vsi_put_qs(vsi);
2841 err_get_qs:
2842 	pf->q_left_tx += vsi->alloc_txq;
2843 	pf->q_left_rx += vsi->alloc_rxq;
2844 	ice_vsi_clear(vsi);
2845 
2846 	return NULL;
2847 }
2848 
2849 /**
2850  * ice_vsi_add_vlan - Add vsi membership for given vlan
2851  * @vsi: the vsi being configured
2852  * @vid: vlan id to be added
2853  */
2854 static int ice_vsi_add_vlan(struct ice_vsi *vsi, u16 vid)
2855 {
2856 	struct ice_fltr_list_entry *tmp;
2857 	struct ice_pf *pf = vsi->back;
2858 	LIST_HEAD(tmp_add_list);
2859 	enum ice_status status;
2860 	int err = 0;
2861 
2862 	tmp = devm_kzalloc(&pf->pdev->dev, sizeof(*tmp), GFP_KERNEL);
2863 	if (!tmp)
2864 		return -ENOMEM;
2865 
2866 	tmp->fltr_info.lkup_type = ICE_SW_LKUP_VLAN;
2867 	tmp->fltr_info.fltr_act = ICE_FWD_TO_VSI;
2868 	tmp->fltr_info.flag = ICE_FLTR_TX;
2869 	tmp->fltr_info.src = vsi->vsi_num;
2870 	tmp->fltr_info.fwd_id.vsi_id = vsi->vsi_num;
2871 	tmp->fltr_info.l_data.vlan.vlan_id = vid;
2872 
2873 	INIT_LIST_HEAD(&tmp->list_entry);
2874 	list_add(&tmp->list_entry, &tmp_add_list);
2875 
2876 	status = ice_add_vlan(&pf->hw, &tmp_add_list);
2877 	if (status) {
2878 		err = -ENODEV;
2879 		dev_err(&pf->pdev->dev, "Failure Adding VLAN %d on VSI %i\n",
2880 			vid, vsi->vsi_num);
2881 	}
2882 
2883 	ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
2884 	return err;
2885 }
2886 
2887 /**
2888  * ice_vlan_rx_add_vid - Add a vlan id filter to HW offload
2889  * @netdev: network interface to be adjusted
2890  * @proto: unused protocol
2891  * @vid: vlan id to be added
2892  *
2893  * net_device_ops implementation for adding vlan ids
2894  */
2895 static int ice_vlan_rx_add_vid(struct net_device *netdev,
2896 			       __always_unused __be16 proto, u16 vid)
2897 {
2898 	struct ice_netdev_priv *np = netdev_priv(netdev);
2899 	struct ice_vsi *vsi = np->vsi;
2900 	int ret = 0;
2901 
2902 	if (vid >= VLAN_N_VID) {
2903 		netdev_err(netdev, "VLAN id requested %d is out of range %d\n",
2904 			   vid, VLAN_N_VID);
2905 		return -EINVAL;
2906 	}
2907 
2908 	if (vsi->info.pvid)
2909 		return -EINVAL;
2910 
2911 	/* Add all VLAN ids including 0 to the switch filter. VLAN id 0 is
2912 	 * needed to continue allowing all untagged packets since VLAN prune
2913 	 * list is applied to all packets by the switch
2914 	 */
2915 	ret = ice_vsi_add_vlan(vsi, vid);
2916 
2917 	if (!ret)
2918 		set_bit(vid, vsi->active_vlans);
2919 
2920 	return ret;
2921 }
2922 
2923 /**
2924  * ice_vsi_kill_vlan - Remove VSI membership for a given VLAN
2925  * @vsi: the VSI being configured
2926  * @vid: VLAN id to be removed
2927  */
2928 static void ice_vsi_kill_vlan(struct ice_vsi *vsi, u16 vid)
2929 {
2930 	struct ice_fltr_list_entry *list;
2931 	struct ice_pf *pf = vsi->back;
2932 	LIST_HEAD(tmp_add_list);
2933 
2934 	list = devm_kzalloc(&pf->pdev->dev, sizeof(*list), GFP_KERNEL);
2935 	if (!list)
2936 		return;
2937 
2938 	list->fltr_info.lkup_type = ICE_SW_LKUP_VLAN;
2939 	list->fltr_info.fwd_id.vsi_id = vsi->vsi_num;
2940 	list->fltr_info.fltr_act = ICE_FWD_TO_VSI;
2941 	list->fltr_info.l_data.vlan.vlan_id = vid;
2942 	list->fltr_info.flag = ICE_FLTR_TX;
2943 	list->fltr_info.src = vsi->vsi_num;
2944 
2945 	INIT_LIST_HEAD(&list->list_entry);
2946 	list_add(&list->list_entry, &tmp_add_list);
2947 
2948 	if (ice_remove_vlan(&pf->hw, &tmp_add_list))
2949 		dev_err(&pf->pdev->dev, "Error removing VLAN %d on vsi %i\n",
2950 			vid, vsi->vsi_num);
2951 
2952 	ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
2953 }
2954 
2955 /**
2956  * ice_vlan_rx_kill_vid - Remove a vlan id filter from HW offload
2957  * @netdev: network interface to be adjusted
2958  * @proto: unused protocol
2959  * @vid: vlan id to be removed
2960  *
2961  * net_device_ops implementation for removing vlan ids
2962  */
2963 static int ice_vlan_rx_kill_vid(struct net_device *netdev,
2964 				__always_unused __be16 proto, u16 vid)
2965 {
2966 	struct ice_netdev_priv *np = netdev_priv(netdev);
2967 	struct ice_vsi *vsi = np->vsi;
2968 
2969 	if (vsi->info.pvid)
2970 		return -EINVAL;
2971 
2972 	/* return code is ignored as there is nothing a user
2973 	 * can do about failure to remove and a log message was
2974 	 * already printed from the other function
2975 	 */
2976 	ice_vsi_kill_vlan(vsi, vid);
2977 
2978 	clear_bit(vid, vsi->active_vlans);
2979 
2980 	return 0;
2981 }
2982 
2983 /**
2984  * ice_setup_pf_sw - Setup the HW switch on startup or after reset
2985  * @pf: board private structure
2986  *
2987  * Returns 0 on success, negative value on failure
2988  */
2989 static int ice_setup_pf_sw(struct ice_pf *pf)
2990 {
2991 	LIST_HEAD(tmp_add_list);
2992 	u8 broadcast[ETH_ALEN];
2993 	struct ice_vsi *vsi;
2994 	int status = 0;
2995 
2996 	if (!ice_is_reset_recovery_pending(pf->state)) {
2997 		vsi = ice_vsi_setup(pf, ICE_VSI_PF, pf->hw.port_info);
2998 		if (!vsi) {
2999 			status = -ENOMEM;
3000 			goto error_exit;
3001 		}
3002 	} else {
3003 		vsi = pf->vsi[0];
3004 		status = ice_vsi_reinit_setup(vsi);
3005 		if (status < 0)
3006 			return -EIO;
3007 	}
3008 
3009 	/* tmp_add_list contains a list of MAC addresses for which MAC
3010 	 * filters need to be programmed. Add the VSI's unicast MAC to
3011 	 * this list
3012 	 */
3013 	status = ice_add_mac_to_list(vsi, &tmp_add_list,
3014 				     vsi->port_info->mac.perm_addr);
3015 	if (status)
3016 		goto error_exit;
3017 
3018 	/* VSI needs to receive broadcast traffic, so add the broadcast
3019 	 * MAC address to the list.
3020 	 */
3021 	eth_broadcast_addr(broadcast);
3022 	status = ice_add_mac_to_list(vsi, &tmp_add_list, broadcast);
3023 	if (status)
3024 		goto error_exit;
3025 
3026 	/* program MAC filters for entries in tmp_add_list */
3027 	status = ice_add_mac(&pf->hw, &tmp_add_list);
3028 	if (status) {
3029 		dev_err(&pf->pdev->dev, "Could not add MAC filters\n");
3030 		status = -ENOMEM;
3031 		goto error_exit;
3032 	}
3033 
3034 	ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
3035 	return status;
3036 
3037 error_exit:
3038 	ice_free_fltr_list(&pf->pdev->dev, &tmp_add_list);
3039 
3040 	if (vsi) {
3041 		ice_vsi_free_q_vectors(vsi);
3042 		if (vsi->netdev && vsi->netdev->reg_state == NETREG_REGISTERED)
3043 			unregister_netdev(vsi->netdev);
3044 		if (vsi->netdev) {
3045 			free_netdev(vsi->netdev);
3046 			vsi->netdev = NULL;
3047 		}
3048 
3049 		ice_vsi_delete(vsi);
3050 		ice_vsi_put_qs(vsi);
3051 		pf->q_left_tx += vsi->alloc_txq;
3052 		pf->q_left_rx += vsi->alloc_rxq;
3053 		ice_vsi_clear(vsi);
3054 	}
3055 	return status;
3056 }
3057 
3058 /**
3059  * ice_determine_q_usage - Calculate queue distribution
3060  * @pf: board private structure
3061  *
3062  * Return -ENOMEM if we don't get enough queues for all ports
3063  */
3064 static void ice_determine_q_usage(struct ice_pf *pf)
3065 {
3066 	u16 q_left_tx, q_left_rx;
3067 
3068 	q_left_tx = pf->hw.func_caps.common_cap.num_txq;
3069 	q_left_rx = pf->hw.func_caps.common_cap.num_rxq;
3070 
3071 	pf->num_lan_tx = min_t(int, q_left_tx, num_online_cpus());
3072 
3073 	/* only 1 rx queue unless RSS is enabled */
3074 	if (!test_bit(ICE_FLAG_RSS_ENA, pf->flags))
3075 		pf->num_lan_rx = 1;
3076 	else
3077 		pf->num_lan_rx = min_t(int, q_left_rx, num_online_cpus());
3078 
3079 	pf->q_left_tx = q_left_tx - pf->num_lan_tx;
3080 	pf->q_left_rx = q_left_rx - pf->num_lan_rx;
3081 }
3082 
3083 /**
3084  * ice_deinit_pf - Unrolls initialziations done by ice_init_pf
3085  * @pf: board private structure to initialize
3086  */
3087 static void ice_deinit_pf(struct ice_pf *pf)
3088 {
3089 	if (pf->serv_tmr.function)
3090 		del_timer_sync(&pf->serv_tmr);
3091 	if (pf->serv_task.func)
3092 		cancel_work_sync(&pf->serv_task);
3093 	mutex_destroy(&pf->sw_mutex);
3094 	mutex_destroy(&pf->avail_q_mutex);
3095 }
3096 
3097 /**
3098  * ice_init_pf - Initialize general software structures (struct ice_pf)
3099  * @pf: board private structure to initialize
3100  */
3101 static void ice_init_pf(struct ice_pf *pf)
3102 {
3103 	bitmap_zero(pf->flags, ICE_PF_FLAGS_NBITS);
3104 	set_bit(ICE_FLAG_MSIX_ENA, pf->flags);
3105 
3106 	mutex_init(&pf->sw_mutex);
3107 	mutex_init(&pf->avail_q_mutex);
3108 
3109 	/* Clear avail_[t|r]x_qs bitmaps (set all to avail) */
3110 	mutex_lock(&pf->avail_q_mutex);
3111 	bitmap_zero(pf->avail_txqs, ICE_MAX_TXQS);
3112 	bitmap_zero(pf->avail_rxqs, ICE_MAX_RXQS);
3113 	mutex_unlock(&pf->avail_q_mutex);
3114 
3115 	if (pf->hw.func_caps.common_cap.rss_table_size)
3116 		set_bit(ICE_FLAG_RSS_ENA, pf->flags);
3117 
3118 	/* setup service timer and periodic service task */
3119 	timer_setup(&pf->serv_tmr, ice_service_timer, 0);
3120 	pf->serv_tmr_period = HZ;
3121 	INIT_WORK(&pf->serv_task, ice_service_task);
3122 	clear_bit(__ICE_SERVICE_SCHED, pf->state);
3123 }
3124 
3125 /**
3126  * ice_ena_msix_range - Request a range of MSIX vectors from the OS
3127  * @pf: board private structure
3128  *
3129  * compute the number of MSIX vectors required (v_budget) and request from
3130  * the OS. Return the number of vectors reserved or negative on failure
3131  */
3132 static int ice_ena_msix_range(struct ice_pf *pf)
3133 {
3134 	int v_left, v_actual, v_budget = 0;
3135 	int needed, err, i;
3136 
3137 	v_left = pf->hw.func_caps.common_cap.num_msix_vectors;
3138 
3139 	/* reserve one vector for miscellaneous handler */
3140 	needed = 1;
3141 	v_budget += needed;
3142 	v_left -= needed;
3143 
3144 	/* reserve vectors for LAN traffic */
3145 	pf->num_lan_msix = min_t(int, num_online_cpus(), v_left);
3146 	v_budget += pf->num_lan_msix;
3147 
3148 	pf->msix_entries = devm_kcalloc(&pf->pdev->dev, v_budget,
3149 					sizeof(struct msix_entry), GFP_KERNEL);
3150 
3151 	if (!pf->msix_entries) {
3152 		err = -ENOMEM;
3153 		goto exit_err;
3154 	}
3155 
3156 	for (i = 0; i < v_budget; i++)
3157 		pf->msix_entries[i].entry = i;
3158 
3159 	/* actually reserve the vectors */
3160 	v_actual = pci_enable_msix_range(pf->pdev, pf->msix_entries,
3161 					 ICE_MIN_MSIX, v_budget);
3162 
3163 	if (v_actual < 0) {
3164 		dev_err(&pf->pdev->dev, "unable to reserve MSI-X vectors\n");
3165 		err = v_actual;
3166 		goto msix_err;
3167 	}
3168 
3169 	if (v_actual < v_budget) {
3170 		dev_warn(&pf->pdev->dev,
3171 			 "not enough vectors. requested = %d, obtained = %d\n",
3172 			 v_budget, v_actual);
3173 		if (v_actual >= (pf->num_lan_msix + 1)) {
3174 			pf->num_avail_msix = v_actual - (pf->num_lan_msix + 1);
3175 		} else if (v_actual >= 2) {
3176 			pf->num_lan_msix = 1;
3177 			pf->num_avail_msix = v_actual - 2;
3178 		} else {
3179 			pci_disable_msix(pf->pdev);
3180 			err = -ERANGE;
3181 			goto msix_err;
3182 		}
3183 	}
3184 
3185 	return v_actual;
3186 
3187 msix_err:
3188 	devm_kfree(&pf->pdev->dev, pf->msix_entries);
3189 	goto exit_err;
3190 
3191 exit_err:
3192 	pf->num_lan_msix = 0;
3193 	clear_bit(ICE_FLAG_MSIX_ENA, pf->flags);
3194 	return err;
3195 }
3196 
3197 /**
3198  * ice_dis_msix - Disable MSI-X interrupt setup in OS
3199  * @pf: board private structure
3200  */
3201 static void ice_dis_msix(struct ice_pf *pf)
3202 {
3203 	pci_disable_msix(pf->pdev);
3204 	devm_kfree(&pf->pdev->dev, pf->msix_entries);
3205 	pf->msix_entries = NULL;
3206 	clear_bit(ICE_FLAG_MSIX_ENA, pf->flags);
3207 }
3208 
3209 /**
3210  * ice_init_interrupt_scheme - Determine proper interrupt scheme
3211  * @pf: board private structure to initialize
3212  */
3213 static int ice_init_interrupt_scheme(struct ice_pf *pf)
3214 {
3215 	int vectors = 0;
3216 	ssize_t size;
3217 
3218 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
3219 		vectors = ice_ena_msix_range(pf);
3220 	else
3221 		return -ENODEV;
3222 
3223 	if (vectors < 0)
3224 		return vectors;
3225 
3226 	/* set up vector assignment tracking */
3227 	size = sizeof(struct ice_res_tracker) + (sizeof(u16) * vectors);
3228 
3229 	pf->irq_tracker = devm_kzalloc(&pf->pdev->dev, size, GFP_KERNEL);
3230 	if (!pf->irq_tracker) {
3231 		ice_dis_msix(pf);
3232 		return -ENOMEM;
3233 	}
3234 
3235 	pf->irq_tracker->num_entries = vectors;
3236 
3237 	return 0;
3238 }
3239 
3240 /**
3241  * ice_clear_interrupt_scheme - Undo things done by ice_init_interrupt_scheme
3242  * @pf: board private structure
3243  */
3244 static void ice_clear_interrupt_scheme(struct ice_pf *pf)
3245 {
3246 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
3247 		ice_dis_msix(pf);
3248 
3249 	devm_kfree(&pf->pdev->dev, pf->irq_tracker);
3250 	pf->irq_tracker = NULL;
3251 }
3252 
3253 /**
3254  * ice_probe - Device initialization routine
3255  * @pdev: PCI device information struct
3256  * @ent: entry in ice_pci_tbl
3257  *
3258  * Returns 0 on success, negative on failure
3259  */
3260 static int ice_probe(struct pci_dev *pdev,
3261 		     const struct pci_device_id __always_unused *ent)
3262 {
3263 	struct ice_pf *pf;
3264 	struct ice_hw *hw;
3265 	int err;
3266 
3267 	/* this driver uses devres, see Documentation/driver-model/devres.txt */
3268 	err = pcim_enable_device(pdev);
3269 	if (err)
3270 		return err;
3271 
3272 	err = pcim_iomap_regions(pdev, BIT(ICE_BAR0), pci_name(pdev));
3273 	if (err) {
3274 		dev_err(&pdev->dev, "I/O map error %d\n", err);
3275 		return err;
3276 	}
3277 
3278 	pf = devm_kzalloc(&pdev->dev, sizeof(*pf), GFP_KERNEL);
3279 	if (!pf)
3280 		return -ENOMEM;
3281 
3282 	/* set up for high or low dma */
3283 	err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
3284 	if (err)
3285 		err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
3286 	if (err) {
3287 		dev_err(&pdev->dev, "DMA configuration failed: 0x%x\n", err);
3288 		return err;
3289 	}
3290 
3291 	pci_enable_pcie_error_reporting(pdev);
3292 	pci_set_master(pdev);
3293 
3294 	pf->pdev = pdev;
3295 	pci_set_drvdata(pdev, pf);
3296 	set_bit(__ICE_DOWN, pf->state);
3297 
3298 	hw = &pf->hw;
3299 	hw->hw_addr = pcim_iomap_table(pdev)[ICE_BAR0];
3300 	hw->back = pf;
3301 	hw->vendor_id = pdev->vendor;
3302 	hw->device_id = pdev->device;
3303 	pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
3304 	hw->subsystem_vendor_id = pdev->subsystem_vendor;
3305 	hw->subsystem_device_id = pdev->subsystem_device;
3306 	hw->bus.device = PCI_SLOT(pdev->devfn);
3307 	hw->bus.func = PCI_FUNC(pdev->devfn);
3308 	ice_set_ctrlq_len(hw);
3309 
3310 	pf->msg_enable = netif_msg_init(debug, ICE_DFLT_NETIF_M);
3311 
3312 #ifndef CONFIG_DYNAMIC_DEBUG
3313 	if (debug < -1)
3314 		hw->debug_mask = debug;
3315 #endif
3316 
3317 	err = ice_init_hw(hw);
3318 	if (err) {
3319 		dev_err(&pdev->dev, "ice_init_hw failed: %d\n", err);
3320 		err = -EIO;
3321 		goto err_exit_unroll;
3322 	}
3323 
3324 	dev_info(&pdev->dev, "firmware %d.%d.%05d api %d.%d\n",
3325 		 hw->fw_maj_ver, hw->fw_min_ver, hw->fw_build,
3326 		 hw->api_maj_ver, hw->api_min_ver);
3327 
3328 	ice_init_pf(pf);
3329 
3330 	ice_determine_q_usage(pf);
3331 
3332 	pf->num_alloc_vsi = min_t(u16, ICE_MAX_VSI_ALLOC,
3333 				  hw->func_caps.guaranteed_num_vsi);
3334 	if (!pf->num_alloc_vsi) {
3335 		err = -EIO;
3336 		goto err_init_pf_unroll;
3337 	}
3338 
3339 	pf->vsi = devm_kcalloc(&pdev->dev, pf->num_alloc_vsi,
3340 			       sizeof(struct ice_vsi *), GFP_KERNEL);
3341 	if (!pf->vsi) {
3342 		err = -ENOMEM;
3343 		goto err_init_pf_unroll;
3344 	}
3345 
3346 	err = ice_init_interrupt_scheme(pf);
3347 	if (err) {
3348 		dev_err(&pdev->dev,
3349 			"ice_init_interrupt_scheme failed: %d\n", err);
3350 		err = -EIO;
3351 		goto err_init_interrupt_unroll;
3352 	}
3353 
3354 	/* In case of MSIX we are going to setup the misc vector right here
3355 	 * to handle admin queue events etc. In case of legacy and MSI
3356 	 * the misc functionality and queue processing is combined in
3357 	 * the same vector and that gets setup at open.
3358 	 */
3359 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags)) {
3360 		err = ice_req_irq_msix_misc(pf);
3361 		if (err) {
3362 			dev_err(&pdev->dev,
3363 				"setup of misc vector failed: %d\n", err);
3364 			goto err_init_interrupt_unroll;
3365 		}
3366 	}
3367 
3368 	/* create switch struct for the switch element created by FW on boot */
3369 	pf->first_sw = devm_kzalloc(&pdev->dev, sizeof(struct ice_sw),
3370 				    GFP_KERNEL);
3371 	if (!pf->first_sw) {
3372 		err = -ENOMEM;
3373 		goto err_msix_misc_unroll;
3374 	}
3375 
3376 	pf->first_sw->bridge_mode = BRIDGE_MODE_VEB;
3377 	pf->first_sw->pf = pf;
3378 
3379 	/* record the sw_id available for later use */
3380 	pf->first_sw->sw_id = hw->port_info->sw_id;
3381 
3382 	err = ice_setup_pf_sw(pf);
3383 	if (err) {
3384 		dev_err(&pdev->dev,
3385 			"probe failed due to setup pf switch:%d\n", err);
3386 		goto err_alloc_sw_unroll;
3387 	}
3388 
3389 	/* Driver is mostly up */
3390 	clear_bit(__ICE_DOWN, pf->state);
3391 
3392 	/* since everything is good, start the service timer */
3393 	mod_timer(&pf->serv_tmr, round_jiffies(jiffies + pf->serv_tmr_period));
3394 
3395 	err = ice_init_link_events(pf->hw.port_info);
3396 	if (err) {
3397 		dev_err(&pdev->dev, "ice_init_link_events failed: %d\n", err);
3398 		goto err_alloc_sw_unroll;
3399 	}
3400 
3401 	return 0;
3402 
3403 err_alloc_sw_unroll:
3404 	set_bit(__ICE_DOWN, pf->state);
3405 	devm_kfree(&pf->pdev->dev, pf->first_sw);
3406 err_msix_misc_unroll:
3407 	ice_free_irq_msix_misc(pf);
3408 err_init_interrupt_unroll:
3409 	ice_clear_interrupt_scheme(pf);
3410 	devm_kfree(&pdev->dev, pf->vsi);
3411 err_init_pf_unroll:
3412 	ice_deinit_pf(pf);
3413 	ice_deinit_hw(hw);
3414 err_exit_unroll:
3415 	pci_disable_pcie_error_reporting(pdev);
3416 	return err;
3417 }
3418 
3419 /**
3420  * ice_remove - Device removal routine
3421  * @pdev: PCI device information struct
3422  */
3423 static void ice_remove(struct pci_dev *pdev)
3424 {
3425 	struct ice_pf *pf = pci_get_drvdata(pdev);
3426 	int i = 0;
3427 	int err;
3428 
3429 	if (!pf)
3430 		return;
3431 
3432 	set_bit(__ICE_DOWN, pf->state);
3433 
3434 	for (i = 0; i < pf->num_alloc_vsi; i++) {
3435 		if (!pf->vsi[i])
3436 			continue;
3437 
3438 		err = ice_vsi_release(pf->vsi[i]);
3439 		if (err)
3440 			dev_dbg(&pf->pdev->dev, "Failed to release VSI index %d (err %d)\n",
3441 				i, err);
3442 	}
3443 
3444 	ice_free_irq_msix_misc(pf);
3445 	ice_clear_interrupt_scheme(pf);
3446 	ice_deinit_pf(pf);
3447 	ice_deinit_hw(&pf->hw);
3448 	pci_disable_pcie_error_reporting(pdev);
3449 }
3450 
3451 /* ice_pci_tbl - PCI Device ID Table
3452  *
3453  * Wildcard entries (PCI_ANY_ID) should come last
3454  * Last entry must be all 0s
3455  *
3456  * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
3457  *   Class, Class Mask, private data (not used) }
3458  */
3459 static const struct pci_device_id ice_pci_tbl[] = {
3460 	{ PCI_VDEVICE(INTEL, ICE_DEV_ID_C810_BACKPLANE), 0 },
3461 	{ PCI_VDEVICE(INTEL, ICE_DEV_ID_C810_QSFP), 0 },
3462 	{ PCI_VDEVICE(INTEL, ICE_DEV_ID_C810_SFP), 0 },
3463 	{ PCI_VDEVICE(INTEL, ICE_DEV_ID_C810_10G_BASE_T), 0 },
3464 	{ PCI_VDEVICE(INTEL, ICE_DEV_ID_C810_SGMII), 0 },
3465 	/* required last entry */
3466 	{ 0, }
3467 };
3468 MODULE_DEVICE_TABLE(pci, ice_pci_tbl);
3469 
3470 static struct pci_driver ice_driver = {
3471 	.name = KBUILD_MODNAME,
3472 	.id_table = ice_pci_tbl,
3473 	.probe = ice_probe,
3474 	.remove = ice_remove,
3475 };
3476 
3477 /**
3478  * ice_module_init - Driver registration routine
3479  *
3480  * ice_module_init is the first routine called when the driver is
3481  * loaded. All it does is register with the PCI subsystem.
3482  */
3483 static int __init ice_module_init(void)
3484 {
3485 	int status;
3486 
3487 	pr_info("%s - version %s\n", ice_driver_string, ice_drv_ver);
3488 	pr_info("%s\n", ice_copyright);
3489 
3490 	ice_wq = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, KBUILD_MODNAME);
3491 	if (!ice_wq) {
3492 		pr_err("Failed to create workqueue\n");
3493 		return -ENOMEM;
3494 	}
3495 
3496 	status = pci_register_driver(&ice_driver);
3497 	if (status) {
3498 		pr_err("failed to register pci driver, err %d\n", status);
3499 		destroy_workqueue(ice_wq);
3500 	}
3501 
3502 	return status;
3503 }
3504 module_init(ice_module_init);
3505 
3506 /**
3507  * ice_module_exit - Driver exit cleanup routine
3508  *
3509  * ice_module_exit is called just before the driver is removed
3510  * from memory.
3511  */
3512 static void __exit ice_module_exit(void)
3513 {
3514 	pci_unregister_driver(&ice_driver);
3515 	destroy_workqueue(ice_wq);
3516 	pr_info("module unloaded\n");
3517 }
3518 module_exit(ice_module_exit);
3519 
3520 /**
3521  * ice_set_mac_address - NDO callback to set mac address
3522  * @netdev: network interface device structure
3523  * @pi: pointer to an address structure
3524  *
3525  * Returns 0 on success, negative on failure
3526  */
3527 static int ice_set_mac_address(struct net_device *netdev, void *pi)
3528 {
3529 	struct ice_netdev_priv *np = netdev_priv(netdev);
3530 	struct ice_vsi *vsi = np->vsi;
3531 	struct ice_pf *pf = vsi->back;
3532 	struct ice_hw *hw = &pf->hw;
3533 	struct sockaddr *addr = pi;
3534 	enum ice_status status;
3535 	LIST_HEAD(a_mac_list);
3536 	LIST_HEAD(r_mac_list);
3537 	u8 flags = 0;
3538 	int err;
3539 	u8 *mac;
3540 
3541 	mac = (u8 *)addr->sa_data;
3542 
3543 	if (!is_valid_ether_addr(mac))
3544 		return -EADDRNOTAVAIL;
3545 
3546 	if (ether_addr_equal(netdev->dev_addr, mac)) {
3547 		netdev_warn(netdev, "already using mac %pM\n", mac);
3548 		return 0;
3549 	}
3550 
3551 	if (test_bit(__ICE_DOWN, pf->state) ||
3552 	    ice_is_reset_recovery_pending(pf->state)) {
3553 		netdev_err(netdev, "can't set mac %pM. device not ready\n",
3554 			   mac);
3555 		return -EBUSY;
3556 	}
3557 
3558 	/* When we change the mac address we also have to change the mac address
3559 	 * based filter rules that were created previously for the old mac
3560 	 * address. So first, we remove the old filter rule using ice_remove_mac
3561 	 * and then create a new filter rule using ice_add_mac. Note that for
3562 	 * both these operations, we first need to form a "list" of mac
3563 	 * addresses (even though in this case, we have only 1 mac address to be
3564 	 * added/removed) and this done using ice_add_mac_to_list. Depending on
3565 	 * the ensuing operation this "list" of mac addresses is either to be
3566 	 * added or removed from the filter.
3567 	 */
3568 	err = ice_add_mac_to_list(vsi, &r_mac_list, netdev->dev_addr);
3569 	if (err) {
3570 		err = -EADDRNOTAVAIL;
3571 		goto free_lists;
3572 	}
3573 
3574 	status = ice_remove_mac(hw, &r_mac_list);
3575 	if (status) {
3576 		err = -EADDRNOTAVAIL;
3577 		goto free_lists;
3578 	}
3579 
3580 	err = ice_add_mac_to_list(vsi, &a_mac_list, mac);
3581 	if (err) {
3582 		err = -EADDRNOTAVAIL;
3583 		goto free_lists;
3584 	}
3585 
3586 	status = ice_add_mac(hw, &a_mac_list);
3587 	if (status) {
3588 		err = -EADDRNOTAVAIL;
3589 		goto free_lists;
3590 	}
3591 
3592 free_lists:
3593 	/* free list entries */
3594 	ice_free_fltr_list(&pf->pdev->dev, &r_mac_list);
3595 	ice_free_fltr_list(&pf->pdev->dev, &a_mac_list);
3596 
3597 	if (err) {
3598 		netdev_err(netdev, "can't set mac %pM. filter update failed\n",
3599 			   mac);
3600 		return err;
3601 	}
3602 
3603 	/* change the netdev's mac address */
3604 	memcpy(netdev->dev_addr, mac, netdev->addr_len);
3605 	netdev_dbg(vsi->netdev, "updated mac address to %pM\n",
3606 		   netdev->dev_addr);
3607 
3608 	/* write new mac address to the firmware */
3609 	flags = ICE_AQC_MAN_MAC_UPDATE_LAA_WOL;
3610 	status = ice_aq_manage_mac_write(hw, mac, flags, NULL);
3611 	if (status) {
3612 		netdev_err(netdev, "can't set mac %pM. write to firmware failed.\n",
3613 			   mac);
3614 	}
3615 	return 0;
3616 }
3617 
3618 /**
3619  * ice_set_rx_mode - NDO callback to set the netdev filters
3620  * @netdev: network interface device structure
3621  */
3622 static void ice_set_rx_mode(struct net_device *netdev)
3623 {
3624 	struct ice_netdev_priv *np = netdev_priv(netdev);
3625 	struct ice_vsi *vsi = np->vsi;
3626 
3627 	if (!vsi)
3628 		return;
3629 
3630 	/* Set the flags to synchronize filters
3631 	 * ndo_set_rx_mode may be triggered even without a change in netdev
3632 	 * flags
3633 	 */
3634 	set_bit(ICE_VSI_FLAG_UMAC_FLTR_CHANGED, vsi->flags);
3635 	set_bit(ICE_VSI_FLAG_MMAC_FLTR_CHANGED, vsi->flags);
3636 	set_bit(ICE_FLAG_FLTR_SYNC, vsi->back->flags);
3637 
3638 	/* schedule our worker thread which will take care of
3639 	 * applying the new filter changes
3640 	 */
3641 	ice_service_task_schedule(vsi->back);
3642 }
3643 
3644 /**
3645  * ice_fdb_add - add an entry to the hardware database
3646  * @ndm: the input from the stack
3647  * @tb: pointer to array of nladdr (unused)
3648  * @dev: the net device pointer
3649  * @addr: the MAC address entry being added
3650  * @vid: VLAN id
3651  * @flags: instructions from stack about fdb operation
3652  */
3653 static int ice_fdb_add(struct ndmsg *ndm, struct nlattr __always_unused *tb[],
3654 		       struct net_device *dev, const unsigned char *addr,
3655 		       u16 vid, u16 flags)
3656 {
3657 	int err;
3658 
3659 	if (vid) {
3660 		netdev_err(dev, "VLANs aren't supported yet for dev_uc|mc_add()\n");
3661 		return -EINVAL;
3662 	}
3663 	if (ndm->ndm_state && !(ndm->ndm_state & NUD_PERMANENT)) {
3664 		netdev_err(dev, "FDB only supports static addresses\n");
3665 		return -EINVAL;
3666 	}
3667 
3668 	if (is_unicast_ether_addr(addr) || is_link_local_ether_addr(addr))
3669 		err = dev_uc_add_excl(dev, addr);
3670 	else if (is_multicast_ether_addr(addr))
3671 		err = dev_mc_add_excl(dev, addr);
3672 	else
3673 		err = -EINVAL;
3674 
3675 	/* Only return duplicate errors if NLM_F_EXCL is set */
3676 	if (err == -EEXIST && !(flags & NLM_F_EXCL))
3677 		err = 0;
3678 
3679 	return err;
3680 }
3681 
3682 /**
3683  * ice_fdb_del - delete an entry from the hardware database
3684  * @ndm: the input from the stack
3685  * @tb: pointer to array of nladdr (unused)
3686  * @dev: the net device pointer
3687  * @addr: the MAC address entry being added
3688  * @vid: VLAN id
3689  */
3690 static int ice_fdb_del(struct ndmsg *ndm, __always_unused struct nlattr *tb[],
3691 		       struct net_device *dev, const unsigned char *addr,
3692 		       __always_unused u16 vid)
3693 {
3694 	int err;
3695 
3696 	if (ndm->ndm_state & NUD_PERMANENT) {
3697 		netdev_err(dev, "FDB only supports static addresses\n");
3698 		return -EINVAL;
3699 	}
3700 
3701 	if (is_unicast_ether_addr(addr))
3702 		err = dev_uc_del(dev, addr);
3703 	else if (is_multicast_ether_addr(addr))
3704 		err = dev_mc_del(dev, addr);
3705 	else
3706 		err = -EINVAL;
3707 
3708 	return err;
3709 }
3710 
3711 /**
3712  * ice_vsi_manage_vlan_insertion - Manage VLAN insertion for the VSI for Tx
3713  * @vsi: the vsi being changed
3714  */
3715 static int ice_vsi_manage_vlan_insertion(struct ice_vsi *vsi)
3716 {
3717 	struct device *dev = &vsi->back->pdev->dev;
3718 	struct ice_hw *hw = &vsi->back->hw;
3719 	struct ice_vsi_ctx ctxt = { 0 };
3720 	enum ice_status status;
3721 
3722 	/* Here we are configuring the VSI to let the driver add VLAN tags by
3723 	 * setting port_vlan_flags to ICE_AQ_VSI_PVLAN_MODE_ALL. The actual VLAN
3724 	 * tag insertion happens in the Tx hot path, in ice_tx_map.
3725 	 */
3726 	ctxt.info.port_vlan_flags = ICE_AQ_VSI_PVLAN_MODE_ALL;
3727 
3728 	ctxt.info.valid_sections = cpu_to_le16(ICE_AQ_VSI_PROP_VLAN_VALID);
3729 	ctxt.vsi_num = vsi->vsi_num;
3730 
3731 	status = ice_aq_update_vsi(hw, &ctxt, NULL);
3732 	if (status) {
3733 		dev_err(dev, "update VSI for VLAN insert failed, err %d aq_err %d\n",
3734 			status, hw->adminq.sq_last_status);
3735 		return -EIO;
3736 	}
3737 
3738 	vsi->info.port_vlan_flags = ctxt.info.port_vlan_flags;
3739 	return 0;
3740 }
3741 
3742 /**
3743  * ice_vsi_manage_vlan_stripping - Manage VLAN stripping for the VSI for Rx
3744  * @vsi: the vsi being changed
3745  * @ena: boolean value indicating if this is a enable or disable request
3746  */
3747 static int ice_vsi_manage_vlan_stripping(struct ice_vsi *vsi, bool ena)
3748 {
3749 	struct device *dev = &vsi->back->pdev->dev;
3750 	struct ice_hw *hw = &vsi->back->hw;
3751 	struct ice_vsi_ctx ctxt = { 0 };
3752 	enum ice_status status;
3753 
3754 	/* Here we are configuring what the VSI should do with the VLAN tag in
3755 	 * the Rx packet. We can either leave the tag in the packet or put it in
3756 	 * the Rx descriptor.
3757 	 */
3758 	if (ena) {
3759 		/* Strip VLAN tag from Rx packet and put it in the desc */
3760 		ctxt.info.port_vlan_flags = ICE_AQ_VSI_PVLAN_EMOD_STR_BOTH;
3761 	} else {
3762 		/* Disable stripping. Leave tag in packet */
3763 		ctxt.info.port_vlan_flags = ICE_AQ_VSI_PVLAN_EMOD_NOTHING;
3764 	}
3765 
3766 	ctxt.info.valid_sections = cpu_to_le16(ICE_AQ_VSI_PROP_VLAN_VALID);
3767 	ctxt.vsi_num = vsi->vsi_num;
3768 
3769 	status = ice_aq_update_vsi(hw, &ctxt, NULL);
3770 	if (status) {
3771 		dev_err(dev, "update VSI for VALN strip failed, ena = %d err %d aq_err %d\n",
3772 			ena, status, hw->adminq.sq_last_status);
3773 		return -EIO;
3774 	}
3775 
3776 	vsi->info.port_vlan_flags = ctxt.info.port_vlan_flags;
3777 	return 0;
3778 }
3779 
3780 /**
3781  * ice_set_features - set the netdev feature flags
3782  * @netdev: ptr to the netdev being adjusted
3783  * @features: the feature set that the stack is suggesting
3784  */
3785 static int ice_set_features(struct net_device *netdev,
3786 			    netdev_features_t features)
3787 {
3788 	struct ice_netdev_priv *np = netdev_priv(netdev);
3789 	struct ice_vsi *vsi = np->vsi;
3790 	int ret = 0;
3791 
3792 	if ((features & NETIF_F_HW_VLAN_CTAG_RX) &&
3793 	    !(netdev->features & NETIF_F_HW_VLAN_CTAG_RX))
3794 		ret = ice_vsi_manage_vlan_stripping(vsi, true);
3795 	else if (!(features & NETIF_F_HW_VLAN_CTAG_RX) &&
3796 		 (netdev->features & NETIF_F_HW_VLAN_CTAG_RX))
3797 		ret = ice_vsi_manage_vlan_stripping(vsi, false);
3798 	else if ((features & NETIF_F_HW_VLAN_CTAG_TX) &&
3799 		 !(netdev->features & NETIF_F_HW_VLAN_CTAG_TX))
3800 		ret = ice_vsi_manage_vlan_insertion(vsi);
3801 	else if (!(features & NETIF_F_HW_VLAN_CTAG_TX) &&
3802 		 (netdev->features & NETIF_F_HW_VLAN_CTAG_TX))
3803 		ret = ice_vsi_manage_vlan_insertion(vsi);
3804 
3805 	return ret;
3806 }
3807 
3808 /**
3809  * ice_vsi_vlan_setup - Setup vlan offload properties on a VSI
3810  * @vsi: VSI to setup vlan properties for
3811  */
3812 static int ice_vsi_vlan_setup(struct ice_vsi *vsi)
3813 {
3814 	int ret = 0;
3815 
3816 	if (vsi->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
3817 		ret = ice_vsi_manage_vlan_stripping(vsi, true);
3818 	if (vsi->netdev->features & NETIF_F_HW_VLAN_CTAG_TX)
3819 		ret = ice_vsi_manage_vlan_insertion(vsi);
3820 
3821 	return ret;
3822 }
3823 
3824 /**
3825  * ice_restore_vlan - Reinstate VLANs when vsi/netdev comes back up
3826  * @vsi: the VSI being brought back up
3827  */
3828 static int ice_restore_vlan(struct ice_vsi *vsi)
3829 {
3830 	int err;
3831 	u16 vid;
3832 
3833 	if (!vsi->netdev)
3834 		return -EINVAL;
3835 
3836 	err = ice_vsi_vlan_setup(vsi);
3837 	if (err)
3838 		return err;
3839 
3840 	for_each_set_bit(vid, vsi->active_vlans, VLAN_N_VID) {
3841 		err = ice_vlan_rx_add_vid(vsi->netdev, htons(ETH_P_8021Q), vid);
3842 		if (err)
3843 			break;
3844 	}
3845 
3846 	return err;
3847 }
3848 
3849 /**
3850  * ice_setup_tx_ctx - setup a struct ice_tlan_ctx instance
3851  * @ring: The Tx ring to configure
3852  * @tlan_ctx: Pointer to the Tx LAN queue context structure to be initialized
3853  * @pf_q: queue index in the PF space
3854  *
3855  * Configure the Tx descriptor ring in TLAN context.
3856  */
3857 static void
3858 ice_setup_tx_ctx(struct ice_ring *ring, struct ice_tlan_ctx *tlan_ctx, u16 pf_q)
3859 {
3860 	struct ice_vsi *vsi = ring->vsi;
3861 	struct ice_hw *hw = &vsi->back->hw;
3862 
3863 	tlan_ctx->base = ring->dma >> ICE_TLAN_CTX_BASE_S;
3864 
3865 	tlan_ctx->port_num = vsi->port_info->lport;
3866 
3867 	/* Transmit Queue Length */
3868 	tlan_ctx->qlen = ring->count;
3869 
3870 	/* PF number */
3871 	tlan_ctx->pf_num = hw->pf_id;
3872 
3873 	/* queue belongs to a specific VSI type
3874 	 * VF / VM index should be programmed per vmvf_type setting:
3875 	 * for vmvf_type = VF, it is VF number between 0-256
3876 	 * for vmvf_type = VM, it is VM number between 0-767
3877 	 * for PF or EMP this field should be set to zero
3878 	 */
3879 	switch (vsi->type) {
3880 	case ICE_VSI_PF:
3881 		tlan_ctx->vmvf_type = ICE_TLAN_CTX_VMVF_TYPE_PF;
3882 		break;
3883 	default:
3884 		return;
3885 	}
3886 
3887 	/* make sure the context is associated with the right VSI */
3888 	tlan_ctx->src_vsi = vsi->vsi_num;
3889 
3890 	tlan_ctx->tso_ena = ICE_TX_LEGACY;
3891 	tlan_ctx->tso_qnum = pf_q;
3892 
3893 	/* Legacy or Advanced Host Interface:
3894 	 * 0: Advanced Host Interface
3895 	 * 1: Legacy Host Interface
3896 	 */
3897 	tlan_ctx->legacy_int = ICE_TX_LEGACY;
3898 }
3899 
3900 /**
3901  * ice_vsi_cfg_txqs - Configure the VSI for Tx
3902  * @vsi: the VSI being configured
3903  *
3904  * Return 0 on success and a negative value on error
3905  * Configure the Tx VSI for operation.
3906  */
3907 static int ice_vsi_cfg_txqs(struct ice_vsi *vsi)
3908 {
3909 	struct ice_aqc_add_tx_qgrp *qg_buf;
3910 	struct ice_aqc_add_txqs_perq *txq;
3911 	struct ice_pf *pf = vsi->back;
3912 	enum ice_status status;
3913 	u16 buf_len, i, pf_q;
3914 	int err = 0, tc = 0;
3915 	u8 num_q_grps;
3916 
3917 	buf_len = sizeof(struct ice_aqc_add_tx_qgrp);
3918 	qg_buf = devm_kzalloc(&pf->pdev->dev, buf_len, GFP_KERNEL);
3919 	if (!qg_buf)
3920 		return -ENOMEM;
3921 
3922 	if (vsi->num_txq > ICE_MAX_TXQ_PER_TXQG) {
3923 		err = -EINVAL;
3924 		goto err_cfg_txqs;
3925 	}
3926 	qg_buf->num_txqs = 1;
3927 	num_q_grps = 1;
3928 
3929 	/* set up and configure the tx queues */
3930 	ice_for_each_txq(vsi, i) {
3931 		struct ice_tlan_ctx tlan_ctx = { 0 };
3932 
3933 		pf_q = vsi->txq_map[i];
3934 		ice_setup_tx_ctx(vsi->tx_rings[i], &tlan_ctx, pf_q);
3935 		/* copy context contents into the qg_buf */
3936 		qg_buf->txqs[0].txq_id = cpu_to_le16(pf_q);
3937 		ice_set_ctx((u8 *)&tlan_ctx, qg_buf->txqs[0].txq_ctx,
3938 			    ice_tlan_ctx_info);
3939 
3940 		/* init queue specific tail reg. It is referred as transmit
3941 		 * comm scheduler queue doorbell.
3942 		 */
3943 		vsi->tx_rings[i]->tail = pf->hw.hw_addr + QTX_COMM_DBELL(pf_q);
3944 		status = ice_ena_vsi_txq(vsi->port_info, vsi->vsi_num, tc,
3945 					 num_q_grps, qg_buf, buf_len, NULL);
3946 		if (status) {
3947 			dev_err(&vsi->back->pdev->dev,
3948 				"Failed to set LAN Tx queue context, error: %d\n",
3949 				status);
3950 			err = -ENODEV;
3951 			goto err_cfg_txqs;
3952 		}
3953 
3954 		/* Add Tx Queue TEID into the VSI tx ring from the response
3955 		 * This will complete configuring and enabling the queue.
3956 		 */
3957 		txq = &qg_buf->txqs[0];
3958 		if (pf_q == le16_to_cpu(txq->txq_id))
3959 			vsi->tx_rings[i]->txq_teid =
3960 				le32_to_cpu(txq->q_teid);
3961 	}
3962 err_cfg_txqs:
3963 	devm_kfree(&pf->pdev->dev, qg_buf);
3964 	return err;
3965 }
3966 
3967 /**
3968  * ice_setup_rx_ctx - Configure a receive ring context
3969  * @ring: The Rx ring to configure
3970  *
3971  * Configure the Rx descriptor ring in RLAN context.
3972  */
3973 static int ice_setup_rx_ctx(struct ice_ring *ring)
3974 {
3975 	struct ice_vsi *vsi = ring->vsi;
3976 	struct ice_hw *hw = &vsi->back->hw;
3977 	u32 rxdid = ICE_RXDID_FLEX_NIC;
3978 	struct ice_rlan_ctx rlan_ctx;
3979 	u32 regval;
3980 	u16 pf_q;
3981 	int err;
3982 
3983 	/* what is RX queue number in global space of 2K rx queues */
3984 	pf_q = vsi->rxq_map[ring->q_index];
3985 
3986 	/* clear the context structure first */
3987 	memset(&rlan_ctx, 0, sizeof(rlan_ctx));
3988 
3989 	rlan_ctx.base = ring->dma >> 7;
3990 
3991 	rlan_ctx.qlen = ring->count;
3992 
3993 	/* Receive Packet Data Buffer Size.
3994 	 * The Packet Data Buffer Size is defined in 128 byte units.
3995 	 */
3996 	rlan_ctx.dbuf = vsi->rx_buf_len >> ICE_RLAN_CTX_DBUF_S;
3997 
3998 	/* use 32 byte descriptors */
3999 	rlan_ctx.dsize = 1;
4000 
4001 	/* Strip the Ethernet CRC bytes before the packet is posted to host
4002 	 * memory.
4003 	 */
4004 	rlan_ctx.crcstrip = 1;
4005 
4006 	/* L2TSEL flag defines the reported L2 Tags in the receive descriptor */
4007 	rlan_ctx.l2tsel = 1;
4008 
4009 	rlan_ctx.dtype = ICE_RX_DTYPE_NO_SPLIT;
4010 	rlan_ctx.hsplit_0 = ICE_RLAN_RX_HSPLIT_0_NO_SPLIT;
4011 	rlan_ctx.hsplit_1 = ICE_RLAN_RX_HSPLIT_1_NO_SPLIT;
4012 
4013 	/* This controls whether VLAN is stripped from inner headers
4014 	 * The VLAN in the inner L2 header is stripped to the receive
4015 	 * descriptor if enabled by this flag.
4016 	 */
4017 	rlan_ctx.showiv = 0;
4018 
4019 	/* Max packet size for this queue - must not be set to a larger value
4020 	 * than 5 x DBUF
4021 	 */
4022 	rlan_ctx.rxmax = min_t(u16, vsi->max_frame,
4023 			       ICE_MAX_CHAINED_RX_BUFS * vsi->rx_buf_len);
4024 
4025 	/* Rx queue threshold in units of 64 */
4026 	rlan_ctx.lrxqthresh = 1;
4027 
4028 	 /* Enable Flexible Descriptors in the queue context which
4029 	  * allows this driver to select a specific receive descriptor format
4030 	  */
4031 	regval = rd32(hw, QRXFLXP_CNTXT(pf_q));
4032 	regval |= (rxdid << QRXFLXP_CNTXT_RXDID_IDX_S) &
4033 		QRXFLXP_CNTXT_RXDID_IDX_M;
4034 
4035 	/* increasing context priority to pick up profile id;
4036 	 * default is 0x01; setting to 0x03 to ensure profile
4037 	 * is programming if prev context is of same priority
4038 	 */
4039 	regval |= (0x03 << QRXFLXP_CNTXT_RXDID_PRIO_S) &
4040 		QRXFLXP_CNTXT_RXDID_PRIO_M;
4041 
4042 	wr32(hw, QRXFLXP_CNTXT(pf_q), regval);
4043 
4044 	/* Absolute queue number out of 2K needs to be passed */
4045 	err = ice_write_rxq_ctx(hw, &rlan_ctx, pf_q);
4046 	if (err) {
4047 		dev_err(&vsi->back->pdev->dev,
4048 			"Failed to set LAN Rx queue context for absolute Rx queue %d error: %d\n",
4049 			pf_q, err);
4050 		return -EIO;
4051 	}
4052 
4053 	/* init queue specific tail register */
4054 	ring->tail = hw->hw_addr + QRX_TAIL(pf_q);
4055 	writel(0, ring->tail);
4056 	ice_alloc_rx_bufs(ring, ICE_DESC_UNUSED(ring));
4057 
4058 	return 0;
4059 }
4060 
4061 /**
4062  * ice_vsi_cfg_rxqs - Configure the VSI for Rx
4063  * @vsi: the VSI being configured
4064  *
4065  * Return 0 on success and a negative value on error
4066  * Configure the Rx VSI for operation.
4067  */
4068 static int ice_vsi_cfg_rxqs(struct ice_vsi *vsi)
4069 {
4070 	int err = 0;
4071 	u16 i;
4072 
4073 	if (vsi->netdev && vsi->netdev->mtu > ETH_DATA_LEN)
4074 		vsi->max_frame = vsi->netdev->mtu +
4075 			ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
4076 	else
4077 		vsi->max_frame = ICE_RXBUF_2048;
4078 
4079 	vsi->rx_buf_len = ICE_RXBUF_2048;
4080 	/* set up individual rings */
4081 	for (i = 0; i < vsi->num_rxq && !err; i++)
4082 		err = ice_setup_rx_ctx(vsi->rx_rings[i]);
4083 
4084 	if (err) {
4085 		dev_err(&vsi->back->pdev->dev, "ice_setup_rx_ctx failed\n");
4086 		return -EIO;
4087 	}
4088 	return err;
4089 }
4090 
4091 /**
4092  * ice_vsi_cfg - Setup the VSI
4093  * @vsi: the VSI being configured
4094  *
4095  * Return 0 on success and negative value on error
4096  */
4097 static int ice_vsi_cfg(struct ice_vsi *vsi)
4098 {
4099 	int err;
4100 
4101 	ice_set_rx_mode(vsi->netdev);
4102 
4103 	err = ice_restore_vlan(vsi);
4104 	if (err)
4105 		return err;
4106 
4107 	err = ice_vsi_cfg_txqs(vsi);
4108 	if (!err)
4109 		err = ice_vsi_cfg_rxqs(vsi);
4110 
4111 	return err;
4112 }
4113 
4114 /**
4115  * ice_vsi_stop_tx_rings - Disable Tx rings
4116  * @vsi: the VSI being configured
4117  */
4118 static int ice_vsi_stop_tx_rings(struct ice_vsi *vsi)
4119 {
4120 	struct ice_pf *pf = vsi->back;
4121 	struct ice_hw *hw = &pf->hw;
4122 	enum ice_status status;
4123 	u32 *q_teids, val;
4124 	u16 *q_ids, i;
4125 	int err = 0;
4126 
4127 	if (vsi->num_txq > ICE_LAN_TXQ_MAX_QDIS)
4128 		return -EINVAL;
4129 
4130 	q_teids = devm_kcalloc(&pf->pdev->dev, vsi->num_txq, sizeof(*q_teids),
4131 			       GFP_KERNEL);
4132 	if (!q_teids)
4133 		return -ENOMEM;
4134 
4135 	q_ids = devm_kcalloc(&pf->pdev->dev, vsi->num_txq, sizeof(*q_ids),
4136 			     GFP_KERNEL);
4137 	if (!q_ids) {
4138 		err = -ENOMEM;
4139 		goto err_alloc_q_ids;
4140 	}
4141 
4142 	/* set up the tx queue list to be disabled */
4143 	ice_for_each_txq(vsi, i) {
4144 		u16 v_idx;
4145 
4146 		if (!vsi->tx_rings || !vsi->tx_rings[i]) {
4147 			err = -EINVAL;
4148 			goto err_out;
4149 		}
4150 
4151 		q_ids[i] = vsi->txq_map[i];
4152 		q_teids[i] = vsi->tx_rings[i]->txq_teid;
4153 
4154 		/* clear cause_ena bit for disabled queues */
4155 		val = rd32(hw, QINT_TQCTL(vsi->tx_rings[i]->reg_idx));
4156 		val &= ~QINT_TQCTL_CAUSE_ENA_M;
4157 		wr32(hw, QINT_TQCTL(vsi->tx_rings[i]->reg_idx), val);
4158 
4159 		/* software is expected to wait for 100 ns */
4160 		ndelay(100);
4161 
4162 		/* trigger a software interrupt for the vector associated to
4163 		 * the queue to schedule napi handler
4164 		 */
4165 		v_idx = vsi->tx_rings[i]->q_vector->v_idx;
4166 		wr32(hw, GLINT_DYN_CTL(vsi->base_vector + v_idx),
4167 		     GLINT_DYN_CTL_SWINT_TRIG_M | GLINT_DYN_CTL_INTENA_MSK_M);
4168 	}
4169 	status = ice_dis_vsi_txq(vsi->port_info, vsi->num_txq, q_ids, q_teids,
4170 				 NULL);
4171 	if (status) {
4172 		dev_err(&pf->pdev->dev,
4173 			"Failed to disable LAN Tx queues, error: %d\n",
4174 			status);
4175 		err = -ENODEV;
4176 	}
4177 
4178 err_out:
4179 	devm_kfree(&pf->pdev->dev, q_ids);
4180 
4181 err_alloc_q_ids:
4182 	devm_kfree(&pf->pdev->dev, q_teids);
4183 
4184 	return err;
4185 }
4186 
4187 /**
4188  * ice_pf_rxq_wait - Wait for a PF's Rx queue to be enabled or disabled
4189  * @pf: the PF being configured
4190  * @pf_q: the PF queue
4191  * @ena: enable or disable state of the queue
4192  *
4193  * This routine will wait for the given Rx queue of the PF to reach the
4194  * enabled or disabled state.
4195  * Returns -ETIMEDOUT in case of failing to reach the requested state after
4196  * multiple retries; else will return 0 in case of success.
4197  */
4198 static int ice_pf_rxq_wait(struct ice_pf *pf, int pf_q, bool ena)
4199 {
4200 	int i;
4201 
4202 	for (i = 0; i < ICE_Q_WAIT_RETRY_LIMIT; i++) {
4203 		u32 rx_reg = rd32(&pf->hw, QRX_CTRL(pf_q));
4204 
4205 		if (ena == !!(rx_reg & QRX_CTRL_QENA_STAT_M))
4206 			break;
4207 
4208 		usleep_range(10, 20);
4209 	}
4210 	if (i >= ICE_Q_WAIT_RETRY_LIMIT)
4211 		return -ETIMEDOUT;
4212 
4213 	return 0;
4214 }
4215 
4216 /**
4217  * ice_vsi_ctrl_rx_rings - Start or stop a VSI's rx rings
4218  * @vsi: the VSI being configured
4219  * @ena: start or stop the rx rings
4220  */
4221 static int ice_vsi_ctrl_rx_rings(struct ice_vsi *vsi, bool ena)
4222 {
4223 	struct ice_pf *pf = vsi->back;
4224 	struct ice_hw *hw = &pf->hw;
4225 	int i, j, ret = 0;
4226 
4227 	for (i = 0; i < vsi->num_rxq; i++) {
4228 		int pf_q = vsi->rxq_map[i];
4229 		u32 rx_reg;
4230 
4231 		for (j = 0; j < ICE_Q_WAIT_MAX_RETRY; j++) {
4232 			rx_reg = rd32(hw, QRX_CTRL(pf_q));
4233 			if (((rx_reg >> QRX_CTRL_QENA_REQ_S) & 1) ==
4234 			    ((rx_reg >> QRX_CTRL_QENA_STAT_S) & 1))
4235 				break;
4236 			usleep_range(1000, 2000);
4237 		}
4238 
4239 		/* Skip if the queue is already in the requested state */
4240 		if (ena == !!(rx_reg & QRX_CTRL_QENA_STAT_M))
4241 			continue;
4242 
4243 		/* turn on/off the queue */
4244 		if (ena)
4245 			rx_reg |= QRX_CTRL_QENA_REQ_M;
4246 		else
4247 			rx_reg &= ~QRX_CTRL_QENA_REQ_M;
4248 		wr32(hw, QRX_CTRL(pf_q), rx_reg);
4249 
4250 		/* wait for the change to finish */
4251 		ret = ice_pf_rxq_wait(pf, pf_q, ena);
4252 		if (ret) {
4253 			dev_err(&pf->pdev->dev,
4254 				"VSI idx %d Rx ring %d %sable timeout\n",
4255 				vsi->idx, pf_q, (ena ? "en" : "dis"));
4256 			break;
4257 		}
4258 	}
4259 
4260 	return ret;
4261 }
4262 
4263 /**
4264  * ice_vsi_start_rx_rings - start VSI's rx rings
4265  * @vsi: the VSI whose rings are to be started
4266  *
4267  * Returns 0 on success and a negative value on error
4268  */
4269 static int ice_vsi_start_rx_rings(struct ice_vsi *vsi)
4270 {
4271 	return ice_vsi_ctrl_rx_rings(vsi, true);
4272 }
4273 
4274 /**
4275  * ice_vsi_stop_rx_rings - stop VSI's rx rings
4276  * @vsi: the VSI
4277  *
4278  * Returns 0 on success and a negative value on error
4279  */
4280 static int ice_vsi_stop_rx_rings(struct ice_vsi *vsi)
4281 {
4282 	return ice_vsi_ctrl_rx_rings(vsi, false);
4283 }
4284 
4285 /**
4286  * ice_vsi_stop_tx_rx_rings - stop VSI's tx and rx rings
4287  * @vsi: the VSI
4288  * Returns 0 on success and a negative value on error
4289  */
4290 static int ice_vsi_stop_tx_rx_rings(struct ice_vsi *vsi)
4291 {
4292 	int err_tx, err_rx;
4293 
4294 	err_tx = ice_vsi_stop_tx_rings(vsi);
4295 	if (err_tx)
4296 		dev_dbg(&vsi->back->pdev->dev, "Failed to disable Tx rings\n");
4297 
4298 	err_rx = ice_vsi_stop_rx_rings(vsi);
4299 	if (err_rx)
4300 		dev_dbg(&vsi->back->pdev->dev, "Failed to disable Rx rings\n");
4301 
4302 	if (err_tx || err_rx)
4303 		return -EIO;
4304 
4305 	return 0;
4306 }
4307 
4308 /**
4309  * ice_napi_enable_all - Enable NAPI for all q_vectors in the VSI
4310  * @vsi: the VSI being configured
4311  */
4312 static void ice_napi_enable_all(struct ice_vsi *vsi)
4313 {
4314 	int q_idx;
4315 
4316 	if (!vsi->netdev)
4317 		return;
4318 
4319 	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
4320 		napi_enable(&vsi->q_vectors[q_idx]->napi);
4321 }
4322 
4323 /**
4324  * ice_up_complete - Finish the last steps of bringing up a connection
4325  * @vsi: The VSI being configured
4326  *
4327  * Return 0 on success and negative value on error
4328  */
4329 static int ice_up_complete(struct ice_vsi *vsi)
4330 {
4331 	struct ice_pf *pf = vsi->back;
4332 	int err;
4333 
4334 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
4335 		ice_vsi_cfg_msix(vsi);
4336 	else
4337 		return -ENOTSUPP;
4338 
4339 	/* Enable only Rx rings, Tx rings were enabled by the FW when the
4340 	 * Tx queue group list was configured and the context bits were
4341 	 * programmed using ice_vsi_cfg_txqs
4342 	 */
4343 	err = ice_vsi_start_rx_rings(vsi);
4344 	if (err)
4345 		return err;
4346 
4347 	clear_bit(__ICE_DOWN, vsi->state);
4348 	ice_napi_enable_all(vsi);
4349 	ice_vsi_ena_irq(vsi);
4350 
4351 	if (vsi->port_info &&
4352 	    (vsi->port_info->phy.link_info.link_info & ICE_AQ_LINK_UP) &&
4353 	    vsi->netdev) {
4354 		ice_print_link_msg(vsi, true);
4355 		netif_tx_start_all_queues(vsi->netdev);
4356 		netif_carrier_on(vsi->netdev);
4357 	}
4358 
4359 	ice_service_task_schedule(pf);
4360 
4361 	return err;
4362 }
4363 
4364 /**
4365  * ice_up - Bring the connection back up after being down
4366  * @vsi: VSI being configured
4367  */
4368 int ice_up(struct ice_vsi *vsi)
4369 {
4370 	int err;
4371 
4372 	err = ice_vsi_cfg(vsi);
4373 	if (!err)
4374 		err = ice_up_complete(vsi);
4375 
4376 	return err;
4377 }
4378 
4379 /**
4380  * ice_fetch_u64_stats_per_ring - get packets and bytes stats per ring
4381  * @ring: Tx or Rx ring to read stats from
4382  * @pkts: packets stats counter
4383  * @bytes: bytes stats counter
4384  *
4385  * This function fetches stats from the ring considering the atomic operations
4386  * that needs to be performed to read u64 values in 32 bit machine.
4387  */
4388 static void ice_fetch_u64_stats_per_ring(struct ice_ring *ring, u64 *pkts,
4389 					 u64 *bytes)
4390 {
4391 	unsigned int start;
4392 	*pkts = 0;
4393 	*bytes = 0;
4394 
4395 	if (!ring)
4396 		return;
4397 	do {
4398 		start = u64_stats_fetch_begin_irq(&ring->syncp);
4399 		*pkts = ring->stats.pkts;
4400 		*bytes = ring->stats.bytes;
4401 	} while (u64_stats_fetch_retry_irq(&ring->syncp, start));
4402 }
4403 
4404 /**
4405  * ice_stat_update40 - read 40 bit stat from the chip and update stat values
4406  * @hw: ptr to the hardware info
4407  * @hireg: high 32 bit HW register to read from
4408  * @loreg: low 32 bit HW register to read from
4409  * @prev_stat_loaded: bool to specify if previous stats are loaded
4410  * @prev_stat: ptr to previous loaded stat value
4411  * @cur_stat: ptr to current stat value
4412  */
4413 static void ice_stat_update40(struct ice_hw *hw, u32 hireg, u32 loreg,
4414 			      bool prev_stat_loaded, u64 *prev_stat,
4415 			      u64 *cur_stat)
4416 {
4417 	u64 new_data;
4418 
4419 	new_data = rd32(hw, loreg);
4420 	new_data |= ((u64)(rd32(hw, hireg) & 0xFFFF)) << 32;
4421 
4422 	/* device stats are not reset at PFR, they likely will not be zeroed
4423 	 * when the driver starts. So save the first values read and use them as
4424 	 * offsets to be subtracted from the raw values in order to report stats
4425 	 * that count from zero.
4426 	 */
4427 	if (!prev_stat_loaded)
4428 		*prev_stat = new_data;
4429 	if (likely(new_data >= *prev_stat))
4430 		*cur_stat = new_data - *prev_stat;
4431 	else
4432 		/* to manage the potential roll-over */
4433 		*cur_stat = (new_data + BIT_ULL(40)) - *prev_stat;
4434 	*cur_stat &= 0xFFFFFFFFFFULL;
4435 }
4436 
4437 /**
4438  * ice_stat_update32 - read 32 bit stat from the chip and update stat values
4439  * @hw: ptr to the hardware info
4440  * @reg: HW register to read from
4441  * @prev_stat_loaded: bool to specify if previous stats are loaded
4442  * @prev_stat: ptr to previous loaded stat value
4443  * @cur_stat: ptr to current stat value
4444  */
4445 static void ice_stat_update32(struct ice_hw *hw, u32 reg, bool prev_stat_loaded,
4446 			      u64 *prev_stat, u64 *cur_stat)
4447 {
4448 	u32 new_data;
4449 
4450 	new_data = rd32(hw, reg);
4451 
4452 	/* device stats are not reset at PFR, they likely will not be zeroed
4453 	 * when the driver starts. So save the first values read and use them as
4454 	 * offsets to be subtracted from the raw values in order to report stats
4455 	 * that count from zero.
4456 	 */
4457 	if (!prev_stat_loaded)
4458 		*prev_stat = new_data;
4459 	if (likely(new_data >= *prev_stat))
4460 		*cur_stat = new_data - *prev_stat;
4461 	else
4462 		/* to manage the potential roll-over */
4463 		*cur_stat = (new_data + BIT_ULL(32)) - *prev_stat;
4464 }
4465 
4466 /**
4467  * ice_update_eth_stats - Update VSI-specific ethernet statistics counters
4468  * @vsi: the VSI to be updated
4469  */
4470 static void ice_update_eth_stats(struct ice_vsi *vsi)
4471 {
4472 	struct ice_eth_stats *prev_es, *cur_es;
4473 	struct ice_hw *hw = &vsi->back->hw;
4474 	u16 vsi_num = vsi->vsi_num;    /* HW absolute index of a VSI */
4475 
4476 	prev_es = &vsi->eth_stats_prev;
4477 	cur_es = &vsi->eth_stats;
4478 
4479 	ice_stat_update40(hw, GLV_GORCH(vsi_num), GLV_GORCL(vsi_num),
4480 			  vsi->stat_offsets_loaded, &prev_es->rx_bytes,
4481 			  &cur_es->rx_bytes);
4482 
4483 	ice_stat_update40(hw, GLV_UPRCH(vsi_num), GLV_UPRCL(vsi_num),
4484 			  vsi->stat_offsets_loaded, &prev_es->rx_unicast,
4485 			  &cur_es->rx_unicast);
4486 
4487 	ice_stat_update40(hw, GLV_MPRCH(vsi_num), GLV_MPRCL(vsi_num),
4488 			  vsi->stat_offsets_loaded, &prev_es->rx_multicast,
4489 			  &cur_es->rx_multicast);
4490 
4491 	ice_stat_update40(hw, GLV_BPRCH(vsi_num), GLV_BPRCL(vsi_num),
4492 			  vsi->stat_offsets_loaded, &prev_es->rx_broadcast,
4493 			  &cur_es->rx_broadcast);
4494 
4495 	ice_stat_update32(hw, GLV_RDPC(vsi_num), vsi->stat_offsets_loaded,
4496 			  &prev_es->rx_discards, &cur_es->rx_discards);
4497 
4498 	ice_stat_update40(hw, GLV_GOTCH(vsi_num), GLV_GOTCL(vsi_num),
4499 			  vsi->stat_offsets_loaded, &prev_es->tx_bytes,
4500 			  &cur_es->tx_bytes);
4501 
4502 	ice_stat_update40(hw, GLV_UPTCH(vsi_num), GLV_UPTCL(vsi_num),
4503 			  vsi->stat_offsets_loaded, &prev_es->tx_unicast,
4504 			  &cur_es->tx_unicast);
4505 
4506 	ice_stat_update40(hw, GLV_MPTCH(vsi_num), GLV_MPTCL(vsi_num),
4507 			  vsi->stat_offsets_loaded, &prev_es->tx_multicast,
4508 			  &cur_es->tx_multicast);
4509 
4510 	ice_stat_update40(hw, GLV_BPTCH(vsi_num), GLV_BPTCL(vsi_num),
4511 			  vsi->stat_offsets_loaded, &prev_es->tx_broadcast,
4512 			  &cur_es->tx_broadcast);
4513 
4514 	ice_stat_update32(hw, GLV_TEPC(vsi_num), vsi->stat_offsets_loaded,
4515 			  &prev_es->tx_errors, &cur_es->tx_errors);
4516 
4517 	vsi->stat_offsets_loaded = true;
4518 }
4519 
4520 /**
4521  * ice_update_vsi_ring_stats - Update VSI stats counters
4522  * @vsi: the VSI to be updated
4523  */
4524 static void ice_update_vsi_ring_stats(struct ice_vsi *vsi)
4525 {
4526 	struct rtnl_link_stats64 *vsi_stats = &vsi->net_stats;
4527 	struct ice_ring *ring;
4528 	u64 pkts, bytes;
4529 	int i;
4530 
4531 	/* reset netdev stats */
4532 	vsi_stats->tx_packets = 0;
4533 	vsi_stats->tx_bytes = 0;
4534 	vsi_stats->rx_packets = 0;
4535 	vsi_stats->rx_bytes = 0;
4536 
4537 	/* reset non-netdev (extended) stats */
4538 	vsi->tx_restart = 0;
4539 	vsi->tx_busy = 0;
4540 	vsi->tx_linearize = 0;
4541 	vsi->rx_buf_failed = 0;
4542 	vsi->rx_page_failed = 0;
4543 
4544 	rcu_read_lock();
4545 
4546 	/* update Tx rings counters */
4547 	ice_for_each_txq(vsi, i) {
4548 		ring = READ_ONCE(vsi->tx_rings[i]);
4549 		ice_fetch_u64_stats_per_ring(ring, &pkts, &bytes);
4550 		vsi_stats->tx_packets += pkts;
4551 		vsi_stats->tx_bytes += bytes;
4552 		vsi->tx_restart += ring->tx_stats.restart_q;
4553 		vsi->tx_busy += ring->tx_stats.tx_busy;
4554 		vsi->tx_linearize += ring->tx_stats.tx_linearize;
4555 	}
4556 
4557 	/* update Rx rings counters */
4558 	ice_for_each_rxq(vsi, i) {
4559 		ring = READ_ONCE(vsi->rx_rings[i]);
4560 		ice_fetch_u64_stats_per_ring(ring, &pkts, &bytes);
4561 		vsi_stats->rx_packets += pkts;
4562 		vsi_stats->rx_bytes += bytes;
4563 		vsi->rx_buf_failed += ring->rx_stats.alloc_buf_failed;
4564 		vsi->rx_page_failed += ring->rx_stats.alloc_page_failed;
4565 	}
4566 
4567 	rcu_read_unlock();
4568 }
4569 
4570 /**
4571  * ice_update_vsi_stats - Update VSI stats counters
4572  * @vsi: the VSI to be updated
4573  */
4574 static void ice_update_vsi_stats(struct ice_vsi *vsi)
4575 {
4576 	struct rtnl_link_stats64 *cur_ns = &vsi->net_stats;
4577 	struct ice_eth_stats *cur_es = &vsi->eth_stats;
4578 	struct ice_pf *pf = vsi->back;
4579 
4580 	if (test_bit(__ICE_DOWN, vsi->state) ||
4581 	    test_bit(__ICE_CFG_BUSY, pf->state))
4582 		return;
4583 
4584 	/* get stats as recorded by Tx/Rx rings */
4585 	ice_update_vsi_ring_stats(vsi);
4586 
4587 	/* get VSI stats as recorded by the hardware */
4588 	ice_update_eth_stats(vsi);
4589 
4590 	cur_ns->tx_errors = cur_es->tx_errors;
4591 	cur_ns->rx_dropped = cur_es->rx_discards;
4592 	cur_ns->tx_dropped = cur_es->tx_discards;
4593 	cur_ns->multicast = cur_es->rx_multicast;
4594 
4595 	/* update some more netdev stats if this is main VSI */
4596 	if (vsi->type == ICE_VSI_PF) {
4597 		cur_ns->rx_crc_errors = pf->stats.crc_errors;
4598 		cur_ns->rx_errors = pf->stats.crc_errors +
4599 				    pf->stats.illegal_bytes;
4600 		cur_ns->rx_length_errors = pf->stats.rx_len_errors;
4601 	}
4602 }
4603 
4604 /**
4605  * ice_update_pf_stats - Update PF port stats counters
4606  * @pf: PF whose stats needs to be updated
4607  */
4608 static void ice_update_pf_stats(struct ice_pf *pf)
4609 {
4610 	struct ice_hw_port_stats *prev_ps, *cur_ps;
4611 	struct ice_hw *hw = &pf->hw;
4612 	u8 pf_id;
4613 
4614 	prev_ps = &pf->stats_prev;
4615 	cur_ps = &pf->stats;
4616 	pf_id = hw->pf_id;
4617 
4618 	ice_stat_update40(hw, GLPRT_GORCH(pf_id), GLPRT_GORCL(pf_id),
4619 			  pf->stat_prev_loaded, &prev_ps->eth.rx_bytes,
4620 			  &cur_ps->eth.rx_bytes);
4621 
4622 	ice_stat_update40(hw, GLPRT_UPRCH(pf_id), GLPRT_UPRCL(pf_id),
4623 			  pf->stat_prev_loaded, &prev_ps->eth.rx_unicast,
4624 			  &cur_ps->eth.rx_unicast);
4625 
4626 	ice_stat_update40(hw, GLPRT_MPRCH(pf_id), GLPRT_MPRCL(pf_id),
4627 			  pf->stat_prev_loaded, &prev_ps->eth.rx_multicast,
4628 			  &cur_ps->eth.rx_multicast);
4629 
4630 	ice_stat_update40(hw, GLPRT_BPRCH(pf_id), GLPRT_BPRCL(pf_id),
4631 			  pf->stat_prev_loaded, &prev_ps->eth.rx_broadcast,
4632 			  &cur_ps->eth.rx_broadcast);
4633 
4634 	ice_stat_update40(hw, GLPRT_GOTCH(pf_id), GLPRT_GOTCL(pf_id),
4635 			  pf->stat_prev_loaded, &prev_ps->eth.tx_bytes,
4636 			  &cur_ps->eth.tx_bytes);
4637 
4638 	ice_stat_update40(hw, GLPRT_UPTCH(pf_id), GLPRT_UPTCL(pf_id),
4639 			  pf->stat_prev_loaded, &prev_ps->eth.tx_unicast,
4640 			  &cur_ps->eth.tx_unicast);
4641 
4642 	ice_stat_update40(hw, GLPRT_MPTCH(pf_id), GLPRT_MPTCL(pf_id),
4643 			  pf->stat_prev_loaded, &prev_ps->eth.tx_multicast,
4644 			  &cur_ps->eth.tx_multicast);
4645 
4646 	ice_stat_update40(hw, GLPRT_BPTCH(pf_id), GLPRT_BPTCL(pf_id),
4647 			  pf->stat_prev_loaded, &prev_ps->eth.tx_broadcast,
4648 			  &cur_ps->eth.tx_broadcast);
4649 
4650 	ice_stat_update32(hw, GLPRT_TDOLD(pf_id), pf->stat_prev_loaded,
4651 			  &prev_ps->tx_dropped_link_down,
4652 			  &cur_ps->tx_dropped_link_down);
4653 
4654 	ice_stat_update40(hw, GLPRT_PRC64H(pf_id), GLPRT_PRC64L(pf_id),
4655 			  pf->stat_prev_loaded, &prev_ps->rx_size_64,
4656 			  &cur_ps->rx_size_64);
4657 
4658 	ice_stat_update40(hw, GLPRT_PRC127H(pf_id), GLPRT_PRC127L(pf_id),
4659 			  pf->stat_prev_loaded, &prev_ps->rx_size_127,
4660 			  &cur_ps->rx_size_127);
4661 
4662 	ice_stat_update40(hw, GLPRT_PRC255H(pf_id), GLPRT_PRC255L(pf_id),
4663 			  pf->stat_prev_loaded, &prev_ps->rx_size_255,
4664 			  &cur_ps->rx_size_255);
4665 
4666 	ice_stat_update40(hw, GLPRT_PRC511H(pf_id), GLPRT_PRC511L(pf_id),
4667 			  pf->stat_prev_loaded, &prev_ps->rx_size_511,
4668 			  &cur_ps->rx_size_511);
4669 
4670 	ice_stat_update40(hw, GLPRT_PRC1023H(pf_id),
4671 			  GLPRT_PRC1023L(pf_id), pf->stat_prev_loaded,
4672 			  &prev_ps->rx_size_1023, &cur_ps->rx_size_1023);
4673 
4674 	ice_stat_update40(hw, GLPRT_PRC1522H(pf_id),
4675 			  GLPRT_PRC1522L(pf_id), pf->stat_prev_loaded,
4676 			  &prev_ps->rx_size_1522, &cur_ps->rx_size_1522);
4677 
4678 	ice_stat_update40(hw, GLPRT_PRC9522H(pf_id),
4679 			  GLPRT_PRC9522L(pf_id), pf->stat_prev_loaded,
4680 			  &prev_ps->rx_size_big, &cur_ps->rx_size_big);
4681 
4682 	ice_stat_update40(hw, GLPRT_PTC64H(pf_id), GLPRT_PTC64L(pf_id),
4683 			  pf->stat_prev_loaded, &prev_ps->tx_size_64,
4684 			  &cur_ps->tx_size_64);
4685 
4686 	ice_stat_update40(hw, GLPRT_PTC127H(pf_id), GLPRT_PTC127L(pf_id),
4687 			  pf->stat_prev_loaded, &prev_ps->tx_size_127,
4688 			  &cur_ps->tx_size_127);
4689 
4690 	ice_stat_update40(hw, GLPRT_PTC255H(pf_id), GLPRT_PTC255L(pf_id),
4691 			  pf->stat_prev_loaded, &prev_ps->tx_size_255,
4692 			  &cur_ps->tx_size_255);
4693 
4694 	ice_stat_update40(hw, GLPRT_PTC511H(pf_id), GLPRT_PTC511L(pf_id),
4695 			  pf->stat_prev_loaded, &prev_ps->tx_size_511,
4696 			  &cur_ps->tx_size_511);
4697 
4698 	ice_stat_update40(hw, GLPRT_PTC1023H(pf_id),
4699 			  GLPRT_PTC1023L(pf_id), pf->stat_prev_loaded,
4700 			  &prev_ps->tx_size_1023, &cur_ps->tx_size_1023);
4701 
4702 	ice_stat_update40(hw, GLPRT_PTC1522H(pf_id),
4703 			  GLPRT_PTC1522L(pf_id), pf->stat_prev_loaded,
4704 			  &prev_ps->tx_size_1522, &cur_ps->tx_size_1522);
4705 
4706 	ice_stat_update40(hw, GLPRT_PTC9522H(pf_id),
4707 			  GLPRT_PTC9522L(pf_id), pf->stat_prev_loaded,
4708 			  &prev_ps->tx_size_big, &cur_ps->tx_size_big);
4709 
4710 	ice_stat_update32(hw, GLPRT_LXONRXC(pf_id), pf->stat_prev_loaded,
4711 			  &prev_ps->link_xon_rx, &cur_ps->link_xon_rx);
4712 
4713 	ice_stat_update32(hw, GLPRT_LXOFFRXC(pf_id), pf->stat_prev_loaded,
4714 			  &prev_ps->link_xoff_rx, &cur_ps->link_xoff_rx);
4715 
4716 	ice_stat_update32(hw, GLPRT_LXONTXC(pf_id), pf->stat_prev_loaded,
4717 			  &prev_ps->link_xon_tx, &cur_ps->link_xon_tx);
4718 
4719 	ice_stat_update32(hw, GLPRT_LXOFFTXC(pf_id), pf->stat_prev_loaded,
4720 			  &prev_ps->link_xoff_tx, &cur_ps->link_xoff_tx);
4721 
4722 	ice_stat_update32(hw, GLPRT_CRCERRS(pf_id), pf->stat_prev_loaded,
4723 			  &prev_ps->crc_errors, &cur_ps->crc_errors);
4724 
4725 	ice_stat_update32(hw, GLPRT_ILLERRC(pf_id), pf->stat_prev_loaded,
4726 			  &prev_ps->illegal_bytes, &cur_ps->illegal_bytes);
4727 
4728 	ice_stat_update32(hw, GLPRT_MLFC(pf_id), pf->stat_prev_loaded,
4729 			  &prev_ps->mac_local_faults,
4730 			  &cur_ps->mac_local_faults);
4731 
4732 	ice_stat_update32(hw, GLPRT_MRFC(pf_id), pf->stat_prev_loaded,
4733 			  &prev_ps->mac_remote_faults,
4734 			  &cur_ps->mac_remote_faults);
4735 
4736 	ice_stat_update32(hw, GLPRT_RLEC(pf_id), pf->stat_prev_loaded,
4737 			  &prev_ps->rx_len_errors, &cur_ps->rx_len_errors);
4738 
4739 	ice_stat_update32(hw, GLPRT_RUC(pf_id), pf->stat_prev_loaded,
4740 			  &prev_ps->rx_undersize, &cur_ps->rx_undersize);
4741 
4742 	ice_stat_update32(hw, GLPRT_RFC(pf_id), pf->stat_prev_loaded,
4743 			  &prev_ps->rx_fragments, &cur_ps->rx_fragments);
4744 
4745 	ice_stat_update32(hw, GLPRT_ROC(pf_id), pf->stat_prev_loaded,
4746 			  &prev_ps->rx_oversize, &cur_ps->rx_oversize);
4747 
4748 	ice_stat_update32(hw, GLPRT_RJC(pf_id), pf->stat_prev_loaded,
4749 			  &prev_ps->rx_jabber, &cur_ps->rx_jabber);
4750 
4751 	pf->stat_prev_loaded = true;
4752 }
4753 
4754 /**
4755  * ice_get_stats64 - get statistics for network device structure
4756  * @netdev: network interface device structure
4757  * @stats: main device statistics structure
4758  */
4759 static
4760 void ice_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
4761 {
4762 	struct ice_netdev_priv *np = netdev_priv(netdev);
4763 	struct rtnl_link_stats64 *vsi_stats;
4764 	struct ice_vsi *vsi = np->vsi;
4765 
4766 	vsi_stats = &vsi->net_stats;
4767 
4768 	if (test_bit(__ICE_DOWN, vsi->state) || !vsi->num_txq || !vsi->num_rxq)
4769 		return;
4770 	/* netdev packet/byte stats come from ring counter. These are obtained
4771 	 * by summing up ring counters (done by ice_update_vsi_ring_stats).
4772 	 */
4773 	ice_update_vsi_ring_stats(vsi);
4774 	stats->tx_packets = vsi_stats->tx_packets;
4775 	stats->tx_bytes = vsi_stats->tx_bytes;
4776 	stats->rx_packets = vsi_stats->rx_packets;
4777 	stats->rx_bytes = vsi_stats->rx_bytes;
4778 
4779 	/* The rest of the stats can be read from the hardware but instead we
4780 	 * just return values that the watchdog task has already obtained from
4781 	 * the hardware.
4782 	 */
4783 	stats->multicast = vsi_stats->multicast;
4784 	stats->tx_errors = vsi_stats->tx_errors;
4785 	stats->tx_dropped = vsi_stats->tx_dropped;
4786 	stats->rx_errors = vsi_stats->rx_errors;
4787 	stats->rx_dropped = vsi_stats->rx_dropped;
4788 	stats->rx_crc_errors = vsi_stats->rx_crc_errors;
4789 	stats->rx_length_errors = vsi_stats->rx_length_errors;
4790 }
4791 
4792 #ifdef CONFIG_NET_POLL_CONTROLLER
4793 /**
4794  * ice_netpoll - polling "interrupt" handler
4795  * @netdev: network interface device structure
4796  *
4797  * Used by netconsole to send skbs without having to re-enable interrupts.
4798  * This is not called in the normal interrupt path.
4799  */
4800 static void ice_netpoll(struct net_device *netdev)
4801 {
4802 	struct ice_netdev_priv *np = netdev_priv(netdev);
4803 	struct ice_vsi *vsi = np->vsi;
4804 	struct ice_pf *pf = vsi->back;
4805 	int i;
4806 
4807 	if (test_bit(__ICE_DOWN, vsi->state) ||
4808 	    !test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
4809 		return;
4810 
4811 	for (i = 0; i < vsi->num_q_vectors; i++)
4812 		ice_msix_clean_rings(0, vsi->q_vectors[i]);
4813 }
4814 #endif /* CONFIG_NET_POLL_CONTROLLER */
4815 
4816 /**
4817  * ice_napi_disable_all - Disable NAPI for all q_vectors in the VSI
4818  * @vsi: VSI having NAPI disabled
4819  */
4820 static void ice_napi_disable_all(struct ice_vsi *vsi)
4821 {
4822 	int q_idx;
4823 
4824 	if (!vsi->netdev)
4825 		return;
4826 
4827 	for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
4828 		napi_disable(&vsi->q_vectors[q_idx]->napi);
4829 }
4830 
4831 /**
4832  * ice_down - Shutdown the connection
4833  * @vsi: The VSI being stopped
4834  */
4835 int ice_down(struct ice_vsi *vsi)
4836 {
4837 	int i, err;
4838 
4839 	/* Caller of this function is expected to set the
4840 	 * vsi->state __ICE_DOWN bit
4841 	 */
4842 	if (vsi->netdev) {
4843 		netif_carrier_off(vsi->netdev);
4844 		netif_tx_disable(vsi->netdev);
4845 	}
4846 
4847 	ice_vsi_dis_irq(vsi);
4848 	err = ice_vsi_stop_tx_rx_rings(vsi);
4849 	ice_napi_disable_all(vsi);
4850 
4851 	ice_for_each_txq(vsi, i)
4852 		ice_clean_tx_ring(vsi->tx_rings[i]);
4853 
4854 	ice_for_each_rxq(vsi, i)
4855 		ice_clean_rx_ring(vsi->rx_rings[i]);
4856 
4857 	if (err)
4858 		netdev_err(vsi->netdev, "Failed to close VSI 0x%04X on switch 0x%04X\n",
4859 			   vsi->vsi_num, vsi->vsw->sw_id);
4860 	return err;
4861 }
4862 
4863 /**
4864  * ice_vsi_setup_tx_rings - Allocate VSI Tx queue resources
4865  * @vsi: VSI having resources allocated
4866  *
4867  * Return 0 on success, negative on failure
4868  */
4869 static int ice_vsi_setup_tx_rings(struct ice_vsi *vsi)
4870 {
4871 	int i, err;
4872 
4873 	if (!vsi->num_txq) {
4874 		dev_err(&vsi->back->pdev->dev, "VSI %d has 0 Tx queues\n",
4875 			vsi->vsi_num);
4876 		return -EINVAL;
4877 	}
4878 
4879 	ice_for_each_txq(vsi, i) {
4880 		err = ice_setup_tx_ring(vsi->tx_rings[i]);
4881 		if (err)
4882 			break;
4883 	}
4884 
4885 	return err;
4886 }
4887 
4888 /**
4889  * ice_vsi_setup_rx_rings - Allocate VSI Rx queue resources
4890  * @vsi: VSI having resources allocated
4891  *
4892  * Return 0 on success, negative on failure
4893  */
4894 static int ice_vsi_setup_rx_rings(struct ice_vsi *vsi)
4895 {
4896 	int i, err;
4897 
4898 	if (!vsi->num_rxq) {
4899 		dev_err(&vsi->back->pdev->dev, "VSI %d has 0 Rx queues\n",
4900 			vsi->vsi_num);
4901 		return -EINVAL;
4902 	}
4903 
4904 	ice_for_each_rxq(vsi, i) {
4905 		err = ice_setup_rx_ring(vsi->rx_rings[i]);
4906 		if (err)
4907 			break;
4908 	}
4909 
4910 	return err;
4911 }
4912 
4913 /**
4914  * ice_vsi_req_irq - Request IRQ from the OS
4915  * @vsi: The VSI IRQ is being requested for
4916  * @basename: name for the vector
4917  *
4918  * Return 0 on success and a negative value on error
4919  */
4920 static int ice_vsi_req_irq(struct ice_vsi *vsi, char *basename)
4921 {
4922 	struct ice_pf *pf = vsi->back;
4923 	int err = -EINVAL;
4924 
4925 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags))
4926 		err = ice_vsi_req_irq_msix(vsi, basename);
4927 
4928 	return err;
4929 }
4930 
4931 /**
4932  * ice_vsi_free_tx_rings - Free Tx resources for VSI queues
4933  * @vsi: the VSI having resources freed
4934  */
4935 static void ice_vsi_free_tx_rings(struct ice_vsi *vsi)
4936 {
4937 	int i;
4938 
4939 	if (!vsi->tx_rings)
4940 		return;
4941 
4942 	ice_for_each_txq(vsi, i)
4943 		if (vsi->tx_rings[i] && vsi->tx_rings[i]->desc)
4944 			ice_free_tx_ring(vsi->tx_rings[i]);
4945 }
4946 
4947 /**
4948  * ice_vsi_free_rx_rings - Free Rx resources for VSI queues
4949  * @vsi: the VSI having resources freed
4950  */
4951 static void ice_vsi_free_rx_rings(struct ice_vsi *vsi)
4952 {
4953 	int i;
4954 
4955 	if (!vsi->rx_rings)
4956 		return;
4957 
4958 	ice_for_each_rxq(vsi, i)
4959 		if (vsi->rx_rings[i] && vsi->rx_rings[i]->desc)
4960 			ice_free_rx_ring(vsi->rx_rings[i]);
4961 }
4962 
4963 /**
4964  * ice_vsi_open - Called when a network interface is made active
4965  * @vsi: the VSI to open
4966  *
4967  * Initialization of the VSI
4968  *
4969  * Returns 0 on success, negative value on error
4970  */
4971 static int ice_vsi_open(struct ice_vsi *vsi)
4972 {
4973 	char int_name[ICE_INT_NAME_STR_LEN];
4974 	struct ice_pf *pf = vsi->back;
4975 	int err;
4976 
4977 	/* allocate descriptors */
4978 	err = ice_vsi_setup_tx_rings(vsi);
4979 	if (err)
4980 		goto err_setup_tx;
4981 
4982 	err = ice_vsi_setup_rx_rings(vsi);
4983 	if (err)
4984 		goto err_setup_rx;
4985 
4986 	err = ice_vsi_cfg(vsi);
4987 	if (err)
4988 		goto err_setup_rx;
4989 
4990 	snprintf(int_name, sizeof(int_name) - 1, "%s-%s",
4991 		 dev_driver_string(&pf->pdev->dev), vsi->netdev->name);
4992 	err = ice_vsi_req_irq(vsi, int_name);
4993 	if (err)
4994 		goto err_setup_rx;
4995 
4996 	/* Notify the stack of the actual queue counts. */
4997 	err = netif_set_real_num_tx_queues(vsi->netdev, vsi->num_txq);
4998 	if (err)
4999 		goto err_set_qs;
5000 
5001 	err = netif_set_real_num_rx_queues(vsi->netdev, vsi->num_rxq);
5002 	if (err)
5003 		goto err_set_qs;
5004 
5005 	err = ice_up_complete(vsi);
5006 	if (err)
5007 		goto err_up_complete;
5008 
5009 	return 0;
5010 
5011 err_up_complete:
5012 	ice_down(vsi);
5013 err_set_qs:
5014 	ice_vsi_free_irq(vsi);
5015 err_setup_rx:
5016 	ice_vsi_free_rx_rings(vsi);
5017 err_setup_tx:
5018 	ice_vsi_free_tx_rings(vsi);
5019 
5020 	return err;
5021 }
5022 
5023 /**
5024  * ice_vsi_close - Shut down a VSI
5025  * @vsi: the VSI being shut down
5026  */
5027 static void ice_vsi_close(struct ice_vsi *vsi)
5028 {
5029 	if (!test_and_set_bit(__ICE_DOWN, vsi->state))
5030 		ice_down(vsi);
5031 
5032 	ice_vsi_free_irq(vsi);
5033 	ice_vsi_free_tx_rings(vsi);
5034 	ice_vsi_free_rx_rings(vsi);
5035 }
5036 
5037 /**
5038  * ice_rss_clean - Delete RSS related VSI structures that hold user inputs
5039  * @vsi: the VSI being removed
5040  */
5041 static void ice_rss_clean(struct ice_vsi *vsi)
5042 {
5043 	struct ice_pf *pf;
5044 
5045 	pf = vsi->back;
5046 
5047 	if (vsi->rss_hkey_user)
5048 		devm_kfree(&pf->pdev->dev, vsi->rss_hkey_user);
5049 	if (vsi->rss_lut_user)
5050 		devm_kfree(&pf->pdev->dev, vsi->rss_lut_user);
5051 }
5052 
5053 /**
5054  * ice_vsi_release - Delete a VSI and free its resources
5055  * @vsi: the VSI being removed
5056  *
5057  * Returns 0 on success or < 0 on error
5058  */
5059 static int ice_vsi_release(struct ice_vsi *vsi)
5060 {
5061 	struct ice_pf *pf;
5062 
5063 	if (!vsi->back)
5064 		return -ENODEV;
5065 	pf = vsi->back;
5066 
5067 	if (vsi->netdev) {
5068 		unregister_netdev(vsi->netdev);
5069 		free_netdev(vsi->netdev);
5070 		vsi->netdev = NULL;
5071 	}
5072 
5073 	if (test_bit(ICE_FLAG_RSS_ENA, pf->flags))
5074 		ice_rss_clean(vsi);
5075 
5076 	/* Disable VSI and free resources */
5077 	ice_vsi_dis_irq(vsi);
5078 	ice_vsi_close(vsi);
5079 
5080 	/* reclaim interrupt vectors back to PF */
5081 	ice_free_res(vsi->back->irq_tracker, vsi->base_vector, vsi->idx);
5082 	pf->num_avail_msix += vsi->num_q_vectors;
5083 
5084 	ice_remove_vsi_fltr(&pf->hw, vsi->vsi_num);
5085 	ice_vsi_delete(vsi);
5086 	ice_vsi_free_q_vectors(vsi);
5087 	ice_vsi_clear_rings(vsi);
5088 
5089 	ice_vsi_put_qs(vsi);
5090 	pf->q_left_tx += vsi->alloc_txq;
5091 	pf->q_left_rx += vsi->alloc_rxq;
5092 
5093 	ice_vsi_clear(vsi);
5094 
5095 	return 0;
5096 }
5097 
5098 /**
5099  * ice_dis_vsi - pause a VSI
5100  * @vsi: the VSI being paused
5101  */
5102 static void ice_dis_vsi(struct ice_vsi *vsi)
5103 {
5104 	if (test_bit(__ICE_DOWN, vsi->state))
5105 		return;
5106 
5107 	set_bit(__ICE_NEEDS_RESTART, vsi->state);
5108 
5109 	if (vsi->netdev && netif_running(vsi->netdev) &&
5110 	    vsi->type == ICE_VSI_PF)
5111 		vsi->netdev->netdev_ops->ndo_stop(vsi->netdev);
5112 
5113 	ice_vsi_close(vsi);
5114 }
5115 
5116 /**
5117  * ice_ena_vsi - resume a VSI
5118  * @vsi: the VSI being resume
5119  */
5120 static void ice_ena_vsi(struct ice_vsi *vsi)
5121 {
5122 	if (!test_and_clear_bit(__ICE_NEEDS_RESTART, vsi->state))
5123 		return;
5124 
5125 	if (vsi->netdev && netif_running(vsi->netdev))
5126 		vsi->netdev->netdev_ops->ndo_open(vsi->netdev);
5127 	else if (ice_vsi_open(vsi))
5128 		/* this clears the DOWN bit */
5129 		dev_dbg(&vsi->back->pdev->dev, "Failed open VSI 0x%04X on switch 0x%04X\n",
5130 			vsi->vsi_num, vsi->vsw->sw_id);
5131 }
5132 
5133 /**
5134  * ice_pf_dis_all_vsi - Pause all VSIs on a PF
5135  * @pf: the PF
5136  */
5137 static void ice_pf_dis_all_vsi(struct ice_pf *pf)
5138 {
5139 	int v;
5140 
5141 	ice_for_each_vsi(pf, v)
5142 		if (pf->vsi[v])
5143 			ice_dis_vsi(pf->vsi[v]);
5144 }
5145 
5146 /**
5147  * ice_pf_ena_all_vsi - Resume all VSIs on a PF
5148  * @pf: the PF
5149  */
5150 static void ice_pf_ena_all_vsi(struct ice_pf *pf)
5151 {
5152 	int v;
5153 
5154 	ice_for_each_vsi(pf, v)
5155 		if (pf->vsi[v])
5156 			ice_ena_vsi(pf->vsi[v]);
5157 }
5158 
5159 /**
5160  * ice_rebuild - rebuild after reset
5161  * @pf: pf to rebuild
5162  */
5163 static void ice_rebuild(struct ice_pf *pf)
5164 {
5165 	struct device *dev = &pf->pdev->dev;
5166 	struct ice_hw *hw = &pf->hw;
5167 	enum ice_status ret;
5168 	int err;
5169 
5170 	if (test_bit(__ICE_DOWN, pf->state))
5171 		goto clear_recovery;
5172 
5173 	dev_dbg(dev, "rebuilding pf\n");
5174 
5175 	ret = ice_init_all_ctrlq(hw);
5176 	if (ret) {
5177 		dev_err(dev, "control queues init failed %d\n", ret);
5178 		goto fail_reset;
5179 	}
5180 
5181 	ret = ice_clear_pf_cfg(hw);
5182 	if (ret) {
5183 		dev_err(dev, "clear PF configuration failed %d\n", ret);
5184 		goto fail_reset;
5185 	}
5186 
5187 	ice_clear_pxe_mode(hw);
5188 
5189 	ret = ice_get_caps(hw);
5190 	if (ret) {
5191 		dev_err(dev, "ice_get_caps failed %d\n", ret);
5192 		goto fail_reset;
5193 	}
5194 
5195 	/* basic nic switch setup */
5196 	err = ice_setup_pf_sw(pf);
5197 	if (err) {
5198 		dev_err(dev, "ice_setup_pf_sw failed\n");
5199 		goto fail_reset;
5200 	}
5201 
5202 	/* start misc vector */
5203 	if (test_bit(ICE_FLAG_MSIX_ENA, pf->flags)) {
5204 		err = ice_req_irq_msix_misc(pf);
5205 		if (err) {
5206 			dev_err(dev, "misc vector setup failed: %d\n", err);
5207 			goto fail_reset;
5208 		}
5209 	}
5210 
5211 	/* restart the VSIs that were rebuilt and running before the reset */
5212 	ice_pf_ena_all_vsi(pf);
5213 
5214 	return;
5215 
5216 fail_reset:
5217 	ice_shutdown_all_ctrlq(hw);
5218 	set_bit(__ICE_RESET_FAILED, pf->state);
5219 clear_recovery:
5220 	set_bit(__ICE_RESET_RECOVERY_PENDING, pf->state);
5221 }
5222 
5223 /**
5224  * ice_change_mtu - NDO callback to change the MTU
5225  * @netdev: network interface device structure
5226  * @new_mtu: new value for maximum frame size
5227  *
5228  * Returns 0 on success, negative on failure
5229  */
5230 static int ice_change_mtu(struct net_device *netdev, int new_mtu)
5231 {
5232 	struct ice_netdev_priv *np = netdev_priv(netdev);
5233 	struct ice_vsi *vsi = np->vsi;
5234 	struct ice_pf *pf = vsi->back;
5235 	u8 count = 0;
5236 
5237 	if (new_mtu == netdev->mtu) {
5238 		netdev_warn(netdev, "mtu is already %d\n", netdev->mtu);
5239 		return 0;
5240 	}
5241 
5242 	if (new_mtu < netdev->min_mtu) {
5243 		netdev_err(netdev, "new mtu invalid. min_mtu is %d\n",
5244 			   netdev->min_mtu);
5245 		return -EINVAL;
5246 	} else if (new_mtu > netdev->max_mtu) {
5247 		netdev_err(netdev, "new mtu invalid. max_mtu is %d\n",
5248 			   netdev->min_mtu);
5249 		return -EINVAL;
5250 	}
5251 	/* if a reset is in progress, wait for some time for it to complete */
5252 	do {
5253 		if (ice_is_reset_recovery_pending(pf->state)) {
5254 			count++;
5255 			usleep_range(1000, 2000);
5256 		} else {
5257 			break;
5258 		}
5259 
5260 	} while (count < 100);
5261 
5262 	if (count == 100) {
5263 		netdev_err(netdev, "can't change mtu. Device is busy\n");
5264 		return -EBUSY;
5265 	}
5266 
5267 	netdev->mtu = new_mtu;
5268 
5269 	/* if VSI is up, bring it down and then back up */
5270 	if (!test_and_set_bit(__ICE_DOWN, vsi->state)) {
5271 		int err;
5272 
5273 		err = ice_down(vsi);
5274 		if (err) {
5275 			netdev_err(netdev, "change mtu if_up err %d\n", err);
5276 			return err;
5277 		}
5278 
5279 		err = ice_up(vsi);
5280 		if (err) {
5281 			netdev_err(netdev, "change mtu if_up err %d\n", err);
5282 			return err;
5283 		}
5284 	}
5285 
5286 	netdev_dbg(netdev, "changed mtu to %d\n", new_mtu);
5287 	return 0;
5288 }
5289 
5290 /**
5291  * ice_set_rss - Set RSS keys and lut
5292  * @vsi: Pointer to VSI structure
5293  * @seed: RSS hash seed
5294  * @lut: Lookup table
5295  * @lut_size: Lookup table size
5296  *
5297  * Returns 0 on success, negative on failure
5298  */
5299 int ice_set_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size)
5300 {
5301 	struct ice_pf *pf = vsi->back;
5302 	struct ice_hw *hw = &pf->hw;
5303 	enum ice_status status;
5304 
5305 	if (seed) {
5306 		struct ice_aqc_get_set_rss_keys *buf =
5307 				  (struct ice_aqc_get_set_rss_keys *)seed;
5308 
5309 		status = ice_aq_set_rss_key(hw, vsi->vsi_num, buf);
5310 
5311 		if (status) {
5312 			dev_err(&pf->pdev->dev,
5313 				"Cannot set RSS key, err %d aq_err %d\n",
5314 				status, hw->adminq.rq_last_status);
5315 			return -EIO;
5316 		}
5317 	}
5318 
5319 	if (lut) {
5320 		status = ice_aq_set_rss_lut(hw, vsi->vsi_num,
5321 					    vsi->rss_lut_type, lut, lut_size);
5322 		if (status) {
5323 			dev_err(&pf->pdev->dev,
5324 				"Cannot set RSS lut, err %d aq_err %d\n",
5325 				status, hw->adminq.rq_last_status);
5326 			return -EIO;
5327 		}
5328 	}
5329 
5330 	return 0;
5331 }
5332 
5333 /**
5334  * ice_get_rss - Get RSS keys and lut
5335  * @vsi: Pointer to VSI structure
5336  * @seed: Buffer to store the keys
5337  * @lut: Buffer to store the lookup table entries
5338  * @lut_size: Size of buffer to store the lookup table entries
5339  *
5340  * Returns 0 on success, negative on failure
5341  */
5342 int ice_get_rss(struct ice_vsi *vsi, u8 *seed, u8 *lut, u16 lut_size)
5343 {
5344 	struct ice_pf *pf = vsi->back;
5345 	struct ice_hw *hw = &pf->hw;
5346 	enum ice_status status;
5347 
5348 	if (seed) {
5349 		struct ice_aqc_get_set_rss_keys *buf =
5350 				  (struct ice_aqc_get_set_rss_keys *)seed;
5351 
5352 		status = ice_aq_get_rss_key(hw, vsi->vsi_num, buf);
5353 		if (status) {
5354 			dev_err(&pf->pdev->dev,
5355 				"Cannot get RSS key, err %d aq_err %d\n",
5356 				status, hw->adminq.rq_last_status);
5357 			return -EIO;
5358 		}
5359 	}
5360 
5361 	if (lut) {
5362 		status = ice_aq_get_rss_lut(hw, vsi->vsi_num,
5363 					    vsi->rss_lut_type, lut, lut_size);
5364 		if (status) {
5365 			dev_err(&pf->pdev->dev,
5366 				"Cannot get RSS lut, err %d aq_err %d\n",
5367 				status, hw->adminq.rq_last_status);
5368 			return -EIO;
5369 		}
5370 	}
5371 
5372 	return 0;
5373 }
5374 
5375 /**
5376  * ice_open - Called when a network interface becomes active
5377  * @netdev: network interface device structure
5378  *
5379  * The open entry point is called when a network interface is made
5380  * active by the system (IFF_UP).  At this point all resources needed
5381  * for transmit and receive operations are allocated, the interrupt
5382  * handler is registered with the OS, the netdev watchdog is enabled,
5383  * and the stack is notified that the interface is ready.
5384  *
5385  * Returns 0 on success, negative value on failure
5386  */
5387 static int ice_open(struct net_device *netdev)
5388 {
5389 	struct ice_netdev_priv *np = netdev_priv(netdev);
5390 	struct ice_vsi *vsi = np->vsi;
5391 	int err;
5392 
5393 	netif_carrier_off(netdev);
5394 
5395 	err = ice_vsi_open(vsi);
5396 
5397 	if (err)
5398 		netdev_err(netdev, "Failed to open VSI 0x%04X on switch 0x%04X\n",
5399 			   vsi->vsi_num, vsi->vsw->sw_id);
5400 	return err;
5401 }
5402 
5403 /**
5404  * ice_stop - Disables a network interface
5405  * @netdev: network interface device structure
5406  *
5407  * The stop entry point is called when an interface is de-activated by the OS,
5408  * and the netdevice enters the DOWN state.  The hardware is still under the
5409  * driver's control, but the netdev interface is disabled.
5410  *
5411  * Returns success only - not allowed to fail
5412  */
5413 static int ice_stop(struct net_device *netdev)
5414 {
5415 	struct ice_netdev_priv *np = netdev_priv(netdev);
5416 	struct ice_vsi *vsi = np->vsi;
5417 
5418 	ice_vsi_close(vsi);
5419 
5420 	return 0;
5421 }
5422 
5423 /**
5424  * ice_features_check - Validate encapsulated packet conforms to limits
5425  * @skb: skb buffer
5426  * @netdev: This port's netdev
5427  * @features: Offload features that the stack believes apply
5428  */
5429 static netdev_features_t
5430 ice_features_check(struct sk_buff *skb,
5431 		   struct net_device __always_unused *netdev,
5432 		   netdev_features_t features)
5433 {
5434 	size_t len;
5435 
5436 	/* No point in doing any of this if neither checksum nor GSO are
5437 	 * being requested for this frame.  We can rule out both by just
5438 	 * checking for CHECKSUM_PARTIAL
5439 	 */
5440 	if (skb->ip_summed != CHECKSUM_PARTIAL)
5441 		return features;
5442 
5443 	/* We cannot support GSO if the MSS is going to be less than
5444 	 * 64 bytes.  If it is then we need to drop support for GSO.
5445 	 */
5446 	if (skb_is_gso(skb) && (skb_shinfo(skb)->gso_size < 64))
5447 		features &= ~NETIF_F_GSO_MASK;
5448 
5449 	len = skb_network_header(skb) - skb->data;
5450 	if (len & ~(ICE_TXD_MACLEN_MAX))
5451 		goto out_rm_features;
5452 
5453 	len = skb_transport_header(skb) - skb_network_header(skb);
5454 	if (len & ~(ICE_TXD_IPLEN_MAX))
5455 		goto out_rm_features;
5456 
5457 	if (skb->encapsulation) {
5458 		len = skb_inner_network_header(skb) - skb_transport_header(skb);
5459 		if (len & ~(ICE_TXD_L4LEN_MAX))
5460 			goto out_rm_features;
5461 
5462 		len = skb_inner_transport_header(skb) -
5463 		      skb_inner_network_header(skb);
5464 		if (len & ~(ICE_TXD_IPLEN_MAX))
5465 			goto out_rm_features;
5466 	}
5467 
5468 	return features;
5469 out_rm_features:
5470 	return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
5471 }
5472 
5473 static const struct net_device_ops ice_netdev_ops = {
5474 	.ndo_open = ice_open,
5475 	.ndo_stop = ice_stop,
5476 	.ndo_start_xmit = ice_start_xmit,
5477 	.ndo_features_check = ice_features_check,
5478 	.ndo_set_rx_mode = ice_set_rx_mode,
5479 	.ndo_set_mac_address = ice_set_mac_address,
5480 	.ndo_validate_addr = eth_validate_addr,
5481 	.ndo_change_mtu = ice_change_mtu,
5482 	.ndo_get_stats64 = ice_get_stats64,
5483 #ifdef CONFIG_NET_POLL_CONTROLLER
5484 	.ndo_poll_controller = ice_netpoll,
5485 #endif /* CONFIG_NET_POLL_CONTROLLER */
5486 	.ndo_vlan_rx_add_vid = ice_vlan_rx_add_vid,
5487 	.ndo_vlan_rx_kill_vid = ice_vlan_rx_kill_vid,
5488 	.ndo_set_features = ice_set_features,
5489 	.ndo_fdb_add = ice_fdb_add,
5490 	.ndo_fdb_del = ice_fdb_del,
5491 };
5492