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