aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
diff options
context:
space:
mode:
authorIyappan Subramanian <isubramanian@apm.com>2017-05-10 13:45:06 -0700
committerDavid S. Miller <davem@davemloft.net>2017-05-16 11:41:10 -0400
commitca6d550c5dbe66e9e26eb52b7b1713b801f86c4f (patch)
tree07365ce7ea2f450119cf61d8da335a422e53c1f1 /drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
parentdrivers: net: xgene: Extend ethtool statistics (diff)
downloadlinux-dev-ca6d550c5dbe66e9e26eb52b7b1713b801f86c4f.tar.xz
linux-dev-ca6d550c5dbe66e9e26eb52b7b1713b801f86c4f.zip
drivers: net: xgene: Add rx_overrun/tx_underrun statistics
This patch adds rx_overrun and tx_underrun ethtool statistic counters. Signed-off-by: Quan Nguyen <qnguyen@apm.com> Signed-off-by: Iyappan Subramanian <isubramanian@apm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c')
-rw-r--r--drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c b/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
index a7eed3b83912..6b2a4b917c10 100644
--- a/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
@@ -71,6 +71,7 @@ static const struct xgene_gstrings_stats gstrings_extd_stats[] = {
XGENE_EXTD_STAT(rx_fragments_cntr, RFRG, 16),
XGENE_EXTD_STAT(rx_jabber_cntr, RJBR, 16),
XGENE_EXTD_STAT(rx_dropped_pkt_cntr, RDRP, 16),
+ XGENE_EXTD_STAT(rx_overrun_cntr, DUMP, 0),
XGENE_EXTD_STAT(tx_multicast_pkt_cntr, TMCA, 31),
XGENE_EXTD_STAT(tx_broadcast_pkt_cntr, TBCA, 31),
XGENE_EXTD_STAT(tx_pause_ctrl_frame_cntr, TXPF, 16),
@@ -88,11 +89,14 @@ static const struct xgene_gstrings_stats gstrings_extd_stats[] = {
XGENE_EXTD_STAT(tx_ctrl_frame_cntr, TXCF, 12),
XGENE_EXTD_STAT(tx_oversize_frame_cntr, TOVR, 12),
XGENE_EXTD_STAT(tx_undersize_frame_cntr, TUND, 12),
- XGENE_EXTD_STAT(tx_fragments_cntr, TFRG, 12)
+ XGENE_EXTD_STAT(tx_fragments_cntr, TFRG, 12),
+ XGENE_EXTD_STAT(tx_underrun_cntr, DUMP, 0)
};
#define XGENE_STATS_LEN ARRAY_SIZE(gstrings_stats)
#define XGENE_EXTD_STATS_LEN ARRAY_SIZE(gstrings_extd_stats)
+#define RX_OVERRUN_IDX 22
+#define TX_UNDERRUN_IDX 41
static void xgene_get_drvinfo(struct net_device *ndev,
struct ethtool_drvinfo *info)
@@ -211,14 +215,20 @@ static int xgene_get_sset_count(struct net_device *ndev, int sset)
static void xgene_get_extd_stats(struct xgene_enet_pdata *pdata)
{
+ u32 rx_drop, tx_drop;
u32 tmp;
int i;
for (i = 0; i < XGENE_EXTD_STATS_LEN; i++) {
tmp = xgene_enet_rd_stat(pdata, gstrings_extd_stats[i].addr);
- pdata->extd_stats[i] += tmp &
- GENMASK(gstrings_extd_stats[i].mask - 1, 0);
+ if (gstrings_extd_stats[i].mask)
+ pdata->extd_stats[i] += tmp &
+ GENMASK(gstrings_extd_stats[i].mask - 1, 0);
}
+
+ pdata->mac_ops->get_drop_cnt(pdata, &rx_drop, &tx_drop);
+ pdata->extd_stats[RX_OVERRUN_IDX] += rx_drop;
+ pdata->extd_stats[TX_UNDERRUN_IDX] += tx_drop;
}
int xgene_extd_stats_init(struct xgene_enet_pdata *pdata)