phydm_dig.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. * You should have received a copy of the GNU General Public License along with
  15. * this program; if not, write to the Free Software Foundation, Inc.,
  16. * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17. *
  18. *
  19. ******************************************************************************/
  20. #ifndef __PHYDMDIG_H__
  21. #define __PHYDMDIG_H__
  22. #define DIG_VERSION "1.32" /* 2016.09.02 YuChen. add CCK PD for 8197F*/
  23. #define DIG_HW 0
  24. /* Pause DIG & CCKPD */
  25. #define DM_DIG_MAX_PAUSE_TYPE 0x7
  26. enum dig_goupcheck_level {
  27. DIG_GOUPCHECK_LEVEL_0,
  28. DIG_GOUPCHECK_LEVEL_1,
  29. DIG_GOUPCHECK_LEVEL_2
  30. };
  31. struct _dynamic_initial_gain_threshold_ {
  32. boolean is_stop_dig; /* for debug */
  33. boolean is_ignore_dig;
  34. boolean is_psd_in_progress;
  35. u8 dig_enable_flag;
  36. u8 dig_ext_port_stage;
  37. int rssi_low_thresh;
  38. int rssi_high_thresh;
  39. u32 fa_low_thresh;
  40. u32 fa_high_thresh;
  41. u8 cur_sta_connect_state;
  42. u8 pre_sta_connect_state;
  43. u8 cur_multi_sta_connect_state;
  44. u8 pre_ig_value;
  45. u8 cur_ig_value;
  46. u8 backup_ig_value; /* MP DIG */
  47. u8 bt30_cur_igi;
  48. u8 igi_backup;
  49. s8 backoff_val;
  50. s8 backoff_val_range_max;
  51. s8 backoff_val_range_min;
  52. u8 rx_gain_range_max;
  53. u8 rx_gain_range_min;
  54. u8 rssi_val_min;
  55. u8 pre_cck_cca_thres;
  56. u8 cur_cck_cca_thres;
  57. u8 pre_cck_pd_state;
  58. u8 cur_cck_pd_state;
  59. u8 cck_pd_backup;
  60. u8 pause_cckpd_level;
  61. u8 pause_cckpd_value[DM_DIG_MAX_PAUSE_TYPE + 1];
  62. u8 large_fa_hit;
  63. u8 large_fa_timeout; /*if (large_fa_hit), monitor "large_fa_timeout" sec, if timeout, large_fa_hit=0*/
  64. u8 forbidden_igi;
  65. u32 recover_cnt;
  66. u8 dig_dynamic_min_0;
  67. u8 dig_dynamic_min_1;
  68. boolean is_media_connect_0;
  69. boolean is_media_connect_1;
  70. u32 ant_div_rssi_max;
  71. u32 RSSI_max;
  72. u8 *is_p2p_in_process;
  73. u8 pause_dig_level;
  74. u8 pause_dig_value[DM_DIG_MAX_PAUSE_TYPE + 1];
  75. u32 cck_fa_ma;
  76. enum dig_goupcheck_level dig_go_up_check_level;
  77. u8 aaa_default;
  78. #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  79. boolean is_tp_target;
  80. boolean is_noise_est;
  81. u32 tp_train_th_min;
  82. u8 igi_offset_a;
  83. u8 igi_offset_b;
  84. #endif
  85. #if (RTL8822B_SUPPORT == 1 || RTL8197F_SUPPORT == 1 || RTL8821C_SUPPORT == 1)
  86. u8 rf_gain_idx;
  87. u8 agc_table_idx;
  88. u8 big_jump_lmt[16];
  89. u8 enable_adjust_big_jump:1;
  90. u8 big_jump_step1:3;
  91. u8 big_jump_step2:2;
  92. u8 big_jump_step3:2;
  93. #endif
  94. #if (DIG_HW == 1)
  95. u8 pre_rssi_min;
  96. #endif
  97. };
  98. struct _FALSE_ALARM_STATISTICS {
  99. u32 cnt_parity_fail;
  100. u32 cnt_rate_illegal;
  101. u32 cnt_crc8_fail;
  102. u32 cnt_mcs_fail;
  103. u32 cnt_ofdm_fail;
  104. u32 cnt_ofdm_fail_pre; /* For RTL8881A */
  105. u32 cnt_cck_fail;
  106. u32 cnt_all;
  107. u32 cnt_all_pre;
  108. u32 cnt_fast_fsync;
  109. u32 cnt_sb_search_fail;
  110. u32 cnt_ofdm_cca;
  111. u32 cnt_cck_cca;
  112. u32 cnt_cca_all;
  113. u32 cnt_bw_usc; /* Gary */
  114. u32 cnt_bw_lsc; /* Gary */
  115. u32 cnt_cck_crc32_error;
  116. u32 cnt_cck_crc32_ok;
  117. u32 cnt_ofdm_crc32_error;
  118. u32 cnt_ofdm_crc32_ok;
  119. u32 cnt_ht_crc32_error;
  120. u32 cnt_ht_crc32_ok;
  121. u32 cnt_vht_crc32_error;
  122. u32 cnt_vht_crc32_ok;
  123. u32 cnt_crc32_error_all;
  124. u32 cnt_crc32_ok_all;
  125. boolean cck_block_enable;
  126. boolean ofdm_block_enable;
  127. u32 dbg_port0;
  128. boolean edcca_flag;
  129. };
  130. enum dm_dig_op_e {
  131. DIG_TYPE_THRESH_HIGH = 0,
  132. DIG_TYPE_THRESH_LOW = 1,
  133. DIG_TYPE_BACKOFF = 2,
  134. DIG_TYPE_RX_GAIN_MIN = 3,
  135. DIG_TYPE_RX_GAIN_MAX = 4,
  136. DIG_TYPE_ENABLE = 5,
  137. DIG_TYPE_DISABLE = 6,
  138. DIG_OP_TYPE_MAX
  139. };
  140. /*
  141. enum dm_cck_pdth_e
  142. {
  143. CCK_PD_STAGE_LowRssi = 0,
  144. CCK_PD_STAGE_HighRssi = 1,
  145. CCK_PD_STAGE_MAX = 3,
  146. };
  147. enum dm_dig_ext_port_alg_e
  148. {
  149. DIG_EXT_PORT_STAGE_0 = 0,
  150. DIG_EXT_PORT_STAGE_1 = 1,
  151. DIG_EXT_PORT_STAGE_2 = 2,
  152. DIG_EXT_PORT_STAGE_3 = 3,
  153. DIG_EXT_PORT_STAGE_MAX = 4,
  154. };
  155. enum dm_dig_connect_e
  156. {
  157. DIG_STA_DISCONNECT = 0,
  158. DIG_STA_CONNECT = 1,
  159. DIG_STA_BEFORE_CONNECT = 2,
  160. dig_multi_sta_disconnect = 3,
  161. dig_multi_sta_connect = 4,
  162. DIG_CONNECT_MAX
  163. };
  164. #define DM_MultiSTA_InitGainChangeNotify(Event) {dm_dig_table.cur_multi_sta_connect_state = Event;}
  165. #define DM_MultiSTA_InitGainChangeNotify_CONNECT(_ADAPTER) \
  166. DM_MultiSTA_InitGainChangeNotify(dig_multi_sta_connect)
  167. #define DM_MultiSTA_InitGainChangeNotify_DISCONNECT(_ADAPTER) \
  168. DM_MultiSTA_InitGainChangeNotify(dig_multi_sta_disconnect)
  169. */
  170. enum phydm_pause_type {
  171. PHYDM_PAUSE = BIT(0),
  172. PHYDM_RESUME = BIT(1)
  173. };
  174. enum phydm_pause_level {
  175. /* number of pause level can't exceed DM_DIG_MAX_PAUSE_TYPE */
  176. PHYDM_PAUSE_LEVEL_0 = 0,
  177. PHYDM_PAUSE_LEVEL_1 = 1,
  178. PHYDM_PAUSE_LEVEL_2 = 2,
  179. PHYDM_PAUSE_LEVEL_3 = 3,
  180. PHYDM_PAUSE_LEVEL_4 = 4,
  181. PHYDM_PAUSE_LEVEL_5 = 5,
  182. PHYDM_PAUSE_LEVEL_6 = 6,
  183. PHYDM_PAUSE_LEVEL_7 = DM_DIG_MAX_PAUSE_TYPE /* maximum level */
  184. };
  185. /*CCK PD*/
  186. #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  187. #if (RTL8197F_SUPPORT == 1)
  188. #define AAA_BASE p_dm_odm->priv->pshare->rf_ft_var.dbg_aaa_base /*4*/
  189. #define AAA_STEP p_dm_odm->priv->pshare->rf_ft_var.dbg_aaa_step /*2*/
  190. #endif
  191. #endif
  192. #define DM_DIG_THRESH_HIGH 40
  193. #define DM_DIG_THRESH_LOW 35
  194. #define DM_FALSEALARM_THRESH_LOW 400
  195. #define DM_FALSEALARM_THRESH_HIGH 1000
  196. #define DM_DIG_MAX_NIC 0x3e
  197. #define DM_DIG_MIN_NIC 0x20
  198. #define DM_DIG_MAX_OF_MIN_NIC 0x3e
  199. #if (DIG_HW == 1)
  200. #define DM_DIG_MAX_AP p_dm_odm->priv->pshare->rf_ft_var.dbg_dig_upper /* 0x3e */
  201. #define DM_DIG_MIN_AP ((p_dm_odm->support_ic_type & (ODM_RTL8812 | ODM_RTL8822B)) ? 0x1c : 0x20)/* 0x1c */
  202. #else
  203. #define DM_DIG_MAX_AP 0x3e
  204. #define DM_DIG_MIN_AP 0x20
  205. #endif
  206. #define DM_DIG_MAX_OF_MIN 0x2A /* 0x32 */
  207. #define DM_DIG_MIN_AP_DFS 0x20
  208. #define DM_DIG_MAX_NIC_HP 0x46
  209. #define DM_DIG_MIN_NIC_HP 0x2e
  210. #define DM_DIG_MAX_AP_HP 0x42
  211. #define DM_DIG_MIN_AP_HP 0x30
  212. #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  213. #define DM_DIG_MAX_AP_COVERAGR 0x26
  214. #if (DIG_HW == 1)
  215. #define DM_DIG_MIN_AP_COVERAGE ((p_dm_odm->support_ic_type & (ODM_RTL8812 | ODM_RTL8822B)) ? 0x1c : 0x20)
  216. #else
  217. #define DM_DIG_MIN_AP_COVERAGE 0x1c
  218. #endif
  219. #define DM_DIG_MAX_OF_MIN_COVERAGE 0x22
  220. #define dm_dig_tp_target_th0 500
  221. #define dm_dig_tp_target_th1 1000
  222. #define dm_dig_tp_training_period 10
  223. #endif
  224. /* vivi 92c&92d has different definition, 20110504
  225. * this is for 92c */
  226. #if (DM_ODM_SUPPORT_TYPE & ODM_CE)
  227. #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
  228. #define DM_DIG_FA_TH0 0x80/* 0x20 */
  229. #else
  230. #define DM_DIG_FA_TH0 0x200/* 0x20 */
  231. #endif
  232. #else
  233. #define DM_DIG_FA_TH0 0x200/* 0x20 */
  234. #endif
  235. #define DM_DIG_FA_TH1 0x300
  236. #define DM_DIG_FA_TH2 0x400
  237. /* this is for 92d */
  238. #define DM_DIG_FA_TH0_92D 0x100
  239. #define DM_DIG_FA_TH1_92D 0x400
  240. #define DM_DIG_FA_TH2_92D 0x600
  241. #define DM_DIG_BACKOFF_MAX 12
  242. #define DM_DIG_BACKOFF_MIN -4
  243. #define DM_DIG_BACKOFF_DEFAULT 10
  244. #define DM_DIG_FA_TH0_LPS 4 /* -> 4 in lps */
  245. #define DM_DIG_FA_TH1_LPS 15 /* -> 15 lps */
  246. #define DM_DIG_FA_TH2_LPS 30 /* -> 30 lps */
  247. #define RSSI_OFFSET_DIG 0x05
  248. #define LARGE_FA_TIMEOUT 60
  249. void
  250. odm_change_dynamic_init_gain_thresh(
  251. void *p_dm_void,
  252. u32 dm_type,
  253. u32 dm_value
  254. );
  255. void
  256. odm_write_dig(
  257. void *p_dm_void,
  258. u8 current_igi
  259. );
  260. void
  261. odm_pause_dig(
  262. void *p_dm_void,
  263. enum phydm_pause_type pause_type,
  264. enum phydm_pause_level pause_level,
  265. u8 igi_value
  266. );
  267. void
  268. odm_dig_init(
  269. void *p_dm_void
  270. );
  271. void
  272. odm_DIG(
  273. void *p_dm_void
  274. );
  275. void
  276. odm_dig_by_rssi_lps(
  277. void *p_dm_void
  278. );
  279. void
  280. odm_false_alarm_counter_statistics(
  281. void *p_dm_void
  282. );
  283. void
  284. odm_pause_cck_packet_detection(
  285. void *p_dm_void,
  286. enum phydm_pause_type pause_type,
  287. enum phydm_pause_level pause_level,
  288. u8 cck_pd_threshold
  289. );
  290. void
  291. odm_cck_packet_detection_thresh(
  292. void *p_dm_void
  293. );
  294. void
  295. odm_write_cck_cca_thres(
  296. void *p_dm_void,
  297. u8 cur_cck_cca_thres
  298. );
  299. boolean
  300. phydm_dig_go_up_check(
  301. void *p_dm_void
  302. );
  303. #if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
  304. void
  305. odm_mpt_dig_callback(
  306. struct timer_list *p_timer
  307. );
  308. void
  309. odm_mpt_dig_work_item_callback(
  310. void *p_context
  311. );
  312. #endif
  313. #if (DM_ODM_SUPPORT_TYPE & (ODM_AP))
  314. void
  315. odm_mpt_dig_callback(
  316. void *p_dm_void
  317. );
  318. #endif
  319. #if (DM_ODM_SUPPORT_TYPE != ODM_CE)
  320. void
  321. ODM_MPT_DIG(
  322. void *p_dm_void
  323. );
  324. #endif
  325. #endif