diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-08-01 08:17:15 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-10-02 12:00:31 -0400 |
commit | f6c6ad42b5e8b165ec1c62cfcd589c17a1682ca1 (patch) | |
tree | ebca6f76136d62294cc7fd942d130dc8a575ba5e | |
parent | 507cadf262fe67cd71e02247b240706be12f1042 (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.c | 11 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/testmode.h | 4 |
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, | |||
1570 | static const struct nla_policy iwl_mvm_tm_policy[IWL_MVM_TM_ATTR_MAX + 1] = { | 1570 | static 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 | ||
1575 | static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm, | 1576 | static 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 | */ |
73 | enum iwl_mvm_testmode_attrs { | 74 | enum 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 | */ |
87 | enum iwl_mvm_testmode_commands { | 90 | enum 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__ */ |