diff options
author | Hila Gonen <hila.gonen@intel.com> | 2013-03-13 12:00:03 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-29 03:03:24 -0400 |
commit | d64048edcd714095a5cf2d7019769d0d94e19892 (patch) | |
tree | 82b8a0a66772258c0a9320c5f3f14195b59b5326 /drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | |
parent | 9ce4fa7291ff797f04849075a2ee3cf60f752aee (diff) |
iwlwifi: mvm: Add support for connection monitor offload
The firmware supports periodic keep alive and beacon monitoring,
so advertise connection monitor offload capability by setting
IEEE80211_HW_CONNECTION_MONITOR flag. Implement missed beacons
notification handler. Call ieee80211_beacon_loss in case of
missed beacons, so AP probing by mac80211 can be triggered.
Signed-off-by: Hila Gonen <hila.gonen@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c index dc5f4ef50198..b4e8e597d2b7 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | |||
@@ -1050,3 +1050,28 @@ int iwl_mvm_rx_beacon_notif(struct iwl_mvm *mvm, | |||
1050 | rate); | 1050 | rate); |
1051 | return 0; | 1051 | return 0; |
1052 | } | 1052 | } |
1053 | |||
1054 | static void iwl_mvm_beacon_loss_iterator(void *_data, u8 *mac, | ||
1055 | struct ieee80211_vif *vif) | ||
1056 | { | ||
1057 | u16 *id = _data; | ||
1058 | struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif); | ||
1059 | |||
1060 | if (mvmvif->id == *id) | ||
1061 | ieee80211_beacon_loss(vif); | ||
1062 | } | ||
1063 | |||
1064 | int iwl_mvm_rx_missed_beacons_notif(struct iwl_mvm *mvm, | ||
1065 | struct iwl_rx_cmd_buffer *rxb, | ||
1066 | struct iwl_device_cmd *cmd) | ||
1067 | { | ||
1068 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | ||
1069 | struct iwl_missed_beacons_notif *missed_beacons = (void *)pkt->data; | ||
1070 | u16 id = (u16)le32_to_cpu(missed_beacons->mac_id); | ||
1071 | |||
1072 | ieee80211_iterate_active_interfaces_atomic(mvm->hw, | ||
1073 | IEEE80211_IFACE_ITER_NORMAL, | ||
1074 | iwl_mvm_beacon_loss_iterator, | ||
1075 | &id); | ||
1076 | return 0; | ||
1077 | } | ||