45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 7762bb134e3b40e8ee2611365775b7432190a9c7 Mon Sep 17 00:00:00 2001
 | 
						|
From: Wright Feng <wright.feng@cypress.com>
 | 
						|
Date: Mon, 11 Dec 2017 15:38:21 +0800
 | 
						|
Subject: [PATCH] brcmfmac: enlarge buffer size of caps to 512 bytes
 | 
						|
 | 
						|
The buffer size of return of cap iovar is greater than 256 bytes in some
 | 
						|
firmwares. For instance, the return size of cap iovar is 271 bytes in 4373
 | 
						|
13.10.246.79 firmare. It makes feature capability parsing failed because
 | 
						|
caps buffer is default value.
 | 
						|
So we enlarge caps buffer size to 512 bytes and add the error print for
 | 
						|
cap iovar error.
 | 
						|
 | 
						|
Signed-off-by: Wright Feng <wright.feng@cypress.com>
 | 
						|
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
 | 
						|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
 | 
						|
---
 | 
						|
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 12 +++++++++---
 | 
						|
 1 file changed, 9 insertions(+), 3 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
 | 
						|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
 | 
						|
@@ -130,13 +130,19 @@ static void brcmf_feat_iovar_data_set(st
 | 
						|
 	}
 | 
						|
 }
 | 
						|
 
 | 
						|
+#define MAX_CAPS_BUFFER_SIZE	512
 | 
						|
 static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
 | 
						|
 {
 | 
						|
-	char caps[256];
 | 
						|
+	char caps[MAX_CAPS_BUFFER_SIZE];
 | 
						|
 	enum brcmf_feat_id id;
 | 
						|
-	int i;
 | 
						|
+	int i, err;
 | 
						|
+
 | 
						|
+	err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
 | 
						|
+	if (err) {
 | 
						|
+		brcmf_err("could not get firmware cap (%d)\n", err);
 | 
						|
+		return;
 | 
						|
+	}
 | 
						|
 
 | 
						|
-	brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
 | 
						|
 	brcmf_dbg(INFO, "[ %s]\n", caps);
 | 
						|
 
 | 
						|
 	for (i = 0; i < ARRAY_SIZE(brcmf_fwcap_map); i++) {
 |