[Madwifi-devel] [patch 0.9.4] iwpriv for disabling ANI
Status: Beta
Brought to you by:
otaku
From: bruno r. <br...@th...> - 2007-12-20 09:41:04
|
hi all! unfortunately, as it turned out, the initial assumption that turning ANI (ambient noise immunity) or "interference mitigation" OFF will result in better thruput is only true in some setups, in other setups it results in a poorer performance. this has been (and still is) discussed in the thread "[RFC PATCH 0.9.3] Improve OFDM sensitivity in non-STA operating modes" and no real conclusion has yet been reached. more testing and tweaking is required, but it seems obvious that there will not be the one perfect answer for all different environments. my current understanding is that for high-gain point-to-point links it can be good to turn ANI off, while for most other setups it's good to leave it on. this patch allows turning ANI on and off via additional iwpriv commands "ani" and "get_ani". the default is *changed*back* to leave ANI ON(!). those who need to turn it off and for testing can do that with "iwpriv ath0 ani 0". please be aware that this setting has to be done before the interface is brought up, otherwise it will not have an effect! (this is due to the fact that "ENETRESET" seems to be ignored, but that's a different issue.) ok to commit? bruno Index: net80211/ieee80211_ioctl.h =================================================================== --- net80211/ieee80211_ioctl.h (revision 3067) +++ net80211/ieee80211_ioctl.h (working copy) @@ -599,6 +599,7 @@ IEEE80211_PARAM_REGCLASS = 59, /* enable regclass ids in country IE */ IEEE80211_PARAM_DROPUNENC_EAPOL = 60, /* drop unencrypted eapol frames */ IEEE80211_PARAM_SHPREAMBLE = 61, /* Short Preamble */ + IEEE80211_PARAM_ANI = 62, /* Interference Mitigation (ANI) */ }; #define SIOCG80211STATS (SIOCDEVPRIVATE+2) Index: net80211/ieee80211.c =================================================================== --- net80211/ieee80211.c (revision 3067) +++ net80211/ieee80211.c (working copy) @@ -314,6 +314,9 @@ /* Enable marking of dfs by default */ ic->ic_flags_ext |= IEEE80211_FEXT_MARKDFS; + /* Enable ANI by default */ + ic->ic_flags_ext |= IEEE80211_FEXT_ANI; + /* * Enable WME by default if we're capable. */ Index: net80211/ieee80211_wireless.c =================================================================== --- net80211/ieee80211_wireless.c (revision 3067) +++ net80211/ieee80211_wireless.c (working copy) @@ -2546,6 +2546,13 @@ else ic->ic_flags_ext &= ~IEEE80211_FEXT_MARKDFS; break; + case IEEE80211_PARAM_ANI: + if (value) + ic->ic_flags_ext |= IEEE80211_FEXT_ANI; + else + ic->ic_flags_ext &= ~IEEE80211_FEXT_ANI; + retv = ENETRESET; + break; default: retv = EOPNOTSUPP; break; @@ -2838,6 +2845,9 @@ else param[0] = 0; break; + case IEEE80211_PARAM_ANI: + param[0] = (ic->ic_flags_ext & IEEE80211_FEXT_ANI) != 0; + break; default: return -EOPNOTSUPP; } @@ -5165,6 +5175,10 @@ 0, IW_PRIV_TYPE_APPIEBUF, "getiebuf" }, { IEEE80211_IOCTL_FILTERFRAME, IW_PRIV_TYPE_FILTER , 0, "setfilter" }, + { IEEE80211_PARAM_ANI, + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "ani" }, + { IEEE80211_PARAM_ANI, + 0, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "get_ani" }, #endif /* WIRELESS_EXT >= 12 */ }; Index: net80211/ieee80211_var.h =================================================================== --- net80211/ieee80211_var.h (revision 3067) +++ net80211/ieee80211_var.h (working copy) @@ -473,6 +473,7 @@ #define IEEE80211_FEXT_SWBMISS 0x00000400 /* CONF: use software beacon timer */ #define IEEE80211_FEXT_DROPUNENC_EAPOL 0x00000800 /* CONF: drop unencrypted eapol frames */ #define IEEE80211_FEXT_APPIE_UPDATE 0x00001000 /* STATE: beacon APP IE updated */ +#define IEEE80211_FEXT_ANI 0x00002000 /* CONF: enable ANI */ #define IEEE80211_COM_UAPSD_ENABLE(_ic) ((_ic)->ic_flags_ext |= IEEE80211_FEXT_UAPSD) #define IEEE80211_COM_UAPSD_DISABLE(_ic) ((_ic)->ic_flags_ext &= ~IEEE80211_FEXT_UAPSD) Index: ath/if_ath.c =================================================================== --- ath/if_ath.c (revision 3067) +++ ath/if_ath.c (working copy) @@ -1913,7 +1913,8 @@ ath_hal_gpioCfgOutput(ah, sc->sc_ledpin); /* Turn off Interference Mitigation in non-STA modes */ - if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit) + if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit && + (ic->ic_flags_ext & IEEE80211_FEXT_ANI) == 0) ath_hal_setintmit(ah, 0); /* @@ -2168,7 +2169,8 @@ dev->name, __func__, ath_get_hal_status_desc(status), status); /* Turn off Interference Mitigation in non-STA modes */ - if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit) + if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit && + (ic->ic_flags_ext & IEEE80211_FEXT_ANI) == 0) ath_hal_setintmit(ah, 0); ath_update_txpow(sc); /* update tx power state */ @@ -7831,8 +7833,9 @@ ath_hal_gpioCfgOutput(ah, sc->sc_ledpin); /* Turn off Interference Mitigation in non-STA modes */ - if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit) - ath_hal_setintmit(ah, 0); + if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit && + (ic->ic_flags_ext & IEEE80211_FEXT_ANI) == 0) + ath_hal_setintmit(ah, 0); sc->sc_curchan = hchan; ath_update_txpow(sc); /* update tx power state */ |