equal
deleted
inserted
replaced
21 |
21 |
22 Contact Information: |
22 Contact Information: |
23 Linux NICS <linux.nics@intel.com> |
23 Linux NICS <linux.nics@intel.com> |
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> |
24 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> |
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
26 |
26 |
27 vim: noexpandtab |
27 vim: noexpandtab |
28 |
28 |
29 *******************************************************************************/ |
29 *******************************************************************************/ |
30 |
30 |
31 #include "e1000-2.6.35-ethercat.h" |
31 #include "e1000-2.6.35-ethercat.h" |
324 { |
324 { |
325 struct e1000_hw *hw = &adapter->hw; |
325 struct e1000_hw *hw = &adapter->hw; |
326 |
326 |
327 if (adapter->ecdev) |
327 if (adapter->ecdev) |
328 return; |
328 return; |
329 |
329 |
330 ew32(IMS, IMS_ENABLE_MASK); |
330 ew32(IMS, IMS_ENABLE_MASK); |
331 E1000_WRITE_FLUSH(); |
331 E1000_WRITE_FLUSH(); |
332 } |
332 } |
333 |
333 |
334 static void e1000_update_mng_vlan(struct e1000_adapter *adapter) |
334 static void e1000_update_mng_vlan(struct e1000_adapter *adapter) |
1074 e1000_reset(adapter); |
1074 e1000_reset(adapter); |
1075 |
1075 |
1076 // offer device to EtherCAT master module |
1076 // offer device to EtherCAT master module |
1077 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1077 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1078 if (adapter->ecdev) { |
1078 if (adapter->ecdev) { |
1079 if (ecdev_open(adapter->ecdev)) { |
1079 err = ecdev_open(adapter->ecdev); |
|
1080 if (err) { |
1080 ecdev_withdraw(adapter->ecdev); |
1081 ecdev_withdraw(adapter->ecdev); |
1081 goto err_register; |
1082 goto err_register; |
1082 } |
1083 } |
1083 } else { |
1084 } else { |
1084 strcpy(netdev->name, "eth%d"); |
1085 strcpy(netdev->name, "eth%d"); |
1336 goto err_req_irq; |
1337 goto err_req_irq; |
1337 |
1338 |
1338 /* From here on the code is the same as e1000_up() */ |
1339 /* From here on the code is the same as e1000_up() */ |
1339 clear_bit(__E1000_DOWN, &adapter->flags); |
1340 clear_bit(__E1000_DOWN, &adapter->flags); |
1340 |
1341 |
1341 napi_enable(&adapter->napi); |
1342 if (!adapter->ecdev) { |
1342 |
1343 napi_enable(&adapter->napi); |
1343 e1000_irq_enable(adapter); |
1344 |
1344 |
1345 e1000_irq_enable(adapter); |
1345 netif_start_queue(netdev); |
1346 |
|
1347 netif_start_queue(netdev); |
|
1348 } |
1346 |
1349 |
1347 /* fire a link status change interrupt to start the watchdog */ |
1350 /* fire a link status change interrupt to start the watchdog */ |
1348 ew32(ICS, E1000_ICS_LSC); |
1351 ew32(ICS, E1000_ICS_LSC); |
1349 |
1352 |
1350 return E1000_SUCCESS; |
1353 return E1000_SUCCESS; |
2102 |
2105 |
2103 if (!adapter->netdev && netif_running(netdev)) { |
2106 if (!adapter->netdev && netif_running(netdev)) { |
2104 /* No need to loop, because 82542 supports only 1 queue */ |
2107 /* No need to loop, because 82542 supports only 1 queue */ |
2105 struct e1000_rx_ring *ring = &adapter->rx_ring[0]; |
2108 struct e1000_rx_ring *ring = &adapter->rx_ring[0]; |
2106 e1000_configure_rx(adapter); |
2109 e1000_configure_rx(adapter); |
2107 if (adapter->ecdev) { |
2110 if (adapter->ecdev) { |
2108 /* fill rx ring completely! */ |
2111 /* fill rx ring completely! */ |
2109 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2112 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2110 } else { |
2113 } else { |
2111 /* this one leaves the last ring element unallocated! */ |
2114 /* this one leaves the last ring element unallocated! */ |
2112 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2115 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2299 adapter->tx_fifo_head = 0; |
2302 adapter->tx_fifo_head = 0; |
2300 atomic_set(&adapter->tx_fifo_stall, 0); |
2303 atomic_set(&adapter->tx_fifo_stall, 0); |
2301 if (!adapter->ecdev) |
2304 if (!adapter->ecdev) |
2302 netif_wake_queue(netdev); |
2305 netif_wake_queue(netdev); |
2303 } else if (!test_bit(__E1000_DOWN, &adapter->flags)) { |
2306 } else if (!test_bit(__E1000_DOWN, &adapter->flags)) { |
2304 if (!adapter->ecdev) |
2307 if (!adapter->ecdev) |
2305 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
2308 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
2306 } |
2309 } |
2307 } |
2310 } |
2308 } |
2311 } |
2309 |
2312 |
2984 |
2987 |
2985 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
2988 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
2986 { |
2989 { |
2987 struct e1000_adapter *adapter = netdev_priv(netdev); |
2990 struct e1000_adapter *adapter = netdev_priv(netdev); |
2988 struct e1000_tx_ring *tx_ring = adapter->tx_ring; |
2991 struct e1000_tx_ring *tx_ring = adapter->tx_ring; |
|
2992 |
|
2993 if (adapter->ecdev) { |
|
2994 return -EBUSY; |
|
2995 } |
|
2996 |
2989 |
2997 |
2990 netif_stop_queue(netdev); |
2998 netif_stop_queue(netdev); |
2991 /* Herbert's original patch had: |
2999 /* Herbert's original patch had: |
2992 * smp_mb__after_netif_stop_queue(); |
3000 * smp_mb__after_netif_stop_queue(); |
2993 * but since that doesn't exist yet, just open code it. */ |
3001 * but since that doesn't exist yet, just open code it. */ |