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