]> git.karo-electronics.de Git - linux-beck.git/blobdiff - drivers/net/mlx4/en_port.c
mlx4: do vlan cleanup
[linux-beck.git] / drivers / net / mlx4 / en_port.c
index f2a4f5dd313d59872b208046f2c8328bfb1c726b..2a74bc81b9f724a2cb946b8e571e7686b38bb251 100644 (file)
@@ -48,7 +48,7 @@ int mlx4_SET_MCAST_FLTR(struct mlx4_dev *dev, u8 port,
                        MLX4_CMD_SET_MCAST_FLTR, MLX4_CMD_TIME_CLASS_B);
 }
 
-int mlx4_SET_VLAN_FLTR(struct mlx4_dev *dev, u8 port, struct vlan_group *grp)
+int mlx4_SET_VLAN_FLTR(struct mlx4_dev *dev, struct mlx4_en_priv *priv)
 {
        struct mlx4_cmd_mailbox *mailbox;
        struct mlx4_set_vlan_fltr_mbox *filter;
@@ -63,20 +63,15 @@ int mlx4_SET_VLAN_FLTR(struct mlx4_dev *dev, u8 port, struct vlan_group *grp)
                return PTR_ERR(mailbox);
 
        filter = mailbox->buf;
-       if (grp) {
-               memset(filter, 0, sizeof *filter);
-               for (i = VLAN_FLTR_SIZE - 1; i >= 0; i--) {
-                       entry = 0;
-                       for (j = 0; j < 32; j++)
-                               if (vlan_group_get_device(grp, index++))
-                                       entry |= 1 << j;
-                       filter->entry[i] = cpu_to_be32(entry);
-               }
-       } else {
-               /* When no vlans are configured we block all vlans */
-               memset(filter, 0, sizeof(*filter));
+       memset(filter, 0, sizeof(*filter));
+       for (i = VLAN_FLTR_SIZE - 1; i >= 0; i--) {
+               entry = 0;
+               for (j = 0; j < 32; j++)
+                       if (test_bit(index++, priv->active_vlans))
+                               entry |= 1 << j;
+               filter->entry[i] = cpu_to_be32(entry);
        }
-       err = mlx4_cmd(dev, mailbox->dma, port, 0, MLX4_CMD_SET_VLAN_FLTR,
+       err = mlx4_cmd(dev, mailbox->dma, priv->port, 0, MLX4_CMD_SET_VLAN_FLTR,
                       MLX4_CMD_TIME_CLASS_B);
        mlx4_free_cmd_mailbox(dev, mailbox);
        return err;