source: trunk/third/ifplugd/src/ethtool-kernel.h @ 20388

Revision 20388, 11.2 KB checked in by amb, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r20387, which included commits to RCS files with non-trunk default branches.
Line 
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
16/* This should work for both 32 and 64 bit userland. */
17struct ethtool_cmd {
18        u32     cmd;
19        u32     supported;      /* Features this interface supports */
20        u32     advertising;    /* Features this interface advertises */
21        u16     speed;          /* The forced speed, 10Mb, 100Mb, gigabit */
22        u8      duplex;         /* Duplex, half or full */
23        u8      port;           /* Which connector port */
24        u8      phy_address;
25        u8      transceiver;    /* Which tranceiver to use */
26        u8      autoneg;        /* Enable or disable autonegotiation */
27        u32     maxtxpkt;       /* Tx pkts before generating tx int */
28        u32     maxrxpkt;       /* Rx pkts before generating rx int */
29        u32     reserved[4];
30};
31
32#define ETHTOOL_BUSINFO_LEN     32
33/* these strings are set to whatever the driver author decides... */
34struct ethtool_drvinfo {
35        u32     cmd;
36        char    driver[32];     /* driver short name, "tulip", "eepro100" */
37        char    version[32];    /* driver version string */
38        char    fw_version[32]; /* firmware version string, if applicable */
39        char    bus_info[ETHTOOL_BUSINFO_LEN];  /* Bus info for this IF. */
40                                /* For PCI devices, use pci_dev->slot_name. */
41        char    reserved1[32];
42        char    reserved2[20];
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/* CMDs currently supported */
246#define ETHTOOL_GSET            0x00000001 /* Get settings. */
247#define ETHTOOL_SSET            0x00000002 /* Set settings, privileged. */
248#define ETHTOOL_GDRVINFO        0x00000003 /* Get driver info. */
249#define ETHTOOL_GREGS           0x00000004 /* Get NIC registers, privileged. */
250#define ETHTOOL_GWOL            0x00000005 /* Get wake-on-lan options. */
251#define ETHTOOL_SWOL            0x00000006 /* Set wake-on-lan options, priv. */
252#define ETHTOOL_GMSGLVL         0x00000007 /* Get driver message level */
253#define ETHTOOL_SMSGLVL         0x00000008 /* Set driver msg level, priv. */
254#define ETHTOOL_NWAY_RST        0x00000009 /* Restart autonegotiation, priv. */
255#define ETHTOOL_GLINK           0x0000000a /* Get link status (ethtool_value) */
256#define ETHTOOL_GEEPROM         0x0000000b /* Get EEPROM data */
257#define ETHTOOL_SEEPROM         0x0000000c /* Set EEPROM data, priv. */
258#define ETHTOOL_GCOALESCE       0x0000000e /* Get coalesce config */
259#define ETHTOOL_SCOALESCE       0x0000000f /* Set coalesce config, priv. */
260#define ETHTOOL_GRINGPARAM      0x00000010 /* Get ring parameters */
261#define ETHTOOL_SRINGPARAM      0x00000011 /* Set ring parameters, priv. */
262#define ETHTOOL_GPAUSEPARAM     0x00000012 /* Get pause parameters */
263#define ETHTOOL_SPAUSEPARAM     0x00000013 /* Set pause parameters, priv. */
264#define ETHTOOL_GRXCSUM         0x00000014 /* Get RX hw csum enable (ethtool_value) */
265#define ETHTOOL_SRXCSUM         0x00000015 /* Set RX hw csum enable (ethtool_value) */
266#define ETHTOOL_GTXCSUM         0x00000016 /* Get TX hw csum enable (ethtool_value) */
267#define ETHTOOL_STXCSUM         0x00000017 /* Set TX hw csum enable (ethtool_value) */
268#define ETHTOOL_GSG             0x00000018 /* Get scatter-gather enable
269                                            * (ethtool_value) */
270#define ETHTOOL_SSG             0x00000019 /* Set scatter-gather enable
271                                            * (ethtool_value), priv. */
272#define ETHTOOL_TEST            0x0000001a /* execute NIC self-test, priv. */
273#define ETHTOOL_GSTRINGS        0x0000001b /* get specified string set */
274#define ETHTOOL_PHYS_ID         0x0000001c /* identify the NIC */
275
276/* compatibility with older code */
277#define SPARC_ETH_GSET          ETHTOOL_GSET
278#define SPARC_ETH_SSET          ETHTOOL_SSET
279
280/* Indicates what features are supported by the interface. */
281#define SUPPORTED_10baseT_Half          (1 << 0)
282#define SUPPORTED_10baseT_Full          (1 << 1)
283#define SUPPORTED_100baseT_Half         (1 << 2)
284#define SUPPORTED_100baseT_Full         (1 << 3)
285#define SUPPORTED_1000baseT_Half        (1 << 4)
286#define SUPPORTED_1000baseT_Full        (1 << 5)
287#define SUPPORTED_Autoneg               (1 << 6)
288#define SUPPORTED_TP                    (1 << 7)
289#define SUPPORTED_AUI                   (1 << 8)
290#define SUPPORTED_MII                   (1 << 9)
291#define SUPPORTED_FIBRE                 (1 << 10)
292#define SUPPORTED_BNC                   (1 << 11)
293
294/* Indicates what features are advertised by the interface. */
295#define ADVERTISED_10baseT_Half         (1 << 0)
296#define ADVERTISED_10baseT_Full         (1 << 1)
297#define ADVERTISED_100baseT_Half        (1 << 2)
298#define ADVERTISED_100baseT_Full        (1 << 3)
299#define ADVERTISED_1000baseT_Half       (1 << 4)
300#define ADVERTISED_1000baseT_Full       (1 << 5)
301#define ADVERTISED_Autoneg              (1 << 6)
302#define ADVERTISED_TP                   (1 << 7)
303#define ADVERTISED_AUI                  (1 << 8)
304#define ADVERTISED_MII                  (1 << 9)
305#define ADVERTISED_FIBRE                (1 << 10)
306#define ADVERTISED_BNC                  (1 << 11)
307
308/* The following are all involved in forcing a particular link
309 * mode for the device for setting things.  When getting the
310 * devices settings, these indicate the current mode and whether
311 * it was foced up into this mode or autonegotiated.
312 */
313
314/* The forced speed, 10Mb, 100Mb, gigabit. */
315#define SPEED_10                10
316#define SPEED_100               100
317#define SPEED_1000              1000
318
319/* Duplex, half or full. */
320#define DUPLEX_HALF             0x00
321#define DUPLEX_FULL             0x01
322
323/* Which connector port. */
324#define PORT_TP                 0x00
325#define PORT_AUI                0x01
326#define PORT_MII                0x02
327#define PORT_FIBRE              0x03
328#define PORT_BNC                0x04
329
330/* Which tranceiver to use. */
331#define XCVR_INTERNAL           0x00
332#define XCVR_EXTERNAL           0x01
333#define XCVR_DUMMY1             0x02
334#define XCVR_DUMMY2             0x03
335#define XCVR_DUMMY3             0x04
336
337/* Enable or disable autonegotiation.  If this is set to enable,
338 * the forced link modes above are completely ignored.
339 */
340#define AUTONEG_DISABLE         0x00
341#define AUTONEG_ENABLE          0x01
342
343/* Wake-On-Lan options. */
344#define WAKE_PHY                (1 << 0)
345#define WAKE_UCAST              (1 << 1)
346#define WAKE_MCAST              (1 << 2)
347#define WAKE_BCAST              (1 << 3)
348#define WAKE_ARP                (1 << 4)
349#define WAKE_MAGIC              (1 << 5)
350#define WAKE_MAGICSECURE        (1 << 6) /* only meaningful if WAKE_MAGIC */
351
352#endif /* _LINUX_ETHTOOL_H */
Note: See TracBrowser for help on using the repository browser.