return mc_filter[0] | ((u64)(mc_filter[1]) << 32);
--- a/drivers/net/wireless/ath/ar9170/main.c
+++ b/drivers/net/wireless/ath/ar9170/main.c
-@@ -2047,17 +2047,35 @@ out:
+@@ -2046,17 +2046,35 @@ out:
return err;
}
static void ath5k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *new_flags,
-@@ -3108,20 +3112,42 @@ unlock:
+@@ -3107,20 +3111,42 @@ unlock:
}
static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw,
pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^ val;
pos &= 0x3f;
mfilt[pos / 32] |= (1 << (pos % 32));
-@@ -3130,6 +3156,9 @@ static u64 ath5k_prepare_multicast(struc
+@@ -3129,6 +3155,9 @@ static u64 ath5k_prepare_multicast(struc
* neet to inform below to not reset the mcast */
/* ath5k_hw_set_mcast_filterindex(ah,
* ha->addr[5]); */
}
--- a/drivers/net/wireless/mwl8k.c
+++ b/drivers/net/wireless/mwl8k.c
-@@ -1939,15 +1939,21 @@ struct mwl8k_cmd_mac_multicast_adr {
+@@ -1937,15 +1937,21 @@ struct mwl8k_cmd_mac_multicast_adr {
static struct mwl8k_cmd_pkt *
__mwl8k_cmd_mac_multicast_adr(struct ieee80211_hw *hw, int allmulti,
if (allmulti || mc_count > priv->num_mcaddrs) {
allmulti = 1;
-@@ -1968,13 +1974,27 @@ __mwl8k_cmd_mac_multicast_adr(struct iee
+@@ -1966,13 +1972,27 @@ __mwl8k_cmd_mac_multicast_adr(struct iee
if (allmulti) {
cmd->action |= cpu_to_le16(MWL8K_ENABLE_RX_ALL_MULTICAST);
} else if (mc_count) {
}
}
-@@ -3553,7 +3573,11 @@ mwl8k_bss_info_changed(struct ieee80211_
+@@ -3551,7 +3571,11 @@ mwl8k_bss_info_changed(struct ieee80211_
}
static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
{
struct mwl8k_cmd_pkt *cmd;
-@@ -3564,7 +3588,11 @@ static u64 mwl8k_prepare_multicast(struc
+@@ -3562,7 +3586,11 @@ static u64 mwl8k_prepare_multicast(struc
* we'll end up throwing this packet away and creating a new
* one in mwl8k_configure_filter().
*/
return (unsigned long)cmd;
}
-@@ -3687,7 +3715,11 @@ static void mwl8k_configure_filter(struc
+@@ -3685,7 +3713,11 @@ static void mwl8k_configure_filter(struc
*/
if (*total_flags & FIF_ALLMULTI) {
kfree(cmd);
--- a/drivers/net/wireless/rtl818x/rtl8180_dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8180_dev.c
-@@ -724,10 +724,19 @@ static void rtl8180_bss_info_changed(str
+@@ -725,10 +725,19 @@ static void rtl8180_bss_info_changed(str
priv->rf->conf_erp(dev, info);
}
static void rtl8187_configure_filter(struct ieee80211_hw *dev,
--- a/drivers/net/wireless/wl12xx/wl1271_main.c
+++ b/drivers/net/wireless/wl12xx/wl1271_main.c
-@@ -1305,11 +1305,20 @@ struct wl1271_filter_params {
+@@ -1344,11 +1344,20 @@ struct wl1271_filter_params {
u8 mc_list[ACX_MC_ADDRESS_GROUP_MAX][ETH_ALEN];
};
+ int i;
+#endif
struct wl1271 *wl = hw->priv;
- int i;
-@@ -1323,16 +1332,40 @@ static u64 wl1271_op_prepare_multicast(s
+ if (unlikely(wl->state == WL1271_STATE_OFF))
+@@ -1361,16 +1370,40 @@ static u64 wl1271_op_prepare_multicast(s
}
/* update multicast filtering parameters */
return hash.low | ((u64)hash.high << 32);
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -1642,7 +1642,11 @@ struct ieee80211_ops {
+@@ -1646,7 +1646,11 @@ struct ieee80211_ops {
struct ieee80211_bss_conf *info,
u32 changed);
u64 (*prepare_multicast)(struct ieee80211_hw *hw,