]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/dpdk/kernel/linux/kni/kni_ethtool.c
import 15.2.0 Octopus source
[ceph.git] / ceph / src / spdk / dpdk / kernel / linux / kni / kni_ethtool.c
CommitLineData
11fdf7f2
TL
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright(c) 2010-2014 Intel Corporation.
7c673cae
FG
4 */
5
6#include <linux/device.h>
7#include <linux/netdevice.h>
8#include <linux/ethtool.h>
9#include "kni_dev.h"
10
11static int
12kni_check_if_running(struct net_device *dev)
13{
14 struct kni_dev *priv = netdev_priv(dev);
15
16 if (priv->lad_dev)
17 return 0;
18 else
19 return -EOPNOTSUPP;
20}
21
22static void
23kni_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
24{
25 struct kni_dev *priv = netdev_priv(dev);
26
27 priv->lad_dev->ethtool_ops->get_drvinfo(priv->lad_dev, info);
28}
29
9f95a23c
TL
30/* ETHTOOL_GLINKSETTINGS replaces ETHTOOL_GSET */
31#ifndef ETHTOOL_GLINKSETTINGS
7c673cae
FG
32static int
33kni_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
34{
35 struct kni_dev *priv = netdev_priv(dev);
36
37 return priv->lad_dev->ethtool_ops->get_settings(priv->lad_dev, ecmd);
38}
9f95a23c 39#endif
7c673cae 40
9f95a23c
TL
41/* ETHTOOL_SLINKSETTINGS replaces ETHTOOL_SSET */
42#ifndef ETHTOOL_SLINKSETTINGS
7c673cae
FG
43static int
44kni_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
45{
46 struct kni_dev *priv = netdev_priv(dev);
47
48 return priv->lad_dev->ethtool_ops->set_settings(priv->lad_dev, ecmd);
49}
9f95a23c 50#endif
7c673cae
FG
51
52static void
53kni_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
54{
55 struct kni_dev *priv = netdev_priv(dev);
56
57 priv->lad_dev->ethtool_ops->get_wol(priv->lad_dev, wol);
58}
59
60static int
61kni_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
62{
63 struct kni_dev *priv = netdev_priv(dev);
64
65 return priv->lad_dev->ethtool_ops->set_wol(priv->lad_dev, wol);
66}
67
68static int
69kni_nway_reset(struct net_device *dev)
70{
71 struct kni_dev *priv = netdev_priv(dev);
72
73 return priv->lad_dev->ethtool_ops->nway_reset(priv->lad_dev);
74}
75
76static int
77kni_get_eeprom_len(struct net_device *dev)
78{
79 struct kni_dev *priv = netdev_priv(dev);
80
81 return priv->lad_dev->ethtool_ops->get_eeprom_len(priv->lad_dev);
82}
83
84static int
85kni_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
86 u8 *bytes)
87{
88 struct kni_dev *priv = netdev_priv(dev);
89
90 return priv->lad_dev->ethtool_ops->get_eeprom(priv->lad_dev, eeprom,
91 bytes);
92}
93
94static int
95kni_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
96 u8 *bytes)
97{
98 struct kni_dev *priv = netdev_priv(dev);
99
100 return priv->lad_dev->ethtool_ops->set_eeprom(priv->lad_dev, eeprom,
101 bytes);
102}
103
104static void
105kni_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
106{
107 struct kni_dev *priv = netdev_priv(dev);
108
109 priv->lad_dev->ethtool_ops->get_ringparam(priv->lad_dev, ring);
110}
111
112static int
113kni_set_ringparam(struct net_device *dev, struct ethtool_ringparam *ring)
114{
115 struct kni_dev *priv = netdev_priv(dev);
116
117 return priv->lad_dev->ethtool_ops->set_ringparam(priv->lad_dev, ring);
118}
119
120static void
121kni_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
122{
123 struct kni_dev *priv = netdev_priv(dev);
124
125 priv->lad_dev->ethtool_ops->get_pauseparam(priv->lad_dev, pause);
126}
127
128static int
129kni_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause)
130{
131 struct kni_dev *priv = netdev_priv(dev);
132
133 return priv->lad_dev->ethtool_ops->set_pauseparam(priv->lad_dev,
134 pause);
135}
136
137static u32
138kni_get_msglevel(struct net_device *dev)
139{
140 struct kni_dev *priv = netdev_priv(dev);
141
142 return priv->lad_dev->ethtool_ops->get_msglevel(priv->lad_dev);
143}
144
145static void
146kni_set_msglevel(struct net_device *dev, u32 data)
147{
148 struct kni_dev *priv = netdev_priv(dev);
149
150 priv->lad_dev->ethtool_ops->set_msglevel(priv->lad_dev, data);
151}
152
153static int
154kni_get_regs_len(struct net_device *dev)
155{
156 struct kni_dev *priv = netdev_priv(dev);
157
158 return priv->lad_dev->ethtool_ops->get_regs_len(priv->lad_dev);
159}
160
161static void
162kni_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
163{
164 struct kni_dev *priv = netdev_priv(dev);
165
166 priv->lad_dev->ethtool_ops->get_regs(priv->lad_dev, regs, p);
167}
168
169static void
170kni_get_strings(struct net_device *dev, u32 stringset, u8 *data)
171{
172 struct kni_dev *priv = netdev_priv(dev);
173
174 priv->lad_dev->ethtool_ops->get_strings(priv->lad_dev, stringset,
175 data);
176}
177
178static int
179kni_get_sset_count(struct net_device *dev, int sset)
180{
181 struct kni_dev *priv = netdev_priv(dev);
182
183 return priv->lad_dev->ethtool_ops->get_sset_count(priv->lad_dev, sset);
184}
185
186static void
187kni_get_ethtool_stats(struct net_device *dev, struct ethtool_stats *stats,
188 u64 *data)
189{
190 struct kni_dev *priv = netdev_priv(dev);
191
192 priv->lad_dev->ethtool_ops->get_ethtool_stats(priv->lad_dev, stats,
193 data);
194}
195
196struct ethtool_ops kni_ethtool_ops = {
197 .begin = kni_check_if_running,
198 .get_drvinfo = kni_get_drvinfo,
9f95a23c 199#ifndef ETHTOOL_GLINKSETTINGS
7c673cae 200 .get_settings = kni_get_settings,
9f95a23c
TL
201#endif
202#ifndef ETHTOOL_SLINKSETTINGS
7c673cae 203 .set_settings = kni_set_settings,
9f95a23c 204#endif
7c673cae
FG
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,
223};
224
225void
226kni_set_ethtool_ops(struct net_device *netdev)
227{
228 netdev->ethtool_ops = &kni_ethtool_ops;
229}