xref: /openbmc/linux/drivers/net/wireless/ath/ath9k/ani.h (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
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