|
@@ -45,25 +45,6 @@
|
|
|
#include "mlx4_en.h"
|
|
|
#include "en_port.h"
|
|
|
|
|
|
-
|
|
|
-static void mlx4_en_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
|
|
|
-{
|
|
|
- struct mlx4_en_priv *priv = netdev_priv(dev);
|
|
|
- struct mlx4_en_dev *mdev = priv->mdev;
|
|
|
- int err;
|
|
|
-
|
|
|
- en_dbg(HW, priv, "Registering VLAN group:%p\n", grp);
|
|
|
- priv->vlgrp = grp;
|
|
|
-
|
|
|
- mutex_lock(&mdev->state_lock);
|
|
|
- if (mdev->device_up && priv->port_up) {
|
|
|
- err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, grp);
|
|
|
- if (err)
|
|
|
- en_err(priv, "Failed configuring VLAN filter\n");
|
|
|
- }
|
|
|
- mutex_unlock(&mdev->state_lock);
|
|
|
-}
|
|
|
-
|
|
|
static void mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
|
|
|
{
|
|
|
struct mlx4_en_priv *priv = netdev_priv(dev);
|
|
@@ -71,16 +52,14 @@ static void mlx4_en_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
|
|
|
int err;
|
|
|
int idx;
|
|
|
|
|
|
- if (!priv->vlgrp)
|
|
|
- return;
|
|
|
+ en_dbg(HW, priv, "adding VLAN:%d\n", vid);
|
|
|
|
|
|
- en_dbg(HW, priv, "adding VLAN:%d (vlgrp entry:%p)\n",
|
|
|
- vid, vlan_group_get_device(priv->vlgrp, vid));
|
|
|
+ set_bit(vid, priv->active_vlans);
|
|
|
|
|
|
/* Add VID to port VLAN filter */
|
|
|
mutex_lock(&mdev->state_lock);
|
|
|
if (mdev->device_up && priv->port_up) {
|
|
|
- err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp);
|
|
|
+ err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
|
|
|
if (err)
|
|
|
en_err(priv, "Failed configuring VLAN filter\n");
|
|
|
}
|
|
@@ -97,12 +76,9 @@ static void mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
|
|
|
int err;
|
|
|
int idx;
|
|
|
|
|
|
- if (!priv->vlgrp)
|
|
|
- return;
|
|
|
+ en_dbg(HW, priv, "Killing VID:%d\n", vid);
|
|
|
|
|
|
- en_dbg(HW, priv, "Killing VID:%d (vlgrp:%p vlgrp entry:%p)\n",
|
|
|
- vid, priv->vlgrp, vlan_group_get_device(priv->vlgrp, vid));
|
|
|
- vlan_group_set_device(priv->vlgrp, vid, NULL);
|
|
|
+ clear_bit(vid, priv->active_vlans);
|
|
|
|
|
|
/* Remove VID from port VLAN filter */
|
|
|
mutex_lock(&mdev->state_lock);
|
|
@@ -112,7 +88,7 @@ static void mlx4_en_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
|
|
|
en_err(priv, "could not find vid %d in cache\n", vid);
|
|
|
|
|
|
if (mdev->device_up && priv->port_up) {
|
|
|
- err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp);
|
|
|
+ err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
|
|
|
if (err)
|
|
|
en_err(priv, "Failed configuring VLAN filter\n");
|
|
|
}
|
|
@@ -265,12 +241,10 @@ static void mlx4_en_do_set_multicast(struct work_struct *work)
|
|
|
priv->flags |= MLX4_EN_FLAG_MC_PROMISC;
|
|
|
}
|
|
|
|
|
|
- if (priv->vlgrp) {
|
|
|
- /* Disable port VLAN filter */
|
|
|
- err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, NULL);
|
|
|
- if (err)
|
|
|
- en_err(priv, "Failed disabling VLAN filter\n");
|
|
|
- }
|
|
|
+ /* Disable port VLAN filter */
|
|
|
+ err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
|
|
|
+ if (err)
|
|
|
+ en_err(priv, "Failed disabling VLAN filter\n");
|
|
|
}
|
|
|
goto out;
|
|
|
}
|
|
@@ -304,7 +278,7 @@ static void mlx4_en_do_set_multicast(struct work_struct *work)
|
|
|
}
|
|
|
|
|
|
/* Enable port VLAN filter */
|
|
|
- err = mlx4_SET_VLAN_FLTR(mdev->dev, priv->port, priv->vlgrp);
|
|
|
+ err = mlx4_SET_VLAN_FLTR(mdev->dev, priv);
|
|
|
if (err)
|
|
|
en_err(priv, "Failed enabling VLAN filter\n");
|
|
|
}
|
|
@@ -1046,7 +1020,6 @@ static const struct net_device_ops mlx4_netdev_ops = {
|
|
|
.ndo_validate_addr = eth_validate_addr,
|
|
|
.ndo_change_mtu = mlx4_en_change_mtu,
|
|
|
.ndo_tx_timeout = mlx4_en_tx_timeout,
|
|
|
- .ndo_vlan_rx_register = mlx4_en_vlan_rx_register,
|
|
|
.ndo_vlan_rx_add_vid = mlx4_en_vlan_rx_add_vid,
|
|
|
.ndo_vlan_rx_kill_vid = mlx4_en_vlan_rx_kill_vid,
|
|
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|