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