Commit 421e02f0 authored by Jeff Kirsher's avatar Jeff Kirsher Committed by Jeff Garzik

igb: add IGB_DCA instead of selecting INTEL_IOATDMA

Add a bool IGB_DCA defined to y if IGB and DCA are enabled, but IGB isn't y while DCA=m.  And thus remove the need to select INTEL_IOATDMA when IGB is enabled, so that non-x86 architectures can build the igb driver.
Based on work/patch from Brice Goglin <brice@myri.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent c54106bb
...@@ -2003,6 +2003,11 @@ config IGB_LRO ...@@ -2003,6 +2003,11 @@ config IGB_LRO
If in doubt, say N. If in doubt, say N.
config IGB_DCA
bool "Enable DCA"
default y
depends on IGB && DCA && !(IGB=y && DCA=m)
source "drivers/net/ixp2000/Kconfig" source "drivers/net/ixp2000/Kconfig"
config MYRI_SBUS config MYRI_SBUS
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/if_ether.h> #include <linux/if_ether.h>
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
#include <linux/dca.h> #include <linux/dca.h>
#endif #endif
#include "igb.h" #include "igb.h"
...@@ -107,11 +107,11 @@ static irqreturn_t igb_msix_other(int irq, void *); ...@@ -107,11 +107,11 @@ static irqreturn_t igb_msix_other(int irq, void *);
static irqreturn_t igb_msix_rx(int irq, void *); static irqreturn_t igb_msix_rx(int irq, void *);
static irqreturn_t igb_msix_tx(int irq, void *); static irqreturn_t igb_msix_tx(int irq, void *);
static int igb_clean_rx_ring_msix(struct napi_struct *, int); static int igb_clean_rx_ring_msix(struct napi_struct *, int);
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
static void igb_update_rx_dca(struct igb_ring *); static void igb_update_rx_dca(struct igb_ring *);
static void igb_update_tx_dca(struct igb_ring *); static void igb_update_tx_dca(struct igb_ring *);
static void igb_setup_dca(struct igb_adapter *); static void igb_setup_dca(struct igb_adapter *);
#endif /* CONFIG_DCA */ #endif /* CONFIG_IGB_DCA */
static bool igb_clean_tx_irq(struct igb_ring *); static bool igb_clean_tx_irq(struct igb_ring *);
static int igb_poll(struct napi_struct *, int); static int igb_poll(struct napi_struct *, int);
static bool igb_clean_rx_irq_adv(struct igb_ring *, int *, int); static bool igb_clean_rx_irq_adv(struct igb_ring *, int *, int);
...@@ -132,7 +132,7 @@ static int igb_suspend(struct pci_dev *, pm_message_t); ...@@ -132,7 +132,7 @@ static int igb_suspend(struct pci_dev *, pm_message_t);
static int igb_resume(struct pci_dev *); static int igb_resume(struct pci_dev *);
#endif #endif
static void igb_shutdown(struct pci_dev *); static void igb_shutdown(struct pci_dev *);
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
static int igb_notify_dca(struct notifier_block *, unsigned long, void *); static int igb_notify_dca(struct notifier_block *, unsigned long, void *);
static struct notifier_block dca_notifier = { static struct notifier_block dca_notifier = {
.notifier_call = igb_notify_dca, .notifier_call = igb_notify_dca,
...@@ -208,7 +208,7 @@ static int __init igb_init_module(void) ...@@ -208,7 +208,7 @@ static int __init igb_init_module(void)
global_quad_port_a = 0; global_quad_port_a = 0;
ret = pci_register_driver(&igb_driver); ret = pci_register_driver(&igb_driver);
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
dca_register_notify(&dca_notifier); dca_register_notify(&dca_notifier);
#endif #endif
return ret; return ret;
...@@ -224,7 +224,7 @@ module_init(igb_init_module); ...@@ -224,7 +224,7 @@ module_init(igb_init_module);
**/ **/
static void __exit igb_exit_module(void) static void __exit igb_exit_module(void)
{ {
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
dca_unregister_notify(&dca_notifier); dca_unregister_notify(&dca_notifier);
#endif #endif
pci_unregister_driver(&igb_driver); pci_unregister_driver(&igb_driver);
...@@ -1261,7 +1261,7 @@ static int __devinit igb_probe(struct pci_dev *pdev, ...@@ -1261,7 +1261,7 @@ static int __devinit igb_probe(struct pci_dev *pdev,
if (err) if (err)
goto err_register; goto err_register;
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if ((adapter->flags & IGB_FLAG_HAS_DCA) && if ((adapter->flags & IGB_FLAG_HAS_DCA) &&
(dca_add_requester(&pdev->dev) == 0)) { (dca_add_requester(&pdev->dev) == 0)) {
adapter->flags |= IGB_FLAG_DCA_ENABLED; adapter->flags |= IGB_FLAG_DCA_ENABLED;
...@@ -1335,7 +1335,7 @@ static void __devexit igb_remove(struct pci_dev *pdev) ...@@ -1335,7 +1335,7 @@ static void __devexit igb_remove(struct pci_dev *pdev)
{ {
struct net_device *netdev = pci_get_drvdata(pdev); struct net_device *netdev = pci_get_drvdata(pdev);
struct igb_adapter *adapter = netdev_priv(netdev); struct igb_adapter *adapter = netdev_priv(netdev);
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
struct e1000_hw *hw = &adapter->hw; struct e1000_hw *hw = &adapter->hw;
#endif #endif
...@@ -1347,7 +1347,7 @@ static void __devexit igb_remove(struct pci_dev *pdev) ...@@ -1347,7 +1347,7 @@ static void __devexit igb_remove(struct pci_dev *pdev)
flush_scheduled_work(); flush_scheduled_work();
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if (adapter->flags & IGB_FLAG_DCA_ENABLED) { if (adapter->flags & IGB_FLAG_DCA_ENABLED) {
dev_info(&pdev->dev, "DCA disabled\n"); dev_info(&pdev->dev, "DCA disabled\n");
dca_remove_requester(&pdev->dev); dca_remove_requester(&pdev->dev);
...@@ -3295,7 +3295,7 @@ static irqreturn_t igb_msix_tx(int irq, void *data) ...@@ -3295,7 +3295,7 @@ static irqreturn_t igb_msix_tx(int irq, void *data)
struct igb_adapter *adapter = tx_ring->adapter; struct igb_adapter *adapter = tx_ring->adapter;
struct e1000_hw *hw = &adapter->hw; struct e1000_hw *hw = &adapter->hw;
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if (adapter->flags & IGB_FLAG_DCA_ENABLED) if (adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_tx_dca(tx_ring); igb_update_tx_dca(tx_ring);
#endif #endif
...@@ -3347,14 +3347,14 @@ static irqreturn_t igb_msix_rx(int irq, void *data) ...@@ -3347,14 +3347,14 @@ static irqreturn_t igb_msix_rx(int irq, void *data)
if (netif_rx_schedule_prep(adapter->netdev, &rx_ring->napi)) if (netif_rx_schedule_prep(adapter->netdev, &rx_ring->napi))
__netif_rx_schedule(adapter->netdev, &rx_ring->napi); __netif_rx_schedule(adapter->netdev, &rx_ring->napi);
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if (adapter->flags & IGB_FLAG_DCA_ENABLED) if (adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_rx_dca(rx_ring); igb_update_rx_dca(rx_ring);
#endif #endif
return IRQ_HANDLED; return IRQ_HANDLED;
} }
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
static void igb_update_rx_dca(struct igb_ring *rx_ring) static void igb_update_rx_dca(struct igb_ring *rx_ring)
{ {
u32 dca_rxctrl; u32 dca_rxctrl;
...@@ -3474,7 +3474,7 @@ static int igb_notify_dca(struct notifier_block *nb, unsigned long event, ...@@ -3474,7 +3474,7 @@ static int igb_notify_dca(struct notifier_block *nb, unsigned long event,
return ret_val ? NOTIFY_BAD : NOTIFY_DONE; return ret_val ? NOTIFY_BAD : NOTIFY_DONE;
} }
#endif /* CONFIG_DCA */ #endif /* CONFIG_IGB_DCA */
/** /**
* igb_intr_msi - Interrupt Handler * igb_intr_msi - Interrupt Handler
...@@ -3553,13 +3553,13 @@ static int igb_poll(struct napi_struct *napi, int budget) ...@@ -3553,13 +3553,13 @@ static int igb_poll(struct napi_struct *napi, int budget)
int tx_clean_complete, work_done = 0; int tx_clean_complete, work_done = 0;
/* this poll routine only supports one tx and one rx queue */ /* this poll routine only supports one tx and one rx queue */
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if (adapter->flags & IGB_FLAG_DCA_ENABLED) if (adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_tx_dca(&adapter->tx_ring[0]); igb_update_tx_dca(&adapter->tx_ring[0]);
#endif #endif
tx_clean_complete = igb_clean_tx_irq(&adapter->tx_ring[0]); tx_clean_complete = igb_clean_tx_irq(&adapter->tx_ring[0]);
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if (adapter->flags & IGB_FLAG_DCA_ENABLED) if (adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_rx_dca(&adapter->rx_ring[0]); igb_update_rx_dca(&adapter->rx_ring[0]);
#endif #endif
...@@ -3587,7 +3587,7 @@ static int igb_clean_rx_ring_msix(struct napi_struct *napi, int budget) ...@@ -3587,7 +3587,7 @@ static int igb_clean_rx_ring_msix(struct napi_struct *napi, int budget)
struct net_device *netdev = adapter->netdev; struct net_device *netdev = adapter->netdev;
int work_done = 0; int work_done = 0;
#ifdef CONFIG_DCA #ifdef CONFIG_IGB_DCA
if (adapter->flags & IGB_FLAG_DCA_ENABLED) if (adapter->flags & IGB_FLAG_DCA_ENABLED)
igb_update_rx_dca(rx_ring); igb_update_rx_dca(rx_ring);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment