mac80211: add driver RSSI threshold events
mac80211 maintains a running average of the RSSI when a STA is associated to an AP. Report threshold events to any driver that has registered callbacks for getting RSSI measurements. Implement callbacks in mac80211 so that driver can set thresholds. Add callbacks in mac80211 which is invoked when an RSSI threshold event occurs. mac80211: add tracing to rssi_reports api and remove extraneous fn argument mac80211: scale up rssi thresholds from driver by 16 before storing Signed-off-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
0a49b2c2a6
commit
615f7b9bb1
@@ -1763,6 +1763,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
|
||||
ifmgd->ave_beacon_signal = rx_status->signal * 16;
|
||||
ifmgd->last_cqm_event_signal = 0;
|
||||
ifmgd->count_beacon_signal = 1;
|
||||
ifmgd->last_ave_beacon_signal = 0;
|
||||
} else {
|
||||
ifmgd->ave_beacon_signal =
|
||||
(IEEE80211_SIGNAL_AVE_WEIGHT * rx_status->signal * 16 +
|
||||
@@ -1770,6 +1771,28 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
|
||||
ifmgd->ave_beacon_signal) / 16;
|
||||
ifmgd->count_beacon_signal++;
|
||||
}
|
||||
|
||||
if (ifmgd->rssi_min_thold != ifmgd->rssi_max_thold &&
|
||||
ifmgd->count_beacon_signal >= IEEE80211_SIGNAL_AVE_MIN_COUNT) {
|
||||
int sig = ifmgd->ave_beacon_signal;
|
||||
int last_sig = ifmgd->last_ave_beacon_signal;
|
||||
|
||||
/*
|
||||
* if signal crosses either of the boundaries, invoke callback
|
||||
* with appropriate parameters
|
||||
*/
|
||||
if (sig > ifmgd->rssi_max_thold &&
|
||||
(last_sig <= ifmgd->rssi_min_thold || last_sig == 0)) {
|
||||
ifmgd->last_ave_beacon_signal = sig;
|
||||
drv_rssi_callback(local, RSSI_EVENT_HIGH);
|
||||
} else if (sig < ifmgd->rssi_min_thold &&
|
||||
(last_sig >= ifmgd->rssi_max_thold ||
|
||||
last_sig == 0)) {
|
||||
ifmgd->last_ave_beacon_signal = sig;
|
||||
drv_rssi_callback(local, RSSI_EVENT_LOW);
|
||||
}
|
||||
}
|
||||
|
||||
if (bss_conf->cqm_rssi_thold &&
|
||||
ifmgd->count_beacon_signal >= IEEE80211_SIGNAL_AVE_MIN_COUNT &&
|
||||
!(local->hw.flags & IEEE80211_HW_SUPPORTS_CQM_RSSI)) {
|
||||
|
Reference in New Issue
Block a user