diff -r af21f0bdc7c9 -r 2b9c78543663 devices/e1000/e1000_main-2.6.37-ethercat.c --- a/devices/e1000/e1000_main-2.6.37-ethercat.c Thu Sep 06 14:21:02 2012 +0200 +++ b/devices/e1000/e1000_main-2.6.37-ethercat.c Mon Nov 03 15:20:05 2014 +0100 @@ -23,7 +23,7 @@ Linux NICS e1000-devel Mailing List Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 - + vim: noexpandtab *******************************************************************************/ @@ -332,7 +332,7 @@ if (adapter->ecdev) { return; } - + ew32(IMS, IMS_ENABLE_MASK); E1000_WRITE_FLUSH(); } @@ -1177,7 +1177,8 @@ // offer device to EtherCAT master module 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; } @@ -1356,7 +1357,9 @@ if (test_bit(__E1000_TESTING, &adapter->flags)) return -EBUSY; - netif_carrier_off(netdev); + if (!adapter->ecdev) { + netif_carrier_off(netdev); + } /* allocate transmit descriptors */ err = e1000_setup_all_tx_resources(adapter); @@ -1389,11 +1392,13 @@ /* From here on the code is the same as e1000_up() */ clear_bit(__E1000_DOWN, &adapter->flags); - napi_enable(&adapter->napi); - - e1000_irq_enable(adapter); - - netif_start_queue(netdev); + if (!adapter->ecdev) { + napi_enable(&adapter->napi); + + e1000_irq_enable(adapter); + + netif_start_queue(netdev); + } /* fire a link status change interrupt to start the watchdog */ ew32(ICS, E1000_ICS_LSC); @@ -2160,7 +2165,7 @@ /* No need to loop, because 82542 supports only 1 queue */ struct e1000_rx_ring *ring = &adapter->rx_ring[0]; e1000_configure_rx(adapter); - if (adapter->ecdev) { + if (adapter->ecdev) { /* fill rx ring completely! */ adapter->alloc_rx_buf(adapter, ring, ring->count); } else { @@ -3071,6 +3076,10 @@ struct e1000_adapter *adapter = netdev_priv(netdev); struct e1000_tx_ring *tx_ring = adapter->tx_ring; + if (adapter->ecdev) { + return -EBUSY; + } + netif_stop_queue(netdev); /* Herbert's original patch had: * smp_mb__after_netif_stop_queue();