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