OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [net/] [e1000/] [e1000_ethtool.c] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*******************************************************************************
2
 
3
  Intel PRO/1000 Linux driver
4
  Copyright(c) 1999 - 2006 Intel Corporation.
5
 
6
  This program is free software; you can redistribute it and/or modify it
7
  under the terms and conditions of the GNU General Public License,
8
  version 2, as published by the Free Software Foundation.
9
 
10
  This program is distributed in the hope it will be useful, but WITHOUT
11
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13
  more details.
14
 
15
  You should have received a copy of the GNU General Public License along with
16
  this program; if not, write to the Free Software Foundation, Inc.,
17
  51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
 
19
  The full GNU General Public License is included in this distribution in
20
  the file called "COPYING".
21
 
22
  Contact Information:
23
  Linux NICS <linux.nics@intel.com>
24
  e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25
  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
 
27
*******************************************************************************/
28
 
29
/* ethtool support for e1000 */
30
 
31
#include "e1000.h"
32
 
33
#include <asm/uaccess.h>
34
 
35
extern int e1000_up(struct e1000_adapter *adapter);
36
extern void e1000_down(struct e1000_adapter *adapter);
37
extern void e1000_reinit_locked(struct e1000_adapter *adapter);
38
extern void e1000_reset(struct e1000_adapter *adapter);
39
extern int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx);
40
extern int e1000_setup_all_rx_resources(struct e1000_adapter *adapter);
41
extern int e1000_setup_all_tx_resources(struct e1000_adapter *adapter);
42
extern void e1000_free_all_rx_resources(struct e1000_adapter *adapter);
43
extern void e1000_free_all_tx_resources(struct e1000_adapter *adapter);
44
extern void e1000_update_stats(struct e1000_adapter *adapter);
45
 
46
 
47
struct e1000_stats {
48
        char stat_string[ETH_GSTRING_LEN];
49
        int sizeof_stat;
50
        int stat_offset;
51
};
52
 
53
#define E1000_STAT(m) sizeof(((struct e1000_adapter *)0)->m), \
54
                      offsetof(struct e1000_adapter, m)
55
static const struct e1000_stats e1000_gstrings_stats[] = {
56
        { "rx_packets", E1000_STAT(stats.gprc) },
57
        { "tx_packets", E1000_STAT(stats.gptc) },
58
        { "rx_bytes", E1000_STAT(stats.gorcl) },
59
        { "tx_bytes", E1000_STAT(stats.gotcl) },
60
        { "rx_broadcast", E1000_STAT(stats.bprc) },
61
        { "tx_broadcast", E1000_STAT(stats.bptc) },
62
        { "rx_multicast", E1000_STAT(stats.mprc) },
63
        { "tx_multicast", E1000_STAT(stats.mptc) },
64
        { "rx_errors", E1000_STAT(stats.rxerrc) },
65
        { "tx_errors", E1000_STAT(stats.txerrc) },
66
        { "tx_dropped", E1000_STAT(net_stats.tx_dropped) },
67
        { "multicast", E1000_STAT(stats.mprc) },
68
        { "collisions", E1000_STAT(stats.colc) },
69
        { "rx_length_errors", E1000_STAT(stats.rlerrc) },
70
        { "rx_over_errors", E1000_STAT(net_stats.rx_over_errors) },
71
        { "rx_crc_errors", E1000_STAT(stats.crcerrs) },
72
        { "rx_frame_errors", E1000_STAT(net_stats.rx_frame_errors) },
73
        { "rx_no_buffer_count", E1000_STAT(stats.rnbc) },
74
        { "rx_missed_errors", E1000_STAT(stats.mpc) },
75
        { "tx_aborted_errors", E1000_STAT(stats.ecol) },
76
        { "tx_carrier_errors", E1000_STAT(stats.tncrs) },
77
        { "tx_fifo_errors", E1000_STAT(net_stats.tx_fifo_errors) },
78
        { "tx_heartbeat_errors", E1000_STAT(net_stats.tx_heartbeat_errors) },
79
        { "tx_window_errors", E1000_STAT(stats.latecol) },
80
        { "tx_abort_late_coll", E1000_STAT(stats.latecol) },
81
        { "tx_deferred_ok", E1000_STAT(stats.dc) },
82
        { "tx_single_coll_ok", E1000_STAT(stats.scc) },
83
        { "tx_multi_coll_ok", E1000_STAT(stats.mcc) },
84
        { "tx_timeout_count", E1000_STAT(tx_timeout_count) },
85
        { "tx_restart_queue", E1000_STAT(restart_queue) },
86
        { "rx_long_length_errors", E1000_STAT(stats.roc) },
87
        { "rx_short_length_errors", E1000_STAT(stats.ruc) },
88
        { "rx_align_errors", E1000_STAT(stats.algnerrc) },
89
        { "tx_tcp_seg_good", E1000_STAT(stats.tsctc) },
90
        { "tx_tcp_seg_failed", E1000_STAT(stats.tsctfc) },
91
        { "rx_flow_control_xon", E1000_STAT(stats.xonrxc) },
92
        { "rx_flow_control_xoff", E1000_STAT(stats.xoffrxc) },
93
        { "tx_flow_control_xon", E1000_STAT(stats.xontxc) },
94
        { "tx_flow_control_xoff", E1000_STAT(stats.xofftxc) },
95
        { "rx_long_byte_count", E1000_STAT(stats.gorcl) },
96
        { "rx_csum_offload_good", E1000_STAT(hw_csum_good) },
97
        { "rx_csum_offload_errors", E1000_STAT(hw_csum_err) },
98
        { "rx_header_split", E1000_STAT(rx_hdr_split) },
99
        { "alloc_rx_buff_failed", E1000_STAT(alloc_rx_buff_failed) },
100
        { "tx_smbus", E1000_STAT(stats.mgptc) },
101
        { "rx_smbus", E1000_STAT(stats.mgprc) },
102
        { "dropped_smbus", E1000_STAT(stats.mgpdc) },
103
};
104
 
105
#define E1000_QUEUE_STATS_LEN 0
106
#define E1000_GLOBAL_STATS_LEN ARRAY_SIZE(e1000_gstrings_stats)
107
#define E1000_STATS_LEN (E1000_GLOBAL_STATS_LEN + E1000_QUEUE_STATS_LEN)
108
static const char e1000_gstrings_test[][ETH_GSTRING_LEN] = {
109
        "Register test  (offline)", "Eeprom test    (offline)",
110
        "Interrupt test (offline)", "Loopback test  (offline)",
111
        "Link test   (on/offline)"
112
};
113
#define E1000_TEST_LEN sizeof(e1000_gstrings_test) / ETH_GSTRING_LEN
114
 
115
static int
116
e1000_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
117
{
118
        struct e1000_adapter *adapter = netdev_priv(netdev);
119
        struct e1000_hw *hw = &adapter->hw;
120
 
121
        if (hw->media_type == e1000_media_type_copper) {
122
 
123
                ecmd->supported = (SUPPORTED_10baseT_Half |
124
                                   SUPPORTED_10baseT_Full |
125
                                   SUPPORTED_100baseT_Half |
126
                                   SUPPORTED_100baseT_Full |
127
                                   SUPPORTED_1000baseT_Full|
128
                                   SUPPORTED_Autoneg |
129
                                   SUPPORTED_TP);
130
                if (hw->phy_type == e1000_phy_ife)
131
                        ecmd->supported &= ~SUPPORTED_1000baseT_Full;
132
                ecmd->advertising = ADVERTISED_TP;
133
 
134
                if (hw->autoneg == 1) {
135
                        ecmd->advertising |= ADVERTISED_Autoneg;
136
                        /* the e1000 autoneg seems to match ethtool nicely */
137
                        ecmd->advertising |= hw->autoneg_advertised;
138
                }
139
 
140
                ecmd->port = PORT_TP;
141
                ecmd->phy_address = hw->phy_addr;
142
 
143
                if (hw->mac_type == e1000_82543)
144
                        ecmd->transceiver = XCVR_EXTERNAL;
145
                else
146
                        ecmd->transceiver = XCVR_INTERNAL;
147
 
148
        } else {
149
                ecmd->supported   = (SUPPORTED_1000baseT_Full |
150
                                     SUPPORTED_FIBRE |
151
                                     SUPPORTED_Autoneg);
152
 
153
                ecmd->advertising = (ADVERTISED_1000baseT_Full |
154
                                     ADVERTISED_FIBRE |
155
                                     ADVERTISED_Autoneg);
156
 
157
                ecmd->port = PORT_FIBRE;
158
 
159
                if (hw->mac_type >= e1000_82545)
160
                        ecmd->transceiver = XCVR_INTERNAL;
161
                else
162
                        ecmd->transceiver = XCVR_EXTERNAL;
163
        }
164
 
165
        if (E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
166
 
167
                e1000_get_speed_and_duplex(hw, &adapter->link_speed,
168
                                                   &adapter->link_duplex);
169
                ecmd->speed = adapter->link_speed;
170
 
171
                /* unfortunatly FULL_DUPLEX != DUPLEX_FULL
172
                 *          and HALF_DUPLEX != DUPLEX_HALF */
173
 
174
                if (adapter->link_duplex == FULL_DUPLEX)
175
                        ecmd->duplex = DUPLEX_FULL;
176
                else
177
                        ecmd->duplex = DUPLEX_HALF;
178
        } else {
179
                ecmd->speed = -1;
180
                ecmd->duplex = -1;
181
        }
182
 
183
        ecmd->autoneg = ((hw->media_type == e1000_media_type_fiber) ||
184
                         hw->autoneg) ? AUTONEG_ENABLE : AUTONEG_DISABLE;
185
        return 0;
186
}
187
 
188
static int
189
e1000_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
190
{
191
        struct e1000_adapter *adapter = netdev_priv(netdev);
192
        struct e1000_hw *hw = &adapter->hw;
193
 
194
        /* When SoL/IDER sessions are active, autoneg/speed/duplex
195
         * cannot be changed */
196
        if (e1000_check_phy_reset_block(hw)) {
197
                DPRINTK(DRV, ERR, "Cannot change link characteristics "
198
                        "when SoL/IDER is active.\n");
199
                return -EINVAL;
200
        }
201
 
202
        while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
203
                msleep(1);
204
 
205
        if (ecmd->autoneg == AUTONEG_ENABLE) {
206
                hw->autoneg = 1;
207
                if (hw->media_type == e1000_media_type_fiber)
208
                        hw->autoneg_advertised = ADVERTISED_1000baseT_Full |
209
                                     ADVERTISED_FIBRE |
210
                                     ADVERTISED_Autoneg;
211
                else
212
                        hw->autoneg_advertised = ecmd->advertising |
213
                                                 ADVERTISED_TP |
214
                                                 ADVERTISED_Autoneg;
215
                ecmd->advertising = hw->autoneg_advertised;
216
        } else
217
                if (e1000_set_spd_dplx(adapter, ecmd->speed + ecmd->duplex)) {
218
                        clear_bit(__E1000_RESETTING, &adapter->flags);
219
                        return -EINVAL;
220
                }
221
 
222
        /* reset the link */
223
 
224
        if (netif_running(adapter->netdev)) {
225
                e1000_down(adapter);
226
                e1000_up(adapter);
227
        } else
228
                e1000_reset(adapter);
229
 
230
        clear_bit(__E1000_RESETTING, &adapter->flags);
231
        return 0;
232
}
233
 
