1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /****************************************************************************** 3 * 4 * Copyright(c) 2007 - 2016 Realtek Corporation. 5 * 6 * Contact Information: 7 * wlanfae <wlanfae@realtek.com> 8 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park, 9 * Hsinchu 300, Taiwan. 10 * 11 * Larry Finger <Larry.Finger@lwfinger.net> 12 * 13 *****************************************************************************/ 14 15 #ifndef __PHYDMDIG_H__ 16 #define __PHYDMDIG_H__ 17 18 #define DIG_VERSION "1.32" /* 2016.09.02 YuChen. add CCK PD for 8197F*/ 19 20 /* Pause DIG & CCKPD */ 21 #define DM_DIG_MAX_PAUSE_TYPE 0x7 22 23 enum dig_goupcheck_level { 24 DIG_GOUPCHECK_LEVEL_0, 25 DIG_GOUPCHECK_LEVEL_1, 26 DIG_GOUPCHECK_LEVEL_2 27 28 }; 29 30 struct dig_thres { 31 bool is_stop_dig; /* for debug */ 32 bool is_ignore_dig; 33 bool is_psd_in_progress; 34 35 u8 dig_enable_flag; 36 u8 dig_ext_port_stage; 37 38 int rssi_low_thresh; 39 int rssi_high_thresh; 40 41 u32 fa_low_thresh; 42 u32 fa_high_thresh; 43 44 u8 cur_sta_connect_state; 45 u8 pre_sta_connect_state; 46 u8 cur_multi_sta_connect_state; 47 48 u8 pre_ig_value; 49 u8 cur_ig_value; 50 u8 backup_ig_value; /* MP DIG */ 51 u8 bt30_cur_igi; 52 u8 igi_backup; 53 54 s8 backoff_val; 55 s8 backoff_val_range_max; 56 s8 backoff_val_range_min; 57 u8 rx_gain_range_max; 58 u8 rx_gain_range_min; 59 u8 rssi_val_min; 60 61 u8 pre_cck_cca_thres; 62 u8 cur_cck_cca_thres; 63 u8 pre_cck_pd_state; 64 u8 cur_cck_pd_state; 65 u8 cck_pd_backup; 66 u8 pause_cckpd_level; 67 u8 pause_cckpd_value[DM_DIG_MAX_PAUSE_TYPE + 1]; 68 69 u8 large_fa_hit; 70 u8 large_fa_timeout; /*if (large_fa_hit), monitor "large_fa_timeout" 71 *sec, if timeout, large_fa_hit=0 72 */ 73 u8 forbidden_igi; 74 u32 recover_cnt; 75 76 u8 dig_dynamic_min_0; 77 u8 dig_dynamic_min_1; 78 bool is_media_connect_0; 79 bool is_media_connect_1; 80 81 u32 ant_div_rssi_max; 82 u32 rssi_max; 83 84 u8 *is_p2p_in_process; 85 86 u8 pause_dig_level; 87 u8 pause_dig_value[DM_DIG_MAX_PAUSE_TYPE + 1]; 88 89 u32 cck_fa_ma; 90 enum dig_goupcheck_level dig_go_up_check_level; 91 u8 aaa_default; 92 93 u8 rf_gain_idx; 94 u8 agc_table_idx; 95 u8 big_jump_lmt[16]; 96 u8 enable_adjust_big_jump : 1; 97 u8 big_jump_step1 : 3; 98 u8 big_jump_step2 : 2; 99 u8 big_jump_step3 : 2; 100 }; 101 102 struct false_alarm_stat { 103 u32 cnt_parity_fail; 104 u32 cnt_rate_illegal; 105 u32 cnt_crc8_fail; 106 u32 cnt_mcs_fail; 107 u32 cnt_ofdm_fail; 108 u32 cnt_ofdm_fail_pre; /* For RTL8881A */ 109 u32 cnt_cck_fail; 110 u32 cnt_all; 111 u32 cnt_all_pre; 112 u32 cnt_fast_fsync; 113 u32 cnt_sb_search_fail; 114 u32 cnt_ofdm_cca; 115 u32 cnt_cck_cca; 116 u32 cnt_cca_all; 117 u32 cnt_bw_usc; /* Gary */ 118 u32 cnt_bw_lsc; /* Gary */ 119 u32 cnt_cck_crc32_error; 120 u32 cnt_cck_crc32_ok; 121 u32 cnt_ofdm_crc32_error; 122 u32 cnt_ofdm_crc32_ok; 123 u32 cnt_ht_crc32_error; 124 u32 cnt_ht_crc32_ok; 125 u32 cnt_vht_crc32_error; 126 u32 cnt_vht_crc32_ok; 127 u32 cnt_crc32_error_all; 128 u32 cnt_crc32_ok_all; 129 bool cck_block_enable; 130 bool ofdm_block_enable; 131 u32 dbg_port0; 132 bool edcca_flag; 133 }; 134 135 enum dm_dig_op { 136 DIG_TYPE_THRESH_HIGH = 0, 137 DIG_TYPE_THRESH_LOW = 1, 138 DIG_TYPE_BACKOFF = 2, 139 DIG_TYPE_RX_GAIN_MIN = 3, 140 DIG_TYPE_RX_GAIN_MAX = 4, 141 DIG_TYPE_ENABLE = 5, 142 DIG_TYPE_DISABLE = 6, 143 DIG_OP_TYPE_MAX 144 }; 145 146 enum phydm_pause_type { PHYDM_PAUSE = BIT(0), PHYDM_RESUME = BIT(1) }; 147 148 enum phydm_pause_level { 149 /* number of pause level can't exceed DM_DIG_MAX_PAUSE_TYPE */ 150 PHYDM_PAUSE_LEVEL_0 = 0, 151 PHYDM_PAUSE_LEVEL_1 = 1, 152 PHYDM_PAUSE_LEVEL_2 = 2, 153 PHYDM_PAUSE_LEVEL_3 = 3, 154 PHYDM_PAUSE_LEVEL_4 = 4, 155 PHYDM_PAUSE_LEVEL_5 = 5, 156 PHYDM_PAUSE_LEVEL_6 = 6, 157 PHYDM_PAUSE_LEVEL_7 = DM_DIG_MAX_PAUSE_TYPE /* maximum level */ 158 }; 159 160 #define DM_DIG_THRESH_HIGH 40 161 #define DM_DIG_THRESH_LOW 35 162 163 #define DM_FALSEALARM_THRESH_LOW 400 164 #define DM_FALSEALARM_THRESH_HIGH 1000 165 166 #define DM_DIG_MAX_NIC 0x3e 167 #define DM_DIG_MIN_NIC 0x20 168 #define DM_DIG_MAX_OF_MIN_NIC 0x3e 169 170 #define DM_DIG_MAX_AP 0x3e 171 #define DM_DIG_MIN_AP 0x20 172 #define DM_DIG_MAX_OF_MIN 0x2A /* 0x32 */ 173 #define DM_DIG_MIN_AP_DFS 0x20 174 175 #define DM_DIG_MAX_NIC_HP 0x46 176 #define DM_DIG_MIN_NIC_HP 0x2e 177 178 #define DM_DIG_MAX_AP_HP 0x42 179 #define DM_DIG_MIN_AP_HP 0x30 180 181 /* vivi 92c&92d has different definition, 20110504 182 * this is for 92c 183 */ 184 #define DM_DIG_FA_TH0 0x200 /* 0x20 */ 185 186 #define DM_DIG_FA_TH1 0x300 187 #define DM_DIG_FA_TH2 0x400 188 /* this is for 92d */ 189 #define DM_DIG_FA_TH0_92D 0x100 190 #define DM_DIG_FA_TH1_92D 0x400 191 #define DM_DIG_FA_TH2_92D 0x600 192 193 #define DM_DIG_BACKOFF_MAX 12 194 #define DM_DIG_BACKOFF_MIN -4 195 #define DM_DIG_BACKOFF_DEFAULT 10 196 197 #define DM_DIG_FA_TH0_LPS 4 /* -> 4 in lps */ 198 #define DM_DIG_FA_TH1_LPS 15 /* -> 15 lps */ 199 #define DM_DIG_FA_TH2_LPS 30 /* -> 30 lps */ 200 #define RSSI_OFFSET_DIG 0x05 201 #define LARGE_FA_TIMEOUT 60 202 203 void odm_change_dynamic_init_gain_thresh(void *dm_void, u32 dm_type, 204 u32 dm_value); 205 206 void odm_write_dig(void *dm_void, u8 current_igi); 207 208 void odm_pause_dig(void *dm_void, enum phydm_pause_type pause_type, 209 enum phydm_pause_level pause_level, u8 igi_value); 210 211 void odm_dig_init(void *dm_void); 212 213 void odm_DIG(void *dm_void); 214 215 void odm_dig_by_rssi_lps(void *dm_void); 216 217 void odm_false_alarm_counter_statistics(void *dm_void); 218 219 void odm_pause_cck_packet_detection(void *dm_void, 220 enum phydm_pause_type pause_type, 221 enum phydm_pause_level pause_level, 222 u8 cck_pd_threshold); 223 224 void odm_cck_packet_detection_thresh(void *dm_void); 225 226 void odm_write_cck_cca_thres(void *dm_void, u8 cur_cck_cca_thres); 227 228 bool phydm_dig_go_up_check(void *dm_void); 229 230 #endif 231