From 8120006c058487889fb829ed240b6ca663a420d4 Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Wed, 24 Nov 2010 10:01:21 +0000 Subject: 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 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24125 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../generic/files/drivers/net/phy/rtl8366_smi.c | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'target/linux/generic/files/drivers/net/phy/rtl8366_smi.c') 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) -- cgit v1.2.3