aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ti/wlcore/event.c5
-rw-r--r--include/net/cfg80211.h9
-rw-r--r--include/net/mac80211.h8
-rw-r--r--include/uapi/linux/nl80211.h7
-rw-r--r--net/mac80211/mlme.c14
-rw-r--r--net/mac80211/trace.h6
-rw-r--r--net/wireless/nl80211.c23
7 files changed, 62 insertions, 10 deletions
diff --git a/drivers/net/wireless/ti/wlcore/event.c b/drivers/net/wireless/ti/wlcore/event.c
index 16d10281798d..5153640f4532 100644
--- a/drivers/net/wireless/ti/wlcore/event.c
+++ b/drivers/net/wireless/ti/wlcore/event.c
@@ -259,10 +259,7 @@ void wlcore_event_beacon_loss(struct wl1271 *wl, unsigned long roles_bitmap)
259 &wlvif->connection_loss_work, 259 &wlvif->connection_loss_work,
260 msecs_to_jiffies(delay)); 260 msecs_to_jiffies(delay));
261 261
262 ieee80211_cqm_rssi_notify( 262 ieee80211_cqm_beacon_loss_notify(vif, GFP_KERNEL);
263 vif,
264 NL80211_CQM_RSSI_BEACON_LOSS_EVENT,
265 GFP_KERNEL);
266 } 263 }
267} 264}
268EXPORT_SYMBOL_GPL(wlcore_event_beacon_loss); 265EXPORT_SYMBOL_GPL(wlcore_event_beacon_loss);
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 1d15f1dfdaa7..4ebb816241fa 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -4670,6 +4670,15 @@ void cfg80211_cqm_txe_notify(struct net_device *dev, const u8 *peer,
4670 u32 num_packets, u32 rate, u32 intvl, gfp_t gfp); 4670 u32 num_packets, u32 rate, u32 intvl, gfp_t gfp);
4671 4671
4672/** 4672/**
4673 * cfg80211_cqm_beacon_loss_notify - beacon loss event
4674 * @dev: network device
4675 * @gfp: context flags
4676 *
4677 * Notify userspace about beacon loss from the connected AP.
4678 */
4679void cfg80211_cqm_beacon_loss_notify(struct net_device *dev, gfp_t gfp);
4680
4681/**
4673 * cfg80211_radar_event - radar detection event 4682 * cfg80211_radar_event - radar detection event
4674 * @wiphy: the wiphy 4683 * @wiphy: the wiphy
4675 * @chandef: chandef for the current channel 4684 * @chandef: chandef for the current channel
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index cff3a26a9dae..66cbfe46428d 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -4672,6 +4672,14 @@ void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
4672 gfp_t gfp); 4672 gfp_t gfp);
4673 4673
4674/** 4674/**
4675 * ieee80211_cqm_beacon_loss_notify - inform CQM of beacon loss
4676 *
4677 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
4678 * @gfp: context flags
4679 */
4680void ieee80211_cqm_beacon_loss_notify(struct ieee80211_vif *vif, gfp_t gfp);
4681
4682/**
4675 * ieee80211_radar_detected - inform that a radar was detected 4683 * ieee80211_radar_detected - inform that a radar was detected
4676 * 4684 *
4677 * @hw: pointer as obtained from ieee80211_alloc_hw() 4685 * @hw: pointer as obtained from ieee80211_alloc_hw()
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index d77524510435..b37bd5a1cb82 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3451,6 +3451,8 @@ enum nl80211_ps_state {
3451 * interval in which %NL80211_ATTR_CQM_TXE_PKTS and 3451 * interval in which %NL80211_ATTR_CQM_TXE_PKTS and
3452 * %NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an 3452 * %NL80211_ATTR_CQM_TXE_RATE must be satisfied before generating an
3453 * %NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting. 3453 * %NL80211_CMD_NOTIFY_CQM. Set to 0 to turn off TX error reporting.
3454 * @NL80211_ATTR_CQM_BEACON_LOSS_EVENT: flag attribute that's set in a beacon
3455 * loss event
3454 * @__NL80211_ATTR_CQM_AFTER_LAST: internal 3456 * @__NL80211_ATTR_CQM_AFTER_LAST: internal
3455 * @NL80211_ATTR_CQM_MAX: highest key attribute 3457 * @NL80211_ATTR_CQM_MAX: highest key attribute
3456 */ 3458 */
@@ -3463,6 +3465,7 @@ enum nl80211_attr_cqm {
3463 NL80211_ATTR_CQM_TXE_RATE, 3465 NL80211_ATTR_CQM_TXE_RATE,
3464 NL80211_ATTR_CQM_TXE_PKTS, 3466 NL80211_ATTR_CQM_TXE_PKTS,
3465 NL80211_ATTR_CQM_TXE_INTVL, 3467 NL80211_ATTR_CQM_TXE_INTVL,
3468 NL80211_ATTR_CQM_BEACON_LOSS_EVENT,
3466 3469
3467 /* keep last */ 3470 /* keep last */
3468 __NL80211_ATTR_CQM_AFTER_LAST, 3471 __NL80211_ATTR_CQM_AFTER_LAST,
@@ -3475,9 +3478,7 @@ enum nl80211_attr_cqm {
3475 * configured threshold 3478 * configured threshold
3476 * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the 3479 * @NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH: The RSSI is higher than the
3477 * configured threshold 3480 * configured threshold
3478 * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: The device experienced beacon loss. 3481 * @NL80211_CQM_RSSI_BEACON_LOSS_EVENT: (reserved, never sent)
3479 * (Note that deauth/disassoc will still follow if the AP is not
3480 * available. This event might get used as roaming event, etc.)
3481 */ 3482 */
3482enum nl80211_cqm_rssi_threshold_event { 3483enum nl80211_cqm_rssi_threshold_event {
3483 NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW, 3484 NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW,
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 36e39ed4dfd9..8a23a64b9a61 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2266,9 +2266,7 @@ static void ieee80211_mgd_probe_ap(struct ieee80211_sub_if_data *sdata,
2266 "detected beacon loss from AP (missed %d beacons) - probing\n", 2266 "detected beacon loss from AP (missed %d beacons) - probing\n",
2267 beacon_loss_count); 2267 beacon_loss_count);
2268 2268
2269 ieee80211_cqm_rssi_notify(&sdata->vif, 2269 ieee80211_cqm_beacon_loss_notify(&sdata->vif, GFP_KERNEL);
2270 NL80211_CQM_RSSI_BEACON_LOSS_EVENT,
2271 GFP_KERNEL);
2272 } 2270 }
2273 2271
2274 /* 2272 /*
@@ -4901,3 +4899,13 @@ void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
4901 cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp); 4899 cfg80211_cqm_rssi_notify(sdata->dev, rssi_event, gfp);
4902} 4900}
4903EXPORT_SYMBOL(ieee80211_cqm_rssi_notify); 4901EXPORT_SYMBOL(ieee80211_cqm_rssi_notify);
4902
4903void ieee80211_cqm_beacon_loss_notify(struct ieee80211_vif *vif, gfp_t gfp)
4904{
4905 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4906
4907 trace_api_cqm_beacon_loss_notify(sdata->local, sdata);
4908
4909 cfg80211_cqm_beacon_loss_notify(sdata->dev, gfp);
4910}
4911EXPORT_SYMBOL(ieee80211_cqm_beacon_loss_notify);
diff --git a/net/mac80211/trace.h b/net/mac80211/trace.h
index 85ccfbe863db..8e461a02c6a8 100644
--- a/net/mac80211/trace.h
+++ b/net/mac80211/trace.h
@@ -1829,6 +1829,12 @@ TRACE_EVENT(api_cqm_rssi_notify,
1829 ) 1829 )
1830); 1830);
1831 1831
1832DEFINE_EVENT(local_sdata_evt, api_cqm_beacon_loss_notify,
1833 TP_PROTO(struct ieee80211_local *local,
1834 struct ieee80211_sub_if_data *sdata),
1835 TP_ARGS(local, sdata)
1836);
1837
1832TRACE_EVENT(api_scan_completed, 1838TRACE_EVENT(api_scan_completed,
1833 TP_PROTO(struct ieee80211_local *local, bool aborted), 1839 TP_PROTO(struct ieee80211_local *local, bool aborted),
1834 1840
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 9c4d0102d34d..e11980e74a04 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -11826,6 +11826,10 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
11826 11826
11827 trace_cfg80211_cqm_rssi_notify(dev, rssi_event); 11827 trace_cfg80211_cqm_rssi_notify(dev, rssi_event);
11828 11828
11829 if (WARN_ON(rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW &&
11830 rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH))
11831 return;
11832
11829 msg = cfg80211_prepare_cqm(dev, NULL, gfp); 11833 msg = cfg80211_prepare_cqm(dev, NULL, gfp);
11830 if (!msg) 11834 if (!msg)
11831 return; 11835 return;
@@ -11892,6 +11896,25 @@ void cfg80211_cqm_pktloss_notify(struct net_device *dev,
11892} 11896}
11893EXPORT_SYMBOL(cfg80211_cqm_pktloss_notify); 11897EXPORT_SYMBOL(cfg80211_cqm_pktloss_notify);
11894 11898
11899void cfg80211_cqm_beacon_loss_notify(struct net_device *dev, gfp_t gfp)
11900{
11901 struct sk_buff *msg;
11902
11903 msg = cfg80211_prepare_cqm(dev, NULL, gfp);
11904 if (!msg)
11905 return;
11906
11907 if (nla_put_flag(msg, NL80211_ATTR_CQM_BEACON_LOSS_EVENT))
11908 goto nla_put_failure;
11909
11910 cfg80211_send_cqm(msg, gfp);
11911 return;
11912
11913 nla_put_failure:
11914 nlmsg_free(msg);
11915}
11916EXPORT_SYMBOL(cfg80211_cqm_beacon_loss_notify);
11917
11895static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, 11918static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev,
11896 struct net_device *netdev, const u8 *bssid, 11919 struct net_device *netdev, const u8 *bssid,
11897 const u8 *replay_ctr, gfp_t gfp) 11920 const u8 *replay_ctr, gfp_t gfp)