/** * phylink_ethtool_get_eee_err() - read the energy efficient ethernet error * counter * @pl: a pointer to a &struct phylink returned from phylink_create(). * * Read the Energy Efficient Ethernet error counter from the PHY associated * with the phylink instance specified by @pl. * * Returns positive error counter value, or negative error code. */ int phylink_get_eee_err(struct phylink *pl) { int ret = 0; ASSERT_RTNL(); if (pl->phydev) ret = phy_get_eee_err(pl->phydev); return ret; }
int phylink_get_eee_err(struct phylink *pl) { int ret = 0; WARN_ON(!lockdep_rtnl_is_held()); if (pl->phydev) ret = phy_get_eee_err(pl->phydev); return ret; }
static void stmmac_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *dummy, u64 *data) { struct stmmac_priv *priv = netdev_priv(dev); int i, j = 0; /* Update the DMA HW counters for dwmac10/100 */ if (!priv->plat->has_gmac) priv->hw->dma->dma_diagnostic_fr(&dev->stats, (void *) &priv->xstats, priv->ioaddr); else { /* If supported, for new GMAC chips expose the MMC counters */ if (priv->dma_cap.rmon) { dwmac_mmc_read(priv->ioaddr, &priv->mmc); for (i = 0; i < STMMAC_MMC_STATS_LEN; i++) { char *p; p = (char *)priv + stmmac_mmc[i].stat_offset; data[j++] = (stmmac_mmc[i].sizeof_stat == sizeof(u64)) ? (*(u64 *)p) : (*(u32 *)p); } } if (priv->eee_enabled) { int val = phy_get_eee_err(priv->phydev); if (val) priv->xstats.phy_eee_wakeup_error_n = val; } if ((priv->hw->mac->debug) && (priv->synopsys_id >= DWMAC_CORE_3_50)) priv->hw->mac->debug(priv->ioaddr, (void *)&priv->xstats); } for (i = 0; i < STMMAC_STATS_LEN; i++) { char *p = (char *)priv + stmmac_gstrings_stats[i].stat_offset; data[j++] = (stmmac_gstrings_stats[i].sizeof_stat == sizeof(u64)) ? (*(u64 *)p) : (*(u32 *)p); } }
static void sxgbe_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *dummy, u64 *data) { struct sxgbe_priv_data *priv = netdev_priv(dev); int i; char *p; if (priv->eee_enabled) { int val = phy_get_eee_err(priv->phydev); if (val) priv->xstats.eee_wakeup_error_n = val; } for (i = 0; i < SXGBE_STATS_LEN; i++) { p = (char *)priv + sxgbe_gstrings_stats[i].stat_offset; data[i] = (sxgbe_gstrings_stats[i].sizeof_stat == sizeof(u64)) ? (*(u64 *)p) : (*(u32 *)p); } }