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