]> git.hungrycats.org Git - linux/commitdiff
[netdrvr hydra] use alloc_etherdev
authorAlexander Viro <viro@parcelfarce.linux.theplanet.co.uk>
Sat, 10 Jan 2004 10:29:22 +0000 (05:29 -0500)
committerStephen Hemminger <shemminger@osdl.org>
Sat, 10 Jan 2004 10:29:22 +0000 (05:29 -0500)
drivers/net/hydra.c

index b183b1159bd5c104ad440c89f380375468865973..921677364943ab8762ff1cf3ba55e0514bde3a18 100644 (file)
@@ -89,15 +89,17 @@ static int __init hydra_init(unsigned long board)
     const char name[] = "NE2000";
     int start_page, stop_page;
     int j;
+    int err;
 
     static u32 hydra_offsets[16] = {
        0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e,
        0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
     };
 
-    dev = init_etherdev(NULL, 0);
+    dev = alloc_etherdev(0);
     if (!dev)
        return -ENOMEM;
+    dev->priv = NULL;
     SET_MODULE_OWNER(dev);
 
     for(j = 0; j < ETHER_ADDR_LEN; j++)
@@ -113,12 +115,16 @@ static int __init hydra_init(unsigned long board)
 
     /* Install the Interrupt handler */
     if (request_irq(IRQ_AMIGA_PORTS, ei_interrupt, SA_SHIRQ, "Hydra Ethernet",
-                   dev))
+                   dev)) {
+       free_netdev(dev);
        return -EAGAIN;
+    }
 
     /* Allocate dev->priv and fill in 8390 specific dev fields. */
     if (ethdev_init(dev)) {
        printk("Unable to get memory for dev->priv.\n");
+       free_irq(IRQ_AMIGA_PORTS, dev);
+       free_netdev(dev);
        return -ENOMEM;
     }
 
@@ -146,7 +152,14 @@ static int __init hydra_init(unsigned long board)
     root_hydra_dev = dev;
 #endif
     NS8390_init(dev, 0);
-    return 0;
+    err = register_netdev(dev);
+    if (!err)
+       return 0;
+
+    free_irq(IRQ_AMIGA_PORTS, dev);
+    kfree(dev->priv);
+    free_netdev(dev);
+    return err;
 }
 
 static int hydra_open(struct net_device *dev)