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