• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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