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
;