Hello! Is there anything wrong with this? Regards, Roman
On 27 October 2010 04:57, Roman Yeryomin <[email protected]> wrote: > ok, here goes the second part: > > rtl8366 generic vlan fid support > 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 <[email protected]> > -- > > Index: target/linux/generic/files/drivers/net/phy/rtl8366_smi.c > =================================================================== > --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c (revision > 23625) > +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c (working copy) > @@ -972,6 +972,52 @@ > } > 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) > Index: target/linux/generic/files/drivers/net/phy/rtl8366_smi.h > =================================================================== > --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h (revision > 23625) > +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h (working copy) > @@ -120,6 +120,12 @@ > int rtl8366_sw_get_vlan_info(struct switch_dev *dev, > const struct switch_attr *attr, > struct switch_val *val); > +int rtl8366_sw_get_vlan_fid(struct switch_dev *dev, > + const struct switch_attr *attr, > + struct switch_val *val); > +int rtl8366_sw_set_vlan_fid(struct switch_dev *dev, > + const struct switch_attr *attr, > + struct switch_val *val); > int rtl8366_sw_get_vlan_ports(struct switch_dev *dev, struct switch_val > *val); > int rtl8366_sw_set_vlan_ports(struct switch_dev *dev, struct switch_val > *val); > int rtl8366_sw_get_vlan_enable(struct switch_dev *dev, > Index: target/linux/generic/files/drivers/net/phy/rtl8366rb.c > =================================================================== > --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c (revision > 23625) > +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c (working copy) > @@ -1,5 +1,5 @@ > /* > - * Platform driver for the Realtek RTL8366S ethernet switch > + * Platform driver for the Realtek RTL8366RB ethernet switch > * > * Copyright (C) 2009-2010 Gabor Juhos <[email protected]> > * Copyright (C) 2010 Antti Seppälä <[email protected]> > @@ -21,7 +21,7 @@ > #include "rtl8366_smi.h" > > #define RTL8366RB_DRIVER_DESC "Realtek RTL8366RB ethernet switch driver" > -#define RTL8366RB_DRIVER_VER "0.2.2" > +#define RTL8366RB_DRIVER_VER "0.2.3" > > #define RTL8366RB_PHY_NO_MAX 4 > #define RTL8366RB_PHY_PAGE_MAX 7 > @@ -182,7 +182,7 @@ > #define RTL8366RB_EB_PREIFG_MASK (1 << RTL8366RB_EB_PREIFG_OFFSET) > > #define RTL8366RB_BDTH_SW_MAX 1048512 > -#define RTL8366RB_BDTH_BASE 64 > +#define RTL8366RB_BDTH_UNIT 64 > #define RTL8366RB_BDTH_REG_DEFAULT 16383 > > /* QOS */ > @@ -825,7 +825,7 @@ > return -EINVAL; > > if (val->value.i > 0 && val->value.i < RTL8366RB_BDTH_SW_MAX) > - val->value.i = (val->value.i - 1) / RTL8366RB_BDTH_BASE; > + val->value.i = (val->value.i - 1) / RTL8366RB_BDTH_UNIT; > else > val->value.i = RTL8366RB_BDTH_REG_DEFAULT; > > @@ -851,7 +851,7 @@ > if (data < RTL8366RB_IB_BDTH_MASK) > data += 1; > > - val->value.i = (int)data * RTL8366RB_BDTH_BASE; > + val->value.i = (int)data * RTL8366RB_BDTH_UNIT; > > return 0; > } > @@ -870,7 +870,7 @@ > (RTL8366RB_QOS_DEFAULT_PREIFG << RTL8366RB_EB_PREIFG_OFFSET)); > > if (val->value.i > 0 && val->value.i < RTL8366RB_BDTH_SW_MAX) > - val->value.i = (val->value.i - 1) / RTL8366RB_BDTH_BASE; > + val->value.i = (val->value.i - 1) / RTL8366RB_BDTH_UNIT; > else > val->value.i = RTL8366RB_BDTH_REG_DEFAULT; > > @@ -894,7 +894,7 @@ > if (data < RTL8366RB_EB_BDTH_MASK) > data += 1; > > - val->value.i = (int)data * RTL8366RB_BDTH_BASE; > + val->value.i = (int)data * RTL8366RB_BDTH_UNIT; > > return 0; > } > @@ -1065,6 +1065,13 @@ > .max = 1, > .set = NULL, > .get = rtl8366_sw_get_vlan_info, > + }, { > + .type = SWITCH_TYPE_INT, > + .name = "fid", > + .description = "Get/Set vlan FID", > + .max = RTL8366RB_FIDMAX, > + .set = rtl8366_sw_set_vlan_fid, > + .get = rtl8366_sw_get_vlan_fid, > }, > }; > _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
