linux-bk/drivers/net/e1000/e1000_main.c
<<
>>
Prefs
   1/*******************************************************************************
   2
   3  
   4  Copyright(c) 1999 - 2004 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#include "e1000.h"
  30
  31/* Change Log
  32 *
  33 * 5.2.39       3/12/04
  34 *   o Added support to read/write eeprom data in proper order.
  35 *     By default device eeprom is always little-endian, word
  36 *     addressable 
  37 *   o Disable TSO as the default for the driver until hangs
  38 *     reported against non-IA acrhs can be root-caused.
  39 *   o Back out the CSA fix for 82547 as it continues to cause
  40 *     systems lock-ups with production systems.
  41 *   o Fixed FC high/low water mark values to actually be in the
  42 *     range of the Rx FIFO area.  It was a math error.
  43 *     [Dainis Jonitis (dainis_jonitis@exigengroup.lv)]
  44 *   o Handle failure to get new resources when doing ethtool
  45 *     ring paramater changes.  Previously, driver would free old,
  46 *     but fails to allocate new, causing problems.  Now, driver 
  47 *     allocates new, and if sucessful, frees old.
  48 *   o Changed collision threshold from 16 to 15 to comply with IEEE
  49 *     spec.
  50 *   o Toggle chip-select when checking ready status on SPI eeproms.
  51 *   o Put PHY into class A mode to pass IEEE tests on some designs.
  52 *     Designs with EEPROM word 0x7, bit 15 set will have their PHYs
  53 *     set to class A mode, rather than the default class AB.
  54 *   o Handle failures of register_netdev.  Stephen Hemminger
  55 *     [shemminger@osdl.org].
  56 *   o updated README & MAN pages, number of Transmit/Receive
  57 *     descriptors may be denied depending on system resources.
  58 *
  59 * 5.2.30       1/14/03
  60 *   o Set VLAN filtering to IEEE 802.1Q after reset so we don't break
  61 *     SoL connections that use VLANs.
  62 *   o Allow 1000/Full setting for AutoNeg param for Fiber connections
  63 *     Jon D Mason [jonmason@us.ibm.com].
  64 *   o Race between Tx queue and Tx clean fixed with a spin lock.
  65 *   o Added netpoll support.
  66 *   o Fixed endianess bug causing ethtool loopback diags to fail on ppc.
  67 *   o Use pdev->irq rather than netdev->irq in preparation for MSI support.
  68 *   o Report driver message on user override of InterruptThrottleRate
  69 *     module parameter.
  70 *   o Change I/O address storage from uint32_t to unsigned long.
  71 *   o Added ethtool RINGPARAM support.
  72 *
  73 * 5.2.22       10/15/03
  74 */
  75
  76char e1000_driver_name[] = "e1000";
  77char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
  78char e1000_driver_version[] = "5.2.39-k2";
  79char e1000_copyright[] = "Copyright (c) 1999-2004 Intel Corporation.";
  80
  81/* e1000_pci_tbl - PCI Device ID Table
  82 *
  83 * Wildcard entries (PCI_ANY_ID) should come last
  84 * Last entry must be all 0s
  85 *
  86 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
  87 *   Class, Class Mask, private data (not used) }
  88 */
  89static struct pci_device_id e1000_pci_tbl[] = {
  90        {0x8086, 0x1000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  91        {0x8086, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  92        {0x8086, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  93        {0x8086, 0x1008, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  94        {0x8086, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  95        {0x8086, 0x100C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  96        {0x8086, 0x100D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  97        {0x8086, 0x100E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  98        {0x8086, 0x100F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  99        {0x8086, 0x1010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 100        {0x8086, 0x1011, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 101        {0x8086, 0x1012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 102        {0x8086, 0x1013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 103        {0x8086, 0x1015, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 104        {0x8086, 0x1016, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 105        {0x8086, 0x1017, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 106        {0x8086, 0x1018, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 107        {0x8086, 0x1019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 108        {0x8086, 0x101D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 109        {0x8086, 0x101E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 110        {0x8086, 0x1026, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 111        {0x8086, 0x1027, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 112        {0x8086, 0x1028, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 113        {0x8086, 0x1075, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 114        {0x8086, 0x1076, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 115        {0x8086, 0x1077, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 116        {0x8086, 0x1078, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 117        {0x8086, 0x1079, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 118        {0x8086, 0x107A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 119        {0x8086, 0x107B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
 120        /* required last entry */
 121        {0,}
 122};
 123
 124MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
 125
 126int e1000_up(struct e1000_adapter *adapter);
 127void e1000_down(struct e1000_adapter *adapter);
 128void e1000_reset(struct e1000_adapter *adapter);
 129int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx);
 130int e1000_setup_tx_resources(struct e1000_adapter *adapter);
 131int e1000_setup_rx_resources(struct e1000_adapter *adapter);
 132void e1000_free_tx_resources(struct e1000_adapter *adapter);
 133void e1000_free_rx_resources(struct e1000_adapter *adapter);
 134void e1000_update_stats(struct e1000_adapter *adapter);
 135
 136/* Local Function Prototypes */
 137
 138static int e1000_init_module(void);
 139static void e1000_exit_module(void);
 140static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
 141static void __devexit e1000_remove(struct pci_dev *pdev);
 142static int e1000_sw_init(struct e1000_adapter *adapter);
 143static int e1000_open(struct net_device *netdev);
 144static int e1000_close(struct net_device *netdev);
 145static void e1000_configure_tx(struct e1000_adapter *adapter);
 146static void e1000_configure_rx(struct e1000_adapter *adapter);
 147static void e1000_setup_rctl(struct e1000_adapter *adapter);
 148static void e1000_clean_tx_ring(struct e1000_adapter *adapter);
 149static void e1000_clean_rx_ring(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 void e1000_82547_tx_fifo_stall(unsigned long data);
 154static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
 155static struct net_device_stats * e1000_get_stats(struct net_device *netdev);
 156static int e1000_change_mtu(struct net_device *netdev, int new_mtu);
 157static int e1000_set_mac(struct net_device *netdev, void *p);
 158static inline void e1000_irq_disable(struct e1000_adapter *adapter);
 159static inline void e1000_irq_enable(struct e1000_adapter *adapter);
 160static irqreturn_t e1000_intr(int irq, void *data, struct pt_regs *regs);
 161static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter);
 162#ifdef CONFIG_E1000_NAPI
 163static int e1000_clean(struct net_device *netdev, int *budget);
 164static boolean_t e1000_clean_rx_irq(struct e1000_adapter *adapter,
 165                                    int *work_done, int work_to_do);
 166#else
 167static boolean_t e1000_clean_rx_irq(struct e1000_adapter *adapter);
 168#endif
 169static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter);
 170static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
 171static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
 172                           int cmd);
 173static void e1000_enter_82542_rst(struct e1000_adapter *adapter);
 174static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
 175static inline void e1000_rx_checksum(struct e1000_adapter *adapter,
 176                                     struct e1000_rx_desc *rx_desc,
 177                                     struct sk_buff *skb);
 178static void e1000_tx_timeout(struct net_device *dev);
 179static void e1000_tx_timeout_task(struct net_device *dev);
 180static void e1000_smartspeed(struct e1000_adapter *adapter);
 181static inline int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,
 182                                              struct sk_buff *skb);
 183
 184static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
 185static void e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
 186static void e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
 187static void e1000_restore_vlan(struct e1000_adapter *adapter);
 188
 189static int e1000_notify_reboot(struct notifier_block *, unsigned long event, void *ptr);
 190static int e1000_suspend(struct pci_dev *pdev, uint32_t state);
 191#ifdef CONFIG_PM
 192static int e1000_resume(struct pci_dev *pdev);
 193#endif
 194
 195#ifdef CONFIG_NET_POLL_CONTROLLER
 196/* for netdump / net console */
 197static void e1000_netpoll (struct net_device *dev);
 198#endif
 199
 200struct notifier_block e1000_notifier_reboot = {
 201        .notifier_call  = e1000_notify_reboot,
 202        .next           = NULL,
 203        .priority       = 0
 204};
 205
 206/* Exported from other modules */
 207
 208extern void e1000_check_options(struct e1000_adapter *adapter);
 209extern int e1000_ethtool_ioctl(struct net_device *netdev, struct ifreq *ifr);
 210
 211static struct pci_driver e1000_driver = {
 212        .name     = e1000_driver_name,
 213        .id_table = e1000_pci_tbl,
 214        .probe    = e1000_probe,
 215        .remove   = __devexit_p(e1000_remove),
 216        /* Power Managment Hooks */
 217#ifdef CONFIG_PM
 218        .suspend  = e1000_suspend,
 219        .resume   = e1000_resume
 220#endif
 221};
 222
 223MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
 224MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
 225MODULE_LICENSE("GPL");
 226
 227/**
 228 * e1000_init_module - Driver Registration Routine
 229 *
 230 * e1000_init_module is the first routine called when the driver is
 231 * loaded. All it does is register with the PCI subsystem.
 232 **/
 233
 234static int __init
 235e1000_init_module(void)
 236{
 237        int ret;
 238        printk(KERN_INFO "%s - version %s\n",
 239               e1000_driver_string, e1000_driver_version);
 240
 241        printk(KERN_INFO "%s\n", e1000_copyright);
 242
 243        ret = pci_module_init(&e1000_driver);
 244        if(ret >= 0) {
 245                register_reboot_notifier(&e1000_notifier_reboot);
 246        }
 247        return ret;
 248}
 249
 250module_init(e1000_init_module);
 251
 252/**
 253 * e1000_exit_module - Driver Exit Cleanup Routine
 254 *
 255 * e1000_exit_module is called just before the driver is removed
 256 * from memory.
 257 **/
 258
 259static void __exit
 260e1000_exit_module(void)
 261{
 262        unregister_reboot_notifier(&e1000_notifier_reboot);
 263        pci_unregister_driver(&e1000_driver);
 264}
 265
 266module_exit(e1000_exit_module);
 267
 268
 269int
 270e1000_up(struct e1000_adapter *adapter)
 271{
 272        struct net_device *netdev = adapter->netdev;
 273        int err;
 274
 275        /* hardware has been reset, we need to reload some things */
 276
 277        e1000_set_multi(netdev);
 278
 279        e1000_restore_vlan(adapter);
 280
 281        e1000_configure_tx(adapter);
 282        e1000_setup_rctl(adapter);
 283        e1000_configure_rx(adapter);
 284        e1000_alloc_rx_buffers(adapter);
 285
 286        if((err = request_irq(adapter->pdev->irq, &e1000_intr,
 287                              SA_SHIRQ | SA_SAMPLE_RANDOM,
 288                              netdev->name, netdev)))
 289                return err;
 290
 291        mod_timer(&adapter->watchdog_timer, jiffies);
 292        e1000_irq_enable(adapter);
 293
 294        return 0;
 295}
 296
 297void
 298e1000_down(struct e1000_adapter *adapter)
 299{
 300        struct net_device *netdev = adapter->netdev;
 301
 302        e1000_irq_disable(adapter);
 303        free_irq(adapter->pdev->irq, netdev);
 304        del_timer_sync(&adapter->tx_fifo_stall_timer);
 305        del_timer_sync(&adapter->watchdog_timer);
 306        del_timer_sync(&adapter->phy_info_timer);
 307        adapter->link_speed = 0;
 308        adapter->link_duplex = 0;
 309        netif_carrier_off(netdev);
 310        netif_stop_queue(netdev);
 311
 312        e1000_reset(adapter);
 313        e1000_clean_tx_ring(adapter);
 314        e1000_clean_rx_ring(adapter);
 315}
 316
 317void
 318e1000_reset(struct e1000_adapter *adapter)
 319{
 320        uint32_t pba;
 321        /* Repartition Pba for greater than 9k mtu
 322         * To take effect CTRL.RST is required.
 323         */
 324
 325        if(adapter->hw.mac_type < e1000_82547) {
 326                if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
 327                        pba = E1000_PBA_40K;
 328                else
 329                        pba = E1000_PBA_48K;
 330        } else {
 331                if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
 332                        pba = E1000_PBA_22K;
 333                else
 334                        pba = E1000_PBA_30K;
 335                adapter->tx_fifo_head = 0;
 336                adapter->tx_head_addr = pba << E1000_TX_HEAD_ADDR_SHIFT;
 337                adapter->tx_fifo_size =
 338                        (E1000_PBA_40K - pba) << E1000_PBA_BYTES_SHIFT;
 339                atomic_set(&adapter->tx_fifo_stall, 0);
 340        }
 341        E1000_WRITE_REG(&adapter->hw, PBA, pba);
 342
 343        /* flow control settings */
 344        adapter->hw.fc_high_water =
 345                (pba << E1000_PBA_BYTES_SHIFT) - E1000_FC_HIGH_DIFF;
 346        adapter->hw.fc_low_water =
 347                (pba << E1000_PBA_BYTES_SHIFT) - E1000_FC_LOW_DIFF;
 348        adapter->hw.fc_pause_time = E1000_FC_PAUSE_TIME;
 349        adapter->hw.fc_send_xon = 1;
 350        adapter->hw.fc = adapter->hw.original_fc;
 351
 352        e1000_reset_hw(&adapter->hw);
 353        if(adapter->hw.mac_type >= e1000_82544)
 354                E1000_WRITE_REG(&adapter->hw, WUC, 0);
 355        e1000_init_hw(&adapter->hw);
 356
 357        /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */
 358        E1000_WRITE_REG(&adapter->hw, VET, ETHERNET_IEEE_VLAN_TYPE);
 359
 360        e1000_reset_adaptive(&adapter->hw);
 361        e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
 362}
 363
 364/**
 365 * e1000_probe - Device Initialization Routine
 366 * @pdev: PCI device information struct
 367 * @ent: entry in e1000_pci_tbl
 368 *
 369 * Returns 0 on success, negative on failure
 370 *
 371 * e1000_probe initializes an adapter identified by a pci_dev structure.
 372 * The OS initialization, configuring of the adapter private structure,
 373 * and a hardware reset occur.
 374 **/
 375
 376static int __devinit
 377e1000_probe(struct pci_dev *pdev,
 378            const struct pci_device_id *ent)
 379{
 380        struct net_device *netdev;
 381        struct e1000_adapter *adapter;
 382        static int cards_found = 0;
 383        unsigned long mmio_start;
 384        int mmio_len;
 385        int pci_using_dac;
 386        int i;
 387        int err;
 388        uint16_t eeprom_data;
 389
 390        if((err = pci_enable_device(pdev)))
 391                return err;
 392
 393        if(!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK))) {
 394                pci_using_dac = 1;
 395        } else {
 396                if((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK))) {
 397                        E1000_ERR("No usable DMA configuration, aborting\n");
 398                        return err;
 399                }
 400                pci_using_dac = 0;
 401        }
 402
 403        if((err = pci_request_regions(pdev, e1000_driver_name)))
 404                return err;
 405
 406        pci_set_master(pdev);
 407
 408        netdev = alloc_etherdev(sizeof(struct e1000_adapter));
 409        if(!netdev) {
 410                err = -ENOMEM;
 411                goto err_alloc_etherdev;
 412        }
 413
 414        SET_MODULE_OWNER(netdev);
 415        SET_NETDEV_DEV(netdev, &pdev->dev);
 416
 417        pci_set_drvdata(pdev, netdev);
 418        adapter = netdev->priv;
 419        adapter->netdev = netdev;
 420        adapter->pdev = pdev;
 421        adapter->hw.back = adapter;
 422
 423        mmio_start = pci_resource_start(pdev, BAR_0);
 424        mmio_len = pci_resource_len(pdev, BAR_0);
 425
 426        adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
 427        if(!adapter->hw.hw_addr) {
 428                err = -EIO;
 429                goto err_ioremap;
 430        }
 431
 432        for(i = BAR_1; i <= BAR_5; i++) {
 433                if(pci_resource_len(pdev, i) == 0)
 434                        continue;
 435                if(pci_resource_flags(pdev, i) & IORESOURCE_IO) {
 436                        adapter->hw.io_base = pci_resource_start(pdev, i);
 437                        break;
 438                }
 439        }
 440
 441        netdev->open = &e1000_open;
 442        netdev->stop = &e1000_close;
 443        netdev->hard_start_xmit = &e1000_xmit_frame;
 444        netdev->get_stats = &e1000_get_stats;
 445        netdev->set_multicast_list = &e1000_set_multi;
 446        netdev->set_mac_address = &e1000_set_mac;
 447        netdev->change_mtu = &e1000_change_mtu;
 448        netdev->do_ioctl = &e1000_ioctl;
 449        netdev->tx_timeout = &e1000_tx_timeout;
 450        netdev->watchdog_timeo = 5 * HZ;
 451#ifdef CONFIG_E1000_NAPI
 452        netdev->poll = &e1000_clean;
 453        netdev->weight = 64;
 454#endif
 455        netdev->vlan_rx_register = e1000_vlan_rx_register;
 456        netdev->vlan_rx_add_vid = e1000_vlan_rx_add_vid;
 457        netdev->vlan_rx_kill_vid = e1000_vlan_rx_kill_vid;
 458#ifdef CONFIG_NET_POLL_CONTROLLER
 459        netdev->poll_controller = e1000_netpoll;
 460#endif
 461
 462        netdev->mem_start = mmio_start;
 463        netdev->mem_end = mmio_start + mmio_len;
 464        netdev->base_addr = adapter->hw.io_base;
 465
 466        adapter->bd_number = cards_found;
 467
 468        /* setup the private structure */
 469
 470        if((err = e1000_sw_init(adapter)))
 471                goto err_sw_init;
 472
 473        if(adapter->hw.mac_type >= e1000_82543) {
 474                netdev->features = NETIF_F_SG |
 475                                   NETIF_F_HW_CSUM |
 476                                   NETIF_F_HW_VLAN_TX |
 477                                   NETIF_F_HW_VLAN_RX |
 478                                   NETIF_F_HW_VLAN_FILTER;
 479        } else {
 480                netdev->features = NETIF_F_SG;
 481        }
 482
 483#ifdef NETIF_F_TSO
 484#ifdef BROKEN_ON_NON_IA_ARCHS
 485        /* Disbaled for now until root-cause is found for
 486         * hangs reported against non-IA archs.  TSO can be
 487         * enabled using ethtool -K eth<x> tso on */
 488        if((adapter->hw.mac_type >= e1000_82544) &&
 489           (adapter->hw.mac_type != e1000_82547))
 490                netdev->features |= NETIF_F_TSO;
 491#endif
 492#endif
 493
 494        if(pci_using_dac)
 495                netdev->features |= NETIF_F_HIGHDMA;
 496
 497        /* before reading the EEPROM, reset the controller to 
 498         * put the device in a known good starting state */
 499        
 500        e1000_reset_hw(&adapter->hw);
 501
 502        /* make sure the EEPROM is good */
 503
 504        if(e1000_validate_eeprom_checksum(&adapter->hw) < 0) {
 505                printk(KERN_ERR "The EEPROM Checksum Is Not Valid\n");
 506                err = -EIO;
 507                goto err_eeprom;
 508        }
 509
 510        /* copy the MAC address out of the EEPROM */
 511
 512        e1000_read_mac_addr(&adapter->hw);
 513        memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
 514
 515        if(!is_valid_ether_addr(netdev->dev_addr)) {
 516                err = -EIO;
 517                goto err_eeprom;
 518        }
 519
 520        e1000_read_part_num(&adapter->hw, &(adapter->part_num));
 521
 522        e1000_get_bus_info(&adapter->hw);
 523
 524        init_timer(&adapter->tx_fifo_stall_timer);
 525        adapter->tx_fifo_stall_timer.function = &e1000_82547_tx_fifo_stall;
 526        adapter->tx_fifo_stall_timer.data = (unsigned long) adapter;
 527
 528        init_timer(&adapter->watchdog_timer);
 529        adapter->watchdog_timer.function = &e1000_watchdog;
 530        adapter->watchdog_timer.data = (unsigned long) adapter;
 531
 532        init_timer(&adapter->phy_info_timer);
 533        adapter->phy_info_timer.function = &e1000_update_phy_info;
 534        adapter->phy_info_timer.data = (unsigned long) adapter;
 535
 536        INIT_WORK(&adapter->tx_timeout_task,
 537                (void (*)(void *))e1000_tx_timeout_task, netdev);
 538
 539        if((err = register_netdev(netdev)))
 540                goto err_register;
 541
 542        /* we're going to reset, so assume we have no link for now */
 543
 544        netif_carrier_off(netdev);
 545        netif_stop_queue(netdev);
 546
 547        printk(KERN_INFO "%s: Intel(R) PRO/1000 Network Connection\n",
 548               netdev->name);
 549        e1000_check_options(adapter);
 550
 551        /* Initial Wake on LAN setting
 552         * If APM wake is enabled in the EEPROM,
 553         * enable the ACPI Magic Packet filter
 554         */
 555
 556        switch(adapter->hw.mac_type) {
 557        case e1000_82542_rev2_0:
 558        case e1000_82542_rev2_1:
 559        case e1000_82543:
 560                break;
 561        case e1000_82546:
 562        case e1000_82546_rev_3:
 563                if((E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_FUNC_1)
 564                   && (adapter->hw.media_type == e1000_media_type_copper)) {
 565                        e1000_read_eeprom(&adapter->hw,
 566                                EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
 567                        break;
 568                }
 569                /* Fall Through */
 570        default:
 571                e1000_read_eeprom(&adapter->hw,
 572                        EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
 573                break;
 574        }
 575        if(eeprom_data & E1000_EEPROM_APME)
 576                adapter->wol |= E1000_WUFC_MAG;
 577
 578        /* reset the hardware with the new settings */
 579
 580        e1000_reset(adapter);
 581
 582        cards_found++;
 583        return 0;
 584
 585err_register:
 586err_sw_init:
 587err_eeprom:
 588        iounmap(adapter->hw.hw_addr);
 589err_ioremap:
 590        free_netdev(netdev);
 591err_alloc_etherdev:
 592        pci_release_regions(pdev);
 593        return err;
 594}
 595
 596/**
 597 * e1000_remove - Device Removal Routine
 598 * @pdev: PCI device information struct
 599 *
 600 * e1000_remove is called by the PCI subsystem to alert the driver
 601 * that it should release a PCI device.  The could be caused by a
 602 * Hot-Plug event, or because the driver is going to be removed from
 603 * memory.
 604 **/
 605
 606static void __devexit
 607e1000_remove(struct pci_dev *pdev)
 608{
 609        struct net_device *netdev = pci_get_drvdata(pdev);
 610        struct e1000_adapter *adapter = netdev->priv;
 611        uint32_t manc;
 612
 613        if(adapter->hw.mac_type >= e1000_82540 &&
 614           adapter->hw.media_type == e1000_media_type_copper) {
 615                manc = E1000_READ_REG(&adapter->hw, MANC);
 616                if(manc & E1000_MANC_SMBUS_EN) {
 617                        manc |= E1000_MANC_ARP_EN;
 618                        E1000_WRITE_REG(&adapter->hw, MANC, manc);
 619                }
 620        }
 621
 622        unregister_netdev(netdev);
 623
 624        e1000_phy_hw_reset(&adapter->hw);
 625
 626        iounmap(adapter->hw.hw_addr);
 627        pci_release_regions(pdev);
 628
 629        free_netdev(netdev);
 630}
 631
 632/**
 633 * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
 634 * @adapter: board private structure to initialize
 635 *
 636 * e1000_sw_init initializes the Adapter private data structure.
 637 * Fields are initialized based on PCI device information and
 638 * OS network device settings (MTU size).
 639 **/
 640
 641static int __devinit
 642e1000_sw_init(struct e1000_adapter *adapter)
 643{
 644        struct e1000_hw *hw = &adapter->hw;
 645        struct net_device *netdev = adapter->netdev;
 646        struct pci_dev *pdev = adapter->pdev;
 647
 648        /* PCI config space info */
 649
 650        hw->vendor_id = pdev->vendor;
 651        hw->device_id = pdev->device;
 652        hw->subsystem_vendor_id = pdev->subsystem_vendor;
 653        hw->subsystem_id = pdev->subsystem_device;
 654
 655        pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
 656
 657        pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
 658
 659        adapter->rx_buffer_len = E1000_RXBUFFER_2048;
 660        hw->max_frame_size = netdev->mtu +
 661                             ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
 662        hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
 663
 664        /* identify the MAC */
 665
 666        if (e1000_set_mac_type(hw)) {
 667                E1000_ERR("Unknown MAC Type\n");
 668                return -EIO;
 669        }
 670
 671        /* initialize eeprom parameters */
 672
 673        e1000_init_eeprom_params(hw);
 674
 675        if((hw->mac_type == e1000_82541) ||
 676           (hw->mac_type == e1000_82547) ||
 677           (hw->mac_type == e1000_82541_rev_2) ||
 678           (hw->mac_type == e1000_82547_rev_2))
 679                hw->phy_init_script = 1;
 680
 681        e1000_set_media_type(hw);
 682
 683        if(hw->mac_type < e1000_82543)
 684                hw->report_tx_early = 0;
 685        else
 686                hw->report_tx_early = 1;
 687
 688        hw->wait_autoneg_complete = FALSE;
 689        hw->tbi_compatibility_en = TRUE;
 690        hw->adaptive_ifs = TRUE;
 691
 692        /* Copper options */
 693
 694        if(hw->media_type == e1000_media_type_copper) {
 695                hw->mdix = AUTO_ALL_MODES;
 696                hw->disable_polarity_correction = FALSE;
 697                hw->master_slave = E1000_MASTER_SLAVE;
 698        }
 699
 700        atomic_set(&adapter->irq_sem, 1);
 701        spin_lock_init(&adapter->stats_lock);
 702        spin_lock_init(&adapter->tx_lock);
 703
 704        return 0;
 705}
 706
 707/**
 708 * e1000_open - Called when a network interface is made active
 709 * @netdev: network interface device structure
 710 *
 711 * Returns 0 on success, negative value on failure
 712 *
 713 * The open entry point is called when a network interface is made
 714 * active by the system (IFF_UP).  At this point all resources needed
 715 * for transmit and receive operations are allocated, the interrupt
 716 * handler is registered with the OS, the watchdog timer is started,
 717 * and the stack is notified that the interface is ready.
 718 **/
 719
 720static int
 721e1000_open(struct net_device *netdev)
 722{
 723        struct e1000_adapter *adapter = netdev->priv;
 724        int err;
 725
 726        /* allocate transmit descriptors */
 727
 728        if((err = e1000_setup_tx_resources(adapter)))
 729                goto err_setup_tx;
 730
 731        /* allocate receive descriptors */
 732
 733        if((err = e1000_setup_rx_resources(adapter)))
 734                goto err_setup_rx;
 735
 736        if((err = e1000_up(adapter)))
 737                goto err_up;
 738
 739        return 0;
 740
 741err_up:
 742        e1000_free_rx_resources(adapter);
 743err_setup_rx:
 744        e1000_free_tx_resources(adapter);
 745err_setup_tx:
 746        e1000_reset(adapter);
 747
 748        return err;
 749}
 750
 751/**
 752 * e1000_close - Disables a network interface
 753 * @netdev: network interface device structure
 754 *
 755 * Returns 0, this is not allowed to fail
 756 *
 757 * The close entry point is called when an interface is de-activated
 758 * by the OS.  The hardware is still under the drivers control, but
 759 * needs to be disabled.  A global MAC reset is issued to stop the
 760 * hardware, and all transmit and receive resources are freed.
 761 **/
 762
 763static int
 764e1000_close(struct net_device *netdev)
 765{
 766        struct e1000_adapter *adapter = netdev->priv;
 767
 768        e1000_down(adapter);
 769
 770        e1000_free_tx_resources(adapter);
 771        e1000_free_rx_resources(adapter);
 772
 773        return 0;
 774}
 775
 776/**
 777 * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
 778 * @adapter: board private structure
 779 *
 780 * Return 0 on success, negative on failure
 781 **/
 782
 783int
 784e1000_setup_tx_resources(struct e1000_adapter *adapter)
 785{
 786        struct e1000_desc_ring *txdr = &adapter->tx_ring;
 787        struct pci_dev *pdev = adapter->pdev;
 788        int size;
 789
 790        size = sizeof(struct e1000_buffer) * txdr->count;
 791        txdr->buffer_info = kmalloc(size, GFP_KERNEL);
 792        if(!txdr->buffer_info) {
 793                return -ENOMEM;
 794        }
 795        memset(txdr->buffer_info, 0, size);
 796
 797        /* round up to nearest 4K */
 798
 799        txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
 800        E1000_ROUNDUP(txdr->size, 4096);
 801
 802        txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
 803        if(!txdr->desc) {
 804                kfree(txdr->buffer_info);
 805                return -ENOMEM;
 806        }
 807        memset(txdr->desc, 0, txdr->size);
 808
 809        txdr->next_to_use = 0;
 810        txdr->next_to_clean = 0;
 811
 812        return 0;
 813}
 814
 815/**
 816 * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
 817 * @adapter: board private structure
 818 *
 819 * Configure the Tx unit of the MAC after a reset.
 820 **/
 821
 822static void
 823e1000_configure_tx(struct e1000_adapter *adapter)
 824{
 825        uint64_t tdba = adapter->tx_ring.dma;
 826        uint32_t tdlen = adapter->tx_ring.count * sizeof(struct e1000_tx_desc);
 827        uint32_t tctl, tipg;
 828
 829        E1000_WRITE_REG(&adapter->hw, TDBAL, (tdba & 0x00000000ffffffffULL));
 830        E1000_WRITE_REG(&adapter->hw, TDBAH, (tdba >> 32));
 831
 832        E1000_WRITE_REG(&adapter->hw, TDLEN, tdlen);
 833
 834        /* Setup the HW Tx Head and Tail descriptor pointers */
 835
 836        E1000_WRITE_REG(&adapter->hw, TDH, 0);
 837        E1000_WRITE_REG(&adapter->hw, TDT, 0);
 838
 839        /* Set the default values for the Tx Inter Packet Gap timer */
 840
 841        switch (adapter->hw.mac_type) {
 842        case e1000_82542_rev2_0:
 843        case e1000_82542_rev2_1:
 844                tipg = DEFAULT_82542_TIPG_IPGT;
 845                tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
 846                tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 847                break;
 848        default:
 849                if(adapter->hw.media_type == e1000_media_type_fiber ||
 850                   adapter->hw.media_type == e1000_media_type_internal_serdes)
 851                        tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
 852                else
 853                        tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
 854                tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
 855                tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
 856        }
 857        E1000_WRITE_REG(&adapter->hw, TIPG, tipg);
 858
 859        /* Set the Tx Interrupt Delay register */
 860
 861        E1000_WRITE_REG(&adapter->hw, TIDV, adapter->tx_int_delay);
 862        if(adapter->hw.mac_type >= e1000_82540)
 863                E1000_WRITE_REG(&adapter->hw, TADV, adapter->tx_abs_int_delay);
 864
 865        /* Program the Transmit Control Register */
 866
 867        tctl = E1000_READ_REG(&adapter->hw, TCTL);
 868
 869        tctl &= ~E1000_TCTL_CT;
 870        tctl |= E1000_TCTL_EN | E1000_TCTL_PSP |
 871                (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
 872
 873        E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
 874
 875        e1000_config_collision_dist(&adapter->hw);
 876
 877        /* Setup Transmit Descriptor Settings for eop descriptor */
 878        adapter->txd_cmd = E1000_TXD_CMD_IDE | E1000_TXD_CMD_EOP |
 879                E1000_TXD_CMD_IFCS;
 880
 881        if(adapter->hw.report_tx_early == 1)
 882                adapter->txd_cmd |= E1000_TXD_CMD_RS;
 883        else
 884                adapter->txd_cmd |= E1000_TXD_CMD_RPS;
 885
 886        /* Cache if we're 82544 running in PCI-X because we'll
 887         * need this to apply a workaround later in the send path. */
 888        if(adapter->hw.mac_type == e1000_82544 &&
 889           adapter->hw.bus_type == e1000_bus_type_pcix)
 890                adapter->pcix_82544 = 1;
 891}
 892
 893/**
 894 * e1000_setup_rx_resources - allocate Rx resources (Descriptors)
 895 * @adapter: board private structure
 896 *
 897 * Returns 0 on success, negative on failure
 898 **/
 899
 900int
 901e1000_setup_rx_resources(struct e1000_adapter *adapter)
 902{
 903        struct e1000_desc_ring *rxdr = &adapter->rx_ring;
 904        struct pci_dev *pdev = adapter->pdev;
 905        int size;
 906
 907        size = sizeof(struct e1000_buffer) * rxdr->count;
 908        rxdr->buffer_info = kmalloc(size, GFP_KERNEL);
 909        if(!rxdr->buffer_info) {
 910                return -ENOMEM;
 911        }
 912        memset(rxdr->buffer_info, 0, size);
 913
 914        /* Round up to nearest 4K */
 915
 916        rxdr->size = rxdr->count * sizeof(struct e1000_rx_desc);
 917        E1000_ROUNDUP(rxdr->size, 4096);
 918
 919        rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
 920
 921        if(!rxdr->desc) {
 922                kfree(rxdr->buffer_info);
 923                return -ENOMEM;
 924        }
 925        memset(rxdr->desc, 0, rxdr->size);
 926
 927        rxdr->next_to_clean = 0;
 928        rxdr->next_to_use = 0;
 929
 930        return 0;
 931}
 932
 933/**
 934 * e1000_setup_rctl - configure the receive control register
 935 * @adapter: Board private structure
 936 **/
 937
 938static void
 939e1000_setup_rctl(struct e1000_adapter *adapter)
 940{
 941        uint32_t rctl;
 942
 943        rctl = E1000_READ_REG(&adapter->hw, RCTL);
 944
 945        rctl &= ~(3 << E1000_RCTL_MO_SHIFT);
 946
 947        rctl |= E1000_RCTL_EN | E1000_RCTL_BAM |
 948                E1000_RCTL_LBM_NO | E1000_RCTL_RDMTS_HALF |
 949                (adapter->hw.mc_filter_type << E1000_RCTL_MO_SHIFT);
 950
 951        if(adapter->hw.tbi_compatibility_on == 1)
 952                rctl |= E1000_RCTL_SBP;
 953        else
 954                rctl &= ~E1000_RCTL_SBP;
 955
 956        rctl &= ~(E1000_RCTL_SZ_4096);
 957        switch (adapter->rx_buffer_len) {
 958        case E1000_RXBUFFER_2048:
 959        default:
 960                rctl |= E1000_RCTL_SZ_2048;
 961                rctl &= ~(E1000_RCTL_BSEX | E1000_RCTL_LPE);
 962                break;
 963        case E1000_RXBUFFER_4096:
 964                rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
 965                break;
 966        case E1000_RXBUFFER_8192:
 967                rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
 968                break;
 969        case E1000_RXBUFFER_16384:
 970                rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
 971                break;
 972        }
 973
 974        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
 975}
 976
 977/**
 978 * e1000_configure_rx - Configure 8254x Receive Unit after Reset
 979 * @adapter: board private structure
 980 *
 981 * Configure the Rx unit of the MAC after a reset.
 982 **/
 983
 984static void
 985e1000_configure_rx(struct e1000_adapter *adapter)
 986{
 987        uint64_t rdba = adapter->rx_ring.dma;
 988        uint32_t rdlen = adapter->rx_ring.count * sizeof(struct e1000_rx_desc);
 989        uint32_t rctl;
 990        uint32_t rxcsum;
 991
 992        /* make sure receives are disabled while setting up the descriptors */
 993
 994        rctl = E1000_READ_REG(&adapter->hw, RCTL);
 995        E1000_WRITE_REG(&adapter->hw, RCTL, rctl & ~E1000_RCTL_EN);
 996
 997        /* set the Receive Delay Timer Register */
 998
 999        E1000_WRITE_REG(&adapter->hw, RDTR, adapter->rx_int_delay);
1000
1001        if(adapter->hw.mac_type >= e1000_82540) {
1002                E1000_WRITE_REG(&adapter->hw, RADV, adapter->rx_abs_int_delay);
1003                if(adapter->itr > 1)
1004                        E1000_WRITE_REG(&adapter->hw, ITR,
1005                                1000000000 / (adapter->itr * 256));
1006        }
1007
1008        /* Setup the Base and Length of the Rx Descriptor Ring */
1009
1010        E1000_WRITE_REG(&adapter->hw, RDBAL, (rdba & 0x00000000ffffffffULL));
1011        E1000_WRITE_REG(&adapter->hw, RDBAH, (rdba >> 32));
1012
1013        E1000_WRITE_REG(&adapter->hw, RDLEN, rdlen);
1014
1015        /* Setup the HW Rx Head and Tail Descriptor Pointers */
1016        E1000_WRITE_REG(&adapter->hw, RDH, 0);
1017        E1000_WRITE_REG(&adapter->hw, RDT, 0);
1018
1019        /* Enable 82543 Receive Checksum Offload for TCP and UDP */
1020        if((adapter->hw.mac_type >= e1000_82543) &&
1021           (adapter->rx_csum == TRUE)) {
1022                rxcsum = E1000_READ_REG(&adapter->hw, RXCSUM);
1023                rxcsum |= E1000_RXCSUM_TUOFL;
1024                E1000_WRITE_REG(&adapter->hw, RXCSUM, rxcsum);
1025        }
1026
1027        /* Enable Receives */
1028
1029        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1030}
1031
1032/**
1033 * e1000_free_tx_resources - Free Tx Resources
1034 * @adapter: board private structure
1035 *
1036 * Free all transmit software resources
1037 **/
1038
1039void
1040e1000_free_tx_resources(struct e1000_adapter *adapter)
1041{
1042        struct pci_dev *pdev = adapter->pdev;
1043
1044        e1000_clean_tx_ring(adapter);
1045
1046        kfree(adapter->tx_ring.buffer_info);
1047        adapter->tx_ring.buffer_info = NULL;
1048
1049        pci_free_consistent(pdev, adapter->tx_ring.size,
1050                            adapter->tx_ring.desc, adapter->tx_ring.dma);
1051
1052        adapter->tx_ring.desc = NULL;
1053}
1054
1055/**
1056 * e1000_clean_tx_ring - Free Tx Buffers
1057 * @adapter: board private structure
1058 **/
1059
1060static void
1061e1000_clean_tx_ring(struct e1000_adapter *adapter)
1062{
1063        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1064        struct e1000_buffer *buffer_info;
1065        struct pci_dev *pdev = adapter->pdev;
1066        unsigned long size;
1067        unsigned int i;
1068
1069        /* Free all the Tx ring sk_buffs */
1070
1071        for(i = 0; i < tx_ring->count; i++) {
1072                buffer_info = &tx_ring->buffer_info[i];
1073                if(buffer_info->skb) {
1074
1075                        pci_unmap_page(pdev,
1076                                       buffer_info->dma,
1077                                       buffer_info->length,
1078                                       PCI_DMA_TODEVICE);
1079
1080                        dev_kfree_skb(buffer_info->skb);
1081
1082                        buffer_info->skb = NULL;
1083                }
1084        }
1085
1086        size = sizeof(struct e1000_buffer) * tx_ring->count;
1087        memset(tx_ring->buffer_info, 0, size);
1088
1089        /* Zero out the descriptor ring */
1090
1091        memset(tx_ring->desc, 0, tx_ring->size);
1092
1093        tx_ring->next_to_use = 0;
1094        tx_ring->next_to_clean = 0;
1095
1096        E1000_WRITE_REG(&adapter->hw, TDH, 0);
1097        E1000_WRITE_REG(&adapter->hw, TDT, 0);
1098}
1099
1100/**
1101 * e1000_free_rx_resources - Free Rx Resources
1102 * @adapter: board private structure
1103 *
1104 * Free all receive software resources
1105 **/
1106
1107void
1108e1000_free_rx_resources(struct e1000_adapter *adapter)
1109{
1110        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
1111        struct pci_dev *pdev = adapter->pdev;
1112
1113        e1000_clean_rx_ring(adapter);
1114
1115        kfree(rx_ring->buffer_info);
1116        rx_ring->buffer_info = NULL;
1117
1118        pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
1119
1120        rx_ring->desc = NULL;
1121}
1122
1123/**
1124 * e1000_clean_rx_ring - Free Rx Buffers
1125 * @adapter: board private structure
1126 **/
1127
1128static void
1129e1000_clean_rx_ring(struct e1000_adapter *adapter)
1130{
1131        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
1132        struct e1000_buffer *buffer_info;
1133        struct pci_dev *pdev = adapter->pdev;
1134        unsigned long size;
1135        unsigned int i;
1136
1137        /* Free all the Rx ring sk_buffs */
1138
1139        for(i = 0; i < rx_ring->count; i++) {
1140                buffer_info = &rx_ring->buffer_info[i];
1141                if(buffer_info->skb) {
1142
1143                        pci_unmap_single(pdev,
1144                                         buffer_info->dma,
1145                                         buffer_info->length,
1146                                         PCI_DMA_FROMDEVICE);
1147
1148                        dev_kfree_skb(buffer_info->skb);
1149
1150                        buffer_info->skb = NULL;
1151                }
1152        }
1153
1154        size = sizeof(struct e1000_buffer) * rx_ring->count;
1155        memset(rx_ring->buffer_info, 0, size);
1156
1157        /* Zero out the descriptor ring */
1158
1159        memset(rx_ring->desc, 0, rx_ring->size);
1160
1161        rx_ring->next_to_clean = 0;
1162        rx_ring->next_to_use = 0;
1163
1164        E1000_WRITE_REG(&adapter->hw, RDH, 0);
1165        E1000_WRITE_REG(&adapter->hw, RDT, 0);
1166}
1167
1168/* The 82542 2.0 (revision 2) needs to have the receive unit in reset
1169 * and memory write and invalidate disabled for certain operations
1170 */
1171static void
1172e1000_enter_82542_rst(struct e1000_adapter *adapter)
1173{
1174        struct net_device *netdev = adapter->netdev;
1175        uint32_t rctl;
1176
1177        e1000_pci_clear_mwi(&adapter->hw);
1178
1179        rctl = E1000_READ_REG(&adapter->hw, RCTL);
1180        rctl |= E1000_RCTL_RST;
1181        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1182        E1000_WRITE_FLUSH(&adapter->hw);
1183        mdelay(5);
1184
1185        if(netif_running(netdev))
1186                e1000_clean_rx_ring(adapter);
1187}
1188
1189static void
1190e1000_leave_82542_rst(struct e1000_adapter *adapter)
1191{
1192        struct net_device *netdev = adapter->netdev;
1193        uint32_t rctl;
1194
1195        rctl = E1000_READ_REG(&adapter->hw, RCTL);
1196        rctl &= ~E1000_RCTL_RST;
1197        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
1198        E1000_WRITE_FLUSH(&adapter->hw);
1199        mdelay(5);
1200
1201        if(adapter->hw.pci_cmd_word & PCI_COMMAND_INVALIDATE)
1202                e1000_pci_set_mwi(&adapter->hw);
1203
1204        if(netif_running(netdev)) {
1205                e1000_configure_rx(adapter);
1206                e1000_alloc_rx_buffers(adapter);
1207        }
1208}
1209
1210/**
1211 * e1000_set_mac - Change the Ethernet Address of the NIC
1212 * @netdev: network interface device structure
1213 * @p: pointer to an address structure
1214 *
1215 * Returns 0 on success, negative on failure
1216 **/
1217
1218static int
1219e1000_set_mac(struct net_device *netdev, void *p)
1220{
1221        struct e1000_adapter *adapter = netdev->priv;
1222        struct sockaddr *addr = p;
1223
1224        if(!is_valid_ether_addr(addr->sa_data))
1225                return -EADDRNOTAVAIL;
1226
1227        /* 82542 2.0 needs to be in reset to write receive address registers */
1228
1229        if(adapter->hw.mac_type == e1000_82542_rev2_0)
1230                e1000_enter_82542_rst(adapter);
1231
1232        memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1233        memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
1234
1235        e1000_rar_set(&adapter->hw, adapter->hw.mac_addr, 0);
1236
1237        if(adapter->hw.mac_type == e1000_82542_rev2_0)
1238                e1000_leave_82542_rst(adapter);
1239
1240        return 0;
1241}
1242
1243/**
1244 * e1000_set_multi - Multicast and Promiscuous mode set
1245 * @netdev: network interface device structure
1246 *
1247 * The set_multi entry point is called whenever the multicast address
1248 * list or the network interface flags are updated.  This routine is
1249 * responsible for configuring the hardware for proper multicast,
1250 * promiscuous mode, and all-multi behavior.
1251 **/
1252
1253static void
1254e1000_set_multi(struct net_device *netdev)
1255{
1256        struct e1000_adapter *adapter = netdev->priv;
1257        struct e1000_hw *hw = &adapter->hw;
1258        struct dev_mc_list *mc_ptr;
1259        uint32_t rctl;
1260        uint32_t hash_value;
1261        int i;
1262
1263        /* Check for Promiscuous and All Multicast modes */
1264
1265        rctl = E1000_READ_REG(hw, RCTL);
1266
1267        if(netdev->flags & IFF_PROMISC) {
1268                rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
1269        } else if(netdev->flags & IFF_ALLMULTI) {
1270                rctl |= E1000_RCTL_MPE;
1271                rctl &= ~E1000_RCTL_UPE;
1272        } else {
1273                rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
1274        }
1275
1276        E1000_WRITE_REG(hw, RCTL, rctl);
1277
1278        /* 82542 2.0 needs to be in reset to write receive address registers */
1279
1280        if(hw->mac_type == e1000_82542_rev2_0)
1281                e1000_enter_82542_rst(adapter);
1282
1283        /* load the first 14 multicast address into the exact filters 1-14
1284         * RAR 0 is used for the station MAC adddress
1285         * if there are not 14 addresses, go ahead and clear the filters
1286         */
1287        mc_ptr = netdev->mc_list;
1288
1289        for(i = 1; i < E1000_RAR_ENTRIES; i++) {
1290                if(mc_ptr) {
1291                        e1000_rar_set(hw, mc_ptr->dmi_addr, i);
1292                        mc_ptr = mc_ptr->next;
1293                } else {
1294                        E1000_WRITE_REG_ARRAY(hw, RA, i << 1, 0);
1295                        E1000_WRITE_REG_ARRAY(hw, RA, (i << 1) + 1, 0);
1296                }
1297        }
1298
1299        /* clear the old settings from the multicast hash table */
1300
1301        for(i = 0; i < E1000_NUM_MTA_REGISTERS; i++)
1302                E1000_WRITE_REG_ARRAY(hw, MTA, i, 0);
1303
1304        /* load any remaining addresses into the hash table */
1305
1306        for(; mc_ptr; mc_ptr = mc_ptr->next) {
1307                hash_value = e1000_hash_mc_addr(hw, mc_ptr->dmi_addr);
1308                e1000_mta_set(hw, hash_value);
1309        }
1310
1311        if(hw->mac_type == e1000_82542_rev2_0)
1312                e1000_leave_82542_rst(adapter);
1313}
1314
1315/* need to wait a few seconds after link up to get diagnostic information from the phy */
1316
1317static void
1318e1000_update_phy_info(unsigned long data)
1319{
1320        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1321        e1000_phy_get_info(&adapter->hw, &adapter->phy_info);
1322}
1323
1324/**
1325 * e1000_82547_tx_fifo_stall - Timer Call-back
1326 * @data: pointer to adapter cast into an unsigned long
1327 **/
1328
1329static void
1330e1000_82547_tx_fifo_stall(unsigned long data)
1331{
1332        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1333        struct net_device *netdev = adapter->netdev;
1334        uint32_t tctl;
1335
1336        if(atomic_read(&adapter->tx_fifo_stall)) {
1337                if((E1000_READ_REG(&adapter->hw, TDT) ==
1338                    E1000_READ_REG(&adapter->hw, TDH)) &&
1339                   (E1000_READ_REG(&adapter->hw, TDFT) ==
1340                    E1000_READ_REG(&adapter->hw, TDFH)) &&
1341                   (E1000_READ_REG(&adapter->hw, TDFTS) ==
1342                    E1000_READ_REG(&adapter->hw, TDFHS))) {
1343                        tctl = E1000_READ_REG(&adapter->hw, TCTL);
1344                        E1000_WRITE_REG(&adapter->hw, TCTL,
1345                                        tctl & ~E1000_TCTL_EN);
1346                        E1000_WRITE_REG(&adapter->hw, TDFT,
1347                                        adapter->tx_head_addr);
1348                        E1000_WRITE_REG(&adapter->hw, TDFH,
1349                                        adapter->tx_head_addr);
1350                        E1000_WRITE_REG(&adapter->hw, TDFTS,
1351                                        adapter->tx_head_addr);
1352                        E1000_WRITE_REG(&adapter->hw, TDFHS,
1353                                        adapter->tx_head_addr);
1354                        E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
1355                        E1000_WRITE_FLUSH(&adapter->hw);
1356
1357                        adapter->tx_fifo_head = 0;
1358                        atomic_set(&adapter->tx_fifo_stall, 0);
1359                        netif_wake_queue(netdev);
1360                } else {
1361                        mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
1362                }
1363        }
1364}
1365
1366/**
1367 * e1000_watchdog - Timer Call-back
1368 * @data: pointer to netdev cast into an unsigned long
1369 **/
1370
1371static void
1372e1000_watchdog(unsigned long data)
1373{
1374        struct e1000_adapter *adapter = (struct e1000_adapter *) data;
1375        struct net_device *netdev = adapter->netdev;
1376        struct e1000_desc_ring *txdr = &adapter->tx_ring;
1377        unsigned int i;
1378        uint32_t link;
1379
1380        e1000_check_for_link(&adapter->hw);
1381
1382        if((adapter->hw.media_type == e1000_media_type_internal_serdes) &&
1383           !(E1000_READ_REG(&adapter->hw, TXCW) & E1000_TXCW_ANE))
1384                link = !adapter->hw.serdes_link_down;
1385        else
1386                link = E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU;
1387
1388        if(link) {
1389                if(!netif_carrier_ok(netdev)) {
1390                        e1000_get_speed_and_duplex(&adapter->hw,
1391                                                   &adapter->link_speed,
1392                                                   &adapter->link_duplex);
1393
1394                        printk(KERN_INFO
1395                               "e1000: %s NIC Link is Up %d Mbps %s\n",
1396                               netdev->name, adapter->link_speed,
1397                               adapter->link_duplex == FULL_DUPLEX ?
1398                               "Full Duplex" : "Half Duplex");
1399
1400                        netif_carrier_on(netdev);
1401                        netif_wake_queue(netdev);
1402                        mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
1403                        adapter->smartspeed = 0;
1404                }
1405        } else {
1406                if(netif_carrier_ok(netdev)) {
1407                        adapter->link_speed = 0;
1408                        adapter->link_duplex = 0;
1409                        printk(KERN_INFO
1410                               "e1000: %s NIC Link is Down\n",
1411                               netdev->name);
1412                        netif_carrier_off(netdev);
1413                        netif_stop_queue(netdev);
1414                        mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
1415                }
1416
1417                e1000_smartspeed(adapter);
1418        }
1419
1420        e1000_update_stats(adapter);
1421
1422        adapter->hw.tx_packet_delta = adapter->stats.tpt - adapter->tpt_old;
1423        adapter->tpt_old = adapter->stats.tpt;
1424        adapter->hw.collision_delta = adapter->stats.colc - adapter->colc_old;
1425        adapter->colc_old = adapter->stats.colc;
1426        
1427        adapter->gorcl = adapter->stats.gorcl - adapter->gorcl_old;
1428        adapter->gorcl_old = adapter->stats.gorcl;
1429        adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old;
1430        adapter->gotcl_old = adapter->stats.gotcl;
1431
1432        e1000_update_adaptive(&adapter->hw);
1433
1434        if(!netif_carrier_ok(netdev)) {
1435                if(E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
1436                        /* We've lost link, so the controller stops DMA,
1437                         * but we've got queued Tx work that's never going
1438                         * to get done, so reset controller to flush Tx.
1439                         * (Do the reset outside of interrupt context). */
1440                        schedule_work(&adapter->tx_timeout_task);
1441                }
1442        }
1443
1444        /* Dynamic mode for Interrupt Throttle Rate (ITR) */
1445        if(adapter->hw.mac_type >= e1000_82540 && adapter->itr == 1) {
1446                /* Symmetric Tx/Rx gets a reduced ITR=2000; Total
1447                 * asymmetrical Tx or Rx gets ITR=8000; everyone
1448                 * else is between 2000-8000. */
1449                uint32_t goc = (adapter->gotcl + adapter->gorcl) / 10000;
1450                uint32_t dif = (adapter->gotcl > adapter->gorcl ? 
1451                        adapter->gotcl - adapter->gorcl :
1452                        adapter->gorcl - adapter->gotcl) / 10000;
1453                uint32_t itr = goc > 0 ? (dif * 6000 / goc + 2000) : 8000;
1454                E1000_WRITE_REG(&adapter->hw, ITR, 1000000000 / (itr * 256));
1455        }
1456
1457        /* Cause software interrupt to ensure rx ring is cleaned */
1458        E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_RXDMT0);
1459
1460        /* Early detection of hung controller */
1461        i = txdr->next_to_clean;
1462        if(txdr->buffer_info[i].dma &&
1463           time_after(jiffies, txdr->buffer_info[i].time_stamp + HZ) &&
1464           !(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF))
1465                netif_stop_queue(netdev);
1466
1467        /* Reset the timer */
1468        mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
1469}
1470
1471#define E1000_TX_FLAGS_CSUM             0x00000001
1472#define E1000_TX_FLAGS_VLAN             0x00000002
1473#define E1000_TX_FLAGS_TSO              0x00000004
1474#define E1000_TX_FLAGS_VLAN_MASK        0xffff0000
1475#define E1000_TX_FLAGS_VLAN_SHIFT       16
1476
1477static inline boolean_t
1478e1000_tso(struct e1000_adapter *adapter, struct sk_buff *skb)
1479{
1480#ifdef NETIF_F_TSO
1481        struct e1000_context_desc *context_desc;
1482        unsigned int i;
1483        uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
1484        uint16_t ipcse, tucse, mss;
1485
1486        if(skb_shinfo(skb)->tso_size) {
1487                hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
1488                mss = skb_shinfo(skb)->tso_size;
1489                skb->nh.iph->tot_len = 0;
1490                skb->nh.iph->check = 0;
1491                skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr,
1492                                                      skb->nh.iph->daddr,
1493                                                      0,
1494                                                      IPPROTO_TCP,
1495                                                      0);
1496                ipcss = skb->nh.raw - skb->data;
1497                ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data;
1498                ipcse = skb->h.raw - skb->data - 1;
1499                tucss = skb->h.raw - skb->data;
1500                tucso = (void *)&(skb->h.th->check) - (void *)skb->data;
1501                tucse = 0;
1502
1503                i = adapter->tx_ring.next_to_use;
1504                context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
1505
1506                context_desc->lower_setup.ip_fields.ipcss  = ipcss;
1507                context_desc->lower_setup.ip_fields.ipcso  = ipcso;
1508                context_desc->lower_setup.ip_fields.ipcse  = cpu_to_le16(ipcse);
1509                context_desc->upper_setup.tcp_fields.tucss = tucss;
1510                context_desc->upper_setup.tcp_fields.tucso = tucso;
1511                context_desc->upper_setup.tcp_fields.tucse = cpu_to_le16(tucse);
1512                context_desc->tcp_seg_setup.fields.mss     = cpu_to_le16(mss);
1513                context_desc->tcp_seg_setup.fields.hdr_len = hdr_len;
1514                context_desc->cmd_and_length = cpu_to_le32(
1515                        E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE |
1516                        E1000_TXD_CMD_IP | E1000_TXD_CMD_TCP |
1517                        (skb->len - (hdr_len)));
1518
1519                if(++i == adapter->tx_ring.count) i = 0;
1520                adapter->tx_ring.next_to_use = i;
1521
1522                return TRUE;
1523        }
1524#endif
1525
1526        return FALSE;
1527}
1528
1529static inline boolean_t
1530e1000_tx_csum(struct e1000_adapter *adapter, struct sk_buff *skb)
1531{
1532        struct e1000_context_desc *context_desc;
1533        unsigned int i;
1534        uint8_t css, cso;
1535
1536        if(skb->ip_summed == CHECKSUM_HW) {
1537                css = skb->h.raw - skb->data;
1538                cso = (skb->h.raw + skb->csum) - skb->data;
1539
1540                i = adapter->tx_ring.next_to_use;
1541                context_desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);
1542
1543                context_desc->upper_setup.tcp_fields.tucss = css;
1544                context_desc->upper_setup.tcp_fields.tucso = cso;
1545                context_desc->upper_setup.tcp_fields.tucse = 0;
1546                context_desc->tcp_seg_setup.data = 0;
1547                context_desc->cmd_and_length = cpu_to_le32(E1000_TXD_CMD_DEXT);
1548
1549                if(++i == adapter->tx_ring.count) i = 0;
1550                adapter->tx_ring.next_to_use = i;
1551
1552                return TRUE;
1553        }
1554
1555        return FALSE;
1556}
1557
1558#define E1000_MAX_TXD_PWR       12
1559#define E1000_MAX_DATA_PER_TXD  (1<<E1000_MAX_TXD_PWR)
1560
1561static inline int
1562e1000_tx_map(struct e1000_adapter *adapter, struct sk_buff *skb,
1563        unsigned int first)
1564{
1565        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1566        struct e1000_tx_desc *tx_desc;
1567        struct e1000_buffer *buffer_info;
1568        unsigned int len = skb->len, max_per_txd = E1000_MAX_DATA_PER_TXD;
1569        unsigned int offset = 0, size, count = 0, i;
1570#ifdef NETIF_F_TSO
1571        unsigned int mss;
1572#endif
1573        unsigned int nr_frags;
1574        unsigned int f;
1575
1576#ifdef NETIF_F_TSO
1577        mss = skb_shinfo(skb)->tso_size;
1578        /* The controller does a simple calculation to 
1579         * make sure there is enough room in the FIFO before
1580         * initiating the DMA for each buffer.  The calc is:
1581         * 4 = ceil(buffer len/mss).  To make sure we don't
1582         * overrun the FIFO, adjust the max buffer len if mss
1583         * drops. */
1584        if(mss)
1585                max_per_txd = min(mss << 2, max_per_txd);
1586#endif
1587        nr_frags = skb_shinfo(skb)->nr_frags;
1588        len -= skb->data_len;
1589
1590        i = tx_ring->next_to_use;
1591
1592        while(len) {
1593                buffer_info = &tx_ring->buffer_info[i];
1594                size = min(len, max_per_txd);
1595#ifdef NETIF_F_TSO
1596                /* Workaround for premature desc write-backs
1597                 * in TSO mode.  Append 4-byte sentinel desc */
1598                if(mss && !nr_frags && size == len && size > 8)
1599                        size -= 4;
1600#endif
1601                /* Workaround for potential 82544 hang in PCI-X.  Avoid
1602                 * terminating buffers within evenly-aligned dwords. */
1603                if(adapter->pcix_82544 &&
1604                   !((unsigned long)(skb->data + offset + size - 1) & 4) &&
1605                   size > 4)
1606                        size -= 4;
1607
1608                buffer_info->length = size;
1609                buffer_info->dma =
1610                        pci_map_single(adapter->pdev,
1611                                skb->data + offset,
1612                                size,
1613                                PCI_DMA_TODEVICE);
1614                buffer_info->time_stamp = jiffies;
1615
1616                len -= size;
1617                offset += size;
1618                count++;
1619                if(++i == tx_ring->count) i = 0;
1620        }
1621
1622        for(f = 0; f < nr_frags; f++) {
1623                struct skb_frag_struct *frag;
1624
1625                frag = &skb_shinfo(skb)->frags[f];
1626                len = frag->size;
1627                offset = frag->page_offset;
1628
1629                while(len) {
1630                        buffer_info = &tx_ring->buffer_info[i];
1631                        size = min(len, max_per_txd);
1632#ifdef NETIF_F_TSO
1633                        /* Workaround for premature desc write-backs
1634                         * in TSO mode.  Append 4-byte sentinel desc */
1635                        if(mss && f == (nr_frags-1) && size == len && size > 8)
1636                                size -= 4;
1637#endif
1638                        /* Workaround for potential 82544 hang in PCI-X.
1639                         * Avoid terminating buffers within evenly-aligned
1640                         * dwords. */
1641                        if(adapter->pcix_82544 &&
1642                           !((unsigned long)(frag->page+offset+size-1) & 4) &&
1643                           size > 4)
1644                                size -= 4;
1645
1646                        buffer_info->length = size;
1647                        buffer_info->dma =
1648                                pci_map_page(adapter->pdev,
1649                                        frag->page,
1650                                        offset,
1651                                        size,
1652                                        PCI_DMA_TODEVICE);
1653                        buffer_info->time_stamp = jiffies;
1654
1655                        len -= size;
1656                        offset += size;
1657                        count++;
1658                        if(++i == tx_ring->count) i = 0;
1659                }
1660        }
1661
1662        if(E1000_DESC_UNUSED(&adapter->tx_ring) < count + 2) {
1663
1664                /* There aren't enough descriptors available to queue up
1665                 * this send (need: count + 1 context desc + 1 desc gap
1666                 * to keep tail from touching head), so undo the mapping
1667                 * and abort the send.  We could have done the check before
1668                 * we mapped the skb, but because of all the workarounds
1669                 * (above), it's too difficult to predict how many we're
1670                 * going to need.*/
1671                i = tx_ring->next_to_use;
1672
1673                if(i == first) {
1674                        /* Cleanup after e1000_tx_[csum|tso] scribbling
1675                         * on descriptors. */
1676                        tx_desc = E1000_TX_DESC(*tx_ring, first);
1677                        tx_desc->buffer_addr = 0;
1678                        tx_desc->lower.data = 0;
1679                        tx_desc->upper.data = 0;
1680                }
1681
1682                while(count--) {
1683                        buffer_info = &tx_ring->buffer_info[i];
1684
1685                        if(buffer_info->dma) {
1686                                pci_unmap_page(adapter->pdev,
1687                                               buffer_info->dma,
1688                                               buffer_info->length,
1689                                               PCI_DMA_TODEVICE);
1690                                buffer_info->dma = 0;
1691                        }
1692
1693                        if(++i == tx_ring->count) i = 0;
1694                }
1695
1696                tx_ring->next_to_use = first;
1697
1698                return 0;
1699        }
1700
1701        i = (i == 0) ? tx_ring->count - 1 : i - 1;
1702        tx_ring->buffer_info[i].skb = skb;
1703        tx_ring->buffer_info[first].next_to_watch = i;
1704        
1705        return count;
1706}
1707
1708static inline void
1709e1000_tx_queue(struct e1000_adapter *adapter, int count, int tx_flags)
1710{
1711        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
1712        struct e1000_tx_desc *tx_desc = NULL;
1713        struct e1000_buffer *buffer_info;
1714        uint32_t txd_upper = 0, txd_lower = E1000_TXD_CMD_IFCS;
1715        unsigned int i;
1716
1717        if(tx_flags & E1000_TX_FLAGS_TSO) {
1718                txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D |
1719                             E1000_TXD_CMD_TSE;
1720                txd_upper |= (E1000_TXD_POPTS_IXSM | E1000_TXD_POPTS_TXSM) << 8;
1721        }
1722
1723        if(tx_flags & E1000_TX_FLAGS_CSUM) {
1724                txd_lower |= E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
1725                txd_upper |= E1000_TXD_POPTS_TXSM << 8;
1726        }
1727
1728        if(tx_flags & E1000_TX_FLAGS_VLAN) {
1729                txd_lower |= E1000_TXD_CMD_VLE;
1730                txd_upper |= (tx_flags & E1000_TX_FLAGS_VLAN_MASK);
1731        }
1732
1733        i = tx_ring->next_to_use;
1734
1735        while(count--) {
1736                buffer_info = &tx_ring->buffer_info[i];
1737                tx_desc = E1000_TX_DESC(*tx_ring, i);
1738                tx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
1739                tx_desc->lower.data =
1740                        cpu_to_le32(txd_lower | buffer_info->length);
1741                tx_desc->upper.data = cpu_to_le32(txd_upper);
1742                if(++i == tx_ring->count) i = 0;
1743        }
1744
1745        tx_desc->lower.data |= cpu_to_le32(adapter->txd_cmd);
1746
1747        /* Force memory writes to complete before letting h/w
1748         * know there are new descriptors to fetch.  (Only
1749         * applicable for weak-ordered memory model archs,
1750         * such as IA-64). */
1751        wmb();
1752
1753        tx_ring->next_to_use = i;
1754        E1000_WRITE_REG(&adapter->hw, TDT, i);
1755}
1756
1757/**
1758 * 82547 workaround to avoid controller hang in half-duplex environment.
1759 * The workaround is to avoid queuing a large packet that would span
1760 * the internal Tx FIFO ring boundary by notifying the stack to resend
1761 * the packet at a later time.  This gives the Tx FIFO an opportunity to
1762 * flush all packets.  When that occurs, we reset the Tx FIFO pointers
1763 * to the beginning of the Tx FIFO.
1764 **/
1765
1766#define E1000_FIFO_HDR                  0x10
1767#define E1000_82547_PAD_LEN             0x3E0
1768
1769static inline int
1770e1000_82547_fifo_workaround(struct e1000_adapter *adapter, struct sk_buff *skb)
1771{
1772        uint32_t fifo_space = adapter->tx_fifo_size - adapter->tx_fifo_head;
1773        uint32_t skb_fifo_len = skb->len + E1000_FIFO_HDR;
1774
1775        E1000_ROUNDUP(skb_fifo_len, E1000_FIFO_HDR);
1776
1777        if(adapter->link_duplex != HALF_DUPLEX)
1778                goto no_fifo_stall_required;
1779
1780        if(atomic_read(&adapter->tx_fifo_stall))
1781                return 1;
1782
1783        if(skb_fifo_len >= (E1000_82547_PAD_LEN + fifo_space)) {
1784                atomic_set(&adapter->tx_fifo_stall, 1);
1785                return 1;
1786        }
1787
1788no_fifo_stall_required:
1789        adapter->tx_fifo_head += skb_fifo_len;
1790        if(adapter->tx_fifo_head >= adapter->tx_fifo_size)
1791                adapter->tx_fifo_head -= adapter->tx_fifo_size;
1792        return 0;
1793}
1794
1795static int
1796e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1797{
1798        struct e1000_adapter *adapter = netdev->priv;
1799        unsigned int first;
1800        unsigned int tx_flags = 0;
1801        unsigned long flags;
1802        int count;
1803
1804        if(skb->len <= 0) {
1805                dev_kfree_skb_any(skb);
1806                return 0;
1807        }
1808
1809        spin_lock_irqsave(&adapter->tx_lock, flags);
1810
1811        if(adapter->hw.mac_type == e1000_82547) {
1812                if(e1000_82547_fifo_workaround(adapter, skb)) {
1813                        netif_stop_queue(netdev);
1814                        mod_timer(&adapter->tx_fifo_stall_timer, jiffies);
1815                        spin_unlock_irqrestore(&adapter->tx_lock, flags);
1816                        return 1;
1817                }
1818        }
1819
1820        if(adapter->vlgrp && vlan_tx_tag_present(skb)) {
1821                tx_flags |= E1000_TX_FLAGS_VLAN;
1822                tx_flags |= (vlan_tx_tag_get(skb) << E1000_TX_FLAGS_VLAN_SHIFT);
1823        }
1824
1825        first = adapter->tx_ring.next_to_use;
1826        
1827        if(e1000_tso(adapter, skb))
1828                tx_flags |= E1000_TX_FLAGS_TSO;
1829        else if(e1000_tx_csum(adapter, skb))
1830                tx_flags |= E1000_TX_FLAGS_CSUM;
1831
1832        if((count = e1000_tx_map(adapter, skb, first)))
1833                e1000_tx_queue(adapter, count, tx_flags);
1834        else {
1835                netif_stop_queue(netdev);
1836                spin_unlock_irqrestore(&adapter->tx_lock, flags);
1837                return 1;
1838        }
1839
1840        netdev->trans_start = jiffies;
1841
1842        spin_unlock_irqrestore(&adapter->tx_lock, flags);
1843        
1844        return 0;
1845}
1846
1847/**
1848 * e1000_tx_timeout - Respond to a Tx Hang
1849 * @netdev: network interface device structure
1850 **/
1851
1852static void
1853e1000_tx_timeout(struct net_device *netdev)
1854{
1855        struct e1000_adapter *adapter = netdev->priv;
1856
1857        /* Do the reset outside of interrupt context */
1858        schedule_work(&adapter->tx_timeout_task);
1859}
1860
1861static void
1862e1000_tx_timeout_task(struct net_device *netdev)
1863{
1864        struct e1000_adapter *adapter = netdev->priv;
1865
1866        netif_device_detach(netdev);
1867        e1000_down(adapter);
1868        e1000_up(adapter);
1869        netif_device_attach(netdev);
1870}
1871
1872/**
1873 * e1000_get_stats - Get System Network Statistics
1874 * @netdev: network interface device structure
1875 *
1876 * Returns the address of the device statistics structure.
1877 * The statistics are actually updated from the timer callback.
1878 **/
1879
1880static struct net_device_stats *
1881e1000_get_stats(struct net_device *netdev)
1882{
1883        struct e1000_adapter *adapter = netdev->priv;
1884
1885        e1000_update_stats(adapter);
1886        return &adapter->net_stats;
1887}
1888
1889/**
1890 * e1000_change_mtu - Change the Maximum Transfer Unit
1891 * @netdev: network interface device structure
1892 * @new_mtu: new value for maximum frame size
1893 *
1894 * Returns 0 on success, negative on failure
1895 **/
1896
1897static int
1898e1000_change_mtu(struct net_device *netdev, int new_mtu)
1899{
1900        struct e1000_adapter *adapter = netdev->priv;
1901        int old_mtu = adapter->rx_buffer_len;
1902        int max_frame = new_mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
1903
1904        if((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
1905           (max_frame > MAX_JUMBO_FRAME_SIZE)) {
1906                E1000_ERR("Invalid MTU setting\n");
1907                return -EINVAL;
1908        }
1909
1910        if(max_frame <= MAXIMUM_ETHERNET_FRAME_SIZE) {
1911                adapter->rx_buffer_len = E1000_RXBUFFER_2048;
1912
1913        } else if(adapter->hw.mac_type < e1000_82543) {
1914                E1000_ERR("Jumbo Frames not supported on 82542\n");
1915                return -EINVAL;
1916
1917        } else if(max_frame <= E1000_RXBUFFER_4096) {
1918                adapter->rx_buffer_len = E1000_RXBUFFER_4096;
1919
1920        } else if(max_frame <= E1000_RXBUFFER_8192) {
1921                adapter->rx_buffer_len = E1000_RXBUFFER_8192;
1922
1923        } else {
1924                adapter->rx_buffer_len = E1000_RXBUFFER_16384;
1925        }
1926
1927        if(old_mtu != adapter->rx_buffer_len && netif_running(netdev)) {
1928
1929                e1000_down(adapter);
1930                e1000_up(adapter);
1931        }
1932
1933        netdev->mtu = new_mtu;
1934        adapter->hw.max_frame_size = max_frame;
1935
1936        return 0;
1937}
1938
1939/**
1940 * e1000_update_stats - Update the board statistics counters
1941 * @adapter: board private structure
1942 **/
1943
1944void
1945e1000_update_stats(struct e1000_adapter *adapter)
1946{
1947        struct e1000_hw *hw = &adapter->hw;
1948        unsigned long flags;
1949        uint16_t phy_tmp;
1950
1951#define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
1952
1953        spin_lock_irqsave(&adapter->stats_lock, flags);
1954
1955        /* these counters are modified from e1000_adjust_tbi_stats,
1956         * called from the interrupt context, so they must only
1957         * be written while holding adapter->stats_lock
1958         */
1959
1960        adapter->stats.crcerrs += E1000_READ_REG(hw, CRCERRS);
1961        adapter->stats.gprc += E1000_READ_REG(hw, GPRC);
1962        adapter->stats.gorcl += E1000_READ_REG(hw, GORCL);
1963        adapter->stats.gorch += E1000_READ_REG(hw, GORCH);
1964        adapter->stats.bprc += E1000_READ_REG(hw, BPRC);
1965        adapter->stats.mprc += E1000_READ_REG(hw, MPRC);
1966        adapter->stats.roc += E1000_READ_REG(hw, ROC);
1967        adapter->stats.prc64 += E1000_READ_REG(hw, PRC64);
1968        adapter->stats.prc127 += E1000_READ_REG(hw, PRC127);
1969        adapter->stats.prc255 += E1000_READ_REG(hw, PRC255);
1970        adapter->stats.prc511 += E1000_READ_REG(hw, PRC511);
1971        adapter->stats.prc1023 += E1000_READ_REG(hw, PRC1023);
1972        adapter->stats.prc1522 += E1000_READ_REG(hw, PRC1522);
1973
1974        /* the rest of the counters are only modified here */
1975
1976        adapter->stats.symerrs += E1000_READ_REG(hw, SYMERRS);
1977        adapter->stats.mpc += E1000_READ_REG(hw, MPC);
1978        adapter->stats.scc += E1000_READ_REG(hw, SCC);
1979        adapter->stats.ecol += E1000_READ_REG(hw, ECOL);
1980        adapter->stats.mcc += E1000_READ_REG(hw, MCC);
1981        adapter->stats.latecol += E1000_READ_REG(hw, LATECOL);
1982        adapter->stats.dc += E1000_READ_REG(hw, DC);
1983        adapter->stats.sec += E1000_READ_REG(hw, SEC);
1984        adapter->stats.rlec += E1000_READ_REG(hw, RLEC);
1985        adapter->stats.xonrxc += E1000_READ_REG(hw, XONRXC);
1986        adapter->stats.xontxc += E1000_READ_REG(hw, XONTXC);
1987        adapter->stats.xoffrxc += E1000_READ_REG(hw, XOFFRXC);
1988        adapter->stats.xofftxc += E1000_READ_REG(hw, XOFFTXC);
1989        adapter->stats.fcruc += E1000_READ_REG(hw, FCRUC);
1990        adapter->stats.gptc += E1000_READ_REG(hw, GPTC);
1991        adapter->stats.gotcl += E1000_READ_REG(hw, GOTCL);
1992        adapter->stats.gotch += E1000_READ_REG(hw, GOTCH);
1993        adapter->stats.rnbc += E1000_READ_REG(hw, RNBC);
1994        adapter->stats.ruc += E1000_READ_REG(hw, RUC);
1995        adapter->stats.rfc += E1000_READ_REG(hw, RFC);
1996        adapter->stats.rjc += E1000_READ_REG(hw, RJC);
1997        adapter->stats.torl += E1000_READ_REG(hw, TORL);
1998        adapter->stats.torh += E1000_READ_REG(hw, TORH);
1999        adapter->stats.totl += E1000_READ_REG(hw, TOTL);
2000        adapter->stats.toth += E1000_READ_REG(hw, TOTH);
2001        adapter->stats.tpr += E1000_READ_REG(hw, TPR);
2002        adapter->stats.ptc64 += E1000_READ_REG(hw, PTC64);
2003        adapter->stats.ptc127 += E1000_READ_REG(hw, PTC127);
2004        adapter->stats.ptc255 += E1000_READ_REG(hw, PTC255);
2005        adapter->stats.ptc511 += E1000_READ_REG(hw, PTC511);
2006        adapter->stats.ptc1023 += E1000_READ_REG(hw, PTC1023);
2007        adapter->stats.ptc1522 += E1000_READ_REG(hw, PTC1522);
2008        adapter->stats.mptc += E1000_READ_REG(hw, MPTC);
2009        adapter->stats.bptc += E1000_READ_REG(hw, BPTC);
2010
2011        /* used for adaptive IFS */
2012
2013        hw->tx_packet_delta = E1000_READ_REG(hw, TPT);
2014        adapter->stats.tpt += hw->tx_packet_delta;
2015        hw->collision_delta = E1000_READ_REG(hw, COLC);
2016        adapter->stats.colc += hw->collision_delta;
2017
2018        if(hw->mac_type >= e1000_82543) {
2019                adapter->stats.algnerrc += E1000_READ_REG(hw, ALGNERRC);
2020                adapter->stats.rxerrc += E1000_READ_REG(hw, RXERRC);
2021                adapter->stats.tncrs += E1000_READ_REG(hw, TNCRS);
2022                adapter->stats.cexterr += E1000_READ_REG(hw, CEXTERR);
2023                adapter->stats.tsctc += E1000_READ_REG(hw, TSCTC);
2024                adapter->stats.tsctfc += E1000_READ_REG(hw, TSCTFC);
2025        }
2026
2027        /* Fill out the OS statistics structure */
2028
2029        adapter->net_stats.rx_packets = adapter->stats.gprc;
2030        adapter->net_stats.tx_packets = adapter->stats.gptc;
2031        adapter->net_stats.rx_bytes = adapter->stats.gorcl;
2032        adapter->net_stats.tx_bytes = adapter->stats.gotcl;
2033        adapter->net_stats.multicast = adapter->stats.mprc;
2034        adapter->net_stats.collisions = adapter->stats.colc;
2035
2036        /* Rx Errors */
2037
2038        adapter->net_stats.rx_errors = adapter->stats.rxerrc +
2039                adapter->stats.crcerrs + adapter->stats.algnerrc +
2040                adapter->stats.rlec + adapter->stats.rnbc +
2041                adapter->stats.mpc + adapter->stats.cexterr;
2042        adapter->net_stats.rx_dropped = adapter->stats.rnbc;
2043        adapter->net_stats.rx_length_errors = adapter->stats.rlec;
2044        adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
2045        adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
2046        adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
2047        adapter->net_stats.rx_missed_errors = adapter->stats.mpc;
2048
2049        /* Tx Errors */
2050
2051        adapter->net_stats.tx_errors = adapter->stats.ecol +
2052                                       adapter->stats.latecol;
2053        adapter->net_stats.tx_aborted_errors = adapter->stats.ecol;
2054        adapter->net_stats.tx_window_errors = adapter->stats.latecol;
2055        adapter->net_stats.tx_carrier_errors = adapter->stats.tncrs;
2056
2057        /* Tx Dropped needs to be maintained elsewhere */
2058
2059        /* Phy Stats */
2060
2061        if(hw->media_type == e1000_media_type_copper) {
2062                if((adapter->link_speed == SPEED_1000) &&
2063                   (!e1000_read_phy_reg(hw, PHY_1000T_STATUS, &phy_tmp))) {
2064                        phy_tmp &= PHY_IDLE_ERROR_COUNT_MASK;
2065                        adapter->phy_stats.idle_errors += phy_tmp;
2066                }
2067
2068                if((hw->mac_type <= e1000_82546) &&
2069                   (hw->phy_type == e1000_phy_m88) &&
2070                   !e1000_read_phy_reg(hw, M88E1000_RX_ERR_CNTR, &phy_tmp))
2071                        adapter->phy_stats.receive_errors += phy_tmp;
2072        }
2073
2074        spin_unlock_irqrestore(&adapter->stats_lock, flags);
2075}
2076
2077/**
2078 * e1000_irq_disable - Mask off interrupt generation on the NIC
2079 * @adapter: board private structure
2080 **/
2081
2082static inline void
2083e1000_irq_disable(struct e1000_adapter *adapter)
2084{
2085        atomic_inc(&adapter->irq_sem);
2086        E1000_WRITE_REG(&adapter->hw, IMC, ~0);
2087        E1000_WRITE_FLUSH(&adapter->hw);
2088        synchronize_irq(adapter->pdev->irq);
2089}
2090
2091/**
2092 * e1000_irq_enable - Enable default interrupt generation settings
2093 * @adapter: board private structure
2094 **/
2095
2096static inline void
2097e1000_irq_enable(struct e1000_adapter *adapter)
2098{
2099        if(atomic_dec_and_test(&adapter->irq_sem)) {
2100                E1000_WRITE_REG(&adapter->hw, IMS, IMS_ENABLE_MASK);
2101                E1000_WRITE_FLUSH(&adapter->hw);
2102        }
2103}
2104
2105/**
2106 * e1000_intr - Interrupt Handler
2107 * @irq: interrupt number
2108 * @data: pointer to a network interface device structure
2109 * @pt_regs: CPU registers structure
2110 **/
2111
2112static irqreturn_t
2113e1000_intr(int irq, void *data, struct pt_regs *regs)
2114{
2115        struct net_device *netdev = data;
2116        struct e1000_adapter *adapter = netdev->priv;
2117        struct e1000_hw *hw = &adapter->hw;
2118        uint32_t icr = E1000_READ_REG(&adapter->hw, ICR);
2119#ifndef CONFIG_E1000_NAPI
2120        unsigned int i;
2121#endif
2122
2123        if(!icr)
2124                return IRQ_NONE;  /* Not our interrupt */
2125
2126        if(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
2127                hw->get_link_status = 1;
2128                mod_timer(&adapter->watchdog_timer, jiffies);
2129        }
2130
2131#ifdef CONFIG_E1000_NAPI
2132        if(netif_rx_schedule_prep(netdev)) {
2133
2134                /* Disable interrupts and register for poll. The flush 
2135                  of the posted write is intentionally left out.
2136                */
2137
2138                atomic_inc(&adapter->irq_sem);
2139                E1000_WRITE_REG(hw, IMC, ~0);
2140                __netif_rx_schedule(netdev);
2141        }
2142#else
2143        for(i = 0; i < E1000_MAX_INTR; i++)
2144                if(!e1000_clean_rx_irq(adapter) &
2145                   !e1000_clean_tx_irq(adapter))
2146                        break;
2147#endif
2148
2149        return IRQ_HANDLED;
2150}
2151
2152#ifdef CONFIG_E1000_NAPI
2153/**
2154 * e1000_clean - NAPI Rx polling callback
2155 * @adapter: board private structure
2156 **/
2157
2158static int
2159e1000_clean(struct net_device *netdev, int *budget)
2160{
2161        struct e1000_adapter *adapter = netdev->priv;
2162        int work_to_do = min(*budget, netdev->quota);
2163        int work_done = 0;
2164        
2165        e1000_clean_tx_irq(adapter);
2166        e1000_clean_rx_irq(adapter, &work_done, work_to_do);
2167
2168        *budget -= work_done;
2169        netdev->quota -= work_done;
2170        
2171        if(work_done < work_to_do || !netif_running(netdev)) {
2172                netif_rx_complete(netdev);
2173                e1000_irq_enable(adapter);
2174        }
2175
2176        return (work_done >= work_to_do);
2177}
2178#endif
2179
2180/**
2181 * e1000_clean_tx_irq - Reclaim resources after transmit completes
2182 * @adapter: board private structure
2183 **/
2184
2185static boolean_t
2186e1000_clean_tx_irq(struct e1000_adapter *adapter)
2187{
2188        struct e1000_desc_ring *tx_ring = &adapter->tx_ring;
2189        struct net_device *netdev = adapter->netdev;
2190        struct pci_dev *pdev = adapter->pdev;
2191        struct e1000_tx_desc *tx_desc, *eop_desc;
2192        struct e1000_buffer *buffer_info;
2193        unsigned int i, eop;
2194        boolean_t cleaned = FALSE;
2195
2196        spin_lock(&adapter->tx_lock);
2197
2198        i = tx_ring->next_to_clean;
2199        eop = tx_ring->buffer_info[i].next_to_watch;
2200        eop_desc = E1000_TX_DESC(*tx_ring, eop);
2201
2202        while(eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) {
2203
2204                for(cleaned = FALSE; !cleaned; ) {
2205                        tx_desc = E1000_TX_DESC(*tx_ring, i);
2206                        buffer_info = &tx_ring->buffer_info[i];
2207
2208                        if(buffer_info->dma) {
2209
2210                                pci_unmap_page(pdev,
2211                                               buffer_info->dma,
2212                                               buffer_info->length,
2213                                               PCI_DMA_TODEVICE);
2214
2215                                buffer_info->dma = 0;
2216                        }
2217
2218                        if(buffer_info->skb) {
2219
2220                                dev_kfree_skb_any(buffer_info->skb);
2221
2222                                buffer_info->skb = NULL;
2223                        }
2224
2225                        tx_desc->buffer_addr = 0;
2226                        tx_desc->lower.data = 0;
2227                        tx_desc->upper.data = 0;
2228
2229                        cleaned = (i == eop);
2230                        if(++i == tx_ring->count) i = 0;
2231                }
2232                
2233                eop = tx_ring->buffer_info[i].next_to_watch;
2234                eop_desc = E1000_TX_DESC(*tx_ring, eop);
2235        }
2236
2237        tx_ring->next_to_clean = i;
2238
2239        if(cleaned && netif_queue_stopped(netdev) && netif_carrier_ok(netdev))
2240                netif_wake_queue(netdev);
2241
2242        spin_unlock(&adapter->tx_lock);
2243
2244        return cleaned;
2245}
2246
2247/**
2248 * e1000_clean_rx_irq - Send received data up the network stack,
2249 * @adapter: board private structure
2250 **/
2251
2252static boolean_t
2253#ifdef CONFIG_E1000_NAPI
2254e1000_clean_rx_irq(struct e1000_adapter *adapter, int *work_done,
2255                   int work_to_do)
2256#else
2257e1000_clean_rx_irq(struct e1000_adapter *adapter)
2258#endif
2259{
2260        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
2261        struct net_device *netdev = adapter->netdev;
2262        struct pci_dev *pdev = adapter->pdev;
2263        struct e1000_rx_desc *rx_desc;
2264        struct e1000_buffer *buffer_info;
2265        struct sk_buff *skb;
2266        unsigned long flags;
2267        uint32_t length;
2268        uint8_t last_byte;
2269        unsigned int i;
2270        boolean_t cleaned = FALSE;
2271
2272        i = rx_ring->next_to_clean;
2273        rx_desc = E1000_RX_DESC(*rx_ring, i);
2274
2275        while(rx_desc->status & E1000_RXD_STAT_DD) {
2276                buffer_info = &rx_ring->buffer_info[i];
2277
2278#ifdef CONFIG_E1000_NAPI
2279                if(*work_done >= work_to_do)
2280                        break;
2281
2282                (*work_done)++;
2283#endif
2284
2285                cleaned = TRUE;
2286
2287                pci_unmap_single(pdev,
2288                                 buffer_info->dma,
2289                                 buffer_info->length,
2290                                 PCI_DMA_FROMDEVICE);
2291
2292                skb = buffer_info->skb;
2293                length = le16_to_cpu(rx_desc->length);
2294
2295                if(!(rx_desc->status & E1000_RXD_STAT_EOP)) {
2296
2297                        /* All receives must fit into a single buffer */
2298
2299                        E1000_DBG("Receive packet consumed multiple buffers\n");
2300
2301                        dev_kfree_skb_irq(skb);
2302                        rx_desc->status = 0;
2303                        buffer_info->skb = NULL;
2304
2305                        if(++i == rx_ring->count) i = 0;
2306
2307                        rx_desc = E1000_RX_DESC(*rx_ring, i);
2308                        continue;
2309                }
2310
2311                if(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
2312
2313                        last_byte = *(skb->data + length - 1);
2314
2315                        if(TBI_ACCEPT(&adapter->hw, rx_desc->status,
2316                                      rx_desc->errors, length, last_byte)) {
2317
2318                                spin_lock_irqsave(&adapter->stats_lock, flags);
2319
2320                                e1000_tbi_adjust_stats(&adapter->hw,
2321                                                       &adapter->stats,
2322                                                       length, skb->data);
2323
2324                                spin_unlock_irqrestore(&adapter->stats_lock,
2325                                                       flags);
2326                                length--;
2327                        } else {
2328
2329                                dev_kfree_skb_irq(skb);
2330                                rx_desc->status = 0;
2331                                buffer_info->skb = NULL;
2332
2333                                if(++i == rx_ring->count) i = 0;
2334
2335                                rx_desc = E1000_RX_DESC(*rx_ring, i);
2336                                continue;
2337                        }
2338                }
2339
2340                /* Good Receive */
2341                skb_put(skb, length - ETHERNET_FCS_SIZE);
2342
2343                /* Receive Checksum Offload */
2344                e1000_rx_checksum(adapter, rx_desc, skb);
2345
2346                skb->protocol = eth_type_trans(skb, netdev);
2347#ifdef CONFIG_E1000_NAPI
2348                if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
2349                        vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
2350                                le16_to_cpu(rx_desc->special &
2351                                        E1000_RXD_SPC_VLAN_MASK));
2352                } else {
2353                        netif_receive_skb(skb);
2354                }
2355#else /* CONFIG_E1000_NAPI */
2356                if(adapter->vlgrp && (rx_desc->status & E1000_RXD_STAT_VP)) {
2357                        vlan_hwaccel_rx(skb, adapter->vlgrp,
2358                                le16_to_cpu(rx_desc->special &
2359                                        E1000_RXD_SPC_VLAN_MASK));
2360                } else {
2361                        netif_rx(skb);
2362                }
2363#endif /* CONFIG_E1000_NAPI */
2364                netdev->last_rx = jiffies;
2365
2366                rx_desc->status = 0;
2367                buffer_info->skb = NULL;
2368
2369                if(++i == rx_ring->count) i = 0;
2370
2371                rx_desc = E1000_RX_DESC(*rx_ring, i);
2372        }
2373
2374        rx_ring->next_to_clean = i;
2375
2376        e1000_alloc_rx_buffers(adapter);
2377
2378        return cleaned;
2379}
2380
2381/**
2382 * e1000_alloc_rx_buffers - Replace used receive buffers
2383 * @adapter: address of board private structure
2384 **/
2385
2386static void
2387e1000_alloc_rx_buffers(struct e1000_adapter *adapter)
2388{
2389        struct e1000_desc_ring *rx_ring = &adapter->rx_ring;
2390        struct net_device *netdev = adapter->netdev;
2391        struct pci_dev *pdev = adapter->pdev;
2392        struct e1000_rx_desc *rx_desc;
2393        struct e1000_buffer *buffer_info;
2394        struct sk_buff *skb;
2395        int reserve_len = 2;
2396        unsigned int i;
2397
2398        i = rx_ring->next_to_use;
2399        buffer_info = &rx_ring->buffer_info[i];
2400
2401        while(!buffer_info->skb) {
2402                rx_desc = E1000_RX_DESC(*rx_ring, i);
2403
2404                skb = dev_alloc_skb(adapter->rx_buffer_len + reserve_len);
2405
2406                if(!skb) {
2407                        /* Better luck next round */
2408                        break;
2409                }
2410
2411                /* Make buffer alignment 2 beyond a 16 byte boundary
2412                 * this will result in a 16 byte aligned IP header after
2413                 * the 14 byte MAC header is removed
2414                 */
2415                skb_reserve(skb, reserve_len);
2416
2417                skb->dev = netdev;
2418
2419                buffer_info->skb = skb;
2420                buffer_info->length = adapter->rx_buffer_len;
2421                buffer_info->dma =
2422                        pci_map_single(pdev,
2423                                       skb->data,
2424                                       adapter->rx_buffer_len,
2425                                       PCI_DMA_FROMDEVICE);
2426
2427                rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma);
2428
2429                if((i & ~(E1000_RX_BUFFER_WRITE - 1)) == i) {
2430                        /* Force memory writes to complete before letting h/w
2431                         * know there are new descriptors to fetch.  (Only
2432                         * applicable for weak-ordered memory model archs,
2433                         * such as IA-64). */
2434                        wmb();
2435
2436                        E1000_WRITE_REG(&adapter->hw, RDT, i);
2437                }
2438
2439                if(++i == rx_ring->count) i = 0;
2440                buffer_info = &rx_ring->buffer_info[i];
2441        }
2442
2443        rx_ring->next_to_use = i;
2444}
2445
2446/**
2447 * e1000_smartspeed - Workaround for SmartSpeed on 82541 and 82547 controllers.
2448 * @adapter:
2449 **/
2450
2451static void
2452e1000_smartspeed(struct e1000_adapter *adapter)
2453{
2454        uint16_t phy_status;
2455        uint16_t phy_ctrl;
2456
2457        if((adapter->hw.phy_type != e1000_phy_igp) || !adapter->hw.autoneg ||
2458           !(adapter->hw.autoneg_advertised & ADVERTISE_1000_FULL))
2459                return;
2460
2461        if(adapter->smartspeed == 0) {
2462                /* If Master/Slave config fault is asserted twice,
2463                 * we assume back-to-back */
2464                e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_status);
2465                if(!(phy_status & SR_1000T_MS_CONFIG_FAULT)) return;
2466                e1000_read_phy_reg(&adapter->hw, PHY_1000T_STATUS, &phy_status);
2467                if(!(phy_status & SR_1000T_MS_CONFIG_FAULT)) return;
2468                e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_ctrl);
2469                if(phy_ctrl & CR_1000T_MS_ENABLE) {
2470                        phy_ctrl &= ~CR_1000T_MS_ENABLE;
2471                        e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL,
2472                                            phy_ctrl);
2473                        adapter->smartspeed++;
2474                        if(!e1000_phy_setup_autoneg(&adapter->hw) &&
2475                           !e1000_read_phy_reg(&adapter->hw, PHY_CTRL,
2476                                               &phy_ctrl)) {
2477                                phy_ctrl |= (MII_CR_AUTO_NEG_EN |
2478                                             MII_CR_RESTART_AUTO_NEG);
2479                                e1000_write_phy_reg(&adapter->hw, PHY_CTRL,
2480                                                    phy_ctrl);
2481                        }
2482                }
2483                return;
2484        } else if(adapter->smartspeed == E1000_SMARTSPEED_DOWNSHIFT) {
2485                /* If still no link, perhaps using 2/3 pair cable */
2486                e1000_read_phy_reg(&adapter->hw, PHY_1000T_CTRL, &phy_ctrl);
2487                phy_ctrl |= CR_1000T_MS_ENABLE;
2488                e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_ctrl);
2489                if(!e1000_phy_setup_autoneg(&adapter->hw) &&
2490                   !e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &phy_ctrl)) {
2491                        phy_ctrl |= (MII_CR_AUTO_NEG_EN |
2492                                     MII_CR_RESTART_AUTO_NEG);
2493                        e1000_write_phy_reg(&adapter->hw, PHY_CTRL, phy_ctrl);
2494                }
2495        }
2496        /* Restart process after E1000_SMARTSPEED_MAX iterations */
2497        if(adapter->smartspeed++ == E1000_SMARTSPEED_MAX)
2498                adapter->smartspeed = 0;
2499}
2500
2501/**
2502 * e1000_ioctl -
2503 * @netdev:
2504 * @ifreq:
2505 * @cmd:
2506 **/
2507
2508static int
2509e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2510{
2511        switch (cmd) {
2512        case SIOCGMIIPHY:
2513        case SIOCGMIIREG:
2514        case SIOCSMIIREG:
2515                return e1000_mii_ioctl(netdev, ifr, cmd);
2516        case SIOCETHTOOL:
2517                return e1000_ethtool_ioctl(netdev, ifr);
2518        default:
2519                return -EOPNOTSUPP;
2520        }
2521}
2522
2523/**
2524 * e1000_mii_ioctl -
2525 * @netdev:
2526 * @ifreq:
2527 * @cmd:
2528 **/
2529
2530static int
2531e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
2532{
2533        struct e1000_adapter *adapter = netdev->priv;
2534        struct mii_ioctl_data *data = (struct mii_ioctl_data *)&ifr->ifr_data;
2535        int retval;
2536        uint16_t mii_reg;
2537        uint16_t spddplx;
2538
2539        if(adapter->hw.media_type != e1000_media_type_copper)
2540                return -EOPNOTSUPP;
2541
2542        switch (cmd) {
2543        case SIOCGMIIPHY:
2544                data->phy_id = adapter->hw.phy_addr;
2545                break;
2546        case SIOCGMIIREG:
2547                if (!capable(CAP_NET_ADMIN))
2548                        return -EPERM;
2549                if (e1000_read_phy_reg(&adapter->hw, data->reg_num & 0x1F,
2550                                   &data->val_out))
2551                        return -EIO;
2552                break;
2553        case SIOCSMIIREG:
2554                if (!capable(CAP_NET_ADMIN))
2555                        return -EPERM;
2556                if (data->reg_num & ~(0x1F))
2557                        return -EFAULT;
2558                mii_reg = data->val_in;
2559                if (e1000_write_phy_reg(&adapter->hw, data->reg_num,
2560                                        data->val_in))
2561                        return -EIO;
2562                if (adapter->hw.phy_type == e1000_phy_m88) {
2563                        switch (data->reg_num) {
2564                        case PHY_CTRL:
2565                                if(data->val_in & MII_CR_AUTO_NEG_EN) {
2566                                        adapter->hw.autoneg = 1;
2567                                        adapter->hw.autoneg_advertised = 0x2F;
2568                                } else {
2569                                        if (data->val_in & 0x40)
2570                                                spddplx = SPEED_1000;
2571                                        else if (data->val_in & 0x2000)
2572                                                spddplx = SPEED_100;
2573                                        else
2574                                                spddplx = SPEED_10;
2575                                        spddplx += (data->val_in & 0x100)
2576                                                   ? FULL_DUPLEX :
2577                                                   HALF_DUPLEX;
2578                                        retval = e1000_set_spd_dplx(adapter,
2579                                                                    spddplx);
2580                                        if(retval)
2581                                                return retval;
2582                                }
2583                                if(netif_running(adapter->netdev)) {
2584                                        e1000_down(adapter);
2585                                        e1000_up(adapter);
2586                                } else
2587                                        e1000_reset(adapter);
2588                                break;
2589                        case M88E1000_PHY_SPEC_CTRL:
2590                        case M88E1000_EXT_PHY_SPEC_CTRL:
2591                                if (e1000_phy_reset(&adapter->hw))
2592                                        return -EIO;
2593                                break;
2594                        }
2595                }
2596                break;
2597        default:
2598                return -EOPNOTSUPP;
2599        }
2600        return E1000_SUCCESS;
2601}
2602
2603/**
2604 * e1000_rx_checksum - Receive Checksum Offload for 82543
2605 * @adapter: board private structure
2606 * @rx_desc: receive descriptor
2607 * @sk_buff: socket buffer with received data
2608 **/
2609
2610static inline void
2611e1000_rx_checksum(struct e1000_adapter *adapter,
2612                  struct e1000_rx_desc *rx_desc,
2613                  struct sk_buff *skb)
2614{
2615        /* 82543 or newer only */
2616        if((adapter->hw.mac_type < e1000_82543) ||
2617        /* Ignore Checksum bit is set */
2618        (rx_desc->status & E1000_RXD_STAT_IXSM) ||
2619        /* TCP Checksum has not been calculated */
2620        (!(rx_desc->status & E1000_RXD_STAT_TCPCS))) {
2621                skb->ip_summed = CHECKSUM_NONE;
2622                return;
2623        }
2624
2625        /* At this point we know the hardware did the TCP checksum */
2626        /* now look at the TCP checksum error bit */
2627        if(rx_desc->errors & E1000_RXD_ERR_TCPE) {
2628                /* let the stack verify checksum errors */
2629                skb->ip_summed = CHECKSUM_NONE;
2630                adapter->hw_csum_err++;
2631        } else {
2632        /* TCP checksum is good */
2633                skb->ip_summed = CHECKSUM_UNNECESSARY;
2634                adapter->hw_csum_good++;
2635        }
2636}
2637
2638void
2639e1000_pci_set_mwi(struct e1000_hw *hw)
2640{
2641        struct e1000_adapter *adapter = hw->back;
2642
2643        pci_set_mwi(adapter->pdev);
2644}
2645
2646void
2647e1000_pci_clear_mwi(struct e1000_hw *hw)
2648{
2649        struct e1000_adapter *adapter = hw->back;
2650
2651        pci_clear_mwi(adapter->pdev);
2652}
2653
2654void
2655e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
2656{
2657        struct e1000_adapter *adapter = hw->back;
2658
2659        pci_read_config_word(adapter->pdev, reg, value);
2660}
2661
2662void
2663e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
2664{
2665        struct e1000_adapter *adapter = hw->back;
2666
2667        pci_write_config_word(adapter->pdev, reg, *value);
2668}
2669
2670uint32_t
2671e1000_io_read(struct e1000_hw *hw, unsigned long port)
2672{
2673        return inl(port);
2674}
2675
2676void
2677e1000_io_write(struct e1000_hw *hw, unsigned long port, uint32_t value)
2678{
2679        outl(value, port);
2680}
2681
2682static void
2683e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
2684{
2685        struct e1000_adapter *adapter = netdev->priv;
2686        uint32_t ctrl, rctl;
2687
2688        e1000_irq_disable(adapter);
2689        adapter->vlgrp = grp;
2690
2691        if(grp) {
2692                /* enable VLAN tag insert/strip */
2693
2694                ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2695                ctrl |= E1000_CTRL_VME;
2696                E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2697
2698                /* enable VLAN receive filtering */
2699
2700                rctl = E1000_READ_REG(&adapter->hw, RCTL);
2701                rctl |= E1000_RCTL_VFE;
2702                rctl &= ~E1000_RCTL_CFIEN;
2703                E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2704        } else {
2705                /* disable VLAN tag insert/strip */
2706
2707                ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2708                ctrl &= ~E1000_CTRL_VME;
2709                E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2710
2711                /* disable VLAN filtering */
2712
2713                rctl = E1000_READ_REG(&adapter->hw, RCTL);
2714                rctl &= ~E1000_RCTL_VFE;
2715                E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2716        }
2717
2718        e1000_irq_enable(adapter);
2719}
2720
2721static void
2722e1000_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid)
2723{
2724        struct e1000_adapter *adapter = netdev->priv;
2725        uint32_t vfta, index;
2726
2727        /* add VID to filter table */
2728
2729        index = (vid >> 5) & 0x7F;
2730        vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2731        vfta |= (1 << (vid & 0x1F));
2732        e1000_write_vfta(&adapter->hw, index, vfta);
2733}
2734
2735static void
2736e1000_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
2737{
2738        struct e1000_adapter *adapter = netdev->priv;
2739        uint32_t vfta, index;
2740
2741        e1000_irq_disable(adapter);
2742
2743        if(adapter->vlgrp)
2744                adapter->vlgrp->vlan_devices[vid] = NULL;
2745
2746        e1000_irq_enable(adapter);
2747
2748        /* remove VID from filter table*/
2749
2750        index = (vid >> 5) & 0x7F;
2751        vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2752        vfta &= ~(1 << (vid & 0x1F));
2753        e1000_write_vfta(&adapter->hw, index, vfta);
2754}
2755
2756static void
2757e1000_restore_vlan(struct e1000_adapter *adapter)
2758{
2759        e1000_vlan_rx_register(adapter->netdev, adapter->vlgrp);
2760
2761        if(adapter->vlgrp) {
2762                uint16_t vid;
2763                for(vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
2764                        if(!adapter->vlgrp->vlan_devices[vid])
2765                                continue;
2766                        e1000_vlan_rx_add_vid(adapter->netdev, vid);
2767                }
2768        }
2769}
2770
2771int
2772e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx)
2773{
2774        adapter->hw.autoneg = 0;
2775
2776        switch(spddplx) {
2777        case SPEED_10 + DUPLEX_HALF:
2778                adapter->hw.forced_speed_duplex = e1000_10_half;
2779                break;
2780        case SPEED_10 + DUPLEX_FULL:
2781                adapter->hw.forced_speed_duplex = e1000_10_full;
2782                break;
2783        case SPEED_100 + DUPLEX_HALF:
2784                adapter->hw.forced_speed_duplex = e1000_100_half;
2785                break;
2786        case SPEED_100 + DUPLEX_FULL:
2787                adapter->hw.forced_speed_duplex = e1000_100_full;
2788                break;
2789        case SPEED_1000 + DUPLEX_FULL:
2790                adapter->hw.autoneg = 1;
2791                adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL;
2792                break;
2793        case SPEED_1000 + DUPLEX_HALF: /* not supported */
2794        default:
2795                return -EINVAL;
2796        }
2797        return 0;
2798}
2799
2800static int
2801e1000_notify_reboot(struct notifier_block *nb, unsigned long event, void *p)
2802{
2803        struct pci_dev *pdev = NULL;
2804
2805        switch(event) {
2806        case SYS_DOWN:
2807        case SYS_HALT:
2808        case SYS_POWER_OFF:
2809                while((pdev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, pdev))) {
2810                        if(pci_dev_driver(pdev) == &e1000_driver)
2811                                e1000_suspend(pdev, 3);
2812                }
2813        }
2814        return NOTIFY_DONE;
2815}
2816
2817static int
2818e1000_suspend(struct pci_dev *pdev, uint32_t state)
2819{
2820        struct net_device *netdev = pci_get_drvdata(pdev);
2821        struct e1000_adapter *adapter = netdev->priv;
2822        uint32_t ctrl, ctrl_ext, rctl, manc, status;
2823        uint32_t wufc = adapter->wol;
2824
2825        netif_device_detach(netdev);
2826
2827        if(netif_running(netdev))
2828                e1000_down(adapter);
2829
2830        status = E1000_READ_REG(&adapter->hw, STATUS);
2831        if(status & E1000_STATUS_LU)
2832                wufc &= ~E1000_WUFC_LNKC;
2833
2834        if(wufc) {
2835                e1000_setup_rctl(adapter);
2836                e1000_set_multi(netdev);
2837
2838                /* turn on all-multi mode if wake on multicast is enabled */
2839                if(adapter->wol & E1000_WUFC_MC) {
2840                        rctl = E1000_READ_REG(&adapter->hw, RCTL);
2841                        rctl |= E1000_RCTL_MPE;
2842                        E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
2843                }
2844
2845                if(adapter->hw.mac_type >= e1000_82540) {
2846                        ctrl = E1000_READ_REG(&adapter->hw, CTRL);
2847                        /* advertise wake from D3Cold */
2848                        #define E1000_CTRL_ADVD3WUC 0x00100000
2849                        /* phy power management enable */
2850                        #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000
2851                        ctrl |= E1000_CTRL_ADVD3WUC |
2852                                E1000_CTRL_EN_PHY_PWR_MGMT;
2853                        E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
2854                }
2855
2856                if(adapter->hw.media_type == e1000_media_type_fiber ||
2857                   adapter->hw.media_type == e1000_media_type_internal_serdes) {
2858                        /* keep the laser running in D3 */
2859                        ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
2860                        ctrl_ext |= E1000_CTRL_EXT_SDP7_DATA;
2861                        E1000_WRITE_REG(&adapter->hw, CTRL_EXT, ctrl_ext);
2862                }
2863
2864                E1000_WRITE_REG(&adapter->hw, WUC, E1000_WUC_PME_EN);
2865                E1000_WRITE_REG(&adapter->hw, WUFC, wufc);
2866                pci_enable_wake(pdev, 3, 1);
2867                pci_enable_wake(pdev, 4, 1); /* 4 == D3 cold */
2868        } else {
2869                E1000_WRITE_REG(&adapter->hw, WUC, 0);
2870                E1000_WRITE_REG(&adapter->hw, WUFC, 0);
2871                pci_enable_wake(pdev, 3, 0);
2872                pci_enable_wake(pdev, 4, 0); /* 4 == D3 cold */
2873        }
2874
2875        pci_save_state(pdev, adapter->pci_state);
2876
2877        if(adapter->hw.mac_type >= e1000_82540 &&
2878           adapter->hw.media_type == e1000_media_type_copper) {
2879                manc = E1000_READ_REG(&adapter->hw, MANC);
2880                if(manc & E1000_MANC_SMBUS_EN) {
2881                        manc |= E1000_MANC_ARP_EN;
2882                        E1000_WRITE_REG(&adapter->hw, MANC, manc);
2883                        pci_enable_wake(pdev, 3, 1);
2884                        pci_enable_wake(pdev, 4, 1); /* 4 == D3 cold */
2885                }
2886        }
2887
2888        state = (state > 0) ? 3 : 0;
2889        pci_set_power_state(pdev, state);
2890
2891        return 0;
2892}
2893
2894#ifdef CONFIG_PM
2895static int
2896e1000_resume(struct pci_dev *pdev)
2897{
2898        struct net_device *netdev = pci_get_drvdata(pdev);
2899        struct e1000_adapter *adapter = netdev->priv;
2900        uint32_t manc;
2901
2902        pci_set_power_state(pdev, 0);
2903        pci_restore_state(pdev, adapter->pci_state);
2904
2905        pci_enable_wake(pdev, 3, 0);
2906        pci_enable_wake(pdev, 4, 0); /* 4 == D3 cold */
2907
2908        e1000_reset(adapter);
2909        E1000_WRITE_REG(&adapter->hw, WUS, ~0);
2910
2911        if(netif_running(netdev))
2912                e1000_up(adapter);
2913
2914        netif_device_attach(netdev);
2915
2916        if(adapter->hw.mac_type >= e1000_82540 &&
2917           adapter->hw.media_type == e1000_media_type_copper) {
2918                manc = E1000_READ_REG(&adapter->hw, MANC);
2919                manc &= ~(E1000_MANC_ARP_EN);
2920                E1000_WRITE_REG(&adapter->hw, MANC, manc);
2921        }
2922
2923        return 0;
2924}
2925#endif
2926
2927#ifdef CONFIG_NET_POLL_CONTROLLER
2928/*
2929 * Polling 'interrupt' - used by things like netconsole to send skbs
2930 * without having to re-enable interrupts. It's not called while
2931 * the interrupt routine is executing.
2932 */
2933
2934static void e1000_netpoll (struct net_device *dev)
2935{
2936        struct e1000_adapter *adapter = dev->priv;
2937        disable_irq(adapter->pdev->irq);
2938        e1000_intr (adapter->pdev->irq, dev, NULL);
2939        enable_irq(adapter->pdev->irq);
2940}
2941#endif
2942
2943/* e1000_main.c */
2944
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.