mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 13:48:06 +00:00
kernel: ar8216: move port vlan setup into a separate function
SVN-Revision: 28992
This commit is contained in:
parent
b49aed1520
commit
ecb3690d0a
@ -486,6 +486,33 @@ ar8216_vtu_op(struct ar8216_priv *priv, u32 op, u32 val)
|
|||||||
priv->write(priv, AR8216_REG_VTU, op);
|
priv->write(priv, AR8216_REG_VTU, op);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ar8216_setup_port(struct ar8216_priv *priv, int port, u32 egress, u32 ingress,
|
||||||
|
u32 members, u32 pvid)
|
||||||
|
{
|
||||||
|
u32 header;
|
||||||
|
|
||||||
|
if (priv->vlan && port == AR8216_PORT_CPU && priv->chip == AR8216)
|
||||||
|
header = AR8216_PORT_CTRL_HEADER;
|
||||||
|
else
|
||||||
|
header = 0;
|
||||||
|
|
||||||
|
ar8216_rmw(priv, AR8216_REG_PORT_CTRL(port),
|
||||||
|
AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
|
||||||
|
AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
|
||||||
|
AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
|
||||||
|
AR8216_PORT_CTRL_LEARN | header |
|
||||||
|
(egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
|
||||||
|
(AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
|
||||||
|
|
||||||
|
ar8216_rmw(priv, AR8216_REG_PORT_VLAN(port),
|
||||||
|
AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
|
||||||
|
AR8216_PORT_VLAN_DEFAULT_ID,
|
||||||
|
(members << AR8216_PORT_VLAN_DEST_PORTS_S) |
|
||||||
|
(ingress << AR8216_PORT_VLAN_MODE_S) |
|
||||||
|
(pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ar8216_hw_apply(struct switch_dev *dev)
|
ar8216_hw_apply(struct switch_dev *dev)
|
||||||
{
|
{
|
||||||
@ -552,22 +579,7 @@ ar8216_hw_apply(struct switch_dev *dev)
|
|||||||
ingress = AR8216_IN_PORT_ONLY;
|
ingress = AR8216_IN_PORT_ONLY;
|
||||||
}
|
}
|
||||||
|
|
||||||
ar8216_rmw(priv, AR8216_REG_PORT_CTRL(i),
|
ar8216_setup_port(priv, i, egress, ingress, portmask[i], pvid);
|
||||||
AR8216_PORT_CTRL_LEARN | AR8216_PORT_CTRL_VLAN_MODE |
|
|
||||||
AR8216_PORT_CTRL_SINGLE_VLAN | AR8216_PORT_CTRL_STATE |
|
|
||||||
AR8216_PORT_CTRL_HEADER | AR8216_PORT_CTRL_LEARN_LOCK,
|
|
||||||
AR8216_PORT_CTRL_LEARN |
|
|
||||||
(priv->vlan && i == AR8216_PORT_CPU && (priv->chip == AR8216) ?
|
|
||||||
AR8216_PORT_CTRL_HEADER : 0) |
|
|
||||||
(egress << AR8216_PORT_CTRL_VLAN_MODE_S) |
|
|
||||||
(AR8216_PORT_STATE_FORWARD << AR8216_PORT_CTRL_STATE_S));
|
|
||||||
|
|
||||||
ar8216_rmw(priv, AR8216_REG_PORT_VLAN(i),
|
|
||||||
AR8216_PORT_VLAN_DEST_PORTS | AR8216_PORT_VLAN_MODE |
|
|
||||||
AR8216_PORT_VLAN_DEFAULT_ID,
|
|
||||||
(portmask[i] << AR8216_PORT_VLAN_DEST_PORTS_S) |
|
|
||||||
(ingress << AR8216_PORT_VLAN_MODE_S) |
|
|
||||||
(pvid << AR8216_PORT_VLAN_DEFAULT_ID_S));
|
|
||||||
}
|
}
|
||||||
mutex_unlock(&priv->reg_mutex);
|
mutex_unlock(&priv->reg_mutex);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user