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