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 

static void
_wl_set_multicast_list(struct net_device *dev)
{
#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;
#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(mclist->dmi_addr, &maclist->ea[i++], 
ETHER_ADDR_LEN);
                }
#else
                num = min_t(int, netdev_mc_count(dev), MAXMULTILIST);
                netdev_for_each_mc_addr(ha, dev) {
                        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);
                MFREE(wl->pub->osh, maclist, buflen);
        }

}

Compile and install new driver.
I have linux kernel 3.0.17. The driver is working for me.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/732677

Title:
  bcmwl 5.100.82.38+bdcom-0ubuntu2 not work on BCM4311/4312

To manage notifications about this bug go to:
https://bugs.launchpad.net/broadcom-sta/+bug/732677/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to