~ubuntu-branches/ubuntu/utopic/xen/utopic

« back to all changes in this revision

Viewing changes to xen/include/xeno/ethtool.h

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2010-05-06 15:47:38 UTC
  • mto: (1.3.1) (15.1.1 sid) (4.1.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20100506154738-agoz0rlafrh1fnq7
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

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@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
 
 */
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
 
/* CMDs currently supported */
254
 
#define ETHTOOL_GSET            0x00000001 /* Get settings. */
255
 
#define ETHTOOL_SSET            0x00000002 /* Set settings, privileged. */
256
 
#define ETHTOOL_GDRVINFO        0x00000003 /* Get driver info. */
257
 
#define ETHTOOL_GREGS           0x00000004 /* Get NIC registers, privileged. */
258
 
#define ETHTOOL_GWOL            0x00000005 /* Get wake-on-lan options. */
259
 
#define ETHTOOL_SWOL            0x00000006 /* Set wake-on-lan options, priv. */
260
 
#define ETHTOOL_GMSGLVL         0x00000007 /* Get driver message level */
261
 
#define ETHTOOL_SMSGLVL         0x00000008 /* Set driver msg level, priv. */
262
 
#define ETHTOOL_NWAY_RST        0x00000009 /* Restart autonegotiation, priv. */
263
 
#define ETHTOOL_GLINK           0x0000000a /* Get link status (ethtool_value) */
264
 
#define ETHTOOL_GEEPROM         0x0000000b /* Get EEPROM data */
265
 
#define ETHTOOL_SEEPROM         0x0000000c /* Set EEPROM data, priv. */
266
 
#define ETHTOOL_GCOALESCE       0x0000000e /* Get coalesce config */
267
 
#define ETHTOOL_SCOALESCE       0x0000000f /* Set coalesce config, priv. */
268
 
#define ETHTOOL_GRINGPARAM      0x00000010 /* Get ring parameters */
269
 
#define ETHTOOL_SRINGPARAM      0x00000011 /* Set ring parameters, priv. */
270
 
#define ETHTOOL_GPAUSEPARAM     0x00000012 /* Get pause parameters */
271
 
#define ETHTOOL_SPAUSEPARAM     0x00000013 /* Set pause parameters, priv. */
272
 
#define ETHTOOL_GRXCSUM         0x00000014 /* Get RX hw csum enable (ethtool_value) */
273
 
#define ETHTOOL_SRXCSUM         0x00000015 /* Set RX hw csum enable (ethtool_value) */
274
 
#define ETHTOOL_GTXCSUM         0x00000016 /* Get TX hw csum enable (ethtool_value) */
275
 
#define ETHTOOL_STXCSUM         0x00000017 /* Set TX hw csum enable (ethtool_value) */
276
 
#define ETHTOOL_GSG             0x00000018 /* Get scatter-gather enable
277
 
                                            * (ethtool_value) */
278
 
#define ETHTOOL_SSG             0x00000019 /* Set scatter-gather enable
279
 
                                            * (ethtool_value), priv. */
280
 
#define ETHTOOL_TEST            0x0000001a /* execute NIC self-test, priv. */
281
 
#define ETHTOOL_GSTRINGS        0x0000001b /* get specified string set */
282
 
#define ETHTOOL_PHYS_ID         0x0000001c /* identify the NIC */
283
 
#define ETHTOOL_GSTATS          0x0000001d /* get NIC-specific statistics */
284
 
 
285
 
/* compatibility with older code */
286
 
#define SPARC_ETH_GSET          ETHTOOL_GSET
287
 
#define SPARC_ETH_SSET          ETHTOOL_SSET
288
 
 
289
 
/* Indicates what features are supported by the interface. */
290
 
#define SUPPORTED_10baseT_Half          (1 << 0)
291
 
#define SUPPORTED_10baseT_Full          (1 << 1)
292
 
#define SUPPORTED_100baseT_Half         (1 << 2)
293
 
#define SUPPORTED_100baseT_Full         (1 << 3)
294
 
#define SUPPORTED_1000baseT_Half        (1 << 4)
295
 
#define SUPPORTED_1000baseT_Full        (1 << 5)
296
 
#define SUPPORTED_Autoneg               (1 << 6)
297
 
#define SUPPORTED_TP                    (1 << 7)
298
 
#define SUPPORTED_AUI                   (1 << 8)
299
 
#define SUPPORTED_MII                   (1 << 9)
300
 
#define SUPPORTED_FIBRE                 (1 << 10)
301
 
#define SUPPORTED_BNC                   (1 << 11)
302
 
 
303
 
/* Indicates what features are advertised by the interface. */
304
 
#define ADVERTISED_10baseT_Half         (1 << 0)
305
 
#define ADVERTISED_10baseT_Full         (1 << 1)
306
 
#define ADVERTISED_100baseT_Half        (1 << 2)
307
 
#define ADVERTISED_100baseT_Full        (1 << 3)
308
 
#define ADVERTISED_1000baseT_Half       (1 << 4)
309
 
#define ADVERTISED_1000baseT_Full       (1 << 5)
310
 
#define ADVERTISED_Autoneg              (1 << 6)
311
 
#define ADVERTISED_TP                   (1 << 7)
312
 
#define ADVERTISED_AUI                  (1 << 8)
313
 
#define ADVERTISED_MII                  (1 << 9)
314
 
#define ADVERTISED_FIBRE                (1 << 10)
315
 
#define ADVERTISED_BNC                  (1 << 11)
316
 
 
317
 
/* The following are all involved in forcing a particular link
318
 
 * mode for the device for setting things.  When getting the
319
 
 * devices settings, these indicate the current mode and whether
320
 
 * it was foced up into this mode or autonegotiated.
321
 
 */
322
 
 
323
 
/* The forced speed, 10Mb, 100Mb, gigabit. */
324
 
#define SPEED_10                10
325
 
#define SPEED_100               100
326
 
#define SPEED_1000              1000
327
 
 
328
 
/* Duplex, half or full. */
329
 
#define DUPLEX_HALF             0x00
330
 
#define DUPLEX_FULL             0x01
331
 
 
332
 
/* Which connector port. */
333
 
#define PORT_TP                 0x00
334
 
#define PORT_AUI                0x01
335
 
#define PORT_MII                0x02
336
 
#define PORT_FIBRE              0x03
337
 
#define PORT_BNC                0x04
338
 
 
339
 
/* Which tranceiver to use. */
340
 
#define XCVR_INTERNAL           0x00
341
 
#define XCVR_EXTERNAL           0x01
342
 
#define XCVR_DUMMY1             0x02
343
 
#define XCVR_DUMMY2             0x03
344
 
#define XCVR_DUMMY3             0x04
345
 
 
346
 
/* Enable or disable autonegotiation.  If this is set to enable,
347
 
 * the forced link modes above are completely ignored.
348
 
 */
349
 
#define AUTONEG_DISABLE         0x00
350
 
#define AUTONEG_ENABLE          0x01
351
 
 
352
 
/* Wake-On-Lan options. */
353
 
#define WAKE_PHY                (1 << 0)
354
 
#define WAKE_UCAST              (1 << 1)
355
 
#define WAKE_MCAST              (1 << 2)
356
 
#define WAKE_BCAST              (1 << 3)
357
 
#define WAKE_ARP                (1 << 4)
358
 
#define WAKE_MAGIC              (1 << 5)
359
 
#define WAKE_MAGICSECURE        (1 << 6) /* only meaningful if WAKE_MAGIC */
360
 
 
361
 
#endif /* _LINUX_ETHTOOL_H */