patch-2.4.0-test10 linux/drivers/net/es3210.c
Next file: linux/drivers/net/eth16i.c
Previous file: linux/drivers/net/eepro100.c
Back to the patch index
Back to the overall index
- Lines: 132
- Date:
Mon Oct 30 12:24:21 2000
- Orig file:
v2.4.0-test9/linux/drivers/net/es3210.c
- Orig date:
Mon Jun 19 13:30:58 2000
diff -u --recursive --new-file v2.4.0-test9/linux/drivers/net/es3210.c linux/drivers/net/es3210.c
@@ -131,31 +131,31 @@
if (ioaddr > 0x1ff) /* Check a single specified location. */
return es_probe1(dev, ioaddr);
else if (ioaddr > 0) /* Don't probe at all. */
- return ENXIO;
+ return -ENXIO;
if (!EISA_bus) {
#if ES_DEBUG & ES_D_PROBE
printk("es3210.c: Not EISA bus. Not probing high ports.\n");
#endif
- return ENXIO;
+ return -ENXIO;
}
/* EISA spec allows for up to 16 slots, but 8 is typical. */
- for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) {
- if (check_region(ioaddr + ES_SA_PROM, ES_IO_EXTENT))
- continue;
+ for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000)
if (es_probe1(dev, ioaddr) == 0)
return 0;
- }
- return ENODEV;
+ return -ENODEV;
}
int __init es_probe1(struct net_device *dev, int ioaddr)
{
- int i;
+ int i, retval;
unsigned long eisa_id;
+ if (!request_region(ioaddr + ES_SA_PROM, ES_IO_EXTENT, "es3210"))
+ return -ENODEV;
+
#if ES_DEBUG & ES_D_PROBE
printk("es3210.c: probe at %#x, ID %#8x\n", ioaddr, inl(ioaddr + ES_ID_PORT));
printk("es3210.c: config regs: %#x %#x %#x %#x %#x %#x\n",
@@ -167,7 +167,8 @@
/* Check the EISA ID of the card. */
eisa_id = inl(ioaddr + ES_ID_PORT);
if ((eisa_id != ES_EISA_ID1) && (eisa_id != ES_EISA_ID2)) {
- return ENODEV;
+ retval = -ENODEV;
+ goto out;
}
/* Check the Racal vendor ID as well. */
@@ -178,13 +179,8 @@
for(i = 0; i < ETHER_ADDR_LEN; i++)
printk(" %02x", inb(ioaddr + ES_SA_PROM + i));
printk(" (invalid prefix).\n");
- return ENODEV;
- }
-
- /* We should have a "dev" from Space.c or the static module table. */
- if (dev == NULL) {
- printk("es3210.c: Passed a NULL device.\n");
- dev = init_etherdev(0, 0);
+ retval = -ENODEV;
+ goto out;
}
printk("es3210.c: ES3210 rev. %ld at %#x, node", eisa_id>>24, ioaddr);
@@ -216,7 +212,8 @@
if (request_irq(dev->irq, ei_interrupt, 0, "es3210", dev)) {
printk (" unable to get IRQ %d.\n", dev->irq);
- return EAGAIN;
+ retval = -EAGAIN;
+ goto out;
}
if (dev->mem_start == 0) {
@@ -225,8 +222,8 @@
if (mem_enabled != 0x80) {
printk(" shared mem disabled - giving up\n");
- free_irq(dev->irq, dev);
- return -ENXIO;
+ retval = -ENXIO;
+ goto out1;
}
dev->mem_start = 0xC0000 + mem_bits*0x4000;
printk(" using ");
@@ -243,8 +240,8 @@
/* Allocate dev->priv and fill in 8390 specific dev fields. */
if (ethdev_init(dev)) {
printk (" unable to allocate memory for dev->priv.\n");
- free_irq(dev->irq, dev);
- return -ENOMEM;
+ retval = -ENOMEM;
+ goto out1;
}
#if ES_DEBUG & ES_D_PROBE
@@ -253,8 +250,6 @@
#endif
/* Note, point at the 8390, and not the card... */
dev->base_addr = ioaddr + ES_NIC_OFFSET;
- request_region(ioaddr + ES_SA_PROM, ES_IO_EXTENT, "es3210");
-
ei_status.name = "ES3210";
ei_status.tx_start_page = ES_START_PG;
@@ -274,6 +269,11 @@
dev->stop = &es_close;
NS8390_init(dev, 0);
return 0;
+out1:
+ free_irq(dev->irq, dev);
+out:
+ release_region(ioaddr + ES_SA_PROM, ES_IO_EXTENT);
+ return retval;
}
/*
@@ -388,9 +388,9 @@
},
};
-static int io[MAX_ES_CARDS] = { 0, };
-static int irq[MAX_ES_CARDS] = { 0, };
-static int mem[MAX_ES_CARDS] = { 0, };
+static int io[MAX_ES_CARDS];
+static int irq[MAX_ES_CARDS];
+static int mem[MAX_ES_CARDS];
MODULE_PARM(io, "1-" __MODULE_STRING(MAX_ES_CARDS) "i");
MODULE_PARM(irq, "1-" __MODULE_STRING(MAX_ES_CARDS) "i");
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)