diff mbox

[kernel,2.6.34-rc3-git9] smc91c92_cs: define multicast_table as unsigned char

Message ID 20100411075014.d3e80847.ken_kawasaki@spring.nifty.jp
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Ken Kawasaki April 10, 2010, 10:50 p.m. UTC
smc91c92_cs:
  * define multicast_table as unsigned char
  * remove unnecessary "#ifndef final_version"

Signed-off-by: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>

---

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller April 13, 2010, 10:09 a.m. UTC | #1
From: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>
Date: Sun, 11 Apr 2010 07:50:14 +0900

> 
> smc91c92_cs:
>   * define multicast_table as unsigned char
>   * remove unnecessary "#ifndef final_version"
> 
> Signed-off-by: Ken Kawasaki <ken_kawasaki@spring.nifty.jp>

It is clear there are not too many testers of multicast
with this driver :-)

Thanks for fixing this bug, patch applied.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- linux-2.6.34-rc3-git9/drivers/net/pcmcia/smc91c92_cs.c.orig	2010-04-10 07:08:09.000000000 +0900
+++ linux-2.6.34-rc3-git9/drivers/net/pcmcia/smc91c92_cs.c	2010-04-10 07:31:47.000000000 +0900
@@ -1608,9 +1608,12 @@  static void set_rx_mode(struct net_devic
 {
     unsigned int ioaddr = dev->base_addr;
     struct smc_private *smc = netdev_priv(dev);
-    u_int multicast_table[ 2 ] = { 0, };
+    unsigned char multicast_table[8];
     unsigned long flags;
     u_short rx_cfg_setting;
+    int i;
+
+    memset(multicast_table, 0, sizeof(multicast_table));
 
     if (dev->flags & IFF_PROMISC) {
 	rx_cfg_setting = RxStripCRC | RxEnable | RxPromisc | RxAllMulti;
@@ -1622,10 +1625,6 @@  static void set_rx_mode(struct net_devic
 
 	    netdev_for_each_mc_addr(mc_addr, dev) {
 		u_int position = ether_crc(6, mc_addr->dmi_addr);
-#ifndef final_version		/* Verify multicast address. */
-		if ((mc_addr->dmi_addr[0] & 1) == 0)
-		    continue;
-#endif
 		multicast_table[position >> 29] |= 1 << ((position >> 26) & 7);
 	    }
 	}
@@ -1635,8 +1634,8 @@  static void set_rx_mode(struct net_devic
     /* Load MC table and Rx setting into the chip without interrupts. */
     spin_lock_irqsave(&smc->lock, flags);
     SMC_SELECT_BANK(3);
-    outl(multicast_table[0], ioaddr + MULTICAST0);
-    outl(multicast_table[1], ioaddr + MULTICAST4);
+    for (i = 0; i < 8; i++)
+	outb(multicast_table[i], ioaddr + MULTICAST0 + i);
     SMC_SELECT_BANK(0);
     outw(rx_cfg_setting, ioaddr + RCR);
     SMC_SELECT_BANK(2);