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 {
 |