[netdrvr fmvj18x_cs] fix multicast bug

* use set_rx_mode to (re)initialize the multicast table.
* MC_FILTERBREAK is 64 (= 8 * 8bit)
* remove local_info_t.mc_filter

authored by Komuro and committed by Jeff Garzik ab80882b 1d97f384

+11 -21
+11 -21
drivers/net/pcmcia/fmvj18x_cs.c
··· 131 131 u_short tx_queue_len; 132 132 cardtype_t cardtype; 133 133 u_short sent; 134 - u_char mc_filter[8]; 135 134 } local_info_t; 136 135 137 - #define MC_FILTERBREAK 8 136 + #define MC_FILTERBREAK 64 138 137 139 138 /*====================================================================*/ 140 139 /* ··· 1004 1005 for (i = 0; i < 6; i++) 1005 1006 outb(dev->dev_addr[i], ioaddr + NODE_ID + i); 1006 1007 1007 - /* Switch to bank 1 */ 1008 - if (lp->cardtype == MBH10302) 1009 - outb(BANK_1, ioaddr + CONFIG_1); 1010 - else 1011 - outb(BANK_1U, ioaddr + CONFIG_1); 1012 - 1013 - /* set the multicast table to accept none. */ 1014 - for (i = 0; i < 8; i++) 1015 - outb(0x00, ioaddr + MAR_ADR + i); 1008 + /* (re)initialize the multicast table */ 1009 + set_rx_mode(dev); 1016 1010 1017 1011 /* Switch to bank 2 (runtime mode) */ 1018 1012 if (lp->cardtype == MBH10302) ··· 1256 1264 static void set_rx_mode(struct net_device *dev) 1257 1265 { 1258 1266 kio_addr_t ioaddr = dev->base_addr; 1259 - struct local_info_t *lp = netdev_priv(dev); 1260 1267 u_char mc_filter[8]; /* Multicast hash filter */ 1261 1268 u_long flags; 1262 1269 int i; 1263 1270 1271 + int saved_bank; 1264 1272 int saved_config_0 = inb(ioaddr + CONFIG_0); 1265 1273 1266 1274 local_irq_save(flags); ··· 1298 1306 outb(2, ioaddr + RX_MODE); /* Use normal mode. */ 1299 1307 } 1300 1308 1301 - if (memcmp(mc_filter, lp->mc_filter, sizeof(mc_filter))) { 1302 - int saved_bank = inb(ioaddr + CONFIG_1); 1303 - /* Switch to bank 1 and set the multicast table. */ 1304 - outb(0xe4, ioaddr + CONFIG_1); 1305 - for (i = 0; i < 8; i++) 1306 - outb(mc_filter[i], ioaddr + MAR_ADR + i); 1307 - memcpy(lp->mc_filter, mc_filter, sizeof(mc_filter)); 1308 - outb(saved_bank, ioaddr + CONFIG_1); 1309 - } 1309 + /* Switch to bank 1 and set the multicast table. */ 1310 + saved_bank = inb(ioaddr + CONFIG_1); 1311 + outb(0xe4, ioaddr + CONFIG_1); 1312 + 1313 + for (i = 0; i < 8; i++) 1314 + outb(mc_filter[i], ioaddr + MAR_ADR + i); 1315 + outb(saved_bank, ioaddr + CONFIG_1); 1310 1316 1311 1317 outb(saved_config_0, ioaddr + CONFIG_0); 1312 1318