Download previous source of driver version bcmwl-5.60.48.36
In file src/include/wl_linux.h replace #include <linux/autoconf.h> to <generated/autoconf.h>
in file src/wl/sys/wl_linux.c find function wl_set_multicast_list (sting 1416) and replace it all on
Download previous source of driver version bcmwl-5.60.48.36 wl_linux. h replace #include <linux/autoconf.h> to <generated/ autoconf. h> sys/wl_ linux.c find function wl_set_ multicast_ list (sting 1416) and replace it all on
In file src/include/
in file src/wl/
static void multicast_ list(struct net_device *dev)
_wl_set_
{
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 34)
struct dev_mc_list *mclist;
#else
struct netdev_hw_addr *ha;
int num;
#endif
wl_info_t *wl;
int i, buflen;
struct maclist *maclist;
bool allmulti;
if (!dev)
return;
wl = WL_INFO(dev);
WL_TRACE(("wl%d: wl_set_ multicast_ list\n" , wl->pub->unit));
if (wl->pub->up) {
allmulti = (dev->flags & IFF_ALLMULTI)? TRUE: FALSE;
buflen = sizeof(struct maclist) + (MAXMULTILIST * ETHER_ADDR_LEN);
if ((maclist = MALLOC( wl->pub- >osh, buflen)) == NULL) {
return;
}
i = 0; mclist- >dmi_addr, &maclist->ea[i++], ETHER_ADDR_LEN); mc_count( dev), MAXMULTILIST); for_each_ mc_addr( ha, dev) {
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 34)
for (mclist = dev->mc_list; mclist && (i < dev->mc_count); mclist = mclist->next) {
if (i >= MAXMULTILIST) {
allmulti = TRUE;
i = 0;
break;
}
bcopy(
}
#else
num = min_t(int, netdev_
netdev_
if (i >= num) {
allmulti = TRUE;
i = 0;
break;
}
bcopy(ha->addr, &maclist->ea[i++], ETHER_ADDR_LEN);
}
#endif
maclist->count = i;
WL_LOCK(wl);
wlc_iovar_ setint( wl->wlc, "allmulti", allmulti);
wlc_set(wl->wlc, WLC_SET_PROMISC, (dev->flags & IFF_PROMISC));
wlc_iovar_ op(wl-> wlc, "mcast_list", NULL, 0, maclist, buflen, IOV_SET, NULL);
WL_UNLOCK(wl); wl->pub- >osh, maclist, buflen);
MFREE(
}
}
Compile and install new driver.
I have linux kernel 3.0.17. The driver is working for me.