forked from Ivasoft/openwrt
generic ar8xxx: increase VLAN table for AR83x7
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@david-bauer.net>
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user