retval = rndis_set_oid(usbdev, OID_GEN_CURRENT_PACKET_FILTER, &tmp,
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -723,10 +723,16 @@ static const struct net_device_ops ieee8
+@@ -713,10 +713,16 @@ static const struct net_device_ops ieee8
static void ieee80211_if_setup(struct net_device *dev)
{
ether_setup(dev);
/*
* Helper function to initialise an interface to a specific type.
*/
-@@ -738,7 +744,7 @@ static void ieee80211_setup_sdata(struct
+@@ -728,7 +734,7 @@ static void ieee80211_setup_sdata(struct
/* and set some type-dependent values */
sdata->vif.type = type;
sdata->wdev.iftype = type;
/* only monitor differs */
-@@ -761,7 +767,7 @@ static void ieee80211_setup_sdata(struct
+@@ -751,7 +757,7 @@ static void ieee80211_setup_sdata(struct
break;
case NL80211_IFTYPE_MONITOR:
sdata->dev->type = ARPHRD_IEEE80211_RADIOTAP;
sdata->u.mntr_flags = MONITOR_FLAG_CONTROL |
MONITOR_FLAG_OTHER_BSS;
break;
-@@ -942,6 +948,8 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -932,6 +938,8 @@ int ieee80211_if_add(struct ieee80211_lo
return -ENOMEM;
dev_net_set(ndev, wiphy_net(local->hw.wiphy));
ndev->needed_headroom = local->tx_headroom +
4*6 /* four MAC addresses */
+ 2 + 2 + 2 + 2 /* ctl, dur, seq, qos */
-@@ -950,6 +958,7 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -940,6 +948,7 @@ int ieee80211_if_add(struct ieee80211_lo
- ETH_HLEN /* ethernet hard_header_len */
+ IEEE80211_ENCRYPT_HEADROOM;
ndev->needed_tailroom = IEEE80211_ENCRYPT_TAILROOM;
ret = dev_alloc_name(ndev, ndev->name);
if (ret < 0)
-@@ -995,6 +1004,10 @@ int ieee80211_if_add(struct ieee80211_lo
+@@ -985,6 +994,10 @@ int ieee80211_if_add(struct ieee80211_lo
if (ret)
goto fail;
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
-@@ -6126,7 +6126,7 @@ static struct net_device *ipw2100_alloc_
+@@ -6122,7 +6122,7 @@ static struct net_device *ipw2100_alloc_
priv->ieee->perfect_rssi = -20;
priv->ieee->worst_rssi = -85;
#include <net/cfg80211.h>
--- a/drivers/net/wireless/ath/ath9k/hw.c
+++ b/drivers/net/wireless/ath/ath9k/hw.c
-@@ -2150,7 +2150,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
+@@ -2164,7 +2164,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
pCap->hw_caps |= ATH9K_HW_CAP_ENHANCEDPM;
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
-@@ -6129,7 +6129,11 @@ static struct net_device *ipw2100_alloc_
+@@ -6125,7 +6125,11 @@ static struct net_device *ipw2100_alloc_
netdev_attach_ops(dev, &ipw2100_netdev_ops);
dev->ethtool_ops = &ipw2100_ethtool_ops;
dev->wireless_handlers = &ipw2100_wx_handler_def;
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
-@@ -2620,7 +2620,12 @@ void ieee80211_rx(struct ieee80211_hw *h
+@@ -2626,7 +2626,12 @@ void ieee80211_rx(struct ieee80211_hw *h
drop:
kfree_skb(skb);
}
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -1044,6 +1044,7 @@ void ieee80211_if_remove(struct ieee8021
+@@ -1034,6 +1034,7 @@ void ieee80211_if_remove(struct ieee8021
* Remove all interfaces, may only be called at hardware unregistration
* time because it doesn't do RCU-safe list removals.
*/
void ieee80211_remove_interfaces(struct ieee80211_local *local)
{
struct ieee80211_sub_if_data *sdata, *tmp;
-@@ -1060,6 +1061,22 @@ void ieee80211_remove_interfaces(struct
+@@ -1050,6 +1051,22 @@ void ieee80211_remove_interfaces(struct
mutex_unlock(&local->iflist_mtx);
unregister_netdevice_many(&unreg_list);
}
return hash.low | ((u64)hash.high << 32);
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
-@@ -1675,7 +1675,11 @@ struct ieee80211_ops {
- struct ieee80211_bss_conf *info,
- u32 changed);
+@@ -1686,7 +1686,11 @@ struct ieee80211_ops {
+ struct ieee80211_vif *vif,
+ struct in_ifaddr *ifa_list);
u64 (*prepare_multicast)(struct ieee80211_hw *hw,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
struct netdev_hw_addr_list *mc_list);
}
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
-@@ -84,14 +84,28 @@ static inline void drv_bss_info_changed(
+@@ -101,14 +101,28 @@ static inline int drv_configure_arp_filt
}
static inline u64 drv_prepare_multicast(struct ieee80211_local *local,
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
-@@ -413,7 +413,12 @@ static int ieee80211_stop(struct net_dev
+@@ -403,7 +403,12 @@ static int ieee80211_stop(struct net_dev
netif_addr_lock_bh(dev);
spin_lock_bh(&local->filter_lock);
spin_unlock_bh(&local->filter_lock);
netif_addr_unlock_bh(dev);
-@@ -596,7 +601,12 @@ static void ieee80211_set_multicast_list
+@@ -586,7 +591,12 @@ static void ieee80211_set_multicast_list
sdata->flags ^= IEEE80211_SDATA_PROMISC;
}
spin_lock_bh(&local->filter_lock);
spin_unlock_bh(&local->filter_lock);
/* be a bit nasty */
-@@ -390,9 +394,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
+@@ -442,9 +446,11 @@ struct ieee80211_hw *ieee80211_alloc_hw(
local->uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN;
INIT_LIST_HEAD(&local->interfaces);
/* We have to signal any supplicant if we are disassociating */
if (associated)
-@@ -6673,7 +6684,11 @@ static int __init ipw2100_init(void)
+@@ -6669,7 +6680,11 @@ static int __init ipw2100_init(void)
if (ret)
goto out;
PM_QOS_DEFAULT_VALUE);
#ifdef CONFIG_IPW2100_DEBUG
ipw2100_debug_level = debug;
-@@ -6696,7 +6711,11 @@ static void __exit ipw2100_exit(void)
+@@ -6692,7 +6707,11 @@ static void __exit ipw2100_exit(void)
&driver_attr_debug_level);
#endif
pci_unregister_driver(&ipw2100_pci_driver);