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