Author: yongari
Date: Thu Mar 26 04:55:22 2015
New Revision: 280657
URL: https://svnweb.freebsd.org/changeset/base/280657

Log:
  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.

Modified:
  stable/10/sys/dev/sis/if_sis.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/sis/if_sis.c
==============================================================================
--- stable/10/sys/dev/sis/if_sis.c      Thu Mar 26 03:43:38 2015        
(r280656)
+++ stable/10/sys/dev/sis/if_sis.c      Thu Mar 26 04:55:22 2015        
(r280657)
@@ -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 comm
        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:
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to