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