aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/300-pending_work.patch
blob: 5c7f7e0019f80ca73deab53a1c6ffbedd34d1ad6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
commit 98a713933d8495f4078f561c1e651b738dd5b531
Author: Felix Fietkau <nbd@openwrt.org>
Date:   Sun Apr 27 14:49:03 2014 +0200

    ath9k_hw: do not lower ANI setting below default on AR913x
    
    When the amount of noise fluctuates strongly, low immunity settings
    can sometimes disrupt signal detection on AR913x chips. When that
    happens, no OFDM/CCK errors are reported anymore, and ANI tunes the
    radio to the lowest immunity settings.
    Usually rx/tx fails as well in that case.
    
    To fix this, keep noise immunity settings at or above ANI default level,
    which will keep radio parameters at or above INI values.
    
    Signed-off-by: Felix Fietkau <nbd@openwrt.org>

commit 7cbb4c021bfd1e656f5b9953a947ab3c64e4e3b0
Author: Felix Fietkau <nbd@openwrt.org>
Date:   Thu Apr 10 10:49:01 2014 +0200

    mac80211: exclude AP_VLAN interfaces from tx power calculation
    
    Their power value is initialized to zero. This patch fixes an issue
    where the configured power drops to the minimum value when AP_VLAN
    interfaces are created/removed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Felix Fietkau <nbd@openwrt.org>

commit 0ca13e26341733bf9577287fb04a3bef0d2f5cc9
Author: Felix Fietkau <nbd@openwrt.org>
Date:   Wed Apr 9 00:07:01 2014 +0200

    mac80211: suppress BSS info change notifications for AP_VLAN
    
    Fixes warnings on tx power changes
    
    Signed-off-by: Felix Fietkau <nbd@openwrt.org>

commit ec998e5991781ecdaad0911dc64f1c8d3749c308
Author: Felix Fietkau <nbd@openwrt.org>
Date:   Tue Apr 8 23:42:17 2014 +0200

    ath9k: fix a scheduling while atomic bug in CSA handling
    
    Commit "ath9k: prepare for multi-interface CSA support" added a call to
    ieee80211_iterate_active_interfaces in atomic context (beacon tasklet),
    which is crashing.
    Use ieee80211_iterate_active_interfaces_atomic instead.
    
    Signed-off-by: Felix Fietkau <nbd@openwrt.org>

commit 93f310a38a1d81a4bc8fcd9bf29628bd721cf2ef
Author: Felix Fietkau <nbd@openwrt.org>
Date:   Sun Apr 6 23:35:28 2014 +0200

    ath9k_hw: reduce ANI firstep range for older chips
    
    Use 0-8 instead of 0-16, which is closer to the old implementation.
    Also drop the overwrite of the firstep_low parameter to improve
    stability.
    
    Signed-off-by: Felix Fietkau <nbd@openwrt.org>


--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -1004,11 +1004,9 @@ static bool ar5008_hw_ani_control_new(st
 	case ATH9K_ANI_FIRSTEP_LEVEL:{
 		u32 level = param;
 
-		value = level * 2;
+		value = level;
 		REG_RMW_FIELD(ah, AR_PHY_FIND_SIG,
 			      AR_PHY_FIND_SIG_FIRSTEP, value);
-		REG_RMW_FIELD(ah, AR_PHY_FIND_SIG_LOW,
-			      AR_PHY_FIND_SIG_FIRSTEP_LOW, value);
 
 		if (level != aniState->firstepLevel) {
 			ath_dbg(common, ANI,
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -312,10 +312,9 @@ static void ath9k_csa_update_vif(void *d
 
 void ath9k_csa_update(struct ath_softc *sc)
 {
-	ieee80211_iterate_active_interfaces(sc->hw,
-					    IEEE80211_IFACE_ITER_NORMAL,
-					    ath9k_csa_update_vif,
-					    sc);
+	ieee80211_iterate_active_interfaces_atomic(sc->hw,
+						   IEEE80211_IFACE_ITER_NORMAL,
+						   ath9k_csa_update_vif, sc);
 }
 
 void ath9k_beacon_tasklet(unsigned long data)
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -152,6 +152,8 @@ static u32 ieee80211_hw_conf_chan(struct
 	list_for_each_entry_rcu(sdata, &local->interfaces, list) {
 		if (!rcu_access_pointer(sdata->vif.chanctx_conf))
 			continue;
+		if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+			continue;
 		power = min(power, sdata->vif.bss_conf.txpower);
 	}
 	rcu_read_unlock();
@@ -203,7 +205,7 @@ void ieee80211_bss_info_change_notify(st
 {
 	struct ieee80211_local *local = sdata->local;
 
-	if (!changed)
+	if (!changed || sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
 		return;
 
 	drv_bss_info_changed(local, sdata, &sdata->vif.bss_conf, changed);
--- a/drivers/net/wireless/ath/ath9k/ani.c
+++ b/drivers/net/wireless/ath/ath9k/ani.c
@@ -155,6 +155,9 @@ static void ath9k_hw_set_ofdm_nil(struct
 		ATH9K_ANI_RSSI_THR_LOW,
 		ATH9K_ANI_RSSI_THR_HIGH);
 
+	if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_OFDM_DEF_LEVEL)
+		immunityLevel = ATH9K_ANI_OFDM_DEF_LEVEL;
+
 	if (!scan)
 		aniState->ofdmNoiseImmunityLevel = immunityLevel;
 
@@ -235,6 +238,9 @@ static void ath9k_hw_set_cck_nil(struct 
 		BEACON_RSSI(ah), ATH9K_ANI_RSSI_THR_LOW,
 		ATH9K_ANI_RSSI_THR_HIGH);
 
+	if (AR_SREV_9100(ah) && immunityLevel < ATH9K_ANI_CCK_DEF_LEVEL)
+		immunityLevel = ATH9K_ANI_CCK_DEF_LEVEL;
+
 	if (ah->opmode == NL80211_IFTYPE_STATION &&
 	    BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_LOW &&
 	    immunityLevel > ATH9K_ANI_CCK_MAX_LEVEL_LOW_RSSI)