linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Emmanuel Grumbach <egrumbach@gmail.com>
To: linux-wireless@vger.kernel.org
Cc: Andrei Otcheretianski <andrei.otcheretianski@intel.com>,
	Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Subject: [PATCH 17/75] iwlwifi: mvm: Insert DS Parameter Set placeholder in probes
Date: Mon, 24 Nov 2014 16:33:53 +0200	[thread overview]
Message-ID: <1416839691-28533-17-git-send-email-egrumbach@gmail.com> (raw)
In-Reply-To: <CANUX_P32q7EFvuOvm+c=yYP9okVEfSUvdDg0gDHHCSg2G+gA0g@mail.gmail.com>

From: Andrei Otcheretianski <andrei.otcheretianski@intel.com>

Since it's too complicated for the fw to insert a DS Parameter Set
element in the middle of the frame, it was decided that it should be
done by the host. The fw will only parse the frame and update the
current channel field.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
---
 drivers/net/wireless/iwlwifi/iwl-fw.h   |  4 +--
 drivers/net/wireless/iwlwifi/mvm/scan.c | 53 +++++++++++++++++++++++++++++----
 2 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/iwl-fw.h b/drivers/net/wireless/iwlwifi/iwl-fw.h
index 6f7ae5f..598065b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-fw.h
+++ b/drivers/net/wireless/iwlwifi/iwl-fw.h
@@ -148,8 +148,8 @@ enum iwl_ucode_tlv_api {
  * @IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT: supports insertion of current
  *	tx power value into TPC Report action frame and Link Measurement Report
  *	action frame
- * @IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT: supports adding DS params
- *	element in probe requests.
+ * @IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT: supports updating current
+ *	channel in DS parameter set element in probe requests.
  * @IWL_UCODE_TLV_CAPA_WFA_TPC_REP_IE_SUPPORT: supports adding TPC Report IE in
  *	probe requests.
  * @IWL_UCODE_TLV_CAPA_QUIET_PERIOD_SUPPORT: supports Quiet Period requests
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c
index fb2a862..8a1f4a8 100644
--- a/drivers/net/wireless/iwlwifi/mvm/scan.c
+++ b/drivers/net/wireless/iwlwifi/mvm/scan.c
@@ -366,6 +366,10 @@ static int iwl_mvm_max_scan_ie_fw_cmd_room(struct iwl_mvm *mvm,
 	    !is_sched_scan)
 		max_probe_len -= 32;
 
+	/* DS parameter set element is added on 2.4GHZ band if required */
+	if (iwl_mvm_rrm_scan_needed(mvm))
+		max_probe_len -= 3;
+
 	return max_probe_len;
 }
 
@@ -1155,6 +1159,42 @@ iwl_mvm_lmac_scan_cfg_channels(struct iwl_mvm *mvm,
 	}
 }
 
