Skip to content

Commit a4c93ae

Browse files
lunndavem330
authored andcommitted
net: dsa: mv88e6xxx: Move mv88e6xxx_port_db_load_purge()
This function is going to be needed by a soon to be added new function. Move it earlier so we can avoid a forward declaration. No functional changes. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 743fcc2 commit a4c93ae

File tree

1 file changed

+44
-44
lines changed
  • drivers/net/dsa/mv88e6xxx

1 file changed

+44
-44
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1208,6 +1208,50 @@ mv88e6xxx_port_vlan_prepare(struct dsa_switch *ds, int port,
12081208
return 0;
12091209
}
12101210

1211+
static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
1212+
const unsigned char *addr, u16 vid,
1213+
u8 state)
1214+
{
1215+
struct mv88e6xxx_vtu_entry vlan;
1216+
struct mv88e6xxx_atu_entry entry;
1217+
int err;
1218+
1219+
/* Null VLAN ID corresponds to the port private database */
1220+
if (vid == 0)
1221+
err = mv88e6xxx_port_get_fid(chip, port, &vlan.fid);
1222+
else
1223+
err = mv88e6xxx_vtu_get(chip, vid, &vlan, false);
1224+
if (err)
1225+
return err;
1226+
1227+
entry.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1228+
ether_addr_copy(entry.mac, addr);
1229+
eth_addr_dec(entry.mac);
1230+
1231+
err = mv88e6xxx_g1_atu_getnext(chip, vlan.fid, &entry);
1232+
if (err)
1233+
return err;
1234+
1235+
/* Initialize a fresh ATU entry if it isn't found */
1236+
if (entry.state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED ||
1237+
!ether_addr_equal(entry.mac, addr)) {
1238+
memset(&entry, 0, sizeof(entry));
1239+
ether_addr_copy(entry.mac, addr);
1240+
}
1241+
1242+
/* Purge the ATU entry only if no port is using it anymore */
1243+
if (state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED) {
1244+
entry.portvec &= ~BIT(port);
1245+
if (!entry.portvec)
1246+
entry.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1247+
} else {
1248+
entry.portvec |= BIT(port);
1249+
entry.state = state;
1250+
}
1251+
1252+
return mv88e6xxx_g1_atu_loadpurge(chip, vlan.fid, &entry);
1253+
}
1254+
12111255
static int _mv88e6xxx_port_vlan_add(struct mv88e6xxx_chip *chip, int port,
12121256
u16 vid, u8 member)
12131257
{
@@ -1324,50 +1368,6 @@ static int mv88e6xxx_port_vlan_del(struct dsa_switch *ds, int port,
13241368
return err;
13251369
}
13261370

1327-
static int mv88e6xxx_port_db_load_purge(struct mv88e6xxx_chip *chip, int port,
1328-
const unsigned char *addr, u16 vid,
1329-
u8 state)
1330-
{
1331-
struct mv88e6xxx_vtu_entry vlan;
1332-
struct mv88e6xxx_atu_entry entry;
1333-
int err;
1334-
1335-
/* Null VLAN ID corresponds to the port private database */
1336-
if (vid == 0)
1337-
err = mv88e6xxx_port_get_fid(chip, port, &vlan.fid);
1338-
else
1339-
err = mv88e6xxx_vtu_get(chip, vid, &vlan, false);
1340-
if (err)
1341-
return err;
1342-
1343-
entry.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1344-
ether_addr_copy(entry.mac, addr);
1345-
eth_addr_dec(entry.mac);
1346-
1347-
err = mv88e6xxx_g1_atu_getnext(chip, vlan.fid, &entry);
1348-
if (err)
1349-
return err;
1350-
1351-
/* Initialize a fresh ATU entry if it isn't found */
1352-
if (entry.state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED ||
1353-
!ether_addr_equal(entry.mac, addr)) {
1354-
memset(&entry, 0, sizeof(entry));
1355-
ether_addr_copy(entry.mac, addr);
1356-
}
1357-
1358-
/* Purge the ATU entry only if no port is using it anymore */
1359-
if (state == MV88E6XXX_G1_ATU_DATA_STATE_UNUSED) {
1360-
entry.portvec &= ~BIT(port);
1361-
if (!entry.portvec)
1362-
entry.state = MV88E6XXX_G1_ATU_DATA_STATE_UNUSED;
1363-
} else {
1364-
entry.portvec |= BIT(port);
1365-
entry.state = state;
1366-
}
1367-
1368-
return mv88e6xxx_g1_atu_loadpurge(chip, vlan.fid, &entry);
1369-
}
1370-
13711371
static int mv88e6xxx_port_fdb_add(struct dsa_switch *ds, int port,
13721372
const unsigned char *addr, u16 vid)
13731373
{

0 commit comments

Comments
 (0)