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