diff options
author | Felix Fietkau <nbd@openwrt.org> | 2015-07-15 08:17:42 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2015-07-15 08:17:42 +0000 |
commit | b04b1ca93381886f2d2caae94d91e6e81212a835 (patch) | |
tree | f07a649017988e6845f7f977a354504259dfddc5 /target/linux/generic | |
parent | 33b72b8e0faf7a39faabece584fd6da61cd8f8df (diff) | |
download | upstream-b04b1ca93381886f2d2caae94d91e6e81212a835.tar.gz upstream-b04b1ca93381886f2d2caae94d91e6e81212a835.tar.bz2 upstream-b04b1ca93381886f2d2caae94d91e6e81212a835.zip |
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
Diffstat (limited to 'target/linux/generic')
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 48 | ||||
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.h | 8 | ||||
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8327.c | 12 |
3 files changed, 67 insertions, 1 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 9065915f4b..75db1f120b 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -1436,6 +1436,40 @@ ar8xxx_sw_get_arl_table(struct switch_dev *dev, 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[] = { { .type = SWITCH_TYPE_INT, @@ -1490,9 +1524,15 @@ static const struct switch_attr ar8xxx_sw_attr_globals[] = { .set = NULL, .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, .name = "reset_mib", @@ -1506,6 +1546,12 @@ const struct switch_attr ar8xxx_sw_attr_port[2] = { .set = NULL, .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] = { diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h index 5abbd55cc1..14fe928fe0 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -543,6 +543,14 @@ ar8xxx_sw_get_arl_table(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val); 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); static inline struct ar8xxx_priv * diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c b/target/linux/generic/files/drivers/net/phy/ar8327.c index fd4a2626ed..1802b9ead7 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8327.c +++ b/target/linux/generic/files/drivers/net/phy/ar8327.c @@ -1138,6 +1138,12 @@ static const struct switch_attr ar8327_sw_attr_globals[] = { .set = NULL, .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[] = { @@ -1162,6 +1168,12 @@ static const struct switch_attr ar8327_sw_attr_port[] = { .get = ar8327_sw_get_eee, .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 = { |