21 |
21 |
22 Contact Information: |
22 Contact Information: |
23 Linux NICS <linux.nics@intel.com> |
23 Linux NICS <linux.nics@intel.com> |
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> |
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> |
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
|
26 |
|
27 vim: noexpandtab |
26 |
28 |
27 *******************************************************************************/ |
29 *******************************************************************************/ |
28 |
30 |
29 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
31 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
30 |
32 |
982 ecdev_receive(adapter->ecdev, skb->data, length); |
984 ecdev_receive(adapter->ecdev, skb->data, length); |
983 adapter->ec_watchdog_jiffies = jiffies; |
985 adapter->ec_watchdog_jiffies = jiffies; |
984 } else { |
986 } else { |
985 e1000_receive_skb(adapter, netdev, skb, staterr, |
987 e1000_receive_skb(adapter, netdev, skb, staterr, |
986 rx_desc->wb.upper.vlan); |
988 rx_desc->wb.upper.vlan); |
987 } |
989 } |
988 |
990 |
989 next_desc: |
991 next_desc: |
990 rx_desc->wb.upper.status_error &= cpu_to_le32(~0xFF); |
992 rx_desc->wb.upper.status_error &= cpu_to_le32(~0xFF); |
991 |
993 |
992 /* return some buffers to hardware, one at a time is too slow */ |
994 /* return some buffers to hardware, one at a time is too slow */ |
1063 adapter->tx_hang_recheck = true; |
1065 adapter->tx_hang_recheck = true; |
1064 return; |
1066 return; |
1065 } |
1067 } |
1066 /* Real hang detected */ |
1068 /* Real hang detected */ |
1067 adapter->tx_hang_recheck = false; |
1069 adapter->tx_hang_recheck = false; |
1068 netif_stop_queue(netdev); |
1070 if (!adapter->ecdev) { |
|
1071 netif_stop_queue(netdev); |
|
1072 } |
1069 |
1073 |
1070 e1e_rphy(hw, PHY_STATUS, &phy_status); |
1074 e1e_rphy(hw, PHY_STATUS, &phy_status); |
1071 e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status); |
1075 e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status); |
1072 e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status); |
1076 e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status); |
1073 |
1077 |
1662 struct net_device *netdev = data; |
1666 struct net_device *netdev = data; |
1663 struct e1000_adapter *adapter = netdev_priv(netdev); |
1667 struct e1000_adapter *adapter = netdev_priv(netdev); |
1664 struct e1000_hw *hw = &adapter->hw; |
1668 struct e1000_hw *hw = &adapter->hw; |
1665 u32 icr = er32(ICR); |
1669 u32 icr = er32(ICR); |
1666 |
1670 |
1667 if (adapter->ecdev) { |
1671 if (adapter->ecdev) { |
1668 int ec_work_done = 0; |
1672 int ec_work_done = 0; |
1669 adapter->clean_rx(adapter, &ec_work_done, 100); |
1673 adapter->clean_rx(adapter, &ec_work_done, 100); |
1670 e1000_clean_tx_irq(adapter); |
1674 e1000_clean_tx_irq(adapter); |
1671 return IRQ_HANDLED; |
1675 return IRQ_HANDLED; |
1672 } |
1676 } |
1673 /* |
1677 /* |
1674 * read ICR disables interrupts using IAM |
1678 * read ICR disables interrupts using IAM |
1675 */ |
1679 */ |
1766 /* guard against interrupt when we're going down */ |
1770 /* guard against interrupt when we're going down */ |
1767 if (!test_bit(__E1000_DOWN, &adapter->state)) |
1771 if (!test_bit(__E1000_DOWN, &adapter->state)) |
1768 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
1772 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
1769 } |
1773 } |
1770 |
1774 |
1771 if (adapter->ecdev) { |
1775 if (adapter->ecdev) { |
1772 int ec_work_done = 0; |
1776 int ec_work_done = 0; |
1773 adapter->clean_rx(adapter, &ec_work_done, 100); |
1777 adapter->clean_rx(adapter, &ec_work_done, 100); |
1774 e1000_clean_tx_irq(adapter); |
1778 e1000_clean_tx_irq(adapter); |
1775 return IRQ_HANDLED; |
1779 return IRQ_HANDLED; |
1776 } |
1780 } |
1777 |
1781 |
1778 if (napi_schedule_prep(&adapter->napi)) { |
1782 if (napi_schedule_prep(&adapter->napi)) { |
1779 adapter->total_tx_bytes = 0; |
1783 adapter->total_tx_bytes = 0; |
1849 writel(1000000000 / (adapter->rx_ring->itr_val * 256), |
1853 writel(1000000000 / (adapter->rx_ring->itr_val * 256), |
1850 adapter->hw.hw_addr + adapter->rx_ring->itr_register); |
1854 adapter->hw.hw_addr + adapter->rx_ring->itr_register); |
1851 adapter->rx_ring->set_itr = 0; |
1855 adapter->rx_ring->set_itr = 0; |
1852 } |
1856 } |
1853 |
1857 |
1854 if (adapter->ecdev) { |
1858 if (adapter->ecdev) { |
1855 int ec_work_done = 0; |
1859 int ec_work_done = 0; |
1856 adapter->clean_rx(adapter, &ec_work_done, 100); |
1860 adapter->clean_rx(adapter, &ec_work_done, 100); |
1857 } else { |
1861 } else { |
1858 if (napi_schedule_prep(&adapter->napi)) { |
1862 if (napi_schedule_prep(&adapter->napi)) { |
1859 adapter->total_rx_bytes = 0; |
1863 adapter->total_rx_bytes = 0; |
1860 adapter->total_rx_packets = 0; |
1864 adapter->total_rx_packets = 0; |
1861 __napi_schedule(&adapter->napi); |
1865 __napi_schedule(&adapter->napi); |
3521 clear_bit(__E1000_DOWN, &adapter->state); |
3525 clear_bit(__E1000_DOWN, &adapter->state); |
3522 |
3526 |
3523 if (!adapter->ecdev) { |
3527 if (!adapter->ecdev) { |
3524 napi_enable(&adapter->napi); |
3528 napi_enable(&adapter->napi); |
3525 } |
3529 } |
|
3530 |
3526 if (adapter->msix_entries) |
3531 if (adapter->msix_entries) |
3527 e1000_configure_msix(adapter); |
3532 e1000_configure_msix(adapter); |
|
3533 |
3528 if (!adapter->ecdev) { |
3534 if (!adapter->ecdev) { |
3529 e1000_irq_enable(adapter); |
3535 e1000_irq_enable(adapter); |
3530 |
3536 |
3531 netif_start_queue(adapter->netdev); |
3537 netif_start_queue(adapter->netdev); |
3532 |
3538 |
3533 /* fire a link change interrupt to start the watchdog */ |
3539 /* fire a link change interrupt to start the watchdog */ |
3534 if (adapter->msix_entries) |
3540 if (adapter->msix_entries) |
3535 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3541 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3536 else |
3542 else |
3573 rctl = er32(RCTL); |
3579 rctl = er32(RCTL); |
3574 if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
3580 if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
3575 ew32(RCTL, rctl & ~E1000_RCTL_EN); |
3581 ew32(RCTL, rctl & ~E1000_RCTL_EN); |
3576 /* flush and sleep below */ |
3582 /* flush and sleep below */ |
3577 |
3583 |
3578 if (!adapter->ecdev) |
3584 if (!adapter->ecdev) |
3579 netif_stop_queue(netdev); |
3585 netif_stop_queue(netdev); |
3580 |
3586 |
3581 /* disable transmits in the hardware */ |
3587 /* disable transmits in the hardware */ |
3582 tctl = er32(TCTL); |
3588 tctl = er32(TCTL); |
3583 tctl &= ~E1000_TCTL_EN; |
3589 tctl &= ~E1000_TCTL_EN; |
3869 |
3875 |
3870 if (!adapter->ecdev) { |
3876 if (!adapter->ecdev) { |
3871 napi_enable(&adapter->napi); |
3877 napi_enable(&adapter->napi); |
3872 |
3878 |
3873 e1000_irq_enable(adapter); |
3879 e1000_irq_enable(adapter); |
|
3880 } |
3874 |
3881 |
3875 adapter->tx_hang_recheck = false; |
3882 adapter->tx_hang_recheck = false; |
|
3883 |
|
3884 if (!adapter->ecdev) { |
3876 netif_start_queue(netdev); |
3885 netif_start_queue(netdev); |
3877 |
3886 } |
3878 adapter->idle_check = true; |
3887 |
3879 pm_runtime_put(&pdev->dev); |
3888 adapter->idle_check = true; |
3880 |
3889 pm_runtime_put(&pdev->dev); |
3881 /* fire a link status change interrupt to start the watchdog */ |
3890 |
3882 if (adapter->msix_entries) |
3891 /* fire a link status change interrupt to start the watchdog */ |
3883 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3892 if (adapter->msix_entries) |
3884 else |
3893 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3885 ew32(ICS, E1000_ICS_LSC); |
3894 else |
3886 } |
3895 ew32(ICS, E1000_ICS_LSC); |
3887 |
3896 |
3888 return 0; |
3897 return 0; |
3889 |
3898 |
3890 err_req_irq: |
3899 err_req_irq: |
3891 e1000e_release_hw_control(adapter); |
3900 e1000e_release_hw_control(adapter); |
4389 if ((e1000e_enable_tx_pkt_filtering(hw)) && |
4398 if ((e1000e_enable_tx_pkt_filtering(hw)) && |
4390 (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id)) |
4399 (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id)) |
4391 e1000_update_mng_vlan(adapter); |
4400 e1000_update_mng_vlan(adapter); |
4392 |
4401 |
4393 if (link) { |
4402 if (link) { |
4394 if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) |
4403 if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) |
4395 || (!adapter->ecdev && !netif_carrier_ok(netdev))) { |
4404 || (!adapter->ecdev && !netif_carrier_ok(netdev))) { |
4396 bool txb2b = 1; |
4405 bool txb2b = 1; |
4397 |
4406 |
4398 /* Cancel scheduled suspend requests. */ |
4407 /* Cancel scheduled suspend requests. */ |
4399 pm_runtime_resume(netdev->dev.parent); |
4408 pm_runtime_resume(netdev->dev.parent); |
4487 if (phy->ops.cfg_on_link_up) |
4496 if (phy->ops.cfg_on_link_up) |
4488 phy->ops.cfg_on_link_up(hw); |
4497 phy->ops.cfg_on_link_up(hw); |
4489 |
4498 |
4490 if (adapter->ecdev) |
4499 if (adapter->ecdev) |
4491 ecdev_set_link(adapter->ecdev, 1); |
4500 ecdev_set_link(adapter->ecdev, 1); |
4492 else |
4501 else |
4493 netif_carrier_on(netdev); |
4502 netif_carrier_on(netdev); |
4494 |
4503 |
4495 if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state)) |
4504 if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state)) |
4496 mod_timer(&adapter->phy_info_timer, |
4505 mod_timer(&adapter->phy_info_timer, |
4497 round_jiffies(jiffies + 2 * HZ)); |
4506 round_jiffies(jiffies + 2 * HZ)); |
4498 } |
4507 } |
4499 } else { |
4508 } else { |
4500 if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) |
4509 if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) |
4501 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
4510 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
4502 adapter->link_speed = 0; |
4511 adapter->link_speed = 0; |
4503 adapter->link_duplex = 0; |
4512 adapter->link_duplex = 0; |
4504 /* Link status message must follow this format */ |
4513 /* Link status message must follow this format */ |
4505 printk(KERN_INFO "e1000e: %s NIC Link is Down\n", |
4514 printk(KERN_INFO "e1000e: %s NIC Link is Down\n", |
4535 adapter->gotc_old = adapter->stats.gotc; |
4544 adapter->gotc_old = adapter->stats.gotc; |
4536 spin_unlock(&adapter->stats64_lock); |
4545 spin_unlock(&adapter->stats64_lock); |
4537 |
4546 |
4538 e1000e_update_adaptive(&adapter->hw); |
4547 e1000e_update_adaptive(&adapter->hw); |
4539 |
4548 |
4540 if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) |
4549 if (!adapter->ecdev && !netif_carrier_ok(netdev) && |
4541 || (!adapter->ecdev && (!netif_carrier_ok(netdev) && |
4550 (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) { |
4542 (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)))) { |
|
4543 /* |
4551 /* |
4544 * We've lost link, so the controller stops DMA, |
4552 * We've lost link, so the controller stops DMA, |
4545 * but we've got queued Tx work that's never going |
4553 * but we've got queued Tx work that's never going |
4546 * to get done, so reset controller to flush Tx. |
4554 * to get done, so reset controller to flush Tx. |
4547 * (Do the reset outside of interrupt context). |
4555 * (Do the reset outside of interrupt context). |
4941 } |
4949 } |
4942 |
4950 |
4943 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
4951 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
4944 { |
4952 { |
4945 struct e1000_adapter *adapter = netdev_priv(netdev); |
4953 struct e1000_adapter *adapter = netdev_priv(netdev); |
|
4954 |
|
4955 if (adapter->ecdev) { |
|
4956 return -EBUSY; |
|
4957 } |
4946 |
4958 |
4947 netif_stop_queue(netdev); |
4959 netif_stop_queue(netdev); |
4948 /* |
4960 /* |
4949 * Herbert's original patch had: |
4961 * Herbert's original patch had: |
4950 * smp_mb__after_netif_stop_queue(); |
4962 * smp_mb__after_netif_stop_queue(); |
5765 static void e1000_shutdown(struct pci_dev *pdev) |
5777 static void e1000_shutdown(struct pci_dev *pdev) |
5766 { |
5778 { |
5767 bool wake = false; |
5779 bool wake = false; |
5768 struct net_device *netdev = pci_get_drvdata(pdev); |
5780 struct net_device *netdev = pci_get_drvdata(pdev); |
5769 struct e1000_adapter *adapter = netdev_priv(netdev); |
5781 struct e1000_adapter *adapter = netdev_priv(netdev); |
5770 |
5782 |
5771 if (adapter->ecdev) |
5783 if (adapter->ecdev) |
5772 return; |
5784 return; |
5773 |
5785 |
5774 __e1000_shutdown(pdev, &wake, false); |
5786 __e1000_shutdown(pdev, &wake, false); |
5775 |
5787 |
6035 void ec_poll(struct net_device *netdev) |
6047 void ec_poll(struct net_device *netdev) |
6036 { |
6048 { |
6037 struct e1000_adapter *adapter = netdev_priv(netdev); |
6049 struct e1000_adapter *adapter = netdev_priv(netdev); |
6038 |
6050 |
6039 if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) { |
6051 if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) { |
6040 e1000_watchdog((unsigned long) adapter); |
6052 struct e1000_hw *hw = &adapter->hw; |
|
6053 hw->mac.get_link_status = true; |
|
6054 e1000_watchdog_task(&adapter->watchdog_task); |
6041 adapter->ec_watchdog_jiffies = jiffies; |
6055 adapter->ec_watchdog_jiffies = jiffies; |
6042 } |
6056 } |
6043 |
6057 |
6044 #ifdef CONFIG_PCI_MSI |
6058 #ifdef CONFIG_PCI_MSI |
6045 e1000_intr_msi(0,netdev); |
6059 e1000_intr_msi(0, netdev); |
6046 #else |
6060 #else |
6047 e1000_intr(0,netdev); |
6061 e1000_intr(0, netdev); |
6048 #endif |
6062 #endif |
6049 } |
6063 } |
6050 |
6064 |
6051 /** |
6065 /** |
6052 * e1000_probe - Device Initialization Routine |
6066 * e1000_probe - Device Initialization Routine |
6344 if (!(adapter->flags & FLAG_HAS_AMT)) |
6358 if (!(adapter->flags & FLAG_HAS_AMT)) |
6345 e1000e_get_hw_control(adapter); |
6359 e1000e_get_hw_control(adapter); |
6346 |
6360 |
6347 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
6361 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
6348 if (adapter->ecdev) { |
6362 if (adapter->ecdev) { |
6349 if (ecdev_open(adapter->ecdev)) { |
6363 err = ecdev_open(adapter->ecdev); |
|
6364 if (err) { |
6350 ecdev_withdraw(adapter->ecdev); |
6365 ecdev_withdraw(adapter->ecdev); |
6351 goto err_register; |
6366 goto err_register; |
6352 } |
6367 } |
|
6368 adapter->ec_watchdog_jiffies = jiffies; |
6353 } else { |
6369 } else { |
6354 strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1); |
6370 strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1); |
6355 err = register_netdev(netdev); |
6371 err = register_netdev(netdev); |
6356 if (err) |
6372 if (err) |
6357 goto err_register; |
6373 goto err_register; |