net: dsa: mv88e6xxx: abstract VTU/STU data access

Both VTU and STU operations use the same routine to access their
(common) data registers, with a different offset.

Add VTU and STU specific read and write functions to the data registers
to abstract the required offset.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Vivien Didelot 2016-05-10 15:44:28 -04:00 committed by David S. Miller
parent c3f1010b30
commit 15d7d7d435

View file

@ -1498,6 +1498,18 @@ static int _mv88e6xxx_vtu_stu_data_read(struct mv88e6xxx_priv_state *ps,
return 0;
}
static int mv88e6xxx_vtu_data_read(struct mv88e6xxx_priv_state *ps,
struct mv88e6xxx_vtu_stu_entry *entry)
{
return _mv88e6xxx_vtu_stu_data_read(ps, entry, 0);
}
static int mv88e6xxx_stu_data_read(struct mv88e6xxx_priv_state *ps,
struct mv88e6xxx_vtu_stu_entry *entry)
{
return _mv88e6xxx_vtu_stu_data_read(ps, entry, 2);
}
static int _mv88e6xxx_vtu_stu_data_write(struct mv88e6xxx_priv_state *ps,
struct mv88e6xxx_vtu_stu_entry *entry,
unsigned int nibble_offset)
@ -1523,6 +1535,18 @@ static int _mv88e6xxx_vtu_stu_data_write(struct mv88e6xxx_priv_state *ps,
return 0;
}
static int mv88e6xxx_vtu_data_write(struct mv88e6xxx_priv_state *ps,
struct mv88e6xxx_vtu_stu_entry *entry)
{
return _mv88e6xxx_vtu_stu_data_write(ps, entry, 0);
}
static int mv88e6xxx_stu_data_write(struct mv88e6xxx_priv_state *ps,
struct mv88e6xxx_vtu_stu_entry *entry)
{
return _mv88e6xxx_vtu_stu_data_write(ps, entry, 2);
}
static int _mv88e6xxx_vtu_vid_write(struct mv88e6xxx_priv_state *ps, u16 vid)
{
return _mv88e6xxx_reg_write(ps, REG_GLOBAL, GLOBAL_VTU_VID,
@ -1551,7 +1575,7 @@ static int _mv88e6xxx_vtu_getnext(struct mv88e6xxx_priv_state *ps,
next.valid = !!(ret & GLOBAL_VTU_VID_VALID);
if (next.valid) {
ret = _mv88e6xxx_vtu_stu_data_read(ps, &next, 0);
ret = mv88e6xxx_vtu_data_read(ps, &next);
if (ret < 0)
return ret;
@ -1658,7 +1682,7 @@ static int _mv88e6xxx_vtu_loadpurge(struct mv88e6xxx_priv_state *ps,
goto loadpurge;
/* Write port member tags */
ret = _mv88e6xxx_vtu_stu_data_write(ps, entry, 0);
ret = mv88e6xxx_vtu_data_write(ps, entry);
if (ret < 0)
return ret;
@ -1724,7 +1748,7 @@ static int _mv88e6xxx_stu_getnext(struct mv88e6xxx_priv_state *ps, u8 sid,
next.valid = !!(ret & GLOBAL_VTU_VID_VALID);
if (next.valid) {
ret = _mv88e6xxx_vtu_stu_data_read(ps, &next, 2);
ret = mv88e6xxx_stu_data_read(ps, &next);
if (ret < 0)
return ret;
}
@ -1747,7 +1771,7 @@ static int _mv88e6xxx_stu_loadpurge(struct mv88e6xxx_priv_state *ps,
goto loadpurge;
/* Write port states */
ret = _mv88e6xxx_vtu_stu_data_write(ps, entry, 2);
ret = mv88e6xxx_stu_data_write(ps, entry);
if (ret < 0)
return ret;