generic: rtl8366: add is_vlan_valid function to smi_ops
authorGabor Juhos <juhosg@openwrt.org>
Thu, 15 Jul 2010 13:05:39 +0000 (13:05 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Thu, 15 Jul 2010 13:05:39 +0000 (13:05 +0000)
SVN-Revision: 22201

target/linux/generic/files/drivers/net/phy/rtl8366_smi.h
target/linux/generic/files/drivers/net/phy/rtl8366rb.c
target/linux/generic/files/drivers/net/phy/rtl8366s.c

index 2e8f9298dca9ae998aba44cd83b5f4434ea42501..b53c5010cea8ff891489d9ebbbcef5cc78f80152 100644 (file)
@@ -86,6 +86,7 @@ struct rtl8366_smi_ops {
        int     (*set_mc_index)(struct rtl8366_smi *smi, int port, int index);
        int     (*get_mib_counter)(struct rtl8366_smi *smi, int counter,
                                   int port, unsigned long long *val);
+       int     (*is_vlan_valid)(struct rtl8366_smi *smi, unsigned vlan);
 };
 
 struct rtl8366_smi *rtl8366_smi_alloc(struct device *parent);
index b6d3f9805f0bf8ff7a87c2b1415f6db31529f057..2efde1df3f88e4ef320f63f070c92aa425024c8f 100644 (file)
@@ -552,6 +552,14 @@ static int rtl8366rb_set_mc_index(struct rtl8366_smi *smi, int port, int index)
                                        RTL8366RB_PORT_VLAN_CTRL_SHIFT(port));
 }
 
+static int rtl8366rb_is_vlan_valid(struct rtl8366_smi *smi, unsigned vlan)
+{
+       if (vlan == 0 || vlan >= RTL8366RB_NUM_VLANS)
+               return 0;
+
+       return 1;
+}
+
 static int rtl8366rb_vlan_set_vlan(struct rtl8366_smi *smi, int enable)
 {
        return rtl8366_smi_rmwr(smi, RTL8366RB_SGCR, RTL8366RB_SGCR_EN_VLAN,
@@ -708,7 +716,7 @@ static int rtl8366rb_sw_get_vlan_info(struct switch_dev *dev,
        char *buf = smi->buf;
        int err;
 
-       if (val->port_vlan == 0 || val->port_vlan >= RTL8366RB_NUM_VLANS)
+       if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
                return -EINVAL;
 
        memset(buf, '\0', sizeof(smi->buf));
@@ -800,7 +808,7 @@ static int rtl8366rb_sw_get_vlan_ports(struct switch_dev *dev,
        struct rtl8366_vlan_4k vlan4k;
        int i;
 
-       if (val->port_vlan == 0 || val->port_vlan >= RTL8366RB_NUM_VLANS)
+       if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
                return -EINVAL;
 
        rtl8366rb_get_vlan_4k(smi, val->port_vlan, &vlan4k);
@@ -829,7 +837,7 @@ static int rtl8366rb_sw_set_vlan_ports(struct switch_dev *dev,
        u32 untag = 0;
        int i;
 
-       if (val->port_vlan == 0 || val->port_vlan >= RTL8366RB_NUM_VLANS)
+       if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
                return -EINVAL;
 
        port = &val->value.ports[0];
@@ -1071,6 +1079,7 @@ static struct rtl8366_smi_ops rtl8366rb_smi_ops = {
        .get_mc_index   = rtl8366rb_get_mc_index,
        .set_mc_index   = rtl8366rb_set_mc_index,
        .get_mib_counter = rtl8366rb_get_mib_counter,
+       .is_vlan_valid  = rtl8366rb_is_vlan_valid,
 };
 
 static int __init rtl8366rb_probe(struct platform_device *pdev)
index 9936b45380b5127dda03ac42db34d6d41f9171d6..4f4a5f3897456625e03dfa0eca37fa9790bc2197 100644 (file)
@@ -591,6 +591,14 @@ static int rtl8366s_vlan_set_4ktable(struct rtl8366_smi *smi, int enable)
                                1, (enable) ? 1 : 0);
 }
 
+static int rtl8366s_is_vlan_valid(struct rtl8366_smi *smi, unsigned vlan)
+{
+       if (vlan == 0 || vlan >= RTL8366S_NUM_VLANS)
+               return 0;
+
+       return 1;
+}
+
 static int rtl8366s_sw_reset_mibs(struct switch_dev *dev,
                                  const struct switch_attr *attr,
                                  struct switch_val *val)
@@ -733,7 +741,7 @@ static int rtl8366s_sw_get_vlan_info(struct switch_dev *dev,
        char *buf = smi->buf;
        int err;
 
-       if (val->port_vlan == 0 || val->port_vlan >= RTL8366S_NUM_VLANS)
+       if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
                return -EINVAL;
 
        memset(buf, '\0', sizeof(smi->buf));
@@ -827,7 +835,7 @@ static int rtl8366s_sw_get_vlan_ports(struct switch_dev *dev,
        struct rtl8366_vlan_4k vlan4k;
        int i;
 
-       if (val->port_vlan == 0 || val->port_vlan >= RTL8366S_NUM_VLANS)
+       if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
                return -EINVAL;
 
        rtl8366s_get_vlan_4k(smi, val->port_vlan, &vlan4k);
@@ -856,7 +864,7 @@ static int rtl8366s_sw_set_vlan_ports(struct switch_dev *dev,
        u32 untag = 0;
        int i;
 
-       if (val->port_vlan == 0 || val->port_vlan >= RTL8366S_NUM_VLANS)
+       if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
                return -EINVAL;
 
        port = &val->value.ports[0];
@@ -1098,6 +1106,7 @@ static struct rtl8366_smi_ops rtl8366s_smi_ops = {
        .get_mc_index   = rtl8366s_get_mc_index,
        .set_mc_index   = rtl8366s_set_mc_index,
        .get_mib_counter = rtl8366_get_mib_counter,
+       .is_vlan_valid  = rtl8366s_is_vlan_valid,
 };
 
 static int __init rtl8366s_probe(struct platform_device *pdev)