diff options
author | John Crispin <john@openwrt.org> | 2015-03-13 08:38:08 +0000 |
---|---|---|
committer | John Crispin <john@openwrt.org> | 2015-03-13 08:38:08 +0000 |
commit | c7229b96b72db28994e98fd7140f0e2bc33310f6 (patch) | |
tree | 54c1f47a7325815982a236cdf6940b3fe7abb51c /target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c | |
parent | 2c94eef5dfa54748f7f2099f84ca86f82b4f8bc1 (diff) | |
download | upstream-c7229b96b72db28994e98fd7140f0e2bc33310f6.tar.gz upstream-c7229b96b72db28994e98fd7140f0e2bc33310f6.tar.bz2 upstream-c7229b96b72db28994e98fd7140f0e2bc33310f6.zip |
ralink: support change tx/rx ring size
Signed-off-by: michael lee <igvtee@gmail.com>
SVN-Revision: 44741
Diffstat (limited to 'target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c')
-rw-r--r-- | target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c b/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c index cbe5fadb1f..63356b1814 100644 --- a/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c +++ b/target/linux/ramips/files/drivers/net/ethernet/ralink/ralink_ethtool.c @@ -131,13 +131,36 @@ out_get_link: return ethtool_op_get_link(dev); } +static int fe_set_ringparam(struct net_device *dev, + struct ethtool_ringparam *ring) +{ + struct fe_priv *priv = netdev_priv(dev); + + if ((ring->tx_pending < 2) || + (ring->rx_pending < 2) || + (ring->rx_pending > MAX_DMA_DESC) || + (ring->tx_pending > MAX_DMA_DESC)) + return -EINVAL; + + dev->netdev_ops->ndo_stop(dev); + + priv->tx_ring_size = BIT(fls(ring->tx_pending) - 1); + priv->rx_ring_size = BIT(fls(ring->rx_pending) - 1); + + dev->netdev_ops->ndo_open(dev); + + return 0; +} + static void fe_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) { + struct fe_priv *priv = netdev_priv(dev); + ring->rx_max_pending = MAX_DMA_DESC; ring->tx_max_pending = MAX_DMA_DESC; - ring->rx_pending = NUM_DMA_DESC; - ring->tx_pending = NUM_DMA_DESC; + ring->rx_pending = priv->rx_ring_size; + ring->tx_pending = priv->tx_ring_size; } static void fe_get_strings(struct net_device *dev, u32 stringset, u8 *data) @@ -194,6 +217,7 @@ static struct ethtool_ops fe_ethtool_ops = { .set_msglevel = fe_set_msglevel, .nway_reset = fe_nway_reset, .get_link = fe_get_link, + .set_ringparam = fe_set_ringparam, .get_ringparam = fe_get_ringparam, }; |