From 256d0de5cc40aa524bfb15a203417dc9df8fcafb Mon Sep 17 00:00:00 2001 From: Gabor Juhos Date: Mon, 28 Jun 2010 17:23:37 +0000 Subject: generic: rtl8366: add VLAN handling functions to rtl8366_smi_ops git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21977 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../generic/files/drivers/net/phy/rtl8366rb.c | 43 +++++++++++++--------- 1 file changed, 25 insertions(+), 18 deletions(-) (limited to 'target/linux/generic/files/drivers/net/phy/rtl8366rb.c') diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c index 3edfbc61c9..7997843737 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c @@ -679,14 +679,14 @@ static int rtl8366rb_set_vlan(struct rtl8366_smi *smi, int vid, u32 member, int i; /* Update the 4K table */ - err = rtl8366rb_get_vlan_4k(smi, vid, &vlan4k); + err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); if (err) return err; vlan4k.member = member; vlan4k.untag = untag; vlan4k.fid = fid; - err = rtl8366rb_set_vlan_4k(smi, &vlan4k); + err = smi->ops->set_vlan_4k(smi, &vlan4k); if (err) return err; @@ -694,7 +694,7 @@ static int rtl8366rb_set_vlan(struct rtl8366_smi *smi, int vid, u32 member, for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { struct rtl8366_vlan_mc vlanmc; - err = rtl8366rb_get_vlan_mc(smi, i, &vlanmc); + err = smi->ops->get_vlan_mc(smi, i, &vlanmc); if (err) return err; @@ -704,7 +704,7 @@ static int rtl8366rb_set_vlan(struct rtl8366_smi *smi, int vid, u32 member, vlanmc.untag = untag; vlanmc.fid = fid; - err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); + err = smi->ops->set_vlan_mc(smi, i, &vlanmc); break; } } @@ -718,11 +718,11 @@ static int rtl8366rb_get_pvid(struct rtl8366_smi *smi, int port, int *val) int err; int index; - err = rtl8366rb_get_mc_index(smi, port, &index); + err = smi->ops->get_mc_index(smi, port, &index); if (err) return err; - err = rtl8366rb_get_vlan_mc(smi, index, &vlanmc); + err = smi->ops->get_vlan_mc(smi, index, &vlanmc); if (err) return err; @@ -740,7 +740,7 @@ static int rtl8366rb_mc_is_used(struct rtl8366_smi *smi, int mc_index, for (i = 0; i < RTL8366RB_NUM_PORTS; i++) { int index = 0; - err = rtl8366rb_get_mc_index(smi, i, &index); + err = smi->ops->get_mc_index(smi, i, &index); if (err) return err; @@ -763,29 +763,29 @@ static int rtl8366rb_set_pvid(struct rtl8366_smi *smi, unsigned port, /* Try to find an existing MC entry for this VID */ for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { - err = rtl8366rb_get_vlan_mc(smi, i, &vlanmc); + err = smi->ops->get_vlan_mc(smi, i, &vlanmc); if (err) return err; if (vid == vlanmc.vid) { - err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); + err = smi->ops->set_vlan_mc(smi, i, &vlanmc); if (err) return err; - err = rtl8366rb_set_mc_index(smi, port, i); + err = smi->ops->set_mc_index(smi, port, i); return err; } } /* We have no MC entry for this VID, try to find an empty one */ for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { - err = rtl8366rb_get_vlan_mc(smi, i, &vlanmc); + err = smi->ops->get_vlan_mc(smi, i, &vlanmc); if (err) return err; if (vlanmc.vid == 0 && vlanmc.member == 0) { /* Update the entry from the 4K table */ - err = rtl8366rb_get_vlan_4k(smi, vid, &vlan4k); + err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); if (err) return err; @@ -793,11 +793,11 @@ static int rtl8366rb_set_pvid(struct rtl8366_smi *smi, unsigned port, vlanmc.member = vlan4k.member; vlanmc.untag = vlan4k.untag; vlanmc.fid = vlan4k.fid; - err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); + err = smi->ops->set_vlan_mc(smi, i, &vlanmc); if (err) return err; - err = rtl8366rb_set_mc_index(smi, port, i); + err = smi->ops->set_mc_index(smi, port, i); return err; } } @@ -812,7 +812,7 @@ static int rtl8366rb_set_pvid(struct rtl8366_smi *smi, unsigned port, if (!used) { /* Update the entry from the 4K table */ - err = rtl8366rb_get_vlan_4k(smi, vid, &vlan4k); + err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); if (err) return err; @@ -820,11 +820,11 @@ static int rtl8366rb_set_pvid(struct rtl8366_smi *smi, unsigned port, vlanmc.member = vlan4k.member; vlanmc.untag = vlan4k.untag; vlanmc.fid = vlan4k.fid; - err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); + err = smi->ops->set_vlan_mc(smi, i, &vlanmc); if (err) return err; - err = rtl8366rb_set_mc_index(smi, port, i); + err = smi->ops->set_mc_index(smi, port, i); return err; } } @@ -862,7 +862,7 @@ static int rtl8366rb_reset_vlan(struct rtl8366_smi *smi) vlanmc.untag = 0; vlanmc.fid = 0; for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { - err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); + err = smi->ops->set_vlan_mc(smi, i, &vlanmc); if (err) return err; } @@ -1650,6 +1650,13 @@ static struct rtl8366_smi_ops rtl8366rb_smi_ops = { .detect = rtl8366rb_detect, .mii_read = rtl8366rb_mii_read, .mii_write = rtl8366rb_mii_write, + + .get_vlan_mc = rtl8366rb_get_vlan_mc, + .set_vlan_mc = rtl8366rb_set_vlan_mc, + .get_vlan_4k = rtl8366rb_get_vlan_4k, + .set_vlan_4k = rtl8366rb_set_vlan_4k, + .get_mc_index = rtl8366rb_get_mc_index, + .set_mc_index = rtl8366rb_set_mc_index, }; static int __init rtl8366rb_probe(struct platform_device *pdev) -- cgit v1.2.3