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