Skip to content

Commit 394518e

Browse files
wkzdavem330
authored andcommitted
net: dsa: mv88e6xxx: Add "rmon" counter group support
Report the applicable subset of an mv88e6xxx port's counters using ethtool's standardized "rmon" counter group. Reviewed-by: Vladimir Oltean <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Tobias Waldekranz <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ceea48e commit 394518e

File tree

1 file changed

+42
-0
lines changed
  • drivers/net/dsa/mv88e6xxx

1 file changed

+42
-0
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,6 +1369,47 @@ static void mv88e6xxx_get_eth_mac_stats(struct dsa_switch *ds, int port,
13691369
mac_stats->stats.FramesReceivedOK += mac_stats->stats.BroadcastFramesReceivedOK;
13701370
}
13711371

1372+
static void mv88e6xxx_get_rmon_stats(struct dsa_switch *ds, int port,
1373+
struct ethtool_rmon_stats *rmon_stats,
1374+
const struct ethtool_rmon_hist_range **ranges)
1375+
{
1376+
static const struct ethtool_rmon_hist_range rmon_ranges[] = {
1377+
{ 64, 64 },
1378+
{ 65, 127 },
1379+
{ 128, 255 },
1380+
{ 256, 511 },
1381+
{ 512, 1023 },
1382+
{ 1024, 65535 },
1383+
{}
1384+
};
1385+
struct mv88e6xxx_chip *chip = ds->priv;
1386+
int ret;
1387+
1388+
ret = mv88e6xxx_stats_snapshot(chip, port);
1389+
if (ret < 0)
1390+
return;
1391+
1392+
#define MV88E6XXX_RMON_STAT_MAP(_id, _member) \
1393+
mv88e6xxx_stats_get_stat(chip, port, \
1394+
&mv88e6xxx_hw_stats[MV88E6XXX_HW_STAT_ID_ ## _id], \
1395+
&rmon_stats->stats._member)
1396+
1397+
MV88E6XXX_RMON_STAT_MAP(in_undersize, undersize_pkts);
1398+
MV88E6XXX_RMON_STAT_MAP(in_oversize, oversize_pkts);
1399+
MV88E6XXX_RMON_STAT_MAP(in_fragments, fragments);
1400+
MV88E6XXX_RMON_STAT_MAP(in_jabber, jabbers);
1401+
MV88E6XXX_RMON_STAT_MAP(hist_64bytes, hist[0]);
1402+
MV88E6XXX_RMON_STAT_MAP(hist_65_127bytes, hist[1]);
1403+
MV88E6XXX_RMON_STAT_MAP(hist_128_255bytes, hist[2]);
1404+
MV88E6XXX_RMON_STAT_MAP(hist_256_511bytes, hist[3]);
1405+
MV88E6XXX_RMON_STAT_MAP(hist_512_1023bytes, hist[4]);
1406+
MV88E6XXX_RMON_STAT_MAP(hist_1024_max_bytes, hist[5]);
1407+
1408+
#undef MV88E6XXX_RMON_STAT_MAP
1409+
1410+
*ranges = rmon_ranges;
1411+
}
1412+
13721413
static int mv88e6xxx_get_regs_len(struct dsa_switch *ds, int port)
13731414
{
13741415
struct mv88e6xxx_chip *chip = ds->priv;
@@ -6891,6 +6932,7 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
68916932
.get_strings = mv88e6xxx_get_strings,
68926933
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
68936934
.get_eth_mac_stats = mv88e6xxx_get_eth_mac_stats,
6935+
.get_rmon_stats = mv88e6xxx_get_rmon_stats,
68946936
.get_sset_count = mv88e6xxx_get_sset_count,
68956937
.port_max_mtu = mv88e6xxx_get_max_mtu,
68966938
.port_change_mtu = mv88e6xxx_change_mtu,

0 commit comments

Comments
 (0)