From f2a6d39b95b279a50db834cfe6d7fc9396be1c21 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Fri, 9 Nov 2018 23:01:11 +0100 Subject: [PATCH] mac80211: brcmfmac: add 2 more recent changes MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit First one is a fix for reporting channels to the user space. Important for users as they could try setting invalid channel and fail to start an interface. Later is a support for newer FullMAC chipset firmwares. Signed-off-by: Rafał Miłecki --- ...porting-support-for-160-MHz-channels.patch | 34 ++++++++ ...rint-invalid-chanspec-when-WARN-ing.patch} | 0 ...-brcmfmac-support-STA-info-struct-v7.patch | 78 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 package/kernel/mac80211/patches/349-v4.20-brcmfmac-fix-reporting-support-for-160-MHz-channels.patch rename package/kernel/mac80211/patches/{349-v4.21-0001-brcmutil-print-invalid-chanspec-when-WARN-ing.patch => 380-v4.21-0001-brcmutil-print-invalid-chanspec-when-WARN-ing.patch} (100%) create mode 100644 package/kernel/mac80211/patches/381-v4.21-0001-brcmfmac-support-STA-info-struct-v7.patch diff --git a/package/kernel/mac80211/patches/349-v4.20-brcmfmac-fix-reporting-support-for-160-MHz-channels.patch b/package/kernel/mac80211/patches/349-v4.20-brcmfmac-fix-reporting-support-for-160-MHz-channels.patch new file mode 100644 index 0000000000..699ea6e481 --- /dev/null +++ b/package/kernel/mac80211/patches/349-v4.20-brcmfmac-fix-reporting-support-for-160-MHz-channels.patch @@ -0,0 +1,34 @@ +From 8eefb59de817125eeedde2a2cc1e4ac3660062f9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Thu, 8 Nov 2018 16:08:29 +0100 +Subject: [PATCH] brcmfmac: fix reporting support for 160 MHz channels +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Driver can report IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ so it's +important to provide valid & complete info about supported bands for +each channel. By default no support for 160 MHz should be assumed unless +firmware reports it for a given channel later. + +This fixes info passed to the userspace. Without that change userspace +could try to use invalid channel and fail to start an interface. + +Signed-off-by: Rafał Miłecki +Cc: stable@vger.kernel.org +--- + drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +@@ -5992,7 +5992,8 @@ static int brcmf_construct_chaninfo(stru + * for subsequent chanspecs. + */ + channel->flags = IEEE80211_CHAN_NO_HT40 | +- IEEE80211_CHAN_NO_80MHZ; ++ IEEE80211_CHAN_NO_80MHZ | ++ IEEE80211_CHAN_NO_160MHZ; + ch.bw = BRCMU_CHAN_BW_20; + cfg->d11inf.encchspec(&ch); + chaninfo = ch.chspec; diff --git a/package/kernel/mac80211/patches/349-v4.21-0001-brcmutil-print-invalid-chanspec-when-WARN-ing.patch b/package/kernel/mac80211/patches/380-v4.21-0001-brcmutil-print-invalid-chanspec-when-WARN-ing.patch similarity index 100% rename from package/kernel/mac80211/patches/349-v4.21-0001-brcmutil-print-invalid-chanspec-when-WARN-ing.patch rename to package/kernel/mac80211/patches/380-v4.21-0001-brcmutil-print-invalid-chanspec-when-WARN-ing.patch diff --git a/package/kernel/mac80211/patches/381-v4.21-0001-brcmfmac-support-STA-info-struct-v7.patch b/package/kernel/mac80211/patches/381-v4.21-0001-brcmfmac-support-STA-info-struct-v7.patch new file mode 100644 index 0000000000..271994dae6 --- /dev/null +++ b/package/kernel/mac80211/patches/381-v4.21-0001-brcmfmac-support-STA-info-struct-v7.patch @@ -0,0 +1,78 @@ +From a4dad0334732f62c67058037d9edb17945bec598 Mon Sep 17 00:00:00 2001 +From: Dan Haab +Date: Fri, 9 Nov 2018 09:38:55 -0700 +Subject: [PATCH] brcmfmac: support STA info struct v7 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The newest firmwares provide STA info using v7 of the struct. As v7 +isn't backward compatible, a union is needed. + +Even though brcmfmac does not use any of the new info it's important to +provide the proper struct buffer. Without this change new firmwares will +fallback to the very limited v3 instead of something in between such as +v4. + +Signed-off-by: Dan Haab +Reviewed-by: Rafał Miłecki +--- + .../broadcom/brcm80211/brcmfmac/fwil_types.h | 40 ++++++++++++++++++---- + 1 file changed, 33 insertions(+), 7 deletions(-) + +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h +@@ -176,6 +176,8 @@ + + #define BRCMF_VHT_CAP_MCS_MAP_NSS_MAX 8 + ++#define BRCMF_HE_CAP_MCS_MAP_NSS_MAX 8 ++ + /* MAX_CHUNK_LEN is the maximum length for data passing to firmware in each + * ioctl. It is relatively small because firmware has small maximum size input + * playload restriction for ioctls. +@@ -601,13 +603,37 @@ struct brcmf_sta_info_le { + __le32 rx_pkts_retried; /* # rx with retry bit set */ + __le32 tx_rate_fallback; /* lowest fallback TX rate */ + +- /* Fields valid for ver >= 5 */ +- struct { +- __le32 count; /* # rates in this set */ +- u8 rates[BRCMF_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ +- u8 mcs[BRCMF_MCSSET_LEN]; /* supported mcs index bit map */ +- __le16 vht_mcs[BRCMF_VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */ +- } rateset_adv; ++ union { ++ struct { ++ struct { ++ __le32 count; /* # rates in this set */ ++ u8 rates[BRCMF_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ ++ u8 mcs[BRCMF_MCSSET_LEN]; /* supported mcs index bit map */ ++ __le16 vht_mcs[BRCMF_VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */ ++ } rateset_adv; ++ } v5; ++ ++ struct { ++ __le32 rx_dur_total; /* total user RX duration (estimated) */ ++ __le16 chanspec; /** chanspec this sta is on */ ++ __le16 pad_1; ++ struct { ++ __le16 version; /* version */ ++ __le16 len; /* length */ ++ __le32 count; /* # rates in this set */ ++ u8 rates[BRCMF_MAXRATES_IN_SET]; /* rates in 500kbps units w/hi bit set if basic */ ++ u8 mcs[BRCMF_MCSSET_LEN]; /* supported mcs index bit map */ ++ __le16 vht_mcs[BRCMF_VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */ ++ __le16 he_mcs[BRCMF_HE_CAP_MCS_MAP_NSS_MAX]; /* supported he mcs index bit map per nss */ ++ } rateset_adv; /* rateset along with mcs index bitmap */ ++ __le16 wpauth; /* authentication type */ ++ u8 algo; /* crypto algorithm */ ++ u8 pad_2; ++ __le32 tx_rspec; /* Rate of last successful tx frame */ ++ __le32 rx_rspec; /* Rate of last successful rx frame */ ++ __le32 wnm_cap; /* wnm capabilities */ ++ } v7; ++ }; + }; + + struct brcmf_chanspec_list { -- 2.30.2