1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-04-21 12:27:27 +03:00

backfire: generic: rtl8366: add common vlan_mc structure (backport of r21914)

git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21933 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg
2010-06-26 19:53:31 +00:00
parent a87dd636e0
commit 25db8048e6
3 changed files with 62 additions and 24 deletions

View File

@@ -457,20 +457,21 @@ static int rtl8366s_set_vlan_4k(struct rtl8366s *rtl,
}
static int rtl8366s_get_vlan_mc(struct rtl8366s *rtl, u32 index,
struct rtl8366s_vlan_mc *vlanmc)
struct rtl8366_vlan_mc *vlanmc)
{
struct rtl8366_smi *smi = &rtl->smi;
struct rtl8366s_vlan_mc vlanmc_priv;
int err;
u32 addr;
u32 data;
u16 *tableaddr;
memset(vlanmc, '\0', sizeof(struct rtl8366s_vlan_mc));
memset(vlanmc, '\0', sizeof(struct rtl8366_vlan_mc));
if (index >= RTL8366_NUM_VLANS)
return -EINVAL;
tableaddr = (u16 *)vlanmc;
tableaddr = (u16 *)&vlanmc_priv;
addr = RTL8366S_VLAN_MEMCONF_BASE + (index << 1);
err = rtl8366_smi_read_reg(smi, addr, &data);
@@ -487,13 +488,20 @@ static int rtl8366s_get_vlan_mc(struct rtl8366s *rtl, u32 index,
*tableaddr = data;
vlanmc->vid = vlanmc_priv.vid;
vlanmc->priority = vlanmc_priv.priority;
vlanmc->untag = vlanmc_priv.untag;
vlanmc->member = vlanmc_priv.member;
vlanmc->fid = vlanmc_priv.fid;
return 0;
}
static int rtl8366s_set_vlan_mc(struct rtl8366s *rtl, u32 index,
const struct rtl8366s_vlan_mc *vlanmc)
const struct rtl8366_vlan_mc *vlanmc)
{
struct rtl8366_smi *smi = &rtl->smi;
struct rtl8366s_vlan_mc vlanmc_priv;
int err;
u32 addr;
u32 data;
@@ -507,9 +515,15 @@ static int rtl8366s_set_vlan_mc(struct rtl8366s *rtl, u32 index,
vlanmc->fid > RTL8366S_FIDMAX)
return -EINVAL;
vlanmc_priv.vid = vlanmc->vid;
vlanmc_priv.priority = vlanmc->priority;
vlanmc_priv.untag = vlanmc->untag;
vlanmc_priv.member = vlanmc->member;
vlanmc_priv.fid = vlanmc->fid;
addr = RTL8366S_VLAN_MEMCONF_BASE + (index << 1);
tableaddr = (u16 *)vlanmc;
tableaddr = (u16 *)&vlanmc_priv;
data = *tableaddr;
err = rtl8366_smi_write_reg(smi, addr, data);
@@ -553,7 +567,7 @@ static int rtl8366s_get_port_vlan_index(struct rtl8366s *rtl, int port,
static int rtl8366s_get_vlan_port_pvid(struct rtl8366s *rtl, int port,
int *val)
{
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
int err;
int index;
@@ -597,7 +611,7 @@ static int rtl8366s_set_port_vlan_index(struct rtl8366s *rtl, int port,
static int rtl8366s_set_vlan_port_pvid(struct rtl8366s *rtl, int port, int val)
{
int i;
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
struct rtl8366s_vlan_4k vlan4k;
if (port >= RTL8366_NUM_PORTS || val >= RTL8366_NUM_VIDS)
@@ -695,7 +709,7 @@ static int rtl8366s_vlan_set_4ktable(struct rtl8366s *rtl, int enable)
static int rtl8366s_reset_vlan(struct rtl8366s *rtl)
{
struct rtl8366s_vlan_4k vlan4k;
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
int err;
int i;
@@ -800,7 +814,7 @@ static ssize_t rtl8366s_read_debugfs_vlan(struct file *file,
"\tports\n");
for (i = 0; i < RTL8366_NUM_VLANS; ++i) {
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
rtl8366s_get_vlan_mc(rtl, i, &vlanmc);
@@ -1119,7 +1133,7 @@ static int rtl8366s_sw_get_vlan_info(struct switch_dev *dev,
{
int i;
u32 len = 0;
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
struct rtl8366s_vlan_4k vlan4k;
struct rtl8366s *rtl = sw_to_rtl8366s(dev);
char *buf = rtl->buf;
@@ -1258,7 +1272,7 @@ static int rtl8366s_sw_get_port_mib(struct switch_dev *dev,
static int rtl8366s_sw_get_vlan_ports(struct switch_dev *dev,
struct switch_val *val)
{
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
struct rtl8366s *rtl = sw_to_rtl8366s(dev);
struct switch_port *port;
int i;
@@ -1286,7 +1300,7 @@ static int rtl8366s_sw_get_vlan_ports(struct switch_dev *dev,
static int rtl8366s_sw_set_vlan_ports(struct switch_dev *dev,
struct switch_val *val)
{
struct rtl8366s_vlan_mc vlanmc;
struct rtl8366_vlan_mc vlanmc;
struct rtl8366s_vlan_4k vlan4k;
struct rtl8366s *rtl = sw_to_rtl8366s(dev);
struct switch_port *port;