+static u8 *iwl_mvm_copy_and_insert_ds_elem(struct iwl_mvm *mvm, const u8 *ies,
+					   size_t len, u8 *const pos)
+{
+	static const u8 before_ds_params[] = {
+			WLAN_EID_SSID,
+			WLAN_EID_SUPP_RATES,
+			WLAN_EID_REQUEST,
+			WLAN_EID_EXT_SUPP_RATES,
+	};
+	size_t offs;
+	u8 *newpos = pos;
+
+	if (!iwl_mvm_rrm_scan_needed(mvm)) {
+		memcpy(newpos, ies, len);
+		return newpos + len;
+	}
+
+	offs = ieee80211_ie_split(ies, len,
+				  before_ds_params,
+				  ARRAY_SIZE(before_ds_params),
+				  0);
+
+	memcpy(newpos, ies, offs);
+	newpos += offs;
+
+	/* Add a placeholder for DS Parameter Set element */
+	*newpos++ = WLAN_EID_DS_PARAMS;
+	*newpos++ = 1;
+	*newpos++ = 0;
+
+	memcpy(newpos, ies + offs, len - offs);
+	newpos += len - offs;
+
+	return newpos;
+}
+
 static void
 iwl_mvm_build_unified_scan_probe(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 				 struct ieee80211_scan_ies *ies,
@@ -1164,7 +1204,7 @@ iwl_mvm_build_unified_scan_probe(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 		sizeof(struct iwl_scan_channel_cfg_lmac) *
 			mvm->fw->ucode_capa.n_scan_channels);
 	struct ieee80211_mgmt *frame = (struct ieee80211_mgmt *)preq->buf;
-	u8 *pos;
+	u8 *pos, *newpos;
 
 	frame->frame_control = cpu_to_le16(IEEE80211_STYPE_PROBE_REQ);
 	eth_broadcast_addr(frame->da);
@@ -1179,11 +1219,14 @@ iwl_mvm_build_unified_scan_probe(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
 	preq->mac_header.offset = 0;
 	preq->mac_header.len = cpu_to_le16(24 + 2);
 
-	memcpy(pos, ies->ies[IEEE80211_BAND_2GHZ],
-	       ies->len[IEEE80211_BAND_2GHZ]);
+	/* Insert ds parameter set element on 2.4 GHz band */
+	newpos = iwl_mvm_copy_and_insert_ds_elem(mvm,
+						 ies->ies[IEEE80211_BAND_2GHZ],
+						 ies->len[IEEE80211_BAND_2GHZ],
+						 pos);
 	preq->band_data[0].offset = cpu_to_le16(pos - preq->buf);
-	preq->band_data[0].len = cpu_to_le16(ies->len[IEEE80211_BAND_2GHZ]);
-	pos += ies->len[IEEE80211_BAND_2GHZ];
+	preq->band_data[0].len = cpu_to_le16(newpos - pos);
+	pos = newpos;
 
 	memcpy(pos, ies->ies[IEEE80211_BAND_5GHZ],
 	       ies->len[IEEE80211_BAND_5GHZ]);
-- 
1.9.1


  parent reply	other threads:[~2014-11-24 14:35 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-24 14:34 pull request: iwlwifi-next 2014-11-24 Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 01/75] iwlwfifi: fix WANT_DEV_COREDUMP selection in Kconfig Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 02/75] iwlwifi: mvm: handle error from iwl_trans_update_sf Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 03/75] iwlwifi: mvm: use correct type for firmware status Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 04/75] iwlwifi: mvm: expose some static APIs for use by TDLS code Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 05/75] iwlwifi: mvm: rs: don't use shadowing variable Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 06/75] iwlwifi: mvm: fix init_dbg flow to work as expected Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 07/75] iwlwifi: mvm: rs: fix a WARNING in case of STBC and VHT Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 08/75] iwlwifi: mvm/trans: abort d0i3_enter in case of held ref Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 09/75] iwlwifi: mvm: rs: fix getting stuck in a test window Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 10/75] iwlwifi: mvm: rs - don't use the shared antenna when BT load is high Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 11/75] iwlwifi: mvm: don't capture firmware coredump for D3->D0 reconfig Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 12/75] iwlwifi: mvm: refactor temperature notification handling Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 13/75] iwlwifi: mvm: handle unsolicited DTS_MEASUREMENT_NOTIFICATIONs Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 14/75] iwlwifi: pcie: introduce delay when waking up the device Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 15/75] iwlwifi: pcie: newer platform needs a OS alive indication Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 16/75] iwlwifi: mvm: wake up d0i3_exit_waitq when aborting d0i3 Emmanuel Grumbach
