devices/e1000e/netdev-2.6.33-ethercat.c
changeset 2589 2b9c78543663
parent 2174 cedacf485d81
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
  2911 	/* hardware has been reset, we need to reload some things */
  2911 	/* hardware has been reset, we need to reload some things */
  2912 	e1000_configure(adapter);
  2912 	e1000_configure(adapter);
  2913 
  2913 
  2914 	clear_bit(__E1000_DOWN, &adapter->state);
  2914 	clear_bit(__E1000_DOWN, &adapter->state);
  2915 
  2915 
  2916 	if (!adapter->ecdev) 
  2916 	if (!adapter->ecdev)
  2917 		napi_enable(&adapter->napi);
  2917 		napi_enable(&adapter->napi);
  2918 
  2918 
  2919 	if (adapter->msix_entries)
  2919 	if (adapter->msix_entries)
  2920 		e1000_configure_msix(adapter);
  2920 		e1000_configure_msix(adapter);
  2921 
  2921 
  2945 	/* disable receives in the hardware */
  2945 	/* disable receives in the hardware */
  2946 	rctl = er32(RCTL);
  2946 	rctl = er32(RCTL);
  2947 	ew32(RCTL, rctl & ~E1000_RCTL_EN);
  2947 	ew32(RCTL, rctl & ~E1000_RCTL_EN);
  2948 	/* flush and sleep below */
  2948 	/* flush and sleep below */
  2949 
  2949 
  2950 	if (!adapter->ecdev) 
  2950 	if (!adapter->ecdev)
  2951 		netif_stop_queue(netdev);
  2951 		netif_stop_queue(netdev);
  2952 
  2952 
  2953 	/* disable transmits in the hardware */
  2953 	/* disable transmits in the hardware */
  2954 	tctl = er32(TCTL);
  2954 	tctl = er32(TCTL);
  2955 	tctl &= ~E1000_TCTL_EN;
  2955 	tctl &= ~E1000_TCTL_EN;
  3235 	}
  3235 	}
  3236 
  3236 
  3237 	/* From here on the code is the same as e1000e_up() */
  3237 	/* From here on the code is the same as e1000e_up() */
  3238 	clear_bit(__E1000_DOWN, &adapter->state);
  3238 	clear_bit(__E1000_DOWN, &adapter->state);
  3239 
  3239 
  3240 	napi_enable(&adapter->napi);
  3240 	if (!adapter->ecdev) {
  3241 
  3241 		napi_enable(&adapter->napi);
  3242 	e1000_irq_enable(adapter);
  3242 
  3243 
  3243 		e1000_irq_enable(adapter);
  3244 	netif_start_queue(netdev);
  3244 
       
  3245 		netif_start_queue(netdev);
       
  3246 	}
  3245 
  3247 
  3246 	/* fire a link status change interrupt to start the watchdog */
  3248 	/* fire a link status change interrupt to start the watchdog */
  3247 	ew32(ICS, E1000_ICS_LSC);
  3249 	ew32(ICS, E1000_ICS_LSC);
  3248 
  3250 
  3249 	return 0;
  3251 	return 0;
  3652 	if ((e1000e_enable_tx_pkt_filtering(hw)) &&
  3654 	if ((e1000e_enable_tx_pkt_filtering(hw)) &&
  3653 	    (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id))
  3655 	    (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id))
  3654 		e1000_update_mng_vlan(adapter);
  3656 		e1000_update_mng_vlan(adapter);
  3655 
  3657 
  3656 	if (link) {
  3658 	if (link) {
  3657 		if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) 
  3659 		if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev))
  3658 				|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
  3660 				|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
  3659 			bool txb2b = 1;
  3661 			bool txb2b = 1;
  3660 			/* update snapshot of PHY registers on LSC */
  3662 			/* update snapshot of PHY registers on LSC */
  3661 			e1000_phy_read_status(adapter);
  3663 			e1000_phy_read_status(adapter);
  3662 			mac->ops.get_link_up_info(&adapter->hw,
  3664 			mac->ops.get_link_up_info(&adapter->hw,
  3752 			if (phy->ops.cfg_on_link_up)
  3754 			if (phy->ops.cfg_on_link_up)
  3753 				phy->ops.cfg_on_link_up(hw);
  3755 				phy->ops.cfg_on_link_up(hw);
  3754 
  3756 
  3755 			if (adapter->ecdev)
  3757 			if (adapter->ecdev)
  3756 				ecdev_set_link(adapter->ecdev, 1);
  3758 				ecdev_set_link(adapter->ecdev, 1);
  3757 			else 
  3759 			else
  3758 				netif_carrier_on(netdev);
  3760 				netif_carrier_on(netdev);
  3759 
  3761 
  3760 			if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state))
  3762 			if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state))
  3761 				mod_timer(&adapter->phy_info_timer,
  3763 				mod_timer(&adapter->phy_info_timer,
  3762 					  round_jiffies(jiffies + 2 * HZ));
  3764 					  round_jiffies(jiffies + 2 * HZ));
  3763 		}
  3765 		}
  3764 	} else {
  3766 	} else {
  3765 		if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) 
  3767 		if ((adapter->ecdev && ecdev_get_link(adapter->ecdev))
  3766 				|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
  3768 				|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
  3767 			adapter->link_speed = 0;
  3769 			adapter->link_speed = 0;
  3768 			adapter->link_duplex = 0;
  3770 			adapter->link_duplex = 0;
  3769 			/* Link status message must follow this format */
  3771 			/* Link status message must follow this format */
  3770 			printk(KERN_INFO "e1000e: %s NIC Link is Down\n",
  3772 			printk(KERN_INFO "e1000e: %s NIC Link is Down\n",
  3795 	adapter->gotc = adapter->stats.gotc - adapter->gotc_old;
  3797 	adapter->gotc = adapter->stats.gotc - adapter->gotc_old;
  3796 	adapter->gotc_old = adapter->stats.gotc;
  3798 	adapter->gotc_old = adapter->stats.gotc;
  3797 
  3799 
  3798 	e1000e_update_adaptive(&adapter->hw);
  3800 	e1000e_update_adaptive(&adapter->hw);
  3799 
  3801 
  3800 	if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) 
  3802 	if (!adapter->ecdev && !netif_carrier_ok(netdev)) {
  3801 			|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
       
  3802 		tx_pending = (e1000_desc_unused(tx_ring) + 1 <
  3803 		tx_pending = (e1000_desc_unused(tx_ring) + 1 <
  3803 			       tx_ring->count);
  3804 			       tx_ring->count);
  3804 		if (tx_pending) {
  3805 		if (tx_pending) {
  3805 			/*
  3806 			/*
  3806 			 * We've lost link, so the controller stops DMA,
  3807 			 * We've lost link, so the controller stops DMA,
  4172 }
  4173 }
  4173 
  4174 
  4174 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  4175 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  4175 {
  4176 {
  4176 	struct e1000_adapter *adapter = netdev_priv(netdev);
  4177 	struct e1000_adapter *adapter = netdev_priv(netdev);
       
  4178 
       
  4179 	if (adapter->ecdev) {
       
  4180 		return -EBUSY;
       
  4181 	}
  4177 
  4182 
  4178 	netif_stop_queue(netdev);
  4183 	netif_stop_queue(netdev);
  4179 	/*
  4184 	/*
  4180 	 * Herbert's original patch had:
  4185 	 * Herbert's original patch had:
  4181 	 *  smp_mb__after_netif_stop_queue();
  4186 	 *  smp_mb__after_netif_stop_queue();
  4857 static void e1000_shutdown(struct pci_dev *pdev)
  4862 static void e1000_shutdown(struct pci_dev *pdev)
  4858 {
  4863 {
  4859 	bool wake = false;
  4864 	bool wake = false;
  4860 	struct net_device *netdev = pci_get_drvdata(pdev);
  4865 	struct net_device *netdev = pci_get_drvdata(pdev);
  4861 	struct e1000_adapter *adapter = netdev_priv(netdev);
  4866 	struct e1000_adapter *adapter = netdev_priv(netdev);
  4862 	
  4867 
  4863 	if (adapter->ecdev)
  4868 	if (adapter->ecdev)
  4864 		return;
  4869 		return;
  4865 
  4870 
  4866 	__e1000_shutdown(pdev, &wake);
  4871 	__e1000_shutdown(pdev, &wake);
  4867 
  4872 
  5357 	if (!(adapter->flags & FLAG_HAS_AMT))
  5362 	if (!(adapter->flags & FLAG_HAS_AMT))
  5358 		e1000_get_hw_control(adapter);
  5363 		e1000_get_hw_control(adapter);
  5359 
  5364 
  5360 	adapter->ecdev = ecdev_offer(netdev,ec_poll,THIS_MODULE);
  5365 	adapter->ecdev = ecdev_offer(netdev,ec_poll,THIS_MODULE);
  5361 	if (adapter->ecdev) {
  5366 	if (adapter->ecdev) {
  5362 		if (ecdev_open(adapter->ecdev)) {
  5367 		err = ecdev_open(adapter->ecdev);
       
  5368 		if (err) {
  5363 			ecdev_withdraw(adapter->ecdev);
  5369 			ecdev_withdraw(adapter->ecdev);
  5364 			goto err_register;
  5370 			goto err_register;
  5365 		}
  5371 		}
  5366 	} else {
  5372 	} else {
  5367 		strcpy(netdev->name, "eth%d");
  5373 		strcpy(netdev->name, "eth%d");