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