/drivers/net/e1000/e1000_main.c
https://bitbucket.org/slukk/jb-tsm-kernel-4.2 · C · 4903 lines · 3346 code · 720 blank · 837 comment · 572 complexity · bd05814ba10e437c1eac237b57c2cf2f MD5 · raw file
Large files are truncated click here to view the full file
- /*******************************************************************************
- Intel PRO/1000 Linux driver
- Copyright(c) 1999 - 2006 Intel Corporation.
- This program is free software; you can redistribute it and/or modify it
- under the terms and conditions of the GNU General Public License,
- version 2, as published by the Free Software Foundation.
- This program is distributed in the hope it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
- You should have received a copy of the GNU General Public License along with
- this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
- Contact Information:
- Linux NICS <linux.nics@intel.com>
- e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
- Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
- *******************************************************************************/
- #include "e1000.h"
- #include <net/ip6_checksum.h>
- #include <linux/io.h>
- #include <linux/prefetch.h>
- /* Intel Media SOC GbE MDIO physical base address */
- static unsigned long ce4100_gbe_mdio_base_phy;
- /* Intel Media SOC GbE MDIO virtual base address */
- void __iomem *ce4100_gbe_mdio_base_virt;
- char e1000_driver_name[] = "e1000";
- static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
- #define DRV_VERSION "7.3.21-k8-NAPI"
- const char e1000_driver_version[] = DRV_VERSION;
- static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
- /* e1000_pci_tbl - PCI Device ID Table
- *
- * Last entry must be all 0s
- *
- * Macro expands to...
- * {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
- */
- static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
- INTEL_E1000_ETHERNET_DEVICE(0x1000),
- INTEL_E1000_ETHERNET_DEVICE(0x1001),
- INTEL_E1000_ETHERNET_DEVICE(0x1004),
- INTEL_E1000_ETHERNET_DEVICE(0x1008),
- INTEL_E1000_ETHERNET_DEVICE(0x1009),
- INTEL_E1000_ETHERNET_DEVICE(0x100C),
- INTEL_E1000_ETHERNET_DEVICE(0x100D),
- INTEL_E1000_ETHERNET_DEVICE(0x100E),
- INTEL_E1000_ETHERNET_DEVICE(0x100F),
- INTEL_E1000_ETHERNET_DEVICE(0x1010),
- INTEL_E1000_ETHERNET_DEVICE(0x1011),
- INTEL_E1000_ETHERNET_DEVICE(0x1012),
- INTEL_E1000_ETHERNET_DEVICE(0x1013),
- INTEL_E1000_ETHERNET_DEVICE(0x1014),
- INTEL_E1000_ETHERNET_DEVICE(0x1015),
- INTEL_E1000_ETHERNET_DEVICE(0x1016),
- INTEL_E1000_ETHERNET_DEVICE(0x1017),
- INTEL_E1000_ETHERNET_DEVICE(0x1018),
- INTEL_E1000_ETHERNET_DEVICE(0x1019),
- INTEL_E1000_ETHERNET_DEVICE(0x101A),
- INTEL_E1000_ETHERNET_DEVICE(0x101D),
- INTEL_E1000_ETHERNET_DEVICE(0x101E),
- INTEL_E1000_ETHERNET_DEVICE(0x1026),
- INTEL_E1000_ETHERNET_DEVICE(0x1027),
- INTEL_E1000_ETHERNET_DEVICE(0x1028),
- INTEL_E1000_ETHERNET_DEVICE(0x1075),
- INTEL_E1000_ETHERNET_DEVICE(0x1076),
- INTEL_E1000_ETHERNET_DEVICE(0x1077),
- INTEL_E1000_ETHERNET_DEVICE(0x1078),
- INTEL_E1000_ETHERNET_DEVICE(0x1079),
- INTEL_E1000_ETHERNET_DEVICE(0x107A),
- INTEL_E1000_ETHERNET_DEVICE(0x107B),
- INTEL_E1000_ETHERNET_DEVICE(0x107C),
- INTEL_E1000_ETHERNET_DEVICE(0x108A),
- INTEL_E1000_ETHERNET_DEVICE(0x1099),
- INTEL_E1000_ETHERNET_DEVICE(0x10B5),
- INTEL_E1000_ETHERNET_DEVICE(0x2E6E),
- /* required last entry */
- {0,}
- };
- MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
- int e1000_up(struct e1000_adapter *adapter);
- void e1000_down(struct e1000_adapter *adapter);
- void e1000_reinit_locked(struct e1000_adapter *adapter);
- void e1000_reset(struct e1000_adapter *adapter);
- int e1000_setup_all_tx_resources(struct e1000_adapter *adapter);
- int e1000_setup_all_rx_resources(struct e1000_adapter *adapter);
- void e1000_free_all_tx_resources(struct e1000_adapter *adapter);
- void e1000_free_all_rx_resources(struct e1000_adapter *adapter);
- static int e1000_setup_tx_resources(struct e1000_adapter *adapter,
- struct e1000_tx_ring *txdr);
- static int e1000_setup_rx_resources(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rxdr);
- static void e1000_free_tx_resources(struct e1000_adapter *adapter,
- struct e1000_tx_ring *tx_ring);
- static void e1000_free_rx_resources(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rx_ring);
- void e1000_update_stats(struct e1000_adapter *adapter);
- static int e1000_init_module(void);
- static void e1000_exit_module(void);
- static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
- static void __devexit e1000_remove(struct pci_dev *pdev);
- static int e1000_alloc_queues(struct e1000_adapter *adapter);
- static int e1000_sw_init(struct e1000_adapter *adapter);
- static int e1000_open(struct net_device *netdev);
- static int e1000_close(struct net_device *netdev);
- static void e1000_configure_tx(struct e1000_adapter *adapter);
- static void e1000_configure_rx(struct e1000_adapter *adapter);
- static void e1000_setup_rctl(struct e1000_adapter *adapter);
- static void e1000_clean_all_tx_rings(struct e1000_adapter *adapter);
- static void e1000_clean_all_rx_rings(struct e1000_adapter *adapter);
- static void e1000_clean_tx_ring(struct e1000_adapter *adapter,
- struct e1000_tx_ring *tx_ring);
- static void e1000_clean_rx_ring(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rx_ring);
- static void e1000_set_rx_mode(struct net_device *netdev);
- static void e1000_update_phy_info(unsigned long data);
- static void e1000_update_phy_info_task(struct work_struct *work);
- static void e1000_watchdog(unsigned long data);
- static void e1000_82547_tx_fifo_stall(unsigned long data);
- static void e1000_82547_tx_fifo_stall_task(struct work_struct *work);
- static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
- struct net_device *netdev);
- static struct net_device_stats * e1000_get_stats(struct net_device *netdev);
- static int e1000_change_mtu(struct net_device *netdev, int new_mtu);
- static int e1000_set_mac(struct net_device *netdev, void *p);
- static irqreturn_t e1000_intr(int irq, void *data);
- static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
- struct e1000_tx_ring *tx_ring);
- static int e1000_clean(struct napi_struct *napi, int budget);
- static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rx_ring,
- int *work_done, int work_to_do);
- static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rx_ring,
- int *work_done, int work_to_do);
- static void e1000_alloc_rx_buffers(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rx_ring,
- int cleaned_count);
- static void e1000_alloc_jumbo_rx_buffers(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rx_ring,
- int cleaned_count);
- static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
- static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
- int cmd);
- static void e1000_enter_82542_rst(struct e1000_adapter *adapter);
- static void e1000_leave_82542_rst(struct e1000_adapter *adapter);
- static void e1000_tx_timeout(struct net_device *dev);
- static void e1000_reset_task(struct work_struct *work);
- static void e1000_smartspeed(struct e1000_adapter *adapter);
- static int e1000_82547_fifo_workaround(struct e1000_adapter *adapter,
- struct sk_buff *skb);
- static void e1000_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
- static void e1000_vlan_rx_add_vid(struct net_device *netdev, u16 vid);
- static void e1000_vlan_rx_kill_vid(struct net_device *netdev, u16 vid);
- static void e1000_restore_vlan(struct e1000_adapter *adapter);
- #ifdef CONFIG_PM
- static int e1000_suspend(struct pci_dev *pdev, pm_message_t state);
- static int e1000_resume(struct pci_dev *pdev);
- #endif
- static void e1000_shutdown(struct pci_dev *pdev);
- #ifdef CONFIG_NET_POLL_CONTROLLER
- /* for netdump / net console */
- static void e1000_netpoll (struct net_device *netdev);
- #endif
- #define COPYBREAK_DEFAULT 256
- static unsigned int copybreak __read_mostly = COPYBREAK_DEFAULT;
- module_param(copybreak, uint, 0644);
- MODULE_PARM_DESC(copybreak,
- "Maximum size of packet that is copied to a new buffer on receive");
- static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
- pci_channel_state_t state);
- static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev);
- static void e1000_io_resume(struct pci_dev *pdev);
- static struct pci_error_handlers e1000_err_handler = {
- .error_detected = e1000_io_error_detected,
- .slot_reset = e1000_io_slot_reset,
- .resume = e1000_io_resume,
- };
- static struct pci_driver e1000_driver = {
- .name = e1000_driver_name,
- .id_table = e1000_pci_tbl,
- .probe = e1000_probe,
- .remove = __devexit_p(e1000_remove),
- #ifdef CONFIG_PM
- /* Power Management Hooks */
- .suspend = e1000_suspend,
- .resume = e1000_resume,
- #endif
- .shutdown = e1000_shutdown,
- .err_handler = &e1000_err_handler
- };
- MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
- MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
- MODULE_LICENSE("GPL");
- MODULE_VERSION(DRV_VERSION);
- static int debug = NETIF_MSG_DRV | NETIF_MSG_PROBE;
- module_param(debug, int, 0);
- MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
- /**
- * e1000_get_hw_dev - return device
- * used by hardware layer to print debugging information
- *
- **/
- struct net_device *e1000_get_hw_dev(struct e1000_hw *hw)
- {
- struct e1000_adapter *adapter = hw->back;
- return adapter->netdev;
- }
- /**
- * e1000_init_module - Driver Registration Routine
- *
- * e1000_init_module is the first routine called when the driver is
- * loaded. All it does is register with the PCI subsystem.
- **/
- static int __init e1000_init_module(void)
- {
- int ret;
- pr_info("%s - version %s\n", e1000_driver_string, e1000_driver_version);
- pr_info("%s\n", e1000_copyright);
- ret = pci_register_driver(&e1000_driver);
- if (copybreak != COPYBREAK_DEFAULT) {
- if (copybreak == 0)
- pr_info("copybreak disabled\n");
- else
- pr_info("copybreak enabled for "
- "packets <= %u bytes\n", copybreak);
- }
- return ret;
- }
- module_init(e1000_init_module);
- /**
- * e1000_exit_module - Driver Exit Cleanup Routine
- *
- * e1000_exit_module is called just before the driver is removed
- * from memory.
- **/
- static void __exit e1000_exit_module(void)
- {
- pci_unregister_driver(&e1000_driver);
- }
- module_exit(e1000_exit_module);
- static int e1000_request_irq(struct e1000_adapter *adapter)
- {
- struct net_device *netdev = adapter->netdev;
- irq_handler_t handler = e1000_intr;
- int irq_flags = IRQF_SHARED;
- int err;
- err = request_irq(adapter->pdev->irq, handler, irq_flags, netdev->name,
- netdev);
- if (err) {
- e_err(probe, "Unable to allocate interrupt Error: %d\n", err);
- }
- return err;
- }
- static void e1000_free_irq(struct e1000_adapter *adapter)
- {
- struct net_device *netdev = adapter->netdev;
- free_irq(adapter->pdev->irq, netdev);
- }
- /**
- * e1000_irq_disable - Mask off interrupt generation on the NIC
- * @adapter: board private structure
- **/
- static void e1000_irq_disable(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- ew32(IMC, ~0);
- E1000_WRITE_FLUSH();
- synchronize_irq(adapter->pdev->irq);
- }
- /**
- * e1000_irq_enable - Enable default interrupt generation settings
- * @adapter: board private structure
- **/
- static void e1000_irq_enable(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- ew32(IMS, IMS_ENABLE_MASK);
- E1000_WRITE_FLUSH();
- }
- static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- struct net_device *netdev = adapter->netdev;
- u16 vid = hw->mng_cookie.vlan_id;
- u16 old_vid = adapter->mng_vlan_id;
- if (adapter->vlgrp) {
- if (!vlan_group_get_device(adapter->vlgrp, vid)) {
- if (hw->mng_cookie.status &
- E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) {
- e1000_vlan_rx_add_vid(netdev, vid);
- adapter->mng_vlan_id = vid;
- } else
- adapter->mng_vlan_id = E1000_MNG_VLAN_NONE;
- if ((old_vid != (u16)E1000_MNG_VLAN_NONE) &&
- (vid != old_vid) &&
- !vlan_group_get_device(adapter->vlgrp, old_vid))
- e1000_vlan_rx_kill_vid(netdev, old_vid);
- } else
- adapter->mng_vlan_id = vid;
- }
- }
- static void e1000_init_manageability(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- if (adapter->en_mng_pt) {
- u32 manc = er32(MANC);
- /* disable hardware interception of ARP */
- manc &= ~(E1000_MANC_ARP_EN);
- ew32(MANC, manc);
- }
- }
- static void e1000_release_manageability(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- if (adapter->en_mng_pt) {
- u32 manc = er32(MANC);
- /* re-enable hardware interception of ARP */
- manc |= E1000_MANC_ARP_EN;
- ew32(MANC, manc);
- }
- }
- /**
- * e1000_configure - configure the hardware for RX and TX
- * @adapter = private board structure
- **/
- static void e1000_configure(struct e1000_adapter *adapter)
- {
- struct net_device *netdev = adapter->netdev;
- int i;
- e1000_set_rx_mode(netdev);
- e1000_restore_vlan(adapter);
- e1000_init_manageability(adapter);
- e1000_configure_tx(adapter);
- e1000_setup_rctl(adapter);
- e1000_configure_rx(adapter);
- /* call E1000_DESC_UNUSED which always leaves
- * at least 1 descriptor unused to make sure
- * next_to_use != next_to_clean */
- for (i = 0; i < adapter->num_rx_queues; i++) {
- struct e1000_rx_ring *ring = &adapter->rx_ring[i];
- adapter->alloc_rx_buf(adapter, ring,
- E1000_DESC_UNUSED(ring));
- }
- }
- int e1000_up(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- /* hardware has been reset, we need to reload some things */
- e1000_configure(adapter);
- clear_bit(__E1000_DOWN, &adapter->flags);
- napi_enable(&adapter->napi);
- e1000_irq_enable(adapter);
- netif_wake_queue(adapter->netdev);
- /* fire a link change interrupt to start the watchdog */
- ew32(ICS, E1000_ICS_LSC);
- return 0;
- }
- /**
- * e1000_power_up_phy - restore link in case the phy was powered down
- * @adapter: address of board private structure
- *
- * The phy may be powered down to save power and turn off link when the
- * driver is unloaded and wake on lan is not enabled (among others)
- * *** this routine MUST be followed by a call to e1000_reset ***
- *
- **/
- void e1000_power_up_phy(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- u16 mii_reg = 0;
- /* Just clear the power down bit to wake the phy back up */
- if (hw->media_type == e1000_media_type_copper) {
- /* according to the manual, the phy will retain its
- * settings across a power-down/up cycle */
- e1000_read_phy_reg(hw, PHY_CTRL, &mii_reg);
- mii_reg &= ~MII_CR_POWER_DOWN;
- e1000_write_phy_reg(hw, PHY_CTRL, mii_reg);
- }
- }
- static void e1000_power_down_phy(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- /* Power down the PHY so no link is implied when interface is down *
- * The PHY cannot be powered down if any of the following is true *
- * (a) WoL is enabled
- * (b) AMT is active
- * (c) SoL/IDER session is active */
- if (!adapter->wol && hw->mac_type >= e1000_82540 &&
- hw->media_type == e1000_media_type_copper) {
- u16 mii_reg = 0;
- switch (hw->mac_type) {
- case e1000_82540:
- case e1000_82545:
- case e1000_82545_rev_3:
- case e1000_82546:
- case e1000_ce4100:
- case e1000_82546_rev_3:
- case e1000_82541:
- case e1000_82541_rev_2:
- case e1000_82547:
- case e1000_82547_rev_2:
- if (er32(MANC) & E1000_MANC_SMBUS_EN)
- goto out;
- break;
- default:
- goto out;
- }
- e1000_read_phy_reg(hw, PHY_CTRL, &mii_reg);
- mii_reg |= MII_CR_POWER_DOWN;
- e1000_write_phy_reg(hw, PHY_CTRL, mii_reg);
- mdelay(1);
- }
- out:
- return;
- }
- void e1000_down(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- struct net_device *netdev = adapter->netdev;
- u32 rctl, tctl;
- /* disable receives in the hardware */
- rctl = er32(RCTL);
- ew32(RCTL, rctl & ~E1000_RCTL_EN);
- /* flush and sleep below */
- netif_tx_disable(netdev);
- /* disable transmits in the hardware */
- tctl = er32(TCTL);
- tctl &= ~E1000_TCTL_EN;
- ew32(TCTL, tctl);
- /* flush both disables and wait for them to finish */
- E1000_WRITE_FLUSH();
- msleep(10);
- napi_disable(&adapter->napi);
- e1000_irq_disable(adapter);
- /*
- * Setting DOWN must be after irq_disable to prevent
- * a screaming interrupt. Setting DOWN also prevents
- * timers and tasks from rescheduling.
- */
- set_bit(__E1000_DOWN, &adapter->flags);
- del_timer_sync(&adapter->tx_fifo_stall_timer);
- del_timer_sync(&adapter->watchdog_timer);
- del_timer_sync(&adapter->phy_info_timer);
- adapter->link_speed = 0;
- adapter->link_duplex = 0;
- netif_carrier_off(netdev);
- e1000_reset(adapter);
- e1000_clean_all_tx_rings(adapter);
- e1000_clean_all_rx_rings(adapter);
- }
- static void e1000_reinit_safe(struct e1000_adapter *adapter)
- {
- while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
- msleep(1);
- rtnl_lock();
- e1000_down(adapter);
- e1000_up(adapter);
- rtnl_unlock();
- clear_bit(__E1000_RESETTING, &adapter->flags);
- }
- void e1000_reinit_locked(struct e1000_adapter *adapter)
- {
- /* if rtnl_lock is not held the call path is bogus */
- ASSERT_RTNL();
- WARN_ON(in_interrupt());
- while (test_and_set_bit(__E1000_RESETTING, &adapter->flags))
- msleep(1);
- e1000_down(adapter);
- e1000_up(adapter);
- clear_bit(__E1000_RESETTING, &adapter->flags);
- }
- void e1000_reset(struct e1000_adapter *adapter)
- {
- struct e1000_hw *hw = &adapter->hw;
- u32 pba = 0, tx_space, min_tx_space, min_rx_space;
- bool legacy_pba_adjust = false;
- u16 hwm;
- /* Repartition Pba for greater than 9k mtu
- * To take effect CTRL.RST is required.
- */
- switch (hw->mac_type) {
- case e1000_82542_rev2_0:
- case e1000_82542_rev2_1:
- case e1000_82543:
- case e1000_82544:
- case e1000_82540:
- case e1000_82541:
- case e1000_82541_rev_2:
- legacy_pba_adjust = true;
- pba = E1000_PBA_48K;
- break;
- case e1000_82545:
- case e1000_82545_rev_3:
- case e1000_82546:
- case e1000_ce4100:
- case e1000_82546_rev_3:
- pba = E1000_PBA_48K;
- break;
- case e1000_82547:
- case e1000_82547_rev_2:
- legacy_pba_adjust = true;
- pba = E1000_PBA_30K;
- break;
- case e1000_undefined:
- case e1000_num_macs:
- break;
- }
- if (legacy_pba_adjust) {
- if (hw->max_frame_size > E1000_RXBUFFER_8192)
- pba -= 8; /* allocate more FIFO for Tx */
- if (hw->mac_type == e1000_82547) {
- adapter->tx_fifo_head = 0;
- adapter->tx_head_addr = pba << E1000_TX_HEAD_ADDR_SHIFT;
- adapter->tx_fifo_size =
- (E1000_PBA_40K - pba) << E1000_PBA_BYTES_SHIFT;
- atomic_set(&adapter->tx_fifo_stall, 0);
- }
- } else if (hw->max_frame_size > ETH_FRAME_LEN + ETH_FCS_LEN) {
- /* adjust PBA for jumbo frames */
- ew32(PBA, pba);
- /* To maintain wire speed transmits, the Tx FIFO should be
- * large enough to accommodate two full transmit packets,
- * rounded up to the next 1KB and expressed in KB. Likewise,
- * the Rx FIFO should be large enough to accommodate at least
- * one full receive packet and is similarly rounded up and
- * expressed in KB. */
- pba = er32(PBA);
- /* upper 16 bits has Tx packet buffer allocation size in KB */
- tx_space = pba >> 16;
- /* lower 16 bits has Rx packet buffer allocation size in KB */
- pba &= 0xffff;
- /*
- * the tx fifo also stores 16 bytes of information about the tx
- * but don't include ethernet FCS because hardware appends it
- */
- min_tx_space = (hw->max_frame_size +
- sizeof(struct e1000_tx_desc) -
- ETH_FCS_LEN) * 2;
- min_tx_space = ALIGN(min_tx_space, 1024);
- min_tx_space >>= 10;
- /* software strips receive CRC, so leave room for it */
- min_rx_space = hw->max_frame_size;
- min_rx_space = ALIGN(min_rx_space, 1024);
- min_rx_space >>= 10;
- /* If current Tx allocation is less than the min Tx FIFO size,
- * and the min Tx FIFO size is less than the current Rx FIFO
- * allocation, take space away from current Rx allocation */
- if (tx_space < min_tx_space &&
- ((min_tx_space - tx_space) < pba)) {
- pba = pba - (min_tx_space - tx_space);
- /* PCI/PCIx hardware has PBA alignment constraints */
- switch (hw->mac_type) {
- case e1000_82545 ... e1000_82546_rev_3:
- pba &= ~(E1000_PBA_8K - 1);
- break;
- default:
- break;
- }
- /* if short on rx space, rx wins and must trump tx
- * adjustment or use Early Receive if available */
- if (pba < min_rx_space)
- pba = min_rx_space;
- }
- }
- ew32(PBA, pba);
- /*
- * flow control settings:
- * The high water mark must be low enough to fit one full frame
- * (or the size used for early receive) above it in the Rx FIFO.
- * Set it to the lower of:
- * - 90% of the Rx FIFO size, and
- * - the full Rx FIFO size minus the early receive size (for parts
- * with ERT support assuming ERT set to E1000_ERT_2048), or
- * - the full Rx FIFO size minus one full frame
- */
- hwm = min(((pba << 10) * 9 / 10),
- ((pba << 10) - hw->max_frame_size));
- hw->fc_high_water = hwm & 0xFFF8; /* 8-byte granularity */
- hw->fc_low_water = hw->fc_high_water - 8;
- hw->fc_pause_time = E1000_FC_PAUSE_TIME;
- hw->fc_send_xon = 1;
- hw->fc = hw->original_fc;
- /* Allow time for pending master requests to run */
- e1000_reset_hw(hw);
- if (hw->mac_type >= e1000_82544)
- ew32(WUC, 0);
- if (e1000_init_hw(hw))
- e_dev_err("Hardware Error\n");
- e1000_update_mng_vlan(adapter);
- /* if (adapter->hwflags & HWFLAGS_PHY_PWR_BIT) { */
- if (hw->mac_type >= e1000_82544 &&
- hw->autoneg == 1 &&
- hw->autoneg_advertised == ADVERTISE_1000_FULL) {
- u32 ctrl = er32(CTRL);
- /* clear phy power management bit if we are in gig only mode,
- * which if enabled will attempt negotiation to 100Mb, which
- * can cause a loss of link at power off or driver unload */
- ctrl &= ~E1000_CTRL_SWDPIN3;
- ew32(CTRL, ctrl);
- }
- /* Enable h/w to recognize an 802.1Q VLAN Ethernet packet */
- ew32(VET, ETHERNET_IEEE_VLAN_TYPE);
- e1000_reset_adaptive(hw);
- e1000_phy_get_info(hw, &adapter->phy_info);
- e1000_release_manageability(adapter);
- }
- /**
- * Dump the eeprom for users having checksum issues
- **/
- static void e1000_dump_eeprom(struct e1000_adapter *adapter)
- {
- struct net_device *netdev = adapter->netdev;
- struct ethtool_eeprom eeprom;
- const struct ethtool_ops *ops = netdev->ethtool_ops;
- u8 *data;
- int i;
- u16 csum_old, csum_new = 0;
- eeprom.len = ops->get_eeprom_len(netdev);
- eeprom.offset = 0;
- data = kmalloc(eeprom.len, GFP_KERNEL);
- if (!data) {
- pr_err("Unable to allocate memory to dump EEPROM data\n");
- return;
- }
- ops->get_eeprom(netdev, &eeprom, data);
- csum_old = (data[EEPROM_CHECKSUM_REG * 2]) +
- (data[EEPROM_CHECKSUM_REG * 2 + 1] << 8);
- for (i = 0; i < EEPROM_CHECKSUM_REG * 2; i += 2)
- csum_new += data[i] + (data[i + 1] << 8);
- csum_new = EEPROM_SUM - csum_new;
- pr_err("/*********************/\n");
- pr_err("Current EEPROM Checksum : 0x%04x\n", csum_old);
- pr_err("Calculated : 0x%04x\n", csum_new);
- pr_err("Offset Values\n");
- pr_err("======== ======\n");
- print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 16, 1, data, 128, 0);
- pr_err("Include this output when contacting your support provider.\n");
- pr_err("This is not a software error! Something bad happened to\n");
- pr_err("your hardware or EEPROM image. Ignoring this problem could\n");
- pr_err("result in further problems, possibly loss of data,\n");
- pr_err("corruption or system hangs!\n");
- pr_err("The MAC Address will be reset to 00:00:00:00:00:00,\n");
- pr_err("which is invalid and requires you to set the proper MAC\n");
- pr_err("address manually before continuing to enable this network\n");
- pr_err("device. Please inspect the EEPROM dump and report the\n");
- pr_err("issue to your hardware vendor or Intel Customer Support.\n");
- pr_err("/*********************/\n");
- kfree(data);
- }
- /**
- * e1000_is_need_ioport - determine if an adapter needs ioport resources or not
- * @pdev: PCI device information struct
- *
- * Return true if an adapter needs ioport resources
- **/
- static int e1000_is_need_ioport(struct pci_dev *pdev)
- {
- switch (pdev->device) {
- case E1000_DEV_ID_82540EM:
- case E1000_DEV_ID_82540EM_LOM:
- case E1000_DEV_ID_82540EP:
- case E1000_DEV_ID_82540EP_LOM:
- case E1000_DEV_ID_82540EP_LP:
- case E1000_DEV_ID_82541EI:
- case E1000_DEV_ID_82541EI_MOBILE:
- case E1000_DEV_ID_82541ER:
- case E1000_DEV_ID_82541ER_LOM:
- case E1000_DEV_ID_82541GI:
- case E1000_DEV_ID_82541GI_LF:
- case E1000_DEV_ID_82541GI_MOBILE:
- case E1000_DEV_ID_82544EI_COPPER:
- case E1000_DEV_ID_82544EI_FIBER:
- case E1000_DEV_ID_82544GC_COPPER:
- case E1000_DEV_ID_82544GC_LOM:
- case E1000_DEV_ID_82545EM_COPPER:
- case E1000_DEV_ID_82545EM_FIBER:
- case E1000_DEV_ID_82546EB_COPPER:
- case E1000_DEV_ID_82546EB_FIBER:
- case E1000_DEV_ID_82546EB_QUAD_COPPER:
- return true;
- default:
- return false;
- }
- }
- static const struct net_device_ops e1000_netdev_ops = {
- .ndo_open = e1000_open,
- .ndo_stop = e1000_close,
- .ndo_start_xmit = e1000_xmit_frame,
- .ndo_get_stats = e1000_get_stats,
- .ndo_set_rx_mode = e1000_set_rx_mode,
- .ndo_set_mac_address = e1000_set_mac,
- .ndo_tx_timeout = e1000_tx_timeout,
- .ndo_change_mtu = e1000_change_mtu,
- .ndo_do_ioctl = e1000_ioctl,
- .ndo_validate_addr = eth_validate_addr,
- .ndo_vlan_rx_register = e1000_vlan_rx_register,
- .ndo_vlan_rx_add_vid = e1000_vlan_rx_add_vid,
- .ndo_vlan_rx_kill_vid = e1000_vlan_rx_kill_vid,
- #ifdef CONFIG_NET_POLL_CONTROLLER
- .ndo_poll_controller = e1000_netpoll,
- #endif
- };
- /**
- * e1000_init_hw_struct - initialize members of hw struct
- * @adapter: board private struct
- * @hw: structure used by e1000_hw.c
- *
- * Factors out initialization of the e1000_hw struct to its own function
- * that can be called very early at init (just after struct allocation).
- * Fields are initialized based on PCI device information and
- * OS network device settings (MTU size).
- * Returns negative error codes if MAC type setup fails.
- */
- static int e1000_init_hw_struct(struct e1000_adapter *adapter,
- struct e1000_hw *hw)
- {
- struct pci_dev *pdev = adapter->pdev;
- /* PCI config space info */
- hw->vendor_id = pdev->vendor;
- hw->device_id = pdev->device;
- hw->subsystem_vendor_id = pdev->subsystem_vendor;
- hw->subsystem_id = pdev->subsystem_device;
- hw->revision_id = pdev->revision;
- pci_read_config_word(pdev, PCI_COMMAND, &hw->pci_cmd_word);
- hw->max_frame_size = adapter->netdev->mtu +
- ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
- hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
- /* identify the MAC */
- if (e1000_set_mac_type(hw)) {
- e_err(probe, "Unknown MAC Type\n");
- return -EIO;
- }
- switch (hw->mac_type) {
- default:
- break;
- case e1000_82541:
- case e1000_82547:
- case e1000_82541_rev_2:
- case e1000_82547_rev_2:
- hw->phy_init_script = 1;
- break;
- }
- e1000_set_media_type(hw);
- e1000_get_bus_info(hw);
- hw->wait_autoneg_complete = false;
- hw->tbi_compatibility_en = true;
- hw->adaptive_ifs = true;
- /* Copper options */
- if (hw->media_type == e1000_media_type_copper) {
- hw->mdix = AUTO_ALL_MODES;
- hw->disable_polarity_correction = false;
- hw->master_slave = E1000_MASTER_SLAVE;
- }
- return 0;
- }
- /**
- * e1000_probe - Device Initialization Routine
- * @pdev: PCI device information struct
- * @ent: entry in e1000_pci_tbl
- *
- * Returns 0 on success, negative on failure
- *
- * e1000_probe initializes an adapter identified by a pci_dev structure.
- * The OS initialization, configuring of the adapter private structure,
- * and a hardware reset occur.
- **/
- static int __devinit e1000_probe(struct pci_dev *pdev,
- const struct pci_device_id *ent)
- {
- struct net_device *netdev;
- struct e1000_adapter *adapter;
- struct e1000_hw *hw;
- static int cards_found = 0;
- static int global_quad_port_a = 0; /* global ksp3 port a indication */
- int i, err, pci_using_dac;
- u16 eeprom_data = 0;
- u16 tmp = 0;
- u16 eeprom_apme_mask = E1000_EEPROM_APME;
- int bars, need_ioport;
- /* do not allocate ioport bars when not needed */
- need_ioport = e1000_is_need_ioport(pdev);
- if (need_ioport) {
- bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO);
- err = pci_enable_device(pdev);
- } else {
- bars = pci_select_bars(pdev, IORESOURCE_MEM);
- err = pci_enable_device_mem(pdev);
- }
- if (err)
- return err;
- err = pci_request_selected_regions(pdev, bars, e1000_driver_name);
- if (err)
- goto err_pci_reg;
- pci_set_master(pdev);
- err = pci_save_state(pdev);
- if (err)
- goto err_alloc_etherdev;
- err = -ENOMEM;
- netdev = alloc_etherdev(sizeof(struct e1000_adapter));
- if (!netdev)
- goto err_alloc_etherdev;
- SET_NETDEV_DEV(netdev, &pdev->dev);
- pci_set_drvdata(pdev, netdev);
- adapter = netdev_priv(netdev);
- adapter->netdev = netdev;
- adapter->pdev = pdev;
- adapter->msg_enable = (1 << debug) - 1;
- adapter->bars = bars;
- adapter->need_ioport = need_ioport;
- hw = &adapter->hw;
- hw->back = adapter;
- err = -EIO;
- hw->hw_addr = pci_ioremap_bar(pdev, BAR_0);
- if (!hw->hw_addr)
- goto err_ioremap;
- if (adapter->need_ioport) {
- for (i = BAR_1; i <= BAR_5; i++) {
- if (pci_resource_len(pdev, i) == 0)
- continue;
- if (pci_resource_flags(pdev, i) & IORESOURCE_IO) {
- hw->io_base = pci_resource_start(pdev, i);
- break;
- }
- }
- }
- /* make ready for any if (hw->...) below */
- err = e1000_init_hw_struct(adapter, hw);
- if (err)
- goto err_sw_init;
- /*
- * there is a workaround being applied below that limits
- * 64-bit DMA addresses to 64-bit hardware. There are some
- * 32-bit adapters that Tx hang when given 64-bit DMA addresses
- */
- pci_using_dac = 0;
- if ((hw->bus_type == e1000_bus_type_pcix) &&
- !dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
- /*
- * according to DMA-API-HOWTO, coherent calls will always
- * succeed if the set call did
- */
- dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
- pci_using_dac = 1;
- } else {
- err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
- if (err) {
- pr_err("No usable DMA config, aborting\n");
- goto err_dma;
- }
- dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
- }
- netdev->netdev_ops = &e1000_netdev_ops;
- e1000_set_ethtool_ops(netdev);
- netdev->watchdog_timeo = 5 * HZ;
- netif_napi_add(netdev, &adapter->napi, e1000_clean, 64);
- strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
- adapter->bd_number = cards_found;
- /* setup the private structure */
- err = e1000_sw_init(adapter);
- if (err)
- goto err_sw_init;
- err = -EIO;
- if (hw->mac_type == e1000_ce4100) {
- ce4100_gbe_mdio_base_phy = pci_resource_start(pdev, BAR_1);
- ce4100_gbe_mdio_base_virt = ioremap(ce4100_gbe_mdio_base_phy,
- pci_resource_len(pdev, BAR_1));
- if (!ce4100_gbe_mdio_base_virt)
- goto err_mdio_ioremap;
- }
- if (hw->mac_type >= e1000_82543) {
- netdev->features = NETIF_F_SG |
- NETIF_F_HW_CSUM |
- NETIF_F_HW_VLAN_TX |
- NETIF_F_HW_VLAN_RX |
- NETIF_F_HW_VLAN_FILTER;
- }
- if ((hw->mac_type >= e1000_82544) &&
- (hw->mac_type != e1000_82547))
- netdev->features |= NETIF_F_TSO;
- if (pci_using_dac) {
- netdev->features |= NETIF_F_HIGHDMA;
- netdev->vlan_features |= NETIF_F_HIGHDMA;
- }
- netdev->vlan_features |= NETIF_F_TSO;
- netdev->vlan_features |= NETIF_F_HW_CSUM;
- netdev->vlan_features |= NETIF_F_SG;
- adapter->en_mng_pt = e1000_enable_mng_pass_thru(hw);
- /* initialize eeprom parameters */
- if (e1000_init_eeprom_params(hw)) {
- e_err(probe, "EEPROM initialization failed\n");
- goto err_eeprom;
- }
- /* before reading the EEPROM, reset the controller to
- * put the device in a known good starting state */
- e1000_reset_hw(hw);
- /* make sure the EEPROM is good */
- if (e1000_validate_eeprom_checksum(hw) < 0) {
- e_err(probe, "The EEPROM Checksum Is Not Valid\n");
- e1000_dump_eeprom(adapter);
- /*
- * set MAC address to all zeroes to invalidate and temporary
- * disable this device for the user. This blocks regular
- * traffic while still permitting ethtool ioctls from reaching
- * the hardware as well as allowing the user to run the
- * interface after manually setting a hw addr using
- * `ip set address`
- */
- memset(hw->mac_addr, 0, netdev->addr_len);
- } else {
- /* copy the MAC address out of the EEPROM */
- if (e1000_read_mac_addr(hw))
- e_err(probe, "EEPROM Read Error\n");
- }
- /* don't block initalization here due to bad MAC address */
- memcpy(netdev->dev_addr, hw->mac_addr, netdev->addr_len);
- memcpy(netdev->perm_addr, hw->mac_addr, netdev->addr_len);
- if (!is_valid_ether_addr(netdev->perm_addr))
- e_err(probe, "Invalid MAC Address\n");
- init_timer(&adapter->tx_fifo_stall_timer);
- adapter->tx_fifo_stall_timer.function = e1000_82547_tx_fifo_stall;
- adapter->tx_fifo_stall_timer.data = (unsigned long)adapter;
- init_timer(&adapter->watchdog_timer);
- adapter->watchdog_timer.function = e1000_watchdog;
- adapter->watchdog_timer.data = (unsigned long) adapter;
- init_timer(&adapter->phy_info_timer);
- adapter->phy_info_timer.function = e1000_update_phy_info;
- adapter->phy_info_timer.data = (unsigned long)adapter;
- INIT_WORK(&adapter->fifo_stall_task, e1000_82547_tx_fifo_stall_task);
- INIT_WORK(&adapter->reset_task, e1000_reset_task);
- INIT_WORK(&adapter->phy_info_task, e1000_update_phy_info_task);
- e1000_check_options(adapter);
- /* Initial Wake on LAN setting
- * If APM wake is enabled in the EEPROM,
- * enable the ACPI Magic Packet filter
- */
- switch (hw->mac_type) {
- case e1000_82542_rev2_0:
- case e1000_82542_rev2_1:
- case e1000_82543:
- break;
- case e1000_82544:
- e1000_read_eeprom(hw,
- EEPROM_INIT_CONTROL2_REG, 1, &eeprom_data);
- eeprom_apme_mask = E1000_EEPROM_82544_APM;
- break;
- case e1000_82546:
- case e1000_82546_rev_3:
- if (er32(STATUS) & E1000_STATUS_FUNC_1){
- e1000_read_eeprom(hw,
- EEPROM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
- break;
- }
- /* Fall Through */
- default:
- e1000_read_eeprom(hw,
- EEPROM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
- break;
- }
- if (eeprom_data & eeprom_apme_mask)
- adapter->eeprom_wol |= E1000_WUFC_MAG;
- /* now that we have the eeprom settings, apply the special cases
- * where the eeprom may be wrong or the board simply won't support
- * wake on lan on a particular port */
- switch (pdev->device) {
- case E1000_DEV_ID_82546GB_PCIE:
- adapter->eeprom_wol = 0;
- break;
- case E1000_DEV_ID_82546EB_FIBER:
- case E1000_DEV_ID_82546GB_FIBER:
- /* Wake events only supported on port A for dual fiber
- * regardless of eeprom setting */
- if (er32(STATUS) & E1000_STATUS_FUNC_1)
- adapter->eeprom_wol = 0;
- break;
- case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
- /* if quad port adapter, disable WoL on all but port A */
- if (global_quad_port_a != 0)
- adapter->eeprom_wol = 0;
- else
- adapter->quad_port_a = 1;
- /* Reset for multiple quad port adapters */
- if (++global_quad_port_a == 4)
- global_quad_port_a = 0;
- break;
- }
- /* initialize the wol settings based on the eeprom settings */
- adapter->wol = adapter->eeprom_wol;
- device_set_wakeup_enable(&adapter->pdev->dev, adapter->wol);
- /* Auto detect PHY address */
- if (hw->mac_type == e1000_ce4100) {
- for (i = 0; i < 32; i++) {
- hw->phy_addr = i;
- e1000_read_phy_reg(hw, PHY_ID2, &tmp);
- if (tmp == 0 || tmp == 0xFF) {
- if (i == 31)
- goto err_eeprom;
- continue;
- } else
- break;
- }
- }
- /* reset the hardware with the new settings */
- e1000_reset(adapter);
- strcpy(netdev->name, "eth%d");
- err = register_netdev(netdev);
- if (err)
- goto err_register;
- /* print bus type/speed/width info */
- e_info(probe, "(PCI%s:%dMHz:%d-bit) %pM\n",
- ((hw->bus_type == e1000_bus_type_pcix) ? "-X" : ""),
- ((hw->bus_speed == e1000_bus_speed_133) ? 133 :
- (hw->bus_speed == e1000_bus_speed_120) ? 120 :
- (hw->bus_speed == e1000_bus_speed_100) ? 100 :
- (hw->bus_speed == e1000_bus_speed_66) ? 66 : 33),
- ((hw->bus_width == e1000_bus_width_64) ? 64 : 32),
- netdev->dev_addr);
- /* carrier off reporting is important to ethtool even BEFORE open */
- netif_carrier_off(netdev);
- e_info(probe, "Intel(R) PRO/1000 Network Connection\n");
- cards_found++;
- return 0;
- err_register:
- err_eeprom:
- e1000_phy_hw_reset(hw);
- if (hw->flash_address)
- iounmap(hw->flash_address);
- kfree(adapter->tx_ring);
- kfree(adapter->rx_ring);
- err_dma:
- err_sw_init:
- err_mdio_ioremap:
- iounmap(ce4100_gbe_mdio_base_virt);
- iounmap(hw->hw_addr);
- err_ioremap:
- free_netdev(netdev);
- err_alloc_etherdev:
- pci_release_selected_regions(pdev, bars);
- err_pci_reg:
- pci_disable_device(pdev);
- return err;
- }
- /**
- * e1000_remove - Device Removal Routine
- * @pdev: PCI device information struct
- *
- * e1000_remove is called by the PCI subsystem to alert the driver
- * that it should release a PCI device. The could be caused by a
- * Hot-Plug event, or because the driver is going to be removed from
- * memory.
- **/
- static void __devexit e1000_remove(struct pci_dev *pdev)
- {
- struct net_device *netdev = pci_get_drvdata(pdev);
- struct e1000_adapter *adapter = netdev_priv(netdev);
- struct e1000_hw *hw = &adapter->hw;
- set_bit(__E1000_DOWN, &adapter->flags);
- del_timer_sync(&adapter->tx_fifo_stall_timer);
- del_timer_sync(&adapter->watchdog_timer);
- del_timer_sync(&adapter->phy_info_timer);
- cancel_work_sync(&adapter->reset_task);
- e1000_release_manageability(adapter);
- unregister_netdev(netdev);
- e1000_phy_hw_reset(hw);
- kfree(adapter->tx_ring);
- kfree(adapter->rx_ring);
- iounmap(hw->hw_addr);
- if (hw->flash_address)
- iounmap(hw->flash_address);
- pci_release_selected_regions(pdev, adapter->bars);
- free_netdev(netdev);
- pci_disable_device(pdev);
- }
- /**
- * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
- * @adapter: board private structure to initialize
- *
- * e1000_sw_init initializes the Adapter private data structure.
- * e1000_init_hw_struct MUST be called before this function
- **/
- static int __devinit e1000_sw_init(struct e1000_adapter *adapter)
- {
- adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE;
- adapter->num_tx_queues = 1;
- adapter->num_rx_queues = 1;
- if (e1000_alloc_queues(adapter)) {
- e_err(probe, "Unable to allocate memory for queues\n");
- return -ENOMEM;
- }
- /* Explicitly disable IRQ since the NIC can be in any state. */
- e1000_irq_disable(adapter);
- spin_lock_init(&adapter->stats_lock);
- set_bit(__E1000_DOWN, &adapter->flags);
- return 0;
- }
- /**
- * e1000_alloc_queues - Allocate memory for all rings
- * @adapter: board private structure to initialize
- *
- * We allocate one ring per queue at run-time since we don't know the
- * number of queues at compile-time.
- **/
- static int __devinit e1000_alloc_queues(struct e1000_adapter *adapter)
- {
- adapter->tx_ring = kcalloc(adapter->num_tx_queues,
- sizeof(struct e1000_tx_ring), GFP_KERNEL);
- if (!adapter->tx_ring)
- return -ENOMEM;
- adapter->rx_ring = kcalloc(adapter->num_rx_queues,
- sizeof(struct e1000_rx_ring), GFP_KERNEL);
- if (!adapter->rx_ring) {
- kfree(adapter->tx_ring);
- return -ENOMEM;
- }
- return E1000_SUCCESS;
- }
- /**
- * e1000_open - Called when a network interface is made active
- * @netdev: network interface device structure
- *
- * Returns 0 on success, negative value on failure
- *
- * The open entry point is called when a network interface is made
- * active by the system (IFF_UP). At this point all resources needed
- * for transmit and receive operations are allocated, the interrupt
- * handler is registered with the OS, the watchdog timer is started,
- * and the stack is notified that the interface is ready.
- **/
- static int e1000_open(struct net_device *netdev)
- {
- struct e1000_adapter *adapter = netdev_priv(netdev);
- struct e1000_hw *hw = &adapter->hw;
- int err;
- /* disallow open during test */
- if (test_bit(__E1000_TESTING, &adapter->flags))
- return -EBUSY;
- netif_carrier_off(netdev);
- /* allocate transmit descriptors */
- err = e1000_setup_all_tx_resources(adapter);
- if (err)
- goto err_setup_tx;
- /* allocate receive descriptors */
- err = e1000_setup_all_rx_resources(adapter);
- if (err)
- goto err_setup_rx;
- e1000_power_up_phy(adapter);
- adapter->mng_vlan_id = E1000_MNG_VLAN_NONE;
- if ((hw->mng_cookie.status &
- E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT)) {
- e1000_update_mng_vlan(adapter);
- }
- /* before we allocate an interrupt, we must be ready to handle it.
- * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt
- * as soon as we call pci_request_irq, so we have to setup our
- * clean_rx handler before we do so. */
- e1000_configure(adapter);
- err = e1000_request_irq(adapter);
- if (err)
- goto err_req_irq;
- /* From here on the code is the same as e1000_up() */
- clear_bit(__E1000_DOWN, &adapter->flags);
- napi_enable(&adapter->napi);
- e1000_irq_enable(adapter);
- netif_start_queue(netdev);
- /* fire a link status change interrupt to start the watchdog */
- ew32(ICS, E1000_ICS_LSC);
- return E1000_SUCCESS;
- err_req_irq:
- e1000_power_down_phy(adapter);
- e1000_free_all_rx_resources(adapter);
- err_setup_rx:
- e1000_free_all_tx_resources(adapter);
- err_setup_tx:
- e1000_reset(adapter);
- return err;
- }
- /**
- * e1000_close - Disables a network interface
- * @netdev: network interface device structure
- *
- * Returns 0, this is not allowed to fail
- *
- * The close entry point is called when an interface is de-activated
- * by the OS. The hardware is still under the drivers control, but
- * needs to be disabled. A global MAC reset is issued to stop the
- * hardware, and all transmit and receive resources are freed.
- **/
- static int e1000_close(struct net_device *netdev)
- {
- struct e1000_adapter *adapter = netdev_priv(netdev);
- struct e1000_hw *hw = &adapter->hw;
- WARN_ON(test_bit(__E1000_RESETTING, &adapter->flags));
- e1000_down(adapter);
- e1000_power_down_phy(adapter);
- e1000_free_irq(adapter);
- e1000_free_all_tx_resources(adapter);
- e1000_free_all_rx_resources(adapter);
- /* kill manageability vlan ID if supported, but not if a vlan with
- * the same ID is registered on the host OS (let 8021q kill it) */
- if ((hw->mng_cookie.status &
- E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) &&
- !(adapter->vlgrp &&
- vlan_group_get_device(adapter->vlgrp, adapter->mng_vlan_id))) {
- e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id);
- }
- return 0;
- }
- /**
- * e1000_check_64k_bound - check that memory doesn't cross 64kB boundary
- * @adapter: address of board private structure
- * @start: address of beginning of memory
- * @len: length of memory
- **/
- static bool e1000_check_64k_bound(struct e1000_adapter *adapter, void *start,
- unsigned long len)
- {
- struct e1000_hw *hw = &adapter->hw;
- unsigned long begin = (unsigned long)start;
- unsigned long end = begin + len;
- /* First rev 82545 and 82546 need to not allow any memory
- * write location to cross 64k boundary due to errata 23 */
- if (hw->mac_type == e1000_82545 ||
- hw->mac_type == e1000_ce4100 ||
- hw->mac_type == e1000_82546) {
- return ((begin ^ (end - 1)) >> 16) != 0 ? false : true;
- }
- return true;
- }
- /**
- * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
- * @adapter: board private structure
- * @txdr: tx descriptor ring (for a specific queue) to setup
- *
- * Return 0 on success, negative on failure
- **/
- static int e1000_setup_tx_resources(struct e1000_adapter *adapter,
- struct e1000_tx_ring *txdr)
- {
- struct pci_dev *pdev = adapter->pdev;
- int size;
- size = sizeof(struct e1000_buffer) * txdr->count;
- txdr->buffer_info = vzalloc(size);
- if (!txdr->buffer_info) {
- e_err(probe, "Unable to allocate memory for the Tx descriptor "
- "ring\n");
- return -ENOMEM;
- }
- /* round up to nearest 4K */
- txdr->size = txdr->count * sizeof(struct e1000_tx_desc);
- txdr->size = ALIGN(txdr->size, 4096);
- txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size, &txdr->dma,
- GFP_KERNEL);
- if (!txdr->desc) {
- setup_tx_desc_die:
- vfree(txdr->buffer_info);
- e_err(probe, "Unable to allocate memory for the Tx descriptor "
- "ring\n");
- return -ENOMEM;
- }
- /* Fix for errata 23, can't cross 64kB boundary */
- if (!e1000_check_64k_bound(adapter, txdr->desc, txdr->size)) {
- void *olddesc = txdr->desc;
- dma_addr_t olddma = txdr->dma;
- e_err(tx_err, "txdr align check failed: %u bytes at %p\n",
- txdr->size, txdr->desc);
- /* Try again, without freeing the previous */
- txdr->desc = dma_alloc_coherent(&pdev->dev, txdr->size,
- &txdr->dma, GFP_KERNEL);
- /* Failed allocation, critical failure */
- if (!txdr->desc) {
- dma_free_coherent(&pdev->dev, txdr->size, olddesc,
- olddma);
- goto setup_tx_desc_die;
- }
- if (!e1000_check_64k_bound(adapter, txdr->desc, txdr->size)) {
- /* give up */
- dma_free_coherent(&pdev->dev, txdr->size, txdr->desc,
- txdr->dma);
- dma_free_coherent(&pdev->dev, txdr->size, olddesc,
- olddma);
- e_err(probe, "Unable to allocate aligned memory "
- "for the transmit descriptor ring\n");
- vfree(txdr->buffer_info);
- return -ENOMEM;
- } else {
- /* Free old allocation, new allocation was successful */
- dma_free_coherent(&pdev->dev, txdr->size, olddesc,
- olddma);
- }
- }
- memset(txdr->desc, 0, txdr->size);
- txdr->next_to_use = 0;
- txdr->next_to_clean = 0;
- return 0;
- }
- /**
- * e1000_setup_all_tx_resources - wrapper to allocate Tx resources
- * (Descriptors) for all queues
- * @adapter: board private structure
- *
- * Return 0 on success, negative on failure
- **/
- int e1000_setup_all_tx_resources(struct e1000_adapter *adapter)
- {
- int i, err = 0;
- for (i = 0; i < adapter->num_tx_queues; i++) {
- err = e1000_setup_tx_resources(adapter, &adapter->tx_ring[i]);
- if (err) {
- e_err(probe, "Allocation for Tx Queue %u failed\n", i);
- for (i-- ; i >= 0; i--)
- e1000_free_tx_resources(adapter,
- &adapter->tx_ring[i]);
- break;
- }
- }
- return err;
- }
- /**
- * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
- * @adapter: board private structure
- *
- * Configure the Tx unit of the MAC after a reset.
- **/
- static void e1000_configure_tx(struct e1000_adapter *adapter)
- {
- u64 tdba;
- struct e1000_hw *hw = &adapter->hw;
- u32 tdlen, tctl, tipg;
- u32 ipgr1, ipgr2;
- /* Setup the HW Tx Head and Tail descriptor pointers */
- switch (adapter->num_tx_queues) {
- case 1:
- default:
- tdba = adapter->tx_ring[0].dma;
- tdlen = adapter->tx_ring[0].count *
- sizeof(struct e1000_tx_desc);
- ew32(TDLEN, tdlen);
- ew32(TDBAH, (tdba >> 32));
- ew32(TDBAL, (tdba & 0x00000000ffffffffULL));
- ew32(TDT, 0);
- ew32(TDH, 0);
- adapter->tx_ring[0].tdh = ((hw->mac_type >= e1000_82543) ? E1000_TDH : E1000_82542_TDH);
- adapter->tx_ring[0].tdt = ((hw->mac_type >= e1000_82543) ? E1000_TDT : E1000_82542_TDT);
- break;
- }
- /* Set the default values for the Tx Inter Packet Gap timer */
- if ((hw->media_type == e1000_media_type_fiber ||
- hw->media_type == e1000_media_type_internal_serdes))
- tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
- else
- tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
- switch (hw->mac_type) {
- case e1000_82542_rev2_0:
- case e1000_82542_rev2_1:
- tipg = DEFAULT_82542_TIPG_IPGT;
- ipgr1 = DEFAULT_82542_TIPG_IPGR1;
- ipgr2 = DEFAULT_82542_TIPG_IPGR2;
- break;
- default:
- ipgr1 = DEFAULT_82543_TIPG_IPGR1;
- ipgr2 = DEFAULT_82543_TIPG_IPGR2;
- break;
- }
- tipg |= ipgr1 << E1000_TIPG_IPGR1_SHIFT;
- tipg |= ipgr2 << E1000_TIPG_IPGR2_SHIFT;
- ew32(TIPG, tipg);
- /* Set the Tx Interrupt Delay register */
- ew32(TIDV, adapter->tx_int_delay);
- if (hw->mac_type >= e1000_82540)
- ew32(TADV, adapter->tx_abs_int_delay);
- /* Program the Transmit Control Register */
- tctl = er32(TCTL);
- tctl &= ~E1000_TCTL_CT;
- tctl |= E1000_TCTL_PSP | E1000_TCTL_RTLC |
- (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
- e1000_config_collision_dist(hw);
- /* Setup Transmit Descriptor Settings for eop descriptor */
- adapter->txd_cmd = E1000_TXD_CMD_EOP | E1000_TXD_CMD_IFCS;
- /* only set IDE if we are delaying interrupts using the timers */
- if (adapter->tx_int_delay)
- adapter->txd_cmd |= E1000_TXD_CMD_IDE;
- if (hw->mac_type < e1000_82543)
- adapter->txd_cmd |= E1000_TXD_CMD_RPS;
- else
- adapter->txd_cmd |= E1000_TXD_CMD_RS;
- /* Cache if we're 82544 running in PCI-X because we'll
- * need this to apply a workaround later in the send path. */
- if (hw->mac_type == e1000_82544 &&
- hw->bus_type == e1000_bus_type_pcix)
- adapter->pcix_82544 = 1;
- ew32(TCTL, tctl);
- }
- /**
- * e1000_setup_rx_resources - allocate Rx resources (Descriptors)
- * @adapter: board private structure
- * @rxdr: rx descriptor ring (for a specific queue) to setup
- *
- * Returns 0 on success, negative on failure
- **/
- static int e1000_setup_rx_resources(struct e1000_adapter *adapter,
- struct e1000_rx_ring *rxdr)
- {
- struct pci_dev *pdev = adapter->pdev;
- int size, desc_len;
- size = sizeof(struct e1000_buffer) * rxdr->count;
- rxdr->buffer_info = vzalloc(size);
- if (!rxdr->buffer_info) {
- e_err(probe, "Unable to allocate memory for the Rx descriptor "
- "ring\n");
- return -ENOMEM;
- }
- desc_len = sizeof(struct e1000_rx_desc);
- /* Round up to nearest 4K */
- rxdr->size = rxdr->count * desc_len;
- rxdr->size = ALIGN(rxdr->size, 4096);
- rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size, &rxdr->dma,
- GFP_KERNEL);
- if (!rxdr->desc) {
- e_err(probe, "Unable to allocate memory for the Rx descriptor "
- "ring\n");
- setup_rx_desc_die:
- vfree(rxdr->buffer_info);
- return -ENOMEM;
- }
- /* Fix for errata 23, can't cross 64kB boundary */
- if (!e1000_check_64k_bound(adapter, rxdr->desc, rxdr->size)) {
- void *olddesc = rxdr->desc;
- dma_addr_t olddma = rxdr->dma;
- e_err(rx_err, "rxdr align check failed: %u bytes at %p\n",
- rxdr->size, rxdr->desc);
- /* Try again, without freeing the previous */
- rxdr->desc = dma_alloc_coherent(&pdev->dev, rxdr->size,
- &rxdr->dma, GFP_KERNEL);
- /* Failed allocation, critical failure */
- if (!rxdr->desc) {
- dma_free_coherent(&pdev->dev, rxdr->size, olddesc,
- olddma);
- e_err(probe, "Unable to allocate memory for the Rx "
- "descriptor ring\n");
- goto setup_rx_desc_die;
- }
- if (!e1000_check_64k_bound(adapter, rxdr->desc, rxdr->size)) {
- /* give up */
- dma_free_coherent(&pdev->dev, rxdr->size, rxdr->desc,
- rxdr->dma);
- dma_free_coherent(&pdev->dev, rxdr->size, olddesc,
- olddm…