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