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/wl12xx | |
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/wl12xx')
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1251_main.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_main.c | 4 |
2 files changed, 2 insertions, 6 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1251_main.c b/drivers/net/wireless/wl12xx/wl1251_main.c index 7148934e464d..5809ef5b18f8 100644 --- a/drivers/net/wireless/wl12xx/wl1251_main.c +++ b/drivers/net/wireless/wl12xx/wl1251_main.c | |||
@@ -652,9 +652,7 @@ out: | |||
652 | 652 | ||
653 | static void wl1251_op_configure_filter(struct ieee80211_hw *hw, | 653 | static void wl1251_op_configure_filter(struct ieee80211_hw *hw, |
654 | unsigned int changed, | 654 | unsigned int changed, |
655 | unsigned int *total, | 655 | unsigned int *total,u64 multicast) |
656 | int mc_count, | ||
657 | struct dev_addr_list *mc_list) | ||
658 | { | 656 | { |
659 | struct wl1251 *wl = hw->priv; | 657 | struct wl1251 *wl = hw->priv; |
660 | 658 | ||
diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c index 4102d590b798..754be8179307 100644 --- a/drivers/net/wireless/wl12xx/wl1271_main.c +++ b/drivers/net/wireless/wl12xx/wl1271_main.c | |||
@@ -793,9 +793,7 @@ out: | |||
793 | 793 | ||
794 | static void wl1271_op_configure_filter(struct ieee80211_hw *hw, | 794 | static void wl1271_op_configure_filter(struct ieee80211_hw *hw, |
795 | unsigned int changed, | 795 | unsigned int changed, |
796 | unsigned int *total, | 796 | unsigned int *total,u64 multicast) |
797 | int mc_count, | ||
798 | struct dev_addr_list *mc_list) | ||
799 | { | 797 | { |
800 | struct wl1271 *wl = hw->priv; | 798 | struct wl1271 *wl = hw->priv; |
801 | 799 | ||