devices/e1000/e1000_main-2.6.29-ethercat.c
branchstable-1.5
changeset 2469 634ba3b1eb95
parent 2421 bc2d4bf9cbe5
child 2471 fc64a4b1ec1a
equal deleted inserted replaced
2468:3134b7255f3d 2469:634ba3b1eb95
   494 		struct e1000_rx_ring *ring = &adapter->rx_ring[i];
   494 		struct e1000_rx_ring *ring = &adapter->rx_ring[i];
   495 		if (adapter->ecdev) {
   495 		if (adapter->ecdev) {
   496 			/* fill rx ring completely! */
   496 			/* fill rx ring completely! */
   497 			adapter->alloc_rx_buf(adapter, ring, ring->count);
   497 			adapter->alloc_rx_buf(adapter, ring, ring->count);
   498 		} else {
   498 		} else {
   499             /* this one leaves the last ring element unallocated! */
   499 			/* this one leaves the last ring element unallocated! */
   500 			adapter->alloc_rx_buf(adapter, ring,
   500 			adapter->alloc_rx_buf(adapter, ring,
   501 					E1000_DESC_UNUSED(ring));
   501 					E1000_DESC_UNUSED(ring));
   502 		}
   502 		}
   503 	}
   503 	}
   504 
   504 
   616 	}
   616 	}
   617 
   617 
   618 	netdev->tx_queue_len = adapter->tx_queue_len;
   618 	netdev->tx_queue_len = adapter->tx_queue_len;
   619 	adapter->link_speed = 0;
   619 	adapter->link_speed = 0;
   620 	adapter->link_duplex = 0;
   620 	adapter->link_duplex = 0;
   621  	if (!adapter->ecdev) {
   621 	if (!adapter->ecdev) {
   622 		netif_carrier_off(netdev);
   622 		netif_carrier_off(netdev);
   623 		netif_stop_queue(netdev);
   623 		netif_stop_queue(netdev);
   624 	}
   624 	}
   625 
   625 
   626 	e1000_reset(adapter);
   626 	e1000_reset(adapter);
  1243 	 * of the driver. */
  1243 	 * of the driver. */
  1244 	if (hw->mac_type != e1000_82573 ||
  1244 	if (hw->mac_type != e1000_82573 ||
  1245 	    !e1000_check_mng_mode(hw))
  1245 	    !e1000_check_mng_mode(hw))
  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 		if (ecdev_open(adapter->ecdev)) {
  1252  			ecdev_withdraw(adapter->ecdev);
  1252 			ecdev_withdraw(adapter->ecdev);
  1253  			goto err_register;
  1253 			goto err_register;
  1254  		}
  1254 		}
  1255  	} else {
  1255 	} else {
  1256 		/* tell the stack to leave us alone until e1000_open() is called */
  1256 		/* tell the stack to leave us alone until e1000_open() is called */
  1257 		netif_carrier_off(netdev);
  1257 		netif_carrier_off(netdev);
  1258 		netif_stop_queue(netdev);
  1258 		netif_stop_queue(netdev);
  1259 
  1259 
  1260 		strcpy(netdev->name, "eth%d");
  1260 		strcpy(netdev->name, "eth%d");
  1261 		err = register_netdev(netdev);
  1261 		err = register_netdev(netdev);
  1262 		if (err)
  1262 		if (err)
  1263 			goto err_register;
  1263 			goto err_register;
  1264  	}
  1264 	}
  1265 
  1265 
  1266 	DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n");
  1266 	DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n");
  1267 
  1267 
  1268 	cards_found++;
  1268 	cards_found++;
  1269 	return 0;
  1269 	return 0;
  1503 		goto err_req_irq;
  1503 		goto err_req_irq;
  1504 
  1504 
  1505 	/* From here on the code is the same as e1000_up() */
  1505 	/* From here on the code is the same as e1000_up() */
  1506 	clear_bit(__E1000_DOWN, &adapter->flags);
  1506 	clear_bit(__E1000_DOWN, &adapter->flags);
  1507 
  1507 
  1508 	napi_enable(&adapter->napi);
  1508 	if (!adapter->ecdev) {
  1509 
  1509 		napi_enable(&adapter->napi);
  1510 	e1000_irq_enable(adapter);
  1510 
  1511 
  1511 		e1000_irq_enable(adapter);
  1512 	netif_start_queue(netdev);
  1512 
       
  1513 		netif_start_queue(netdev);
       
  1514 	}
  1513 
  1515 
  1514 	/* fire a link status change interrupt to start the watchdog */
  1516 	/* fire a link status change interrupt to start the watchdog */
  1515 	ew32(ICS, E1000_ICS_LSC);
  1517 	ew32(ICS, E1000_ICS_LSC);
  1516 
  1518 
  1517 	return E1000_SUCCESS;
  1519 	return E1000_SUCCESS;
  2298 		e1000_configure_rx(adapter);
  2300 		e1000_configure_rx(adapter);
  2299 		if (adapter->ecdev) {
  2301 		if (adapter->ecdev) {
  2300 			/* fill rx ring completely! */
  2302 			/* fill rx ring completely! */
  2301 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2303 			adapter->alloc_rx_buf(adapter, ring, ring->count);
  2302 		} else {
  2304 		} else {
  2303             /* this one leaves the last ring element unallocated! */
  2305 			/* this one leaves the last ring element unallocated! */
  2304 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2306 			adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2305 		}
  2307 		}
  2306 
  2308 
  2307 	}
  2309 	}
  2308 }
  2310 }
  2636 				|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
  2638 				|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
  2637 			adapter->link_speed = 0;
  2639 			adapter->link_speed = 0;
  2638 			adapter->link_duplex = 0;
  2640 			adapter->link_duplex = 0;
  2639 			printk(KERN_INFO "e1000: %s NIC Link is Down\n",
  2641 			printk(KERN_INFO "e1000: %s NIC Link is Down\n",
  2640 			       netdev->name);
  2642 			       netdev->name);
  2641             if (adapter->ecdev) {
  2643 			if (adapter->ecdev) {
  2642 				ecdev_set_link(adapter->ecdev, 0);
  2644 				ecdev_set_link(adapter->ecdev, 0);
  2643 			} else {
  2645 			} else {
  2644 				netif_carrier_off(netdev);
  2646 				netif_carrier_off(netdev);
  2645 				netif_stop_queue(netdev);
  2647 				netif_stop_queue(netdev);
  2646 				mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ));
  2648 				mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ));
  3351 
  3353 
  3352 	if (hw->tx_pkt_filtering &&
  3354 	if (hw->tx_pkt_filtering &&
  3353 	    (hw->mac_type == e1000_82573))
  3355 	    (hw->mac_type == e1000_82573))
  3354 		e1000_transfer_dhcp_info(adapter, skb);
  3356 		e1000_transfer_dhcp_info(adapter, skb);
  3355 
  3357 
  3356  	if (!adapter->ecdev &&
  3358 	if (!adapter->ecdev &&
  3357  			!spin_trylock_irqsave(&tx_ring->tx_lock, flags))
  3359 			!spin_trylock_irqsave(&tx_ring->tx_lock, flags))
  3358 		/* Collision - tell upper layer to requeue */
  3360 		/* Collision - tell upper layer to requeue */
  3359 		return NETDEV_TX_LOCKED;
  3361 		return NETDEV_TX_LOCKED;
  3360 
  3362 
  3361 	/* need: count + 2 desc gap to keep tail from touching
  3363 	/* need: count + 2 desc gap to keep tail from touching
  3362 	 * head, otherwise try next time */
  3364 	 * head, otherwise try next time */
  3733 		spin_unlock_irqrestore(&adapter->stats_lock, flags);
  3735 		spin_unlock_irqrestore(&adapter->stats_lock, flags);
  3734 }
  3736 }
  3735 
  3737 
  3736 void ec_poll(struct net_device *netdev)
  3738 void ec_poll(struct net_device *netdev)
  3737 {
  3739 {
  3738     struct e1000_adapter *adapter = netdev_priv(netdev);
  3740 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3739 
  3741 
  3740     if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) {
  3742 	if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) {
  3741         e1000_watchdog((unsigned long) adapter);
  3743 		e1000_watchdog((unsigned long) adapter);
  3742         adapter->ec_watchdog_jiffies = jiffies;
  3744 		adapter->ec_watchdog_jiffies = jiffies;
  3743     }
  3745 	}
  3744 
  3746 
  3745 #ifdef CONFIG_PCI_MSI
  3747 #ifdef CONFIG_PCI_MSI
  3746 	e1000_intr_msi(0, netdev);
  3748 	e1000_intr_msi(0, netdev);
  3747 #else
  3749 #else
  3748     e1000_intr(0, netdev);
  3750 	e1000_intr(0, netdev);
  3749 #endif
  3751 #endif
  3750 }
  3752 }
  3751 
  3753 
  3752 /**
  3754 /**
  3753  * e1000_intr_msi - Interrupt Handler
  3755  * e1000_intr_msi - Interrupt Handler
  3760 	struct net_device *netdev = data;
  3762 	struct net_device *netdev = data;
  3761 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3763 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3762 	struct e1000_hw *hw = &adapter->hw;
  3764 	struct e1000_hw *hw = &adapter->hw;
  3763 	u32 icr = er32(ICR);
  3765 	u32 icr = er32(ICR);
  3764 
  3766 
  3765  	if (adapter->ecdev) {
  3767 	if (adapter->ecdev) {
  3766  		int i, ec_work_done = 0;
  3768 		int i, ec_work_done = 0;
  3767  		for (i = 0; i < E1000_MAX_INTR; i++) {
  3769 		for (i = 0; i < E1000_MAX_INTR; i++) {
  3768  			if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring,
  3770 			if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring,
  3769                              &ec_work_done, 100) &&
  3771 							&ec_work_done, 100) &&
  3770  						!e1000_clean_tx_irq(adapter, adapter->tx_ring))) {
  3772 						!e1000_clean_tx_irq(adapter, adapter->tx_ring))) {
  3771  				break;
  3773 				break;
  3772  			}
  3774 			}
  3773  		}
  3775 		}
  3774  	} else {
  3776 	} else {
  3775 		/* in NAPI mode read ICR disables interrupts using IAM */
  3777 		/* in NAPI mode read ICR disables interrupts using IAM */
  3776 
  3778 
  3777 		if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
  3779 		if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
  3778 			hw->get_link_status = 1;
  3780 			hw->get_link_status = 1;
  3779 			/* 80003ES2LAN workaround-- For packet buffer work-around on
  3781 			/* 80003ES2LAN workaround-- For packet buffer work-around on
  4133 			buffer_info->skb = skb;
  4135 			buffer_info->skb = skb;
  4134 			goto next_desc;
  4136 			goto next_desc;
  4135 		}
  4137 		}
  4136 
  4138 
  4137 		if (!adapter->ecdev &&
  4139 		if (!adapter->ecdev &&
  4138                 unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {
  4140 				unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {
  4139 			last_byte = *(skb->data + length - 1);
  4141 			last_byte = *(skb->data + length - 1);
  4140 			if (TBI_ACCEPT(hw, status, rx_desc->errors, length,
  4142 			if (TBI_ACCEPT(hw, status, rx_desc->errors, length,
  4141 				       last_byte)) {
  4143 				       last_byte)) {
  4142 				spin_lock_irqsave(&adapter->stats_lock, flags);
  4144 				spin_lock_irqsave(&adapter->stats_lock, flags);
  4143 				e1000_tbi_adjust_stats(hw, &adapter->stats,
  4145 				e1000_tbi_adjust_stats(hw, &adapter->stats,