--- a/devices/e1000e/netdev-2.6.37-ethercat.c Thu Sep 06 14:21:02 2012 +0200
+++ b/devices/e1000e/netdev-2.6.37-ethercat.c Mon Nov 03 15:20:05 2014 +0100
@@ -24,6 +24,8 @@
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+ vim: noexpandtab
+
*******************************************************************************/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -1537,10 +1539,10 @@
struct e1000_hw *hw = &adapter->hw;
u32 icr = er32(ICR);
- if (adapter->ecdev) {
- int ec_work_done = 0;
- adapter->clean_rx(adapter, &ec_work_done, 100);
- e1000_clean_tx_irq(adapter);
+ if (adapter->ecdev) {
+ int ec_work_done = 0;
+ adapter->clean_rx(adapter, &ec_work_done, 100);
+ e1000_clean_tx_irq(adapter);
return IRQ_HANDLED;
}
/*
@@ -1641,10 +1643,10 @@
mod_timer(&adapter->watchdog_timer, jiffies + 1);
}
- if (adapter->ecdev) {
- int ec_work_done = 0;
- adapter->clean_rx(adapter, &ec_work_done, 100);
- e1000_clean_tx_irq(adapter);
+ if (adapter->ecdev) {
+ int ec_work_done = 0;
+ adapter->clean_rx(adapter, &ec_work_done, 100);
+ e1000_clean_tx_irq(adapter);
return IRQ_HANDLED;
}
@@ -1724,9 +1726,9 @@
adapter->rx_ring->set_itr = 0;
}
- if (adapter->ecdev) {
- int ec_work_done = 0;
- adapter->clean_rx(adapter, &ec_work_done, 100);
+ if (adapter->ecdev) {
+ int ec_work_done = 0;
+ adapter->clean_rx(adapter, &ec_work_done, 100);
} else {
if (napi_schedule_prep(&adapter->napi)) {
adapter->total_rx_bytes = 0;
@@ -3414,7 +3416,7 @@
ew32(RCTL, rctl & ~E1000_RCTL_EN);
/* flush and sleep below */
- if (!adapter->ecdev)
+ if (!adapter->ecdev)
netif_stop_queue(netdev);
/* disable transmits in the hardware */
@@ -3703,16 +3705,16 @@
e1000_irq_enable(adapter);
netif_start_queue(netdev);
-
- adapter->idle_check = true;
- pm_runtime_put(&pdev->dev);
-
- /* fire a link status change interrupt to start the watchdog */
- if (adapter->msix_entries)
- ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
- else
- ew32(ICS, E1000_ICS_LSC);
- }
+ }
+
+ adapter->idle_check = true;
+ pm_runtime_put(&pdev->dev);
+
+ /* fire a link status change interrupt to start the watchdog */
+ if (adapter->msix_entries)
+ ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
+ else
+ ew32(ICS, E1000_ICS_LSC);
return 0;
@@ -4236,7 +4238,7 @@
e1000_update_mng_vlan(adapter);
if (link) {
- if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev))
+ if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev))
|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
bool txb2b = 1;
@@ -4334,7 +4336,7 @@
if (adapter->ecdev)
ecdev_set_link(adapter->ecdev, 1);
- else
+ else
netif_carrier_on(netdev);
if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state))
@@ -4342,7 +4344,7 @@
round_jiffies(jiffies + 2 * HZ));
}
} else {
- if ((adapter->ecdev && ecdev_get_link(adapter->ecdev))
+ if ((adapter->ecdev && ecdev_get_link(adapter->ecdev))
|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
adapter->link_speed = 0;
adapter->link_duplex = 0;
@@ -4380,8 +4382,7 @@
e1000e_update_adaptive(&adapter->hw);
- if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev))
- || (!adapter->ecdev && !netif_carrier_ok(netdev))) {
+ if (!adapter->ecdev && !netif_carrier_ok(netdev)) {
tx_pending = (e1000_desc_unused(tx_ring) + 1 <
tx_ring->count);
if (tx_pending) {
@@ -4794,6 +4795,10 @@
{
struct e1000_adapter *adapter = netdev_priv(netdev);
+ if (adapter->ecdev) {
+ return -EBUSY;
+ }
+
netif_stop_queue(netdev);
/*
* Herbert's original patch had:
@@ -5564,7 +5569,7 @@
bool wake = false;
struct net_device *netdev = pci_get_drvdata(pdev);
struct e1000_adapter *adapter = netdev_priv(netdev);
-
+
if (adapter->ecdev)
return;
@@ -5762,14 +5767,16 @@
struct e1000_adapter *adapter = netdev_priv(netdev);
if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) {
- e1000_watchdog((unsigned long) adapter);
+ struct e1000_hw *hw = &adapter->hw;
+ hw->mac.get_link_status = true;
+ e1000_watchdog_task(&adapter->watchdog_task);
adapter->ec_watchdog_jiffies = jiffies;
}
#ifdef CONFIG_PCI_MSI
- e1000_intr_msi(0,netdev);
+ e1000_intr_msi(0, netdev);
#else
- e1000_intr(0,netdev);
+ e1000_intr(0, netdev);
#endif
}
@@ -6062,10 +6069,12 @@
adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
if (adapter->ecdev) {
- if (ecdev_open(adapter->ecdev)) {
+ err = ecdev_open(adapter->ecdev);
+ if (err) {
ecdev_withdraw(adapter->ecdev);
goto err_register;
}
+ adapter->ec_watchdog_jiffies = jiffies;
} else {
strcpy(netdev->name, "eth%d");
err = register_netdev(netdev);