aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-08-01 08:17:15 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-10-02 12:00:31 -0400
commitf6c6ad42b5e8b165ec1c62cfcd589c17a1682ca1 (patch)
treeebca6f76136d62294cc7fd942d130dc8a575ba5e
parent507cadf262fe67cd71e02247b240706be12f1042 (diff)
iwlwifi: mvm: implement beacon filtering testmode command
Add a testmode command to (manually) disable (and re-enable) beacon filtering for testing purposes. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c11
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/testmode.h4
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 43d0011a4308..3261730181fa 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -1570,6 +1570,7 @@ static void iwl_mvm_mac_rssi_callback(struct ieee80211_hw *hw,
1570static const struct nla_policy iwl_mvm_tm_policy[IWL_MVM_TM_ATTR_MAX + 1] = { 1570static const struct nla_policy iwl_mvm_tm_policy[IWL_MVM_TM_ATTR_MAX + 1] = {
1571 [IWL_MVM_TM_ATTR_CMD] = { .type = NLA_U32 }, 1571 [IWL_MVM_TM_ATTR_CMD] = { .type = NLA_U32 },
1572 [IWL_MVM_TM_ATTR_NOA_DURATION] = { .type = NLA_U32 }, 1572 [IWL_MVM_TM_ATTR_NOA_DURATION] = { .type = NLA_U32 },
1573 [IWL_MVM_TM_ATTR_BEACON_FILTER_STATE] = { .type = NLA_U32 },
1573}; 1574};
1574 1575
1575static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm, 1576static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm,
@@ -1602,6 +1603,16 @@ static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm,
1602 mvm->noa_vif = vif; 1603 mvm->noa_vif = vif;
1603 1604
1604 return iwl_mvm_update_quotas(mvm, NULL); 1605 return iwl_mvm_update_quotas(mvm, NULL);
1606 case IWL_MVM_TM_CMD_SET_BEACON_FILTER:
1607 /* must be associated client vif - ignore authorized */
1608 if (!vif || vif->type != NL80211_IFTYPE_STATION ||
1609 !vif->bss_conf.assoc || !vif->bss_conf.dtim_period ||
1610 !tb[IWL_MVM_TM_ATTR_BEACON_FILTER_STATE])
1611 return -EINVAL;
1612
1613 if (nla_get_u32(tb[IWL_MVM_TM_ATTR_BEACON_FILTER_STATE]))
1614 return iwl_mvm_enable_beacon_filter(mvm, vif);
1615 return iwl_mvm_disable_beacon_filter(mvm, vif);
1605 } 1616 }
1606 1617
1607 return -EOPNOTSUPP; 1618 return -EOPNOTSUPP;
diff --git a/drivers/net/wireless/iwlwifi/mvm/testmode.h b/drivers/net/wireless/iwlwifi/mvm/testmode.h
index e3df4992a371..eb74391d91ca 100644
--- a/drivers/net/wireless/iwlwifi/mvm/testmode.h
+++ b/drivers/net/wireless/iwlwifi/mvm/testmode.h
@@ -69,11 +69,13 @@
69 * @IWL_MVM_TM_ATTR_UNSPEC: (invalid attribute) 69 * @IWL_MVM_TM_ATTR_UNSPEC: (invalid attribute)
70 * @IWL_MVM_TM_ATTR_CMD: sub command, see &enum iwl_mvm_testmode_commands (u32) 70 * @IWL_MVM_TM_ATTR_CMD: sub command, see &enum iwl_mvm_testmode_commands (u32)
71 * @IWL_MVM_TM_ATTR_NOA_DURATION: requested NoA duration (u32) 71 * @IWL_MVM_TM_ATTR_NOA_DURATION: requested NoA duration (u32)
72 * @IWL_MVM_TM_ATTR_BEACON_FILTER_STATE: beacon filter state (0 or 1, u32)
72 */ 73 */
73enum iwl_mvm_testmode_attrs { 74enum iwl_mvm_testmode_attrs {
74 IWL_MVM_TM_ATTR_UNSPEC, 75 IWL_MVM_TM_ATTR_UNSPEC,
75 IWL_MVM_TM_ATTR_CMD, 76 IWL_MVM_TM_ATTR_CMD,
76 IWL_MVM_TM_ATTR_NOA_DURATION, 77 IWL_MVM_TM_ATTR_NOA_DURATION,
78 IWL_MVM_TM_ATTR_BEACON_FILTER_STATE,
77 79
78 /* keep last */ 80 /* keep last */
79 NUM_IWL_MVM_TM_ATTRS, 81 NUM_IWL_MVM_TM_ATTRS,
@@ -83,9 +85,11 @@ enum iwl_mvm_testmode_attrs {
83/** 85/**
84 * enum iwl_mvm_testmode_commands - MVM testmode commands 86 * enum iwl_mvm_testmode_commands - MVM testmode commands
85 * @IWL_MVM_TM_CMD_SET_NOA: set NoA on GO vif for testing 87 * @IWL_MVM_TM_CMD_SET_NOA: set NoA on GO vif for testing
88 * @IWL_MVM_TM_CMD_SET_BEACON_FILTER: turn beacon filtering off/on
86 */ 89 */
87enum iwl_mvm_testmode_commands { 90enum iwl_mvm_testmode_commands {
88 IWL_MVM_TM_CMD_SET_NOA, 91 IWL_MVM_TM_CMD_SET_NOA,
92 IWL_MVM_TM_CMD_SET_BEACON_FILTER,
89}; 93};
90 94
91#endif /* __IWL_MVM_TESTMODE_H__ */ 95#endif /* __IWL_MVM_TESTMODE_H__ */