• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/usr/include/linux/
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@pobox.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 * Portions Copyright (C) Sun Microsystems 2008
11 */
12
13#ifndef _LINUX_ETHTOOL_H
14#define _LINUX_ETHTOOL_H
15
16#include <linux/types.h>
17
18/* This should work for both 32 and 64 bit userland. */
19struct ethtool_cmd {
20	__u32	cmd;
21	__u32	supported;	/* Features this interface supports */
22	__u32	advertising;	/* Features this interface advertises */
23	__u16	speed;		/* The forced speed, 10Mb, 100Mb, gigabit */
24	__u8	duplex;		/* Duplex, half or full */
25	__u8	port;		/* Which connector port */
26	__u8	phy_address;
27	__u8	transceiver;	/* Which transceiver to use */
28	__u8	autoneg;	/* Enable or disable autonegotiation */
29	__u8	mdio_support;
30	__u32	maxtxpkt;	/* Tx pkts before generating tx int */
31	__u32	maxrxpkt;	/* Rx pkts before generating rx int */
32	__u16	speed_hi;
33	__u8	eth_tp_mdix;
34	__u8	reserved2;
35	__u32	lp_advertising;	/* Features the link partner advertises */
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/* these strings are set to whatever the driver author decides... */
55struct ethtool_drvinfo {
56	__u32	cmd;
57	char	driver[32];	/* driver short name, "tulip", "eepro100" */
58	char	version[32];	/* driver version string */
59	char	fw_version[ETHTOOL_FWVERS_LEN];	/* firmware version string */
60	char	bus_info[ETHTOOL_BUSINFO_LEN];	/* Bus info for this IF. */
61				/* For PCI devices, use pci_name(pci_dev). */
62	char	reserved1[32];
63	char	reserved2[12];
64				/*
65				 * Some struct members below are filled in
66				 * using ops->get_sset_count().  Obtaining
67				 * this info from ethtool_drvinfo is now
68				 * deprecated; Use ETHTOOL_GSSET_INFO
69				 * instead.
70				 */
71	__u32	n_priv_flags;	/* number of flags valid in ETHTOOL_GPFLAGS */
72	__u32	n_stats;	/* number of u64's from ETHTOOL_GSTATS */
73	__u32	testinfo_len;
74	__u32	eedump_len;	/* Size of data from ETHTOOL_GEEPROM (bytes) */
75	__u32	regdump_len;	/* Size of data from ETHTOOL_GREGS (bytes) */
76};
77
78#define SOPASS_MAX	6
79/* wake-on-lan settings */
80struct ethtool_wolinfo {
81	__u32	cmd;
82	__u32	supported;
83	__u32	wolopts;
84	__u8	sopass[SOPASS_MAX]; /* SecureOn(tm) password */
85};
86
87/* for passing single values */
88struct ethtool_value {
89	__u32	cmd;
90	__u32	data;
91};
92
93/* for passing big chunks of data */
94struct ethtool_regs {
95	__u32	cmd;
96	__u32	version; /* driver-specific, indicates different chips/revs */
97	__u32	len; /* bytes */
98	__u8	data[0];
99};
100
101/* for passing EEPROM chunks */
102struct ethtool_eeprom {
103	__u32	cmd;
104	__u32	magic;
105	__u32	offset; /* in bytes */
106	__u32	len; /* in bytes */
107	__u8	data[0];
108};
109
110/* for configuring coalescing parameters of chip */
111struct ethtool_coalesce {
112	__u32	cmd;	/* ETHTOOL_{G,S}COALESCE */
113
114	/* How many usecs to delay an RX interrupt after
115	 * a packet arrives.  If 0, only rx_max_coalesced_frames
116	 * is used.
117	 */
118	__u32	rx_coalesce_usecs;
119
120	/* How many packets to delay an RX interrupt after
121	 * a packet arrives.  If 0, only rx_coalesce_usecs is
122	 * used.  It is illegal to set both usecs and max frames
123	 * to zero as this would cause RX interrupts to never be
124	 * generated.
125	 */
126	__u32	rx_max_coalesced_frames;
127
128	/* Same as above two parameters, except that these values
129	 * apply while an IRQ is being serviced by the host.  Not
130	 * all cards support this feature and the values are ignored
131	 * in that case.
132	 */
133	__u32	rx_coalesce_usecs_irq;
134	__u32	rx_max_coalesced_frames_irq;
135
136	/* How many usecs to delay a TX interrupt after
137	 * a packet is sent.  If 0, only tx_max_coalesced_frames
138	 * is used.
139	 */
140	__u32	tx_coalesce_usecs;
141
142	/* How many packets to delay a TX interrupt after
143	 * a packet is sent.  If 0, only tx_coalesce_usecs is
144	 * used.  It is illegal to set both usecs and max frames
145	 * to zero as this would cause TX interrupts to never be
146	 * generated.
147	 */
148	__u32	tx_max_coalesced_frames;
149
150	/* Same as above two parameters, except that these values
151	 * apply while an IRQ is being serviced by the host.  Not
152	 * all cards support this feature and the values are ignored
153	 * in that case.
154	 */
155	__u32	tx_coalesce_usecs_irq;
156	__u32	tx_max_coalesced_frames_irq;
157
158	/* How many usecs to delay in-memory statistics
159	 * block updates.  Some drivers do not have an in-memory
160	 * statistic block, and in such cases this value is ignored.
161	 * This value must not be zero.
162	 */
163	__u32	stats_block_coalesce_usecs;
164
165	/* Adaptive RX/TX coalescing is an algorithm implemented by
166	 * some drivers to improve latency under low packet rates and
167	 * improve throughput under high packet rates.  Some drivers
168	 * only implement one of RX or TX adaptive coalescing.  Anything
169	 * not implemented by the driver causes these values to be
170	 * silently ignored.
171	 */
172	__u32	use_adaptive_rx_coalesce;
173	__u32	use_adaptive_tx_coalesce;
174
175	/* When the packet rate (measured in packets per second)
176	 * is below pkt_rate_low, the {rx,tx}_*_low parameters are
177	 * used.
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	/* When the packet rate is below pkt_rate_high but above
186	 * pkt_rate_low (both measured in packets per second) the
187	 * normal {rx,tx}_* coalescing parameters are used.
188	 */
189
190	/* When the packet rate is (measured in packets per second)
191	 * is above pkt_rate_high, the {rx,tx}_*_high parameters are
192	 * used.
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	/* How often to do adaptive coalescing packet rate sampling,
201	 * measured in seconds.  Must not be zero.
202	 */
203	__u32	rate_sample_interval;
204};
205
206/* for configuring RX/TX ring parameters */
207struct ethtool_ringparam {
208	__u32	cmd;	/* ETHTOOL_{G,S}RINGPARAM */
209
210	/* Read only attributes.  These indicate the maximum number
211	 * of pending RX/TX ring entries the driver will allow the
212	 * user to set.
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	/* Values changeable by the user.  The valid values are
220	 * in the range 1 to the "*_max_pending" counterpart above.
221	 */
222	__u32	rx_pending;
223	__u32	rx_mini_pending;
224	__u32	rx_jumbo_pending;
225	__u32	tx_pending;
226};
227
228/* for configuring link flow control parameters */
229struct ethtool_pauseparam {
230	__u32	cmd;	/* ETHTOOL_{G,S}PAUSEPARAM */
231
232	/* If the link is being auto-negotiated (via ethtool_cmd.autoneg
233	 * being true) the user may set 'autonet' here non-zero to have the
234	 * pause parameters be auto-negotiated too.  In such a case, the
235	 * {rx,tx}_pause values below determine what capabilities are
236	 * advertised.
237	 *
238	 * If 'autoneg' is zero or the link is not being auto-negotiated,
239	 * then {rx,tx}_pause force the driver to use/not-use pause
240	 * flow control.
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/* for passing string sets for data tagging */
256struct ethtool_gstrings {
257	__u32	cmd;		/* ETHTOOL_GSTRINGS */
258	__u32	string_set;	/* string set id e.c. ETH_SS_TEST, etc*/
259	__u32	len;		/* number of strings in the string set */
260	__u8	data[0];
261};
262
263struct ethtool_sset_info {
264	__u32	cmd;		/* ETHTOOL_GSSET_INFO */
265	__u32	reserved;
266	__u64	sset_mask;	/* input: each bit selects an sset to query */
267				/* output: each bit a returned sset */
268	__u32	data[0];	/* ETH_SS_xxx count, in order, based on bits
269				   in sset_mask.  One bit implies one
270				   __u32, two bits implies two
271				   __u32's, etc. */
272};
273
274enum ethtool_test_flags {
275	ETH_TEST_FL_OFFLINE	= (1 << 0),	/* online / offline */
276	ETH_TEST_FL_FAILED	= (1 << 1),	/* test passed / failed */
277};
278
279/* for requesting NIC test and getting results*/
280struct ethtool_test {
281	__u32	cmd;		/* ETHTOOL_TEST */
282	__u32	flags;		/* ETH_TEST_FL_xxx */
283	__u32	reserved;
284	__u32	len;		/* result length, in number of u64 elements */
285	__u64	data[0];
286};
287
288/* for dumping NIC-specific statistics */
289struct ethtool_stats {
290	__u32	cmd;		/* ETHTOOL_GSTATS */
291	__u32	n_stats;	/* number of u64's being returned */
292	__u64	data[0];
293};
294
295struct ethtool_perm_addr {
296	__u32	cmd;		/* ETHTOOL_GPERMADDR */
297	__u32	size;
298	__u8	data[0];
299};
300
301/* boolean flags controlling per-interface behavior characteristics.
302 * When reading, the flag indicates whether or not a certain behavior
303 * is enabled/present.  When writing, the flag indicates whether
304 * or not the driver should turn on (set) or off (clear) a behavior.
305 *
306 * Some behaviors may read-only (unconditionally absent or present).
307 * If such is the case, return EINVAL in the set-flags operation if the
308 * flag differs from the read-only value.
309 */
310enum ethtool_flags {
311	ETH_FLAG_LRO		= (1 << 15),	/* LRO is enabled */
312	ETH_FLAG_NTUPLE		= (1 << 27),	/* N-tuple filters enabled */
313	ETH_FLAG_RXHASH		= (1 << 28),
314};
315
316/* The following structures are for supporting RX network flow
317 * classification configuration. Note, all multibyte fields, e.g.,
318 * ip4src, ip4dst, psrc, pdst, spi, etc. are expected to be in network
319 * byte order.
320 */
321struct ethtool_tcpip4_spec {
322	__be32	ip4src;
323	__be32	ip4dst;
324	__be16	psrc;
325	__be16	pdst;
326	__u8    tos;
327};
328
329struct ethtool_ah_espip4_spec {
330	__be32	ip4src;
331	__be32	ip4dst;
332	__be32	spi;
333	__u8    tos;
334};
335
336struct ethtool_rawip4_spec {
337	__be32	ip4src;
338	__be32	ip4dst;
339	__u8	hdata[64];
340};
341
342struct ethtool_ether_spec {
343	__be16	ether_type;
344	__u8	frame_size;
345	__u8	eframe[16];
346};
347
348#define	ETH_RX_NFC_IP4	1
349#define	ETH_RX_NFC_IP6	2
350
351struct ethtool_usrip4_spec {
352	__be32	ip4src;
353	__be32	ip4dst;
354	__be32	l4_4_bytes;
355	__u8    tos;
356	__u8    ip_ver;
357	__u8    proto;
358};
359
360struct ethtool_rx_flow_spec {
361	__u32		flow_type;
362	union {
363		struct ethtool_tcpip4_spec		tcp_ip4_spec;
364		struct ethtool_tcpip4_spec		udp_ip4_spec;
365		struct ethtool_tcpip4_spec		sctp_ip4_spec;
366		struct ethtool_ah_espip4_spec		ah_ip4_spec;
367		struct ethtool_ah_espip4_spec		esp_ip4_spec;
368		struct ethtool_rawip4_spec		raw_ip4_spec;
369		struct ethtool_ether_spec		ether_spec;
370		struct ethtool_usrip4_spec		usr_ip4_spec;
371		__u8					hdata[64];
372	} h_u, m_u; /* entry, mask */
373	__u64		ring_cookie;
374	__u32		location;
375};
376
377struct ethtool_rxnfc {
378	__u32				cmd;
379	__u32				flow_type;
380	/* The rx flow hash value or the rule DB size */
381	__u64				data;
382	/* The following fields are not valid and must not be used for
383	 * the ETHTOOL_{G,X}RXFH commands. */
384	struct ethtool_rx_flow_spec	fs;
385	__u32				rule_cnt;
386	__u32				rule_locs[0];
387};
388
389struct ethtool_rxfh_indir {
390	__u32	cmd;
391	/* On entry, this is the array size of the user buffer.  On
392	 * return from ETHTOOL_GRXFHINDIR, this is the array size of
393	 * the hardware indirection table. */
394	__u32	size;
395	__u32	ring_index[0];	/* ring/queue index for each hash value */
396};
397
398struct ethtool_rx_ntuple_flow_spec {
399	__u32		 flow_type;
400	union {
401		struct ethtool_tcpip4_spec		tcp_ip4_spec;
402		struct ethtool_tcpip4_spec		udp_ip4_spec;
403		struct ethtool_tcpip4_spec		sctp_ip4_spec;
404		struct ethtool_ah_espip4_spec		ah_ip4_spec;
405		struct ethtool_ah_espip4_spec		esp_ip4_spec;
406		struct ethtool_rawip4_spec		raw_ip4_spec;
407		struct ethtool_ether_spec		ether_spec;
408		struct ethtool_usrip4_spec		usr_ip4_spec;
409		__u8					hdata[64];
410	} h_u, m_u; /* entry, mask */
411
412	__u16	        vlan_tag;
413	__u16	        vlan_tag_mask;
414	__u64		data;      /* user-defined flow spec data */
415	__u64		data_mask; /* user-defined flow spec mask */
416
417	/* signed to distinguish between queue and actions (DROP) */
418	__s32		action;
419#define ETHTOOL_RXNTUPLE_ACTION_DROP -1
420};
421
422struct ethtool_rx_ntuple {
423	__u32					cmd;
424	struct ethtool_rx_ntuple_flow_spec	fs;
425};
426
427#define ETHTOOL_FLASH_MAX_FILENAME	128
428enum ethtool_flash_op_type {
429	ETHTOOL_FLASH_ALL_REGIONS	= 0,
430};
431
432/* for passing firmware flashing related parameters */
433struct ethtool_flash {
434	__u32	cmd;
435	__u32	region;
436	char	data[ETHTOOL_FLASH_MAX_FILENAME];
437};
438
439
440/* CMDs currently supported */
441#define ETHTOOL_GSET		0x00000001 /* Get settings. */
442#define ETHTOOL_SSET		0x00000002 /* Set settings. */
443#define ETHTOOL_GDRVINFO	0x00000003 /* Get driver info. */
444#define ETHTOOL_GREGS		0x00000004 /* Get NIC registers. */
445#define ETHTOOL_GWOL		0x00000005 /* Get wake-on-lan options. */
446#define ETHTOOL_SWOL		0x00000006 /* Set wake-on-lan options. */
447#define ETHTOOL_GMSGLVL		0x00000007 /* Get driver message level */
448#define ETHTOOL_SMSGLVL		0x00000008 /* Set driver msg level. */
449#define ETHTOOL_NWAY_RST	0x00000009 /* Restart autonegotiation. */
450#define ETHTOOL_GLINK		0x0000000a /* Get link status (ethtool_value) */
451#define ETHTOOL_GEEPROM		0x0000000b /* Get EEPROM data */
452#define ETHTOOL_SEEPROM		0x0000000c /* Set EEPROM data. */
453#define ETHTOOL_GCOALESCE	0x0000000e /* Get coalesce config */
454#define ETHTOOL_SCOALESCE	0x0000000f /* Set coalesce config. */
455#define ETHTOOL_GRINGPARAM	0x00000010 /* Get ring parameters */
456#define ETHTOOL_SRINGPARAM	0x00000011 /* Set ring parameters. */
457#define ETHTOOL_GPAUSEPARAM	0x00000012 /* Get pause parameters */
458#define ETHTOOL_SPAUSEPARAM	0x00000013 /* Set pause parameters. */
459#define ETHTOOL_GRXCSUM		0x00000014 /* Get RX hw csum enable (ethtool_value) */
460#define ETHTOOL_SRXCSUM		0x00000015 /* Set RX hw csum enable (ethtool_value) */
461#define ETHTOOL_GTXCSUM		0x00000016 /* Get TX hw csum enable (ethtool_value) */
462#define ETHTOOL_STXCSUM		0x00000017 /* Set TX hw csum enable (ethtool_value) */
463#define ETHTOOL_GSG		0x00000018 /* Get scatter-gather enable
464					    * (ethtool_value) */
465#define ETHTOOL_SSG		0x00000019 /* Set scatter-gather enable
466					    * (ethtool_value). */
467#define ETHTOOL_TEST		0x0000001a /* execute NIC self-test. */
468#define ETHTOOL_GSTRINGS	0x0000001b /* get specified string set */
469#define ETHTOOL_PHYS_ID		0x0000001c /* identify the NIC */
470#define ETHTOOL_GSTATS		0x0000001d /* get NIC-specific statistics */
471#define ETHTOOL_GTSO		0x0000001e /* Get TSO enable (ethtool_value) */
472#define ETHTOOL_STSO		0x0000001f /* Set TSO enable (ethtool_value) */
473#define ETHTOOL_GPERMADDR	0x00000020 /* Get permanent hardware address */
474#define ETHTOOL_GUFO		0x00000021 /* Get UFO enable (ethtool_value) */
475#define ETHTOOL_SUFO		0x00000022 /* Set UFO enable (ethtool_value) */
476#define ETHTOOL_GGSO		0x00000023 /* Get GSO enable (ethtool_value) */
477#define ETHTOOL_SGSO		0x00000024 /* Set GSO enable (ethtool_value) */
478#define ETHTOOL_GFLAGS		0x00000025 /* Get flags bitmap(ethtool_value) */
479#define ETHTOOL_SFLAGS		0x00000026 /* Set flags bitmap(ethtool_value) */
480#define ETHTOOL_GPFLAGS		0x00000027 /* Get driver-private flags bitmap */
481#define ETHTOOL_SPFLAGS		0x00000028 /* Set driver-private flags bitmap */
482
483#define ETHTOOL_GRXFH		0x00000029 /* Get RX flow hash configuration */
484#define ETHTOOL_SRXFH		0x0000002a /* Set RX flow hash configuration */
485#define ETHTOOL_GGRO		0x0000002b /* Get GRO enable (ethtool_value) */
486#define ETHTOOL_SGRO		0x0000002c /* Set GRO enable (ethtool_value) */
487#define ETHTOOL_GRXRINGS	0x0000002d /* Get RX rings available for LB */
488#define ETHTOOL_GRXCLSRLCNT	0x0000002e /* Get RX class rule count */
489#define ETHTOOL_GRXCLSRULE	0x0000002f /* Get RX classification rule */
490#define ETHTOOL_GRXCLSRLALL	0x00000030 /* Get all RX classification rule */
491#define ETHTOOL_SRXCLSRLDEL	0x00000031 /* Delete RX classification rule */
492#define ETHTOOL_SRXCLSRLINS	0x00000032 /* Insert RX classification rule */
493#define ETHTOOL_FLASHDEV	0x00000033 /* Flash firmware to device */
494#define ETHTOOL_RESET		0x00000034 /* Reset hardware */
495#define ETHTOOL_SRXNTUPLE	0x00000035 /* Add an n-tuple filter to device */
496#define ETHTOOL_GRXNTUPLE	0x00000036 /* Get n-tuple filters from device */
497#define ETHTOOL_GSSET_INFO	0x00000037 /* Get string set info */
498#define ETHTOOL_GRXFHINDIR	0x00000038 /* Get RX flow hash indir'n table */
499#define ETHTOOL_SRXFHINDIR	0x00000039 /* Set RX flow hash indir'n table */
500
501/* compatibility with older code */
502#define SPARC_ETH_GSET		ETHTOOL_GSET
503#define SPARC_ETH_SSET		ETHTOOL_SSET
504
505/* Indicates what features are supported by the interface. */
506#define SUPPORTED_10baseT_Half		(1 << 0)
507#define SUPPORTED_10baseT_Full		(1 << 1)
508#define SUPPORTED_100baseT_Half		(1 << 2)
509#define SUPPORTED_100baseT_Full		(1 << 3)
510#define SUPPORTED_1000baseT_Half	(1 << 4)
511#define SUPPORTED_1000baseT_Full	(1 << 5)
512#define SUPPORTED_Autoneg		(1 << 6)
513#define SUPPORTED_TP			(1 << 7)
514#define SUPPORTED_AUI			(1 << 8)
515#define SUPPORTED_MII			(1 << 9)
516#define SUPPORTED_FIBRE			(1 << 10)
517#define SUPPORTED_BNC			(1 << 11)
518#define SUPPORTED_10000baseT_Full	(1 << 12)
519#define SUPPORTED_Pause			(1 << 13)
520#define SUPPORTED_Asym_Pause		(1 << 14)
521#define SUPPORTED_2500baseX_Full	(1 << 15)
522#define SUPPORTED_Backplane		(1 << 16)
523#define SUPPORTED_1000baseKX_Full	(1 << 17)
524#define SUPPORTED_10000baseKX4_Full	(1 << 18)
525#define SUPPORTED_10000baseKR_Full	(1 << 19)
526#define SUPPORTED_10000baseR_FEC	(1 << 20)
527
528/* Indicates what features are advertised by the interface. */
529#define ADVERTISED_10baseT_Half		(1 << 0)
530#define ADVERTISED_10baseT_Full		(1 << 1)
531#define ADVERTISED_100baseT_Half	(1 << 2)
532#define ADVERTISED_100baseT_Full	(1 << 3)
533#define ADVERTISED_1000baseT_Half	(1 << 4)
534#define ADVERTISED_1000baseT_Full	(1 << 5)
535#define ADVERTISED_Autoneg		(1 << 6)
536#define ADVERTISED_TP			(1 << 7)
537#define ADVERTISED_AUI			(1 << 8)
538#define ADVERTISED_MII			(1 << 9)
539#define ADVERTISED_FIBRE		(1 << 10)
540#define ADVERTISED_BNC			(1 << 11)
541#define ADVERTISED_10000baseT_Full	(1 << 12)
542#define ADVERTISED_Pause		(1 << 13)
543#define ADVERTISED_Asym_Pause		(1 << 14)
544#define ADVERTISED_2500baseX_Full	(1 << 15)
545#define ADVERTISED_Backplane		(1 << 16)
546#define ADVERTISED_1000baseKX_Full	(1 << 17)
547#define ADVERTISED_10000baseKX4_Full	(1 << 18)
548#define ADVERTISED_10000baseKR_Full	(1 << 19)
549#define ADVERTISED_10000baseR_FEC	(1 << 20)
550
551/* The following are all involved in forcing a particular link
552 * mode for the device for setting things.  When getting the
553 * devices settings, these indicate the current mode and whether
554 * it was foced up into this mode or autonegotiated.
555 */
556
557/* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */
558#define SPEED_10		10
559#define SPEED_100		100
560#define SPEED_1000		1000
561#define SPEED_2500		2500
562#define SPEED_10000		10000
563
564/* Duplex, half or full. */
565#define DUPLEX_HALF		0x00
566#define DUPLEX_FULL		0x01
567
568/* Which connector port. */
569#define PORT_TP			0x00
570#define PORT_AUI		0x01
571#define PORT_MII		0x02
572#define PORT_FIBRE		0x03
573#define PORT_BNC		0x04
574#define PORT_DA			0x05
575#define PORT_NONE		0xef
576#define PORT_OTHER		0xff
577
578/* Which transceiver to use. */
579#define XCVR_INTERNAL		0x00
580#define XCVR_EXTERNAL		0x01
581#define XCVR_DUMMY1		0x02
582#define XCVR_DUMMY2		0x03
583#define XCVR_DUMMY3		0x04
584
585/* Enable or disable autonegotiation.  If this is set to enable,
586 * the forced link modes above are completely ignored.
587 */
588#define AUTONEG_DISABLE		0x00
589#define AUTONEG_ENABLE		0x01
590
591/* Mode MDI or MDI-X */
592#define ETH_TP_MDI_INVALID	0x00
593#define ETH_TP_MDI		0x01
594#define ETH_TP_MDI_X		0x02
595
596/* Wake-On-Lan options. */
597#define WAKE_PHY		(1 << 0)
598#define WAKE_UCAST		(1 << 1)
599#define WAKE_MCAST		(1 << 2)
600#define WAKE_BCAST		(1 << 3)
601#define WAKE_ARP		(1 << 4)
602#define WAKE_MAGIC		(1 << 5)
603#define WAKE_MAGICSECURE	(1 << 6) /* only meaningful if WAKE_MAGIC */
604
605/* L3-L4 network traffic flow types */
606#define	TCP_V4_FLOW	0x01
607#define	UDP_V4_FLOW	0x02
608#define	SCTP_V4_FLOW	0x03
609#define	AH_ESP_V4_FLOW	0x04
610#define	TCP_V6_FLOW	0x05
611#define	UDP_V6_FLOW	0x06
612#define	SCTP_V6_FLOW	0x07
613#define	AH_ESP_V6_FLOW	0x08
614#define	AH_V4_FLOW	0x09
615#define	ESP_V4_FLOW	0x0a
616#define	AH_V6_FLOW	0x0b
617#define	ESP_V6_FLOW	0x0c
618#define	IP_USER_FLOW	0x0d
619#define	IPV4_FLOW	0x10
620#define	IPV6_FLOW	0x11
621
622/* L3-L4 network traffic flow hash options */
623#define	RXH_L2DA	(1 << 1)
624#define	RXH_VLAN	(1 << 2)
625#define	RXH_L3_PROTO	(1 << 3)
626#define	RXH_IP_SRC	(1 << 4)
627#define	RXH_IP_DST	(1 << 5)
628#define	RXH_L4_B_0_1	(1 << 6) /* src port in case of TCP/UDP/SCTP */
629#define	RXH_L4_B_2_3	(1 << 7) /* dst port in case of TCP/UDP/SCTP */
630#define	RXH_DISCARD	(1 << 31)
631
632#define	RX_CLS_FLOW_DISC	0xffffffffffffffffULL
633
634/* Reset flags */
635/* The reset() operation must clear the flags for the components which
636 * were actually reset.  On successful return, the flags indicate the
637 * components which were not reset, either because they do not exist
638 * in the hardware or because they cannot be reset independently.  The
639 * driver must never reset any components that were not requested.
640 */
641enum ethtool_reset_flags {
642	/* These flags represent components dedicated to the interface
643	 * the command is addressed to.  Shift any flag left by
644	 * ETH_RESET_SHARED_SHIFT to reset a shared component of the
645	 * same type.
646	 */
647	ETH_RESET_MGMT		= 1 << 0,	/* Management processor */
648	ETH_RESET_IRQ		= 1 << 1,	/* Interrupt requester */
649	ETH_RESET_DMA		= 1 << 2,	/* DMA engine */
650	ETH_RESET_FILTER	= 1 << 3,	/* Filtering/flow direction */
651	ETH_RESET_OFFLOAD	= 1 << 4,	/* Protocol offload */
652	ETH_RESET_MAC		= 1 << 5,	/* Media access controller */
653	ETH_RESET_PHY		= 1 << 6,	/* Transceiver/PHY */
654	ETH_RESET_RAM		= 1 << 7,	/* RAM shared between
655						 * multiple components */
656
657	ETH_RESET_DEDICATED	= 0x0000ffff,	/* All components dedicated to
658						 * this interface */
659	ETH_RESET_ALL		= 0xffffffff,	/* All components used by this
660						 * interface, even if shared */
661};
662#define ETH_RESET_SHARED_SHIFT	16
663
664#endif /* _LINUX_ETHTOOL_H */
665