MFC r275816:
Fix a bug introdiced in r217548. According to NS DP83815 data sheet, RX filter should be disabled before programming. Previously it was clearing wrong bits so RX filter was not disabled in RX filter configuration. MFC r277048: Enable receive filter in sis_rxfilter(). While I'm here add a check for driver running state for multicast filter handling.
This commit is contained in:
parent
17ca262c02
commit
f0de020e4a
@ -757,7 +757,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);
|
||||
}
|
||||
|
||||
@ -779,7 +780,7 @@ sis_rxfilter_sis(struct sis_softc *sc)
|
||||
|
||||
filter = CSR_READ_4(sc, SIS_RXFILT_CTL);
|
||||
if (filter & SIS_RXFILTCTL_ENABLE) {
|
||||
CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter & ~SIS_RXFILT_CTL);
|
||||
CSR_WRITE_4(sc, SIS_RXFILT_CTL, filter & ~SIS_RXFILTCTL_ENABLE);
|
||||
CSR_READ_4(sc, SIS_RXFILT_CTL);
|
||||
}
|
||||
filter &= ~(SIS_RXFILTCTL_ALLPHYS | SIS_RXFILTCTL_BROAD |
|
||||
@ -819,7 +820,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);
|
||||
}
|
||||
|
||||
@ -2014,8 +2016,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.
|
||||
@ -2137,7 +2137,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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user