devices/e1000/e1000_main-2.6.37-ethercat.c
changeset 2589 2b9c78543663
parent 2284 08edb009bee8
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.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. */