mac80211: update to wireless-testing 2010-01-25, includes fixes for crypto and retransmissions
SVN-Revision: 19337
This commit is contained in:
parent
d690de9a0c
commit
eb694a7a83
19 changed files with 11 additions and 369 deletions
|
@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=2010-01-15
|
PKG_VERSION:=2010-01-25
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||||
# http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
|
# http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \
|
||||||
# http://wireless.kernel.org/download/compat-wireless-2.6
|
# http://wireless.kernel.org/download/compat-wireless-2.6
|
||||||
PKG_MD5SUM:=aa6f80ad3fcc2b663e62c7b80d37abd3
|
PKG_MD5SUM:=66a1d519e7ebcbadd4e47e6e56f705af
|
||||||
|
|
||||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -281,10 +281,10 @@ endif
|
@@ -283,10 +283,10 @@ endif
|
||||||
|
|
||||||
CONFIG_P54_PCI=m
|
CONFIG_P54_PCI=m
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
ifeq ($(CONFIG_MAC80211),y)
|
ifeq ($(CONFIG_MAC80211),y)
|
||||||
$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
|
$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
|
||||||
@@ -474,8 +474,8 @@ endif
|
@@ -476,8 +476,8 @@ endif
|
||||||
# We need the backported rfkill module on kernel < 2.6.31.
|
# We need the backported rfkill module on kernel < 2.6.31.
|
||||||
# In more recent kernel versions use the in kernel rfkill module.
|
# In more recent kernel versions use the in kernel rfkill module.
|
||||||
ifdef CONFIG_COMPAT_KERNEL_31
|
ifdef CONFIG_COMPAT_KERNEL_31
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -314,10 +314,10 @@ CONFIG_PCI_ATMEL=m
|
@@ -316,10 +316,10 @@ CONFIG_PCI_ATMEL=m
|
||||||
CONFIG_MWL8K=m
|
CONFIG_MWL8K=m
|
||||||
|
|
||||||
# Ethernet drivers go here
|
# Ethernet drivers go here
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
endif
|
endif
|
||||||
## end of PCI
|
## end of PCI
|
||||||
@@ -356,10 +356,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n
|
@@ -358,10 +358,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n
|
||||||
CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n
|
CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n
|
||||||
CONFIG_USB_NET_COMPAT_CDCETHER=n
|
CONFIG_USB_NET_COMPAT_CDCETHER=n
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/config.mk
|
--- a/config.mk
|
||||||
+++ b/config.mk
|
+++ b/config.mk
|
||||||
@@ -199,9 +199,9 @@ CONFIG_B43_HWRNG=y
|
@@ -201,9 +201,9 @@ CONFIG_B43_HWRNG=y
|
||||||
CONFIG_B43_PCI_AUTOSELECT=y
|
CONFIG_B43_PCI_AUTOSELECT=y
|
||||||
CONFIG_B43_PCICORE_AUTOSELECT=y
|
CONFIG_B43_PCICORE_AUTOSELECT=y
|
||||||
ifneq ($(CONFIG_PCMCIA),)
|
ifneq ($(CONFIG_PCMCIA),)
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
CONFIG_B43_LEDS=y
|
CONFIG_B43_LEDS=y
|
||||||
CONFIG_B43_PHY_LP=y
|
CONFIG_B43_PHY_LP=y
|
||||||
# CONFIG_B43_DEBUG=y
|
# CONFIG_B43_DEBUG=y
|
||||||
@@ -256,8 +256,8 @@ CONFIG_SSB_PCIHOST_POSSIBLE=y
|
@@ -258,8 +258,8 @@ CONFIG_SSB_PCIHOST_POSSIBLE=y
|
||||||
CONFIG_SSB_PCIHOST=y
|
CONFIG_SSB_PCIHOST=y
|
||||||
CONFIG_SSB_B43_PCI_BRIDGE=y
|
CONFIG_SSB_B43_PCI_BRIDGE=y
|
||||||
ifneq ($(CONFIG_PCMCIA),)
|
ifneq ($(CONFIG_PCMCIA),)
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/include/linux/compat-2.6.32.h
|
|
||||||
+++ b/include/linux/compat-2.6.32.h
|
|
||||||
@@ -6,7 +6,7 @@
|
|
||||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32))
|
|
||||||
|
|
||||||
#include <linux/netdevice.h>
|
|
||||||
-#include <asm/compat.h>
|
|
||||||
+#include <linux/compat.h>
|
|
||||||
#include <net/iw_handler.h>
|
|
||||||
#include <linux/workqueue.h>
|
|
||||||
#include <linux/firmware.h>
|
|
|
@ -1,103 +0,0 @@
|
||||||
--- a/include/linux/compat-2.6.32.h
|
|
||||||
+++ b/include/linux/compat-2.6.32.h
|
|
||||||
@@ -9,40 +9,6 @@
|
|
||||||
#include <linux/compat.h>
|
|
||||||
#include <net/iw_handler.h>
|
|
||||||
#include <linux/workqueue.h>
|
|
||||||
-#include <linux/firmware.h>
|
|
||||||
-
|
|
||||||
-#define release_firmware compat_release_firmware
|
|
||||||
-#define request_firmware compat_request_firmware
|
|
||||||
-#define request_firmware_nowait compat_request_firmware_nowait
|
|
||||||
-
|
|
||||||
-#if defined(CONFIG_FW_LOADER) || (defined(CONFIG_FW_LOADER_MODULE) && defined(MODULE))
|
|
||||||
-int compat_request_firmware(const struct firmware **fw, const char *name,
|
|
||||||
- struct device *device);
|
|
||||||
-int compat_request_firmware_nowait(
|
|
||||||
- struct module *module, int uevent,
|
|
||||||
- const char *name, struct device *device, gfp_t gfp, void *context,
|
|
||||||
- void (*cont)(const struct firmware *fw, void *context));
|
|
||||||
-
|
|
||||||
-void compat_release_firmware(const struct firmware *fw);
|
|
||||||
-#else
|
|
||||||
-static inline int compat_request_firmware(const struct firmware **fw,
|
|
||||||
- const char *name,
|
|
||||||
- struct device *device)
|
|
||||||
-{
|
|
||||||
- return -EINVAL;
|
|
||||||
-}
|
|
||||||
-static inline int request_firmware_nowait(
|
|
||||||
- struct module *module, int uevent,
|
|
||||||
- const char *name, struct device *device, gfp_t gfp, void *context,
|
|
||||||
- void (*cont)(const struct firmware *fw, void *context))
|
|
||||||
-{
|
|
||||||
- return -EINVAL;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-static inline void compat_release_firmware(const struct firmware *fw)
|
|
||||||
-{
|
|
||||||
-}
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
#define SDIO_VENDOR_ID_INTEL 0x0089
|
|
||||||
#define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402
|
|
||||||
--- a/include/linux/compat-2.6.33.h
|
|
||||||
+++ b/include/linux/compat-2.6.33.h
|
|
||||||
@@ -10,6 +10,40 @@
|
|
||||||
#include <pcmcia/cistpl.h>
|
|
||||||
#include <pcmcia/ds.h>
|
|
||||||
#include <linux/kfifo.h>
|
|
||||||
+#include <linux/firmware.h>
|
|
||||||
+
|
|
||||||
+#define release_firmware compat_release_firmware
|
|
||||||
+#define request_firmware compat_request_firmware
|
|
||||||
+#define request_firmware_nowait compat_request_firmware_nowait
|
|
||||||
+
|
|
||||||
+#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE)
|
|
||||||
+int compat_request_firmware(const struct firmware **fw, const char *name,
|
|
||||||
+ struct device *device);
|
|
||||||
+int compat_request_firmware_nowait(
|
|
||||||
+ struct module *module, int uevent,
|
|
||||||
+ const char *name, struct device *device, gfp_t gfp, void *context,
|
|
||||||
+ void (*cont)(const struct firmware *fw, void *context));
|
|
||||||
+
|
|
||||||
+void compat_release_firmware(const struct firmware *fw);
|
|
||||||
+#else
|
|
||||||
+static inline int compat_request_firmware(const struct firmware **fw,
|
|
||||||
+ const char *name,
|
|
||||||
+ struct device *device)
|
|
||||||
+{
|
|
||||||
+ return -EINVAL;
|
|
||||||
+}
|
|
||||||
+static inline int request_firmware_nowait(
|
|
||||||
+ struct module *module, int uevent,
|
|
||||||
+ const char *name, struct device *device, gfp_t gfp, void *context,
|
|
||||||
+ void (*cont)(const struct firmware *fw, void *context))
|
|
||||||
+{
|
|
||||||
+ return -EINVAL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline void compat_release_firmware(const struct firmware *fw)
|
|
||||||
+{
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#define IFF_DONT_BRIDGE 0x800 /* disallow bridging this ether dev */
|
|
||||||
/* source: include/linux/if.h */
|
|
||||||
--- a/compat/compat_firmware_class.c
|
|
||||||
+++ b/compat/compat_firmware_class.c
|
|
||||||
@@ -20,6 +20,8 @@
|
|
||||||
#include <linux/highmem.h>
|
|
||||||
#include <linux/firmware.h>
|
|
||||||
|
|
||||||
+#if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE)
|
|
||||||
+
|
|
||||||
#define to_dev(obj) container_of(obj, struct device, kobj)
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Manuel Estrada Sainz");
|
|
||||||
@@ -724,3 +726,5 @@ module_exit(firmware_class_exit);
|
|
||||||
EXPORT_SYMBOL(release_firmware);
|
|
||||||
EXPORT_SYMBOL(request_firmware);
|
|
||||||
EXPORT_SYMBOL(request_firmware_nowait);
|
|
||||||
+
|
|
||||||
+#endif
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
@@ -2088,7 +2088,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
@@ -2087,7 +2087,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||||
|
|
||||||
if (ah->config.rx_intr_mitigation) {
|
if (ah->config.rx_intr_mitigation) {
|
||||||
REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
|
REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||||
@@ -1229,6 +1229,11 @@ void ath9k_hw_init_global_settings(struc
|
@@ -1228,6 +1228,11 @@ void ath9k_hw_init_global_settings(struc
|
||||||
/* As defined by IEEE 802.11-2007 17.3.8.6 */
|
/* As defined by IEEE 802.11-2007 17.3.8.6 */
|
||||||
slottime = ah->slottime + 3 * ah->coverage_class;
|
slottime = ah->slottime + 3 * ah->coverage_class;
|
||||||
acktimeout = slottime + sifstime;
|
acktimeout = slottime + sifstime;
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/net/wireless/core.h
|
--- a/net/wireless/core.h
|
||||||
+++ b/net/wireless/core.h
|
+++ b/net/wireless/core.h
|
||||||
@@ -75,6 +75,7 @@ struct cfg80211_registered_device {
|
@@ -76,6 +76,7 @@ struct cfg80211_registered_device {
|
||||||
|
|
||||||
/* current channel */
|
/* current channel */
|
||||||
struct ieee80211_channel *channel;
|
struct ieee80211_channel *channel;
|
|
@ -1,18 +0,0 @@
|
||||||
--- a/net/mac80211/iface.c
|
|
||||||
+++ b/net/mac80211/iface.c
|
|
||||||
@@ -697,10 +697,14 @@ static u16 ieee80211_monitor_select_queu
|
|
||||||
|
|
||||||
hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len));
|
|
||||||
|
|
||||||
- if (!ieee80211_is_data_qos(hdr->frame_control)) {
|
|
||||||
+ if (!ieee80211_is_data(hdr->frame_control)) {
|
|
||||||
skb->priority = 7;
|
|
||||||
return ieee802_1d_to_ac[skb->priority];
|
|
||||||
}
|
|
||||||
+ if (!ieee80211_is_data_qos(hdr->frame_control)) {
|
|
||||||
+ skb->priority = 0;
|
|
||||||
+ return ieee802_1d_to_ac[skb->priority];
|
|
||||||
+ }
|
|
||||||
|
|
||||||
p = ieee80211_get_qos_ctl(hdr);
|
|
||||||
skb->priority = *p & IEEE80211_QOS_CTL_TAG1D_MASK;
|
|
|
@ -1,61 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
|
||||||
@@ -1498,26 +1498,6 @@ static void ath_buf_set_rate(struct ath_
|
|
||||||
if (sc->sc_flags & SC_OP_PREAMBLE_SHORT)
|
|
||||||
ctsrate |= rate->hw_value_short;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive.
|
|
||||||
- * Check the first rate in the series to decide whether RTS/CTS
|
|
||||||
- * or CTS-to-self has to be used.
|
|
||||||
- */
|
|
||||||
- if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
|
|
||||||
- flags = ATH9K_TXDESC_CTSENA;
|
|
||||||
- else if (rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS)
|
|
||||||
- flags = ATH9K_TXDESC_RTSENA;
|
|
||||||
-
|
|
||||||
- /* FIXME: Handle aggregation protection */
|
|
||||||
- if (sc->config.ath_aggr_prot &&
|
|
||||||
- (!bf_isaggr(bf) || (bf_isaggr(bf) && bf->bf_al < 8192))) {
|
|
||||||
- flags = ATH9K_TXDESC_RTSENA;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
|
|
||||||
- if (bf_isaggr(bf) && (bf->bf_al > sc->sc_ah->caps.rts_aggr_limit))
|
|
||||||
- flags &= ~(ATH9K_TXDESC_RTSENA);
|
|
||||||
-
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
bool is_40, is_sgi, is_sp;
|
|
||||||
int phy;
|
|
||||||
@@ -1529,8 +1509,15 @@ static void ath_buf_set_rate(struct ath_
|
|
||||||
series[i].Tries = rates[i].count;
|
|
||||||
series[i].ChSel = common->tx_chainmask;
|
|
||||||
|
|
||||||
- if (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)
|
|
||||||
+ if ((sc->config.ath_aggr_prot && bf_isaggr(bf)) ||
|
|
||||||
+ (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS)) {
|
|
||||||
series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
|
|
||||||
+ flags |= ATH9K_TXDESC_RTSENA;
|
|
||||||
+ } else if (rates[i].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
|
|
||||||
+ series[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
|
|
||||||
+ flags |= ATH9K_TXDESC_CTSENA;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
|
|
||||||
series[i].RateFlags |= ATH9K_RATESERIES_2040;
|
|
||||||
if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
|
|
||||||
@@ -1568,6 +1555,14 @@ static void ath_buf_set_rate(struct ath_
|
|
||||||
phy, rate->bitrate * 100, bf->bf_frmlen, rix, is_sp);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
|
|
||||||
+ if (bf_isaggr(bf) && (bf->bf_al > sc->sc_ah->caps.rts_aggr_limit))
|
|
||||||
+ flags &= ~ATH9K_TXDESC_RTSENA;
|
|
||||||
+
|
|
||||||
+ /* ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive. */
|
|
||||||
+ if (flags & ATH9K_TXDESC_RTSENA)
|
|
||||||
+ flags &= ~ATH9K_TXDESC_CTSENA;
|
|
||||||
+
|
|
||||||
/* set dur_update_en for l-sig computation except for PS-Poll frames */
|
|
||||||
ath9k_hw_set11n_ratescenario(sc->sc_ah, bf->bf_desc,
|
|
||||||
bf->bf_lastbf->bf_desc,
|
|
|
@ -1,14 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
|
||||||
@@ -1471,10 +1471,10 @@ static void ath9k_remove_interface(struc
|
|
||||||
(sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) {
|
|
||||||
ath9k_ps_wakeup(sc);
|
|
||||||
ath9k_hw_stoptxdma(sc->sc_ah, sc->beacon.beaconq);
|
|
||||||
- ath_beacon_return(sc, avp);
|
|
||||||
ath9k_ps_restore(sc);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ ath_beacon_return(sc, avp);
|
|
||||||
sc->sc_flags &= ~SC_OP_BEACONS;
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) {
|
|
|
@ -1,72 +0,0 @@
|
||||||
--- a/net/mac80211/rx.c
|
|
||||||
+++ b/net/mac80211/rx.c
|
|
||||||
@@ -2348,22 +2348,6 @@ static void __ieee80211_rx_handle_packet
|
|
||||||
sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- rx.sta = sta_info_get(sdata, hdr->addr2);
|
|
||||||
-
|
|
||||||
- rx.flags |= IEEE80211_RX_RA_MATCH;
|
|
||||||
- prepares = prepare_for_handlers(sdata, &rx, hdr);
|
|
||||||
-
|
|
||||||
- if (!prepares)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
- if (status->flag & RX_FLAG_MMIC_ERROR) {
|
|
||||||
- rx.sdata = sdata;
|
|
||||||
- if (rx.flags & IEEE80211_RX_RA_MATCH)
|
|
||||||
- ieee80211_rx_michael_mic_report(hdr,
|
|
||||||
- &rx);
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
* frame is destined for this interface, but if it's
|
|
||||||
* not also for the previous one we handle that after
|
|
||||||
@@ -2375,6 +2359,22 @@ static void __ieee80211_rx_handle_packet
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ rx.sta = sta_info_get(prev, hdr->addr2);
|
|
||||||
+
|
|
||||||
+ rx.flags |= IEEE80211_RX_RA_MATCH;
|
|
||||||
+ prepares = prepare_for_handlers(prev, &rx, hdr);
|
|
||||||
+
|
|
||||||
+ if (!prepares)
|
|
||||||
+ goto next;
|
|
||||||
+
|
|
||||||
+ if (status->flag & RX_FLAG_MMIC_ERROR) {
|
|
||||||
+ rx.sdata = prev;
|
|
||||||
+ if (rx.flags & IEEE80211_RX_RA_MATCH)
|
|
||||||
+ ieee80211_rx_michael_mic_report(hdr,
|
|
||||||
+ &rx);
|
|
||||||
+ goto next;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* frame was destined for the previous interface
|
|
||||||
* so invoke RX handlers for it
|
|
||||||
@@ -2387,11 +2387,22 @@ static void __ieee80211_rx_handle_packet
|
|
||||||
"multicast frame for %s\n",
|
|
||||||
wiphy_name(local->hw.wiphy),
|
|
||||||
prev->name);
|
|
||||||
- continue;
|
|
||||||
+ goto next;
|
|
||||||
}
|
|
||||||
ieee80211_invoke_rx_handlers(prev, &rx, skb_new, rate);
|
|
||||||
+next:
|
|
||||||
prev = sdata;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (prev) {
|
|
||||||
+ rx.sta = sta_info_get(prev, hdr->addr2);
|
|
||||||
+
|
|
||||||
+ rx.flags |= IEEE80211_RX_RA_MATCH;
|
|
||||||
+ prepares = prepare_for_handlers(prev, &rx, hdr);
|
|
||||||
+
|
|
||||||
+ if (!prepares)
|
|
||||||
+ prev = NULL;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
if (prev)
|
|
||||||
ieee80211_invoke_rx_handlers(prev, &rx, skb, rate);
|
|
|
@ -1,26 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
|
||||||
@@ -823,12 +823,11 @@ static void ath9k_hw_init_mode_gain_regs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void ath9k_hw_init_11a_eeprom_fix(struct ath_hw *ah)
|
|
||||||
+static void ath9k_hw_init_eeprom_fix(struct ath_hw *ah)
|
|
||||||
{
|
|
||||||
u32 i, j;
|
|
||||||
|
|
||||||
- if ((ah->hw_version.devid == AR9280_DEVID_PCI) &&
|
|
||||||
- test_bit(ATH9K_MODE_11A, ah->caps.wireless_modes)) {
|
|
||||||
+ if (ah->hw_version.devid == AR9280_DEVID_PCI) {
|
|
||||||
|
|
||||||
/* EEPROM Fixup */
|
|
||||||
for (i = 0; i < ah->iniModes.ia_rows; i++) {
|
|
||||||
@@ -948,7 +947,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
|
||||||
if (r)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
- ath9k_hw_init_11a_eeprom_fix(ah);
|
|
||||||
+ ath9k_hw_init_eeprom_fix(ah);
|
|
||||||
|
|
||||||
r = ath9k_hw_init_macaddr(ah);
|
|
||||||
if (r) {
|
|
|
@ -1,42 +0,0 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
|
||||||
@@ -645,8 +645,7 @@ void ath9k_set_hw_capab(struct ath_softc
|
|
||||||
hw->max_rates = 4;
|
|
||||||
hw->channel_change_time = 5000;
|
|
||||||
hw->max_listen_interval = 10;
|
|
||||||
- /* Hardware supports 10 but we use 4 */
|
|
||||||
- hw->max_rate_tries = 4;
|
|
||||||
+ hw->max_rate_tries = 10;
|
|
||||||
hw->sta_data_size = sizeof(struct ath_node);
|
|
||||||
hw->vif_data_size = sizeof(struct ath_vif);
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/rc.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/rc.c
|
|
||||||
@@ -678,13 +678,13 @@ static void ath_get_rate(void *priv, str
|
|
||||||
* For Multi Rate Retry we use a different number of
|
|
||||||
* retry attempt counts. This ends up looking like this:
|
|
||||||
*
|
|
||||||
- * MRR[0] = 2
|
|
||||||
- * MRR[1] = 2
|
|
||||||
- * MRR[2] = 2
|
|
||||||
- * MRR[3] = 4
|
|
||||||
+ * MRR[0] = 4
|
|
||||||
+ * MRR[1] = 4
|
|
||||||
+ * MRR[2] = 4
|
|
||||||
+ * MRR[3] = 8
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
- try_per_rate = sc->hw->max_rate_tries;
|
|
||||||
+ try_per_rate = 4;
|
|
||||||
|
|
||||||
rate_table = sc->cur_rate_table;
|
|
||||||
rix = ath_rc_get_highest_rix(sc, ath_rc_priv, rate_table, &is_probe);
|
|
||||||
@@ -714,7 +714,7 @@ static void ath_get_rate(void *priv, str
|
|
||||||
for ( ; i < 4; i++) {
|
|
||||||
/* Use twice the number of tries for the last MRR segment. */
|
|
||||||
if (i + 1 == 4)
|
|
||||||
- try_per_rate = 4;
|
|
||||||
+ try_per_rate = 8;
|
|
||||||
|
|
||||||
ath_rc_get_lower_rix(rate_table, ath_rc_priv, rix, &nrix);
|
|
||||||
/* All other rates in the series have RTS enabled */
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- a/net/mac80211/work.c
|
|
||||||
+++ b/net/mac80211/work.c
|
|
||||||
@@ -1022,8 +1022,6 @@ ieee80211_rx_result ieee80211_work_rx_mg
|
|
||||||
case IEEE80211_STYPE_PROBE_RESP:
|
|
||||||
case IEEE80211_STYPE_ASSOC_RESP:
|
|
||||||
case IEEE80211_STYPE_REASSOC_RESP:
|
|
||||||
- case IEEE80211_STYPE_DEAUTH:
|
|
||||||
- case IEEE80211_STYPE_DISASSOC:
|
|
||||||
skb_queue_tail(&local->work_skb_queue, skb);
|
|
||||||
ieee80211_queue_work(&local->hw, &local->work_work);
|
|
||||||
return RX_QUEUED;
|
|
Loading…
Reference in a new issue