mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 22:47:56 +00:00
adc8b374e3
This fixes: 1) Getting STA info with newer firmwares 2) Getting DMI / UEFI / OF data 3) Possible memory corruption in firmware loading code Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
81 lines
3.2 KiB
Diff
81 lines
3.2 KiB
Diff
From 4282ff17e557d319e1b988fa4f582792cfaf6fff 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>
|
|
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
---
|
|
.../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 {
|