From 615ff23d4f635cfefaf2960cd9233e540b1eaab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Sun, 10 Jan 2016 00:19:09 +0000 Subject: mac80211: brcmfmac: fix getting/setting TX power This patches also adds BCM4366 support which may be found on some new routers based on BCM47094 or BCM4709C0. Unfortunately firmware is still missing for this chipset. git-svn-id: svn://svn.openwrt.org/openwrt/branches/chaos_calmer@48166 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...nly-assign-primary-netdev-to-if2bss-array.patch | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 package/kernel/mac80211/patches/370-0004-brcmfmac-Only-assign-primary-netdev-to-if2bss-array.patch (limited to 'package/kernel/mac80211/patches/370-0004-brcmfmac-Only-assign-primary-netdev-to-if2bss-array.patch') diff --git a/package/kernel/mac80211/patches/370-0004-brcmfmac-Only-assign-primary-netdev-to-if2bss-array.patch b/package/kernel/mac80211/patches/370-0004-brcmfmac-Only-assign-primary-netdev-to-if2bss-array.patch new file mode 100644 index 0000000000..c51365fe29 --- /dev/null +++ b/package/kernel/mac80211/patches/370-0004-brcmfmac-Only-assign-primary-netdev-to-if2bss-array.patch @@ -0,0 +1,73 @@ +From: Hante Meuleman +Date: Fri, 18 Sep 2015 22:08:07 +0200 +Subject: [PATCH] brcmfmac: Only assign primary netdev to if2bss array. + +The if2bss allows for translation of ifidx to bssidx which has a 1:n +relation. Therefor only the first (primary) netdev should be +assigned in this array. This fixes the p2pon=1 module param usage. + +Reviewed-by: Arend Van Spriel +Reviewed-by: Pieter-Paul Giesberts +Signed-off-by: Hante Meuleman +Signed-off-by: Arend van Spriel +Signed-off-by: Kalle Valo +--- + +--- a/drivers/net/wireless/brcm80211/brcmfmac/core.c ++++ b/drivers/net/wireless/brcm80211/brcmfmac/core.c +@@ -53,6 +53,8 @@ MODULE_LICENSE("Dual BSD/GPL"); + #define BRCMF_RXREORDER_EXPIDX_VALID 0x08 + #define BRCMF_RXREORDER_NEW_HOLE 0x10 + ++#define BRCMF_BSSIDX_INVALID -1 ++ + /* Error bits */ + int brcmf_msg_level; + module_param_named(debug, brcmf_msg_level, int, S_IRUSR | S_IWUSR); +@@ -837,7 +839,8 @@ struct brcmf_if *brcmf_add_if(struct brc + ifp = netdev_priv(ndev); + ifp->ndev = ndev; + /* store mapping ifidx to bssidx */ +- drvr->if2bss[ifidx] = bssidx; ++ if (drvr->if2bss[ifidx] == BRCMF_BSSIDX_INVALID) ++ drvr->if2bss[ifidx] = bssidx; + } + + ifp->drvr = drvr; +@@ -862,15 +865,15 @@ static void brcmf_del_if(struct brcmf_pu + struct brcmf_if *ifp; + + ifp = drvr->iflist[bssidx]; +- drvr->if2bss[ifp->ifidx] = -1; + drvr->iflist[bssidx] = NULL; + if (!ifp) { + brcmf_err("Null interface, idx=%d\n", bssidx); + return; + } + brcmf_dbg(TRACE, "Enter, idx=%d, ifidx=%d\n", bssidx, ifp->ifidx); ++ if (drvr->if2bss[ifp->ifidx] == bssidx) ++ drvr->if2bss[ifp->ifidx] = BRCMF_BSSIDX_INVALID; + if (ifp->ndev) { +- drvr->if2bss[ifp->ifidx] = -1; + if (bssidx == 0) { + if (ifp->ndev->netdev_ops == &brcmf_netdev_ops_pri) { + rtnl_lock(); +@@ -926,6 +929,7 @@ int brcmf_attach(struct device *dev) + { + struct brcmf_pub *drvr = NULL; + int ret = 0; ++ int i; + + brcmf_dbg(TRACE, "Enter\n"); + +@@ -934,7 +938,9 @@ int brcmf_attach(struct device *dev) + if (!drvr) + return -ENOMEM; + +- memset(drvr->if2bss, 0xFF, sizeof(drvr->if2bss)); ++ for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++) ++ drvr->if2bss[i] = BRCMF_BSSIDX_INVALID; ++ + mutex_init(&drvr->proto_block); + + /* Link to bus module */ -- cgit v1.2.3