ip17xx: Initialize VLAN state upon reset
Let VLAN state variables be initialized not only when the enable VLAN bit is toggled, but also upon reset. At this point, this should be a no-op, since the driver reads the current hardware state before doing any modifications anyway, but I plan to keep some state locally in the subsequent patches. Signed-off-by: Martin Mares <mj@ucw.cz> Signed-off-by: Patrick Horn <patrick.horn@gmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@21716 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
21c047cd0b
commit
b4a61f51bb
|
@ -738,12 +738,23 @@ static int ip175c_get_enable_vlan(struct switch_dev *dev, const struct switch_at
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ip175c_reset_vlan_config(struct ip175c_state *state)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
state->remove_tag = 0x0000;
|
||||||
|
state->add_tag = 0x0000;
|
||||||
|
for (i = 0; i < MAX_VLANS; i++)
|
||||||
|
state->vlans[i].ports = 0x0000;
|
||||||
|
for (i = 0; i < MAX_PORTS; i++)
|
||||||
|
state->ports[i].pvid = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ip175c_set_enable_vlan(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val)
|
static int ip175c_set_enable_vlan(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val)
|
||||||
{
|
{
|
||||||
struct ip175c_state *state = dev->priv;
|
struct ip175c_state *state = dev->priv;
|
||||||
int err;
|
int err;
|
||||||
int enable;
|
int enable;
|
||||||
int i;
|
|
||||||
|
|
||||||
err = state->regs->get_state(state);
|
err = state->regs->get_state(state);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
|
@ -757,10 +768,7 @@ static int ip175c_set_enable_vlan(struct switch_dev *dev, const struct switch_at
|
||||||
state->vlan_enabled = enable;
|
state->vlan_enabled = enable;
|
||||||
|
|
||||||
// Otherwise, if we are switching state, set fields to a known default.
|
// Otherwise, if we are switching state, set fields to a known default.
|
||||||
state->remove_tag = 0x0000;
|
ip175c_reset_vlan_config(state);
|
||||||
state->add_tag = 0x0000;
|
|
||||||
for (i = 0; i < MAX_VLANS; i++)
|
|
||||||
state->vlans[i].ports = 0x0000;
|
|
||||||
|
|
||||||
return state->regs->set_vlan_mode(state);
|
return state->regs->set_vlan_mode(state);
|
||||||
}
|
}
|
||||||
|
@ -875,6 +883,8 @@ static int ip175c_reset(struct switch_dev *dev)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ip175c_reset_vlan_config(state);
|
||||||
|
|
||||||
return state->regs->reset(state);
|
return state->regs->reset(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue