diff options
Diffstat (limited to 'drivers/net/wan/sbni.c')
-rw-r--r-- | drivers/net/wan/sbni.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/drivers/net/wan/sbni.c b/drivers/net/wan/sbni.c index bde8c0339831..8e8c4c0e1b64 100644 --- a/drivers/net/wan/sbni.c +++ b/drivers/net/wan/sbni.c @@ -71,6 +71,7 @@ struct net_local { struct timer_list watchdog; + struct net_device *watchdog_dev; spinlock_t lock; struct sk_buff *rx_buf_p; /* receive buffer ptr */ @@ -128,7 +129,7 @@ static void send_frame( struct net_device * ); static int upload_data( struct net_device *, unsigned, unsigned, unsigned, u32 ); static void download_data( struct net_device *, u32 * ); -static void sbni_watchdog( unsigned long ); +static void sbni_watchdog(struct timer_list *); static void interpret_ack( struct net_device *, unsigned ); static int append_frame_to_pkt( struct net_device *, unsigned, u32 ); static void indicate_pkt( struct net_device * ); @@ -1029,11 +1030,10 @@ indicate_pkt( struct net_device *dev ) */ static void -sbni_watchdog( unsigned long arg ) +sbni_watchdog(struct timer_list *t) { - struct net_device *dev = (struct net_device *) arg; - struct net_local *nl = netdev_priv(dev); - struct timer_list *w = &nl->watchdog; + struct net_local *nl = from_timer(nl, t, watchdog); + struct net_device *dev = nl->watchdog_dev; unsigned long flags; unsigned char csr0; @@ -1060,11 +1060,7 @@ sbni_watchdog( unsigned long arg ) outb( csr0 | RC_CHK, dev->base_addr + CSR0 ); - init_timer( w ); - w->expires = jiffies + SBNI_TIMEOUT; - w->data = arg; - w->function = sbni_watchdog; - add_timer( w ); + mod_timer(t, jiffies + SBNI_TIMEOUT); spin_unlock_irqrestore( &nl->lock, flags ); } @@ -1195,10 +1191,9 @@ handler_attached: netif_start_queue( dev ); /* set timer watchdog */ - init_timer( w ); + nl->watchdog_dev = dev; + timer_setup(w, sbni_watchdog, 0); w->expires = jiffies + SBNI_TIMEOUT; - w->data = (unsigned long) dev; - w->function = sbni_watchdog; add_timer( w ); spin_unlock( &nl->lock ); |