Changeset 22023


Ignore:
Timestamp:
2010-07-01T20:08:03+02:00 (6 years ago)
Author:
juhosg
Message:

backfire: generic: rtl8366: add VLAN handling functions to rtl8366_smi_ops (backport of r21977)

Location:
branches/backfire/target/linux/generic-2.6/files/drivers/net/phy
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366_smi.h

    r21938 r22023  
    1515 
    1616struct rtl8366_smi_ops; 
     17struct rtl8366_vlan_ops; 
    1718struct mii_bus; 
    1819 
     
    2627 
    2728        struct rtl8366_smi_ops  *ops; 
    28 }; 
    29  
    30 struct rtl8366_smi_ops { 
    31         int     (*detect)(struct rtl8366_smi *smi); 
    32  
    33         int     (*mii_read)(struct mii_bus *bus, int addr, int reg); 
    34         int     (*mii_write)(struct mii_bus *bus, int addr, int reg, u16 val); 
    3529}; 
    3630 
     
    5044}; 
    5145 
     46struct rtl8366_smi_ops { 
     47        int     (*detect)(struct rtl8366_smi *smi); 
     48 
     49        int     (*mii_read)(struct mii_bus *bus, int addr, int reg); 
     50        int     (*mii_write)(struct mii_bus *bus, int addr, int reg, u16 val); 
     51 
     52        int     (*get_vlan_mc)(struct rtl8366_smi *smi, u32 index, 
     53                               struct rtl8366_vlan_mc *vlanmc); 
     54        int     (*set_vlan_mc)(struct rtl8366_smi *smi, u32 index, 
     55                               const struct rtl8366_vlan_mc *vlanmc); 
     56        int     (*get_vlan_4k)(struct rtl8366_smi *smi, u32 vid, 
     57                               struct rtl8366_vlan_4k *vlan4k); 
     58        int     (*set_vlan_4k)(struct rtl8366_smi *smi, 
     59                               const struct rtl8366_vlan_4k *vlan4k); 
     60        int     (*get_mc_index)(struct rtl8366_smi *smi, int port, int *val); 
     61        int     (*set_mc_index)(struct rtl8366_smi *smi, int port, int index); 
     62}; 
     63 
    5264int rtl8366_smi_init(struct rtl8366_smi *smi); 
    5365void rtl8366_smi_cleanup(struct rtl8366_smi *smi); 
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366rb.c

    r22022 r22023  
    680680 
    681681        /* Update the 4K table */ 
    682         err = rtl8366rb_get_vlan_4k(smi, vid, &vlan4k); 
     682        err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); 
    683683        if (err) 
    684684                return err; 
     
    687687        vlan4k.untag = untag; 
    688688        vlan4k.fid = fid; 
    689         err = rtl8366rb_set_vlan_4k(smi, &vlan4k); 
     689        err = smi->ops->set_vlan_4k(smi, &vlan4k); 
    690690        if (err) 
    691691                return err; 
     
    695695                struct rtl8366_vlan_mc vlanmc; 
    696696 
    697                 err = rtl8366rb_get_vlan_mc(smi, i, &vlanmc); 
     697                err = smi->ops->get_vlan_mc(smi, i, &vlanmc); 
    698698                if (err) 
    699699                        return err; 
     
    705705                        vlanmc.fid = fid; 
    706706 
    707                         err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); 
     707                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    708708                        break; 
    709709                } 
     
    719719        int index; 
    720720 
    721         err = rtl8366rb_get_mc_index(smi, port, &index); 
    722         if (err) 
    723                 return err; 
    724  
    725         err = rtl8366rb_get_vlan_mc(smi, index, &vlanmc); 
     721        err = smi->ops->get_mc_index(smi, port, &index); 
     722        if (err) 
     723                return err; 
     724 
     725        err = smi->ops->get_vlan_mc(smi, index, &vlanmc); 
    726726        if (err) 
    727727                return err; 
     
    741741                int index = 0; 
    742742 
    743                 err = rtl8366rb_get_mc_index(smi, i, &index); 
     743                err = smi->ops->get_mc_index(smi, i, &index); 
    744744                if (err) 
    745745                        return err; 
     
    764764        /* Try to find an existing MC entry for this VID */ 
    765765        for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { 
    766                 err = rtl8366rb_get_vlan_mc(smi, i, &vlanmc); 
     766                err = smi->ops->get_vlan_mc(smi, i, &vlanmc); 
    767767                if (err) 
    768768                        return err; 
    769769 
    770770                if (vid == vlanmc.vid) { 
    771                         err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); 
     771                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    772772                        if (err) 
    773773                                return err; 
    774774 
    775                         err = rtl8366rb_set_mc_index(smi, port, i); 
     775                        err = smi->ops->set_mc_index(smi, port, i); 
    776776                        return err; 
    777777                } 
     
    780780        /* We have no MC entry for this VID, try to find an empty one */ 
    781781        for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { 
    782                 err = rtl8366rb_get_vlan_mc(smi, i, &vlanmc); 
     782                err = smi->ops->get_vlan_mc(smi, i, &vlanmc); 
    783783                if (err) 
    784784                        return err; 
     
    786786                if (vlanmc.vid == 0 && vlanmc.member == 0) { 
    787787                        /* Update the entry from the 4K table */ 
    788                         err = rtl8366rb_get_vlan_4k(smi, vid, &vlan4k); 
     788                        err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); 
    789789                        if (err) 
    790790                                return err; 
     
    794794                        vlanmc.untag = vlan4k.untag; 
    795795                        vlanmc.fid = vlan4k.fid; 
    796                         err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); 
     796                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    797797                        if (err) 
    798798                                return err; 
    799799 
    800                         err = rtl8366rb_set_mc_index(smi, port, i); 
     800                        err = smi->ops->set_mc_index(smi, port, i); 
    801801                        return err; 
    802802                } 
     
    813813                if (!used) { 
    814814                        /* Update the entry from the 4K table */ 
    815                         err = rtl8366rb_get_vlan_4k(smi, vid, &vlan4k); 
     815                        err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); 
    816816                        if (err) 
    817817                                return err; 
     
    821821                        vlanmc.untag = vlan4k.untag; 
    822822                        vlanmc.fid = vlan4k.fid; 
    823                         err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); 
     823                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    824824                        if (err) 
    825825                                return err; 
    826826 
    827                         err = rtl8366rb_set_mc_index(smi, port, i); 
     827                        err = smi->ops->set_mc_index(smi, port, i); 
    828828                        return err; 
    829829                } 
     
    863863        vlanmc.fid = 0; 
    864864        for (i = 0; i < RTL8366RB_NUM_VLANS; i++) { 
    865                 err = rtl8366rb_set_vlan_mc(smi, i, &vlanmc); 
     865                err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    866866                if (err) 
    867867                        return err; 
     
    16511651        .mii_read       = rtl8366rb_mii_read, 
    16521652        .mii_write      = rtl8366rb_mii_write, 
     1653 
     1654        .get_vlan_mc    = rtl8366rb_get_vlan_mc, 
     1655        .set_vlan_mc    = rtl8366rb_set_vlan_mc, 
     1656        .get_vlan_4k    = rtl8366rb_get_vlan_4k, 
     1657        .set_vlan_4k    = rtl8366rb_set_vlan_4k, 
     1658        .get_mc_index   = rtl8366rb_get_mc_index, 
     1659        .set_mc_index   = rtl8366rb_set_mc_index, 
    16531660}; 
    16541661 
  • branches/backfire/target/linux/generic-2.6/files/drivers/net/phy/rtl8366s.c

    r22022 r22023  
    670670 
    671671        /* Update the 4K table */ 
    672         err = rtl8366s_get_vlan_4k(smi, vid, &vlan4k); 
     672        err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); 
    673673        if (err) 
    674674                return err; 
     
    677677        vlan4k.untag = untag; 
    678678        vlan4k.fid = fid; 
    679         err = rtl8366s_set_vlan_4k(smi, &vlan4k); 
     679        err = smi->ops->set_vlan_4k(smi, &vlan4k); 
    680680        if (err) 
    681681                return err; 
     
    685685                struct rtl8366_vlan_mc vlanmc; 
    686686 
    687                 err = rtl8366s_get_vlan_mc(smi, i, &vlanmc); 
     687                err = smi->ops->get_vlan_mc(smi, i, &vlanmc); 
    688688                if (err) 
    689689                        return err; 
     
    695695                        vlanmc.fid = fid; 
    696696 
    697                         err = rtl8366s_set_vlan_mc(smi, i, &vlanmc); 
     697                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    698698                        break; 
    699699                } 
     
    709709        int index; 
    710710 
    711         err = rtl8366s_get_mc_index(smi, port, &index); 
    712         if (err) 
    713                 return err; 
    714  
    715         err = rtl8366s_get_vlan_mc(smi, index, &vlanmc); 
     711        err = smi->ops->get_mc_index(smi, port, &index); 
     712        if (err) 
     713                return err; 
     714 
     715        err = smi->ops->get_vlan_mc(smi, index, &vlanmc); 
    716716        if (err) 
    717717                return err; 
     
    731731                int index = 0; 
    732732 
    733                 err = rtl8366s_get_mc_index(smi, i, &index); 
     733                err = smi->ops->get_mc_index(smi, i, &index); 
    734734                if (err) 
    735735                        return err; 
     
    754754        /* Try to find an existing MC entry for this VID */ 
    755755        for (i = 0; i < RTL8366S_NUM_VLANS; i++) { 
    756                 err = rtl8366s_get_vlan_mc(smi, i, &vlanmc); 
     756                err = smi->ops->get_vlan_mc(smi, i, &vlanmc); 
    757757                if (err) 
    758758                        return err; 
    759759 
    760760                if (vid == vlanmc.vid) { 
    761                         err = rtl8366s_set_vlan_mc(smi, i, &vlanmc); 
     761                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    762762                        if (err) 
    763763                                return err; 
    764764 
    765                         err = rtl8366s_set_mc_index(smi, port, i); 
     765                        err = smi->ops->set_mc_index(smi, port, i); 
    766766                        return err; 
    767767                } 
     
    770770        /* We have no MC entry for this VID, try to find an empty one */ 
    771771        for (i = 0; i < RTL8366S_NUM_VLANS; i++) { 
    772                 err = rtl8366s_get_vlan_mc(smi, i, &vlanmc); 
     772                err = smi->ops->get_vlan_mc(smi, i, &vlanmc); 
    773773                if (err) 
    774774                        return err; 
     
    776776                if (vlanmc.vid == 0 && vlanmc.member == 0) { 
    777777                        /* Update the entry from the 4K table */ 
    778                         err = rtl8366s_get_vlan_4k(smi, vid, &vlan4k); 
     778                        err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); 
    779779                        if (err) 
    780780                                return err; 
     
    784784                        vlanmc.untag = vlan4k.untag; 
    785785                        vlanmc.fid = vlan4k.fid; 
    786                         err = rtl8366s_set_vlan_mc(smi, i, &vlanmc); 
     786                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    787787                        if (err) 
    788788                                return err; 
    789789 
    790                         err = rtl8366s_set_mc_index(smi, port, i); 
     790                        err = smi->ops->set_mc_index(smi, port, i); 
    791791                        return err; 
    792792                } 
     
    803803                if (!used) { 
    804804                        /* Update the entry from the 4K table */ 
    805                         err = rtl8366s_get_vlan_4k(smi, vid, &vlan4k); 
     805                        err = smi->ops->get_vlan_4k(smi, vid, &vlan4k); 
    806806                        if (err) 
    807807                                return err; 
     
    811811                        vlanmc.untag = vlan4k.untag; 
    812812                        vlanmc.fid = vlan4k.fid; 
    813                         err = rtl8366s_set_vlan_mc(smi, i, &vlanmc); 
     813                        err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    814814                        if (err) 
    815815                                return err; 
    816816 
    817                         err = rtl8366s_set_mc_index(smi, port, i); 
     817                        err = smi->ops->set_mc_index(smi, port, i); 
    818818                        return err; 
    819819                } 
     
    852852        vlanmc.fid = 0; 
    853853        for (i = 0; i < RTL8366S_NUM_VLANS; i++) { 
    854                 err = rtl8366s_set_vlan_mc(smi, i, &vlanmc); 
     854                err = smi->ops->set_vlan_mc(smi, i, &vlanmc); 
    855855                if (err) 
    856856                        return err; 
     
    16411641        .mii_read       = rtl8366s_mii_read, 
    16421642        .mii_write      = rtl8366s_mii_write, 
     1643 
     1644        .get_vlan_mc    = rtl8366s_get_vlan_mc, 
     1645        .set_vlan_mc    = rtl8366s_set_vlan_mc, 
     1646        .get_vlan_4k    = rtl8366s_get_vlan_4k, 
     1647        .set_vlan_4k    = rtl8366s_set_vlan_4k, 
     1648        .get_mc_index   = rtl8366s_get_mc_index, 
     1649        .set_mc_index   = rtl8366s_set_mc_index, 
    16431650}; 
    16441651 
Note: See TracChangeset for help on using the changeset viewer.