Hi all,

check_region() removed, zero initializers of static variables removed,
module_init() & module_exit() added.

Best regards,
            Andrey

-- 
Andrey Panin            | Embedded systems software engineer
[EMAIL PROTECTED]        | PGP key: http://www.orbita1.ru/~pazke/AndreyPanin.asc
diff -urN /mnt/disk/linux/drivers/net/ac3200.c /linux/drivers/net/ac3200.c
--- /mnt/disk/linux/drivers/net/ac3200.c        Fri Oct 20 22:03:22 2000
+++ /linux/drivers/net/ac3200.c Sun Oct 22 18:45:59 2000
@@ -116,14 +116,20 @@
 
 static int __init ac_probe1(int ioaddr, struct net_device *dev)
 {
-       int i;
+       int i, retval;
 
-       if (inb_p(ioaddr + AC_ID_PORT) == 0xff) 
+       if (!request_region(ioaddr, AC_IO_EXTENT, "ac3200"))
                return -ENODEV;
 
-       if (inl(ioaddr + AC_ID_PORT) != AC_EISA_ID)
-               return -ENODEV;
+       if (inb_p(ioaddr + AC_ID_PORT) == 0xff) {
+               retval = -ENODEV;
+               goto out;
+       }
 
+       if (inl(ioaddr + AC_ID_PORT) != AC_EISA_ID) {
+               retval = -ENODEV;
+               goto out;
+       }
 
 #ifndef final_version
        printk(KERN_DEBUG "AC3200 ethercard configuration register is %#02x,"
@@ -132,15 +138,6 @@
                   inb(ioaddr + AC_ID_PORT + 2), inb(ioaddr + AC_ID_PORT + 3));
 #endif
 
-       /* We should have a "dev" from Space.c or the static module table. */
-       if (dev == NULL) {
-               printk("ac3200.c: Passed a NULL device.\n");
-               dev = init_etherdev(0, 0);
-
-               if (!dev)
-                       return -ENOMEM;
-       }
-
        printk("AC3200 in EISA slot %d, node", ioaddr/0x1000);
        for(i = 0; i < 6; i++)
                printk(" %02x", dev->dev_addr[i] = inb(ioaddr + AC_SA_PROM + i));
@@ -151,14 +148,16 @@
                || inb(ioaddr + AC_SA_PROM + 1) != AC_ADDR1
                || inb(ioaddr + AC_SA_PROM + 2) != AC_ADDR2 ) {
                printk(", not found (invalid prefix).\n");
-               return -ENODEV;
+               retval = -ENODEV;
+               goto out;
        }
 #endif
 
        /* Allocate dev->priv and fill in 8390 specific dev fields. */
        if (ethdev_init(dev)) {
                printk (", unable to allocate memory for dev->priv.\n");
-               return -ENOMEM;
+               retval = -ENOMEM;
+               goto out;
        }
 
        /* Assign and allocate the interrupt now. */
@@ -172,15 +171,12 @@
 
        if (request_irq(dev->irq, ei_interrupt, 0, "ac3200", dev)) {
                printk (" nothing! Unable to get IRQ %d.\n", dev->irq);
-               kfree(dev->priv);
-               dev->priv = NULL;
-               return -EAGAIN;
+               retval = -EAGAIN;
+               goto out1;
        }
 
        printk(" IRQ %d, %s port\n", dev->irq, port_name[dev->if_port]);
 
-       request_region(ioaddr, AC_IO_EXTENT, "ac3200");
-
        dev->base_addr = ioaddr;
 
 #ifdef notyet
@@ -210,20 +206,16 @@
                        printk(KERN_CRIT "ac3200.c: Use EISA SCU to set card memory 
below 1MB,\n");
                        printk(KERN_CRIT "ac3200.c: or to an address above 0x%lx.\n", 
virt_to_bus(high_memory));
                        printk(KERN_CRIT "ac3200.c: Driver NOT installed.\n");
-                       free_irq(dev->irq, dev);
-                       kfree(dev->priv);
-                       dev->priv = NULL;
-                       return -EINVAL;
+                       retval = -EINVAL;
+                       goto out2;
                }
                dev->mem_start = (unsigned long)ioremap(dev->mem_start, 
AC_STOP_PG*0x100);
                if (dev->mem_start == 0) {
                        printk(KERN_ERR "ac3200.c: Unable to remap card memory above 
1MB !!\n");
                        printk(KERN_ERR "ac3200.c: Try using EISA SCU to set memory 
below 1MB.\n");
                        printk(KERN_ERR "ac3200.c: Driver NOT installed.\n");
-                       free_irq(dev->irq, dev);
-                       kfree(dev->priv);
-                       dev->priv = NULL;
-                       return -EAGAIN;
+                       retval = -EINVAL;
+                       goto out2;
                }
                ei_status.reg0 = 1;     /* Use as remap flag */
                printk("ac3200.c: remapped %dkB card memory to virtual address %#lx\n",
@@ -252,6 +244,14 @@
        dev->stop = &ac_close_card;
        NS8390_init(dev, 0);
        return 0;
+out2:
+       free_irq(dev->irq, dev);
+out1:
+       kfree(dev->priv);
+       dev->priv = NULL;
+out:
+       release_region(ioaddr, AC_IO_EXTENT);
+       return retval;
 }
 
 static int ac_open(struct net_device *dev)
@@ -353,15 +353,15 @@
        },
 };
 
