~ubuntu-branches/ubuntu/saucy/biosdevname/saucy-proposed

« back to all changes in this revision

Viewing changes to src/ethtool-copy.h

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2011-02-23 17:58:36 UTC
  • Revision ID: james.westby@ubuntu.com-20110223175836-4f0cbcno9zm0lmdu
Tags: upstream-0.3.7
ImportĀ upstreamĀ versionĀ 0.3.7

Show diffs side-by-side

added added

removed removed

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