2014-11-24 14:33 ` Emmanuel Grumbach [this message]
2014-11-24 14:33 ` [PATCH 18/75] iwlwifi: change max HT and VHT A-MPDU exponent Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 19/75] iwlwifi: mvm: add support for WMM Access Control Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 20/75] iwlwifi: mvm: move deferred d0i3 exit to resume_complete op Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 21/75] iwlwifi: mvm: New skip over dtim policy Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 22/75] iwlwifi: mvm: Fix the keep_alive calculation Emmanuel Grumbach
2014-11-24 14:33 ` [PATCH 23/75] iwlwifi: mvm: implement UMAC scan API Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 24/75] iwlwifi: mvm: BT Coex - add support for TTC / RRC Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 25/75] iwlwifi: mvm: rs: consider a missing BA as a single tx failure Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 26/75] iwlwifi: mvm: go to umac scan even if lmac tlv bit is on Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 27/75] iwlwifi: mvm: support random MAC address for scanning Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 28/75] iwlwifi: pcie: properly reset the device Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 29/75] iwlwifi: mvm: make nd_ies part of the mvm struct Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 30/75] iwlwifi: mvm: disable beacon filtering escape timer Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 31/75] iwlwifi: pcie: support loading FW with extended mem range Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 32/75] iwlwifi: pcie: support 7265-D devices Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 33/75] iwlwifi: mvm: use unsigned for ssid_bitmap Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 34/75] iwlwifi: mvm: remove warning on unknown scan complete Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 35/75] iwlwifi: mvm: add remove flow for AUX ROC time events Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 36/75] iwlwifi: mvm: refactor key add/remove functions Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 37/75] iwlwifi: mvm: add WEP RX hardware offload support Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 38/75] iwlwifi: build mac80211 rx_status in place Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 39/75] iwlwifi: mvm: pull crypto header into skb->head Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 40/75] iwlwifi: mvm: pull SNAP " Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 41/75] iwlwifi: mvm: declare TDLS support Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 42/75] iwlwifi: mvm: add TDLS channel switch FW APIs Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 43/75] iwlwifi: mvm: configure TDLS peers to FW Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 44/75] iwlwifi: mvm: allow private per-STA TFD queues Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 45/75] iwlwifi: mvm: disconnect TDLS peers on reconfig Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 46/75] iwlwifi: mvm: use private TFD queues for TDLS stations Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 47/75] iwlwifi: mvm: block TID when using TDLS Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 48/75] iwlwifi: mvm: implement mac80211 TDLS channel-switch APIs Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 49/75] iwlwifi: mvm: use new pre_channel_switch op instead of channel_switch_beacon Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 50/75] iwlwifi: mvm: only save csa_vif in AP/GO mode Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 51/75] iwlwifi: mvm: refactor iwl_mvm_switch_vif_chanctx to support other modes Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 52/75] iwlwifi: mvm: add support for CHANCTX_SWMODE_REASSIGN_VIF Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 53/75] iwlwifi: mvm: return the actual error code when switch_vif_chanctx fails Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 54/75] iwlwifi: mvm: Handle failed beacon transmissions during CSA Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 55/75] iwlwifi: mvm: disable PS during channel switch Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 56/75] iwlwifi: mvm: use switching_chanctx argument instead of csa_active Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 57/75] iwlwifi: mvm: add CSA absent time event for clients Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 58/75] iwlwifi: mvm: schedule CSA time event a bit before beacon 1 Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 59/75] iwlwifi: mvm: finalize on post_switch instead of unassign Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 60/75] iwlwifi: mvm: add a channel_switch op to bypass mac80211 timer Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 61/75] iwlwifi: mvm: disable beacon filtering during CSA Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 62/75] iwlwifi: mvm: clear TE data if CSA time event fails to start Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 63/75] iwlwifi: mvm: protect session during CSA Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 64/75] iwlwifi: mvm: add support for net detect Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 65/75] iwlwifi: mvm: refactor wowlan and netdetect configuration when suspending Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 66/75] iwlwifi: mvm: refactor iwl_mvm_query_wakeup_reasons() Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 67/75] iwlwifi: mvm: treat netdetect wake up separately Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 68/75] iwlwifi: trans: add suspend/resume ops Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 69/75] iwlwifi: mvm: call iwl_trans_suspend/resume Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 70/75] iwlwifi: mvm: add support to MFUART loading notification Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 71/75] iwlwifi: mvm: declare support for VHT BF info in radiotap Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 72/75] iwlwifi: mvm: disconnect TDLS peers before channel switch Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 73/75] iwlwifi: declare d0i3 support for IWL_DEVICE_8000 Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 74/75] iwlwifi: sdio: new SDIO card id for 4165 series Emmanuel Grumbach
2014-11-24 14:34 ` [PATCH 75/75] iwlwifi: update the secure mem space and for the CPUs Emmanuel Grumbach
2014-11-24 19:00 ` pull request: iwlwifi-next 2014-11-24 John W. Linville

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=1416839691-28533-17-git-send-email-egrumbach@gmail.com \
    --to=egrumbach@gmail.com \
    --cc=andrei.otcheretianski@intel.com \
    --cc=emmanuel.grumbach@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).