hal_dm_acs.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2017 Realtek Corporation.
  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. *****************************************************************************/
  15. #ifndef __HAL_DM_ACS_H__
  16. #define __HAL_DM_ACS_H__
  17. #ifdef CONFIG_RTW_ACS
  18. #define RTK_ACS_VERSION 3
  19. #if (RTK_ACS_VERSION == 3)
  20. enum NHM_PID {
  21. NHM_PID_ACS,
  22. NHM_PID_IEEE_11K_HIGH,
  23. NHM_PID_IEEE_11K_LOW,
  24. };
  25. #define init_clm_param(clm, app, lv, time) \
  26. do {\
  27. clm.clm_app = app;\
  28. clm.clm_lv = lv;\
  29. clm.mntr_time = time;\
  30. } while (0)
  31. #define init_nhm_param(nhm, txon, cca, cnt_opt, app, lv, time) \
  32. do {\
  33. nhm.incld_txon = txon;\
  34. nhm.incld_cca = cca;\
  35. nhm.div_opt = cnt_opt;\
  36. nhm.nhm_app = app;\
  37. nhm.nhm_lv = lv;\
  38. nhm.mntr_time = time;\
  39. } while (0)
  40. #define init_acs_clm(clm, time) \
  41. init_clm_param(clm, CLM_ACS, CLM_LV_2, time)
  42. #define init_acs_nhm(nhm, time) \
  43. init_nhm_param(nhm, NHM_EXCLUDE_TXON, NHM_EXCLUDE_CCA, NHM_CNT_ALL, NHM_ACS, NHM_LV_2, time)
  44. #define init_11K_high_nhm(nhm, time) \
  45. init_nhm_param(nhm, NHM_EXCLUDE_TXON, NHM_EXCLUDE_CCA, NHM_CNT_ALL, IEEE_11K_HIGH, NHM_LV_2, time)
  46. #define init_11K_low_nhm(nhm, time) \
  47. init_nhm_param(nhm, NHM_EXCLUDE_TXON, NHM_EXCLUDE_CCA, NHM_CNT_ALL, IEEE_11K_LOW, NHM_LV_2, time)
  48. #endif /*(RTK_ACS_VERSION == 3)*/
  49. void rtw_acs_version_dump(void *sel, _adapter *adapter);
  50. extern void phydm_ccx_monitor_trigger(void *p_dm_void, u16 monitor_time);
  51. extern void phydm_ccx_monitor_result(void *p_dm_void);
  52. #define GET_ACS_STATE(padapter) (ATOMIC_READ(&GET_HAL_DATA(padapter)->acs.state))
  53. #define SET_ACS_STATE(padapter, set_state) (ATOMIC_SET(&GET_HAL_DATA(padapter)->acs.state, set_state))
  54. #define IS_ACS_ENABLE(padapter) ((GET_ACS_STATE(padapter) == ACS_ENABLE) ? _TRUE : _FALSE)
  55. enum ACS_STATE {
  56. ACS_DISABLE,
  57. ACS_ENABLE,
  58. };
  59. #define ACS_BW_20M BIT(0)
  60. #define ACS_BW_40M BIT(1)
  61. #define ACS_BW_80M BIT(2)
  62. #define ACS_BW_160M BIT(3)
  63. struct auto_chan_sel {
  64. ATOMIC_T state;
  65. u8 trigger_ch;
  66. bool triggered;
  67. u8 clm_ratio[MAX_CHANNEL_NUM];
  68. u8 nhm_ratio[MAX_CHANNEL_NUM];
  69. #if (RTK_ACS_VERSION == 3)
  70. u8 nhm[MAX_CHANNEL_NUM][NHM_RPT_NUM];
  71. #endif
  72. u8 bss_nums[MAX_CHANNEL_NUM];
  73. u8 interference_time[MAX_CHANNEL_NUM];
  74. u8 cur_ch_clm_ratio;
  75. u8 cur_ch_nhm_ratio;
  76. u8 best_chan_5g;
  77. u8 best_chan_24g;
  78. #if (RTK_ACS_VERSION == 3)
  79. u8 trig_rst;
  80. struct env_trig_rpt trig_rpt;
  81. #endif
  82. #ifdef CONFIG_RTW_ACS_DBG
  83. RT_SCAN_TYPE scan_type;
  84. u16 scan_time;
  85. u8 igi;
  86. u8 bw;
  87. #endif
  88. };
  89. #define rtw_acs_get_best_chan_24g(adapter) (GET_HAL_DATA(adapter)->acs.best_chan_24g)
  90. #define rtw_acs_get_best_chan_5g(adapter) (GET_HAL_DATA(adapter)->acs.best_chan_5g)
  91. #ifdef CONFIG_RTW_ACS_DBG
  92. #define rtw_is_acs_passiv_scan(adapter) (((GET_HAL_DATA(adapter)->acs.scan_type) == SCAN_PASSIVE) ? _TRUE : _FALSE)
  93. #define rtw_acs_get_adv_st(adapter) (GET_HAL_DATA(adapter)->acs.scan_time)
  94. #define rtw_is_acs_st_valid(adapter) ((GET_HAL_DATA(adapter)->acs.scan_time) ? _TRUE : _FALSE)
  95. #define rtw_acs_get_adv_igi(adapter) (GET_HAL_DATA(adapter)->acs.igi)
  96. u8 rtw_is_acs_igi_valid(_adapter *adapter);
  97. #define rtw_acs_get_adv_bw(adapter) (GET_HAL_DATA(adapter)->acs.bw)
  98. void rtw_acs_adv_setting(_adapter *adapter, RT_SCAN_TYPE scan_type, u16 scan_time, u8 igi, u8 bw);
  99. void rtw_acs_adv_reset(_adapter *adapter);
  100. #endif
  101. u8 rtw_acs_get_clm_ratio_by_ch_num(_adapter *adapter, u8 chan);
  102. u8 rtw_acs_get_clm_ratio_by_ch_idx(_adapter *adapter, u8 ch_idx);
  103. u8 rtw_acs_get_nhm_ratio_by_ch_num(_adapter *adapter, u8 chan);
  104. u8 rtw_acs_get_num_ratio_by_ch_idx(_adapter *adapter, u8 ch_idx);
  105. void rtw_acs_reset(_adapter *adapter);
  106. void rtw_acs_trigger(_adapter *adapter, u16 scan_time_ms, u8 scan_chan, enum NHM_PID pid);
  107. void rtw_acs_get_rst(_adapter *adapter);
  108. void rtw_acs_select_best_chan(_adapter *adapter);
  109. void rtw_acs_info_dump(void *sel, _adapter *adapter);
  110. void rtw_acs_update_current_info(_adapter *adapter);
  111. void rtw_acs_chan_info_dump(void *sel, _adapter *adapter);
  112. void rtw_acs_current_info_dump(void *sel, _adapter *adapter);
  113. void rtw_acs_start(_adapter *adapter);
  114. void rtw_acs_stop(_adapter *adapter);
  115. #endif /*CONFIG_RTW_ACS*/
  116. #ifdef CONFIG_BACKGROUND_NOISE_MONITOR
  117. #define RTK_NOISE_MONITOR_VERSION 3
  118. #define GET_NM_STATE(padapter) (ATOMIC_READ(&GET_HAL_DATA(padapter)->nm.state))
  119. #define SET_NM_STATE(padapter, set_state) (ATOMIC_SET(&GET_HAL_DATA(padapter)->nm.state, set_state))
  120. #define IS_NM_ENABLE(padapter) ((GET_NM_STATE(padapter) == NM_ENABLE) ? _TRUE : _FALSE)
  121. enum NM_STATE {
  122. NM_DISABLE,
  123. NM_ENABLE,
  124. };
  125. struct noise_monitor {
  126. ATOMIC_T state;
  127. s16 noise[MAX_CHANNEL_NUM];
  128. u8 bss_nums[MAX_CHANNEL_NUM];
  129. };
  130. void rtw_nm_enable(_adapter *adapter);
  131. void rtw_nm_disable(_adapter *adapter);
  132. void rtw_noise_measure(_adapter *adapter, u8 chan, u8 is_pause_dig, u8 igi_value, u32 max_time);
  133. s16 rtw_noise_query_by_chan_num(_adapter *adapter, u8 chan);
  134. s16 rtw_noise_query_by_chan_idx(_adapter *adapter, u8 ch_idx);
  135. s16 rtw_noise_measure_curchan(_adapter *padapter);
  136. void rtw_noise_info_dump(void *sel, _adapter *adapter);
  137. #endif
  138. #endif /* __HAL_DM_ACS_H__ */