devices/e1000e/netdev-2.6.35-ethercat.c
branchstable-1.5
changeset 2473 f62b64fdbc23
parent 2472 50b861e981f7
child 2500 97fd83907c7c
equal deleted inserted replaced
2472:50b861e981f7 2473:f62b64fdbc23
    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 
  1530 	struct net_device *netdev = data;
  1532 	struct net_device *netdev = data;
  1531 	struct e1000_adapter *adapter = netdev_priv(netdev);
  1533 	struct e1000_adapter *adapter = netdev_priv(netdev);
  1532 	struct e1000_hw *hw = &adapter->hw;
  1534 	struct e1000_hw *hw = &adapter->hw;
  1533 	u32 icr = er32(ICR);
  1535 	u32 icr = er32(ICR);
  1534 
  1536 
  1535  	if (adapter->ecdev) {
  1537 	if (adapter->ecdev) {
  1536  		int ec_work_done = 0;
  1538 		int ec_work_done = 0;
  1537  		adapter->clean_rx(adapter, &ec_work_done, 100);
  1539 		adapter->clean_rx(adapter, &ec_work_done, 100);
  1538  		e1000_clean_tx_irq(adapter);
  1540 		e1000_clean_tx_irq(adapter);
  1539 		return IRQ_HANDLED;
  1541 		return IRQ_HANDLED;
  1540 	}
  1542 	}
  1541 	/*
  1543 	/*
  1542 	 * read ICR disables interrupts using IAM
  1544 	 * read ICR disables interrupts using IAM
  1543 	 */
  1545 	 */
  1634 		/* guard against interrupt when we're going down */
  1636 		/* guard against interrupt when we're going down */
  1635 		if (!test_bit(__E1000_DOWN, &adapter->state))
  1637 		if (!test_bit(__E1000_DOWN, &adapter->state))
  1636 			mod_timer(&adapter->watchdog_timer, jiffies + 1);
  1638 			mod_timer(&adapter->watchdog_timer, jiffies + 1);
  1637 	}
  1639 	}
  1638 
  1640 
  1639  	if (adapter->ecdev) {
  1641 	if (adapter->ecdev) {
  1640  		int ec_work_done = 0;
  1642 		int ec_work_done = 0;
  1641  		adapter->clean_rx(adapter, &ec_work_done, 100);
  1643 		adapter->clean_rx(adapter, &ec_work_done, 100);
  1642  		e1000_clean_tx_irq(adapter);
  1644 		e1000_clean_tx_irq(adapter);
  1643 		return IRQ_HANDLED;
  1645 		return IRQ_HANDLED;
  1644 	}
  1646 	}
  1645 
  1647 
  1646 	if (napi_schedule_prep(&adapter->napi)) {
  1648 	if (napi_schedule_prep(&adapter->napi)) {
  1647 		adapter->total_tx_bytes = 0;
  1649 		adapter->total_tx_bytes = 0;
  1717 		writel(1000000000 / (adapter->rx_ring->itr_val * 256),
  1719 		writel(1000000000 / (adapter->rx_ring->itr_val * 256),
  1718 		       adapter->hw.hw_addr + adapter->rx_ring->itr_register);
  1720 		       adapter->hw.hw_addr + adapter->rx_ring->itr_register);
  1719 		adapter->rx_ring->set_itr = 0;
  1721 		adapter->rx_ring->set_itr = 0;
  1720 	}
  1722 	}
  1721 
  1723 
  1722  	if (adapter->ecdev) {
  1724 	if (adapter->ecdev) {
  1723  		int ec_work_done = 0;
  1725 		int ec_work_done = 0;
  1724  		adapter->clean_rx(adapter, &ec_work_done, 100);
  1726 		adapter->clean_rx(adapter, &ec_work_done, 100);
  1725 	} else {
  1727 	} else {
  1726 		if (napi_schedule_prep(&adapter->napi)) {
  1728 		if (napi_schedule_prep(&adapter->napi)) {
  1727 			adapter->total_rx_bytes = 0;
  1729 			adapter->total_rx_bytes = 0;
  1728 			adapter->total_rx_packets = 0;
  1730 			adapter->total_rx_packets = 0;
  1729 			__napi_schedule(&adapter->napi);
  1731 			__napi_schedule(&adapter->napi);
  3268 
  3270 
  3269 	clear_bit(__E1000_DOWN, &adapter->state);
  3271 	clear_bit(__E1000_DOWN, &adapter->state);
  3270 
  3272 
  3271 	if (!adapter->ecdev) {
  3273 	if (!adapter->ecdev) {
  3272 		napi_enable(&adapter->napi);
  3274 		napi_enable(&adapter->napi);
  3273     }
  3275 	}
  3274 
  3276 
  3275 	if (adapter->msix_entries)
  3277 	if (adapter->msix_entries)
  3276 		e1000_configure_msix(adapter);
  3278 		e1000_configure_msix(adapter);
  3277 	if (!adapter->ecdev) {
  3279 	if (!adapter->ecdev) {
  3278         e1000_irq_enable(adapter);
  3280 		e1000_irq_enable(adapter);
  3279 
  3281 
  3280         netif_wake_queue(adapter->netdev);
  3282 		netif_wake_queue(adapter->netdev);
  3281 
  3283 
  3282         /* fire a link change interrupt to start the watchdog */
  3284 		/* fire a link change interrupt to start the watchdog */
  3283         if (adapter->msix_entries)
  3285 		if (adapter->msix_entries)
  3284             ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
  3286 			ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
  3285         else
  3287 		else
  3286             ew32(ICS, E1000_ICS_LSC);
  3288 			ew32(ICS, E1000_ICS_LSC);
  3287 	}
  3289 	}
  3288 
  3290 
  3289 	return 0;
  3291 	return 0;
  3290 }
  3292 }
  3291 
  3293 
  3607 	}
  3609 	}
  3608 
  3610 
  3609 	/* From here on the code is the same as e1000e_up() */
  3611 	/* From here on the code is the same as e1000e_up() */
  3610 	clear_bit(__E1000_DOWN, &adapter->state);
  3612 	clear_bit(__E1000_DOWN, &adapter->state);
  3611 
  3613 
  3612 	napi_enable(&adapter->napi);
  3614 	if (!adapter->ecdev) {
  3613 
  3615 		napi_enable(&adapter->napi);
  3614 	e1000_irq_enable(adapter);
  3616 
  3615 
  3617 		e1000_irq_enable(adapter);
  3616 	netif_start_queue(netdev);
  3618 
       
  3619 		netif_start_queue(netdev);
       
  3620 	}
  3617 
  3621 
  3618 	adapter->idle_check = true;
  3622 	adapter->idle_check = true;
  3619 	pm_runtime_put(&pdev->dev);
  3623 	pm_runtime_put(&pdev->dev);
  3620 
  3624 
  3621 	/* fire a link status change interrupt to start the watchdog */
  3625 	/* fire a link status change interrupt to start the watchdog */
  4029 	u32 link, tctl;
  4033 	u32 link, tctl;
  4030 	int tx_pending = 0;
  4034 	int tx_pending = 0;
  4031 
  4035 
  4032 	link = e1000e_has_link(adapter);
  4036 	link = e1000e_has_link(adapter);
  4033 	if ((adapter->ecdev && (ecdev_get_link(adapter->ecdev)) && link)
  4037 	if ((adapter->ecdev && (ecdev_get_link(adapter->ecdev)) && link)
  4034             || (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)) {
  4038 			|| (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)) {
  4035 		/* Cancel scheduled suspend requests. */
  4039 		/* Cancel scheduled suspend requests. */
  4036 		pm_runtime_resume(netdev->dev.parent);
  4040 		pm_runtime_resume(netdev->dev.parent);
  4037 
  4041 
  4038 		e1000e_enable_receives(adapter);
  4042 		e1000e_enable_receives(adapter);
  4039 		goto link_up;
  4043 		goto link_up;
  5279 	int retval;
  5283 	int retval;
  5280 	bool wake;
  5284 	bool wake;
  5281 	struct net_device *netdev = pci_get_drvdata(pdev);
  5285 	struct net_device *netdev = pci_get_drvdata(pdev);
  5282 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5286 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5283 
  5287 
  5284     if (adapter->ecdev) {
  5288 	if (adapter->ecdev) {
  5285         return -EBUSY;
  5289 		return -EBUSY;
  5286     }
  5290 	}
  5287 
  5291 
  5288 	retval = __e1000_shutdown(pdev, &wake, false);
  5292 	retval = __e1000_shutdown(pdev, &wake, false);
  5289 	if (!retval)
  5293 	if (!retval)
  5290 		e1000_complete_shutdown(pdev, true, wake);
  5294 		e1000_complete_shutdown(pdev, true, wake);
  5291 
  5295 
  5296 {
  5300 {
  5297 	struct pci_dev *pdev = to_pci_dev(dev);
  5301 	struct pci_dev *pdev = to_pci_dev(dev);
  5298 	struct net_device *netdev = pci_get_drvdata(pdev);
  5302 	struct net_device *netdev = pci_get_drvdata(pdev);
  5299 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5303 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5300 
  5304 
  5301     if (adapter->ecdev) {
  5305 	if (adapter->ecdev) {
  5302         return -EBUSY;
  5306 		return -EBUSY;
  5303     }
  5307 	}
  5304 
  5308 
  5305 	if (e1000e_pm_ready(adapter))
  5309 	if (e1000e_pm_ready(adapter))
  5306 		adapter->idle_check = true;
  5310 		adapter->idle_check = true;
  5307 
  5311 
  5308 	return __e1000_resume(pdev);
  5312 	return __e1000_resume(pdev);