140 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
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)
 |