234
static void
235
e1000_get_pauseparam(struct net_device *netdev,
236
                     struct ethtool_pauseparam *pause)
237
{
238
        struct e1000_adapter *adapter = netdev_priv(netdev);
239
        struct e1000_hw *hw = &adapter->hw;
240
 
241
        pause->autoneg =
242
                (adapter->fc_autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE);
243
 
244
        if (hw->fc == E1000_FC_RX_PAUSE)
245
                pause->rx_pause = 1;
246
        else if (hw->fc == E1000_FC_TX_PAUSE)
247
                pause->tx_pause = 1;
248
        else if (hw->fc == E1000_FC_FULL) {
249
                pause->rx_pause = 1;
250
                pause->tx_pause = 1;
251
        }
252
}
253
 
254
static int
255
e1000_set_pauseparam(struct net_device *netdev,
256
                     struct ethtool_pauseparam *pause)
257
{
258
        struct e1000_adapter *adapter = netdev_priv(netdev);
259
        struct e1000_hw *hw = &adapter->hw;
260
        int retval = 0;
261
 
262
        adapter->fc_autoneg = pause->autoneg;
263
 
264
        while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
265
                msleep(1);
266
 
267
        if (pause->rx_pause && pause->tx_pause)
268
                hw->fc = E1000_FC_FULL;
269
        else if (pause->rx_pause && !pause->tx_pause)
270
                hw->fc = E1000_FC_RX_PAUSE;
271
        else if (!pause->rx_pause && pause->tx_pause)
272
                hw->fc = E1000_FC_TX_PAUSE;
273
        else if (!pause->rx_pause && !pause->tx_pause)
274
                hw->fc = E1000_FC_NONE;
275
 
276
        hw->original_fc = hw->fc;
277
 
278
        if (adapter->fc_autoneg == AUTONEG_ENABLE) {
279
                if (netif_running(adapter->netdev)) {
280
                        e1000_down(adapter);
281
                        e1000_up(adapter);
282
                } else
283
                        e1000_reset(adapter);
284
        } else
285
                retval = ((hw->media_type == e1000_media_type_fiber) ?
286
                          e1000_setup_link(hw) : e1000_force_mac_fc(hw));
287
 
288
        clear_bit(__E1000_RESETTING, &adapter->flags);
289
        return retval;
290
}
291
 
292
static uint32_t
293
e1000_get_rx_csum(struct net_device *netdev)
294
{
295
        struct e1000_adapter *adapter = netdev_priv(netdev);
296
        return adapter->rx_csum;
297
}
298
 
299
static int
300
e1000_set_rx_csum(struct net_device *netdev, uint32_t data)
301
{
302
        struct e1000_adapter *adapter = netdev_priv(netdev);
303
        adapter->rx_csum = data;
304
 
305
        if (netif_running(netdev))
306
                e1000_reinit_locked(adapter);
307
        else
308
                e1000_reset(adapter);
309
        return 0;
310
}
311
 
312
static uint32_t
313
e1000_get_tx_csum(struct net_device *netdev)
314
{
315
        return (netdev->features & NETIF_F_HW_CSUM) != 0;
316
}
317
 
318
static int
319
e1000_set_tx_csum(struct net_device *netdev, uint32_t data)
320
{
321
        struct e1000_adapter *adapter = netdev_priv(netdev);
322
 
323
        if (adapter->hw.mac_type < e1000_82543) {
324
                if (!data)
325
                        return -EINVAL;
326
                return 0;
327
        }
328
 
329
        if (data)
330
                netdev->features |= NETIF_F_HW_CSUM;
331
        else
332
                netdev->features &= ~NETIF_F_HW_CSUM;
333
 
334
        return 0;
335
}
336
 
337
static int
338
e1000_set_tso(struct net_device *netdev, uint32_t data)
339
{
340
        struct e1000_adapter *adapter = netdev_priv(netdev);
341
        if ((adapter->hw.mac_type < e1000_82544) ||
342
            (adapter->hw.mac_type == e1000_82547))
343
                return data ? -EINVAL : 0;
344
 
345
        if (data)
346
                netdev->features |= NETIF_F_TSO;
347
        else
348
                netdev->features &= ~NETIF_F_TSO;
349
 
350
        if (data)
351
                netdev->features |= NETIF_F_TSO6;
352
        else
353
                netdev->features &= ~NETIF_F_TSO6;
354
 
355
        DPRINTK(PROBE, INFO, "TSO is %s\n", data ? "Enabled" : "Disabled");
356
        adapter->tso_force = TRUE;
357
        return 0;
358
}
359
 
360
static uint32_t
361
e1000_get_msglevel(struct net_device *netdev)
362
{
363
        struct e1000_adapter *adapter = netdev_priv(netdev);
364
        return adapter->msg_enable;
365
}
366
 
367
static void
368
e1000_set_msglevel(struct net_device *netdev, uint32_t data)
369
{
370
        struct e1000_adapter *adapter = netdev_priv(netdev);
371
        adapter->msg_enable = data;
372
}
373
 
374
static int
375
e1000_get_regs_len(struct net_device *netdev)
376
{
377
#define E1000_REGS_LEN 32
378
        return E1000_REGS_LEN * sizeof(uint32_t);
379
}
380
 
381
static void
382
e1000_get_regs(struct net_device *netdev,
383
               struct ethtool_regs *regs, void *p)
384
{
385
        struct e1000_adapter *adapter = netdev_priv(netdev);
386
        struct e1000_hw *hw = &adapter->hw;
387
        uint32_t *regs_buff = p;
388
        uint16_t phy_data;
389
 
390
        memset(p, 0, E1000_REGS_LEN * sizeof(uint32_t));
391
 
392
        regs->version = (1 << 24) | (hw->revision_id << 16) | hw->device_id;
393
 
394
        regs_buff[0]  = E1000_READ_REG(hw, CTRL);
395
        regs_buff[1]  = E1000_READ_REG(hw, STATUS);
396
 
397
        regs_buff[2]  = E1000_READ_REG(hw, RCTL);
398
        regs_buff[3]  = E1000_READ_REG(hw, RDLEN);
399
        regs_buff[4]  = E1000_READ_REG(hw, RDH);
400
        regs_buff[5]  = E1000_READ_REG(hw, RDT);
401
        regs_buff[6]  = E1000_READ_REG(hw, RDTR);
402
 
403
        regs_buff[7]  = E1000_READ_REG(hw, TCTL);
404
        regs_buff[8]  = E1000_READ_REG(hw, TDLEN);
405
        regs_buff[9]  = E1000_READ_REG(hw, TDH);
406
        regs_buff[10] = E1000_READ_REG(hw, TDT);
407
        regs_buff[11] = E1000_READ_REG(hw, TIDV);
408
 
409
        regs_buff[12] = adapter->hw.phy_type;  /* PHY type (IGP=1, M88=0) */
410
        if (hw->phy_type == e1000_phy_igp) {
411
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
412
                                    IGP01E1000_PHY_AGC_A);
413
                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_A &
414
                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
415
                regs_buff[13] = (uint32_t)phy_data; /* cable length */
416
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
417
                                    IGP01E1000_PHY_AGC_B);
418
                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_B &
419
                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
420
                regs_buff[14] = (uint32_t)phy_data; /* cable length */
421
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
422
                                    IGP01E1000_PHY_AGC_C);
423
                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_C &
424
                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
425
                regs_buff[15] = (uint32_t)phy_data; /* cable length */
426
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
427
                                    IGP01E1000_PHY_AGC_D);
428
                e1000_read_phy_reg(hw, IGP01E1000_PHY_AGC_D &
429
                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
430
                regs_buff[16] = (uint32_t)phy_data; /* cable length */
431
                regs_buff[17] = 0; /* extended 10bt distance (not needed) */
432
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
433
                e1000_read_phy_reg(hw, IGP01E1000_PHY_PORT_STATUS &
434
                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
435
                regs_buff[18] = (uint32_t)phy_data; /* cable polarity */
436
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT,
437
                                    IGP01E1000_PHY_PCS_INIT_REG);
438
                e1000_read_phy_reg(hw, IGP01E1000_PHY_PCS_INIT_REG &
439
                                   IGP01E1000_PHY_PAGE_SELECT, &phy_data);
440
                regs_buff[19] = (uint32_t)phy_data; /* cable polarity */
441
                regs_buff[20] = 0; /* polarity correction enabled (always) */
442
                regs_buff[22] = 0; /* phy receive errors (unavailable) */
443
                regs_buff[23] = regs_buff[18]; /* mdix mode */
444
                e1000_write_phy_reg(hw, IGP01E1000_PHY_PAGE_SELECT, 0x0);
445
        } else {
446
                e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_STATUS, &phy_data);
447
                regs_buff[13] = (uint32_t)phy_data; /* cable length */
448
                regs_buff[14] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
449
                regs_buff[15] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
450
                regs_buff[16] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
451
                e1000_read_phy_reg(hw, M88E1000_PHY_SPEC_CTRL, &phy_data);
452
                regs_buff[17] = (uint32_t)phy_data; /* extended 10bt distance */
453
                regs_buff[18] = regs_buff[13]; /* cable polarity */
454
                regs_buff[19] = 0;  /* Dummy (to align w/ IGP phy reg dump) */
455
                regs_buff[20] = regs_buff[17]; /* polarity correction */
456
                /* phy receive errors */
457
                regs_buff[22] = adapter->phy_stats.receive_errors;
458
                regs_buff[23] = regs_buff[13]; /* mdix mode */
459
        }
460
        regs_buff[21] = adapter->phy_stats.idle_errors;  /* phy idle errors */
461
        e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_data);
462
        regs_buff[24] = (uint32_t)phy_data;  /* phy local receiver status */
463
        regs_buff[25] = regs_buff[24];  /* phy remote receiver status */
464
        if (hw->mac_type >= e1000_82540 &&
465
            hw->mac_type < e1000_82571 &&
466
            hw->media_type == e1000_media_type_copper) {
467
                regs_buff[26] = E1000_READ_REG(hw, MANC);
468
        }
469
}
470
 
471
static int
472
e1000_get_eeprom_len(struct net_device *netdev)
473
{
474
        struct e1000_adapter *adapter = netdev_priv(netdev);
475
        return adapter->hw.eeprom.word_size * 2;
476
}
477
 
478
static int
479
e1000_get_eeprom(struct net_device *netdev,
480
                      struct ethtool_eeprom *eeprom, uint8_t *bytes)
