All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alfonso Sánchez-Beato" <alfonso.sanchez-beato@canonical.com>
To: kvalo@qca.qualcomm.com
Cc: ath6kl@lists.infradead.org, linux-wireless@vger.kernel.org,
	alfonso.sanchez-beato@canonical.com
Subject: [PATCH] ath6kl: use WMI to set RSN capabilities
Date: Thu, 12 Apr 2018 17:41:59 +0200	[thread overview]
Message-ID: <20180412154159.13934-1-alfonso.sanchez-beato@canonical.com> (raw)

This fixes AP mode when the ATH6KL_FW_CAPABILITY_RSN_CAP_OVERRIDE flag
is not present in the FW. The id of some WMI commands is also fixed
(there was an error in the enum order), and a function to set RSN caps
is added.

Signed-off-by: Alfonso Sánchez-Beato <alfonso.sanchez-beato@canonical.com>
---
 drivers/net/wireless/ath/ath6kl/cfg80211.c | 21 ++++++---------------
 drivers/net/wireless/ath/ath6kl/main.c     | 10 +++-------
 drivers/net/wireless/ath/ath6kl/wmi.c      | 23 +++++++++++++++++++++++
 drivers/net/wireless/ath/ath6kl/wmi.h      | 15 +++++++++++----
 4 files changed, 43 insertions(+), 26 deletions(-)

diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index 2ba8cf3f38af..1b89c53d47e7 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -2933,13 +2933,11 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
 	 * advertise the same in beacon/probe response. Send
 	 * the complete RSN IE capability field to firmware
 	 */
-	if (!ath6kl_get_rsn_capab(&info->beacon, (u8 *) &rsn_capab) &&
-	    test_bit(ATH6KL_FW_CAPABILITY_RSN_CAP_OVERRIDE,
-		     ar->fw_capabilities)) {
-		res = ath6kl_wmi_set_ie_cmd(ar->wmi, vif->fw_vif_idx,
-					    WLAN_EID_RSN, WMI_RSN_IE_CAPB,
-					    (const u8 *) &rsn_capab,
-					    sizeof(rsn_capab));
+	if (!ath6kl_get_rsn_capab(&info->beacon, (u8 *)&rsn_capab)) {
+		ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, "RSN caps %d\n", rsn_capab);
+
+		res = ath6kl_wmi_set_rsn_cap(ar->wmi, vif->fw_vif_idx,
+					     rsn_capab);
 		vif->rsn_capab = rsn_capab;
 		if (res < 0)
 			return res;
@@ -3918,14 +3916,7 @@ int ath6kl_cfg80211_init(struct ath6kl *ar)
 		return -EINVAL;
 	}
 
