aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/wcn36xx
diff options
context:
space:
mode:
authorAndy Green <andy.green@linaro.org>2015-11-10 03:25:53 -0500
committerKalle Valo <kvalo@codeaurora.org>2015-11-30 07:36:55 -0500
commit40ac77c8117b06501f3d190b614b008e66f68df2 (patch)
treeb17935bdee2590f03d70a0f20695f7fc21ec66b1 /drivers/net/wireless/ath/wcn36xx
parentdf0d4364766fcc8f717d751e5b6cee2a56acd7b5 (diff)
wcn36xx: handle new hal response format
wcn3620 has a new message structure for the reply to some hal commands. This patch adds the struct and helper routine that uses it if the chip is wcn3620, or falls back to the old helper routine. We don't know what to do with the candidate list he sends back, but we can at least accept and ignore it nicely instead of dying. Signed-off-by: Andy Green <andy.green@linaro.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ath/wcn36xx')
-rw-r--r--drivers/net/wireless/ath/wcn36xx/smd.c16
-rw-r--r--drivers/net/wireless/ath/wcn36xx/smd.h9
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c
index be317f4fa716..b7e61a0efc1b 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.c
+++ b/drivers/net/wireless/ath/wcn36xx/smd.c
@@ -302,6 +302,22 @@ static int wcn36xx_smd_rsp_status_check(void *buf, size_t len)
302 return 0; 302 return 0;
303} 303}
304 304
305static int wcn36xx_smd_rsp_status_check_v2(struct wcn36xx *wcn, void *buf,
306 size_t len)
307{
308 struct wcn36xx_fw_msg_status_rsp_v2 *rsp;
309
310 if (len < sizeof(struct wcn36xx_hal_msg_header) + sizeof(*rsp))
311 return wcn36xx_smd_rsp_status_check(buf, len);
312
313 rsp = buf + sizeof(struct wcn36xx_hal_msg_header);
314
315 if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status)
316 return rsp->status;
317
318 return 0;
319}
320
305int wcn36xx_smd_load_nv(struct wcn36xx *wcn) 321int wcn36xx_smd_load_nv(struct wcn36xx *wcn)
306{ 322{
307 struct nv_data *nv_d; 323 struct nv_data *nv_d;
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.h b/drivers/net/wireless/ath/wcn36xx/smd.h
index 008d03423dbf..8361f9e3995b 100644
--- a/drivers/net/wireless/ath/wcn36xx/smd.h
+++ b/drivers/net/wireless/ath/wcn36xx/smd.h
@@ -44,6 +44,15 @@ struct wcn36xx_fw_msg_status_rsp {
44 u32 status; 44 u32 status;
45} __packed; 45} __packed;
46 46
47/* wcn3620 returns this for tigger_ba */
48
49struct wcn36xx_fw_msg_status_rsp_v2 {
50 u8 bss_id[6];
51 u32 status __packed;
52 u16 count_following_candidates __packed;
53 /* candidate list follows */
54};
55
47struct wcn36xx_hal_ind_msg { 56struct wcn36xx_hal_ind_msg {
48 struct list_head list; 57 struct list_head list;
49 u8 *msg; 58 u8 *msg;