fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / drivers / net / tokenring / lanstreamer.c
index dcf7f3e..e999feb 100644 (file)
 
 #define STREAMER_IOCTL 0
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/stddef.h>
 #include <linux/init.h>
 #include <linux/pci.h>
+#include <linux/dma-mapping.h>
 #include <linux/spinlock.h>
 #include <linux/version.h>
+#include <linux/bitops.h>
+#include <linux/jiffies.h>
 
 #include <net/checksum.h>
 
 #include <asm/io.h>
 #include <asm/system.h>
-#include <asm/bitops.h>
 
 #include "lanstreamer.h"
 
@@ -182,20 +183,19 @@ static char *open_min_error[] = {
 
 static int ringspeed[STREAMER_MAX_ADAPTERS] = { 0, };
 
-MODULE_PARM(ringspeed, "1-" __MODULE_STRING(STREAMER_MAX_ADAPTERS) "i");
+module_param_array(ringspeed, int, NULL, 0);
 
 /* Packet buffer size */
 
 static int pkt_buf_sz[STREAMER_MAX_ADAPTERS] = { 0, };
 
-MODULE_PARM(pkt_buf_sz, "1-" __MODULE_STRING(STREAMER_MAX_ADAPTERS) "i");
+module_param_array(pkt_buf_sz, int, NULL, 0);
 
 /* Message Level */
 
 static int message_level[STREAMER_MAX_ADAPTERS] = { 1, };
 
-MODULE_PARM(message_level,
-           "1-" __MODULE_STRING(STREAMER_MAX_ADAPTERS) "i");
+module_param_array(message_level, int, NULL, 0);
 
 #if STREAMER_IOCTL
 static int streamer_ioctl(struct net_device *, struct ifreq *, int);
@@ -206,8 +206,7 @@ static int streamer_open(struct net_device *dev);
 static int streamer_xmit(struct sk_buff *skb, struct net_device *dev);
 static int streamer_close(struct net_device *dev);
 static void streamer_set_rx_mode(struct net_device *dev);
-static irqreturn_t streamer_interrupt(int irq, void *dev_id,
-                              struct pt_regs *regs);
+static irqreturn_t streamer_interrupt(int irq, void *dev_id);
 static struct net_device_stats *streamer_get_stats(struct net_device *dev);
 static int streamer_set_mac_address(struct net_device *dev, void *addr);
 static void streamer_arb_cmd(struct net_device *dev);
@@ -258,7 +257,7 @@ static int __devinit streamer_init_one(struct pci_dev *pdev,
 #endif
 #endif
 
-       rc = pci_set_dma_mask(pdev, 0xFFFFFFFFULL);
+       rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
        if (rc) {
                printk(KERN_ERR "%s: No suitable PCI mapping available.\n",
                                dev->name);
@@ -443,7 +442,7 @@ static void __devexit streamer_remove_one(struct pci_dev *pdev)
 static int streamer_reset(struct net_device *dev)
 {
        struct streamer_private *streamer_priv;
-       __u8 *streamer_mmio;
+       __u8 __iomem *streamer_mmio;
        unsigned long t;
        unsigned int uaa_addr;
        struct sk_buff *skb = NULL;
@@ -455,8 +454,7 @@ static int streamer_reset(struct net_device *dev)
        writew(readw(streamer_mmio + BCTL) | BCTL_SOFTRESET, streamer_mmio + BCTL);
        t = jiffies;
        /* Hold soft reset bit for a while */
-       current->state = TASK_UNINTERRUPTIBLE;
-       schedule_timeout(HZ);
+       ssleep(1);
        
        writew(readw(streamer_mmio + BCTL) & ~BCTL_SOFTRESET,
               streamer_mmio + BCTL);
@@ -512,9 +510,8 @@ static int streamer_reset(struct net_device *dev)
        writew(SISR_MI, streamer_mmio + SISR_MASK_SUM);
 
        while (!((readw(streamer_mmio + SISR)) & SISR_SRB_REPLY)) {
-               current->state = TASK_INTERRUPTIBLE;
-               schedule_timeout(HZ/10);
-               if (jiffies - t > 40 * HZ) {
+               msleep_interruptible(100);
+               if (time_after(jiffies, t + 40 * HZ)) {
                        printk(KERN_ERR
                               "IBM PCI tokenring card not responding\n");
                        release_region(dev->base_addr, STREAMER_IO_SPACE);
@@ -591,7 +588,7 @@ static int streamer_reset(struct net_device *dev)
 static int streamer_open(struct net_device *dev)
 {
        struct streamer_private *streamer_priv = (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        unsigned long flags;
        char open_error[255];
        int i, open_finished = 1;
@@ -603,7 +600,7 @@ static int streamer_open(struct net_device *dev)
                rc=streamer_reset(dev);
        }
 
-       if (request_irq(dev->irq, &streamer_interrupt, SA_SHIRQ, "lanstreamer", dev)) {
+       if (request_irq(dev->irq, &streamer_interrupt, IRQF_SHARED, "lanstreamer", dev)) {
                return -EAGAIN;
        }
 #if STREAMER_DEBUG
@@ -908,7 +905,7 @@ static void streamer_rx(struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        struct streamer_rx_desc *rx_desc;
        int rx_ring_last_received, length, frame_length, buffer_cnt = 0;
        struct sk_buff *skb, *skb2;
@@ -1030,12 +1027,12 @@ static void streamer_rx(struct net_device *dev)
        }                       /* end for all completed rx descriptors */
 }
 
-static irqreturn_t streamer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t streamer_interrupt(int irq, void *dev_id)
 {
        struct net_device *dev = (struct net_device *) dev_id;
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        __u16 sisr;
        __u16 misr;
        u8 max_intr = MAX_INTR;
@@ -1158,7 +1155,7 @@ static int streamer_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        unsigned long flags ;
 
        spin_lock_irqsave(&streamer_priv->streamer_lock, flags);
@@ -1209,7 +1206,7 @@ static int streamer_close(struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        unsigned long flags;
        int i;
 
@@ -1275,7 +1272,7 @@ static void streamer_set_rx_mode(struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        __u8 options = 0;
        struct dev_mc_list *dmi;
        unsigned char dev_mc_address[5];
@@ -1334,7 +1331,7 @@ static void streamer_set_rx_mode(struct net_device *dev)
 static void streamer_srb_bh(struct net_device *dev)
 {
        struct streamer_private *streamer_priv = (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        __u16 srb_word;
 
        writew(streamer_priv->srb, streamer_mmio + LAPA);
@@ -1531,7 +1528,7 @@ static void streamer_arb_cmd(struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        __u8 header_len;
        __u16 frame_len, buffer_len;
        struct sk_buff *mac_frame;
@@ -1606,7 +1603,7 @@ static void streamer_arb_cmd(struct net_device *dev)
                                i += 2;
                        }
 
-                       memcpy_fromio(skb_put(mac_frame, buffer_len),
+                       memcpy(skb_put(mac_frame, buffer_len),
                                      frame_data, buffer_len);
                } while (next_ptr && (buff_off = next_ptr));
 
@@ -1747,7 +1744,7 @@ static void streamer_asb_bh(struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
 
        if (streamer_priv->asb_queued == 1) 
        {
@@ -1855,7 +1852,7 @@ static int sprintf_info(char *buffer, struct net_device *dev)
 {
        struct streamer_private *streamer_priv =
            (struct streamer_private *) dev->priv;
-       __u8 *streamer_mmio = streamer_priv->streamer_mmio;
+       __u8 __iomem *streamer_mmio = streamer_priv->streamer_mmio;
        struct streamer_adapter_addr_table sat;
        struct streamer_parameters_table spt;
        int size = 0;
@@ -1878,7 +1875,6 @@ static int sprintf_info(char *buffer, struct net_device *dev)
                datap[size+1]=io_word & 0xff;
        }
 
-
        size = sprintf(buffer, "\n%6s: Adapter Address   : Node Address      : Functional Addr\n", dev->name);
 
        size += sprintf(buffer + size,
@@ -1934,64 +1930,6 @@ static int sprintf_info(char *buffer, struct net_device *dev)
 #endif
 #endif
 
-#if STREAMER_IOCTL && (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-static int streamer_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
-{
-        int i;
-       struct streamer_private *streamer_priv = (struct streamer_private *) dev->priv;
-       u8 *streamer_mmio = streamer_priv->streamer_mmio;
-
-       switch(cmd) {
-       case IOCTL_SISR_MASK:
-               writew(SISR_MI, streamer_mmio + SISR_MASK_SUM);
-               break;
-       case IOCTL_SPIN_LOCK_TEST:
-               printk(KERN_INFO "spin_lock() called.\n");
-               spin_lock(&streamer_priv->streamer_lock);
-               spin_unlock(&streamer_priv->streamer_lock);
-               printk(KERN_INFO "spin_unlock() finished.\n");
-               break;
-       case IOCTL_PRINT_BDAS:
-               printk(KERN_INFO "bdas: RXBDA: %x RXLBDA: %x TX2FDA: %x TX2LFDA: %x\n",
-                      readw(streamer_mmio + RXBDA),
-                      readw(streamer_mmio + RXLBDA),
-                      readw(streamer_mmio + TX2FDA),
-                      readw(streamer_mmio + TX2LFDA));
-               break;
-       case IOCTL_PRINT_REGISTERS:
-               printk(KERN_INFO "registers:\n");
-               printk(KERN_INFO "SISR: %04x MISR: %04x LISR: %04x BCTL: %04x BMCTL: %04x\nmask  %04x mask  %04x\n", 
-                      readw(streamer_mmio + SISR),
-                      readw(streamer_mmio + MISR_RUM),
-                      readw(streamer_mmio + LISR),
-                      readw(streamer_mmio + BCTL),
-                      readw(streamer_mmio + BMCTL_SUM),
-                      readw(streamer_mmio + SISR_MASK),
-                      readw(streamer_mmio + MISR_MASK));
-               break;
-       case IOCTL_PRINT_RX_BUFS:
-               printk(KERN_INFO "Print rx bufs:\n");
-               for(i=0; i<STREAMER_RX_RING_SIZE; i++)
-                       printk(KERN_INFO "rx_ring %d status: 0x%x\n", i, 
-                              streamer_priv->streamer_rx_ring[i].status);
-               break;
-       case IOCTL_PRINT_TX_BUFS:
-               printk(KERN_INFO "Print tx bufs:\n");
-               for(i=0; i<STREAMER_TX_RING_SIZE; i++)
-                       printk(KERN_INFO "tx_ring %d status: 0x%x\n", i, 
-                              streamer_priv->streamer_tx_ring[i].status);
-               break;
-       case IOCTL_RX_CMD:
-               streamer_rx(dev);
-               printk(KERN_INFO "Sent rx command.\n");
-               break;
-       default:
-               printk(KERN_INFO "Bad ioctl!\n");
-       }
-       return 0;
-}
-#endif
-
 static struct pci_driver streamer_pci_driver = {
   .name     = "lanstreamer",
   .id_table = streamer_pci_tbl,
@@ -2000,7 +1938,7 @@ static struct pci_driver streamer_pci_driver = {
 };
 
 static int __init streamer_init_module(void) {
-  return pci_module_init(&streamer_pci_driver);
+  return pci_register_driver(&streamer_pci_driver);
 }
 
 static void __exit streamer_cleanup_module(void) {