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