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