diff options
author | Ruslan Ermilov <ru@FreeBSD.org> | 2006-12-01 21:52:07 +0000 |
---|---|---|
committer | Ruslan Ermilov <ru@FreeBSD.org> | 2006-12-01 21:52:07 +0000 |
commit | 4a67956ec4ec46d33bab34aac8a062d2b10170cb (patch) | |
tree | 9fd1df18caa35905e0fcb51518890093a4eddf10 /sys/pci/if_rl.c | |
parent | d9cbee0c7d29293f18c0b0c0e2e358b0edb2b8bd (diff) | |
download | src-4a67956ec4ec46d33bab34aac8a062d2b10170cb.tar.gz src-4a67956ec4ec46d33bab34aac8a062d2b10170cb.zip |
if_watchdog -> rl_watchdog
Notes
Notes:
svn path=/head/; revision=164811
Diffstat (limited to 'sys/pci/if_rl.c')
-rw-r--r-- | sys/pci/if_rl.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/sys/pci/if_rl.c b/sys/pci/if_rl.c index 87189a8d5925..7c9dd3fc8114 100644 --- a/sys/pci/if_rl.c +++ b/sys/pci/if_rl.c @@ -215,7 +215,7 @@ static void rl_stop(struct rl_softc *); static int rl_suspend(device_t); static void rl_tick(void *); static void rl_txeof(struct rl_softc *); -static void rl_watchdog(struct ifnet *); +static void rl_watchdog(struct rl_softc *); #ifdef RL_USEIOSPACE #define RL_RES SYS_RES_IOPORT @@ -955,7 +955,6 @@ rl_attach(device_t dev) ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = rl_ioctl; ifp->if_start = rl_start; - ifp->if_watchdog = rl_watchdog; ifp->if_init = rl_init; ifp->if_capabilities = IFCAP_VLAN_MTU; ifp->if_capenable = ifp->if_capabilities; @@ -1265,9 +1264,9 @@ rl_txeof(struct rl_softc *sc) } while (sc->rl_cdata.last_tx != sc->rl_cdata.cur_tx); if (RL_LAST_TXMBUF(sc) == NULL) - ifp->if_timer = 0; - else if (ifp->if_timer == 0) - ifp->if_timer = 5; + sc->rl_watchdog_timer = 0; + else if (sc->rl_watchdog_timer == 0) + sc->rl_watchdog_timer = 5; } static void @@ -1280,6 +1279,8 @@ rl_tick(void *xsc) mii = device_get_softc(sc->rl_miibus); mii_tick(mii); + rl_watchdog(sc); + callout_reset(&sc->rl_stat_callout, hz, rl_tick, sc); } @@ -1466,7 +1467,7 @@ rl_start_locked(struct ifnet *ifp) RL_INC(sc->rl_cdata.cur_tx); /* Set a timeout in case the chip goes out to lunch. */ - ifp->if_timer = 5; + sc->rl_watchdog_timer = 5; } /* @@ -1693,20 +1694,20 @@ rl_ioctl(struct ifnet *ifp, u_long command, caddr_t data) } static void -rl_watchdog(struct ifnet *ifp) +rl_watchdog(struct rl_softc *sc) { - struct rl_softc *sc = ifp->if_softc; - RL_LOCK(sc); + RL_LOCK_ASSERT(sc); - if_printf(ifp, "watchdog timeout\n"); - ifp->if_oerrors++; + if (sc->rl_watchdog_timer == 0 || --sc->rl_watchdog_timer >0) + return; + + device_printf(sc->rl_dev, "watchdog timeout\n"); + sc->rl_ifp->if_oerrors++; rl_txeof(sc); rl_rxeof(sc); rl_init_locked(sc); - - RL_UNLOCK(sc); } /* @@ -1721,7 +1722,7 @@ rl_stop(struct rl_softc *sc) RL_LOCK_ASSERT(sc); - ifp->if_timer = 0; + sc->rl_watchdog_timer = 0; callout_stop(&sc->rl_stat_callout); ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); |