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);
30 /* ETHTOOL_GLINKSETTINGS replaces ETHTOOL_GSET */
31 #ifndef ETHTOOL_GLINKSETTINGS
33 kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
35 struct kni_dev *priv = netdev_priv(dev);
37 return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd);
41 /* ETHTOOL_SLINKSETTINGS replaces ETHTOOL_SSET */
42 #ifndef ETHTOOL_SLINKSETTINGS
44 kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
46 struct kni_dev *priv = netdev_priv(dev);
48 return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd);
53 kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
55 struct kni_dev *priv = netdev_priv(dev);
57 priv->lad_dev->ethtool_ops->get_wol(priv->lad_dev, wol);
61 kni_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
63 struct kni_dev *priv = netdev_priv(dev);
65 return priv->lad_dev->ethtool_ops->set_wol(priv->lad_dev, wol);
69 kni_nway_reset(struct net_device *dev)
71 struct kni_dev *priv = netdev_priv(dev);
73 return priv->lad_dev->ethtool_ops->nway_reset(priv->lad_dev);
77 kni_get_eeprom_len(struct net_device *dev)
79 struct kni_dev *priv = netdev_priv(dev);
81 return priv->lad_dev->ethtool_ops->get_eeprom_len(priv->lad_dev);
85 kni_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
88 struct kni_dev *priv = netdev_priv(dev);
90 return priv->lad_dev->ethtool_ops->get_eeprom(priv->lad_dev, eeprom,
95 kni_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
98 struct kni_dev *priv = netdev_priv(dev);
100 return priv->lad_dev->ethtool_ops->set_eeprom(priv->lad_dev, eeprom,
105 kni_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
107 struct kni_dev *priv = netdev_priv(dev);
109 priv->lad_dev->ethtool_ops->get_ringparam(priv->lad_dev, ring);
113 kni_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
115 struct kni_dev *priv = netdev_priv(dev);
117 return priv->lad_dev->ethtool_ops->set_ringparam(priv->lad_dev, ring);
121 kni_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
123 struct kni_dev *priv = netdev_priv(dev);
125 priv->lad_dev->ethtool_ops->get_pauseparam(priv->lad_dev, pause);
129 kni_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
131 struct kni_dev *priv = netdev_priv(dev);
133 return priv->lad_dev->ethtool_ops->set_pauseparam(priv->lad_dev,
138 kni_get_msglevel(struct net_device *dev)
140 struct kni_dev *priv = netdev_priv(dev);
142 return priv->lad_dev->ethtool_ops->get_msglevel(priv->lad_dev);
146 kni_set_msglevel(struct net_device *dev, u32 data)
148 struct kni_dev *priv = netdev_priv(dev);
150 priv->lad_dev->ethtool_ops->set_msglevel(priv->lad_dev, data);
154 kni_get_regs_len(struct net_device *dev)
156 struct kni_dev *priv = netdev_priv(dev);
158 return priv->lad_dev->ethtool_ops->get_regs_len(priv->lad_dev);
162 kni_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
164 struct kni_dev *priv = netdev_priv(dev);
166 priv->lad_dev->ethtool_ops->get_regs(priv->lad_dev, regs, p);
170 kni_get_strings(struct net_device *dev, u32 stringset, u8 *data)
172 struct kni_dev *priv = netdev_priv(dev);
174 priv->lad_dev->ethtool_ops->get_strings(priv->lad_dev, stringset,
179 kni_get_sset_count(struct net_device *dev, int sset)
181 struct kni_dev *priv = netdev_priv(dev);
183 return priv->lad_dev->ethtool_ops->get_sset_count(priv->lad_dev, sset);
187 kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
190 struct kni_dev *priv = netdev_priv(dev);
192 priv->lad_dev->ethtool_ops->get_ethtool_stats(priv->lad_dev, stats,
196 struct ethtool_ops kni_ethtool_ops = {
197 .begin = kni_check_if_running,
198 .get_drvinfo = kni_get_drvinfo,
199 #ifndef ETHTOOL_GLINKSETTINGS
200 .get_settings = kni_get_settings,
202 #ifndef ETHTOOL_SLINKSETTINGS
203 .set_settings = kni_set_settings,
205 .get_regs_len = kni_get_regs_len,
206 .get_regs = kni_get_regs,
207 .get_wol = kni_get_wol,
208 .set_wol = kni_set_wol,
209 .nway_reset = kni_nway_reset,
210 .get_link = ethtool_op_get_link,
211 .get_eeprom_len = kni_get_eeprom_len,
212 .get_eeprom = kni_get_eeprom,
213 .set_eeprom = kni_set_eeprom,
214 .get_ringparam = kni_get_ringparam,
215 .set_ringparam = kni_set_ringparam,
216 .get_pauseparam = kni_get_pauseparam,
217 .set_pauseparam = kni_set_pauseparam,
218 .get_msglevel = kni_get_msglevel,
219 .set_msglevel = kni_set_msglevel,
220 .get_strings = kni_get_strings,
221 .get_sset_count = kni_get_sset_count,
222 .get_ethtool_stats = kni_get_ethtool_stats,
226 kni_set_ethtool_ops(struct net_device *netdev)
228 netdev->ethtool_ops = &kni_ethtool_ops;