1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright(c) 2010-2014 Intel Corporation.
6 #include <linux/device.h>
7 #include <linux/netdevice.h>
8 #include <linux/ethtool.h>
12 kni_check_if_running(struct net_device *dev)
14 struct kni_dev *priv = netdev_priv(dev);
23 kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
25 struct kni_dev *priv = netdev_priv(dev);
27 priv->lad_dev->ethtool_ops->get_drvinfo(priv->lad_dev, info);
31 kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
33 struct kni_dev *priv = netdev_priv(dev);
35 return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd);
39 kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
41 struct kni_dev *priv = netdev_priv(dev);
43 return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd);
47 kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
49 struct kni_dev *priv = netdev_priv(dev);
51 priv->lad_dev->ethtool_ops->get_wol(priv->lad_dev, wol);
55 kni_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
57 struct kni_dev *priv = netdev_priv(dev);
59 return priv->lad_dev->ethtool_ops->set_wol(priv->lad_dev, wol);
63 kni_nway_reset(struct net_device *dev)
65 struct kni_dev *priv = netdev_priv(dev);
67 return priv->lad_dev->ethtool_ops->nway_reset(priv->lad_dev);
71 kni_get_eeprom_len(struct net_device *dev)
73 struct kni_dev *priv = netdev_priv(dev);
75 return priv->lad_dev->ethtool_ops->get_eeprom_len(priv->lad_dev);
79 kni_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
82 struct kni_dev *priv = netdev_priv(dev);
84 return priv->lad_dev->ethtool_ops->get_eeprom(priv->lad_dev, eeprom,
89 kni_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
92 struct kni_dev *priv = netdev_priv(dev);
94 return priv->lad_dev->ethtool_ops->set_eeprom(priv->lad_dev, eeprom,
99 kni_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
101 struct kni_dev *priv = netdev_priv(dev);
103 priv->lad_dev->ethtool_ops->get_ringparam(priv->lad_dev, ring);
107 kni_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
109 struct kni_dev *priv = netdev_priv(dev);
111 return priv->lad_dev->ethtool_ops->set_ringparam(priv->lad_dev, ring);
115 kni_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
117 struct kni_dev *priv = netdev_priv(dev);
119 priv->lad_dev->ethtool_ops->get_pauseparam(priv->lad_dev, pause);
123 kni_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
125 struct kni_dev *priv = netdev_priv(dev);
127 return priv->lad_dev->ethtool_ops->set_pauseparam(priv->lad_dev,
132 kni_get_msglevel(struct net_device *dev)
134 struct kni_dev *priv = netdev_priv(dev);
136 return priv->lad_dev->ethtool_ops->get_msglevel(priv->lad_dev);
140 kni_set_msglevel(struct net_device *dev, u32 data)
142 struct kni_dev *priv = netdev_priv(dev);
144 priv->lad_dev->ethtool_ops->set_msglevel(priv->lad_dev, data);
148 kni_get_regs_len(struct net_device *dev)
150 struct kni_dev *priv = netdev_priv(dev);
152 return priv->lad_dev->ethtool_ops->get_regs_len(priv->lad_dev);
156 kni_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
158 struct kni_dev *priv = netdev_priv(dev);
160 priv->lad_dev->ethtool_ops->get_regs(priv->lad_dev, regs, p);
164 kni_get_strings(struct net_device *dev, u32 stringset, u8 *data)
166 struct kni_dev *priv = netdev_priv(dev);
168 priv->lad_dev->ethtool_ops->get_strings(priv->lad_dev, stringset,
173 kni_get_sset_count(struct net_device *dev, int sset)
175 struct kni_dev *priv = netdev_priv(dev);
177 return priv->lad_dev->ethtool_ops->get_sset_count(priv->lad_dev, sset);
181 kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
184 struct kni_dev *priv = netdev_priv(dev);
186 priv->lad_dev->ethtool_ops->get_ethtool_stats(priv->lad_dev, stats,
190 struct ethtool_ops kni_ethtool_ops = {
191 .begin = kni_check_if_running,
192 .get_drvinfo = kni_get_drvinfo,
193 .get_settings = kni_get_settings,
194 .set_settings = kni_set_settings,
195 .get_regs_len = kni_get_regs_len,
196 .get_regs = kni_get_regs,
197 .get_wol = kni_get_wol,
198 .set_wol = kni_set_wol,
199 .nway_reset = kni_nway_reset,
200 .get_link = ethtool_op_get_link,
201 .get_eeprom_len = kni_get_eeprom_len,
202 .get_eeprom = kni_get_eeprom,
203 .set_eeprom = kni_set_eeprom,
204 .get_ringparam = kni_get_ringparam,
205 .set_ringparam = kni_set_ringparam,
206 .get_pauseparam = kni_get_pauseparam,
207 .set_pauseparam = kni_set_pauseparam,
208 .get_msglevel = kni_get_msglevel,
209 .set_msglevel = kni_set_msglevel,
210 .get_strings = kni_get_strings,
211 .get_sset_count = kni_get_sset_count,
212 .get_ethtool_stats = kni_get_ethtool_stats,
216 kni_set_ethtool_ops(struct net_device *netdev)
218 netdev->ethtool_ops = &kni_ethtool_ops;