123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- From a4dad0334732f62c67058037d9edb17945bec598 Mon Sep 17 00:00:00 2001
- From: Dan Haab <riproute@gmail.com>
- 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 <dan.haab@luxul.com>
- Reviewed-by: Rafał Miłecki <rafal@milecki.pl>
- ---
- .../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
- @@ -167,6 +167,8 @@
- #define BRCMF_MFP_REQUIRED 2
-
- #define BRCMF_VHT_CAP_MCS_MAP_NSS_MAX 8
- +
- +#define BRCMF_HE_CAP_MCS_MAP_NSS_MAX 8
-
- /* join preference types for join_pref iovar */
- enum brcmf_join_pref_types {
- @@ -565,13 +567,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 {
|