diff options
author | cognet <cognet@FreeBSD.org> | 2003-07-22 01:35:09 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2003-07-22 01:35:09 +0000 |
commit | 171794b4835a86a4c03f2f35618171c32e838fde (patch) | |
tree | e2e9516d29d28bf1d9b8158db40741ee02de5508 /sys | |
parent | ba36ddb07d75f5227ec82f0bdff03f40de79b482 (diff) | |
download | FreeBSD-src-171794b4835a86a4c03f2f35618171c32e838fde.zip FreeBSD-src-171794b4835a86a4c03f2f35618171c32e838fde.tar.gz |
Erm, my previous commit was wrong and sis_tick() was only called each time
sis_ioctl() was called, so one had to use ifconfig each time the cable got
plugged in to be able to use the connection.
Do it a better way now, add a "in_tick" field in the softc structure,
call timeout() in sis_tick() and don't call it in sis_init() if in_tick is
non-zero.
Reported by: Landmark Networks
Pointy hat to: cognet
Diffstat (limited to 'sys')
-rw-r--r-- | sys/pci/if_sis.c | 6 | ||||
-rw-r--r-- | sys/pci/if_sisreg.h | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c index eb51295..69822de 100644 --- a/sys/pci/if_sis.c +++ b/sys/pci/if_sis.c @@ -1739,6 +1739,7 @@ sis_tick(xsc) sc = xsc; SIS_LOCK(sc); + sc->in_tick = 1; ifp = &sc->arpcom.ac_if; mii = device_get_softc(sc->sis_miibus); @@ -1751,6 +1752,8 @@ sis_tick(xsc) sis_start(ifp); } + sc->sis_stat_ch = timeout(sis_tick, sc, hz); + sc->in_tick = 0; SIS_UNLOCK(sc); return; @@ -2187,7 +2190,8 @@ sis_init(xsc) ifp->if_flags |= IFF_RUNNING; ifp->if_flags &= ~IFF_OACTIVE; - sc->sis_stat_ch = timeout(sis_tick, sc, hz); + if (!sc->in_tick) + sc->sis_stat_ch = timeout(sis_tick, sc, hz); SIS_UNLOCK(sc); diff --git a/sys/pci/if_sisreg.h b/sys/pci/if_sisreg.h index 9fcefd7..97c48f7 100644 --- a/sys/pci/if_sisreg.h +++ b/sys/pci/if_sisreg.h @@ -463,6 +463,7 @@ struct sis_softc { #ifdef DEVICE_POLLING int rxcycles; #endif + int in_tick; struct mtx sis_mtx; }; |