devices/e1000/e1000_main-2.6.26-ethercat.c
changeset 2589 2b9c78543663
parent 2050 a3e59f2a8589
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
   670 	}
   670 	}
   671 
   671 
   672 	netdev->tx_queue_len = adapter->tx_queue_len;
   672 	netdev->tx_queue_len = adapter->tx_queue_len;
   673 	adapter->link_speed = 0;
   673 	adapter->link_speed = 0;
   674 	adapter->link_duplex = 0;
   674 	adapter->link_duplex = 0;
   675 	
   675 
   676 	if (!adapter->ecdev) {
   676 	if (!adapter->ecdev) {
   677 		netif_carrier_off(netdev);
   677 		netif_carrier_off(netdev);
   678 		netif_stop_queue(netdev);
   678 		netif_stop_queue(netdev);
   679 	}
   679 	}
   680 
   680 
  1241 		e1000_get_hw_control(adapter);
  1241 		e1000_get_hw_control(adapter);
  1242 
  1242 
  1243 	// offer device to EtherCAT master module
  1243 	// offer device to EtherCAT master module
  1244 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  1244 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  1245 	if (adapter->ecdev) {
  1245 	if (adapter->ecdev) {
  1246 		if (ecdev_open(adapter->ecdev)) {
  1246 		err = ecdev_open(adapter->ecdev);
       
  1247 		if (err) {
  1247 			ecdev_withdraw(adapter->ecdev);
  1248 			ecdev_withdraw(adapter->ecdev);
  1248 			goto err_register;
  1249 			goto err_register;
  1249 		}
  1250 		}
  1250 	} else {
  1251 	} else {
  1251 		/* tell the stack to leave us alone until e1000_open() is called */
  1252 		/* tell the stack to leave us alone until e1000_open() is called */
  1542 
  1543 
  1543 	/* From here on the code is the same as e1000_up() */
  1544 	/* From here on the code is the same as e1000_up() */
  1544 	clear_bit(__E1000_DOWN, &adapter->flags);
  1545 	clear_bit(__E1000_DOWN, &adapter->flags);
  1545 
  1546 
  1546 #ifdef CONFIG_E1000_NAPI
  1547 #ifdef CONFIG_E1000_NAPI
  1547 	napi_enable(&adapter->napi);
  1548 	if (!adapter->ecdev) {
       
  1549 		napi_enable(&adapter->napi);
       
  1550 	}
  1548 #endif
  1551 #endif
  1549 
  1552 
  1550 	e1000_irq_enable(adapter);
  1553 	e1000_irq_enable(adapter);
  1551 
  1554 
  1552 	/* fire a link status change interrupt to start the watchdog */
  1555 	/* fire a link status change interrupt to start the watchdog */
  2465 
  2468 
  2466 	if (!adapter->netdev && netif_running(netdev)) {
  2469 	if (!adapter->netdev && netif_running(netdev)) {
  2467 		/* No need to loop, because 82542 supports only 1 queue */
  2470 		/* No need to loop, because 82542 supports only 1 queue */
  2468 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2471 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2469 		e1000_configure_rx(adapter);
  2472 		e1000_configure_rx(adapter);
  2470 		if (adapter->ecdev) { 
  2473 		if (adapter->ecdev) {
  2471 			/* fill rx ring completely! */
  2474 			/* fill rx ring completely! */
  2472 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2475 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2473 		} else {
  2476 		} else {
  2474             /* this one leaves the last ring element unallocated! */
  2477             /* this one leaves the last ring element unallocated! */
  2475 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2478 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  3367 
  3370 
  3368 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  3371 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  3369 {
  3372 {
  3370 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3373 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3371 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
  3374 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
       
  3375 
       
  3376 	if (adapter->ecdev) {
       
  3377 		return -EBUSY;
       
  3378 	}
  3372 
  3379 
  3373 	netif_stop_queue(netdev);
  3380 	netif_stop_queue(netdev);
  3374 	/* Herbert's original patch had:
  3381 	/* Herbert's original patch had:
  3375 	 *  smp_mb__after_netif_stop_queue();
  3382 	 *  smp_mb__after_netif_stop_queue();
  3376 	 * but since that doesn't exist yet, just open code it. */
  3383 	 * but since that doesn't exist yet, just open code it. */
  3922 e1000_intr_msi(int irq, void *data)
  3929 e1000_intr_msi(int irq, void *data)
  3923 {
  3930 {
  3924 	struct net_device *netdev = data;
  3931 	struct net_device *netdev = data;
  3925 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3932 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3926 	struct e1000_hw *hw = &adapter->hw;
  3933 	struct e1000_hw *hw = &adapter->hw;
  3927 	
  3934 
  3928 	int i;
  3935 	int i;
  3929 
  3936 
  3930 	if (adapter->ecdev) {
  3937 	if (adapter->ecdev) {
  3931 #ifdef CONFIG_E1000_NAPI
  3938 #ifdef CONFIG_E1000_NAPI
  3932 		int ec_work_done = 0;
  3939 		int ec_work_done = 0;
  4101 		if (hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2)
  4108 		if (hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2)
  4102 			e1000_irq_enable(adapter);
  4109 			e1000_irq_enable(adapter);
  4103 
  4110 
  4104 #endif
  4111 #endif
  4105 	}
  4112 	}
  4106 	
  4113 
  4107 	return IRQ_HANDLED;
  4114 	return IRQ_HANDLED;
  4108 }
  4115 }
  4109 
  4116 
  4110 #ifdef CONFIG_E1000_NAPI
  4117 #ifdef CONFIG_E1000_NAPI
  4111 /**
  4118 /**