summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2010-11-24 10:01:21 +0000
committerGabor Juhos <juhosg@openwrt.org>2010-11-24 10:01:21 +0000
commit90c0618011f99f959f6790ab7af724301cf279af (patch)
tree50b4dd39531805e7533f4b6162122f83c26bcc16 /target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
parent64b16b9f3459abd783d02d31e02a9e47017716f3 (diff)
downloadmaster-31e0f0ae-90c0618011f99f959f6790ab7af724301cf279af.tar.gz
master-31e0f0ae-90c0618011f99f959f6790ab7af724301cf279af.tar.bz2
master-31e0f0ae-90c0618011f99f959f6790ab7af724301cf279af.zip
generic: add rtl8366rb switch vlan fid support
Allows to use fids 0 to 7. Default is 0. Those who will use this don't forget to `set vlan fid` every time after `set vlan ports` if you want non default behavior. Minor changes. Version bump. Signed-off-by: Roman Yeryomin <roman@advem.lv> SVN-Revision: 24125
Diffstat (limited to 'target/linux/generic/files/drivers/net/phy/rtl8366_smi.c')
-rw-r--r--target/linux/generic/files/drivers/net/phy/rtl8366_smi.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
index dc83ba7d42..e60b708d74 100644
--- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
+++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
@@ -972,6 +972,52 @@ int rtl8366_sw_set_vlan_ports(struct switch_dev *dev, struct switch_val *val)
}
EXPORT_SYMBOL_GPL(rtl8366_sw_set_vlan_ports);
+int rtl8366_sw_get_vlan_fid(struct switch_dev *dev,
+ const struct switch_attr *attr,
+ struct switch_val *val)
+{
+ struct rtl8366_vlan_4k vlan4k;
+ struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev);
+ int err;
+
+ if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
+ return -EINVAL;
+
+ err = smi->ops->get_vlan_4k(smi, val->port_vlan, &vlan4k);
+ if (err)
+ return err;
+
+ val->value.i = vlan4k.fid;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(rtl8366_sw_get_vlan_fid);
+
+int rtl8366_sw_set_vlan_fid(struct switch_dev *dev,
+ const struct switch_attr *attr,
+ struct switch_val *val)
+{
+ struct rtl8366_vlan_4k vlan4k;
+ struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev);
+ int err;
+
+ if (!smi->ops->is_vlan_valid(smi, val->port_vlan))
+ return -EINVAL;
+
+ if (val->value.i < 0 || val->value.i > attr->max)
+ return -EINVAL;
+
+ err = smi->ops->get_vlan_4k(smi, val->port_vlan, &vlan4k);
+ if (err)
+ return err;
+
+ return rtl8366_set_vlan(smi, val->port_vlan,
+ vlan4k.member,
+ vlan4k.untag,
+ val->value.i);
+}
+EXPORT_SYMBOL_GPL(rtl8366_sw_set_vlan_fid);
+
int rtl8366_sw_get_vlan_enable(struct switch_dev *dev,
const struct switch_attr *attr,
struct switch_val *val)