[rdc] refresh 2.6.32 patches
[openwrt/svn-archive/archive.git] / target / linux / rdc / patches-2.6.32 / 015-r6040_fix_multicast.patch
index f2236655bfc1865e2b028edacce28c38a7d6d4de..c3e1830c41e2fb00a832de5cf27ff1b49890c8af 100644 (file)
@@ -9,7 +9,7 @@
  #define MCR1          0x04    /* Control register 1 */
  #define  MAC_RST      0x0001  /* Reset the MAC */
  #define MBCR          0x08    /* Bus control */
-@@ -837,76 +839,96 @@
+@@ -837,76 +839,96 @@ static void r6040_multicast_list(struct
  {
        struct r6040_private *lp = netdev_priv(dev);
        void __iomem *ioaddr = lp->base;
 +      /* Otherwise, Enable multicast hash table function. */
 +      else {
 +              u32 crc;
-+
-+              lp->mcr0 |= HASH_EN;
  
 -                      if (!(*addrs & 1))
 -                              continue;
++              lp->mcr0 |= HASH_EN;
+-                      crc = ether_crc_le(6, addrs);
 +              for (i = 0; i < MCAST_MAX ; i++) {
 +                      iowrite16(0, ioaddr + MID_1L + 8 * i);
 +                      iowrite16(0, ioaddr + MID_1M + 8 * i);
 +              for (i = 0; i < dev->mc_count; i++) {
 +                      u8 *addrs = dmi->dmi_addr;
 +                      dmi = dmi->next;
--                      crc = ether_crc_le(6, addrs);
++
 +                      crc = ether_crc(ETH_ALEN, addrs);
                        crc >>= 26;
 -                      hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf));