equal
deleted
inserted
replaced
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); |
3869 |
3873 |
3870 if (!adapter->ecdev) { |
3874 if (!adapter->ecdev) { |
3871 napi_enable(&adapter->napi); |
3875 napi_enable(&adapter->napi); |
3872 |
3876 |
3873 e1000_irq_enable(adapter); |
3877 e1000_irq_enable(adapter); |
|
3878 } |
3874 |
3879 |
3875 adapter->tx_hang_recheck = false; |
3880 adapter->tx_hang_recheck = false; |
|
3881 |
|
3882 if (!adapter->ecdev) { |
3876 netif_start_queue(netdev); |
3883 netif_start_queue(netdev); |
3877 |
3884 } |
3878 adapter->idle_check = true; |
3885 |
3879 pm_runtime_put(&pdev->dev); |
3886 adapter->idle_check = true; |
3880 |
3887 pm_runtime_put(&pdev->dev); |
3881 /* fire a link status change interrupt to start the watchdog */ |
3888 |
3882 if (adapter->msix_entries) |
3889 /* fire a link status change interrupt to start the watchdog */ |
3883 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3890 if (adapter->msix_entries) |
3884 else |
3891 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3885 ew32(ICS, E1000_ICS_LSC); |
3892 else |
3886 } |
3893 ew32(ICS, E1000_ICS_LSC); |
3887 |
3894 |
3888 return 0; |
3895 return 0; |
3889 |
3896 |
3890 err_req_irq: |
3897 err_req_irq: |
3891 e1000e_release_hw_control(adapter); |
3898 e1000e_release_hw_control(adapter); |