481
{
482
        struct e1000_adapter *adapter = netdev_priv(netdev);
483
        struct e1000_hw *hw = &adapter->hw;
484
        uint16_t *eeprom_buff;
485
        int first_word, last_word;
486
        int ret_val = 0;
487
        uint16_t i;
488
 
489
        if (eeprom->len == 0)
490
                return -EINVAL;
491
 
492
        eeprom->magic = hw->vendor_id | (hw->device_id << 16);
493
 
494
        first_word = eeprom->offset >> 1;
495
        last_word = (eeprom->offset + eeprom->len - 1) >> 1;
496
 
497
        eeprom_buff = kmalloc(sizeof(uint16_t) *
498
                        (last_word - first_word + 1), GFP_KERNEL);
499
        if (!eeprom_buff)
500
                return -ENOMEM;
501
 
502
        if (hw->eeprom.type == e1000_eeprom_spi)
503
                ret_val = e1000_read_eeprom(hw, first_word,
504
                                            last_word - first_word + 1,
505
                                            eeprom_buff);
506
        else {
507
                for (i = 0; i < last_word - first_word + 1; i++)
508
                        if ((ret_val = e1000_read_eeprom(hw, first_word + i, 1,
509
                                                        &eeprom_buff[i])))
510
                                break;
511
        }
512
 
513
        /* Device's eeprom is always little-endian, word addressable */
514
        for (i = 0; i < last_word - first_word + 1; i++)
515
                le16_to_cpus(&eeprom_buff[i]);
516
 
517
        memcpy(bytes, (uint8_t *)eeprom_buff + (eeprom->offset & 1),
518
                        eeprom->len);
519
        kfree(eeprom_buff);
520
 
521
        return ret_val;
522
}
523
 
524
static int
525
e1000_set_eeprom(struct net_device *netdev,
526
                      struct ethtool_eeprom *eeprom, uint8_t *bytes)
527
{
528
        struct e1000_adapter *adapter = netdev_priv(netdev);
529
        struct e1000_hw *hw = &adapter->hw;
530
        uint16_t *eeprom_buff;
531
        void *ptr;
532
        int max_len, first_word, last_word, ret_val = 0;
533
        uint16_t i;
534
 
535
        if (eeprom->len == 0)
536
                return -EOPNOTSUPP;
537
 
538
        if (eeprom->magic != (hw->vendor_id | (hw->device_id << 16)))
539
                return -EFAULT;
540
 
541
        max_len = hw->eeprom.word_size * 2;
542
 
543
        first_word = eeprom->offset >> 1;
544
        last_word = (eeprom->offset + eeprom->len - 1) >> 1;
545
        eeprom_buff = kmalloc(max_len, GFP_KERNEL);
546
        if (!eeprom_buff)
547
                return -ENOMEM;
548
 
549
        ptr = (void *)eeprom_buff;
550
 
551
        if (eeprom->offset & 1) {
552
                /* need read/modify/write of first changed EEPROM word */
553
                /* only the second byte of the word is being modified */
554
                ret_val = e1000_read_eeprom(hw, first_word, 1,
555
                                            &eeprom_buff[0]);
556
                ptr++;
557
        }
558
        if (((eeprom->offset + eeprom->len) & 1) && (ret_val == 0)) {
559
                /* need read/modify/write of last changed EEPROM word */
560
                /* only the first byte of the word is being modified */
561
                ret_val = e1000_read_eeprom(hw, last_word, 1,
562
                                  &eeprom_buff[last_word - first_word]);
563
        }
564
 
565
        /* Device's eeprom is always little-endian, word addressable */
566
        for (i = 0; i < last_word - first_word + 1; i++)
567
                le16_to_cpus(&eeprom_buff[i]);
568
 
569
        memcpy(ptr, bytes, eeprom->len);
570
 
571
        for (i = 0; i < last_word - first_word + 1; i++)
572
                eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
573
 
574
        ret_val = e1000_write_eeprom(hw, first_word,
575
                                     last_word - first_word + 1, eeprom_buff);
576
 
577
        /* Update the checksum over the first part of the EEPROM if needed
578
         * and flush shadow RAM for 82573 conrollers */
579
        if ((ret_val == 0) && ((first_word <= EEPROM_CHECKSUM_REG) ||
580
                                (hw->mac_type == e1000_82573)))
581
                e1000_update_eeprom_checksum(hw);
582
 
583
        kfree(eeprom_buff);
584
        return ret_val;
585
}
586
 
587
static void
588
e1000_get_drvinfo(struct net_device *netdev,
589
                       struct ethtool_drvinfo *drvinfo)
590
{
591
        struct e1000_adapter *adapter = netdev_priv(netdev);
592
        char firmware_version[32];
593
        uint16_t eeprom_data;
594
 
595
        strncpy(drvinfo->driver,  e1000_driver_name, 32);
596
        strncpy(drvinfo->version, e1000_driver_version, 32);
597
 
598
        /* EEPROM image version # is reported as firmware version # for
599
         * 8257{1|2|3} controllers */
600
        e1000_read_eeprom(&adapter->hw, 5, 1, &eeprom_data);
601
        switch (adapter->hw.mac_type) {
602
        case e1000_82571:
603
        case e1000_82572:
604
        case e1000_82573:
605
        case e1000_80003es2lan:
606
        case e1000_ich8lan:
607
                sprintf(firmware_version, "%d.%d-%d",
608
                        (eeprom_data & 0xF000) >> 12,
609
                        (eeprom_data & 0x0FF0) >> 4,
610
                        eeprom_data & 0x000F);
611
                break;
612
        default:
613
                sprintf(firmware_version, "N/A");
614
        }
615
 
616
        strncpy(drvinfo->fw_version, firmware_version, 32);
617
        strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32);
618
        drvinfo->regdump_len = e1000_get_regs_len(netdev);
619
        drvinfo->eedump_len = e1000_get_eeprom_len(netdev);
620
}
621
 
622
static void
623
e1000_get_ringparam(struct net_device *netdev,
624
                    struct ethtool_ringparam *ring)
625
{
626
        struct e1000_adapter *adapter = netdev_priv(netdev);
627
        e1000_mac_type mac_type = adapter->hw.mac_type;
628
        struct e1000_tx_ring *txdr = adapter->tx_ring;
629
        struct e1000_rx_ring *rxdr = adapter->rx_ring;
630
 
631
        ring->rx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_RXD :
632
                E1000_MAX_82544_RXD;
633
        ring->tx_max_pending = (mac_type < e1000_82544) ? E1000_MAX_TXD :
634
                E1000_MAX_82544_TXD;
635
        ring->rx_mini_max_pending = 0;
636
        ring->rx_jumbo_max_pending = 0;
637
        ring->rx_pending = rxdr->count;
638
        ring->tx_pending = txdr->count;
639
        ring->rx_mini_pending = 0;
640
        ring->rx_jumbo_pending = 0;
641
}
642
 
643
static int
644
e1000_set_ringparam(struct net_device *netdev,
645
                    struct ethtool_ringparam *ring)
646
{
647
        struct e1000_adapter *adapter = netdev_priv(netdev);
648
        e1000_mac_type mac_type = adapter->hw.mac_type;
649
        struct e1000_tx_ring *txdr, *tx_old;
650
        struct e1000_rx_ring *rxdr, *rx_old;
651
        int i, err;
652
 
653
        if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending))
654
                return -EINVAL;
655
 
656
        while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
657
                msleep(1);
658
 
659
        if (netif_running(adapter->netdev))
660
                e1000_down(adapter);
661
 
662
        tx_old = adapter->tx_ring;
663
        rx_old = adapter->rx_ring;
664
 
665
        err = -ENOMEM;
666
        txdr = kcalloc(adapter->num_tx_queues, sizeof(struct e1000_tx_ring), GFP_KERNEL);
667
        if (!txdr)
668
                goto err_alloc_tx;
669
 
670
        rxdr = kcalloc(adapter->num_rx_queues, sizeof(struct e1000_rx_ring), GFP_KERNEL);
671
        if (!rxdr)
672
                goto err_alloc_rx;
673
 
674
        adapter->tx_ring = txdr;
675
        adapter->rx_ring = rxdr;
676
 
677
        rxdr->count = max(ring->rx_pending,(uint32_t)E1000_MIN_RXD);
678
        rxdr->count = min(rxdr->count,(uint32_t)(mac_type < e1000_82544 ?
679
                E1000_MAX_RXD : E1000_MAX_82544_RXD));
680
        rxdr->count = ALIGN(rxdr->count, REQ_RX_DESCRIPTOR_MULTIPLE);
681
 
682
        txdr->count = max(ring->tx_pending,(uint32_t)E1000_MIN_TXD);
683
        txdr->count = min(txdr->count,(uint32_t)(mac_type < e1000_82544 ?
684
                E1000_MAX_TXD : E1000_MAX_82544_TXD));
685
        txdr->count = ALIGN(txdr->count, REQ_TX_DESCRIPTOR_MULTIPLE);
686
 
687
        for (i = 0; i < adapter->num_tx_queues; i++)
688
                txdr[i].count = txdr->count;
689
        for (i = 0; i < adapter->num_rx_queues; i++)
690
                rxdr[i].count = rxdr->count;
691
 
692
        if (netif_running(adapter->netdev)) {
693
                /* Try to get new resources before deleting old */
694
                if ((err = e1000_setup_all_rx_resources(adapter)))
695
                        goto err_setup_rx;
696
                if ((err = e1000_setup_all_tx_resources(adapter)))
697
                        goto err_setup_tx;
698
 
699
                /* save the new, restore the old in order to free it,
700
                 * then restore the new back again */
701
 
702
                adapter->rx_ring = rx_old;
703
                adapter->tx_ring = tx_old;
704
                e1000_free_all_rx_resources(adapter);
705
                e1000_free_all_tx_resources(adapter);
706
                kfree(tx_old);
707
                kfree(rx_old);
708
                adapter->rx_ring = rxdr;
709
                adapter->tx_ring = txdr;
710
                if ((err = e1000_up(adapter)))
711
                        goto err_setup;
712
        }
713
 
714
        clear_bit(__E1000_RESETTING, &adapter->flags);
715
        return 0;
716
err_setup_tx:
717
        e1000_free_all_rx_resources(adapter);
718
err_setup_rx:
719
        adapter->rx_ring = rx_old;
720
        adapter->tx_ring = tx_old;
721
        kfree(rxdr);
722
err_alloc_rx:
723
        kfree(txdr);
724
err_alloc_tx:
725
        e1000_up(adapter);
726
err_setup:
727
        clear_bit(__E1000_RESETTING, &adapter->flags);
728
        return err;
729
}
730
 
