net/mlx4_en: Fix ethtool rules leftovers after module unloaded
[pandora-kernel.git] / drivers / net / ethernet / mellanox / mlx4 / en_netdev.c
1 /*
2  * Copyright (c) 2007 Mellanox Technologies. All rights reserved.
3  *
4  * This software is available to you under a choice of one of two
5  * licenses.  You may choose to be licensed under the terms of the GNU
6  * General Public License (GPL) Version 2, available from the file
7  * COPYING in the main directory of this source tree, or the
8  * OpenIB.org BSD license below:
9  *
10  *     Redistribution and use in source and binary forms, with or
11  *     without modification, are permitted provided that the following
12  *     conditions are met:
13  *
14  *      - Redistributions of source code must retain the above
15  *        copyright notice, this list of conditions and the following
16  *        disclaimer.
17  *
18  *      - Redistributions in binary form must reproduce the above
19  *        copyright notice, this list of conditions and the following
20  *        disclaimer in the documentation and/or other materials
21  *        provided with the distribution.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30  * SOFTWARE.
31  *
32  */
33
34 #include <linux/etherdevice.h>
35 #include <linux/tcp.h>
36 #include <linux/if_vlan.h>
37 #include <linux/delay.h>
38 #include <linux/slab.h>
39 #include <linux/hash.h>
40 #include <net/ip.h>
41
42 #include <linux/mlx4/driver.h>
43 #include <linux/mlx4/device.h>
44 #include <linux/mlx4/cmd.h>
45 #include <linux/mlx4/cq.h>
46
47 #include "mlx4_en.h"
48 #include "en_port.h"
49
50 int mlx4_en_setup_tc(struct net_device *dev, u8 up)
51 {
52         struct mlx4_en_priv *priv = netdev_priv(dev);
53         int i;
54         unsigned int offset = 0;
55
56         if (up && up != MLX4_EN_NUM_UP)
57                 return -EINVAL;
58
59         netdev_set_num_tc(dev, up);
60
61         /* Partition Tx queues evenly amongst UP's */
62         for (i = 0; i < up; i++) {
63                 netdev_set_tc_queue(dev, i, priv->num_tx_rings_p_up, offset);
64                 offset += priv->num_tx_rings_p_up;
65         }
66
67         return 0;
68 }
69
70 #ifdef CONFIG_RFS_ACCEL
71
72 struct mlx4_en_filter {
73         struct list_head next;
74         struct work_struct work;
75
76         __be32 src_ip;
77         __be32 dst_ip;
78         __be16 src_port;
79         __be16 dst_port;
80
81         int rxq_index;
82         struct mlx4_en_priv *priv;
83         u32 flow_id;                    /* RFS infrastructure id */
84         int id;                         /* mlx4_en driver id */
85         u64 reg_id;                     /* Flow steering API id */
86         u8 activated;                   /* Used to prevent expiry before filter
87                                          * is attached
88                                          */
89         struct hlist_node filter_chain;
90 };
91
92 static void mlx4_en_filter_rfs_expire(struct mlx4_en_priv *priv);
93
94 static void mlx4_en_filter_work(struct work_struct *work)
95 {
96         struct mlx4_en_filter *filter = container_of(work,
97                                                      struct mlx4_en_filter,
98                                                      work);
99         struct mlx4_en_priv *priv = filter->priv;
100         struct mlx4_spec_list spec_tcp = {
101                 .id = MLX4_NET_TRANS_RULE_ID_TCP,
102                 {
103                         .tcp_udp = {
104                                 .dst_port = filter->dst_port,
105                                 .dst_port_msk = (__force __be16)-1,
106                                 .src_port = filter->src_port,
107                                 .src_port_msk = (__force __be16)-1,
108                         },
109                 },
110         };
111         struct mlx4_spec_list spec_ip = {
112                 .id = MLX4_NET_TRANS_RULE_ID_IPV4,
113                 {
114                         .ipv4 = {
115                                 .dst_ip = filter->dst_ip,
116                                 .dst_ip_msk = (__force __be32)-1,
117                                 .src_ip = filter->src_ip,
118                                 .src_ip_msk = (__force __be32)-1,
119                         },
120                 },
121         };
122         struct mlx4_spec_list spec_eth = {
123                 .id = MLX4_NET_TRANS_RULE_ID_ETH,
124         };
125         struct mlx4_net_trans_rule rule = {
126                 .list = LIST_HEAD_INIT(rule.list),
127                 .queue_mode = MLX4_NET_TRANS_Q_LIFO,
128                 .exclusive = 1,
129                 .allow_loopback = 1,
130                 .promisc_mode = MLX4_FS_PROMISC_NONE,
131                 .port = priv->port,
132                 .priority = MLX4_DOMAIN_RFS,
133         };
134         int rc;
135         __be64 mac;
136         __be64 mac_mask = cpu_to_be64(MLX4_MAC_MASK << 16);
137
138         list_add_tail(&spec_eth.list, &rule.list);
139         list_add_tail(&spec_ip.list, &rule.list);
140         list_add_tail(&spec_tcp.list, &rule.list);
141
142         mac = cpu_to_be64((priv->mac & MLX4_MAC_MASK) << 16);
143
144         rule.qpn = priv->rss_map.qps[filter->rxq_index].qpn;
145         memcpy(spec_eth.eth.dst_mac, &mac, ETH_ALEN);
146         memcpy(spec_eth.eth.dst_mac_msk, &mac_mask, ETH_ALEN);
147
148         filter->activated = 0;
149
150         if (filter->reg_id) {
151                 rc = mlx4_flow_detach(priv->mdev->dev, filter->reg_id);
152                 if (rc && rc != -ENOENT)
153                         en_err(priv, "Error detaching flow. rc = %d\n", rc);
154         }
155
156         rc = mlx4_flow_attach(priv->mdev->dev, &rule, &filter->reg_id);
157         if (rc)
158                 en_err(priv, "Error attaching flow. err = %d\n", rc);
159
160         mlx4_en_filter_rfs_expire(priv);
161
162         filter->activated = 1;
163 }
164
165 static inline struct hlist_head *
166 filter_hash_bucket(struct mlx4_en_priv *priv, __be32 src_ip, __be32 dst_ip,
167                    __be16 src_port, __be16 dst_port)
168 {
169         unsigned long l;
170         int bucket_idx;
171
172         l = (__force unsigned long)src_port |
173             ((__force unsigned long)dst_port << 2);
174         l ^= (__force unsigned long)(src_ip ^ dst_ip);
175
176         bucket_idx = hash_long(l, MLX4_EN_FILTER_HASH_SHIFT);
177
178         return &priv->filter_hash[bucket_idx];
179 }
180
181 static struct mlx4_en_filter *
182 mlx4_en_filter_alloc(struct mlx4_en_priv *priv, int rxq_index, __be32 src_ip,
183                      __be32 dst_ip, __be16 src_port, __be16 dst_port,
184                      u32 flow_id)
185 {
186         struct mlx4_en_filter *filter = NULL;
187
188         filter = kzalloc(sizeof(struct mlx4_en_filter), GFP_ATOMIC);
189         if (!filter)
190                 return NULL;
191
192         filter->priv = priv;
193         filter->rxq_index = rxq_index;
194         INIT_WORK(&filter->work, mlx4_en_filter_work);
195
196         filter->src_ip = src_ip;
197         filter->dst_ip = dst_ip;
198         filter->src_port = src_port;
199         filter->dst_port = dst_port;
200
201         filter->flow_id = flow_id;
202
203         filter->id = priv->last_filter_id++ % RPS_NO_FILTER;
204
205         list_add_tail(&filter->next, &priv->filters);
206         hlist_add_head(&filter->filter_chain,
207                        filter_hash_bucket(priv, src_ip, dst_ip, src_port,
208                                           dst_port));
209
210         return filter;
211 }
212
213 static void mlx4_en_filter_free(struct mlx4_en_filter *filter)
214 {
215         struct mlx4_en_priv *priv = filter->priv;
216         int rc;
217
218         list_del(&filter->next);
219
220         rc = mlx4_flow_detach(priv->mdev->dev, filter->reg_id);
221         if (rc && rc != -ENOENT)
222                 en_err(priv, "Error detaching flow. rc = %d\n", rc);
223
224         kfree(filter);
225 }
226
227 static inline struct mlx4_en_filter *
228 mlx4_en_filter_find(struct mlx4_en_priv *priv, __be32 src_ip, __be32 dst_ip,
229                     __be16 src_port, __be16 dst_port)
230 {
231         struct hlist_node *elem;
232         struct mlx4_en_filter *filter;
233         struct mlx4_en_filter *ret = NULL;
234
235         hlist_for_each_entry(filter, elem,
236                              filter_hash_bucket(priv, src_ip, dst_ip,
237                                                 src_port, dst_port),
238                              filter_chain) {
239                 if (filter->src_ip == src_ip &&
240                     filter->dst_ip == dst_ip &&
241                     filter->src_port == src_port &&
242                     filter->dst_port == dst_port) {
243                         ret = filter;
244                         break;
245                 }
246         }
247
248         return ret;
249 }
250
251 static int
252 mlx4_en_filter_rfs(struct net_device *net_dev, const struct sk_buff *skb,
253                    u16 rxq_index, u32 flow_id)
254 {
255         struct mlx4_en_priv *priv = netdev_priv(net_dev);
256         struct mlx4_en_filter *filter;
257         const struct iphdr *ip;
258         const __be16 *ports;
259         __be32 src_ip;
260         __be32 dst_ip;
261         __be16 src_port;
262         __be16 dst_port;
263         int nhoff = skb_network_offset(skb);
264         int ret = 0;
265
266         if (skb->protocol != htons(ETH_P_IP))
267                 return -EPROTONOSUPPORT;
268
269         ip = (const struct iphdr *)(skb->data + nhoff);
270         if (ip_is_fragment(ip))
271                 return -EPROTONOSUPPORT;
272
273         ports = (const __be16 *)(skb->data + nhoff + 4 * ip->ihl);
274
275         src_ip = ip->saddr;
276         dst_ip = ip->daddr;
277         src_port = ports[0];
278         dst_port = ports[1];
279
280         if (ip->protocol != IPPROTO_TCP)
281                 return -EPROTONOSUPPORT;
282
283         spin_lock_bh(&priv->filters_lock);
284         filter = mlx4_en_filter_find(priv, src_ip, dst_ip, src_port, dst_port);
285         if (filter) {
286                 if (filter->rxq_index == rxq_index)
287                         goto out;
288
289                 filter->rxq_index = rxq_index;
290         } else {
291                 filter = mlx4_en_filter_alloc(priv, rxq_index,
292                                               src_ip, dst_ip,
293                                               src_port, dst_port, flow_id);
294                 if (!filter) {
295                         ret = -ENOMEM;
296                         goto err;
297                 }
298         }
299
300         queue_work(priv->mdev->workqueue, &filter->work);
301
302 out:
303         ret = filter->id;
304 err:
305         spin_unlock_bh(&priv->filters_lock);
306
307         return ret;
308 }
309
310 void mlx4_en_cleanup_filters(struct mlx4_en_priv *priv,
311                              struct mlx4_en_rx_ring *rx_ring)
312 {
313         struct mlx4_en_filter *filter, *tmp;
314         LIST_HEAD(del_list);
315
316         spin_lock_bh(&priv->filters_lock);
317         list_for_each_entry_safe(filter, tmp, &priv->filters, next) {
318                 list_move(&filter->next, &del_list);
319                 hlist_del(&filter->filter_chain);
320         }
321         spin_unlock_bh(&priv->filters_lock);
322
323         list_for_each_entry_safe(filter, tmp, &del_list, next) {
324                 cancel_work_sync(&filter->work);
325                 mlx4_en_filter_free(filter);
326         }
327 }
328
329 static void mlx4_en_filter_rfs_expire(struct mlx4_en_priv *priv)
330 {
331         struct mlx4_en_filter *filter = NULL, *tmp, *last_filter = NULL;
332         LIST_HEAD(del_list);
333         int i = 0;
334
335         spin_lock_bh(&priv->filters_lock);
336         list_for_each_entry_safe(filter, tmp, &priv->filters, next) {
337                 if (i > MLX4_EN_FILTER_EXPIRY_QUOTA)
338                         break;
339
340                 if (filter->activated &&
341                     !work_pending(&filter->work) &&
342                     rps_may_expire_flow(priv->dev,
343                                         filter->rxq_index, filter->flow_id,
344                                         filter->id)) {
345                         list_move(&filter->next, &del_list);
346                         hlist_del(&filter->filter_chain);
347                 } else
348                         last_filter = filter;
349
350                 i++;
351         }
352
353         if (last_filter && (&last_filter->next != priv->filters.next))
354                 list_move(&priv->filters, &last_filter->next);
355
356         spin_unlock_bh(&priv->filters_lock);
357
358         list_for_each_entry_safe(filter, tmp, &del_list, next)
359                 mlx4_en_filter_free(filter);
360 }
361 #endif
362
363 static int mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
364 {
365         struct mlx4_en_priv *priv = netdev_priv(dev);
366         struct mlx4_en_dev *mdev = priv->mdev;
367         int err;
368         int idx;
369
370         en_dbg(HW, priv, "adding VLAN:%d\n", vid);
371
372         set_bit(vid, priv->active_vlans);
373
374         /* Add VID to port VLAN filter */
375         mutex_lock(&mdev->state_lock);
376         if (mdev->device_up && priv->port_up) {
377                 err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
378                 if (err)
379                         en_err(priv, "Failed configuring VLAN filter\n");
380         }
381         if (mlx4_register_vlan(mdev->dev, priv->port, vid, &idx))
382                 en_err(priv, "failed adding vlan %d\n", vid);
383         mutex_unlock(&mdev->state_lock);
384
385         return 0;
386 }
387
388 static int mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
389 {
390         struct mlx4_en_priv *priv = netdev_priv(dev);
391         struct mlx4_en_dev *mdev = priv->mdev;
392         int err;
393         int idx;
394
395         en_dbg(HW, priv, "Killing VID:%d\n", vid);
396
397         clear_bit(vid, priv->active_vlans);
398
399         /* Remove VID from port VLAN filter */
400         mutex_lock(&mdev->state_lock);
401         if (!mlx4_find_cached_vlan(mdev->dev, priv->port, vid, &idx))
402                 mlx4_unregister_vlan(mdev->dev, priv->port, idx);
403         else
404                 en_err(priv, "could not find vid %d in cache\n", vid);
405
406         if (mdev->device_up && priv->port_up) {
407                 err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
408                 if (err)
409                         en_err(priv, "Failed configuring VLAN filter\n");
410         }
411         mutex_unlock(&mdev->state_lock);
412
413         return 0;
414 }
415
416 u64 mlx4_en_mac_to_u64(u8 *addr)
417 {
418         u64 mac = 0;
419         int i;
420
421         for (i = 0; i < ETH_ALEN; i++) {
422                 mac <<= 8;
423                 mac |= addr[i];
424         }
425         return mac;
426 }
427
428 static int mlx4_en_set_mac(struct net_device *dev, void *addr)
429 {
430         struct mlx4_en_priv *priv = netdev_priv(dev);
431         struct mlx4_en_dev *mdev = priv->mdev;
432         struct sockaddr *saddr = addr;
433
434         if (!is_valid_ether_addr(saddr->sa_data))
435                 return -EADDRNOTAVAIL;
436
437         memcpy(dev->dev_addr, saddr->sa_data, ETH_ALEN);
438         priv->mac = mlx4_en_mac_to_u64(dev->dev_addr);
439         queue_work(mdev->workqueue, &priv->mac_task);
440         return 0;
441 }
442
443 static void mlx4_en_do_set_mac(struct work_struct *work)
444 {
445         struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
446                                                  mac_task);
447         struct mlx4_en_dev *mdev = priv->mdev;
448         int err = 0;
449
450         mutex_lock(&mdev->state_lock);
451         if (priv->port_up) {
452                 /* Remove old MAC and insert the new one */
453                 err = mlx4_replace_mac(mdev->dev, priv->port,
454                                        priv->base_qpn, priv->mac);
455                 if (err)
456                         en_err(priv, "Failed changing HW MAC address\n");
457         } else
458                 en_dbg(HW, priv, "Port is down while "
459                                  "registering mac, exiting...\n");
460
461         mutex_unlock(&mdev->state_lock);
462 }
463
464 static void mlx4_en_clear_list(struct net_device *dev)
465 {
466         struct mlx4_en_priv *priv = netdev_priv(dev);
467         struct mlx4_en_mc_list *tmp, *mc_to_del;
468
469         list_for_each_entry_safe(mc_to_del, tmp, &priv->mc_list, list) {
470                 list_del(&mc_to_del->list);
471                 kfree(mc_to_del);
472         }
473 }
474
475 static void mlx4_en_cache_mclist(struct net_device *dev)
476 {
477         struct mlx4_en_priv *priv = netdev_priv(dev);
478         struct netdev_hw_addr *ha;
479         struct mlx4_en_mc_list *tmp;
480
481         mlx4_en_clear_list(dev);
482         netdev_for_each_mc_addr(ha, dev) {
483                 tmp = kzalloc(sizeof(struct mlx4_en_mc_list), GFP_ATOMIC);
484                 if (!tmp) {
485                         en_err(priv, "failed to allocate multicast list\n");
486                         mlx4_en_clear_list(dev);
487                         return;
488                 }
489                 memcpy(tmp->addr, ha->addr, ETH_ALEN);
490                 list_add_tail(&tmp->list, &priv->mc_list);
491         }
492 }
493
494 static void update_mclist_flags(struct mlx4_en_priv *priv,
495                                 struct list_head *dst,
496                                 struct list_head *src)
497 {
498         struct mlx4_en_mc_list *dst_tmp, *src_tmp, *new_mc;
499         bool found;
500
501         /* Find all the entries that should be removed from dst,
502          * These are the entries that are not found in src
503          */
504         list_for_each_entry(dst_tmp, dst, list) {
505                 found = false;
506                 list_for_each_entry(src_tmp, src, list) {
507                         if (!memcmp(dst_tmp->addr, src_tmp->addr, ETH_ALEN)) {
508                                 found = true;
509                                 break;
510                         }
511                 }
512                 if (!found)
513                         dst_tmp->action = MCLIST_REM;
514         }
515
516         /* Add entries that exist in src but not in dst
517          * mark them as need to add
518          */
519         list_for_each_entry(src_tmp, src, list) {
520                 found = false;
521                 list_for_each_entry(dst_tmp, dst, list) {
522                         if (!memcmp(dst_tmp->addr, src_tmp->addr, ETH_ALEN)) {
523                                 dst_tmp->action = MCLIST_NONE;
524                                 found = true;
525                                 break;
526                         }
527                 }
528                 if (!found) {
529                         new_mc = kmalloc(sizeof(struct mlx4_en_mc_list),
530                                          GFP_KERNEL);
531                         if (!new_mc) {
532                                 en_err(priv, "Failed to allocate current multicast list\n");
533                                 return;
534                         }
535                         memcpy(new_mc, src_tmp,
536                                sizeof(struct mlx4_en_mc_list));
537                         new_mc->action = MCLIST_ADD;
538                         list_add_tail(&new_mc->list, dst);
539                 }
540         }
541 }
542
543 static void mlx4_en_set_multicast(struct net_device *dev)
544 {
545         struct mlx4_en_priv *priv = netdev_priv(dev);
546
547         if (!priv->port_up)
548                 return;
549
550         queue_work(priv->mdev->workqueue, &priv->mcast_task);
551 }
552
553 static void mlx4_en_do_set_multicast(struct work_struct *work)
554 {
555         struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
556                                                  mcast_task);
557         struct mlx4_en_dev *mdev = priv->mdev;
558         struct net_device *dev = priv->dev;
559         struct mlx4_en_mc_list *mclist, *tmp;
560         u64 mcast_addr = 0;
561         u8 mc_list[16] = {0};
562         int err = 0;
563
564         mutex_lock(&mdev->state_lock);
565         if (!mdev->device_up) {
566                 en_dbg(HW, priv, "Card is not up, "
567                                  "ignoring multicast change.\n");
568                 goto out;
569         }
570         if (!priv->port_up) {
571                 en_dbg(HW, priv, "Port is down, "
572                                  "ignoring  multicast change.\n");
573                 goto out;
574         }
575
576         if (!netif_carrier_ok(dev)) {
577                 if (!mlx4_en_QUERY_PORT(mdev, priv->port)) {
578                         if (priv->port_state.link_state) {
579                                 priv->last_link_state = MLX4_DEV_EVENT_PORT_UP;
580                                 netif_carrier_on(dev);
581                                 en_dbg(LINK, priv, "Link Up\n");
582                         }
583                 }
584         }
585
586         /*
587          * Promsicuous mode: disable all filters
588          */
589
590         if (dev->flags & IFF_PROMISC) {
591                 if (!(priv->flags & MLX4_EN_FLAG_PROMISC)) {
592                         if (netif_msg_rx_status(priv))
593                                 en_warn(priv, "Entering promiscuous mode\n");
594                         priv->flags |= MLX4_EN_FLAG_PROMISC;
595
596                         /* Enable promiscouos mode */
597                         switch (mdev->dev->caps.steering_mode) {
598                         case MLX4_STEERING_MODE_DEVICE_MANAGED:
599                                 err = mlx4_flow_steer_promisc_add(mdev->dev,
600                                                                   priv->port,
601                                                                   priv->base_qpn,
602                                                                   MLX4_FS_PROMISC_UPLINK);
603                                 if (err)
604                                         en_err(priv, "Failed enabling promiscuous mode\n");
605                                 priv->flags |= MLX4_EN_FLAG_MC_PROMISC;
606                                 break;
607
608                         case MLX4_STEERING_MODE_B0:
609                                 err = mlx4_unicast_promisc_add(mdev->dev,
610                                                                priv->base_qpn,
611                                                                priv->port);
612                                 if (err)
613                                         en_err(priv, "Failed enabling unicast promiscuous mode\n");
614
615                                 /* Add the default qp number as multicast
616                                  * promisc
617                                  */
618                                 if (!(priv->flags & MLX4_EN_FLAG_MC_PROMISC)) {
619                                         err = mlx4_multicast_promisc_add(mdev->dev,
620                                                                          priv->base_qpn,
621                                                                          priv->port);
622                                         if (err)
623                                                 en_err(priv, "Failed enabling multicast promiscuous mode\n");
624                                         priv->flags |= MLX4_EN_FLAG_MC_PROMISC;
625                                 }
626                                 break;
627
628                         case MLX4_STEERING_MODE_A0:
629                                 err = mlx4_SET_PORT_qpn_calc(mdev->dev,
630                                                              priv->port,
631                                                              priv->base_qpn,
632                                                              1);
633                                 if (err)
634                                         en_err(priv, "Failed enabling promiscuous mode\n");
635                                 break;
636                         }
637
638                         /* Disable port multicast filter (unconditionally) */
639                         err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0,
640                                                   0, MLX4_MCAST_DISABLE);
641                         if (err)
642                                 en_err(priv, "Failed disabling "
643                                              "multicast filter\n");
644
645                         /* Disable port VLAN filter */
646                         err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
647                         if (err)
648                                 en_err(priv, "Failed disabling VLAN filter\n");
649                 }
650                 goto out;
651         }
652
653         /*
654          * Not in promiscuous mode
655          */
656
657         if (priv->flags & MLX4_EN_FLAG_PROMISC) {
658                 if (netif_msg_rx_status(priv))
659                         en_warn(priv, "Leaving promiscuous mode\n");
660                 priv->flags &= ~MLX4_EN_FLAG_PROMISC;
661
662                 /* Disable promiscouos mode */
663                 switch (mdev->dev->caps.steering_mode) {
664                 case MLX4_STEERING_MODE_DEVICE_MANAGED:
665                         err = mlx4_flow_steer_promisc_remove(mdev->dev,
666                                                              priv->port,
667                                                              MLX4_FS_PROMISC_UPLINK);
668                         if (err)
669                                 en_err(priv, "Failed disabling promiscuous mode\n");
670                         priv->flags &= ~MLX4_EN_FLAG_MC_PROMISC;
671                         break;
672
673                 case MLX4_STEERING_MODE_B0:
674                         err = mlx4_unicast_promisc_remove(mdev->dev,
675                                                           priv->base_qpn,
676                                                           priv->port);
677                         if (err)
678                                 en_err(priv, "Failed disabling unicast promiscuous mode\n");
679                         /* Disable Multicast promisc */
680                         if (priv->flags & MLX4_EN_FLAG_MC_PROMISC) {
681                                 err = mlx4_multicast_promisc_remove(mdev->dev,
682                                                                     priv->base_qpn,
683                                                                     priv->port);
684                                 if (err)
685                                         en_err(priv, "Failed disabling multicast promiscuous mode\n");
686                                 priv->flags &= ~MLX4_EN_FLAG_MC_PROMISC;
687                         }
688                         break;
689
690                 case MLX4_STEERING_MODE_A0:
691                         err = mlx4_SET_PORT_qpn_calc(mdev->dev,
692                                                      priv->port,
693                                                      priv->base_qpn, 0);
694                         if (err)
695                                 en_err(priv, "Failed disabling promiscuous mode\n");
696                         break;
697                 }
698
699                 /* Enable port VLAN filter */
700                 err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
701                 if (err)
702                         en_err(priv, "Failed enabling VLAN filter\n");
703         }
704
705         /* Enable/disable the multicast filter according to IFF_ALLMULTI */
706         if (dev->flags & IFF_ALLMULTI) {
707                 err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0,
708                                           0, MLX4_MCAST_DISABLE);
709                 if (err)
710                         en_err(priv, "Failed disabling multicast filter\n");
711
712                 /* Add the default qp number as multicast promisc */
713                 if (!(priv->flags & MLX4_EN_FLAG_MC_PROMISC)) {
714                         switch (mdev->dev->caps.steering_mode) {
715                         case MLX4_STEERING_MODE_DEVICE_MANAGED:
716                                 err = mlx4_flow_steer_promisc_add(mdev->dev,
717                                                                   priv->port,
718                                                                   priv->base_qpn,
719                                                                   MLX4_FS_PROMISC_ALL_MULTI);
720                                 break;
721
722                         case MLX4_STEERING_MODE_B0:
723                                 err = mlx4_multicast_promisc_add(mdev->dev,
724                                                                  priv->base_qpn,
725                                                                  priv->port);
726                                 break;
727
728                         case MLX4_STEERING_MODE_A0:
729                                 break;
730                         }
731                         if (err)
732                                 en_err(priv, "Failed entering multicast promisc mode\n");
733                         priv->flags |= MLX4_EN_FLAG_MC_PROMISC;
734                 }
735         } else {
736                 /* Disable Multicast promisc */
737                 if (priv->flags & MLX4_EN_FLAG_MC_PROMISC) {
738                         switch (mdev->dev->caps.steering_mode) {
739                         case MLX4_STEERING_MODE_DEVICE_MANAGED:
740                                 err = mlx4_flow_steer_promisc_remove(mdev->dev,
741                                                                      priv->port,
742                                                                      MLX4_FS_PROMISC_ALL_MULTI);
743                                 break;
744
745                         case MLX4_STEERING_MODE_B0:
746                                 err = mlx4_multicast_promisc_remove(mdev->dev,
747                                                                     priv->base_qpn,
748                                                                     priv->port);
749                                 break;
750
751                         case MLX4_STEERING_MODE_A0:
752                                 break;
753                         }
754                         if (err)
755                                 en_err(priv, "Failed disabling multicast promiscuous mode\n");
756                         priv->flags &= ~MLX4_EN_FLAG_MC_PROMISC;
757                 }
758
759                 err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0,
760                                           0, MLX4_MCAST_DISABLE);
761                 if (err)
762                         en_err(priv, "Failed disabling multicast filter\n");
763
764                 /* Flush mcast filter and init it with broadcast address */
765                 mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, ETH_BCAST,
766                                     1, MLX4_MCAST_CONFIG);
767
768                 /* Update multicast list - we cache all addresses so they won't
769                  * change while HW is updated holding the command semaphor */
770                 netif_addr_lock_bh(dev);
771                 mlx4_en_cache_mclist(dev);
772                 netif_addr_unlock_bh(dev);
773                 list_for_each_entry(mclist, &priv->mc_list, list) {
774                         mcast_addr = mlx4_en_mac_to_u64(mclist->addr);
775                         mlx4_SET_MCAST_FLTR(mdev->dev, priv->port,
776                                             mcast_addr, 0, MLX4_MCAST_CONFIG);
777                 }
778                 err = mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0,
779                                           0, MLX4_MCAST_ENABLE);
780                 if (err)
781                         en_err(priv, "Failed enabling multicast filter\n");
782
783                 update_mclist_flags(priv, &priv->curr_list, &priv->mc_list);
784                 list_for_each_entry_safe(mclist, tmp, &priv->curr_list, list) {
785                         if (mclist->action == MCLIST_REM) {
786                                 /* detach this address and delete from list */
787                                 memcpy(&mc_list[10], mclist->addr, ETH_ALEN);
788                                 mc_list[5] = priv->port;
789                                 err = mlx4_multicast_detach(mdev->dev,
790                                                             &priv->rss_map.indir_qp,
791                                                             mc_list,
792                                                             MLX4_PROT_ETH,
793                                                             mclist->reg_id);
794                                 if (err)
795                                         en_err(priv, "Fail to detach multicast address\n");
796
797                                 /* remove from list */
798                                 list_del(&mclist->list);
799                                 kfree(mclist);
800                         } else if (mclist->action == MCLIST_ADD) {
801                                 /* attach the address */
802                                 memcpy(&mc_list[10], mclist->addr, ETH_ALEN);
803                                 /* needed for B0 steering support */
804                                 mc_list[5] = priv->port;
805                                 err = mlx4_multicast_attach(mdev->dev,
806                                                             &priv->rss_map.indir_qp,
807                                                             mc_list,
808                                                             priv->port, 0,
809                                                             MLX4_PROT_ETH,
810                                                             &mclist->reg_id);
811                                 if (err)
812                                         en_err(priv, "Fail to attach multicast address\n");
813
814                         }
815                 }
816         }
817 out:
818         mutex_unlock(&mdev->state_lock);
819 }
820
821 #ifdef CONFIG_NET_POLL_CONTROLLER
822 static void mlx4_en_netpoll(struct net_device *dev)
823 {
824         struct mlx4_en_priv *priv = netdev_priv(dev);
825         struct mlx4_en_cq *cq;
826         unsigned long flags;
827         int i;
828
829         for (i = 0; i < priv->rx_ring_num; i++) {
830                 cq = &priv->rx_cq[i];
831                 spin_lock_irqsave(&cq->lock, flags);
832                 napi_synchronize(&cq->napi);
833                 mlx4_en_process_rx_cq(dev, cq, 0);
834                 spin_unlock_irqrestore(&cq->lock, flags);
835         }
836 }
837 #endif
838
839 static void mlx4_en_tx_timeout(struct net_device *dev)
840 {
841         struct mlx4_en_priv *priv = netdev_priv(dev);
842         struct mlx4_en_dev *mdev = priv->mdev;
843
844         if (netif_msg_timer(priv))
845                 en_warn(priv, "Tx timeout called on port:%d\n", priv->port);
846
847         priv->port_stats.tx_timeout++;
848         en_dbg(DRV, priv, "Scheduling watchdog\n");
849         queue_work(mdev->workqueue, &priv->watchdog_task);
850 }
851
852
853 static struct net_device_stats *mlx4_en_get_stats(struct net_device *dev)
854 {
855         struct mlx4_en_priv *priv = netdev_priv(dev);
856
857         spin_lock_bh(&priv->stats_lock);
858         memcpy(&priv->ret_stats, &priv->stats, sizeof(priv->stats));
859         spin_unlock_bh(&priv->stats_lock);
860
861         return &priv->ret_stats;
862 }
863
864 static void mlx4_en_set_default_moderation(struct mlx4_en_priv *priv)
865 {
866         struct mlx4_en_cq *cq;
867         int i;
868
869         /* If we haven't received a specific coalescing setting
870          * (module param), we set the moderation parameters as follows:
871          * - moder_cnt is set to the number of mtu sized packets to
872          *   satisfy our coalescing target.
873          * - moder_time is set to a fixed value.
874          */
875         priv->rx_frames = MLX4_EN_RX_COAL_TARGET;
876         priv->rx_usecs = MLX4_EN_RX_COAL_TIME;
877         priv->tx_frames = MLX4_EN_TX_COAL_PKTS;
878         priv->tx_usecs = MLX4_EN_TX_COAL_TIME;
879         en_dbg(INTR, priv, "Default coalesing params for mtu:%d - "
880                            "rx_frames:%d rx_usecs:%d\n",
881                  priv->dev->mtu, priv->rx_frames, priv->rx_usecs);
882
883         /* Setup cq moderation params */
884         for (i = 0; i < priv->rx_ring_num; i++) {
885                 cq = &priv->rx_cq[i];
886                 cq->moder_cnt = priv->rx_frames;
887                 cq->moder_time = priv->rx_usecs;
888                 priv->last_moder_time[i] = MLX4_EN_AUTO_CONF;
889                 priv->last_moder_packets[i] = 0;
890                 priv->last_moder_bytes[i] = 0;
891         }
892
893         for (i = 0; i < priv->tx_ring_num; i++) {
894                 cq = &priv->tx_cq[i];
895                 cq->moder_cnt = priv->tx_frames;
896                 cq->moder_time = priv->tx_usecs;
897         }
898
899         /* Reset auto-moderation params */
900         priv->pkt_rate_low = MLX4_EN_RX_RATE_LOW;
901         priv->rx_usecs_low = MLX4_EN_RX_COAL_TIME_LOW;
902         priv->pkt_rate_high = MLX4_EN_RX_RATE_HIGH;
903         priv->rx_usecs_high = MLX4_EN_RX_COAL_TIME_HIGH;
904         priv->sample_interval = MLX4_EN_SAMPLE_INTERVAL;
905         priv->adaptive_rx_coal = 1;
906         priv->last_moder_jiffies = 0;
907         priv->last_moder_tx_packets = 0;
908 }
909
910 static void mlx4_en_auto_moderation(struct mlx4_en_priv *priv)
911 {
912         unsigned long period = (unsigned long) (jiffies - priv->last_moder_jiffies);
913         struct mlx4_en_cq *cq;
914         unsigned long packets;
915         unsigned long rate;
916         unsigned long avg_pkt_size;
917         unsigned long rx_packets;
918         unsigned long rx_bytes;
919         unsigned long rx_pkt_diff;
920         int moder_time;
921         int ring, err;
922
923         if (!priv->adaptive_rx_coal || period < priv->sample_interval * HZ)
924                 return;
925
926         for (ring = 0; ring < priv->rx_ring_num; ring++) {
927                 spin_lock_bh(&priv->stats_lock);
928                 rx_packets = priv->rx_ring[ring].packets;
929                 rx_bytes = priv->rx_ring[ring].bytes;
930                 spin_unlock_bh(&priv->stats_lock);
931
932                 rx_pkt_diff = ((unsigned long) (rx_packets -
933                                 priv->last_moder_packets[ring]));
934                 packets = rx_pkt_diff;
935                 rate = packets * HZ / period;
936                 avg_pkt_size = packets ? ((unsigned long) (rx_bytes -
937                                 priv->last_moder_bytes[ring])) / packets : 0;
938
939                 /* Apply auto-moderation only when packet rate
940                  * exceeds a rate that it matters */
941                 if (rate > (MLX4_EN_RX_RATE_THRESH / priv->rx_ring_num) &&
942                     avg_pkt_size > MLX4_EN_AVG_PKT_SMALL) {
943                         if (rate < priv->pkt_rate_low)
944                                 moder_time = priv->rx_usecs_low;
945                         else if (rate > priv->pkt_rate_high)
946                                 moder_time = priv->rx_usecs_high;
947                         else
948                                 moder_time = (rate - priv->pkt_rate_low) *
949                                         (priv->rx_usecs_high - priv->rx_usecs_low) /
950                                         (priv->pkt_rate_high - priv->pkt_rate_low) +
951                                         priv->rx_usecs_low;
952                 } else {
953                         moder_time = priv->rx_usecs_low;
954                 }
955
956                 if (moder_time != priv->last_moder_time[ring]) {
957                         priv->last_moder_time[ring] = moder_time;
958                         cq = &priv->rx_cq[ring];
959                         cq->moder_time = moder_time;
960                         err = mlx4_en_set_cq_moder(priv, cq);
961                         if (err)
962                                 en_err(priv, "Failed modifying moderation "
963                                              "for cq:%d\n", ring);
964                 }
965                 priv->last_moder_packets[ring] = rx_packets;
966                 priv->last_moder_bytes[ring] = rx_bytes;
967         }
968
969         priv->last_moder_jiffies = jiffies;
970 }
971
972 static void mlx4_en_do_get_stats(struct work_struct *work)
973 {
974         struct delayed_work *delay = to_delayed_work(work);
975         struct mlx4_en_priv *priv = container_of(delay, struct mlx4_en_priv,
976                                                  stats_task);
977         struct mlx4_en_dev *mdev = priv->mdev;
978         int err;
979
980         mutex_lock(&mdev->state_lock);
981         if (mdev->device_up) {
982                 err = mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 0);
983                 if (err)
984                         en_dbg(HW, priv, "Could not update stats\n");
985
986                 if (priv->port_up)
987                         mlx4_en_auto_moderation(priv);
988
989                 queue_delayed_work(mdev->workqueue, &priv->stats_task, STATS_DELAY);
990         }
991         if (mdev->mac_removed[MLX4_MAX_PORTS + 1 - priv->port]) {
992                 queue_work(mdev->workqueue, &priv->mac_task);
993                 mdev->mac_removed[MLX4_MAX_PORTS + 1 - priv->port] = 0;
994         }
995         mutex_unlock(&mdev->state_lock);
996 }
997
998 static void mlx4_en_linkstate(struct work_struct *work)
999 {
1000         struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
1001                                                  linkstate_task);
1002         struct mlx4_en_dev *mdev = priv->mdev;
1003         int linkstate = priv->link_state;
1004
1005         mutex_lock(&mdev->state_lock);
1006         /* If observable port state changed set carrier state and
1007          * report to system log */
1008         if (priv->last_link_state != linkstate) {
1009                 if (linkstate == MLX4_DEV_EVENT_PORT_DOWN) {
1010                         en_info(priv, "Link Down\n");
1011                         netif_carrier_off(priv->dev);
1012                 } else {
1013                         en_info(priv, "Link Up\n");
1014                         netif_carrier_on(priv->dev);
1015                 }
1016         }
1017         priv->last_link_state = linkstate;
1018         mutex_unlock(&mdev->state_lock);
1019 }
1020
1021
1022 int mlx4_en_start_port(struct net_device *dev)
1023 {
1024         struct mlx4_en_priv *priv = netdev_priv(dev);
1025         struct mlx4_en_dev *mdev = priv->mdev;
1026         struct mlx4_en_cq *cq;
1027         struct mlx4_en_tx_ring *tx_ring;
1028         int rx_index = 0;
1029         int tx_index = 0;
1030         int err = 0;
1031         int i;
1032         int j;
1033         u8 mc_list[16] = {0};
1034
1035         if (priv->port_up) {
1036                 en_dbg(DRV, priv, "start port called while port already up\n");
1037                 return 0;
1038         }
1039
1040         INIT_LIST_HEAD(&priv->mc_list);
1041         INIT_LIST_HEAD(&priv->curr_list);
1042         INIT_LIST_HEAD(&priv->ethtool_list);
1043         memset(&priv->ethtool_rules[0], 0,
1044                sizeof(struct ethtool_flow_id) * MAX_NUM_OF_FS_RULES);
1045
1046         /* Calculate Rx buf size */
1047         dev->mtu = min(dev->mtu, priv->max_mtu);
1048         mlx4_en_calc_rx_buf(dev);
1049         en_dbg(DRV, priv, "Rx buf size:%d\n", priv->rx_skb_size);
1050
1051         /* Configure rx cq's and rings */
1052         err = mlx4_en_activate_rx_rings(priv);
1053         if (err) {
1054                 en_err(priv, "Failed to activate RX rings\n");
1055                 return err;
1056         }
1057         for (i = 0; i < priv->rx_ring_num; i++) {
1058                 cq = &priv->rx_cq[i];
1059
1060                 err = mlx4_en_activate_cq(priv, cq, i);
1061                 if (err) {
1062                         en_err(priv, "Failed activating Rx CQ\n");
1063                         goto cq_err;
1064                 }
1065                 for (j = 0; j < cq->size; j++)
1066                         cq->buf[j].owner_sr_opcode = MLX4_CQE_OWNER_MASK;
1067                 err = mlx4_en_set_cq_moder(priv, cq);
1068                 if (err) {
1069                         en_err(priv, "Failed setting cq moderation parameters");
1070                         mlx4_en_deactivate_cq(priv, cq);
1071                         goto cq_err;
1072                 }
1073                 mlx4_en_arm_cq(priv, cq);
1074                 priv->rx_ring[i].cqn = cq->mcq.cqn;
1075                 ++rx_index;
1076         }
1077
1078         /* Set qp number */
1079         en_dbg(DRV, priv, "Getting qp number for port %d\n", priv->port);
1080         err = mlx4_get_eth_qp(mdev->dev, priv->port,
1081                                 priv->mac, &priv->base_qpn);
1082         if (err) {
1083                 en_err(priv, "Failed getting eth qp\n");
1084                 goto cq_err;
1085         }
1086         mdev->mac_removed[priv->port] = 0;
1087
1088         err = mlx4_en_config_rss_steer(priv);
1089         if (err) {
1090                 en_err(priv, "Failed configuring rss steering\n");
1091                 goto mac_err;
1092         }
1093
1094         err = mlx4_en_create_drop_qp(priv);
1095         if (err)
1096                 goto rss_err;
1097
1098         /* Configure tx cq's and rings */
1099         for (i = 0; i < priv->tx_ring_num; i++) {
1100                 /* Configure cq */
1101                 cq = &priv->tx_cq[i];
1102                 err = mlx4_en_activate_cq(priv, cq, i);
1103                 if (err) {
1104                         en_err(priv, "Failed allocating Tx CQ\n");
1105                         goto tx_err;
1106                 }
1107                 err = mlx4_en_set_cq_moder(priv, cq);
1108                 if (err) {
1109                         en_err(priv, "Failed setting cq moderation parameters");
1110                         mlx4_en_deactivate_cq(priv, cq);
1111                         goto tx_err;
1112                 }
1113                 en_dbg(DRV, priv, "Resetting index of collapsed CQ:%d to -1\n", i);
1114                 cq->buf->wqe_index = cpu_to_be16(0xffff);
1115
1116                 /* Configure ring */
1117                 tx_ring = &priv->tx_ring[i];
1118                 err = mlx4_en_activate_tx_ring(priv, tx_ring, cq->mcq.cqn,
1119                         i / priv->num_tx_rings_p_up);
1120                 if (err) {
1121                         en_err(priv, "Failed allocating Tx ring\n");
1122                         mlx4_en_deactivate_cq(priv, cq);
1123                         goto tx_err;
1124                 }
1125                 tx_ring->tx_queue = netdev_get_tx_queue(dev, i);
1126
1127                 /* Arm CQ for TX completions */
1128                 mlx4_en_arm_cq(priv, cq);
1129
1130                 /* Set initial ownership of all Tx TXBBs to SW (1) */
1131                 for (j = 0; j < tx_ring->buf_size; j += STAMP_STRIDE)
1132                         *((u32 *) (tx_ring->buf + j)) = 0xffffffff;
1133                 ++tx_index;
1134         }
1135
1136         /* Configure port */
1137         err = mlx4_SET_PORT_general(mdev->dev, priv->port,
1138                                     priv->rx_skb_size + ETH_FCS_LEN,
1139                                     priv->prof->tx_pause,
1140                                     priv->prof->tx_ppp,
1141                                     priv->prof->rx_pause,
1142                                     priv->prof->rx_ppp);
1143         if (err) {
1144                 en_err(priv, "Failed setting port general configurations "
1145                              "for port %d, with error %d\n", priv->port, err);
1146                 goto tx_err;
1147         }
1148         /* Set default qp number */
1149         err = mlx4_SET_PORT_qpn_calc(mdev->dev, priv->port, priv->base_qpn, 0);
1150         if (err) {
1151                 en_err(priv, "Failed setting default qp numbers\n");
1152                 goto tx_err;
1153         }
1154
1155         /* Init port */
1156         en_dbg(HW, priv, "Initializing port\n");
1157         err = mlx4_INIT_PORT(mdev->dev, priv->port);
1158         if (err) {
1159                 en_err(priv, "Failed Initializing port\n");
1160                 goto tx_err;
1161         }
1162
1163         /* Attach rx QP to bradcast address */
1164         memset(&mc_list[10], 0xff, ETH_ALEN);
1165         mc_list[5] = priv->port; /* needed for B0 steering support */
1166         if (mlx4_multicast_attach(mdev->dev, &priv->rss_map.indir_qp, mc_list,
1167                                   priv->port, 0, MLX4_PROT_ETH,
1168                                   &priv->broadcast_id))
1169                 mlx4_warn(mdev, "Failed Attaching Broadcast\n");
1170
1171         /* Must redo promiscuous mode setup. */
1172         priv->flags &= ~(MLX4_EN_FLAG_PROMISC | MLX4_EN_FLAG_MC_PROMISC);
1173
1174         /* Schedule multicast task to populate multicast list */
1175         queue_work(mdev->workqueue, &priv->mcast_task);
1176
1177         mlx4_set_stats_bitmap(mdev->dev, &priv->stats_bitmap);
1178
1179         priv->port_up = true;
1180         netif_tx_start_all_queues(dev);
1181         return 0;
1182
1183 tx_err:
1184         while (tx_index--) {
1185                 mlx4_en_deactivate_tx_ring(priv, &priv->tx_ring[tx_index]);
1186                 mlx4_en_deactivate_cq(priv, &priv->tx_cq[tx_index]);
1187         }
1188         mlx4_en_destroy_drop_qp(priv);
1189 rss_err:
1190         mlx4_en_release_rss_steer(priv);
1191 mac_err:
1192         mlx4_put_eth_qp(mdev->dev, priv->port, priv->mac, priv->base_qpn);
1193 cq_err:
1194         while (rx_index--)
1195                 mlx4_en_deactivate_cq(priv, &priv->rx_cq[rx_index]);
1196         for (i = 0; i < priv->rx_ring_num; i++)
1197                 mlx4_en_deactivate_rx_ring(priv, &priv->rx_ring[i]);
1198
1199         return err; /* need to close devices */
1200 }
1201
1202
1203 void mlx4_en_stop_port(struct net_device *dev)
1204 {
1205         struct mlx4_en_priv *priv = netdev_priv(dev);
1206         struct mlx4_en_dev *mdev = priv->mdev;
1207         struct mlx4_en_mc_list *mclist, *tmp;
1208         struct ethtool_flow_id *flow, *tmp_flow;
1209         int i;
1210         u8 mc_list[16] = {0};
1211
1212         if (!priv->port_up) {
1213                 en_dbg(DRV, priv, "stop port called while port already down\n");
1214                 return;
1215         }
1216
1217         /* Synchronize with tx routine */
1218         netif_tx_lock_bh(dev);
1219         netif_tx_stop_all_queues(dev);
1220         netif_tx_unlock_bh(dev);
1221
1222         /* Set port as not active */
1223         priv->port_up = false;
1224
1225         /* Promsicuous mode */
1226         if (mdev->dev->caps.steering_mode ==
1227             MLX4_STEERING_MODE_DEVICE_MANAGED) {
1228                 priv->flags &= ~(MLX4_EN_FLAG_PROMISC |
1229                                  MLX4_EN_FLAG_MC_PROMISC);
1230                 mlx4_flow_steer_promisc_remove(mdev->dev,
1231                                                priv->port,
1232                                                MLX4_FS_PROMISC_UPLINK);
1233                 mlx4_flow_steer_promisc_remove(mdev->dev,
1234                                                priv->port,
1235                                                MLX4_FS_PROMISC_ALL_MULTI);
1236         } else if (priv->flags & MLX4_EN_FLAG_PROMISC) {
1237                 priv->flags &= ~MLX4_EN_FLAG_PROMISC;
1238
1239                 /* Disable promiscouos mode */
1240                 mlx4_unicast_promisc_remove(mdev->dev, priv->base_qpn,
1241                                             priv->port);
1242
1243                 /* Disable Multicast promisc */
1244                 if (priv->flags & MLX4_EN_FLAG_MC_PROMISC) {
1245                         mlx4_multicast_promisc_remove(mdev->dev, priv->base_qpn,
1246                                                       priv->port);
1247                         priv->flags &= ~MLX4_EN_FLAG_MC_PROMISC;
1248                 }
1249         }
1250
1251         /* Detach All multicasts */
1252         memset(&mc_list[10], 0xff, ETH_ALEN);
1253         mc_list[5] = priv->port; /* needed for B0 steering support */
1254         mlx4_multicast_detach(mdev->dev, &priv->rss_map.indir_qp, mc_list,
1255                               MLX4_PROT_ETH, priv->broadcast_id);
1256         list_for_each_entry(mclist, &priv->curr_list, list) {
1257                 memcpy(&mc_list[10], mclist->addr, ETH_ALEN);
1258                 mc_list[5] = priv->port;
1259                 mlx4_multicast_detach(mdev->dev, &priv->rss_map.indir_qp,
1260                                       mc_list, MLX4_PROT_ETH, mclist->reg_id);
1261         }
1262         mlx4_en_clear_list(dev);
1263         list_for_each_entry_safe(mclist, tmp, &priv->curr_list, list) {
1264                 list_del(&mclist->list);
1265                 kfree(mclist);
1266         }
1267
1268         /* Flush multicast filter */
1269         mlx4_SET_MCAST_FLTR(mdev->dev, priv->port, 0, 1, MLX4_MCAST_CONFIG);
1270
1271         mlx4_en_destroy_drop_qp(priv);
1272
1273         /* Free TX Rings */
1274         for (i = 0; i < priv->tx_ring_num; i++) {
1275                 mlx4_en_deactivate_tx_ring(priv, &priv->tx_ring[i]);
1276                 mlx4_en_deactivate_cq(priv, &priv->tx_cq[i]);
1277         }
1278         msleep(10);
1279
1280         for (i = 0; i < priv->tx_ring_num; i++)
1281                 mlx4_en_free_tx_buf(dev, &priv->tx_ring[i]);
1282
1283         /* Free RSS qps */
1284         mlx4_en_release_rss_steer(priv);
1285
1286         /* Unregister Mac address for the port */
1287         mlx4_put_eth_qp(mdev->dev, priv->port, priv->mac, priv->base_qpn);
1288         mdev->mac_removed[priv->port] = 1;
1289
1290         /* Remove flow steering rules for the port*/
1291         if (mdev->dev->caps.steering_mode ==
1292             MLX4_STEERING_MODE_DEVICE_MANAGED) {
1293                 ASSERT_RTNL();
1294                 list_for_each_entry_safe(flow, tmp_flow,
1295                                          &priv->ethtool_list, list) {
1296                         mlx4_flow_detach(mdev->dev, flow->id);
1297                         list_del(&flow->list);
1298                 }
1299         }
1300
1301         /* Free RX Rings */
1302         for (i = 0; i < priv->rx_ring_num; i++) {
1303                 mlx4_en_deactivate_rx_ring(priv, &priv->rx_ring[i]);
1304                 while (test_bit(NAPI_STATE_SCHED, &priv->rx_cq[i].napi.state))
1305                         msleep(1);
1306                 mlx4_en_deactivate_cq(priv, &priv->rx_cq[i]);
1307         }
1308
1309         /* close port*/
1310         mlx4_CLOSE_PORT(mdev->dev, priv->port);
1311 }
1312
1313 static void mlx4_en_restart(struct work_struct *work)
1314 {
1315         struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
1316                                                  watchdog_task);
1317         struct mlx4_en_dev *mdev = priv->mdev;
1318         struct net_device *dev = priv->dev;
1319         int i;
1320
1321         en_dbg(DRV, priv, "Watchdog task called for port %d\n", priv->port);
1322
1323         mutex_lock(&mdev->state_lock);
1324         if (priv->port_up) {
1325                 mlx4_en_stop_port(dev);
1326                 for (i = 0; i < priv->tx_ring_num; i++)
1327                         netdev_tx_reset_queue(priv->tx_ring[i].tx_queue);
1328                 if (mlx4_en_start_port(dev))
1329                         en_err(priv, "Failed restarting port %d\n", priv->port);
1330         }
1331         mutex_unlock(&mdev->state_lock);
1332 }
1333
1334 static void mlx4_en_clear_stats(struct net_device *dev)
1335 {
1336         struct mlx4_en_priv *priv = netdev_priv(dev);
1337         struct mlx4_en_dev *mdev = priv->mdev;
1338         int i;
1339
1340         if (mlx4_en_DUMP_ETH_STATS(mdev, priv->port, 1))
1341                 en_dbg(HW, priv, "Failed dumping statistics\n");
1342
1343         memset(&priv->stats, 0, sizeof(priv->stats));
1344         memset(&priv->pstats, 0, sizeof(priv->pstats));
1345         memset(&priv->pkstats, 0, sizeof(priv->pkstats));
1346         memset(&priv->port_stats, 0, sizeof(priv->port_stats));
1347
1348         for (i = 0; i < priv->tx_ring_num; i++) {
1349                 priv->tx_ring[i].bytes = 0;
1350                 priv->tx_ring[i].packets = 0;
1351                 priv->tx_ring[i].tx_csum = 0;
1352         }
1353         for (i = 0; i < priv->rx_ring_num; i++) {
1354                 priv->rx_ring[i].bytes = 0;
1355                 priv->rx_ring[i].packets = 0;
1356                 priv->rx_ring[i].csum_ok = 0;
1357                 priv->rx_ring[i].csum_none = 0;
1358         }
1359 }
1360
1361 static int mlx4_en_open(struct net_device *dev)
1362 {
1363         struct mlx4_en_priv *priv = netdev_priv(dev);
1364         struct mlx4_en_dev *mdev = priv->mdev;
1365         int err = 0;
1366
1367         mutex_lock(&mdev->state_lock);
1368
1369         if (!mdev->device_up) {
1370                 en_err(priv, "Cannot open - device down/disabled\n");
1371                 err = -EBUSY;
1372                 goto out;
1373         }
1374
1375         /* Reset HW statistics and SW counters */
1376         mlx4_en_clear_stats(dev);
1377
1378         err = mlx4_en_start_port(dev);
1379         if (err)
1380                 en_err(priv, "Failed starting port:%d\n", priv->port);
1381
1382 out:
1383         mutex_unlock(&mdev->state_lock);
1384         return err;
1385 }
1386
1387
1388 static int mlx4_en_close(struct net_device *dev)
1389 {
1390         struct mlx4_en_priv *priv = netdev_priv(dev);
1391         struct mlx4_en_dev *mdev = priv->mdev;
1392
1393         en_dbg(IFDOWN, priv, "Close port called\n");
1394
1395         mutex_lock(&mdev->state_lock);
1396
1397         mlx4_en_stop_port(dev);
1398         netif_carrier_off(dev);
1399
1400         mutex_unlock(&mdev->state_lock);
1401         return 0;
1402 }
1403
1404 void mlx4_en_free_resources(struct mlx4_en_priv *priv)
1405 {
1406         int i;
1407
1408 #ifdef CONFIG_RFS_ACCEL
1409         free_irq_cpu_rmap(priv->dev->rx_cpu_rmap);
1410         priv->dev->rx_cpu_rmap = NULL;
1411 #endif
1412
1413         for (i = 0; i < priv->tx_ring_num; i++) {
1414                 if (priv->tx_ring[i].tx_info)
1415                         mlx4_en_destroy_tx_ring(priv, &priv->tx_ring[i]);
1416                 if (priv->tx_cq[i].buf)
1417                         mlx4_en_destroy_cq(priv, &priv->tx_cq[i]);
1418         }
1419
1420         for (i = 0; i < priv->rx_ring_num; i++) {
1421                 if (priv->rx_ring[i].rx_info)
1422                         mlx4_en_destroy_rx_ring(priv, &priv->rx_ring[i],
1423                                 priv->prof->rx_ring_size, priv->stride);
1424                 if (priv->rx_cq[i].buf)
1425                         mlx4_en_destroy_cq(priv, &priv->rx_cq[i]);
1426         }
1427
1428         if (priv->base_tx_qpn) {
1429                 mlx4_qp_release_range(priv->mdev->dev, priv->base_tx_qpn, priv->tx_ring_num);
1430                 priv->base_tx_qpn = 0;
1431         }
1432 }
1433
1434 int mlx4_en_alloc_resources(struct mlx4_en_priv *priv)
1435 {
1436         struct mlx4_en_port_profile *prof = priv->prof;
1437         int i;
1438         int err;
1439
1440         err = mlx4_qp_reserve_range(priv->mdev->dev, priv->tx_ring_num, 256, &priv->base_tx_qpn);
1441         if (err) {
1442                 en_err(priv, "failed reserving range for TX rings\n");
1443                 return err;
1444         }
1445
1446         /* Create tx Rings */
1447         for (i = 0; i < priv->tx_ring_num; i++) {
1448                 if (mlx4_en_create_cq(priv, &priv->tx_cq[i],
1449                                       prof->tx_ring_size, i, TX))
1450                         goto err;
1451
1452                 if (mlx4_en_create_tx_ring(priv, &priv->tx_ring[i], priv->base_tx_qpn + i,
1453                                            prof->tx_ring_size, TXBB_SIZE))
1454                         goto err;
1455         }
1456
1457         /* Create rx Rings */
1458         for (i = 0; i < priv->rx_ring_num; i++) {
1459                 if (mlx4_en_create_cq(priv, &priv->rx_cq[i],
1460                                       prof->rx_ring_size, i, RX))
1461                         goto err;
1462
1463                 if (mlx4_en_create_rx_ring(priv, &priv->rx_ring[i],
1464                                            prof->rx_ring_size, priv->stride))
1465                         goto err;
1466         }
1467
1468 #ifdef CONFIG_RFS_ACCEL
1469         priv->dev->rx_cpu_rmap = alloc_irq_cpu_rmap(priv->rx_ring_num);
1470         if (!priv->dev->rx_cpu_rmap)
1471                 goto err;
1472 #endif
1473
1474         return 0;
1475
1476 err:
1477         en_err(priv, "Failed to allocate NIC resources\n");
1478         return -ENOMEM;
1479 }
1480
1481
1482 void mlx4_en_destroy_netdev(struct net_device *dev)
1483 {
1484         struct mlx4_en_priv *priv = netdev_priv(dev);
1485         struct mlx4_en_dev *mdev = priv->mdev;
1486
1487         en_dbg(DRV, priv, "Destroying netdev on port:%d\n", priv->port);
1488
1489         /* Unregister device - this will close the port if it was up */
1490         if (priv->registered)
1491                 unregister_netdev(dev);
1492
1493         if (priv->allocated)
1494                 mlx4_free_hwq_res(mdev->dev, &priv->res, MLX4_EN_PAGE_SIZE);
1495
1496         cancel_delayed_work(&priv->stats_task);
1497         /* flush any pending task for this netdev */
1498         flush_workqueue(mdev->workqueue);
1499
1500         /* Detach the netdev so tasks would not attempt to access it */
1501         mutex_lock(&mdev->state_lock);
1502         mdev->pndev[priv->port] = NULL;
1503         mutex_unlock(&mdev->state_lock);
1504
1505         mlx4_en_free_resources(priv);
1506
1507         kfree(priv->tx_ring);
1508         kfree(priv->tx_cq);
1509
1510         free_netdev(dev);
1511 }
1512
1513 static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
1514 {
1515         struct mlx4_en_priv *priv = netdev_priv(dev);
1516         struct mlx4_en_dev *mdev = priv->mdev;
1517         int err = 0;
1518
1519         en_dbg(DRV, priv, "Change MTU called - current:%d new:%d\n",
1520                  dev->mtu, new_mtu);
1521
1522         if ((new_mtu < MLX4_EN_MIN_MTU) || (new_mtu > priv->max_mtu)) {
1523                 en_err(priv, "Bad MTU size:%d.\n", new_mtu);
1524                 return -EPERM;
1525         }
1526         dev->mtu = new_mtu;
1527
1528         if (netif_running(dev)) {
1529                 mutex_lock(&mdev->state_lock);
1530                 if (!mdev->device_up) {
1531                         /* NIC is probably restarting - let watchdog task reset
1532                          * the port */
1533                         en_dbg(DRV, priv, "Change MTU called with card down!?\n");
1534                 } else {
1535                         mlx4_en_stop_port(dev);
1536                         err = mlx4_en_start_port(dev);
1537                         if (err) {
1538                                 en_err(priv, "Failed restarting port:%d\n",
1539                                          priv->port);
1540                                 queue_work(mdev->workqueue, &priv->watchdog_task);
1541                         }
1542                 }
1543                 mutex_unlock(&mdev->state_lock);
1544         }
1545         return 0;
1546 }
1547
1548 static int mlx4_en_set_features(struct net_device *netdev,
1549                 netdev_features_t features)
1550 {
1551         struct mlx4_en_priv *priv = netdev_priv(netdev);
1552
1553         if (features & NETIF_F_LOOPBACK)
1554                 priv->ctrl_flags |= cpu_to_be32(MLX4_WQE_CTRL_FORCE_LOOPBACK);
1555         else
1556                 priv->ctrl_flags &=
1557                         cpu_to_be32(~MLX4_WQE_CTRL_FORCE_LOOPBACK);
1558
1559         return 0;
1560
1561 }
1562
1563 static const struct net_device_ops mlx4_netdev_ops = {
1564         .ndo_open               = mlx4_en_open,
1565         .ndo_stop               = mlx4_en_close,
1566         .ndo_start_xmit         = mlx4_en_xmit,
1567         .ndo_select_queue       = mlx4_en_select_queue,
1568         .ndo_get_stats          = mlx4_en_get_stats,
1569         .ndo_set_rx_mode        = mlx4_en_set_multicast,
1570         .ndo_set_mac_address    = mlx4_en_set_mac,
1571         .ndo_validate_addr      = eth_validate_addr,
1572         .ndo_change_mtu         = mlx4_en_change_mtu,
1573         .ndo_tx_timeout         = mlx4_en_tx_timeout,
1574         .ndo_vlan_rx_add_vid    = mlx4_en_vlan_rx_add_vid,
1575         .ndo_vlan_rx_kill_vid   = mlx4_en_vlan_rx_kill_vid,
1576 #ifdef CONFIG_NET_POLL_CONTROLLER
1577         .ndo_poll_controller    = mlx4_en_netpoll,
1578 #endif
1579         .ndo_set_features       = mlx4_en_set_features,
1580         .ndo_setup_tc           = mlx4_en_setup_tc,
1581 #ifdef CONFIG_RFS_ACCEL
1582         .ndo_rx_flow_steer      = mlx4_en_filter_rfs,
1583 #endif
1584 };
1585
1586 int mlx4_en_init_netdev(struct mlx4_en_dev *mdev, int port,
1587                         struct mlx4_en_port_profile *prof)
1588 {
1589         struct net_device *dev;
1590         struct mlx4_en_priv *priv;
1591         int i;
1592         int err;
1593
1594         dev = alloc_etherdev_mqs(sizeof(struct mlx4_en_priv),
1595                                  MAX_TX_RINGS, MAX_RX_RINGS);
1596         if (dev == NULL)
1597                 return -ENOMEM;
1598
1599         netif_set_real_num_tx_queues(dev, prof->tx_ring_num);
1600         netif_set_real_num_rx_queues(dev, prof->rx_ring_num);
1601
1602         SET_NETDEV_DEV(dev, &mdev->dev->pdev->dev);
1603         dev->dev_id =  port - 1;
1604
1605         /*
1606          * Initialize driver private data
1607          */
1608
1609         priv = netdev_priv(dev);
1610         memset(priv, 0, sizeof(struct mlx4_en_priv));
1611         priv->dev = dev;
1612         priv->mdev = mdev;
1613         priv->ddev = &mdev->pdev->dev;
1614         priv->prof = prof;
1615         priv->port = port;
1616         priv->port_up = false;
1617         priv->flags = prof->flags;
1618         priv->ctrl_flags = cpu_to_be32(MLX4_WQE_CTRL_CQ_UPDATE |
1619                         MLX4_WQE_CTRL_SOLICITED);
1620         priv->num_tx_rings_p_up = mdev->profile.num_tx_rings_p_up;
1621         priv->tx_ring_num = prof->tx_ring_num;
1622
1623         priv->tx_ring = kzalloc(sizeof(struct mlx4_en_tx_ring) * MAX_TX_RINGS,
1624                                 GFP_KERNEL);
1625         if (!priv->tx_ring) {
1626                 err = -ENOMEM;
1627                 goto out;
1628         }
1629         priv->tx_cq = kzalloc(sizeof(struct mlx4_en_cq) * MAX_RX_RINGS,
1630                               GFP_KERNEL);
1631         if (!priv->tx_cq) {
1632                 err = -ENOMEM;
1633                 goto out;
1634         }
1635         priv->rx_ring_num = prof->rx_ring_num;
1636         priv->cqe_factor = (mdev->dev->caps.cqe_size == 64) ? 1 : 0;
1637         priv->mac_index = -1;
1638         priv->msg_enable = MLX4_EN_MSG_LEVEL;
1639         spin_lock_init(&priv->stats_lock);
1640         INIT_WORK(&priv->mcast_task, mlx4_en_do_set_multicast);
1641         INIT_WORK(&priv->mac_task, mlx4_en_do_set_mac);
1642         INIT_WORK(&priv->watchdog_task, mlx4_en_restart);
1643         INIT_WORK(&priv->linkstate_task, mlx4_en_linkstate);
1644         INIT_DELAYED_WORK(&priv->stats_task, mlx4_en_do_get_stats);
1645 #ifdef CONFIG_MLX4_EN_DCB
1646         if (!mlx4_is_slave(priv->mdev->dev))
1647                 dev->dcbnl_ops = &mlx4_en_dcbnl_ops;
1648 #endif
1649
1650         /* Query for default mac and max mtu */
1651         priv->max_mtu = mdev->dev->caps.eth_mtu_cap[priv->port];
1652         priv->mac = mdev->dev->caps.def_mac[priv->port];
1653         if (ILLEGAL_MAC(priv->mac)) {
1654                 en_err(priv, "Port: %d, invalid mac burned: 0x%llx, quiting\n",
1655                          priv->port, priv->mac);
1656                 err = -EINVAL;
1657                 goto out;
1658         }
1659
1660         priv->stride = roundup_pow_of_two(sizeof(struct mlx4_en_rx_desc) +
1661                                           DS_SIZE * MLX4_EN_MAX_RX_FRAGS);
1662         err = mlx4_en_alloc_resources(priv);
1663         if (err)
1664                 goto out;
1665
1666 #ifdef CONFIG_RFS_ACCEL
1667         INIT_LIST_HEAD(&priv->filters);
1668         spin_lock_init(&priv->filters_lock);
1669 #endif
1670
1671         /* Allocate page for receive rings */
1672         err = mlx4_alloc_hwq_res(mdev->dev, &priv->res,
1673                                 MLX4_EN_PAGE_SIZE, MLX4_EN_PAGE_SIZE);
1674         if (err) {
1675                 en_err(priv, "Failed to allocate page for rx qps\n");
1676                 goto out;
1677         }
1678         priv->allocated = 1;
1679
1680         /*
1681          * Initialize netdev entry points
1682          */
1683         dev->netdev_ops = &mlx4_netdev_ops;
1684         dev->watchdog_timeo = MLX4_EN_WATCHDOG_TIMEOUT;
1685         netif_set_real_num_tx_queues(dev, priv->tx_ring_num);
1686         netif_set_real_num_rx_queues(dev, priv->rx_ring_num);
1687
1688         SET_ETHTOOL_OPS(dev, &mlx4_en_ethtool_ops);
1689
1690         /* Set defualt MAC */
1691         dev->addr_len = ETH_ALEN;
1692         for (i = 0; i < ETH_ALEN; i++)
1693                 dev->dev_addr[ETH_ALEN - 1 - i] = (u8) (priv->mac >> (8 * i));
1694
1695         /*
1696          * Set driver features
1697          */
1698         dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
1699         if (mdev->LSO_support)
1700                 dev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
1701
1702         dev->vlan_features = dev->hw_features;
1703
1704         dev->hw_features |= NETIF_F_RXCSUM | NETIF_F_RXHASH;
1705         dev->features = dev->hw_features | NETIF_F_HIGHDMA |
1706                         NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX |
1707                         NETIF_F_HW_VLAN_FILTER;
1708         dev->hw_features |= NETIF_F_LOOPBACK;
1709
1710         if (mdev->dev->caps.steering_mode ==
1711             MLX4_STEERING_MODE_DEVICE_MANAGED)
1712                 dev->hw_features |= NETIF_F_NTUPLE;
1713
1714         mdev->pndev[port] = dev;
1715
1716         netif_carrier_off(dev);
1717         err = register_netdev(dev);
1718         if (err) {
1719                 en_err(priv, "Netdev registration failed for port %d\n", port);
1720                 goto out;
1721         }
1722         priv->registered = 1;
1723
1724         en_warn(priv, "Using %d TX rings\n", prof->tx_ring_num);
1725         en_warn(priv, "Using %d RX rings\n", prof->rx_ring_num);
1726
1727         /* Configure port */
1728         mlx4_en_calc_rx_buf(dev);
1729         err = mlx4_SET_PORT_general(mdev->dev, priv->port,
1730                                     priv->rx_skb_size + ETH_FCS_LEN,
1731                                     prof->tx_pause, prof->tx_ppp,
1732                                     prof->rx_pause, prof->rx_ppp);
1733         if (err) {
1734                 en_err(priv, "Failed setting port general configurations "
1735                        "for port %d, with error %d\n", priv->port, err);
1736                 goto out;
1737         }
1738
1739         /* Init port */
1740         en_warn(priv, "Initializing port\n");
1741         err = mlx4_INIT_PORT(mdev->dev, priv->port);
1742         if (err) {
1743                 en_err(priv, "Failed Initializing port\n");
1744                 goto out;
1745         }
1746         mlx4_en_set_default_moderation(priv);
1747         queue_delayed_work(mdev->workqueue, &priv->stats_task, STATS_DELAY);
1748         return 0;
1749
1750 out:
1751         mlx4_en_destroy_netdev(dev);
1752         return err;
1753 }
1754