Return-path: Received: from mail-qg0-f48.google.com ([209.85.192.48]:62512 "EHLO mail-qg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932515AbbA0T63 (ORCPT ); Tue, 27 Jan 2015 14:58:29 -0500 MIME-Version: 1.0 In-Reply-To: <20150118051117.31866.68634.stgit@114-36-241-182.dynamic.hinet.net> References: <20150118050741.31866.36490.stgit@114-36-241-182.dynamic.hinet.net> <20150118051117.31866.68634.stgit@114-36-241-182.dynamic.hinet.net> Date: Tue, 27 Jan 2015 19:58:28 +0000 Message-ID: (sfid-20150127_205839_702386_34B07AFB) Subject: Re: [PATCH 7/7] net: wireless: wcn36xx: handle new trigger_ba format From: Eugene Krasnikov To: Andy Green Cc: Kalle Valo , wcn36xx , linux-wireless , netdev Content-Type: text/plain; charset=UTF-8 Sender: linux-wireless-owner@vger.kernel.org List-ID: arg... it looks like the code is starting to have to many if(chip_version) cases. Mabe we should concider separate files for chip specific logic. 2015-01-18 5:11 GMT+00:00 Andy Green : > wcn3620 has a new message structure for the reply to trigger_ba > 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 > --- > drivers/net/wireless/ath/wcn36xx/smd.c | 28 ++++++++++++++++++++++++++-- > drivers/net/wireless/ath/wcn36xx/smd.h | 9 +++++++++ > 2 files changed, 35 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c > index 819741c..dc24e1b 100644 > --- a/drivers/net/wireless/ath/wcn36xx/smd.c > +++ b/drivers/net/wireless/ath/wcn36xx/smd.c > @@ -243,8 +243,31 @@ static int wcn36xx_smd_rsp_status_check(void *buf, size_t len) > rsp = (struct wcn36xx_fw_msg_status_rsp *) > (buf + sizeof(struct wcn36xx_hal_msg_header)); > > - if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status) > + if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status) { > + pr_err("%s: bad status, len = %d\n", __func__, len); > + return rsp->status; > + } > + > + return 0; > +} > + > +static int wcn36xx_smd_rsp_status_check_bav2(struct wcn36xx *wcn, void *buf, > + size_t len) > +{ > + struct wcn36xx_fw_msg_status_rspv2 *rsp; > + > + if (wcn->chip_version != WCN36XX_CHIP_3620) > + return wcn36xx_smd_rsp_status_check(buf, len); > + > + if (len < sizeof(struct wcn36xx_hal_msg_header) + sizeof(*rsp)) > + return -EIO; > + > + rsp = buf + sizeof(struct wcn36xx_hal_msg_header); > + > + if (WCN36XX_FW_MSG_RESULT_SUCCESS != rsp->status) { > + pr_err("%s: bad status, len = %d\n", __func__, len); > return rsp->status; > + } > > return 0; > } > @@ -1884,7 +1907,8 @@ int wcn36xx_smd_trigger_ba(struct wcn36xx *wcn, u8 sta_index) > wcn36xx_err("Sending hal_trigger_ba failed\n"); > goto out; > } > - ret = wcn36xx_smd_rsp_status_check(wcn->hal_buf, wcn->hal_rsp_len); > + ret = wcn36xx_smd_rsp_status_check_bav2(wcn, wcn->hal_buf, > + wcn->hal_rsp_len); > if (ret) { > wcn36xx_err("hal_trigger_ba response failed err=%d\n", ret); > goto out; > diff --git a/drivers/net/wireless/ath/wcn36xx/smd.h b/drivers/net/wireless/ath/wcn36xx/smd.h > index 008d034..432d3b8 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 { > u32 status; > } __packed; > > +/* wcn3620 returns this for tigger_ba */ > + > +struct wcn36xx_fw_msg_status_rspv2 { > + u8 bss_id[6]; > + u32 status __packed; > + u16 count_following_candidates __packed; > + /* candidate list follows */ > +}; > + > struct wcn36xx_hal_ind_msg { > struct list_head list; > u8 *msg; > -- Best regards, Eugene