diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-08-17 10:16:53 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-20 11:35:58 -0400 |
commit | 3ac64beecd27400d12cc7afb4108eef26c499f6a (patch) | |
tree | da0220085f68e30fe61ba9b8833dc6311d6dc25e /drivers/net/wireless/rt2x00 | |
parent | ea416a793d2b611f22b42ba094fd2e5bd30fff43 (diff) |
mac80211: allow configure_filter callback to sleep
Over time, a whole bunch of drivers have come up
with their own scheme to delay the configure_filter
operation to a workqueue. To be able to simplify
things, allow configure_filter to sleep, and add
a new prepare_multicast callback that drivers that
need the multicast address list implement. This new
callback must be atomic, but most drivers either
don't care or just calculate a hash which can be
done atomically and then uploaded to the hardware
non-atomically.
A cursory look suggests that at76c50x-usb, ar9170,
mwl8k (which is actually very broken now), rt2x00,
wl1251, wl1271 and zd1211 should make use of this
new capability.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00mac.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 99e89596cef6..39d7d9baafdd 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -978,7 +978,7 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed); | |||
978 | void rt2x00mac_configure_filter(struct ieee80211_hw *hw, | 978 | void rt2x00mac_configure_filter(struct ieee80211_hw *hw, |
979 | unsigned int changed_flags, | 979 | unsigned int changed_flags, |
980 | unsigned int *total_flags, | 980 | unsigned int *total_flags, |
981 | int mc_count, struct dev_addr_list *mc_list); | 981 | u64 multicast); |
982 | int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, | 982 | int rt2x00mac_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, |
983 | bool set); | 983 | bool set); |
984 | #ifdef CONFIG_RT2X00_LIB_CRYPTO | 984 | #ifdef CONFIG_RT2X00_LIB_CRYPTO |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index cb7b6d459331..602f12699718 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
@@ -379,7 +379,7 @@ EXPORT_SYMBOL_GPL(rt2x00mac_config); | |||
379 | void rt2x00mac_configure_filter(struct ieee80211_hw *hw, | 379 | void rt2x00mac_configure_filter(struct ieee80211_hw *hw, |
380 | unsigned int changed_flags, | 380 | unsigned int changed_flags, |
381 | unsigned int *total_flags, | 381 | unsigned int *total_flags, |
382 | int mc_count, struct dev_addr_list *mc_list) | 382 | u64 multicast) |
383 | { | 383 | { |
384 | struct rt2x00_dev *rt2x00dev = hw->priv; | 384 | struct rt2x00_dev *rt2x00dev = hw->priv; |
385 | 385 | ||