xref: /linux/drivers/net/ethernet/emulex/benet/be_main.c (revision f2ee442115c9b6219083c019939a9cc0c9abb2f8)
1 /*
2  * Copyright (C) 2005 - 2011 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 
24 MODULE_VERSION(DRV_VER);
25 MODULE_DEVICE_TABLE(pci, be_dev_ids);
26 MODULE_DESCRIPTION(DRV_DESC " " DRV_VER);
27 MODULE_AUTHOR("ServerEngines Corporation");
28 MODULE_LICENSE("GPL");
29 
30 static ushort rx_frag_size = 2048;
31 static unsigned int num_vfs;
32 module_param(rx_frag_size, ushort, S_IRUGO);
33 module_param(num_vfs, uint, S_IRUGO);
34 MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
35 MODULE_PARM_DESC(num_vfs, "Number of PCI VFs to initialize");
36 
37 static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = {
38 	{ PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
39 	{ PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID2) },
40 	{ PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
41 	{ PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
42 	{ PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID3)},
43 	{ PCI_DEVICE(EMULEX_VENDOR_ID, OC_DEVICE_ID4)},
44 	{ 0 }
45 };
46 MODULE_DEVICE_TABLE(pci, be_dev_ids);
47 /* UE Status Low CSR */
48 static const char * const ue_status_low_desc[] = {
49 	"CEV",
50 	"CTX",
51 	"DBUF",
52 	"ERX",
53 	"Host",
54 	"MPU",
55 	"NDMA",
56 	"PTC ",
57 	"RDMA ",
58 	"RXF ",
59 	"RXIPS ",
60 	"RXULP0 ",
61 	"RXULP1 ",
62 	"RXULP2 ",
63 	"TIM ",
64 	"TPOST ",
65 	"TPRE ",
66 	"TXIPS ",
67 	"TXULP0 ",
68 	"TXULP1 ",
69 	"UC ",
70 	"WDMA ",
71 	"TXULP2 ",
72 	"HOST1 ",
73 	"P0_OB_LINK ",
74 	"P1_OB_LINK ",
75 	"HOST_GPIO ",
76 	"MBOX ",
77 	"AXGMAC0",
78 	"AXGMAC1",
79 	"JTAG",
80 	"MPU_INTPEND"
81 };
82 /* UE Status High CSR */
83 static const char * const ue_status_hi_desc[] = {
84 	"LPCMEMHOST",
85 	"MGMT_MAC",
86 	"PCS0ONLINE",
87 	"MPU_IRAM",
88 	"PCS1ONLINE",
89 	"PCTL0",
90 	"PCTL1",
91 	"PMEM",
92 	"RR",
93 	"TXPB",
94 	"RXPP",
95 	"XAUI",
96 	"TXP",
97 	"ARM",
98 	"IPC",
99 	"HOST2",
100 	"HOST3",
101 	"HOST4",
102 	"HOST5",
103 	"HOST6",
104 	"HOST7",
105 	"HOST8",
106 	"HOST9",
107 	"NETC",
108 	"Unknown",
109 	"Unknown",
110 	"Unknown",
111 	"Unknown",
112 	"Unknown",
113 	"Unknown",
114 	"Unknown",
115 	"Unknown"
116 };
117 
118 /* Is BE in a multi-channel mode */
119 static inline bool be_is_mc(struct be_adapter *adapter) {
120 	return (adapter->function_mode & FLEX10_MODE ||
121 		adapter->function_mode & VNIC_MODE ||
122 		adapter->function_mode & UMC_ENABLED);
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 	if (mem->va)
129 		dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
130 				  mem->dma);
131 }
132 
133 static int be_queue_alloc(struct be_adapter *adapter, struct be_queue_info *q,
134 		u16 len, u16 entry_size)
135 {
136 	struct be_dma_mem *mem = &q->dma_mem;
137 
138 	memset(q, 0, sizeof(*q));
139 	q->len = len;
140 	q->entry_size = entry_size;
141 	mem->size = len * entry_size;
142 	mem->va = dma_alloc_coherent(&adapter->pdev->dev, mem->size, &mem->dma,
143 				     GFP_KERNEL);
144 	if (!mem->va)
145 		return -1;
146 	memset(mem->va, 0, mem->size);
147 	return 0;
148 }
149 
150 static void be_intr_set(struct be_adapter *adapter, bool enable)
151 {
152 	u32 reg, enabled;
153 
154 	if (adapter->eeh_err)
155 		return;
156 
157 	pci_read_config_dword(adapter->pdev, PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET,
158 				&reg);
159 	enabled = reg & MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
160 
161 	if (!enabled && enable)
162 		reg |= MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
163 	else if (enabled && !enable)
164 		reg &= ~MEMBAR_CTRL_INT_CTRL_HOSTINTR_MASK;
165 	else
166 		return;
167 
168 	pci_write_config_dword(adapter->pdev,
169 			PCICFG_MEMBAR_CTRL_INT_CTRL_OFFSET, reg);
170 }
171 
172 static void be_rxq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
173 {
174 	u32 val = 0;
175 	val |= qid & DB_RQ_RING_ID_MASK;
176 	val |= posted << DB_RQ_NUM_POSTED_SHIFT;
177 
178 	wmb();
179 	iowrite32(val, adapter->db + DB_RQ_OFFSET);
180 }
181 
182 static void be_txq_notify(struct be_adapter *adapter, u16 qid, u16 posted)
183 {
184 	u32 val = 0;
185 	val |= qid & DB_TXULP_RING_ID_MASK;
186 	val |= (posted & DB_TXULP_NUM_POSTED_MASK) << DB_TXULP_NUM_POSTED_SHIFT;
187 
188 	wmb();
189 	iowrite32(val, adapter->db + DB_TXULP1_OFFSET);
190 }
191 
192 static void be_eq_notify(struct be_adapter *adapter, u16 qid,
193 		bool arm, bool clear_int, u16 num_popped)
194 {
195 	u32 val = 0;
196 	val |= qid & DB_EQ_RING_ID_MASK;
197 	val |= ((qid & DB_EQ_RING_ID_EXT_MASK) <<
198 			DB_EQ_RING_ID_EXT_MASK_SHIFT);
199 
200 	if (adapter->eeh_err)
201 		return;
202 
203 	if (arm)
204 		val |= 1 << DB_EQ_REARM_SHIFT;
205 	if (clear_int)
206 		val |= 1 << DB_EQ_CLR_SHIFT;
207 	val |= 1 << DB_EQ_EVNT_SHIFT;
208 	val |= num_popped << DB_EQ_NUM_POPPED_SHIFT;
209 	iowrite32(val, adapter->db + DB_EQ_OFFSET);
210 }
211 
212 void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, u16 num_popped)
213 {
214 	u32 val = 0;
215 	val |= qid & DB_CQ_RING_ID_MASK;
216 	val |= ((qid & DB_CQ_RING_ID_EXT_MASK) <<
217 			DB_CQ_RING_ID_EXT_MASK_SHIFT);
218 
219 	if (adapter->eeh_err)
220 		return;
221 
222 	if (arm)
223 		val |= 1 << DB_CQ_REARM_SHIFT;
224 	val |= num_popped << DB_CQ_NUM_POPPED_SHIFT;
225 	iowrite32(val, adapter->db + DB_CQ_OFFSET);
226 }
227 
228 static int be_mac_addr_set(struct net_device *netdev, void *p)
229 {
230 	struct be_adapter *adapter = netdev_priv(netdev);
231 	struct sockaddr *addr = p;
232 	int status = 0;
233 	u8 current_mac[ETH_ALEN];
234 	u32 pmac_id = adapter->pmac_id;
235 
236 	if (!is_valid_ether_addr(addr->sa_data))
237 		return -EADDRNOTAVAIL;
238 
239 	status = be_cmd_mac_addr_query(adapter, current_mac,
240 			MAC_ADDRESS_TYPE_NETWORK, false, adapter->if_handle);
241 	if (status)
242 		goto err;
243 
244 	if (memcmp(addr->sa_data, current_mac, ETH_ALEN)) {
245 		status = be_cmd_pmac_add(adapter, (u8 *)addr->sa_data,
246 				adapter->if_handle, &adapter->pmac_id, 0);
247 		if (status)
248 			goto err;
249 
250 		be_cmd_pmac_del(adapter, adapter->if_handle, pmac_id, 0);
251 	}
252 	memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
253 	return 0;
254 err:
255 	dev_err(&adapter->pdev->dev, "MAC %pM set Failed\n", addr->sa_data);
256 	return status;
257 }
258 
259 static void populate_be2_stats(struct be_adapter *adapter)
260 {
261 	struct be_hw_stats_v0 *hw_stats = hw_stats_from_cmd(adapter);
262 	struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
263 	struct be_rxf_stats_v0 *rxf_stats = &hw_stats->rxf;
264 	struct be_port_rxf_stats_v0 *port_stats =
265 					&rxf_stats->port[adapter->port_num];
266 	struct be_drv_stats *drvs = &adapter->drv_stats;
267 
268 	be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
269 	drvs->rx_pause_frames = port_stats->rx_pause_frames;
270 	drvs->rx_crc_errors = port_stats->rx_crc_errors;
271 	drvs->rx_control_frames = port_stats->rx_control_frames;
272 	drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
273 	drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
274 	drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
275 	drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
276 	drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
277 	drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
278 	drvs->rxpp_fifo_overflow_drop = port_stats->rx_fifo_overflow;
279 	drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
280 	drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
281 	drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
282 	drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
283 	drvs->rx_input_fifo_overflow_drop = port_stats->rx_input_fifo_overflow;
284 	drvs->rx_dropped_header_too_small =
285 		port_stats->rx_dropped_header_too_small;
286 	drvs->rx_address_match_errors = port_stats->rx_address_match_errors;
287 	drvs->rx_alignment_symbol_errors =
288 		port_stats->rx_alignment_symbol_errors;
289 
290 	drvs->tx_pauseframes = port_stats->tx_pauseframes;
291 	drvs->tx_controlframes = port_stats->tx_controlframes;
292 
293 	if (adapter->port_num)
294 		drvs->jabber_events = rxf_stats->port1_jabber_events;
295 	else
296 		drvs->jabber_events = rxf_stats->port0_jabber_events;
297 	drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
298 	drvs->rx_drops_no_txpb = rxf_stats->rx_drops_no_txpb;
299 	drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
300 	drvs->rx_drops_invalid_ring = rxf_stats->rx_drops_invalid_ring;
301 	drvs->forwarded_packets = rxf_stats->forwarded_packets;
302 	drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
303 	drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
304 	drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
305 	adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
306 }
307 
308 static void populate_be3_stats(struct be_adapter *adapter)
309 {
310 	struct be_hw_stats_v1 *hw_stats = hw_stats_from_cmd(adapter);
311 	struct be_pmem_stats *pmem_sts = &hw_stats->pmem;
312 	struct be_rxf_stats_v1 *rxf_stats = &hw_stats->rxf;
313 	struct be_port_rxf_stats_v1 *port_stats =
314 					&rxf_stats->port[adapter->port_num];
315 	struct be_drv_stats *drvs = &adapter->drv_stats;
316 
317 	be_dws_le_to_cpu(hw_stats, sizeof(*hw_stats));
318 	drvs->rx_pause_frames = port_stats->rx_pause_frames;
319 	drvs->rx_crc_errors = port_stats->rx_crc_errors;
320 	drvs->rx_control_frames = port_stats->rx_control_frames;
321 	drvs->rx_in_range_errors = port_stats->rx_in_range_errors;
322 	drvs->rx_frame_too_long = port_stats->rx_frame_too_long;
323 	drvs->rx_dropped_runt = port_stats->rx_dropped_runt;
324 	drvs->rx_ip_checksum_errs = port_stats->rx_ip_checksum_errs;
325 	drvs->rx_tcp_checksum_errs = port_stats->rx_tcp_checksum_errs;
326 	drvs->rx_udp_checksum_errs = port_stats->rx_udp_checksum_errs;
327 	drvs->rx_dropped_tcp_length = port_stats->rx_dropped_tcp_length;
328 	drvs->rx_dropped_too_small = port_stats->rx_dropped_too_small;
329 	drvs->rx_dropped_too_short = port_stats->rx_dropped_too_short;
330 	drvs->rx_out_range_errors = port_stats->rx_out_range_errors;
331 	drvs->rx_dropped_header_too_small =
332 		port_stats->rx_dropped_header_too_small;
333 	drvs->rx_input_fifo_overflow_drop =
334 		port_stats->rx_input_fifo_overflow_drop;
335 	drvs->rx_address_match_errors = port_stats->rx_address_match_errors;
336 	drvs->rx_alignment_symbol_errors =
337 		port_stats->rx_alignment_symbol_errors;
338 	drvs->rxpp_fifo_overflow_drop = port_stats->rxpp_fifo_overflow_drop;
339 	drvs->tx_pauseframes = port_stats->tx_pauseframes;
340 	drvs->tx_controlframes = port_stats->tx_controlframes;
341 	drvs->jabber_events = port_stats->jabber_events;
342 	drvs->rx_drops_no_pbuf = rxf_stats->rx_drops_no_pbuf;
343 	drvs->rx_drops_no_txpb = rxf_stats->rx_drops_no_txpb;
344 	drvs->rx_drops_no_erx_descr = rxf_stats->rx_drops_no_erx_descr;
345 	drvs->rx_drops_invalid_ring = rxf_stats->rx_drops_invalid_ring;
346 	drvs->forwarded_packets = rxf_stats->forwarded_packets;
347 	drvs->rx_drops_mtu = rxf_stats->rx_drops_mtu;
348 	drvs->rx_drops_no_tpre_descr = rxf_stats->rx_drops_no_tpre_descr;
349 	drvs->rx_drops_too_many_frags = rxf_stats->rx_drops_too_many_frags;
350 	adapter->drv_stats.eth_red_drops = pmem_sts->eth_red_drops;
351 }
352 
353 static void populate_lancer_stats(struct be_adapter *adapter)
354 {
355 
356 	struct be_drv_stats *drvs = &adapter->drv_stats;
357 	struct lancer_pport_stats *pport_stats =
358 					pport_stats_from_cmd(adapter);
359 
360 	be_dws_le_to_cpu(pport_stats, sizeof(*pport_stats));
361 	drvs->rx_pause_frames = pport_stats->rx_pause_frames_lo;
362 	drvs->rx_crc_errors = pport_stats->rx_crc_errors_lo;
363 	drvs->rx_control_frames = pport_stats->rx_control_frames_lo;
364 	drvs->rx_in_range_errors = pport_stats->rx_in_range_errors;
365 	drvs->rx_frame_too_long = pport_stats->rx_frames_too_long_lo;
366 	drvs->rx_dropped_runt = pport_stats->rx_dropped_runt;
367 	drvs->rx_ip_checksum_errs = pport_stats->rx_ip_checksum_errors;
368 	drvs->rx_tcp_checksum_errs = pport_stats->rx_tcp_checksum_errors;
369 	drvs->rx_udp_checksum_errs = pport_stats->rx_udp_checksum_errors;
370 	drvs->rx_dropped_tcp_length =
371 				pport_stats->rx_dropped_invalid_tcp_length;
372 	drvs->rx_dropped_too_small = pport_stats->rx_dropped_too_small;
373 	drvs->rx_dropped_too_short = pport_stats->rx_dropped_too_short;
374 	drvs->rx_out_range_errors = pport_stats->rx_out_of_range_errors;
375 	drvs->rx_dropped_header_too_small =
376 				pport_stats->rx_dropped_header_too_small;
377 	drvs->rx_input_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
378 	drvs->rx_address_match_errors = pport_stats->rx_address_match_errors;
379 	drvs->rx_alignment_symbol_errors = pport_stats->rx_symbol_errors_lo;
380 	drvs->rxpp_fifo_overflow_drop = pport_stats->rx_fifo_overflow;
381 	drvs->tx_pauseframes = pport_stats->tx_pause_frames_lo;
382 	drvs->tx_controlframes = pport_stats->tx_control_frames_lo;
383 	drvs->jabber_events = pport_stats->rx_jabbers;
384 	drvs->rx_drops_invalid_ring = pport_stats->rx_drops_invalid_queue;
385 	drvs->forwarded_packets = pport_stats->num_forwards_lo;
386 	drvs->rx_drops_mtu = pport_stats->rx_drops_mtu_lo;
387 	drvs->rx_drops_too_many_frags =
388 				pport_stats->rx_drops_too_many_frags_lo;
389 }
390 
391 static void accumulate_16bit_val(u32 *acc, u16 val)
392 {
393 #define lo(x)			(x & 0xFFFF)
394 #define hi(x)			(x & 0xFFFF0000)
395 	bool wrapped = val < lo(*acc);
396 	u32 newacc = hi(*acc) + val;
397 
398 	if (wrapped)
399 		newacc += 65536;
400 	ACCESS_ONCE(*acc) = newacc;
401 }
402 
403 void be_parse_stats(struct be_adapter *adapter)
404 {
405 	struct be_erx_stats_v1 *erx = be_erx_stats_from_cmd(adapter);
406 	struct be_rx_obj *rxo;
407 	int i;
408 
409 	if (adapter->generation == BE_GEN3) {
410 		if (lancer_chip(adapter))
411 			populate_lancer_stats(adapter);
412 		 else
413 			populate_be3_stats(adapter);
414 	} else {
415 		populate_be2_stats(adapter);
416 	}
417 
418 	/* as erx_v1 is longer than v0, ok to use v1 defn for v0 access */
419 	for_all_rx_queues(adapter, rxo, i) {
420 		/* below erx HW counter can actually wrap around after
421 		 * 65535. Driver accumulates a 32-bit value
422 		 */
423 		accumulate_16bit_val(&rx_stats(rxo)->rx_drops_no_frags,
424 				(u16)erx->rx_drops_no_fragments[rxo->q.id]);
425 	}
426 }
427 
428 static struct rtnl_link_stats64 *be_get_stats64(struct net_device *netdev,
429 					struct rtnl_link_stats64 *stats)
430 {
431 	struct be_adapter *adapter = netdev_priv(netdev);
432 	struct be_drv_stats *drvs = &adapter->drv_stats;
433 	struct be_rx_obj *rxo;
434 	struct be_tx_obj *txo;
435 	u64 pkts, bytes;
436 	unsigned int start;
437 	int i;
438 
439 	for_all_rx_queues(adapter, rxo, i) {
440 		const struct be_rx_stats *rx_stats = rx_stats(rxo);
441 		do {
442 			start = u64_stats_fetch_begin_bh(&rx_stats->sync);
443 			pkts = rx_stats(rxo)->rx_pkts;
444 			bytes = rx_stats(rxo)->rx_bytes;
445 		} while (u64_stats_fetch_retry_bh(&rx_stats->sync, start));
446 		stats->rx_packets += pkts;
447 		stats->rx_bytes += bytes;
448 		stats->multicast += rx_stats(rxo)->rx_mcast_pkts;
449 		stats->rx_dropped += rx_stats(rxo)->rx_drops_no_skbs +
450 					rx_stats(rxo)->rx_drops_no_frags;
451 	}
452 
453 	for_all_tx_queues(adapter, txo, i) {
454 		const struct be_tx_stats *tx_stats = tx_stats(txo);
455 		do {
456 			start = u64_stats_fetch_begin_bh(&tx_stats->sync);
457 			pkts = tx_stats(txo)->tx_pkts;
458 			bytes = tx_stats(txo)->tx_bytes;
459 		} while (u64_stats_fetch_retry_bh(&tx_stats->sync, start));
460 		stats->tx_packets += pkts;
461 		stats->tx_bytes += bytes;
462 	}
463 
464 	/* bad pkts received */
465 	stats->rx_errors = drvs->rx_crc_errors +
466 		drvs->rx_alignment_symbol_errors +
467 		drvs->rx_in_range_errors +
468 		drvs->rx_out_range_errors +
469 		drvs->rx_frame_too_long +
470 		drvs->rx_dropped_too_small +
471 		drvs->rx_dropped_too_short +
472 		drvs->rx_dropped_header_too_small +
473 		drvs->rx_dropped_tcp_length +
474 		drvs->rx_dropped_runt;
475 
476 	/* detailed rx errors */
477 	stats->rx_length_errors = drvs->rx_in_range_errors +
478 		drvs->rx_out_range_errors +
479 		drvs->rx_frame_too_long;
480 
481 	stats->rx_crc_errors = drvs->rx_crc_errors;
482 
483 	/* frame alignment errors */
484 	stats->rx_frame_errors = drvs->rx_alignment_symbol_errors;
485 
486 	/* receiver fifo overrun */
487 	/* drops_no_pbuf is no per i/f, it's per BE card */
488 	stats->rx_fifo_errors = drvs->rxpp_fifo_overflow_drop +
489 				drvs->rx_input_fifo_overflow_drop +
490 				drvs->rx_drops_no_pbuf;
491 	return stats;
492 }
493 
494 void be_link_status_update(struct be_adapter *adapter, u32 link_status)
495 {
496 	struct net_device *netdev = adapter->netdev;
497 
498 	/* when link status changes, link speed must be re-queried from card */
499 	adapter->link_speed = -1;
500 	if ((link_status & LINK_STATUS_MASK) == LINK_UP) {
501 		netif_carrier_on(netdev);
502 		dev_info(&adapter->pdev->dev, "%s: Link up\n", netdev->name);
503 	} else {
504 		netif_carrier_off(netdev);
505 		dev_info(&adapter->pdev->dev, "%s: Link down\n", netdev->name);
506 	}
507 }
508 
509 static void be_tx_stats_update(struct be_tx_obj *txo,
510 			u32 wrb_cnt, u32 copied, u32 gso_segs, bool stopped)
511 {
512 	struct be_tx_stats *stats = tx_stats(txo);
513 
514 	u64_stats_update_begin(&stats->sync);
515 	stats->tx_reqs++;
516 	stats->tx_wrbs += wrb_cnt;
517 	stats->tx_bytes += copied;
518 	stats->tx_pkts += (gso_segs ? gso_segs : 1);
519 	if (stopped)
520 		stats->tx_stops++;
521 	u64_stats_update_end(&stats->sync);
522 }
523 
524 /* Determine number of WRB entries needed to xmit data in an skb */
525 static u32 wrb_cnt_for_skb(struct be_adapter *adapter, struct sk_buff *skb,
526 								bool *dummy)
527 {
528 	int cnt = (skb->len > skb->data_len);
529 
530 	cnt += skb_shinfo(skb)->nr_frags;
531 
532 	/* to account for hdr wrb */
533 	cnt++;
534 	if (lancer_chip(adapter) || !(cnt & 1)) {
535 		*dummy = false;
536 	} else {
537 		/* add a dummy to make it an even num */
538 		cnt++;
539 		*dummy = true;
540 	}
541 	BUG_ON(cnt > BE_MAX_TX_FRAG_COUNT);
542 	return cnt;
543 }
544 
545 static inline void wrb_fill(struct be_eth_wrb *wrb, u64 addr, int len)
546 {
547 	wrb->frag_pa_hi = upper_32_bits(addr);
548 	wrb->frag_pa_lo = addr & 0xFFFFFFFF;
549 	wrb->frag_len = len & ETH_WRB_FRAG_LEN_MASK;
550 }
551 
552 static void wrb_fill_hdr(struct be_adapter *adapter, struct be_eth_hdr_wrb *hdr,
553 		struct sk_buff *skb, u32 wrb_cnt, u32 len)
554 {
555 	u8 vlan_prio = 0;
556 	u16 vlan_tag = 0;
557 
558 	memset(hdr, 0, sizeof(*hdr));
559 
560 	AMAP_SET_BITS(struct amap_eth_hdr_wrb, crc, hdr, 1);
561 
562 	if (skb_is_gso(skb)) {
563 		AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso, hdr, 1);
564 		AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso_mss,
565 			hdr, skb_shinfo(skb)->gso_size);
566 		if (skb_is_gso_v6(skb) && !lancer_chip(adapter))
567 			AMAP_SET_BITS(struct amap_eth_hdr_wrb, lso6, hdr, 1);
568 		if (lancer_chip(adapter) && adapter->sli_family  ==
569 							LANCER_A0_SLI_FAMILY) {
570 			AMAP_SET_BITS(struct amap_eth_hdr_wrb, ipcs, hdr, 1);
571 			if (is_tcp_pkt(skb))
572 				AMAP_SET_BITS(struct amap_eth_hdr_wrb,
573 								tcpcs, hdr, 1);
574 			else if (is_udp_pkt(skb))
575 				AMAP_SET_BITS(struct amap_eth_hdr_wrb,
576 								udpcs, hdr, 1);
577 		}
578 	} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
579 		if (is_tcp_pkt(skb))
580 			AMAP_SET_BITS(struct amap_eth_hdr_wrb, tcpcs, hdr, 1);
581 		else if (is_udp_pkt(skb))
582 			AMAP_SET_BITS(struct amap_eth_hdr_wrb, udpcs, hdr, 1);
583 	}
584 
585 	if (vlan_tx_tag_present(skb)) {
586 		AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan, hdr, 1);
587 		vlan_tag = vlan_tx_tag_get(skb);
588 		vlan_prio = (vlan_tag & VLAN_PRIO_MASK) >> VLAN_PRIO_SHIFT;
589 		/* If vlan priority provided by OS is NOT in available bmap */
590 		if (!(adapter->vlan_prio_bmap & (1 << vlan_prio)))
591 			vlan_tag = (vlan_tag & ~VLAN_PRIO_MASK) |
592 					adapter->recommended_prio;
593 		AMAP_SET_BITS(struct amap_eth_hdr_wrb, vlan_tag, hdr, vlan_tag);
594 	}
595 
596 	AMAP_SET_BITS(struct amap_eth_hdr_wrb, event, hdr, 1);
597 	AMAP_SET_BITS(struct amap_eth_hdr_wrb, complete, hdr, 1);
598 	AMAP_SET_BITS(struct amap_eth_hdr_wrb, num_wrb, hdr, wrb_cnt);
599 	AMAP_SET_BITS(struct amap_eth_hdr_wrb, len, hdr, len);
600 }
601 
602 static void unmap_tx_frag(struct device *dev, struct be_eth_wrb *wrb,
603 		bool unmap_single)
604 {
605 	dma_addr_t dma;
606 
607 	be_dws_le_to_cpu(wrb, sizeof(*wrb));
608 
609 	dma = (u64)wrb->frag_pa_hi << 32 | (u64)wrb->frag_pa_lo;
610 	if (wrb->frag_len) {
611 		if (unmap_single)
612 			dma_unmap_single(dev, dma, wrb->frag_len,
613 					 DMA_TO_DEVICE);
614 		else
615 			dma_unmap_page(dev, dma, wrb->frag_len, DMA_TO_DEVICE);
616 	}
617 }
618 
619 static int make_tx_wrbs(struct be_adapter *adapter, struct be_queue_info *txq,
620 		struct sk_buff *skb, u32 wrb_cnt, bool dummy_wrb)
621 {
622 	dma_addr_t busaddr;
623 	int i, copied = 0;
624 	struct device *dev = &adapter->pdev->dev;
625 	struct sk_buff *first_skb = skb;
626 	struct be_eth_wrb *wrb;
627 	struct be_eth_hdr_wrb *hdr;
628 	bool map_single = false;
629 	u16 map_head;
630 
631 	hdr = queue_head_node(txq);
632 	queue_head_inc(txq);
633 	map_head = txq->head;
634 
635 	if (skb->len > skb->data_len) {
636 		int len = skb_headlen(skb);
637 		busaddr = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE);
638 		if (dma_mapping_error(dev, busaddr))
639 			goto dma_err;
640 		map_single = true;
641 		wrb = queue_head_node(txq);
642 		wrb_fill(wrb, busaddr, len);
643 		be_dws_cpu_to_le(wrb, sizeof(*wrb));
644 		queue_head_inc(txq);
645 		copied += len;
646 	}
647 
648 	for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
649 		const struct skb_frag_struct *frag =
650 			&skb_shinfo(skb)->frags[i];
651 		busaddr = skb_frag_dma_map(dev, frag, 0,
652 					   skb_frag_size(frag), DMA_TO_DEVICE);
653 		if (dma_mapping_error(dev, busaddr))
654 			goto dma_err;
655 		wrb = queue_head_node(txq);
656 		wrb_fill(wrb, busaddr, skb_frag_size(frag));
657 		be_dws_cpu_to_le(wrb, sizeof(*wrb));
658 		queue_head_inc(txq);
659 		copied += skb_frag_size(frag);
660 	}
661 
662 	if (dummy_wrb) {
663 		wrb = queue_head_node(txq);
664 		wrb_fill(wrb, 0, 0);
665 		be_dws_cpu_to_le(wrb, sizeof(*wrb));
666 		queue_head_inc(txq);
667 	}
668 
669 	wrb_fill_hdr(adapter, hdr, first_skb, wrb_cnt, copied);
670 	be_dws_cpu_to_le(hdr, sizeof(*hdr));
671 
672 	return copied;
673 dma_err:
674 	txq->head = map_head;
675 	while (copied) {
676 		wrb = queue_head_node(txq);
677 		unmap_tx_frag(dev, wrb, map_single);
678 		map_single = false;
679 		copied -= wrb->frag_len;
680 		queue_head_inc(txq);
681 	}
682 	return 0;
683 }
684 
685 static netdev_tx_t be_xmit(struct sk_buff *skb,
686 			struct net_device *netdev)
687 {
688 	struct be_adapter *adapter = netdev_priv(netdev);
689 	struct be_tx_obj *txo = &adapter->tx_obj[skb_get_queue_mapping(skb)];
690 	struct be_queue_info *txq = &txo->q;
691 	u32 wrb_cnt = 0, copied = 0;
692 	u32 start = txq->head;
693 	bool dummy_wrb, stopped = false;
694 
695 	wrb_cnt = wrb_cnt_for_skb(adapter, skb, &dummy_wrb);
696 
697 	copied = make_tx_wrbs(adapter, txq, skb, wrb_cnt, dummy_wrb);
698 	if (copied) {
699 		/* record the sent skb in the sent_skb table */
700 		BUG_ON(txo->sent_skb_list[start]);
701 		txo->sent_skb_list[start] = skb;
702 
703 		/* Ensure txq has space for the next skb; Else stop the queue
704 		 * *BEFORE* ringing the tx doorbell, so that we serialze the
705 		 * tx compls of the current transmit which'll wake up the queue
706 		 */
707 		atomic_add(wrb_cnt, &txq->used);
708 		if ((BE_MAX_TX_FRAG_COUNT + atomic_read(&txq->used)) >=
709 								txq->len) {
710 			netif_stop_subqueue(netdev, skb_get_queue_mapping(skb));
711 			stopped = true;
712 		}
713 
714 		be_txq_notify(adapter, txq->id, wrb_cnt);
715 
716 		be_tx_stats_update(txo, wrb_cnt, copied,
717 				skb_shinfo(skb)->gso_segs, stopped);
718 	} else {
719 		txq->head = start;
720 		dev_kfree_skb_any(skb);
721 	}
722 	return NETDEV_TX_OK;
723 }
724 
725 static int be_change_mtu(struct net_device *netdev, int new_mtu)
726 {
727 	struct be_adapter *adapter = netdev_priv(netdev);
728 	if (new_mtu < BE_MIN_MTU ||
729 			new_mtu > (BE_MAX_JUMBO_FRAME_SIZE -
730 					(ETH_HLEN + ETH_FCS_LEN))) {
731 		dev_info(&adapter->pdev->dev,
732 			"MTU must be between %d and %d bytes\n",
733 			BE_MIN_MTU,
734 			(BE_MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN)));
735 		return -EINVAL;
736 	}
737 	dev_info(&adapter->pdev->dev, "MTU changed from %d to %d bytes\n",
738 			netdev->mtu, new_mtu);
739 	netdev->mtu = new_mtu;
740 	return 0;
741 }
742 
743 /*
744  * A max of 64 (BE_NUM_VLANS_SUPPORTED) vlans can be configured in BE.
745  * If the user configures more, place BE in vlan promiscuous mode.
746  */
747 static int be_vid_config(struct be_adapter *adapter, bool vf, u32 vf_num)
748 {
749 	u16 vtag[BE_NUM_VLANS_SUPPORTED];
750 	u16 ntags = 0, i;
751 	int status = 0;
752 	u32 if_handle;
753 
754 	if (vf) {
755 		if_handle = adapter->vf_cfg[vf_num].vf_if_handle;
756 		vtag[0] = cpu_to_le16(adapter->vf_cfg[vf_num].vf_vlan_tag);
757 		status = be_cmd_vlan_config(adapter, if_handle, vtag, 1, 1, 0);
758 	}
759 
760 	/* No need to further configure vids if in promiscuous mode */
761 	if (adapter->promiscuous)
762 		return 0;
763 
764 	if (adapter->vlans_added <= adapter->max_vlans)  {
765 		/* Construct VLAN Table to give to HW */
766 		for (i = 0; i < VLAN_N_VID; i++) {
767 			if (adapter->vlan_tag[i]) {
768 				vtag[ntags] = cpu_to_le16(i);
769 				ntags++;
770 			}
771 		}
772 		status = be_cmd_vlan_config(adapter, adapter->if_handle,
773 					vtag, ntags, 1, 0);
774 	} else {
775 		status = be_cmd_vlan_config(adapter, adapter->if_handle,
776 					NULL, 0, 1, 1);
777 	}
778 
779 	return status;
780 }
781 
782 static void be_vlan_add_vid(struct net_device *netdev, u16 vid)
783 {
784 	struct be_adapter *adapter = netdev_priv(netdev);
785 
786 	adapter->vlans_added++;
787 	if (!be_physfn(adapter))
788 		return;
789 
790 	adapter->vlan_tag[vid] = 1;
791 	if (adapter->vlans_added <= (adapter->max_vlans + 1))
792 		be_vid_config(adapter, false, 0);
793 }
794 
795 static void be_vlan_rem_vid(struct net_device *netdev, u16 vid)
796 {
797 	struct be_adapter *adapter = netdev_priv(netdev);
798 
799 	adapter->vlans_added--;
800 
801 	if (!be_physfn(adapter))
802 		return;
803 
804 	adapter->vlan_tag[vid] = 0;
805 	if (adapter->vlans_added <= adapter->max_vlans)
806 		be_vid_config(adapter, false, 0);
807 }
808 
809 static void be_set_rx_mode(struct net_device *netdev)
810 {
811 	struct be_adapter *adapter = netdev_priv(netdev);
812 
813 	if (netdev->flags & IFF_PROMISC) {
814 		be_cmd_rx_filter(adapter, IFF_PROMISC, ON);
815 		adapter->promiscuous = true;
816 		goto done;
817 	}
818 
819 	/* BE was previously in promiscuous mode; disable it */
820 	if (adapter->promiscuous) {
821 		adapter->promiscuous = false;
822 		be_cmd_rx_filter(adapter, IFF_PROMISC, OFF);
823 
824 		if (adapter->vlans_added)
825 			be_vid_config(adapter, false, 0);
826 	}
827 
828 	/* Enable multicast promisc if num configured exceeds what we support */
829 	if (netdev->flags & IFF_ALLMULTI ||
830 			netdev_mc_count(netdev) > BE_MAX_MC) {
831 		be_cmd_rx_filter(adapter, IFF_ALLMULTI, ON);
832 		goto done;
833 	}
834 
835 	be_cmd_rx_filter(adapter, IFF_MULTICAST, ON);
836 done:
837 	return;
838 }
839 
840 static int be_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
841 {
842 	struct be_adapter *adapter = netdev_priv(netdev);
843 	int status;
844 
845 	if (!adapter->sriov_enabled)
846 		return -EPERM;
847 
848 	if (!is_valid_ether_addr(mac) || (vf >= num_vfs))
849 		return -EINVAL;
850 
851 	if (adapter->vf_cfg[vf].vf_pmac_id != BE_INVALID_PMAC_ID)
852 		status = be_cmd_pmac_del(adapter,
853 					adapter->vf_cfg[vf].vf_if_handle,
854 					adapter->vf_cfg[vf].vf_pmac_id, vf + 1);
855 
856 	status = be_cmd_pmac_add(adapter, mac,
857 				adapter->vf_cfg[vf].vf_if_handle,
858 				&adapter->vf_cfg[vf].vf_pmac_id, vf + 1);
859 
860 	if (status)
861 		dev_err(&adapter->pdev->dev, "MAC %pM set on VF %d Failed\n",
862 				mac, vf);
863 	else
864 		memcpy(adapter->vf_cfg[vf].vf_mac_addr, mac, ETH_ALEN);
865 
866 	return status;
867 }
868 
869 static int be_get_vf_config(struct net_device *netdev, int vf,
870 			struct ifla_vf_info *vi)
871 {
872 	struct be_adapter *adapter = netdev_priv(netdev);
873 
874 	if (!adapter->sriov_enabled)
875 		return -EPERM;
876 
877 	if (vf >= num_vfs)
878 		return -EINVAL;
879 
880 	vi->vf = vf;
881 	vi->tx_rate = adapter->vf_cfg[vf].vf_tx_rate;
882 	vi->vlan = adapter->vf_cfg[vf].vf_vlan_tag;
883 	vi->qos = 0;
884 	memcpy(&vi->mac, adapter->vf_cfg[vf].vf_mac_addr, ETH_ALEN);
885 
886 	return 0;
887 }
888 
889 static int be_set_vf_vlan(struct net_device *netdev,
890 			int vf, u16 vlan, u8 qos)
891 {
892 	struct be_adapter *adapter = netdev_priv(netdev);
893 	int status = 0;
894 
895 	if (!adapter->sriov_enabled)
896 		return -EPERM;
897 
898 	if ((vf >= num_vfs) || (vlan > 4095))
899 		return -EINVAL;
900 
901 	if (vlan) {
902 		adapter->vf_cfg[vf].vf_vlan_tag = vlan;
903 		adapter->vlans_added++;
904 	} else {
905 		adapter->vf_cfg[vf].vf_vlan_tag = 0;
906 		adapter->vlans_added--;
907 	}
908 
909 	status = be_vid_config(adapter, true, vf);
910 
911 	if (status)
912 		dev_info(&adapter->pdev->dev,
913 				"VLAN %d config on VF %d failed\n", vlan, vf);
914 	return status;
915 }
916 
917 static int be_set_vf_tx_rate(struct net_device *netdev,
918 			int vf, int rate)
919 {
920 	struct be_adapter *adapter = netdev_priv(netdev);
921 	int status = 0;
922 
923 	if (!adapter->sriov_enabled)
924 		return -EPERM;
925 
926 	if ((vf >= num_vfs) || (rate < 0))
927 		return -EINVAL;
928 
929 	if (rate > 10000)
930 		rate = 10000;
931 
932 	adapter->vf_cfg[vf].vf_tx_rate = rate;
933 	status = be_cmd_set_qos(adapter, rate / 10, vf + 1);
934 
935 	if (status)
936 		dev_info(&adapter->pdev->dev,
937 				"tx rate %d on VF %d failed\n", rate, vf);
938 	return status;
939 }
940 
941 static void be_rx_eqd_update(struct be_adapter *adapter, struct be_rx_obj *rxo)
942 {
943 	struct be_eq_obj *rx_eq = &rxo->rx_eq;
944 	struct be_rx_stats *stats = rx_stats(rxo);
945 	ulong now = jiffies;
946 	ulong delta = now - stats->rx_jiffies;
947 	u64 pkts;
948 	unsigned int start, eqd;
949 
950 	if (!rx_eq->enable_aic)
951 		return;
952 
953 	/* Wrapped around */
954 	if (time_before(now, stats->rx_jiffies)) {
955 		stats->rx_jiffies = now;
956 		return;
957 	}
958 
959 	/* Update once a second */
960 	if (delta < HZ)
961 		return;
962 
963 	do {
964 		start = u64_stats_fetch_begin_bh(&stats->sync);
965 		pkts = stats->rx_pkts;
966 	} while (u64_stats_fetch_retry_bh(&stats->sync, start));
967 
968 	stats->rx_pps = (unsigned long)(pkts - stats->rx_pkts_prev) / (delta / HZ);
969 	stats->rx_pkts_prev = pkts;
970 	stats->rx_jiffies = now;
971 	eqd = stats->rx_pps / 110000;
972 	eqd = eqd << 3;
973 	if (eqd > rx_eq->max_eqd)
974 		eqd = rx_eq->max_eqd;
975 	if (eqd < rx_eq->min_eqd)
976 		eqd = rx_eq->min_eqd;
977 	if (eqd < 10)
978 		eqd = 0;
979 	if (eqd != rx_eq->cur_eqd) {
980 		be_cmd_modify_eqd(adapter, rx_eq->q.id, eqd);
981 		rx_eq->cur_eqd = eqd;
982 	}
983 }
984 
985 static void be_rx_stats_update(struct be_rx_obj *rxo,
986 		struct be_rx_compl_info *rxcp)
987 {
988 	struct be_rx_stats *stats = rx_stats(rxo);
989 
990 	u64_stats_update_begin(&stats->sync);
991 	stats->rx_compl++;
992 	stats->rx_bytes += rxcp->pkt_size;
993 	stats->rx_pkts++;
994 	if (rxcp->pkt_type == BE_MULTICAST_PACKET)
995 		stats->rx_mcast_pkts++;
996 	if (rxcp->err)
997 		stats->rx_compl_err++;
998 	u64_stats_update_end(&stats->sync);
999 }
1000 
1001 static inline bool csum_passed(struct be_rx_compl_info *rxcp)
1002 {
1003 	/* L4 checksum is not reliable for non TCP/UDP packets.
1004 	 * Also ignore ipcksm for ipv6 pkts */
1005 	return (rxcp->tcpf || rxcp->udpf) && rxcp->l4_csum &&
1006 				(rxcp->ip_csum || rxcp->ipv6);
1007 }
1008 
1009 static struct be_rx_page_info *
1010 get_rx_page_info(struct be_adapter *adapter,
1011 		struct be_rx_obj *rxo,
1012 		u16 frag_idx)
1013 {
1014 	struct be_rx_page_info *rx_page_info;
1015 	struct be_queue_info *rxq = &rxo->q;
1016 
1017 	rx_page_info = &rxo->page_info_tbl[frag_idx];
1018 	BUG_ON(!rx_page_info->page);
1019 
1020 	if (rx_page_info->last_page_user) {
1021 		dma_unmap_page(&adapter->pdev->dev,
1022 			       dma_unmap_addr(rx_page_info, bus),
1023 			       adapter->big_page_size, DMA_FROM_DEVICE);
1024 		rx_page_info->last_page_user = false;
1025 	}
1026 
1027 	atomic_dec(&rxq->used);
1028 	return rx_page_info;
1029 }
1030 
1031 /* Throwaway the data in the Rx completion */
1032 static void be_rx_compl_discard(struct be_adapter *adapter,
1033 		struct be_rx_obj *rxo,
1034 		struct be_rx_compl_info *rxcp)
1035 {
1036 	struct be_queue_info *rxq = &rxo->q;
1037 	struct be_rx_page_info *page_info;
1038 	u16 i, num_rcvd = rxcp->num_rcvd;
1039 
1040 	for (i = 0; i < num_rcvd; i++) {
1041 		page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1042 		put_page(page_info->page);
1043 		memset(page_info, 0, sizeof(*page_info));
1044 		index_inc(&rxcp->rxq_idx, rxq->len);
1045 	}
1046 }
1047 
1048 /*
1049  * skb_fill_rx_data forms a complete skb for an ether frame
1050  * indicated by rxcp.
1051  */
1052 static void skb_fill_rx_data(struct be_adapter *adapter, struct be_rx_obj *rxo,
1053 			struct sk_buff *skb, struct be_rx_compl_info *rxcp)
1054 {
1055 	struct be_queue_info *rxq = &rxo->q;
1056 	struct be_rx_page_info *page_info;
1057 	u16 i, j;
1058 	u16 hdr_len, curr_frag_len, remaining;
1059 	u8 *start;
1060 
1061 	page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1062 	start = page_address(page_info->page) + page_info->page_offset;
1063 	prefetch(start);
1064 
1065 	/* Copy data in the first descriptor of this completion */
1066 	curr_frag_len = min(rxcp->pkt_size, rx_frag_size);
1067 
1068 	/* Copy the header portion into skb_data */
1069 	hdr_len = min(BE_HDR_LEN, curr_frag_len);
1070 	memcpy(skb->data, start, hdr_len);
1071 	skb->len = curr_frag_len;
1072 	if (curr_frag_len <= BE_HDR_LEN) { /* tiny packet */
1073 		/* Complete packet has now been moved to data */
1074 		put_page(page_info->page);
1075 		skb->data_len = 0;
1076 		skb->tail += curr_frag_len;
1077 	} else {
1078 		skb_shinfo(skb)->nr_frags = 1;
1079 		skb_frag_set_page(skb, 0, page_info->page);
1080 		skb_shinfo(skb)->frags[0].page_offset =
1081 					page_info->page_offset + hdr_len;
1082 		skb_frag_size_set(&skb_shinfo(skb)->frags[0], curr_frag_len - hdr_len);
1083 		skb->data_len = curr_frag_len - hdr_len;
1084 		skb->truesize += rx_frag_size;
1085 		skb->tail += hdr_len;
1086 	}
1087 	page_info->page = NULL;
1088 
1089 	if (rxcp->pkt_size <= rx_frag_size) {
1090 		BUG_ON(rxcp->num_rcvd != 1);
1091 		return;
1092 	}
1093 
1094 	/* More frags present for this completion */
1095 	index_inc(&rxcp->rxq_idx, rxq->len);
1096 	remaining = rxcp->pkt_size - curr_frag_len;
1097 	for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
1098 		page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1099 		curr_frag_len = min(remaining, rx_frag_size);
1100 
1101 		/* Coalesce all frags from the same physical page in one slot */
1102 		if (page_info->page_offset == 0) {
1103 			/* Fresh page */
1104 			j++;
1105 			skb_frag_set_page(skb, j, page_info->page);
1106 			skb_shinfo(skb)->frags[j].page_offset =
1107 							page_info->page_offset;
1108 			skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
1109 			skb_shinfo(skb)->nr_frags++;
1110 		} else {
1111 			put_page(page_info->page);
1112 		}
1113 
1114 		skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
1115 		skb->len += curr_frag_len;
1116 		skb->data_len += curr_frag_len;
1117 		skb->truesize += rx_frag_size;
1118 		remaining -= curr_frag_len;
1119 		index_inc(&rxcp->rxq_idx, rxq->len);
1120 		page_info->page = NULL;
1121 	}
1122 	BUG_ON(j > MAX_SKB_FRAGS);
1123 }
1124 
1125 /* Process the RX completion indicated by rxcp when GRO is disabled */
1126 static void be_rx_compl_process(struct be_adapter *adapter,
1127 			struct be_rx_obj *rxo,
1128 			struct be_rx_compl_info *rxcp)
1129 {
1130 	struct net_device *netdev = adapter->netdev;
1131 	struct sk_buff *skb;
1132 
1133 	skb = netdev_alloc_skb_ip_align(netdev, BE_HDR_LEN);
1134 	if (unlikely(!skb)) {
1135 		rx_stats(rxo)->rx_drops_no_skbs++;
1136 		be_rx_compl_discard(adapter, rxo, rxcp);
1137 		return;
1138 	}
1139 
1140 	skb_fill_rx_data(adapter, rxo, skb, rxcp);
1141 
1142 	if (likely((netdev->features & NETIF_F_RXCSUM) && csum_passed(rxcp)))
1143 		skb->ip_summed = CHECKSUM_UNNECESSARY;
1144 	else
1145 		skb_checksum_none_assert(skb);
1146 
1147 	skb->protocol = eth_type_trans(skb, netdev);
1148 	if (adapter->netdev->features & NETIF_F_RXHASH)
1149 		skb->rxhash = rxcp->rss_hash;
1150 
1151 
1152 	if (rxcp->vlanf)
1153 		__vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
1154 
1155 	netif_receive_skb(skb);
1156 }
1157 
1158 /* Process the RX completion indicated by rxcp when GRO is enabled */
1159 static void be_rx_compl_process_gro(struct be_adapter *adapter,
1160 		struct be_rx_obj *rxo,
1161 		struct be_rx_compl_info *rxcp)
1162 {
1163 	struct be_rx_page_info *page_info;
1164 	struct sk_buff *skb = NULL;
1165 	struct be_queue_info *rxq = &rxo->q;
1166 	struct be_eq_obj *eq_obj =  &rxo->rx_eq;
1167 	u16 remaining, curr_frag_len;
1168 	u16 i, j;
1169 
1170 	skb = napi_get_frags(&eq_obj->napi);
1171 	if (!skb) {
1172 		be_rx_compl_discard(adapter, rxo, rxcp);
1173 		return;
1174 	}
1175 
1176 	remaining = rxcp->pkt_size;
1177 	for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
1178 		page_info = get_rx_page_info(adapter, rxo, rxcp->rxq_idx);
1179 
1180 		curr_frag_len = min(remaining, rx_frag_size);
1181 
1182 		/* Coalesce all frags from the same physical page in one slot */
1183 		if (i == 0 || page_info->page_offset == 0) {
1184 			/* First frag or Fresh page */
1185 			j++;
1186 			skb_frag_set_page(skb, j, page_info->page);
1187 			skb_shinfo(skb)->frags[j].page_offset =
1188 							page_info->page_offset;
1189 			skb_frag_size_set(&skb_shinfo(skb)->frags[j], 0);
1190 		} else {
1191 			put_page(page_info->page);
1192 		}
1193 		skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
1194 		skb->truesize += rx_frag_size;
1195 		remaining -= curr_frag_len;
1196 		index_inc(&rxcp->rxq_idx, rxq->len);
1197 		memset(page_info, 0, sizeof(*page_info));
1198 	}
1199 	BUG_ON(j > MAX_SKB_FRAGS);
1200 
1201 	skb_shinfo(skb)->nr_frags = j + 1;
1202 	skb->len = rxcp->pkt_size;
1203 	skb->data_len = rxcp->pkt_size;
1204 	skb->ip_summed = CHECKSUM_UNNECESSARY;
1205 	if (adapter->netdev->features & NETIF_F_RXHASH)
1206 		skb->rxhash = rxcp->rss_hash;
1207 
1208 	if (rxcp->vlanf)
1209 		__vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
1210 
1211 	napi_gro_frags(&eq_obj->napi);
1212 }
1213 
1214 static void be_parse_rx_compl_v1(struct be_adapter *adapter,
1215 				struct be_eth_rx_compl *compl,
1216 				struct be_rx_compl_info *rxcp)
1217 {
1218 	rxcp->pkt_size =
1219 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, pktsize, compl);
1220 	rxcp->vlanf = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtp, compl);
1221 	rxcp->err = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, err, compl);
1222 	rxcp->tcpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, tcpf, compl);
1223 	rxcp->udpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, udpf, compl);
1224 	rxcp->ip_csum =
1225 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, ipcksm, compl);
1226 	rxcp->l4_csum =
1227 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, l4_cksm, compl);
1228 	rxcp->ipv6 =
1229 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, ip_version, compl);
1230 	rxcp->rxq_idx =
1231 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, fragndx, compl);
1232 	rxcp->num_rcvd =
1233 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, numfrags, compl);
1234 	rxcp->pkt_type =
1235 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, cast_enc, compl);
1236 	rxcp->rss_hash =
1237 		AMAP_GET_BITS(struct amap_eth_rx_compl_v1, rsshash, rxcp);
1238 	if (rxcp->vlanf) {
1239 		rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vtm,
1240 					  compl);
1241 		rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, vlan_tag,
1242 					       compl);
1243 	}
1244 	rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v1, port, compl);
1245 }
1246 
1247 static void be_parse_rx_compl_v0(struct be_adapter *adapter,
1248 				struct be_eth_rx_compl *compl,
1249 				struct be_rx_compl_info *rxcp)
1250 {
1251 	rxcp->pkt_size =
1252 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, pktsize, compl);
1253 	rxcp->vlanf = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtp, compl);
1254 	rxcp->err = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, err, compl);
1255 	rxcp->tcpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, tcpf, compl);
1256 	rxcp->udpf = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, udpf, compl);
1257 	rxcp->ip_csum =
1258 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, ipcksm, compl);
1259 	rxcp->l4_csum =
1260 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, l4_cksm, compl);
1261 	rxcp->ipv6 =
1262 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, ip_version, compl);
1263 	rxcp->rxq_idx =
1264 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, fragndx, compl);
1265 	rxcp->num_rcvd =
1266 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, numfrags, compl);
1267 	rxcp->pkt_type =
1268 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, cast_enc, compl);
1269 	rxcp->rss_hash =
1270 		AMAP_GET_BITS(struct amap_eth_rx_compl_v0, rsshash, rxcp);
1271 	if (rxcp->vlanf) {
1272 		rxcp->vtm = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vtm,
1273 					  compl);
1274 		rxcp->vlan_tag = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, vlan_tag,
1275 					       compl);
1276 	}
1277 	rxcp->port = AMAP_GET_BITS(struct amap_eth_rx_compl_v0, port, compl);
1278 }
1279 
1280 static struct be_rx_compl_info *be_rx_compl_get(struct be_rx_obj *rxo)
1281 {
1282 	struct be_eth_rx_compl *compl = queue_tail_node(&rxo->cq);
1283 	struct be_rx_compl_info *rxcp = &rxo->rxcp;
1284 	struct be_adapter *adapter = rxo->adapter;
1285 
1286 	/* For checking the valid bit it is Ok to use either definition as the
1287 	 * valid bit is at the same position in both v0 and v1 Rx compl */
1288 	if (compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] == 0)
1289 		return NULL;
1290 
1291 	rmb();
1292 	be_dws_le_to_cpu(compl, sizeof(*compl));
1293 
1294 	if (adapter->be3_native)
1295 		be_parse_rx_compl_v1(adapter, compl, rxcp);
1296 	else
1297 		be_parse_rx_compl_v0(adapter, compl, rxcp);
1298 
1299 	if (rxcp->vlanf) {
1300 		/* vlanf could be wrongly set in some cards.
1301 		 * ignore if vtm is not set */
1302 		if ((adapter->function_mode & FLEX10_MODE) && !rxcp->vtm)
1303 			rxcp->vlanf = 0;
1304 
1305 		if (!lancer_chip(adapter))
1306 			rxcp->vlan_tag = swab16(rxcp->vlan_tag);
1307 
1308 		if (adapter->pvid == (rxcp->vlan_tag & VLAN_VID_MASK) &&
1309 		    !adapter->vlan_tag[rxcp->vlan_tag])
1310 			rxcp->vlanf = 0;
1311 	}
1312 
1313 	/* As the compl has been parsed, reset it; we wont touch it again */
1314 	compl->dw[offsetof(struct amap_eth_rx_compl_v1, valid) / 32] = 0;
1315 
1316 	queue_tail_inc(&rxo->cq);
1317 	return rxcp;
1318 }
1319 
1320 static inline struct page *be_alloc_pages(u32 size, gfp_t gfp)
1321 {
1322 	u32 order = get_order(size);
1323 
1324 	if (order > 0)
1325 		gfp |= __GFP_COMP;
1326 	return  alloc_pages(gfp, order);
1327 }
1328 
1329 /*
1330  * Allocate a page, split it to fragments of size rx_frag_size and post as
1331  * receive buffers to BE
1332  */
1333 static void be_post_rx_frags(struct be_rx_obj *rxo, gfp_t gfp)
1334 {
1335 	struct be_adapter *adapter = rxo->adapter;
1336 	struct be_rx_page_info *page_info_tbl = rxo->page_info_tbl;
1337 	struct be_rx_page_info *page_info = NULL, *prev_page_info = NULL;
1338 	struct be_queue_info *rxq = &rxo->q;
1339 	struct page *pagep = NULL;
1340 	struct be_eth_rx_d *rxd;
1341 	u64 page_dmaaddr = 0, frag_dmaaddr;
1342 	u32 posted, page_offset = 0;
1343 
1344 	page_info = &rxo->page_info_tbl[rxq->head];
1345 	for (posted = 0; posted < MAX_RX_POST && !page_info->page; posted++) {
1346 		if (!pagep) {
1347 			pagep = be_alloc_pages(adapter->big_page_size, gfp);
1348 			if (unlikely(!pagep)) {
1349 				rx_stats(rxo)->rx_post_fail++;
1350 				break;
1351 			}
1352 			page_dmaaddr = dma_map_page(&adapter->pdev->dev, pagep,
1353 						    0, adapter->big_page_size,
1354 						    DMA_FROM_DEVICE);
1355 			page_info->page_offset = 0;
1356 		} else {
1357 			get_page(pagep);
1358 			page_info->page_offset = page_offset + rx_frag_size;
1359 		}
1360 		page_offset = page_info->page_offset;
1361 		page_info->page = pagep;
1362 		dma_unmap_addr_set(page_info, bus, page_dmaaddr);
1363 		frag_dmaaddr = page_dmaaddr + page_info->page_offset;
1364 
1365 		rxd = queue_head_node(rxq);
1366 		rxd->fragpa_lo = cpu_to_le32(frag_dmaaddr & 0xFFFFFFFF);
1367 		rxd->fragpa_hi = cpu_to_le32(upper_32_bits(frag_dmaaddr));
1368 
1369 		/* Any space left in the current big page for another frag? */
1370 		if ((page_offset + rx_frag_size + rx_frag_size) >
1371 					adapter->big_page_size) {
1372 			pagep = NULL;
1373 			page_info->last_page_user = true;
1374 		}
1375 
1376 		prev_page_info = page_info;
1377 		queue_head_inc(rxq);
1378 		page_info = &page_info_tbl[rxq->head];
1379 	}
1380 	if (pagep)
1381 		prev_page_info->last_page_user = true;
1382 
1383 	if (posted) {
1384 		atomic_add(posted, &rxq->used);
1385 		be_rxq_notify(adapter, rxq->id, posted);
1386 	} else if (atomic_read(&rxq->used) == 0) {
1387 		/* Let be_worker replenish when memory is available */
1388 		rxo->rx_post_starved = true;
1389 	}
1390 }
1391 
1392 static struct be_eth_tx_compl *be_tx_compl_get(struct be_queue_info *tx_cq)
1393 {
1394 	struct be_eth_tx_compl *txcp = queue_tail_node(tx_cq);
1395 
1396 	if (txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] == 0)
1397 		return NULL;
1398 
1399 	rmb();
1400 	be_dws_le_to_cpu(txcp, sizeof(*txcp));
1401 
1402 	txcp->dw[offsetof(struct amap_eth_tx_compl, valid) / 32] = 0;
1403 
1404 	queue_tail_inc(tx_cq);
1405 	return txcp;
1406 }
1407 
1408 static u16 be_tx_compl_process(struct be_adapter *adapter,
1409 		struct be_tx_obj *txo, u16 last_index)
1410 {
1411 	struct be_queue_info *txq = &txo->q;
1412 	struct be_eth_wrb *wrb;
1413 	struct sk_buff **sent_skbs = txo->sent_skb_list;
1414 	struct sk_buff *sent_skb;
1415 	u16 cur_index, num_wrbs = 1; /* account for hdr wrb */
1416 	bool unmap_skb_hdr = true;
1417 
1418 	sent_skb = sent_skbs[txq->tail];
1419 	BUG_ON(!sent_skb);
1420 	sent_skbs[txq->tail] = NULL;
1421 
1422 	/* skip header wrb */
1423 	queue_tail_inc(txq);
1424 
1425 	do {
1426 		cur_index = txq->tail;
1427 		wrb = queue_tail_node(txq);
1428 		unmap_tx_frag(&adapter->pdev->dev, wrb,
1429 			      (unmap_skb_hdr && skb_headlen(sent_skb)));
1430 		unmap_skb_hdr = false;
1431 
1432 		num_wrbs++;
1433 		queue_tail_inc(txq);
1434 	} while (cur_index != last_index);
1435 
1436 	kfree_skb(sent_skb);
1437 	return num_wrbs;
1438 }
1439 
1440 static inline struct be_eq_entry *event_get(struct be_eq_obj *eq_obj)
1441 {
1442 	struct be_eq_entry *eqe = queue_tail_node(&eq_obj->q);
1443 
1444 	if (!eqe->evt)
1445 		return NULL;
1446 
1447 	rmb();
1448 	eqe->evt = le32_to_cpu(eqe->evt);
1449 	queue_tail_inc(&eq_obj->q);
1450 	return eqe;
1451 }
1452 
1453 static int event_handle(struct be_adapter *adapter,
1454 			struct be_eq_obj *eq_obj,
1455 			bool rearm)
1456 {
1457 	struct be_eq_entry *eqe;
1458 	u16 num = 0;
1459 
1460 	while ((eqe = event_get(eq_obj)) != NULL) {
1461 		eqe->evt = 0;
1462 		num++;
1463 	}
1464 
1465 	/* Deal with any spurious interrupts that come
1466 	 * without events
1467 	 */
1468 	if (!num)
1469 		rearm = true;
1470 
1471 	be_eq_notify(adapter, eq_obj->q.id, rearm, true, num);
1472 	if (num)
1473 		napi_schedule(&eq_obj->napi);
1474 
1475 	return num;
1476 }
1477 
1478 /* Just read and notify events without processing them.
1479  * Used at the time of destroying event queues */
1480 static void be_eq_clean(struct be_adapter *adapter,
1481 			struct be_eq_obj *eq_obj)
1482 {
1483 	struct be_eq_entry *eqe;
1484 	u16 num = 0;
1485 
1486 	while ((eqe = event_get(eq_obj)) != NULL) {
1487 		eqe->evt = 0;
1488 		num++;
1489 	}
1490 
1491 	if (num)
1492 		be_eq_notify(adapter, eq_obj->q.id, false, true, num);
1493 }
1494 
1495 static void be_rx_q_clean(struct be_adapter *adapter, struct be_rx_obj *rxo)
1496 {
1497 	struct be_rx_page_info *page_info;
1498 	struct be_queue_info *rxq = &rxo->q;
1499 	struct be_queue_info *rx_cq = &rxo->cq;
1500 	struct be_rx_compl_info *rxcp;
1501 	u16 tail;
1502 
1503 	/* First cleanup pending rx completions */
1504 	while ((rxcp = be_rx_compl_get(rxo)) != NULL) {
1505 		be_rx_compl_discard(adapter, rxo, rxcp);
1506 		be_cq_notify(adapter, rx_cq->id, false, 1);
1507 	}
1508 
1509 	/* Then free posted rx buffer that were not used */
1510 	tail = (rxq->head + rxq->len - atomic_read(&rxq->used)) % rxq->len;
1511 	for (; atomic_read(&rxq->used) > 0; index_inc(&tail, rxq->len)) {
1512 		page_info = get_rx_page_info(adapter, rxo, tail);
1513 		put_page(page_info->page);
1514 		memset(page_info, 0, sizeof(*page_info));
1515 	}
1516 	BUG_ON(atomic_read(&rxq->used));
1517 	rxq->tail = rxq->head = 0;
1518 }
1519 
1520 static void be_tx_compl_clean(struct be_adapter *adapter,
1521 				struct be_tx_obj *txo)
1522 {
1523 	struct be_queue_info *tx_cq = &txo->cq;
1524 	struct be_queue_info *txq = &txo->q;
1525 	struct be_eth_tx_compl *txcp;
1526 	u16 end_idx, cmpl = 0, timeo = 0, num_wrbs = 0;
1527 	struct sk_buff **sent_skbs = txo->sent_skb_list;
1528 	struct sk_buff *sent_skb;
1529 	bool dummy_wrb;
1530 
1531 	/* Wait for a max of 200ms for all the tx-completions to arrive. */
1532 	do {
1533 		while ((txcp = be_tx_compl_get(tx_cq))) {
1534 			end_idx = AMAP_GET_BITS(struct amap_eth_tx_compl,
1535 					wrb_index, txcp);
1536 			num_wrbs += be_tx_compl_process(adapter, txo, end_idx);
1537 			cmpl++;
1538 		}
1539 		if (cmpl) {
1540 			be_cq_notify(adapter, tx_cq->id, false, cmpl);
1541 			atomic_sub(num_wrbs, &txq->used);
1542 			cmpl = 0;
1543 			num_wrbs = 0;
1544 		}
1545 
1546 		if (atomic_read(&txq->used) == 0 || ++timeo > 200)
1547 			break;
1548 
1549 		mdelay(1);
1550 	} while (true);
1551 
1552 	if (atomic_read(&txq->used))
1553 		dev_err(&adapter->pdev->dev, "%d pending tx-completions\n",
1554 			atomic_read(&txq->used));
1555 
1556 	/* free posted tx for which compls will never arrive */
1557 	while (atomic_read(&txq->used)) {
1558 		sent_skb = sent_skbs[txq->tail];
1559 		end_idx = txq->tail;
1560 		index_adv(&end_idx,
1561 			wrb_cnt_for_skb(adapter, sent_skb, &dummy_wrb) - 1,
1562 			txq->len);
1563 		num_wrbs = be_tx_compl_process(adapter, txo, end_idx);
1564 		atomic_sub(num_wrbs, &txq->used);
1565 	}
1566 }
1567 
1568 static void be_mcc_queues_destroy(struct be_adapter *adapter)
1569 {
1570 	struct be_queue_info *q;
1571 
1572 	q = &adapter->mcc_obj.q;
1573 	if (q->created)
1574 		be_cmd_q_destroy(adapter, q, QTYPE_MCCQ);
1575 	be_queue_free(adapter, q);
1576 
1577 	q = &adapter->mcc_obj.cq;
1578 	if (q->created)
1579 		be_cmd_q_destroy(adapter, q, QTYPE_CQ);
1580 	be_queue_free(adapter, q);
1581 }
1582 
1583 /* Must be called only after TX qs are created as MCC shares TX EQ */
1584 static int be_mcc_queues_create(struct be_adapter *adapter)
1585 {
1586 	struct be_queue_info *q, *cq;
1587 
1588 	/* Alloc MCC compl queue */
1589 	cq = &adapter->mcc_obj.cq;
1590 	if (be_queue_alloc(adapter, cq, MCC_CQ_LEN,
1591 			sizeof(struct be_mcc_compl)))
1592 		goto err;
1593 
1594 	/* Ask BE to create MCC compl queue; share TX's eq */
1595 	if (be_cmd_cq_create(adapter, cq, &adapter->tx_eq.q, false, true, 0))
1596 		goto mcc_cq_free;
1597 
1598 	/* Alloc MCC queue */
1599 	q = &adapter->mcc_obj.q;
1600 	if (be_queue_alloc(adapter, q, MCC_Q_LEN, sizeof(struct be_mcc_wrb)))
1601 		goto mcc_cq_destroy;
1602 
1603 	/* Ask BE to create MCC queue */
1604 	if (be_cmd_mccq_create(adapter, q, cq))
1605 		goto mcc_q_free;
1606 
1607 	return 0;
1608 
1609 mcc_q_free:
1610 	be_queue_free(adapter, q);
1611 mcc_cq_destroy:
1612 	be_cmd_q_destroy(adapter, cq, QTYPE_CQ);
1613 mcc_cq_free:
1614 	be_queue_free(adapter, cq);
1615 err:
1616 	return -1;
1617 }
1618 
1619 static void be_tx_queues_destroy(struct be_adapter *adapter)
1620 {
1621 	struct be_queue_info *q;
1622 	struct be_tx_obj *txo;
1623 	u8 i;
1624 
1625 	for_all_tx_queues(adapter, txo, i) {
1626 		q = &txo->q;
1627 		if (q->created)
1628 			be_cmd_q_destroy(adapter, q, QTYPE_TXQ);
1629 		be_queue_free(adapter, q);
1630 
1631 		q = &txo->cq;
1632 		if (q->created)
1633 			be_cmd_q_destroy(adapter, q, QTYPE_CQ);
1634 		be_queue_free(adapter, q);
1635 	}
1636 
1637 	/* Clear any residual events */
1638 	be_eq_clean(adapter, &adapter->tx_eq);
1639 
1640 	q = &adapter->tx_eq.q;
1641 	if (q->created)
1642 		be_cmd_q_destroy(adapter, q, QTYPE_EQ);
1643 	be_queue_free(adapter, q);
1644 }
1645 
1646 static int be_num_txqs_want(struct be_adapter *adapter)
1647 {
1648 	if ((num_vfs && adapter->sriov_enabled) ||
1649 		be_is_mc(adapter) ||
1650 		lancer_chip(adapter) || !be_physfn(adapter) ||
1651 		adapter->generation == BE_GEN2)
1652 		return 1;
1653 	else
1654 		return MAX_TX_QS;
1655 }
1656 
1657 /* One TX event queue is shared by all TX compl qs */
1658 static int be_tx_queues_create(struct be_adapter *adapter)
1659 {
1660 	struct be_queue_info *eq, *q, *cq;
1661 	struct be_tx_obj *txo;
1662 	u8 i;
1663 
1664 	adapter->num_tx_qs = be_num_txqs_want(adapter);
1665 	if (adapter->num_tx_qs != MAX_TX_QS)
1666 		netif_set_real_num_tx_queues(adapter->netdev,
1667 			adapter->num_tx_qs);
1668 
1669 	adapter->tx_eq.max_eqd = 0;
1670 	adapter->tx_eq.min_eqd = 0;
1671 	adapter->tx_eq.cur_eqd = 96;
1672 	adapter->tx_eq.enable_aic = false;
1673 
1674 	eq = &adapter->tx_eq.q;
1675 	if (be_queue_alloc(adapter, eq, EVNT_Q_LEN,
1676 		sizeof(struct be_eq_entry)))
1677 		return -1;
1678 
1679 	if (be_cmd_eq_create(adapter, eq, adapter->tx_eq.cur_eqd))
1680 		goto err;
1681 	adapter->tx_eq.eq_idx = adapter->eq_next_idx++;
1682 
1683 	for_all_tx_queues(adapter, txo, i) {
1684 		cq = &txo->cq;
1685 		if (be_queue_alloc(adapter, cq, TX_CQ_LEN,
1686 			sizeof(struct be_eth_tx_compl)))
1687 			goto err;
1688 
1689 		if (be_cmd_cq_create(adapter, cq, eq, false, false, 3))
1690 			goto err;
1691 
1692 		q = &txo->q;
1693 		if (be_queue_alloc(adapter, q, TX_Q_LEN,
1694 			sizeof(struct be_eth_wrb)))
1695 			goto err;
1696 
1697 		if (be_cmd_txq_create(adapter, q, cq))
1698 			goto err;
1699 	}
1700 	return 0;
1701 
1702 err:
1703 	be_tx_queues_destroy(adapter);
1704 	return -1;
1705 }
1706 
1707 static void be_rx_queues_destroy(struct be_adapter *adapter)
1708 {
1709 	struct be_queue_info *q;
1710 	struct be_rx_obj *rxo;
1711 	int i;
1712 
1713 	for_all_rx_queues(adapter, rxo, i) {
1714 		be_queue_free(adapter, &rxo->q);
1715 
1716 		q = &rxo->cq;
1717 		if (q->created)
1718 			be_cmd_q_destroy(adapter, q, QTYPE_CQ);
1719 		be_queue_free(adapter, q);
1720 
1721 		q = &rxo->rx_eq.q;
1722 		if (q->created)
1723 			be_cmd_q_destroy(adapter, q, QTYPE_EQ);
1724 		be_queue_free(adapter, q);
1725 	}
1726 }
1727 
1728 static u32 be_num_rxqs_want(struct be_adapter *adapter)
1729 {
1730 	if ((adapter->function_caps & BE_FUNCTION_CAPS_RSS) &&
1731 		!adapter->sriov_enabled && be_physfn(adapter) &&
1732 		!be_is_mc(adapter)) {
1733 		return 1 + MAX_RSS_QS; /* one default non-RSS queue */
1734 	} else {
1735 		dev_warn(&adapter->pdev->dev,
1736 			"No support for multiple RX queues\n");
1737 		return 1;
1738 	}
1739 }
1740 
1741 static int be_rx_queues_create(struct be_adapter *adapter)
1742 {
1743 	struct be_queue_info *eq, *q, *cq;
1744 	struct be_rx_obj *rxo;
1745 	int rc, i;
1746 
1747 	adapter->num_rx_qs = min(be_num_rxqs_want(adapter),
1748 				msix_enabled(adapter) ?
1749 					adapter->num_msix_vec - 1 : 1);
1750 	if (adapter->num_rx_qs != MAX_RX_QS)
1751 		dev_warn(&adapter->pdev->dev,
1752 			"Can create only %d RX queues", adapter->num_rx_qs);
1753 
1754 	adapter->big_page_size = (1 << get_order(rx_frag_size)) * PAGE_SIZE;
1755 	for_all_rx_queues(adapter, rxo, i) {
1756 		rxo->adapter = adapter;
1757 		rxo->rx_eq.max_eqd = BE_MAX_EQD;
1758 		rxo->rx_eq.enable_aic = true;
1759 
1760 		/* EQ */
1761 		eq = &rxo->rx_eq.q;
1762 		rc = be_queue_alloc(adapter, eq, EVNT_Q_LEN,
1763 					sizeof(struct be_eq_entry));
1764 		if (rc)
1765 			goto err;
1766 
1767 		rc = be_cmd_eq_create(adapter, eq, rxo->rx_eq.cur_eqd);
1768 		if (rc)
1769 			goto err;
1770 
1771 		rxo->rx_eq.eq_idx = adapter->eq_next_idx++;
1772 
1773 		/* CQ */
1774 		cq = &rxo->cq;
1775 		rc = be_queue_alloc(adapter, cq, RX_CQ_LEN,
1776 				sizeof(struct be_eth_rx_compl));
1777 		if (rc)
1778 			goto err;
1779 
1780 		rc = be_cmd_cq_create(adapter, cq, eq, false, false, 3);
1781 		if (rc)
1782 			goto err;
1783 
1784 		/* Rx Q - will be created in be_open() */
1785 		q = &rxo->q;
1786 		rc = be_queue_alloc(adapter, q, RX_Q_LEN,
1787 				sizeof(struct be_eth_rx_d));
1788 		if (rc)
1789 			goto err;
1790 
1791 	}
1792 
1793 	return 0;
1794 err:
1795 	be_rx_queues_destroy(adapter);
1796 	return -1;
1797 }
1798 
1799 static bool event_peek(struct be_eq_obj *eq_obj)
1800 {
1801 	struct be_eq_entry *eqe = queue_tail_node(&eq_obj->q);
1802 	if (!eqe->evt)
1803 		return false;
1804 	else
1805 		return true;
1806 }
1807 
1808 static irqreturn_t be_intx(int irq, void *dev)
1809 {
1810 	struct be_adapter *adapter = dev;
1811 	struct be_rx_obj *rxo;
1812 	int isr, i, tx = 0 , rx = 0;
1813 
1814 	if (lancer_chip(adapter)) {
1815 		if (event_peek(&adapter->tx_eq))
1816 			tx = event_handle(adapter, &adapter->tx_eq, false);
1817 		for_all_rx_queues(adapter, rxo, i) {
1818 			if (event_peek(&rxo->rx_eq))
1819 				rx |= event_handle(adapter, &rxo->rx_eq, true);
1820 		}
1821 
1822 		if (!(tx || rx))
1823 			return IRQ_NONE;
1824 
1825 	} else {
1826 		isr = ioread32(adapter->csr + CEV_ISR0_OFFSET +
1827 			(adapter->tx_eq.q.id / 8) * CEV_ISR_SIZE);
1828 		if (!isr)
1829 			return IRQ_NONE;
1830 
1831 		if ((1 << adapter->tx_eq.eq_idx & isr))
1832 			event_handle(adapter, &adapter->tx_eq, false);
1833 
1834 		for_all_rx_queues(adapter, rxo, i) {
1835 			if ((1 << rxo->rx_eq.eq_idx & isr))
1836 				event_handle(adapter, &rxo->rx_eq, true);
1837 		}
1838 	}
1839 
1840 	return IRQ_HANDLED;
1841 }
1842 
1843 static irqreturn_t be_msix_rx(int irq, void *dev)
1844 {
1845 	struct be_rx_obj *rxo = dev;
1846 	struct be_adapter *adapter = rxo->adapter;
1847 
1848 	event_handle(adapter, &rxo->rx_eq, true);
1849 
1850 	return IRQ_HANDLED;
1851 }
1852 
1853 static irqreturn_t be_msix_tx_mcc(int irq, void *dev)
1854 {
1855 	struct be_adapter *adapter = dev;
1856 
1857 	event_handle(adapter, &adapter->tx_eq, false);
1858 
1859 	return IRQ_HANDLED;
1860 }
1861 
1862 static inline bool do_gro(struct be_rx_compl_info *rxcp)
1863 {
1864 	return (rxcp->tcpf && !rxcp->err) ? true : false;
1865 }
1866 
1867 static int be_poll_rx(struct napi_struct *napi, int budget)
1868 {
1869 	struct be_eq_obj *rx_eq = container_of(napi, struct be_eq_obj, napi);
1870 	struct be_rx_obj *rxo = container_of(rx_eq, struct be_rx_obj, rx_eq);
1871 	struct be_adapter *adapter = rxo->adapter;
1872 	struct be_queue_info *rx_cq = &rxo->cq;
1873 	struct be_rx_compl_info *rxcp;
1874 	u32 work_done;
1875 
1876 	rx_stats(rxo)->rx_polls++;
1877 	for (work_done = 0; work_done < budget; work_done++) {
1878 		rxcp = be_rx_compl_get(rxo);
1879 		if (!rxcp)
1880 			break;
1881 
1882 		/* Is it a flush compl that has no data */
1883 		if (unlikely(rxcp->num_rcvd == 0))
1884 			goto loop_continue;
1885 
1886 		/* Discard compl with partial DMA Lancer B0 */
1887 		if (unlikely(!rxcp->pkt_size)) {
1888 			be_rx_compl_discard(adapter, rxo, rxcp);
1889 			goto loop_continue;
1890 		}
1891 
1892 		/* On BE drop pkts that arrive due to imperfect filtering in
1893 		 * promiscuous mode on some skews
1894 		 */
1895 		if (unlikely(rxcp->port != adapter->port_num &&
1896 				!lancer_chip(adapter))) {
1897 			be_rx_compl_discard(adapter, rxo, rxcp);
1898 			goto loop_continue;
1899 		}
1900 
1901 		if (do_gro(rxcp))
1902 			be_rx_compl_process_gro(adapter, rxo, rxcp);
1903 		else
1904 			be_rx_compl_process(adapter, rxo, rxcp);
1905 loop_continue:
1906 		be_rx_stats_update(rxo, rxcp);
1907 	}
1908 
1909 	be_cq_notify(adapter, rx_cq->id, false, work_done);
1910 
1911 	/* Refill the queue */
1912 	if (work_done && atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM)
1913 		be_post_rx_frags(rxo, GFP_ATOMIC);
1914 
1915 	/* All consumed */
1916 	if (work_done < budget) {
1917 		napi_complete(napi);
1918 		/* Arm CQ */
1919 		be_cq_notify(adapter, rx_cq->id, true, 0);
1920 	}
1921 	return work_done;
1922 }
1923 
1924 /* As TX and MCC share the same EQ check for both TX and MCC completions.
1925  * For TX/MCC we don't honour budget; consume everything
1926  */
1927 static int be_poll_tx_mcc(struct napi_struct *napi, int budget)
1928 {
1929 	struct be_eq_obj *tx_eq = container_of(napi, struct be_eq_obj, napi);
1930 	struct be_adapter *adapter =
1931 		container_of(tx_eq, struct be_adapter, tx_eq);
1932 	struct be_tx_obj *txo;
1933 	struct be_eth_tx_compl *txcp;
1934 	int tx_compl, mcc_compl, status = 0;
1935 	u8 i;
1936 	u16 num_wrbs;
1937 
1938 	for_all_tx_queues(adapter, txo, i) {
1939 		tx_compl = 0;
1940 		num_wrbs = 0;
1941 		while ((txcp = be_tx_compl_get(&txo->cq))) {
1942 			num_wrbs += be_tx_compl_process(adapter, txo,
1943 				AMAP_GET_BITS(struct amap_eth_tx_compl,
1944 					wrb_index, txcp));
1945 			tx_compl++;
1946 		}
1947 		if (tx_compl) {
1948 			be_cq_notify(adapter, txo->cq.id, true, tx_compl);
1949 
1950 			atomic_sub(num_wrbs, &txo->q.used);
1951 
1952 			/* As Tx wrbs have been freed up, wake up netdev queue
1953 			 * if it was stopped due to lack of tx wrbs.  */
1954 			if (__netif_subqueue_stopped(adapter->netdev, i) &&
1955 				atomic_read(&txo->q.used) < txo->q.len / 2) {
1956 				netif_wake_subqueue(adapter->netdev, i);
1957 			}
1958 
1959 			u64_stats_update_begin(&tx_stats(txo)->sync_compl);
1960 			tx_stats(txo)->tx_compl += tx_compl;
1961 			u64_stats_update_end(&tx_stats(txo)->sync_compl);
1962 		}
1963 	}
1964 
1965 	mcc_compl = be_process_mcc(adapter, &status);
1966 
1967 	if (mcc_compl) {
1968 		struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;
1969 		be_cq_notify(adapter, mcc_obj->cq.id, true, mcc_compl);
1970 	}
1971 
1972 	napi_complete(napi);
1973 
1974 	be_eq_notify(adapter, tx_eq->q.id, true, false, 0);
1975 	adapter->drv_stats.tx_events++;
1976 	return 1;
1977 }
1978 
1979 void be_detect_dump_ue(struct be_adapter *adapter)
1980 {
1981 	u32 ue_lo = 0, ue_hi = 0, ue_lo_mask = 0, ue_hi_mask = 0;
1982 	u32 sliport_status = 0, sliport_err1 = 0, sliport_err2 = 0;
1983 	u32 i;
1984 
1985 	if (lancer_chip(adapter)) {
1986 		sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
1987 		if (sliport_status & SLIPORT_STATUS_ERR_MASK) {
1988 			sliport_err1 = ioread32(adapter->db +
1989 					SLIPORT_ERROR1_OFFSET);
1990 			sliport_err2 = ioread32(adapter->db +
1991 					SLIPORT_ERROR2_OFFSET);
1992 		}
1993 	} else {
1994 		pci_read_config_dword(adapter->pdev,
1995 				PCICFG_UE_STATUS_LOW, &ue_lo);
1996 		pci_read_config_dword(adapter->pdev,
1997 				PCICFG_UE_STATUS_HIGH, &ue_hi);
1998 		pci_read_config_dword(adapter->pdev,
1999 				PCICFG_UE_STATUS_LOW_MASK, &ue_lo_mask);
2000 		pci_read_config_dword(adapter->pdev,
2001 				PCICFG_UE_STATUS_HI_MASK, &ue_hi_mask);
2002 
2003 		ue_lo = (ue_lo & (~ue_lo_mask));
2004 		ue_hi = (ue_hi & (~ue_hi_mask));
2005 	}
2006 
2007 	if (ue_lo || ue_hi ||
2008 		sliport_status & SLIPORT_STATUS_ERR_MASK) {
2009 		adapter->ue_detected = true;
2010 		adapter->eeh_err = true;
2011 		dev_err(&adapter->pdev->dev, "UE Detected!!\n");
2012 	}
2013 
2014 	if (ue_lo) {
2015 		for (i = 0; ue_lo; ue_lo >>= 1, i++) {
2016 			if (ue_lo & 1)
2017 				dev_err(&adapter->pdev->dev,
2018 				"UE: %s bit set\n", ue_status_low_desc[i]);
2019 		}
2020 	}
2021 	if (ue_hi) {
2022 		for (i = 0; ue_hi; ue_hi >>= 1, i++) {
2023 			if (ue_hi & 1)
2024 				dev_err(&adapter->pdev->dev,
2025 				"UE: %s bit set\n", ue_status_hi_desc[i]);
2026 		}
2027 	}
2028 
2029 	if (sliport_status & SLIPORT_STATUS_ERR_MASK) {
2030 		dev_err(&adapter->pdev->dev,
2031 			"sliport status 0x%x\n", sliport_status);
2032 		dev_err(&adapter->pdev->dev,
2033 			"sliport error1 0x%x\n", sliport_err1);
2034 		dev_err(&adapter->pdev->dev,
2035 			"sliport error2 0x%x\n", sliport_err2);
2036 	}
2037 }
2038 
2039 static void be_worker(struct work_struct *work)
2040 {
2041 	struct be_adapter *adapter =
2042 		container_of(work, struct be_adapter, work.work);
2043 	struct be_rx_obj *rxo;
2044 	int i;
2045 
2046 	if (!adapter->ue_detected)
2047 		be_detect_dump_ue(adapter);
2048 
2049 	/* when interrupts are not yet enabled, just reap any pending
2050 	* mcc completions */
2051 	if (!netif_running(adapter->netdev)) {
2052 		int mcc_compl, status = 0;
2053 
2054 		mcc_compl = be_process_mcc(adapter, &status);
2055 
2056 		if (mcc_compl) {
2057 			struct be_mcc_obj *mcc_obj = &adapter->mcc_obj;
2058 			be_cq_notify(adapter, mcc_obj->cq.id, false, mcc_compl);
2059 		}
2060 
2061 		goto reschedule;
2062 	}
2063 
2064 	if (!adapter->stats_cmd_sent) {
2065 		if (lancer_chip(adapter))
2066 			lancer_cmd_get_pport_stats(adapter,
2067 						&adapter->stats_cmd);
2068 		else
2069 			be_cmd_get_stats(adapter, &adapter->stats_cmd);
2070 	}
2071 
2072 	for_all_rx_queues(adapter, rxo, i) {
2073 		be_rx_eqd_update(adapter, rxo);
2074 
2075 		if (rxo->rx_post_starved) {
2076 			rxo->rx_post_starved = false;
2077 			be_post_rx_frags(rxo, GFP_KERNEL);
2078 		}
2079 	}
2080 
2081 reschedule:
2082 	adapter->work_counter++;
2083 	schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
2084 }
2085 
2086 static void be_msix_disable(struct be_adapter *adapter)
2087 {
2088 	if (msix_enabled(adapter)) {
2089 		pci_disable_msix(adapter->pdev);
2090 		adapter->num_msix_vec = 0;
2091 	}
2092 }
2093 
2094 static void be_msix_enable(struct be_adapter *adapter)
2095 {
2096 #define BE_MIN_MSIX_VECTORS	(1 + 1) /* Rx + Tx */
2097 	int i, status, num_vec;
2098 
2099 	num_vec = be_num_rxqs_want(adapter) + 1;
2100 
2101 	for (i = 0; i < num_vec; i++)
2102 		adapter->msix_entries[i].entry = i;
2103 
2104 	status = pci_enable_msix(adapter->pdev, adapter->msix_entries, num_vec);
2105 	if (status == 0) {
2106 		goto done;
2107 	} else if (status >= BE_MIN_MSIX_VECTORS) {
2108 		num_vec = status;
2109 		if (pci_enable_msix(adapter->pdev, adapter->msix_entries,
2110 				num_vec) == 0)
2111 			goto done;
2112 	}
2113 	return;
2114 done:
2115 	adapter->num_msix_vec = num_vec;
2116 	return;
2117 }
2118 
2119 static int be_sriov_enable(struct be_adapter *adapter)
2120 {
2121 	be_check_sriov_fn_type(adapter);
2122 #ifdef CONFIG_PCI_IOV
2123 	if (be_physfn(adapter) && num_vfs) {
2124 		int status, pos;
2125 		u16 nvfs;
2126 
2127 		pos = pci_find_ext_capability(adapter->pdev,
2128 						PCI_EXT_CAP_ID_SRIOV);
2129 		pci_read_config_word(adapter->pdev,
2130 					pos + PCI_SRIOV_TOTAL_VF, &nvfs);
2131 
2132 		if (num_vfs > nvfs) {
2133 			dev_info(&adapter->pdev->dev,
2134 					"Device supports %d VFs and not %d\n",
2135 					nvfs, num_vfs);
2136 			num_vfs = nvfs;
2137 		}
2138 
2139 		status = pci_enable_sriov(adapter->pdev, num_vfs);
2140 		adapter->sriov_enabled = status ? false : true;
2141 
2142 		if (adapter->sriov_enabled) {
2143 			adapter->vf_cfg = kcalloc(num_vfs,
2144 						sizeof(struct be_vf_cfg),
2145 						GFP_KERNEL);
2146 			if (!adapter->vf_cfg)
2147 				return -ENOMEM;
2148 		}
2149 	}
2150 #endif
2151 	return 0;
2152 }
2153 
2154 static void be_sriov_disable(struct be_adapter *adapter)
2155 {
2156 #ifdef CONFIG_PCI_IOV
2157 	if (adapter->sriov_enabled) {
2158 		pci_disable_sriov(adapter->pdev);
2159 		kfree(adapter->vf_cfg);
2160 		adapter->sriov_enabled = false;
2161 	}
2162 #endif
2163 }
2164 
2165 static inline int be_msix_vec_get(struct be_adapter *adapter,
2166 					struct be_eq_obj *eq_obj)
2167 {
2168 	return adapter->msix_entries[eq_obj->eq_idx].vector;
2169 }
2170 
2171 static int be_request_irq(struct be_adapter *adapter,
2172 		struct be_eq_obj *eq_obj,
2173 		void *handler, char *desc, void *context)
2174 {
2175 	struct net_device *netdev = adapter->netdev;
2176 	int vec;
2177 
2178 	sprintf(eq_obj->desc, "%s-%s", netdev->name, desc);
2179 	vec = be_msix_vec_get(adapter, eq_obj);
2180 	return request_irq(vec, handler, 0, eq_obj->desc, context);
2181 }
2182 
2183 static void be_free_irq(struct be_adapter *adapter, struct be_eq_obj *eq_obj,
2184 			void *context)
2185 {
2186 	int vec = be_msix_vec_get(adapter, eq_obj);
2187 	free_irq(vec, context);
2188 }
2189 
2190 static int be_msix_register(struct be_adapter *adapter)
2191 {
2192 	struct be_rx_obj *rxo;
2193 	int status, i;
2194 	char qname[10];
2195 
2196 	status = be_request_irq(adapter, &adapter->tx_eq, be_msix_tx_mcc, "tx",
2197 				adapter);
2198 	if (status)
2199 		goto err;
2200 
2201 	for_all_rx_queues(adapter, rxo, i) {
2202 		sprintf(qname, "rxq%d", i);
2203 		status = be_request_irq(adapter, &rxo->rx_eq, be_msix_rx,
2204 				qname, rxo);
2205 		if (status)
2206 			goto err_msix;
2207 	}
2208 
2209 	return 0;
2210 
2211 err_msix:
2212 	be_free_irq(adapter, &adapter->tx_eq, adapter);
2213 
2214 	for (i--, rxo = &adapter->rx_obj[i]; i >= 0; i--, rxo--)
2215 		be_free_irq(adapter, &rxo->rx_eq, rxo);
2216 
2217 err:
2218 	dev_warn(&adapter->pdev->dev,
2219 		"MSIX Request IRQ failed - err %d\n", status);
2220 	be_msix_disable(adapter);
2221 	return status;
2222 }
2223 
2224 static int be_irq_register(struct be_adapter *adapter)
2225 {
2226 	struct net_device *netdev = adapter->netdev;
2227 	int status;
2228 
2229 	if (msix_enabled(adapter)) {
2230 		status = be_msix_register(adapter);
2231 		if (status == 0)
2232 			goto done;
2233 		/* INTx is not supported for VF */
2234 		if (!be_physfn(adapter))
2235 			return status;
2236 	}
2237 
2238 	/* INTx */
2239 	netdev->irq = adapter->pdev->irq;
2240 	status = request_irq(netdev->irq, be_intx, IRQF_SHARED, netdev->name,
2241 			adapter);
2242 	if (status) {
2243 		dev_err(&adapter->pdev->dev,
2244 			"INTx request IRQ failed - err %d\n", status);
2245 		return status;
2246 	}
2247 done:
2248 	adapter->isr_registered = true;
2249 	return 0;
2250 }
2251 
2252 static void be_irq_unregister(struct be_adapter *adapter)
2253 {
2254 	struct net_device *netdev = adapter->netdev;
2255 	struct be_rx_obj *rxo;
2256 	int i;
2257 
2258 	if (!adapter->isr_registered)
2259 		return;
2260 
2261 	/* INTx */
2262 	if (!msix_enabled(adapter)) {
2263 		free_irq(netdev->irq, adapter);
2264 		goto done;
2265 	}
2266 
2267 	/* MSIx */
2268 	be_free_irq(adapter, &adapter->tx_eq, adapter);
2269 
2270 	for_all_rx_queues(adapter, rxo, i)
2271 		be_free_irq(adapter, &rxo->rx_eq, rxo);
2272 
2273 done:
2274 	adapter->isr_registered = false;
2275 }
2276 
2277 static void be_rx_queues_clear(struct be_adapter *adapter)
2278 {
2279 	struct be_queue_info *q;
2280 	struct be_rx_obj *rxo;
2281 	int i;
2282 
2283 	for_all_rx_queues(adapter, rxo, i) {
2284 		q = &rxo->q;
2285 		if (q->created) {
2286 			be_cmd_rxq_destroy(adapter, q);
2287 			/* After the rxq is invalidated, wait for a grace time
2288 			 * of 1ms for all dma to end and the flush compl to
2289 			 * arrive
2290 			 */
2291 			mdelay(1);
2292 			be_rx_q_clean(adapter, rxo);
2293 		}
2294 
2295 		/* Clear any residual events */
2296 		q = &rxo->rx_eq.q;
2297 		if (q->created)
2298 			be_eq_clean(adapter, &rxo->rx_eq);
2299 	}
2300 }
2301 
2302 static int be_close(struct net_device *netdev)
2303 {
2304 	struct be_adapter *adapter = netdev_priv(netdev);
2305 	struct be_rx_obj *rxo;
2306 	struct be_tx_obj *txo;
2307 	struct be_eq_obj *tx_eq = &adapter->tx_eq;
2308 	int vec, i;
2309 
2310 	be_async_mcc_disable(adapter);
2311 
2312 	if (!lancer_chip(adapter))
2313 		be_intr_set(adapter, false);
2314 
2315 	for_all_rx_queues(adapter, rxo, i)
2316 		napi_disable(&rxo->rx_eq.napi);
2317 
2318 	napi_disable(&tx_eq->napi);
2319 
2320 	if (lancer_chip(adapter)) {
2321 		be_cq_notify(adapter, adapter->mcc_obj.cq.id, false, 0);
2322 		for_all_rx_queues(adapter, rxo, i)
2323 			 be_cq_notify(adapter, rxo->cq.id, false, 0);
2324 		for_all_tx_queues(adapter, txo, i)
2325 			 be_cq_notify(adapter, txo->cq.id, false, 0);
2326 	}
2327 
2328 	if (msix_enabled(adapter)) {
2329 		vec = be_msix_vec_get(adapter, tx_eq);
2330 		synchronize_irq(vec);
2331 
2332 		for_all_rx_queues(adapter, rxo, i) {
2333 			vec = be_msix_vec_get(adapter, &rxo->rx_eq);
2334 			synchronize_irq(vec);
2335 		}
2336 	} else {
2337 		synchronize_irq(netdev->irq);
2338 	}
2339 	be_irq_unregister(adapter);
2340 
2341 	/* Wait for all pending tx completions to arrive so that
2342 	 * all tx skbs are freed.
2343 	 */
2344 	for_all_tx_queues(adapter, txo, i)
2345 		be_tx_compl_clean(adapter, txo);
2346 
2347 	be_rx_queues_clear(adapter);
2348 	return 0;
2349 }
2350 
2351 static int be_rx_queues_setup(struct be_adapter *adapter)
2352 {
2353 	struct be_rx_obj *rxo;
2354 	int rc, i;
2355 	u8 rsstable[MAX_RSS_QS];
2356 
2357 	for_all_rx_queues(adapter, rxo, i) {
2358 		rc = be_cmd_rxq_create(adapter, &rxo->q, rxo->cq.id,
2359 			rx_frag_size, BE_MAX_JUMBO_FRAME_SIZE,
2360 			adapter->if_handle,
2361 			(i > 0) ? 1 : 0/* rss enable */, &rxo->rss_id);
2362 		if (rc)
2363 			return rc;
2364 	}
2365 
2366 	if (be_multi_rxq(adapter)) {
2367 		for_all_rss_queues(adapter, rxo, i)
2368 			rsstable[i] = rxo->rss_id;
2369 
2370 		rc = be_cmd_rss_config(adapter, rsstable,
2371 			adapter->num_rx_qs - 1);
2372 		if (rc)
2373 			return rc;
2374 	}
2375 
2376 	/* First time posting */
2377 	for_all_rx_queues(adapter, rxo, i) {
2378 		be_post_rx_frags(rxo, GFP_KERNEL);
2379 		napi_enable(&rxo->rx_eq.napi);
2380 	}
2381 	return 0;
2382 }
2383 
2384 static int be_open(struct net_device *netdev)
2385 {
2386 	struct be_adapter *adapter = netdev_priv(netdev);
2387 	struct be_eq_obj *tx_eq = &adapter->tx_eq;
2388 	struct be_rx_obj *rxo;
2389 	int status, i;
2390 
2391 	status = be_rx_queues_setup(adapter);
2392 	if (status)
2393 		goto err;
2394 
2395 	napi_enable(&tx_eq->napi);
2396 
2397 	be_irq_register(adapter);
2398 
2399 	if (!lancer_chip(adapter))
2400 		be_intr_set(adapter, true);
2401 
2402 	/* The evt queues are created in unarmed state; arm them */
2403 	for_all_rx_queues(adapter, rxo, i) {
2404 		be_eq_notify(adapter, rxo->rx_eq.q.id, true, false, 0);
2405 		be_cq_notify(adapter, rxo->cq.id, true, 0);
2406 	}
2407 	be_eq_notify(adapter, tx_eq->q.id, true, false, 0);
2408 
2409 	/* Now that interrupts are on we can process async mcc */
2410 	be_async_mcc_enable(adapter);
2411 
2412 	return 0;
2413 err:
2414 	be_close(adapter->netdev);
2415 	return -EIO;
2416 }
2417 
2418 static int be_setup_wol(struct be_adapter *adapter, bool enable)
2419 {
2420 	struct be_dma_mem cmd;
2421 	int status = 0;
2422 	u8 mac[ETH_ALEN];
2423 
2424 	memset(mac, 0, ETH_ALEN);
2425 
2426 	cmd.size = sizeof(struct be_cmd_req_acpi_wol_magic_config);
2427 	cmd.va = dma_alloc_coherent(&adapter->pdev->dev, cmd.size, &cmd.dma,
2428 				    GFP_KERNEL);
2429 	if (cmd.va == NULL)
2430 		return -1;
2431 	memset(cmd.va, 0, cmd.size);
2432 
2433 	if (enable) {
2434 		status = pci_write_config_dword(adapter->pdev,
2435 			PCICFG_PM_CONTROL_OFFSET, PCICFG_PM_CONTROL_MASK);
2436 		if (status) {
2437 			dev_err(&adapter->pdev->dev,
2438 				"Could not enable Wake-on-lan\n");
2439 			dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va,
2440 					  cmd.dma);
2441 			return status;
2442 		}
2443 		status = be_cmd_enable_magic_wol(adapter,
2444 				adapter->netdev->dev_addr, &cmd);
2445 		pci_enable_wake(adapter->pdev, PCI_D3hot, 1);
2446 		pci_enable_wake(adapter->pdev, PCI_D3cold, 1);
2447 	} else {
2448 		status = be_cmd_enable_magic_wol(adapter, mac, &cmd);
2449 		pci_enable_wake(adapter->pdev, PCI_D3hot, 0);
2450 		pci_enable_wake(adapter->pdev, PCI_D3cold, 0);
2451 	}
2452 
2453 	dma_free_coherent(&adapter->pdev->dev, cmd.size, cmd.va, cmd.dma);
2454 	return status;
2455 }
2456 
2457 /*
2458  * Generate a seed MAC address from the PF MAC Address using jhash.
2459  * MAC Address for VFs are assigned incrementally starting from the seed.
2460  * These addresses are programmed in the ASIC by the PF and the VF driver
2461  * queries for the MAC address during its probe.
2462  */
2463 static inline int be_vf_eth_addr_config(struct be_adapter *adapter)
2464 {
2465 	u32 vf;
2466 	int status = 0;
2467 	u8 mac[ETH_ALEN];
2468 
2469 	be_vf_eth_addr_generate(adapter, mac);
2470 
2471 	for (vf = 0; vf < num_vfs; vf++) {
2472 		status = be_cmd_pmac_add(adapter, mac,
2473 					adapter->vf_cfg[vf].vf_if_handle,
2474 					&adapter->vf_cfg[vf].vf_pmac_id,
2475 					vf + 1);
2476 		if (status)
2477 			dev_err(&adapter->pdev->dev,
2478 				"Mac address add failed for VF %d\n", vf);
2479 		else
2480 			memcpy(adapter->vf_cfg[vf].vf_mac_addr, mac, ETH_ALEN);
2481 
2482 		mac[5] += 1;
2483 	}
2484 	return status;
2485 }
2486 
2487 static void be_vf_clear(struct be_adapter *adapter)
2488 {
2489 	u32 vf;
2490 
2491 	for (vf = 0; vf < num_vfs; vf++) {
2492 		if (adapter->vf_cfg[vf].vf_pmac_id != BE_INVALID_PMAC_ID)
2493 			be_cmd_pmac_del(adapter,
2494 					adapter->vf_cfg[vf].vf_if_handle,
2495 					adapter->vf_cfg[vf].vf_pmac_id, vf + 1);
2496 	}
2497 
2498 	for (vf = 0; vf < num_vfs; vf++)
2499 		if (adapter->vf_cfg[vf].vf_if_handle)
2500 			be_cmd_if_destroy(adapter,
2501 				adapter->vf_cfg[vf].vf_if_handle, vf + 1);
2502 }
2503 
2504 static int be_clear(struct be_adapter *adapter)
2505 {
2506 	if (be_physfn(adapter) && adapter->sriov_enabled)
2507 		be_vf_clear(adapter);
2508 
2509 	be_cmd_if_destroy(adapter, adapter->if_handle,  0);
2510 
2511 	be_mcc_queues_destroy(adapter);
2512 	be_rx_queues_destroy(adapter);
2513 	be_tx_queues_destroy(adapter);
2514 	adapter->eq_next_idx = 0;
2515 
2516 	adapter->be3_native = false;
2517 	adapter->promiscuous = false;
2518 
2519 	/* tell fw we're done with firing cmds */
2520 	be_cmd_fw_clean(adapter);
2521 	return 0;
2522 }
2523 
2524 static int be_vf_setup(struct be_adapter *adapter)
2525 {
2526 	u32 cap_flags, en_flags, vf;
2527 	u16 lnk_speed;
2528 	int status;
2529 
2530 	cap_flags = en_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST;
2531 	for (vf = 0; vf < num_vfs; vf++) {
2532 		status = be_cmd_if_create(adapter, cap_flags, en_flags, NULL,
2533 					&adapter->vf_cfg[vf].vf_if_handle,
2534 					NULL, vf+1);
2535 		if (status)
2536 			goto err;
2537 		adapter->vf_cfg[vf].vf_pmac_id = BE_INVALID_PMAC_ID;
2538 	}
2539 
2540 	if (!lancer_chip(adapter)) {
2541 		status = be_vf_eth_addr_config(adapter);
2542 		if (status)
2543 			goto err;
2544 	}
2545 
2546 	for (vf = 0; vf < num_vfs; vf++) {
2547 		status = be_cmd_link_status_query(adapter, NULL, &lnk_speed,
2548 				vf + 1);
2549 		if (status)
2550 			goto err;
2551 		adapter->vf_cfg[vf].vf_tx_rate = lnk_speed * 10;
2552 	}
2553 	return 0;
2554 err:
2555 	return status;
2556 }
2557 
2558 static int be_setup(struct be_adapter *adapter)
2559 {
2560 	struct net_device *netdev = adapter->netdev;
2561 	u32 cap_flags, en_flags;
2562 	u32 tx_fc, rx_fc;
2563 	int status;
2564 	u8 mac[ETH_ALEN];
2565 
2566 	/* Allow all priorities by default. A GRP5 evt may modify this */
2567 	adapter->vlan_prio_bmap = 0xff;
2568 	adapter->link_speed = -1;
2569 
2570 	be_cmd_req_native_mode(adapter);
2571 
2572 	status = be_tx_queues_create(adapter);
2573 	if (status != 0)
2574 		goto err;
2575 
2576 	status = be_rx_queues_create(adapter);
2577 	if (status != 0)
2578 		goto err;
2579 
2580 	status = be_mcc_queues_create(adapter);
2581 	if (status != 0)
2582 		goto err;
2583 
2584 	memset(mac, 0, ETH_ALEN);
2585 	status = be_cmd_mac_addr_query(adapter, mac, MAC_ADDRESS_TYPE_NETWORK,
2586 			true /*permanent */, 0);
2587 	if (status)
2588 		return status;
2589 	memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
2590 	memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
2591 
2592 	en_flags = BE_IF_FLAGS_UNTAGGED | BE_IF_FLAGS_BROADCAST |
2593 			BE_IF_FLAGS_MULTICAST | BE_IF_FLAGS_PASS_L3L4_ERRORS;
2594 	cap_flags = en_flags | BE_IF_FLAGS_MCAST_PROMISCUOUS |
2595 			BE_IF_FLAGS_PROMISCUOUS;
2596 	if (adapter->function_caps & BE_FUNCTION_CAPS_RSS) {
2597 		cap_flags |= BE_IF_FLAGS_RSS;
2598 		en_flags |= BE_IF_FLAGS_RSS;
2599 	}
2600 	status = be_cmd_if_create(adapter, cap_flags, en_flags,
2601 			netdev->dev_addr, &adapter->if_handle,
2602 			&adapter->pmac_id, 0);
2603 	if (status != 0)
2604 		goto err;
2605 
2606 	/* For BEx, the VF's permanent mac queried from card is incorrect.
2607 	 * Query the mac configued by the PF using if_handle
2608 	 */
2609 	if (!be_physfn(adapter) && !lancer_chip(adapter)) {
2610 		status = be_cmd_mac_addr_query(adapter, mac,
2611 			MAC_ADDRESS_TYPE_NETWORK, false, adapter->if_handle);
2612 		if (!status) {
2613 			memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
2614 			memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
2615 		}
2616 	}
2617 
2618 	be_cmd_get_fw_ver(adapter, adapter->fw_ver, NULL);
2619 
2620 	status = be_vid_config(adapter, false, 0);
2621 	if (status)
2622 		goto err;
2623 
2624 	be_set_rx_mode(adapter->netdev);
2625 
2626 	status = be_cmd_get_flow_control(adapter, &tx_fc, &rx_fc);
2627 	if (status)
2628 		goto err;
2629 	if (rx_fc != adapter->rx_fc || tx_fc != adapter->tx_fc) {
2630 		status = be_cmd_set_flow_control(adapter, adapter->tx_fc,
2631 					adapter->rx_fc);
2632 		if (status)
2633 			goto err;
2634 	}
2635 
2636 	pcie_set_readrq(adapter->pdev, 4096);
2637 
2638 	if (be_physfn(adapter) && adapter->sriov_enabled) {
2639 		status = be_vf_setup(adapter);
2640 		if (status)
2641 			goto err;
2642 	}
2643 
2644 	return 0;
2645 err:
2646 	be_clear(adapter);
2647 	return status;
2648 }
2649 
2650 #define FW_FILE_HDR_SIGN 	"ServerEngines Corp. "
2651 static bool be_flash_redboot(struct be_adapter *adapter,
2652 			const u8 *p, u32 img_start, int image_size,
2653 			int hdr_size)
2654 {
2655 	u32 crc_offset;
2656 	u8 flashed_crc[4];
2657 	int status;
2658 
2659 	crc_offset = hdr_size + img_start + image_size - 4;
2660 
2661 	p += crc_offset;
2662 
2663 	status = be_cmd_get_flash_crc(adapter, flashed_crc,
2664 			(image_size - 4));
2665 	if (status) {
2666 		dev_err(&adapter->pdev->dev,
2667 		"could not get crc from flash, not flashing redboot\n");
2668 		return false;
2669 	}
2670 
2671 	/*update redboot only if crc does not match*/
2672 	if (!memcmp(flashed_crc, p, 4))
2673 		return false;
2674 	else
2675 		return true;
2676 }
2677 
2678 static bool phy_flashing_required(struct be_adapter *adapter)
2679 {
2680 	int status = 0;
2681 	struct be_phy_info phy_info;
2682 
2683 	status = be_cmd_get_phy_info(adapter, &phy_info);
2684 	if (status)
2685 		return false;
2686 	if ((phy_info.phy_type == TN_8022) &&
2687 		(phy_info.interface_type == PHY_TYPE_BASET_10GB)) {
2688 		return true;
2689 	}
2690 	return false;
2691 }
2692 
2693 static int be_flash_data(struct be_adapter *adapter,
2694 			const struct firmware *fw,
2695 			struct be_dma_mem *flash_cmd, int num_of_images)
2696 
2697 {
2698 	int status = 0, i, filehdr_size = 0;
2699 	u32 total_bytes = 0, flash_op;
2700 	int num_bytes;
2701 	const u8 *p = fw->data;
2702 	struct be_cmd_write_flashrom *req = flash_cmd->va;
2703 	const struct flash_comp *pflashcomp;
2704 	int num_comp;
2705 
2706 	static const struct flash_comp gen3_flash_types[10] = {
2707 		{ FLASH_iSCSI_PRIMARY_IMAGE_START_g3, IMG_TYPE_ISCSI_ACTIVE,
2708 			FLASH_IMAGE_MAX_SIZE_g3},
2709 		{ FLASH_REDBOOT_START_g3, IMG_TYPE_REDBOOT,
2710 			FLASH_REDBOOT_IMAGE_MAX_SIZE_g3},
2711 		{ FLASH_iSCSI_BIOS_START_g3, IMG_TYPE_BIOS,
2712 			FLASH_BIOS_IMAGE_MAX_SIZE_g3},
2713 		{ FLASH_PXE_BIOS_START_g3, IMG_TYPE_PXE_BIOS,
2714 			FLASH_BIOS_IMAGE_MAX_SIZE_g3},
2715 		{ FLASH_FCoE_BIOS_START_g3, IMG_TYPE_FCOE_BIOS,
2716 			FLASH_BIOS_IMAGE_MAX_SIZE_g3},
2717 		{ FLASH_iSCSI_BACKUP_IMAGE_START_g3, IMG_TYPE_ISCSI_BACKUP,
2718 			FLASH_IMAGE_MAX_SIZE_g3},
2719 		{ FLASH_FCoE_PRIMARY_IMAGE_START_g3, IMG_TYPE_FCOE_FW_ACTIVE,
2720 			FLASH_IMAGE_MAX_SIZE_g3},
2721 		{ FLASH_FCoE_BACKUP_IMAGE_START_g3, IMG_TYPE_FCOE_FW_BACKUP,
2722 			FLASH_IMAGE_MAX_SIZE_g3},
2723 		{ FLASH_NCSI_START_g3, IMG_TYPE_NCSI_FW,
2724 			FLASH_NCSI_IMAGE_MAX_SIZE_g3},
2725 		{ FLASH_PHY_FW_START_g3, IMG_TYPE_PHY_FW,
2726 			FLASH_PHY_FW_IMAGE_MAX_SIZE_g3}
2727 	};
2728 	static const struct flash_comp gen2_flash_types[8] = {
2729 		{ FLASH_iSCSI_PRIMARY_IMAGE_START_g2, IMG_TYPE_ISCSI_ACTIVE,
2730 			FLASH_IMAGE_MAX_SIZE_g2},
2731 		{ FLASH_REDBOOT_START_g2, IMG_TYPE_REDBOOT,
2732 			FLASH_REDBOOT_IMAGE_MAX_SIZE_g2},
2733 		{ FLASH_iSCSI_BIOS_START_g2, IMG_TYPE_BIOS,
2734 			FLASH_BIOS_IMAGE_MAX_SIZE_g2},
2735 		{ FLASH_PXE_BIOS_START_g2, IMG_TYPE_PXE_BIOS,
2736 			FLASH_BIOS_IMAGE_MAX_SIZE_g2},
2737 		{ FLASH_FCoE_BIOS_START_g2, IMG_TYPE_FCOE_BIOS,
2738 			FLASH_BIOS_IMAGE_MAX_SIZE_g2},
2739 		{ FLASH_iSCSI_BACKUP_IMAGE_START_g2, IMG_TYPE_ISCSI_BACKUP,
2740 			FLASH_IMAGE_MAX_SIZE_g2},
2741 		{ FLASH_FCoE_PRIMARY_IMAGE_START_g2, IMG_TYPE_FCOE_FW_ACTIVE,
2742 			FLASH_IMAGE_MAX_SIZE_g2},
2743 		{ FLASH_FCoE_BACKUP_IMAGE_START_g2, IMG_TYPE_FCOE_FW_BACKUP,
2744 			 FLASH_IMAGE_MAX_SIZE_g2}
2745 	};
2746 
2747 	if (adapter->generation == BE_GEN3) {
2748 		pflashcomp = gen3_flash_types;
2749 		filehdr_size = sizeof(struct flash_file_hdr_g3);
2750 		num_comp = ARRAY_SIZE(gen3_flash_types);
2751 	} else {
2752 		pflashcomp = gen2_flash_types;
2753 		filehdr_size = sizeof(struct flash_file_hdr_g2);
2754 		num_comp = ARRAY_SIZE(gen2_flash_types);
2755 	}
2756 	for (i = 0; i < num_comp; i++) {
2757 		if ((pflashcomp[i].optype == IMG_TYPE_NCSI_FW) &&
2758 				memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0)
2759 			continue;
2760 		if (pflashcomp[i].optype == IMG_TYPE_PHY_FW) {
2761 			if (!phy_flashing_required(adapter))
2762 				continue;
2763 		}
2764 		if ((pflashcomp[i].optype == IMG_TYPE_REDBOOT) &&
2765 			(!be_flash_redboot(adapter, fw->data,
2766 			pflashcomp[i].offset, pflashcomp[i].size, filehdr_size +
2767 			(num_of_images * sizeof(struct image_hdr)))))
2768 			continue;
2769 		p = fw->data;
2770 		p += filehdr_size + pflashcomp[i].offset
2771 			+ (num_of_images * sizeof(struct image_hdr));
2772 		if (p + pflashcomp[i].size > fw->data + fw->size)
2773 			return -1;
2774 		total_bytes = pflashcomp[i].size;
2775 		while (total_bytes) {
2776 			if (total_bytes > 32*1024)
2777 				num_bytes = 32*1024;
2778 			else
2779 				num_bytes = total_bytes;
2780 			total_bytes -= num_bytes;
2781 			if (!total_bytes) {
2782 				if (pflashcomp[i].optype == IMG_TYPE_PHY_FW)
2783 					flash_op = FLASHROM_OPER_PHY_FLASH;
2784 				else
2785 					flash_op = FLASHROM_OPER_FLASH;
2786 			} else {
2787 				if (pflashcomp[i].optype == IMG_TYPE_PHY_FW)
2788 					flash_op = FLASHROM_OPER_PHY_SAVE;
2789 				else
2790 					flash_op = FLASHROM_OPER_SAVE;
2791 			}
2792 			memcpy(req->params.data_buf, p, num_bytes);
2793 			p += num_bytes;
2794 			status = be_cmd_write_flashrom(adapter, flash_cmd,
2795 				pflashcomp[i].optype, flash_op, num_bytes);
2796 			if (status) {
2797 				if ((status == ILLEGAL_IOCTL_REQ) &&
2798 					(pflashcomp[i].optype ==
2799 						IMG_TYPE_PHY_FW))
2800 					break;
2801 				dev_err(&adapter->pdev->dev,
2802 					"cmd to write to flash rom failed.\n");
2803 				return -1;
2804 			}
2805 		}
2806 	}
2807 	return 0;
2808 }
2809 
2810 static int get_ufigen_type(struct flash_file_hdr_g2 *fhdr)
2811 {
2812 	if (fhdr == NULL)
2813 		return 0;
2814 	if (fhdr->build[0] == '3')
2815 		return BE_GEN3;
2816 	else if (fhdr->build[0] == '2')
2817 		return BE_GEN2;
2818 	else
2819 		return 0;
2820 }
2821 
2822 static int lancer_fw_download(struct be_adapter *adapter,
2823 				const struct firmware *fw)
2824 {
2825 #define LANCER_FW_DOWNLOAD_CHUNK      (32 * 1024)
2826 #define LANCER_FW_DOWNLOAD_LOCATION   "/prg"
2827 	struct be_dma_mem flash_cmd;
2828 	const u8 *data_ptr = NULL;
2829 	u8 *dest_image_ptr = NULL;
2830 	size_t image_size = 0;
2831 	u32 chunk_size = 0;
2832 	u32 data_written = 0;
2833 	u32 offset = 0;
2834 	int status = 0;
2835 	u8 add_status = 0;
2836 
2837 	if (!IS_ALIGNED(fw->size, sizeof(u32))) {
2838 		dev_err(&adapter->pdev->dev,
2839 			"FW Image not properly aligned. "
2840 			"Length must be 4 byte aligned.\n");
2841 		status = -EINVAL;
2842 		goto lancer_fw_exit;
2843 	}
2844 
2845 	flash_cmd.size = sizeof(struct lancer_cmd_req_write_object)
2846 				+ LANCER_FW_DOWNLOAD_CHUNK;
2847 	flash_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, flash_cmd.size,
2848 						&flash_cmd.dma, GFP_KERNEL);
2849 	if (!flash_cmd.va) {
2850 		status = -ENOMEM;
2851 		dev_err(&adapter->pdev->dev,
2852 			"Memory allocation failure while flashing\n");
2853 		goto lancer_fw_exit;
2854 	}
2855 
2856 	dest_image_ptr = flash_cmd.va +
2857 				sizeof(struct lancer_cmd_req_write_object);
2858 	image_size = fw->size;
2859 	data_ptr = fw->data;
2860 
2861 	while (image_size) {
2862 		chunk_size = min_t(u32, image_size, LANCER_FW_DOWNLOAD_CHUNK);
2863 
2864 		/* Copy the image chunk content. */
2865 		memcpy(dest_image_ptr, data_ptr, chunk_size);
2866 
2867 		status = lancer_cmd_write_object(adapter, &flash_cmd,
2868 				chunk_size, offset, LANCER_FW_DOWNLOAD_LOCATION,
2869 				&data_written, &add_status);
2870 
2871 		if (status)
2872 			break;
2873 
2874 		offset += data_written;
2875 		data_ptr += data_written;
2876 		image_size -= data_written;
2877 	}
2878 
2879 	if (!status) {
2880 		/* Commit the FW written */
2881 		status = lancer_cmd_write_object(adapter, &flash_cmd,
2882 					0, offset, LANCER_FW_DOWNLOAD_LOCATION,
2883 					&data_written, &add_status);
2884 	}
2885 
2886 	dma_free_coherent(&adapter->pdev->dev, flash_cmd.size, flash_cmd.va,
2887 				flash_cmd.dma);
2888 	if (status) {
2889 		dev_err(&adapter->pdev->dev,
2890 			"Firmware load error. "
2891 			"Status code: 0x%x Additional Status: 0x%x\n",
2892 			status, add_status);
2893 		goto lancer_fw_exit;
2894 	}
2895 
2896 	dev_info(&adapter->pdev->dev, "Firmware flashed successfully\n");
2897 lancer_fw_exit:
2898 	return status;
2899 }
2900 
2901 static int be_fw_download(struct be_adapter *adapter, const struct firmware* fw)
2902 {
2903 	struct flash_file_hdr_g2 *fhdr;
2904 	struct flash_file_hdr_g3 *fhdr3;
2905 	struct image_hdr *img_hdr_ptr = NULL;
2906 	struct be_dma_mem flash_cmd;
2907 	const u8 *p;
2908 	int status = 0, i = 0, num_imgs = 0;
2909 
2910 	p = fw->data;
2911 	fhdr = (struct flash_file_hdr_g2 *) p;
2912 
2913 	flash_cmd.size = sizeof(struct be_cmd_write_flashrom) + 32*1024;
2914 	flash_cmd.va = dma_alloc_coherent(&adapter->pdev->dev, flash_cmd.size,
2915 					  &flash_cmd.dma, GFP_KERNEL);
2916 	if (!flash_cmd.va) {
2917 		status = -ENOMEM;
2918 		dev_err(&adapter->pdev->dev,
2919 			"Memory allocation failure while flashing\n");
2920 		goto be_fw_exit;
2921 	}
2922 
2923 	if ((adapter->generation == BE_GEN3) &&
2924 			(get_ufigen_type(fhdr) == BE_GEN3)) {
2925 		fhdr3 = (struct flash_file_hdr_g3 *) fw->data;
2926 		num_imgs = le32_to_cpu(fhdr3->num_imgs);
2927 		for (i = 0; i < num_imgs; i++) {
2928 			img_hdr_ptr = (struct image_hdr *) (fw->data +
2929 					(sizeof(struct flash_file_hdr_g3) +
2930 					 i * sizeof(struct image_hdr)));
2931 			if (le32_to_cpu(img_hdr_ptr->imageid) == 1)
2932 				status = be_flash_data(adapter, fw, &flash_cmd,
2933 							num_imgs);
2934 		}
2935 	} else if ((adapter->generation == BE_GEN2) &&
2936 			(get_ufigen_type(fhdr) == BE_GEN2)) {
2937 		status = be_flash_data(adapter, fw, &flash_cmd, 0);
2938 	} else {
2939 		dev_err(&adapter->pdev->dev,
2940 			"UFI and Interface are not compatible for flashing\n");
2941 		status = -1;
2942 	}
2943 
2944 	dma_free_coherent(&adapter->pdev->dev, flash_cmd.size, flash_cmd.va,
2945 			  flash_cmd.dma);
2946 	if (status) {
2947 		dev_err(&adapter->pdev->dev, "Firmware load error\n");
2948 		goto be_fw_exit;
2949 	}
2950 
2951 	dev_info(&adapter->pdev->dev, "Firmware flashed successfully\n");
2952 
2953 be_fw_exit:
2954 	return status;
2955 }
2956 
2957 int be_load_fw(struct be_adapter *adapter, u8 *fw_file)
2958 {
2959 	const struct firmware *fw;
2960 	int status;
2961 
2962 	if (!netif_running(adapter->netdev)) {
2963 		dev_err(&adapter->pdev->dev,
2964 			"Firmware load not allowed (interface is down)\n");
2965 		return -1;
2966 	}
2967 
2968 	status = request_firmware(&fw, fw_file, &adapter->pdev->dev);
2969 	if (status)
2970 		goto fw_exit;
2971 
2972 	dev_info(&adapter->pdev->dev, "Flashing firmware file %s\n", fw_file);
2973 
2974 	if (lancer_chip(adapter))
2975 		status = lancer_fw_download(adapter, fw);
2976 	else
2977 		status = be_fw_download(adapter, fw);
2978 
2979 fw_exit:
2980 	release_firmware(fw);
2981 	return status;
2982 }
2983 
2984 static struct net_device_ops be_netdev_ops = {
2985 	.ndo_open		= be_open,
2986 	.ndo_stop		= be_close,
2987 	.ndo_start_xmit		= be_xmit,
2988 	.ndo_set_rx_mode	= be_set_rx_mode,
2989 	.ndo_set_mac_address	= be_mac_addr_set,
2990 	.ndo_change_mtu		= be_change_mtu,
2991 	.ndo_get_stats64	= be_get_stats64,
2992 	.ndo_validate_addr	= eth_validate_addr,
2993 	.ndo_vlan_rx_add_vid	= be_vlan_add_vid,
2994 	.ndo_vlan_rx_kill_vid	= be_vlan_rem_vid,
2995 	.ndo_set_vf_mac		= be_set_vf_mac,
2996 	.ndo_set_vf_vlan	= be_set_vf_vlan,
2997 	.ndo_set_vf_tx_rate	= be_set_vf_tx_rate,
2998 	.ndo_get_vf_config	= be_get_vf_config
2999 };
3000 
3001 static void be_netdev_init(struct net_device *netdev)
3002 {
3003 	struct be_adapter *adapter = netdev_priv(netdev);
3004 	struct be_rx_obj *rxo;
3005 	int i;
3006 
3007 	netdev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
3008 		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
3009 		NETIF_F_HW_VLAN_TX;
3010 	if (be_multi_rxq(adapter))
3011 		netdev->hw_features |= NETIF_F_RXHASH;
3012 
3013 	netdev->features |= netdev->hw_features |
3014 		NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_FILTER;
3015 
3016 	netdev->vlan_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
3017 		NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
3018 
3019 	netdev->flags |= IFF_MULTICAST;
3020 
3021 	netif_set_gso_max_size(netdev, 65535);
3022 
3023 	BE_SET_NETDEV_OPS(netdev, &be_netdev_ops);
3024 
3025 	SET_ETHTOOL_OPS(netdev, &be_ethtool_ops);
3026 
3027 	for_all_rx_queues(adapter, rxo, i)
3028 		netif_napi_add(netdev, &rxo->rx_eq.napi, be_poll_rx,
3029 				BE_NAPI_WEIGHT);
3030 
3031 	netif_napi_add(netdev, &adapter->tx_eq.napi, be_poll_tx_mcc,
3032 		BE_NAPI_WEIGHT);
3033 }
3034 
3035 static void be_unmap_pci_bars(struct be_adapter *adapter)
3036 {
3037 	if (adapter->csr)
3038 		iounmap(adapter->csr);
3039 	if (adapter->db)
3040 		iounmap(adapter->db);
3041 }
3042 
3043 static int be_map_pci_bars(struct be_adapter *adapter)
3044 {
3045 	u8 __iomem *addr;
3046 	int db_reg;
3047 
3048 	if (lancer_chip(adapter)) {
3049 		addr = ioremap_nocache(pci_resource_start(adapter->pdev, 0),
3050 			pci_resource_len(adapter->pdev, 0));
3051 		if (addr == NULL)
3052 			return -ENOMEM;
3053 		adapter->db = addr;
3054 		return 0;
3055 	}
3056 
3057 	if (be_physfn(adapter)) {
3058 		addr = ioremap_nocache(pci_resource_start(adapter->pdev, 2),
3059 				pci_resource_len(adapter->pdev, 2));
3060 		if (addr == NULL)
3061 			return -ENOMEM;
3062 		adapter->csr = addr;
3063 	}
3064 
3065 	if (adapter->generation == BE_GEN2) {
3066 		db_reg = 4;
3067 	} else {
3068 		if (be_physfn(adapter))
3069 			db_reg = 4;
3070 		else
3071 			db_reg = 0;
3072 	}
3073 	addr = ioremap_nocache(pci_resource_start(adapter->pdev, db_reg),
3074 				pci_resource_len(adapter->pdev, db_reg));
3075 	if (addr == NULL)
3076 		goto pci_map_err;
3077 	adapter->db = addr;
3078 
3079 	return 0;
3080 pci_map_err:
3081 	be_unmap_pci_bars(adapter);
3082 	return -ENOMEM;
3083 }
3084 
3085 
3086 static void be_ctrl_cleanup(struct be_adapter *adapter)
3087 {
3088 	struct be_dma_mem *mem = &adapter->mbox_mem_alloced;
3089 
3090 	be_unmap_pci_bars(adapter);
3091 
3092 	if (mem->va)
3093 		dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
3094 				  mem->dma);
3095 
3096 	mem = &adapter->rx_filter;
3097 	if (mem->va)
3098 		dma_free_coherent(&adapter->pdev->dev, mem->size, mem->va,
3099 				  mem->dma);
3100 }
3101 
3102 static int be_ctrl_init(struct be_adapter *adapter)
3103 {
3104 	struct be_dma_mem *mbox_mem_alloc = &adapter->mbox_mem_alloced;
3105 	struct be_dma_mem *mbox_mem_align = &adapter->mbox_mem;
3106 	struct be_dma_mem *rx_filter = &adapter->rx_filter;
3107 	int status;
3108 
3109 	status = be_map_pci_bars(adapter);
3110 	if (status)
3111 		goto done;
3112 
3113 	mbox_mem_alloc->size = sizeof(struct be_mcc_mailbox) + 16;
3114 	mbox_mem_alloc->va = dma_alloc_coherent(&adapter->pdev->dev,
3115 						mbox_mem_alloc->size,
3116 						&mbox_mem_alloc->dma,
3117 						GFP_KERNEL);
3118 	if (!mbox_mem_alloc->va) {
3119 		status = -ENOMEM;
3120 		goto unmap_pci_bars;
3121 	}
3122 	mbox_mem_align->size = sizeof(struct be_mcc_mailbox);
3123 	mbox_mem_align->va = PTR_ALIGN(mbox_mem_alloc->va, 16);
3124 	mbox_mem_align->dma = PTR_ALIGN(mbox_mem_alloc->dma, 16);
3125 	memset(mbox_mem_align->va, 0, sizeof(struct be_mcc_mailbox));
3126 
3127 	rx_filter->size = sizeof(struct be_cmd_req_rx_filter);
3128 	rx_filter->va = dma_alloc_coherent(&adapter->pdev->dev, rx_filter->size,
3129 					&rx_filter->dma, GFP_KERNEL);
3130 	if (rx_filter->va == NULL) {
3131 		status = -ENOMEM;
3132 		goto free_mbox;
3133 	}
3134 	memset(rx_filter->va, 0, rx_filter->size);
3135 
3136 	mutex_init(&adapter->mbox_lock);
3137 	spin_lock_init(&adapter->mcc_lock);
3138 	spin_lock_init(&adapter->mcc_cq_lock);
3139 
3140 	init_completion(&adapter->flash_compl);
3141 	pci_save_state(adapter->pdev);
3142 	return 0;
3143 
3144 free_mbox:
3145 	dma_free_coherent(&adapter->pdev->dev, mbox_mem_alloc->size,
3146 			  mbox_mem_alloc->va, mbox_mem_alloc->dma);
3147 
3148 unmap_pci_bars:
3149 	be_unmap_pci_bars(adapter);
3150 
3151 done:
3152 	return status;
3153 }
3154 
3155 static void be_stats_cleanup(struct be_adapter *adapter)
3156 {
3157 	struct be_dma_mem *cmd = &adapter->stats_cmd;
3158 
3159 	if (cmd->va)
3160 		dma_free_coherent(&adapter->pdev->dev, cmd->size,
3161 				  cmd->va, cmd->dma);
3162 }
3163 
3164 static int be_stats_init(struct be_adapter *adapter)
3165 {
3166 	struct be_dma_mem *cmd = &adapter->stats_cmd;
3167 
3168 	if (adapter->generation == BE_GEN2) {
3169 		cmd->size = sizeof(struct be_cmd_req_get_stats_v0);
3170 	} else {
3171 		if (lancer_chip(adapter))
3172 			cmd->size = sizeof(struct lancer_cmd_req_pport_stats);
3173 		else
3174 			cmd->size = sizeof(struct be_cmd_req_get_stats_v1);
3175 	}
3176 	cmd->va = dma_alloc_coherent(&adapter->pdev->dev, cmd->size, &cmd->dma,
3177 				     GFP_KERNEL);
3178 	if (cmd->va == NULL)
3179 		return -1;
3180 	memset(cmd->va, 0, cmd->size);
3181 	return 0;
3182 }
3183 
3184 static void __devexit be_remove(struct pci_dev *pdev)
3185 {
3186 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3187 
3188 	if (!adapter)
3189 		return;
3190 
3191 	cancel_delayed_work_sync(&adapter->work);
3192 
3193 	unregister_netdev(adapter->netdev);
3194 
3195 	be_clear(adapter);
3196 
3197 	be_stats_cleanup(adapter);
3198 
3199 	be_ctrl_cleanup(adapter);
3200 
3201 	be_sriov_disable(adapter);
3202 
3203 	be_msix_disable(adapter);
3204 
3205 	pci_set_drvdata(pdev, NULL);
3206 	pci_release_regions(pdev);
3207 	pci_disable_device(pdev);
3208 
3209 	free_netdev(adapter->netdev);
3210 }
3211 
3212 static int be_get_config(struct be_adapter *adapter)
3213 {
3214 	int status;
3215 
3216 	status = be_cmd_query_fw_cfg(adapter, &adapter->port_num,
3217 			&adapter->function_mode, &adapter->function_caps);
3218 	if (status)
3219 		return status;
3220 
3221 	if (adapter->function_mode & FLEX10_MODE)
3222 		adapter->max_vlans = BE_NUM_VLANS_SUPPORTED/4;
3223 	else
3224 		adapter->max_vlans = BE_NUM_VLANS_SUPPORTED;
3225 
3226 	status = be_cmd_get_cntl_attributes(adapter);
3227 	if (status)
3228 		return status;
3229 
3230 	return 0;
3231 }
3232 
3233 static int be_dev_family_check(struct be_adapter *adapter)
3234 {
3235 	struct pci_dev *pdev = adapter->pdev;
3236 	u32 sli_intf = 0, if_type;
3237 
3238 	switch (pdev->device) {
3239 	case BE_DEVICE_ID1:
3240 	case OC_DEVICE_ID1:
3241 		adapter->generation = BE_GEN2;
3242 		break;
3243 	case BE_DEVICE_ID2:
3244 	case OC_DEVICE_ID2:
3245 		adapter->generation = BE_GEN3;
3246 		break;
3247 	case OC_DEVICE_ID3:
3248 	case OC_DEVICE_ID4:
3249 		pci_read_config_dword(pdev, SLI_INTF_REG_OFFSET, &sli_intf);
3250 		if_type = (sli_intf & SLI_INTF_IF_TYPE_MASK) >>
3251 						SLI_INTF_IF_TYPE_SHIFT;
3252 
3253 		if (((sli_intf & SLI_INTF_VALID_MASK) != SLI_INTF_VALID) ||
3254 			if_type != 0x02) {
3255 			dev_err(&pdev->dev, "SLI_INTF reg val is not valid\n");
3256 			return -EINVAL;
3257 		}
3258 		adapter->sli_family = ((sli_intf & SLI_INTF_FAMILY_MASK) >>
3259 					 SLI_INTF_FAMILY_SHIFT);
3260 		adapter->generation = BE_GEN3;
3261 		break;
3262 	default:
3263 		adapter->generation = 0;
3264 	}
3265 	return 0;
3266 }
3267 
3268 static int lancer_wait_ready(struct be_adapter *adapter)
3269 {
3270 #define SLIPORT_READY_TIMEOUT 500
3271 	u32 sliport_status;
3272 	int status = 0, i;
3273 
3274 	for (i = 0; i < SLIPORT_READY_TIMEOUT; i++) {
3275 		sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3276 		if (sliport_status & SLIPORT_STATUS_RDY_MASK)
3277 			break;
3278 
3279 		msleep(20);
3280 	}
3281 
3282 	if (i == SLIPORT_READY_TIMEOUT)
3283 		status = -1;
3284 
3285 	return status;
3286 }
3287 
3288 static int lancer_test_and_set_rdy_state(struct be_adapter *adapter)
3289 {
3290 	int status;
3291 	u32 sliport_status, err, reset_needed;
3292 	status = lancer_wait_ready(adapter);
3293 	if (!status) {
3294 		sliport_status = ioread32(adapter->db + SLIPORT_STATUS_OFFSET);
3295 		err = sliport_status & SLIPORT_STATUS_ERR_MASK;
3296 		reset_needed = sliport_status & SLIPORT_STATUS_RN_MASK;
3297 		if (err && reset_needed) {
3298 			iowrite32(SLI_PORT_CONTROL_IP_MASK,
3299 					adapter->db + SLIPORT_CONTROL_OFFSET);
3300 
3301 			/* check adapter has corrected the error */
3302 			status = lancer_wait_ready(adapter);
3303 			sliport_status = ioread32(adapter->db +
3304 							SLIPORT_STATUS_OFFSET);
3305 			sliport_status &= (SLIPORT_STATUS_ERR_MASK |
3306 						SLIPORT_STATUS_RN_MASK);
3307 			if (status || sliport_status)
3308 				status = -1;
3309 		} else if (err || reset_needed) {
3310 			status = -1;
3311 		}
3312 	}
3313 	return status;
3314 }
3315 
3316 static int __devinit be_probe(struct pci_dev *pdev,
3317 			const struct pci_device_id *pdev_id)
3318 {
3319 	int status = 0;
3320 	struct be_adapter *adapter;
3321 	struct net_device *netdev;
3322 
3323 	status = pci_enable_device(pdev);
3324 	if (status)
3325 		goto do_none;
3326 
3327 	status = pci_request_regions(pdev, DRV_NAME);
3328 	if (status)
3329 		goto disable_dev;
3330 	pci_set_master(pdev);
3331 
3332 	netdev = alloc_etherdev_mq(sizeof(struct be_adapter), MAX_TX_QS);
3333 	if (netdev == NULL) {
3334 		status = -ENOMEM;
3335 		goto rel_reg;
3336 	}
3337 	adapter = netdev_priv(netdev);
3338 	adapter->pdev = pdev;
3339 	pci_set_drvdata(pdev, adapter);
3340 
3341 	status = be_dev_family_check(adapter);
3342 	if (status)
3343 		goto free_netdev;
3344 
3345 	adapter->netdev = netdev;
3346 	SET_NETDEV_DEV(netdev, &pdev->dev);
3347 
3348 	status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
3349 	if (!status) {
3350 		netdev->features |= NETIF_F_HIGHDMA;
3351 	} else {
3352 		status = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
3353 		if (status) {
3354 			dev_err(&pdev->dev, "Could not set PCI DMA Mask\n");
3355 			goto free_netdev;
3356 		}
3357 	}
3358 
3359 	status = be_sriov_enable(adapter);
3360 	if (status)
3361 		goto free_netdev;
3362 
3363 	status = be_ctrl_init(adapter);
3364 	if (status)
3365 		goto disable_sriov;
3366 
3367 	if (lancer_chip(adapter)) {
3368 		status = lancer_test_and_set_rdy_state(adapter);
3369 		if (status) {
3370 			dev_err(&pdev->dev, "Adapter in non recoverable error\n");
3371 			goto ctrl_clean;
3372 		}
3373 	}
3374 
3375 	/* sync up with fw's ready state */
3376 	if (be_physfn(adapter)) {
3377 		status = be_cmd_POST(adapter);
3378 		if (status)
3379 			goto ctrl_clean;
3380 	}
3381 
3382 	/* tell fw we're ready to fire cmds */
3383 	status = be_cmd_fw_init(adapter);
3384 	if (status)
3385 		goto ctrl_clean;
3386 
3387 	status = be_cmd_reset_function(adapter);
3388 	if (status)
3389 		goto ctrl_clean;
3390 
3391 	status = be_stats_init(adapter);
3392 	if (status)
3393 		goto ctrl_clean;
3394 
3395 	status = be_get_config(adapter);
3396 	if (status)
3397 		goto stats_clean;
3398 
3399 	/* The INTR bit may be set in the card when probed by a kdump kernel
3400 	 * after a crash.
3401 	 */
3402 	if (!lancer_chip(adapter))
3403 		be_intr_set(adapter, false);
3404 
3405 	be_msix_enable(adapter);
3406 
3407 	INIT_DELAYED_WORK(&adapter->work, be_worker);
3408 	adapter->rx_fc = adapter->tx_fc = true;
3409 
3410 	status = be_setup(adapter);
3411 	if (status)
3412 		goto msix_disable;
3413 
3414 	be_netdev_init(netdev);
3415 	status = register_netdev(netdev);
3416 	if (status != 0)
3417 		goto unsetup;
3418 
3419 	dev_info(&pdev->dev, "%s port %d\n", nic_name(pdev), adapter->port_num);
3420 
3421 	schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
3422 	return 0;
3423 
3424 unsetup:
3425 	be_clear(adapter);
3426 msix_disable:
3427 	be_msix_disable(adapter);
3428 stats_clean:
3429 	be_stats_cleanup(adapter);
3430 ctrl_clean:
3431 	be_ctrl_cleanup(adapter);
3432 disable_sriov:
3433 	be_sriov_disable(adapter);
3434 free_netdev:
3435 	free_netdev(netdev);
3436 	pci_set_drvdata(pdev, NULL);
3437 rel_reg:
3438 	pci_release_regions(pdev);
3439 disable_dev:
3440 	pci_disable_device(pdev);
3441 do_none:
3442 	dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
3443 	return status;
3444 }
3445 
3446 static int be_suspend(struct pci_dev *pdev, pm_message_t state)
3447 {
3448 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3449 	struct net_device *netdev =  adapter->netdev;
3450 
3451 	cancel_delayed_work_sync(&adapter->work);
3452 	if (adapter->wol)
3453 		be_setup_wol(adapter, true);
3454 
3455 	netif_device_detach(netdev);
3456 	if (netif_running(netdev)) {
3457 		rtnl_lock();
3458 		be_close(netdev);
3459 		rtnl_unlock();
3460 	}
3461 	be_clear(adapter);
3462 
3463 	be_msix_disable(adapter);
3464 	pci_save_state(pdev);
3465 	pci_disable_device(pdev);
3466 	pci_set_power_state(pdev, pci_choose_state(pdev, state));
3467 	return 0;
3468 }
3469 
3470 static int be_resume(struct pci_dev *pdev)
3471 {
3472 	int status = 0;
3473 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3474 	struct net_device *netdev =  adapter->netdev;
3475 
3476 	netif_device_detach(netdev);
3477 
3478 	status = pci_enable_device(pdev);
3479 	if (status)
3480 		return status;
3481 
3482 	pci_set_power_state(pdev, 0);
3483 	pci_restore_state(pdev);
3484 
3485 	be_msix_enable(adapter);
3486 	/* tell fw we're ready to fire cmds */
3487 	status = be_cmd_fw_init(adapter);
3488 	if (status)
3489 		return status;
3490 
3491 	be_setup(adapter);
3492 	if (netif_running(netdev)) {
3493 		rtnl_lock();
3494 		be_open(netdev);
3495 		rtnl_unlock();
3496 	}
3497 	netif_device_attach(netdev);
3498 
3499 	if (adapter->wol)
3500 		be_setup_wol(adapter, false);
3501 
3502 	schedule_delayed_work(&adapter->work, msecs_to_jiffies(100));
3503 	return 0;
3504 }
3505 
3506 /*
3507  * An FLR will stop BE from DMAing any data.
3508  */
3509 static void be_shutdown(struct pci_dev *pdev)
3510 {
3511 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3512 
3513 	if (!adapter)
3514 		return;
3515 
3516 	cancel_delayed_work_sync(&adapter->work);
3517 
3518 	netif_device_detach(adapter->netdev);
3519 
3520 	if (adapter->wol)
3521 		be_setup_wol(adapter, true);
3522 
3523 	be_cmd_reset_function(adapter);
3524 
3525 	pci_disable_device(pdev);
3526 }
3527 
3528 static pci_ers_result_t be_eeh_err_detected(struct pci_dev *pdev,
3529 				pci_channel_state_t state)
3530 {
3531 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3532 	struct net_device *netdev =  adapter->netdev;
3533 
3534 	dev_err(&adapter->pdev->dev, "EEH error detected\n");
3535 
3536 	adapter->eeh_err = true;
3537 
3538 	netif_device_detach(netdev);
3539 
3540 	if (netif_running(netdev)) {
3541 		rtnl_lock();
3542 		be_close(netdev);
3543 		rtnl_unlock();
3544 	}
3545 	be_clear(adapter);
3546 
3547 	if (state == pci_channel_io_perm_failure)
3548 		return PCI_ERS_RESULT_DISCONNECT;
3549 
3550 	pci_disable_device(pdev);
3551 
3552 	return PCI_ERS_RESULT_NEED_RESET;
3553 }
3554 
3555 static pci_ers_result_t be_eeh_reset(struct pci_dev *pdev)
3556 {
3557 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3558 	int status;
3559 
3560 	dev_info(&adapter->pdev->dev, "EEH reset\n");
3561 	adapter->eeh_err = false;
3562 
3563 	status = pci_enable_device(pdev);
3564 	if (status)
3565 		return PCI_ERS_RESULT_DISCONNECT;
3566 
3567 	pci_set_master(pdev);
3568 	pci_set_power_state(pdev, 0);
3569 	pci_restore_state(pdev);
3570 
3571 	/* Check if card is ok and fw is ready */
3572 	status = be_cmd_POST(adapter);
3573 	if (status)
3574 		return PCI_ERS_RESULT_DISCONNECT;
3575 
3576 	return PCI_ERS_RESULT_RECOVERED;
3577 }
3578 
3579 static void be_eeh_resume(struct pci_dev *pdev)
3580 {
3581 	int status = 0;
3582 	struct be_adapter *adapter = pci_get_drvdata(pdev);
3583 	struct net_device *netdev =  adapter->netdev;
3584 
3585 	dev_info(&adapter->pdev->dev, "EEH resume\n");
3586 
3587 	pci_save_state(pdev);
3588 
3589 	/* tell fw we're ready to fire cmds */
3590 	status = be_cmd_fw_init(adapter);
3591 	if (status)
3592 		goto err;
3593 
3594 	status = be_setup(adapter);
3595 	if (status)
3596 		goto err;
3597 
3598 	if (netif_running(netdev)) {
3599 		status = be_open(netdev);
3600 		if (status)
3601 			goto err;
3602 	}
3603 	netif_device_attach(netdev);
3604 	return;
3605 err:
3606 	dev_err(&adapter->pdev->dev, "EEH resume failed\n");
3607 }
3608 
3609 static struct pci_error_handlers be_eeh_handlers = {
3610 	.error_detected = be_eeh_err_detected,
3611 	.slot_reset = be_eeh_reset,
3612 	.resume = be_eeh_resume,
3613 };
3614 
3615 static struct pci_driver be_driver = {
3616 	.name = DRV_NAME,
3617 	.id_table = be_dev_ids,
3618 	.probe = be_probe,
3619 	.remove = be_remove,
3620 	.suspend = be_suspend,
3621 	.resume = be_resume,
3622 	.shutdown = be_shutdown,
3623 	.err_handler = &be_eeh_handlers
3624 };
3625 
3626 static int __init be_init_module(void)
3627 {
3628 	if (rx_frag_size != 8192 && rx_frag_size != 4096 &&
3629 	    rx_frag_size != 2048) {
3630 		printk(KERN_WARNING DRV_NAME
3631 			" : Module param rx_frag_size must be 2048/4096/8192."
3632 			" Using 2048\n");
3633 		rx_frag_size = 2048;
3634 	}
3635 
3636 	return pci_register_driver(&be_driver);
3637 }
3638 module_init(be_init_module);
3639 
3640 static void __exit be_exit_module(void)
3641 {
3642 	pci_unregister_driver(&be_driver);
3643 }
3644 module_exit(be_exit_module);
3645