linux-mips-fnet
[Top] [All Lists]

[patch] linux: declance multicast filter fixes

To: Ralf Baechle <ralf@uni-koblenz.de>
Subject: [patch] linux: declance multicast filter fixes
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Date: Thu, 21 Mar 2002 19:04:10 +0100 (MET)
Cc: linux-mips@fnet.fr, linux-mips@oss.sgi.com
Organization: Technical University of Gdansk
Reply-to: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Hello,

 Following are a few trivial fixes for the DECstation's LANCE driver
needed for the chip's multicast filter to be set up correctly.  The patch
is needed for multicast reception to work, in particular for the IPv6's
neighbor discovery.  The CRC generation was verified using the AMD's
reference code and it was checked at the run time for selected multicast
addresses as well.  Please apply. 

 Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

patch-mips-2.4.17-20020129-declance-mcast-11
diff -up --recursive --new-file 
linux-mips-2.4.17-20020129.macro/drivers/net/declance.c 
linux-mips-2.4.17-20020129/drivers/net/declance.c
--- linux-mips-2.4.17-20020129.macro/drivers/net/declance.c     Wed Aug 22 
04:27:03 2001
+++ linux-mips-2.4.17-20020129/drivers/net/declance.c   Tue Mar 19 19:42:20 2002
@@ -793,6 +793,8 @@ static int lance_open(struct net_device 
        ib->mode = 0;
        ib->filter [0] = 0;
        ib->filter [2] = 0;
+       ib->filter [4] = 0;
+       ib->filter [6] = 0;
 
        lance_init_ring(dev);
        load_csrs(lp);
@@ -920,7 +922,7 @@ static void lance_load_multicast(struct 
        struct dev_mc_list *dmi = dev->mc_list;
        char *addrs;
        int i, j, bit, byte;
-       u32 crc, poly = CRC_POLYNOMIAL_BE;
+       u32 crc, poly = CRC_POLYNOMIAL_LE;
 
        /* set all multicast bits */
        if (dev->flags & IFF_ALLMULTI) {
@@ -959,7 +961,7 @@ static void lance_load_multicast(struct 
                        }
 
                crc = crc >> 26;
-               mcast_table[crc >> 3] |= 1 << (crc & 0xf);
+               mcast_table[2 * (crc >> 4)] |= 1 << (crc & 0xf);
        }
        return;
 }


<Prev in Thread] Current Thread [Next in Thread>