1203c4805SLuis R. Rodriguez /* 25b68138eSSujith Manoharan * Copyright (c) 2008-2011 Atheros Communications Inc. 3203c4805SLuis R. Rodriguez * 4203c4805SLuis R. Rodriguez * Permission to use, copy, modify, and/or distribute this software for any 5203c4805SLuis R. Rodriguez * purpose with or without fee is hereby granted, provided that the above 6203c4805SLuis R. Rodriguez * copyright notice and this permission notice appear in all copies. 7203c4805SLuis R. Rodriguez * 8203c4805SLuis R. Rodriguez * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9203c4805SLuis R. Rodriguez * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10203c4805SLuis R. Rodriguez * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11203c4805SLuis R. Rodriguez * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12203c4805SLuis R. Rodriguez * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13203c4805SLuis R. Rodriguez * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14203c4805SLuis R. Rodriguez * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15203c4805SLuis R. Rodriguez */ 16203c4805SLuis R. Rodriguez 17203c4805SLuis R. Rodriguez #ifndef ANI_H 18203c4805SLuis R. Rodriguez #define ANI_H 19203c4805SLuis R. Rodriguez 2022e66a4cSVasanthakumar Thiagarajan #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi) 21203c4805SLuis R. Rodriguez 22e36b27afSLuis R. Rodriguez /* units are errors per second */ 2355fee98aSSujith Manoharan #define ATH9K_ANI_OFDM_TRIG_HIGH 3500 2455fee98aSSujith Manoharan #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 25*f5547245SFelix Fietkau #define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500 2655fee98aSSujith Manoharan 27465dce62SFelix Fietkau #define ATH9K_ANI_OFDM_TRIG_LOW 400 2855fee98aSSujith Manoharan #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 29*f5547245SFelix Fietkau #define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200 3055fee98aSSujith Manoharan 31465dce62SFelix Fietkau #define ATH9K_ANI_CCK_TRIG_HIGH 600 32*f5547245SFelix Fietkau #define ATH9K_ANI_CCK_TRIG_HIGH_OLD 200 33465dce62SFelix Fietkau #define ATH9K_ANI_CCK_TRIG_LOW 300 34*f5547245SFelix Fietkau #define ATH9K_ANI_CCK_TRIG_LOW_OLD 100 35e36b27afSLuis R. Rodriguez 36465dce62SFelix Fietkau #define ATH9K_ANI_SPUR_IMMUNE_LVL 3 37465dce62SFelix Fietkau #define ATH9K_ANI_FIRSTEP_LVL 2 38e36b27afSLuis R. Rodriguez 39203c4805SLuis R. Rodriguez #define ATH9K_ANI_RSSI_THR_HIGH 40 40203c4805SLuis R. Rodriguez #define ATH9K_ANI_RSSI_THR_LOW 7 41e36b27afSLuis R. Rodriguez 42465dce62SFelix Fietkau #define ATH9K_ANI_PERIOD 300 43e36b27afSLuis R. Rodriguez 44e36b27afSLuis R. Rodriguez /* in ms */ 45465dce62SFelix Fietkau #define ATH9K_ANI_POLLINTERVAL 1000 46203c4805SLuis R. Rodriguez 47e36b27afSLuis R. Rodriguez #define ATH9K_SIG_FIRSTEP_SETTING_MIN 0 48e36b27afSLuis R. Rodriguez #define ATH9K_SIG_FIRSTEP_SETTING_MAX 20 49e36b27afSLuis R. Rodriguez #define ATH9K_SIG_SPUR_IMM_SETTING_MIN 0 50e36b27afSLuis R. Rodriguez #define ATH9K_SIG_SPUR_IMM_SETTING_MAX 22 51e36b27afSLuis R. Rodriguez 52e36b27afSLuis R. Rodriguez /* values here are relative to the INI */ 53e36b27afSLuis R. Rodriguez 54203c4805SLuis R. Rodriguez enum ath9k_ani_cmd { 5565c1a4deSSujith Manoharan ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION = 0x1, 5665c1a4deSSujith Manoharan ATH9K_ANI_FIRSTEP_LEVEL = 0x2, 5765c1a4deSSujith Manoharan ATH9K_ANI_SPUR_IMMUNITY_LEVEL = 0x4, 5865c1a4deSSujith Manoharan ATH9K_ANI_MRC_CCK = 0x8, 59e36b27afSLuis R. Rodriguez ATH9K_ANI_ALL = 0xfff 60203c4805SLuis R. Rodriguez }; 61203c4805SLuis R. Rodriguez 62203c4805SLuis R. Rodriguez struct ath9k_mib_stats { 63203c4805SLuis R. Rodriguez u32 ackrcv_bad; 64203c4805SLuis R. Rodriguez u32 rts_bad; 65203c4805SLuis R. Rodriguez u32 rts_good; 66203c4805SLuis R. Rodriguez u32 fcs_bad; 67203c4805SLuis R. Rodriguez u32 beacons; 68203c4805SLuis R. Rodriguez }; 69203c4805SLuis R. Rodriguez 70e36b27afSLuis R. Rodriguez /* INI default values for ANI registers */ 71e36b27afSLuis R. Rodriguez struct ath9k_ani_default { 72e36b27afSLuis R. Rodriguez u16 m1ThreshLow; 73e36b27afSLuis R. Rodriguez u16 m2ThreshLow; 74e36b27afSLuis R. Rodriguez u16 m1Thresh; 75e36b27afSLuis R. Rodriguez u16 m2Thresh; 76e36b27afSLuis R. Rodriguez u16 m2CountThr; 77e36b27afSLuis R. Rodriguez u16 m2CountThrLow; 78e36b27afSLuis R. Rodriguez u16 m1ThreshLowExt; 79e36b27afSLuis R. Rodriguez u16 m2ThreshLowExt; 80e36b27afSLuis R. Rodriguez u16 m1ThreshExt; 81e36b27afSLuis R. Rodriguez u16 m2ThreshExt; 82e36b27afSLuis R. Rodriguez u16 firstep; 83e36b27afSLuis R. Rodriguez u16 firstepLow; 84e36b27afSLuis R. Rodriguez u16 cycpwrThr1; 85e36b27afSLuis R. Rodriguez u16 cycpwrThr1Ext; 86e36b27afSLuis R. Rodriguez }; 87e36b27afSLuis R. Rodriguez 88203c4805SLuis R. Rodriguez struct ar5416AniState { 89203c4805SLuis R. Rodriguez u8 noiseImmunityLevel; 90e36b27afSLuis R. Rodriguez u8 ofdmNoiseImmunityLevel; 91e36b27afSLuis R. Rodriguez u8 cckNoiseImmunityLevel; 92e36b27afSLuis R. Rodriguez bool ofdmsTurn; 9381b67fd6SRajkumar Manoharan u8 mrcCCK; 94203c4805SLuis R. Rodriguez u8 spurImmunityLevel; 95203c4805SLuis R. Rodriguez u8 firstepLevel; 964f4395c6SSujith Manoharan bool ofdmWeakSigDetect; 97203c4805SLuis R. Rodriguez u32 listenTime; 98203c4805SLuis R. Rodriguez u32 ofdmPhyErrCount; 99203c4805SLuis R. Rodriguez u32 cckPhyErrCount; 100e36b27afSLuis R. Rodriguez struct ath9k_ani_default iniDef; 101203c4805SLuis R. Rodriguez }; 102203c4805SLuis R. Rodriguez 103203c4805SLuis R. Rodriguez struct ar5416Stats { 104203c4805SLuis R. Rodriguez u32 ast_ani_spurup; 105203c4805SLuis R. Rodriguez u32 ast_ani_spurdown; 106203c4805SLuis R. Rodriguez u32 ast_ani_ofdmon; 107203c4805SLuis R. Rodriguez u32 ast_ani_ofdmoff; 108203c4805SLuis R. Rodriguez u32 ast_ani_cckhigh; 109203c4805SLuis R. Rodriguez u32 ast_ani_ccklow; 110203c4805SLuis R. Rodriguez u32 ast_ani_stepup; 111203c4805SLuis R. Rodriguez u32 ast_ani_stepdown; 112203c4805SLuis R. Rodriguez u32 ast_ani_ofdmerrs; 113203c4805SLuis R. Rodriguez u32 ast_ani_cckerrs; 114203c4805SLuis R. Rodriguez u32 ast_ani_reset; 115107021c4SMohammed Shafi Shajakhan u32 ast_ani_lneg_or_lzero; 11622e66a4cSVasanthakumar Thiagarajan u32 avgbrssi; 117203c4805SLuis R. Rodriguez struct ath9k_mib_stats ast_mibstats; 118203c4805SLuis R. Rodriguez }; 119203c4805SLuis R. Rodriguez #define ah_mibStats stats.ast_mibstats 120203c4805SLuis R. Rodriguez 121203c4805SLuis R. Rodriguez void ath9k_enable_mib_counters(struct ath_hw *ah); 122203c4805SLuis R. Rodriguez void ath9k_hw_disable_mib_counters(struct ath_hw *ah); 123f637cfd6SLuis R. Rodriguez void ath9k_hw_ani_init(struct ath_hw *ah); 124203c4805SLuis R. Rodriguez 125203c4805SLuis R. Rodriguez #endif /* ANI_H */ 126