blob: dddb1361039a71de9dbd205bba879e0dfcb8a14a [file] [log] [blame]
Sujith394cf0a2009-02-09 13:26:54 +05301/*
Sujith Manoharan5b681382011-05-17 13:36:18 +05302 * Copyright (c) 2008-2011 Atheros Communications Inc.
Sujith394cf0a2009-02-09 13:26:54 +05303 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#ifndef ANI_H
18#define ANI_H
19
20#define HAL_PROCESS_ANI 0x00000001
Sujith394cf0a2009-02-09 13:26:54 +053021
Felix Fietkau093115b2010-10-04 20:09:47 +020022#define DO_ANI(ah) (((ah)->proc_phyerr & HAL_PROCESS_ANI) && ah->curchan)
Sujith394cf0a2009-02-09 13:26:54 +053023
Vasanthakumar Thiagarajan22e66a42009-08-19 16:23:40 +053024#define BEACON_RSSI(ahp) (ahp->stats.avgbrssi)
Sujith394cf0a2009-02-09 13:26:54 +053025
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040026/* units are errors per second */
Felix Fietkau465dce62012-06-15 15:25:24 +020027#define ATH9K_ANI_OFDM_TRIG_HIGH 3500
Rajkumar Manoharan54da20d2012-03-15 05:34:26 +053028#define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040029
30/* units are errors per second */
Felix Fietkau465dce62012-06-15 15:25:24 +020031#define ATH9K_ANI_OFDM_TRIG_LOW 400
Rajkumar Manoharan54da20d2012-03-15 05:34:26 +053032#define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040033
34/* units are errors per second */
Felix Fietkau465dce62012-06-15 15:25:24 +020035#define ATH9K_ANI_CCK_TRIG_HIGH 600
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040036
37/* units are errors per second */
Felix Fietkau465dce62012-06-15 15:25:24 +020038#define ATH9K_ANI_CCK_TRIG_LOW 300
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040039
Sujith394cf0a2009-02-09 13:26:54 +053040#define ATH9K_ANI_NOISE_IMMUNE_LVL 4
41#define ATH9K_ANI_USE_OFDM_WEAK_SIG true
42#define ATH9K_ANI_CCK_WEAK_SIG_THR false
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040043
Felix Fietkau465dce62012-06-15 15:25:24 +020044#define ATH9K_ANI_SPUR_IMMUNE_LVL 3
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040045
Felix Fietkau465dce62012-06-15 15:25:24 +020046#define ATH9K_ANI_FIRSTEP_LVL 2
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040047
Sujith394cf0a2009-02-09 13:26:54 +053048#define ATH9K_ANI_RSSI_THR_HIGH 40
49#define ATH9K_ANI_RSSI_THR_LOW 7
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040050
Felix Fietkau465dce62012-06-15 15:25:24 +020051#define ATH9K_ANI_PERIOD 300
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040052
53/* in ms */
Felix Fietkau465dce62012-06-15 15:25:24 +020054#define ATH9K_ANI_POLLINTERVAL 1000
Sujith394cf0a2009-02-09 13:26:54 +053055
56#define HAL_NOISE_IMMUNE_MAX 4
57#define HAL_SPUR_IMMUNE_MAX 7
58#define HAL_FIRST_STEP_MAX 2
59
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040060#define ATH9K_SIG_FIRSTEP_SETTING_MIN 0
61#define ATH9K_SIG_FIRSTEP_SETTING_MAX 20
62#define ATH9K_SIG_SPUR_IMM_SETTING_MIN 0
63#define ATH9K_SIG_SPUR_IMM_SETTING_MAX 22
64
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040065/* values here are relative to the INI */
66
Sujith394cf0a2009-02-09 13:26:54 +053067enum ath9k_ani_cmd {
68 ATH9K_ANI_PRESENT = 0x1,
69 ATH9K_ANI_NOISE_IMMUNITY_LEVEL = 0x2,
70 ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION = 0x4,
71 ATH9K_ANI_CCK_WEAK_SIGNAL_THR = 0x8,
72 ATH9K_ANI_FIRSTEP_LEVEL = 0x10,
73 ATH9K_ANI_SPUR_IMMUNITY_LEVEL = 0x20,
74 ATH9K_ANI_MODE = 0x40,
75 ATH9K_ANI_PHYERR_RESET = 0x80,
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040076 ATH9K_ANI_MRC_CCK = 0x100,
77 ATH9K_ANI_ALL = 0xfff
Sujith394cf0a2009-02-09 13:26:54 +053078};
79
80struct ath9k_mib_stats {
81 u32 ackrcv_bad;
82 u32 rts_bad;
83 u32 rts_good;
84 u32 fcs_bad;
85 u32 beacons;
86};
87
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -040088/* INI default values for ANI registers */
89struct ath9k_ani_default {
90 u16 m1ThreshLow;
91 u16 m2ThreshLow;
92 u16 m1Thresh;
93 u16 m2Thresh;
94 u16 m2CountThr;
95 u16 m2CountThrLow;
96 u16 m1ThreshLowExt;
97 u16 m2ThreshLowExt;
98 u16 m1ThreshExt;
99 u16 m2ThreshExt;
100 u16 firstep;
101 u16 firstepLow;
102 u16 cycpwrThr1;
103 u16 cycpwrThr1Ext;
104};
105
Sujithee6e8d12009-02-09 13:29:49 +0530106struct ar5416AniState {
Sujithee6e8d12009-02-09 13:29:49 +0530107 u8 noiseImmunityLevel;
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -0400108 u8 ofdmNoiseImmunityLevel;
109 u8 cckNoiseImmunityLevel;
110 bool ofdmsTurn;
Rajkumar Manoharan81b67fd62012-06-21 20:33:59 +0530111 u8 mrcCCK;
Sujithee6e8d12009-02-09 13:29:49 +0530112 u8 spurImmunityLevel;
113 u8 firstepLevel;
Felix Fietkau7067e702012-06-15 15:25:21 +0200114 u8 ofdmWeakSigDetect;
Sujithee6e8d12009-02-09 13:29:49 +0530115 u32 listenTime;
Sujithee6e8d12009-02-09 13:29:49 +0530116 u32 ofdmPhyErrCount;
117 u32 cckPhyErrCount;
Luis R. Rodrigueze36b27a2010-06-12 00:33:45 -0400118 struct ath9k_ani_default iniDef;
Sujithee6e8d12009-02-09 13:29:49 +0530119};
120
Sujith394cf0a2009-02-09 13:26:54 +0530121struct ar5416Stats {
122 u32 ast_ani_niup;
123 u32 ast_ani_nidown;
124 u32 ast_ani_spurup;
125 u32 ast_ani_spurdown;
126 u32 ast_ani_ofdmon;
127 u32 ast_ani_ofdmoff;
128 u32 ast_ani_cckhigh;
129 u32 ast_ani_ccklow;
130 u32 ast_ani_stepup;
131 u32 ast_ani_stepdown;
132 u32 ast_ani_ofdmerrs;
133 u32 ast_ani_cckerrs;
134 u32 ast_ani_reset;
Mohammed Shafi Shajakhan107021c2011-08-26 11:19:57 +0530135 u32 ast_ani_lneg_or_lzero;
Vasanthakumar Thiagarajan22e66a42009-08-19 16:23:40 +0530136 u32 avgbrssi;
Sujith394cf0a2009-02-09 13:26:54 +0530137 struct ath9k_mib_stats ast_mibstats;
Sujith394cf0a2009-02-09 13:26:54 +0530138};
Sujith2660b812009-02-09 13:27:26 +0530139#define ah_mibStats stats.ast_mibstats
Sujith394cf0a2009-02-09 13:26:54 +0530140
Sujithcbe61d82009-02-09 13:27:12 +0530141void ath9k_enable_mib_counters(struct ath_hw *ah);
142void ath9k_hw_disable_mib_counters(struct ath_hw *ah);
Luis R. Rodriguezf637cfd2009-08-03 12:24:46 -0700143void ath9k_hw_ani_init(struct ath_hw *ah);
Sujith394cf0a2009-02-09 13:26:54 +0530144
145#endif /* ANI_H */