731
#define REG_PATTERN_TEST(R, M, W)                                              \
732
{                                                                              \
733
        uint32_t pat, val;                                                     \
734
        const uint32_t test[] =                                                \
735
                {0x5A5A5A5A, 0xA5A5A5A5, 0x00000000, 0xFFFFFFFF};              \
736
        for (pat = 0; pat < ARRAY_SIZE(test); pat++) {                          \
737
                E1000_WRITE_REG(&adapter->hw, R, (test[pat] & W));             \
738
                val = E1000_READ_REG(&adapter->hw, R);                         \
739
                if (val != (test[pat] & W & M)) {                              \
740
                        DPRINTK(DRV, ERR, "pattern test reg %04X failed: got " \
741
                                "0x%08X expected 0x%08X\n",                    \
742
                                E1000_##R, val, (test[pat] & W & M));          \
743
                        *data = (adapter->hw.mac_type < e1000_82543) ?         \
744
                                E1000_82542_##R : E1000_##R;                   \
745
                        return 1;                                              \
746
                }                                                              \
747
        }                                                                      \
748
}
749
 
750
#define REG_SET_AND_CHECK(R, M, W)                                             \
751
{                                                                              \
752
        uint32_t val;                                                          \
753
        E1000_WRITE_REG(&adapter->hw, R, W & M);                               \
754
        val = E1000_READ_REG(&adapter->hw, R);                                 \
755
        if ((W & M) != (val & M)) {                                            \
756
                DPRINTK(DRV, ERR, "set/check reg %04X test failed: got 0x%08X "\
757
                        "expected 0x%08X\n", E1000_##R, (val & M), (W & M));   \
758
                *data = (adapter->hw.mac_type < e1000_82543) ?                 \
759
                        E1000_82542_##R : E1000_##R;                           \
760
                return 1;                                                      \
761
        }                                                                      \
762
}
763
 
764
static int
765
e1000_reg_test(struct e1000_adapter *adapter, uint64_t *data)
766
{
767
        uint32_t value, before, after;
768
        uint32_t i, toggle;
769
 
770
        /* The status register is Read Only, so a write should fail.
771
         * Some bits that get toggled are ignored.
772
         */
773
        switch (adapter->hw.mac_type) {
774
        /* there are several bits on newer hardware that are r/w */
775
        case e1000_82571:
776
        case e1000_82572:
777
        case e1000_80003es2lan:
778
                toggle = 0x7FFFF3FF;
779
                break;
780
        case e1000_82573:
781
        case e1000_ich8lan:
782
                toggle = 0x7FFFF033;
783
                break;
784
        default:
785
                toggle = 0xFFFFF833;
786
                break;
787
        }
788
 
789
        before = E1000_READ_REG(&adapter->hw, STATUS);
790
        value = (E1000_READ_REG(&adapter->hw, STATUS) & toggle);
791
        E1000_WRITE_REG(&adapter->hw, STATUS, toggle);
792
        after = E1000_READ_REG(&adapter->hw, STATUS) & toggle;
793
        if (value != after) {
794
                DPRINTK(DRV, ERR, "failed STATUS register test got: "
795
                        "0x%08X expected: 0x%08X\n", after, value);
796
                *data = 1;
797
                return 1;
798
        }
799
        /* restore previous status */
800
        E1000_WRITE_REG(&adapter->hw, STATUS, before);
801
 
802
        if (adapter->hw.mac_type != e1000_ich8lan) {
803
                REG_PATTERN_TEST(FCAL, 0xFFFFFFFF, 0xFFFFFFFF);
804
                REG_PATTERN_TEST(FCAH, 0x0000FFFF, 0xFFFFFFFF);
805
                REG_PATTERN_TEST(FCT, 0x0000FFFF, 0xFFFFFFFF);
806
                REG_PATTERN_TEST(VET, 0x0000FFFF, 0xFFFFFFFF);
807
        }
808
 
809
        REG_PATTERN_TEST(RDTR, 0x0000FFFF, 0xFFFFFFFF);
810
        REG_PATTERN_TEST(RDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
811
        REG_PATTERN_TEST(RDLEN, 0x000FFF80, 0x000FFFFF);
812
        REG_PATTERN_TEST(RDH, 0x0000FFFF, 0x0000FFFF);
813
        REG_PATTERN_TEST(RDT, 0x0000FFFF, 0x0000FFFF);
814
        REG_PATTERN_TEST(FCRTH, 0x0000FFF8, 0x0000FFF8);
815
        REG_PATTERN_TEST(FCTTV, 0x0000FFFF, 0x0000FFFF);
816
        REG_PATTERN_TEST(TIPG, 0x3FFFFFFF, 0x3FFFFFFF);
817
        REG_PATTERN_TEST(TDBAH, 0xFFFFFFFF, 0xFFFFFFFF);
818
        REG_PATTERN_TEST(TDLEN, 0x000FFF80, 0x000FFFFF);
819
 
820
        REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x00000000);
821
 
822
        before = (adapter->hw.mac_type == e1000_ich8lan ?
823
                  0x06C3B33E : 0x06DFB3FE);
824
        REG_SET_AND_CHECK(RCTL, before, 0x003FFFFB);
825
        REG_SET_AND_CHECK(TCTL, 0xFFFFFFFF, 0x00000000);
826
 
827
        if (adapter->hw.mac_type >= e1000_82543) {
828
 
829
                REG_SET_AND_CHECK(RCTL, before, 0xFFFFFFFF);
830
                REG_PATTERN_TEST(RDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
831
                if (adapter->hw.mac_type != e1000_ich8lan)
832
                        REG_PATTERN_TEST(TXCW, 0xC000FFFF, 0x0000FFFF);
833
                REG_PATTERN_TEST(TDBAL, 0xFFFFFFF0, 0xFFFFFFFF);
834
                REG_PATTERN_TEST(TIDV, 0x0000FFFF, 0x0000FFFF);
835
                value = (adapter->hw.mac_type == e1000_ich8lan ?
836
                         E1000_RAR_ENTRIES_ICH8LAN : E1000_RAR_ENTRIES);
837
                for (i = 0; i < value; i++) {
838
                        REG_PATTERN_TEST(RA + (((i << 1) + 1) << 2), 0x8003FFFF,
839
                                         0xFFFFFFFF);
840
                }
841
 
842
        } else {
843
 
844
                REG_SET_AND_CHECK(RCTL, 0xFFFFFFFF, 0x01FFFFFF);
845
                REG_PATTERN_TEST(RDBAL, 0xFFFFF000, 0xFFFFFFFF);
846
                REG_PATTERN_TEST(TXCW, 0x0000FFFF, 0x0000FFFF);
847
                REG_PATTERN_TEST(TDBAL, 0xFFFFF000, 0xFFFFFFFF);
848
 
849
        }
850
 
851
        value = (adapter->hw.mac_type == e1000_ich8lan ?
852
                        E1000_MC_TBL_SIZE_ICH8LAN : E1000_MC_TBL_SIZE);
853
        for (i = 0; i < value; i++)
854
                REG_PATTERN_TEST(MTA + (i << 2), 0xFFFFFFFF, 0xFFFFFFFF);
855
 
856
        *data = 0;
857
        return 0;
858
}
859
 
860
static int
861
e1000_eeprom_test(struct e1000_adapter *adapter, uint64_t *data)
862
{
863
        uint16_t temp;
864
        uint16_t checksum = 0;
865
        uint16_t i;
866
 
867
        *data = 0;
868
        /* Read and add up the contents of the EEPROM */
869
        for (i = 0; i < (EEPROM_CHECKSUM_REG + 1); i++) {
870
                if ((e1000_read_eeprom(&adapter->hw, i, 1, &temp)) < 0) {
871
                        *data = 1;
872
                        break;
873
                }
874
                checksum += temp;
875
        }
876
 
877
        /* If Checksum is not Correct return error else test passed */
878
        if ((checksum != (uint16_t) EEPROM_SUM) && !(*data))
879
                *data = 2;
880
 
881
        return *data;
882
}
883
 
884
static irqreturn_t
885
e1000_test_intr(int irq, void *data)
886
{
887
        struct net_device *netdev = (struct net_device *) data;
888
        struct e1000_adapter *adapter = netdev_priv(netdev);
889
 
890
        adapter->test_icr |= E1000_READ_REG(&adapter->hw, ICR);
891
 
892
        return IRQ_HANDLED;
893
}
894
 
895
static int
896
e1000_intr_test(struct e1000_adapter *adapter, uint64_t *data)
897
{
898
        struct net_device *netdev = adapter->netdev;
899
        uint32_t mask, i=0, shared_int = TRUE;
900
        uint32_t irq = adapter->pdev->irq;
901
 
902
        *data = 0;
903
 
904
        /* NOTE: we don't test MSI interrupts here, yet */
905
        /* Hook up test interrupt handler just for this test */
906
        if (!request_irq(irq, &e1000_test_intr, IRQF_PROBE_SHARED, netdev->name,
907
                         netdev))
908
                shared_int = FALSE;
909
        else if (request_irq(irq, &e1000_test_intr, IRQF_SHARED,
910
                 netdev->name, netdev)) {
911
                *data = 1;
912
                return -1;
913
        }
914
        DPRINTK(HW, INFO, "testing %s interrupt\n",
915
                (shared_int ? "shared" : "unshared"));
916
 
917
        /* Disable all the interrupts */
918
        E1000_WRITE_REG(&adapter->hw, IMC, 0xFFFFFFFF);
919
        msleep(10);
920
 
921
        /* Test each interrupt */
922
        for (; i < 10; i++) {
923
 
924
                if (adapter->hw.mac_type == e1000_ich8lan && i == 8)
925
                        continue;
926
 
927
                /* Interrupt to test */
928
                mask = 1 << i;
929
 
930
                if (!shared_int) {
931
                        /* Disable the interrupt to be reported in
932
                         * the cause register and then force the same
933
                         * interrupt and see if one gets posted.  If
934
                         * an interrupt was posted to the bus, the
935
                         * test failed.
936
                         */
937
                        adapter->test_icr = 0;
938
                        E1000_WRITE_REG(&adapter->hw, IMC, mask);
939
                        E1000_WRITE_REG(&adapter->hw, ICS, mask);
940
                        msleep(10);
941
 
942
                        if (adapter->test_icr & mask) {
943
                                *data = 3;
944
                                break;
945
                        }
946
                }
947
 
948
                /* Enable the interrupt to be reported in
949
                 * the cause register and then force the same
950
                 * interrupt and see if one gets posted.  If
951
                 * an interrupt was not posted to the bus, the
952
                 * test failed.
953
                 */
954
                adapter->test_icr = 0;
955
                E1000_WRITE_REG(&adapter->hw, IMS, mask);
956
                E1000_WRITE_REG(&adapter->hw, ICS, mask);
957
                msleep(10);
958
 
959
                if (!(adapter->test_icr & mask)) {
960
                        *data = 4;
961
                        break;
962
                }
963
 
964
                if (!shared_int) {
965
                        /* Disable the other interrupts to be reported in
966
                         * the cause register and then force the other
967
                         * interrupts and see if any get posted.  If
968
                         * an interrupt was posted to the bus, the
969
                         * test failed.
970
                         */
971
                        adapter->test_icr = 0;
972
                        E1000_WRITE_REG(&adapter->hw, IMC, ~mask & 0x00007FFF);
973
                        E1000_WRITE_REG(&adapter->hw, ICS, ~mask & 0x00007FFF);
974
                        msleep(10);
975
 
976
                        if (adapter->test_icr) {
977
                                *data = 5;
978
                                break;
979
                        }
980
                }
981
        }
982
 
983
        /* Disable all the interrupts */
984
        E1000_WRITE_REG(&adapter->hw, IMC, 0xFFFFFFFF);
985
        msleep(10);
986
 
987
        /* Unhook test interrupt handler */
988
        free_irq(irq, netdev);
989
 
990
        return *data;
991
}
992
 
993
static void
994
e1000_free_desc_rings(struct e1000_adapter *adapter)
995
{
996
        struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
997
        struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
998
        struct pci_dev *pdev = adapter->pdev;
999
        int i;
1000
 
1001
        if (txdr->desc && txdr->buffer_info) {
1002
                for (i = 0; i < txdr->count; i++) {
1003
                        if (txdr->buffer_info[i].dma)
1004
                                pci_unmap_single(pdev, txdr->buffer_info[i].dma,
1005
                                                 txdr->buffer_info[i].length,
1006
                                                 PCI_DMA_TODEVICE);
1007
                        if (txdr->buffer_info[i].skb)
1008
                                dev_kfree_skb(txdr->buffer_info[i].skb);
1009
                }
1010
        }
1011
 
1012
        if (rxdr->desc && rxdr->buffer_info) {
1013
                for (i = 0; i < rxdr->count; i++) {
1014
                        if (rxdr->buffer_info[i].dma)
1015
                                pci_unmap_single(pdev, rxdr->buffer_info[i].dma,
1016
                                                 rxdr->buffer_info[i].length,
1017
                                                 PCI_DMA_FROMDEVICE);
1018
                        if (rxdr->buffer_info[i].skb)
1019
                                dev_kfree_skb(rxdr->buffer_info[i].skb);
1020
                }
1021
        }
1022
 
1023
        if (txdr->desc) {
1024
                pci_free_consistent(pdev, txdr->size, txdr->desc, txdr->dma);
1025
                txdr->desc = NULL;
1026
        }
1027
        if (rxdr->desc) {
1028
                pci_free_consistent(pdev, rxdr->size, rxdr->desc, rxdr->dma);
1029
                rxdr->desc = NULL;
1030
        }
1031
 
1032
        kfree(txdr->buffer_info);
1033
        txdr->buffer_info = NULL;
1034
        kfree(rxdr->buffer_info);
1035
        rxdr->buffer_info = NULL;
1036
 
1037
        return;
1038
}
1039
 
1040
static int
1041
e1000_setup_desc_rings(struct e1000_adapter *adapter)
1042
{
1043
        struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1044
        struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1045
        struct pci_dev *pdev = adapter->pdev;
1046
        uint32_t rctl;
1047
        int i, ret_val;
1048
 
1049
        /* Setup Tx descriptor ring and Tx buffers */
1050
 
1051
        if (!txdr->count)
1052
                txdr->count = E1000_DEFAULT_TXD;
1053
 
1054
        if (!(txdr->buffer_info = kcalloc(txdr->count,
1055
                                          sizeof(struct e1000_buffer),
1056
                                          GFP_KERNEL))) {
1057
                ret_val = 1;
1058
                goto err_nomem;
1059
        }
1060
 
1061
        txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
1062
        txdr->size = ALIGN(txdr->size, 4096);
1063
        if (!(txdr->desc = pci_alloc_consistent(pdev, txdr->size,
1064
                                                &txdr->dma))) {
1065
                ret_val = 2;
1066
                goto err_nomem;
1067
        }
1068
        memset(txdr->desc, 0, txdr->size);
1069
        txdr->next_to_use = txdr->next_to_clean = 0;
1070
 
1071
        E1000_WRITE_REG(&adapter->hw, TDBAL,
1072
                        ((uint64_t) txdr->dma & 0x00000000FFFFFFFF));
1073
        E1000_WRITE_REG(&adapter->hw, TDBAH, ((uint64_t) txdr->dma >> 32));
1074
        E1000_WRITE_REG(&adapter->hw, TDLEN,
1075
                        txdr->count * sizeof(struct e1000_tx_desc));
1076
        E1000_WRITE_REG(&adapter->hw, TDH, 0);
1077
        E1000_WRITE_REG(&adapter->hw, TDT, 0);
1078
        E1000_WRITE_REG(&adapter->hw, TCTL,
1079
                        E1000_TCTL_PSP | E1000_TCTL_EN |
1080
                        E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT |
1081
                        E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT);
1082
 
1083
        for (i = 0; i < txdr->count; i++) {
1084
                struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*txdr, i);
1085
                struct sk_buff *skb;
1086
                unsigned int size = 1024;
1087
 
1088
                if (!(skb = alloc_skb(size, GFP_KERNEL))) {
1089
                        ret_val = 3;
1090
                        goto err_nomem;
1091
                }
1092
                skb_put(skb, size);
1093
                txdr->buffer_info[i].skb = skb;
1094
                txdr->buffer_info[i].length = skb->len;
1095
                txdr->buffer_info[i].dma =
1096
                        pci_map_single(pdev, skb->data, skb->len,
1097
                                       PCI_DMA_TODEVICE);
1098
                tx_desc->buffer_addr = cpu_to_le64(txdr->buffer_info[i].dma);
1099
                tx_desc->lower.data = cpu_to_le32(skb->len);
1100
                tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP |
1101
                                                   E1000_TXD_CMD_IFCS |
1102
                                                   E1000_TXD_CMD_RPS);
1103
                tx_desc->upper.data = 0;
1104
        }
1105
 
1106
        /* Setup Rx descriptor ring and Rx buffers */
1107
 
1108
        if (!rxdr->count)
1109
                rxdr->count = E1000_DEFAULT_RXD;
1110
 
1111
        if (!(rxdr->buffer_info = kcalloc(rxdr->count,
1112
                                          sizeof(struct e1000_buffer),
1113
                                          GFP_KERNEL))) {
1114
                ret_val = 4;
1115
                goto err_nomem;
1116
        }
1117
 
1118
        rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
1119
        if (!(rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma))) {
1120
                ret_val = 5;
1121
                goto err_nomem;
1122
        }
1123
        memset(rxdr->desc, 0, rxdr->size);
1124
        rxdr->next_to_use = rxdr->next_to_clean = 0;
1125
 
1126
        rctl = E1000_READ_REG(&adapter->hw, RCTL);
1127
        E1000_WRITE_REG(&adapter->hw, RCTL, rctl & ~E1000_RCTL_EN);
1128
        E1000_WRITE_REG(&adapter->hw, RDBAL,
1129
                        ((uint64_t) rxdr->dma & 0xFFFFFFFF));
1130
        E1000_WRITE_REG(&adapter->hw, RDBAH, ((uint64_t) rxdr->dma >> 32));
1131
        E1000_WRITE_REG(&adapter->hw, RDLEN, rxdr->size);
1132
        E1000_WRITE_REG(&adapter->hw, RDH, 0);
1133
        E1000_WRITE_REG(&adapter->hw, RDT, 0);
1134
        rctl = E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
1135
                E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
1136
                (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
1137
        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1138
 
1139
        for (i = 0; i < rxdr->count; i++) {
1140
                struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rxdr, i);
1141
                struct sk_buff *skb;
1142
 
1143
                if (!(skb = alloc_skb(E1000_RXBUFFER_2048 + NET_IP_ALIGN,
1144
                                GFP_KERNEL))) {
1145
                        ret_val = 6;
1146
                        goto err_nomem;
1147
                }
1148
                skb_reserve(skb, NET_IP_ALIGN);
1149
                rxdr->buffer_info[i].skb = skb;
1150
                rxdr->buffer_info[i].length = E1000_RXBUFFER_2048;
1151
                rxdr->buffer_info[i].dma =
1152
                        pci_map_single(pdev, skb->data, E1000_RXBUFFER_2048,
1153
                                       PCI_DMA_FROMDEVICE);
1154
                rx_desc->buffer_addr = cpu_to_le64(rxdr->buffer_info[i].dma);
1155
                memset(skb->data, 0x00, skb->len);
1156
        }
1157
 
1158
        return 0;
1159
 
1160
err_nomem:
1161
        e1000_free_desc_rings(adapter);
1162
        return ret_val;
1163
}
1164
 
