summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2015-01-12 07:37:06 +0000
committeryongari <yongari@FreeBSD.org>2015-01-12 07:37:06 +0000
commit9dbdda24ab6b10bc04001748de8f197847f91793 (patch)
tree85ddfc9958607e75bfbf63ce63a918a224f4c9d1
parent11969484c857cbee84a402ce4109ef7ac3f1a2b5 (diff)
downloadFreeBSD-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.c11
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:
OpenPOWER on IntegriCloud