devices/e1000/e1000_main-2.6.33-ethercat.c
changeset 2589 2b9c78543663
parent 2209 b6c4c8940d0a
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
   315 {
   315 {
   316 	struct e1000_hw *hw = &adapter->hw;
   316 	struct e1000_hw *hw = &adapter->hw;
   317 
   317 
   318 	if (adapter->ecdev)
   318 	if (adapter->ecdev)
   319 		return;
   319 		return;
   320  
   320 
   321 	ew32(IMS, IMS_ENABLE_MASK);
   321 	ew32(IMS, IMS_ENABLE_MASK);
   322 	E1000_WRITE_FLUSH();
   322 	E1000_WRITE_FLUSH();
   323 }
   323 }
   324 
   324 
   325 static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
   325 static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
  1080 	e1000_reset(adapter);
  1080 	e1000_reset(adapter);
  1081 
  1081 
  1082 	// offer device to EtherCAT master module
  1082 	// offer device to EtherCAT master module
  1083 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  1083 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  1084 	if (adapter->ecdev) {
  1084 	if (adapter->ecdev) {
  1085 		if (ecdev_open(adapter->ecdev)) {
  1085 		err = ecdev_open(adapter->ecdev);
       
  1086 		if (err) {
  1086 			ecdev_withdraw(adapter->ecdev);
  1087 			ecdev_withdraw(adapter->ecdev);
  1087 			goto err_register;
  1088 			goto err_register;
  1088 		}
  1089 		}
  1089 	} else {
  1090 	} else {
  1090 		strcpy(netdev->name, "eth%d");
  1091 		strcpy(netdev->name, "eth%d");
  1330 		goto err_req_irq;
  1331 		goto err_req_irq;
  1331 
  1332 
  1332 	/* From here on the code is the same as e1000_up() */
  1333 	/* From here on the code is the same as e1000_up() */
  1333 	clear_bit(__E1000_DOWN, &adapter->flags);
  1334 	clear_bit(__E1000_DOWN, &adapter->flags);
  1334 
  1335 
  1335 	napi_enable(&adapter->napi);
  1336 	if (!adapter->ecdev) {
  1336 
  1337 		napi_enable(&adapter->napi);
  1337 	e1000_irq_enable(adapter);
  1338 
  1338 
  1339 		e1000_irq_enable(adapter);
  1339 	netif_start_queue(netdev);
  1340 
       
  1341 		netif_start_queue(netdev);
       
  1342 	}
  1340 
  1343 
  1341 	/* fire a link status change interrupt to start the watchdog */
  1344 	/* fire a link status change interrupt to start the watchdog */
  1342 	ew32(ICS, E1000_ICS_LSC);
  1345 	ew32(ICS, E1000_ICS_LSC);
  1343 
  1346 
  1344 	return E1000_SUCCESS;
  1347 	return E1000_SUCCESS;
  2093 
  2096 
  2094 	if (!adapter->netdev && netif_running(netdev)) {
  2097 	if (!adapter->netdev && netif_running(netdev)) {
  2095 		/* No need to loop, because 82542 supports only 1 queue */
  2098 		/* No need to loop, because 82542 supports only 1 queue */
  2096 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2099 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2097 		e1000_configure_rx(adapter);
  2100 		e1000_configure_rx(adapter);
  2098 		if (adapter->ecdev) { 
  2101 		if (adapter->ecdev) {
  2099 			/* fill rx ring completely! */
  2102 			/* fill rx ring completely! */
  2100 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2103 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2101 		} else {
  2104 		} else {
  2102 			/* this one leaves the last ring element unallocated! */
  2105 			/* this one leaves the last ring element unallocated! */
  2103 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2106 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2296 
  2299 
  2297 			adapter->tx_fifo_head = 0;
  2300 			adapter->tx_fifo_head = 0;
  2298 			atomic_set(&adapter->tx_fifo_stall, 0);
  2301 			atomic_set(&adapter->tx_fifo_stall, 0);
  2299 			if (!adapter->ecdev) netif_wake_queue(netdev);
  2302 			if (!adapter->ecdev) netif_wake_queue(netdev);
  2300 		} else if (!test_bit(__E1000_DOWN, &adapter->flags)) {
  2303 		} else if (!test_bit(__E1000_DOWN, &adapter->flags)) {
  2301 			if (!adapter->ecdev) 
  2304 			if (!adapter->ecdev)
  2302 				mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
  2305 				mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
  2303 		}
  2306 		}
  2304 	}
  2307 	}
  2305 }
  2308 }
  2306 
  2309 
  2970 
  2973 
  2971 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  2974 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  2972 {
  2975 {
  2973 	struct e1000_adapter *adapter = netdev_priv(netdev);
  2976 	struct e1000_adapter *adapter = netdev_priv(netdev);
  2974 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
  2977 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
       
  2978 
       
  2979 	if (adapter->ecdev) {
       
  2980 		return -EBUSY;
       
  2981 	}
  2975 
  2982 
  2976 	netif_stop_queue(netdev);
  2983 	netif_stop_queue(netdev);
  2977 	/* Herbert's original patch had:
  2984 	/* Herbert's original patch had:
  2978 	 *  smp_mb__after_netif_stop_queue();
  2985 	 *  smp_mb__after_netif_stop_queue();
  2979 	 * but since that doesn't exist yet, just open code it. */
  2986 	 * but since that doesn't exist yet, just open code it. */