aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/netdev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r--drivers/net/e1000e/netdev.c150
1 files changed, 71 insertions, 79 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index b96532a38322..5f70c437fa41 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -26,6 +26,8 @@
26 26
27*******************************************************************************/ 27*******************************************************************************/
28 28
29#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
30
29#include <linux/module.h> 31#include <linux/module.h>
30#include <linux/types.h> 32#include <linux/types.h>
31#include <linux/init.h> 33#include <linux/init.h>
@@ -36,6 +38,7 @@
36#include <linux/netdevice.h> 38#include <linux/netdevice.h>
37#include <linux/tcp.h> 39#include <linux/tcp.h>
38#include <linux/ipv6.h> 40#include <linux/ipv6.h>
41#include <linux/slab.h>
39#include <net/checksum.h> 42#include <net/checksum.h>
40#include <net/ip6_checksum.h> 43#include <net/ip6_checksum.h>
41#include <linux/mii.h> 44#include <linux/mii.h>
@@ -661,6 +664,8 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)
661 i = 0; 664 i = 0;
662 } 665 }
663 666
667 if (i == tx_ring->next_to_use)
668 break;
664 eop = tx_ring->buffer_info[i].next_to_watch; 669 eop = tx_ring->buffer_info[i].next_to_watch;
665 eop_desc = E1000_TX_DESC(*tx_ring, eop); 670 eop_desc = E1000_TX_DESC(*tx_ring, eop);
666 } 671 }
@@ -2290,8 +2295,6 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)
2290 ew32(TCTL, tctl); 2295 ew32(TCTL, tctl);
2291 2296
2292 e1000e_config_collision_dist(hw); 2297 e1000e_config_collision_dist(hw);
2293
2294 adapter->tx_queue_len = adapter->netdev->tx_queue_len;
2295} 2298}
2296 2299
2297/** 2300/**
@@ -2565,7 +2568,7 @@ static void e1000_set_multi(struct net_device *netdev)
2565{ 2568{
2566 struct e1000_adapter *adapter = netdev_priv(netdev); 2569 struct e1000_adapter *adapter = netdev_priv(netdev);
2567 struct e1000_hw *hw = &adapter->hw; 2570 struct e1000_hw *hw = &adapter->hw;
2568 struct dev_mc_list *mc_ptr; 2571 struct netdev_hw_addr *ha;
2569 u8 *mta_list; 2572 u8 *mta_list;
2570 u32 rctl; 2573 u32 rctl;
2571 int i; 2574 int i;
@@ -2597,9 +2600,8 @@ static void e1000_set_multi(struct net_device *netdev)
2597 2600
2598 /* prepare a packed array of only addresses. */ 2601 /* prepare a packed array of only addresses. */
2599 i = 0; 2602 i = 0;
2600 netdev_for_each_mc_addr(mc_ptr, netdev) 2603 netdev_for_each_mc_addr(ha, netdev)
2601 memcpy(mta_list + (i++ * ETH_ALEN), 2604 memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN);
2602 mc_ptr->dmi_addr, ETH_ALEN);
2603 2605
2604 e1000_update_mc_addr_list(hw, mta_list, i); 2606 e1000_update_mc_addr_list(hw, mta_list, i);
2605 kfree(mta_list); 2607 kfree(mta_list);
@@ -2878,7 +2880,6 @@ void e1000e_down(struct e1000_adapter *adapter)
2878 del_timer_sync(&adapter->watchdog_timer); 2880 del_timer_sync(&adapter->watchdog_timer);
2879 del_timer_sync(&adapter->phy_info_timer); 2881 del_timer_sync(&adapter->phy_info_timer);
2880 2882
2881 netdev->tx_queue_len = adapter->tx_queue_len;
2882 netif_carrier_off(netdev); 2883 netif_carrier_off(netdev);
2883 adapter->link_speed = 0; 2884 adapter->link_speed = 0;
2884 adapter->link_duplex = 0; 2885 adapter->link_duplex = 0;
@@ -3611,21 +3612,15 @@ static void e1000_watchdog_task(struct work_struct *work)
3611 "link gets many collisions.\n"); 3612 "link gets many collisions.\n");
3612 } 3613 }
3613 3614
3614 /* 3615 /* adjust timeout factor according to speed/duplex */
3615 * tweak tx_queue_len according to speed/duplex
3616 * and adjust the timeout factor
3617 */
3618 netdev->tx_queue_len = adapter->tx_queue_len;
3619 adapter->tx_timeout_factor = 1; 3616 adapter->tx_timeout_factor = 1;
3620 switch (adapter->link_speed) { 3617 switch (adapter->link_speed) {
3621 case SPEED_10: 3618 case SPEED_10:
3622 txb2b = 0; 3619 txb2b = 0;
3623 netdev->tx_queue_len = 10;
3624 adapter->tx_timeout_factor = 16; 3620 adapter->tx_timeout_factor = 16;
3625 break; 3621 break;
3626 case SPEED_100: 3622 case SPEED_100:
3627 txb2b = 0; 3623 txb2b = 0;
3628 netdev->tx_queue_len = 100;
3629 adapter->tx_timeout_factor = 10; 3624 adapter->tx_timeout_factor = 10;
3630 break; 3625 break;
3631 } 3626 }
@@ -4137,7 +4132,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
4137 unsigned int max_per_txd = E1000_MAX_PER_TXD; 4132 unsigned int max_per_txd = E1000_MAX_PER_TXD;
4138 unsigned int max_txd_pwr = E1000_MAX_TXD_PWR; 4133 unsigned int max_txd_pwr = E1000_MAX_TXD_PWR;
4139 unsigned int tx_flags = 0; 4134 unsigned int tx_flags = 0;
4140 unsigned int len = skb->len - skb->data_len; 4135 unsigned int len = skb_headlen(skb);
4141 unsigned int nr_frags; 4136 unsigned int nr_frags;
4142 unsigned int mss; 4137 unsigned int mss;
4143 int count = 0; 4138 int count = 0;
@@ -4187,7 +4182,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
4187 dev_kfree_skb_any(skb); 4182 dev_kfree_skb_any(skb);
4188 return NETDEV_TX_OK; 4183 return NETDEV_TX_OK;
4189 } 4184 }
4190 len = skb->len - skb->data_len; 4185 len = skb_headlen(skb);
4191 } 4186 }
4192 } 4187 }
4193 4188
@@ -4664,58 +4659,12 @@ static void e1000e_disable_l1aspm(struct pci_dev *pdev)
4664 } 4659 }
4665} 4660}
4666 4661
4667#ifdef CONFIG_PM 4662#ifdef CONFIG_PM_OPS
4668static bool e1000e_pm_ready(struct e1000_adapter *adapter) 4663static bool e1000e_pm_ready(struct e1000_adapter *adapter)
4669{ 4664{
4670 return !!adapter->tx_ring->buffer_info; 4665 return !!adapter->tx_ring->buffer_info;
4671} 4666}
4672 4667
4673static int e1000_idle(struct device *dev)
4674{
4675 struct pci_dev *pdev = to_pci_dev(dev);
4676 struct net_device *netdev = pci_get_drvdata(pdev);
4677 struct e1000_adapter *adapter = netdev_priv(netdev);
4678
4679 if (!e1000e_pm_ready(adapter))
4680 return 0;
4681
4682 if (adapter->idle_check) {
4683 adapter->idle_check = false;
4684 if (!e1000e_has_link(adapter))
4685 pm_schedule_suspend(dev, MSEC_PER_SEC);
4686 }
4687
4688 return -EBUSY;
4689}
4690
4691static int e1000_suspend(struct device *dev)
4692{
4693 struct pci_dev *pdev = to_pci_dev(dev);
4694 int retval;
4695 bool wake;
4696
4697 retval = __e1000_shutdown(pdev, &wake, false);
4698 if (!retval)
4699 e1000_complete_shutdown(pdev, true, wake);
4700
4701 return retval;
4702}
4703
4704static int e1000_runtime_suspend(struct device *dev)
4705{
4706 struct pci_dev *pdev = to_pci_dev(dev);
4707 struct net_device *netdev = pci_get_drvdata(pdev);
4708 struct e1000_adapter *adapter = netdev_priv(netdev);
4709
4710 if (e1000e_pm_ready(adapter)) {
4711 bool wake;
4712
4713 __e1000_shutdown(pdev, &wake, true);
4714 }
4715
4716 return 0;
4717}
4718
4719static int __e1000_resume(struct pci_dev *pdev) 4668static int __e1000_resume(struct pci_dev *pdev)
4720{ 4669{
4721 struct net_device *netdev = pci_get_drvdata(pdev); 4670 struct net_device *netdev = pci_get_drvdata(pdev);
@@ -4783,6 +4732,20 @@ static int __e1000_resume(struct pci_dev *pdev)
4783 return 0; 4732 return 0;
4784} 4733}
4785 4734
4735#ifdef CONFIG_PM_SLEEP
4736static int e1000_suspend(struct device *dev)
4737{
4738 struct pci_dev *pdev = to_pci_dev(dev);
4739 int retval;
4740 bool wake;
4741
4742 retval = __e1000_shutdown(pdev, &wake, false);
4743 if (!retval)
4744 e1000_complete_shutdown(pdev, true, wake);
4745
4746 return retval;
4747}
4748
4786static int e1000_resume(struct device *dev) 4749static int e1000_resume(struct device *dev)
4787{ 4750{
4788 struct pci_dev *pdev = to_pci_dev(dev); 4751 struct pci_dev *pdev = to_pci_dev(dev);
@@ -4794,6 +4757,41 @@ static int e1000_resume(struct device *dev)
4794 4757
4795 return __e1000_resume(pdev); 4758 return __e1000_resume(pdev);
4796} 4759}
4760#endif /* CONFIG_PM_SLEEP */
4761
4762#ifdef CONFIG_PM_RUNTIME
4763static int e1000_runtime_suspend(struct device *dev)
4764{
4765 struct pci_dev *pdev = to_pci_dev(dev);
4766 struct net_device *netdev = pci_get_drvdata(pdev);
4767 struct e1000_adapter *adapter = netdev_priv(netdev);
4768
4769 if (e1000e_pm_ready(adapter)) {
4770 bool wake;
4771
4772 __e1000_shutdown(pdev, &wake, true);
4773 }
4774
4775 return 0;
4776}
4777
4778static int e1000_idle(struct device *dev)
4779{
4780 struct pci_dev *pdev = to_pci_dev(dev);
4781 struct net_device *netdev = pci_get_drvdata(pdev);
4782 struct e1000_adapter *adapter = netdev_priv(netdev);
4783
4784 if (!e1000e_pm_ready(adapter))
4785 return 0;
4786
4787 if (adapter->idle_check) {
4788 adapter->idle_check = false;
4789 if (!e1000e_has_link(adapter))
4790 pm_schedule_suspend(dev, MSEC_PER_SEC);
4791 }
4792
4793 return -EBUSY;
4794}
4797 4795
4798static int e1000_runtime_resume(struct device *dev) 4796static int e1000_runtime_resume(struct device *dev)
4799{ 4797{
@@ -4807,7 +4805,8 @@ static int e1000_runtime_resume(struct device *dev)
4807 adapter->idle_check = !dev->power.runtime_auto; 4805 adapter->idle_check = !dev->power.runtime_auto;
4808 return __e1000_resume(pdev); 4806 return __e1000_resume(pdev);
4809} 4807}
4810#endif 4808#endif /* CONFIG_PM_RUNTIME */
4809#endif /* CONFIG_PM_OPS */
4811 4810
4812static void e1000_shutdown(struct pci_dev *pdev) 4811static void e1000_shutdown(struct pci_dev *pdev)
4813{ 4812{
@@ -5475,17 +5474,11 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
5475}; 5474};
5476MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); 5475MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
5477 5476
5478#ifdef CONFIG_PM 5477#ifdef CONFIG_PM_OPS
5479static const struct dev_pm_ops e1000_pm_ops = { 5478static const struct dev_pm_ops e1000_pm_ops = {
5480 .suspend = e1000_suspend, 5479 SET_SYSTEM_SLEEP_PM_OPS(e1000_suspend, e1000_resume)
5481 .resume = e1000_resume, 5480 SET_RUNTIME_PM_OPS(e1000_runtime_suspend,
5482 .freeze = e1000_suspend, 5481 e1000_runtime_resume, e1000_idle)
5483 .thaw = e1000_resume,
5484 .poweroff = e1000_suspend,
5485 .restore = e1000_resume,
5486 .runtime_suspend = e1000_runtime_suspend,
5487 .runtime_resume = e1000_runtime_resume,
5488 .runtime_idle = e1000_idle,
5489}; 5482};
5490#endif 5483#endif
5491 5484
@@ -5495,7 +5488,7 @@ static struct pci_driver e1000_driver = {
5495 .id_table = e1000_pci_tbl, 5488 .id_table = e1000_pci_tbl,
5496 .probe = e1000_probe, 5489 .probe = e1000_probe,
5497 .remove = __devexit_p(e1000_remove), 5490 .remove = __devexit_p(e1000_remove),
5498#ifdef CONFIG_PM 5491#ifdef CONFIG_PM_OPS
5499 .driver.pm = &e1000_pm_ops, 5492 .driver.pm = &e1000_pm_ops,
5500#endif 5493#endif
5501 .shutdown = e1000_shutdown, 5494 .shutdown = e1000_shutdown,
@@ -5511,10 +5504,9 @@ static struct pci_driver e1000_driver = {
5511static int __init e1000_init_module(void) 5504static int __init e1000_init_module(void)
5512{ 5505{
5513 int ret; 5506 int ret;
5514 printk(KERN_INFO "%s: Intel(R) PRO/1000 Network Driver - %s\n", 5507 pr_info("Intel(R) PRO/1000 Network Driver - %s\n",
5515 e1000e_driver_name, e1000e_driver_version); 5508 e1000e_driver_version);
5516 printk(KERN_INFO "%s: Copyright (c) 1999 - 2009 Intel Corporation.\n", 5509 pr_info("Copyright (c) 1999 - 2009 Intel Corporation.\n");
5517 e1000e_driver_name);
5518 ret = pci_register_driver(&e1000_driver); 5510 ret = pci_register_driver(&e1000_driver);
5519 5511
5520 return ret; 5512 return ret;