1 /*
2  * Copyright (C) 2005 - 2016 Broadcom
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License version 2
7  * as published by the Free Software Foundation.  The full GNU General
8  * Public License is included in this distribution in the file called COPYING.
9  *
10  * Contact Information:
11  * linux-drivers@emulex.com
12  *
13  * Emulex
14  * 3333 Susan Street
15  * Costa Mesa, CA 92626
16  */
17 
18 #include <linux/prefetch.h>
19 #include <linux/module.h>
20 #include "be.h"
21 #include "be_cmds.h"
22 #include <asm/div64.h>
23 #include <linux/aer.h>
24 #include <linux/if_bridge.h>
25 #include <net/busy_poll.h>
26 #include <net/vxlan.h>
27 
28 MODULE_VERSION(DRV_VER);
29 MODULE_DESCRIPTION(DRV_DESC " " DRV_VER);
30 MODULE_AUTHOR("Emulex Corporation");
31 MODULE_LICENSE("GPL");
32 
33 /* num_vfs module param is obsolete.
34  * Use sysfs method to enable/disable VFs.
35  */
36 static unsigned int num_vfs;
37 module_param(num_vfs, uint, 0444);
38 MODULE_PARM_DESC(num_vfs, "Number of PCI VFs to initialize");
39 
40 static ushort rx_frag_size = 2048;
41 module_param(rx_frag_size, ushort, 0444);
42 MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
43 
44 /* Per-module error detection/recovery workq shared across all functions.
45  * Each function schedules its own work request on this shared workq.
46  */
47 static struct workqueue_struct *be_err_recovery_workq;
48 
49 static const struct pci_device_id be_dev_ids[] = {
50 #ifdef CONFIG_BE2NET_BE2
51 	{ PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
52 	{ PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
53 #endif /* CONFIG_BE2NET_BE2 */
54 #ifdef CONFIG_BE2NET_BE3
55 	{ PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) },
56 	{ PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
57 #endif /* CONFIG_BE2NET_BE3 */
58 #ifdef CONFIG_BE2NET_LANCER
59 	{ PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID3)},
60 	{ PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID4)},
61 #endif /* CONFIG_BE2NET_LANCER */
62 #ifdef CONFIG_BE2NET_SKYHAWK
63 	{ PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID5)},
64 	{ PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID6)},
65 #endif /* CONFIG_BE2NET_SKYHAWK */
66 	{ 0 }
67 };
68 MODULE_DEVICE_TABLE(pci, be_dev_ids);
69 
70 /* Workqueue used by all functions for defering cmd calls to the adapter */
71 static struct workqueue_struct *be_wq;
72 
73 /* UE Status Low CSR */
74 static const char * const ue_status_low_desc[] = {
75 	"CEV",
76 	"CTX",
77 	"DBUF",
78 	"ERX",
79 	"Host",
80 	"MPU",
81 	"NDMA",
82 	"PTC ",
83 	"RDMA ",
84 	"RXF ",
85 	"RXIPS ",
86 	"RXULP0 ",
87 	"RXULP1 ",
88 	"RXULP2 ",
89 	"TIM ",
90 	"TPOST ",
91 	"TPRE ",
92 	"TXIPS ",
93 	"TXULP0 ",
94 	"TXULP1 ",
95 	"UC ",
96 	"WDMA ",
97 	"TXULP2 ",
98 	"HOST1 ",
99 	"P0_OB_LINK ",
100 	"P1_OB_LINK ",
101 	"HOST_GPIO ",
102 	"MBOX ",
103 	"ERX2 ",
104 	"SPARE ",
105 	"JTAG ",
106 	"MPU_INTPEND "
107 };
108 
109 /* UE Status High CSR */
110 static const char * const ue_status_hi_desc[] = {
111 	"LPCMEMHOST",
112 	"MGMT_MAC",
113 	"PCS0ONLINE",
114 	"MPU_IRAM",
115 	"PCS1ONLINE",
116 	"PCTL0",
117 	"PCTL1",
118 	"PMEM",
119 	"RR",
120 	"TXPB",
121 	"RXPP",
122 	"XAUI",
123 	"TXP",
124 	"ARM",
125 	"IPC",
126 	"HOST2",
127 	"HOST3",
128 	"HOST4",
129 	"HOST5",
130 	"HOST6",
131 	"HOST7",
132 	"ECRC",
133 	"Poison TLP",
134 	"NETC",
135 	"PERIPH",
136 	"LLTXULP",
137 	"D2P",
138 	"RCON",
139 	"LDMA",
140 	"LLTXP",
141 	"LLTXPB",
142 	"Unknown"
143 };
144 
145 #define BE_VF_IF_EN_FLAGS	(BE_IF_FLAGS_UNTAGGED | \
146 				 BE_IF_FLAGS_BROADCAST | \
147 				 BE_IF_FLAGS_MULTICAST | \
148 				 BE_IF_FLAGS_PASS_L3L4_ERRORS)
149 
150 static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
151 {
152 	struct be_dma_mem *mem = &q->dma_mem;
153 
154 	if (mem->va) {
155 		dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
156 				  mem->dma);
157 		mem->va = NULL;
158 	}
159 }
160 
161 static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
162 			  u16 len, u16 entry_size)
163 {
164 	struct be_dma_mem *mem = &q->dma_mem;
165 
166 	memset(q, 0, sizeof(*q));
167 	q->len = len;
168 	q->entry_size = entry_size;
169 	mem->size = len * entry_size;
170 	mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size,
171 				     &mem->dma, GFP_KERNEL);
172 	if (!mem->va)
173 		return -ENOMEM;
174 	return 0;
175 }
176 
177 static void be_reg_intr_set(struct be_adapter *adapter, bool enable)
178 {
179 	u32 reg, enabled;
180 
181 	pci_read_config_dword(adapter->pdev, PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET,
182 			      &reg);
183 	enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
184 
185 	if (!enabled && enable)
186 		reg |= MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
187 	else if (enabled && !enable)
188 		reg &= ~MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
189 	else
190 		return;
191 
192 	pci_write_config_dword(adapter->pdev,
193 			       PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg);
194 }
195 
196 static void be_intr_set(struct be_adapter *adapter, bool enable)
197 {
198 	int status = 0;
199 
200 	/* On lancer interrupts can't be controlled via this register */
201 	if (lancer_chip(adapter))
202 		return;
203 
204 	if (be_check_error(adapter, BE_ERROR_EEH))
205 		return;
206 
207 	status = be_cmd_intr_set(adapter, enable);
208 	if (status)
209 		be_reg_intr_set(adapter, enable);
210 }
211 
212 static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
213 {
214 	u32 val = 0;
215 
216 	if (be_check_error(adapter, BE_ERROR_HW))
217 		return;
218 
219 	val |= qid & DB_RQ_RING_ID_MASK;
220 	val |= posted << DB_RQ_NUM_POSTED_SHIFT;
221 
222 	wmb();
223 	iowrite32(val, adapter->db + DB_RQ_OFFSET);
224 }
225 
226 static void be_txq_notify(struct be_adapter *adapter, struct be_tx_obj *txo,
227 			  u16 posted)
228 {
229 	u32 val = 0;
230 
231 	if (be_check_error(adapter, BE_ERROR_HW))
232 		return;
233 
234 	val |= txo->q.id & DB_TXULP_RING_ID_MASK;
235 	val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
236 
237 	wmb();
238 	iowrite32(val, adapter->db + txo->db_offset);
239 }
240 
241 static void be_eq_notify(struct be_adapter *adapter, u16 qid,
242 			 bool arm, bool clear_int, u16 num_popped,
243 			 u32 eq_delay_mult_enc)
244 {
245 	u32 val = 0;
246 
247 	val |= qid & DB_EQ_RING_ID_MASK;
248 	val |= ((qid & DB_EQ_RING_ID_EXT_MASK) << DB_EQ_RING_ID_EXT_MASK_SHIFT);
249 
250 	if (be_check_error(adapter, BE_ERROR_HW))
251 		return;
252 
253 	if (arm)
254 		val |= 1 << DB_EQ_REARM_SHIFT;
255 	if (clear_int)
256 		val |= 1 << DB_EQ_CLR_SHIFT;
257 	val |= 1 << DB_EQ_EVNT_SHIFT;
258 	val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
259 	val |= eq_delay_mult_enc << DB_EQ_R2I_DLY_SHIFT;
260 	iowrite32(val, adapter->db + DB_EQ_OFFSET);
261 }
262 
263 void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, u16 num_popped)
264 {
265 	u32 val = 0;
266 
267 	val |= qid & DB_CQ_RING_ID_MASK;
268 	val |= ((qid & DB_CQ_RING_ID_EXT_MASK) <<
269 			DB_CQ_RING_ID_EXT_MASK_SHIFT);
270 
271 	if (be_check_error(adapter, BE_ERROR_HW))
272 		return;
273 
274 	if (arm)
275 		val |= 1 << DB_CQ_REARM_SHIFT;
276 	val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
277 	iowrite32(val, adapter->db + DB_CQ_OFFSET);
278 }
279 
280 static int be_dev_mac_add(struct be_adapter *adapter, u8 *mac)
281 {
282 	int i;
283 
284 	/* Check if mac has already been added as part of uc-list */
285 	for (i = 0; i < adapter->uc_macs; i++) {
286 		if (ether_addr_equal(adapter->uc_list[i].mac, mac)) {
287 			/* mac already added, skip addition */
288 			adapter->pmac_id[0] = adapter->pmac_id[i + 1];
289 			return 0;
290 		}
291 	}
292 
293 	return be_cmd_pmac_add(adapter, mac, adapter->if_handle,
294 			       &adapter->pmac_id[0], 0);
295 }
296 
297 static void be_dev_mac_del(struct be_adapter *adapter, int pmac_id)
298 {
299 	int i;
300 
301 	/* Skip deletion if the programmed mac is
302 	 * being used in uc-list
303 	 */
304 	for (i = 0; i < adapter->uc_macs; i++) {
305 		if (adapter->pmac_id[i + 1] == pmac_id)
306 			return;
307 	}
308 	be_cmd_pmac_del(adapter, adapter->if_handle, pmac_id, 0);
309 }
310 
311 static int be_mac_addr_set(struct net_device *netdev, void *p)
312 {
313 	struct be_adapter *adapter = netdev_priv(netdev);
314 	struct device *dev = &adapter->pdev->dev;
315 	struct sockaddr *addr = p;
316 	int status;
317 	u8 mac[ETH_ALEN];
318 	u32 old_pmac_id = adapter->pmac_id[0];
319 
320 	if (!is_valid_ether_addr(addr->sa_data))
321 		return -EADDRNOTAVAIL;
322 
323 	/* Proceed further only if, User provided MAC is different
324 	 * from active MAC
325 	 */
326 	if (ether_addr_equal(addr->sa_data, adapter->dev_mac))
327 		return 0;
328 
329 	/* BE3 VFs without FILTMGMT privilege are not allowed to set its MAC
330 	 * address
331 	 */
332 	if (BEx_chip(adapter) && be_virtfn(adapter) &&
333 	    !check_privilege(adapter, BE_PRIV_FILTMGMT))
334 		return -EPERM;
335 
336 	/* if device is not running, copy MAC to netdev->dev_addr */
337 	if (!netif_running(netdev))
338 		goto done;
339 
340 	/* The PMAC_ADD cmd may fail if the VF doesn't have FILTMGMT
341 	 * privilege or if PF did not provision the new MAC address.
342 	 * On BE3, this cmd will always fail if the VF doesn't have the
343 	 * FILTMGMT privilege. This failure is OK, only if the PF programmed
344 	 * the MAC for the VF.
345 	 */
346 	mutex_lock(&adapter->rx_filter_lock);
347 	status = be_dev_mac_add(adapter, (u8 *)addr->sa_data);
348 	if (!status) {
349 
350 		/* Delete the old programmed MAC. This call may fail if the
351 		 * old MAC was already deleted by the PF driver.
352 		 */
353 		if (adapter->pmac_id[0] != old_pmac_id)
354 			be_dev_mac_del(adapter, old_pmac_id);
355 	}
356 
357 	mutex_unlock(&adapter->rx_filter_lock);
358 	/* Decide if the new MAC is successfully activated only after
359 	 * querying the FW
360 	 */
361 	status = be_cmd_get_active_mac(adapter, adapter->pmac_id[0], mac,
362 				       adapter->if_handle, true, 0);
363 	if (status)
364 		goto err;
365 
366 	/* The MAC change did not happen, either due to lack of privilege
367 	 * or PF didn't pre-provision.
368 	 */
369 	if (!ether_addr_equal(addr->sa_data, mac)) {
370 		status = -EPERM;
371 		goto err;
372 	}
373 
374 	/* Remember currently programmed MAC */
375 	ether_addr_copy(adapter->dev_mac, addr->sa_data);
376 done:
377 	ether_addr_copy(netdev->dev_addr, addr->sa_data);
378 	dev_info(dev, "MAC address changed to %pM\n", addr->sa_data);
379 	return 0;
380 err:
381 	dev_warn(dev, "MAC address change to %pM failed\n", addr->sa_data);
382 	return status;
383 }
384 
385 /* BE2 supports only v0 cmd */
386 static void *hw_stats_from_cmd(struct be_adapter *adapter)
387 {
388 	if (BE2_chip(adapter)) {
389 		struct be_cmd_resp_get_stats_v0 *cmd = adapter->stats_cmd.va;
390 
391 		return &cmd->hw_stats;
392 	} else if (BE3_chip(adapter)) {
393 		struct be_cmd_resp_get_stats_v1 *cmd = adapter->stats_cmd.va;
394 
395 		return &cmd->hw_stats;
396 	} else {
397 		struct be_cmd_resp_get_stats_v2 *cmd = adapter->stats_cmd.va;
398 
399 		return &cmd->hw_stats;
400 	}
401 }
402 
403 /* BE2 supports only v0 cmd */
404 static void *be_erx_stats_from_cmd(struct be_adapter *adapter)
405 {
406 	if (BE2_chip(adapter)) {
407 		struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
408 
409 		return &hw_stats->erx;
410 	} else if (BE3_chip(adapter)) {
411 		struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
412 
413 		return &hw_stats->erx;
414 	} else {
415 		struct be_hw_stats_v2 *hw_stats = hw_stats_from_cmd(adapter);
416 
417 		return &hw_stats->erx;
418 	}
419 }
420 
421 static void populate_be_v0_stats(struct be_adapter *adapter)
422 {
423 	struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
424 	struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
425 	struct be_rxf_stats_v0 *rxf_stats = &hw_stats->rxf;
426 	struct be_port_rxf_stats_v0 *port_stats =
427 					&rxf_stats->port[adapter->port_num];
428 	struct be_drv_stats *drvs = &adapter->drv_stats;
429 
430 	be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
431 	drvs->rx_pause_frames = port_stats->rx_pause_frames;
432 	drvs->rx_crc_errors = port_stats->rx_crc_errors;
433 	drvs->rx_control_frames = port_stats->rx_control_frames;
434 	drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
435 	drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
436 	drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
437 	drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
438 	drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
439 	drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
440 	drvs->rxpp_fifo_overflow_drop = port_stats->rx_fifo_overflow;
441 	drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
442 	drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
443 	drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
444 	drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
445 	drvs->rx_input_fifo_overflow_drop = port_stats->rx_input_fifo_overflow;
446 	drvs->rx_dropped_header_too_small =
447 		port_stats->rx_dropped_header_too_small;
448 	drvs->rx_address_filtered =
449 					port_stats->rx_address_filtered +
450 					port_stats->rx_vlan_filtered;
451 	drvs->rx_alignment_symbol_errors =
452 		port_stats->rx_alignment_symbol_errors;
453 
454 	drvs->tx_pauseframes = port_stats->tx_pauseframes;
455 	drvs->tx_controlframes = port_stats->tx_controlframes;
456 
457 	if (adapter->port_num)
458 		drvs->jabber_events = rxf_stats->port1_jabber_events;
459 	else
460 		drvs->jabber_events = rxf_stats->port0_jabber_events;
461 	drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
462 	drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
463 	drvs->forwarded_packets = rxf_stats->forwarded_packets;
464 	drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
465 	drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
466 	drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
467 	adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
468 }
469 
470 static void populate_be_v1_stats(struct be_adapter *adapter)
471 {
472 	struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
473 	struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
474 	struct be_rxf_stats_v1 *rxf_stats = &hw_stats->rxf;
475 	struct be_port_rxf_stats_v1 *port_stats =
476 					&rxf_stats->port[adapter->port_num];
477 	struct be_drv_stats *drvs = &adapter->drv_stats;
478 
479 	be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
480 	drvs->pmem_fifo_overflow_drop = port_stats->pmem_fifo_overflow_drop;
481 	drvs->rx_priority_pause_frames = port_stats->rx_priority_pause_frames;
482 	drvs->rx_pause_frames = port_stats->rx_pause_frames;
483 	drvs->rx_crc_errors = port_stats->rx_crc_errors;
484 	drvs->rx_control_frames = port_stats->rx_control_frames;
485 	drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
486 	drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
487 	drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
488 	drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
489 	drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
490 	drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
491 	drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
492 	drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
493 	drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
494 	drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
495 	drvs->rx_dropped_header_too_small =
496 		port_stats->rx_dropped_header_too_small;
497 	drvs->rx_input_fifo_overflow_drop =
498 		port_stats->rx_input_fifo_overflow_drop;
499 	drvs->rx_address_filtered = port_stats->rx_address_filtered;
500 	drvs->rx_alignment_symbol_errors =
501 		port_stats->rx_alignment_symbol_errors;
502 	drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
503 	drvs->tx_pauseframes = port_stats->tx_pauseframes;
504 	drvs->tx_controlframes = port_stats->tx_controlframes;
505 	drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes;
506 	drvs->jabber_events = port_stats->jabber_events;
507 	drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
508 	drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
509 	drvs->forwarded_packets = rxf_stats->forwarded_packets;
510 	drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
511 	drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
512 	drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
513 	adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
514 }
515 
516 static void populate_be_v2_stats(struct be_adapter *adapter)
517 {
518 	struct be_hw_stats_v2 *hw_stats = hw_stats_from_cmd(adapter);
519 	struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
520 	struct be_rxf_stats_v2 *rxf_stats = &hw_stats->rxf;
521 	struct be_port_rxf_stats_v2 *port_stats =
522 					&rxf_stats->port[adapter->port_num];
523 	struct be_drv_stats *drvs = &adapter->drv_stats;
524 
525 	be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
526 	drvs->pmem_fifo_overflow_drop = port_stats->pmem_fifo_overflow_drop;
527 	drvs->rx_priority_pause_frames = port_stats->rx_priority_pause_frames;
528 	drvs->rx_pause_frames = port_stats->rx_pause_frames;
529 	drvs->rx_crc_errors = port_stats->rx_crc_errors;
530 	drvs->rx_control_frames = port_stats->rx_control_frames;
531 	drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
532 	drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
533 	drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
534 	drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
535 	drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
536 	drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
537 	drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
538 	drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
539 	drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
540 	drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
541 	drvs->rx_dropped_header_too_small =
542 		port_stats->rx_dropped_header_too_small;
543 	drvs->rx_input_fifo_overflow_drop =
544 		port_stats->rx_input_fifo_overflow_drop;
545 	drvs->rx_address_filtered = port_stats->rx_address_filtered;
546 	drvs->rx_alignment_symbol_errors =
547 		port_stats->rx_alignment_symbol_errors;
548 	drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
549 	drvs->tx_pauseframes = port_stats->tx_pauseframes;
550 	drvs->tx_controlframes = port_stats->tx_controlframes;
551 	drvs->tx_priority_pauseframes = port_stats->tx_priority_pauseframes;
552 	drvs->jabber_events = port_stats->jabber_events;
553 	drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
554 	drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
555 	drvs->forwarded_packets = rxf_stats->forwarded_packets;
556 	drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
557 	drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
558 	drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
559 	adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
560 	if (be_roce_supported(adapter)) {
561 		drvs->rx_roce_bytes_lsd = port_stats->roce_bytes_received_lsd;
562 		drvs->rx_roce_bytes_msd = port_stats->roce_bytes_received_msd;
563 		drvs->rx_roce_frames = port_stats->roce_frames_received;
564 		drvs->roce_drops_crc = port_stats->roce_drops_crc;
565 		drvs->roce_drops_payload_len =
566 			port_stats->roce_drops_payload_len;
567 	}
568 }
569 
570 static void populate_lancer_stats(struct be_adapter *adapter)
571 {
572 	struct be_drv_stats *drvs = &adapter->drv_stats;
573 	struct lancer_pport_stats *pport_stats = pport_stats_from_cmd(adapter);
574 
575 	be_dws_le_to_cpu(pport_stats, sizeof(*pport_stats));
576 	drvs->rx_pause_frames = pport_stats->rx_pause_frames_lo;
577 	drvs->rx_crc_errors = pport_stats->rx_crc_errors_lo;
578 	drvs->rx_control_frames = pport_stats->rx_control_frames_lo;
579 	drvs->rx_in_range_errors = pport_stats->rx_in_range_errors;
580 	drvs->rx_frame_too_long = pport_stats->rx_frames_too_long_lo;
581 	drvs->rx_dropped_runt = pport_stats->rx_dropped_runt;
582 	drvs->rx_ip_checksum_errs = pport_stats->rx_ip_checksum_errors;
583 	drvs->rx_tcp_checksum_errs = pport_stats->rx_tcp_checksum_errors;
584 	drvs->rx_udp_checksum_errs = pport_stats->rx_udp_checksum_errors;
585 	drvs->rx_dropped_tcp_length =
586 				pport_stats->rx_dropped_invalid_tcp_length;
587 	drvs->rx_dropped_too_small = pport_stats->rx_dropped_too_small;
588 	drvs->rx_dropped_too_short = pport_stats->rx_dropped_too_short;
589 	drvs->rx_out_range_errors = pport_stats->rx_out_of_range_errors;
590 	drvs->rx_dropped_header_too_small =
591 				pport_stats->rx_dropped_header_too_small;
592 	drvs->rx_input_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
593 	drvs->rx_address_filtered =
594 					pport_stats->rx_address_filtered +
595 					pport_stats->rx_vlan_filtered;
596 	drvs->rx_alignment_symbol_errors = pport_stats->rx_symbol_errors_lo;
597 	drvs->rxpp_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
598 	drvs->tx_pauseframes = pport_stats->tx_pause_frames_lo;
599 	drvs->tx_controlframes = pport_stats->tx_control_frames_lo;
600 	drvs->jabber_events = pport_stats->rx_jabbers;
601 	drvs->forwarded_packets = pport_stats->num_forwards_lo;
602 	drvs->rx_drops_mtu = pport_stats->rx_drops_mtu_lo;
603 	drvs->rx_drops_too_many_frags =
604 				pport_stats->rx_drops_too_many_frags_lo;
605 }
606 
607 static void accumulate_16bit_val(u32 *acc, u16 val)
608 {
609 #define lo(x)			(x & 0xFFFF)
610 #define hi(x)			(x & 0xFFFF0000)
611 	bool wrapped = val < lo(*acc);
612 	u32 newacc = hi(*acc) + val;
613 
614 	if (wrapped)
615 		newacc += 65536;
616 	WRITE_ONCE(*acc, newacc);
617 }
618 
619 static void populate_erx_stats(struct be_adapter *adapter,
620 			       struct be_rx_obj *rxo, u32 erx_stat)
621 {
622 	if (!BEx_chip(adapter))
623 		rx_stats(rxo)->rx_drops_no_frags = erx_stat;
624 	else
625 		/* below erx HW counter can actually wrap around after
626 		 * 65535. Driver accumulates a 32-bit value
627 		 */
628 		accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
629 				     (u16)erx_stat);
630 }
631 
632 void be_parse_stats(struct be_adapter *adapter)
633 {
634 	struct be_erx_stats_v2 *erx = be_erx_stats_from_cmd(adapter);
635 	struct be_rx_obj *rxo;
636 	int i;
637 	u32 erx_stat;
638 
639 	if (lancer_chip(adapter)) {
640 		populate_lancer_stats(adapter);
641 	} else {
642 		if (BE2_chip(adapter))
643 			populate_be_v0_stats(adapter);
644 		else if (BE3_chip(adapter))
645 			/* for BE3 */
646 			populate_be_v1_stats(adapter);
647 		else
648 			populate_be_v2_stats(adapter);
649 
650 		/* erx_v2 is longer than v0, v1. use v2 for v0, v1 access */
651 		for_all_rx_queues(adapter, rxo, i) {
652 			erx_stat = erx->rx_drops_no_fragments[rxo->q.id];
653 			populate_erx_stats(adapter, rxo, erx_stat);
654 		}
655 	}
656 }
657 
658 static void be_get_stats64(struct net_device *netdev,
659 			   struct rtnl_link_stats64 *stats)
660 {
661 	struct be_adapter *adapter = netdev_priv(netdev);
662 	struct be_drv_stats *drvs = &adapter->drv_stats;
663 	struct be_rx_obj *rxo;
664 	struct be_tx_obj *txo;
665 	u64 pkts, bytes;
666 	unsigned int start;
667 	int i;
668 
669 	for_all_rx_queues(adapter, rxo, i) {
670 		const struct be_rx_stats *rx_stats = rx_stats(rxo);
671 
672 		do {
673 			start = u64_stats_fetch_begin_irq(&rx_stats->sync);
674 			pkts = rx_stats(rxo)->rx_pkts;
675 			bytes = rx_stats(rxo)->rx_bytes;
676 		} while (u64_stats_fetch_retry_irq(&rx_stats->sync, start));
677 		stats->rx_packets += pkts;
678 		stats->rx_bytes += bytes;
679 		stats->multicast += rx_stats(rxo)->rx_mcast_pkts;
680 		stats->rx_dropped += rx_stats(rxo)->rx_drops_no_skbs +
681 					rx_stats(rxo)->rx_drops_no_frags;
682 	}
683 
684 	for_all_tx_queues(adapter, txo, i) {
685 		const struct be_tx_stats *tx_stats = tx_stats(txo);
686 
687 		do {
688 			start = u64_stats_fetch_begin_irq(&tx_stats->sync);
689 			pkts = tx_stats(txo)->tx_pkts;
690 			bytes = tx_stats(txo)->tx_bytes;
691 		} while (u64_stats_fetch_retry_irq(&tx_stats->sync, start));
692 		stats->tx_packets += pkts;
693 		stats->tx_bytes += bytes;
694 	}
695 
696 	/* bad pkts received */
697 	stats->rx_errors = drvs->rx_crc_errors +
698 		drvs->rx_alignment_symbol_errors +
699 		drvs->rx_in_range_errors +
700 		drvs->rx_out_range_errors +
701 		drvs->rx_frame_too_long +
702 		drvs->rx_dropped_too_small +
703 		drvs->rx_dropped_too_short +
704 		drvs->rx_dropped_header_too_small +
705 		drvs->rx_dropped_tcp_length +
706 		drvs->rx_dropped_runt;
707 
708 	/* detailed rx errors */
709 	stats->rx_length_errors = drvs->rx_in_range_errors +
710 		drvs->rx_out_range_errors +
711 		drvs->rx_frame_too_long;
712 
713 	stats->rx_crc_errors = drvs->rx_crc_errors;
714 
715 	/* frame alignment errors */
716 	stats->rx_frame_errors = drvs->rx_alignment_symbol_errors;
717 
718 	/* receiver fifo overrun */
719 	/* drops_no_pbuf is no per i/f, it's per BE card */
720 	stats->rx_fifo_errors = drvs->rxpp_fifo_overflow_drop +
721 				drvs->rx_input_fifo_overflow_drop +
722 				drvs->rx_drops_no_pbuf;
723 }
724 
725 void be_link_status_update(struct be_adapter *adapter, u8 link_status)
726 {
727 	struct net_device *netdev = adapter->netdev;
728 
729 	if (!(adapter->flags & BE_FLAGS_LINK_STATUS_INIT)) {
730 		netif_carrier_off(netdev);
731 		adapter->flags |= BE_FLAGS_LINK_STATUS_INIT;
732 	}
733 
734 	if (link_status)
735 		netif_carrier_on(netdev);
736 	else
737 		netif_carrier_off(netdev);
738 
739 	netdev_info(netdev, "Link is %s\n", link_status ? "Up" : "Down");
740 }
741 
742 static int be_gso_hdr_len(struct sk_buff *skb)
743 {
744 	if (skb->encapsulation)
745 		return skb_inner_transport_offset(skb) +
746 		       inner_tcp_hdrlen(skb);
747 	return skb_transport_offset(skb) + tcp_hdrlen(skb);
748 }
749 
750 static void be_tx_stats_update(struct be_tx_obj *txo, struct sk_buff *skb)
751 {
752 	struct be_tx_stats *stats = tx_stats(txo);
753 	u32 tx_pkts = skb_shinfo(skb)->gso_segs ? : 1;
754 	/* Account for headers which get duplicated in TSO pkt */
755 	u32 dup_hdr_len = tx_pkts > 1 ? be_gso_hdr_len(skb) * (tx_pkts - 1) : 0;
756 
757 	u64_stats_update_begin(&stats->sync);
758 	stats->tx_reqs++;
759 	stats->tx_bytes += skb->len + dup_hdr_len;
760 	stats->tx_pkts += tx_pkts;
761 	if (skb->encapsulation && skb->ip_summed == CHECKSUM_PARTIAL)
762 		stats->tx_vxlan_offload_pkts += tx_pkts;
763 	u64_stats_update_end(&stats->sync);
764 }
765 
766 /* Returns number of WRBs needed for the skb */
767 static u32 skb_wrb_cnt(struct sk_buff *skb)
768 {
769 	/* +1 for the header wrb */
770 	return 1 + (skb_headlen(skb) ? 1 : 0) + skb_shinfo(skb)->nr_frags;
771 }
772 
773 static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
774 {
775 	wrb->frag_pa_hi = cpu_to_le32(upper_32_bits(addr));
776 	wrb->frag_pa_lo = cpu_to_le32(lower_32_bits(addr));
777 	wrb->frag_len = cpu_to_le32(len & ETH_WRB_FRAG_LEN_MASK);
778 	wrb->rsvd0 = 0;
779 }
780 
781 /* A dummy wrb is just all zeros. Using a separate routine for dummy-wrb
782  * to avoid the swap and shift/mask operations in wrb_fill().
783  */
784 static inline void wrb_fill_dummy(struct be_eth_wrb *wrb)
785 {
786 	wrb->frag_pa_hi = 0;
787 	wrb->frag_pa_lo = 0;
788 	wrb->frag_len = 0;
789 	wrb->rsvd0 = 0;
790 }
791 
792 static inline u16 be_get_tx_vlan_tag(struct be_adapter *adapter,
793 				     struct sk_buff *skb)
794 {
795 	u8 vlan_prio;
796 	u16 vlan_tag;
797 
798 	vlan_tag = skb_vlan_tag_get(skb);
799 	vlan_prio = skb_vlan_tag_get_prio(skb);
800 	/* If vlan priority provided by OS is NOT in available bmap */
801 	if (!(adapter->vlan_prio_bmap & (1 << vlan_prio)))
802 		vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK) |
803 				adapter->recommended_prio_bits;
804 
805 	return vlan_tag;
806 }
807 
808 /* Used only for IP tunnel packets */
809 static u16 skb_inner_ip_proto(struct sk_buff *skb)
810 {
811 	return (inner_ip_hdr(skb)->version == 4) ?
812 		inner_ip_hdr(skb)->protocol : inner_ipv6_hdr(skb)->nexthdr;
813 }
814 
815 static u16 skb_ip_proto(struct sk_buff *skb)
816 {
817 	return (ip_hdr(skb)->version == 4) ?
818 		ip_hdr(skb)->protocol : ipv6_hdr(skb)->nexthdr;
819 }
820 
821 static inline bool be_is_txq_full(struct be_tx_obj *txo)
822 {
823 	return atomic_read(&txo->q.used) + BE_MAX_TX_FRAG_COUNT >= txo->q.len;
824 }
825 
826 static inline bool be_can_txq_wake(struct be_tx_obj *txo)
827 {
828 	return atomic_read(&txo->q.used) < txo->q.len / 2;
829 }
830 
831 static inline bool be_is_tx_compl_pending(struct be_tx_obj *txo)
832 {
833 	return atomic_read(&txo->q.used) > txo->pend_wrb_cnt;
834 }
835 
836 static void be_get_wrb_params_from_skb(struct be_adapter *adapter,
837 				       struct sk_buff *skb,
838 				       struct be_wrb_params *wrb_params)
839 {
840 	u16 proto;
841 
842 	if (skb_is_gso(skb)) {
843 		BE_WRB_F_SET(wrb_params->features, LSO, 1);
844 		wrb_params->lso_mss = skb_shinfo(skb)->gso_size;
845 		if (skb_is_gso_v6(skb) && !lancer_chip(adapter))
846 			BE_WRB_F_SET(wrb_params->features, LSO6, 1);
847 	} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
848 		if (skb->encapsulation) {
849 			BE_WRB_F_SET(wrb_params->features, IPCS, 1);
850 			proto = skb_inner_ip_proto(skb);
851 		} else {
852 			proto = skb_ip_proto(skb);
853 		}
854 		if (proto == IPPROTO_TCP)
855 			BE_WRB_F_SET(wrb_params->features, TCPCS, 1);
856 		else if (proto == IPPROTO_UDP)
857 			BE_WRB_F_SET(wrb_params->features, UDPCS, 1);
858 	}
859 
860 	if (skb_vlan_tag_present(skb)) {
861 		BE_WRB_F_SET(wrb_params->features, VLAN, 1);
862 		wrb_params->vlan_tag = be_get_tx_vlan_tag(adapter, skb);
863 	}
864 
865 	BE_WRB_F_SET(wrb_params->features, CRC, 1);
866 }
867 
868 static void wrb_fill_hdr(struct be_adapter *adapter,
869 			 struct be_eth_hdr_wrb *hdr,
870 			 struct be_wrb_params *wrb_params,
871 			 struct sk_buff *skb)
872 {
873 	memset(hdr, 0, sizeof(*hdr));
874 
875 	SET_TX_WRB_HDR_BITS(crc, hdr,
876 			    BE_WRB_F_GET(wrb_params->features, CRC));
877 	SET_TX_WRB_HDR_BITS(ipcs, hdr,
878 			    BE_WRB_F_GET(wrb_params->features, IPCS));
879 	SET_TX_WRB_HDR_BITS(tcpcs, hdr,
880 			    BE_WRB_F_GET(wrb_params->features, TCPCS));
881 	SET_TX_WRB_HDR_BITS(udpcs, hdr,
882 			    BE_WRB_F_GET(wrb_params->features, UDPCS));
883 
884 	SET_TX_WRB_HDR_BITS(lso, hdr,
885 			    BE_WRB_F_GET(wrb_params->features, LSO));
886 	SET_TX_WRB_HDR_BITS(lso6, hdr,
887 			    BE_WRB_F_GET(wrb_params->features, LSO6));
888 	SET_TX_WRB_HDR_BITS(lso_mss, hdr, wrb_params->lso_mss);
889 
890 	/* Hack to skip HW VLAN tagging needs evt = 1, compl = 0. When this
891 	 * hack is not needed, the evt bit is set while ringing DB.
892 	 */
893 	SET_TX_WRB_HDR_BITS(event, hdr,
894 			    BE_WRB_F_GET(wrb_params->features, VLAN_SKIP_HW));
895 	SET_TX_WRB_HDR_BITS(vlan, hdr,
896 			    BE_WRB_F_GET(wrb_params->features, VLAN));
897 	SET_TX_WRB_HDR_BITS(vlan_tag, hdr, wrb_params->vlan_tag);
898 
899 	SET_TX_WRB_HDR_BITS(num_wrb, hdr, skb_wrb_cnt(skb));
900 	SET_TX_WRB_HDR_BITS(len, hdr, skb->len);
901 	SET_TX_WRB_HDR_BITS(mgmt, hdr,
902 			    BE_WRB_F_GET(wrb_params->features, OS2BMC));
903 }
904 
905 static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
906 			  bool unmap_single)
907 {
908 	dma_addr_t dma;
909 	u32 frag_len = le32_to_cpu(wrb->frag_len);
910 
911 
912 	dma = (u64)le32_to_cpu(wrb->frag_pa_hi) << 32 |
913 		(u64)le32_to_cpu(wrb->frag_pa_lo);
914 	if (frag_len) {
915 		if (unmap_single)
916 			dma_unmap_single(dev, dma, frag_len, DMA_TO_DEVICE);
917 		else
918 			dma_unmap_page(dev, dma, frag_len, DMA_TO_DEVICE);
919 	}
920 }
921 
922 /* Grab a WRB header for xmit */
923 static u32 be_tx_get_wrb_hdr(struct be_tx_obj *txo)
924 {
925 	u32 head = txo->q.head;
926 
927 	queue_head_inc(&txo->q);
928 	return head;
929 }
930 
931 /* Set up the WRB header for xmit */
932 static void be_tx_setup_wrb_hdr(struct be_adapter *adapter,
933 				struct be_tx_obj *txo,
934 				struct be_wrb_params *wrb_params,
935 				struct sk_buff *skb, u16 head)
936 {
937 	u32 num_frags = skb_wrb_cnt(skb);
938 	struct be_queue_info *txq = &txo->q;
939 	struct be_eth_hdr_wrb *hdr = queue_index_node(txq, head);
940 
941 	wrb_fill_hdr(adapter, hdr, wrb_params, skb);
942 	be_dws_cpu_to_le(hdr, sizeof(*hdr));
943 
944 	BUG_ON(txo->sent_skb_list[head]);
945 	txo->sent_skb_list[head] = skb;
946 	txo->last_req_hdr = head;
947 	atomic_add(num_frags, &txq->used);
948 	txo->last_req_wrb_cnt = num_frags;
949 	txo->pend_wrb_cnt += num_frags;
950 }
951 
952 /* Setup a WRB fragment (buffer descriptor) for xmit */
953 static void be_tx_setup_wrb_frag(struct be_tx_obj *txo, dma_addr_t busaddr,
954 				 int len)
955 {
956 	struct be_eth_wrb *wrb;
957 	struct be_queue_info *txq = &txo->q;
958 
959 	wrb = queue_head_node(txq);
960 	wrb_fill(wrb, busaddr, len);
961 	queue_head_inc(txq);
962 }
963 
964 /* Bring the queue back to the state it was in before be_xmit_enqueue() routine
965  * was invoked. The producer index is restored to the previous packet and the
966  * WRBs of the current packet are unmapped. Invoked to handle tx setup errors.
967  */
968 static void be_xmit_restore(struct be_adapter *adapter,
969 			    struct be_tx_obj *txo, u32 head, bool map_single,
970 			    u32 copied)
971 {
972 	struct device *dev;
973 	struct be_eth_wrb *wrb;
974 	struct be_queue_info *txq = &txo->q;
975 
976 	dev = &adapter->pdev->dev;
977 	txq->head = head;
978 
979 	/* skip the first wrb (hdr); it's not mapped */
980 	queue_head_inc(txq);
981 	while (copied) {
982 		wrb = queue_head_node(txq);
983 		unmap_tx_frag(dev, wrb, map_single);
984 		map_single = false;
985 		copied -= le32_to_cpu(wrb->frag_len);
986 		queue_head_inc(txq);
987 	}
988 
989 	txq->head = head;
990 }
991 
992 /* Enqueue the given packet for transmit. This routine allocates WRBs for the
993  * packet, dma maps the packet buffers and sets up the WRBs. Returns the number
994  * of WRBs used up by the packet.
995  */
996 static u32 be_xmit_enqueue(struct be_adapter *adapter, struct be_tx_obj *txo,
997 			   struct sk_buff *skb,
998 			   struct be_wrb_params *wrb_params)
999 {
1000 	u32 i, copied = 0, wrb_cnt = skb_wrb_cnt(skb);
1001 	struct device *dev = &adapter->pdev->dev;
1002 	bool map_single = false;
1003 	u32 head;
1004 	dma_addr_t busaddr;
1005 	int len;
1006 
1007 	head = be_tx_get_wrb_hdr(txo);
1008 
1009 	if (skb->len > skb->data_len) {
1010 		len = skb_headlen(skb);
1011 
1012 		busaddr = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE);
1013 		if (dma_mapping_error(dev, busaddr))
1014 			goto dma_err;
1015 		map_single = true;
1016 		be_tx_setup_wrb_frag(txo, busaddr, len);
1017 		copied += len;
1018 	}
1019 
1020 	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1021 		const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
1022 		len = skb_frag_size(frag);
1023 
1024 		busaddr = skb_frag_dma_map(dev, frag, 0, len, DMA_TO_DEVICE);
1025 		if (dma_mapping_error(dev, busaddr))
1026 			goto dma_err;
1027 		be_tx_setup_wrb_frag(txo, busaddr, len);
1028 		copied += len;
1029 	}
1030 
1031 	be_tx_setup_wrb_hdr(adapter, txo, wrb_params, skb, head);
1032 
1033 	be_tx_stats_update(txo, skb);
1034 	return wrb_cnt;
1035 
1036 dma_err:
1037 	adapter->drv_stats.dma_map_errors++;
1038 	be_xmit_restore(adapter, txo, head, map_single, copied);
1039 	return 0;
1040 }
1041 
1042 static inline int qnq_async_evt_rcvd(struct be_adapter *adapter)
1043 {
1044 	return adapter->flags & BE_FLAGS_QNQ_ASYNC_EVT_RCVD;
1045 }
1046 
1047 static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
1048 					     struct sk_buff *skb,
1049 					     struct be_wrb_params
1050 					     *wrb_params)
1051 {
1052 	bool insert_vlan = false;
1053 	u16 vlan_tag = 0;
1054 
1055 	skb = skb_share_check(skb, GFP_ATOMIC);
1056 	if (unlikely(!skb))
1057 		return skb;
1058 
1059 	if (skb_vlan_tag_present(skb)) {
1060 		vlan_tag = be_get_tx_vlan_tag(adapter, skb);
1061 		insert_vlan = true;
1062 	}
1063 
1064 	if (qnq_async_evt_rcvd(adapter) && adapter->pvid) {
1065 		if (!insert_vlan) {
1066 			vlan_tag = adapter->pvid;
1067 			insert_vlan = true;
1068 		}
1069 		/* f/w workaround to set skip_hw_vlan = 1, informs the F/W to
1070 		 * skip VLAN insertion
1071 		 */
1072 		BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
1073 	}
1074 
1075 	if (insert_vlan) {
1076 		skb = vlan_insert_tag_set_proto(skb, htons(ETH_P_8021Q),
1077 						vlan_tag);
1078 		if (unlikely(!skb))
1079 			return skb;
1080 		__vlan_hwaccel_clear_tag(skb);
1081 	}
1082 
1083 	/* Insert the outer VLAN, if any */
1084 	if (adapter->qnq_vid) {
1085 		vlan_tag = adapter->qnq_vid;
1086 		skb = vlan_insert_tag_set_proto(skb, htons(ETH_P_8021Q),
1087 						vlan_tag);
1088 		if (unlikely(!skb))
1089 			return skb;
1090 		BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
1091 	}
1092 
1093 	return skb;
1094 }
1095 
1096 static bool be_ipv6_exthdr_check(struct sk_buff *skb)
1097 {
1098 	struct ethhdr *eh = (struct ethhdr *)skb->data;
1099 	u16 offset = ETH_HLEN;
1100 
1101 	if (eh->h_proto == htons(ETH_P_IPV6)) {
1102 		struct ipv6hdr *ip6h = (struct ipv6hdr *)(skb->data + offset);
1103 
1104 		offset += sizeof(struct ipv6hdr);
1105 		if (ip6h->nexthdr != NEXTHDR_TCP &&
1106 		    ip6h->nexthdr != NEXTHDR_UDP) {
1107 			struct ipv6_opt_hdr *ehdr =
1108 				(struct ipv6_opt_hdr *)(skb->data + offset);
1109 
1110 			/* offending pkt: 2nd byte following IPv6 hdr is 0xff */
1111 			if (ehdr->hdrlen == 0xff)
1112 				return true;
1113 		}
1114 	}
1115 	return false;
1116 }
1117 
1118 static int be_vlan_tag_tx_chk(struct be_adapter *adapter, struct sk_buff *skb)
1119 {
1120 	return skb_vlan_tag_present(skb) || adapter->pvid || adapter->qnq_vid;
1121 }
1122 
1123 static int be_ipv6_tx_stall_chk(struct be_adapter *adapter, struct sk_buff *skb)
1124 {
1125 	return BE3_chip(adapter) && be_ipv6_exthdr_check(skb);
1126 }
1127 
1128 static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter,
1129 						  struct sk_buff *skb,
1130 						  struct be_wrb_params
1131 						  *wrb_params)
1132 {
1133 	struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
1134 	unsigned int eth_hdr_len;
1135 	struct iphdr *ip;
1136 
1137 	/* For padded packets, BE HW modifies tot_len field in IP header
1138 	 * incorrecly when VLAN tag is inserted by HW.
1139 	 * For padded packets, Lancer computes incorrect checksum.
1140 	 */
1141 	eth_hdr_len = ntohs(skb->protocol) == ETH_P_8021Q ?
1142 						VLAN_ETH_HLEN : ETH_HLEN;
1143 	if (skb->len <= 60 &&
1144 	    (lancer_chip(adapter) || skb_vlan_tag_present(skb)) &&
1145 	    is_ipv4_pkt(skb)) {
1146 		ip = (struct iphdr *)ip_hdr(skb);
1147 		pskb_trim(skb, eth_hdr_len + ntohs(ip->tot_len));
1148 	}
1149 
1150 	/* If vlan tag is already inlined in the packet, skip HW VLAN
1151 	 * tagging in pvid-tagging mode
1152 	 */
1153 	if (be_pvid_tagging_enabled(adapter) &&
1154 	    veh->h_vlan_proto == htons(ETH_P_8021Q))
1155 		BE_WRB_F_SET(wrb_params->features, VLAN_SKIP_HW, 1);
1156 
1157 	/* HW has a bug wherein it will calculate CSUM for VLAN
1158 	 * pkts even though it is disabled.
1159 	 * Manually insert VLAN in pkt.
1160 	 */
1161 	if (skb->ip_summed != CHECKSUM_PARTIAL &&
1162 	    skb_vlan_tag_present(skb)) {
1163 		skb = be_insert_vlan_in_pkt(adapter, skb, wrb_params);
1164 		if (unlikely(!skb))
1165 			goto err;
1166 	}
1167 
1168 	/* HW may lockup when VLAN HW tagging is requested on
1169 	 * certain ipv6 packets. Drop such pkts if the HW workaround to
1170 	 * skip HW tagging is not enabled by FW.
1171 	 */
1172 	if (unlikely(be_ipv6_tx_stall_chk(adapter, skb) &&
1173 		     (adapter->pvid || adapter->qnq_vid) &&
1174 		     !qnq_async_evt_rcvd(adapter)))
1175 		goto tx_drop;
1176 
1177 	/* Manual VLAN tag insertion to prevent:
1178 	 * ASIC lockup when the ASIC inserts VLAN tag into
1179 	 * certain ipv6 packets. Insert VLAN tags in driver,
1180 	 * and set event, completion, vlan bits accordingly
1181 	 * in the Tx WRB.
1182 	 */
1183 	if (be_ipv6_tx_stall_chk(adapter, skb) &&
1184 	    be_vlan_tag_tx_chk(adapter, skb)) {
1185 		skb = be_insert_vlan_in_pkt(adapter, skb, wrb_params);
1186 		if (unlikely(!skb))
1187 			goto err;
1188 	}
1189 
1190 	return skb;
1191 tx_drop:
1192 	dev_kfree_skb_any(skb);
1193 err:
1194 	return NULL;
1195 }
1196 
1197 static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
1198 					   struct sk_buff *skb,
1199 					   struct be_wrb_params *wrb_params)
1200 {
1201 	int err;
1202 
1203 	/* Lancer, SH and BE3 in SRIOV mode have a bug wherein
1204 	 * packets that are 32b or less may cause a transmit stall
1205 	 * on that port. The workaround is to pad such packets
1206 	 * (len <= 32 bytes) to a minimum length of 36b.
1207 	 */
1208 	if (skb->len <= 32) {
1209 		if (skb_put_padto(skb, 36))
1210 			return NULL;
1211 	}
1212 
1213 	if (BEx_chip(adapter) || lancer_chip(adapter)) {
1214 		skb = be_lancer_xmit_workarounds(adapter, skb, wrb_params);
1215 		if (!skb)
1216 			return NULL;
1217 	}
1218 
1219 	/* The stack can send us skbs with length greater than
1220 	 * what the HW can handle. Trim the extra bytes.
1221 	 */
1222 	WARN_ON_ONCE(skb->len > BE_MAX_GSO_SIZE);
1223 	err = pskb_trim(skb, BE_MAX_GSO_SIZE);
1224 	WARN_ON(err);
1225 
1226 	return skb;
1227 }
1228 
1229 static void be_xmit_flush(struct be_adapter *adapter, struct be_tx_obj *txo)
1230 {
1231 	struct be_queue_info *txq = &txo->q;
1232 	struct be_eth_hdr_wrb *hdr = queue_index_node(txq, txo->last_req_hdr);
1233 
1234 	/* Mark the last request eventable if it hasn't been marked already */
1235 	if (!(hdr->dw[2] & cpu_to_le32(TX_HDR_WRB_EVT)))
1236 		hdr->dw[2] |= cpu_to_le32(TX_HDR_WRB_EVT | TX_HDR_WRB_COMPL);
1237 
1238 	/* compose a dummy wrb if there are odd set of wrbs to notify */
1239 	if (!lancer_chip(adapter) && (txo->pend_wrb_cnt & 1)) {
1240 		wrb_fill_dummy(queue_head_node(txq));
1241 		queue_head_inc(txq);
1242 		atomic_inc(&txq->used);
1243 		txo->pend_wrb_cnt++;
1244 		hdr->dw[2] &= ~cpu_to_le32(TX_HDR_WRB_NUM_MASK <<
1245 					   TX_HDR_WRB_NUM_SHIFT);
1246 		hdr->dw[2] |= cpu_to_le32((txo->last_req_wrb_cnt + 1) <<
1247 					  TX_HDR_WRB_NUM_SHIFT);
1248 	}
1249 	be_txq_notify(adapter, txo, txo->pend_wrb_cnt);
1250 	txo->pend_wrb_cnt = 0;
1251 }
1252 
1253 /* OS2BMC related */
1254 
1255 #define DHCP_CLIENT_PORT	68
1256 #define DHCP_SERVER_PORT	67
1257 #define NET_BIOS_PORT1		137
1258 #define NET_BIOS_PORT2		138
1259 #define DHCPV6_RAS_PORT		547
1260 
1261 #define is_mc_allowed_on_bmc(adapter, eh)	\
1262 	(!is_multicast_filt_enabled(adapter) &&	\
1263 	 is_multicast_ether_addr(eh->h_dest) &&	\
1264 	 !is_broadcast_ether_addr(eh->h_dest))
1265 
1266 #define is_bc_allowed_on_bmc(adapter, eh)	\
1267 	(!is_broadcast_filt_enabled(adapter) &&	\
1268 	 is_broadcast_ether_addr(eh->h_dest))
1269 
1270 #define is_arp_allowed_on_bmc(adapter, skb)	\
1271 	(is_arp(skb) && is_arp_filt_enabled(adapter))
1272 
1273 #define is_arp(skb)	(skb->protocol == htons(ETH_P_ARP))
1274 
1275 #define is_arp_filt_enabled(adapter)	\
1276 		(adapter->bmc_filt_mask & (BMC_FILT_BROADCAST_ARP))
1277 
1278 #define is_dhcp_client_filt_enabled(adapter)	\
1279 		(adapter->bmc_filt_mask & BMC_FILT_BROADCAST_DHCP_CLIENT)
1280 
1281 #define is_dhcp_srvr_filt_enabled(adapter)	\
1282 		(adapter->bmc_filt_mask & BMC_FILT_BROADCAST_DHCP_SERVER)
1283 
1284 #define is_nbios_filt_enabled(adapter)	\
1285 		(adapter->bmc_filt_mask & BMC_FILT_BROADCAST_NET_BIOS)
1286 
1287 #define is_ipv6_na_filt_enabled(adapter)	\
1288 		(adapter->bmc_filt_mask &	\
1289 			BMC_FILT_MULTICAST_IPV6_NEIGH_ADVER)
1290 
1291 #define is_ipv6_ra_filt_enabled(adapter)	\
1292 		(adapter->bmc_filt_mask & BMC_FILT_MULTICAST_IPV6_RA)
1293 
1294 #define is_ipv6_ras_filt_enabled(adapter)	\
1295 		(adapter->bmc_filt_mask & BMC_FILT_MULTICAST_IPV6_RAS)
1296 
1297 #define is_broadcast_filt_enabled(adapter)	\
1298 		(adapter->bmc_filt_mask & BMC_FILT_BROADCAST)
1299 
1300 #define is_multicast_filt_enabled(adapter)	\
1301 		(adapter->bmc_filt_mask & BMC_FILT_MULTICAST)
1302 
1303 static bool be_send_pkt_to_bmc(struct be_adapter *adapter,
1304 			       struct sk_buff **skb)
1305 {
1306 	struct ethhdr *eh = (struct ethhdr *)(*skb)->data;
1307 	bool os2bmc = false;
1308 
1309 	if (!be_is_os2bmc_enabled(adapter))
1310 		goto done;
1311 
1312 	if (!is_multicast_ether_addr(eh->h_dest))
1313 		goto done;
1314 
1315 	if (is_mc_allowed_on_bmc(adapter, eh) ||
1316 	    is_bc_allowed_on_bmc(adapter, eh) ||
1317 	    is_arp_allowed_on_bmc(adapter, (*skb))) {
1318 		os2bmc = true;
1319 		goto done;
1320 	}
1321 
1322 	if ((*skb)->protocol == htons(ETH_P_IPV6)) {
1323 		struct ipv6hdr *hdr = ipv6_hdr((*skb));
1324 		u8 nexthdr = hdr->nexthdr;
1325 
1326 		if (nexthdr == IPPROTO_ICMPV6) {
1327 			struct icmp6hdr *icmp6 = icmp6_hdr((*skb));
1328 
1329 			switch (icmp6->icmp6_type) {
1330 			case NDISC_ROUTER_ADVERTISEMENT:
1331 				os2bmc = is_ipv6_ra_filt_enabled(adapter);
1332 				goto done;
1333 			case NDISC_NEIGHBOUR_ADVERTISEMENT:
1334 				os2bmc = is_ipv6_na_filt_enabled(adapter);
1335 				goto done;
1336 			default:
1337 				break;
1338 			}
1339 		}
1340 	}
1341 
1342 	if (is_udp_pkt((*skb))) {
1343 		struct udphdr *udp = udp_hdr((*skb));
1344 
1345 		switch (ntohs(udp->dest)) {
1346 		case DHCP_CLIENT_PORT:
1347 			os2bmc = is_dhcp_client_filt_enabled(adapter);
1348 			goto done;
1349 		case DHCP_SERVER_PORT:
1350 			os2bmc = is_dhcp_srvr_filt_enabled(adapter);
1351 			goto done;
1352 		case NET_BIOS_PORT1:
1353 		case NET_BIOS_PORT2:
1354 			os2bmc = is_nbios_filt_enabled(adapter);
1355 			goto done;
1356 		case DHCPV6_RAS_PORT:
1357 			os2bmc = is_ipv6_ras_filt_enabled(adapter);
1358 			goto done;
1359 		default:
1360 			break;
1361 		}
1362 	}
1363 done:
1364 	/* For packets over a vlan, which are destined
1365 	 * to BMC, asic expects the vlan to be inline in the packet.
1366 	 */
1367 	if (os2bmc)
1368 		*skb = be_insert_vlan_in_pkt(adapter, *skb, NULL);
1369 
1370 	return os2bmc;
1371 }
1372 
1373 static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
1374 {
1375 	struct be_adapter *adapter = netdev_priv(netdev);
1376 	u16 q_idx = skb_get_queue_mapping(skb);
1377 	struct be_tx_obj *txo = &adapter->tx_obj[q_idx];
1378 	struct be_wrb_params wrb_params = { 0 };
1379 	bool flush = !skb->xmit_more;
1380 	u16 wrb_cnt;
1381 
1382 	skb = be_xmit_workarounds(adapter, skb, &wrb_params);
1383 	if (unlikely(!skb))
1384 		goto drop;
1385 
1386 	be_get_wrb_params_from_skb(adapter, skb, &wrb_params);
1387 
1388 	wrb_cnt = be_xmit_enqueue(adapter, txo, skb, &wrb_params);
1389 	if (unlikely(!wrb_cnt)) {
1390 		dev_kfree_skb_any(skb);
1391 		goto drop;
1392 	}
1393 
1394 	/* if os2bmc is enabled and if the pkt is destined to bmc,
1395 	 * enqueue the pkt a 2nd time with mgmt bit set.
1396 	 */
1397 	if (be_send_pkt_to_bmc(adapter, &skb)) {
1398 		BE_WRB_F_SET(wrb_params.features, OS2BMC, 1);
1399 		wrb_cnt = be_xmit_enqueue(adapter, txo, skb, &wrb_params);
1400 		if (unlikely(!wrb_cnt))
1401 			goto drop;
1402 		else
1403 			skb_get(skb);
1404 	}
1405 
1406 	if (be_is_txq_full(txo)) {
1407 		netif_stop_subqueue(netdev, q_idx);
1408 		tx_stats(txo)->tx_stops++;
1409 	}
1410 
1411 	if (flush || __netif_subqueue_stopped(netdev, q_idx))
1412 		be_xmit_flush(adapter, txo);
1413 
1414 	return NETDEV_TX_OK;
1415 drop:
1416 	tx_stats(txo)->tx_drv_drops++;
1417 	/* Flush the already enqueued tx requests */
1418 	if (flush && txo->pend_wrb_cnt)
1419 		be_xmit_flush(adapter, txo);
1420 
1421 	return NETDEV_TX_OK;
1422 }
1423 
1424 static void be_tx_timeout(struct net_device *netdev)
1425 {
1426 	struct be_adapter *adapter = netdev_priv(netdev);
1427 	struct device *dev = &adapter->pdev->dev;
1428 	struct be_tx_obj *txo;
1429 	struct sk_buff *skb;
1430 	struct tcphdr *tcphdr;
1431 	struct udphdr *udphdr;
1432 	u32 *entry;
1433 	int status;
1434 	int i, j;
1435 
1436 	for_all_tx_queues(adapter, txo, i) {
1437 		dev_info(dev, "TXQ Dump: %d H: %d T: %d used: %d, qid: 0x%x\n",
1438 			 i, txo->q.head, txo->q.tail,
1439 			 atomic_read(&txo->q.used), txo->q.id);
1440 
1441 		entry = txo->q.dma_mem.va;
1442 		for (j = 0; j < TX_Q_LEN * 4; j += 4) {
1443 			if (entry[j] != 0 || entry[j + 1] != 0 ||
1444 			    entry[j + 2] != 0 || entry[j + 3] != 0) {
1445 				dev_info(dev, "Entry %d 0x%x 0x%x 0x%x 0x%x\n",
1446 					 j, entry[j], entry[j + 1],
1447 					 entry[j + 2], entry[j + 3]);
1448 			}
1449 		}
1450 
1451 		entry = txo->cq.dma_mem.va;
1452 		dev_info(dev, "TXCQ Dump: %d  H: %d T: %d used: %d\n",
1453 			 i, txo->cq.head, txo->cq.tail,
1454 			 atomic_read(&txo->cq.used));
1455 		for (j = 0; j < TX_CQ_LEN * 4; j += 4) {
1456 			if (entry[j] != 0 || entry[j + 1] != 0 ||
1457 			    entry[j + 2] != 0 || entry[j + 3] != 0) {
1458 				dev_info(dev, "Entry %d 0x%x 0x%x 0x%x 0x%x\n",
1459 					 j, entry[j], entry[j + 1],
1460 					 entry[j + 2], entry[j + 3]);
1461 			}
1462 		}
1463 
1464 		for (j = 0; j < TX_Q_LEN; j++) {
1465 			if (txo->sent_skb_list[j]) {
1466 				skb = txo->sent_skb_list[j];
1467 				if (ip_hdr(skb)->protocol == IPPROTO_TCP) {
1468 					tcphdr = tcp_hdr(skb);
1469 					dev_info(dev, "TCP source port %d\n",
1470 						 ntohs(tcphdr->source));
1471 					dev_info(dev, "TCP dest port %d\n",
1472 						 ntohs(tcphdr->dest));
1473 					dev_info(dev, "TCP sequence num %d\n",
1474 						 ntohs(tcphdr->seq));
1475 					dev_info(dev, "TCP ack_seq %d\n",
1476 						 ntohs(tcphdr->ack_seq));
1477 				} else if (ip_hdr(skb)->protocol ==
1478 					   IPPROTO_UDP) {
1479 					udphdr = udp_hdr(skb);
1480 					dev_info(dev, "UDP source port %d\n",
1481 						 ntohs(udphdr->source));
1482 					dev_info(dev, "UDP dest port %d\n",
1483 						 ntohs(udphdr->dest));
1484 				}
1485 				dev_info(dev, "skb[%d] %p len %d proto 0x%x\n",
1486 					 j, skb, skb->len, skb->protocol);
1487 			}
1488 		}
1489 	}
1490 
1491 	if (lancer_chip(adapter)) {
1492 		dev_info(dev, "Initiating reset due to tx timeout\n");
1493 		dev_info(dev, "Resetting adapter\n");
1494 		status = lancer_physdev_ctrl(adapter,
1495 					     PHYSDEV_CONTROL_FW_RESET_MASK);
1496 		if (status)
1497 			dev_err(dev, "Reset failed .. Reboot server\n");
1498 	}
1499 }
1500 
1501 static inline bool be_in_all_promisc(struct be_adapter *adapter)
1502 {
1503 	return (adapter->if_flags & BE_IF_FLAGS_ALL_PROMISCUOUS) ==
1504 			BE_IF_FLAGS_ALL_PROMISCUOUS;
1505 }
1506 
1507 static int be_set_vlan_promisc(struct be_adapter *adapter)
1508 {
1509 	struct device *dev = &adapter->pdev->dev;
1510 	int status;
1511 
1512 	if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS)
1513 		return 0;
1514 
1515 	status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, ON);
1516 	if (!status) {
1517 		dev_info(dev, "Enabled VLAN promiscuous mode\n");
1518 		adapter->if_flags |= BE_IF_FLAGS_VLAN_PROMISCUOUS;
1519 	} else {
1520 		dev_err(dev, "Failed to enable VLAN promiscuous mode\n");
1521 	}
1522 	return status;
1523 }
1524 
1525 static int be_clear_vlan_promisc(struct be_adapter *adapter)
1526 {
1527 	struct device *dev = &adapter->pdev->dev;
1528 	int status;
1529 
1530 	status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_VLAN_PROMISCUOUS, OFF);
1531 	if (!status) {
1532 		dev_info(dev, "Disabling VLAN promiscuous mode\n");
1533 		adapter->if_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
1534 	}
1535 	return status;
1536 }
1537 
1538 /*
1539  * A max of 64 (BE_NUM_VLANS_SUPPORTED) vlans can be configured in BE.
1540  * If the user configures more, place BE in vlan promiscuous mode.
1541  */
1542 static int be_vid_config(struct be_adapter *adapter)
1543 {
1544 	struct device *dev = &adapter->pdev->dev;
1545 	u16 vids[BE_NUM_VLANS_SUPPORTED];
1546 	u16 num = 0, i = 0;
1547 	int status = 0;
1548 
1549 	/* No need to change the VLAN state if the I/F is in promiscuous */
1550 	if (adapter->netdev->flags & IFF_PROMISC)
1551 		return 0;
1552 
1553 	if (adapter->vlans_added > be_max_vlans(adapter))
1554 		return be_set_vlan_promisc(adapter);
1555 
1556 	if (adapter->if_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS) {
1557 		status = be_clear_vlan_promisc(adapter);
1558 		if (status)
1559 			return status;
1560 	}
1561 	/* Construct VLAN Table to give to HW */
1562 	for_each_set_bit(i, adapter->vids, VLAN_N_VID)
1563 		vids[num++] = cpu_to_le16(i);
1564 
1565 	status = be_cmd_vlan_config(adapter, adapter->if_handle, vids, num, 0);
1566 	if (status) {
1567 		dev_err(dev, "Setting HW VLAN filtering failed\n");
1568 		/* Set to VLAN promisc mode as setting VLAN filter failed */
1569 		if (addl_status(status) == MCC_ADDL_STATUS_INSUFFICIENT_VLANS ||
1570 		    addl_status(status) ==
1571 				MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES)
1572 			return be_set_vlan_promisc(adapter);
1573 	}
1574 	return status;
1575 }
1576 
1577 static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
1578 {
1579 	struct be_adapter *adapter = netdev_priv(netdev);
1580 	int status = 0;
1581 
1582 	mutex_lock(&adapter->rx_filter_lock);
1583 
1584 	/* Packets with VID 0 are always received by Lancer by default */
1585 	if (lancer_chip(adapter) && vid == 0)
1586 		goto done;
1587 
1588 	if (test_bit(vid, adapter->vids))
1589 		goto done;
1590 
1591 	set_bit(vid, adapter->vids);
1592 	adapter->vlans_added++;
1593 
1594 	status = be_vid_config(adapter);
1595 done:
1596 	mutex_unlock(&adapter->rx_filter_lock);
1597 	return status;
1598 }
1599 
1600 static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
1601 {
1602 	struct be_adapter *adapter = netdev_priv(netdev);
1603 	int status = 0;
1604 
1605 	mutex_lock(&adapter->rx_filter_lock);
1606 
1607 	/* Packets with VID 0 are always received by Lancer by default */
1608 	if (lancer_chip(adapter) && vid == 0)
1609 		goto done;
1610 
1611 	if (!test_bit(vid, adapter->vids))
1612 		goto done;
1613 
1614 	clear_bit(vid, adapter->vids);
1615 	adapter->vlans_added--;
1616 
1617 	status = be_vid_config(adapter);
1618 done:
1619 	mutex_unlock(&adapter->rx_filter_lock);
1620 	return status;
1621 }
1622 
1623 static void be_set_all_promisc(struct be_adapter *adapter)
1624 {
1625 	be_cmd_rx_filter(adapter, BE_IF_FLAGS_ALL_PROMISCUOUS, ON);
1626 	adapter->if_flags |= BE_IF_FLAGS_ALL_PROMISCUOUS;
1627 }
1628 
1629 static void be_set_mc_promisc(struct be_adapter *adapter)
1630 {
1631 	int status;
1632 
1633 	if (adapter->if_flags & BE_IF_FLAGS_MCAST_PROMISCUOUS)
1634 		return;
1635 
1636 	status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MCAST_PROMISCUOUS, ON);
1637 	if (!status)
1638 		adapter->if_flags |= BE_IF_FLAGS_MCAST_PROMISCUOUS;
1639 }
1640 
1641 static void be_set_uc_promisc(struct be_adapter *adapter)
1642 {
1643 	int status;
1644 
1645 	if (adapter->if_flags & BE_IF_FLAGS_PROMISCUOUS)
1646 		return;
1647 
1648 	status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_PROMISCUOUS, ON);
1649 	if (!status)
1650 		adapter->if_flags |= BE_IF_FLAGS_PROMISCUOUS;
1651 }
1652 
1653 static void be_clear_uc_promisc(struct be_adapter *adapter)
1654 {
1655 	int status;
1656 
1657 	if (!(adapter->if_flags & BE_IF_FLAGS_PROMISCUOUS))
1658 		return;
1659 
1660 	status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_PROMISCUOUS, OFF);
1661 	if (!status)
1662 		adapter->if_flags &= ~BE_IF_FLAGS_PROMISCUOUS;
1663 }
1664 
1665 /* The below 2 functions are the callback args for __dev_mc_sync/dev_uc_sync().
1666  * We use a single callback function for both sync and unsync. We really don't
1667  * add/remove addresses through this callback. But, we use it to detect changes
1668  * to the uc/mc lists. The entire uc/mc list is programmed in be_set_rx_mode().
1669  */
1670 static int be_uc_list_update(struct net_device *netdev,
1671 			     const unsigned char *addr)
1672 {
1673 	struct be_adapter *adapter = netdev_priv(netdev);
1674 
1675 	adapter->update_uc_list = true;
1676 	return 0;
1677 }
1678 
1679 static int be_mc_list_update(struct net_device *netdev,
1680 			     const unsigned char *addr)
1681 {
1682 	struct be_adapter *adapter = netdev_priv(netdev);
1683 
1684 	adapter->update_mc_list = true;
1685 	return 0;
1686 }
1687 
1688 static void be_set_mc_list(struct be_adapter *adapter)
1689 {
1690 	struct net_device *netdev = adapter->netdev;
1691 	struct netdev_hw_addr *ha;
1692 	bool mc_promisc = false;
1693 	int status;
1694 
1695 	netif_addr_lock_bh(netdev);
1696 	__dev_mc_sync(netdev, be_mc_list_update, be_mc_list_update);
1697 
1698 	if (netdev->flags & IFF_PROMISC) {
1699 		adapter->update_mc_list = false;
1700 	} else if (netdev->flags & IFF_ALLMULTI ||
1701 		   netdev_mc_count(netdev) > be_max_mc(adapter)) {
1702 		/* Enable multicast promisc if num configured exceeds
1703 		 * what we support
1704 		 */
1705 		mc_promisc = true;
1706 		adapter->update_mc_list = false;
1707 	} else if (adapter->if_flags & BE_IF_FLAGS_MCAST_PROMISCUOUS) {
1708 		/* Update mc-list unconditionally if the iface was previously
1709 		 * in mc-promisc mode and now is out of that mode.
1710 		 */
1711 		adapter->update_mc_list = true;
1712 	}
1713 
1714 	if (adapter->update_mc_list) {
1715 		int i = 0;
1716 
1717 		/* cache the mc-list in adapter */
1718 		netdev_for_each_mc_addr(ha, netdev) {
1719 			ether_addr_copy(adapter->mc_list[i].mac, ha->addr);
1720 			i++;
1721 		}
1722 		adapter->mc_count = netdev_mc_count(netdev);
1723 	}
1724 	netif_addr_unlock_bh(netdev);
1725 
1726 	if (mc_promisc) {
1727 		be_set_mc_promisc(adapter);
1728 	} else if (adapter->update_mc_list) {
1729 		status = be_cmd_rx_filter(adapter, BE_IF_FLAGS_MULTICAST, ON);
1730 		if (!status)
1731 			adapter->if_flags &= ~BE_IF_FLAGS_MCAST_PROMISCUOUS;
1732 		else
1733 			be_set_mc_promisc(adapter);
1734 
1735 		adapter->update_mc_list = false;
1736 	}
1737 }
1738 
1739 static void be_clear_mc_list(struct be_adapter *adapter)
1740 {
1741 	struct net_device *netdev = adapter->netdev;
1742 
1743 	__dev_mc_unsync(netdev, NULL);
1744 	be_cmd_rx_filter(adapter, BE_IF_FLAGS_MULTICAST, OFF);
1745 	adapter->mc_count = 0;
1746 }
1747 
1748 static int be_uc_mac_add(struct be_adapter *adapter, int uc_idx)
1749 {
1750 	if (ether_addr_equal(adapter->uc_list[uc_idx].mac, adapter->dev_mac)) {
1751 		adapter->pmac_id[uc_idx + 1] = adapter->pmac_id[0];
1752 		return 0;
1753 	}
1754 
1755 	return be_cmd_pmac_add(adapter, adapter->uc_list[uc_idx].mac,
1756 			       adapter->if_handle,
1757 			       &adapter->pmac_id[uc_idx + 1], 0);
1758 }
1759 
1760 static void be_uc_mac_del(struct be_adapter *adapter, int pmac_id)
1761 {
1762 	if (pmac_id == adapter->pmac_id[0])
1763 		return;
1764 
1765 	be_cmd_pmac_del(adapter, adapter->if_handle, pmac_id, 0);
1766 }
1767 
1768 static void be_set_uc_list(struct be_adapter *adapter)
1769 {
1770 	struct net_device *netdev = adapter->netdev;
1771 	struct netdev_hw_addr *ha;
1772 	bool uc_promisc = false;
1773 	int curr_uc_macs = 0, i;
1774 
1775 	netif_addr_lock_bh(netdev);
1776 	__dev_uc_sync(netdev, be_uc_list_update, be_uc_list_update);
1777 
1778 	if (netdev->flags & IFF_PROMISC) {
1779 		adapter->update_uc_list = false;
1780 	} else if (netdev_uc_count(netdev) > (be_max_uc(adapter) - 1)) {
1781 		uc_promisc = true;
1782 		adapter->update_uc_list = false;
1783 	}  else if (adapter->if_flags & BE_IF_FLAGS_PROMISCUOUS) {
1784 		/* Update uc-list unconditionally if the iface was previously
1785 		 * in uc-promisc mode and now is out of that mode.
1786 		 */
1787 		adapter->update_uc_list = true;
1788 	}
1789 
1790 	if (adapter->update_uc_list) {
1791 		/* cache the uc-list in adapter array */
1792 		i = 0;
1793 		netdev_for_each_uc_addr(ha, netdev) {
1794 			ether_addr_copy(adapter->uc_list[i].mac, ha->addr);
1795 			i++;
1796 		}
1797 		curr_uc_macs = netdev_uc_count(netdev);
1798 	}
1799 	netif_addr_unlock_bh(netdev);
1800 
1801 	if (uc_promisc) {
1802 		be_set_uc_promisc(adapter);
1803 	} else if (adapter->update_uc_list) {
1804 		be_clear_uc_promisc(adapter);
1805 
1806 		for (i = 0; i < adapter->uc_macs; i++)
1807 			be_uc_mac_del(adapter, adapter->pmac_id[i + 1]);
1808 
1809 		for (i = 0; i < curr_uc_macs; i++)
1810 			be_uc_mac_add(adapter, i);
1811 		adapter->uc_macs = curr_uc_macs;
1812 		adapter->update_uc_list = false;
1813 	}
1814 }
1815 
1816 static void be_clear_uc_list(struct be_adapter *adapter)
1817 {
1818 	struct net_device *netdev = adapter->netdev;
1819 	int i;
1820 
1821 	__dev_uc_unsync(netdev, NULL);
1822 	for (i = 0; i < adapter->uc_macs; i++)
1823 		be_uc_mac_del(adapter, adapter->pmac_id[i + 1]);
1824 
1825 	adapter->uc_macs = 0;
1826 }
1827 
1828 static void __be_set_rx_mode(struct be_adapter *adapter)
1829 {
1830 	struct net_device *netdev = adapter->netdev;
1831 
1832 	mutex_lock(&adapter->rx_filter_lock);
1833 
1834 	if (netdev->flags & IFF_PROMISC) {
1835 		if (!be_in_all_promisc(adapter))
1836 			be_set_all_promisc(adapter);
1837 	} else if (be_in_all_promisc(adapter)) {
1838 		/* We need to re-program the vlan-list or clear
1839 		 * vlan-promisc mode (if needed) when the interface
1840 		 * comes out of promisc mode.
1841 		 */
1842 		be_vid_config(adapter);
1843 	}
1844 
1845 	be_set_uc_list(adapter);
1846 	be_set_mc_list(adapter);
1847 
1848 	mutex_unlock(&adapter->rx_filter_lock);
1849 }
1850 
1851 static void be_work_set_rx_mode(struct work_struct *work)
1852 {
1853 	struct be_cmd_work *cmd_work =
1854 				container_of(work, struct be_cmd_work, work);
1855 
1856 	__be_set_rx_mode(cmd_work->adapter);
1857 	kfree(cmd_work);
1858 }
1859 
1860 static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
1861 {
1862 	struct be_adapter *adapter = netdev_priv(netdev);
1863 	struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1864 	int status;
1865 
1866 	if (!sriov_enabled(adapter))
1867 		return -EPERM;
1868 
1869 	if (!is_valid_ether_addr(mac) || vf >= adapter->num_vfs)
1870 		return -EINVAL;
1871 
1872 	/* Proceed further only if user provided MAC is different
1873 	 * from active MAC
1874 	 */
1875 	if (ether_addr_equal(mac, vf_cfg->mac_addr))
1876 		return 0;
1877 
1878 	if (BEx_chip(adapter)) {
1879 		be_cmd_pmac_del(adapter, vf_cfg->if_handle, vf_cfg->pmac_id,
1880 				vf + 1);
1881 
1882 		status = be_cmd_pmac_add(adapter, mac, vf_cfg->if_handle,
1883 					 &vf_cfg->pmac_id, vf + 1);
1884 	} else {
1885 		status = be_cmd_set_mac(adapter, mac, vf_cfg->if_handle,
1886 					vf + 1);
1887 	}
1888 
1889 	if (status) {
1890 		dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed: %#x",
1891 			mac, vf, status);
1892 		return be_cmd_status(status);
1893 	}
1894 
1895 	ether_addr_copy(vf_cfg->mac_addr, mac);
1896 
1897 	return 0;
1898 }
1899 
1900 static int be_get_vf_config(struct net_device *netdev, int vf,
1901 			    struct ifla_vf_info *vi)
1902 {
1903 	struct be_adapter *adapter = netdev_priv(netdev);
1904 	struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1905 
1906 	if (!sriov_enabled(adapter))
1907 		return -EPERM;
1908 
1909 	if (vf >= adapter->num_vfs)
1910 		return -EINVAL;
1911 
1912 	vi->vf = vf;
1913 	vi->max_tx_rate = vf_cfg->tx_rate;
1914 	vi->min_tx_rate = 0;
1915 	vi->vlan = vf_cfg->vlan_tag & VLAN_VID_MASK;
1916 	vi->qos = vf_cfg->vlan_tag >> VLAN_PRIO_SHIFT;
1917 	memcpy(&vi->mac, vf_cfg->mac_addr, ETH_ALEN);
1918 	vi->linkstate = adapter->vf_cfg[vf].plink_tracking;
1919 	vi->spoofchk = adapter->vf_cfg[vf].spoofchk;
1920 
1921 	return 0;
1922 }
1923 
1924 static int be_set_vf_tvt(struct be_adapter *adapter, int vf, u16 vlan)
1925 {
1926 	struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1927 	u16 vids[BE_NUM_VLANS_SUPPORTED];
1928 	int vf_if_id = vf_cfg->if_handle;
1929 	int status;
1930 
1931 	/* Enable Transparent VLAN Tagging */
1932 	status = be_cmd_set_hsw_config(adapter, vlan, vf + 1, vf_if_id, 0, 0);
1933 	if (status)
1934 		return status;
1935 
1936 	/* Clear pre-programmed VLAN filters on VF if any, if TVT is enabled */
1937 	vids[0] = 0;
1938 	status = be_cmd_vlan_config(adapter, vf_if_id, vids, 1, vf + 1);
1939 	if (!status)
1940 		dev_info(&adapter->pdev->dev,
1941 			 "Cleared guest VLANs on VF%d", vf);
1942 
1943 	/* After TVT is enabled, disallow VFs to program VLAN filters */
1944 	if (vf_cfg->privileges & BE_PRIV_FILTMGMT) {
1945 		status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges &
1946 						  ~BE_PRIV_FILTMGMT, vf + 1);
1947 		if (!status)
1948 			vf_cfg->privileges &= ~BE_PRIV_FILTMGMT;
1949 	}
1950 	return 0;
1951 }
1952 
1953 static int be_clear_vf_tvt(struct be_adapter *adapter, int vf)
1954 {
1955 	struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1956 	struct device *dev = &adapter->pdev->dev;
1957 	int status;
1958 
1959 	/* Reset Transparent VLAN Tagging. */
1960 	status = be_cmd_set_hsw_config(adapter, BE_RESET_VLAN_TAG_ID, vf + 1,
1961 				       vf_cfg->if_handle, 0, 0);
1962 	if (status)
1963 		return status;
1964 
1965 	/* Allow VFs to program VLAN filtering */
1966 	if (!(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
1967 		status = be_cmd_set_fn_privileges(adapter, vf_cfg->privileges |
1968 						  BE_PRIV_FILTMGMT, vf + 1);
1969 		if (!status) {
1970 			vf_cfg->privileges |= BE_PRIV_FILTMGMT;
1971 			dev_info(dev, "VF%d: FILTMGMT priv enabled", vf);
1972 		}
1973 	}
1974 
1975 	dev_info(dev,
1976 		 "Disable/re-enable i/f in VM to clear Transparent VLAN tag");
1977 	return 0;
1978 }
1979 
1980 static int be_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos,
1981 			  __be16 vlan_proto)
1982 {
1983 	struct be_adapter *adapter = netdev_priv(netdev);
1984 	struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
1985 	int status;
1986 
1987 	if (!sriov_enabled(adapter))
1988 		return -EPERM;
1989 
1990 	if (vf >= adapter->num_vfs || vlan > 4095 || qos > 7)
1991 		return -EINVAL;
1992 
1993 	if (vlan_proto != htons(ETH_P_8021Q))
1994 		return -EPROTONOSUPPORT;
1995 
1996 	if (vlan || qos) {
1997 		vlan |= qos << VLAN_PRIO_SHIFT;
1998 		status = be_set_vf_tvt(adapter, vf, vlan);
1999 	} else {
2000 		status = be_clear_vf_tvt(adapter, vf);
2001 	}
2002 
2003 	if (status) {
2004 		dev_err(&adapter->pdev->dev,
2005 			"VLAN %d config on VF %d failed : %#x\n", vlan, vf,
2006 			status);
2007 		return be_cmd_status(status);
2008 	}
2009 
2010 	vf_cfg->vlan_tag = vlan;
2011 	return 0;
2012 }
2013 
2014 static int be_set_vf_tx_rate(struct net_device *netdev, int vf,
2015 			     int min_tx_rate, int max_tx_rate)
2016 {
2017 	struct be_adapter *adapter = netdev_priv(netdev);
2018 	struct device *dev = &adapter->pdev->dev;
2019 	int percent_rate, status = 0;
2020 	u16 link_speed = 0;
2021 	u8 link_status;
2022 
2023 	if (!sriov_enabled(adapter))
2024 		return -EPERM;
2025 
2026 	if (vf >= adapter->num_vfs)
2027 		return -EINVAL;
2028 
2029 	if (min_tx_rate)
2030 		return -EINVAL;
2031 
2032 	if (!max_tx_rate)
2033 		goto config_qos;
2034 
2035 	status = be_cmd_link_status_query(adapter, &link_speed,
2036 					  &link_status, 0);
2037 	if (status)
2038 		goto err;
2039 
2040 	if (!link_status) {
2041 		dev_err(dev, "TX-rate setting not allowed when link is down\n");
2042 		status = -ENETDOWN;
2043 		goto err;
2044 	}
2045 
2046 	if (max_tx_rate < 100 || max_tx_rate > link_speed) {
2047 		dev_err(dev, "TX-rate must be between 100 and %d Mbps\n",
2048 			link_speed);
2049 		status = -EINVAL;
2050 		goto err;
2051 	}
2052 
2053 	/* On Skyhawk the QOS setting must be done only as a % value */
2054 	percent_rate = link_speed / 100;
2055 	if (skyhawk_chip(adapter) && (max_tx_rate % percent_rate)) {
2056 		dev_err(dev, "TX-rate must be a multiple of %d Mbps\n",
2057 			percent_rate);
2058 		status = -EINVAL;
2059 		goto err;
2060 	}
2061 
2062 config_qos:
2063 	status = be_cmd_config_qos(adapter, max_tx_rate, link_speed, vf + 1);
2064 	if (status)
2065 		goto err;
2066 
2067 	adapter->vf_cfg[vf].tx_rate = max_tx_rate;
2068 	return 0;
2069 
2070 err:
2071 	dev_err(dev, "TX-rate setting of %dMbps on VF%d failed\n",
2072 		max_tx_rate, vf);
2073 	return be_cmd_status(status);
2074 }
2075 
2076 static int be_set_vf_link_state(struct net_device *netdev, int vf,
2077 				int link_state)
2078 {
2079 	struct be_adapter *adapter = netdev_priv(netdev);
2080 	int status;
2081 
2082 	if (!sriov_enabled(adapter))
2083 		return -EPERM;
2084 
2085 	if (vf >= adapter->num_vfs)
2086 		return -EINVAL;
2087 
2088 	status = be_cmd_set_logical_link_config(adapter, link_state, vf+1);
2089 	if (status) {
2090 		dev_err(&adapter->pdev->dev,
2091 			"Link state change on VF %d failed: %#x\n", vf, status);
2092 		return be_cmd_status(status);
2093 	}
2094 
2095 	adapter->vf_cfg[vf].plink_tracking = link_state;
2096 
2097 	return 0;
2098 }
2099 
2100 static int be_set_vf_spoofchk(struct net_device *netdev, int vf, bool enable)
2101 {
2102 	struct be_adapter *adapter = netdev_priv(netdev);
2103 	struct be_vf_cfg *vf_cfg = &adapter->vf_cfg[vf];
2104 	u8 spoofchk;
2105 	int status;
2106 
2107 	if (!sriov_enabled(adapter))
2108 		return -EPERM;
2109 
2110 	if (vf >= adapter->num_vfs)
2111 		return -EINVAL;
2112 
2113 	if (BEx_chip(adapter))
2114 		return -EOPNOTSUPP;
2115 
2116 	if (enable == vf_cfg->spoofchk)
2117 		return 0;
2118 
2119 	spoofchk = enable ? ENABLE_MAC_SPOOFCHK : DISABLE_MAC_SPOOFCHK;
2120 
2121 	status = be_cmd_set_hsw_config(adapter, 0, vf + 1, vf_cfg->if_handle,
2122 				       0, spoofchk);
2123 	if (status) {
2124 		dev_err(&adapter->pdev->dev,
2125 			"Spoofchk change on VF %d failed: %#x\n", vf, status);
2126 		return be_cmd_status(status);
2127 	}
2128 
2129 	vf_cfg->spoofchk = enable;
2130 	return 0;
2131 }
2132 
2133 static void be_aic_update(struct be_aic_obj *aic, u64 rx_pkts, u64 tx_pkts,
2134 			  ulong now)
2135 {
2136 	aic->rx_pkts_prev = rx_pkts;
2137 	aic->tx_reqs_prev = tx_pkts;
2138 	aic->jiffies = now;
2139 }
2140 
2141 static int be_get_new_eqd(struct be_eq_obj *eqo)
2142 {
2143 	struct be_adapter *adapter = eqo->adapter;
2144 	int eqd, start;
2145 	struct be_aic_obj *aic;
2146 	struct be_rx_obj *rxo;
2147 	struct be_tx_obj *txo;
2148 	u64 rx_pkts = 0, tx_pkts = 0;
2149 	ulong now;
2150 	u32 pps, delta;
2151 	int i;
2152 
2153 	aic = &adapter->aic_obj[eqo->idx];
2154 	if (!aic->enable) {
2155 		if (aic->jiffies)
2156 			aic->jiffies = 0;
2157 		eqd = aic->et_eqd;
2158 		return eqd;
2159 	}
2160 
2161 	for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
2162 		do {
2163 			start = u64_stats_fetch_begin_irq(&rxo->stats.sync);
2164 			rx_pkts += rxo->stats.rx_pkts;
2165 		} while (u64_stats_fetch_retry_irq(&rxo->stats.sync, start));
2166 	}
2167 
2168 	for_all_tx_queues_on_eq(adapter, eqo, txo, i) {
2169 		do {
2170 			start = u64_stats_fetch_begin_irq(&txo->stats.sync);
2171 			tx_pkts += txo->stats.tx_reqs;
2172 		} while (u64_stats_fetch_retry_irq(&txo->stats.sync, start));
2173 	}
2174 
2175 	/* Skip, if wrapped around or first calculation */
2176 	now = jiffies;
2177 	if (!aic->jiffies || time_before(now, aic->jiffies) ||
2178 	    rx_pkts < aic->rx_pkts_prev ||
2179 	    tx_pkts < aic->tx_reqs_prev) {
2180 		be_aic_update(aic, rx_pkts, tx_pkts, now);
2181 		return aic->prev_eqd;
2182 	}
2183 
2184 	delta = jiffies_to_msecs(now - aic->jiffies);
2185 	if (delta == 0)
2186 		return aic->prev_eqd;
2187 
2188 	pps = (((u32)(rx_pkts - aic->rx_pkts_prev) * 1000) / delta) +
2189 		(((u32)(tx_pkts - aic->tx_reqs_prev) * 1000) / delta);
2190 	eqd = (pps / 15000) << 2;
2191 
2192 	if (eqd < 8)
2193 		eqd = 0;
2194 	eqd = min_t(u32, eqd, aic->max_eqd);
2195 	eqd = max_t(u32, eqd, aic->min_eqd);
2196 
2197 	be_aic_update(aic, rx_pkts, tx_pkts, now);
2198 
2199 	return eqd;
2200 }
2201 
2202 /* For Skyhawk-R only */
2203 static u32 be_get_eq_delay_mult_enc(struct be_eq_obj *eqo)
2204 {
2205 	struct be_adapter *adapter = eqo->adapter;
2206 	struct be_aic_obj *aic = &adapter->aic_obj[eqo->idx];
2207 	ulong now = jiffies;
2208 	int eqd;
2209 	u32 mult_enc;
2210 
2211 	if (!aic->enable)
2212 		return 0;
2213 
2214 	if (jiffies_to_msecs(now - aic->jiffies) < 1)
2215 		eqd = aic->prev_eqd;
2216 	else
2217 		eqd = be_get_new_eqd(eqo);
2218 
2219 	if (eqd > 100)
2220 		mult_enc = R2I_DLY_ENC_1;
2221 	else if (eqd > 60)
2222 		mult_enc = R2I_DLY_ENC_2;
2223 	else if (eqd > 20)
2224 		mult_enc = R2I_DLY_ENC_3;
2225 	else
2226 		mult_enc = R2I_DLY_ENC_0;
2227 
2228 	aic->prev_eqd = eqd;
2229 
2230 	return mult_enc;
2231 }
2232 
2233 void be_eqd_update(struct be_adapter *adapter, bool force_update)
2234 {
2235 	struct be_set_eqd set_eqd[MAX_EVT_QS];
2236 	struct be_aic_obj *aic;
2237 	struct be_eq_obj *eqo;
2238 	int i, num = 0, eqd;
2239 
2240 	for_all_evt_queues(adapter, eqo, i) {
2241 		aic = &adapter->aic_obj[eqo->idx];
2242 		eqd = be_get_new_eqd(eqo);
2243 		if (force_update || eqd != aic->prev_eqd) {
2244 			set_eqd[num].delay_multiplier = (eqd * 65)/100;
2245 			set_eqd[num].eq_id = eqo->q.id;
2246 			aic->prev_eqd = eqd;
2247 			num++;
2248 		}
2249 	}
2250 
2251 	if (num)
2252 		be_cmd_modify_eqd(adapter, set_eqd, num);
2253 }
2254 
2255 static void be_rx_stats_update(struct be_rx_obj *rxo,
2256 			       struct be_rx_compl_info *rxcp)
2257 {
2258 	struct be_rx_stats *stats = rx_stats(rxo);
2259 
2260 	u64_stats_update_begin(&stats->sync);
2261 	stats->rx_compl++;
2262 	stats->rx_bytes += rxcp->pkt_size;
2263 	stats->rx_pkts++;
2264 	if (rxcp->tunneled)
2265 		stats->rx_vxlan_offload_pkts++;
2266 	if (rxcp->pkt_type == BE_MULTICAST_PACKET)
2267 		stats->rx_mcast_pkts++;
2268 	if (rxcp->err)
2269 		stats->rx_compl_err++;
2270 	u64_stats_update_end(&stats->sync);
2271 }
2272 
2273 static inline bool csum_passed(struct be_rx_compl_info *rxcp)
2274 {
2275 	/* L4 checksum is not reliable for non TCP/UDP packets.
2276 	 * Also ignore ipcksm for ipv6 pkts
2277 	 */
2278 	return (rxcp->tcpf || rxcp->udpf) && rxcp->l4_csum &&
2279 		(rxcp->ip_csum || rxcp->ipv6) && !rxcp->err;
2280 }
2281 
2282 static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo)
2283 {
2284 	struct be_adapter *adapter = rxo->adapter;
2285 	struct be_rx_page_info *rx_page_info;
2286 	struct be_queue_info *rxq = &rxo->q;
2287 	u32 frag_idx = rxq->tail;
2288 
2289 	rx_page_info = &rxo->page_info_tbl[frag_idx];
2290 	BUG_ON(!rx_page_info->page);
2291 
2292 	if (rx_page_info->last_frag) {
2293 		dma_unmap_page(&adapter->pdev->dev,
2294 			       dma_unmap_addr(rx_page_info, bus),
2295 			       adapter->big_page_size, DMA_FROM_DEVICE);
2296 		rx_page_info->last_frag = false;
2297 	} else {
2298 		dma_sync_single_for_cpu(&adapter->pdev->dev,
2299 					dma_unmap_addr(rx_page_info, bus),
2300 					rx_frag_size, DMA_FROM_DEVICE);
2301 	}
2302 
2303 	queue_tail_inc(rxq);
2304 	atomic_dec(&rxq->used);
2305 	return rx_page_info;
2306 }
2307 
2308 /* Throwaway the data in the Rx completion */
2309 static void be_rx_compl_discard(struct be_rx_obj *rxo,
2310 				struct be_rx_compl_info *rxcp)
2311 {
2312 	struct be_rx_page_info *page_info;
2313 	u16 i, num_rcvd = rxcp->num_rcvd;
2314 
2315 	for (i = 0; i < num_rcvd; i++) {
2316 		page_info = get_rx_page_info(rxo);
2317 		put_page(page_info->page);
2318 		memset(page_info, 0, sizeof(*page_info));
2319 	}
2320 }
2321 
2322 /*
2323  * skb_fill_rx_data forms a complete skb for an ether frame
2324  * indicated by rxcp.
2325  */
2326 static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
2327 			     struct be_rx_compl_info *rxcp)
2328 {
2329 	struct be_rx_page_info *page_info;
2330 	u16 i, j;
2331 	u16 hdr_len, curr_frag_len, remaining;
2332 	u8 *start;
2333 
2334 	page_info = get_rx_page_info(rxo);
2335 	start = page_address(page_info->page) + page_info->page_offset;
2336 	prefetch(start);
2337 
2338 	/* Copy data in the first descriptor of this completion */
2339 	curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
2340 
2341 	skb->len = curr_frag_len;
2342 	if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
2343 		memcpy(skb->data, start, curr_frag_len);
2344 		/* Complete packet has now been moved to data */
2345 		put_page(page_info->page);
2346 		skb->data_len = 0;
2347 		skb->tail += curr_frag_len;
2348 	} else {
2349 		hdr_len = ETH_HLEN;
2350 		memcpy(skb->data, start, hdr_len);
2351 		skb_shinfo(skb)->nr_frags = 1;
2352 		skb_frag_set_page(skb, 0, page_info->page);
2353 		skb_shinfo(skb)->frags[0].page_offset =
2354 					page_info->page_offset + hdr_len;
2355 		skb_frag_size_set(&skb_shinfo(skb)->frags[0],
2356 				  curr_frag_len - hdr_len);
2357 		skb->data_len = curr_frag_len - hdr_len;
2358 		skb->truesize += rx_frag_size;
2359 		skb->tail += hdr_len;
2360 	}
2361 	page_info->page = NULL;
2362 
2363 	if (rxcp->pkt_size <= rx_frag_size) {
2364 		BUG_ON(rxcp->num_rcvd != 1);
2365 		return;
2366 	}
2367 
2368 	/* More frags present for this completion */
2369 	remaining = rxcp->pkt_size - curr_frag_len;
2370 	for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
2371 		page_info = get_rx_page_info(rxo);
2372 		curr_frag_len = min(remaining, rx_frag_size);
2373 
2374 		/* Coalesce all frags from the same physical page in one slot */
2375 		if (page_info->page_offset == 0) {
2376 			/* Fresh page */
2377 			j++;
2378 			skb_frag_set_page(skb, j, page_info->page);
2379 			skb_shinfo(skb)->frags[j].page_offset =
2380 							page_info->page_offset;
2381 			skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
2382 			skb_shinfo(skb)->nr_frags++;
2383 		} else {
2384 			put_page(page_info->page);
2385 		}
2386 
2387 		skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
2388 		skb->len += curr_frag_len;
2389 		skb->data_len += curr_frag_len;
2390 		skb->truesize += rx_frag_size;
2391 		remaining -= curr_frag_len;
2392 		page_info->page = NULL;
2393 	}
2394 	BUG_ON(j > MAX_SKB_FRAGS);
2395 }
2396 
2397 /* Process the RX completion indicated by rxcp when GRO is disabled */
2398 static void be_rx_compl_process(struct be_rx_obj *rxo, struct napi_struct *napi,
2399 				struct be_rx_compl_info *rxcp)
2400 {
2401 	struct be_adapter *adapter = rxo->adapter;
2402 	struct net_device *netdev = adapter->netdev;
2403 	struct sk_buff *skb;
2404 
2405 	skb = netdev_alloc_skb_ip_align(netdev, BE_RX_SKB_ALLOC_SIZE);
2406 	if (unlikely(!skb)) {
2407 		rx_stats(rxo)->rx_drops_no_skbs++;
2408 		be_rx_compl_discard(rxo, rxcp);
2409 		return;
2410 	}
2411 
2412 	skb_fill_rx_data(rxo, skb, rxcp);
2413 
2414 	if (likely((netdev->features & NETIF_F_RXCSUM) && csum_passed(rxcp)))
2415 		skb->ip_summed = CHECKSUM_UNNECESSARY;
2416 	else
2417 		skb_checksum_none_assert(skb);
2418 
2419 	skb->protocol = eth_type_trans(skb, netdev);
2420 	skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
2421 	if (netdev->features & NETIF_F_RXHASH)
2422 		skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
2423 
2424 	skb->csum_level = rxcp->tunneled;
2425 	skb_mark_napi_id(skb, napi);
2426 
2427 	if (rxcp->vlanf)
2428 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
2429 
2430 	netif_receive_skb(skb);
2431 }
2432 
2433 /* Process the RX completion indicated by rxcp when GRO is enabled */
2434 static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
2435 				    struct napi_struct *napi,
2436 				    struct be_rx_compl_info *rxcp)
2437 {
2438 	struct be_adapter *adapter = rxo->adapter;
2439 	struct be_rx_page_info *page_info;
2440 	struct sk_buff *skb = NULL;
2441 	u16 remaining, curr_frag_len;
2442 	u16 i, j;
2443 
2444 	skb = napi_get_frags(napi);
2445 	if (!skb) {
2446 		be_rx_compl_discard(rxo, rxcp);
2447 		return;
2448 	}
2449 
2450 	remaining = rxcp->pkt_size;
2451 	for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
2452 		page_info = get_rx_page_info(rxo);
2453 
2454 		curr_frag_len = min(remaining, rx_frag_size);
2455 
2456 		/* Coalesce all frags from the same physical page in one slot */
2457 		if (i == 0 || page_info->page_offset == 0) {
2458 			/* First frag or Fresh page */
2459 			j++;
2460 			skb_frag_set_page(skb, j, page_info->page);
2461 			skb_shinfo(skb)->frags[j].page_offset =
2462 							page_info->page_offset;
2463 			skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
2464 		} else {
2465 			put_page(page_info->page);
2466 		}
2467 		skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
2468 		skb->truesize += rx_frag_size;
2469 		remaining -= curr_frag_len;
2470 		memset(page_info, 0, sizeof(*page_info));
2471 	}
2472 	BUG_ON(j > MAX_SKB_FRAGS);
2473 
2474 	skb_shinfo(skb)->nr_frags = j + 1;
2475 	skb->len = rxcp->pkt_size;
2476 	skb->data_len = rxcp->pkt_size;
2477 	skb->ip_summed = CHECKSUM_UNNECESSARY;
2478 	skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
2479 	if (adapter->netdev->features & NETIF_F_RXHASH)
2480 		skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
2481 
2482 	skb->csum_level = rxcp->tunneled;
2483 
2484 	if (rxcp->vlanf)
2485 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
2486 
2487 	napi_gro_frags(napi);
2488 }
2489 
2490 static void be_parse_rx_compl_v1(struct be_eth_rx_compl *compl,
2491 				 struct be_rx_compl_info *rxcp)
2492 {
2493 	rxcp->pkt_size = GET_RX_COMPL_V1_BITS(pktsize, compl);
2494 	rxcp->vlanf = GET_RX_COMPL_V1_BITS(vtp, compl);
2495 	rxcp->err = GET_RX_COMPL_V1_BITS(err, compl);
2496 	rxcp->tcpf = GET_RX_COMPL_V1_BITS(tcpf, compl);
2497 	rxcp->udpf = GET_RX_COMPL_V1_BITS(udpf, compl);
2498 	rxcp->ip_csum = GET_RX_COMPL_V1_BITS(ipcksm, compl);
2499 	rxcp->l4_csum = GET_RX_COMPL_V1_BITS(l4_cksm, compl);
2500 	rxcp->ipv6 = GET_RX_COMPL_V1_BITS(ip_version, compl);
2501 	rxcp->num_rcvd = GET_RX_COMPL_V1_BITS(numfrags, compl);
2502 	rxcp->pkt_type = GET_RX_COMPL_V1_BITS(cast_enc, compl);
2503 	rxcp->rss_hash = GET_RX_COMPL_V1_BITS(rsshash, compl);
2504 	if (rxcp->vlanf) {
2505 		rxcp->qnq = GET_RX_COMPL_V1_BITS(qnq, compl);
2506 		rxcp->vlan_tag = GET_RX_COMPL_V1_BITS(vlan_tag, compl);
2507 	}
2508 	rxcp->port = GET_RX_COMPL_V1_BITS(port, compl);
2509 	rxcp->tunneled =
2510 		GET_RX_COMPL_V1_BITS(tunneled, compl);
2511 }
2512 
2513 static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,
2514 				 struct be_rx_compl_info *rxcp)
2515 {
2516 	rxcp->pkt_size = GET_RX_COMPL_V0_BITS(pktsize, compl);
2517 	rxcp->vlanf = GET_RX_COMPL_V0_BITS(vtp, compl);
2518 	rxcp->err = GET_RX_COMPL_V0_BITS(err, compl);
2519 	rxcp->tcpf = GET_RX_COMPL_V0_BITS(tcpf, compl);
2520 	rxcp->udpf = GET_RX_COMPL_V0_BITS(udpf, compl);
2521 	rxcp->ip_csum = GET_RX_COMPL_V0_BITS(ipcksm, compl);
2522 	rxcp->l4_csum = GET_RX_COMPL_V0_BITS(l4_cksm, compl);
2523 	rxcp->ipv6 = GET_RX_COMPL_V0_BITS(ip_version, compl);
2524 	rxcp->num_rcvd = GET_RX_COMPL_V0_BITS(numfrags, compl);
2525 	rxcp->pkt_type = GET_RX_COMPL_V0_BITS(cast_enc, compl);
2526 	rxcp->rss_hash = GET_RX_COMPL_V0_BITS(rsshash, compl);
2527 	if (rxcp->vlanf) {
2528 		rxcp->qnq = GET_RX_COMPL_V0_BITS(qnq, compl);
2529 		rxcp->vlan_tag = GET_RX_COMPL_V0_BITS(vlan_tag, compl);
2530 	}
2531 	rxcp->port = GET_RX_COMPL_V0_BITS(port, compl);
2532 	rxcp->ip_frag = GET_RX_COMPL_V0_BITS(ip_frag, compl);
2533 }
2534 
2535 static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
2536 {
2537 	struct be_eth_rx_compl *compl = queue_tail_node(&rxo->cq);
2538 	struct be_rx_compl_info *rxcp = &rxo->rxcp;
2539 	struct be_adapter *adapter = rxo->adapter;
2540 
2541 	/* For checking the valid bit it is Ok to use either definition as the
2542 	 * valid bit is at the same position in both v0 and v1 Rx compl */
2543 	if (compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] == 0)
2544 		return NULL;
2545 
2546 	rmb();
2547 	be_dws_le_to_cpu(compl, sizeof(*compl));
2548 
2549 	if (adapter->be3_native)
2550 		be_parse_rx_compl_v1(compl, rxcp);
2551 	else
2552 		be_parse_rx_compl_v0(compl, rxcp);
2553 
2554 	if (rxcp->ip_frag)
2555 		rxcp->l4_csum = 0;
2556 
2557 	if (rxcp->vlanf) {
2558 		/* In QNQ modes, if qnq bit is not set, then the packet was
2559 		 * tagged only with the transparent outer vlan-tag and must
2560 		 * not be treated as a vlan packet by host
2561 		 */
2562 		if (be_is_qnq_mode(adapter) && !rxcp->qnq)
2563 			rxcp->vlanf = 0;
2564 
2565 		if (!lancer_chip(adapter))
2566 			rxcp->vlan_tag = swab16(rxcp->vlan_tag);
2567 
2568 		if (adapter->pvid == (rxcp->vlan_tag & VLAN_VID_MASK) &&
2569 		    !test_bit(rxcp->vlan_tag, adapter->vids))
2570 			rxcp->vlanf = 0;
2571 	}
2572 
2573 	/* As the compl has been parsed, reset it; we wont touch it again */
2574 	compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] = 0;
2575 
2576 	queue_tail_inc(&rxo->cq);
2577 	return rxcp;
2578 }
2579 
2580 static inline struct page *be_alloc_pages(u32 size, gfp_t gfp)
2581 {
2582 	u32 order = get_order(size);
2583 
2584 	if (order > 0)
2585 		gfp |= __GFP_COMP;
2586 	return  alloc_pages(gfp, order);
2587 }
2588 
2589 /*
2590  * Allocate a page, split it to fragments of size rx_frag_size and post as
2591  * receive buffers to BE
2592  */
2593 static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp, u32 frags_needed)
2594 {
2595 	struct be_adapter *adapter = rxo->adapter;
2596 	struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL;
2597 	struct be_queue_info *rxq = &rxo->q;
2598 	struct page *pagep = NULL;
2599 	struct device *dev = &adapter->pdev->dev;
2600 	struct be_eth_rx_d *rxd;
2601 	u64 page_dmaaddr = 0, frag_dmaaddr;
2602 	u32 posted, page_offset = 0, notify = 0;
2603 
2604 	page_info = &rxo->page_info_tbl[rxq->head];
2605 	for (posted = 0; posted < frags_needed && !page_info->page; posted++) {
2606 		if (!pagep) {
2607 			pagep = be_alloc_pages(adapter->big_page_size, gfp);
2608 			if (unlikely(!pagep)) {
2609 				rx_stats(rxo)->rx_post_fail++;
2610 				break;
2611 			}
2612 			page_dmaaddr = dma_map_page(dev, pagep, 0,
2613 						    adapter->big_page_size,
2614 						    DMA_FROM_DEVICE);
2615 			if (dma_mapping_error(dev, page_dmaaddr)) {
2616 				put_page(pagep);
2617 				pagep = NULL;
2618 				adapter->drv_stats.dma_map_errors++;
2619 				break;
2620 			}
2621 			page_offset = 0;
2622 		} else {
2623 			get_page(pagep);
2624 			page_offset += rx_frag_size;
2625 		}
2626 		page_info->page_offset = page_offset;
2627 		page_info->page = pagep;
2628 
2629 		rxd = queue_head_node(rxq);
2630 		frag_dmaaddr = page_dmaaddr + page_info->page_offset;
2631 		rxd->fragpa_lo = cpu_to_le32(frag_dmaaddr & 0xFFFFFFFF);
2632 		rxd->fragpa_hi = cpu_to_le32(upper_32_bits(frag_dmaaddr));
2633 
2634 		/* Any space left in the current big page for another frag? */
2635 		if ((page_offset + rx_frag_size + rx_frag_size) >
2636 					adapter->big_page_size) {
2637 			pagep = NULL;
2638 			page_info->last_frag = true;
2639 			dma_unmap_addr_set(page_info, bus, page_dmaaddr);
2640 		} else {
2641 			dma_unmap_addr_set(page_info, bus, frag_dmaaddr);
2642 		}
2643 
2644 		prev_page_info = page_info;
2645 		queue_head_inc(rxq);
2646 		page_info = &rxo->page_info_tbl[rxq->head];
2647 	}
2648 
2649 	/* Mark the last frag of a page when we break out of the above loop
2650 	 * with no more slots available in the RXQ
2651 	 */
2652 	if (pagep) {
2653 		prev_page_info->last_frag = true;
2654 		dma_unmap_addr_set(prev_page_info, bus, page_dmaaddr);
2655 	}
2656 
2657 	if (posted) {
2658 		atomic_add(posted, &rxq->used);
2659 		if (rxo->rx_post_starved)
2660 			rxo->rx_post_starved = false;
2661 		do {
2662 			notify = min(MAX_NUM_POST_ERX_DB, posted);
2663 			be_rxq_notify(adapter, rxq->id, notify);
2664 			posted -= notify;
2665 		} while (posted);
2666 	} else if (atomic_read(&rxq->used) == 0) {
2667 		/* Let be_worker replenish when memory is available */
2668 		rxo->rx_post_starved = true;
2669 	}
2670 }
2671 
2672 static inline void be_update_tx_err(struct be_tx_obj *txo, u8 status)
2673 {
2674 	switch (status) {
2675 	case BE_TX_COMP_HDR_PARSE_ERR:
2676 		tx_stats(txo)->tx_hdr_parse_err++;
2677 		break;
2678 	case BE_TX_COMP_NDMA_ERR:
2679 		tx_stats(txo)->tx_dma_err++;
2680 		break;
2681 	case BE_TX_COMP_ACL_ERR:
2682 		tx_stats(txo)->tx_spoof_check_err++;
2683 		break;
2684 	}
2685 }
2686 
2687 static inline void lancer_update_tx_err(struct be_tx_obj *txo, u8 status)
2688 {
2689 	switch (status) {
2690 	case LANCER_TX_COMP_LSO_ERR:
2691 		tx_stats(txo)->tx_tso_err++;
2692 		break;
2693 	case LANCER_TX_COMP_HSW_DROP_MAC_ERR:
2694 	case LANCER_TX_COMP_HSW_DROP_VLAN_ERR:
2695 		tx_stats(txo)->tx_spoof_check_err++;
2696 		break;
2697 	case LANCER_TX_COMP_QINQ_ERR:
2698 		tx_stats(txo)->tx_qinq_err++;
2699 		break;
2700 	case LANCER_TX_COMP_PARITY_ERR:
2701 		tx_stats(txo)->tx_internal_parity_err++;
2702 		break;
2703 	case LANCER_TX_COMP_DMA_ERR:
2704 		tx_stats(txo)->tx_dma_err++;
2705 		break;
2706 	case LANCER_TX_COMP_SGE_ERR:
2707 		tx_stats(txo)->tx_sge_err++;
2708 		break;
2709 	}
2710 }
2711 
2712 static struct be_tx_compl_info *be_tx_compl_get(struct be_adapter *adapter,
2713 						struct be_tx_obj *txo)
2714 {
2715 	struct be_queue_info *tx_cq = &txo->cq;
2716 	struct be_tx_compl_info *txcp = &txo->txcp;
2717 	struct be_eth_tx_compl *compl = queue_tail_node(tx_cq);
2718 
2719 	if (compl->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
2720 		return NULL;
2721 
2722 	/* Ensure load ordering of valid bit dword and other dwords below */
2723 	rmb();
2724 	be_dws_le_to_cpu(compl, sizeof(*compl));
2725 
2726 	txcp->status = GET_TX_COMPL_BITS(status, compl);
2727 	txcp->end_index = GET_TX_COMPL_BITS(wrb_index, compl);
2728 
2729 	if (txcp->status) {
2730 		if (lancer_chip(adapter)) {
2731 			lancer_update_tx_err(txo, txcp->status);
2732 			/* Reset the adapter incase of TSO,
2733 			 * SGE or Parity error
2734 			 */
2735 			if (txcp->status == LANCER_TX_COMP_LSO_ERR ||
2736 			    txcp->status == LANCER_TX_COMP_PARITY_ERR ||
2737 			    txcp->status == LANCER_TX_COMP_SGE_ERR)
2738 				be_set_error(adapter, BE_ERROR_TX);
2739 		} else {
2740 			be_update_tx_err(txo, txcp->status);
2741 		}
2742 	}
2743 
2744 	if (be_check_error(adapter, BE_ERROR_TX))
2745 		return NULL;
2746 
2747 	compl->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
2748 	queue_tail_inc(tx_cq);
2749 	return txcp;
2750 }
2751 
2752 static u16 be_tx_compl_process(struct be_adapter *adapter,
2753 			       struct be_tx_obj *txo, u16 last_index)
2754 {
2755 	struct sk_buff **sent_skbs = txo->sent_skb_list;
2756 	struct be_queue_info *txq = &txo->q;
2757 	struct sk_buff *skb = NULL;
2758 	bool unmap_skb_hdr = false;
2759 	struct be_eth_wrb *wrb;
2760 	u16 num_wrbs = 0;
2761 	u32 frag_index;
2762 
2763 	do {
2764 		if (sent_skbs[txq->tail]) {
2765 			/* Free skb from prev req */
2766 			if (skb)
2767 				dev_consume_skb_any(skb);
2768 			skb = sent_skbs[txq->tail];
2769 			sent_skbs[txq->tail] = NULL;
2770 			queue_tail_inc(txq);  /* skip hdr wrb */
2771 			num_wrbs++;
2772 			unmap_skb_hdr = true;
2773 		}
2774 		wrb = queue_tail_node(txq);
2775 		frag_index = txq->tail;
2776 		unmap_tx_frag(&adapter->pdev->dev, wrb,
2777 			      (unmap_skb_hdr && skb_headlen(skb)));
2778 		unmap_skb_hdr = false;
2779 		queue_tail_inc(txq);
2780 		num_wrbs++;
2781 	} while (frag_index != last_index);
2782 	dev_consume_skb_any(skb);
2783 
2784 	return num_wrbs;
2785 }
2786 
2787 /* Return the number of events in the event queue */
2788 static inline int events_get(struct be_eq_obj *eqo)
2789 {
2790 	struct be_eq_entry *eqe;
2791 	int num = 0;
2792 
2793 	do {
2794 		eqe = queue_tail_node(&eqo->q);
2795 		if (eqe->evt == 0)
2796 			break;
2797 
2798 		rmb();
2799 		eqe->evt = 0;
2800 		num++;
2801 		queue_tail_inc(&eqo->q);
2802 	} while (true);
2803 
2804 	return num;
2805 }
2806 
2807 /* Leaves the EQ is disarmed state */
2808 static void be_eq_clean(struct be_eq_obj *eqo)
2809 {
2810 	int num = events_get(eqo);
2811 
2812 	be_eq_notify(eqo->adapter, eqo->q.id, false, true, num, 0);
2813 }
2814 
2815 /* Free posted rx buffers that were not used */
2816 static void be_rxq_clean(struct be_rx_obj *rxo)
2817 {
2818 	struct be_queue_info *rxq = &rxo->q;
2819 	struct be_rx_page_info *page_info;
2820 
2821 	while (atomic_read(&rxq->used) > 0) {
2822 		page_info = get_rx_page_info(rxo);
2823 		put_page(page_info->page);
2824 		memset(page_info, 0, sizeof(*page_info));
2825 	}
2826 	BUG_ON(atomic_read(&rxq->used));
2827 	rxq->tail = 0;
2828 	rxq->head = 0;
2829 }
2830 
2831 static void be_rx_cq_clean(struct be_rx_obj *rxo)
2832 {
2833 	struct be_queue_info *rx_cq = &rxo->cq;
2834 	struct be_rx_compl_info *rxcp;
2835 	struct be_adapter *adapter = rxo->adapter;
2836 	int flush_wait = 0;
2837 
2838 	/* Consume pending rx completions.
2839 	 * Wait for the flush completion (identified by zero num_rcvd)
2840 	 * to arrive. Notify CQ even when there are no more CQ entries
2841 	 * for HW to flush partially coalesced CQ entries.
2842 	 * In Lancer, there is no need to wait for flush compl.
2843 	 */
2844 	for (;;) {
2845 		rxcp = be_rx_compl_get(rxo);
2846 		if (!rxcp) {
2847 			if (lancer_chip(adapter))
2848 				break;
2849 
2850 			if (flush_wait++ > 50 ||
2851 			    be_check_error(adapter,
2852 					   BE_ERROR_HW)) {
2853 				dev_warn(&adapter->pdev->dev,
2854 					 "did not receive flush compl\n");
2855 				break;
2856 			}
2857 			be_cq_notify(adapter, rx_cq->id, true, 0);
2858 			mdelay(1);
2859 		} else {
2860 			be_rx_compl_discard(rxo, rxcp);
2861 			be_cq_notify(adapter, rx_cq->id, false, 1);
2862 			if (rxcp->num_rcvd == 0)
2863 				break;
2864 		}
2865 	}
2866 
2867 	/* After cleanup, leave the CQ in unarmed state */
2868 	be_cq_notify(adapter, rx_cq->id, false, 0);
2869 }
2870 
2871 static void be_tx_compl_clean(struct be_adapter *adapter)
2872 {
2873 	struct device *dev = &adapter->pdev->dev;
2874 	u16 cmpl = 0, timeo = 0, num_wrbs = 0;
2875 	struct be_tx_compl_info *txcp;
2876 	struct be_queue_info *txq;
2877 	u32 end_idx, notified_idx;
2878 	struct be_tx_obj *txo;
2879 	int i, pending_txqs;
2880 
2881 	/* Stop polling for compls when HW has been silent for 10ms */
2882 	do {
2883 		pending_txqs = adapter->num_tx_qs;
2884 
2885 		for_all_tx_queues(adapter, txo, i) {
2886 			cmpl = 0;
2887 			num_wrbs = 0;
2888 			txq = &txo->q;
2889 			while ((txcp = be_tx_compl_get(adapter, txo))) {
2890 				num_wrbs +=
2891 					be_tx_compl_process(adapter, txo,
2892 							    txcp->end_index);
2893 				cmpl++;
2894 			}
2895 			if (cmpl) {
2896 				be_cq_notify(adapter, txo->cq.id, false, cmpl);
2897 				atomic_sub(num_wrbs, &txq->used);
2898 				timeo = 0;
2899 			}
2900 			if (!be_is_tx_compl_pending(txo))
2901 				pending_txqs--;
2902 		}
2903 
2904 		if (pending_txqs == 0 || ++timeo > 10 ||
2905 		    be_check_error(adapter, BE_ERROR_HW))
2906 			break;
2907 
2908 		mdelay(1);
2909 	} while (true);
2910 
2911 	/* Free enqueued TX that was never notified to HW */
2912 	for_all_tx_queues(adapter, txo, i) {
2913 		txq = &txo->q;
2914 
2915 		if (atomic_read(&txq->used)) {
2916 			dev_info(dev, "txq%d: cleaning %d pending tx-wrbs\n",
2917 				 i, atomic_read(&txq->used));
2918 			notified_idx = txq->tail;
2919 			end_idx = txq->tail;
2920 			index_adv(&end_idx, atomic_read(&txq->used) - 1,
2921 				  txq->len);
2922 			/* Use the tx-compl process logic to handle requests
2923 			 * that were not sent to the HW.
2924 			 */
2925 			num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
2926 			atomic_sub(num_wrbs, &txq->used);
2927 			BUG_ON(atomic_read(&txq->used));
2928 			txo->pend_wrb_cnt = 0;
2929 			/* Since hw was never notified of these requests,
2930 			 * reset TXQ indices
2931 			 */
2932 			txq->head = notified_idx;
2933 			txq->tail = notified_idx;
2934 		}
2935 	}
2936 }
2937 
2938 static void be_evt_queues_destroy(struct be_adapter *adapter)
2939 {
2940 	struct be_eq_obj *eqo;
2941 	int i;
2942 
2943 	for_all_evt_queues(adapter, eqo, i) {
2944 		if (eqo->q.created) {
2945 			be_eq_clean(eqo);
2946 			be_cmd_q_destroy(adapter, &eqo->q, QTYPE_EQ);
2947 			netif_napi_del(&eqo->napi);
2948 			free_cpumask_var(eqo->affinity_mask);
2949 		}
2950 		be_queue_free(adapter, &eqo->q);
2951 	}
2952 }
2953 
2954 static int be_evt_queues_create(struct be_adapter *adapter)
2955 {
2956 	struct be_queue_info *eq;
2957 	struct be_eq_obj *eqo;
2958 	struct be_aic_obj *aic;
2959 	int i, rc;
2960 
2961 	/* need enough EQs to service both RX and TX queues */
2962 	adapter->num_evt_qs = min_t(u16, num_irqs(adapter),
2963 				    max(adapter->cfg_num_rx_irqs,
2964 					adapter->cfg_num_tx_irqs));
2965 
2966 	for_all_evt_queues(adapter, eqo, i) {
2967 		int numa_node = dev_to_node(&adapter->pdev->dev);
2968 
2969 		aic = &adapter->aic_obj[i];
2970 		eqo->adapter = adapter;
2971 		eqo->idx = i;
2972 		aic->max_eqd = BE_MAX_EQD;
2973 		aic->enable = true;
2974 
2975 		eq = &eqo->q;
2976 		rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
2977 				    sizeof(struct be_eq_entry));
2978 		if (rc)
2979 			return rc;
2980 
2981 		rc = be_cmd_eq_create(adapter, eqo);
2982 		if (rc)
2983 			return rc;
2984 
2985 		if (!zalloc_cpumask_var(&eqo->affinity_mask, GFP_KERNEL))
2986 			return -ENOMEM;
2987 		cpumask_set_cpu(cpumask_local_spread(i, numa_node),
2988 				eqo->affinity_mask);
2989 		netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
2990 			       BE_NAPI_WEIGHT);
2991 	}
2992 	return 0;
2993 }
2994 
2995 static void be_mcc_queues_destroy(struct be_adapter *adapter)
2996 {
2997 	struct be_queue_info *q;
2998 
2999 	q = &adapter->mcc_obj.q;
3000 	if (q->created)
3001 		be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
3002 	be_queue_free(adapter, q);
3003 
3004 	q = &adapter->mcc_obj.cq;
3005 	if (q->created)
3006 		be_cmd_q_destroy(adapter, q, QTYPE_CQ);
3007 	be_queue_free(adapter, q);
3008 }
3009 
3010 /* Must be called only after TX qs are created as MCC shares TX EQ */
3011 static int be_mcc_queues_create(struct be_adapter *adapter)
3012 {
3013 	struct be_queue_info *q, *cq;
3014 
3015 	cq = &adapter->mcc_obj.cq;
3016 	if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
3017 			   sizeof(struct be_mcc_compl)))
3018 		goto err;
3019 
3020 	/* Use the default EQ for MCC completions */
3021 	if (be_cmd_cq_create(adapter, cq, &mcc_eqo(adapter)->q, true, 0))
3022 		goto mcc_cq_free;
3023 
3024 	q = &adapter->mcc_obj.q;
3025 	if (be_queue_alloc(adapter, q, MCC_Q_LEN, sizeof(struct be_mcc_wrb)))
3026 		goto mcc_cq_destroy;
3027 
3028 	if (be_cmd_mccq_create(adapter, q, cq))
3029 		goto mcc_q_free;
3030 
3031 	return 0;
3032 
3033 mcc_q_free:
3034 	be_queue_free(adapter, q);
3035 mcc_cq_destroy:
3036 	be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
3037 mcc_cq_free:
3038 	be_queue_free(adapter, cq);
3039 err:
3040 	return -1;
3041 }
3042 
3043 static void be_tx_queues_destroy(struct be_adapter *adapter)
3044 {
3045 	struct be_queue_info *q;
3046 	struct be_tx_obj *txo;
3047 	u8 i;
3048 
3049 	for_all_tx_queues(adapter, txo, i) {
3050 		q = &txo->q;
3051 		if (q->created)
3052 			be_cmd_q_destroy(adapter, q, QTYPE_TXQ);
3053 		be_queue_free(adapter, q);
3054 
3055 		q = &txo->cq;
3056 		if (q->created)
3057 			be_cmd_q_destroy(adapter, q, QTYPE_CQ);
3058 		be_queue_free(adapter, q);
3059 	}
3060 }
3061 
3062 static int be_tx_qs_create(struct be_adapter *adapter)
3063 {
3064 	struct be_queue_info *cq;
3065 	struct be_tx_obj *txo;
3066 	struct be_eq_obj *eqo;
3067 	int status, i;
3068 
3069 	adapter->num_tx_qs = min(adapter->num_evt_qs, adapter->cfg_num_tx_irqs);
3070 
3071 	for_all_tx_queues(adapter, txo, i) {
3072 		cq = &txo->cq;
3073 		status = be_queue_alloc(adapter, cq, TX_CQ_LEN,
3074 					sizeof(struct be_eth_tx_compl));
3075 		if (status)
3076 			return status;
3077 
3078 		u64_stats_init(&txo->stats.sync);
3079 		u64_stats_init(&txo->stats.sync_compl);
3080 
3081 		/* If num_evt_qs is less than num_tx_qs, then more than
3082 		 * one txq share an eq
3083 		 */
3084 		eqo = &adapter->eq_obj[i % adapter->num_evt_qs];
3085 		status = be_cmd_cq_create(adapter, cq, &eqo->q, false, 3);
3086 		if (status)
3087 			return status;
3088 
3089 		status = be_queue_alloc(adapter, &txo->q, TX_Q_LEN,
3090 					sizeof(struct be_eth_wrb));
3091 		if (status)
3092 			return status;
3093 
3094 		status = be_cmd_txq_create(adapter, txo);
3095 		if (status)
3096 			return status;
3097 
3098 		netif_set_xps_queue(adapter->netdev, eqo->affinity_mask,
3099 				    eqo->idx);
3100 	}
3101 
3102 	dev_info(&adapter->pdev->dev, "created %d TX queue(s)\n",
3103 		 adapter->num_tx_qs);
3104 	return 0;
3105 }
3106 
3107 static void be_rx_cqs_destroy(struct be_adapter *adapter)
3108 {
3109 	struct be_queue_info *q;
3110 	struct be_rx_obj *rxo;
3111 	int i;
3112 
3113 	for_all_rx_queues(adapter, rxo, i) {
3114 		q = &rxo->cq;
3115 		if (q->created)
3116 			be_cmd_q_destroy(adapter, q, QTYPE_CQ);
3117 		be_queue_free(adapter, q);
3118 	}
3119 }
3120 
3121 static int be_rx_cqs_create(struct be_adapter *adapter)
3122 {
3123 	struct be_queue_info *eq, *cq;
3124 	struct be_rx_obj *rxo;
3125 	int rc, i;
3126 
3127 	adapter->num_rss_qs =
3128 			min(adapter->num_evt_qs, adapter->cfg_num_rx_irqs);
3129 
3130 	/* We'll use RSS only if atleast 2 RSS rings are supported. */
3131 	if (adapter->num_rss_qs < 2)
3132 		adapter->num_rss_qs = 0;
3133 
3134 	adapter->num_rx_qs = adapter->num_rss_qs + adapter->need_def_rxq;
3135 
3136 	/* When the interface is not capable of RSS rings (and there is no
3137 	 * need to create a default RXQ) we'll still need one RXQ
3138 	 */
3139 	if (adapter->num_rx_qs == 0)
3140 		adapter->num_rx_qs = 1;
3141 
3142 	adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
3143 	for_all_rx_queues(adapter, rxo, i) {
3144 		rxo->adapter = adapter;
3145 		cq = &rxo->cq;
3146 		rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
3147 				    sizeof(struct be_eth_rx_compl));
3148 		if (rc)
3149 			return rc;
3150 
3151 		u64_stats_init(&rxo->stats.sync);
3152 		eq = &adapter->eq_obj[i % adapter->num_evt_qs].q;
3153 		rc = be_cmd_cq_create(adapter, cq, eq, false, 3);
3154 		if (rc)
3155 			return rc;
3156 	}
3157 
3158 	dev_info(&adapter->pdev->dev,
3159 		 "created %d RX queue(s)\n", adapter->num_rx_qs);
3160 	return 0;
3161 }
3162 
3163 static irqreturn_t be_intx(int irq, void *dev)
3164 {
3165 	struct be_eq_obj *eqo = dev;
3166 	struct be_adapter *adapter = eqo->adapter;
3167 	int num_evts = 0;
3168 
3169 	/* IRQ is not expected when NAPI is scheduled as the EQ
3170 	 * will not be armed.
3171 	 * But, this can happen on Lancer INTx where it takes
3172 	 * a while to de-assert INTx or in BE2 where occasionaly
3173 	 * an interrupt may be raised even when EQ is unarmed.
3174 	 * If NAPI is already scheduled, then counting & notifying
3175 	 * events will orphan them.
3176 	 */
3177 	if (napi_schedule_prep(&eqo->napi)) {
3178 		num_evts = events_get(eqo);
3179 		__napi_schedule(&eqo->napi);
3180 		if (num_evts)
3181 			eqo->spurious_intr = 0;
3182 	}
3183 	be_eq_notify(adapter, eqo->q.id, false, true, num_evts, 0);
3184 
3185 	/* Return IRQ_HANDLED only for the the first spurious intr
3186 	 * after a valid intr to stop the kernel from branding
3187 	 * this irq as a bad one!
3188 	 */
3189 	if (num_evts || eqo->spurious_intr++ == 0)
3190 		return IRQ_HANDLED;
3191 	else
3192 		return IRQ_NONE;
3193 }
3194 
3195 static irqreturn_t be_msix(int irq, void *dev)
3196 {
3197 	struct be_eq_obj *eqo = dev;
3198 
3199 	be_eq_notify(eqo->adapter, eqo->q.id, false, true, 0, 0);
3200 	napi_schedule(&eqo->napi);
3201 	return IRQ_HANDLED;
3202 }
3203 
3204 static inline bool do_gro(struct be_rx_compl_info *rxcp)
3205 {
3206 	return (rxcp->tcpf && !rxcp->err && rxcp->l4_csum) ? true : false;
3207 }
3208 
3209 static int be_process_rx(struct be_rx_obj *rxo, struct napi_struct *napi,
3210 			 int budget)
3211 {
3212 	struct be_adapter *adapter = rxo->adapter;
3213 	struct be_queue_info *rx_cq = &rxo->cq;
3214 	struct be_rx_compl_info *rxcp;
3215 	u32 work_done;
3216 	u32 frags_consumed = 0;
3217 
3218 	for (work_done = 0; work_done < budget; work_done++) {
3219 		rxcp = be_rx_compl_get(rxo);
3220 		if (!rxcp)
3221 			break;
3222 
3223 		/* Is it a flush compl that has no data */
3224 		if (unlikely(rxcp->num_rcvd == 0))
3225 			goto loop_continue;
3226 
3227 		/* Discard compl with partial DMA Lancer B0 */
3228 		if (unlikely(!rxcp->pkt_size)) {
3229 			be_rx_compl_discard(rxo, rxcp);
3230 			goto loop_continue;
3231 		}
3232 
3233 		/* On BE drop pkts that arrive due to imperfect filtering in
3234 		 * promiscuous mode on some skews
3235 		 */
3236 		if (unlikely(rxcp->port != adapter->port_num &&
3237 			     !lancer_chip(adapter))) {
3238 			be_rx_compl_discard(rxo, rxcp);
3239 			goto loop_continue;
3240 		}
3241 
3242 		if (do_gro(rxcp))
3243 			be_rx_compl_process_gro(rxo, napi, rxcp);
3244 		else
3245 			be_rx_compl_process(rxo, napi, rxcp);
3246 
3247 loop_continue:
3248 		frags_consumed += rxcp->num_rcvd;
3249 		be_rx_stats_update(rxo, rxcp);
3250 	}
3251 
3252 	if (work_done) {
3253 		be_cq_notify(adapter, rx_cq->id, true, work_done);
3254 
3255 		/* When an rx-obj gets into post_starved state, just
3256 		 * let be_worker do the posting.
3257 		 */
3258 		if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM &&
3259 		    !rxo->rx_post_starved)
3260 			be_post_rx_frags(rxo, GFP_ATOMIC,
3261 					 max_t(u32, MAX_RX_POST,
3262 					       frags_consumed));
3263 	}
3264 
3265 	return work_done;
3266 }
3267 
3268 
3269 static void be_process_tx(struct be_adapter *adapter, struct be_tx_obj *txo,
3270 			  int idx)
3271 {
3272 	int num_wrbs = 0, work_done = 0;
3273 	struct be_tx_compl_info *txcp;
3274 
3275 	while ((txcp = be_tx_compl_get(adapter, txo))) {
3276 		num_wrbs += be_tx_compl_process(adapter, txo, txcp->end_index);
3277 		work_done++;
3278 	}
3279 
3280 	if (work_done) {
3281 		be_cq_notify(adapter, txo->cq.id, true, work_done);
3282 		atomic_sub(num_wrbs, &txo->q.used);
3283 
3284 		/* As Tx wrbs have been freed up, wake up netdev queue
3285 		 * if it was stopped due to lack of tx wrbs.  */
3286 		if (__netif_subqueue_stopped(adapter->netdev, idx) &&
3287 		    be_can_txq_wake(txo)) {
3288 			netif_wake_subqueue(adapter->netdev, idx);
3289 		}
3290 
3291 		u64_stats_update_begin(&tx_stats(txo)->sync_compl);
3292 		tx_stats(txo)->tx_compl += work_done;
3293 		u64_stats_update_end(&tx_stats(txo)->sync_compl);
3294 	}
3295 }
3296 
3297 int be_poll(struct napi_struct *napi, int budget)
3298 {
3299 	struct be_eq_obj *eqo = container_of(napi, struct be_eq_obj, napi);
3300 	struct be_adapter *adapter = eqo->adapter;
3301 	int max_work = 0, work, i, num_evts;
3302 	struct be_rx_obj *rxo;
3303 	struct be_tx_obj *txo;
3304 	u32 mult_enc = 0;
3305 
3306 	num_evts = events_get(eqo);
3307 
3308 	for_all_tx_queues_on_eq(adapter, eqo, txo, i)
3309 		be_process_tx(adapter, txo, i);
3310 
3311 	/* This loop will iterate twice for EQ0 in which
3312 	 * completions of the last RXQ (default one) are also processed
3313 	 * For other EQs the loop iterates only once
3314 	 */
3315 	for_all_rx_queues_on_eq(adapter, eqo, rxo, i) {
3316 		work = be_process_rx(rxo, napi, budget);
3317 		max_work = max(work, max_work);
3318 	}
3319 
3320 	if (is_mcc_eqo(eqo))
3321 		be_process_mcc(adapter);
3322 
3323 	if (max_work < budget) {
3324 		napi_complete_done(napi, max_work);
3325 
3326 		/* Skyhawk EQ_DB has a provision to set the rearm to interrupt
3327 		 * delay via a delay multiplier encoding value
3328 		 */
3329 		if (skyhawk_chip(adapter))
3330 			mult_enc = be_get_eq_delay_mult_enc(eqo);
3331 
3332 		be_eq_notify(adapter, eqo->q.id, true, false, num_evts,
3333 			     mult_enc);
3334 	} else {
3335 		/* As we'll continue in polling mode, count and clear events */
3336 		be_eq_notify(adapter, eqo->q.id, false, false, num_evts, 0);
3337 	}
3338 	return max_work;
3339 }
3340 
3341 void be_detect_error(struct be_adapter *adapter)
3342 {
3343 	u32 ue_lo = 0, ue_hi = 0, ue_lo_mask = 0, ue_hi_mask = 0;
3344 	u32 sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0;
3345 	struct device *dev = &adapter->pdev->dev;
3346 	u16 val;
3347 	u32 i;
3348 
3349 	if (be_check_error(adapter, BE_ERROR_HW))
3350 		return;
3351 
3352 	if (lancer_chip(adapter)) {
3353 		sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3354 		if (sliport_status & SLIPORT_STATUS_ERR_MASK) {
3355 			be_set_error(adapter, BE_ERROR_UE);
3356 			sliport_err1 = ioread32(adapter->db +
3357 						SLIPORT_ERROR1_OFFSET);
3358 			sliport_err2 = ioread32(adapter->db +
3359 						SLIPORT_ERROR2_OFFSET);
3360 			/* Do not log error messages if its a FW reset */
3361 			if (sliport_err1 == SLIPORT_ERROR_FW_RESET1 &&
3362 			    sliport_err2 == SLIPORT_ERROR_FW_RESET2) {
3363 				dev_info(dev, "Reset is in progress\n");
3364 			} else {
3365 				dev_err(dev, "Error detected in the card\n");
3366 				dev_err(dev, "ERR: sliport status 0x%x\n",
3367 					sliport_status);
3368 				dev_err(dev, "ERR: sliport error1 0x%x\n",
3369 					sliport_err1);
3370 				dev_err(dev, "ERR: sliport error2 0x%x\n",
3371 					sliport_err2);
3372 			}
3373 		}
3374 	} else {
3375 		ue_lo = ioread32(adapter->pcicfg + PCICFG_UE_STATUS_LOW);
3376 		ue_hi = ioread32(adapter->pcicfg + PCICFG_UE_STATUS_HIGH);
3377 		ue_lo_mask = ioread32(adapter->pcicfg +
3378 				      PCICFG_UE_STATUS_LOW_MASK);
3379 		ue_hi_mask = ioread32(adapter->pcicfg +
3380 				      PCICFG_UE_STATUS_HI_MASK);
3381 
3382 		ue_lo = (ue_lo & ~ue_lo_mask);
3383 		ue_hi = (ue_hi & ~ue_hi_mask);
3384 
3385 		if (ue_lo || ue_hi) {
3386 			/* On certain platforms BE3 hardware can indicate
3387 			 * spurious UEs. In case of a UE in the chip,
3388 			 * the POST register correctly reports either a
3389 			 * FAT_LOG_START state (FW is currently dumping
3390 			 * FAT log data) or a ARMFW_UE state. Check for the
3391 			 * above states to ascertain if the UE is valid or not.
3392 			 */
3393 			if (BE3_chip(adapter)) {
3394 				val = be_POST_stage_get(adapter);
3395 				if ((val & POST_STAGE_FAT_LOG_START)
3396 				     != POST_STAGE_FAT_LOG_START &&
3397 				    (val & POST_STAGE_ARMFW_UE)
3398 				     != POST_STAGE_ARMFW_UE &&
3399 				    (val & POST_STAGE_RECOVERABLE_ERR)
3400 				     != POST_STAGE_RECOVERABLE_ERR)
3401 					return;
3402 			}
3403 
3404 			dev_err(dev, "Error detected in the adapter");
3405 			be_set_error(adapter, BE_ERROR_UE);
3406 
3407 			for (i = 0; ue_lo; ue_lo >>= 1, i++) {
3408 				if (ue_lo & 1)
3409 					dev_err(dev, "UE: %s bit set\n",
3410 						ue_status_low_desc[i]);
3411 			}
3412 			for (i = 0; ue_hi; ue_hi >>= 1, i++) {
3413 				if (ue_hi & 1)
3414 					dev_err(dev, "UE: %s bit set\n",
3415 						ue_status_hi_desc[i]);
3416 			}
3417 		}
3418 	}
3419 }
3420 
3421 static void be_msix_disable(struct be_adapter *adapter)
3422 {
3423 	if (msix_enabled(adapter)) {
3424 		pci_disable_msix(adapter->pdev);
3425 		adapter->num_msix_vec = 0;
3426 		adapter->num_msix_roce_vec = 0;
3427 	}
3428 }
3429 
3430 static int be_msix_enable(struct be_adapter *adapter)
3431 {
3432 	unsigned int i, max_roce_eqs;
3433 	struct device *dev = &adapter->pdev->dev;
3434 	int num_vec;
3435 
3436 	/* If RoCE is supported, program the max number of vectors that
3437 	 * could be used for NIC and RoCE, else, just program the number
3438 	 * we'll use initially.
3439 	 */
3440 	if (be_roce_supported(adapter)) {
3441 		max_roce_eqs =
3442 			be_max_func_eqs(adapter) - be_max_nic_eqs(adapter);
3443 		max_roce_eqs = min(max_roce_eqs, num_online_cpus());
3444 		num_vec = be_max_any_irqs(adapter) + max_roce_eqs;
3445 	} else {
3446 		num_vec = max(adapter->cfg_num_rx_irqs,
3447 			      adapter->cfg_num_tx_irqs);
3448 	}
3449 
3450 	for (i = 0; i < num_vec; i++)
3451 		adapter->msix_entries[i].entry = i;
3452 
3453 	num_vec = pci_enable_msix_range(adapter->pdev, adapter->msix_entries,
3454 					MIN_MSIX_VECTORS, num_vec);
3455 	if (num_vec < 0)
3456 		goto fail;
3457 
3458 	if (be_roce_supported(adapter) && num_vec > MIN_MSIX_VECTORS) {
3459 		adapter->num_msix_roce_vec = num_vec / 2;
3460 		dev_info(dev, "enabled %d MSI-x vector(s) for RoCE\n",
3461 			 adapter->num_msix_roce_vec);
3462 	}
3463 
3464 	adapter->num_msix_vec = num_vec - adapter->num_msix_roce_vec;
3465 
3466 	dev_info(dev, "enabled %d MSI-x vector(s) for NIC\n",
3467 		 adapter->num_msix_vec);
3468 	return 0;
3469 
3470 fail:
3471 	dev_warn(dev, "MSIx enable failed\n");
3472 
3473 	/* INTx is not supported in VFs, so fail probe if enable_msix fails */
3474 	if (be_virtfn(adapter))
3475 		return num_vec;
3476 	return 0;
3477 }
3478 
3479 static inline int be_msix_vec_get(struct be_adapter *adapter,
3480 				  struct be_eq_obj *eqo)
3481 {
3482 	return adapter->msix_entries[eqo->msix_idx].vector;
3483 }
3484 
3485 static int be_msix_register(struct be_adapter *adapter)
3486 {
3487 	struct net_device *netdev = adapter->netdev;
3488 	struct be_eq_obj *eqo;
3489 	int status, i, vec;
3490 
3491 	for_all_evt_queues(adapter, eqo, i) {
3492 		sprintf(eqo->desc, "%s-q%d", netdev->name, i);
3493 		vec = be_msix_vec_get(adapter, eqo);
3494 		status = request_irq(vec, be_msix, 0, eqo->desc, eqo);
3495 		if (status)
3496 			goto err_msix;
3497 
3498 		irq_set_affinity_hint(vec, eqo->affinity_mask);
3499 	}
3500 
3501 	return 0;
3502 err_msix:
3503 	for (i--; i >= 0; i--) {
3504 		eqo = &adapter->eq_obj[i];
3505 		free_irq(be_msix_vec_get(adapter, eqo), eqo);
3506 	}
3507 	dev_warn(&adapter->pdev->dev, "MSIX Request IRQ failed - err %d\n",
3508 		 status);
3509 	be_msix_disable(adapter);
3510 	return status;
3511 }
3512 
3513 static int be_irq_register(struct be_adapter *adapter)
3514 {
3515 	struct net_device *netdev = adapter->netdev;
3516 	int status;
3517 
3518 	if (msix_enabled(adapter)) {
3519 		status = be_msix_register(adapter);
3520 		if (status == 0)
3521 			goto done;
3522 		/* INTx is not supported for VF */
3523 		if (be_virtfn(adapter))
3524 			return status;
3525 	}
3526 
3527 	/* INTx: only the first EQ is used */
3528 	netdev->irq = adapter->pdev->irq;
3529 	status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
3530 			     &adapter->eq_obj[0]);
3531 	if (status) {
3532 		dev_err(&adapter->pdev->dev,
3533 			"INTx request IRQ failed - err %d\n", status);
3534 		return status;
3535 	}
3536 done:
3537 	adapter->isr_registered = true;
3538 	return 0;
3539 }
3540 
3541 static void be_irq_unregister(struct be_adapter *adapter)
3542 {
3543 	struct net_device *netdev = adapter->netdev;
3544 	struct be_eq_obj *eqo;
3545 	int i, vec;
3546 
3547 	if (!adapter->isr_registered)
3548 		return;
3549 
3550 	/* INTx */
3551 	if (!msix_enabled(adapter)) {
3552 		free_irq(netdev->irq, &adapter->eq_obj[0]);
3553 		goto done;
3554 	}
3555 
3556 	/* MSIx */
3557 	for_all_evt_queues(adapter, eqo, i) {
3558 		vec = be_msix_vec_get(adapter, eqo);
3559 		irq_set_affinity_hint(vec, NULL);
3560 		free_irq(vec, eqo);
3561 	}
3562 
3563 done:
3564 	adapter->isr_registered = false;
3565 }
3566 
3567 static void be_rx_qs_destroy(struct be_adapter *adapter)
3568 {
3569 	struct rss_info *rss = &adapter->rss_info;
3570 	struct be_queue_info *q;
3571 	struct be_rx_obj *rxo;
3572 	int i;
3573 
3574 	for_all_rx_queues(adapter, rxo, i) {
3575 		q = &rxo->q;
3576 		if (q->created) {
3577 			/* If RXQs are destroyed while in an "out of buffer"
3578 			 * state, there is a possibility of an HW stall on
3579 			 * Lancer. So, post 64 buffers to each queue to relieve
3580 			 * the "out of buffer" condition.
3581 			 * Make sure there's space in the RXQ before posting.
3582 			 */
3583 			if (lancer_chip(adapter)) {
3584 				be_rx_cq_clean(rxo);
3585 				if (atomic_read(&q->used) == 0)
3586 					be_post_rx_frags(rxo, GFP_KERNEL,
3587 							 MAX_RX_POST);
3588 			}
3589 
3590 			be_cmd_rxq_destroy(adapter, q);
3591 			be_rx_cq_clean(rxo);
3592 			be_rxq_clean(rxo);
3593 		}
3594 		be_queue_free(adapter, q);
3595 	}
3596 
3597 	if (rss->rss_flags) {
3598 		rss->rss_flags = RSS_ENABLE_NONE;
3599 		be_cmd_rss_config(adapter, rss->rsstable, rss->rss_flags,
3600 				  128, rss->rss_hkey);
3601 	}
3602 }
3603 
3604 static void be_disable_if_filters(struct be_adapter *adapter)
3605 {
3606 	/* Don't delete MAC on BE3 VFs without FILTMGMT privilege  */
3607 	if (!BEx_chip(adapter) || !be_virtfn(adapter) ||
3608 	    check_privilege(adapter, BE_PRIV_FILTMGMT)) {
3609 		be_dev_mac_del(adapter, adapter->pmac_id[0]);
3610 		eth_zero_addr(adapter->dev_mac);
3611 	}
3612 
3613 	be_clear_uc_list(adapter);
3614 	be_clear_mc_list(adapter);
3615 
3616 	/* The IFACE flags are enabled in the open path and cleared
3617 	 * in the close path. When a VF gets detached from the host and
3618 	 * assigned to a VM the following happens:
3619 	 *	- VF's IFACE flags get cleared in the detach path
3620 	 *	- IFACE create is issued by the VF in the attach path
3621 	 * Due to a bug in the BE3/Skyhawk-R FW
3622 	 * (Lancer FW doesn't have the bug), the IFACE capability flags
3623 	 * specified along with the IFACE create cmd issued by a VF are not
3624 	 * honoured by FW.  As a consequence, if a *new* driver
3625 	 * (that enables/disables IFACE flags in open/close)
3626 	 * is loaded in the host and an *old* driver is * used by a VM/VF,
3627 	 * the IFACE gets created *without* the needed flags.
3628 	 * To avoid this, disable RX-filter flags only for Lancer.
3629 	 */
3630 	if (lancer_chip(adapter)) {
3631 		be_cmd_rx_filter(adapter, BE_IF_ALL_FILT_FLAGS, OFF);
3632 		adapter->if_flags &= ~BE_IF_ALL_FILT_FLAGS;
3633 	}
3634 }
3635 
3636 static int be_close(struct net_device *netdev)
3637 {
3638 	struct be_adapter *adapter = netdev_priv(netdev);
3639 	struct be_eq_obj *eqo;
3640 	int i;
3641 
3642 	/* This protection is needed as be_close() may be called even when the
3643 	 * adapter is in cleared state (after eeh perm failure)
3644 	 */
3645 	if (!(adapter->flags & BE_FLAGS_SETUP_DONE))
3646 		return 0;
3647 
3648 	/* Before attempting cleanup ensure all the pending cmds in the
3649 	 * config_wq have finished execution
3650 	 */
3651 	flush_workqueue(be_wq);
3652 
3653 	be_disable_if_filters(adapter);
3654 
3655 	if (adapter->flags & BE_FLAGS_NAPI_ENABLED) {
3656 		for_all_evt_queues(adapter, eqo, i) {
3657 			napi_disable(&eqo->napi);
3658 		}
3659 		adapter->flags &= ~BE_FLAGS_NAPI_ENABLED;
3660 	}
3661 
3662 	be_async_mcc_disable(adapter);
3663 
3664 	/* Wait for all pending tx completions to arrive so that
3665 	 * all tx skbs are freed.
3666 	 */
3667 	netif_tx_disable(netdev);
3668 	be_tx_compl_clean(adapter);
3669 
3670 	be_rx_qs_destroy(adapter);
3671 
3672 	for_all_evt_queues(adapter, eqo, i) {
3673 		if (msix_enabled(adapter))
3674 			synchronize_irq(be_msix_vec_get(adapter, eqo));
3675 		else
3676 			synchronize_irq(netdev->irq);
3677 		be_eq_clean(eqo);
3678 	}
3679 
3680 	be_irq_unregister(adapter);
3681 
3682 	return 0;
3683 }
3684 
3685 static int be_rx_qs_create(struct be_adapter *adapter)
3686 {
3687 	struct rss_info *rss = &adapter->rss_info;
3688 	u8 rss_key[RSS_HASH_KEY_LEN];
3689 	struct be_rx_obj *rxo;
3690 	int rc, i, j;
3691 
3692 	for_all_rx_queues(adapter, rxo, i) {
3693 		rc = be_queue_alloc(adapter, &rxo->q, RX_Q_LEN,
3694 				    sizeof(struct be_eth_rx_d));
3695 		if (rc)
3696 			return rc;
3697 	}
3698 
3699 	if (adapter->need_def_rxq || !adapter->num_rss_qs) {
3700 		rxo = default_rxo(adapter);
3701 		rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
3702 				       rx_frag_size, adapter->if_handle,
3703 				       false, &rxo->rss_id);
3704 		if (rc)
3705 			return rc;
3706 	}
3707 
3708 	for_all_rss_queues(adapter, rxo, i) {
3709 		rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
3710 				       rx_frag_size, adapter->if_handle,
3711 				       true, &rxo->rss_id);
3712 		if (rc)
3713 			return rc;
3714 	}
3715 
3716 	if (be_multi_rxq(adapter)) {
3717 		for (j = 0; j < RSS_INDIR_TABLE_LEN; j += adapter->num_rss_qs) {
3718 			for_all_rss_queues(adapter, rxo, i) {
3719 				if ((j + i) >= RSS_INDIR_TABLE_LEN)
3720 					break;
3721 				rss->rsstable[j + i] = rxo->rss_id;
3722 				rss->rss_queue[j + i] = i;
3723 			}
3724 		}
3725 		rss->rss_flags = RSS_ENABLE_TCP_IPV4 | RSS_ENABLE_IPV4 |
3726 			RSS_ENABLE_TCP_IPV6 | RSS_ENABLE_IPV6;
3727 
3728 		if (!BEx_chip(adapter))
3729 			rss->rss_flags |= RSS_ENABLE_UDP_IPV4 |
3730 				RSS_ENABLE_UDP_IPV6;
3731 
3732 		netdev_rss_key_fill(rss_key, RSS_HASH_KEY_LEN);
3733 		rc = be_cmd_rss_config(adapter, rss->rsstable, rss->rss_flags,
3734 				       RSS_INDIR_TABLE_LEN, rss_key);
3735 		if (rc) {
3736 			rss->rss_flags = RSS_ENABLE_NONE;
3737 			return rc;
3738 		}
3739 
3740 		memcpy(rss->rss_hkey, rss_key, RSS_HASH_KEY_LEN);
3741 	} else {
3742 		/* Disable RSS, if only default RX Q is created */
3743 		rss->rss_flags = RSS_ENABLE_NONE;
3744 	}
3745 
3746 
3747 	/* Post 1 less than RXQ-len to avoid head being equal to tail,
3748 	 * which is a queue empty condition
3749 	 */
3750 	for_all_rx_queues(adapter, rxo, i)
3751 		be_post_rx_frags(rxo, GFP_KERNEL, RX_Q_LEN - 1);
3752 
3753 	return 0;
3754 }
3755 
3756 static int be_enable_if_filters(struct be_adapter *adapter)
3757 {
3758 	int status;
3759 
3760 	status = be_cmd_rx_filter(adapter, BE_IF_FILT_FLAGS_BASIC, ON);
3761 	if (status)
3762 		return status;
3763 
3764 	/* Normally this condition usually true as the ->dev_mac is zeroed.
3765 	 * But on BE3 VFs the initial MAC is pre-programmed by PF and
3766 	 * subsequent be_dev_mac_add() can fail (after fresh boot)
3767 	 */
3768 	if (!ether_addr_equal(adapter->dev_mac, adapter->netdev->dev_addr)) {
3769 		int old_pmac_id = -1;
3770 
3771 		/* Remember old programmed MAC if any - can happen on BE3 VF */
3772 		if (!is_zero_ether_addr(adapter->dev_mac))
3773 			old_pmac_id = adapter->pmac_id[0];
3774 
3775 		status = be_dev_mac_add(adapter, adapter->netdev->dev_addr);
3776 		if (status)
3777 			return status;
3778 
3779 		/* Delete the old programmed MAC as we successfully programmed
3780 		 * a new MAC
3781 		 */
3782 		if (old_pmac_id >= 0 && old_pmac_id != adapter->pmac_id[0])
3783 			be_dev_mac_del(adapter, old_pmac_id);
3784 
3785 		ether_addr_copy(adapter->dev_mac, adapter->netdev->dev_addr);
3786 	}
3787 
3788 	if (adapter->vlans_added)
3789 		be_vid_config(adapter);
3790 
3791 	__be_set_rx_mode(adapter);
3792 
3793 	return 0;
3794 }
3795 
3796 static int be_open(struct net_device *netdev)
3797 {
3798 	struct be_adapter *adapter = netdev_priv(netdev);
3799 	struct be_eq_obj *eqo;
3800 	struct be_rx_obj *rxo;
3801 	struct be_tx_obj *txo;
3802 	u8 link_status;
3803 	int status, i;
3804 
3805 	status = be_rx_qs_create(adapter);
3806 	if (status)
3807 		goto err;
3808 
3809 	status = be_enable_if_filters(adapter);
3810 	if (status)
3811 		goto err;
3812 
3813 	status = be_irq_register(adapter);
3814 	if (status)
3815 		goto err;
3816 
3817 	for_all_rx_queues(adapter, rxo, i)
3818 		be_cq_notify(adapter, rxo->cq.id, true, 0);
3819 
3820 	for_all_tx_queues(adapter, txo, i)
3821 		be_cq_notify(adapter, txo->cq.id, true, 0);
3822 
3823 	be_async_mcc_enable(adapter);
3824 
3825 	for_all_evt_queues(adapter, eqo, i) {
3826 		napi_enable(&eqo->napi);
3827 		be_eq_notify(adapter, eqo->q.id, true, true, 0, 0);
3828 	}
3829 	adapter->flags |= BE_FLAGS_NAPI_ENABLED;
3830 
3831 	status = be_cmd_link_status_query(adapter, NULL, &link_status, 0);
3832 	if (!status)
3833 		be_link_status_update(adapter, link_status);
3834 
3835 	netif_tx_start_all_queues(netdev);
3836 	if (skyhawk_chip(adapter))
3837 		udp_tunnel_get_rx_info(netdev);
3838 
3839 	return 0;
3840 err:
3841 	be_close(adapter->netdev);
3842 	return -EIO;
3843 }
3844 
3845 static void be_vf_eth_addr_generate(struct be_adapter *adapter, u8 *mac)
3846 {
3847 	u32 addr;
3848 
3849 	addr = jhash(adapter->netdev->dev_addr, ETH_ALEN, 0);
3850 
3851 	mac[5] = (u8)(addr & 0xFF);
3852 	mac[4] = (u8)((addr >> 8) & 0xFF);
3853 	mac[3] = (u8)((addr >> 16) & 0xFF);
3854 	/* Use the OUI from the current MAC address */
3855 	memcpy(mac, adapter->netdev->dev_addr, 3);
3856 }
3857 
3858 /*
3859  * Generate a seed MAC address from the PF MAC Address using jhash.
3860  * MAC Address for VFs are assigned incrementally starting from the seed.
3861  * These addresses are programmed in the ASIC by the PF and the VF driver
3862  * queries for the MAC address during its probe.
3863  */
3864 static int be_vf_eth_addr_config(struct be_adapter *adapter)
3865 {
3866 	u32 vf;
3867 	int status = 0;
3868 	u8 mac[ETH_ALEN];
3869 	struct be_vf_cfg *vf_cfg;
3870 
3871 	be_vf_eth_addr_generate(adapter, mac);
3872 
3873 	for_all_vfs(adapter, vf_cfg, vf) {
3874 		if (BEx_chip(adapter))
3875 			status = be_cmd_pmac_add(adapter, mac,
3876 						 vf_cfg->if_handle,
3877 						 &vf_cfg->pmac_id, vf + 1);
3878 		else
3879 			status = be_cmd_set_mac(adapter, mac, vf_cfg->if_handle,
3880 						vf + 1);
3881 
3882 		if (status)
3883 			dev_err(&adapter->pdev->dev,
3884 				"Mac address assignment failed for VF %d\n",
3885 				vf);
3886 		else
3887 			memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
3888 
3889 		mac[5] += 1;
3890 	}
3891 	return status;
3892 }
3893 
3894 static int be_vfs_mac_query(struct be_adapter *adapter)
3895 {
3896 	int status, vf;
3897 	u8 mac[ETH_ALEN];
3898 	struct be_vf_cfg *vf_cfg;
3899 
3900 	for_all_vfs(adapter, vf_cfg, vf) {
3901 		status = be_cmd_get_active_mac(adapter, vf_cfg->pmac_id,
3902 					       mac, vf_cfg->if_handle,
3903 					       false, vf+1);
3904 		if (status)
3905 			return status;
3906 		memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
3907 	}
3908 	return 0;
3909 }
3910 
3911 static void be_vf_clear(struct be_adapter *adapter)
3912 {
3913 	struct be_vf_cfg *vf_cfg;
3914 	u32 vf;
3915 
3916 	if (pci_vfs_assigned(adapter->pdev)) {
3917 		dev_warn(&adapter->pdev->dev,
3918 			 "VFs are assigned to VMs: not disabling VFs\n");
3919 		goto done;
3920 	}
3921 
3922 	pci_disable_sriov(adapter->pdev);
3923 
3924 	for_all_vfs(adapter, vf_cfg, vf) {
3925 		if (BEx_chip(adapter))
3926 			be_cmd_pmac_del(adapter, vf_cfg->if_handle,
3927 					vf_cfg->pmac_id, vf + 1);
3928 		else
3929 			be_cmd_set_mac(adapter, NULL, vf_cfg->if_handle,
3930 				       vf + 1);
3931 
3932 		be_cmd_if_destroy(adapter, vf_cfg->if_handle, vf + 1);
3933 	}
3934 
3935 	if (BE3_chip(adapter))
3936 		be_cmd_set_hsw_config(adapter, 0, 0,
3937 				      adapter->if_handle,
3938 				      PORT_FWD_TYPE_PASSTHRU, 0);
3939 done:
3940 	kfree(adapter->vf_cfg);
3941 	adapter->num_vfs = 0;
3942 	adapter->flags &= ~BE_FLAGS_SRIOV_ENABLED;
3943 }
3944 
3945 static void be_clear_queues(struct be_adapter *adapter)
3946 {
3947 	be_mcc_queues_destroy(adapter);
3948 	be_rx_cqs_destroy(adapter);
3949 	be_tx_queues_destroy(adapter);
3950 	be_evt_queues_destroy(adapter);
3951 }
3952 
3953 static void be_cancel_worker(struct be_adapter *adapter)
3954 {
3955 	if (adapter->flags & BE_FLAGS_WORKER_SCHEDULED) {
3956 		cancel_delayed_work_sync(&adapter->work);
3957 		adapter->flags &= ~BE_FLAGS_WORKER_SCHEDULED;
3958 	}
3959 }
3960 
3961 static void be_cancel_err_detection(struct be_adapter *adapter)
3962 {
3963 	struct be_error_recovery *err_rec = &adapter->error_recovery;
3964 
3965 	if (!be_err_recovery_workq)
3966 		return;
3967 
3968 	if (adapter->flags & BE_FLAGS_ERR_DETECTION_SCHEDULED) {
3969 		cancel_delayed_work_sync(&err_rec->err_detection_work);
3970 		adapter->flags &= ~BE_FLAGS_ERR_DETECTION_SCHEDULED;
3971 	}
3972 }
3973 
3974 static int be_enable_vxlan_offloads(struct be_adapter *adapter)
3975 {
3976 	struct net_device *netdev = adapter->netdev;
3977 	struct device *dev = &adapter->pdev->dev;
3978 	struct be_vxlan_port *vxlan_port;
3979 	__be16 port;
3980 	int status;
3981 
3982 	vxlan_port = list_first_entry(&adapter->vxlan_port_list,
3983 				      struct be_vxlan_port, list);
3984 	port = vxlan_port->port;
3985 
3986 	status = be_cmd_manage_iface(adapter, adapter->if_handle,
3987 				     OP_CONVERT_NORMAL_TO_TUNNEL);
3988 	if (status) {
3989 		dev_warn(dev, "Failed to convert normal interface to tunnel\n");
3990 		return status;
3991 	}
3992 	adapter->flags |= BE_FLAGS_VXLAN_OFFLOADS;
3993 
3994 	status = be_cmd_set_vxlan_port(adapter, port);
3995 	if (status) {
3996 		dev_warn(dev, "Failed to add VxLAN port\n");
3997 		return status;
3998 	}
3999 	adapter->vxlan_port = port;
4000 
4001 	netdev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
4002 				   NETIF_F_TSO | NETIF_F_TSO6 |
4003 				   NETIF_F_GSO_UDP_TUNNEL;
4004 
4005 	dev_info(dev, "Enabled VxLAN offloads for UDP port %d\n",
4006 		 be16_to_cpu(port));
4007 	return 0;
4008 }
4009 
4010 static void be_disable_vxlan_offloads(struct be_adapter *adapter)
4011 {
4012 	struct net_device *netdev = adapter->netdev;
4013 
4014 	if (adapter->flags & BE_FLAGS_VXLAN_OFFLOADS)
4015 		be_cmd_manage_iface(adapter, adapter->if_handle,
4016 				    OP_CONVERT_TUNNEL_TO_NORMAL);
4017 
4018 	if (adapter->vxlan_port)
4019 		be_cmd_set_vxlan_port(adapter, 0);
4020 
4021 	adapter->flags &= ~BE_FLAGS_VXLAN_OFFLOADS;
4022 	adapter->vxlan_port = 0;
4023 
4024 	netdev->hw_enc_features = 0;
4025 }
4026 
4027 static void be_calculate_vf_res(struct be_adapter *adapter, u16 num_vfs,
4028 				struct be_resources *vft_res)
4029 {
4030 	struct be_resources res = adapter->pool_res;
4031 	u32 vf_if_cap_flags = res.vf_if_cap_flags;
4032 	struct be_resources res_mod = {0};
4033 	u16 num_vf_qs = 1;
4034 
4035 	/* Distribute the queue resources among the PF and it's VFs */
4036 	if (num_vfs) {
4037 		/* Divide the rx queues evenly among the VFs and the PF, capped
4038 		 * at VF-EQ-count. Any remainder queues belong to the PF.
4039 		 */
4040 		num_vf_qs = min(SH_VF_MAX_NIC_EQS,
4041 				res.max_rss_qs / (num_vfs + 1));
4042 
4043 		/* Skyhawk-R chip supports only MAX_PORT_RSS_TABLES
4044 		 * RSS Tables per port. Provide RSS on VFs, only if number of
4045 		 * VFs requested is less than it's PF Pool's RSS Tables limit.
4046 		 */
4047 		if (num_vfs >= be_max_pf_pool_rss_tables(adapter))
4048 			num_vf_qs = 1;
4049 	}
4050 
4051 	/* Resource with fields set to all '1's by GET_PROFILE_CONFIG cmd,
4052 	 * which are modifiable using SET_PROFILE_CONFIG cmd.
4053 	 */
4054 	be_cmd_get_profile_config(adapter, &res_mod, NULL, ACTIVE_PROFILE_TYPE,
4055 				  RESOURCE_MODIFIABLE, 0);
4056 
4057 	/* If RSS IFACE capability flags are modifiable for a VF, set the
4058 	 * capability flag as valid and set RSS and DEFQ_RSS IFACE flags if
4059 	 * more than 1 RSSQ is available for a VF.
4060 	 * Otherwise, provision only 1 queue pair for VF.
4061 	 */
4062 	if (res_mod.vf_if_cap_flags & BE_IF_FLAGS_RSS) {
4063 		vft_res->flags |= BIT(IF_CAPS_FLAGS_VALID_SHIFT);
4064 		if (num_vf_qs > 1) {
4065 			vf_if_cap_flags |= BE_IF_FLAGS_RSS;
4066 			if (res.if_cap_flags & BE_IF_FLAGS_DEFQ_RSS)
4067 				vf_if_cap_flags |= BE_IF_FLAGS_DEFQ_RSS;
4068 		} else {
4069 			vf_if_cap_flags &= ~(BE_IF_FLAGS_RSS |
4070 					     BE_IF_FLAGS_DEFQ_RSS);
4071 		}
4072 	} else {
4073 		num_vf_qs = 1;
4074 	}
4075 
4076 	if (res_mod.vf_if_cap_flags & BE_IF_FLAGS_VLAN_PROMISCUOUS) {
4077 		vft_res->flags |= BIT(IF_CAPS_FLAGS_VALID_SHIFT);
4078 		vf_if_cap_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
4079 	}
4080 
4081 	vft_res->vf_if_cap_flags = vf_if_cap_flags;
4082 	vft_res->max_rx_qs = num_vf_qs;
4083 	vft_res->max_rss_qs = num_vf_qs;
4084 	vft_res->max_tx_qs = res.max_tx_qs / (num_vfs + 1);
4085 	vft_res->max_cq_count = res.max_cq_count / (num_vfs + 1);
4086 
4087 	/* Distribute unicast MACs, VLANs, IFACE count and MCCQ count equally
4088 	 * among the PF and it's VFs, if the fields are changeable
4089 	 */
4090 	if (res_mod.max_uc_mac == FIELD_MODIFIABLE)
4091 		vft_res->max_uc_mac = res.max_uc_mac / (num_vfs + 1);
4092 
4093 	if (res_mod.max_vlans == FIELD_MODIFIABLE)
4094 		vft_res->max_vlans = res.max_vlans / (num_vfs + 1);
4095 
4096 	if (res_mod.max_iface_count == FIELD_MODIFIABLE)
4097 		vft_res->max_iface_count = res.max_iface_count / (num_vfs + 1);
4098 
4099 	if (res_mod.max_mcc_count == FIELD_MODIFIABLE)
4100 		vft_res->max_mcc_count = res.max_mcc_count / (num_vfs + 1);
4101 }
4102 
4103 static void be_if_destroy(struct be_adapter *adapter)
4104 {
4105 	be_cmd_if_destroy(adapter, adapter->if_handle,  0);
4106 
4107 	kfree(adapter->pmac_id);
4108 	adapter->pmac_id = NULL;
4109 
4110 	kfree(adapter->mc_list);
4111 	adapter->mc_list = NULL;
4112 
4113 	kfree(adapter->uc_list);
4114 	adapter->uc_list = NULL;
4115 }
4116 
4117 static int be_clear(struct be_adapter *adapter)
4118 {
4119 	struct pci_dev *pdev = adapter->pdev;
4120 	struct  be_resources vft_res = {0};
4121 
4122 	be_cancel_worker(adapter);
4123 
4124 	flush_workqueue(be_wq);
4125 
4126 	if (sriov_enabled(adapter))
4127 		be_vf_clear(adapter);
4128 
4129 	/* Re-configure FW to distribute resources evenly across max-supported
4130 	 * number of VFs, only when VFs are not already enabled.
4131 	 */
4132 	if (skyhawk_chip(adapter) && be_physfn(adapter) &&
4133 	    !pci_vfs_assigned(pdev)) {
4134 		be_calculate_vf_res(adapter,
4135 				    pci_sriov_get_totalvfs(pdev),
4136 				    &vft_res);
4137 		be_cmd_set_sriov_config(adapter, adapter->pool_res,
4138 					pci_sriov_get_totalvfs(pdev),
4139 					&vft_res);
4140 	}
4141 
4142 	be_disable_vxlan_offloads(adapter);
4143 
4144 	be_if_destroy(adapter);
4145 
4146 	be_clear_queues(adapter);
4147 
4148 	be_msix_disable(adapter);
4149 	adapter->flags &= ~BE_FLAGS_SETUP_DONE;
4150 	return 0;
4151 }
4152 
4153 static int be_vfs_if_create(struct be_adapter *adapter)
4154 {
4155 	struct be_resources res = {0};
4156 	u32 cap_flags, en_flags, vf;
4157 	struct be_vf_cfg *vf_cfg;
4158 	int status;
4159 
4160 	/* If a FW profile exists, then cap_flags are updated */
4161 	cap_flags = BE_VF_IF_EN_FLAGS;
4162 
4163 	for_all_vfs(adapter, vf_cfg, vf) {
4164 		if (!BE3_chip(adapter)) {
4165 			status = be_cmd_get_profile_config(adapter, &res, NULL,
4166 							   ACTIVE_PROFILE_TYPE,
4167 							   RESOURCE_LIMITS,
4168 							   vf + 1);
4169 			if (!status) {
4170 				cap_flags = res.if_cap_flags;
4171 				/* Prevent VFs from enabling VLAN promiscuous
4172 				 * mode
4173 				 */
4174 				cap_flags &= ~BE_IF_FLAGS_VLAN_PROMISCUOUS;
4175 			}
4176 		}
4177 
4178 		/* PF should enable IF flags during proxy if_create call */
4179 		en_flags = cap_flags & BE_VF_IF_EN_FLAGS;
4180 		status = be_cmd_if_create(adapter, cap_flags, en_flags,
4181 					  &vf_cfg->if_handle, vf + 1);
4182 		if (status)
4183 			return status;
4184 	}
4185 
4186 	return 0;
4187 }
4188 
4189 static int be_vf_setup_init(struct be_adapter *adapter)
4190 {
4191 	struct be_vf_cfg *vf_cfg;
4192 	int vf;
4193 
4194 	adapter->vf_cfg = kcalloc(adapter->num_vfs, sizeof(*vf_cfg),
4195 				  GFP_KERNEL);
4196 	if (!adapter->vf_cfg)
4197 		return -ENOMEM;
4198 
4199 	for_all_vfs(adapter, vf_cfg, vf) {
4200 		vf_cfg->if_handle = -1;
4201 		vf_cfg->pmac_id = -1;
4202 	}
4203 	return 0;
4204 }
4205 
4206 static int be_vf_setup(struct be_adapter *adapter)
4207 {
4208 	struct device *dev = &adapter->pdev->dev;
4209 	struct be_vf_cfg *vf_cfg;
4210 	int status, old_vfs, vf;
4211 	bool spoofchk;
4212 
4213 	old_vfs = pci_num_vf(adapter->pdev);
4214 
4215 	status = be_vf_setup_init(adapter);
4216 	if (status)
4217 		goto err;
4218 
4219 	if (old_vfs) {
4220 		for_all_vfs(adapter, vf_cfg, vf) {
4221 			status = be_cmd_get_if_id(adapter, vf_cfg, vf);
4222 			if (status)
4223 				goto err;
4224 		}
4225 
4226 		status = be_vfs_mac_query(adapter);
4227 		if (status)
4228 			goto err;
4229 	} else {
4230 		status = be_vfs_if_create(adapter);
4231 		if (status)
4232 			goto err;
4233 
4234 		status = be_vf_eth_addr_config(adapter);
4235 		if (status)
4236 			goto err;
4237 	}
4238 
4239 	for_all_vfs(adapter, vf_cfg, vf) {
4240 		/* Allow VFs to programs MAC/VLAN filters */
4241 		status = be_cmd_get_fn_privileges(adapter, &vf_cfg->privileges,
4242 						  vf + 1);
4243 		if (!status && !(vf_cfg->privileges & BE_PRIV_FILTMGMT)) {
4244 			status = be_cmd_set_fn_privileges(adapter,
4245 							  vf_cfg->privileges |
4246 							  BE_PRIV_FILTMGMT,
4247 							  vf + 1);
4248 			if (!status) {
4249 				vf_cfg->privileges |= BE_PRIV_FILTMGMT;
4250 				dev_info(dev, "VF%d has FILTMGMT privilege\n",
4251 					 vf);
4252 			}
4253 		}
4254 
4255 		/* Allow full available bandwidth */
4256 		if (!old_vfs)
4257 			be_cmd_config_qos(adapter, 0, 0, vf + 1);
4258 
4259 		status = be_cmd_get_hsw_config(adapter, NULL, vf + 1,
4260 					       vf_cfg->if_handle, NULL,
4261 					       &spoofchk);
4262 		if (!status)
4263 			vf_cfg->spoofchk = spoofchk;
4264 
4265 		if (!old_vfs) {
4266 			be_cmd_enable_vf(adapter, vf + 1);
4267 			be_cmd_set_logical_link_config(adapter,
4268 						       IFLA_VF_LINK_STATE_AUTO,
4269 						       vf+1);
4270 		}
4271 	}
4272 
4273 	if (!old_vfs) {
4274 		status = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
4275 		if (status) {
4276 			dev_err(dev, "SRIOV enable failed\n");
4277 			adapter->num_vfs = 0;
4278 			goto err;
4279 		}
4280 	}
4281 
4282 	if (BE3_chip(adapter)) {
4283 		/* On BE3, enable VEB only when SRIOV is enabled */
4284 		status = be_cmd_set_hsw_config(adapter, 0, 0,
4285 					       adapter->if_handle,
4286 					       PORT_FWD_TYPE_VEB, 0);
4287 		if (status)
4288 			goto err;
4289 	}
4290 
4291 	adapter->flags |= BE_FLAGS_SRIOV_ENABLED;
4292 	return 0;
4293 err:
4294 	dev_err(dev, "VF setup failed\n");
4295 	be_vf_clear(adapter);
4296 	return status;
4297 }
4298 
4299 /* Converting function_mode bits on BE3 to SH mc_type enums */
4300 
4301 static u8 be_convert_mc_type(u32 function_mode)
4302 {
4303 	if (function_mode & VNIC_MODE && function_mode & QNQ_MODE)
4304 		return vNIC1;
4305 	else if (function_mode & QNQ_MODE)
4306 		return FLEX10;
4307 	else if (function_mode & VNIC_MODE)
4308 		return vNIC2;
4309 	else if (function_mode & UMC_ENABLED)
4310 		return UMC;
4311 	else
4312 		return MC_NONE;
4313 }
4314 
4315 /* On BE2/BE3 FW does not suggest the supported limits */
4316 static void BEx_get_resources(struct be_adapter *adapter,
4317 			      struct be_resources *res)
4318 {
4319 	bool use_sriov = adapter->num_vfs ? 1 : 0;
4320 
4321 	if (be_physfn(adapter))
4322 		res->max_uc_mac = BE_UC_PMAC_COUNT;
4323 	else
4324 		res->max_uc_mac = BE_VF_UC_PMAC_COUNT;
4325 
4326 	adapter->mc_type = be_convert_mc_type(adapter->function_mode);
4327 
4328 	if (be_is_mc(adapter)) {
4329 		/* Assuming that there are 4 channels per port,
4330 		 * when multi-channel is enabled
4331 		 */
4332 		if (be_is_qnq_mode(adapter))
4333 			res->max_vlans = BE_NUM_VLANS_SUPPORTED/8;
4334 		else
4335 			/* In a non-qnq multichannel mode, the pvid
4336 			 * takes up one vlan entry
4337 			 */
4338 			res->max_vlans = (BE_NUM_VLANS_SUPPORTED / 4) - 1;
4339 	} else {
4340 		res->max_vlans = BE_NUM_VLANS_SUPPORTED;
4341 	}
4342 
4343 	res->max_mcast_mac = BE_MAX_MC;
4344 
4345 	/* 1) For BE3 1Gb ports, FW does not support multiple TXQs
4346 	 * 2) Create multiple TX rings on a BE3-R multi-channel interface
4347 	 *    *only* if it is RSS-capable.
4348 	 */
4349 	if (BE2_chip(adapter) || use_sriov ||  (adapter->port_num > 1) ||
4350 	    be_virtfn(adapter) ||
4351 	    (be_is_mc(adapter) &&
4352 	     !(adapter->function_caps & BE_FUNCTION_CAPS_RSS))) {
4353 		res->max_tx_qs = 1;
4354 	} else if (adapter->function_caps & BE_FUNCTION_CAPS_SUPER_NIC) {
4355 		struct be_resources super_nic_res = {0};
4356 
4357 		/* On a SuperNIC profile, the driver needs to use the
4358 		 * GET_PROFILE_CONFIG cmd to query the per-function TXQ limits
4359 		 */
4360 		be_cmd_get_profile_config(adapter, &super_nic_res, NULL,
4361 					  ACTIVE_PROFILE_TYPE, RESOURCE_LIMITS,
4362 					  0);
4363 		/* Some old versions of BE3 FW don't report max_tx_qs value */
4364 		res->max_tx_qs = super_nic_res.max_tx_qs ? : BE3_MAX_TX_QS;
4365 	} else {
4366 		res->max_tx_qs = BE3_MAX_TX_QS;
4367 	}
4368 
4369 	if ((adapter->function_caps & BE_FUNCTION_CAPS_RSS) &&
4370 	    !use_sriov && be_physfn(adapter))
4371 		res->max_rss_qs = (adapter->be3_native) ?
4372 					   BE3_MAX_RSS_QS : BE2_MAX_RSS_QS;
4373 	res->max_rx_qs = res->max_rss_qs + 1;
4374 
4375 	if (be_physfn(adapter))
4376 		res->max_evt_qs = (be_max_vfs(adapter) > 0) ?
4377 					BE3_SRIOV_MAX_EVT_QS : BE3_MAX_EVT_QS;
4378 	else
4379 		res->max_evt_qs = 1;
4380 
4381 	res->if_cap_flags = BE_IF_CAP_FLAGS_WANT;
4382 	res->if_cap_flags &= ~BE_IF_FLAGS_DEFQ_RSS;
4383 	if (!(adapter->function_caps & BE_FUNCTION_CAPS_RSS))
4384 		res->if_cap_flags &= ~BE_IF_FLAGS_RSS;
4385 }
4386 
4387 static void be_setup_init(struct be_adapter *adapter)
4388 {
4389 	adapter->vlan_prio_bmap = 0xff;
4390 	adapter->phy.link_speed = -1;
4391 	adapter->if_handle = -1;
4392 	adapter->be3_native = false;
4393 	adapter->if_flags = 0;
4394 	adapter->phy_state = BE_UNKNOWN_PHY_STATE;
4395 	if (be_physfn(adapter))
4396 		adapter->cmd_privileges = MAX_PRIVILEGES;
4397 	else
4398 		adapter->cmd_privileges = MIN_PRIVILEGES;
4399 }
4400 
4401 /* HW supports only MAX_PORT_RSS_TABLES RSS Policy Tables per port.
4402  * However, this HW limitation is not exposed to the host via any SLI cmd.
4403  * As a result, in the case of SRIOV and in particular multi-partition configs
4404  * the driver needs to calcuate a proportional share of RSS Tables per PF-pool
4405  * for distribution between the VFs. This self-imposed limit will determine the
4406  * no: of VFs for which RSS can be enabled.
4407  */
4408 static void be_calculate_pf_pool_rss_tables(struct be_adapter *adapter)
4409 {
4410 	struct be_port_resources port_res = {0};
4411 	u8 rss_tables_on_port;
4412 	u16 max_vfs = be_max_vfs(adapter);
4413 
4414 	be_cmd_get_profile_config(adapter, NULL, &port_res, SAVED_PROFILE_TYPE,
4415 				  RESOURCE_LIMITS, 0);
4416 
4417 	rss_tables_on_port = MAX_PORT_RSS_TABLES - port_res.nic_pfs;
4418 
4419 	/* Each PF Pool's RSS Tables limit =
4420 	 * PF's Max VFs / Total_Max_VFs on Port * RSS Tables on Port
4421 	 */
4422 	adapter->pool_res.max_rss_tables =
4423 		max_vfs * rss_tables_on_port / port_res.max_vfs;
4424 }
4425 
4426 static int be_get_sriov_config(struct be_adapter *adapter)
4427 {
4428 	struct be_resources res = {0};
4429 	int max_vfs, old_vfs;
4430 
4431 	be_cmd_get_profile_config(adapter, &res, NULL, ACTIVE_PROFILE_TYPE,
4432 				  RESOURCE_LIMITS, 0);
4433 
4434 	/* Some old versions of BE3 FW don't report max_vfs value */
4435 	if (BE3_chip(adapter) && !res.max_vfs) {
4436 		max_vfs = pci_sriov_get_totalvfs(adapter->pdev);
4437 		res.max_vfs = max_vfs > 0 ? min(MAX_VFS, max_vfs) : 0;
4438 	}
4439 
4440 	adapter->pool_res = res;
4441 
4442 	/* If during previous unload of the driver, the VFs were not disabled,
4443 	 * then we cannot rely on the PF POOL limits for the TotalVFs value.
4444 	 * Instead use the TotalVFs value stored in the pci-dev struct.
4445 	 */
4446 	old_vfs = pci_num_vf(adapter->pdev);
4447 	if (old_vfs) {
4448 		dev_info(&adapter->pdev->dev, "%d VFs are already enabled\n",
4449 			 old_vfs);
4450 
4451 		adapter->pool_res.max_vfs =
4452 			pci_sriov_get_totalvfs(adapter->pdev);
4453 		adapter->num_vfs = old_vfs;
4454 	}
4455 
4456 	if (skyhawk_chip(adapter) && be_max_vfs(adapter) && !old_vfs) {
4457 		be_calculate_pf_pool_rss_tables(adapter);
4458 		dev_info(&adapter->pdev->dev,
4459 			 "RSS can be enabled for all VFs if num_vfs <= %d\n",
4460 			 be_max_pf_pool_rss_tables(adapter));
4461 	}
4462 	return 0;
4463 }
4464 
4465 static void be_alloc_sriov_res(struct be_adapter *adapter)
4466 {
4467 	int old_vfs = pci_num_vf(adapter->pdev);
4468 	struct  be_resources vft_res = {0};
4469 	int status;
4470 
4471 	be_get_sriov_config(adapter);
4472 
4473 	if (!old_vfs)
4474 		pci_sriov_set_totalvfs(adapter->pdev, be_max_vfs(adapter));
4475 
4476 	/* When the HW is in SRIOV capable configuration, the PF-pool
4477 	 * resources are given to PF during driver load, if there are no
4478 	 * old VFs. This facility is not available in BE3 FW.
4479 	 * Also, this is done by FW in Lancer chip.
4480 	 */
4481 	if (skyhawk_chip(adapter) && be_max_vfs(adapter) && !old_vfs) {
4482 		be_calculate_vf_res(adapter, 0, &vft_res);
4483 		status = be_cmd_set_sriov_config(adapter, adapter->pool_res, 0,
4484 						 &vft_res);
4485 		if (status)
4486 			dev_err(&adapter->pdev->dev,
4487 				"Failed to optimize SRIOV resources\n");
4488 	}
4489 }
4490 
4491 static int be_get_resources(struct be_adapter *adapter)
4492 {
4493 	struct device *dev = &adapter->pdev->dev;
4494 	struct be_resources res = {0};
4495 	int status;
4496 
4497 	/* For Lancer, SH etc read per-function resource limits from FW.
4498 	 * GET_FUNC_CONFIG returns per function guaranteed limits.
4499 	 * GET_PROFILE_CONFIG returns PCI-E related limits PF-pool limits
4500 	 */
4501 	if (BEx_chip(adapter)) {
4502 		BEx_get_resources(adapter, &res);
4503 	} else {
4504 		status = be_cmd_get_func_config(adapter, &res);
4505 		if (status)
4506 			return status;
4507 
4508 		/* If a deafault RXQ must be created, we'll use up one RSSQ*/
4509 		if (res.max_rss_qs && res.max_rss_qs == res.max_rx_qs &&
4510 		    !(res.if_cap_flags & BE_IF_FLAGS_DEFQ_RSS))
4511 			res.max_rss_qs -= 1;
4512 	}
4513 
4514 	/* If RoCE is supported stash away half the EQs for RoCE */
4515 	res.max_nic_evt_qs = be_roce_supported(adapter) ?
4516 				res.max_evt_qs / 2 : res.max_evt_qs;
4517 	adapter->res = res;
4518 
4519 	/* If FW supports RSS default queue, then skip creating non-RSS
4520 	 * queue for non-IP traffic.
4521 	 */
4522 	adapter->need_def_rxq = (be_if_cap_flags(adapter) &
4523 				 BE_IF_FLAGS_DEFQ_RSS) ? 0 : 1;
4524 
4525 	dev_info(dev, "Max: txqs %d, rxqs %d, rss %d, eqs %d, vfs %d\n",
4526 		 be_max_txqs(adapter), be_max_rxqs(adapter),
4527 		 be_max_rss(adapter), be_max_nic_eqs(adapter),
4528 		 be_max_vfs(adapter));
4529 	dev_info(dev, "Max: uc-macs %d, mc-macs %d, vlans %d\n",
4530 		 be_max_uc(adapter), be_max_mc(adapter),
4531 		 be_max_vlans(adapter));
4532 
4533 	/* Ensure RX and TX queues are created in pairs at init time */
4534 	adapter->cfg_num_rx_irqs =
4535 				min_t(u16, netif_get_num_default_rss_queues(),
4536 				      be_max_qp_irqs(adapter));
4537 	adapter->cfg_num_tx_irqs = adapter->cfg_num_rx_irqs;
4538 	return 0;
4539 }
4540 
4541 static int be_get_config(struct be_adapter *adapter)
4542 {
4543 	int status, level;
4544 	u16 profile_id;
4545 
4546 	status = be_cmd_get_cntl_attributes(adapter);
4547 	if (status)
4548 		return status;
4549 
4550 	status = be_cmd_query_fw_cfg(adapter);
4551 	if (status)
4552 		return status;
4553 
4554 	if (!lancer_chip(adapter) && be_physfn(adapter))
4555 		be_cmd_get_fat_dump_len(adapter, &adapter->fat_dump_len);
4556 
4557 	if (BEx_chip(adapter)) {
4558 		level = be_cmd_get_fw_log_level(adapter);
4559 		adapter->msg_enable =
4560 			level <= FW_LOG_LEVEL_DEFAULT ? NETIF_MSG_HW : 0;
4561 	}
4562 
4563 	be_cmd_get_acpi_wol_cap(adapter);
4564 	pci_enable_wake(adapter->pdev, PCI_D3hot, adapter->wol_en);
4565 	pci_enable_wake(adapter->pdev, PCI_D3cold, adapter->wol_en);
4566 
4567 	be_cmd_query_port_name(adapter);
4568 
4569 	if (be_physfn(adapter)) {
4570 		status = be_cmd_get_active_profile(adapter, &profile_id);
4571 		if (!status)
4572 			dev_info(&adapter->pdev->dev,
4573 				 "Using profile 0x%x\n", profile_id);
4574 	}
4575 
4576 	return 0;
4577 }
4578 
4579 static int be_mac_setup(struct be_adapter *adapter)
4580 {
4581 	u8 mac[ETH_ALEN];
4582 	int status;
4583 
4584 	if (is_zero_ether_addr(adapter->netdev->dev_addr)) {
4585 		status = be_cmd_get_perm_mac(adapter, mac);
4586 		if (status)
4587 			return status;
4588 
4589 		memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
4590 		memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
4591 
4592 		/* Initial MAC for BE3 VFs is already programmed by PF */
4593 		if (BEx_chip(adapter) && be_virtfn(adapter))
4594 			memcpy(adapter->dev_mac, mac, ETH_ALEN);
4595 	}
4596 
4597 	return 0;
4598 }
4599 
4600 static void be_schedule_worker(struct be_adapter *adapter)
4601 {
4602 	queue_delayed_work(be_wq, &adapter->work, msecs_to_jiffies(1000));
4603 	adapter->flags |= BE_FLAGS_WORKER_SCHEDULED;
4604 }
4605 
4606 static void be_destroy_err_recovery_workq(void)
4607 {
4608 	if (!be_err_recovery_workq)
4609 		return;
4610 
4611 	flush_workqueue(be_err_recovery_workq);
4612 	destroy_workqueue(be_err_recovery_workq);
4613 	be_err_recovery_workq = NULL;
4614 }
4615 
4616 static void be_schedule_err_detection(struct be_adapter *adapter, u32 delay)
4617 {
4618 	struct be_error_recovery *err_rec = &adapter->error_recovery;
4619 
4620 	if (!be_err_recovery_workq)
4621 		return;
4622 
4623 	queue_delayed_work(be_err_recovery_workq, &err_rec->err_detection_work,
4624 			   msecs_to_jiffies(delay));
4625 	adapter->flags |= BE_FLAGS_ERR_DETECTION_SCHEDULED;
4626 }
4627 
4628 static int be_setup_queues(struct be_adapter *adapter)
4629 {
4630 	struct net_device *netdev = adapter->netdev;
4631 	int status;
4632 
4633 	status = be_evt_queues_create(adapter);
4634 	if (status)
4635 		goto err;
4636 
4637 	status = be_tx_qs_create(adapter);
4638 	if (status)
4639 		goto err;
4640 
4641 	status = be_rx_cqs_create(adapter);
4642 	if (status)
4643 		goto err;
4644 
4645 	status = be_mcc_queues_create(adapter);
4646 	if (status)
4647 		goto err;
4648 
4649 	status = netif_set_real_num_rx_queues(netdev, adapter->num_rx_qs);
4650 	if (status)
4651 		goto err;
4652 
4653 	status = netif_set_real_num_tx_queues(netdev, adapter->num_tx_qs);
4654 	if (status)
4655 		goto err;
4656 
4657 	return 0;
4658 err:
4659 	dev_err(&adapter->pdev->dev, "queue_setup failed\n");
4660 	return status;
4661 }
4662 
4663 static int be_if_create(struct be_adapter *adapter)
4664 {
4665 	u32 en_flags = BE_IF_FLAGS_RSS | BE_IF_FLAGS_DEFQ_RSS;
4666 	u32 cap_flags = be_if_cap_flags(adapter);
4667 	int status;
4668 
4669 	/* alloc required memory for other filtering fields */
4670 	adapter->pmac_id = kcalloc(be_max_uc(adapter),
4671 				   sizeof(*adapter->pmac_id), GFP_KERNEL);
4672 	if (!adapter->pmac_id)
4673 		return -ENOMEM;
4674 
4675 	adapter->mc_list = kcalloc(be_max_mc(adapter),
4676 				   sizeof(*adapter->mc_list), GFP_KERNEL);
4677 	if (!adapter->mc_list)
4678 		return -ENOMEM;
4679 
4680 	adapter->uc_list = kcalloc(be_max_uc(adapter),
4681 				   sizeof(*adapter->uc_list), GFP_KERNEL);
4682 	if (!adapter->uc_list)
4683 		return -ENOMEM;
4684 
4685 	if (adapter->cfg_num_rx_irqs == 1)
4686 		cap_flags &= ~(BE_IF_FLAGS_DEFQ_RSS | BE_IF_FLAGS_RSS);
4687 
4688 	en_flags &= cap_flags;
4689 	/* will enable all the needed filter flags in be_open() */
4690 	status = be_cmd_if_create(adapter, be_if_cap_flags(adapter), en_flags,
4691 				  &adapter->if_handle, 0);
4692 
4693 	if (status)
4694 		return status;
4695 
4696 	return 0;
4697 }
4698 
4699 int be_update_queues(struct be_adapter *adapter)
4700 {
4701 	struct net_device *netdev = adapter->netdev;
4702 	int status;
4703 
4704 	if (netif_running(netdev))
4705 		be_close(netdev);
4706 
4707 	be_cancel_worker(adapter);
4708 
4709 	/* If any vectors have been shared with RoCE we cannot re-program
4710 	 * the MSIx table.
4711 	 */
4712 	if (!adapter->num_msix_roce_vec)
4713 		be_msix_disable(adapter);
4714 
4715 	be_clear_queues(adapter);
4716 	status = be_cmd_if_destroy(adapter, adapter->if_handle,  0);
4717 	if (status)
4718 		return status;
4719 
4720 	if (!msix_enabled(adapter)) {
4721 		status = be_msix_enable(adapter);
4722 		if (status)
4723 			return status;
4724 	}
4725 
4726 	status = be_if_create(adapter);
4727 	if (status)
4728 		return status;
4729 
4730 	status = be_setup_queues(adapter);
4731 	if (status)
4732 		return status;
4733 
4734 	be_schedule_worker(adapter);
4735 
4736 	/* The IF was destroyed and re-created. We need to clear
4737 	 * all promiscuous flags valid for the destroyed IF.
4738 	 * Without this promisc mode is not restored during
4739 	 * be_open() because the driver thinks that it is
4740 	 * already enabled in HW.
4741 	 */
4742 	adapter->if_flags &= ~BE_IF_FLAGS_ALL_PROMISCUOUS;
4743 
4744 	if (netif_running(netdev))
4745 		status = be_open(netdev);
4746 
4747 	return status;
4748 }
4749 
4750 static inline int fw_major_num(const char *fw_ver)
4751 {
4752 	int fw_major = 0, i;
4753 
4754 	i = sscanf(fw_ver, "%d.", &fw_major);
4755 	if (i != 1)
4756 		return 0;
4757 
4758 	return fw_major;
4759 }
4760 
4761 /* If it is error recovery, FLR the PF
4762  * Else if any VFs are already enabled don't FLR the PF
4763  */
4764 static bool be_reset_required(struct be_adapter *adapter)
4765 {
4766 	if (be_error_recovering(adapter))
4767 		return true;
4768 	else
4769 		return pci_num_vf(adapter->pdev) == 0;
4770 }
4771 
4772 /* Wait for the FW to be ready and perform the required initialization */
4773 static int be_func_init(struct be_adapter *adapter)
4774 {
4775 	int status;
4776 
4777 	status = be_fw_wait_ready(adapter);
4778 	if (status)
4779 		return status;
4780 
4781 	/* FW is now ready; clear errors to allow cmds/doorbell */
4782 	be_clear_error(adapter, BE_CLEAR_ALL);
4783 
4784 	if (be_reset_required(adapter)) {
4785 		status = be_cmd_reset_function(adapter);
4786 		if (status)
4787 			return status;
4788 
4789 		/* Wait for interrupts to quiesce after an FLR */
4790 		msleep(100);
4791 	}
4792 
4793 	/* Tell FW we're ready to fire cmds */
4794 	status = be_cmd_fw_init(adapter);
4795 	if (status)
4796 		return status;
4797 
4798 	/* Allow interrupts for other ULPs running on NIC function */
4799 	be_intr_set(adapter, true);
4800 
4801 	return 0;
4802 }
4803 
4804 static int be_setup(struct be_adapter *adapter)
4805 {
4806 	struct device *dev = &adapter->pdev->dev;
4807 	int status;
4808 
4809 	status = be_func_init(adapter);
4810 	if (status)
4811 		return status;
4812 
4813 	be_setup_init(adapter);
4814 
4815 	if (!lancer_chip(adapter))
4816 		be_cmd_req_native_mode(adapter);
4817 
4818 	/* invoke this cmd first to get pf_num and vf_num which are needed
4819 	 * for issuing profile related cmds
4820 	 */
4821 	if (!BEx_chip(adapter)) {
4822 		status = be_cmd_get_func_config(adapter, NULL);
4823 		if (status)
4824 			return status;
4825 	}
4826 
4827 	status = be_get_config(adapter);
4828 	if (status)
4829 		goto err;
4830 
4831 	if (!BE2_chip(adapter) && be_physfn(adapter))
4832 		be_alloc_sriov_res(adapter);
4833 
4834 	status = be_get_resources(adapter);
4835 	if (status)
4836 		goto err;
4837 
4838 	status = be_msix_enable(adapter);
4839 	if (status)
4840 		goto err;
4841 
4842 	/* will enable all the needed filter flags in be_open() */
4843 	status = be_if_create(adapter);
4844 	if (status)
4845 		goto err;
4846 
4847 	/* Updating real_num_tx/rx_queues() requires rtnl_lock() */
4848 	rtnl_lock();
4849 	status = be_setup_queues(adapter);
4850 	rtnl_unlock();
4851 	if (status)
4852 		goto err;
4853 
4854 	be_cmd_get_fn_privileges(adapter, &adapter->cmd_privileges, 0);
4855 
4856 	status = be_mac_setup(adapter);
4857 	if (status)
4858 		goto err;
4859 
4860 	be_cmd_get_fw_ver(adapter);
4861 	dev_info(dev, "FW version is %s\n", adapter->fw_ver);
4862 
4863 	if (BE2_chip(adapter) && fw_major_num(adapter->fw_ver) < 4) {
4864 		dev_err(dev, "Firmware on card is old(%s), IRQs may not work",
4865 			adapter->fw_ver);
4866 		dev_err(dev, "Please upgrade firmware to version >= 4.0\n");
4867 	}
4868 
4869 	status = be_cmd_set_flow_control(adapter, adapter->tx_fc,
4870 					 adapter->rx_fc);
4871 	if (status)
4872 		be_cmd_get_flow_control(adapter, &adapter->tx_fc,
4873 					&adapter->rx_fc);
4874 
4875 	dev_info(&adapter->pdev->dev, "HW Flow control - TX:%d RX:%d\n",
4876 		 adapter->tx_fc, adapter->rx_fc);
4877 
4878 	if (be_physfn(adapter))
4879 		be_cmd_set_logical_link_config(adapter,
4880 					       IFLA_VF_LINK_STATE_AUTO, 0);
4881 
4882 	/* BE3 EVB echoes broadcast/multicast packets back to PF's vport
4883 	 * confusing a linux bridge or OVS that it might be connected to.
4884 	 * Set the EVB to PASSTHRU mode which effectively disables the EVB
4885 	 * when SRIOV is not enabled.
4886 	 */
4887 	if (BE3_chip(adapter))
4888 		be_cmd_set_hsw_config(adapter, 0, 0, adapter->if_handle,
4889 				      PORT_FWD_TYPE_PASSTHRU, 0);
4890 
4891 	if (adapter->num_vfs)
4892 		be_vf_setup(adapter);
4893 
4894 	status = be_cmd_get_phy_info(adapter);
4895 	if (!status && be_pause_supported(adapter))
4896 		adapter->phy.fc_autoneg = 1;
4897 
4898 	if (be_physfn(adapter) && !lancer_chip(adapter))
4899 		be_cmd_set_features(adapter);
4900 
4901 	be_schedule_worker(adapter);
4902 	adapter->flags |= BE_FLAGS_SETUP_DONE;
4903 	return 0;
4904 err:
4905 	be_clear(adapter);
4906 	return status;
4907 }
4908 
4909 #ifdef CONFIG_NET_POLL_CONTROLLER
4910 static void be_netpoll(struct net_device *netdev)
4911 {
4912 	struct be_adapter *adapter = netdev_priv(netdev);
4913 	struct be_eq_obj *eqo;
4914 	int i;
4915 
4916 	for_all_evt_queues(adapter, eqo, i) {
4917 		be_eq_notify(eqo->adapter, eqo->q.id, false, true, 0, 0);
4918 		napi_schedule(&eqo->napi);
4919 	}
4920 }
4921 #endif
4922 
4923 int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
4924 {
4925 	const struct firmware *fw;
4926 	int status;
4927 
4928 	if (!netif_running(adapter->netdev)) {
4929 		dev_err(&adapter->pdev->dev,
4930 			"Firmware load not allowed (interface is down)\n");
4931 		return -ENETDOWN;
4932 	}
4933 
4934 	status = request_firmware(&fw, fw_file, &adapter->pdev->dev);
4935 	if (status)
4936 		goto fw_exit;
4937 
4938 	dev_info(&adapter->pdev->dev, "Flashing firmware file %s\n", fw_file);
4939 
4940 	if (lancer_chip(adapter))
4941 		status = lancer_fw_download(adapter, fw);
4942 	else
4943 		status = be_fw_download(adapter, fw);
4944 
4945 	if (!status)
4946 		be_cmd_get_fw_ver(adapter);
4947 
4948 fw_exit:
4949 	release_firmware(fw);
4950 	return status;
4951 }
4952 
4953 static int be_ndo_bridge_setlink(struct net_device *dev, struct nlmsghdr *nlh,
4954 				 u16 flags, struct netlink_ext_ack *extack)
4955 {
4956 	struct be_adapter *adapter = netdev_priv(dev);
4957 	struct nlattr *attr, *br_spec;
4958 	int rem;
4959 	int status = 0;
4960 	u16 mode = 0;
4961 
4962 	if (!sriov_enabled(adapter))
4963 		return -EOPNOTSUPP;
4964 
4965 	br_spec = nlmsg_find_attr(nlh, sizeof(struct ifinfomsg), IFLA_AF_SPEC);
4966 	if (!br_spec)
4967 		return -EINVAL;
4968 
4969 	nla_for_each_nested(attr, br_spec, rem) {
4970 		if (nla_type(attr) != IFLA_BRIDGE_MODE)
4971 			continue;
4972 
4973 		if (nla_len(attr) < sizeof(mode))
4974 			return -EINVAL;
4975 
4976 		mode = nla_get_u16(attr);
4977 		if (BE3_chip(adapter) && mode == BRIDGE_MODE_VEPA)
4978 			return -EOPNOTSUPP;
4979 
4980 		if (mode != BRIDGE_MODE_VEPA && mode != BRIDGE_MODE_VEB)
4981 			return -EINVAL;
4982 
4983 		status = be_cmd_set_hsw_config(adapter, 0, 0,
4984 					       adapter->if_handle,
4985 					       mode == BRIDGE_MODE_VEPA ?
4986 					       PORT_FWD_TYPE_VEPA :
4987 					       PORT_FWD_TYPE_VEB, 0);
4988 		if (status)
4989 			goto err;
4990 
4991 		dev_info(&adapter->pdev->dev, "enabled switch mode: %s\n",
4992 			 mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
4993 
4994 		return status;
4995 	}
4996 err:
4997 	dev_err(&adapter->pdev->dev, "Failed to set switch mode %s\n",
4998 		mode == BRIDGE_MODE_VEPA ? "VEPA" : "VEB");
4999 
5000 	return status;
5001 }
5002 
5003 static int be_ndo_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
5004 				 struct net_device *dev, u32 filter_mask,
5005 				 int nlflags)
5006 {
5007 	struct be_adapter *adapter = netdev_priv(dev);
5008 	int status = 0;
5009 	u8 hsw_mode;
5010 
5011 	/* BE and Lancer chips support VEB mode only */
5012 	if (BEx_chip(adapter) || lancer_chip(adapter)) {
5013 		/* VEB is disabled in non-SR-IOV profiles on BE3/Lancer */
5014 		if (!pci_sriov_get_totalvfs(adapter->pdev))
5015 			return 0;
5016 		hsw_mode = PORT_FWD_TYPE_VEB;
5017 	} else {
5018 		status = be_cmd_get_hsw_config(adapter, NULL, 0,
5019 					       adapter->if_handle, &hsw_mode,
5020 					       NULL);
5021 		if (status)
5022 			return 0;
5023 
5024 		if (hsw_mode == PORT_FWD_TYPE_PASSTHRU)
5025 			return 0;
5026 	}
5027 
5028 	return ndo_dflt_bridge_getlink(skb, pid, seq, dev,
5029 				       hsw_mode == PORT_FWD_TYPE_VEPA ?
5030 				       BRIDGE_MODE_VEPA : BRIDGE_MODE_VEB,
5031 				       0, 0, nlflags, filter_mask, NULL);
5032 }
5033 
5034 static struct be_cmd_work *be_alloc_work(struct be_adapter *adapter,
5035 					 void (*func)(struct work_struct *))
5036 {
5037 	struct be_cmd_work *work;
5038 
5039 	work = kzalloc(sizeof(*work), GFP_ATOMIC);
5040 	if (!work) {
5041 		dev_err(&adapter->pdev->dev,
5042 			"be_work memory allocation failed\n");
5043 		return NULL;
5044 	}
5045 
5046 	INIT_WORK(&work->work, func);
5047 	work->adapter = adapter;
5048 	return work;
5049 }
5050 
5051 /* VxLAN offload Notes:
5052  *
5053  * The stack defines tunnel offload flags (hw_enc_features) for IP and doesn't
5054  * distinguish various types of transports (VxLAN, GRE, NVGRE ..). So, offload
5055  * is expected to work across all types of IP tunnels once exported. Skyhawk
5056  * supports offloads for either VxLAN or NVGRE, exclusively. So we export VxLAN
5057  * offloads in hw_enc_features only when a VxLAN port is added. If other (non
5058  * VxLAN) tunnels are configured while VxLAN offloads are enabled, offloads for
5059  * those other tunnels are unexported on the fly through ndo_features_check().
5060  *
5061  * Skyhawk supports VxLAN offloads only for one UDP dport. So, if the stack
5062  * adds more than one port, disable offloads and re-enable them again when
5063  * there's only one port left. We maintain a list of ports for this purpose.
5064  */
5065 static void be_work_add_vxlan_port(struct work_struct *work)
5066 {
5067 	struct be_cmd_work *cmd_work =
5068 				container_of(work, struct be_cmd_work, work);
5069 	struct be_adapter *adapter = cmd_work->adapter;
5070 	struct device *dev = &adapter->pdev->dev;
5071 	__be16 port = cmd_work->info.vxlan_port;
5072 	struct be_vxlan_port *vxlan_port;
5073 	int status;
5074 
5075 	/* Bump up the alias count if it is an existing port */
5076 	list_for_each_entry(vxlan_port, &adapter->vxlan_port_list, list) {
5077 		if (vxlan_port->port == port) {
5078 			vxlan_port->port_aliases++;
5079 			goto done;
5080 		}
5081 	}
5082 
5083 	/* Add a new port to our list. We don't need a lock here since port
5084 	 * add/delete are done only in the context of a single-threaded work
5085 	 * queue (be_wq).
5086 	 */
5087 	vxlan_port = kzalloc(sizeof(*vxlan_port), GFP_KERNEL);
5088 	if (!vxlan_port)
5089 		goto done;
5090 
5091 	vxlan_port->port = port;
5092 	INIT_LIST_HEAD(&vxlan_port->list);
5093 	list_add_tail(&vxlan_port->list, &adapter->vxlan_port_list);
5094 	adapter->vxlan_port_count++;
5095 
5096 	if (adapter->flags & BE_FLAGS_VXLAN_OFFLOADS) {
5097 		dev_info(dev,
5098 			 "Only one UDP port supported for VxLAN offloads\n");
5099 		dev_info(dev, "Disabling VxLAN offloads\n");
5100 		goto err;
5101 	}
5102 
5103 	if (adapter->vxlan_port_count > 1)
5104 		goto done;
5105 
5106 	status = be_enable_vxlan_offloads(adapter);
5107 	if (!status)
5108 		goto done;
5109 
5110 err:
5111 	be_disable_vxlan_offloads(adapter);
5112 done:
5113 	kfree(cmd_work);
5114 	return;
5115 }
5116 
5117 static void be_work_del_vxlan_port(struct work_struct *work)
5118 {
5119 	struct be_cmd_work *cmd_work =
5120 				container_of(work, struct be_cmd_work, work);
5121 	struct be_adapter *adapter = cmd_work->adapter;
5122 	__be16 port = cmd_work->info.vxlan_port;
5123 	struct be_vxlan_port *vxlan_port;
5124 
5125 	/* Nothing to be done if a port alias is being deleted */
5126 	list_for_each_entry(vxlan_port, &adapter->vxlan_port_list, list) {
5127 		if (vxlan_port->port == port) {
5128 			if (vxlan_port->port_aliases) {
5129 				vxlan_port->port_aliases--;
5130 				goto done;
5131 			}
5132 			break;
5133 		}
5134 	}
5135 
5136 	/* No port aliases left; delete the port from the list */
5137 	list_del(&vxlan_port->list);
5138 	adapter->vxlan_port_count--;
5139 
5140 	/* Disable VxLAN offload if this is the offloaded port */
5141 	if (adapter->vxlan_port == vxlan_port->port) {
5142 		WARN_ON(adapter->vxlan_port_count);
5143 		be_disable_vxlan_offloads(adapter);
5144 		dev_info(&adapter->pdev->dev,
5145 			 "Disabled VxLAN offloads for UDP port %d\n",
5146 			 be16_to_cpu(port));
5147 		goto out;
5148 	}
5149 
5150 	/* If only 1 port is left, re-enable VxLAN offload */
5151 	if (adapter->vxlan_port_count == 1)
5152 		be_enable_vxlan_offloads(adapter);
5153 
5154 out:
5155 	kfree(vxlan_port);
5156 done:
5157 	kfree(cmd_work);
5158 }
5159 
5160 static void be_cfg_vxlan_port(struct net_device *netdev,
5161 			      struct udp_tunnel_info *ti,
5162 			      void (*func)(struct work_struct *))
5163 {
5164 	struct be_adapter *adapter = netdev_priv(netdev);
5165 	struct be_cmd_work *cmd_work;
5166 
5167 	if (ti->type != UDP_TUNNEL_TYPE_VXLAN)
5168 		return;
5169 
5170 	if (lancer_chip(adapter) || BEx_chip(adapter) || be_is_mc(adapter))
5171 		return;
5172 
5173 	cmd_work = be_alloc_work(adapter, func);
5174 	if (cmd_work) {
5175 		cmd_work->info.vxlan_port = ti->port;
5176 		queue_work(be_wq, &cmd_work->work);
5177 	}
5178 }
5179 
5180 static void be_del_vxlan_port(struct net_device *netdev,
5181 			      struct udp_tunnel_info *ti)
5182 {
5183 	be_cfg_vxlan_port(netdev, ti, be_work_del_vxlan_port);
5184 }
5185 
5186 static void be_add_vxlan_port(struct net_device *netdev,
5187 			      struct udp_tunnel_info *ti)
5188 {
5189 	be_cfg_vxlan_port(netdev, ti, be_work_add_vxlan_port);
5190 }
5191 
5192 static netdev_features_t be_features_check(struct sk_buff *skb,
5193 					   struct net_device *dev,
5194 					   netdev_features_t features)
5195 {
5196 	struct be_adapter *adapter = netdev_priv(dev);
5197 	u8 l4_hdr = 0;
5198 
5199 	if (skb_is_gso(skb)) {
5200 		/* IPv6 TSO requests with extension hdrs are a problem
5201 		 * to Lancer and BE3 HW. Disable TSO6 feature.
5202 		 */
5203 		if (!skyhawk_chip(adapter) && is_ipv6_ext_hdr(skb))
5204 			features &= ~NETIF_F_TSO6;
5205 
5206 		/* Lancer cannot handle the packet with MSS less than 256.
5207 		 * Also it can't handle a TSO packet with a single segment
5208 		 * Disable the GSO support in such cases
5209 		 */
5210 		if (lancer_chip(adapter) &&
5211 		    (skb_shinfo(skb)->gso_size < 256 ||
5212 		     skb_shinfo(skb)->gso_segs == 1))
5213 			features &= ~NETIF_F_GSO_MASK;
5214 	}
5215 
5216 	/* The code below restricts offload features for some tunneled and
5217 	 * Q-in-Q packets.
5218 	 * Offload features for normal (non tunnel) packets are unchanged.
5219 	 */
5220 	features = vlan_features_check(skb, features);
5221 	if (!skb->encapsulation ||
5222 	    !(adapter->flags & BE_FLAGS_VXLAN_OFFLOADS))
5223 		return features;
5224 
5225 	/* It's an encapsulated packet and VxLAN offloads are enabled. We
5226 	 * should disable tunnel offload features if it's not a VxLAN packet,
5227 	 * as tunnel offloads have been enabled only for VxLAN. This is done to
5228 	 * allow other tunneled traffic like GRE work fine while VxLAN
5229 	 * offloads are configured in Skyhawk-R.
5230 	 */
5231 	switch (vlan_get_protocol(skb)) {
5232 	case htons(ETH_P_IP):
5233 		l4_hdr = ip_hdr(skb)->protocol;
5234 		break;
5235 	case htons(ETH_P_IPV6):
5236 		l4_hdr = ipv6_hdr(skb)->nexthdr;
5237 		break;
5238 	default:
5239 		return features;
5240 	}
5241 
5242 	if (l4_hdr != IPPROTO_UDP ||
5243 	    skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
5244 	    skb->inner_protocol != htons(ETH_P_TEB) ||
5245 	    skb_inner_mac_header(skb) - skb_transport_header(skb) !=
5246 		sizeof(struct udphdr) + sizeof(struct vxlanhdr) ||
5247 	    !adapter->vxlan_port ||
5248 	    udp_hdr(skb)->dest != adapter->vxlan_port)
5249 		return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
5250 
5251 	return features;
5252 }
5253 
5254 static int be_get_phys_port_id(struct net_device *dev,
5255 			       struct netdev_phys_item_id *ppid)
5256 {
5257 	int i, id_len = CNTL_SERIAL_NUM_WORDS * CNTL_SERIAL_NUM_WORD_SZ + 1;
5258 	struct be_adapter *adapter = netdev_priv(dev);
5259 	u8 *id;
5260 
5261 	if (MAX_PHYS_ITEM_ID_LEN < id_len)
5262 		return -ENOSPC;
5263 
5264 	ppid->id[0] = adapter->hba_port_num + 1;
5265 	id = &ppid->id[1];
5266 	for (i = CNTL_SERIAL_NUM_WORDS - 1; i >= 0;
5267 	     i--, id += CNTL_SERIAL_NUM_WORD_SZ)
5268 		memcpy(id, &adapter->serial_num[i], CNTL_SERIAL_NUM_WORD_SZ);
5269 
5270 	ppid->id_len = id_len;
5271 
5272 	return 0;
5273 }
5274 
5275 static void be_set_rx_mode(struct net_device *dev)
5276 {
5277 	struct be_adapter *adapter = netdev_priv(dev);
5278 	struct be_cmd_work *work;
5279 
5280 	work = be_alloc_work(adapter, be_work_set_rx_mode);
5281 	if (work)
5282 		queue_work(be_wq, &work->work);
5283 }
5284 
5285 static const struct net_device_ops be_netdev_ops = {
5286 	.ndo_open		= be_open,
5287 	.ndo_stop		= be_close,
5288 	.ndo_start_xmit		= be_xmit,
5289 	.ndo_set_rx_mode	= be_set_rx_mode,
5290 	.ndo_set_mac_address	= be_mac_addr_set,
5291 	.ndo_get_stats64	= be_get_stats64,
5292 	.ndo_validate_addr	= eth_validate_addr,
5293 	.ndo_vlan_rx_add_vid	= be_vlan_add_vid,
5294 	.ndo_vlan_rx_kill_vid	= be_vlan_rem_vid,
5295 	.ndo_set_vf_mac		= be_set_vf_mac,
5296 	.ndo_set_vf_vlan	= be_set_vf_vlan,
5297 	.ndo_set_vf_rate	= be_set_vf_tx_rate,
5298 	.ndo_get_vf_config	= be_get_vf_config,
5299 	.ndo_set_vf_link_state  = be_set_vf_link_state,
5300 	.ndo_set_vf_spoofchk    = be_set_vf_spoofchk,
5301 	.ndo_tx_timeout		= be_tx_timeout,
5302 #ifdef CONFIG_NET_POLL_CONTROLLER
5303 	.ndo_poll_controller	= be_netpoll,
5304 #endif
5305 	.ndo_bridge_setlink	= be_ndo_bridge_setlink,
5306 	.ndo_bridge_getlink	= be_ndo_bridge_getlink,
5307 	.ndo_udp_tunnel_add	= be_add_vxlan_port,
5308 	.ndo_udp_tunnel_del	= be_del_vxlan_port,
5309 	.ndo_features_check	= be_features_check,
5310 	.ndo_get_phys_port_id   = be_get_phys_port_id,
5311 };
5312 
5313 static void be_netdev_init(struct net_device *netdev)
5314 {
5315 	struct be_adapter *adapter = netdev_priv(netdev);
5316 
5317 	netdev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
5318 		NETIF_F_GSO_UDP_TUNNEL |
5319 		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
5320 		NETIF_F_HW_VLAN_CTAG_TX;
5321 	if ((be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS))
5322 		netdev->hw_features |= NETIF_F_RXHASH;
5323 
5324 	netdev->features |= netdev->hw_features |
5325 		NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_FILTER;
5326 
5327 	netdev->vlan_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
5328 		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
5329 
5330 	netdev->priv_flags |= IFF_UNICAST_FLT;
5331 
5332 	netdev->flags |= IFF_MULTICAST;
5333 
5334 	netif_set_gso_max_size(netdev, BE_MAX_GSO_SIZE - ETH_HLEN);
5335 
5336 	netdev->netdev_ops = &be_netdev_ops;
5337 
5338 	netdev->ethtool_ops = &be_ethtool_ops;
5339 
5340 	/* MTU range: 256 - 9000 */
5341 	netdev->min_mtu = BE_MIN_MTU;
5342 	netdev->max_mtu = BE_MAX_MTU;
5343 }
5344 
5345 static void be_cleanup(struct be_adapter *adapter)
5346 {
5347 	struct net_device *netdev = adapter->netdev;
5348 
5349 	rtnl_lock();
5350 	netif_device_detach(netdev);
5351 	if (netif_running(netdev))
5352 		be_close(netdev);
5353 	rtnl_unlock();
5354 
5355 	be_clear(adapter);
5356 }
5357 
5358 static int be_resume(struct be_adapter *adapter)
5359 {
5360 	struct net_device *netdev = adapter->netdev;
5361 	int status;
5362 
5363 	status = be_setup(adapter);
5364 	if (status)
5365 		return status;
5366 
5367 	rtnl_lock();
5368 	if (netif_running(netdev))
5369 		status = be_open(netdev);
5370 	rtnl_unlock();
5371 
5372 	if (status)
5373 		return status;
5374 
5375 	netif_device_attach(netdev);
5376 
5377 	return 0;
5378 }
5379 
5380 static void be_soft_reset(struct be_adapter *adapter)
5381 {
5382 	u32 val;
5383 
5384 	dev_info(&adapter->pdev->dev, "Initiating chip soft reset\n");
5385 	val = ioread32(adapter->pcicfg + SLIPORT_SOFTRESET_OFFSET);
5386 	val |= SLIPORT_SOFTRESET_SR_MASK;
5387 	iowrite32(val, adapter->pcicfg + SLIPORT_SOFTRESET_OFFSET);
5388 }
5389 
5390 static bool be_err_is_recoverable(struct be_adapter *adapter)
5391 {
5392 	struct be_error_recovery *err_rec = &adapter->error_recovery;
5393 	unsigned long initial_idle_time =
5394 		msecs_to_jiffies(ERR_RECOVERY_IDLE_TIME);
5395 	unsigned long recovery_interval =
5396 		msecs_to_jiffies(ERR_RECOVERY_INTERVAL);
5397 	u16 ue_err_code;
5398 	u32 val;
5399 
5400 	val = be_POST_stage_get(adapter);
5401 	if ((val & POST_STAGE_RECOVERABLE_ERR) != POST_STAGE_RECOVERABLE_ERR)
5402 		return false;
5403 	ue_err_code = val & POST_ERR_RECOVERY_CODE_MASK;
5404 	if (ue_err_code == 0)
5405 		return false;
5406 
5407 	dev_err(&adapter->pdev->dev, "Recoverable HW error code: 0x%x\n",
5408 		ue_err_code);
5409 
5410 	if (time_before_eq(jiffies - err_rec->probe_time, initial_idle_time)) {
5411 		dev_err(&adapter->pdev->dev,
5412 			"Cannot recover within %lu sec from driver load\n",
5413 			jiffies_to_msecs(initial_idle_time) / MSEC_PER_SEC);
5414 		return false;
5415 	}
5416 
5417 	if (err_rec->last_recovery_time && time_before_eq(
5418 		jiffies - err_rec->last_recovery_time, recovery_interval)) {
5419 		dev_err(&adapter->pdev->dev,
5420 			"Cannot recover within %lu sec from last recovery\n",
5421 			jiffies_to_msecs(recovery_interval) / MSEC_PER_SEC);
5422 		return false;
5423 	}
5424 
5425 	if (ue_err_code == err_rec->last_err_code) {
5426 		dev_err(&adapter->pdev->dev,
5427 			"Cannot recover from a consecutive TPE error\n");
5428 		return false;
5429 	}
5430 
5431 	err_rec->last_recovery_time = jiffies;
5432 	err_rec->last_err_code = ue_err_code;
5433 	return true;
5434 }
5435 
5436 static int be_tpe_recover(struct be_adapter *adapter)
5437 {
5438 	struct be_error_recovery *err_rec = &adapter->error_recovery;
5439 	int status = -EAGAIN;
5440 	u32 val;
5441 
5442 	switch (err_rec->recovery_state) {
5443 	case ERR_RECOVERY_ST_NONE:
5444 		err_rec->recovery_state = ERR_RECOVERY_ST_DETECT;
5445 		err_rec->resched_delay = ERR_RECOVERY_UE_DETECT_DURATION;
5446 		break;
5447 
5448 	case ERR_RECOVERY_ST_DETECT:
5449 		val = be_POST_stage_get(adapter);
5450 		if ((val & POST_STAGE_RECOVERABLE_ERR) !=
5451 		    POST_STAGE_RECOVERABLE_ERR) {
5452 			dev_err(&adapter->pdev->dev,
5453 				"Unrecoverable HW error detected: 0x%x\n", val);
5454 			status = -EINVAL;
5455 			err_rec->resched_delay = 0;
5456 			break;
5457 		}
5458 
5459 		dev_err(&adapter->pdev->dev, "Recoverable HW error detected\n");
5460 
5461 		/* Only PF0 initiates Chip Soft Reset. But PF0 must wait UE2SR
5462 		 * milliseconds before it checks for final error status in
5463 		 * SLIPORT_SEMAPHORE to determine if recovery criteria is met.
5464 		 * If it does, then PF0 initiates a Soft Reset.
5465 		 */
5466 		if (adapter->pf_num == 0) {
5467 			err_rec->recovery_state = ERR_RECOVERY_ST_RESET;
5468 			err_rec->resched_delay = err_rec->ue_to_reset_time -
5469 					ERR_RECOVERY_UE_DETECT_DURATION;
5470 			break;
5471 		}
5472 
5473 		err_rec->recovery_state = ERR_RECOVERY_ST_PRE_POLL;
5474 		err_rec->resched_delay = err_rec->ue_to_poll_time -
5475 					ERR_RECOVERY_UE_DETECT_DURATION;
5476 		break;
5477 
5478 	case ERR_RECOVERY_ST_RESET:
5479 		if (!be_err_is_recoverable(adapter)) {
5480 			dev_err(&adapter->pdev->dev,
5481 				"Failed to meet recovery criteria\n");
5482 			status = -EIO;
5483 			err_rec->resched_delay = 0;
5484 			break;
5485 		}
5486 		be_soft_reset(adapter);
5487 		err_rec->recovery_state = ERR_RECOVERY_ST_PRE_POLL;
5488 		err_rec->resched_delay = err_rec->ue_to_poll_time -
5489 					err_rec->ue_to_reset_time;
5490 		break;
5491 
5492 	case ERR_RECOVERY_ST_PRE_POLL:
5493 		err_rec->recovery_state = ERR_RECOVERY_ST_REINIT;
5494 		err_rec->resched_delay = 0;
5495 		status = 0;			/* done */
5496 		break;
5497 
5498 	default:
5499 		status = -EINVAL;
5500 		err_rec->resched_delay = 0;
5501 		break;
5502 	}
5503 
5504 	return status;
5505 }
5506 
5507 static int be_err_recover(struct be_adapter *adapter)
5508 {
5509 	int status;
5510 
5511 	if (!lancer_chip(adapter)) {
5512 		if (!adapter->error_recovery.recovery_supported ||
5513 		    adapter->priv_flags & BE_DISABLE_TPE_RECOVERY)
5514 			return -EIO;
5515 		status = be_tpe_recover(adapter);
5516 		if (status)
5517 			goto err;
5518 	}
5519 
5520 	/* Wait for adapter to reach quiescent state before
5521 	 * destroying queues
5522 	 */
5523 	status = be_fw_wait_ready(adapter);
5524 	if (status)
5525 		goto err;
5526 
5527 	adapter->flags |= BE_FLAGS_TRY_RECOVERY;
5528 
5529 	be_cleanup(adapter);
5530 
5531 	status = be_resume(adapter);
5532 	if (status)
5533 		goto err;
5534 
5535 	adapter->flags &= ~BE_FLAGS_TRY_RECOVERY;
5536 
5537 err:
5538 	return status;
5539 }
5540 
5541 static void be_err_detection_task(struct work_struct *work)
5542 {
5543 	struct be_error_recovery *err_rec =
5544 			container_of(work, struct be_error_recovery,
5545 				     err_detection_work.work);
5546 	struct be_adapter *adapter =
5547 			container_of(err_rec, struct be_adapter,
5548 				     error_recovery);
5549 	u32 resched_delay = ERR_RECOVERY_DETECTION_DELAY;
5550 	struct device *dev = &adapter->pdev->dev;
5551 	int recovery_status;
5552 
5553 	be_detect_error(adapter);
5554 	if (!be_check_error(adapter, BE_ERROR_HW))
5555 		goto reschedule_task;
5556 
5557 	recovery_status = be_err_recover(adapter);
5558 	if (!recovery_status) {
5559 		err_rec->recovery_retries = 0;
5560 		err_rec->recovery_state = ERR_RECOVERY_ST_NONE;
5561 		dev_info(dev, "Adapter recovery successful\n");
5562 		goto reschedule_task;
5563 	} else if (!lancer_chip(adapter) && err_rec->resched_delay) {
5564 		/* BEx/SH recovery state machine */
5565 		if (adapter->pf_num == 0 &&
5566 		    err_rec->recovery_state > ERR_RECOVERY_ST_DETECT)
5567 			dev_err(&adapter->pdev->dev,
5568 				"Adapter recovery in progress\n");
5569 		resched_delay = err_rec->resched_delay;
5570 		goto reschedule_task;
5571 	} else if (lancer_chip(adapter) && be_virtfn(adapter)) {
5572 		/* For VFs, check if PF have allocated resources
5573 		 * every second.
5574 		 */
5575 		dev_err(dev, "Re-trying adapter recovery\n");
5576 		goto reschedule_task;
5577 	} else if (lancer_chip(adapter) && err_rec->recovery_retries++ <
5578 		   ERR_RECOVERY_MAX_RETRY_COUNT) {
5579 		/* In case of another error during recovery, it takes 30 sec
5580 		 * for adapter to come out of error. Retry error recovery after
5581 		 * this time interval.
5582 		 */
5583 		dev_err(&adapter->pdev->dev, "Re-trying adapter recovery\n");
5584 		resched_delay = ERR_RECOVERY_RETRY_DELAY;
5585 		goto reschedule_task;
5586 	} else {
5587 		dev_err(dev, "Adapter recovery failed\n");
5588 		dev_err(dev, "Please reboot server to recover\n");
5589 	}
5590 
5591 	return;
5592 
5593 reschedule_task:
5594 	be_schedule_err_detection(adapter, resched_delay);
5595 }
5596 
5597 static void be_log_sfp_info(struct be_adapter *adapter)
5598 {
5599 	int status;
5600 
5601 	status = be_cmd_query_sfp_info(adapter);
5602 	if (!status) {
5603 		dev_err(&adapter->pdev->dev,
5604 			"Port %c: %s Vendor: %s part no: %s",
5605 			adapter->port_name,
5606 			be_misconfig_evt_port_state[adapter->phy_state],
5607 			adapter->phy.vendor_name,
5608 			adapter->phy.vendor_pn);
5609 	}
5610 	adapter->flags &= ~BE_FLAGS_PHY_MISCONFIGURED;
5611 }
5612 
5613 static void be_worker(struct work_struct *work)
5614 {
5615 	struct be_adapter *adapter =
5616 		container_of(work, struct be_adapter, work.work);
5617 	struct be_rx_obj *rxo;
5618 	int i;
5619 
5620 	if (be_physfn(adapter) &&
5621 	    MODULO(adapter->work_counter, adapter->be_get_temp_freq) == 0)
5622 		be_cmd_get_die_temperature(adapter);
5623 
5624 	/* when interrupts are not yet enabled, just reap any pending
5625 	 * mcc completions
5626 	 */
5627 	if (!netif_running(adapter->netdev)) {
5628 		local_bh_disable();
5629 		be_process_mcc(adapter);
5630 		local_bh_enable();
5631 		goto reschedule;
5632 	}
5633 
5634 	if (!adapter->stats_cmd_sent) {
5635 		if (lancer_chip(adapter))
5636 			lancer_cmd_get_pport_stats(adapter,
5637 						   &adapter->stats_cmd);
5638 		else
5639 			be_cmd_get_stats(adapter, &adapter->stats_cmd);
5640 	}
5641 
5642 	for_all_rx_queues(adapter, rxo, i) {
5643 		/* Replenish RX-queues starved due to memory
5644 		 * allocation failures.
5645 		 */
5646 		if (rxo->rx_post_starved)
5647 			be_post_rx_frags(rxo, GFP_KERNEL, MAX_RX_POST);
5648 	}
5649 
5650 	/* EQ-delay update for Skyhawk is done while notifying EQ */
5651 	if (!skyhawk_chip(adapter))
5652 		be_eqd_update(adapter, false);
5653 
5654 	if (adapter->flags & BE_FLAGS_PHY_MISCONFIGURED)
5655 		be_log_sfp_info(adapter);
5656 
5657 reschedule:
5658 	adapter->work_counter++;
5659 	queue_delayed_work(be_wq, &adapter->work, msecs_to_jiffies(1000));
5660 }
5661 
5662 static void be_unmap_pci_bars(struct be_adapter *adapter)
5663 {
5664 	if (adapter->csr)
5665 		pci_iounmap(adapter->pdev, adapter->csr);
5666 	if (adapter->db)
5667 		pci_iounmap(adapter->pdev, adapter->db);
5668 	if (adapter->pcicfg && adapter->pcicfg_mapped)
5669 		pci_iounmap(adapter->pdev, adapter->pcicfg);
5670 }
5671 
5672 static int db_bar(struct be_adapter *adapter)
5673 {
5674 	if (lancer_chip(adapter) || be_virtfn(adapter))
5675 		return 0;
5676 	else
5677 		return 4;
5678 }
5679 
5680 static int be_roce_map_pci_bars(struct be_adapter *adapter)
5681 {
5682 	if (skyhawk_chip(adapter)) {
5683 		adapter->roce_db.size = 4096;
5684 		adapter->roce_db.io_addr = pci_resource_start(adapter->pdev,
5685 							      db_bar(adapter));
5686 		adapter->roce_db.total_size = pci_resource_len(adapter->pdev,
5687 							       db_bar(adapter));
5688 	}
5689 	return 0;
5690 }
5691 
5692 static int be_map_pci_bars(struct be_adapter *adapter)
5693 {
5694 	struct pci_dev *pdev = adapter->pdev;
5695 	u8 __iomem *addr;
5696 	u32 sli_intf;
5697 
5698 	pci_read_config_dword(adapter->pdev, SLI_INTF_REG_OFFSET, &sli_intf);
5699 	adapter->sli_family = (sli_intf & SLI_INTF_FAMILY_MASK) >>
5700 				SLI_INTF_FAMILY_SHIFT;
5701 	adapter->virtfn = (sli_intf & SLI_INTF_FT_MASK) ? 1 : 0;
5702 
5703 	if (BEx_chip(adapter) && be_physfn(adapter)) {
5704 		adapter->csr = pci_iomap(pdev, 2, 0);
5705 		if (!adapter->csr)
5706 			return -ENOMEM;
5707 	}
5708 
5709 	addr = pci_iomap(pdev, db_bar(adapter), 0);
5710 	if (!addr)
5711 		goto pci_map_err;
5712 	adapter->db = addr;
5713 
5714 	if (skyhawk_chip(adapter) || BEx_chip(adapter)) {
5715 		if (be_physfn(adapter)) {
5716 			/* PCICFG is the 2nd BAR in BE2 */
5717 			addr = pci_iomap(pdev, BE2_chip(adapter) ? 1 : 0, 0);
5718 			if (!addr)
5719 				goto pci_map_err;
5720 			adapter->pcicfg = addr;
5721 			adapter->pcicfg_mapped = true;
5722 		} else {
5723 			adapter->pcicfg = adapter->db + SRIOV_VF_PCICFG_OFFSET;
5724 			adapter->pcicfg_mapped = false;
5725 		}
5726 	}
5727 
5728 	be_roce_map_pci_bars(adapter);
5729 	return 0;
5730 
5731 pci_map_err:
5732 	dev_err(&pdev->dev, "Error in mapping PCI BARs\n");
5733 	be_unmap_pci_bars(adapter);
5734 	return -ENOMEM;
5735 }
5736 
5737 static void be_drv_cleanup(struct be_adapter *adapter)
5738 {
5739 	struct be_dma_mem *mem = &adapter->mbox_mem_alloced;
5740 	struct device *dev = &adapter->pdev->dev;
5741 
5742 	if (mem->va)
5743 		dma_free_coherent(dev, mem->size, mem->va, mem->dma);
5744 
5745 	mem = &adapter->rx_filter;
5746 	if (mem->va)
5747 		dma_free_coherent(dev, mem->size, mem->va, mem->dma);
5748 
5749 	mem = &adapter->stats_cmd;
5750 	if (mem->va)
5751 		dma_free_coherent(dev, mem->size, mem->va, mem->dma);
5752 }
5753 
5754 /* Allocate and initialize various fields in be_adapter struct */
5755 static int be_drv_init(struct be_adapter *adapter)
5756 {
5757 	struct be_dma_mem *mbox_mem_alloc = &adapter->mbox_mem_alloced;
5758 	struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem;
5759 	struct be_dma_mem *rx_filter = &adapter->rx_filter;
5760 	struct be_dma_mem *stats_cmd = &adapter->stats_cmd;
5761 	struct device *dev = &adapter->pdev->dev;
5762 	int status = 0;
5763 
5764 	mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
5765 	mbox_mem_alloc->va = dma_alloc_coherent(dev, mbox_mem_alloc->size,
5766 						&mbox_mem_alloc->dma,
5767 						GFP_KERNEL);
5768 	if (!mbox_mem_alloc->va)
5769 		return -ENOMEM;
5770 
5771 	mbox_mem_align->size = sizeof(struct be_mcc_mailbox);
5772 	mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
5773 	mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
5774 
5775 	rx_filter->size = sizeof(struct be_cmd_req_rx_filter);
5776 	rx_filter->va = dma_alloc_coherent(dev, rx_filter->size,
5777 					   &rx_filter->dma, GFP_KERNEL);
5778 	if (!rx_filter->va) {
5779 		status = -ENOMEM;
5780 		goto free_mbox;
5781 	}
5782 
5783 	if (lancer_chip(adapter))
5784 		stats_cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
5785 	else if (BE2_chip(adapter))
5786 		stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
5787 	else if (BE3_chip(adapter))
5788 		stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
5789 	else
5790 		stats_cmd->size = sizeof(struct be_cmd_req_get_stats_v2);
5791 	stats_cmd->va = dma_alloc_coherent(dev, stats_cmd->size,
5792 					   &stats_cmd->dma, GFP_KERNEL);
5793 	if (!stats_cmd->va) {
5794 		status = -ENOMEM;
5795 		goto free_rx_filter;
5796 	}
5797 
5798 	mutex_init(&adapter->mbox_lock);
5799 	mutex_init(&adapter->mcc_lock);
5800 	mutex_init(&adapter->rx_filter_lock);
5801 	spin_lock_init(&adapter->mcc_cq_lock);
5802 	init_completion(&adapter->et_cmd_compl);
5803 
5804 	pci_save_state(adapter->pdev);
5805 
5806 	INIT_DELAYED_WORK(&adapter->work, be_worker);
5807 
5808 	adapter->error_recovery.recovery_state = ERR_RECOVERY_ST_NONE;
5809 	adapter->error_recovery.resched_delay = 0;
5810 	INIT_DELAYED_WORK(&adapter->error_recovery.err_detection_work,
5811 			  be_err_detection_task);
5812 
5813 	adapter->rx_fc = true;
5814 	adapter->tx_fc = true;
5815 
5816 	/* Must be a power of 2 or else MODULO will BUG_ON */
5817 	adapter->be_get_temp_freq = 64;
5818 
5819 	INIT_LIST_HEAD(&adapter->vxlan_port_list);
5820 	return 0;
5821 
5822 free_rx_filter:
5823 	dma_free_coherent(dev, rx_filter->size, rx_filter->va, rx_filter->dma);
5824 free_mbox:
5825 	dma_free_coherent(dev, mbox_mem_alloc->size, mbox_mem_alloc->va,
5826 			  mbox_mem_alloc->dma);
5827 	return status;
5828 }
5829 
5830 static void be_remove(struct pci_dev *pdev)
5831 {
5832 	struct be_adapter *adapter = pci_get_drvdata(pdev);
5833 
5834 	if (!adapter)
5835 		return;
5836 
5837 	be_roce_dev_remove(adapter);
5838 	be_intr_set(adapter, false);
5839 
5840 	be_cancel_err_detection(adapter);
5841 
5842 	unregister_netdev(adapter->netdev);
5843 
5844 	be_clear(adapter);
5845 
5846 	if (!pci_vfs_assigned(adapter->pdev))
5847 		be_cmd_reset_function(adapter);
5848 
5849 	/* tell fw we're done with firing cmds */
5850 	be_cmd_fw_clean(adapter);
5851 
5852 	be_unmap_pci_bars(adapter);
5853 	be_drv_cleanup(adapter);
5854 
5855 	pci_disable_pcie_error_reporting(pdev);
5856 
5857 	pci_release_regions(pdev);
5858 	pci_disable_device(pdev);
5859 
5860 	free_netdev(adapter->netdev);
5861 }
5862 
5863 static ssize_t be_hwmon_show_temp(struct device *dev,
5864 				  struct device_attribute *dev_attr,
5865 				  char *buf)
5866 {
5867 	struct be_adapter *adapter = dev_get_drvdata(dev);
5868 
5869 	/* Unit: millidegree Celsius */
5870 	if (adapter->hwmon_info.be_on_die_temp == BE_INVALID_DIE_TEMP)
5871 		return -EIO;
5872 	else
5873 		return sprintf(buf, "%u\n",
5874 			       adapter->hwmon_info.be_on_die_temp * 1000);
5875 }
5876 
5877 static SENSOR_DEVICE_ATTR(temp1_input, 0444,
5878 			  be_hwmon_show_temp, NULL, 1);
5879 
5880 static struct attribute *be_hwmon_attrs[] = {
5881 	&sensor_dev_attr_temp1_input.dev_attr.attr,
5882 	NULL
5883 };
5884 
5885 ATTRIBUTE_GROUPS(be_hwmon);
5886 
5887 static char *mc_name(struct be_adapter *adapter)
5888 {
5889 	char *str = "";	/* default */
5890 
5891 	switch (adapter->mc_type) {
5892 	case UMC:
5893 		str = "UMC";
5894 		break;
5895 	case FLEX10:
5896 		str = "FLEX10";
5897 		break;
5898 	case vNIC1:
5899 		str = "vNIC-1";
5900 		break;
5901 	case nPAR:
5902 		str = "nPAR";
5903 		break;
5904 	case UFP:
5905 		str = "UFP";
5906 		break;
5907 	case vNIC2:
5908 		str = "vNIC-2";
5909 		break;
5910 	default:
5911 		str = "";
5912 	}
5913 
5914 	return str;
5915 }
5916 
5917 static inline char *func_name(struct be_adapter *adapter)
5918 {
5919 	return be_physfn(adapter) ? "PF" : "VF";
5920 }
5921 
5922 static inline char *nic_name(struct pci_dev *pdev)
5923 {
5924 	switch (pdev->device) {
5925 	case OC_DEVICE_ID1:
5926 		return OC_NAME;
5927 	case OC_DEVICE_ID2:
5928 		return OC_NAME_BE;
5929 	case OC_DEVICE_ID3:
5930 	case OC_DEVICE_ID4:
5931 		return OC_NAME_LANCER;
5932 	case BE_DEVICE_ID2:
5933 		return BE3_NAME;
5934 	case OC_DEVICE_ID5:
5935 	case OC_DEVICE_ID6:
5936 		return OC_NAME_SH;
5937 	default:
5938 		return BE_NAME;
5939 	}
5940 }
5941 
5942 static int be_probe(struct pci_dev *pdev, const struct pci_device_id *pdev_id)
5943 {
5944 	struct be_adapter *adapter;
5945 	struct net_device *netdev;
5946 	int status = 0;
5947 
5948 	dev_info(&pdev->dev, "%s version is %s\n", DRV_NAME, DRV_VER);
5949 
5950 	status = pci_enable_device(pdev);
5951 	if (status)
5952 		goto do_none;
5953 
5954 	status = pci_request_regions(pdev, DRV_NAME);
5955 	if (status)
5956 		goto disable_dev;
5957 	pci_set_master(pdev);
5958 
5959 	netdev = alloc_etherdev_mqs(sizeof(*adapter), MAX_TX_QS, MAX_RX_QS);
5960 	if (!netdev) {
5961 		status = -ENOMEM;
5962 		goto rel_reg;
5963 	}
5964 	adapter = netdev_priv(netdev);
5965 	adapter->pdev = pdev;
5966 	pci_set_drvdata(pdev, adapter);
5967 	adapter->netdev = netdev;
5968 	SET_NETDEV_DEV(netdev, &pdev->dev);
5969 
5970 	status = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
5971 	if (!status) {
5972 		netdev->features |= NETIF_F_HIGHDMA;
5973 	} else {
5974 		status = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
5975 		if (status) {
5976 			dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
5977 			goto free_netdev;
5978 		}
5979 	}
5980 
5981 	status = pci_enable_pcie_error_reporting(pdev);
5982 	if (!status)
5983 		dev_info(&pdev->dev, "PCIe error reporting enabled\n");
5984 
5985 	status = be_map_pci_bars(adapter);
5986 	if (status)
5987 		goto free_netdev;
5988 
5989 	status = be_drv_init(adapter);
5990 	if (status)
5991 		goto unmap_bars;
5992 
5993 	status = be_setup(adapter);
5994 	if (status)
5995 		goto drv_cleanup;
5996 
5997 	be_netdev_init(netdev);
5998 	status = register_netdev(netdev);
5999 	if (status != 0)
6000 		goto unsetup;
6001 
6002 	be_roce_dev_add(adapter);
6003 
6004 	be_schedule_err_detection(adapter, ERR_DETECTION_DELAY);
6005 	adapter->error_recovery.probe_time = jiffies;
6006 
6007 	/* On Die temperature not supported for VF. */
6008 	if (be_physfn(adapter) && IS_ENABLED(CONFIG_BE2NET_HWMON)) {
6009 		adapter->hwmon_info.hwmon_dev =
6010 			devm_hwmon_device_register_with_groups(&pdev->dev,
6011 							       DRV_NAME,
6012 							       adapter,
6013 							       be_hwmon_groups);
6014 		adapter->hwmon_info.be_on_die_temp = BE_INVALID_DIE_TEMP;
6015 	}
6016 
6017 	dev_info(&pdev->dev, "%s: %s %s port %c\n", nic_name(pdev),
6018 		 func_name(adapter), mc_name(adapter), adapter->port_name);
6019 
6020 	return 0;
6021 
6022 unsetup:
6023 	be_clear(adapter);
6024 drv_cleanup:
6025 	be_drv_cleanup(adapter);
6026 unmap_bars:
6027 	be_unmap_pci_bars(adapter);
6028 free_netdev:
6029 	free_netdev(netdev);
6030 rel_reg:
6031 	pci_release_regions(pdev);
6032 disable_dev:
6033 	pci_disable_device(pdev);
6034 do_none:
6035 	dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
6036 	return status;
6037 }
6038 
6039 static int be_suspend(struct pci_dev *pdev, pm_message_t state)
6040 {
6041 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6042 
6043 	be_intr_set(adapter, false);
6044 	be_cancel_err_detection(adapter);
6045 
6046 	be_cleanup(adapter);
6047 
6048 	pci_save_state(pdev);
6049 	pci_disable_device(pdev);
6050 	pci_set_power_state(pdev, pci_choose_state(pdev, state));
6051 	return 0;
6052 }
6053 
6054 static int be_pci_resume(struct pci_dev *pdev)
6055 {
6056 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6057 	int status = 0;
6058 
6059 	status = pci_enable_device(pdev);
6060 	if (status)
6061 		return status;
6062 
6063 	pci_restore_state(pdev);
6064 
6065 	status = be_resume(adapter);
6066 	if (status)
6067 		return status;
6068 
6069 	be_schedule_err_detection(adapter, ERR_DETECTION_DELAY);
6070 
6071 	return 0;
6072 }
6073 
6074 /*
6075  * An FLR will stop BE from DMAing any data.
6076  */
6077 static void be_shutdown(struct pci_dev *pdev)
6078 {
6079 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6080 
6081 	if (!adapter)
6082 		return;
6083 
6084 	be_roce_dev_shutdown(adapter);
6085 	cancel_delayed_work_sync(&adapter->work);
6086 	be_cancel_err_detection(adapter);
6087 
6088 	netif_device_detach(adapter->netdev);
6089 
6090 	be_cmd_reset_function(adapter);
6091 
6092 	pci_disable_device(pdev);
6093 }
6094 
6095 static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
6096 					    pci_channel_state_t state)
6097 {
6098 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6099 
6100 	dev_err(&adapter->pdev->dev, "EEH error detected\n");
6101 
6102 	be_roce_dev_remove(adapter);
6103 
6104 	if (!be_check_error(adapter, BE_ERROR_EEH)) {
6105 		be_set_error(adapter, BE_ERROR_EEH);
6106 
6107 		be_cancel_err_detection(adapter);
6108 
6109 		be_cleanup(adapter);
6110 	}
6111 
6112 	if (state == pci_channel_io_perm_failure)
6113 		return PCI_ERS_RESULT_DISCONNECT;
6114 
6115 	pci_disable_device(pdev);
6116 
6117 	/* The error could cause the FW to trigger a flash debug dump.
6118 	 * Resetting the card while flash dump is in progress
6119 	 * can cause it not to recover; wait for it to finish.
6120 	 * Wait only for first function as it is needed only once per
6121 	 * adapter.
6122 	 */
6123 	if (pdev->devfn == 0)
6124 		ssleep(30);
6125 
6126 	return PCI_ERS_RESULT_NEED_RESET;
6127 }
6128 
6129 static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev)
6130 {
6131 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6132 	int status;
6133 
6134 	dev_info(&adapter->pdev->dev, "EEH reset\n");
6135 
6136 	status = pci_enable_device(pdev);
6137 	if (status)
6138 		return PCI_ERS_RESULT_DISCONNECT;
6139 
6140 	pci_set_master(pdev);
6141 	pci_restore_state(pdev);
6142 
6143 	/* Check if card is ok and fw is ready */
6144 	dev_info(&adapter->pdev->dev,
6145 		 "Waiting for FW to be ready after EEH reset\n");
6146 	status = be_fw_wait_ready(adapter);
6147 	if (status)
6148 		return PCI_ERS_RESULT_DISCONNECT;
6149 
6150 	be_clear_error(adapter, BE_CLEAR_ALL);
6151 	return PCI_ERS_RESULT_RECOVERED;
6152 }
6153 
6154 static void be_eeh_resume(struct pci_dev *pdev)
6155 {
6156 	int status = 0;
6157 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6158 
6159 	dev_info(&adapter->pdev->dev, "EEH resume\n");
6160 
6161 	pci_save_state(pdev);
6162 
6163 	status = be_resume(adapter);
6164 	if (status)
6165 		goto err;
6166 
6167 	be_roce_dev_add(adapter);
6168 
6169 	be_schedule_err_detection(adapter, ERR_DETECTION_DELAY);
6170 	return;
6171 err:
6172 	dev_err(&adapter->pdev->dev, "EEH resume failed\n");
6173 }
6174 
6175 static int be_pci_sriov_configure(struct pci_dev *pdev, int num_vfs)
6176 {
6177 	struct be_adapter *adapter = pci_get_drvdata(pdev);
6178 	struct be_resources vft_res = {0};
6179 	int status;
6180 
6181 	if (!num_vfs)
6182 		be_vf_clear(adapter);
6183 
6184 	adapter->num_vfs = num_vfs;
6185 
6186 	if (adapter->num_vfs == 0 && pci_vfs_assigned(pdev)) {
6187 		dev_warn(&pdev->dev,
6188 			 "Cannot disable VFs while they are assigned\n");
6189 		return -EBUSY;
6190 	}
6191 
6192 	/* When the HW is in SRIOV capable configuration, the PF-pool resources
6193 	 * are equally distributed across the max-number of VFs. The user may
6194 	 * request only a subset of the max-vfs to be enabled.
6195 	 * Based on num_vfs, redistribute the resources across num_vfs so that
6196 	 * each VF will have access to more number of resources.
6197 	 * This facility is not available in BE3 FW.
6198 	 * Also, this is done by FW in Lancer chip.
6199 	 */
6200 	if (skyhawk_chip(adapter) && !pci_num_vf(pdev)) {
6201 		be_calculate_vf_res(adapter, adapter->num_vfs,
6202 				    &vft_res);
6203 		status = be_cmd_set_sriov_config(adapter, adapter->pool_res,
6204 						 adapter->num_vfs, &vft_res);
6205 		if (status)
6206 			dev_err(&pdev->dev,
6207 				"Failed to optimize SR-IOV resources\n");
6208 	}
6209 
6210 	status = be_get_resources(adapter);
6211 	if (status)
6212 		return be_cmd_status(status);
6213 
6214 	/* Updating real_num_tx/rx_queues() requires rtnl_lock() */
6215 	rtnl_lock();
6216 	status = be_update_queues(adapter);
6217 	rtnl_unlock();
6218 	if (status)
6219 		return be_cmd_status(status);
6220 
6221 	if (adapter->num_vfs)
6222 		status = be_vf_setup(adapter);
6223 
6224 	if (!status)
6225 		return adapter->num_vfs;
6226 
6227 	return 0;
6228 }
6229 
6230 static const struct pci_error_handlers be_eeh_handlers = {
6231 	.error_detected = be_eeh_err_detected,
6232 	.slot_reset = be_eeh_reset,
6233 	.resume = be_eeh_resume,
6234 };
6235 
6236 static struct pci_driver be_driver = {
6237 	.name = DRV_NAME,
6238 	.id_table = be_dev_ids,
6239 	.probe = be_probe,
6240 	.remove = be_remove,
6241 	.suspend = be_suspend,
6242 	.resume = be_pci_resume,
6243 	.shutdown = be_shutdown,
6244 	.sriov_configure = be_pci_sriov_configure,
6245 	.err_handler = &be_eeh_handlers
6246 };
6247 
6248 static int __init be_init_module(void)
6249 {
6250 	int status;
6251 
6252 	if (rx_frag_size != 8192 && rx_frag_size != 4096 &&
6253 	    rx_frag_size != 2048) {
6254 		printk(KERN_WARNING DRV_NAME
6255 			" : Module param rx_frag_size must be 2048/4096/8192."
6256 			" Using 2048\n");
6257 		rx_frag_size = 2048;
6258 	}
6259 
6260 	if (num_vfs > 0) {
6261 		pr_info(DRV_NAME " : Module param num_vfs is obsolete.");
6262 		pr_info(DRV_NAME " : Use sysfs method to enable VFs\n");
6263 	}
6264 
6265 	be_wq = create_singlethread_workqueue("be_wq");
6266 	if (!be_wq) {
6267 		pr_warn(DRV_NAME "workqueue creation failed\n");
6268 		return -1;
6269 	}
6270 
6271 	be_err_recovery_workq =
6272 		create_singlethread_workqueue("be_err_recover");
6273 	if (!be_err_recovery_workq)
6274 		pr_warn(DRV_NAME "Could not create error recovery workqueue\n");
6275 
6276 	status = pci_register_driver(&be_driver);
6277 	if (status) {
6278 		destroy_workqueue(be_wq);
6279 		be_destroy_err_recovery_workq();
6280 	}
6281 	return status;
6282 }
6283 module_init(be_init_module);
6284 
6285 static void __exit be_exit_module(void)
6286 {
6287 	pci_unregister_driver(&be_driver);
6288 
6289 	be_destroy_err_recovery_workq();
6290 
6291 	if (be_wq)
6292 		destroy_workqueue(be_wq);
6293 }
6294 module_exit(be_exit_module);
6295