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