1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef _LINUX_ETHTOOL_H
14#define _LINUX_ETHTOOL_H
15
16#include <linux/types.h>
17
18
19struct ethtool_cmd {
20 __u32 cmd;
21 __u32 supported;
22 __u32 advertising;
23 __u16 speed;
24 __u8 duplex;
25 __u8 port;
26 __u8 phy_address;
27 __u8 transceiver;
28 __u8 autoneg;
29 __u8 mdio_support;
30 __u32 maxtxpkt;
31 __u32 maxrxpkt;
32 __u16 speed_hi;
33 __u8 eth_tp_mdix;
34 __u8 reserved2;
35 __u32 lp_advertising;
36 __u32 reserved[2];
37};
38
39static inline void ethtool_cmd_speed_set(struct ethtool_cmd *ep,
40 __u32 speed)
41{
42
43 ep->speed = (__u16)speed;
44 ep->speed_hi = (__u16)(speed >> 16);
45}
46
47static inline __u32 ethtool_cmd_speed(struct ethtool_cmd *ep)
48{
49 return (ep->speed_hi << 16) | ep->speed;
50}
51
52#define ETHTOOL_BUSINFO_LEN 32
53
54struct ethtool_drvinfo {
55 __u32 cmd;
56 char driver[32];
57 char version[32];
58 char fw_version[32];
59 char bus_info[ETHTOOL_BUSINFO_LEN];
60
61 char reserved1[32];
62 char reserved2[12];
63 __u32 n_priv_flags;
64 __u32 n_stats;
65 __u32 testinfo_len;
66 __u32 eedump_len;
67 __u32 regdump_len;
68};
69
70#define SOPASS_MAX 6
71
72struct ethtool_wolinfo {
73 __u32 cmd;
74 __u32 supported;
75 __u32 wolopts;
76 __u8 sopass[SOPASS_MAX];
77};
78
79
80struct ethtool_value {
81 __u32 cmd;
82 __u32 data;
83};
84
85
86struct ethtool_regs {
87 __u32 cmd;
88 __u32 version;
89 __u32 len;
90 __u8 data[0];
91};
92
93
94struct ethtool_eeprom {
95 __u32 cmd;
96 __u32 magic;
97 __u32 offset;
98 __u32 len;
99 __u8 data[0];
100};
101
102
103struct ethtool_coalesce {
104 __u32 cmd;
105
106
107
108
109
110 __u32 rx_coalesce_usecs;
111
112
113
114
115
116
117
118 __u32 rx_max_coalesced_frames;
119
120
121
122
123
124
125 __u32 rx_coalesce_usecs_irq;
126 __u32 rx_max_coalesced_frames_irq;
127
128
129
130
131
132 __u32 tx_coalesce_usecs;
133
134
135
136
137
138
139
140 __u32 tx_max_coalesced_frames;
141
142
143
144
145
146
147 __u32 tx_coalesce_usecs_irq;
148 __u32 tx_max_coalesced_frames_irq;
149
150
151
152
153
154
155 __u32 stats_block_coalesce_usecs;
156
157
158
159
160
161
162
163
164 __u32 use_adaptive_rx_coalesce;
165 __u32 use_adaptive_tx_coalesce;
166
167
168
169
170
171 __u32 pkt_rate_low;
172 __u32 rx_coalesce_usecs_low;
173 __u32 rx_max_coalesced_frames_low;
174 __u32 tx_coalesce_usecs_low;
175 __u32 tx_max_coalesced_frames_low;
176
177
178
179
180
181
182
183
184
185
186 __u32 pkt_rate_high;
187 __u32 rx_coalesce_usecs_high;
188 __u32 rx_max_coalesced_frames_high;
189 __u32 tx_coalesce_usecs_high;
190 __u32 tx_max_coalesced_frames_high;
191
192
193
194
195 __u32 rate_sample_interval;
196};
197
198
199struct ethtool_ringparam {
200 __u32 cmd;
201
202
203
204
205
206 __u32 rx_max_pending;
207 __u32 rx_mini_max_pending;
208 __u32 rx_jumbo_max_pending;
209 __u32 tx_max_pending;
210
211
212
213
214 __u32 rx_pending;
215 __u32 rx_mini_pending;
216 __u32 rx_jumbo_pending;
217 __u32 tx_pending;
218};
219
220
221struct ethtool_pauseparam {
222 __u32 cmd;
223
224
225
226
227
228
229
230
231
232
233
234 __u32 autoneg;
235 __u32 rx_pause;
236 __u32 tx_pause;
237};
238
239#define ETH_GSTRING_LEN 32
240enum ethtool_stringset {
241 ETH_SS_TEST = 0,
242 ETH_SS_STATS,
243 ETH_SS_PRIV_FLAGS,
244};
245
246
247struct ethtool_gstrings {
248 __u32 cmd;
249 __u32 string_set;
250 __u32 len;
251 __u8 data[0];
252};
253
254enum ethtool_test_flags {
255 ETH_TEST_FL_OFFLINE = (1 << 0),
256 ETH_TEST_FL_FAILED = (1 << 1),
257};
258
259
260struct ethtool_test {
261 __u32 cmd;
262 __u32 flags;
263 __u32 reserved;
264 __u32 len;
265 __u64 data[0];
266};
267
268
269struct ethtool_stats {
270 __u32 cmd;
271 __u32 n_stats;
272 __u64 data[0];
273};
274
275struct ethtool_perm_addr {
276 __u32 cmd;
277 __u32 size;
278 __u8 data[0];
279};
280
281
282
283
284
285
286
287
288
289
290enum ethtool_flags {
291 ETH_FLAG_LRO = (1 << 15),
292};
293
294
295
296
297
298
299struct ethtool_tcpip4_spec {
300 __be32 ip4src;
301 __be32 ip4dst;
302 __be16 psrc;
303 __be16 pdst;
304 __u8 tos;
305};
306
307struct ethtool_ah_espip4_spec {
308 __be32 ip4src;
309 __be32 ip4dst;
310 __be32 spi;
311 __u8 tos;
312};
313
314struct ethtool_rawip4_spec {
315 __be32 ip4src;
316 __be32 ip4dst;
317 __u8 hdata[64];
318};
319
320struct ethtool_ether_spec {
321 __be16 ether_type;
322 __u8 frame_size;
323 __u8 eframe[16];
324};
325
326#define ETH_RX_NFC_IP4 1
327#define ETH_RX_NFC_IP6 2
328
329struct ethtool_usrip4_spec {
330 __be32 ip4src;
331 __be32 ip4dst;
332 __be32 l4_4_bytes;
333 __u8 tos;
334 __u8 ip_ver;
335 __u8 proto;
336};
337
338struct ethtool_rx_flow_spec {
339 __u32 flow_type;
340 union {
341 struct ethtool_tcpip4_spec tcp_ip4_spec;
342 struct ethtool_tcpip4_spec udp_ip4_spec;
343 struct ethtool_tcpip4_spec sctp_ip4_spec;
344 struct ethtool_ah_espip4_spec ah_ip4_spec;
345 struct ethtool_ah_espip4_spec esp_ip4_spec;
346 struct ethtool_rawip4_spec raw_ip4_spec;
347 struct ethtool_ether_spec ether_spec;
348 struct ethtool_usrip4_spec usr_ip4_spec;
349 __u8 hdata[64];
350 } h_u, m_u;
351 __u64 ring_cookie;
352 __u32 location;
353};
354
355struct ethtool_rxnfc {
356 __u32 cmd;
357 __u32 flow_type;
358
359 __u64 data;
360 struct ethtool_rx_flow_spec fs;
361 __u32 rule_cnt;
362 __u32 rule_locs[0];
363};
364
365#ifdef __KERNEL__
366
367struct net_device;
368
369
370u32 ethtool_op_get_link(struct net_device *dev);
371u32 ethtool_op_get_tx_csum(struct net_device *dev);
372int ethtool_op_set_tx_csum(struct net_device *dev, u32 data);
373int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data);
374int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data);
375u32 ethtool_op_get_sg(struct net_device *dev);
376int ethtool_op_set_sg(struct net_device *dev, u32 data);
377u32 ethtool_op_get_tso(struct net_device *dev);
378int ethtool_op_set_tso(struct net_device *dev, u32 data);
379u32 ethtool_op_get_ufo(struct net_device *dev);
380int ethtool_op_set_ufo(struct net_device *dev, u32 data);
381u32 ethtool_op_get_flags(struct net_device *dev);
382int ethtool_op_set_flags(struct net_device *dev, u32 data);
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443struct ethtool_ops {
444 int (*get_settings)(struct net_device *, struct ethtool_cmd *);
445 int (*set_settings)(struct net_device *, struct ethtool_cmd *);
446 void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
447 int (*get_regs_len)(struct net_device *);
448 void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
449 void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
450 int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
451 u32 (*get_msglevel)(struct net_device *);
452 void (*set_msglevel)(struct net_device *, u32);
453 int (*nway_reset)(struct net_device *);
454 u32 (*get_link)(struct net_device *);
455 int (*get_eeprom_len)(struct net_device *);
456 int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
457 int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
458 int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
459 int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
460 void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
461 int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
462 void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam*);
463 int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam*);
464 u32 (*get_rx_csum)(struct net_device *);
465 int (*set_rx_csum)(struct net_device *, u32);
466 u32 (*get_tx_csum)(struct net_device *);
467 int (*set_tx_csum)(struct net_device *, u32);
468 u32 (*get_sg)(struct net_device *);
469 int (*set_sg)(struct net_device *, u32);
470 u32 (*get_tso)(struct net_device *);
471 int (*set_tso)(struct net_device *, u32);
472 void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
473 void (*get_strings)(struct net_device *, u32 stringset, u8 *);
474 int (*phys_id)(struct net_device *, u32);
475 void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
476 int (*begin)(struct net_device *);
477 void (*complete)(struct net_device *);
478 u32 (*get_ufo)(struct net_device *);
479 int (*set_ufo)(struct net_device *, u32);
480 u32 (*get_flags)(struct net_device *);
481 int (*set_flags)(struct net_device *, u32);
482 u32 (*get_priv_flags)(struct net_device *);
483 int (*set_priv_flags)(struct net_device *, u32);
484 int (*get_sset_count)(struct net_device *, int);
485
486
487 int (*self_test_count)(struct net_device *);
488 int (*get_stats_count)(struct net_device *);
489 int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *);
490 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
491};
492#endif
493
494
495#define ETHTOOL_GSET 0x00000001
496#define ETHTOOL_SSET 0x00000002
497#define ETHTOOL_GDRVINFO 0x00000003
498#define ETHTOOL_GREGS 0x00000004
499#define ETHTOOL_GWOL 0x00000005
500#define ETHTOOL_SWOL 0x00000006
501#define ETHTOOL_GMSGLVL 0x00000007
502#define ETHTOOL_SMSGLVL 0x00000008
503#define ETHTOOL_NWAY_RST 0x00000009
504#define ETHTOOL_GLINK 0x0000000a
505#define ETHTOOL_GEEPROM 0x0000000b
506#define ETHTOOL_SEEPROM 0x0000000c
507#define ETHTOOL_GCOALESCE 0x0000000e
508#define ETHTOOL_SCOALESCE 0x0000000f
509#define ETHTOOL_GRINGPARAM 0x00000010
510#define ETHTOOL_SRINGPARAM 0x00000011
511#define ETHTOOL_GPAUSEPARAM 0x00000012
512#define ETHTOOL_SPAUSEPARAM 0x00000013
513#define ETHTOOL_GRXCSUM 0x00000014
514#define ETHTOOL_SRXCSUM 0x00000015
515#define ETHTOOL_GTXCSUM 0x00000016
516#define ETHTOOL_STXCSUM 0x00000017
517#define ETHTOOL_GSG 0x00000018
518
519#define ETHTOOL_SSG 0x00000019
520
521#define ETHTOOL_TEST 0x0000001a
522#define ETHTOOL_GSTRINGS 0x0000001b
523#define ETHTOOL_PHYS_ID 0x0000001c
524#define ETHTOOL_GSTATS 0x0000001d
525#define ETHTOOL_GTSO 0x0000001e
526#define ETHTOOL_STSO 0x0000001f
527#define ETHTOOL_GPERMADDR 0x00000020
528#define ETHTOOL_GUFO 0x00000021
529#define ETHTOOL_SUFO 0x00000022
530#define ETHTOOL_GGSO 0x00000023
531#define ETHTOOL_SGSO 0x00000024
532#define ETHTOOL_GFLAGS 0x00000025
533#define ETHTOOL_SFLAGS 0x00000026
534#define ETHTOOL_GPFLAGS 0x00000027
535#define ETHTOOL_SPFLAGS 0x00000028
536
537#define ETHTOOL_GRXFH 0x00000029
538#define ETHTOOL_SRXFH 0x0000002a
539#define ETHTOOL_GGRO 0x0000002b
540#define ETHTOOL_SGRO 0x0000002c
541#define ETHTOOL_GRXRINGS 0x0000002d
542#define ETHTOOL_GRXCLSRLCNT 0x0000002e
543#define ETHTOOL_GRXCLSRULE 0x0000002f
544#define ETHTOOL_GRXCLSRLALL 0x00000030
545#define ETHTOOL_SRXCLSRLDEL 0x00000031
546#define ETHTOOL_SRXCLSRLINS 0x00000032
547
548
549#define SPARC_ETH_GSET ETHTOOL_GSET
550#define SPARC_ETH_SSET ETHTOOL_SSET
551
552
553#define SUPPORTED_10baseT_Half (1 << 0)
554#define SUPPORTED_10baseT_Full (1 << 1)
555#define SUPPORTED_100baseT_Half (1 << 2)
556#define SUPPORTED_100baseT_Full (1 << 3)
557#define SUPPORTED_1000baseT_Half (1 << 4)
558#define SUPPORTED_1000baseT_Full (1 << 5)
559#define SUPPORTED_Autoneg (1 << 6)
560#define SUPPORTED_TP (1 << 7)
561#define SUPPORTED_AUI (1 << 8)
562#define SUPPORTED_MII (1 << 9)
563#define SUPPORTED_FIBRE (1 << 10)
564#define SUPPORTED_BNC (1 << 11)
565#define SUPPORTED_10000baseT_Full (1 << 12)
566#define SUPPORTED_Pause (1 << 13)
567#define SUPPORTED_Asym_Pause (1 << 14)
568#define SUPPORTED_2500baseX_Full (1 << 15)
569#define SUPPORTED_Backplane (1 << 16)
570#define SUPPORTED_1000baseKX_Full (1 << 17)
571#define SUPPORTED_10000baseKX4_Full (1 << 18)
572#define SUPPORTED_10000baseKR_Full (1 << 19)
573#define SUPPORTED_10000baseR_FEC (1 << 20)
574
575
576#define ADVERTISED_10baseT_Half (1 << 0)
577#define ADVERTISED_10baseT_Full (1 << 1)
578#define ADVERTISED_100baseT_Half (1 << 2)
579#define ADVERTISED_100baseT_Full (1 << 3)
580#define ADVERTISED_1000baseT_Half (1 << 4)
581#define ADVERTISED_1000baseT_Full (1 << 5)
582#define ADVERTISED_Autoneg (1 << 6)
583#define ADVERTISED_TP (1 << 7)
584#define ADVERTISED_AUI (1 << 8)
585#define ADVERTISED_MII (1 << 9)
586#define ADVERTISED_FIBRE (1 << 10)
587#define ADVERTISED_BNC (1 << 11)
588#define ADVERTISED_10000baseT_Full (1 << 12)
589#define ADVERTISED_Pause (1 << 13)
590#define ADVERTISED_Asym_Pause (1 << 14)
591#define ADVERTISED_2500baseX_Full (1 << 15)
592#define ADVERTISED_Backplane (1 << 16)
593#define ADVERTISED_1000baseKX_Full (1 << 17)
594#define ADVERTISED_10000baseKX4_Full (1 << 18)
595#define ADVERTISED_10000baseKR_Full (1 << 19)
596#define ADVERTISED_10000baseR_FEC (1 << 20)
597
598
599
600
601
602
603
604
605#define SPEED_10 10
606#define SPEED_100 100
607#define SPEED_1000 1000
608#define SPEED_2500 2500
609#define SPEED_10000 10000
610
611
612#define DUPLEX_HALF 0x00
613#define DUPLEX_FULL 0x01
614
615
616#define PORT_TP 0x00
617#define PORT_AUI 0x01
618#define PORT_MII 0x02
619#define PORT_FIBRE 0x03
620#define PORT_BNC 0x04
621#define PORT_OTHER 0xff
622
623
624#define XCVR_INTERNAL 0x00
625#define XCVR_EXTERNAL 0x01
626#define XCVR_DUMMY1 0x02
627#define XCVR_DUMMY2 0x03
628#define XCVR_DUMMY3 0x04
629
630
631
632
633#define AUTONEG_DISABLE 0x00
634#define AUTONEG_ENABLE 0x01
635
636
637#define ETH_TP_MDI_INVALID 0x00
638#define ETH_TP_MDI 0x01
639#define ETH_TP_MDI_X 0x02
640
641
642#define WAKE_PHY (1 << 0)
643#define WAKE_UCAST (1 << 1)
644#define WAKE_MCAST (1 << 2)
645#define WAKE_BCAST (1 << 3)
646#define WAKE_ARP (1 << 4)
647#define WAKE_MAGIC (1 << 5)
648#define WAKE_MAGICSECURE (1 << 6)
649
650
651#define TCP_V4_FLOW 0x01
652#define UDP_V4_FLOW 0x02
653#define SCTP_V4_FLOW 0x03
654#define AH_ESP_V4_FLOW 0x04
655#define TCP_V6_FLOW 0x05
656#define UDP_V6_FLOW 0x06
657#define SCTP_V6_FLOW 0x07
658#define AH_ESP_V6_FLOW 0x08
659#define AH_V4_FLOW 0x09
660#define ESP_V4_FLOW 0x0a
661#define AH_V6_FLOW 0x0b
662#define ESP_V6_FLOW 0x0c
663#define IP_USER_FLOW 0x0d
664
665
666#define RXH_L2DA (1 << 1)
667#define RXH_VLAN (1 << 2)
668#define RXH_L3_PROTO (1 << 3)
669#define RXH_IP_SRC (1 << 4)
670#define RXH_IP_DST (1 << 5)
671#define RXH_L4_B_0_1 (1 << 6)
672#define RXH_L4_B_2_3 (1 << 7)
673#define RXH_DISCARD (1 << 31)
674
675#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
676
677#endif
678