[OpenWrt-Devel] [PATCH] generic ar8xxx: increase VLAN table for AR83x7
Martin Weinelt
martin at darmstadt.freifunk.net
Sun Nov 24 18:29:16 EST 2019
Tested-by: Martin Weinelt <martin at linuxlounge.net>
On 11/24/19 11:21 PM, David Bauer wrote:
> The Atheros AR8327 and AR8337 have (according to their datasheet) a
> VLAN table with a maximum of 4096 entries.
>
> Currently, there's a hard limit of 128 VLANs, which is the same as
> for most other Atheros switches. Increase this limit only for the
> AR83x7 series and modify some shared functions to allow them to work
> with a variable max VLAN count.
>
> Signed-off-by: David Bauer <mail at david-bauer.net>
> ---
> target/linux/generic/files/drivers/net/phy/ar8216.c | 10 +++++-----
> target/linux/generic/files/drivers/net/phy/ar8216.h | 8 ++++++--
> target/linux/generic/files/drivers/net/phy/ar8327.c | 4 ++--
> 3 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c
> index 683241cf1c..5ace4e0b15 100644
> --- a/target/linux/generic/files/drivers/net/phy/ar8216.c
> +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
> @@ -1204,7 +1204,7 @@ ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr,
> {
> struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev);
>
> - if (val->port_vlan >= AR8X16_MAX_VLANS)
> + if (val->port_vlan >= dev->vlans)
> return -EINVAL;
>
> priv->vlan_id[val->port_vlan] = val->value.i;
> @@ -1237,7 +1237,7 @@ ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val)
> u8 ports;
> int i;
>
> - if (val->port_vlan >= AR8X16_MAX_VLANS)
> + if (val->port_vlan >= dev->vlans)
> return -EINVAL;
>
> ports = priv->vlan_table[val->port_vlan];
> @@ -1277,7 +1277,7 @@ ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val)
>
> /* make sure that an untagged port does not
> * appear in other vlans */
> - for (j = 0; j < AR8X16_MAX_VLANS; j++) {
> + for (j = 0; j < dev->vlans; j++) {
> if (j == val->port_vlan)
> continue;
> priv->vlan_table[j] &= ~(1 << p->id);
> @@ -1356,7 +1356,7 @@ ar8xxx_sw_hw_apply(struct switch_dev *dev)
> if (!priv->init) {
> /* calculate the port destination masks and load vlans
> * into the vlan translation unit */
> - for (j = 0; j < AR8X16_MAX_VLANS; j++) {
> + for (j = 0; j < dev->vlans; j++) {
> u8 vp = priv->vlan_table[j];
>
> if (!vp)
> @@ -1409,7 +1409,7 @@ ar8xxx_sw_reset_switch(struct switch_dev *dev)
> memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
> offsetof(struct ar8xxx_priv, vlan));
>
> - for (i = 0; i < AR8X16_MAX_VLANS; i++)
> + for (i = 0; i < dev->vlans; i++)
> priv->vlan_id[i] = i;
>
> /* Configure all ports */
> diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h
> index 93170d5863..bf34fdb775 100644
> --- a/target/linux/generic/files/drivers/net/phy/ar8216.h
> +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h
> @@ -31,6 +31,9 @@
>
> /* size of the vlan table */
> #define AR8X16_MAX_VLANS 128
> +#define AR83X7_MAX_VLANS 4096
> +#define AR8XXX_MAX_VLANS AR83X7_MAX_VLANS
> +
> #define AR8X16_PROBE_RETRIES 10
> #define AR8X16_MAX_PORTS 8
>
> @@ -504,8 +507,9 @@ struct ar8xxx_priv {
>
> /* all fields below are cleared on reset */
> bool vlan;
> - u16 vlan_id[AR8X16_MAX_VLANS];
> - u8 vlan_table[AR8X16_MAX_VLANS];
> +
> + u16 vlan_id[AR8XXX_MAX_VLANS];
> + u8 vlan_table[AR8XXX_MAX_VLANS];
> u8 vlan_tagged;
> u16 pvid[AR8X16_MAX_PORTS];
> int arl_age_time;
> diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c b/target/linux/generic/files/drivers/net/phy/ar8327.c
> index 1878585b0c..4cbfa4d234 100644
> --- a/target/linux/generic/files/drivers/net/phy/ar8327.c
> +++ b/target/linux/generic/files/drivers/net/phy/ar8327.c
> @@ -1481,7 +1481,7 @@ const struct ar8xxx_chip ar8327_chip = {
>
> .name = "Atheros AR8327",
> .ports = AR8327_NUM_PORTS,
> - .vlans = AR8X16_MAX_VLANS,
> + .vlans = AR83X7_MAX_VLANS,
> .swops = &ar8327_sw_ops,
>
> .reg_port_stats_start = 0x1000,
> @@ -1518,7 +1518,7 @@ const struct ar8xxx_chip ar8337_chip = {
>
> .name = "Atheros AR8337",
> .ports = AR8327_NUM_PORTS,
> - .vlans = AR8X16_MAX_VLANS,
> + .vlans = AR83X7_MAX_VLANS,
> .swops = &ar8327_sw_ops,
>
> .reg_port_stats_start = 0x1000,
>
--
Und im übrigen bin ich der Meinung, dass Geräte mit weniger als 8MB
Flash und 64MB RAM zerstört werden müssen.
-- frei nach Marcus Porcious Cato der Ältere
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list