|
@@ -927,31 +927,6 @@ static void zd_process_intr(struct work_struct *work)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static void set_multicast_hash_handler(struct work_struct *work)
|
|
|
-{
|
|
|
- struct zd_mac *mac =
|
|
|
- container_of(work, struct zd_mac, set_multicast_hash_work);
|
|
|
- struct zd_mc_hash hash;
|
|
|
-
|
|
|
- spin_lock_irq(&mac->lock);
|
|
|
- hash = mac->multicast_hash;
|
|
|
- spin_unlock_irq(&mac->lock);
|
|
|
-
|
|
|
- zd_chip_set_multicast_hash(&mac->chip, &hash);
|
|
|
-}
|
|
|
-
|
|
|
-static void set_rx_filter_handler(struct work_struct *work)
|
|
|
-{
|
|
|
- struct zd_mac *mac =
|
|
|
- container_of(work, struct zd_mac, set_rx_filter_work);
|
|
|
- int r;
|
|
|
-
|
|
|
- dev_dbg_f(zd_mac_dev(mac), "\n");
|
|
|
- r = set_rx_filter(mac);
|
|
|
- if (r)
|
|
|
- dev_err(zd_mac_dev(mac), "set_rx_filter_handler error %d\n", r);
|
|
|
-}
|
|
|
-
|
|
|
static u64 zd_op_prepare_multicast(struct ieee80211_hw *hw,
|
|
|
struct netdev_hw_addr_list *mc_list)
|
|
|
{
|
|
@@ -983,6 +958,7 @@ static void zd_op_configure_filter(struct ieee80211_hw *hw,
|
|
|
};
|
|
|
struct zd_mac *mac = zd_hw_mac(hw);
|
|
|
unsigned long flags;
|
|
|
+ int r;
|
|
|
|
|
|
/* Only deal with supported flags */
|
|
|
changed_flags &= SUPPORTED_FIF_FLAGS;
|
|
@@ -1004,11 +980,13 @@ static void zd_op_configure_filter(struct ieee80211_hw *hw,
|
|
|
mac->multicast_hash = hash;
|
|
|
spin_unlock_irqrestore(&mac->lock, flags);
|
|
|
|
|
|
- /* XXX: these can be called here now, can sleep now! */
|
|
|
- queue_work(zd_workqueue, &mac->set_multicast_hash_work);
|
|
|
+ zd_chip_set_multicast_hash(&mac->chip, &hash);
|
|
|
|
|
|
- if (changed_flags & FIF_CONTROL)
|
|
|
- queue_work(zd_workqueue, &mac->set_rx_filter_work);
|
|
|
+ if (changed_flags & FIF_CONTROL) {
|
|
|
+ r = set_rx_filter(mac);
|
|
|
+ if (r)
|
|
|
+ dev_err(zd_mac_dev(mac), "set_rx_filter error %d\n", r);
|
|
|
+ }
|
|
|
|
|
|
/* no handling required for FIF_OTHER_BSS as we don't currently
|
|
|
* do BSSID filtering */
|
|
@@ -1164,9 +1142,7 @@ struct ieee80211_hw *zd_mac_alloc_hw(struct usb_interface *intf)
|
|
|
|
|
|
zd_chip_init(&mac->chip, hw, intf);
|
|
|
housekeeping_init(mac);
|
|
|
- INIT_WORK(&mac->set_multicast_hash_work, set_multicast_hash_handler);
|
|
|
INIT_WORK(&mac->set_rts_cts_work, set_rts_cts_work);
|
|
|
- INIT_WORK(&mac->set_rx_filter_work, set_rx_filter_handler);
|
|
|
INIT_WORK(&mac->process_intr, zd_process_intr);
|
|
|
|
|
|
SET_IEEE80211_DEV(hw, &intf->dev);
|