1165
static void
1166
e1000_phy_disable_receiver(struct e1000_adapter *adapter)
1167
{
1168
        /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1169
        e1000_write_phy_reg(&adapter->hw, 29, 0x001F);
1170
        e1000_write_phy_reg(&adapter->hw, 30, 0x8FFC);
1171
        e1000_write_phy_reg(&adapter->hw, 29, 0x001A);
1172
        e1000_write_phy_reg(&adapter->hw, 30, 0x8FF0);
1173
}
1174
 
1175
static void
1176
e1000_phy_reset_clk_and_crs(struct e1000_adapter *adapter)
1177
{
1178
        uint16_t phy_reg;
1179
 
1180
        /* Because we reset the PHY above, we need to re-force TX_CLK in the
1181
         * Extended PHY Specific Control Register to 25MHz clock.  This
1182
         * value defaults back to a 2.5MHz clock when the PHY is reset.
1183
         */
1184
        e1000_read_phy_reg(&adapter->hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1185
        phy_reg |= M88E1000_EPSCR_TX_CLK_25;
1186
        e1000_write_phy_reg(&adapter->hw,
1187
                M88E1000_EXT_PHY_SPEC_CTRL, phy_reg);
1188
 
1189
        /* In addition, because of the s/w reset above, we need to enable
1190
         * CRS on TX.  This must be set for both full and half duplex
1191
         * operation.
1192
         */
1193
        e1000_read_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1194
        phy_reg |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
1195
        e1000_write_phy_reg(&adapter->hw,
1196
                M88E1000_PHY_SPEC_CTRL, phy_reg);
1197
}
1198
 
1199
static int
1200
e1000_nonintegrated_phy_loopback(struct e1000_adapter *adapter)
1201
{
1202
        uint32_t ctrl_reg;
1203
        uint16_t phy_reg;
1204
 
1205
        /* Setup the Device Control Register for PHY loopback test. */
1206
 
1207
        ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
1208
        ctrl_reg |= (E1000_CTRL_ILOS |          /* Invert Loss-Of-Signal */
1209
                     E1000_CTRL_FRCSPD |        /* Set the Force Speed Bit */
1210
                     E1000_CTRL_FRCDPX |        /* Set the Force Duplex Bit */
1211
                     E1000_CTRL_SPD_1000 |      /* Force Speed to 1000 */
1212
                     E1000_CTRL_FD);            /* Force Duplex to FULL */
1213
 
1214
        E1000_WRITE_REG(&adapter->hw, CTRL, ctrl_reg);
1215
 
1216
        /* Read the PHY Specific Control Register (0x10) */
1217
        e1000_read_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL, &phy_reg);
1218
 
1219
        /* Clear Auto-Crossover bits in PHY Specific Control Register
1220
         * (bits 6:5).
1221
         */
1222
        phy_reg &= ~M88E1000_PSCR_AUTO_X_MODE;
1223
        e1000_write_phy_reg(&adapter->hw, M88E1000_PHY_SPEC_CTRL, phy_reg);
1224
 
1225
        /* Perform software reset on the PHY */
1226
        e1000_phy_reset(&adapter->hw);
1227
 
1228
        /* Have to setup TX_CLK and TX_CRS after software reset */
1229
        e1000_phy_reset_clk_and_crs(adapter);
1230
 
1231
        e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8100);
