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