Commit 879e7df6 authored by Alexander Viro's avatar Alexander Viro Committed by Stephen Hemminger

[wan synclink] netdev dynamic alloc

parent d65b155e
...@@ -327,7 +327,6 @@ struct mgsl_struct { ...@@ -327,7 +327,6 @@ struct mgsl_struct {
char netname[10]; char netname[10];
struct net_device *netdev; struct net_device *netdev;
struct net_device_stats netstats; struct net_device_stats netstats;
struct net_device netdevice;
#endif #endif
}; };
...@@ -737,8 +736,8 @@ int mgsl_ioctl_common(struct mgsl_struct *info, unsigned int cmd, unsigned long ...@@ -737,8 +736,8 @@ int mgsl_ioctl_common(struct mgsl_struct *info, unsigned int cmd, unsigned long
#ifdef CONFIG_SYNCLINK_SYNCPPP #ifdef CONFIG_SYNCLINK_SYNCPPP
/* SPPP/HDLC stuff */ /* SPPP/HDLC stuff */
void mgsl_sppp_init(struct mgsl_struct *info); static void mgsl_sppp_init(struct mgsl_struct *info);
void mgsl_sppp_delete(struct mgsl_struct *info); static void mgsl_sppp_delete(struct mgsl_struct *info);
int mgsl_sppp_open(struct net_device *d); int mgsl_sppp_open(struct net_device *d);
int mgsl_sppp_close(struct net_device *d); int mgsl_sppp_close(struct net_device *d);
void mgsl_sppp_tx_timeout(struct net_device *d); void mgsl_sppp_tx_timeout(struct net_device *d);
...@@ -7820,36 +7819,45 @@ int usc_loopmode_send_active( struct mgsl_struct * info ) ...@@ -7820,36 +7819,45 @@ int usc_loopmode_send_active( struct mgsl_struct * info )
#ifdef CONFIG_SYNCLINK_SYNCPPP #ifdef CONFIG_SYNCLINK_SYNCPPP
/* syncppp net device routines /* syncppp net device routines
*/ */
static void mgsl_setup(struct net_device *dev)
{
dev->open = mgsl_sppp_open;
dev->stop = mgsl_sppp_close;
dev->hard_start_xmit = mgsl_sppp_tx;
dev->do_ioctl = mgsl_sppp_ioctl;
dev->get_stats = mgsl_net_stats;
dev->tx_timeout = mgsl_sppp_tx_timeout;
dev->watchdog_timeo = 10*HZ;
}
void mgsl_sppp_init(struct mgsl_struct *info) static void mgsl_sppp_init(struct mgsl_struct *info)
{ {
struct net_device *d; struct net_device *d;
sprintf(info->netname,"mgsl%d",info->line); sprintf(info->netname,"mgsl%d",info->line);
d = alloc_netdev(0, info->netname, mgsl_setup);
if (!d) {
printk(KERN_WARNING "%s: alloc_netdev failed.\n",
info->netname);
return;
}
info->if_ptr = &info->pppdev; info->if_ptr = &info->pppdev;
info->netdev = info->pppdev.dev = &info->netdevice; info->netdev = info->pppdev.dev = d;
sppp_attach(&info->pppdev); sppp_attach(&info->pppdev);
d = info->netdev;
strcpy(d->name,info->netname);
d->base_addr = info->io_base; d->base_addr = info->io_base;
d->irq = info->irq_level; d->irq = info->irq_level;
d->dma = info->dma_level; d->dma = info->dma_level;
d->priv = info; d->priv = info;
d->init = NULL;
d->open = mgsl_sppp_open;
d->stop = mgsl_sppp_close;
d->hard_start_xmit = mgsl_sppp_tx;
d->do_ioctl = mgsl_sppp_ioctl;
d->get_stats = mgsl_net_stats;
d->tx_timeout = mgsl_sppp_tx_timeout;
d->watchdog_timeo = 10*HZ;
if (register_netdev(d)) { if (register_netdev(d)) {
printk(KERN_WARNING "%s: register_netdev failed.\n", d->name); printk(KERN_WARNING "%s: register_netdev failed.\n", d->name);
sppp_detach(info->netdev); sppp_detach(info->netdev);
info->netdev = NULL;
free_netdev(d);
return; return;
} }
...@@ -7861,8 +7869,11 @@ void mgsl_sppp_delete(struct mgsl_struct *info) ...@@ -7861,8 +7869,11 @@ void mgsl_sppp_delete(struct mgsl_struct *info)
{ {
if (debug_level >= DEBUG_LEVEL_INFO) if (debug_level >= DEBUG_LEVEL_INFO)
printk("mgsl_sppp_delete(%s)\n",info->netname); printk("mgsl_sppp_delete(%s)\n",info->netname);
sppp_detach(info->netdev);
unregister_netdev(info->netdev); unregister_netdev(info->netdev);
sppp_detach(info->netdev);
free_netdev(info->netdev);
info->netdev = NULL;
info->pppdev.dev = NULL;
} }
int mgsl_sppp_open(struct net_device *d) int mgsl_sppp_open(struct net_device *d)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment