devices/e1000e/netdev-3.2-ethercat.c
changeset 2589 2b9c78543663
parent 2406 fee219bb31a9
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 
       
    27   vim: noexpandtab
    26 
    28 
    27 *******************************************************************************/
    29 *******************************************************************************/
    28 
    30 
    29 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
    31 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
    30 
    32 
   982 			ecdev_receive(adapter->ecdev, skb->data, length);
   984 			ecdev_receive(adapter->ecdev, skb->data, length);
   983 			adapter->ec_watchdog_jiffies = jiffies;
   985 			adapter->ec_watchdog_jiffies = jiffies;
   984 		} else {
   986 		} else {
   985 		    e1000_receive_skb(adapter, netdev, skb, staterr,
   987 		    e1000_receive_skb(adapter, netdev, skb, staterr,
   986 				      rx_desc->wb.upper.vlan);
   988 				      rx_desc->wb.upper.vlan);
   987         }
   989 		}
   988 
   990 
   989 next_desc:
   991 next_desc:
   990 		rx_desc->wb.upper.status_error &= cpu_to_le32(~0xFF);
   992 		rx_desc->wb.upper.status_error &= cpu_to_le32(~0xFF);
   991 
   993 
   992 		/* return some buffers to hardware, one at a time is too slow */
   994 		/* return some buffers to hardware, one at a time is too slow */
  1063 		adapter->tx_hang_recheck = true;
  1065 		adapter->tx_hang_recheck = true;
  1064 		return;
  1066 		return;
  1065 	}
  1067 	}
  1066 	/* Real hang detected */
  1068 	/* Real hang detected */
  1067 	adapter->tx_hang_recheck = false;
  1069 	adapter->tx_hang_recheck = false;
  1068 	netif_stop_queue(netdev);
  1070 	if (!adapter->ecdev) {
       
  1071 		netif_stop_queue(netdev);
       
  1072 	}
  1069 
  1073 
  1070 	e1e_rphy(hw, PHY_STATUS, &phy_status);
  1074 	e1e_rphy(hw, PHY_STATUS, &phy_status);
  1071 	e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status);
  1075 	e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status);
  1072 	e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status);
  1076 	e1e_rphy(hw, PHY_EXT_STATUS, &phy_ext_status);
  1073 
  1077 
  1662 	struct net_device *netdev = data;
  1666 	struct net_device *netdev = data;
  1663 	struct e1000_adapter *adapter = netdev_priv(netdev);
  1667 	struct e1000_adapter *adapter = netdev_priv(netdev);
  1664 	struct e1000_hw *hw = &adapter->hw;
  1668 	struct e1000_hw *hw = &adapter->hw;
  1665 	u32 icr = er32(ICR);
  1669 	u32 icr = er32(ICR);
  1666 
  1670 
  1667  	if (adapter->ecdev) {
  1671 	if (adapter->ecdev) {
  1668  		int ec_work_done = 0;
  1672 		int ec_work_done = 0;
  1669  		adapter->clean_rx(adapter, &ec_work_done, 100);
  1673 		adapter->clean_rx(adapter, &ec_work_done, 100);
  1670  		e1000_clean_tx_irq(adapter);
  1674 		e1000_clean_tx_irq(adapter);
  1671 		return IRQ_HANDLED;
  1675 		return IRQ_HANDLED;
  1672 	}
  1676 	}
  1673 	/*
  1677 	/*
  1674 	 * read ICR disables interrupts using IAM
  1678 	 * read ICR disables interrupts using IAM
  1675 	 */
  1679 	 */
  1766 		/* guard against interrupt when we're going down */
  1770 		/* guard against interrupt when we're going down */
  1767 		if (!test_bit(__E1000_DOWN, &adapter->state))
  1771 		if (!test_bit(__E1000_DOWN, &adapter->state))
  1768 			mod_timer(&adapter->watchdog_timer, jiffies + 1);
  1772 			mod_timer(&adapter->watchdog_timer, jiffies + 1);
  1769 	}
  1773 	}
  1770 
  1774 
  1771  	if (adapter->ecdev) {
  1775 	if (adapter->ecdev) {
  1772  		int ec_work_done = 0;
  1776 		int ec_work_done = 0;
  1773  		adapter->clean_rx(adapter, &ec_work_done, 100);
  1777 		adapter->clean_rx(adapter, &ec_work_done, 100);
  1774  		e1000_clean_tx_irq(adapter);
  1778 		e1000_clean_tx_irq(adapter);
  1775 		return IRQ_HANDLED;
  1779 		return IRQ_HANDLED;
  1776 	}
  1780 	}
  1777 
  1781 
  1778 	if (napi_schedule_prep(&adapter->napi)) {
  1782 	if (napi_schedule_prep(&adapter->napi)) {
  1779 		adapter->total_tx_bytes = 0;
  1783 		adapter->total_tx_bytes = 0;
  1849 		writel(1000000000 / (adapter->rx_ring->itr_val * 256),
  1853 		writel(1000000000 / (adapter->rx_ring->itr_val * 256),
  1850 		       adapter->hw.hw_addr + adapter->rx_ring->itr_register);
  1854 		       adapter->hw.hw_addr + adapter->rx_ring->itr_register);
  1851 		adapter->rx_ring->set_itr = 0;
  1855 		adapter->rx_ring->set_itr = 0;
  1852 	}
  1856 	}
  1853 
  1857 
  1854  	if (adapter->ecdev) {
  1858 	if (adapter->ecdev) {
  1855  		int ec_work_done = 0;
  1859 		int ec_work_done = 0;
  1856  		adapter->clean_rx(adapter, &ec_work_done, 100);
  1860 		adapter->clean_rx(adapter, &ec_work_done, 100);
  1857 	} else {
  1861 	} else {
  1858 		if (napi_schedule_prep(&adapter->napi)) {
  1862 		if (napi_schedule_prep(&adapter->napi)) {
  1859 			adapter->total_rx_bytes = 0;
  1863 			adapter->total_rx_bytes = 0;
  1860 			adapter->total_rx_packets = 0;
  1864 			adapter->total_rx_packets = 0;
  1861 			__napi_schedule(&adapter->napi);
  1865 			__napi_schedule(&adapter->napi);
  3521 	clear_bit(__E1000_DOWN, &adapter->state);
  3525 	clear_bit(__E1000_DOWN, &adapter->state);
  3522 
  3526 
  3523 	if (!adapter->ecdev) {
  3527 	if (!adapter->ecdev) {
  3524 		napi_enable(&adapter->napi);
  3528 		napi_enable(&adapter->napi);
  3525 	}
  3529 	}
       
  3530 
  3526 	if (adapter->msix_entries)
  3531 	if (adapter->msix_entries)
  3527 		e1000_configure_msix(adapter);
  3532 		e1000_configure_msix(adapter);
       
  3533 
  3528 	if (!adapter->ecdev) {
  3534 	if (!adapter->ecdev) {
  3529 		e1000_irq_enable(adapter);
  3535 		e1000_irq_enable(adapter);
  3530 
  3536 
  3531 	netif_start_queue(adapter->netdev);
  3537 		netif_start_queue(adapter->netdev);
  3532 
  3538 
  3533 		/* fire a link change interrupt to start the watchdog */
  3539 		/* fire a link change interrupt to start the watchdog */
  3534 		if (adapter->msix_entries)
  3540 		if (adapter->msix_entries)
  3535 			ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
  3541 			ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
  3536 		else
  3542 		else
  3573 	rctl = er32(RCTL);
  3579 	rctl = er32(RCTL);
  3574 	if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
  3580 	if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX))
  3575 		ew32(RCTL, rctl & ~E1000_RCTL_EN);
  3581 		ew32(RCTL, rctl & ~E1000_RCTL_EN);
  3576 	/* flush and sleep below */
  3582 	/* flush and sleep below */
  3577 
  3583 
  3578 	if (!adapter->ecdev) 
  3584 	if (!adapter->ecdev)
  3579 		netif_stop_queue(netdev);
  3585 		netif_stop_queue(netdev);
  3580 
  3586 
  3581 	/* disable transmits in the hardware */
  3587 	/* disable transmits in the hardware */
  3582 	tctl = er32(TCTL);
  3588 	tctl = er32(TCTL);
  3583 	tctl &= ~E1000_TCTL_EN;
  3589 	tctl &= ~E1000_TCTL_EN;
  3869 
  3875 
  3870 	if (!adapter->ecdev) {
  3876 	if (!adapter->ecdev) {
  3871 		napi_enable(&adapter->napi);
  3877 		napi_enable(&adapter->napi);
  3872 
  3878 
  3873 		e1000_irq_enable(adapter);
  3879 		e1000_irq_enable(adapter);
       
  3880 	}
  3874 
  3881 
  3875 	adapter->tx_hang_recheck = false;
  3882 	adapter->tx_hang_recheck = false;
       
  3883 
       
  3884 	if (!adapter->ecdev) {
  3876 		netif_start_queue(netdev);
  3885 		netif_start_queue(netdev);
  3877 
  3886 	}
  3878 		adapter->idle_check = true;
  3887 
  3879 		pm_runtime_put(&pdev->dev);
  3888 	adapter->idle_check = true;
  3880 
  3889 	pm_runtime_put(&pdev->dev);
  3881 		/* fire a link status change interrupt to start the watchdog */
  3890 
  3882 		if (adapter->msix_entries)
  3891 	/* fire a link status change interrupt to start the watchdog */
  3883 			ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
  3892 	if (adapter->msix_entries)
  3884 		else
  3893 		ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
  3885 			ew32(ICS, E1000_ICS_LSC);
  3894 	else
  3886 	}
  3895 		ew32(ICS, E1000_ICS_LSC);
  3887 
  3896 
  3888 	return 0;
  3897 	return 0;
  3889 
  3898 
  3890 err_req_irq:
  3899 err_req_irq:
  3891 	e1000e_release_hw_control(adapter);
  3900 	e1000e_release_hw_control(adapter);
  4389 	if ((e1000e_enable_tx_pkt_filtering(hw)) &&
  4398 	if ((e1000e_enable_tx_pkt_filtering(hw)) &&
  4390 	    (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id))
  4399 	    (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id))
  4391 		e1000_update_mng_vlan(adapter);
  4400 		e1000_update_mng_vlan(adapter);
  4392 
  4401 
  4393 	if (link) {
  4402 	if (link) {
  4394 		if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) 
  4403 		if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev))
  4395 				|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
  4404 				|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
  4396 			bool txb2b = 1;
  4405 			bool txb2b = 1;
  4397 
  4406 
  4398 			/* Cancel scheduled suspend requests. */
  4407 			/* Cancel scheduled suspend requests. */
  4399 			pm_runtime_resume(netdev->dev.parent);
  4408 			pm_runtime_resume(netdev->dev.parent);
  4487 			if (phy->ops.cfg_on_link_up)
  4496 			if (phy->ops.cfg_on_link_up)
  4488 				phy->ops.cfg_on_link_up(hw);
  4497 				phy->ops.cfg_on_link_up(hw);
  4489 
  4498 
  4490 			if (adapter->ecdev)
  4499 			if (adapter->ecdev)
  4491 				ecdev_set_link(adapter->ecdev, 1);
  4500 				ecdev_set_link(adapter->ecdev, 1);
  4492 			else 
  4501 			else
  4493 				netif_carrier_on(netdev);
  4502 				netif_carrier_on(netdev);
  4494 
  4503 
  4495 			if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state))
  4504 			if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state))
  4496 				mod_timer(&adapter->phy_info_timer,
  4505 				mod_timer(&adapter->phy_info_timer,
  4497 					  round_jiffies(jiffies + 2 * HZ));
  4506 					  round_jiffies(jiffies + 2 * HZ));
  4498 		}
  4507 		}
  4499 	} else {
  4508 	} else {
  4500 		if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) 
  4509 		if ((adapter->ecdev && ecdev_get_link(adapter->ecdev))
  4501 				|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
  4510 				|| (!adapter->ecdev && netif_carrier_ok(netdev))) {
  4502 			adapter->link_speed = 0;
  4511 			adapter->link_speed = 0;
  4503 			adapter->link_duplex = 0;
  4512 			adapter->link_duplex = 0;
  4504 			/* Link status message must follow this format */
  4513 			/* Link status message must follow this format */
  4505 			printk(KERN_INFO "e1000e: %s NIC Link is Down\n",
  4514 			printk(KERN_INFO "e1000e: %s NIC Link is Down\n",
  4535 	adapter->gotc_old = adapter->stats.gotc;
  4544 	adapter->gotc_old = adapter->stats.gotc;
  4536 	spin_unlock(&adapter->stats64_lock);
  4545 	spin_unlock(&adapter->stats64_lock);
  4537 
  4546 
  4538 	e1000e_update_adaptive(&adapter->hw);
  4547 	e1000e_update_adaptive(&adapter->hw);
  4539 
  4548 
  4540 	if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) 
  4549 	if (!adapter->ecdev && !netif_carrier_ok(netdev) &&
  4541 			|| (!adapter->ecdev && (!netif_carrier_ok(netdev) &&
  4550 		(e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) {
  4542 	    	(e1000_desc_unused(tx_ring) + 1 < tx_ring->count)))) {
       
  4543 		/*
  4551 		/*
  4544 		 * We've lost link, so the controller stops DMA,
  4552 		 * We've lost link, so the controller stops DMA,
  4545 		 * but we've got queued Tx work that's never going
  4553 		 * but we've got queued Tx work that's never going
  4546 		 * to get done, so reset controller to flush Tx.
  4554 		 * to get done, so reset controller to flush Tx.
  4547 		 * (Do the reset outside of interrupt context).
  4555 		 * (Do the reset outside of interrupt context).
  4941 }
  4949 }
  4942 
  4950 
  4943 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  4951 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size)
  4944 {
  4952 {
  4945 	struct e1000_adapter *adapter = netdev_priv(netdev);
  4953 	struct e1000_adapter *adapter = netdev_priv(netdev);
       
  4954 
       
  4955 	if (adapter->ecdev) {
       
  4956 		return -EBUSY;
       
  4957 	}
  4946 
  4958 
  4947 	netif_stop_queue(netdev);
  4959 	netif_stop_queue(netdev);
  4948 	/*
  4960 	/*
  4949 	 * Herbert's original patch had:
  4961 	 * Herbert's original patch had:
  4950 	 *  smp_mb__after_netif_stop_queue();
  4962 	 *  smp_mb__after_netif_stop_queue();
  5765 static void e1000_shutdown(struct pci_dev *pdev)
  5777 static void e1000_shutdown(struct pci_dev *pdev)
  5766 {
  5778 {
  5767 	bool wake = false;
  5779 	bool wake = false;
  5768 	struct net_device *netdev = pci_get_drvdata(pdev);
  5780 	struct net_device *netdev = pci_get_drvdata(pdev);
  5769 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5781 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5770 	
  5782 
  5771 	if (adapter->ecdev)
  5783 	if (adapter->ecdev)
  5772 		return;
  5784 		return;
  5773 
  5785 
  5774 	__e1000_shutdown(pdev, &wake, false);
  5786 	__e1000_shutdown(pdev, &wake, false);
  5775 
  5787 
  6035 void ec_poll(struct net_device *netdev)
  6047 void ec_poll(struct net_device *netdev)
  6036 {
  6048 {
  6037 	struct e1000_adapter *adapter = netdev_priv(netdev);
  6049 	struct e1000_adapter *adapter = netdev_priv(netdev);
  6038 
  6050 
  6039 	if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) {
  6051 	if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) {
  6040 		e1000_watchdog((unsigned long) adapter);
  6052 		struct e1000_hw *hw = &adapter->hw;
       
  6053 		hw->mac.get_link_status = true;
       
  6054 		e1000_watchdog_task(&adapter->watchdog_task);
  6041 		adapter->ec_watchdog_jiffies = jiffies;
  6055 		adapter->ec_watchdog_jiffies = jiffies;
  6042 	}
  6056 	}
  6043 
  6057 
  6044 #ifdef CONFIG_PCI_MSI
  6058 #ifdef CONFIG_PCI_MSI
  6045 	e1000_intr_msi(0,netdev);
  6059 	e1000_intr_msi(0, netdev);
  6046 #else
  6060 #else
  6047 	e1000_intr(0,netdev);
  6061 	e1000_intr(0, netdev);
  6048 #endif
  6062 #endif
  6049 }
  6063 }
  6050 
  6064 
  6051 /**
  6065 /**
  6052  * e1000_probe - Device Initialization Routine
  6066  * e1000_probe - Device Initialization Routine
  6344 	if (!(adapter->flags & FLAG_HAS_AMT))
  6358 	if (!(adapter->flags & FLAG_HAS_AMT))
  6345 		e1000e_get_hw_control(adapter);
  6359 		e1000e_get_hw_control(adapter);
  6346 
  6360 
  6347 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  6361 	adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE);
  6348 	if (adapter->ecdev) {
  6362 	if (adapter->ecdev) {
  6349 		if (ecdev_open(adapter->ecdev)) {
  6363 		err = ecdev_open(adapter->ecdev);
       
  6364 		if (err) {
  6350 			ecdev_withdraw(adapter->ecdev);
  6365 			ecdev_withdraw(adapter->ecdev);
  6351 			goto err_register;
  6366 			goto err_register;
  6352 		}
  6367 		}
       
  6368 		adapter->ec_watchdog_jiffies = jiffies;
  6353 	} else {
  6369 	} else {
  6354 		strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1);
  6370 		strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1);
  6355 		err = register_netdev(netdev);
  6371 		err = register_netdev(netdev);
  6356 		if (err)
  6372 		if (err)
  6357 			goto err_register;
  6373 			goto err_register;