1232
 
1233
        /* Wait for reset to complete. */
1234
        udelay(500);
1235
 
1236
        /* Have to setup TX_CLK and TX_CRS after software reset */
1237
        e1000_phy_reset_clk_and_crs(adapter);
1238
 
1239
        /* Write out to PHY registers 29 and 30 to disable the Receiver. */
1240
        e1000_phy_disable_receiver(adapter);
1241
 
1242
        /* Set the loopback bit in the PHY control register. */
1243
        e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
1244
        phy_reg |= MII_CR_LOOPBACK;
1245
        e1000_write_phy_reg(&adapter->hw, PHY_CTRL, phy_reg);
1246
 
1247
        /* Setup TX_CLK and TX_CRS one more time. */
1248
        e1000_phy_reset_clk_and_crs(adapter);
1249
 
1250
        /* Check Phy Configuration */
1251
        e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
1252
        if (phy_reg != 0x4100)
1253
                 return 9;
1254
 
1255
        e1000_read_phy_reg(&adapter->hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_reg);
1256
        if (phy_reg != 0x0070)
1257
                return 10;
1258
 
1259
        e1000_read_phy_reg(&adapter->hw, 29, &phy_reg);
1260
        if (phy_reg != 0x001A)
1261
                return 11;
1262
 
1263
        return 0;
1264
}
1265
 
1266
static int
1267
e1000_integrated_phy_loopback(struct e1000_adapter *adapter)
1268
{
1269
        uint32_t ctrl_reg = 0;
1270
        uint32_t stat_reg = 0;
1271
 
1272
        adapter->hw.autoneg = FALSE;
1273
 
1274
        if (adapter->hw.phy_type == e1000_phy_m88) {
1275
                /* Auto-MDI/MDIX Off */
1276
                e1000_write_phy_reg(&adapter->hw,
1277
                                    M88E1000_PHY_SPEC_CTRL, 0x0808);
1278
                /* reset to update Auto-MDI/MDIX */
1279
                e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x9140);
1280
                /* autoneg off */
1281
                e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x8140);
1282
        } else if (adapter->hw.phy_type == e1000_phy_gg82563)
1283
                e1000_write_phy_reg(&adapter->hw,
1284
                                    GG82563_PHY_KMRN_MODE_CTRL,
1285
                                    0x1CC);
1286
 
1287
        ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
1288
 
1289
        if (adapter->hw.phy_type == e1000_phy_ife) {
1290
                /* force 100, set loopback */
1291
                e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x6100);
1292
 
1293
                /* Now set up the MAC to the same speed/duplex as the PHY. */
1294
                ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1295
                ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1296
                             E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1297
                             E1000_CTRL_SPD_100 |/* Force Speed to 100 */
1298
                             E1000_CTRL_FD);     /* Force Duplex to FULL */
1299
        } else {
1300
                /* force 1000, set loopback */
1301
                e1000_write_phy_reg(&adapter->hw, PHY_CTRL, 0x4140);
1302
 
1303
                /* Now set up the MAC to the same speed/duplex as the PHY. */
1304
                ctrl_reg = E1000_READ_REG(&adapter->hw, CTRL);
1305
                ctrl_reg &= ~E1000_CTRL_SPD_SEL; /* Clear the speed sel bits */
1306
                ctrl_reg |= (E1000_CTRL_FRCSPD | /* Set the Force Speed Bit */
1307
                             E1000_CTRL_FRCDPX | /* Set the Force Duplex Bit */
1308
                             E1000_CTRL_SPD_1000 |/* Force Speed to 1000 */
1309
                             E1000_CTRL_FD);     /* Force Duplex to FULL */
1310
        }
1311
 
1312
        if (adapter->hw.media_type == e1000_media_type_copper &&
1313
           adapter->hw.phy_type == e1000_phy_m88)
1314
                ctrl_reg |= E1000_CTRL_ILOS; /* Invert Loss of Signal */
1315
        else {
1316
                /* Set the ILOS bit on the fiber Nic is half
1317
                 * duplex link is detected. */
1318
                stat_reg = E1000_READ_REG(&adapter->hw, STATUS);
1319
                if ((stat_reg & E1000_STATUS_FD) == 0)
1320
                        ctrl_reg |= (E1000_CTRL_ILOS | E1000_CTRL_SLU);
1321
        }
1322
 
1323
        E1000_WRITE_REG(&adapter->hw, CTRL, ctrl_reg);
1324
 
1325
        /* Disable the receiver on the PHY so when a cable is plugged in, the
1326
         * PHY does not begin to autoneg when a cable is reconnected to the NIC.
1327
         */
1328
        if (adapter->hw.phy_type == e1000_phy_m88)
1329
                e1000_phy_disable_receiver(adapter);
1330
 
1331
        udelay(500);
1332
 
1333
        return 0;
1334
}
1335
 
1336
static int
1337
e1000_set_phy_loopback(struct e1000_adapter *adapter)
1338
{
1339
        uint16_t phy_reg = 0;
1340
        uint16_t count = 0;
1341
 
1342
        switch (adapter->hw.mac_type) {
1343
        case e1000_82543:
1344
                if (adapter->hw.media_type == e1000_media_type_copper) {
1345
                        /* Attempt to setup Loopback mode on Non-integrated PHY.
1346
                         * Some PHY registers get corrupted at random, so
1347
                         * attempt this 10 times.
1348
                         */
1349
                        while (e1000_nonintegrated_phy_loopback(adapter) &&
1350
                              count++ < 10);
1351
                        if (count < 11)
1352
                                return 0;
1353
                }
1354
                break;
1355
 
1356
        case e1000_82544:
1357
        case e1000_82540:
1358
        case e1000_82545:
1359
        case e1000_82545_rev_3:
1360
        case e1000_82546:
1361
        case e1000_82546_rev_3:
1362
        case e1000_82541:
1363
        case e1000_82541_rev_2:
1364
        case e1000_82547:
1365
        case e1000_82547_rev_2:
1366
        case e1000_82571:
1367
        case e1000_82572:
1368
        case e1000_82573:
1369
        case e1000_80003es2lan:
1370
        case e1000_ich8lan:
1371
                return e1000_integrated_phy_loopback(adapter);
1372
                break;
1373
 
1374
        default:
1375
                /* Default PHY loopback work is to read the MII
1376
                 * control register and assert bit 14 (loopback mode).
1377
                 */
1378
                e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_reg);
1379
                phy_reg |= MII_CR_LOOPBACK;
1380
                e1000_write_phy_reg(&adapter->hw, PHY_CTRL, phy_reg);
1381
                return 0;
1382
                break;
1383
        }
1384
 
1385
        return 8;
1386
}
1387
 
1388
static int
1389
e1000_setup_loopback_test(struct e1000_adapter *adapter)
1390
{
1391
        struct e1000_hw *hw = &adapter->hw;
1392
        uint32_t rctl;
1393
 
1394
        if (hw->media_type == e1000_media_type_fiber ||
1395
            hw->media_type == e1000_media_type_internal_serdes) {
1396
                switch (hw->mac_type) {
1397
                case e1000_82545:
1398
                case e1000_82546:
1399
                case e1000_82545_rev_3:
1400
                case e1000_82546_rev_3:
1401
                        return e1000_set_phy_loopback(adapter);
1402
                        break;
1403
                case e1000_82571:
1404
                case e1000_82572:
1405
#define E1000_SERDES_LB_ON 0x410
1406
                        e1000_set_phy_loopback(adapter);
1407
                        E1000_WRITE_REG(hw, SCTL, E1000_SERDES_LB_ON);
1408
                        msleep(10);
1409
                        return 0;
1410
                        break;
1411
                default:
1412
                        rctl = E1000_READ_REG(hw, RCTL);
1413
                        rctl |= E1000_RCTL_LBM_TCVR;
1414
                        E1000_WRITE_REG(hw, RCTL, rctl);
1415
                        return 0;
1416
                }
1417
        } else if (hw->media_type == e1000_media_type_copper)
1418
                return e1000_set_phy_loopback(adapter);
1419
 
1420
        return 7;
1421
}
1422
 
1423
static void
1424
e1000_loopback_cleanup(struct e1000_adapter *adapter)
1425
{
1426
        struct e1000_hw *hw = &adapter->hw;
1427
        uint32_t rctl;
1428
        uint16_t phy_reg;
1429
 
1430
        rctl = E1000_READ_REG(hw, RCTL);
1431
        rctl &= ~(E1000_RCTL_LBM_TCVR | E1000_RCTL_LBM_MAC);
1432
        E1000_WRITE_REG(hw, RCTL, rctl);
1433
 
1434
        switch (hw->mac_type) {
1435
        case e1000_82571:
1436
        case e1000_82572:
1437
                if (hw->media_type == e1000_media_type_fiber ||
1438
                    hw->media_type == e1000_media_type_internal_serdes) {
1439
#define E1000_SERDES_LB_OFF 0x400
1440
                        E1000_WRITE_REG(hw, SCTL, E1000_SERDES_LB_OFF);
1441
                        msleep(10);
1442
                        break;
1443
                }
1444
                /* Fall Through */
1445
        case e1000_82545:
1446
        case e1000_82546:
1447
        case e1000_82545_rev_3:
1448
        case e1000_82546_rev_3:
1449
        default:
1450
                hw->autoneg = TRUE;
1451
                if (hw->phy_type == e1000_phy_gg82563)
1452
                        e1000_write_phy_reg(hw,
1453
                                            GG82563_PHY_KMRN_MODE_CTRL,
1454
                                            0x180);
1455
                e1000_read_phy_reg(hw, PHY_CTRL, &phy_reg);
1456
                if (phy_reg & MII_CR_LOOPBACK) {
1457
                        phy_reg &= ~MII_CR_LOOPBACK;
1458
                        e1000_write_phy_reg(hw, PHY_CTRL, phy_reg);
1459
                        e1000_phy_reset(hw);
1460
                }
1461
                break;
1462
        }
1463
}
1464
 