-static int io[MAX_AC32_CARDS] = { 0, };
-static int irq[MAX_AC32_CARDS]  = { 0, };
-static int mem[MAX_AC32_CARDS] = { 0, };
+static int io[MAX_AC32_CARDS];
+static int irq[MAX_AC32_CARDS];
+static int mem[MAX_AC32_CARDS];
+
 MODULE_PARM(io, "1-" __MODULE_STRING(MAX_AC32_CARDS) "i");
 MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_AC32_CARDS) "i");
 MODULE_PARM(mem, "1-" __MODULE_STRING(MAX_AC32_CARDS) "i");
 
-int
-init_module(void)
+static int ac3200_init(void)
 {
        int this_dev, found = 0;
 
@@ -389,8 +389,7 @@
        return 0;
 }
 
-void
-cleanup_module(void)
+static void ac3200_cleanup(void)
 {
        int this_dev;
 
@@ -409,6 +408,10 @@
        }
        unload_8390_module();
 }
+
+module_init(ac3200_init);
+module_exit(ac3200_cleanup);
+
 #endif /* MODULE */
 
 /*
diff -urN /mnt/disk/linux/drivers/net/ni52.c /linux/drivers/net/ni52.c
--- /mnt/disk/linux/drivers/net/ni52.c  Fri Oct 20 22:03:22 2000
+++ /linux/drivers/net/ni52.c   Sun Oct 22 18:47:00 2000
@@ -362,11 +362,9 @@
 #endif
        int base_addr = dev->base_addr;
 
-       if (base_addr > 0x1ff) {                /* Check a single specified location. 
*/
-               if( (inb(base_addr+NI52_MAGIC1) == NI52_MAGICVAL1) &&
-                               (inb(base_addr+NI52_MAGIC2) == NI52_MAGICVAL2))
-                       return ni52_probe1(dev, base_addr);
-       } else if (base_addr > 0)               /* Don't probe at all. */
+       if (base_addr > 0x1ff)          /* Check a single specified location. */
+               return ni52_probe1(dev, base_addr);
+       else if (base_addr > 0)         /* Don't probe at all. */
                return -ENXIO;
 
 #ifdef MODULE
@@ -374,29 +372,15 @@
 #else
        for (port = ports; *port; port++) {
                int ioaddr = *port;
-               if (check_region(ioaddr, NI52_TOTAL_SIZE))
-                       continue;
-               if( !(inb(ioaddr+NI52_MAGIC1) == NI52_MAGICVAL1) ||
-                               !(inb(ioaddr+NI52_MAGIC2) == NI52_MAGICVAL2))
-                       continue;
-
                dev->base_addr = ioaddr;
                if (ni52_probe1(dev, ioaddr) == 0)
                        return 0;
        }
 
 #ifdef FULL_IO_PROBE
-       for(dev->base_addr=0x200;dev->base_addr<0x400;dev->base_addr+=8)
-       {
-               int ioaddr = dev->base_addr;
-               if (check_region(ioaddr, NI52_TOTAL_SIZE))
-                       continue;
-               if( !(inb(ioaddr+NI52_MAGIC1) == NI52_MAGICVAL1) ||
-                               !(inb(ioaddr+NI52_MAGIC2) == NI52_MAGICVAL2))
-                       continue;
-               if (ni52_probe1(dev, ioaddr) == 0)
+       for(dev->base_addr=0x200; dev->base_addr<0x400; dev->base_addr+=8)
+               if (ni52_probe1(dev, dev->base_addr) == 0)
                        return 0;
-       }
 #endif
 
 #endif
