ar8216: add swconfig attributes for ARL table flushing
Add swconfig attributes for flushing the ARL table globally or per port. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> SVN-Revision: 46382
This commit is contained in:
parent
33b72b8e0f
commit
b04b1ca933
3 changed files with 67 additions and 1 deletions
|
@ -1436,6 +1436,40 @@ ar8xxx_sw_get_arl_table(struct switch_dev *dev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
|
||||||
|
const struct switch_attr *attr,
|
||||||
|
struct switch_val *val)
|
||||||
|
{
|
||||||
|
struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
mutex_lock(&priv->reg_mutex);
|
||||||
|
ret = priv->chip->atu_flush(priv);
|
||||||
|
mutex_unlock(&priv->reg_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
|
||||||
|
const struct switch_attr *attr,
|
||||||
|
struct switch_val *val)
|
||||||
|
{
|
||||||
|
struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
|
||||||
|
int port, ret;
|
||||||
|
|
||||||
|
port = val->port_vlan;
|
||||||
|
if (port >= dev->ports)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&priv->reg_mutex);
|
||||||
|
ret = priv->chip->atu_flush_port(priv, port);
|
||||||
|
mutex_unlock(&priv->reg_mutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct switch_attr ar8xxx_sw_attr_globals[] = {
|
static const struct switch_attr ar8xxx_sw_attr_globals[] = {
|
||||||
{
|
{
|
||||||
.type = SWITCH_TYPE_INT,
|
.type = SWITCH_TYPE_INT,
|
||||||
|
@ -1490,9 +1524,15 @@ static const struct switch_attr ar8xxx_sw_attr_globals[] = {
|
||||||
.set = NULL,
|
.set = NULL,
|
||||||
.get = ar8xxx_sw_get_arl_table,
|
.get = ar8xxx_sw_get_arl_table,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.type = SWITCH_TYPE_NOVAL,
|
||||||
|
.name = "flush_arl_table",
|
||||||
|
.description = "Flush ARL table",
|
||||||
|
.set = ar8xxx_sw_set_flush_arl_table,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct switch_attr ar8xxx_sw_attr_port[2] = {
|
const struct switch_attr ar8xxx_sw_attr_port[] = {
|
||||||
{
|
{
|
||||||
.type = SWITCH_TYPE_NOVAL,
|
.type = SWITCH_TYPE_NOVAL,
|
||||||
.name = "reset_mib",
|
.name = "reset_mib",
|
||||||
|
@ -1506,6 +1546,12 @@ const struct switch_attr ar8xxx_sw_attr_port[2] = {
|
||||||
.set = NULL,
|
.set = NULL,
|
||||||
.get = ar8xxx_sw_get_port_mib,
|
.get = ar8xxx_sw_get_port_mib,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.type = SWITCH_TYPE_NOVAL,
|
||||||
|
.name = "flush_arl_table",
|
||||||
|
.description = "Flush port's ARL table entries",
|
||||||
|
.set = ar8xxx_sw_set_flush_port_arl_table,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
|
const struct switch_attr ar8xxx_sw_attr_vlan[1] = {
|
||||||
|
|
|
@ -543,6 +543,14 @@ ar8xxx_sw_get_arl_table(struct switch_dev *dev,
|
||||||
const struct switch_attr *attr,
|
const struct switch_attr *attr,
|
||||||
struct switch_val *val);
|
struct switch_val *val);
|
||||||
int
|
int
|
||||||
|
ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
|
||||||
|
const struct switch_attr *attr,
|
||||||
|
struct switch_val *val);
|
||||||
|
int
|
||||||
|
ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
|
||||||
|
const struct switch_attr *attr,
|
||||||
|
struct switch_val *val);
|
||||||
|
int
|
||||||
ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val);
|
ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val);
|
||||||
|
|
||||||
static inline struct ar8xxx_priv *
|
static inline struct ar8xxx_priv *
|
||||||
|
|
|
@ -1138,6 +1138,12 @@ static const struct switch_attr ar8327_sw_attr_globals[] = {
|
||||||
.set = NULL,
|
.set = NULL,
|
||||||
.get = ar8xxx_sw_get_arl_table,
|
.get = ar8xxx_sw_get_arl_table,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.type = SWITCH_TYPE_NOVAL,
|
||||||
|
.name = "flush_arl_table",
|
||||||
|
.description = "Flush ARL table",
|
||||||
|
.set = ar8xxx_sw_set_flush_arl_table,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct switch_attr ar8327_sw_attr_port[] = {
|
static const struct switch_attr ar8327_sw_attr_port[] = {
|
||||||
|
@ -1162,6 +1168,12 @@ static const struct switch_attr ar8327_sw_attr_port[] = {
|
||||||
.get = ar8327_sw_get_eee,
|
.get = ar8327_sw_get_eee,
|
||||||
.max = 1,
|
.max = 1,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.type = SWITCH_TYPE_NOVAL,
|
||||||
|
.name = "flush_arl_table",
|
||||||
|
.description = "Flush port's ARL table entries",
|
||||||
|
.set = ar8xxx_sw_set_flush_port_arl_table,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct switch_dev_ops ar8327_sw_ops = {
|
static const struct switch_dev_ops ar8327_sw_ops = {
|
||||||
|
|
Loading…
Reference in a new issue