1465
static void
1466
e1000_create_lbtest_frame(struct sk_buff *skb, unsigned int frame_size)
1467
{
1468
        memset(skb->data, 0xFF, frame_size);
1469
        frame_size &= ~1;
1470
        memset(&skb->data[frame_size / 2], 0xAA, frame_size / 2 - 1);
1471
        memset(&skb->data[frame_size / 2 + 10], 0xBE, 1);
1472
        memset(&skb->data[frame_size / 2 + 12], 0xAF, 1);
1473
}
1474
 
1475
static int
1476
e1000_check_lbtest_frame(struct sk_buff *skb, unsigned int frame_size)
1477
{
1478
        frame_size &= ~1;
1479
        if (*(skb->data + 3) == 0xFF) {
1480
                if ((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
1481
                   (*(skb->data + frame_size / 2 + 12) == 0xAF)) {
1482
                        return 0;
1483
                }
1484
        }
1485
        return 13;
1486
}
1487
 
1488
static int
1489
e1000_run_loopback_test(struct e1000_adapter *adapter)
1490
{
1491
        struct e1000_tx_ring *txdr = &adapter->test_tx_ring;
1492
        struct e1000_rx_ring *rxdr = &adapter->test_rx_ring;
1493
        struct pci_dev *pdev = adapter->pdev;
1494
        int i, j, k, l, lc, good_cnt, ret_val=0;
1495
        unsigned long time;
1496
 
1497
        E1000_WRITE_REG(&adapter->hw, RDT, rxdr->count - 1);
1498
 
1499
        /* Calculate the loop count based on the largest descriptor ring
1500
         * The idea is to wrap the largest ring a number of times using 64
1501
         * send/receive pairs during each loop
1502
         */
1503
 
1504
        if (rxdr->count <= txdr->count)
1505
                lc = ((txdr->count / 64) * 2) + 1;
1506
        else
1507
                lc = ((rxdr->count / 64) * 2) + 1;
1508
 
1509
        k = l = 0;
1510
        for (j = 0; j <= lc; j++) { /* loop count loop */
1511
                for (i = 0; i < 64; i++) { /* send the packets */
1512
                        e1000_create_lbtest_frame(txdr->buffer_info[i].skb,
1513
                                        1024);
1514
                        pci_dma_sync_single_for_device(pdev,
1515
                                        txdr->buffer_info[k].dma,
1516
                                        txdr->buffer_info[k].length,
1517
                                        PCI_DMA_TODEVICE);
1518
                        if (unlikely(++k == txdr->count)) k = 0;
1519
                }
1520
                E1000_WRITE_REG(&adapter->hw, TDT, k);
1521
                msleep(200);
1522
                time = jiffies; /* set the start time for the receive */
1523
                good_cnt = 0;
1524
                do { /* receive the sent packets */
1525
                        pci_dma_sync_single_for_cpu(pdev,
1526
                                        rxdr->buffer_info[l].dma,
1527
                                        rxdr->buffer_info[l].length,
1528
                                        PCI_DMA_FROMDEVICE);
1529
 
1530
                        ret_val = e1000_check_lbtest_frame(
1531
                                        rxdr->buffer_info[l].skb,
1532
                                        1024);
1533
                        if (!ret_val)
1534
                                good_cnt++;
1535
                        if (unlikely(++l == rxdr->count)) l = 0;
1536
                        /* time + 20 msecs (200 msecs on 2.4) is more than
1537
                         * enough time to complete the receives, if it's
1538
                         * exceeded, break and error off
1539
                         */
1540
                } while (good_cnt < 64 && jiffies < (time + 20));
1541
                if (good_cnt != 64) {
1542
                        ret_val = 13; /* ret_val is the same as mis-compare */
1543
                        break;
1544
                }
1545
                if (jiffies >= (time + 2)) {
1546
                        ret_val = 14; /* error code for time out error */
1547
                        break;
1548
                }
1549
        } /* end loop count loop */
1550
        return ret_val;
1551
}
1552
 
1553
static int
1554
e1000_loopback_test(struct e1000_adapter *adapter, uint64_t *data)
1555
{
1556
        /* PHY loopback cannot be performed if SoL/IDER
1557
         * sessions are active */
1558
        if (e1000_check_phy_reset_block(&adapter->hw)) {
1559
                DPRINTK(DRV, ERR, "Cannot do PHY loopback test "
1560
                        "when SoL/IDER is active.\n");
1561
                *data = 0;
1562
                goto out;
1563
        }
1564
 
1565
        if ((*data = e1000_setup_desc_rings(adapter)))
1566
                goto out;
1567
        if ((*data = e1000_setup_loopback_test(adapter)))
1568
                goto err_loopback;
1569
        *data = e1000_run_loopback_test(adapter);
1570
        e1000_loopback_cleanup(adapter);
1571
 
1572
err_loopback:
1573
        e1000_free_desc_rings(adapter);
1574
out:
1575
        return *data;
1576
}
1577
 
1578
static int
1579
e1000_link_test(struct e1000_adapter *adapter, uint64_t *data)
1580
{
1581
        *data = 0;
1582
        if (adapter->hw.media_type == e1000_media_type_internal_serdes) {
1583
                int i = 0;
1584
                adapter->hw.serdes_link_down = TRUE;
1585
 
1586
                /* On some blade server designs, link establishment
1587
                 * could take as long as 2-3 minutes */
1588
                do {
1589
                        e1000_check_for_link(&adapter->hw);
1590
                        if (adapter->hw.serdes_link_down == FALSE)
1591
                                return *data;
1592
                        msleep(20);
1593
                } while (i++ < 3750);
1594
 
1595
                *data = 1;
1596
        } else {
1597
                e1000_check_for_link(&adapter->hw);
1598
                if (adapter->hw.autoneg)  /* if auto_neg is set wait for it */
1599
                        msleep(4000);
1600
 
1601
                if (!(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU)) {
1602
                        *data = 1;
1603
                }
1604
        }
1605
        return *data;
1606
}
1607
 
1608
static int
1609
e1000_get_sset_count(struct net_device *netdev, int sset)
1610
{
1611
        switch (sset) {
1612
        case ETH_SS_TEST:
1613
                return E1000_TEST_LEN;
1614
        case ETH_SS_STATS:
1615
                return E1000_STATS_LEN;
1616
        default:
1617
                return -EOPNOTSUPP;
1618
        }
1619
}
1620
 
1621
static void
1622
e1000_diag_test(struct net_device *netdev,
1623
                   struct ethtool_test *eth_test, uint64_t *data)
1624
{
1625
        struct e1000_adapter *adapter = netdev_priv(netdev);
1626
        boolean_t if_running = netif_running(netdev);
1627
 
1628
        set_bit(__E1000_TESTING, &adapter->flags);
1629
        if (eth_test->flags == ETH_TEST_FL_OFFLINE) {
1630
                /* Offline tests */
1631
 
1632
                /* save speed, duplex, autoneg settings */
1633
                uint16_t autoneg_advertised = adapter->hw.autoneg_advertised;
1634
                uint8_t forced_speed_duplex = adapter->hw.forced_speed_duplex;
1635
                uint8_t autoneg = adapter->hw.autoneg;
1636
 
1637
                DPRINTK(HW, INFO, "offline testing starting\n");
1638
 
1639
                /* Link test performed before hardware reset so autoneg doesn't
1640
                 * interfere with test result */
1641
                if (e1000_link_test(adapter, &data[4]))
1642
                        eth_test->flags |= ETH_TEST_FL_FAILED;
1643
 
1644
                if (if_running)
1645
                        /* indicate we're in test mode */
1646
                        dev_close(netdev);
1647
                else
1648
                        e1000_reset(adapter);
1649
 
1650
                if (e1000_reg_test(adapter, &data[0]))
1651
                        eth_test->flags |= ETH_TEST_FL_FAILED;
1652
 
1653
                e1000_reset(adapter);
1654
                if (e1000_eeprom_test(adapter, &data[1]))
1655
                        eth_test->flags |= ETH_TEST_FL_FAILED;
1656
 
1657
                e1000_reset(adapter);
1658
                if (e1000_intr_test(adapter, &data[2]))
1659
                        eth_test->flags |= ETH_TEST_FL_FAILED;
1660
 
1661
                e1000_reset(adapter);
1662
                /* make sure the phy is powered up */
1663
                e1000_power_up_phy(adapter);
1664
                if (e1000_loopback_test(adapter, &data[3]))
1665
                        eth_test->flags |= ETH_TEST_FL_FAILED;
1666
 
1667
                /* restore speed, duplex, autoneg settings */
1668
                adapter->hw.autoneg_advertised = autoneg_advertised;
1669
                adapter->hw.forced_speed_duplex = forced_speed_duplex;
1670
                adapter->hw.autoneg = autoneg;
1671
 
1672
                e1000_reset(adapter);
1673
                clear_bit(__E1000_TESTING, &adapter->flags);
1674
                if (if_running)
1675
                        dev_open(netdev);
1676
        } else {
1677
                DPRINTK(HW, INFO, "online testing starting\n");
1678
                /* Online tests */
1679
                if (e1000_link_test(adapter, &data[4]))
1680
                        eth_test->flags |= ETH_TEST_FL_FAILED;
1681
 
1682
                /* Online tests aren't run; pass by default */
1683
                data[0] = 0;
1684
                data[1] = 0;
1685
                data[2] = 0;
1686
                data[3] = 0;
1687
 
1688
                clear_bit(__E1000_TESTING, &adapter->flags);
1689
        }
1690
        msleep_interruptible(4 * 1000);
1691
}
1692
 
1693
static int e1000_wol_exclusion(struct e1000_adapter *adapter, struct ethtool_wolinfo *wol)
1694
{
1695
        struct e1000_hw *hw = &adapter->hw;
1696
        int retval = 1; /* fail by default */
1697
 
1698
        switch (hw->device_id) {
1699
        case E1000_DEV_ID_82542:
1700
        case E1000_DEV_ID_82543GC_FIBER:
1701
        case E1000_DEV_ID_82543GC_COPPER:
1702
        case E1000_DEV_ID_82544EI_FIBER:
1703
        case E1000_DEV_ID_82546EB_QUAD_COPPER:
1704
        case E1000_DEV_ID_82545EM_FIBER:
1705
        case E1000_DEV_ID_82545EM_COPPER:
1706
        case E1000_DEV_ID_82546GB_QUAD_COPPER:
1707
        case E1000_DEV_ID_82546GB_PCIE:
1708
        case E1000_DEV_ID_82571EB_SERDES_QUAD:
1709
                /* these don't support WoL at all */
1710
                wol->supported = 0;
1711
                break;
1712
        case E1000_DEV_ID_82546EB_FIBER:
1713
        case E1000_DEV_ID_82546GB_FIBER:
1714
        case E1000_DEV_ID_82571EB_FIBER:
1715
        case E1000_DEV_ID_82571EB_SERDES:
1716
        case E1000_DEV_ID_82571EB_COPPER:
1717
                /* Wake events not supported on port B */
1718
                if (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1) {
1719
                        wol->supported = 0;
1720
                        break;
1721
                }
1722
                /* return success for non excluded adapter ports */
1723
                retval = 0;
1724
                break;
1725
        case E1000_DEV_ID_82571EB_QUAD_COPPER:
1726
        case E1000_DEV_ID_82571EB_QUAD_FIBER:
1727
        case E1000_DEV_ID_82571EB_QUAD_COPPER_LOWPROFILE:
1728
        case E1000_DEV_ID_82571PT_QUAD_COPPER:
1729
        case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1730
                /* quad port adapters only support WoL on port A */
1731
                if (!adapter->quad_port_a) {
1732
                        wol->supported = 0;
1733
                        break;
1734
                }
1735
                /* return success for non excluded adapter ports */
1736
                retval = 0;
1737
                break;
1738
        default:
1739
                /* dual port cards only support WoL on port A from now on
1740
                 * unless it was enabled in the eeprom for port B
1741
                 * so exclude FUNC_1 ports from having WoL enabled */
1742
                if (E1000_READ_REG(hw, STATUS) & E1000_STATUS_FUNC_1 &&
1743
                    !adapter->eeprom_wol) {
1744
                        wol->supported = 0;
1745
                        break;
1746
                }
1747
 
1748
                retval = 0;
1749
        }
1750
 
1751
        return retval;
1752
}
1753
 
1754
static void
1755
e1000_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
1756
{
1757
        struct e1000_adapter *adapter = netdev_priv(netdev);
1758
 
1759
        wol->supported = WAKE_UCAST | WAKE_MCAST |
1760
                         WAKE_BCAST | WAKE_MAGIC;
1761
        wol->wolopts = 0;
1762
 
1763
        /* this function will set ->supported = 0 and return 1 if wol is not
1764
         * supported by this hardware */
1765
        if (e1000_wol_exclusion(adapter, wol))
1766
                return;
1767
 
1768
        /* apply any specific unsupported masks here */
1769
        switch (adapter->hw.device_id) {
1770
        case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1771
                /* KSP3 does not suppport UCAST wake-ups */
1772
                wol->supported &= ~WAKE_UCAST;
1773
 
1774
                if (adapter->wol & E1000_WUFC_EX)
1775
                        DPRINTK(DRV, ERR, "Interface does not support "
1776
                        "directed (unicast) frame wake-up packets\n");
1777
                break;
1778
        default:
1779
                break;
1780
        }
1781
 
1782
        if (adapter->wol & E1000_WUFC_EX)
1783
                wol->wolopts |= WAKE_UCAST;
1784
        if (adapter->wol & E1000_WUFC_MC)
1785
                wol->wolopts |= WAKE_MCAST;
1786
        if (adapter->wol & E1000_WUFC_BC)
1787
                wol->wolopts |= WAKE_BCAST;
1788
        if (adapter->wol & E1000_WUFC_MAG)
1789
                wol->wolopts |= WAKE_MAGIC;
1790
 
1791
        return;
1792
}
1793
 
1794
static int
1795
e1000_set_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
1796
{
1797
        struct e1000_adapter *adapter = netdev_priv(netdev);
1798
        struct e1000_hw *hw = &adapter->hw;
1799
 
1800
        if (wol->wolopts & (WAKE_PHY | WAKE_ARP | WAKE_MAGICSECURE))
1801
                return -EOPNOTSUPP;
1802
 
1803
        if (e1000_wol_exclusion(adapter, wol))
1804
                return wol->wolopts ? -EOPNOTSUPP : 0;
1805
 
1806
        switch (hw->device_id) {
1807
        case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
1808
                if (wol->wolopts & WAKE_UCAST) {
1809
                        DPRINTK(DRV, ERR, "Interface does not support "
1810
                        "directed (unicast) frame wake-up packets\n");
1811
                        return -EOPNOTSUPP;
1812
                }
1813
                break;
1814
        default:
1815
                break;
1816
        }
1817
 
1818
        /* these settings will always override what we currently have */
1819
        adapter->wol = 0;
1820
 
1821
        if (wol->wolopts & WAKE_UCAST)
1822
                adapter->wol |= E1000_WUFC_EX;
1823
        if (wol->wolopts & WAKE_MCAST)
1824
                adapter->wol |= E1000_WUFC_MC;
1825
        if (wol->wolopts & WAKE_BCAST)
1826
                adapter->wol |= E1000_WUFC_BC;
1827
        if (wol->wolopts & WAKE_MAGIC)
1828
                adapter->wol |= E1000_WUFC_MAG;
1829
 
1830
        return 0;
1831
}
1832
 
1833
/* toggle LED 4 times per second = 2 "blinks" per second */
1834
#define E1000_ID_INTERVAL       (HZ/4)
1835
 
1836
/* bit defines for adapter->led_status */
1837
#define E1000_LED_ON            0
1838
 
1839
static void
1840
e1000_led_blink_callback(unsigned long data)
1841
{
1842
        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1843
 
1844
        if (test_and_change_bit(E1000_LED_ON, &adapter->led_status))
1845
                e1000_led_off(&adapter->hw);
1846
        else
1847
                e1000_led_on(&adapter->hw);
1848
 
1849
        mod_timer(&adapter->blink_timer, jiffies + E1000_ID_INTERVAL);
1850
}
1851
 
1852
static int
1853
e1000_phys_id(struct net_device *netdev, uint32_t data)
1854
{
1855
        struct e1000_adapter *adapter = netdev_priv(netdev);
1856
 
1857
        if (!data)
1858
                data = INT_MAX;
1859
 
1860
        if (adapter->hw.mac_type < e1000_82571) {
1861
                if (!adapter->blink_timer.function) {
1862
                        init_timer(&adapter->blink_timer);
1863
                        adapter->blink_timer.function = e1000_led_blink_callback;
1864
                        adapter->blink_timer.data = (unsigned long) adapter;
1865
                }
1866
                e1000_setup_led(&adapter->hw);
1867
                mod_timer(&adapter->blink_timer, jiffies);
1868
                msleep_interruptible(data * 1000);
1869
                del_timer_sync(&adapter->blink_timer);
1870
        } else if (adapter->hw.phy_type == e1000_phy_ife) {
1871
                if (!adapter->blink_timer.function) {
1872
                        init_timer(&adapter->blink_timer);
1873
                        adapter->blink_timer.function = e1000_led_blink_callback;
1874
                        adapter->blink_timer.data = (unsigned long) adapter;
1875
                }
1876
                mod_timer(&adapter->blink_timer, jiffies);
1877
                msleep_interruptible(data * 1000);
1878
                del_timer_sync(&adapter->blink_timer);
1879
                e1000_write_phy_reg(&(adapter->hw), IFE_PHY_SPECIAL_CONTROL_LED, 0);
1880
        } else {
1881
                e1000_blink_led_start(&adapter->hw);
1882
                msleep_interruptible(data * 1000);
1883
        }
1884
 
1885
        e1000_led_off(&adapter->hw);
1886
        clear_bit(E1000_LED_ON, &adapter->led_status);
1887
        e1000_cleanup_led(&adapter->hw);
1888
 
1889
        return 0;
1890
}
1891
 
1892
static int
1893
e1000_nway_reset(struct net_device *netdev)
1894
{
1895
        struct e1000_adapter *adapter = netdev_priv(netdev);
1896
        if (netif_running(netdev))
1897
                e1000_reinit_locked(adapter);
1898
        return 0;
1899
}
1900
 
1901
static void
1902
e1000_get_ethtool_stats(struct net_device *netdev,
1903
                struct ethtool_stats *stats, uint64_t *data)
1904
{
1905
        struct e1000_adapter *adapter = netdev_priv(netdev);
1906
        int i;
1907
 
1908
        e1000_update_stats(adapter);
1909
        for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1910
                char *p = (char *)adapter+e1000_gstrings_stats[i].stat_offset;
1911
                data[i] = (e1000_gstrings_stats[i].sizeof_stat ==
1912
                        sizeof(uint64_t)) ? *(uint64_t *)p : *(uint32_t *)p;
1913
        }
1914
/*      BUG_ON(i != E1000_STATS_LEN); */
1915
}
1916
 
