Author: rmilecki Date: 2015-07-09 20:23:41 +0200 (Thu, 09 Jul 2015) New Revision: 46290
Added: branches/chaos_calmer/package/kernel/mac80211/patches/863-brcmfmac-set-wiphy-s-addresses-to-provide-valid-MACs.patch Log: mac80211: add brcmfmac patch fixing user space picked MACs Signed-off-by: Rafa?\197?\130 Mi?\197?\130ecki <[email protected]> Backport of r46288 Added: branches/chaos_calmer/package/kernel/mac80211/patches/863-brcmfmac-set-wiphy-s-addresses-to-provide-valid-MACs.patch =================================================================== --- branches/chaos_calmer/package/kernel/mac80211/patches/863-brcmfmac-set-wiphy-s-addresses-to-provide-valid-MACs.patch (rev 0) +++ branches/chaos_calmer/package/kernel/mac80211/patches/863-brcmfmac-set-wiphy-s-addresses-to-provide-valid-MACs.patch 2015-07-09 18:23:41 UTC (rev 46290) @@ -0,0 +1,69 @@ +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]> +Date: Thu, 9 Jul 2015 16:53:30 +0200 +Subject: [PATCH] brcmfmac: set wiphy's addresses to provide valid MACs +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Broadcom's firmware requires every BSS to use MAC address with unique +last few bits. The amount of bits may depend on a particular firmware, +it was verified to be 2 for BCM43602 one. +If this condition won't be fulfilled firmware will reject such MAC: +brcmfmac: _brcmf_set_mac_address: Setting cur_etheraddr failed, -52 + +We don't want to simply set addr_mask as it would also disallow using +locally administrated bit. Instead let's build a list of addresses +manually enabling 0x2 bit for extra interfaces. + +Signed-off-by: Rafał Miłecki <[email protected]> +--- + +--- a/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c +@@ -5812,6 +5812,7 @@ static void brcmf_wiphy_wowl_params(struct wiphy *wiphy) + + static int brcmf_setup_wiphy(struct wiphy *wiphy, struct brcmf_if *ifp) + { ++ struct brcmf_pub *drvr = ifp->drvr; + struct ieee80211_supported_band *band; + __le32 bandlist[3]; + u32 n_bands; +@@ -5825,6 +5826,19 @@ static int brcmf_setup_wiphy(struct wiphy *wiphy, struct brcmf_if *ifp) + if (err) + return err; + ++ for (i = 0; i < wiphy->iface_combinations->max_interfaces && ++ i < ARRAY_SIZE(drvr->addresses); i++) { ++ u8 *addr = drvr->addresses[i].addr; ++ ++ memcpy(addr, drvr->mac, ETH_ALEN); ++ if (i) { ++ addr[0] |= BIT(1); ++ addr[ETH_ALEN - 1] ^= i; ++ } ++ } ++ wiphy->addresses = drvr->addresses; ++ wiphy->n_addresses = i; ++ + wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; + wiphy->cipher_suites = __wl_cipher_suites; + wiphy->n_cipher_suites = ARRAY_SIZE(__wl_cipher_suites); +--- a/drivers/net/wireless/brcm80211/brcmfmac/core.h ++++ b/drivers/net/wireless/brcm80211/brcmfmac/core.h +@@ -21,6 +21,7 @@ + #ifndef BRCMFMAC_CORE_H + #define BRCMFMAC_CORE_H + ++#include <net/cfg80211.h> + #include "fweh.h" + + #define TOE_TX_CSUM_OL 0x00000001 +@@ -118,6 +119,8 @@ struct brcmf_pub { + /* Multicast data packets sent to dongle */ + unsigned long tx_multicast; + ++ struct mac_address addresses[BRCMF_MAX_IFS]; ++ + struct brcmf_if *iflist[BRCMF_MAX_IFS]; + + struct mutex proto_block; _______________________________________________ openwrt-commits mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits
