vserver 1.9.5.x5
[linux-2.6.git] / drivers / net / tulip / xircom_cb.c
index 6e65890..26cc4f6 100644 (file)
@@ -28,9 +28,9 @@
 #include <linux/delay.h>
 #include <linux/init.h>
 #include <linux/ethtool.h>
+#include <linux/bitops.h>
 
 #include <asm/uaccess.h>
-#include <asm/bitops.h>
 #include <asm/io.h>
 
 #ifdef DEBUG
@@ -117,6 +117,9 @@ static int xircom_open(struct net_device *dev);
 static int xircom_close(struct net_device *dev);
 static void xircom_up(struct xircom_private *card);
 static struct net_device_stats *xircom_get_stats(struct net_device *dev);
+#if CONFIG_NET_POLL_CONTROLLER
+static void xircom_poll_controller(struct net_device *dev);
+#endif
 
 static void investigate_read_descriptor(struct net_device *dev,struct xircom_private *card, int descnr, unsigned int bufferoffset);
 static void investigate_write_descriptor(struct net_device *dev, struct xircom_private *card, int descnr, unsigned int bufferoffset);
@@ -256,7 +259,7 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
        private->dev = dev;
        private->pdev = pdev;
        private->io_port = pci_resource_start(pdev, 0);
-       private->lock = SPIN_LOCK_UNLOCKED;
+       spin_lock_init(&private->lock);
        dev->irq = pdev->irq;
        dev->base_addr = private->io_port;
        
@@ -269,6 +272,9 @@ static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_
        dev->stop = &xircom_close;
        dev->get_stats = &xircom_get_stats;
        dev->priv = private;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+       dev->poll_controller = &xircom_poll_controller;
+#endif
        SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
        pci_set_drvdata(pdev, dev);
 
@@ -500,6 +506,14 @@ static struct net_device_stats *xircom_get_stats(struct net_device *dev)
 } 
                                                  
 
+#ifdef CONFIG_NET_POLL_CONTROLLER
+static void xircom_poll_controller(struct net_device *dev)
+{
+       disable_irq(dev->irq);
+       xircom_interrupt(dev->irq, dev, NULL);
+       enable_irq(dev->irq);
+}
+#endif
 
 
 static void initialize_card(struct xircom_private *card)