--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
-@@ -4241,8 +4241,13 @@ redo:
+@@ -4243,8 +4243,13 @@ redo:
if (b43_bus_host_is_sdio(dev->dev)) {
b43_sdio_free_irq(dev);
} else {
}
mutex_lock(&wl->mutex);
dev = wl->current_dev;
-@@ -4288,9 +4293,17 @@ static int b43_wireless_core_start(struc
+@@ -4290,9 +4295,17 @@ static int b43_wireless_core_start(struc
goto out;
}
} else {
if (err) {
b43err(dev->wl, "Cannot request IRQ-%d\n",
dev->dev->irq);
-@@ -5113,6 +5126,10 @@ static int b43_setup_bands(struct b43_wl
+@@ -5115,6 +5128,10 @@ static int b43_setup_bands(struct b43_wl
static void b43_wireless_core_detach(struct b43_wldev *dev)
{
b43_release_firmware(dev);
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
-@@ -870,6 +870,9 @@ struct b43_wldev {
+@@ -872,6 +872,9 @@ struct b43_wldev {
unsigned int tx_count;
unsigned int rx_count;
#endif
/**
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
-@@ -760,12 +760,21 @@ void iwl_trans_pcie_free(struct iwl_tran
+@@ -773,12 +773,21 @@ void iwl_trans_pcie_free(struct iwl_tran
{
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
iwl_pcie_free_ict(trans);
pci_disable_msi(trans_pcie->pci_dev);
-@@ -1553,9 +1562,16 @@ struct iwl_trans *iwl_trans_pcie_alloc(s
+@@ -1566,9 +1575,16 @@ struct iwl_trans *iwl_trans_pcie_alloc(s
if (iwl_pcie_alloc_ict(trans))
goto out_free_cmd_pool;
}
}
-@@ -5024,7 +5044,11 @@ mwl8k_bss_info_changed(struct ieee80211_
+@@ -5022,7 +5042,11 @@ mwl8k_bss_info_changed(struct ieee80211_
}
static u64 mwl8k_prepare_multicast(struct ieee80211_hw *hw,
{
struct mwl8k_cmd_pkt *cmd;
-@@ -5035,7 +5059,11 @@ static u64 mwl8k_prepare_multicast(struc
+@@ -5033,7 +5057,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;
}
-@@ -5157,7 +5185,11 @@ static void mwl8k_configure_filter(struc
+@@ -5155,7 +5183,11 @@ static void mwl8k_configure_filter(struc
*/
if (*total_flags & FIF_ALLMULTI) {
kfree(cmd);
}
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -2604,7 +2604,11 @@ struct ieee80211_ops {
+@@ -2604,14 +2604,24 @@ struct ieee80211_ops {
void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
u64 (*prepare_multicast)(struct ieee80211_hw *hw,
void (*configure_filter)(struct ieee80211_hw *hw,
unsigned int changed_flags,
unsigned int *total_flags,
+ u64 multicast);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ void (*set_multicast_list)(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif, bool allmulti,
+ struct netdev_hw_addr_list *mc_list);
++#else
++ void (*set_multicast_list)(struct ieee80211_hw *hw,
++ struct ieee80211_vif *vif, bool allmulti,
++ int mc_count, struct dev_addr_list *ha);
++#endif
+
+ int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
+ bool set);
--- a/net/bluetooth/bnep/netdev.c
+++ b/net/bluetooth/bnep/netdev.c
@@ -93,8 +93,13 @@ static void bnep_net_set_mc_list(struct
}
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
-@@ -227,14 +227,28 @@ static inline void drv_bss_info_changed(
+@@ -227,20 +227,35 @@ static inline void drv_bss_info_changed(
}
static inline u64 drv_prepare_multicast(struct ieee80211_local *local,
trace_drv_return_u64(local, ret);
+ return ret;
+ }
+
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ static inline void drv_set_multicast_list(struct ieee80211_local *local,
+ struct ieee80211_sub_if_data *sdata,
+ struct netdev_hw_addr_list *mc_list)
+@@ -256,6 +271,23 @@ static inline void drv_set_multicast_lis
+ allmulti, mc_list);
+ trace_drv_return_void(local);
+ }
++#else
++static inline void drv_set_multicast_list(struct ieee80211_local *local,
++ struct ieee80211_sub_if_data *sdata,
++ int mc_count, struct dev_addr_list *ha)
++{
++ bool allmulti = sdata->flags & IEEE80211_SDATA_ALLMULTI;
++
++ trace_drv_set_multicast_list(local, sdata, mc_count);
++
++ check_sdata_in_driver(sdata);
++
++ if (local->ops->set_multicast_list)
++ local->ops->set_multicast_list(&local->hw, &sdata->vif,
++ allmulti, mc_count, ha);
++ trace_drv_return_void(local);
++}
++#endif
+
+ static inline void drv_configure_filter(struct ieee80211_local *local,
+ unsigned int changed_flags,
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -907,7 +907,12 @@ struct ieee80211_local {
spin_unlock_bh(&local->filter_lock);
netif_addr_unlock_bh(sdata->dev);
-@@ -930,7 +935,12 @@ static void ieee80211_set_multicast_list
+@@ -927,10 +932,20 @@ static void ieee80211_set_multicast_list
+ if (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
+ sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
+ sdata->vif.type != NL80211_IFTYPE_AP)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
drv_set_multicast_list(local, sdata, &dev->mc);
++#else
++ drv_set_multicast_list(local, sdata, &dev->mc_count,
++ &dev->mc_list);
++#endif
spin_lock_bh(&local->filter_lock);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
ATH6KL_MCAST_FILTER_MAC_ADDR_SIZE);
/* Set the multicast filter */
ath6kl_dbg(ATH6KL_DBG_TRC,
---- a/include/net/mac80211.h
-+++ b/include/net/mac80211.h
-@@ -2613,9 +2613,15 @@ struct ieee80211_ops {
- unsigned int changed_flags,
- unsigned int *total_flags,
- u64 multicast);
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
- void (*set_multicast_list)(struct ieee80211_hw *hw,
- struct ieee80211_vif *vif, bool allmulti,
- struct netdev_hw_addr_list *mc_list);
-+#else
-+ void (*set_multicast_list)(struct ieee80211_hw *hw,
-+ struct ieee80211_vif *vif, bool allmulti,
-+ int mc_count, struct dev_addr_list *ha);
-+#endif
-
- int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
- bool set);
---- a/net/mac80211/driver-ops.h
-+++ b/net/mac80211/driver-ops.h
-@@ -255,6 +255,7 @@ static inline u64 drv_prepare_multicast(
- return ret;
- }
-
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
- static inline void drv_set_multicast_list(struct ieee80211_local *local,
- struct ieee80211_sub_if_data *sdata,
- struct netdev_hw_addr_list *mc_list)
-@@ -270,6 +271,23 @@ static inline void drv_set_multicast_lis
- allmulti, mc_list);
- trace_drv_return_void(local);
- }
-+#else
-+static inline void drv_set_multicast_list(struct ieee80211_local *local,
-+ struct ieee80211_sub_if_data *sdata,
-+ int mc_count, struct dev_addr_list *ha)
-+{
-+ bool allmulti = sdata->flags & IEEE80211_SDATA_ALLMULTI;
-+
-+ trace_drv_set_multicast_list(local, sdata, mc_count);
-+
-+ check_sdata_in_driver(sdata);
-+
-+ if (local->ops->set_multicast_list)
-+ local->ops->set_multicast_list(&local->hw, &sdata->vif,
-+ allmulti, mc_count, ha);
-+ trace_drv_return_void(local);
-+}
-+#endif
-
- static inline void drv_configure_filter(struct ieee80211_local *local,
- unsigned int changed_flags,
---- a/net/mac80211/iface.c
-+++ b/net/mac80211/iface.c
-@@ -932,7 +932,12 @@ static void ieee80211_set_multicast_list
- if (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
- sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
- sdata->vif.type != NL80211_IFTYPE_AP)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
- drv_set_multicast_list(local, sdata, &dev->mc);
-+#else
-+ drv_set_multicast_list(local, sdata, &dev->mc_count,
-+ &dev->mc_list);
-+#endif
-
- spin_lock_bh(&local->filter_lock);
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))