devices/e1000/e1000_main-2.6.31-ethercat.c
changeset 2589 2b9c78543663
parent 2211 2a009dc7bd1c
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
   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. */