diff options
author | yongari <yongari@FreeBSD.org> | 2015-01-12 07:37:06 +0000 |
---|---|---|
committer | yongari <yongari@FreeBSD.org> | 2015-01-12 07:37:06 +0000 |
commit | 9dbdda24ab6b10bc04001748de8f197847f91793 (patch) | |
tree | 85ddfc9958607e75bfbf63ce63a918a224f4c9d1 | |
parent | 11969484c857cbee84a402ce4109ef7ac3f1a2b5 (diff) | |
download | FreeBSD-src-9dbdda24ab6b10bc04001748de8f197847f91793.zip FreeBSD-src-9dbdda24ab6b10bc04001748de8f197847f91793.tar.gz |
Enable receive filter in sis_rxfilter().
While I'm here add a check for driver running state for multicast
filter handling.
Suggested by: brad@OpenBSD.org
-rw-r--r-- | sys/dev/sis/if_sis.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/dev/sis/if_sis.c b/sys/dev/sis/if_sis.c index 520642f..71593e6 100644 --- a/sys/dev/sis/if_sis.c +++ b/sys/dev/sis/if_sis.c @@ -758,7 +758,8 @@ sis_rxfilter_ns(struct sis_softc *sc) if_maddr_runlock(ifp); } - CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter); + /* Turn the receive filter on */ + CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter | SIS_RXFILTCTL_ENABLE); CSR_READ_4(sc, SIS_RXFILT_CTL); } @@ -820,7 +821,8 @@ sis_rxfilter_sis(struct sis_softc *sc) CSR_WRITE_4(sc, SIS_RXFILT_DATA, hashes[i]); } - CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter); + /* Turn the receive filter on */ + CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter | SIS_RXFILTCTL_ENABLE); CSR_READ_4(sc, SIS_RXFILT_CTL); } @@ -2015,8 +2017,6 @@ sis_initl(struct sis_softc *sc) } sis_rxfilter(sc); - /* Turn the receive filter on */ - SIS_SETBIT(sc, SIS_RXFILT_CTL, SIS_RXFILTCTL_ENABLE); /* * Load the address of the RX and TX lists. @@ -2138,7 +2138,8 @@ sis_ioctl(struct ifnet *ifp, u_long command, caddr_t data) case SIOCADDMULTI: case SIOCDELMULTI: SIS_LOCK(sc); - sis_rxfilter(sc); + if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) + sis_rxfilter(sc); SIS_UNLOCK(sc); break; case SIOCGIFMEDIA: |