Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 1 | /* |
Sujith Manoharan | 5b68138 | 2011-05-17 13:36:18 +0530 | [diff] [blame] | 2 | * Copyright (c) 2008-2011 Atheros Communications Inc. |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 3 | * |
| 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 | |
Vasanthakumar Thiagarajan | 22e66a4 | 2009-08-19 16:23:40 +0530 | [diff] [blame] | 20 | #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi) |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 21 | |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 22 | /* units are errors per second */ |
Sujith Manoharan | 55fee98 | 2013-06-17 14:24:36 +0530 | [diff] [blame] | 23 | #define ATH9K_ANI_OFDM_TRIG_HIGH 3500 |
| 24 | #define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 |
Felix Fietkau | f554724 | 2014-02-28 19:02:25 +0100 | [diff] [blame] | 25 | #define ATH9K_ANI_OFDM_TRIG_HIGH_OLD 500 |
Sujith Manoharan | 55fee98 | 2013-06-17 14:24:36 +0530 | [diff] [blame] | 26 | |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 27 | #define ATH9K_ANI_OFDM_TRIG_LOW 400 |
Sujith Manoharan | 55fee98 | 2013-06-17 14:24:36 +0530 | [diff] [blame] | 28 | #define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 |
Felix Fietkau | f554724 | 2014-02-28 19:02:25 +0100 | [diff] [blame] | 29 | #define ATH9K_ANI_OFDM_TRIG_LOW_OLD 200 |
Sujith Manoharan | 55fee98 | 2013-06-17 14:24:36 +0530 | [diff] [blame] | 30 | |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 31 | #define ATH9K_ANI_CCK_TRIG_HIGH 600 |
Felix Fietkau | f554724 | 2014-02-28 19:02:25 +0100 | [diff] [blame] | 32 | #define ATH9K_ANI_CCK_TRIG_HIGH_OLD 200 |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 33 | #define ATH9K_ANI_CCK_TRIG_LOW 300 |
Felix Fietkau | f554724 | 2014-02-28 19:02:25 +0100 | [diff] [blame] | 34 | #define ATH9K_ANI_CCK_TRIG_LOW_OLD 100 |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 35 | |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 36 | #define ATH9K_ANI_SPUR_IMMUNE_LVL 3 |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 37 | #define ATH9K_ANI_FIRSTEP_LVL 2 |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 38 | |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 39 | #define ATH9K_ANI_RSSI_THR_HIGH 40 |
| 40 | #define ATH9K_ANI_RSSI_THR_LOW 7 |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 41 | |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 42 | #define ATH9K_ANI_PERIOD 300 |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 43 | |
| 44 | /* in ms */ |
Felix Fietkau | 465dce6 | 2012-06-15 15:25:24 +0200 | [diff] [blame] | 45 | #define ATH9K_ANI_POLLINTERVAL 1000 |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 46 | |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 47 | #define ATH9K_SIG_FIRSTEP_SETTING_MIN 0 |
| 48 | #define ATH9K_SIG_FIRSTEP_SETTING_MAX 20 |
| 49 | #define ATH9K_SIG_SPUR_IMM_SETTING_MIN 0 |
| 50 | #define ATH9K_SIG_SPUR_IMM_SETTING_MAX 22 |
| 51 | |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 52 | /* values here are relative to the INI */ |
| 53 | |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 54 | enum ath9k_ani_cmd { |
Sujith Manoharan | 65c1a4d | 2013-08-27 11:34:26 +0530 | [diff] [blame] | 55 | ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION = 0x1, |
| 56 | ATH9K_ANI_FIRSTEP_LEVEL = 0x2, |
| 57 | ATH9K_ANI_SPUR_IMMUNITY_LEVEL = 0x4, |
| 58 | ATH9K_ANI_MRC_CCK = 0x8, |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 59 | ATH9K_ANI_ALL = 0xfff |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 60 | }; |
| 61 | |
| 62 | struct ath9k_mib_stats { |
| 63 | u32 ackrcv_bad; |
| 64 | u32 rts_bad; |
| 65 | u32 rts_good; |
| 66 | u32 fcs_bad; |
| 67 | u32 beacons; |
| 68 | }; |
| 69 | |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 70 | /* INI default values for ANI registers */ |
| 71 | struct ath9k_ani_default { |
| 72 | u16 m1ThreshLow; |
| 73 | u16 m2ThreshLow; |
| 74 | u16 m1Thresh; |
| 75 | u16 m2Thresh; |
| 76 | u16 m2CountThr; |
| 77 | u16 m2CountThrLow; |
| 78 | u16 m1ThreshLowExt; |
| 79 | u16 m2ThreshLowExt; |
| 80 | u16 m1ThreshExt; |
| 81 | u16 m2ThreshExt; |
| 82 | u16 firstep; |
| 83 | u16 firstepLow; |
| 84 | u16 cycpwrThr1; |
| 85 | u16 cycpwrThr1Ext; |
| 86 | }; |
| 87 | |
Sujith | ee6e8d1 | 2009-02-09 13:29:49 +0530 | [diff] [blame] | 88 | struct ar5416AniState { |
Sujith | ee6e8d1 | 2009-02-09 13:29:49 +0530 | [diff] [blame] | 89 | u8 noiseImmunityLevel; |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 90 | u8 ofdmNoiseImmunityLevel; |
| 91 | u8 cckNoiseImmunityLevel; |
| 92 | bool ofdmsTurn; |
Rajkumar Manoharan | 81b67fd6 | 2012-06-21 20:33:59 +0530 | [diff] [blame] | 93 | u8 mrcCCK; |
Sujith | ee6e8d1 | 2009-02-09 13:29:49 +0530 | [diff] [blame] | 94 | u8 spurImmunityLevel; |
| 95 | u8 firstepLevel; |
Sujith Manoharan | 4f4395c | 2013-06-03 09:19:27 +0530 | [diff] [blame] | 96 | bool ofdmWeakSigDetect; |
Sujith | ee6e8d1 | 2009-02-09 13:29:49 +0530 | [diff] [blame] | 97 | u32 listenTime; |
Sujith | ee6e8d1 | 2009-02-09 13:29:49 +0530 | [diff] [blame] | 98 | u32 ofdmPhyErrCount; |
| 99 | u32 cckPhyErrCount; |
Luis R. Rodriguez | e36b27a | 2010-06-12 00:33:45 -0400 | [diff] [blame] | 100 | struct ath9k_ani_default iniDef; |
Sujith | ee6e8d1 | 2009-02-09 13:29:49 +0530 | [diff] [blame] | 101 | }; |
| 102 | |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 103 | struct ar5416Stats { |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 104 | u32 ast_ani_spurup; |
| 105 | u32 ast_ani_spurdown; |
| 106 | u32 ast_ani_ofdmon; |
| 107 | u32 ast_ani_ofdmoff; |
| 108 | u32 ast_ani_cckhigh; |
| 109 | u32 ast_ani_ccklow; |
| 110 | u32 ast_ani_stepup; |
| 111 | u32 ast_ani_stepdown; |
| 112 | u32 ast_ani_ofdmerrs; |
| 113 | u32 ast_ani_cckerrs; |
| 114 | u32 ast_ani_reset; |
Mohammed Shafi Shajakhan | 107021c | 2011-08-26 11:19:57 +0530 | [diff] [blame] | 115 | u32 ast_ani_lneg_or_lzero; |
Vasanthakumar Thiagarajan | 22e66a4 | 2009-08-19 16:23:40 +0530 | [diff] [blame] | 116 | u32 avgbrssi; |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 117 | struct ath9k_mib_stats ast_mibstats; |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 118 | }; |
Sujith | 2660b81 | 2009-02-09 13:27:26 +0530 | [diff] [blame] | 119 | #define ah_mibStats stats.ast_mibstats |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 120 | |
Sujith | cbe61d8 | 2009-02-09 13:27:12 +0530 | [diff] [blame] | 121 | void ath9k_enable_mib_counters(struct ath_hw *ah); |
| 122 | void ath9k_hw_disable_mib_counters(struct ath_hw *ah); |
Luis R. Rodriguez | f637cfd | 2009-08-03 12:24:46 -0700 | [diff] [blame] | 123 | void ath9k_hw_ani_init(struct ath_hw *ah); |
Sujith | 394cf0a | 2009-02-09 13:26:54 +0530 | [diff] [blame] | 124 | |
| 125 | #endif /* ANI_H */ |