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#define ETHTOOL_FLASH_MAX_FILENAME 128
366enum ethtool_flash_op_type {
367 ETHTOOL_FLASH_ALL_REGIONS = 0,
368};
369
370
371struct ethtool_flash {
372 __u32 cmd;
373 __u32 region;
374 char data[ETHTOOL_FLASH_MAX_FILENAME];
375};
376
377#ifdef __KERNEL__
378
379struct net_device;
380
381
382u32 ethtool_op_get_link(struct net_device *dev);
383u32 ethtool_op_get_rx_csum(struct net_device *dev);
384u32 ethtool_op_get_tx_csum(struct net_device *dev);
385int ethtool_op_set_tx_csum(struct net_device *dev, u32 data);
386int ethtool_op_set_tx_hw_csum(struct net_device *dev, u32 data);
387int ethtool_op_set_tx_ipv6_csum(struct net_device *dev, u32 data);
388u32 ethtool_op_get_sg(struct net_device *dev);
389int ethtool_op_set_sg(struct net_device *dev, u32 data);
390u32 ethtool_op_get_tso(struct net_device *dev);
391int ethtool_op_set_tso(struct net_device *dev, u32 data);
392u32 ethtool_op_get_ufo(struct net_device *dev);
393int ethtool_op_set_ufo(struct net_device *dev, u32 data);
394u32 ethtool_op_get_flags(struct net_device *dev);
395int ethtool_op_set_flags(struct net_device *dev, u32 data);
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
443
444
445
446
447
448
449
450
451
452
453
454
455
456struct ethtool_ops {
457 int (*get_settings)(struct net_device *, struct ethtool_cmd *);
458 int (*set_settings)(struct net_device *, struct ethtool_cmd *);
459 void (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);
460 int (*get_regs_len)(struct net_device *);
461 void (*get_regs)(struct net_device *, struct ethtool_regs *, void *);
462 void (*get_wol)(struct net_device *, struct ethtool_wolinfo *);
463 int (*set_wol)(struct net_device *, struct ethtool_wolinfo *);
464 u32 (*get_msglevel)(struct net_device *);
465 void (*set_msglevel)(struct net_device *, u32);
466 int (*nway_reset)(struct net_device *);
467 u32 (*get_link)(struct net_device *);
468 int (*get_eeprom_len)(struct net_device *);
469 int (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
470 int (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);
471 int (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);
472 int (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);
473 void (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);
474 int (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);
475 void (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam*);
476 int (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam*);
477 u32 (*get_rx_csum)(struct net_device *);
478 int (*set_rx_csum)(struct net_device *, u32);
479 u32 (*get_tx_csum)(struct net_device *);
480 int (*set_tx_csum)(struct net_device *, u32);
481 u32 (*get_sg)(struct net_device *);
482 int (*set_sg)(struct net_device *, u32);
483 u32 (*get_tso)(struct net_device *);
484 int (*set_tso)(struct net_device *, u32);
485 void (*self_test)(struct net_device *, struct ethtool_test *, u64 *);
486 void (*get_strings)(struct net_device *, u32 stringset, u8 *);
487 int (*phys_id)(struct net_device *, u32);
488 void (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);
489 int (*begin)(struct net_device *);
490 void (*complete)(struct net_device *);
491 u32 (*get_ufo)(struct net_device *);
492 int (*set_ufo)(struct net_device *, u32);
493 u32 (*get_flags)(struct net_device *);
494 int (*set_flags)(struct net_device *, u32);
495 u32 (*get_priv_flags)(struct net_device *);
496 int (*set_priv_flags)(struct net_device *, u32);
497 int (*get_sset_count)(struct net_device *, int);
498
499
500 int (*self_test_count)(struct net_device *);
501 int (*get_stats_count)(struct net_device *);
502 int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *);
503 int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
504 int (*flash_device)(struct net_device *, struct ethtool_flash *);
505};
506#endif
507
508
509#define ETHTOOL_GSET 0x00000001
510#define ETHTOOL_SSET 0x00000002
511#define ETHTOOL_GDRVINFO 0x00000003
512#define ETHTOOL_GREGS 0x00000004
513#define ETHTOOL_GWOL 0x00000005
514#define ETHTOOL_SWOL 0x00000006
515#define ETHTOOL_GMSGLVL 0x00000007
516#define ETHTOOL_SMSGLVL 0x00000008
517#define ETHTOOL_NWAY_RST 0x00000009
518#define ETHTOOL_GLINK 0x0000000a
519#define ETHTOOL_GEEPROM 0x0000000b
520#define ETHTOOL_SEEPROM 0x0000000c
521#define ETHTOOL_GCOALESCE 0x0000000e
522#define ETHTOOL_SCOALESCE 0x0000000f
523#define ETHTOOL_GRINGPARAM 0x00000010
524#define ETHTOOL_SRINGPARAM 0x00000011
525#define ETHTOOL_GPAUSEPARAM 0x00000012
526#define ETHTOOL_SPAUSEPARAM 0x00000013
527#define ETHTOOL_GRXCSUM 0x00000014
528#define ETHTOOL_SRXCSUM 0x00000015
529#define ETHTOOL_GTXCSUM 0x00000016
530#define ETHTOOL_STXCSUM 0x00000017
531#define ETHTOOL_GSG 0x00000018
532
533#define ETHTOOL_SSG 0x00000019
534
535#define ETHTOOL_TEST 0x0000001a
536#define ETHTOOL_GSTRINGS 0x0000001b
537#define ETHTOOL_PHYS_ID 0x0000001c
538#define ETHTOOL_GSTATS 0x0000001d
539#define ETHTOOL_GTSO 0x0000001e
540#define ETHTOOL_STSO 0x0000001f
541#define ETHTOOL_GPERMADDR 0x00000020
542#define ETHTOOL_GUFO 0x00000021
543#define ETHTOOL_SUFO 0x00000022
544#define ETHTOOL_GGSO 0x00000023
545#define ETHTOOL_SGSO 0x00000024
546#define ETHTOOL_GFLAGS 0x00000025
547#define ETHTOOL_SFLAGS 0x00000026
548#define ETHTOOL_GPFLAGS 0x00000027
549#define ETHTOOL_SPFLAGS 0x00000028
550
551#define ETHTOOL_GRXFH 0x00000029
552#define ETHTOOL_SRXFH 0x0000002a
553#define ETHTOOL_GGRO 0x0000002b
554#define ETHTOOL_SGRO 0x0000002c
555#define ETHTOOL_GRXRINGS 0x0000002d
556#define ETHTOOL_GRXCLSRLCNT 0x0000002e
557#define ETHTOOL_GRXCLSRULE 0x0000002f
558#define ETHTOOL_GRXCLSRLALL 0x00000030
559#define ETHTOOL_SRXCLSRLDEL 0x00000031
560#define ETHTOOL_SRXCLSRLINS 0x00000032
561#define ETHTOOL_FLASHDEV 0x00000033
562
563
564#define SPARC_ETH_GSET ETHTOOL_GSET
565#define SPARC_ETH_SSET ETHTOOL_SSET
566
567
568#define SUPPORTED_10baseT_Half (1 << 0)
569#define SUPPORTED_10baseT_Full (1 << 1)
570#define SUPPORTED_100baseT_Half (1 << 2)
571#define SUPPORTED_100baseT_Full (1 << 3)
572#define SUPPORTED_1000baseT_Half (1 << 4)
573#define SUPPORTED_1000baseT_Full (1 << 5)
574#define SUPPORTED_Autoneg (1 << 6)
575#define SUPPORTED_TP (1 << 7)
576#define SUPPORTED_AUI (1 << 8)
577#define SUPPORTED_MII (1 << 9)
578#define SUPPORTED_FIBRE (1 << 10)
579#define SUPPORTED_BNC (1 << 11)
580#define SUPPORTED_10000baseT_Full (1 << 12)
581#define SUPPORTED_Pause (1 << 13)
582#define SUPPORTED_Asym_Pause (1 << 14)
583#define SUPPORTED_2500baseX_Full (1 << 15)
584#define SUPPORTED_Backplane (1 << 16)
585#define SUPPORTED_1000baseKX_Full (1 << 17)
586#define SUPPORTED_10000baseKX4_Full (1 << 18)
587#define SUPPORTED_10000baseKR_Full (1 << 19)
588#define SUPPORTED_10000baseR_FEC (1 << 20)
589
590
591#define ADVERTISED_10baseT_Half (1 << 0)
592#define ADVERTISED_10baseT_Full (1 << 1)
593#define ADVERTISED_100baseT_Half (1 << 2)
594#define ADVERTISED_100baseT_Full (1 << 3)
595#define ADVERTISED_1000baseT_Half (1 << 4)
596#define ADVERTISED_1000baseT_Full (1 << 5)
597#define ADVERTISED_Autoneg (1 << 6)
598#define ADVERTISED_TP (1 << 7)
599#define ADVERTISED_AUI (1 << 8)
600#define ADVERTISED_MII (1 << 9)
601#define ADVERTISED_FIBRE (1 << 10)
602#define ADVERTISED_BNC (1 << 11)
603#define ADVERTISED_10000baseT_Full (1 << 12)
604#define ADVERTISED_Pause (1 << 13)
605#define ADVERTISED_Asym_Pause (1 << 14)
606#define ADVERTISED_2500baseX_Full (1 << 15)
607#define ADVERTISED_Backplane (1 << 16)
608#define ADVERTISED_1000baseKX_Full (1 << 17)
609#define ADVERTISED_10000baseKX4_Full (1 << 18)
610#define ADVERTISED_10000baseKR_Full (1 << 19)
611#define ADVERTISED_10000baseR_FEC (1 << 20)
612
613
614
615
616
617
618
619
620#define SPEED_10 10
621#define SPEED_100 100
622#define SPEED_1000 1000
623#define SPEED_2500 2500
624#define SPEED_10000 10000
625
626
627#define DUPLEX_HALF 0x00
628#define DUPLEX_FULL 0x01
629
630
631#define PORT_TP 0x00
632#define PORT_AUI 0x01
633#define PORT_MII 0x02
634#define PORT_FIBRE 0x03
635#define PORT_BNC 0x04
636#define PORT_OTHER 0xff
637
638
639#define XCVR_INTERNAL 0x00
640#define XCVR_EXTERNAL 0x01
641#define XCVR_DUMMY1 0x02
642#define XCVR_DUMMY2 0x03
643#define XCVR_DUMMY3 0x04
644
645
646
647
648#define AUTONEG_DISABLE 0x00
649#define AUTONEG_ENABLE 0x01
650
651
652#define ETH_TP_MDI_INVALID 0x00
653#define ETH_TP_MDI 0x01
654#define ETH_TP_MDI_X 0x02
655
656
657#define WAKE_PHY (1 << 0)
658#define WAKE_UCAST (1 << 1)
659#define WAKE_MCAST (1 << 2)
660#define WAKE_BCAST (1 << 3)
661#define WAKE_ARP (1 << 4)
662#define WAKE_MAGIC (1 << 5)
663#define WAKE_MAGICSECURE (1 << 6)
664
665
666#define TCP_V4_FLOW 0x01
667#define UDP_V4_FLOW 0x02
668#define SCTP_V4_FLOW 0x03
669#define AH_ESP_V4_FLOW 0x04
670#define TCP_V6_FLOW 0x05
671#define UDP_V6_FLOW 0x06
672#define SCTP_V6_FLOW 0x07
673#define AH_ESP_V6_FLOW 0x08
674#define AH_V4_FLOW 0x09
675#define ESP_V4_FLOW 0x0a
676#define AH_V6_FLOW 0x0b
677#define ESP_V6_FLOW 0x0c
678#define IP_USER_FLOW 0x0d
679
680
681#define RXH_L2DA (1 << 1)
682#define RXH_VLAN (1 << 2)
683#define RXH_L3_PROTO (1 << 3)
684#define RXH_IP_SRC (1 << 4)
685#define RXH_IP_DST (1 << 5)
686#define RXH_L4_B_0_1 (1 << 6)
687#define RXH_L4_B_2_3 (1 << 7)
688#define RXH_DISCARD (1 << 31)
689
690#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
691
692#endif
693