*/
netif_start_queue(d);
- MOD_INC_USE_COUNT;
return 0;
}
z8530_sync_txdma_close(d, &sv11->sync.chanA);
break;
}
- MOD_DEC_USE_COUNT;
return 0;
}
return 0;
}
+static void sv11_setup(struct net_device *dev)
+{
+ dev->open = hostess_open;
+ dev->stop = hostess_close;
+ dev->hard_start_xmit = hostess_queue_xmit;
+ dev->get_stats = hostess_get_stats;
+ dev->do_ioctl = hostess_ioctl;
+ dev->neigh_setup = hostess_neigh_setup_dev;
+}
+
/*
* Description block for a Comtrol Hostess SV11 card
*/
memset(sv, 0, sizeof(*sv));
sv->if_ptr=&sv->netdev;
- sv->netdev.dev=(struct net_device *)kmalloc(sizeof(struct net_device), GFP_KERNEL);
+ sv->netdev.dev = alloc_netdev(0, "hdlc%d", sv11_setup);
if(!sv->netdev.dev)
goto fail2;
+ SET_MODULE_OWNER(sv->netdev.dev);
+
dev=&sv->sync;
/*
d->base_addr = iobase;
d->irq = irq;
d->priv = sv;
- d->init = NULL;
-
- d->open = hostess_open;
- d->stop = hostess_close;
- d->hard_start_xmit = hostess_queue_xmit;
- d->get_stats = hostess_get_stats;
- d->set_multicast_list = NULL;
- d->do_ioctl = hostess_ioctl;
- d->neigh_setup = hostess_neigh_setup_dev;
- d->set_mac_address = NULL;
if(register_netdev(d))
{
printk(KERN_ERR "%s: unable to register device.\n",
d->name);
- goto fail;
- }
+ sppp_detach(d);
+ goto dmafail2;
+ }
z8530_describe(dev, "I/O", iobase);
dev->active=1;
fail:
free_irq(irq, dev);
fail1:
- kfree(sv->netdev.dev);
+ free_netdev(sv->netdev.dev);
fail2:
kfree(sv);
fail3:
static void sv11_shutdown(struct sv11_device *dev)
{
sppp_detach(dev->netdev.dev);
- z8530_shutdown(&dev->sync);
unregister_netdev(dev->netdev.dev);
+ z8530_shutdown(&dev->sync);
free_irq(dev->sync.irq, dev);
if(dma)
{
free_dma(dev->sync.chanA.txdma);
}
release_region(dev->sync.chanA.ctrlio-1, 8);
+ free_netdev(dev->netdev.dev);
+ kfree(dev);
}
#ifdef MODULE