Skip to content

Commit

Permalink
net: dsa: mv88e6xxx: Add "rmon" counter group support
Browse files Browse the repository at this point in the history
Report the applicable subset of an mv88e6xxx port's counters using
ethtool's standardized "rmon" counter group.

Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Tobias Waldekranz authored and David S. Miller committed Dec 15, 2023
1 parent ceea48e commit 394518e
Showing 1 changed file with 42 additions and 0 deletions.
42 changes: 42 additions & 0 deletions drivers/net/dsa/mv88e6xxx/chip.c
Original file line number Diff line number Diff line change
Expand Up @@ -1369,6 +1369,47 @@ static void mv88e6xxx_get_eth_mac_stats(struct dsa_switch *ds, int port,
mac_stats->stats.FramesReceivedOK += mac_stats->stats.BroadcastFramesReceivedOK;
}

static void mv88e6xxx_get_rmon_stats(struct dsa_switch *ds, int port,
struct ethtool_rmon_stats *rmon_stats,
const struct ethtool_rmon_hist_range **ranges)
{
static const struct ethtool_rmon_hist_range rmon_ranges[] = {
{ 64, 64 },
{ 65, 127 },
{ 128, 255 },
{ 256, 511 },
{ 512, 1023 },
{ 1024, 65535 },
{}
};
struct mv88e6xxx_chip *chip = ds->priv;
int ret;

ret = mv88e6xxx_stats_snapshot(chip, port);
if (ret < 0)
return;

#define MV88E6XXX_RMON_STAT_MAP(_id, _member) \
mv88e6xxx_stats_get_stat(chip, port, \
&mv88e6xxx_hw_stats[MV88E6XXX_HW_STAT_ID_ ## _id], \
&rmon_stats->stats._member)

MV88E6XXX_RMON_STAT_MAP(in_undersize, undersize_pkts);
MV88E6XXX_RMON_STAT_MAP(in_oversize, oversize_pkts);
MV88E6XXX_RMON_STAT_MAP(in_fragments, fragments);
MV88E6XXX_RMON_STAT_MAP(in_jabber, jabbers);
MV88E6XXX_RMON_STAT_MAP(hist_64bytes, hist[0]);
MV88E6XXX_RMON_STAT_MAP(hist_65_127bytes, hist[1]);
MV88E6XXX_RMON_STAT_MAP(hist_128_255bytes, hist[2]);
MV88E6XXX_RMON_STAT_MAP(hist_256_511bytes, hist[3]);
MV88E6XXX_RMON_STAT_MAP(hist_512_1023bytes, hist[4]);
MV88E6XXX_RMON_STAT_MAP(hist_1024_max_bytes, hist[5]);

#undef MV88E6XXX_RMON_STAT_MAP

*ranges = rmon_ranges;
}

static int mv88e6xxx_get_regs_len(struct dsa_switch *ds, int port)
{
struct mv88e6xxx_chip *chip = ds->priv;
Expand Down Expand Up @@ -6891,6 +6932,7 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
.get_strings = mv88e6xxx_get_strings,
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
.get_eth_mac_stats = mv88e6xxx_get_eth_mac_stats,
.get_rmon_stats = mv88e6xxx_get_rmon_stats,
.get_sset_count = mv88e6xxx_get_sset_count,
.port_max_mtu = mv88e6xxx_get_max_mtu,
.port_change_mtu = mv88e6xxx_change_mtu,
Expand Down

0 comments on commit 394518e

Please sign in to comment.