-	/*
-	 * Even if the fw has HT support, advertise HT cap only when
-	 * the firmware has support to override RSN capability, otherwise
-	 * 4-way handshake would fail.
-	 */
-	if (!(ht &&
-	      test_bit(ATH6KL_FW_CAPABILITY_RSN_CAP_OVERRIDE,
-		       ar->fw_capabilities))) {
+	if (!ht) {
 		ath6kl_band_2ghz.ht_cap.cap = 0;
 		ath6kl_band_2ghz.ht_cap.ht_supported = false;
 		ath6kl_band_5ghz.ht_cap.cap = 0;
diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
index db95f85751e3..4e186f8b3950 100644
--- a/drivers/net/wireless/ath/ath6kl/main.c
+++ b/drivers/net/wireless/ath/ath6kl/main.c
@@ -579,13 +579,9 @@ static int ath6kl_commit_ch_switch(struct ath6kl_vif *vif, u16 channel)
 		 * reconfigure any saved RSN IE capabilites in the beacon /
 		 * probe response to stay in sync with the supplicant.
 		 */
-		if (vif->rsn_capab &&
-		    test_bit(ATH6KL_FW_CAPABILITY_RSN_CAP_OVERRIDE,
-			     ar->fw_capabilities))
-			ath6kl_wmi_set_ie_cmd(ar->wmi, vif->fw_vif_idx,
-					      WLAN_EID_RSN, WMI_RSN_IE_CAPB,
-					      (const u8 *) &vif->rsn_capab,
-					      sizeof(vif->rsn_capab));
+		if (vif->rsn_capab)
+			ath6kl_wmi_set_rsn_cap(ar->wmi, vif->fw_vif_idx,
+					       vif->rsn_capab);
 
 		return ath6kl_wmi_ap_profile_commit(ar->wmi, vif->fw_vif_idx,
 						    &vif->profile);
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index 777acc564ac9..d7de9224d755 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -4168,3 +4168,26 @@ void ath6kl_wmi_shutdown(struct wmi *wmi)
 	kfree(wmi->last_mgmt_tx_frame);
 	kfree(wmi);
 }
+
+int ath6kl_wmi_set_rsn_cap(struct wmi *wmi, u8 if_idx, u16 rsn_cap)
+{
+	struct sk_buff *skb;
+	struct wmi_rsn_cap_cmd *cmd;
+
+	skb = ath6kl_wmi_get_new_buf(sizeof(*cmd));
+	if (!skb)
+		return -ENOMEM;
+
+	ath6kl_dbg(ATH6KL_DBG_WMI, "set_rsn_cap: 0x%04x\n", rsn_cap);
+
+	cmd = (struct wmi_rsn_cap_cmd *)skb->data;
+	cmd->rsn_cap = cpu_to_le16(rsn_cap);
+
+	return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_RSN_CAP_CMDID,
+				   NO_SYNC_WMIFLAG);
+}
+
+int ath6kl_wmi_get_rsn_cap(struct wmi *wmi, u8 if_idx)
+{
+	return ath6kl_wmi_simple_cmd(wmi, if_idx, WMI_GET_RSN_CAP_CMDID);
+}
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h
index a60bb49fe920..011d4b6fb5ab 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.h
+++ b/drivers/net/wireless/ath/ath6kl/wmi.h
@@ -597,10 +597,6 @@ enum wmi_cmd_id {
 
 	WMI_GREENTX_PARAMS_CMDID,
 
-	WMI_RTT_MEASREQ_CMDID,
-	WMI_RTT_CAPREQ_CMDID,
-	WMI_RTT_STATUSREQ_CMDID,
-
 	/* WPS Commands */
 	WMI_WPS_START_CMDID,
 	WMI_GET_WPS_STATUS_CMDID,
@@ -621,6 +617,10 @@ enum wmi_cmd_id {
 	WMI_RX_FILTER_COALESCE_FILTER_OP_CMDID,
 	WMI_RX_FILTER_SET_FRAME_TEST_LIST_CMDID,
 
+	WMI_RTT_MEASREQ_CMDID,
+	WMI_RTT_CAPREQ_CMDID,
+	WMI_RTT_STATUSREQ_CMDID,
+
 	WMI_SEND_MGMT_CMDID,
 	WMI_BEGIN_SCAN_CMDID,
 
@@ -2533,6 +2533,10 @@ enum wmi_sync_flag {
 	END_WMIFLAG
 };
 
+struct wmi_rsn_cap_cmd {
+	__le16 rsn_cap;
+} __packed;
+
 enum htc_endpoint_id ath6kl_wmi_get_control_ep(struct wmi *wmi);
 void ath6kl_wmi_set_control_ep(struct wmi *wmi, enum htc_endpoint_id ep_id);
 int ath6kl_wmi_dix_2_dot3(struct wmi *wmi, struct sk_buff *skb);
@@ -2728,4 +2732,7 @@ void *ath6kl_wmi_init(struct ath6kl *devt);
 void ath6kl_wmi_shutdown(struct wmi *wmi);
 void ath6kl_wmi_reset(struct wmi *wmi);
 
+int ath6kl_wmi_set_rsn_cap(struct wmi *wmi, u8 if_idx, u16 rsn_cap);
+int ath6kl_wmi_get_rsn_cap(struct wmi *wmi, u8 if_idx);
+
 #endif /* WMI_H */
-- 
2.14.1

             reply	other threads:[~2018-04-12 15:42 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-12 15:41 Alfonso Sánchez-Beato [this message]
2018-04-13 10:48 ` [PATCH] ath6kl: use WMI to set RSN capabilities Kalle Valo
2018-04-13 11:19   ` Alfonso Sanchez-Beato
2018-04-13 11:22     ` Kalle Valo
2018-04-27 11:23 ` Kalle Valo
2018-04-27 15:47 ` [PATCH] " Steve deRosier
2018-04-27 16:57   ` Alfonso Sanchez-Beato
2018-04-27 17:34     ` Steve deRosier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180412154159.13934-1-alfonso.sanchez-beato@canonical.com \
    --to=alfonso.sanchez-beato@canonical.com \
    --cc=ath6kl@lists.infradead.org \
    --cc=kvalo@qca.qualcomm.com \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.