1917
static void
1918
e1000_get_strings(struct net_device *netdev, uint32_t stringset, uint8_t *data)
1919
{
1920
        uint8_t *p = data;
1921
        int i;
1922
 
1923
        switch (stringset) {
1924
        case ETH_SS_TEST:
1925
                memcpy(data, *e1000_gstrings_test,
1926
                        sizeof(e1000_gstrings_test));
1927
                break;
1928
        case ETH_SS_STATS:
1929
                for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
1930
                        memcpy(p, e1000_gstrings_stats[i].stat_string,
1931
                               ETH_GSTRING_LEN);
1932
                        p += ETH_GSTRING_LEN;
1933
                }
1934
/*              BUG_ON(p - data != E1000_STATS_LEN * ETH_GSTRING_LEN); */
1935
                break;
1936
        }
1937
}
1938
 
1939
static const struct ethtool_ops e1000_ethtool_ops = {
1940
        .get_settings           = e1000_get_settings,
1941
        .set_settings           = e1000_set_settings,
1942
        .get_drvinfo            = e1000_get_drvinfo,
1943
        .get_regs_len           = e1000_get_regs_len,
1944
        .get_regs               = e1000_get_regs,
1945
        .get_wol                = e1000_get_wol,
1946
        .set_wol                = e1000_set_wol,
1947
        .get_msglevel           = e1000_get_msglevel,
1948
        .set_msglevel           = e1000_set_msglevel,
1949
        .nway_reset             = e1000_nway_reset,
1950
        .get_link               = ethtool_op_get_link,
1951
        .get_eeprom_len         = e1000_get_eeprom_len,
1952
        .get_eeprom             = e1000_get_eeprom,
1953
        .set_eeprom             = e1000_set_eeprom,
1954
        .get_ringparam          = e1000_get_ringparam,
1955
        .set_ringparam          = e1000_set_ringparam,
1956
        .get_pauseparam         = e1000_get_pauseparam,
1957
        .set_pauseparam         = e1000_set_pauseparam,
1958
        .get_rx_csum            = e1000_get_rx_csum,
1959
        .set_rx_csum            = e1000_set_rx_csum,
1960
        .get_tx_csum            = e1000_get_tx_csum,
1961
        .set_tx_csum            = e1000_set_tx_csum,
1962
        .set_sg                 = ethtool_op_set_sg,
1963
        .set_tso                = e1000_set_tso,
1964
        .self_test              = e1000_diag_test,
1965
        .get_strings            = e1000_get_strings,
1966
        .phys_id                = e1000_phys_id,
1967
        .get_ethtool_stats      = e1000_get_ethtool_stats,
1968
        .get_sset_count         = e1000_get_sset_count,
1969
};
1970
 
1971
void e1000_set_ethtool_ops(struct net_device *netdev)
1972
{
1973
        SET_ETHTOOL_OPS(netdev, &e1000_ethtool_ops);
1974
}

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.