net: dsa: ksz9477: move get_stats64 to ksz_common.c
authorArun Ramadoss <arun.ramadoss@microchip.com>
Tue, 26 Apr 2022 09:10:48 +0000 (14:40 +0530)
committerJakub Kicinski <kuba@kernel.org>
Wed, 27 Apr 2022 22:38:01 +0000 (15:38 -0700)
The mib counters for the ksz9477 is same for the ksz9477 switch and
LAN937x switch. Hence moving it to ksz_common.c file in order to have it
generic function. The DSA hook get_stats64 now can call ksz_get_stats64.

Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Link: https://lore.kernel.org/r/20220426091048.9311-1-arun.ramadoss@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz9477.c
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/microchip/ksz_common.h

index 4f617fee9a4ef9c36b16d01b3ecc04c10224779a..48c90e4cda304c7d117ea14b5df26e283933051e 100644 (file)
@@ -65,100 +65,6 @@ static const struct {
        { 0x83, "tx_discards" },
 };
 
-struct ksz9477_stats_raw {
-       u64 rx_hi;
-       u64 rx_undersize;
-       u64 rx_fragments;
-       u64 rx_oversize;
-       u64 rx_jabbers;
-       u64 rx_symbol_err;
-       u64 rx_crc_err;
-       u64 rx_align_err;
-       u64 rx_mac_ctrl;
-       u64 rx_pause;
-       u64 rx_bcast;
-       u64 rx_mcast;
-       u64 rx_ucast;
-       u64 rx_64_or_less;
-       u64 rx_65_127;
-       u64 rx_128_255;
-       u64 rx_256_511;
-       u64 rx_512_1023;
-       u64 rx_1024_1522;
-       u64 rx_1523_2000;
-       u64 rx_2001;
-       u64 tx_hi;
-       u64 tx_late_col;
-       u64 tx_pause;
-       u64 tx_bcast;
-       u64 tx_mcast;
-       u64 tx_ucast;
-       u64 tx_deferred;
-       u64 tx_total_col;
-       u64 tx_exc_col;
-       u64 tx_single_col;
-       u64 tx_mult_col;
-       u64 rx_total;
-       u64 tx_total;
-       u64 rx_discards;
-       u64 tx_discards;
-};
-
-static void ksz9477_r_mib_stats64(struct ksz_device *dev, int port)
-{
-       struct rtnl_link_stats64 *stats;
-       struct ksz9477_stats_raw *raw;
-       struct ksz_port_mib *mib;
-
-       mib = &dev->ports[port].mib;
-       stats = &mib->stats64;
-       raw = (struct ksz9477_stats_raw *)mib->counters;
-
-       spin_lock(&mib->stats64_lock);
-
-       stats->rx_packets = raw->rx_bcast + raw->rx_mcast + raw->rx_ucast;
-       stats->tx_packets = raw->tx_bcast + raw->tx_mcast + raw->tx_ucast;
-
-       /* HW counters are counting bytes + FCS which is not acceptable
-        * for rtnl_link_stats64 interface
-        */
-       stats->rx_bytes = raw->rx_total - stats->rx_packets * ETH_FCS_LEN;
-       stats->tx_bytes = raw->tx_total - stats->tx_packets * ETH_FCS_LEN;
-
-       stats->rx_length_errors = raw->rx_undersize + raw->rx_fragments +
-               raw->rx_oversize;
-
-       stats->rx_crc_errors = raw->rx_crc_err;
-       stats->rx_frame_errors = raw->rx_align_err;
-       stats->rx_dropped = raw->rx_discards;
-       stats->rx_errors = stats->rx_length_errors + stats->rx_crc_errors +
-               stats->rx_frame_errors  + stats->rx_dropped;
-
-       stats->tx_window_errors = raw->tx_late_col;
-       stats->tx_fifo_errors = raw->tx_discards;
-       stats->tx_aborted_errors = raw->tx_exc_col;
-       stats->tx_errors = stats->tx_window_errors + stats->tx_fifo_errors +
-               stats->tx_aborted_errors;
-
-       stats->multicast = raw->rx_mcast;
-       stats->collisions = raw->tx_total_col;
-
-       spin_unlock(&mib->stats64_lock);
-}
-
-static void ksz9477_get_stats64(struct dsa_switch *ds, int port,
-                              struct rtnl_link_stats64 *s)
-{
-       struct ksz_device *dev = ds->priv;
-       struct ksz_port_mib *mib;
-
-       mib = &dev->ports[port].mib;
-
-       spin_lock(&mib->stats64_lock);
-       memcpy(s, &mib->stats64, sizeof(*s));
-       spin_unlock(&mib->stats64_lock);
-}
-
 static void ksz_cfg(struct ksz_device *dev, u32 addr, u8 bits, bool set)
 {
        regmap_update_bits(dev->regmap[0], addr, bits, set ? bits : 0);
@@ -1462,7 +1368,7 @@ static const struct dsa_switch_ops ksz9477_switch_ops = {
        .port_mdb_del           = ksz9477_port_mdb_del,
        .port_mirror_add        = ksz9477_port_mirror_add,
        .port_mirror_del        = ksz9477_port_mirror_del,
-       .get_stats64            = ksz9477_get_stats64,
+       .get_stats64            = ksz_get_stats64,
        .port_change_mtu        = ksz9477_change_mtu,
        .port_max_mtu           = ksz9477_max_mtu,
 };
@@ -1653,7 +1559,7 @@ static const struct ksz_dev_ops ksz9477_dev_ops = {
        .port_setup = ksz9477_port_setup,
        .r_mib_cnt = ksz9477_r_mib_cnt,
        .r_mib_pkt = ksz9477_r_mib_pkt,
-       .r_mib_stat64 = ksz9477_r_mib_stats64,
+       .r_mib_stat64 = ksz_r_mib_stats64,
        .freeze_mib = ksz9477_freeze_mib,
        .port_init_cnt = ksz9477_port_init_cnt,
        .shutdown = ksz9477_reset_switch,
index 9b9f570ebb0b68b4df81b2d59f5d5ae414a013b6..10f127b09e58cc0d608cc2a286a6e5aa83fd2ebc 100644 (file)
 
 #include "ksz_common.h"
 
+struct ksz_stats_raw {
+       u64 rx_hi;
+       u64 rx_undersize;
+       u64 rx_fragments;
+       u64 rx_oversize;
+       u64 rx_jabbers;
+       u64 rx_symbol_err;
+       u64 rx_crc_err;
+       u64 rx_align_err;
+       u64 rx_mac_ctrl;
+       u64 rx_pause;
+       u64 rx_bcast;
+       u64 rx_mcast;
+       u64 rx_ucast;
+       u64 rx_64_or_less;
+       u64 rx_65_127;
+       u64 rx_128_255;
+       u64 rx_256_511;
+       u64 rx_512_1023;
+       u64 rx_1024_1522;
+       u64 rx_1523_2000;
+       u64 rx_2001;
+       u64 tx_hi;
+       u64 tx_late_col;
+       u64 tx_pause;
+       u64 tx_bcast;
+       u64 tx_mcast;
+       u64 tx_ucast;
+       u64 tx_deferred;
+       u64 tx_total_col;
+       u64 tx_exc_col;
+       u64 tx_single_col;
+       u64 tx_mult_col;
+       u64 rx_total;
+       u64 tx_total;
+       u64 rx_discards;
+       u64 tx_discards;
+};
+
+void ksz_r_mib_stats64(struct ksz_device *dev, int port)
+{
+       struct rtnl_link_stats64 *stats;
+       struct ksz_stats_raw *raw;
+       struct ksz_port_mib *mib;
+
+       mib = &dev->ports[port].mib;
+       stats = &mib->stats64;
+       raw = (struct ksz_stats_raw *)mib->counters;
+
+       spin_lock(&mib->stats64_lock);
+
+       stats->rx_packets = raw->rx_bcast + raw->rx_mcast + raw->rx_ucast;
+       stats->tx_packets = raw->tx_bcast + raw->tx_mcast + raw->tx_ucast;
+
+       /* HW counters are counting bytes + FCS which is not acceptable
+        * for rtnl_link_stats64 interface
+        */
+       stats->rx_bytes = raw->rx_total - stats->rx_packets * ETH_FCS_LEN;
+       stats->tx_bytes = raw->tx_total - stats->tx_packets * ETH_FCS_LEN;
+
+       stats->rx_length_errors = raw->rx_undersize + raw->rx_fragments +
+               raw->rx_oversize;
+
+       stats->rx_crc_errors = raw->rx_crc_err;
+       stats->rx_frame_errors = raw->rx_align_err;
+       stats->rx_dropped = raw->rx_discards;
+       stats->rx_errors = stats->rx_length_errors + stats->rx_crc_errors +
+               stats->rx_frame_errors  + stats->rx_dropped;
+
+       stats->tx_window_errors = raw->tx_late_col;
+       stats->tx_fifo_errors = raw->tx_discards;
+       stats->tx_aborted_errors = raw->tx_exc_col;
+       stats->tx_errors = stats->tx_window_errors + stats->tx_fifo_errors +
+               stats->tx_aborted_errors;
+
+       stats->multicast = raw->rx_mcast;
+       stats->collisions = raw->tx_total_col;
+
+       spin_unlock(&mib->stats64_lock);
+}
+EXPORT_SYMBOL_GPL(ksz_r_mib_stats64);
+
+void ksz_get_stats64(struct dsa_switch *ds, int port,
+                    struct rtnl_link_stats64 *s)
+{
+       struct ksz_device *dev = ds->priv;
+       struct ksz_port_mib *mib;
+
+       mib = &dev->ports[port].mib;
+
+       spin_lock(&mib->stats64_lock);
+       memcpy(s, &mib->stats64, sizeof(*s));
+       spin_unlock(&mib->stats64_lock);
+}
+EXPORT_SYMBOL_GPL(ksz_get_stats64);
+
 void ksz_update_port_member(struct ksz_device *dev, int port)
 {
        struct ksz_port *p = &dev->ports[port];
index 4d978832c44801e6d442c2f05208198623dcde44..28cda79b090f6aab71abace2eefeeace07bfdd24 100644 (file)
@@ -151,6 +151,9 @@ int ksz9477_switch_register(struct ksz_device *dev);
 
 void ksz_update_port_member(struct ksz_device *dev, int port);
 void ksz_init_mib_timer(struct ksz_device *dev);
+void ksz_r_mib_stats64(struct ksz_device *dev, int port);
+void ksz_get_stats64(struct dsa_switch *ds, int port,
+                    struct rtnl_link_stats64 *s);
 
 /* Common DSA access functions */