--- a/devices/e1000/e1000_main-2.6.28-ethercat.c Thu Sep 06 14:21:02 2012 +0200
+++ b/devices/e1000/e1000_main-2.6.28-ethercat.c Mon Nov 03 15:20:05 2014 +0100
@@ -28,7 +28,7 @@
*******************************************************************************/
-#include "e1000-2.6.27-ethercat.h"
+#include "e1000-2.6.28-ethercat.h"
#include <net/ip6_checksum.h>
char e1000_driver_name[] = "ec_e1000";
@@ -263,7 +263,7 @@
if (adapter->ecdev)
return 0;
-
+
if (hw->mac_type >= e1000_82571) {
adapter->have_msi = !pci_enable_msi(adapter->pdev);
if (adapter->have_msi) {
@@ -325,7 +325,7 @@
if (adapter->ecdev)
return;
-
+
ew32(IMS, IMS_ENABLE_MASK);
E1000_WRITE_FLUSH();
}
@@ -1247,7 +1247,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;
}
@@ -1529,11 +1530,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);
@@ -2320,7 +2323,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 {
@@ -3234,6 +3237,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();