Commit 64931534 authored by Justin Chen's avatar Justin Chen Committed by David S. Miller

net: bcmasp: Add support for ethtool standard stats

Add support for eth_mac_stats, rmon_stats, and eth_ctrl_stats.
Signed-off-by: default avatarJustin Chen <justin.chen@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 550e6f34
......@@ -250,6 +250,80 @@ static int bcmasp_set_eee(struct net_device *dev, struct ethtool_eee *e)
return phy_ethtool_set_eee(dev->phydev, e);
}
static void bcmasp_get_eth_mac_stats(struct net_device *dev,
struct ethtool_eth_mac_stats *mac_stats)
{
struct bcmasp_intf *intf = netdev_priv(dev);
mac_stats->FramesTransmittedOK = umac_rl(intf, UMC_GTPOK);
mac_stats->SingleCollisionFrames = umac_rl(intf, UMC_GTSCL);
mac_stats->MultipleCollisionFrames = umac_rl(intf, UMC_GTMCL);
mac_stats->FramesReceivedOK = umac_rl(intf, UMC_GRPOK);
mac_stats->FrameCheckSequenceErrors = umac_rl(intf, UMC_GRFCS);
mac_stats->AlignmentErrors = umac_rl(intf, UMC_GRALN);
mac_stats->OctetsTransmittedOK = umac_rl(intf, UMC_GTBYT);
mac_stats->FramesWithDeferredXmissions = umac_rl(intf, UMC_GTDRF);
mac_stats->LateCollisions = umac_rl(intf, UMC_GTLCL);
mac_stats->FramesAbortedDueToXSColls = umac_rl(intf, UMC_GTXCL);
mac_stats->OctetsReceivedOK = umac_rl(intf, UMC_GRBYT);
mac_stats->MulticastFramesXmittedOK = umac_rl(intf, UMC_GTMCA);
mac_stats->BroadcastFramesXmittedOK = umac_rl(intf, UMC_GTBCA);
mac_stats->FramesWithExcessiveDeferral = umac_rl(intf, UMC_GTEDF);
mac_stats->MulticastFramesReceivedOK = umac_rl(intf, UMC_GRMCA);
mac_stats->BroadcastFramesReceivedOK = umac_rl(intf, UMC_GRBCA);
}
static const struct ethtool_rmon_hist_range bcmasp_rmon_ranges[] = {
{ 0, 64},
{ 65, 127},
{ 128, 255},
{ 256, 511},
{ 512, 1023},
{ 1024, 1518},
{ 1519, 1522},
{}
};
static void bcmasp_get_rmon_stats(struct net_device *dev,
struct ethtool_rmon_stats *rmon_stats,
const struct ethtool_rmon_hist_range **ranges)
{
struct bcmasp_intf *intf = netdev_priv(dev);
*ranges = bcmasp_rmon_ranges;
rmon_stats->undersize_pkts = umac_rl(intf, UMC_RRUND);
rmon_stats->oversize_pkts = umac_rl(intf, UMC_GROVR);
rmon_stats->fragments = umac_rl(intf, UMC_RRFRG);
rmon_stats->jabbers = umac_rl(intf, UMC_GRJBR);
rmon_stats->hist[0] = umac_rl(intf, UMC_GR64);
rmon_stats->hist[1] = umac_rl(intf, UMC_GR127);
rmon_stats->hist[2] = umac_rl(intf, UMC_GR255);
rmon_stats->hist[3] = umac_rl(intf, UMC_GR511);
rmon_stats->hist[4] = umac_rl(intf, UMC_GR1023);
rmon_stats->hist[5] = umac_rl(intf, UMC_GR1518);
rmon_stats->hist[6] = umac_rl(intf, UMC_GRMGV);
rmon_stats->hist_tx[0] = umac_rl(intf, UMC_TR64);
rmon_stats->hist_tx[1] = umac_rl(intf, UMC_TR127);
rmon_stats->hist_tx[2] = umac_rl(intf, UMC_TR255);
rmon_stats->hist_tx[3] = umac_rl(intf, UMC_TR511);
rmon_stats->hist_tx[4] = umac_rl(intf, UMC_TR1023);
rmon_stats->hist_tx[5] = umac_rl(intf, UMC_TR1518);
rmon_stats->hist_tx[6] = umac_rl(intf, UMC_TRMGV);
}
static void bcmasp_get_eth_ctrl_stats(struct net_device *dev,
struct ethtool_eth_ctrl_stats *ctrl_stats)
{
struct bcmasp_intf *intf = netdev_priv(dev);
ctrl_stats->MACControlFramesTransmitted = umac_rl(intf, UMC_GTXCF);
ctrl_stats->MACControlFramesReceived = umac_rl(intf, UMC_GRXCF);
ctrl_stats->UnsupportedOpcodesReceived = umac_rl(intf, UMC_GRXUO);
}
const struct ethtool_ops bcmasp_ethtool_ops = {
.get_drvinfo = bcmasp_get_drvinfo,
.get_link = ethtool_op_get_link,
......@@ -263,4 +337,7 @@ const struct ethtool_ops bcmasp_ethtool_ops = {
.set_rxnfc = bcmasp_set_rxnfc,
.set_eee = bcmasp_set_eee,
.get_eee = bcmasp_get_eee,
.get_eth_mac_stats = bcmasp_get_eth_mac_stats,
.get_rmon_stats = bcmasp_get_rmon_stats,
.get_eth_ctrl_stats = bcmasp_get_eth_ctrl_stats,
};
......@@ -45,7 +45,68 @@
#define UMC_EEE_LPI_TIMER 0x68
#define UMC_PAUSE_CNTRL 0x330
#define UMC_TX_FLUSH 0x334
#define UMC_MIB_START 0x400
#define UMC_GR64 0x400
#define UMC_GR127 0x404
#define UMC_GR255 0x408
#define UMC_GR511 0x40c
#define UMC_GR1023 0x410
#define UMC_GR1518 0x414
#define UMC_GRMGV 0x418
#define UMC_GR2047 0x41c
#define UMC_GR4095 0x420
#define UMC_GR9216 0x424
#define UMC_GRPKT 0x428
#define UMC_GRBYT 0x42c
#define UMC_GRMCA 0x430
#define UMC_GRBCA 0x434
#define UMC_GRFCS 0x438
#define UMC_GRXCF 0x43c
#define UMC_GRXPF 0x440
#define UMC_GRXUO 0x444
#define UMC_GRALN 0x448
#define UMC_GRFLR 0x44c
#define UMC_GRCDE 0x450
#define UMC_GRFCR 0x454
#define UMC_GROVR 0x458
#define UMC_GRJBR 0x45c
#define UMC_GRMTUE 0x460
#define UMC_GRPOK 0x464
#define UMC_GRUC 0x468
#define UMC_GRPPP 0x46c
#define UMC_GRMCRC 0x470
#define UMC_TR64 0x480
#define UMC_TR127 0x484
#define UMC_TR255 0x488
#define UMC_TR511 0x48c
#define UMC_TR1023 0x490
#define UMC_TR1518 0x494
#define UMC_TRMGV 0x498
#define UMC_TR2047 0x49c
#define UMC_TR4095 0x4a0
#define UMC_TR9216 0x4a4
#define UMC_GTPKT 0x4a8
#define UMC_GTMCA 0x4ac
#define UMC_GTBCA 0x4b0
#define UMC_GTXPF 0x4b4
#define UMC_GTXCF 0x4b8
#define UMC_GTFCS 0x4bc
#define UMC_GTOVR 0x4c0
#define UMC_GTDRF 0x4c4
#define UMC_GTEDF 0x4c8
#define UMC_GTSCL 0x4cc
#define UMC_GTMCL 0x4d0
#define UMC_GTLCL 0x4d4
#define UMC_GTXCL 0x4d8
#define UMC_GTFRG 0x4dc
#define UMC_GTNCL 0x4e0
#define UMC_GTJBR 0x4e4
#define UMC_GTBYT 0x4e8
#define UMC_GTPOK 0x4ec
#define UMC_GTUC 0x4f0
#define UMC_RRPKT 0x500
#define UMC_RRUND 0x504
#define UMC_RRFRG 0x508
#define UMC_RRBYT 0x50c
#define UMC_MIB_CNTRL 0x580
#define UMC_MIB_CNTRL_RX_CNT_RST BIT(0)
#define UMC_MIB_CNTRL_RUNT_CNT_RST BIT(1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment