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.37-ethercat.h" |
31 #include "e1000-2.6.37-ethercat.h" |
330 struct e1000_hw *hw = &adapter->hw; |
330 struct e1000_hw *hw = &adapter->hw; |
331 |
331 |
332 if (adapter->ecdev) { |
332 if (adapter->ecdev) { |
333 return; |
333 return; |
334 } |
334 } |
335 |
335 |
336 ew32(IMS, IMS_ENABLE_MASK); |
336 ew32(IMS, IMS_ENABLE_MASK); |
337 E1000_WRITE_FLUSH(); |
337 E1000_WRITE_FLUSH(); |
338 } |
338 } |
339 |
339 |
340 static void e1000_update_mng_vlan(struct e1000_adapter *adapter) |
340 static void e1000_update_mng_vlan(struct e1000_adapter *adapter) |
1175 e1000_reset(adapter); |
1175 e1000_reset(adapter); |
1176 |
1176 |
1177 // offer device to EtherCAT master module |
1177 // offer device to EtherCAT master module |
1178 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1178 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1179 if (adapter->ecdev) { |
1179 if (adapter->ecdev) { |
1180 if (ecdev_open(adapter->ecdev)) { |
1180 err = ecdev_open(adapter->ecdev); |
|
1181 if (err) { |
1181 ecdev_withdraw(adapter->ecdev); |
1182 ecdev_withdraw(adapter->ecdev); |
1182 goto err_register; |
1183 goto err_register; |
1183 } |
1184 } |
1184 } else { |
1185 } else { |
1185 strcpy(netdev->name, "eth%d"); |
1186 strcpy(netdev->name, "eth%d"); |
1354 |
1355 |
1355 /* disallow open during test */ |
1356 /* disallow open during test */ |
1356 if (test_bit(__E1000_TESTING, &adapter->flags)) |
1357 if (test_bit(__E1000_TESTING, &adapter->flags)) |
1357 return -EBUSY; |
1358 return -EBUSY; |
1358 |
1359 |
1359 netif_carrier_off(netdev); |
1360 if (!adapter->ecdev) { |
|
1361 netif_carrier_off(netdev); |
|
1362 } |
1360 |
1363 |
1361 /* allocate transmit descriptors */ |
1364 /* allocate transmit descriptors */ |
1362 err = e1000_setup_all_tx_resources(adapter); |
1365 err = e1000_setup_all_tx_resources(adapter); |
1363 if (err) |
1366 if (err) |
1364 goto err_setup_tx; |
1367 goto err_setup_tx; |
1387 goto err_req_irq; |
1390 goto err_req_irq; |
1388 |
1391 |
1389 /* From here on the code is the same as e1000_up() */ |
1392 /* From here on the code is the same as e1000_up() */ |
1390 clear_bit(__E1000_DOWN, &adapter->flags); |
1393 clear_bit(__E1000_DOWN, &adapter->flags); |
1391 |
1394 |
1392 napi_enable(&adapter->napi); |
1395 if (!adapter->ecdev) { |
1393 |
1396 napi_enable(&adapter->napi); |
1394 e1000_irq_enable(adapter); |
1397 |
1395 |
1398 e1000_irq_enable(adapter); |
1396 netif_start_queue(netdev); |
1399 |
|
1400 netif_start_queue(netdev); |
|
1401 } |
1397 |
1402 |
1398 /* fire a link status change interrupt to start the watchdog */ |
1403 /* fire a link status change interrupt to start the watchdog */ |
1399 ew32(ICS, E1000_ICS_LSC); |
1404 ew32(ICS, E1000_ICS_LSC); |
1400 |
1405 |
1401 return E1000_SUCCESS; |
1406 return E1000_SUCCESS; |
2158 |
2163 |
2159 if (!adapter->netdev && netif_running(netdev)) { |
2164 if (!adapter->netdev && netif_running(netdev)) { |
2160 /* No need to loop, because 82542 supports only 1 queue */ |
2165 /* No need to loop, because 82542 supports only 1 queue */ |
2161 struct e1000_rx_ring *ring = &adapter->rx_ring[0]; |
2166 struct e1000_rx_ring *ring = &adapter->rx_ring[0]; |
2162 e1000_configure_rx(adapter); |
2167 e1000_configure_rx(adapter); |
2163 if (adapter->ecdev) { |
2168 if (adapter->ecdev) { |
2164 /* fill rx ring completely! */ |
2169 /* fill rx ring completely! */ |
2165 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2170 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2166 } else { |
2171 } else { |
2167 /* this one leaves the last ring element unallocated! */ |
2172 /* this one leaves the last ring element unallocated! */ |
2168 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2173 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
3068 |
3073 |
3069 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
3074 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
3070 { |
3075 { |
3071 struct e1000_adapter *adapter = netdev_priv(netdev); |
3076 struct e1000_adapter *adapter = netdev_priv(netdev); |
3072 struct e1000_tx_ring *tx_ring = adapter->tx_ring; |
3077 struct e1000_tx_ring *tx_ring = adapter->tx_ring; |
|
3078 |
|
3079 if (adapter->ecdev) { |
|
3080 return -EBUSY; |
|
3081 } |
3073 |
3082 |
3074 netif_stop_queue(netdev); |
3083 netif_stop_queue(netdev); |
3075 /* Herbert's original patch had: |
3084 /* Herbert's original patch had: |
3076 * smp_mb__after_netif_stop_queue(); |
3085 * smp_mb__after_netif_stop_queue(); |
3077 * but since that doesn't exist yet, just open code it. */ |
3086 * but since that doesn't exist yet, just open code it. */ |