diff -r f57de4585a5f -r 2223549df36c devices/e1000/e1000_ethtool-2.6.18-ethercat.c --- a/devices/e1000/e1000_ethtool-2.6.18-ethercat.c Wed Jul 25 12:52:06 2007 +0000 +++ b/devices/e1000/e1000_ethtool-2.6.18-ethercat.c Wed Jul 25 12:53:01 2007 +0000 @@ -146,7 +146,8 @@ ecmd->transceiver = XCVR_EXTERNAL; } - if (netif_carrier_ok(adapter->netdev)) { + if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) + || (!adapter->ecdev && netif_carrier_ok(adapter->netdev))) { e1000_get_speed_and_duplex(hw, &adapter->link_speed, &adapter->link_duplex); @@ -204,7 +205,7 @@ /* reset the link */ - if (netif_running(adapter->netdev)) + if (adapter->ecdev || netif_running(adapter->netdev)) e1000_reinit_locked(adapter); else e1000_reset(adapter); @@ -253,7 +254,7 @@ hw->original_fc = hw->fc; if (adapter->fc_autoneg == AUTONEG_ENABLE) { - if (netif_running(adapter->netdev)) + if (adapter->ecdev || netif_running(adapter->netdev)) e1000_reinit_locked(adapter); else e1000_reset(adapter); @@ -277,7 +278,7 @@ struct e1000_adapter *adapter = netdev_priv(netdev); adapter->rx_csum = data; - if (netif_running(netdev)) + if (adapter->ecdev || netif_running(netdev)) e1000_reinit_locked(adapter); else e1000_reset(adapter); @@ -623,6 +624,9 @@ struct e1000_rx_ring *rxdr, *rx_old, *rx_new; int i, err, tx_ring_size, rx_ring_size; + if (adapter->ecdev) + return -EBUSY; + if ((ring->rx_mini_pending) || (ring->rx_jumbo_pending)) return -EINVAL; @@ -1595,7 +1599,7 @@ struct ethtool_test *eth_test, uint64_t *data) { struct e1000_adapter *adapter = netdev_priv(netdev); - boolean_t if_running = netif_running(netdev); + boolean_t if_running = adapter->ecdev || netif_running(netdev); set_bit(__E1000_DRIVER_TESTING, &adapter->flags); if (eth_test->flags == ETH_TEST_FL_OFFLINE) { @@ -1838,7 +1842,7 @@ e1000_nway_reset(struct net_device *netdev) { struct e1000_adapter *adapter = netdev_priv(netdev); - if (netif_running(netdev)) + if (adapter->ecdev || netif_running(netdev)) e1000_reinit_locked(adapter); return 0; }