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>

SVN-Revision: 21716
lede-17.01
Gabor Juhos 2010-06-08 20:18:30 +00:00
parent 3c213b14ed
commit e04dd645f2
1 changed files with 15 additions and 5 deletions

View File

@ -738,12 +738,23 @@ static int ip175c_get_enable_vlan(struct switch_dev *dev, const struct switch_at
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)
{
struct ip175c_state *state = dev->priv;
int err;
int enable;
int i;
err = state->regs->get_state(state);
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;
// Otherwise, if we are switching state, set fields to a known default.
state->remove_tag = 0x0000;
state->add_tag = 0x0000;
for (i = 0; i < MAX_VLANS; i++)
state->vlans[i].ports = 0x0000;
ip175c_reset_vlan_config(state);
return state->regs->set_vlan_mode(state);
}
@ -875,6 +883,8 @@ static int ip175c_reset(struct switch_dev *dev)
return err;
}
ip175c_reset_vlan_config(state);
return state->regs->reset(state);
}