devices/e1000/e1000_main-2.6.27-ethercat.c
changeset 2589 2b9c78543663
parent 2255 25b351a76050
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
   267 	int irq_flags = IRQF_SHARED;
   267 	int irq_flags = IRQF_SHARED;
   268 	int err;
   268 	int err;
   269 
   269 
   270  	if (adapter->ecdev)
   270  	if (adapter->ecdev)
   271  		return 0;
   271  		return 0;
   272  
   272 
   273 	if (hw->mac_type >= e1000_82571) {
   273 	if (hw->mac_type >= e1000_82571) {
   274 		adapter->have_msi = !pci_enable_msi(adapter->pdev);
   274 		adapter->have_msi = !pci_enable_msi(adapter->pdev);
   275 		if (adapter->have_msi) {
   275 		if (adapter->have_msi) {
   276 			handler = e1000_intr_msi;
   276 			handler = e1000_intr_msi;
   277 			irq_flags = 0;
   277 			irq_flags = 0;
   329 {
   329 {
   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 	ew32(IMS, IMS_ENABLE_MASK);
   335 	ew32(IMS, IMS_ENABLE_MASK);
   336 	E1000_WRITE_FLUSH();
   336 	E1000_WRITE_FLUSH();
   337 }
   337 }
   338 
   338 
   339 static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
   339 static void e1000_update_mng_vlan(struct e1000_adapter *adapter)
  1246 		e1000_get_hw_control(adapter);
  1246 		e1000_get_hw_control(adapter);
  1247 
  1247 
  1248  	// offer device to EtherCAT master module
  1248  	// offer device to EtherCAT master module
  1249  	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  1249  	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  1250  	if (adapter->ecdev) {
  1250  	if (adapter->ecdev) {
  1251  		if (ecdev_open(adapter->ecdev)) {
  1251 		err = ecdev_open(adapter->ecdev);
       
  1252 		if (err) {
  1252  			ecdev_withdraw(adapter->ecdev);
  1253  			ecdev_withdraw(adapter->ecdev);
  1253  			goto err_register;
  1254  			goto err_register;
  1254  		}
  1255  		}
  1255  	} else {
  1256  	} else {
  1256 		/* tell the stack to leave us alone until e1000_open() is called */
  1257 		/* tell the stack to leave us alone until e1000_open() is called */
  1529 		goto err_req_irq;
  1530 		goto err_req_irq;
  1530 
  1531 
  1531 	/* From here on the code is the same as e1000_up() */
  1532 	/* From here on the code is the same as e1000_up() */
  1532 	clear_bit(__E1000_DOWN, &adapter->flags);
  1533 	clear_bit(__E1000_DOWN, &adapter->flags);
  1533 
  1534 
  1534 	napi_enable(&adapter->napi);
  1535 	if (!adapter->ecdev) {
  1535 
  1536 		napi_enable(&adapter->napi);
  1536 	e1000_irq_enable(adapter);
  1537 
  1537 
  1538 		e1000_irq_enable(adapter);
  1538 	netif_start_queue(netdev);
  1539 
       
  1540 		netif_start_queue(netdev);
       
  1541 	}
  1539 
  1542 
  1540 	/* fire a link status change interrupt to start the watchdog */
  1543 	/* fire a link status change interrupt to start the watchdog */
  1541 	ew32(ICS, E1000_ICS_LSC);
  1544 	ew32(ICS, E1000_ICS_LSC);
  1542 
  1545 
  1543 	return E1000_SUCCESS;
  1546 	return E1000_SUCCESS;
  2438 
  2441 
  2439 	if (!adapter->netdev && netif_running(netdev)) {
  2442 	if (!adapter->netdev && netif_running(netdev)) {
  2440 		/* No need to loop, because 82542 supports only 1 queue */
  2443 		/* No need to loop, because 82542 supports only 1 queue */
  2441 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2444 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2442 		e1000_configure_rx(adapter);
  2445 		e1000_configure_rx(adapter);
  2443 		if (adapter->ecdev) { 
  2446 		if (adapter->ecdev) {
  2444 			/* fill rx ring completely! */
  2447 			/* fill rx ring completely! */
  2445 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2448 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2446 		} else {
  2449 		} else {
  2447             /* this one leaves the last ring element unallocated! */
  2450             /* this one leaves the last ring element unallocated! */
  2448 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2451 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  3334 
  3337 
  3335 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  3338 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  3336 {
  3339 {
  3337 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3340 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3338 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
  3341 	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
       
  3342 
       
  3343 	if (adapter->ecdev) {
       
  3344 		return -EBUSY;
       
  3345 	}
  3339 
  3346 
  3340 	netif_stop_queue(netdev);
  3347 	netif_stop_queue(netdev);
  3341 	/* Herbert's original patch had:
  3348 	/* Herbert's original patch had:
  3342 	 *  smp_mb__after_netif_stop_queue();
  3349 	 *  smp_mb__after_netif_stop_queue();
  3343 	 * but since that doesn't exist yet, just open code it. */
  3350 	 * but since that doesn't exist yet, just open code it. */