4 * Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of version 2 of the GNU General Public License as
8 * published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18 * The full GNU General Public License is included in this distribution
19 * in the file called LICENSE.GPL.
21 * Contact Information:
25 #include <linux/device.h>
26 #include <linux/netdevice.h>
27 #include <linux/ethtool.h>
31 kni_check_if_running(struct net_device *dev)
33 struct kni_dev *priv = netdev_priv(dev);
42 kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
44 struct kni_dev *priv = netdev_priv(dev);
46 priv->lad_dev->ethtool_ops->get_drvinfo(priv->lad_dev, info);
49 /* ETHTOOL_GLINKSETTINGS replaces ETHTOOL_GSET */
50 #ifndef ETHTOOL_GLINKSETTINGS
52 kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
54 struct kni_dev *priv = netdev_priv(dev);
56 return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd);
60 /* ETHTOOL_SLINKSETTINGS replaces ETHTOOL_SSET */
61 #ifndef ETHTOOL_SLINKSETTINGS
63 kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
65 struct kni_dev *priv = netdev_priv(dev);
67 return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd);
72 kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
74 struct kni_dev *priv = netdev_priv(dev);
76 priv->lad_dev->ethtool_ops->get_wol(priv->lad_dev, wol);
80 kni_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
82 struct kni_dev *priv = netdev_priv(dev);
84 return priv->lad_dev->ethtool_ops->set_wol(priv->lad_dev, wol);
88 kni_nway_reset(struct net_device *dev)
90 struct kni_dev *priv = netdev_priv(dev);
92 return priv->lad_dev->ethtool_ops->nway_reset(priv->lad_dev);
96 kni_get_eeprom_len(struct net_device *dev)
98 struct kni_dev *priv = netdev_priv(dev);
100 return priv->lad_dev->ethtool_ops->get_eeprom_len(priv->lad_dev);
104 kni_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
107 struct kni_dev *priv = netdev_priv(dev);
109 return priv->lad_dev->ethtool_ops->get_eeprom(priv->lad_dev, eeprom,
114 kni_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
117 struct kni_dev *priv = netdev_priv(dev);
119 return priv->lad_dev->ethtool_ops->set_eeprom(priv->lad_dev, eeprom,
124 kni_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
126 struct kni_dev *priv = netdev_priv(dev);
128 priv->lad_dev->ethtool_ops->get_ringparam(priv->lad_dev, ring);
132 kni_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
134 struct kni_dev *priv = netdev_priv(dev);
136 return priv->lad_dev->ethtool_ops->set_ringparam(priv->lad_dev, ring);
140 kni_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
142 struct kni_dev *priv = netdev_priv(dev);
144 priv->lad_dev->ethtool_ops->get_pauseparam(priv->lad_dev, pause);
148 kni_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
150 struct kni_dev *priv = netdev_priv(dev);
152 return priv->lad_dev->ethtool_ops->set_pauseparam(priv->lad_dev,
157 kni_get_msglevel(struct net_device *dev)
159 struct kni_dev *priv = netdev_priv(dev);
161 return priv->lad_dev->ethtool_ops->get_msglevel(priv->lad_dev);
165 kni_set_msglevel(struct net_device *dev, u32 data)
167 struct kni_dev *priv = netdev_priv(dev);
169 priv->lad_dev->ethtool_ops->set_msglevel(priv->lad_dev, data);
173 kni_get_regs_len(struct net_device *dev)
175 struct kni_dev *priv = netdev_priv(dev);
177 return priv->lad_dev->ethtool_ops->get_regs_len(priv->lad_dev);
181 kni_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
183 struct kni_dev *priv = netdev_priv(dev);
185 priv->lad_dev->ethtool_ops->get_regs(priv->lad_dev, regs, p);
189 kni_get_strings(struct net_device *dev, u32 stringset, u8 *data)
191 struct kni_dev *priv = netdev_priv(dev);
193 priv->lad_dev->ethtool_ops->get_strings(priv->lad_dev, stringset,
198 kni_get_sset_count(struct net_device *dev, int sset)
200 struct kni_dev *priv = netdev_priv(dev);
202 return priv->lad_dev->ethtool_ops->get_sset_count(priv->lad_dev, sset);
206 kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
209 struct kni_dev *priv = netdev_priv(dev);
211 priv->lad_dev->ethtool_ops->get_ethtool_stats(priv->lad_dev, stats,
215 struct ethtool_ops kni_ethtool_ops = {
216 .begin = kni_check_if_running,
217 .get_drvinfo = kni_get_drvinfo,
218 #ifndef ETHTOOL_GLINKSETTINGS
219 .get_settings = kni_get_settings,
221 #ifndef ETHTOOL_SLINKSETTINGS
222 .set_settings = kni_set_settings,
224 .get_regs_len = kni_get_regs_len,
225 .get_regs = kni_get_regs,
226 .get_wol = kni_get_wol,
227 .set_wol = kni_set_wol,
228 .nway_reset = kni_nway_reset,
229 .get_link = ethtool_op_get_link,
230 .get_eeprom_len = kni_get_eeprom_len,
231 .get_eeprom = kni_get_eeprom,
232 .set_eeprom = kni_set_eeprom,
233 .get_ringparam = kni_get_ringparam,
234 .set_ringparam = kni_set_ringparam,
235 .get_pauseparam = kni_get_pauseparam,
236 .set_pauseparam = kni_set_pauseparam,
237 .get_msglevel = kni_get_msglevel,
238 .set_msglevel = kni_set_msglevel,
239 .get_strings = kni_get_strings,
240 .get_sset_count = kni_get_sset_count,
241 .get_ethtool_stats = kni_get_ethtool_stats,
245 kni_set_ethtool_ops(struct net_device *netdev)
247 netdev->ethtool_ops = &kni_ethtool_ops;