Deleted Added
full compact
if_sis.c (148444) if_sis.c (148654)
1/*-
2 * Copyright (c) 2005 Poul-Henning Kamp <phk@FreeBSD.org>
3 * Copyright (c) 1997, 1998, 1999
4 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 18 unchanged lines hidden (view full) ---

27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31 * THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2005 Poul-Henning Kamp <phk@FreeBSD.org>
3 * Copyright (c) 1997, 1998, 1999
4 * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 18 unchanged lines hidden (view full) ---

27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31 * THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#include <sys/cdefs.h>
35__FBSDID("$FreeBSD: head/sys/pci/if_sis.c 148444 2005-07-27 13:48:45Z jhb $");
35__FBSDID("$FreeBSD: head/sys/pci/if_sis.c 148654 2005-08-03 00:18:35Z rwatson $");
36
37/*
38 * SiS 900/SiS 7016 fast ethernet PCI NIC driver. Datasheets are
39 * available from http://www.sis.com.tw.
40 *
41 * This driver also supports the NatSemi DP83815. Datasheets are
42 * available from http://www.national.com.
43 *

--- 714 unchanged lines hidden (view full) ---

758 filtsave = CSR_READ_4(sc, SIS_RXFILT_CTL);
759
760 /* first, zot all the existing hash bits */
761 for (i = 0; i < 32; i++) {
762 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + (i*2));
763 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 0);
764 }
765
36
37/*
38 * SiS 900/SiS 7016 fast ethernet PCI NIC driver. Datasheets are
39 * available from http://www.sis.com.tw.
40 *
41 * This driver also supports the NatSemi DP83815. Datasheets are
42 * available from http://www.national.com.
43 *

--- 714 unchanged lines hidden (view full) ---

758 filtsave = CSR_READ_4(sc, SIS_RXFILT_CTL);
759
760 /* first, zot all the existing hash bits */
761 for (i = 0; i < 32; i++) {
762 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + (i*2));
763 CSR_WRITE_4(sc, SIS_RXFILT_DATA, 0);
764 }
765
766 IF_ADDR_LOCK(ifp);
766 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
767 if (ifma->ifma_addr->sa_family != AF_LINK)
768 continue;
769 h = sis_mchash(sc,
770 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
771 index = h >> 3;
772 bit = h & 0x1F;
773 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + index);
774 if (bit > 0xF)
775 bit -= 0x10;
776 SIS_SETBIT(sc, SIS_RXFILT_DATA, (1 << bit));
777 }
767 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
768 if (ifma->ifma_addr->sa_family != AF_LINK)
769 continue;
770 h = sis_mchash(sc,
771 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
772 index = h >> 3;
773 bit = h & 0x1F;
774 CSR_WRITE_4(sc, SIS_RXFILT_CTL, NS_FILTADDR_FMEM_LO + index);
775 if (bit > 0xF)
776 bit -= 0x10;
777 SIS_SETBIT(sc, SIS_RXFILT_DATA, (1 << bit));
778 }
779 IF_ADDR_UNLOCK(ifp);
778
779 CSR_WRITE_4(sc, SIS_RXFILT_CTL, filtsave);
780
781 return;
782}
783
784static void
785sis_setmulti_sis(struct sis_softc *sc)

--- 22 unchanged lines hidden (view full) ---

808 if (ifp->if_flags & IFF_PROMISC)
809 ctl |= SIS_RXFILTCTL_BROAD|SIS_RXFILTCTL_ALLPHYS;
810 for (i = 0; i < n; i++)
811 hashes[i] = ~0;
812 } else {
813 for (i = 0; i < n; i++)
814 hashes[i] = 0;
815 i = 0;
780
781 CSR_WRITE_4(sc, SIS_RXFILT_CTL, filtsave);
782
783 return;
784}
785
786static void
787sis_setmulti_sis(struct sis_softc *sc)

--- 22 unchanged lines hidden (view full) ---

810 if (ifp->if_flags & IFF_PROMISC)
811 ctl |= SIS_RXFILTCTL_BROAD|SIS_RXFILTCTL_ALLPHYS;
812 for (i = 0; i < n; i++)
813 hashes[i] = ~0;
814 } else {
815 for (i = 0; i < n; i++)
816 hashes[i] = 0;
817 i = 0;
818 IF_ADDR_LOCK(ifp);
816 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
817 if (ifma->ifma_addr->sa_family != AF_LINK)
818 continue;
819 h = sis_mchash(sc,
820 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
821 hashes[h >> 4] |= 1 << (h & 0xf);
822 i++;
823 }
819 TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
820 if (ifma->ifma_addr->sa_family != AF_LINK)
821 continue;
822 h = sis_mchash(sc,
823 LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
824 hashes[h >> 4] |= 1 << (h & 0xf);
825 i++;
826 }
827 IF_ADDR_UNLOCK(ifp);
824 if (i > n) {
825 ctl |= SIS_RXFILTCTL_ALLMULTI;
826 for (i = 0; i < n; i++)
827 hashes[i] = ~0;
828 }
829 }
830
831 for (i = 0; i < n; i++) {

--- 1466 unchanged lines hidden ---
828 if (i > n) {
829 ctl |= SIS_RXFILTCTL_ALLMULTI;
830 for (i = 0; i < n; i++)
831 hashes[i] = ~0;
832 }
833 }
834
835 for (i = 0; i < n; i++) {

--- 1466 unchanged lines hidden ---