diff options
author | Andrei Otcheretianski <andrei.otcheretianski@intel.com> | 2015-08-15 22:39:50 +0300 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2015-09-22 15:21:22 +0200 |
commit | 1b09b5568e5f46c6dfb781d7c1dfad431a6d8ec1 (patch) | |
tree | 1e437f5a6693228d1d5d4f122d0ef0ad99edc734 /net/mac80211/driver-ops.h | |
parent | 7bdbe400d1b2aac116513f90b75969ad2365fba6 (diff) | |
download | op-kernel-dev-1b09b5568e5f46c6dfb781d7c1dfad431a6d8ec1.zip op-kernel-dev-1b09b5568e5f46c6dfb781d7c1dfad431a6d8ec1.tar.gz |
mac80211: introduce per vif frame registration API
Currently the cfg80211's frame registration api receives wdev, however
mac80211 assumes per device filter configuration and ignores wdev.
Per device filtering is too wasteful, especially for multi-channel
devices.
Introduce new per vif frame registration API and use it for probe
request registrations in ieee80211_mgmt_frame_register()
Also call directly to ieee80211_configure_filter instead of using a work
since it is now allowed to sleep in ieee80211_mgmt_frame_register.
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/driver-ops.h')
-rw-r--r-- | net/mac80211/driver-ops.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index 02d9133..157b20b 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h @@ -260,6 +260,22 @@ static inline void drv_configure_filter(struct ieee80211_local *local, trace_drv_return_void(local); } +static inline void drv_config_iface_filter(struct ieee80211_local *local, + struct ieee80211_sub_if_data *sdata, + unsigned int filter_flags, + unsigned int changed_flags) +{ + might_sleep(); + + trace_drv_config_iface_filter(local, sdata, filter_flags, + changed_flags); + if (local->ops->config_iface_filter) + local->ops->config_iface_filter(&local->hw, &sdata->vif, + filter_flags, + changed_flags); + trace_drv_return_void(local); +} + static inline int drv_set_tim(struct ieee80211_local *local, struct ieee80211_sta *sta, bool set) { |