Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[deliverable/linux.git] / drivers / net / ethernet / hisilicon / hns / hns_ethtool.c
index 3c4a3bc31a89230c2453c115316306739e28c2a3..3d746c887873836ac0c0c0590b2940f3b65382b3 100644 (file)
@@ -794,8 +794,10 @@ static int hns_set_coalesce(struct net_device *net_dev,
            (!ops->set_coalesce_frames))
                return -ESRCH;
 
-       ops->set_coalesce_usecs(priv->ae_handle,
-                                       ec->rx_coalesce_usecs);
+       ret = ops->set_coalesce_usecs(priv->ae_handle,
+                                     ec->rx_coalesce_usecs);
+       if (ret)
+               return ret;
 
        ret = ops->set_coalesce_frames(
                priv->ae_handle,
@@ -1013,8 +1015,8 @@ int hns_phy_led_set(struct net_device *netdev, int value)
        struct phy_device *phy_dev = priv->phy;
 
        retval = phy_write(phy_dev, HNS_PHY_PAGE_REG, HNS_PHY_PAGE_LED);
-       retval = phy_write(phy_dev, HNS_LED_FC_REG, value);
-       retval = phy_write(phy_dev, HNS_PHY_PAGE_REG, HNS_PHY_PAGE_COPPER);
+       retval |= phy_write(phy_dev, HNS_LED_FC_REG, value);
+       retval |= phy_write(phy_dev, HNS_PHY_PAGE_REG, HNS_PHY_PAGE_COPPER);
        if (retval) {
                netdev_err(netdev, "mdiobus_write fail !\n");
                return retval;
@@ -1173,18 +1175,15 @@ hns_get_rss_key_size(struct net_device *netdev)
 {
        struct hns_nic_priv *priv = netdev_priv(netdev);
        struct hnae_ae_ops *ops;
-       u32 ret;
 
        if (AE_IS_VER1(priv->enet_ver)) {
                netdev_err(netdev,
                           "RSS feature is not supported on this hardware\n");
-               return -EOPNOTSUPP;
+               return 0;
        }
 
        ops = priv->ae_handle->dev->ops;
-       ret = ops->get_rss_key_size(priv->ae_handle);
-
-       return ret;
+       return ops->get_rss_key_size(priv->ae_handle);
 }
 
 static u32
@@ -1192,18 +1191,15 @@ hns_get_rss_indir_size(struct net_device *netdev)
 {
        struct hns_nic_priv *priv = netdev_priv(netdev);
        struct hnae_ae_ops *ops;
-       u32 ret;
 
        if (AE_IS_VER1(priv->enet_ver)) {
                netdev_err(netdev,
                           "RSS feature is not supported on this hardware\n");
-               return -EOPNOTSUPP;
+               return 0;
        }
 
        ops = priv->ae_handle->dev->ops;
-       ret = ops->get_rss_indir_size(priv->ae_handle);
-
-       return ret;
+       return ops->get_rss_indir_size(priv->ae_handle);
 }
 
 static int
@@ -1211,7 +1207,6 @@ hns_get_rss(struct net_device *netdev, u32 *indir, u8 *key, u8 *hfunc)
 {
        struct hns_nic_priv *priv = netdev_priv(netdev);
        struct hnae_ae_ops *ops;
-       int ret;
 
        if (AE_IS_VER1(priv->enet_ver)) {
                netdev_err(netdev,
@@ -1224,9 +1219,7 @@ hns_get_rss(struct net_device *netdev, u32 *indir, u8 *key, u8 *hfunc)
        if (!indir)
                return 0;
 
-       ret = ops->get_rss(priv->ae_handle, indir, key, hfunc);
-
-       return 0;
+       return ops->get_rss(priv->ae_handle, indir, key, hfunc);
 }
 
 static int
@@ -1235,7 +1228,6 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
 {
        struct hns_nic_priv *priv = netdev_priv(netdev);
        struct hnae_ae_ops *ops;
-       int ret;
 
        if (AE_IS_VER1(priv->enet_ver)) {
                netdev_err(netdev,
@@ -1252,7 +1244,22 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
        if (!indir)
                return 0;
 
-       ret = ops->set_rss(priv->ae_handle, indir, key, hfunc);
+       return ops->set_rss(priv->ae_handle, indir, key, hfunc);
+}
+
+static int hns_get_rxnfc(struct net_device *netdev,
+                        struct ethtool_rxnfc *cmd,
+                        u32 *rule_locs)
+{
+       struct hns_nic_priv *priv = netdev_priv(netdev);
+
+       switch (cmd->cmd) {
+       case ETHTOOL_GRXRINGS:
+               cmd->data = priv->ae_handle->q_num;
+               break;
+       default:
+               return -EOPNOTSUPP;
+       }
 
        return 0;
 }
@@ -1280,6 +1287,7 @@ static struct ethtool_ops hns_ethtool_ops = {
        .get_rxfh_indir_size = hns_get_rss_indir_size,
        .get_rxfh = hns_get_rss,
        .set_rxfh = hns_set_rss,
+       .get_rxnfc = hns_get_rxnfc,
 };
 
 void hns_ethtool_set_ops(struct net_device *ndev)
This page took 0.029525 seconds and 5 git commands to generate.