/* Get the coalescing parameters, and put them in the cvals * structure. */ static int gfar_gcoalesce(struct net_device *dev, struct ethtool_coalesce *cvals) { struct gfar_private *priv = netdev_priv(dev); struct gfar_priv_rx_q *rx_queue = NULL; struct gfar_priv_tx_q *tx_queue = NULL; unsigned long rxtime; unsigned long rxcount; unsigned long txtime; unsigned long txcount; if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_COALESCE)) return -EOPNOTSUPP; if (NULL == priv->phydev) return -ENODEV; rx_queue = priv->rx_queue[0]; tx_queue = priv->tx_queue[0]; rxtime = get_ictt_value(rx_queue->rxic); rxcount = get_icft_value(rx_queue->rxic); txtime = get_ictt_value(tx_queue->txic); txcount = get_icft_value(tx_queue->txic); cvals->rx_coalesce_usecs = gfar_ticks2usecs(priv, rxtime); cvals->rx_max_coalesced_frames = rxcount; cvals->tx_coalesce_usecs = gfar_ticks2usecs(priv, txtime); cvals->tx_max_coalesced_frames = txcount; cvals->use_adaptive_rx_coalesce = 0; cvals->use_adaptive_tx_coalesce = 0; cvals->pkt_rate_low = 0; cvals->rx_coalesce_usecs_low = 0; cvals->rx_max_coalesced_frames_low = 0; cvals->tx_coalesce_usecs_low = 0; cvals->tx_max_coalesced_frames_low = 0; /* When the packet rate is below pkt_rate_high but above * pkt_rate_low (both measured in packets per second) the * normal {rx,tx}_* coalescing parameters are used. */ /* When the packet rate is (measured in packets per second) * is above pkt_rate_high, the {rx,tx}_*_high parameters are * used. */ cvals->pkt_rate_high = 0; cvals->rx_coalesce_usecs_high = 0; cvals->rx_max_coalesced_frames_high = 0; cvals->tx_coalesce_usecs_high = 0; cvals->tx_max_coalesced_frames_high = 0; /* How often to do adaptive coalescing packet rate sampling, * measured in seconds. Must not be zero. */ cvals->rate_sample_interval = 0; return 0; }
/* Get the coalescing parameters, and put them in the cvals * structure. */ static int gfar_gcoalesce(struct net_device *dev, struct ethtool_coalesce *cvals) { struct gfar_private *priv = netdev_priv(dev); if (!(priv->einfo->device_flags & FSL_GIANFAR_DEV_HAS_COALESCE)) return -EOPNOTSUPP; cvals->rx_coalesce_usecs = gfar_ticks2usecs(priv, priv->rxtime); cvals->rx_max_coalesced_frames = priv->rxcount; cvals->tx_coalesce_usecs = gfar_ticks2usecs(priv, priv->txtime); cvals->tx_max_coalesced_frames = priv->txcount; cvals->use_adaptive_rx_coalesce = 0; cvals->use_adaptive_tx_coalesce = 0; cvals->pkt_rate_low = 0; cvals->rx_coalesce_usecs_low = 0; cvals->rx_max_coalesced_frames_low = 0; cvals->tx_coalesce_usecs_low = 0; cvals->tx_max_coalesced_frames_low = 0; /* When the packet rate is below pkt_rate_high but above * pkt_rate_low (both measured in packets per second) the * normal {rx,tx}_* coalescing parameters are used. */ /* When the packet rate is (measured in packets per second) * is above pkt_rate_high, the {rx,tx}_*_high parameters are * used. */ cvals->pkt_rate_high = 0; cvals->rx_coalesce_usecs_high = 0; cvals->rx_max_coalesced_frames_high = 0; cvals->tx_coalesce_usecs_high = 0; cvals->tx_max_coalesced_frames_high = 0; /* How often to do adaptive coalescing packet rate sampling, * measured in seconds. Must not be zero. */ cvals->rate_sample_interval = 0; return 0; }