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