]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/netxen/netxen_nic_main.c
Merge git://git.infradead.org/users/cbou/battery-2.6.29
[linux-2.6-omap-h63xx.git] / drivers / net / netxen / netxen_nic_main.c
index 645d384fe87e67d96b0b60684a734165568bce38..3b17a79361478fa29fdd75107254ee49986cc9ea 100644 (file)
@@ -76,6 +76,7 @@ static void netxen_nic_poll_controller(struct net_device *netdev);
 #endif
 static irqreturn_t netxen_intr(int irq, void *data);
 static irqreturn_t netxen_msi_intr(int irq, void *data);
+static irqreturn_t netxen_msix_intr(int irq, void *data);
 
 /*  PCI Device ID Table  */
 #define ENTRY(device) \
@@ -1084,7 +1085,9 @@ static int netxen_nic_open(struct net_device *netdev)
                        for (ring = 0; ring < adapter->max_rds_rings; ring++)
                                netxen_post_rx_buffers(adapter, ctx, ring);
                }
-               if (NETXEN_IS_MSI_FAMILY(adapter))
+               if (adapter->flags & NETXEN_NIC_MSIX_ENABLED)
+                       handler = netxen_msix_intr;
+               else if (adapter->flags & NETXEN_NIC_MSI_ENABLED)
                        handler = netxen_msi_intr;
                else {
                        flags |= IRQF_SHARED;
@@ -1612,6 +1615,14 @@ static irqreturn_t netxen_msi_intr(int irq, void *data)
        return IRQ_HANDLED;
 }
 
+static irqreturn_t netxen_msix_intr(int irq, void *data)
+{
+       struct netxen_adapter *adapter = data;
+
+       napi_schedule(&adapter->napi);
+       return IRQ_HANDLED;
+}
+
 static int netxen_nic_poll(struct napi_struct *napi, int budget)
 {
        struct netxen_adapter *adapter = container_of(napi, struct netxen_adapter, napi);