mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
net: enetc: expose some standardized ethtool counters
Structure the code in such a way that it can be reused later for the pMAC statistics, by just changing the "mac" argument to 1. Usage: ethtool --include-statistics --show-pause eno2 ethtool -S eno0 --groups eth-mac ethtool -S eno0 --groups eth-ctrl ethtool -S eno0 --groups rmon Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Claudiu Manoil <claudiu.manoil@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e2bd065c3b
commit
38b922c912
1 changed files with 111 additions and 0 deletions
|
@ -301,6 +301,113 @@ static void enetc_get_ethtool_stats(struct net_device *ndev,
|
|||
data[o++] = enetc_port_rd(hw, enetc_port_counters[i].reg);
|
||||
}
|
||||
|
||||
static void enetc_get_pause_stats(struct net_device *ndev,
|
||||
struct ethtool_pause_stats *pause_stats)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
|
||||
pause_stats->tx_pause_frames = enetc_port_rd(hw, ENETC_PM_TXPF(0));
|
||||
pause_stats->rx_pause_frames = enetc_port_rd(hw, ENETC_PM_RXPF(0));
|
||||
}
|
||||
|
||||
static void enetc_mac_stats(struct enetc_hw *hw, int mac,
|
||||
struct ethtool_eth_mac_stats *s)
|
||||
{
|
||||
s->FramesTransmittedOK = enetc_port_rd(hw, ENETC_PM_TFRM(mac));
|
||||
s->SingleCollisionFrames = enetc_port_rd(hw, ENETC_PM_TSCOL(mac));
|
||||
s->MultipleCollisionFrames = enetc_port_rd(hw, ENETC_PM_TMCOL(mac));
|
||||
s->FramesReceivedOK = enetc_port_rd(hw, ENETC_PM_RFRM(mac));
|
||||
s->FrameCheckSequenceErrors = enetc_port_rd(hw, ENETC_PM_RFCS(mac));
|
||||
s->AlignmentErrors = enetc_port_rd(hw, ENETC_PM_RALN(mac));
|
||||
s->OctetsTransmittedOK = enetc_port_rd(hw, ENETC_PM_TEOCT(mac));
|
||||
s->FramesWithDeferredXmissions = enetc_port_rd(hw, ENETC_PM_TDFR(mac));
|
||||
s->LateCollisions = enetc_port_rd(hw, ENETC_PM_TLCOL(mac));
|
||||
s->FramesAbortedDueToXSColls = enetc_port_rd(hw, ENETC_PM_TECOL(mac));
|
||||
s->FramesLostDueToIntMACXmitError = enetc_port_rd(hw, ENETC_PM_TERR(mac));
|
||||
s->CarrierSenseErrors = enetc_port_rd(hw, ENETC_PM_TCRSE(mac));
|
||||
s->OctetsReceivedOK = enetc_port_rd(hw, ENETC_PM_REOCT(mac));
|
||||
s->FramesLostDueToIntMACRcvError = enetc_port_rd(hw, ENETC_PM_RDRNTP(mac));
|
||||
s->MulticastFramesXmittedOK = enetc_port_rd(hw, ENETC_PM_TMCA(mac));
|
||||
s->BroadcastFramesXmittedOK = enetc_port_rd(hw, ENETC_PM_TBCA(mac));
|
||||
s->MulticastFramesReceivedOK = enetc_port_rd(hw, ENETC_PM_RMCA(mac));
|
||||
s->BroadcastFramesReceivedOK = enetc_port_rd(hw, ENETC_PM_RBCA(mac));
|
||||
}
|
||||
|
||||
static void enetc_ctrl_stats(struct enetc_hw *hw, int mac,
|
||||
struct ethtool_eth_ctrl_stats *s)
|
||||
{
|
||||
s->MACControlFramesTransmitted = enetc_port_rd(hw, ENETC_PM_TCNP(mac));
|
||||
s->MACControlFramesReceived = enetc_port_rd(hw, ENETC_PM_RCNP(mac));
|
||||
}
|
||||
|
||||
static const struct ethtool_rmon_hist_range enetc_rmon_ranges[] = {
|
||||
{ 64, 64 },
|
||||
{ 65, 127 },
|
||||
{ 128, 255 },
|
||||
{ 256, 511 },
|
||||
{ 512, 1023 },
|
||||
{ 1024, 1522 },
|
||||
{ 1523, ENETC_MAC_MAXFRM_SIZE },
|
||||
{},
|
||||
};
|
||||
|
||||
static void enetc_rmon_stats(struct enetc_hw *hw, int mac,
|
||||
struct ethtool_rmon_stats *s,
|
||||
const struct ethtool_rmon_hist_range **ranges)
|
||||
{
|
||||
s->undersize_pkts = enetc_port_rd(hw, ENETC_PM_RUND(mac));
|
||||
s->oversize_pkts = enetc_port_rd(hw, ENETC_PM_ROVR(mac));
|
||||
s->fragments = enetc_port_rd(hw, ENETC_PM_RFRG(mac));
|
||||
s->jabbers = enetc_port_rd(hw, ENETC_PM_RJBR(mac));
|
||||
|
||||
s->hist[0] = enetc_port_rd(hw, ENETC_PM_R64(mac));
|
||||
s->hist[1] = enetc_port_rd(hw, ENETC_PM_R127(mac));
|
||||
s->hist[2] = enetc_port_rd(hw, ENETC_PM_R255(mac));
|
||||
s->hist[3] = enetc_port_rd(hw, ENETC_PM_R511(mac));
|
||||
s->hist[4] = enetc_port_rd(hw, ENETC_PM_R1023(mac));
|
||||
s->hist[5] = enetc_port_rd(hw, ENETC_PM_R1522(mac));
|
||||
s->hist[6] = enetc_port_rd(hw, ENETC_PM_R1523X(mac));
|
||||
|
||||
s->hist_tx[0] = enetc_port_rd(hw, ENETC_PM_T64(mac));
|
||||
s->hist_tx[1] = enetc_port_rd(hw, ENETC_PM_T127(mac));
|
||||
s->hist_tx[2] = enetc_port_rd(hw, ENETC_PM_T255(mac));
|
||||
s->hist_tx[3] = enetc_port_rd(hw, ENETC_PM_T511(mac));
|
||||
s->hist_tx[4] = enetc_port_rd(hw, ENETC_PM_T1023(mac));
|
||||
s->hist_tx[5] = enetc_port_rd(hw, ENETC_PM_T1522(mac));
|
||||
s->hist_tx[6] = enetc_port_rd(hw, ENETC_PM_T1523X(mac));
|
||||
|
||||
*ranges = enetc_rmon_ranges;
|
||||
}
|
||||
|
||||
static void enetc_get_eth_mac_stats(struct net_device *ndev,
|
||||
struct ethtool_eth_mac_stats *mac_stats)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
|
||||
enetc_mac_stats(hw, 0, mac_stats);
|
||||
}
|
||||
|
||||
static void enetc_get_eth_ctrl_stats(struct net_device *ndev,
|
||||
struct ethtool_eth_ctrl_stats *ctrl_stats)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
|
||||
enetc_ctrl_stats(hw, 0, ctrl_stats);
|
||||
}
|
||||
|
||||
static void enetc_get_rmon_stats(struct net_device *ndev,
|
||||
struct ethtool_rmon_stats *rmon_stats,
|
||||
const struct ethtool_rmon_hist_range **ranges)
|
||||
{
|
||||
struct enetc_ndev_priv *priv = netdev_priv(ndev);
|
||||
struct enetc_hw *hw = &priv->si->hw;
|
||||
|
||||
enetc_rmon_stats(hw, 0, rmon_stats, ranges);
|
||||
}
|
||||
|
||||
#define ENETC_RSSHASH_L3 (RXH_L2DA | RXH_VLAN | RXH_L3_PROTO | RXH_IP_SRC | \
|
||||
RXH_IP_DST)
|
||||
#define ENETC_RSSHASH_L4 (ENETC_RSSHASH_L3 | RXH_L4_B_0_1 | RXH_L4_B_2_3)
|
||||
|
@ -766,6 +873,10 @@ static const struct ethtool_ops enetc_pf_ethtool_ops = {
|
|||
.get_sset_count = enetc_get_sset_count,
|
||||
.get_strings = enetc_get_strings,
|
||||
.get_ethtool_stats = enetc_get_ethtool_stats,
|
||||
.get_pause_stats = enetc_get_pause_stats,
|
||||
.get_rmon_stats = enetc_get_rmon_stats,
|
||||
.get_eth_ctrl_stats = enetc_get_eth_ctrl_stats,
|
||||
.get_eth_mac_stats = enetc_get_eth_mac_stats,
|
||||
.get_rxnfc = enetc_get_rxnfc,
|
||||
.set_rxnfc = enetc_set_rxnfc,
|
||||
.get_rxfh_key_size = enetc_get_rxfh_key_size,
|
||||
|
|
Loading…
Reference in a new issue