Commit 2f1805ea authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Johannes Berg

cfg80211: allow the low level driver to flush the BSS table

The low level driver adds its own opaque information
in the BSS table in the cfg80211_bss structure.

The low level driver may need to signal that this information
is no longer relevant and needs to be recreated.
Add an API to allow the low level driver to do that.

iwlwifi needs this because it keeps there an information about
the firmware's internal clock. This is kept in mac80211's
struct ieee80211_bss::sync_device_ts.
This information is populated while we scan, we add the
internal firmware's clock to each beacon which allows us to
program the firmware correctly after association so that
it'll know when (in terms of its internal clock) the DTIM
and TBTT will happen.

When the firmware is reset this internal clock is reset as
well and ieee80211_bss::sync_device_ts is no longer accurate.

iwlwifi will call this new API any time the firmware is started.
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Link: https://lore.kernel.org/r/20200625111524.3992-1-emmanuel.grumbach@intel.comSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent fc0561dc
...@@ -7899,4 +7899,10 @@ void cfg80211_update_owe_info_event(struct net_device *netdev, ...@@ -7899,4 +7899,10 @@ void cfg80211_update_owe_info_event(struct net_device *netdev,
struct cfg80211_update_owe_info *owe_info, struct cfg80211_update_owe_info *owe_info,
gfp_t gfp); gfp_t gfp);
/**
* cfg80211_bss_flush - resets all the scan entries
* @wiphy: the wiphy
*/
void cfg80211_bss_flush(struct wiphy *wiphy);
#endif /* __NET_CFG80211_H */ #endif /* __NET_CFG80211_H */
...@@ -712,6 +712,16 @@ void cfg80211_bss_expire(struct cfg80211_registered_device *rdev) ...@@ -712,6 +712,16 @@ void cfg80211_bss_expire(struct cfg80211_registered_device *rdev)
__cfg80211_bss_expire(rdev, jiffies - IEEE80211_SCAN_RESULT_EXPIRE); __cfg80211_bss_expire(rdev, jiffies - IEEE80211_SCAN_RESULT_EXPIRE);
} }
void cfg80211_bss_flush(struct wiphy *wiphy)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
spin_lock_bh(&rdev->bss_lock);
__cfg80211_bss_expire(rdev, jiffies);
spin_unlock_bh(&rdev->bss_lock);
}
EXPORT_SYMBOL(cfg80211_bss_flush);
const struct element * const struct element *
cfg80211_find_elem_match(u8 eid, const u8 *ies, unsigned int len, cfg80211_find_elem_match(u8 eid, const u8 *ies, unsigned int len,
const u8 *match, unsigned int match_len, const u8 *match, unsigned int match_len,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment