Support setting the rx coalesce. Then someone could change the rx
agg timeout value through ethtool.

Signed-off-by: Hayes Wang <hayesw...@realtek.com>
---
 drivers/net/usb/r8152.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index c5301ca..e4e7238 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -3660,6 +3660,61 @@ out:
        return ret;
 }
 
+static int rtl8152_get_coalesce(struct net_device *netdev,
+                               struct ethtool_coalesce *coalesce)
+{
+       struct r8152 *tp = netdev_priv(netdev);
+
+       switch (tp->version) {
+       case RTL_VER_01:
+       case RTL_VER_02:
+               return -EOPNOTSUPP;
+       default:
+               break;
+       }
+
+       coalesce->rx_coalesce_usecs = tp->coalesce;
+
+       return 0;
+}
+
+static int rtl8152_set_coalesce(struct net_device *netdev,
+                               struct ethtool_coalesce *coalesce)
+{
+       struct r8152 *tp = netdev_priv(netdev);
+       int ret;
+
+       switch (tp->version) {
+       case RTL_VER_01:
+       case RTL_VER_02:
+               return -EOPNOTSUPP;
+       default:
+               break;
+       }
+
+       if (coalesce->rx_coalesce_usecs > COALESCE_SLOW)
+               return -EINVAL;
+
+       ret = usb_autopm_get_interface(tp->intf);
+       if (ret < 0)
+               return ret;
+
+       mutex_lock(&tp->control);
+
+       if (tp->coalesce != coalesce->rx_coalesce_usecs) {
+               tp->coalesce = coalesce->rx_coalesce_usecs;
+
+               if (netif_running(tp->netdev) && netif_carrier_ok(netdev))
+                       r8153_set_rx_early_timeout(tp);
+       }
+
+       mutex_unlock(&tp->control);
+
+       usb_autopm_put_interface(tp->intf);
+
+       return ret;
+}
+
 static struct ethtool_ops ops = {
        .get_drvinfo = rtl8152_get_drvinfo,
        .get_settings = rtl8152_get_settings,
@@ -3673,6 +3728,8 @@ static struct ethtool_ops ops = {
        .get_strings = rtl8152_get_strings,
        .get_sset_count = rtl8152_get_sset_count,
        .get_ethtool_stats = rtl8152_get_ethtool_stats,
+       .get_coalesce = rtl8152_get_coalesce,
+       .set_coalesce = rtl8152_set_coalesce,
        .get_eee = rtl_ethtool_get_eee,
        .set_eee = rtl_ethtool_set_eee,
 };
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to