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