}
 #endif
 
-static int pcnet32_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+static int pcnet32_get_link_ksettings(struct net_device *dev,
+                                     struct ethtool_link_ksettings *cmd)
 {
        struct pcnet32_private *lp = netdev_priv(dev);
        unsigned long flags;
 
        if (lp->mii) {
                spin_lock_irqsave(&lp->lock, flags);
-               mii_ethtool_gset(&lp->mii_if, cmd);
+               mii_ethtool_get_link_ksettings(&lp->mii_if, cmd);
                spin_unlock_irqrestore(&lp->lock, flags);
                r = 0;
        }
        return r;
 }
 
-static int pcnet32_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+static int pcnet32_set_link_ksettings(struct net_device *dev,
+                                     const struct ethtool_link_ksettings *cmd)
 {
        struct pcnet32_private *lp = netdev_priv(dev);
        unsigned long flags;
 
        if (lp->mii) {
                spin_lock_irqsave(&lp->lock, flags);
-               r = mii_ethtool_sset(&lp->mii_if, cmd);
+               r = mii_ethtool_set_link_ksettings(&lp->mii_if, cmd);
                spin_unlock_irqrestore(&lp->lock, flags);
        }
        return r;
 }
 
 static const struct ethtool_ops pcnet32_ethtool_ops = {
-       .get_settings           = pcnet32_get_settings,
-       .set_settings           = pcnet32_set_settings,
        .get_drvinfo            = pcnet32_get_drvinfo,
        .get_msglevel           = pcnet32_get_msglevel,
        .set_msglevel           = pcnet32_set_msglevel,
        .get_regs_len           = pcnet32_get_regs_len,
        .get_regs               = pcnet32_get_regs,
        .get_sset_count         = pcnet32_get_sset_count,
+       .get_link_ksettings     = pcnet32_get_link_ksettings,
+       .set_link_ksettings     = pcnet32_set_link_ksettings,
 };
 
 /* only probes for non-PCI devices, the rest are handled by