@@ -407,33 +391,42 @@
 
 static int __init ni52_probe1(struct net_device *dev,int ioaddr)
 {
-       int i,size;
+       int i, size, retval;
+
+       if (!request_region(ioaddr, NI52_TOTAL_SIZE, "ni5210"))
+               return -ENODEV;
+
+       if( !(inb(ioaddr+NI52_MAGIC1) == NI52_MAGICVAL1) ||
+           !(inb(ioaddr+NI52_MAGIC2) == NI52_MAGICVAL2)) {
+               retval = -ENODEV;
+               goto out;
+       }
 
        for(i=0;i<ETH_ALEN;i++)
                dev->dev_addr[i] = inb(dev->base_addr+i);
 
        if(dev->dev_addr[0] != NI52_ADDR0 || dev->dev_addr[1] != NI52_ADDR1
-                || dev->dev_addr[2] != NI52_ADDR2)
-               return -ENODEV;
+                || dev->dev_addr[2] != NI52_ADDR2) {
+               retval = -ENODEV;
+               goto out;
+       }
 
        printk("%s: NI5210 found at %#3lx, ",dev->name,dev->base_addr);
 
-       request_region(ioaddr,NI52_TOTAL_SIZE,"ni5210");
-
        /*
         * check (or search) IO-Memory, 8K and 16K
         */
 #ifdef MODULE
        size = dev->mem_end - dev->mem_start;
-       if(size != 0x2000 && size != 0x4000)
-       {
+       if(size != 0x2000 && size != 0x4000) {
                printk("\n%s: Illegal memory size %d. Allowed is 0x2000 or 0x4000 
bytes.\n",dev->name,size);
-               return -ENODEV;
+               retval = -ENODEV;
+               goto out;
        }
-       if(!check586(dev,(char *) dev->mem_start,size))
-       {
+       if(!check586(dev,(char *) dev->mem_start,size)) {
                printk("?memcheck, Can't find memory at 0x%lx with size 
%d!\n",dev->mem_start,size);
-               return -ENODEV;
+               retval = -ENODEV;
+               goto out;
        }
 #else
        if(dev->mem_start != 0) /* no auto-mem-probe */
@@ -443,7 +436,8 @@
                        size = 0x2000; /* check for 8K mem */
                        if(!check586(dev,(char *) dev->mem_start,size)) {
                                printk("?memprobe, Can't find memory at 
0x%lx!\n",dev->mem_start);
-                               return -ENODEV;
+                               retval = -ENODEV;
+                               goto out;
                        }
                }
        }
@@ -455,7 +449,8 @@
                {
                        if(!memaddrs[i]) {
                                printk("?memprobe, Can't find io-memory!\n");
-                               return -ENODEV;
+                               retval = -ENODEV;
+                               goto out;
                        }
                        dev->mem_start = memaddrs[i];
                        size = 0x2000; /* check for 8K mem */
@@ -470,10 +465,10 @@
 #endif
 
        dev->priv = (void *) kmalloc(sizeof(struct priv),GFP_KERNEL);
-       if(dev->priv == NULL)
-       {
+       if(dev->priv == NULL) {
                printk("%s: Ooops .. can't allocate private driver 
memory.\n",dev->name);
-               return -ENOMEM;
+               retval = -ENOMEM;
+               goto out;
        }
                                                                                       
                                                 /* warning: we don't free it on 
errors */
        memset((char *) dev->priv,0,sizeof(struct priv));
@@ -498,7 +493,10 @@
                if(!(dev->irq = autoirq_report(2)))
                {
                        printk("?autoirq, Failed to detect IRQ line!\n");
-                       return 1;
+                       kfree(dev->priv);
+                       dev->priv = NULL;
+                       retval = -EAGAIN;
+                       goto out;
                }
                printk("IRQ %d (autodetected).\n",dev->irq);
        }
@@ -521,6 +519,9 @@
        ether_setup(dev);
 
        return 0;
+out:
+       release_region(ioaddr, NI52_TOTAL_SIZE);
+       return retval;
 }
 
 /**********************************************
@@ -1294,7 +1295,7 @@
 MODULE_PARM(memstart, "l");
 MODULE_PARM(memend, "l");
 
-int init_module(void)
+static int ni52_init(void)
 {
        if(io <= 0x0 || !memend || !memstart || irq < 2) {
                printk("ni52: Autoprobing not allowed for modules.\nni52: Set symbols 
'io' 'irq' 'memstart' and 'memend'\n");
@@ -1309,13 +1310,17 @@
        return 0;
 }
 
-void cleanup_module(void)
+static void ni52_cleanup(void)
 {
        release_region(dev_ni52.base_addr, NI52_TOTAL_SIZE);
        unregister_netdev(&dev_ni52);
        kfree(dev_ni52.priv);
        dev_ni52.priv = NULL;
 }
+
+module_init(ni52_init);
+module_exit(ni52_cleanup);
+
 #endif /* MODULE */
 
 #if 0

Reply via email to