generic: ar8216: add vtu_load_vlan field to ar8xxx_chip
authorjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 18 Mar 2012 22:06:30 +0000 (22:06 +0000)
committerjuhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 18 Mar 2012 22:06:30 +0000 (22:06 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@31002 3c298f89-4303-0410-b956-a3cf2f4a3e73

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

index 54d57d5..d514ec7 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);
                           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 {
 };
 
 struct ar8216_priv {
@@ -489,6 +490,15 @@ ar8216_vtu_flush(struct ar8216_priv *priv)
        ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
 }
 
        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)
 {
 static int
 ar8216_atu_flush(struct ar8216_priv *priv)
 {
@@ -578,10 +588,8 @@ ar8216_hw_apply(struct switch_dev *dev)
                                        portmask[i] |= vp & ~mask;
                        }
 
                                        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:
                }
        } 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,
        .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 = {
 };
 
 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,
        .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 = {
 };
 
 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,
        .setup_port = ar8216_setup_port,
        .atu_flush = ar8216_atu_flush,
        .vtu_flush = ar8216_vtu_flush,
+       .vtu_load_vlan = ar8216_vtu_load_vlan,
 };
 
 static int
 };
 
 static int
This page took 0.024063 seconds and 4 git commands to generate.