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