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 |
1530 struct net_device *netdev = data; |
1532 struct net_device *netdev = data; |
1531 struct e1000_adapter *adapter = netdev_priv(netdev); |
1533 struct e1000_adapter *adapter = netdev_priv(netdev); |
1532 struct e1000_hw *hw = &adapter->hw; |
1534 struct e1000_hw *hw = &adapter->hw; |
1533 u32 icr = er32(ICR); |
1535 u32 icr = er32(ICR); |
1534 |
1536 |
1535 if (adapter->ecdev) { |
1537 if (adapter->ecdev) { |
1536 int ec_work_done = 0; |
1538 int ec_work_done = 0; |
1537 adapter->clean_rx(adapter, &ec_work_done, 100); |
1539 adapter->clean_rx(adapter, &ec_work_done, 100); |
1538 e1000_clean_tx_irq(adapter); |
1540 e1000_clean_tx_irq(adapter); |
1539 return IRQ_HANDLED; |
1541 return IRQ_HANDLED; |
1540 } |
1542 } |
1541 /* |
1543 /* |
1542 * read ICR disables interrupts using IAM |
1544 * read ICR disables interrupts using IAM |
1543 */ |
1545 */ |
1634 /* guard against interrupt when we're going down */ |
1636 /* guard against interrupt when we're going down */ |
1635 if (!test_bit(__E1000_DOWN, &adapter->state)) |
1637 if (!test_bit(__E1000_DOWN, &adapter->state)) |
1636 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
1638 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
1637 } |
1639 } |
1638 |
1640 |
1639 if (adapter->ecdev) { |
1641 if (adapter->ecdev) { |
1640 int ec_work_done = 0; |
1642 int ec_work_done = 0; |
1641 adapter->clean_rx(adapter, &ec_work_done, 100); |
1643 adapter->clean_rx(adapter, &ec_work_done, 100); |
1642 e1000_clean_tx_irq(adapter); |
1644 e1000_clean_tx_irq(adapter); |
1643 return IRQ_HANDLED; |
1645 return IRQ_HANDLED; |
1644 } |
1646 } |
1645 |
1647 |
1646 if (napi_schedule_prep(&adapter->napi)) { |
1648 if (napi_schedule_prep(&adapter->napi)) { |
1647 adapter->total_tx_bytes = 0; |
1649 adapter->total_tx_bytes = 0; |
1717 writel(1000000000 / (adapter->rx_ring->itr_val * 256), |
1719 writel(1000000000 / (adapter->rx_ring->itr_val * 256), |
1718 adapter->hw.hw_addr + adapter->rx_ring->itr_register); |
1720 adapter->hw.hw_addr + adapter->rx_ring->itr_register); |
1719 adapter->rx_ring->set_itr = 0; |
1721 adapter->rx_ring->set_itr = 0; |
1720 } |
1722 } |
1721 |
1723 |
1722 if (adapter->ecdev) { |
1724 if (adapter->ecdev) { |
1723 int ec_work_done = 0; |
1725 int ec_work_done = 0; |
1724 adapter->clean_rx(adapter, &ec_work_done, 100); |
1726 adapter->clean_rx(adapter, &ec_work_done, 100); |
1725 } else { |
1727 } else { |
1726 if (napi_schedule_prep(&adapter->napi)) { |
1728 if (napi_schedule_prep(&adapter->napi)) { |
1727 adapter->total_rx_bytes = 0; |
1729 adapter->total_rx_bytes = 0; |
1728 adapter->total_rx_packets = 0; |
1730 adapter->total_rx_packets = 0; |
1729 __napi_schedule(&adapter->napi); |
1731 __napi_schedule(&adapter->napi); |
3268 |
3270 |
3269 clear_bit(__E1000_DOWN, &adapter->state); |
3271 clear_bit(__E1000_DOWN, &adapter->state); |
3270 |
3272 |
3271 if (!adapter->ecdev) { |
3273 if (!adapter->ecdev) { |
3272 napi_enable(&adapter->napi); |
3274 napi_enable(&adapter->napi); |
3273 } |
3275 } |
3274 |
3276 |
3275 if (adapter->msix_entries) |
3277 if (adapter->msix_entries) |
3276 e1000_configure_msix(adapter); |
3278 e1000_configure_msix(adapter); |
3277 if (!adapter->ecdev) { |
3279 if (!adapter->ecdev) { |
3278 e1000_irq_enable(adapter); |
3280 e1000_irq_enable(adapter); |
3279 |
3281 |
3280 netif_wake_queue(adapter->netdev); |
3282 netif_wake_queue(adapter->netdev); |
3281 |
3283 |
3282 /* fire a link change interrupt to start the watchdog */ |
3284 /* fire a link change interrupt to start the watchdog */ |
3283 if (adapter->msix_entries) |
3285 if (adapter->msix_entries) |
3284 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3286 ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); |
3285 else |
3287 else |
3286 ew32(ICS, E1000_ICS_LSC); |
3288 ew32(ICS, E1000_ICS_LSC); |
3287 } |
3289 } |
3288 |
3290 |
3289 return 0; |
3291 return 0; |
3290 } |
3292 } |
3291 |
3293 |
3607 } |
3609 } |
3608 |
3610 |
3609 /* From here on the code is the same as e1000e_up() */ |
3611 /* From here on the code is the same as e1000e_up() */ |
3610 clear_bit(__E1000_DOWN, &adapter->state); |
3612 clear_bit(__E1000_DOWN, &adapter->state); |
3611 |
3613 |
3612 napi_enable(&adapter->napi); |
3614 if (!adapter->ecdev) { |
3613 |
3615 napi_enable(&adapter->napi); |
3614 e1000_irq_enable(adapter); |
3616 |
3615 |
3617 e1000_irq_enable(adapter); |
3616 netif_start_queue(netdev); |
3618 |
|
3619 netif_start_queue(netdev); |
|
3620 } |
3617 |
3621 |
3618 adapter->idle_check = true; |
3622 adapter->idle_check = true; |
3619 pm_runtime_put(&pdev->dev); |
3623 pm_runtime_put(&pdev->dev); |
3620 |
3624 |
3621 /* fire a link status change interrupt to start the watchdog */ |
3625 /* fire a link status change interrupt to start the watchdog */ |
4029 u32 link, tctl; |
4033 u32 link, tctl; |
4030 int tx_pending = 0; |
4034 int tx_pending = 0; |
4031 |
4035 |
4032 link = e1000e_has_link(adapter); |
4036 link = e1000e_has_link(adapter); |
4033 if ((adapter->ecdev && (ecdev_get_link(adapter->ecdev)) && link) |
4037 if ((adapter->ecdev && (ecdev_get_link(adapter->ecdev)) && link) |
4034 || (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)) { |
4038 || (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)) { |
4035 /* Cancel scheduled suspend requests. */ |
4039 /* Cancel scheduled suspend requests. */ |
4036 pm_runtime_resume(netdev->dev.parent); |
4040 pm_runtime_resume(netdev->dev.parent); |
4037 |
4041 |
4038 e1000e_enable_receives(adapter); |
4042 e1000e_enable_receives(adapter); |
4039 goto link_up; |
4043 goto link_up; |
5279 int retval; |
5283 int retval; |
5280 bool wake; |
5284 bool wake; |
5281 struct net_device *netdev = pci_get_drvdata(pdev); |
5285 struct net_device *netdev = pci_get_drvdata(pdev); |
5282 struct e1000_adapter *adapter = netdev_priv(netdev); |
5286 struct e1000_adapter *adapter = netdev_priv(netdev); |
5283 |
5287 |
5284 if (adapter->ecdev) { |
5288 if (adapter->ecdev) { |
5285 return -EBUSY; |
5289 return -EBUSY; |
5286 } |
5290 } |
5287 |
5291 |
5288 retval = __e1000_shutdown(pdev, &wake, false); |
5292 retval = __e1000_shutdown(pdev, &wake, false); |
5289 if (!retval) |
5293 if (!retval) |
5290 e1000_complete_shutdown(pdev, true, wake); |
5294 e1000_complete_shutdown(pdev, true, wake); |
5291 |
5295 |
5296 { |
5300 { |
5297 struct pci_dev *pdev = to_pci_dev(dev); |
5301 struct pci_dev *pdev = to_pci_dev(dev); |
5298 struct net_device *netdev = pci_get_drvdata(pdev); |
5302 struct net_device *netdev = pci_get_drvdata(pdev); |
5299 struct e1000_adapter *adapter = netdev_priv(netdev); |
5303 struct e1000_adapter *adapter = netdev_priv(netdev); |
5300 |
5304 |
5301 if (adapter->ecdev) { |
5305 if (adapter->ecdev) { |
5302 return -EBUSY; |
5306 return -EBUSY; |
5303 } |
5307 } |
5304 |
5308 |
5305 if (e1000e_pm_ready(adapter)) |
5309 if (e1000e_pm_ready(adapter)) |
5306 adapter->idle_check = true; |
5310 adapter->idle_check = true; |
5307 |
5311 |
5308 return __e1000_resume(pdev); |
5312 return __e1000_resume(pdev); |