1/*
2 * ethtool.h: Defines for Linux ethtool.
3 *
4 * Copyright (C) 1998 David S. Miller (davem@redhat.com)
5 * Copyright 2001 Jeff Garzik <jgarzik@mandrakesoft.com>
6 * Portions Copyright 2001 Sun Microsystems (thockin@sun.com)
7 * Portions Copyright 2002 Intel (eli.kupermann@intel.com,
8 *                                christopher.leech@intel.com,
9 *                                scott.feldman@intel.com)
10 */
11
12#ifndef _LINUX_ETHTOOL_H
13#define _LINUX_ETHTOOL_H
14
15/* This should work for both 32 and 64 bit userland. */
16struct ethtool_cmd {
17	u32	cmd;
18	u32	supported;	/* Features this interface supports */
19	u32	advertising;	/* Features this interface advertises */
20	u16	speed;		/* The forced speed, 10Mb, 100Mb, gigabit */
21	u8	duplex;		/* Duplex, half or full */
22	u8	port;		/* Which connector port */
23	u8	phy_address;
24	u8	transceiver;	/* Which tranceiver to use */
25	u8	autoneg;	/* Enable or disable autonegotiation */
26	u32	maxtxpkt;	/* Tx pkts before generating tx int */
27	u32	maxrxpkt;	/* Rx pkts before generating rx int */
28	u32	reserved[4];
29};
30
31#define ETHTOOL_BUSINFO_LEN	32
32/* these strings are set to whatever the driver author decides... */
33struct ethtool_drvinfo {
34	u32	cmd;
35	char	driver[32];	/* driver short name, "tulip", "eepro100" */
36	char	version[32];	/* driver version string */
37	char	fw_version[32];	/* firmware version string, if applicable */
38	char	bus_info[ETHTOOL_BUSINFO_LEN];	/* Bus info for this IF. */
39				/* For PCI devices, use pci_dev->slot_name. */
40	char	reserved1[32];
41	char	reserved2[16];
42	u32	n_stats;	/* number of u64's from ETHTOOL_GSTATS */
43	u32	testinfo_len;
44	u32	eedump_len;	/* Size of data from ETHTOOL_GEEPROM (bytes) */
45	u32	regdump_len;	/* Size of data from ETHTOOL_GREGS (bytes) */
46};
47
48#define SOPASS_MAX	6
49/* wake-on-lan settings */
50struct ethtool_wolinfo {
51	u32	cmd;
52	u32	supported;
53	u32	wolopts;
54	u8	sopass[SOPASS_MAX]; /* SecureOn(tm) password */
55};
56
57/* for passing single values */
58struct ethtool_value {
59	u32	cmd;
60	u32	data;
61};
62
63/* for passing big chunks of data */
64struct ethtool_regs {
65	u32	cmd;
66	u32	version; /* driver-specific, indicates different chips/revs */
67	u32	len; /* bytes */
68	u8	data[0];
69};
70
71/* for passing EEPROM chunks */
72struct ethtool_eeprom {
73	u32	cmd;
74	u32	magic;
75	u32	offset; /* in bytes */
76	u32	len; /* in bytes */
77	u8	data[0];
78};
79
80/* for configuring coalescing parameters of chip */
81struct ethtool_coalesce {
82	u32	cmd;	/* ETHTOOL_{G,S}COALESCE */
83
84	/* How many usecs to delay an RX interrupt after
85	 * a packet arrives.  If 0, only rx_max_coalesced_frames
86	 * is used.
87	 */
88	u32	rx_coalesce_usecs;
89
90	/* How many packets to delay an RX interrupt after
91	 * a packet arrives.  If 0, only rx_coalesce_usecs is
92	 * used.  It is illegal to set both usecs and max frames
93	 * to zero as this would cause RX interrupts to never be
94	 * generated.
95	 */
96	u32	rx_max_coalesced_frames;
97
98	/* Same as above two parameters, except that these values
99	 * apply while an IRQ is being services by the host.  Not
100	 * all cards support this feature and the values are ignored
101	 * in that case.
102	 */
103	u32	rx_coalesce_usecs_irq;
104	u32	rx_max_coalesced_frames_irq;
105
106	/* How many usecs to delay a TX interrupt after
107	 * a packet is sent.  If 0, only tx_max_coalesced_frames
108	 * is used.
109	 */
110	u32	tx_coalesce_usecs;
111
112	/* How many packets to delay a TX interrupt after
113	 * a packet is sent.  If 0, only tx_coalesce_usecs is
114	 * used.  It is illegal to set both usecs and max frames
115	 * to zero as this would cause TX interrupts to never be
116	 * generated.
117	 */
118	u32	tx_max_coalesced_frames;
119
120	/* Same as above two parameters, except that these values
121	 * apply while an IRQ is being services by the host.  Not
122	 * all cards support this feature and the values are ignored
123	 * in that case.
124	 */
125	u32	tx_coalesce_usecs_irq;
126	u32	tx_max_coalesced_frames_irq;
127
128	/* How many usecs to delay in-memory statistics
129	 * block updates.  Some drivers do not have an in-memory
130	 * statistic block, and in such cases this value is ignored.
131	 * This value must not be zero.
132	 */
133	u32	stats_block_coalesce_usecs;
134
135	/* Adaptive RX/TX coalescing is an algorithm implemented by
136	 * some drivers to improve latency under low packet rates and
137	 * improve throughput under high packet rates.  Some drivers
138	 * only implement one of RX or TX adaptive coalescing.  Anything
139	 * not implemented by the driver causes these values to be
140	 * silently ignored.
141	 */
142	u32	use_adaptive_rx_coalesce;
143	u32	use_adaptive_tx_coalesce;
144
145	/* When the packet rate (measured in packets per second)
146	 * is below pkt_rate_low, the {rx,tx}_*_low parameters are
147	 * used.
148	 */
149	u32	pkt_rate_low;
150	u32	rx_coalesce_usecs_low;
151	u32	rx_max_coalesced_frames_low;
152	u32	tx_coalesce_usecs_low;
153	u32	tx_max_coalesced_frames_low;
154
155	/* When the packet rate is below pkt_rate_high but above
156	 * pkt_rate_low (both measured in packets per second) the
157	 * normal {rx,tx}_* coalescing parameters are used.
158	 */
159
160	/* When the packet rate is (measured in packets per second)
161	 * is above pkt_rate_high, the {rx,tx}_*_high parameters are
162	 * used.
163	 */
164	u32	pkt_rate_high;
165	u32	rx_coalesce_usecs_high;
166	u32	rx_max_coalesced_frames_high;
167	u32	tx_coalesce_usecs_high;
168	u32	tx_max_coalesced_frames_high;
169
170	/* How often to do adaptive coalescing packet rate sampling,
171	 * measured in seconds.  Must not be zero.
172	 */
173	u32	rate_sample_interval;
174};
175
176/* for configuring RX/TX ring parameters */
177struct ethtool_ringparam {
178	u32	cmd;	/* ETHTOOL_{G,S}RINGPARAM */
179
180	/* Read only attributes.  These indicate the maximum number
181	 * of pending RX/TX ring entries the driver will allow the
182	 * user to set.
183	 */
184	u32	rx_max_pending;
185	u32	rx_mini_max_pending;
186	u32	rx_jumbo_max_pending;
187	u32	tx_max_pending;
188
189	/* Values changeable by the user.  The valid values are
190	 * in the range 1 to the "*_max_pending" counterpart above.
191	 */
192	u32	rx_pending;
193	u32	rx_mini_pending;
194	u32	rx_jumbo_pending;
195	u32	tx_pending;
196};
197
198/* for configuring link flow control parameters */
199struct ethtool_pauseparam {
200	u32	cmd;	/* ETHTOOL_{G,S}PAUSEPARAM */
201
202	/* If the link is being auto-negotiated (via ethtool_cmd.autoneg
203	 * being true) the user may set 'autonet' here non-zero to have the
204	 * pause parameters be auto-negotiated too.  In such a case, the
205	 * {rx,tx}_pause values below determine what capabilities are
206	 * advertised.
207	 *
208	 * If 'autoneg' is zero or the link is not being auto-negotiated,
209	 * then {rx,tx}_pause force the driver to use/not-use pause
210	 * flow control.
211	 */
212	u32	autoneg;
213	u32	rx_pause;
214	u32	tx_pause;
215};
216
217#define ETH_GSTRING_LEN		32
218enum ethtool_stringset {
219	ETH_SS_TEST		= 0,
220	ETH_SS_STATS,
221};
222
223/* for passing string sets for data tagging */
224struct ethtool_gstrings {
225	u32	cmd;		/* ETHTOOL_GSTRINGS */
226	u32	string_set;	/* string set id e.c. ETH_SS_TEST, etc*/
227	u32	len;		/* number of strings in the string set */
228	u8	data[0];
229};
230
231enum ethtool_test_flags {
232	ETH_TEST_FL_OFFLINE	= (1 << 0),	/* online / offline */
233	ETH_TEST_FL_FAILED	= (1 << 1),	/* test passed / failed */
234};
235
236/* for requesting NIC test and getting results*/
237struct ethtool_test {
238	u32	cmd;		/* ETHTOOL_TEST */
239	u32	flags;		/* ETH_TEST_FL_xxx */
240	u32	reserved;
241	u32	len;		/* result length, in number of u64 elements */
242	u64	data[0];
243};
244
245/* for dumping NIC-specific statistics */
246struct ethtool_stats {
247	u32	cmd;		/* ETHTOOL_GSTATS */
248	u32	n_stats;	/* number of u64's being returned */
249	u64	data[0];
250};
251
252/* CMDs currently supported */
253#define ETHTOOL_GSET		0x00000001 /* Get settings. */
254#define ETHTOOL_SSET		0x00000002 /* Set settings, privileged. */
255#define ETHTOOL_GDRVINFO	0x00000003 /* Get driver info. */
256#define ETHTOOL_GREGS		0x00000004 /* Get NIC registers, privileged. */
257#define ETHTOOL_GWOL		0x00000005 /* Get wake-on-lan options. */
258#define ETHTOOL_SWOL		0x00000006 /* Set wake-on-lan options, priv. */
259#define ETHTOOL_GMSGLVL		0x00000007 /* Get driver message level */
260#define ETHTOOL_SMSGLVL		0x00000008 /* Set driver msg level, priv. */
261#define ETHTOOL_NWAY_RST	0x00000009 /* Restart autonegotiation, priv. */
262#define ETHTOOL_GLINK		0x0000000a /* Get link status (ethtool_value) */
263#define ETHTOOL_GEEPROM		0x0000000b /* Get EEPROM data */
264#define ETHTOOL_SEEPROM		0x0000000c /* Set EEPROM data, priv. */
265#define ETHTOOL_GCOALESCE	0x0000000e /* Get coalesce config */
266#define ETHTOOL_SCOALESCE	0x0000000f /* Set coalesce config, priv. */
267#define ETHTOOL_GRINGPARAM	0x00000010 /* Get ring parameters */
268#define ETHTOOL_SRINGPARAM	0x00000011 /* Set ring parameters, priv. */
269#define ETHTOOL_GPAUSEPARAM	0x00000012 /* Get pause parameters */
270#define ETHTOOL_SPAUSEPARAM	0x00000013 /* Set pause parameters, priv. */
271#define ETHTOOL_GRXCSUM		0x00000014 /* Get RX hw csum enable (ethtool_value) */
272#define ETHTOOL_SRXCSUM		0x00000015 /* Set RX hw csum enable (ethtool_value) */
273#define ETHTOOL_GTXCSUM		0x00000016 /* Get TX hw csum enable (ethtool_value) */
274#define ETHTOOL_STXCSUM		0x00000017 /* Set TX hw csum enable (ethtool_value) */
275#define ETHTOOL_GSG		0x00000018 /* Get scatter-gather enable
276					    * (ethtool_value) */
277#define ETHTOOL_SSG		0x00000019 /* Set scatter-gather enable
278					    * (ethtool_value), priv. */
279#define ETHTOOL_TEST		0x0000001a /* execute NIC self-test, priv. */
280#define ETHTOOL_GSTRINGS	0x0000001b /* get specified string set */
281#define ETHTOOL_PHYS_ID		0x0000001c /* identify the NIC */
282#define ETHTOOL_GSTATS		0x0000001d /* get NIC-specific statistics */
283#define ETHTOOL_GTSO		0x0000001e /* Get TSO enable (ethtool_value) */
284#define ETHTOOL_STSO		0x0000001f /* Set TSO enable (ethtool_value) */
285
286/* compatibility with older code */
287#define SPARC_ETH_GSET		ETHTOOL_GSET
288#define SPARC_ETH_SSET		ETHTOOL_SSET
289
290/* Indicates what features are supported by the interface. */
291#define SUPPORTED_10baseT_Half		(1 << 0)
292#define SUPPORTED_10baseT_Full		(1 << 1)
293#define SUPPORTED_100baseT_Half		(1 << 2)
294#define SUPPORTED_100baseT_Full		(1 << 3)
295#define SUPPORTED_1000baseT_Half	(1 << 4)
296#define SUPPORTED_1000baseT_Full	(1 << 5)
297#define SUPPORTED_Autoneg		(1 << 6)
298#define SUPPORTED_TP			(1 << 7)
299#define SUPPORTED_AUI			(1 << 8)
300#define SUPPORTED_MII			(1 << 9)
301#define SUPPORTED_FIBRE			(1 << 10)
302#define SUPPORTED_BNC			(1 << 11)
303#define SUPPORTED_10000baseT_Full	(1 << 12)
304
305/* Indicates what features are advertised by the interface. */
306#define ADVERTISED_10baseT_Half		(1 << 0)
307#define ADVERTISED_10baseT_Full		(1 << 1)
308#define ADVERTISED_100baseT_Half	(1 << 2)
309#define ADVERTISED_100baseT_Full	(1 << 3)
310#define ADVERTISED_1000baseT_Half	(1 << 4)
311#define ADVERTISED_1000baseT_Full	(1 << 5)
312#define ADVERTISED_Autoneg		(1 << 6)
313#define ADVERTISED_TP			(1 << 7)
314#define ADVERTISED_AUI			(1 << 8)
315#define ADVERTISED_MII			(1 << 9)
316#define ADVERTISED_FIBRE		(1 << 10)
317#define ADVERTISED_BNC			(1 << 11)
318#define ADVERTISED_10000baseT_Full	(1 << 12)
319
320/* The following are all involved in forcing a particular link
321 * mode for the device for setting things.  When getting the
322 * devices settings, these indicate the current mode and whether
323 * it was foced up into this mode or autonegotiated.
324 */
325
326/* The forced speed, 10Mb, 100Mb, gigabit, 10GbE. */
327#define SPEED_10		10
328#define SPEED_100		100
329#define SPEED_1000		1000
330#define SPEED_10000		10000
331
332/* Duplex, half or full. */
333#define DUPLEX_HALF		0x00
334#define DUPLEX_FULL		0x01
335
336/* Which connector port. */
337#define PORT_TP			0x00
338#define PORT_AUI		0x01
339#define PORT_MII		0x02
340#define PORT_FIBRE		0x03
341#define PORT_BNC		0x04
342
343/* Which tranceiver to use. */
344#define XCVR_INTERNAL		0x00
345#define XCVR_EXTERNAL		0x01
346#define XCVR_DUMMY1		0x02
347#define XCVR_DUMMY2		0x03
348#define XCVR_DUMMY3		0x04
349
350/* Enable or disable autonegotiation.  If this is set to enable,
351 * the forced link modes above are completely ignored.
352 */
353#define AUTONEG_DISABLE		0x00
354#define AUTONEG_ENABLE		0x01
355
356/* Wake-On-Lan options. */
357#define WAKE_PHY		(1 << 0)
358#define WAKE_UCAST		(1 << 1)
359#define WAKE_MCAST		(1 << 2)
360#define WAKE_BCAST		(1 << 3)
361#define WAKE_ARP		(1 << 4)
362#define WAKE_MAGIC		(1 << 5)
363#define WAKE_MAGICSECURE	(1 << 6) /* only meaningful if WAKE_MAGIC */
364
365#endif /* _LINUX_ETHTOOL_H */
366