linux-bk/drivers/net/e1000/e1000_main.c
<<
>>
Prefs
   1/*******************************************************************************
   2
   3  
   4  Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
   5  
   6  This program is free software; you can redistribute it and/or modify it 
   7  under the terms of the GNU General Public License as published by the Free 
   8  Software Foundation; either version 2 of the License, or (at your option) 
   9  any later version.
  10  
  11  This program is distributed in the hope that it will be useful, but WITHOUT 
  12  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
  13  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
  14  more details.
  15  
  16  You should have received a copy of the GNU General Public License along with
  17  this program; if not, write to the Free Software Foundation, Inc., 59 
  18  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19  
  20  The full GNU General Public License is included in this distribution in the
  21  file called LICENSE.
  22  
  23  Contact Information:
  24  Linux NICS <linux.nics@intel.com>
  25  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  26
  27*******************************************************************************/
  28
  29#define __E1000_MAIN__
  30#include "e1000.h"
  31
  32/* Change Log
  33 *
  34 *   o Feature: merged in modified NAPI patch from Robert Olsson
  35 *     <Robert.Olsson@its.uu.se> Uppsala Univeristy, Sweden.
  36 *
  37 * 4.3.15      8/9/02
  38 *   o Converted from Dual BSD/GPL license to GPL license.
  39 *   o Clean up: use pci_[clear|set]_mwi rather than direct calls to
  40 *     pci_write_config_word.
  41 *   o Bug fix: added read-behind-write calls to post writes before delays.
  42 *   o Bug fix: removed mdelay busy-waits in interrupt context.
  43 *   o Clean up: direct clear of descriptor bits rather than using memset.
  44 *   o Bug fix: added wmb() for ia-64 between descritor writes and advancing
  45 *     descriptor tail.
  46 *   o Feature: added locking mechanism for asf functionality.
  47 *   o Feature: exposed two Tx and one Rx interrupt delay knobs for finer
  48 *     control over interurpt rate tuning.
  49 *   o Misc ethtool bug fixes.
  50 *         
  51 * 4.3.2       7/5/02
  52 *   o Bug fix: perform controller reset using I/O rather than mmio because
  53 *     some chipsets try to perform a 64-bit write, but the controller ignores
  54 *     the upper 32-bit write once the reset is intiated by the lower 32-bit
  55 *     write, causing a master abort.
  56 *   o Bug fix: fixed jumbo frames sized from 1514 to 2048.
  57 *   o ASF support: disable ARP when driver is loaded or resumed; enable when 
  58 *     driver is removed or suspended.
  59 *   o Bug fix: changed default setting for RxIntDelay to 0 for 82542/3/4
  60 *     controllers to workaround h/w errata where controller will hang when
  61 *     RxIntDelay <> 0 under certian network conditions.
  62 *   o Clean up: removed unused and undocumented user-settable settings for
  63 *     PHY.
  64 *   o Bug fix: ethtool GEEPROM was using byte address rather than word
  65 *     addressing.
  66 *   o Feature: added support for ethtool SEEPROM.
  67 *   o Feature: added support for entropy pool.
  68 *
  69 * 4.2.17      5/30/02
  70 */
  71 
  72char e1000_driver_name[] = "e1000";
  73char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
  74char e1000_driver_version[] = "4.3.15-k1";
  75char e1000_copyright[] = "Copyright (c) 1999-2002 Intel Corporation.";
  76
  77/* e1000_pci_tbl - PCI Device ID Table
  78 *
  79 * Private driver_data field (last one) stores an index into e1000_strings
  80 * Wildcard entries (PCI_ANY_ID) should come last
  81 * Last entry must be all 0s
  82 *
  83 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
  84 *   Class, Class Mask, String Index }
  85 */
  86static struct pci_device_id e1000_pci_tbl[] __devinitdata = {
  87        /* Intel(R) PRO/1000 Network Connection */
  88        {0x8086, 0x1000, 0x8086, 0x1000, 0, 0, 0},
  89        {0x8086, 0x1001, 0x8086, 0x1003, 0, 0, 0},
  90        {0x8086, 0x1004, 0x8086, 0x1004, 0, 0, 0},
  91        {0x8086, 0x1008, 0x8086, 0x1107, 0, 0, 0},
  92        {0x8086, 0x1009, 0x8086, 0x1109, 0, 0, 0},
  93        {0x8086, 0x100C, 0x8086, 0x1112, 0, 0, 0},
  94        {0x8086, 0x100E, 0x8086, 0x001E, 0, 0, 0},
  95        /* Compaq Gigabit Ethernet Server Adapter */
  96        {0x8086, 0x1000, 0x0E11, PCI_ANY_ID, 0, 0, 1},
  97        {0x8086, 0x1001, 0x0E11, PCI_ANY_ID, 0, 0, 1},
  98        {0x8086, 0x1004, 0x0E11, PCI_ANY_ID, 0, 0, 1},
  99        /* IBM Mobile, Desktop & Server Adapters */
 100        {0x8086, 0x1000, 0x1014, PCI_ANY_ID, 0, 0, 2},
 101        {0x8086, 0x1001, 0x1014, PCI_ANY_ID, 0, 0, 2},
 102        {0x8086, 0x1004, 0x1014, PCI_ANY_ID, 0, 0, 2},
 103        /* Generic */
 104        {0x8086, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 105        {0x8086, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 106        {0x8086, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 107        {0x8086, 0x1008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 108        {0x8086, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 109        {0x8086, 0x100C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 110        {0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 111        {0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 112        {0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 113        {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 114        {0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 115        {0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 116        /* required last entry */
 117        {0,}
 118};
 119
 120MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
 121
 122static char *e1000_strings[] = {
 123        "Intel(R) PRO/1000 Network Connection",
 124        "Compaq Gigabit Ethernet Server Adapter",
 125        "IBM Mobile, Desktop & Server Adapters"
 126};
 127
 128/* Local Function Prototypes */
 129
 130int e1000_up(struct e1000_adapter *adapter);
 131void e1000_down(struct e1000_adapter *adapter);
 132void e1000_reset(struct e1000_adapter *adapter);
 133
 134static int e1000_init_module(void);
 135static void e1000_exit_module(void);
 136static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
 137static void e1000_remove(struct pci_dev *pdev);
 138static void e1000_sw_init(struct e1000_adapter *adapter);
 139static int e1000_open(struct net_device *netdev);
 140static int e1000_close(struct net_device *netdev);
 141static int e1000_setup_tx_resources(struct e1000_adapter *adapter);
 142static int e1000_setup_rx_resources(struct e1000_adapter *adapter);
 143static void e1000_configure_tx(struct e1000_adapter *adapter);
 144static void e1000_configure_rx(struct e1000_adapter *adapter);
 145static void e1000_setup_rctl(struct e1000_adapter *adapter);
 146static void e1000_clean_tx_ring(struct e1000_adapter *adapter);
 147static void e1000_clean_rx_ring(struct e1000_adapter *adapter);
 148static void e1000_free_tx_resources(struct e1000_adapter *adapter);
 149static void e1000_free_rx_resources(struct e1000_adapter *adapter);
 150static void e1000_set_multi(struct net_device *netdev);
 151static void e1000_update_phy_info(unsigned long data);
 152static void e1000_watchdog(unsigned long data);
 153static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
 154static struct net_device_stats * e1000_get_stats(struct net_device *netdev);
 155static int e1000_change_mtu(struct net_device *netdev, int new_mtu);
 156static int e1000_set_mac(struct net_device *netdev, void *p);
 157static void e1000_update_stats(struct e1000_adapter *adapter);
 158static inline void e1000_irq_disable(struct e1000_adapter *adapter);
 159static inline void e1000_irq_enable(struct e1000_adapter *adapter);
 160static void e1000_intr(int irq, void *data, struct pt_regs *regs);
 161static void e1000_clean_tx_irq(struct e1000_adapter *adapter);
 162#ifdef CONFIG_E1000_NAPI
 163static int e1000_poll(struct net_device *netdev, int *budget);
 164#else
 165static void e1000_clean_rx_irq(struct e1000_adapter *adapter);
 166#endif
 167static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter);
 168static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
 169static void e1000_enter_82542_rst(struct e1000_adapter *adapter);
 170static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
 171static inline void e1000_rx_checksum(struct e1000_adapter *adapter,
 172                                     struct e1000_rx_desc *rx_desc,
 173                                     struct sk_buff *skb);
 174static void e1000_tx_timeout(struct net_device *dev);
 175static void e1000_tx_timeout_task(struct net_device *dev);
 176
 177static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
 178static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
 179static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
 180
 181static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr);
 182static int e1000_suspend(struct pci_dev *pdev, uint32_t state);
 183#ifdef CONFIG_PM
 184static int e1000_resume(struct pci_dev *pdev);
 185#endif
 186
 187struct notifier_block e1000_notifier = {
 188        .notifier_call  = e1000_notify_reboot,
 189        .next           = NULL,
 190        .priority       = 0
 191};
 192
 193/* Exported from other modules */
 194
 195extern void e1000_check_options(struct e1000_adapter *adapter);
 196extern void e1000_proc_dev_setup(struct e1000_adapter *adapter);
 197extern void e1000_proc_dev_free(struct e1000_adapter *adapter);
 198extern int e1000_ethtool_ioctl(struct net_device *netdev, struct ifreq *ifr);
 199
 200static struct pci_driver e1000_driver = {
 201        .name     = e1000_driver_name,
 202        .id_table = e1000_pci_tbl,
 203        .probe    = e1000_probe,
 204        .remove   = __devexit_p(e1000_remove),
 205        /* Power Managment Hooks */
 206#ifdef CONFIG_PM
 207        .suspend  = e1000_suspend,
 208        .resume   = e1000_resume
 209#endif
 210};
 211
 212MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
 213MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
 214MODULE_LICENSE("GPL");
 215
 216/**
 217 * e1000_init_module - Driver Registration Routine
 218 *
 219 * e1000_init_module is the first routine called when the driver is
 220 * loaded. All it does is register with the PCI subsystem.
 221 **/
 222
 223static int __init
 224e1000_init_module(void)
 225{
 226        int ret;
 227        printk(KERN_INFO "%s - version %s\n",
 228               e1000_driver_string, e1000_driver_version);
 229
 230        printk(KERN_INFO "%s\n", e1000_copyright);
 231
 232        ret = pci_module_init(&e1000_driver);
 233        if(ret >= 0)
 234                register_reboot_notifier(&e1000_notifier);
 235        return ret;
 236}
 237
 238module_init(e1000_init_module);
 239
 240/**
 241 * e1000_exit_module - Driver Exit Cleanup Routine
 242 *
 243 * e1000_exit_module is called just before the driver is removed
 244 * from memory.
 245 **/
 246
 247static void __exit
 248e1000_exit_module(void)
 249{
 250        unregister_reboot_notifier(&e1000_notifier);
 251        pci_unregister_driver(&e1000_driver);
 252}
 253
 254module_exit(e1000_exit_module);
 255
 256
 257int
 258e1000_up(struct e1000_adapter *adapter)
 259{
 260        struct net_device *netdev = adapter->netdev;
 261
 262        if(request_irq(netdev->irq, &e1000_intr, SA_SHIRQ | SA_SAMPLE_RANDOM,
 263                       netdev->name, netdev))
 264                return -1;
 265
 266        /* hardware has been reset, we need to reload some things */
 267
 268        e1000_set_multi(netdev);
 269
 270        e1000_configure_tx(adapter);
 271        e1000_setup_rctl(adapter);
 272        e1000_configure_rx(adapter);
 273        e1000_alloc_rx_buffers(adapter);
 274
 275        mod_timer(&adapter->watchdog_timer, jiffies);
 276        e1000_irq_enable(adapter);
 277
 278        return 0;
 279}
 280
 281void
 282e1000_down(struct e1000_adapter *adapter)
 283{
 284        struct net_device *netdev = adapter->netdev;
 285
 286        e1000_irq_disable(adapter);
 287        free_irq(netdev->irq, netdev);
 288        del_timer_sync(&adapter->watchdog_timer);
 289        del_timer_sync(&adapter->phy_info_timer);
 290        adapter->link_speed = 0;
 291        adapter->link_duplex = 0;
 292        netif_carrier_off(netdev);
 293        netif_stop_queue(netdev);
 294
 295        e1000_reset(adapter);
 296        e1000_clean_tx_ring(adapter);
 297        e1000_clean_rx_ring(adapter);
 298}
 299
 300void
 301e1000_reset(struct e1000_adapter *adapter)
 302{
 303        /* Repartition Pba for greater than 9k mtu
 304         * To take effect CTRL.RST is required.
 305         */
 306
 307        if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
 308                E1000_WRITE_REG(&adapter->hw, PBA, E1000_JUMBO_PBA);
 309        else
 310                E1000_WRITE_REG(&adapter->hw, PBA, E1000_DEFAULT_PBA);
 311
 312        adapter->hw.fc = adapter->hw.original_fc;
 313        e1000_reset_hw(&adapter->hw);
 314        if(adapter->hw.mac_type >= e1000_82544)
 315                E1000_WRITE_REG(&adapter->hw, WUC, 0);
 316        e1000_init_hw(&adapter->hw);
 317        e1000_reset_adaptive(&adapter->hw);
 318        e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
 319}
 320
 321/**
 322 * e1000_probe - Device Initialization Routine
 323 * @pdev: PCI device information struct
 324 * @ent: entry in e1000_pci_tbl
 325 *
 326 * Returns 0 on success, negative on failure
 327 *
 328 * e1000_probe initializes an adapter identified by a pci_dev structure.
 329 * The OS initialization, configuring of the adapter private structure,
 330 * and a hardware reset occur.
 331 **/
 332
 333static int __devinit
 334e1000_probe(struct pci_dev *pdev,
 335            const struct pci_device_id *ent)
 336{
 337        struct net_device *netdev;
 338        struct e1000_adapter *adapter;
 339        static int cards_found = 0;
 340        unsigned long mmio_start;
 341        int mmio_len;
 342        int pci_using_dac;
 343        int i;
 344
 345        if((i = pci_enable_device(pdev)))
 346                return i;
 347
 348        if(!(i = pci_set_dma_mask(pdev, PCI_DMA_64BIT))) {
 349                pci_using_dac = 1;
 350        } else {
 351                if((i = pci_set_dma_mask(pdev, PCI_DMA_32BIT))) {
 352                        E1000_ERR("No usable DMA configuration, aborting\n");
 353                        return i;
 354                }
 355                pci_using_dac = 0;
 356        }
 357
 358        if((i = pci_request_regions(pdev, e1000_driver_name)))
 359                return i;
 360
 361        pci_set_master(pdev);
 362
 363        netdev = alloc_etherdev(sizeof(struct e1000_adapter));
 364        if(!netdev)
 365                goto err_alloc_etherdev;
 366
 367        SET_MODULE_OWNER(netdev);
 368
 369        pci_set_drvdata(pdev, netdev);
 370        adapter = netdev->priv;
 371        adapter->netdev = netdev;
 372        adapter->pdev = pdev;
 373        adapter->hw.back = adapter;
 374
 375        mmio_start = pci_resource_start(pdev, BAR_0);
 376        mmio_len = pci_resource_len(pdev, BAR_0);
 377
 378        adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
 379        if(!adapter->hw.hw_addr)
 380                goto err_ioremap;
 381
 382        for(i = BAR_1; i <= BAR_5; i++) {
 383                if(pci_resource_len(pdev, i) == 0)
 384                        continue;
 385                if(pci_resource_flags(pdev, i) & IORESOURCE_IO) {
 386                        adapter->hw.io_base = pci_resource_start(pdev, i);
 387                        break;
 388                }
 389        }
 390
 391        netdev->open = &e1000_open;
 392        netdev->stop = &e1000_close;
 393        netdev->hard_start_xmit = &e1000_xmit_frame;
 394        netdev->get_stats = &e1000_get_stats;
 395        netdev->set_multicast_list = &e1000_set_multi;
 396        netdev->set_mac_address = &e1000_set_mac;
 397        netdev->change_mtu = &e1000_change_mtu;
 398        netdev->do_ioctl = &e1000_ioctl;
 399        netdev->tx_timeout = &e1000_tx_timeout;
 400        netdev->watchdog_timeo = HZ;
 401#ifdef CONFIG_E1000_NAPI
 402        netdev->poll = &e1000_poll;
 403        netdev->weight = 64;
 404#endif
 405        netdev->vlan_rx_register = e1000_vlan_rx_register;
 406        netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid;
 407        netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
 408
 409        netdev->irq = pdev->irq;
 410        netdev->mem_start = mmio_start;
 411        netdev->base_addr = adapter->hw.io_base;
 412
 413        adapter->bd_number = cards_found;
 414        adapter->id_string = e1000_strings[ent->driver_data];
 415
 416        /* setup the private structure */
 417
 418        e1000_sw_init(adapter);
 419
 420        if(adapter->hw.mac_type >= e1000_82543) {
 421                netdev->features = NETIF_F_SG |
 422                                   NETIF_F_HW_CSUM |
 423                                   NETIF_F_HW_VLAN_TX |
 424                                   NETIF_F_HW_VLAN_RX |
 425                                   NETIF_F_HW_VLAN_FILTER;
 426        } else {
 427                netdev->features = NETIF_F_SG;
 428        }
 429
 430#ifdef NETIF_F_TSO
 431        if(adapter->hw.mac_type >= e1000_82544)
 432                netdev->features |= NETIF_F_TSO;
 433#endif
 434 
 435        if(pci_using_dac)
 436                netdev->features |= NETIF_F_HIGHDMA;
 437
 438        /* make sure the EEPROM is good */
 439
 440        if(e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
 441                printk(KERN_ERR "The EEPROM Checksum Is Not Valid\n");
 442                goto err_eeprom;
 443        }
 444
 445        /* copy the MAC address out of the EEPROM */
 446
 447        e1000_read_mac_addr(&adapter->hw);
 448        memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
 449
 450        if(!is_valid_ether_addr(netdev->dev_addr))
 451                goto err_eeprom;
 452
 453        e1000_read_part_num(&adapter->hw, &(adapter->part_num));
 454
 455        e1000_get_bus_info(&adapter->hw);
 456
 457        if((adapter->hw.mac_type == e1000_82544) &&
 458           (adapter->hw.bus_type == e1000_bus_type_pcix))
 459
 460                adapter->max_data_per_txd = 4096;
 461        else
 462                adapter->max_data_per_txd = MAX_JUMBO_FRAME_SIZE;
 463
 464
 465        init_timer(&adapter->watchdog_timer);
 466        adapter->watchdog_timer.function = &e1000_watchdog;
 467        adapter->watchdog_timer.data = (unsigned long) adapter;
 468
 469        init_timer(&adapter->phy_info_timer);
 470        adapter->phy_info_timer.function = &e1000_update_phy_info;
 471        adapter->phy_info_timer.data = (unsigned long) adapter;
 472
 473        INIT_TQUEUE(&adapter->tx_timeout_task, 
 474                (void (*)(void *))e1000_tx_timeout_task, netdev);
 475
 476        register_netdev(netdev);
 477
 478        /* we're going to reset, so assume we have no link for now */
 479
 480        netif_carrier_off(netdev);
 481        netif_stop_queue(netdev);
 482
 483        printk(KERN_INFO "%s: %s\n", netdev->name, adapter->id_string);
 484        e1000_check_options(adapter);
 485        e1000_proc_dev_setup(adapter);
 486
 487        /* Initial Wake on LAN setting
 488         * If APM wake is enabled in the EEPROM,
 489         * enable the ACPI Magic Packet filter
 490         */
 491
 492        if((adapter->hw.mac_type >= e1000_82544) &&
 493           (E1000_READ_REG(&adapter->hw, WUC) & E1000_WUC_APME))
 494                adapter->wol |= E1000_WUFC_MAG;
 495
 496        /* reset the hardware with the new settings */
 497
 498        e1000_reset(adapter);
 499
 500        cards_found++;
 501        return 0;
 502
 503err_eeprom:
 504        iounmap(adapter->hw.hw_addr);
 505err_ioremap:
 506        pci_release_regions(pdev);
 507        kfree(netdev);
 508err_alloc_etherdev:
 509        return -ENOMEM;
 510}
 511
 512/**
 513 * e1000_remove - Device Removal Routine
 514 * @pdev: PCI device information struct
 515 *
 516 * e1000_remove is called by the PCI subsystem to alert the driver
 517 * that it should release a PCI device.  The could be caused by a
 518 * Hot-Plug event, or because the driver is going to be removed from
 519 * memory.
 520 **/
 521
 522static void __devexit
 523e1000_remove(struct pci_dev *pdev)
 524{
 525        struct net_device *netdev = pci_get_drvdata(pdev);
 526        struct e1000_adapter *adapter = netdev->priv;
 527        uint32_t manc;
 528        
 529        if(adapter->hw.mac_type >= e1000_82540) {
 530                manc = E1000_READ_REG(&adapter->hw, MANC);
 531                if(manc & E1000_MANC_SMBUS_EN) {
 532                        manc |= E1000_MANC_ARP_EN;
 533                        E1000_WRITE_REG(&adapter->hw, MANC, manc);
 534                }
 535        }
 536                
 537        unregister_netdev(netdev);
 538
 539        e1000_phy_hw_reset(&adapter->hw);
 540
 541        e1000_proc_dev_free(adapter);
 542
 543        iounmap(adapter->hw.hw_addr);
 544        pci_release_regions(pdev);
 545
 546        kfree(netdev);
 547}
 548
 549/**
 550 * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
 551 * @adapter: board private structure to initialize
 552 *
 553 * e1000_sw_init initializes the Adapter private data structure.
 554 * Fields are initialized based on PCI device information and
 555 * OS network device settings (MTU size).
 556 **/
 557
 558static void __devinit
 559e1000_sw_init(struct e1000_adapter *adapter)
 560{
 561        struct e1000_hw *hw = &adapter->hw;
 562        struct net_device *netdev = adapter->netdev;
 563        struct pci_dev *pdev = adapter->pdev;
 564
 565        /* PCI config space info */
 566
 567        pci_read_config_word(pdev, PCI_VENDOR_ID, &hw->vendor_id);
 568        pci_read_config_word(pdev, PCI_DEVICE_ID, &hw->device_id);
 569        pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, 
 570                             &hw->subsystem_vendor_id);
 571        pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &hw->subsystem_id);
 572        pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
 573        pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
 574
 575        adapter->rx_buffer_len = E1000_RXBUFFER_2048;
 576        hw->max_frame_size = netdev->mtu +
 577                                 ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
 578        hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
 579
 580        /* identify the MAC */
 581
 582        if (e1000_set_mac_type(hw)) {
 583                E1000_ERR("Unknown MAC Type\n");
 584                BUG();
 585        }
 586
 587        /* flow control settings */
 588
 589        hw->fc_high_water = FC_DEFAULT_HI_THRESH;
 590        hw->fc_low_water = FC_DEFAULT_LO_THRESH;
 591        hw->fc_pause_time = FC_DEFAULT_TX_TIMER;
 592        hw->fc_send_xon = 1;
 593
 594        /* Media type - copper or fiber */
 595
 596        if(hw->mac_type >= e1000_82543) {
 597                uint32_t status = E1000_READ_REG(hw, STATUS);
 598
 599                if(status & E1000_STATUS_TBIMODE)
 600                        hw->media_type = e1000_media_type_fiber;
 601                else
 602                        hw->media_type = e1000_media_type_copper;
 603        } else {
 604                hw->media_type = e1000_media_type_fiber;
 605        }
 606
 607        if(hw->mac_type < e1000_82543)
 608                hw->report_tx_early = 0;
 609        else
 610                hw->report_tx_early = 1;
 611
 612        hw->wait_autoneg_complete = FALSE;
 613        hw->tbi_compatibility_en = TRUE;
 614        hw->adaptive_ifs = TRUE;
 615
 616        /* Copper options */
 617        
 618        if(hw->media_type == e1000_media_type_copper) {
 619                hw->mdix = AUTO_ALL_MODES;
 620                hw->disable_polarity_correction = FALSE;
 621        }
 622
 623        atomic_set(&adapter->irq_sem, 1);
 624        spin_lock_init(&adapter->stats_lock);
 625}
 626
 627/**
 628 * e1000_open - Called when a network interface is made active
 629 * @netdev: network interface device structure
 630 *
 631 * Returns 0 on success, negative value on failure
 632 *
 633 * The open entry point is called when a network interface is made
 634 * active by the system (IFF_UP).  At this point all resources needed
 635 * for transmit and receive operations are allocated, the interrupt
 636 * handler is registered with the OS, the watchdog timer is started,
 637 * and the stack is notified that the interface is ready.
 638 **/
 639
 640static int
 641e1000_open(struct net_device *netdev)
 642{
 643        struct e1000_adapter *adapter = netdev->priv;
 644
 645        /* allocate transmit descriptors */
 646
 647        if(e1000_setup_tx_resources(adapter))
 648                goto err_setup_tx;
 649
 650        /* allocate receive descriptors */
 651
 652        if(e1000_setup_rx_resources(adapter))
 653                goto err_setup_rx;
 654
 655        if(e1000_up(adapter))
 656                goto err_up;
 657
 658        return 0;
 659
 660err_up:
 661        e1000_free_rx_resources(adapter);
 662err_setup_rx:
 663        e1000_free_tx_resources(adapter);
 664err_setup_tx:
 665        e1000_reset(adapter);
 666
 667        return -EBUSY;
 668}
 669
 670/**
 671 * e1000_close - Disables a network interface
 672 * @netdev: network interface device structure
 673 *
 674 * Returns 0, this is not allowed to fail
 675 *
 676 * The close entry point is called when an interface is de-activated
 677 * by the OS.  The hardware is still under the drivers control, but
 678 * needs to be disabled.  A global MAC reset is issued to stop the
 679 * hardware, and all transmit and receive resources are freed.
 680 **/
 681
 682static int
 683e1000_close(struct net_device *netdev)
 684{
 685        struct e1000_adapter *adapter = netdev->priv;
 686
 687        e1000_down(adapter);
 688
 689        e1000_free_tx_resources(adapter);
 690        e1000_free_rx_resources(adapter);
 691
 692        return 0;
 693}
 694
 695/**
 696 * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
 697 * @adapter: board private structure
 698 *
 699 * Return 0 on success, negative on failure
 700 **/
 701
 702static int
 703e1000_setup_tx_resources(struct e1000_adapter *adapter)
 704{
 705        struct e1000_desc_ring *txdr = &adapter->tx_ring;
 706        struct pci_dev *pdev = adapter->pdev;
 707        int size;
 708
 709        size = sizeof(struct e1000_buffer) * txdr->count;
 710        txdr->buffer_info = kmalloc(size, GFP_KERNEL);
 711        if(!txdr->buffer_info) {
 712                return -ENOMEM;
 713        }
 714        memset(txdr->buffer_info, 0, size);
 715
 716        /* round up to nearest 4K */
 717
 718        txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
 719        E1000_ROUNDUP(txdr->size, 4096);
 720
 721        txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
 722        if(!txdr->desc) {
 723                kfree(txdr->buffer_info);
 724                return -ENOMEM;
 725        }
 726        memset(txdr->desc, 0, txdr->size);
 727
 728        txdr->next_to_use = 0;
 729        txdr->next_to_clean = 0;
 730
 731        return 0;
 732}
 733
 734/**
 735 * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
 736 * @adapter: board private structure
 737 *
 738 * Configure the Tx unit of the MAC after a reset.
 739 **/
 740
 741static void
 742e1000_configure_tx(struct e1000_adapter *adapter)
 743{
 744        uint64_t tdba = adapter->tx_ring.dma;
 745        uint32_t tdlen = adapter->tx_ring.count * sizeof(struct e1000_tx_desc);
 746        uint32_t tctl, tipg;
 747
 748        E1000_WRITE_REG(&adapter->hw, TDBAL, (tdba & 0x00000000ffffffffULL));
 749        E1000_WRITE_REG(&adapter->hw, TDBAH, (tdba >> 32));
 750
 751        E1000_WRITE_REG(&adapter->hw, TDLEN, tdlen);
 752
 753        /* Setup the HW Tx Head and Tail descriptor pointers */
 754
 755        E1000_WRITE_REG(&adapter->hw, TDH, 0);
 756        E1000_WRITE_REG(&adapter->hw, TDT, 0);
 757
 758        /* Set the default values for the Tx Inter Packet Gap timer */
 759
 760        switch (adapter->hw.mac_type) {
 761        case e1000_82542_rev2_0:
 762        case e1000_82542_rev2_1:
 763                tipg = DEFAULT_82542_TIPG_IPGT;
 764                tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
 765                tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 766                break;
 767        default:
 768                if(adapter->hw.media_type == e1000_media_type_fiber)
 769                        tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
 770                else
 771                        tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
 772                tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
 773                tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 774        }
 775        E1000_WRITE_REG(&adapter->hw, TIPG, tipg);
 776
 777        /* Set the Tx Interrupt Delay register */
 778
 779        E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
 780        if(adapter->hw.mac_type >= e1000_82540)
 781                E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
 782
 783        /* Program the Transmit Control Register */
 784
 785        tctl = E1000_READ_REG(&adapter->hw, TCTL);
 786
 787        tctl &= ~E1000_TCTL_CT;
 788        tctl |= E1000_TCTL_EN | E1000_TCTL_PSP |
 789               (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
 790
 791        E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
 792
 793        e1000_config_collision_dist(&adapter->hw);
 794
 795        /* Setup Transmit Descriptor Settings for this adapter */
 796        adapter->txd_cmd = E1000_TXD_CMD_IFCS | E1000_TXD_CMD_IDE;
 797
 798        if(adapter->hw.report_tx_early == 1)
 799                adapter->txd_cmd |= E1000_TXD_CMD_RS;
 800        else
 801                adapter->txd_cmd |= E1000_TXD_CMD_RPS;
 802}
 803
 804/**
 805 * e1000_setup_rx_resources - allocate Rx resources (Descriptors)
 806 * @adapter: board private structure
 807 *
 808 * Returns 0 on success, negative on failure
 809 **/
 810
 811static int
 812e1000_setup_rx_resources(struct e1000_adapter *adapter)
 813{
 814        struct e1000_desc_ring *rxdr = &adapter->rx_ring;
 815        struct pci_dev *pdev = adapter->pdev;
 816        int size;
 817
 818        size = sizeof(struct e1000_buffer) * rxdr->count;
 819        rxdr->buffer_info = kmalloc(size, GFP_KERNEL);
 820        if(!rxdr->buffer_info) {
 821                return -ENOMEM;
 822        }
 823        memset(rxdr->buffer_info, 0, size);
 824
 825        /* Round up to nearest 4K */
 826
 827        rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
 828        E1000_ROUNDUP(rxdr->size, 4096);
 829
 830        rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
 831
 832        if(!rxdr->desc) {
 833                kfree(rxdr->buffer_info);
 834                return -ENOMEM;
 835        }
 836        memset(rxdr->desc, 0, rxdr->size);
 837
 838        rxdr->next_to_clean = 0;
 839        rxdr->next_to_use = 0;
 840
 841        return 0;
 842}
 843
 844/**
 845 * e1000_setup_rctl - configure the receive control register
 846 * @adapter: Board private structure
 847 **/
 848
 849static void
 850e1000_setup_rctl(struct e1000_adapter *adapter)
 851{
 852        uint32_t rctl;
 853
 854        rctl = E1000_READ_REG(&adapter->hw, RCTL);
 855
 856        rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
 857
 858        rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
 859                E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
 860                (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
 861
 862        if(adapter->hw.tbi_compatibility_on == 1)
 863                rctl |= E1000_RCTL_SBP;
 864        else
 865                rctl &= ~E1000_RCTL_SBP;
 866
 867        rctl &= ~(E1000_RCTL_SZ_4096);
 868        switch (adapter->rx_buffer_len) {
 869        case E1000_RXBUFFER_2048:
 870        default:
 871                rctl |= E1000_RCTL_SZ_2048;
 872                rctl &= ~(E1000_RCTL_BSEX | E1000_RCTL_LPE);
 873                break;
 874        case E1000_RXBUFFER_4096:
 875                rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
 876                break;
 877        case E1000_RXBUFFER_8192:
 878                rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
 879                break;
 880        case E1000_RXBUFFER_16384:
 881                rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
 882                break;
 883        }
 884
 885        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
 886}
 887
 888/**
 889 * e1000_configure_rx - Configure 8254x Receive Unit after Reset
 890 * @adapter: board private structure
 891 *
 892 * Configure the Rx unit of the MAC after a reset.
 893 **/
 894
 895static void
 896e1000_configure_rx(struct e1000_adapter *adapter)
 897{
 898        uint64_t rdba = adapter->rx_ring.dma;
 899        uint32_t rdlen = adapter->rx_ring.count * sizeof(struct e1000_rx_desc);
 900        uint32_t rctl;
 901        uint32_t rxcsum;
 902
 903        /* make sure receives are disabled while setting up the descriptors */
 904
 905        rctl = E1000_READ_REG(&adapter->hw, RCTL);
 906        E1000_WRITE_REG(&adapter->hw, RCTL, rctl & ~E1000_RCTL_EN);
 907
 908        /* set the Receive Delay Timer Register */
 909
 910        if(adapter->hw.mac_type >= e1000_82540) {
 911                E1000_WRITE_REG(&adapter->hw, RDTR, adapter->rx_int_delay);
 912                E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
 913
 914                /* Set the interrupt throttling rate.  Value is calculated
 915                 * as DEFAULT_ITR = 1/(MAX_INTS_PER_SEC * 256ns) */
 916#define MAX_INTS_PER_SEC        8000
 917#define DEFAULT_ITR             1000000000/(MAX_INTS_PER_SEC * 256)
 918                E1000_WRITE_REG(&adapter->hw, ITR, DEFAULT_ITR);
 919
 920        } else {
 921                E1000_WRITE_REG(&adapter->hw, RDTR, adapter->rx_int_delay);
 922        }
 923
 924        /* Setup the Base and Length of the Rx Descriptor Ring */
 925
 926        E1000_WRITE_REG(&adapter->hw, RDBAL, (rdba & 0x00000000ffffffffULL));
 927        E1000_WRITE_REG(&adapter->hw, RDBAH, (rdba >> 32));
 928
 929        E1000_WRITE_REG(&adapter->hw, RDLEN, rdlen);
 930
 931        /* Setup the HW Rx Head and Tail Descriptor Pointers */
 932        E1000_WRITE_REG(&adapter->hw, RDH, 0);
 933        E1000_WRITE_REG(&adapter->hw, RDT, 0);
 934
 935        /* Enable 82543 Receive Checksum Offload for TCP and UDP */
 936        if((adapter->hw.mac_type >= e1000_82543) &&
 937           (adapter->rx_csum == TRUE)) {
 938                rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
 939                rxcsum |= E1000_RXCSUM_TUOFL;
 940                E1000_WRITE_REG(&adapter->hw, RXCSUM, rxcsum);
 941        }
 942
 943        /* Enable Receives */
 944
 945        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
 946}
 947
 948/**
 949 * e1000_free_tx_resources - Free Tx Resources
 950 * @adapter: board private structure
 951 *
 952 * Free all transmit software resources
 953 **/
 954
 955static void
 956e1000_free_tx_resources(struct e1000_adapter *adapter)
 957{
 958        struct pci_dev *pdev = adapter->pdev;
 959
 960        e1000_clean_tx_ring(adapter);
 961
 962        kfree(adapter->tx_ring.buffer_info);
 963        adapter->tx_ring.buffer_info = NULL;
 964
 965        pci_free_consistent(pdev, adapter->tx_ring.size,
 966                            adapter->tx_ring.desc, adapter->tx_ring.dma);
 967
 968        adapter->tx_ring.desc = NULL;
 969}
 970
 971/**
 972 * e1000_clean_tx_ring - Free Tx Buffers
 973 * @adapter: board private structure
 974 **/
 975
 976static void
 977e1000_clean_tx_ring(struct e1000_adapter *adapter)
 978{
 979        struct pci_dev *pdev = adapter->pdev;
 980        unsigned long size;
 981        int i;
 982
 983        /* Free all the Tx ring sk_buffs */
 984
 985        for(i = 0; i < adapter->tx_ring.count; i++) {
 986                if(adapter->tx_ring.buffer_info[i].skb) {
 987
 988                        pci_unmap_page(pdev,
 989                                       adapter->tx_ring.buffer_info[i].dma,
 990                                       adapter->tx_ring.buffer_info[i].length,
 991                                       PCI_DMA_TODEVICE);
 992
 993                        dev_kfree_skb(adapter->tx_ring.buffer_info[i].skb);
 994
 995                        adapter->tx_ring.buffer_info[i].skb = NULL;
 996                }
 997        }
 998
 999        size = sizeof(struct e1000_buffer) * adapter->tx_ring.count;
1000        memset(adapter->tx_ring.buffer_info, 0, size);
1001
1002        /* Zero out the descriptor ring */
1003
1004        memset(adapter->tx_ring.desc, 0, adapter->tx_ring.size);
1005
1006        adapter->tx_ring.next_to_use = 0;
1007        adapter->tx_ring.next_to_clean = 0;
1008
1009        E1000_WRITE_REG(&adapter->hw, TDH, 0);
1010        E1000_WRITE_REG(&adapter->hw, TDT, 0);
1011}
1012
1013/**
1014 * e1000_free_rx_resources - Free Rx Resources
1015 * @adapter: board private structure
1016 *
1017 * Free all receive software resources
1018 **/
1019
1020static void
1021e1000_free_rx_resources(struct e1000_adapter *adapter)
1022{
1023        struct pci_dev *pdev = adapter->pdev;
1024
1025        e1000_clean_rx_ring(adapter);
1026
1027        kfree(adapter->rx_ring.buffer_info);
1028        adapter->rx_ring.buffer_info = NULL;
1029
1030        pci_free_consistent(pdev, adapter->rx_ring.size,
1031                            adapter->rx_ring.desc, adapter->rx_ring.dma);
1032
1033        adapter->rx_ring.desc = NULL;
1034}
1035
1036/**
1037 * e1000_clean_rx_ring - Free Rx Buffers
1038 * @adapter: board private structure
1039 **/
1040
1041static void
1042e1000_clean_rx_ring(struct e1000_adapter *adapter)
1043{
1044        struct pci_dev *pdev = adapter->pdev;
1045        unsigned long size;
1046        int i;
1047
1048        /* Free all the Rx ring sk_buffs */
1049
1050        for(i = 0; i < adapter->rx_ring.count; i++) {
1051                if(adapter->rx_ring.buffer_info[i].skb) {
1052
1053                        pci_unmap_single(pdev,
1054                                         adapter->rx_ring.buffer_info[i].dma,
1055                                         adapter->rx_ring.buffer_info[i].length,
1056                                         PCI_DMA_FROMDEVICE);
1057
1058                        dev_kfree_skb(adapter->rx_ring.buffer_info[i].skb);
1059
1060                        adapter->rx_ring.buffer_info[i].skb = NULL;
1061                }
1062        }
1063
1064        size = sizeof(struct e1000_buffer) * adapter->rx_ring.count;
1065        memset(adapter->rx_ring.buffer_info, 0, size);
1066
1067        /* Zero out the descriptor ring */
1068
1069        memset(adapter->rx_ring.desc, 0, adapter->rx_ring.size);
1070
1071        adapter->rx_ring.next_to_clean = 0;
1072        adapter->rx_ring.next_to_use = 0;
1073
1074        E1000_WRITE_REG(&adapter->hw, RDH, 0);
1075        E1000_WRITE_REG(&adapter->hw, RDT, 0);
1076}
1077
1078/* The 82542 2.0 (revision 2) needs to have the receive unit in reset
1079 * and memory write and invalidate disabled for certain operations
1080 */
1081static void
1082e1000_enter_82542_rst(struct e1000_adapter *adapter)
1083{
1084        struct net_device *netdev = adapter->netdev;
1085        uint32_t rctl;
1086
1087        e1000_pci_clear_mwi(&adapter->hw);
1088
1089        rctl = E1000_READ_REG(&adapter->hw, RCTL);
1090        rctl |= E1000_RCTL_RST;
1091        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1092        E1000_WRITE_FLUSH(&adapter->hw);
1093        mdelay(5);
1094
1095        if(netif_running(netdev))
1096                e1000_clean_rx_ring(adapter);
1097}
1098
1099static void
1100e1000_leave_82542_rst(struct e1000_adapter *adapter)
1101{
1102        struct net_device *netdev = adapter->netdev;
1103        uint32_t rctl;
1104
1105        rctl = E1000_READ_REG(&adapter->hw, RCTL);
1106        rctl &= ~E1000_RCTL_RST;
1107        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1108        E1000_WRITE_FLUSH(&adapter->hw);
1109        mdelay(5);
1110
1111        if(adapter->hw.pci_cmd_word & PCI_COMMAND_INVALIDATE)
1112                e1000_pci_set_mwi(&adapter->hw);
1113
1114        if(netif_running(netdev)) {
1115                e1000_configure_rx(adapter);
1116                e1000_alloc_rx_buffers(adapter);
1117        }
1118}
1119
1120/**
1121 * e1000_set_mac - Change the Ethernet Address of the NIC
1122 * @netdev: network interface device structure
1123 * @p: pointer to an address structure
1124 *
1125 * Returns 0 on success, negative on failure
1126 **/
1127
1128static int
1129e1000_set_mac(struct net_device *netdev, void *p)
1130{
1131        struct e1000_adapter *adapter = netdev->priv;
1132        struct sockaddr *addr = p;
1133
1134        /* 82542 2.0 needs to be in reset to write receive address registers */
1135
1136        if(adapter->hw.mac_type == e1000_82542_rev2_0)
1137                e1000_enter_82542_rst(adapter);
1138
1139        memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1140        memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
1141
1142        e1000_rar_set(&adapter->hw, adapter->hw.mac_addr, 0);
1143
1144        if(adapter->hw.mac_type == e1000_82542_rev2_0)
1145                e1000_leave_82542_rst(adapter);
1146
1147        return 0;
1148}
1149
1150/**
1151 * e1000_set_multi - Multicast and Promiscuous mode set
1152 * @netdev: network interface device structure
1153 *
1154 * The set_multi entry point is called whenever the multicast address
1155 * list or the network interface flags are updated.  This routine is
1156 * resposible for configuring the hardware for proper multicast,
1157 * promiscuous mode, and all-multi behavior.
1158 **/
1159
1160static void
1161e1000_set_multi(struct net_device *netdev)
1162{
1163        struct e1000_adapter *adapter = netdev->priv;
1164        struct e1000_hw *hw = &adapter->hw;
1165        struct dev_mc_list *mc_ptr;
1166        uint32_t rctl;
1167        uint32_t hash_value;
1168        int i;
1169
1170        /* Check for Promiscuous and All Multicast modes */
1171
1172        rctl = E1000_READ_REG(hw, RCTL);
1173
1174        if(netdev->flags & IFF_PROMISC) {
1175                rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1176        } else if(netdev->flags & IFF_ALLMULTI) {
1177                rctl |= E1000_RCTL_MPE;
1178                rctl &= ~E1000_RCTL_UPE;
1179        } else {
1180                rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
1181        }
1182
1183        E1000_WRITE_REG(hw, RCTL, rctl);
1184
1185        /* 82542 2.0 needs to be in reset to write receive address registers */
1186
1187        if(hw->mac_type == e1000_82542_rev2_0)
1188                e1000_enter_82542_rst(adapter);
1189
1190        /* load the first 15 multicast address into the exact filters 1-15
1191         * RAR 0 is used for the station MAC adddress
1192         * if there are not 15 addresses, go ahead and clear the filters
1193         */
1194        mc_ptr = netdev->mc_list;
1195
1196        for(i = 1; i < E1000_RAR_ENTRIES; i++) {
1197                if(mc_ptr) {
1198                        e1000_rar_set(hw, mc_ptr->dmi_addr, i);
1199                        mc_ptr = mc_ptr->next;
1200                } else {
1201                        E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);
1202                        E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);
1203                }
1204        }
1205
1206        /* clear the old settings from the multicast hash table */
1207
1208        for(i = 0; i < E1000_NUM_MTA_REGISTERS; i++)
1209                E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
1210
1211        /* load any remaining addresses into the hash table */
1212
1213        for(; mc_ptr; mc_ptr = mc_ptr->next) {
1214                hash_value = e1000_hash_mc_addr(hw, mc_ptr->dmi_addr);
1215                e1000_mta_set(hw, hash_value);
1216        }
1217
1218        if(hw->mac_type == e1000_82542_rev2_0)
1219                e1000_leave_82542_rst(adapter);
1220}
1221
1222
1223/* need to wait a few seconds after link up to get diagnostic information from the phy */
1224
1225static void
1226e1000_update_phy_info(unsigned long data)
1227{
1228        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1229        e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
1230}
1231
1232/**
1233 * e1000_watchdog - Timer Call-back
1234 * @data: pointer to netdev cast into an unsigned long
1235 **/
1236
1237static void
1238e1000_watchdog(unsigned long data)
1239{
1240        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1241        struct net_device *netdev = adapter->netdev;
1242        struct e1000_desc_ring *txdr = &adapter->tx_ring;
1243        int i;
1244
1245        e1000_check_for_link(&adapter->hw);
1246
1247        if(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU) {
1248                if(!netif_carrier_ok(netdev)) {
1249                        e1000_get_speed_and_duplex(&adapter->hw,
1250                                                   &adapter->link_speed,
1251                                                   &adapter->link_duplex);
1252
1253                        printk(KERN_INFO
1254                               "e1000: %s NIC Link is Up %d Mbps %s\n",
1255                               netdev->name, adapter->link_speed,
1256                               adapter->link_duplex == FULL_DUPLEX ?
1257                               "Full Duplex" : "Half Duplex");
1258
1259                        netif_carrier_on(netdev);
1260                        netif_wake_queue(netdev);
1261                        mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
1262                }
1263        } else {
1264                if(netif_carrier_ok(netdev)) {
1265                        adapter->link_speed = 0;
1266                        adapter->link_duplex = 0;
1267                        printk(KERN_INFO
1268                               "e1000: %s NIC Link is Down\n",
1269                               netdev->name);
1270                        netif_carrier_off(netdev);
1271                        netif_stop_queue(netdev);
1272                        mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
1273                }
1274        }
1275
1276        e1000_update_stats(adapter);
1277        e1000_update_adaptive(&adapter->hw);
1278
1279        /* Early detection of hung controller */
1280        i = txdr->next_to_clean;
1281        if(txdr->buffer_info[i].dma &&
1282           time_after(jiffies, txdr->buffer_info[i].time_stamp + HZ) &&
1283           !(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF))
1284                netif_stop_queue(netdev);
1285
1286        /* Reset the timer */
1287        mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
1288}
1289
1290#define E1000_TX_FLAGS_CSUM             0x00000001
1291#define E1000_TX_FLAGS_VLAN             0x00000002
1292#define E1000_TX_FLAGS_TSO              0x00000004
1293#define E1000_TX_FLAGS_VLAN_MASK        0xffff0000
1294#define E1000_TX_FLAGS_VLAN_SHIFT       16
1295
1296static inline boolean_t
1297e1000_tso(struct e1000_adapter *adapter, struct sk_buff *skb, int tx_flags)
1298{
1299#ifdef NETIF_F_TSO
1300        struct e1000_context_desc *context_desc;
1301        int i;
1302        uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
1303        uint16_t ipcse, tucse, mss;
1304        
1305        if(skb_shinfo(skb)->tso_size) {
1306                hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
1307                mss = skb_shinfo(skb)->tso_size;
1308                skb->nh.iph->tot_len = 0;
1309                skb->nh.iph->check = 0;
1310                skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr,
1311                                                      skb->nh.iph->daddr,
1312                                                      0,
1313                                                      IPPROTO_TCP,
1314                                                      0);
1315                ipcss = skb->nh.raw - skb->data;
1316                ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data;
1317                ipcse = skb->h.raw - skb->data - 1;
1318                tucss = skb->h.raw - skb->data;
1319                tucso = (void *)&(skb->h.th->check) - (void *)skb->data;
1320                tucse = 0;
1321
1322                i = adapter->tx_ring.next_to_use;
1323                context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
1324                
1325                context_desc->lower_setup.ip_fields.ipcss  = ipcss;
1326                context_desc->lower_setup.ip_fields.ipcso  = ipcso;
1327                context_desc->lower_setup.ip_fields.ipcse  = cpu_to_le16(ipcse);
1328                context_desc->upper_setup.tcp_fields.tucss = tucss;
1329                context_desc->upper_setup.tcp_fields.tucso = tucso;
1330                context_desc->upper_setup.tcp_fields.tucse = cpu_to_le16(tucse);
1331                context_desc->tcp_seg_setup.fields.mss     = cpu_to_le16(mss);
1332                context_desc->tcp_seg_setup.fields.hdr_len = hdr_len;
1333                context_desc->cmd_and_length = cpu_to_le32(adapter->txd_cmd |
1334                        E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE |
1335                        E1000_TXD_CMD_IP | E1000_TXD_CMD_TCP |
1336                        (skb->len - (hdr_len)));
1337
1338                i = (i + 1) % adapter->tx_ring.count;
1339                adapter->tx_ring.next_to_use = i;
1340
1341                return TRUE;
1342        }
1343#endif
1344        
1345        return FALSE;
1346}
1347
1348static inline boolean_t
1349e1000_tx_csum(struct e1000_adapter *adapter, struct sk_buff *skb)
1350{
1351        struct e1000_context_desc *context_desc;
1352        int i;
1353        uint8_t css, cso;
1354
1355        if(skb->ip_summed == CHECKSUM_HW) {
1356                css = skb->h.raw - skb->data;
1357                cso = (skb->h.raw + skb->csum) - skb->data;
1358
1359                i = adapter->tx_ring.next_to_use;
1360                context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
1361
1362                context_desc->upper_setup.tcp_fields.tucss = css;
1363                context_desc->upper_setup.tcp_fields.tucso = cso;
1364                context_desc->upper_setup.tcp_fields.tucse = 0;
1365                context_desc->tcp_seg_setup.data = 0;
1366                context_desc->cmd_and_length =
1367                        cpu_to_le32(adapter->txd_cmd | E1000_TXD_CMD_DEXT);
1368
1369                i = (i + 1) % adapter->tx_ring.count;
1370                adapter->tx_ring.next_to_use = i;
1371
1372                return TRUE;
1373        }
1374
1375        return FALSE;
1376}
1377
1378static inline int
1379e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb)
1380{
1381        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1382        int len, offset, size, count, i;
1383
1384        int f;
1385        len = skb->len - skb->data_len;
1386
1387        i = (tx_ring->next_to_use + tx_ring->count - 1) % tx_ring->count;
1388        count = 0;
1389
1390        offset = 0;
1391
1392        while(len) {
1393                i = (i + 1) % tx_ring->count;
1394                size = min(len, adapter->max_data_per_txd);
1395                tx_ring->buffer_info[i].length = size;
1396                tx_ring->buffer_info[i].dma =
1397                        pci_map_single(adapter->pdev,
1398                                skb->data + offset,
1399                                size,
1400                                PCI_DMA_TODEVICE);
1401                tx_ring->buffer_info[i].time_stamp = jiffies;
1402
1403                len -= size;
1404                offset += size;
1405                count++;
1406        }
1407
1408        for(f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
1409                struct skb_frag_struct *frag;
1410
1411                frag = &skb_shinfo(skb)->frags[f];
1412                len = frag->size;
1413                offset = 0;
1414
1415                while(len) {
1416                        i = (i + 1) % tx_ring->count;
1417                        size = min(len, adapter->max_data_per_txd);
1418                        tx_ring->buffer_info[i].length = size;
1419                        tx_ring->buffer_info[i].dma =
1420                                pci_map_page(adapter->pdev,
1421                                        frag->page,
1422                                        frag->page_offset + offset,
1423                                        size,
1424                                        PCI_DMA_TODEVICE);
1425
1426                        len -= size;
1427                        offset += size;
1428                        count++;
1429                }
1430        }
1431        tx_ring->buffer_info[i].skb = skb;
1432
1433        return count;
1434}
1435
1436static inline void
1437e1000_tx_queue(struct e1000_adapter *adapter, int count, int tx_flags)
1438{
1439        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1440        struct e1000_tx_desc *tx_desc = NULL;
1441        uint32_t txd_upper, txd_lower;
1442        int i;
1443
1444        txd_upper = 0;
1445        txd_lower = adapter->txd_cmd;
1446
1447        if(tx_flags & E1000_TX_FLAGS_TSO) {
1448                txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D |
1449                             E1000_TXD_CMD_TSE;
1450                txd_upper |= (E1000_TXD_POPTS_IXSM | E1000_TXD_POPTS_TXSM) << 8;
1451        }
1452
1453        if(tx_flags & E1000_TX_FLAGS_CSUM) {
1454                txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1455                txd_upper |= E1000_TXD_POPTS_TXSM << 8;
1456        }
1457
1458        if(tx_flags & E1000_TX_FLAGS_VLAN) {
1459                txd_lower |= E1000_TXD_CMD_VLE;
1460                txd_upper |= (tx_flags & E1000_TX_FLAGS_VLAN_MASK);
1461        }
1462
1463        i = tx_ring->next_to_use;
1464
1465        while(count--) {
1466                tx_desc = E1000_TX_DESC(*tx_ring, i);
1467                tx_desc->buffer_addr = cpu_to_le64(tx_ring->buffer_info[i].dma);
1468                tx_desc->lower.data =
1469                        cpu_to_le32(txd_lower | tx_ring->buffer_info[i].length);
1470                tx_desc->upper.data = cpu_to_le32(txd_upper);
1471                i = (i + 1) % tx_ring->count;
1472        }
1473
1474        tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP);
1475
1476        /* Force memory writes to complete before letting h/w
1477         * know there are new descriptors to fetch.  (Only
1478         * applicable for weak-ordered memory model archs,
1479         * such as IA-64). */
1480        wmb();
1481
1482        tx_ring->next_to_use = i;
1483        E1000_WRITE_REG(&adapter->hw, TDT, i);
1484}
1485
1486#define TXD_USE_COUNT(S, X) (((S) / (X)) + (((S) % (X)) ? 1 : 0))
1487
1488static int
1489e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1490{
1491        struct e1000_adapter *adapter = netdev->priv;
1492        int tx_flags = 0, count;
1493
1494        int f;
1495
1496
1497        count = TXD_USE_COUNT(skb->len - skb->data_len,
1498                              adapter->max_data_per_txd);
1499        for(f = 0; f < skb_shinfo(skb)->nr_frags; f++)
1500                count += TXD_USE_COUNT(skb_shinfo(skb)->frags[f].size,
1501                                       adapter->max_data_per_txd);
1502#ifdef NETIF_F_TSO
1503        if((skb_shinfo(skb)->tso_size) || (skb->ip_summed == CHECKSUM_HW))
1504                count++;
1505#else
1506        if(skb->ip_summed == CHECKSUM_HW)
1507                count++;
1508#endif
1509
1510        if(E1000_DESC_UNUSED(&adapter->tx_ring) < count) {
1511                netif_stop_queue(netdev);
1512                return 1;
1513        }
1514
1515        if(adapter->vlgrp && vlan_tx_tag_present(skb)) {
1516                tx_flags |= E1000_TX_FLAGS_VLAN;
1517                tx_flags |= (vlan_tx_tag_get(skb) << E1000_TX_FLAGS_VLAN_SHIFT);
1518        }
1519
1520        if(e1000_tso(adapter, skb, tx_flags))
1521                tx_flags |= E1000_TX_FLAGS_TSO;
1522        else if(e1000_tx_csum(adapter, skb))
1523                tx_flags |= E1000_TX_FLAGS_CSUM;
1524
1525        count = e1000_tx_map(adapter, skb);
1526
1527        e1000_tx_queue(adapter, count, tx_flags);
1528
1529        netdev->trans_start = jiffies;
1530
1531        return 0;
1532}
1533
1534/**
1535 * e1000_tx_timeout - Respond to a Tx Hang
1536 * @netdev: network interface device structure
1537 **/
1538
1539static void
1540e1000_tx_timeout(struct net_device *netdev)
1541{
1542        struct e1000_adapter *adapter = netdev->priv;
1543
1544        /* Do the reset outside of interrupt context */
1545        schedule_task(&adapter->tx_timeout_task);
1546}
1547
1548static void
1549e1000_tx_timeout_task(struct net_device *netdev)
1550{
1551        struct e1000_adapter *adapter = netdev->priv;
1552
1553        netif_device_detach(netdev);
1554        e1000_down(adapter);
1555        e1000_up(adapter);
1556        netif_device_attach(netdev);
1557}
1558
1559/**
1560 * e1000_get_stats - Get System Network Statistics
1561 * @netdev: network interface device structure
1562 *
1563 * Returns the address of the device statistics structure.
1564 * The statistics are actually updated from the timer callback.
1565 **/
1566
1567static struct net_device_stats *
1568e1000_get_stats(struct net_device *netdev)
1569{
1570        struct e1000_adapter *adapter = netdev->priv;
1571
1572        return &adapter->net_stats;
1573}
1574
1575/**
1576 * e1000_change_mtu - Change the Maximum Transfer Unit
1577 * @netdev: network interface device structure
1578 * @new_mtu: new value for maximum frame size
1579 *
1580 * Returns 0 on success, negative on failure
1581 **/
1582
1583static int
1584e1000_change_mtu(struct net_device *netdev, int new_mtu)
1585{
1586        struct e1000_adapter *adapter = netdev->priv;
1587        int old_mtu = adapter->rx_buffer_len;
1588        int max_frame = new_mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
1589
1590        if((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
1591           (max_frame > MAX_JUMBO_FRAME_SIZE)) {
1592                E1000_ERR("Invalid MTU setting\n");
1593                return -EINVAL;
1594        }
1595
1596        if(max_frame <= MAXIMUM_ETHERNET_FRAME_SIZE) {
1597                adapter->rx_buffer_len = E1000_RXBUFFER_2048;
1598
1599        } else if(adapter->hw.mac_type < e1000_82543) {
1600                E1000_ERR("Jumbo Frames not supported on 82542\n");
1601                return -EINVAL;
1602
1603        } else if(max_frame <= E1000_RXBUFFER_4096) {
1604                adapter->rx_buffer_len = E1000_RXBUFFER_4096;
1605
1606        } else if(max_frame <= E1000_RXBUFFER_8192) {
1607                adapter->rx_buffer_len = E1000_RXBUFFER_8192;
1608
1609        } else {
1610                adapter->rx_buffer_len = E1000_RXBUFFER_16384;
1611        }
1612
1613        if(old_mtu != adapter->rx_buffer_len && netif_running(netdev)) {
1614
1615                e1000_down(adapter);
1616                e1000_up(adapter);
1617        }
1618
1619        netdev->mtu = new_mtu;
1620        adapter->hw.max_frame_size = max_frame;
1621
1622        return 0;
1623}
1624
1625/**
1626 * e1000_update_stats - Update the board statistics counters
1627 * @adapter: board private structure
1628 **/
1629
1630static void
1631e1000_update_stats(struct e1000_adapter *adapter)
1632{
1633        struct e1000_hw *hw = &adapter->hw;
1634        unsigned long flags;
1635        uint16_t phy_tmp;
1636
1637#define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
1638
1639        spin_lock_irqsave(&adapter->stats_lock, flags);
1640
1641        /* these counters are modified from e1000_adjust_tbi_stats,
1642         * called from the interrupt context, so they must only
1643         * be written while holding adapter->stats_lock
1644         */
1645
1646        adapter->stats.crcerrs += E1000_READ_REG(hw, CRCERRS);
1647        adapter->stats.gprc += E1000_READ_REG(hw, GPRC);
1648        adapter->stats.gorcl += E1000_READ_REG(hw, GORCL);
1649        adapter->stats.gorch += E1000_READ_REG(hw, GORCH);
1650        adapter->stats.bprc += E1000_READ_REG(hw, BPRC);
1651        adapter->stats.mprc += E1000_READ_REG(hw, MPRC);
1652        adapter->stats.roc += E1000_READ_REG(hw, ROC);
1653        adapter->stats.prc64 += E1000_READ_REG(hw, PRC64);
1654        adapter->stats.prc127 += E1000_READ_REG(hw, PRC127);
1655        adapter->stats.prc255 += E1000_READ_REG(hw, PRC255);
1656        adapter->stats.prc511 += E1000_READ_REG(hw, PRC511);
1657        adapter->stats.prc1023 += E1000_READ_REG(hw, PRC1023);
1658        adapter->stats.prc1522 += E1000_READ_REG(hw, PRC1522);
1659
1660        spin_unlock_irqrestore(&adapter->stats_lock, flags);
1661
1662        /* the rest of the counters are only modified here */
1663
1664        adapter->stats.symerrs += E1000_READ_REG(hw, SYMERRS);
1665        adapter->stats.mpc += E1000_READ_REG(hw, MPC);
1666        adapter->stats.scc += E1000_READ_REG(hw, SCC);
1667        adapter->stats.ecol += E1000_READ_REG(hw, ECOL);
1668        adapter->stats.mcc += E1000_READ_REG(hw, MCC);
1669        adapter->stats.latecol += E1000_READ_REG(hw, LATECOL);
1670        adapter->stats.dc += E1000_READ_REG(hw, DC);
1671        adapter->stats.sec += E1000_READ_REG(hw, SEC);
1672        adapter->stats.rlec += E1000_READ_REG(hw, RLEC);
1673        adapter->stats.xonrxc += E1000_READ_REG(hw, XONRXC);
1674        adapter->stats.xontxc += E1000_READ_REG(hw, XONTXC);
1675        adapter->stats.xoffrxc += E1000_READ_REG(hw, XOFFRXC);
1676        adapter->stats.xofftxc += E1000_READ_REG(hw, XOFFTXC);
1677        adapter->stats.fcruc += E1000_READ_REG(hw, FCRUC);
1678        adapter->stats.gptc += E1000_READ_REG(hw, GPTC);
1679        adapter->stats.gotcl += E1000_READ_REG(hw, GOTCL);
1680        adapter->stats.gotch += E1000_READ_REG(hw, GOTCH);
1681        adapter->stats.rnbc += E1000_READ_REG(hw, RNBC);
1682        adapter->stats.ruc += E1000_READ_REG(hw, RUC);
1683        adapter->stats.rfc += E1000_READ_REG(hw, RFC);
1684        adapter->stats.rjc += E1000_READ_REG(hw, RJC);
1685        adapter->stats.torl += E1000_READ_REG(hw, TORL);
1686        adapter->stats.torh += E1000_READ_REG(hw, TORH);
1687        adapter->stats.totl += E1000_READ_REG(hw, TOTL);
1688        adapter->stats.toth += E1000_READ_REG(hw, TOTH);
1689        adapter->stats.tpr += E1000_READ_REG(hw, TPR);
1690        adapter->stats.ptc64 += E1000_READ_REG(hw, PTC64);
1691        adapter->stats.ptc127 += E1000_READ_REG(hw, PTC127);
1692        adapter->stats.ptc255 += E1000_READ_REG(hw, PTC255);
1693        adapter->stats.ptc511 += E1000_READ_REG(hw, PTC511);
1694        adapter->stats.ptc1023 += E1000_READ_REG(hw, PTC1023);
1695        adapter->stats.ptc1522 += E1000_READ_REG(hw, PTC1522);
1696        adapter->stats.mptc += E1000_READ_REG(hw, MPTC);
1697        adapter->stats.bptc += E1000_READ_REG(hw, BPTC);
1698
1699        /* used for adaptive IFS */
1700
1701        hw->tx_packet_delta = E1000_READ_REG(hw, TPT);
1702        adapter->stats.tpt += hw->tx_packet_delta;
1703        hw->collision_delta = E1000_READ_REG(hw, COLC);
1704        adapter->stats.colc += hw->collision_delta;
1705
1706        if(hw->mac_type >= e1000_82543) {
1707                adapter->stats.algnerrc += E1000_READ_REG(hw, ALGNERRC);
1708                adapter->stats.rxerrc += E1000_READ_REG(hw, RXERRC);
1709                adapter->stats.tncrs += E1000_READ_REG(hw, TNCRS);
1710                adapter->stats.cexterr += E1000_READ_REG(hw, CEXTERR);
1711                adapter->stats.tsctc += E1000_READ_REG(hw, TSCTC);
1712                adapter->stats.tsctfc += E1000_READ_REG(hw, TSCTFC);
1713        }
1714
1715        /* Fill out the OS statistics structure */
1716
1717        adapter->net_stats.rx_packets = adapter->stats.gprc;
1718        adapter->net_stats.tx_packets = adapter->stats.gptc;
1719        adapter->net_stats.rx_bytes = adapter->stats.gorcl;
1720        adapter->net_stats.tx_bytes = adapter->stats.gotcl;
1721        adapter->net_stats.multicast = adapter->stats.mprc;
1722        adapter->net_stats.collisions = adapter->stats.colc;
1723
1724        /* Rx Errors */
1725
1726        adapter->net_stats.rx_errors = adapter->stats.rxerrc +
1727                adapter->stats.crcerrs + adapter->stats.algnerrc +
1728                adapter->stats.rlec + adapter->stats.rnbc +
1729                adapter->stats.mpc + adapter->stats.cexterr;
1730        adapter->net_stats.rx_dropped = adapter->stats.rnbc;
1731        adapter->net_stats.rx_length_errors = adapter->stats.rlec;
1732        adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
1733        adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
1734        adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
1735        adapter->net_stats.rx_missed_errors = adapter->stats.mpc;
1736
1737        /* Tx Errors */
1738
1739        adapter->net_stats.tx_errors = adapter->stats.ecol +
1740                                       adapter->stats.latecol;
1741        adapter->net_stats.tx_aborted_errors = adapter->stats.ecol;
1742        adapter->net_stats.tx_window_errors = adapter->stats.latecol;
1743
1744        /* Tx Dropped needs to be maintained elsewhere */
1745
1746        /* Phy Stats */
1747
1748        if(hw->media_type == e1000_media_type_copper) {
1749                if((adapter->link_speed == SPEED_1000) &&
1750                   (!e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_tmp))) {
1751                        phy_tmp &= PHY_IDLE_ERROR_COUNT_MASK;
1752                        adapter->phy_stats.idle_errors += phy_tmp;
1753                }
1754
1755                if(!e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp))
1756                        adapter->phy_stats.receive_errors += phy_tmp;
1757        }
1758}
1759
1760/**
1761 * e1000_irq_disable - Mask off interrupt generation on the NIC
1762 * @adapter: board private structure
1763 **/
1764
1765static inline void
1766e1000_irq_disable(struct e1000_adapter *adapter)
1767{
1768        atomic_inc(&adapter->irq_sem);
1769        E1000_WRITE_REG(&adapter->hw, IMC, ~0);
1770        E1000_WRITE_FLUSH(&adapter->hw);
1771        synchronize_irq(adapter->netdev->irq);
1772}
1773
1774/**
1775 * e1000_irq_enable - Enable default interrupt generation settings
1776 * @adapter: board private structure
1777 **/
1778
1779static inline void
1780e1000_irq_enable(struct e1000_adapter *adapter)
1781{
1782        if(atomic_dec_and_test(&adapter->irq_sem)) {
1783                E1000_WRITE_REG(&adapter->hw, IMS, IMS_ENABLE_MASK);
1784                E1000_WRITE_FLUSH(&adapter->hw);
1785        }
1786}
1787
1788/**
1789 * e1000_intr - Interrupt Handler
1790 * @irq: interrupt number
1791 * @data: pointer to a network interface device structure
1792 * @pt_regs: CPU registers structure
1793 **/
1794
1795static void
1796e1000_intr(int irq, void *data, struct pt_regs *regs)
1797{
1798        struct net_device *netdev = data;
1799        struct e1000_adapter *adapter = netdev->priv;
1800        
1801#ifdef CONFIG_E1000_NAPI
1802        if (netif_rx_schedule_prep(netdev)) {
1803                e1000_irq_disable(adapter);
1804                __netif_rx_schedule(netdev);
1805        }
1806#else
1807        uint32_t icr;
1808        int i = E1000_MAX_INTR;
1809
1810        while(i && (icr = E1000_READ_REG(&adapter->hw, ICR))) {
1811
1812                if(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1813                        adapter->hw.get_link_status = 1;
1814                        mod_timer(&adapter->watchdog_timer, jiffies);
1815                }
1816
1817                e1000_clean_rx_irq(adapter);
1818                e1000_clean_tx_irq(adapter);
1819                i--;
1820
1821        }
1822#endif
1823}
1824
1825#ifdef CONFIG_E1000_NAPI
1826static int
1827e1000_process_intr(struct net_device *netdev)
1828{
1829        struct e1000_adapter *adapter = netdev->priv;
1830        uint32_t icr;
1831        int i = E1000_MAX_INTR;
1832        int hasReceived = 0;
1833
1834        while(i && (icr = E1000_READ_REG(&adapter->hw, ICR))) {
1835                if (icr & E1000_ICR_RXT0)
1836                        hasReceived = 1;
1837 
1838                if (!(icr & ~(E1000_ICR_RXT0)))
1839                        break;
1840    
1841                if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
1842                        adapter->hw.get_link_status = 1;
1843                        mod_timer(&adapter->watchdog_timer, jiffies);
1844                }
1845 
1846                e1000_clean_tx_irq(adapter);
1847                i--;
1848        }
1849
1850        return hasReceived;
1851}
1852#endif
1853
1854/**
1855 * e1000_clean_tx_irq - Reclaim resources after transmit completes
1856 * @adapter: board private structure
1857 **/
1858
1859static void
1860e1000_clean_tx_irq(struct e1000_adapter *adapter)
1861{
1862        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1863        struct net_device *netdev = adapter->netdev;
1864        struct pci_dev *pdev = adapter->pdev;
1865        struct e1000_tx_desc *tx_desc;
1866        int i;
1867
1868        i = tx_ring->next_to_clean;
1869        tx_desc = E1000_TX_DESC(*tx_ring, i);
1870
1871        while(tx_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) {
1872
1873                if(tx_ring->buffer_info[i].dma) {
1874
1875                        pci_unmap_page(pdev,
1876                                       tx_ring->buffer_info[i].dma,
1877                                       tx_ring->buffer_info[i].length,
1878                                       PCI_DMA_TODEVICE);
1879
1880                        tx_ring->buffer_info[i].dma = 0;
1881                }
1882
1883                if(tx_ring->buffer_info[i].skb) {
1884
1885                        dev_kfree_skb_any(tx_ring->buffer_info[i].skb);
1886
1887                        tx_ring->buffer_info[i].skb = NULL;
1888                }
1889
1890                tx_desc->upper.data = 0;
1891
1892                i = (i + 1) % tx_ring->count;
1893                tx_desc = E1000_TX_DESC(*tx_ring, i);
1894        }
1895
1896        tx_ring->next_to_clean = i;
1897
1898        if(netif_queue_stopped(netdev) && netif_carrier_ok(netdev) &&
1899           (E1000_DESC_UNUSED(tx_ring) > E1000_TX_QUEUE_WAKE)) {
1900
1901                netif_wake_queue(netdev);
1902        }
1903}
1904
1905#ifdef CONFIG_E1000_NAPI
1906static int
1907e1000_poll(struct net_device *netdev, int *budget)
1908{
1909        struct e1000_adapter *adapter = netdev->priv;
1910        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
1911        struct pci_dev *pdev = adapter->pdev;
1912        struct e1000_rx_desc *rx_desc;
1913        struct sk_buff *skb;
1914        unsigned long flags;
1915        uint32_t length;
1916        uint8_t last_byte;
1917        int i;
1918        int received = 0;
1919        int rx_work_limit = *budget;
1920
1921        if(rx_work_limit > netdev->quota)
1922                rx_work_limit = netdev->quota;
1923
1924        e1000_process_intr(netdev);
1925
1926        i = rx_ring->next_to_clean;
1927        rx_desc = E1000_RX_DESC(*rx_ring, i);
1928
1929        while(rx_desc->status & E1000_RXD_STAT_DD) {
1930                if(--rx_work_limit < 0)
1931                        goto not_done;
1932
1933                pci_unmap_single(pdev,
1934                                 rx_ring->buffer_info[i].dma,
1935                                 rx_ring->buffer_info[i].length,
1936                                 PCI_DMA_FROMDEVICE);
1937
1938                skb = rx_ring->buffer_info[i].skb;
1939                length = le16_to_cpu(rx_desc->length);
1940
1941                if(!(rx_desc->status & E1000_RXD_STAT_EOP)) {
1942
1943                        /* All receives must fit into a single buffer */
1944
1945                        E1000_DBG("Receive packet consumed multiple buffers\n");
1946
1947                        dev_kfree_skb_irq(skb);
1948                        rx_desc->status = 0;
1949                        rx_ring->buffer_info[i].skb = NULL;
1950
1951                        i = (i + 1) % rx_ring->count;
1952
1953                        rx_desc = E1000_RX_DESC(*rx_ring, i);
1954                        continue;
1955                }
1956
1957                if(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
1958
1959                        last_byte = *(skb->data + length - 1);
1960
1961                        if(TBI_ACCEPT(&adapter->hw, rx_desc->status,
1962                                      rx_desc->errors, length, last_byte)) {
1963
1964                                spin_lock_irqsave(&adapter->stats_lock, flags);
1965
1966                                e1000_tbi_adjust_stats(&adapter->hw,
1967                                                       &adapter->stats,
1968                                                       length, skb->data);
1969
1970                                spin_unlock_irqrestore(&adapter->stats_lock,
1971                                                       flags);
1972                                length--;
1973                        } else {
1974
1975                                dev_kfree_skb_irq(skb);
1976                                rx_desc->status = 0;
1977                                rx_ring->buffer_info[i].skb = NULL;
1978
1979                                i = (i + 1) % rx_ring->count;
1980
1981                                rx_desc = E1000_RX_DESC(*rx_ring, i);
1982                                continue;
1983                        }
1984                }
1985
1986                /* Good Receive */
1987                skb_put(skb, length - ETHERNET_FCS_SIZE);
1988
1989                /* Receive Checksum Offload */
1990                e1000_rx_checksum(adapter, rx_desc, skb);
1991
1992                skb->protocol = eth_type_trans(skb, netdev);
1993                if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
1994                        vlan_hwaccel_rx(skb, adapter->vlgrp,
1995                                (rx_desc->special & E1000_RXD_SPC_VLAN_MASK));
1996                } else {
1997                        netif_receive_skb(skb);
1998                }
1999                netdev->last_rx = jiffies;
2000
2001                rx_desc->status = 0;
2002                rx_ring->buffer_info[i].skb = NULL;
2003
2004                i = (i + 1) % rx_ring->count;
2005
2006                rx_desc = E1000_RX_DESC(*rx_ring, i);
2007                received++;
2008        }
2009
2010        if(!received)
2011                received = 1;
2012
2013        e1000_alloc_rx_buffers(adapter);
2014        
2015        rx_ring->next_to_clean = i;
2016        netdev->quota -= received;
2017        *budget -= received;
2018
2019        netif_rx_complete(netdev);
2020
2021        e1000_irq_enable(adapter);
2022        return 0;
2023
2024not_done:
2025
2026        e1000_alloc_rx_buffers(adapter);
2027        
2028        rx_ring->next_to_clean = i;
2029        netdev->quota -= received;
2030        *budget -= received;
2031
2032        return 1;
2033}
2034#else
2035/**
2036 * e1000_clean_rx_irq - Send received data up the network stack,
2037 * @adapter: board private structure
2038 **/
2039
2040static void
2041e1000_clean_rx_irq(struct e1000_adapter *adapter)
2042{
2043        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
2044        struct net_device *netdev = adapter->netdev;
2045        struct pci_dev *pdev = adapter->pdev;
2046        struct e1000_rx_desc *rx_desc;
2047        struct sk_buff *skb;
2048        unsigned long flags;
2049        uint32_t length;
2050        uint8_t last_byte;
2051        int i;
2052
2053        i = rx_ring->next_to_clean;
2054        rx_desc = E1000_RX_DESC(*rx_ring, i);
2055
2056        while(rx_desc->status & E1000_RXD_STAT_DD) {
2057
2058                pci_unmap_single(pdev,
2059                                 rx_ring->buffer_info[i].dma,
2060                                 rx_ring->buffer_info[i].length,
2061                                 PCI_DMA_FROMDEVICE);
2062
2063                skb = rx_ring->buffer_info[i].skb;
2064                length = le16_to_cpu(rx_desc->length);
2065
2066                if(!(rx_desc->status & E1000_RXD_STAT_EOP)) {
2067
2068                        /* All receives must fit into a single buffer */
2069
2070                        E1000_DBG("Receive packet consumed multiple buffers\n");
2071
2072                        dev_kfree_skb_irq(skb);
2073                        rx_desc->status = 0;
2074                        rx_ring->buffer_info[i].skb = NULL;
2075
2076                        i = (i + 1) % rx_ring->count;
2077
2078                        rx_desc = E1000_RX_DESC(*rx_ring, i);
2079                        continue;
2080                }
2081
2082                if(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2083
2084                        last_byte = *(skb->data + length - 1);
2085
2086                        if(TBI_ACCEPT(&adapter->hw, rx_desc->status,
2087                                      rx_desc->errors, length, last_byte)) {
2088
2089                                spin_lock_irqsave(&adapter->stats_lock, flags);
2090
2091                                e1000_tbi_adjust_stats(&adapter->hw,
2092                                                       &adapter->stats,
2093                                                       length, skb->data);
2094
2095                                spin_unlock_irqrestore(&adapter->stats_lock,
2096                                                       flags);
2097                                length--;
2098                        } else {
2099
2100                                dev_kfree_skb_irq(skb);
2101                                rx_desc->status = 0;
2102                                rx_ring->buffer_info[i].skb = NULL;
2103
2104                                i = (i + 1) % rx_ring->count;
2105
2106                                rx_desc = E1000_RX_DESC(*rx_ring, i);
2107                                continue;
2108                        }
2109                }
2110
2111                /* Good Receive */
2112                skb_put(skb, length - ETHERNET_FCS_SIZE);
2113
2114                /* Receive Checksum Offload */
2115                e1000_rx_checksum(adapter, rx_desc, skb);
2116
2117                skb->protocol = eth_type_trans(skb, netdev);
2118                if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
2119                        vlan_hwaccel_rx(skb, adapter->vlgrp,
2120                                (rx_desc->special & E1000_RXD_SPC_VLAN_MASK));
2121                } else {
2122                        netif_rx(skb);
2123                }
2124                netdev->last_rx = jiffies;
2125
2126                rx_desc->status = 0;
2127                rx_ring->buffer_info[i].skb = NULL;
2128
2129                i = (i + 1) % rx_ring->count;
2130
2131                rx_desc = E1000_RX_DESC(*rx_ring, i);
2132        }
2133
2134        rx_ring->next_to_clean = i;
2135
2136        e1000_alloc_rx_buffers(adapter);
2137}
2138#endif
2139
2140/**
2141 * e1000_alloc_rx_buffers - Replace used receive buffers
2142 * @data: address of board private structure
2143 **/
2144
2145static void
2146e1000_alloc_rx_buffers(struct e1000_adapter *adapter)
2147{
2148        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
2149        struct net_device *netdev = adapter->netdev;
2150        struct pci_dev *pdev = adapter->pdev;
2151        struct e1000_rx_desc *rx_desc;
2152        struct sk_buff *skb;
2153        int reserve_len;
2154        int i;
2155
2156        reserve_len = 2;
2157
2158        i = rx_ring->next_to_use;
2159
2160        while(!rx_ring->buffer_info[i].skb) {
2161                rx_desc = E1000_RX_DESC(*rx_ring, i);
2162
2163                skb = alloc_skb(adapter->rx_buffer_len + reserve_len,
2164                                GFP_ATOMIC);
2165
2166                if(!skb) {
2167                        /* Better luck next round */
2168                        break;
2169                }
2170
2171                /* Make buffer alignment 2 beyond a 16 byte boundary
2172                 * this will result in a 16 byte aligned IP header after
2173                 * the 14 byte MAC header is removed
2174                 */
2175                skb_reserve(skb, reserve_len);
2176
2177                skb->dev = netdev;
2178
2179                rx_ring->buffer_info[i].skb = skb;
2180                rx_ring->buffer_info[i].length = adapter->rx_buffer_len;
2181                rx_ring->buffer_info[i].dma =
2182                        pci_map_single(pdev,
2183                                       skb->data,
2184                                       adapter->rx_buffer_len,
2185                                       PCI_DMA_FROMDEVICE);
2186
2187                rx_desc->buffer_addr = cpu_to_le64(rx_ring->buffer_info[i].dma);
2188
2189                if(!(i % E1000_RX_BUFFER_WRITE)) {
2190                        /* Force memory writes to complete before letting h/w
2191                         * know there are new descriptors to fetch.  (Only
2192                         * applicable for weak-ordered memory model archs,
2193                         * such as IA-64). */
2194                        wmb();
2195
2196                        E1000_WRITE_REG(&adapter->hw, RDT, i);
2197                }
2198
2199                i = (i + 1) % rx_ring->count;
2200        }
2201
2202        rx_ring->next_to_use = i;
2203}
2204
2205/**
2206 * e1000_ioctl -
2207 * @netdev:
2208 * @ifreq:
2209 * @cmd:
2210 **/
2211
2212static int
2213e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2214{
2215        switch (cmd) {
2216        case SIOCETHTOOL:
2217                return e1000_ethtool_ioctl(netdev, ifr);
2218        default:
2219                return -EOPNOTSUPP;
2220        }
2221}
2222
2223/**
2224 * e1000_rx_checksum - Receive Checksum Offload for 82543
2225 * @adapter: board private structure
2226 * @rx_desc: receive descriptor
2227 * @sk_buff: socket buffer with received data
2228 **/
2229
2230static inline void
2231e1000_rx_checksum(struct e1000_adapter *adapter,
2232                  struct e1000_rx_desc *rx_desc,
2233                  struct sk_buff *skb)
2234{
2235        /* 82543 or newer only */
2236        if((adapter->hw.mac_type < e1000_82543) ||
2237        /* Ignore Checksum bit is set */
2238        (rx_desc->status & E1000_RXD_STAT_IXSM) ||
2239        /* TCP Checksum has not been calculated */
2240        (!(rx_desc->status & E1000_RXD_STAT_TCPCS))) {
2241                skb->ip_summed = CHECKSUM_NONE;
2242                return;
2243        }
2244
2245        /* At this point we know the hardware did the TCP checksum */
2246        /* now look at the TCP checksum error bit */
2247        if(rx_desc->errors & E1000_RXD_ERR_TCPE) {
2248                /* let the stack verify checksum errors */
2249                skb->ip_summed = CHECKSUM_NONE;
2250                adapter->hw_csum_err++;
2251        } else {
2252        /* TCP checksum is good */
2253                skb->ip_summed = CHECKSUM_UNNECESSARY;
2254                adapter->hw_csum_good++;
2255        }
2256}
2257
2258void
2259e1000_pci_set_mwi(struct e1000_hw *hw)
2260{
2261        struct e1000_adapter *adapter = hw->back;
2262
2263        pci_set_mwi(adapter->pdev);
2264}
2265
2266void
2267e1000_pci_clear_mwi(struct e1000_hw *hw)
2268{
2269        struct e1000_adapter *adapter = hw->back;
2270
2271        pci_clear_mwi(adapter->pdev);
2272}
2273
2274void
2275e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
2276{
2277        struct e1000_adapter *adapter = hw->back;
2278
2279        pci_read_config_word(adapter->pdev, reg, value);
2280}
2281
2282void
2283e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
2284{
2285        struct e1000_adapter *adapter = hw->back;
2286
2287        pci_write_config_word(adapter->pdev, reg, *value);
2288}
2289
2290uint32_t
2291e1000_io_read(struct e1000_hw *hw, uint32_t port)
2292{
2293        return inl(port);
2294}
2295
2296void
2297e1000_io_write(struct e1000_hw *hw, uint32_t port, uint32_t value)
2298{
2299        outl(value, port);
2300}
2301
2302static void
2303e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
2304{
2305        struct e1000_adapter *adapter = netdev->priv;
2306        uint32_t ctrl, rctl;
2307
2308        e1000_irq_disable(adapter);
2309        adapter->vlgrp = grp;
2310
2311        if(grp) {
2312                /* enable VLAN tag insert/strip */
2313
2314                E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE);
2315
2316                ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2317                ctrl |= E1000_CTRL_VME;
2318                E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2319
2320                /* enable VLAN receive filtering */
2321
2322                rctl = E1000_READ_REG(&adapter->hw, RCTL);
2323                rctl |= E1000_RCTL_VFE;
2324                rctl &= ~E1000_RCTL_CFIEN;
2325                E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2326        } else {
2327                /* disable VLAN tag insert/strip */
2328
2329                ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2330                ctrl &= ~E1000_CTRL_VME;
2331                E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2332
2333                /* disable VLAN filtering */
2334
2335                rctl = E1000_READ_REG(&adapter->hw, RCTL);
2336                rctl &= ~E1000_RCTL_VFE;
2337                E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2338        }
2339
2340        e1000_irq_enable(adapter);
2341}
2342
2343static void
2344e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid)
2345{
2346        struct e1000_adapter *adapter = netdev->priv;
2347        uint32_t vfta, index;
2348
2349        /* add VID to filter table */
2350
2351        index = (vid >> 5) & 0x7F;
2352        vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2353        vfta |= (1 << (vid & 0x1F));
2354        e1000_write_vfta(&adapter->hw, index, vfta);
2355}
2356
2357static void
2358e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
2359{
2360        struct e1000_adapter *adapter = netdev->priv;
2361        uint32_t vfta, index;
2362
2363        e1000_irq_disable(adapter);
2364
2365        if(adapter->vlgrp)
2366                adapter->vlgrp->vlan_devices[vid] = NULL;
2367
2368        e1000_irq_enable(adapter);
2369
2370        /* remove VID from filter table*/
2371
2372        index = (vid >> 5) & 0x7F;
2373        vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2374        vfta &= ~(1 << (vid & 0x1F));
2375        e1000_write_vfta(&adapter->hw, index, vfta);
2376}
2377
2378static int
2379e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p)
2380{
2381        struct pci_dev *pdev = NULL;
2382
2383        switch(event) {
2384        case SYS_DOWN:
2385        case SYS_HALT:
2386        case SYS_POWER_OFF:
2387                pci_for_each_dev(pdev) {
2388                        if(pci_dev_driver(pdev) == &e1000_driver)
2389                                e1000_suspend(pdev, 3);
2390                }
2391        }
2392        return NOTIFY_DONE;
2393}
2394
2395static int
2396e1000_suspend(struct pci_dev *pdev, uint32_t state)
2397{
2398        struct net_device *netdev = pci_get_drvdata(pdev);
2399        struct e1000_adapter *adapter = netdev->priv;
2400        uint32_t ctrl, ctrl_ext, rctl, manc;
2401
2402        netif_device_detach(netdev);
2403
2404        if(netif_running(netdev))
2405                e1000_down(adapter);
2406
2407        if(adapter->wol) {
2408                e1000_setup_rctl(adapter);
2409                e1000_set_multi(netdev);
2410
2411                if(adapter->wol & E1000_WUFC_MC) {
2412                        rctl = E1000_READ_REG(&adapter->hw, RCTL);
2413                        rctl |= E1000_RCTL_MPE;
2414                        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2415                }
2416
2417                if(adapter->hw.media_type == e1000_media_type_fiber) {
2418                        #define E1000_CTRL_ADVD3WUC 0x00100000
2419                        ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2420                        ctrl |= E1000_CTRL_ADVD3WUC;
2421                        E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2422
2423                        ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
2424                        ctrl_ext |= E1000_CTRL_EXT_SDP7_DATA;
2425                        E1000_WRITE_REG(&adapter->hw, CTRL_EXT, ctrl_ext);
2426                }
2427
2428                E1000_WRITE_REG(&adapter->hw, WUC, 0);
2429                E1000_WRITE_REG(&adapter->hw, WUFC, adapter->wol);
2430                pci_enable_wake(pdev, 3, 1);
2431        } else {
2432                E1000_WRITE_REG(&adapter->hw, WUC, 0);
2433                E1000_WRITE_REG(&adapter->hw, WUFC, 0);
2434                pci_enable_wake(pdev, 3, 0);
2435        }
2436
2437        pci_save_state(pdev, adapter->pci_state);
2438
2439        if(adapter->hw.mac_type >= e1000_82540) {
2440                manc = E1000_READ_REG(&adapter->hw, MANC);
2441                if(manc & E1000_MANC_SMBUS_EN) {
2442                        manc |= E1000_MANC_ARP_EN;
2443                        E1000_WRITE_REG(&adapter->hw, MANC, manc);
2444                }
2445        } else
2446                pci_set_power_state(pdev, 3);
2447
2448        return 0;
2449}
2450
2451#ifdef CONFIG_PM
2452static int
2453e1000_resume(struct pci_dev *pdev)
2454{
2455        struct net_device *netdev = pci_get_drvdata(pdev);
2456        struct e1000_adapter *adapter = netdev->priv;
2457        uint32_t manc;
2458
2459        pci_set_power_state(pdev, 0);
2460        pci_restore_state(pdev, adapter->pci_state);
2461        pci_enable_wake(pdev, 0, 0);
2462
2463        /* Clear the wakeup status bits */
2464
2465        E1000_WRITE_REG(&adapter->hw, WUS, ~0);
2466
2467        if(netif_running(netdev))
2468                e1000_up(adapter);
2469
2470        netif_device_attach(netdev);
2471
2472        if(adapter->hw.mac_type >= e1000_82540) {
2473                manc = E1000_READ_REG(&adapter->hw, MANC);
2474                manc &= ~(E1000_MANC_ARP_EN);
2475                E1000_WRITE_REG(&adapter->hw, MANC, manc);
2476        }
2477
2478        return 0;
2479}
2480#endif
2481
2482/* e1000_main.c */
2483
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.