equal
deleted
inserted
replaced
323 { |
323 { |
324 struct e1000_hw *hw = &adapter->hw; |
324 struct e1000_hw *hw = &adapter->hw; |
325 |
325 |
326 if (adapter->ecdev) |
326 if (adapter->ecdev) |
327 return; |
327 return; |
328 |
328 |
329 ew32(IMS, IMS_ENABLE_MASK); |
329 ew32(IMS, IMS_ENABLE_MASK); |
330 E1000_WRITE_FLUSH(); |
330 E1000_WRITE_FLUSH(); |
331 } |
331 } |
332 |
332 |
333 static void e1000_update_mng_vlan(struct e1000_adapter *adapter) |
333 static void e1000_update_mng_vlan(struct e1000_adapter *adapter) |
1267 e1000_get_hw_control(adapter); |
1267 e1000_get_hw_control(adapter); |
1268 |
1268 |
1269 // offer device to EtherCAT master module |
1269 // offer device to EtherCAT master module |
1270 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1270 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1271 if (adapter->ecdev) { |
1271 if (adapter->ecdev) { |
1272 if (ecdev_open(adapter->ecdev)) { |
1272 err = ecdev_open(adapter->ecdev); |
|
1273 if (err) { |
1273 ecdev_withdraw(adapter->ecdev); |
1274 ecdev_withdraw(adapter->ecdev); |
1274 goto err_register; |
1275 goto err_register; |
1275 } |
1276 } |
1276 } else { |
1277 } else { |
1277 strcpy(netdev->name, "eth%d"); |
1278 strcpy(netdev->name, "eth%d"); |
1523 goto err_req_irq; |
1524 goto err_req_irq; |
1524 |
1525 |
1525 /* From here on the code is the same as e1000_up() */ |
1526 /* From here on the code is the same as e1000_up() */ |
1526 clear_bit(__E1000_DOWN, &adapter->flags); |
1527 clear_bit(__E1000_DOWN, &adapter->flags); |
1527 |
1528 |
1528 napi_enable(&adapter->napi); |
1529 if (!adapter->ecdev) { |
1529 |
1530 napi_enable(&adapter->napi); |
1530 e1000_irq_enable(adapter); |
1531 |
1531 |
1532 e1000_irq_enable(adapter); |
1532 netif_start_queue(netdev); |
1533 |
|
1534 netif_start_queue(netdev); |
|
1535 } |
1533 |
1536 |
1534 /* fire a link status change interrupt to start the watchdog */ |
1537 /* fire a link status change interrupt to start the watchdog */ |
1535 ew32(ICS, E1000_ICS_LSC); |
1538 ew32(ICS, E1000_ICS_LSC); |
1536 |
1539 |
1537 return E1000_SUCCESS; |
1540 return E1000_SUCCESS; |
2312 |
2315 |
2313 if (!adapter->netdev && netif_running(netdev)) { |
2316 if (!adapter->netdev && netif_running(netdev)) { |
2314 /* No need to loop, because 82542 supports only 1 queue */ |
2317 /* No need to loop, because 82542 supports only 1 queue */ |
2315 struct e1000_rx_ring *ring = &adapter->rx_ring[0]; |
2318 struct e1000_rx_ring *ring = &adapter->rx_ring[0]; |
2316 e1000_configure_rx(adapter); |
2319 e1000_configure_rx(adapter); |
2317 if (adapter->ecdev) { |
2320 if (adapter->ecdev) { |
2318 /* fill rx ring completely! */ |
2321 /* fill rx ring completely! */ |
2319 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2322 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2320 } else { |
2323 } else { |
2321 /* this one leaves the last ring element unallocated! */ |
2324 /* this one leaves the last ring element unallocated! */ |
2322 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2325 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2539 ew32(TCTL, tctl); |
2542 ew32(TCTL, tctl); |
2540 E1000_WRITE_FLUSH(); |
2543 E1000_WRITE_FLUSH(); |
2541 |
2544 |
2542 adapter->tx_fifo_head = 0; |
2545 adapter->tx_fifo_head = 0; |
2543 atomic_set(&adapter->tx_fifo_stall, 0); |
2546 atomic_set(&adapter->tx_fifo_stall, 0); |
2544 if (!adapter->ecdev) |
2547 if (!adapter->ecdev) |
2545 netif_wake_queue(netdev); |
2548 netif_wake_queue(netdev); |
2546 } else { |
2549 } else { |
2547 if (!adapter->ecdev) |
2550 if (!adapter->ecdev) |
2548 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
2551 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
2549 } |
2552 } |
3257 |
3260 |
3258 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
3261 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
3259 { |
3262 { |
3260 struct e1000_adapter *adapter = netdev_priv(netdev); |
3263 struct e1000_adapter *adapter = netdev_priv(netdev); |
3261 struct e1000_tx_ring *tx_ring = adapter->tx_ring; |
3264 struct e1000_tx_ring *tx_ring = adapter->tx_ring; |
|
3265 |
|
3266 if (adapter->ecdev) { |
|
3267 return -EBUSY; |
|
3268 } |
3262 |
3269 |
3263 netif_stop_queue(netdev); |
3270 netif_stop_queue(netdev); |
3264 /* Herbert's original patch had: |
3271 /* Herbert's original patch had: |
3265 * smp_mb__after_netif_stop_queue(); |
3272 * smp_mb__after_netif_stop_queue(); |
3266 * but since that doesn't exist yet, just open code it. */ |
3273 * but since that doesn't exist yet, just open code it. */ |