summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-mac80211.c
diff options
context:
space:
mode:
authorJohannes Berg2011-11-10 15:55:13 +0100
committerJohn W. Linville2011-11-11 18:32:54 +0100
commita69cd040d03711215c32f89683a025d28594d2b5 (patch)
tree321661c9af75ed2ebea1783412854cc4da3b1d9f /drivers/net/wireless/iwlwifi/iwl-mac80211.c
parentiwlagn: use per-vif AC parameters (diff)
downloadkernel-qcow2-linux-a69cd040d03711215c32f89683a025d28594d2b5.tar.gz
kernel-qcow2-linux-a69cd040d03711215c32f89683a025d28594d2b5.tar.xz
kernel-qcow2-linux-a69cd040d03711215c32f89683a025d28594d2b5.zip
iwlagn: explicitly program P2P QoS parameters
In P2P device mode, the device needs to have valid QoS parameters. We currently have those because we program parameters from any virtual interface into all contexts, but not only do we want to get rid of this -- it is also unpredictable since on the BSS context we might have any parameters, and there it might even be programmed for HT. Explicitly program default QoS parameters into the PAN context for P2P (the defaults are 11g but with QoS disabled) to make device behaviour predictable. This also helps when in a follow-up patch we will use TX QoS parameters from mac80211 only for the context they were meant for -- without this first that would completely break P2P device discovery. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-mac80211.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-mac80211.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-mac80211.c b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
index 43d795d472e0..c06bfe40cf38 100644
--- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c
+++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
@@ -1305,7 +1305,35 @@ static int iwlagn_mac_remain_on_channel(struct ieee80211_hw *hw,
cancel_delayed_work(&priv->hw_roc_disable_work);
if (!ctx->is_active) {
+ static const struct iwl_qos_info default_qos_data = {
+ .def_qos_parm = {
+ .ac[0] = {
+ .cw_min = cpu_to_le16(3),
+ .cw_max = cpu_to_le16(7),
+ .aifsn = 2,
+ .edca_txop = cpu_to_le16(1504),
+ },
+ .ac[1] = {
+ .cw_min = cpu_to_le16(7),
+ .cw_max = cpu_to_le16(15),
+ .aifsn = 2,
+ .edca_txop = cpu_to_le16(3008),
+ },
+ .ac[2] = {
+ .cw_min = cpu_to_le16(15),
+ .cw_max = cpu_to_le16(1023),
+ .aifsn = 3,
+ },
+ .ac[3] = {
+ .cw_min = cpu_to_le16(15),
+ .cw_max = cpu_to_le16(1023),
+ .aifsn = 7,
+ },
+ },
+ };
+
ctx->is_active = true;
+ ctx->qos_data = default_qos_data;
ctx->staging.dev_type = RXON_DEV_TYPE_P2P;
memcpy(ctx->staging.node_addr,
priv->contexts[IWL_RXON_CTX_BSS].staging.node_addr,