ar9170: refactor configure_filter
PATCH 1/1 ar9170: refactor configure_filter
Thanks to "mac80211: allow configure_filter callback to sleep", we no longer have to defer the work to the workqueue.
Signed-off-by Christian Lamparter <[email protected]>
---
please test!
---
drivers/net/wireless/ath/ar9170/ar9170.h +4 -10
@@ -184,10 +184,8 @@ struct ar9170 {bool disable_offload;/* filter settings */ -struct work_struct filter_config_work; -u64 cur_mc_hash, want_mc_hash; -u32 cur_filter, want_filter; -unsigned long filter_changed; +u64 cur_mc_hash; +u32 cur_filter;unsigned int filter_state;bool sniffer_enabled;
@@ -261,10 +259,6 @@ struct ar9170_tx_info {#define IS_STARTED (a) (((struct ar9170 *)a)->state >= AR9170_STARTED)#define IS_ACCEPTING_CMD (a) (((struct ar9170 *)a)->state >= AR9170_IDLE) -#define AR9170_FILTER_CHANGED_MODE BIT(0) -#define AR9170_FILTER_CHANGED_MULTICAST BIT(1) -#define AR9170_FILTER_CHANGED_FRAMEFILTER BIT(2) -/* exported interface */ void *ar9170_alloc (size_t priv_size);int ar9170_register (struct ar9170 *ar,struct device *pdev);
@@ -278,8 +272,8 @@ int ar9170_nag_limiter(struct ar9170 *ar);int ar9170_op_tx (struct ieee80211_hw *hw,struct sk_buff *skb);int ar9170_init_mac (struct ar9170 *ar);int ar9170_set_qos (struct ar9170 *ar); -int ar9170_update_multicast (struct ar9170 *ar); -int ar9170_update_frame_filter (struct ar9170 *ar); +int ar9170_update_multicast (struct ar9170 *ar,const u64 mc_hast); +int ar9170_update_frame_filter (struct ar9170 *ar,const u32 filter);int ar9170_set_operating_mode (struct ar9170 *ar);int ar9170_set_beacon_timers (struct ar9170 *ar);int ar9170_set_dyn_sifs_ack (struct ar9170 *ar);
drivers/net/wireless/ath/ar9170/mac.c +7 -15
@@ -238,39 +238,31 @@ static int ar9170_set_mac_reg(struct ar9170 *ar, const u32 reg, const u8 *mac)return ar9170_regwrite_result (); } -int ar9170_update_multicast (struct ar9170 *ar) +int ar9170_update_multicast (struct ar9170 *ar,const u64 mc_hash) {int err;ar9170_regwrite_begin (ar); -ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_H , - ar->want_mc_hash >>32 ); -ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_L , - ar->want_mc_hash); - +ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_H , mc_hash >>32 ); +ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_L , mc_hash);ar9170_regwrite_finish (); err =ar9170_regwrite_result (); -if (err)return err; - ar->cur_mc_hash = ar->want_mc_hash; - + ar->cur_mc_hash = mc_hash;return 0 ; } -int ar9170_update_frame_filter (struct ar9170 *ar) +int ar9170_update_frame_filter (struct ar9170 *ar,const u32 filter) {int err; - err =ar9170_write_reg (ar,AR9170_MAC_REG_FRAMETYPE_FILTER , - ar->want_filter); - + err =ar9170_write_reg (ar,AR9170_MAC_REG_FRAMETYPE_FILTER , filter);if (err)return err; - ar->cur_filter = ar->want_filter; - + ar->cur_filter = filter;return 0 ; }
drivers/net/wireless/ath/ar9170/main.c +15 -59
145 lines not on this page · raw message
PATCH v2 1/1 ar9170: refactor configure_filter
Thanks to "mac80211: allow configure_filter callback to sleep", we no longer have to defer the work to the workqueue.
Signed-off-by Christian Lamparter <[email protected]>
---
please test!
changes to v1:
- re-based
- fixed possible WARN_ON in ieee80211_configure_filter on module unload
---
drivers/net/wireless/ath/ar9170/ar9170.h +4 -10
@@ -185,10 +185,8 @@ struct ar9170 {bool disable_offload;/* filter settings */ -struct work_struct filter_config_work; -u64 cur_mc_hash, want_mc_hash; -u32 cur_filter, want_filter; -unsigned long filter_changed; +u64 cur_mc_hash; +u32 cur_filter;unsigned int filter_state;bool sniffer_enabled;
@@ -261,10 +259,6 @@ struct ar9170_tx_info {#define IS_STARTED (a) (((struct ar9170 *)a)->state >= AR9170_STARTED)#define IS_ACCEPTING_CMD (a) (((struct ar9170 *)a)->state >= AR9170_IDLE) -#define AR9170_FILTER_CHANGED_MODE BIT(0) -#define AR9170_FILTER_CHANGED_MULTICAST BIT(1) -#define AR9170_FILTER_CHANGED_FRAMEFILTER BIT(2) -/* exported interface */ void *ar9170_alloc (size_t priv_size);int ar9170_register (struct ar9170 *ar,struct device *pdev);
@@ -278,8 +272,8 @@ int ar9170_nag_limiter(struct ar9170 *ar);int ar9170_op_tx (struct ieee80211_hw *hw,struct sk_buff *skb);int ar9170_init_mac (struct ar9170 *ar);int ar9170_set_qos (struct ar9170 *ar); -int ar9170_update_multicast (struct ar9170 *ar); -int ar9170_update_frame_filter (struct ar9170 *ar); +int ar9170_update_multicast (struct ar9170 *ar,const u64 mc_hast); +int ar9170_update_frame_filter (struct ar9170 *ar,const u32 filter);int ar9170_set_operating_mode (struct ar9170 *ar);int ar9170_set_beacon_timers (struct ar9170 *ar);int ar9170_set_dyn_sifs_ack (struct ar9170 *ar);
drivers/net/wireless/ath/ar9170/mac.c +7 -15
@@ -238,39 +238,31 @@ static int ar9170_set_mac_reg(struct ar9170 *ar, const u32 reg, const u8 *mac)return ar9170_regwrite_result (); } -int ar9170_update_multicast (struct ar9170 *ar) +int ar9170_update_multicast (struct ar9170 *ar,const u64 mc_hash) {int err;ar9170_regwrite_begin (ar); -ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_H , - ar->want_mc_hash >>32 ); -ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_L , - ar->want_mc_hash); - +ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_H , mc_hash >>32 ); +ar9170_regwrite (AR9170_MAC_REG_GROUP_HASH_TBL_L , mc_hash);ar9170_regwrite_finish (); err =ar9170_regwrite_result (); -if (err)return err; - ar->cur_mc_hash = ar->want_mc_hash; - + ar->cur_mc_hash = mc_hash;return 0 ; } -int ar9170_update_frame_filter (struct ar9170 *ar) +int ar9170_update_frame_filter (struct ar9170 *ar,const u32 filter) {int err; - err =ar9170_write_reg (ar,AR9170_MAC_REG_FRAMETYPE_FILTER , - ar->want_filter); - + err =ar9170_write_reg (ar,AR9170_MAC_REG_FRAMETYPE_FILTER , filter);if (err)return err; - ar->cur_filter = ar->want_filter; - + ar->cur_filter = filter;return 0 ; }
drivers/net/wireless/ath/ar9170/main.c +16 -59
146 lines not on this page · raw message