// SPDX-License-Identifier: GPL-2.0-or-later /* * Copyright (c) 2007 Freescale Semiconductor, Inc. All rights reserved. * * Description: QE UCC Gigabit Ethernet Ethtool API Set * * Author: Li Yang <leoli@freescale.com> * * Limitation: * Can only get/set settings of the first queue. * Need to re-open the interface manually after changing some parameters.
*/
if (ring->rx_pending < UCC_GETH_RX_BD_RING_SIZE_MIN) {
netdev_info(netdev, "RxBD ring size must be no smaller than %d\n",
UCC_GETH_RX_BD_RING_SIZE_MIN); return -EINVAL;
} if (ring->rx_pending % UCC_GETH_RX_BD_RING_SIZE_ALIGNMENT) {
netdev_info(netdev, "RxBD ring size must be multiple of %d\n",
UCC_GETH_RX_BD_RING_SIZE_ALIGNMENT); return -EINVAL;
} if (ring->tx_pending < UCC_GETH_TX_BD_RING_SIZE_MIN) {
netdev_info(netdev, "TxBD ring size must be no smaller than %d\n",
UCC_GETH_TX_BD_RING_SIZE_MIN); return -EINVAL;
}
staticint uec_get_sset_count(struct net_device *netdev, int sset)
{ struct ucc_geth_private *ugeth = netdev_priv(netdev);
u32 stats_mode = ugeth->ug_info->statisticsMode; int len = 0;
switch (sset) { case ETH_SS_STATS: if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE)
len += UEC_HW_STATS_LEN; if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX)
len += UEC_TX_FW_STATS_LEN; if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX)
len += UEC_RX_FW_STATS_LEN;
if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) for (i = 0; i < UEC_HW_STATS_LEN; i++)
ethtool_puts(&buf, hw_stat_gstrings[i]); if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) for (i = 0; i < UEC_TX_FW_STATS_LEN; i++)
ethtool_puts(&buf, tx_fw_stat_gstrings[i]); if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) for (i = 0; i < UEC_RX_FW_STATS_LEN; i++)
ethtool_puts(&buf, rx_fw_stat_gstrings[i]);
}
if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_HARDWARE) { if (ugeth->ug_regs)
base = (u32 __iomem *)&ugeth->ug_regs->tx64; else
base = NULL;
for (i = 0; i < UEC_HW_STATS_LEN; i++)
data[j++] = base ? in_be32(&base[i]) : 0;
} if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_TX) {
base = (u32 __iomem *)ugeth->p_tx_fw_statistics_pram; for (i = 0; i < UEC_TX_FW_STATS_LEN; i++)
data[j++] = base ? in_be32(&base[i]) : 0;
} if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) {
base = (u32 __iomem *)ugeth->p_rx_fw_statistics_pram; for (i = 0; i < UEC_RX_FW_STATS_LEN; i++)
data[j++] = base ? in_be32(&base[i]) : 0;
}
}
/* If the PHY isn't handling the WoL and the MAC is asked to more than * WAKE_MAGIC, error-out
*/ if (!ugeth->phy_wol_en &&
wol->wolopts & ~WAKE_MAGIC) return -EINVAL;
if (wol->wolopts & WAKE_MAGIC &&
!qe_alive_during_sleep()) return -EINVAL;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.