123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- From 07b1ae46874949252625c96f309f96ca0f337020 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
- Date: Thu, 28 Jun 2018 12:36:23 +0200
- Subject: [PATCH] brcmfmac: update STA info struct to the v5
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- That struct is used when querying firmware for the STA. It seem is has
- been changing during the time. Luckily its format seems to be backward
- compatible starting with v2 (the only breakage was v1 -> v2).
- The version that was supported by brcmfmac so far was v4. It was what
- 43602a1 and 4366b1 firmwares (7.35.177.56 and 10.10.69.3309 accordingly)
- were using. It also seems to be used by early 4366c0 firmwares
- (10.10.69.6908 and 10.10.69.69017).
- The problem appears when switching to the 10.10.122.20 firmware. It uses
- v5 and instead of falling back to v4 when submitted buffer isn't big
- enough it fallbacks to the v3.
- To receive all v4 specific info with the newest firmware we have to
- submit a struct (buffer) that matches v5.
- Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
- Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
- Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
- ---
- .../net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h | 14 ++++++++++++++
- 1 file changed, 14 insertions(+)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
- @@ -165,6 +165,8 @@
- #define BRCMF_MFP_NONE 0
- #define BRCMF_MFP_CAPABLE 1
- #define BRCMF_MFP_REQUIRED 2
- +
- +#define BRCMF_VHT_CAP_MCS_MAP_NSS_MAX 8
-
- /* join preference types for join_pref iovar */
- enum brcmf_join_pref_types {
- @@ -514,6 +516,8 @@ struct brcmf_sta_info_le {
- /* w/hi bit set if basic */
- __le32 in; /* seconds elapsed since associated */
- __le32 listen_interval_inms; /* Min Listen interval in ms for STA */
- +
- + /* Fields valid for ver >= 3 */
- __le32 tx_pkts; /* # of packets transmitted */
- __le32 tx_failures; /* # of packets failed */
- __le32 rx_ucast_pkts; /* # of unicast packets received */
- @@ -522,6 +526,8 @@ struct brcmf_sta_info_le {
- __le32 rx_rate; /* Rate of last successful rx frame */
- __le32 rx_decrypt_succeeds; /* # of packet decrypted successfully */
- __le32 rx_decrypt_failures; /* # of packet decrypted failed */
- +
- + /* Fields valid for ver >= 4 */
- __le32 tx_tot_pkts; /* # of tx pkts (ucast + mcast) */
- __le32 rx_tot_pkts; /* # of data packets recvd (uni + mcast) */
- __le32 tx_mcast_pkts; /* # of mcast pkts txed */
- @@ -558,6 +564,14 @@ 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;
- };
-
- struct brcmf_chanspec_list {
|