generic: ar8216: add vtu_load_vlan field to ar8xxx_chip
authorGabor Juhos <juhosg@openwrt.org>
Sun, 18 Mar 2012 22:06:30 +0000 (22:06 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Sun, 18 Mar 2012 22:06:30 +0000 (22:06 +0000)
SVN-Revision: 31002

target/linux/generic/files/drivers/net/phy/ar8216.c

index 54d57d5499b68ccad900eafca9ab64fd4310db7a..d514ec724f6a21b9f23b1e598ace52eac7587d9e 100644 (file)
@@ -45,6 +45,7 @@ struct ar8xxx_chip {
                           u32 ingress, u32 members, u32 pvid);
        int (*atu_flush)(struct ar8216_priv *priv);
        void (*vtu_flush)(struct ar8216_priv *priv);
+       void (*vtu_load_vlan)(struct ar8216_priv *priv, u32 vid, u32 port_mask);
 };
 
 struct ar8216_priv {
@@ -489,6 +490,15 @@ ar8216_vtu_flush(struct ar8216_priv *priv)
        ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
 }
 
+static void
+ar8216_vtu_load_vlan(struct ar8216_priv *priv, u32 vid, u32 port_mask)
+{
+       u32 op;
+
+       op = AR8216_VTU_OP_LOAD | (vid << AR8216_VTU_VID_S);
+       ar8216_vtu_op(priv, op, port_mask);
+}
+
 static int
 ar8216_atu_flush(struct ar8216_priv *priv)
 {
@@ -578,10 +588,8 @@ ar8216_hw_apply(struct switch_dev *dev)
                                        portmask[i] |= vp & ~mask;
                        }
 
-                       ar8216_vtu_op(priv,
-                               AR8216_VTU_OP_LOAD |
-                               (priv->vlan_id[j] << AR8216_VTU_VID_S),
-                               priv->vlan_table[j]);
+                       priv->chip->vtu_load_vlan(priv, priv->vlan_id[j],
+                                                priv->vlan_table[j]);
                }
        } else {
                /* vlan disabled:
@@ -768,6 +776,7 @@ static const struct ar8xxx_chip ar8216_chip = {
        .setup_port = ar8216_setup_port,
        .atu_flush = ar8216_atu_flush,
        .vtu_flush = ar8216_vtu_flush,
+       .vtu_load_vlan = ar8216_vtu_load_vlan,
 };
 
 static const struct ar8xxx_chip ar8236_chip = {
@@ -776,6 +785,7 @@ static const struct ar8xxx_chip ar8236_chip = {
        .setup_port = ar8236_setup_port,
        .atu_flush = ar8216_atu_flush,
        .vtu_flush = ar8216_vtu_flush,
+       .vtu_load_vlan = ar8216_vtu_load_vlan,
 };
 
 static const struct ar8xxx_chip ar8316_chip = {
@@ -784,6 +794,7 @@ static const struct ar8xxx_chip ar8316_chip = {
        .setup_port = ar8216_setup_port,
        .atu_flush = ar8216_atu_flush,
        .vtu_flush = ar8216_vtu_flush,
+       .vtu_load_vlan = ar8216_vtu_load_vlan,
 };
 
 static int