forked from Minki/linux
net: dsa: felix: use ocelot's ndo_get_stats64 method
Move the logic from the ocelot switchdev driver's ocelot_get_stats64() method to the common switch lib and reuse it for the DSA driver. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d50e41bf02
commit
776b71e553
@ -1034,6 +1034,14 @@ static void felix_port_qos_map_init(struct ocelot *ocelot, int port)
|
||||
}
|
||||
}
|
||||
|
||||
static void felix_get_stats64(struct dsa_switch *ds, int port,
|
||||
struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
struct ocelot *ocelot = ds->priv;
|
||||
|
||||
ocelot_port_get_stats64(ocelot, port, stats);
|
||||
}
|
||||
|
||||
static void felix_get_strings(struct dsa_switch *ds, int port,
|
||||
u32 stringset, u8 *data)
|
||||
{
|
||||
@ -1848,6 +1856,7 @@ const struct dsa_switch_ops felix_switch_ops = {
|
||||
.setup = felix_setup,
|
||||
.teardown = felix_teardown,
|
||||
.set_ageing_time = felix_set_ageing_time,
|
||||
.get_stats64 = felix_get_stats64,
|
||||
.get_strings = felix_get_strings,
|
||||
.get_ethtool_stats = felix_get_ethtool_stats,
|
||||
.get_sset_count = felix_get_sset_count,
|
||||
|
@ -732,67 +732,8 @@ static void ocelot_get_stats64(struct net_device *dev,
|
||||
struct ocelot_port_private *priv = netdev_priv(dev);
|
||||
struct ocelot *ocelot = priv->port.ocelot;
|
||||
int port = priv->port.index;
|
||||
u64 *s;
|
||||
|
||||
spin_lock(&ocelot->stats_lock);
|
||||
|
||||
s = &ocelot->stats[port * OCELOT_NUM_STATS];
|
||||
|
||||
/* Get Rx stats */
|
||||
stats->rx_bytes = s[OCELOT_STAT_RX_OCTETS];
|
||||
stats->rx_packets = s[OCELOT_STAT_RX_SHORTS] +
|
||||
s[OCELOT_STAT_RX_FRAGMENTS] +
|
||||
s[OCELOT_STAT_RX_JABBERS] +
|
||||
s[OCELOT_STAT_RX_LONGS] +
|
||||
s[OCELOT_STAT_RX_64] +
|
||||
s[OCELOT_STAT_RX_65_127] +
|
||||
s[OCELOT_STAT_RX_128_255] +
|
||||
s[OCELOT_STAT_RX_256_511] +
|
||||
s[OCELOT_STAT_RX_512_1023] +
|
||||
s[OCELOT_STAT_RX_1024_1526] +
|
||||
s[OCELOT_STAT_RX_1527_MAX];
|
||||
stats->multicast = s[OCELOT_STAT_RX_MULTICAST];
|
||||
stats->rx_missed_errors = s[OCELOT_STAT_DROP_TAIL];
|
||||
stats->rx_dropped = s[OCELOT_STAT_RX_RED_PRIO_0] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_1] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_2] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_3] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_4] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_5] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_6] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_7] +
|
||||
s[OCELOT_STAT_DROP_LOCAL] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_0] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_1] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_2] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_3] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_4] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_5] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_6] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_7] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_0] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_1] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_2] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_3] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_4] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_5] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_6] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_7];
|
||||
|
||||
/* Get Tx stats */
|
||||
stats->tx_bytes = s[OCELOT_STAT_TX_OCTETS];
|
||||
stats->tx_packets = s[OCELOT_STAT_TX_64] +
|
||||
s[OCELOT_STAT_TX_65_127] +
|
||||
s[OCELOT_STAT_TX_128_255] +
|
||||
s[OCELOT_STAT_TX_256_511] +
|
||||
s[OCELOT_STAT_TX_512_1023] +
|
||||
s[OCELOT_STAT_TX_1024_1526] +
|
||||
s[OCELOT_STAT_TX_1527_MAX];
|
||||
stats->tx_dropped = s[OCELOT_STAT_TX_DROPS] +
|
||||
s[OCELOT_STAT_TX_AGED];
|
||||
stats->collisions = s[OCELOT_STAT_TX_COLLISION];
|
||||
|
||||
spin_unlock(&ocelot->stats_lock);
|
||||
return ocelot_port_get_stats64(ocelot, port, stats);
|
||||
}
|
||||
|
||||
static int ocelot_port_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
|
||||
|
@ -148,6 +148,71 @@ int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset)
|
||||
}
|
||||
EXPORT_SYMBOL(ocelot_get_sset_count);
|
||||
|
||||
void ocelot_port_get_stats64(struct ocelot *ocelot, int port,
|
||||
struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
u64 *s = &ocelot->stats[port * OCELOT_NUM_STATS];
|
||||
|
||||
spin_lock(&ocelot->stats_lock);
|
||||
|
||||
/* Get Rx stats */
|
||||
stats->rx_bytes = s[OCELOT_STAT_RX_OCTETS];
|
||||
stats->rx_packets = s[OCELOT_STAT_RX_SHORTS] +
|
||||
s[OCELOT_STAT_RX_FRAGMENTS] +
|
||||
s[OCELOT_STAT_RX_JABBERS] +
|
||||
s[OCELOT_STAT_RX_LONGS] +
|
||||
s[OCELOT_STAT_RX_64] +
|
||||
s[OCELOT_STAT_RX_65_127] +
|
||||
s[OCELOT_STAT_RX_128_255] +
|
||||
s[OCELOT_STAT_RX_256_511] +
|
||||
s[OCELOT_STAT_RX_512_1023] +
|
||||
s[OCELOT_STAT_RX_1024_1526] +
|
||||
s[OCELOT_STAT_RX_1527_MAX];
|
||||
stats->multicast = s[OCELOT_STAT_RX_MULTICAST];
|
||||
stats->rx_missed_errors = s[OCELOT_STAT_DROP_TAIL];
|
||||
stats->rx_dropped = s[OCELOT_STAT_RX_RED_PRIO_0] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_1] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_2] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_3] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_4] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_5] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_6] +
|
||||
s[OCELOT_STAT_RX_RED_PRIO_7] +
|
||||
s[OCELOT_STAT_DROP_LOCAL] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_0] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_1] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_2] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_3] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_4] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_5] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_6] +
|
||||
s[OCELOT_STAT_DROP_YELLOW_PRIO_7] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_0] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_1] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_2] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_3] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_4] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_5] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_6] +
|
||||
s[OCELOT_STAT_DROP_GREEN_PRIO_7];
|
||||
|
||||
/* Get Tx stats */
|
||||
stats->tx_bytes = s[OCELOT_STAT_TX_OCTETS];
|
||||
stats->tx_packets = s[OCELOT_STAT_TX_64] +
|
||||
s[OCELOT_STAT_TX_65_127] +
|
||||
s[OCELOT_STAT_TX_128_255] +
|
||||
s[OCELOT_STAT_TX_256_511] +
|
||||
s[OCELOT_STAT_TX_512_1023] +
|
||||
s[OCELOT_STAT_TX_1024_1526] +
|
||||
s[OCELOT_STAT_TX_1527_MAX];
|
||||
stats->tx_dropped = s[OCELOT_STAT_TX_DROPS] +
|
||||
s[OCELOT_STAT_TX_AGED];
|
||||
stats->collisions = s[OCELOT_STAT_TX_COLLISION];
|
||||
|
||||
spin_unlock(&ocelot->stats_lock);
|
||||
}
|
||||
EXPORT_SYMBOL(ocelot_port_get_stats64);
|
||||
|
||||
static int ocelot_prepare_stats_regions(struct ocelot *ocelot)
|
||||
{
|
||||
struct ocelot_stats_region *region = NULL;
|
||||
|
@ -1043,6 +1043,8 @@ u32 ocelot_port_assigned_dsa_8021q_cpu_mask(struct ocelot *ocelot, int port);
|
||||
void ocelot_get_strings(struct ocelot *ocelot, int port, u32 sset, u8 *data);
|
||||
void ocelot_get_ethtool_stats(struct ocelot *ocelot, int port, u64 *data);
|
||||
int ocelot_get_sset_count(struct ocelot *ocelot, int port, int sset);
|
||||
void ocelot_port_get_stats64(struct ocelot *ocelot, int port,
|
||||
struct rtnl_link_stats64 *stats);
|
||||
int ocelot_get_ts_info(struct ocelot *ocelot, int port,
|
||||
struct ethtool_ts_info *info);
|
||||
void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs);
|
||||
|
Loading…
Reference in New Issue
Block a user