diff options
author | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-08-31 14:10:25 +0000 |
---|---|---|
committer | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-08-31 14:10:25 +0000 |
commit | decdb0499fd307cc6c95818a41aa8513d30c3eaa (patch) | |
tree | baa0d2e3632cd12309fe7c886276aec90111602d /target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch | |
parent | 2ac9a1a7b37354ffbbcb10f1f2d8668f13ee9c11 (diff) |
[rdc] backport upstream multicast fix (#7848)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22852 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch')
-rw-r--r-- | target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch b/target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch new file mode 100644 index 0000000000..f41b4b5423 --- /dev/null +++ b/target/linux/rdc/patches-2.6.32/015-r6040_fix_multicast.patch @@ -0,0 +1,35 @@ +--- +--- a/drivers/net/r6040.c ++++ b/drivers/net/r6040.c +@@ -136,7 +136,7 @@ + #define RX_DESC_SIZE (RX_DCNT * sizeof(struct r6040_descriptor)) + #define TX_DESC_SIZE (TX_DCNT * sizeof(struct r6040_descriptor)) + #define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */ +-#define MCAST_MAX 4 /* Max number multicast addresses to filter */ ++#define MCAST_MAX 3 /* Max number multicast addresses to filter */ + + /* Descriptor status */ + #define DSC_OWNER_MAC 0x8000 /* MAC is the owner of this descriptor */ +@@ -887,9 +887,6 @@ static void r6040_multicast_list(struct + crc >>= 26; + hash_table[crc >> 4] |= 1 << (15 - (crc & 0xf)); + } +- /* Write the index of the hash table */ +- for (i = 0; i < 4; i++) +- iowrite16(hash_table[i] << 14, ioaddr + MCR1); + /* Fill the MAC hash tables with their values */ + iowrite16(hash_table[0], ioaddr + MAR0); + iowrite16(hash_table[1], ioaddr + MAR1); +@@ -905,9 +902,9 @@ static void r6040_multicast_list(struct + dmi = dmi->next; + } + for (i = dev->mc_count; i < MCAST_MAX; i++) { +- iowrite16(0xffff, ioaddr + MID_0L + 8*i); +- iowrite16(0xffff, ioaddr + MID_0M + 8*i); +- iowrite16(0xffff, ioaddr + MID_0H + 8*i); ++ iowrite16(0xffff, ioaddr + MID_1L + 8 * i); ++ iowrite16(0xffff, ioaddr + MID_1M + 8 * i); ++ iowrite16(0xffff, ioaddr + MID_1H + 8 * i); + } + } + |