From b91a902e90286087c8cce1042c71cc3a5f166f54 Mon Sep 17 00:00:00 2001 From: Alexander Viro Date: Sat, 10 Jan 2004 05:30:51 -0500 Subject: [PATCH] [netdrvr stnic] use alloc_etherdev --- drivers/net/stnic.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/drivers/net/stnic.c b/drivers/net/stnic.c index 08d02f8ed121c..bc4a4e2092266 100644 --- a/drivers/net/stnic.c +++ b/drivers/net/stnic.c @@ -98,26 +98,27 @@ STNIC_WRITE (int reg, byte val) STNIC_DELAY (); } -int __init stnic_probe(void) +static int __init stnic_probe(void) { struct net_device *dev; - int i; + int i, err; /* If we are not running on a SolutionEngine, give up now */ if (! MACH_SE) return -ENODEV; /* New style probing API */ - dev = init_etherdev (NULL, 0); + dev = alloc_etherdev(0); if (!dev) return -ENOMEM; SET_MODULE_OWNER(dev); - stnic_dev = dev; + dev->probe = NULL; /* Allocate dev->priv and fill in 8390 specific dev fields. */ if (ethdev_init (dev)) { printk (KERN_EMERG "Unable to get memory for dev->priv.\n"); + free_netdev(dev); return -ENOMEM; } @@ -135,13 +136,12 @@ int __init stnic_probe(void) /* Snarf the interrupt now. There's no point in waiting since we cannot share and the board will usually be enabled. */ - i = request_irq (dev->irq, ei_interrupt, 0, dev->name, dev); - if (i) { + err = request_irq (dev->irq, ei_interrupt, 0, dev->name, dev); + if (err) { printk (KERN_EMERG " unable to get IRQ %d.\n", dev->irq); - unregister_netdev(dev); kfree(dev->priv); - kfree(dev); - return i; + free_netdev(dev); + return err; } ei_status.name = dev->name; @@ -162,6 +162,15 @@ int __init stnic_probe(void) stnic_init (dev); + err = register_netdev(dev); + if (err) { + free_irq(dev->irq, dev); + kfree(dev->priv); + free_netdev(dev); + return err; + } + stnic_dev = dev; + printk (KERN_INFO "NS ST-NIC 83902A\n"); return 0; @@ -305,15 +314,14 @@ stnic_init (struct net_device *dev) return; } -/* Hardware interrupt handler. */ -extern void ei_interrupt (int irq, void *dev_id, struct pt_regs *regs); - -void -do_stnic_intr (int irq, void *dev_id, struct pt_regs *regs) +static void __exit stnic_cleanup(void) { - ei_interrupt (0, stnic_dev, regs); + unregister_netdev(stnic_dev); + free_irq(stnic_dev->irq, stnic_dev); + kfree(stnic_dev->priv); + free_netdev(stnic_dev); } module_init(stnic_probe); -/* No cleanup routine. */ +module_exit(stnic_cleanup); MODULE_LICENSE("GPL"); -- 2.53.0