xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/rtl8822be/include/rtw_rf.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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	__RTW_RF_H_
21 #define __RTW_RF_H_
22 
23 
24 #define OFDM_PHY		1
25 #define MIXED_PHY		2
26 #define CCK_PHY		3
27 
28 #define NumRates	(13)
29 
30 /* slot time for 11g */
31 #define SHORT_SLOT_TIME					9
32 #define NON_SHORT_SLOT_TIME				20
33 
34 #define RTL8711_RF_MAX_SENS 6
35 #define RTL8711_RF_DEF_SENS 4
36 
37 /*
38  * We now define the following channels as the max channels in each channel plan.
39  * 2G, total 14 chnls
40  * {1,2,3,4,5,6,7,8,9,10,11,12,13,14}
41  * 5G, total 24 chnls
42  * {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} */
43 #define	MAX_CHANNEL_NUM_2G				14
44 #define	MAX_CHANNEL_NUM_5G				24
45 #define	MAX_CHANNEL_NUM					38/* 14+24 */
46 
47 #define CENTER_CH_2G_40M_NUM	9
48 #define CENTER_CH_2G_NUM		14
49 #define CENTER_CH_5G_20M_NUM	28	/* 20M center channels */
50 #define CENTER_CH_5G_40M_NUM	14	/* 40M center channels */
51 #define CENTER_CH_5G_80M_NUM	7	/* 80M center channels */
52 #define CENTER_CH_5G_160M_NUM	3	/* 160M center channels */
53 #define CENTER_CH_5G_ALL_NUM	(CENTER_CH_5G_20M_NUM + CENTER_CH_5G_40M_NUM + CENTER_CH_5G_80M_NUM)
54 
55 extern u8 center_ch_5g_20m[CENTER_CH_5G_20M_NUM];
56 extern u8 center_ch_5g_40m[CENTER_CH_5G_40M_NUM];
57 extern u8 center_ch_5g_80m[CENTER_CH_5G_80M_NUM];
58 extern u8 center_ch_5g_all[CENTER_CH_5G_ALL_NUM];
59 
60 u8 center_chs_5g_num(u8 bw);
61 u8 center_chs_5g(u8 bw, u8 id);
62 
63 u8 rtw_get_op_chs_by_cch_bw(u8 cch, u8 bw, u8 **op_chs, u8 *op_ch_num);
64 
65 /* #define NUM_REGULATORYS	21 */
66 #define NUM_REGULATORYS	1
67 
68 /* Country codes */
69 #define USA							0x555320
70 #define EUROPE						0x1 /* temp, should be provided later	 */
71 #define JAPAN						0x2 /* temp, should be provided later	 */
72 
73 struct	regulatory_class {
74 	u32	starting_freq;					/* MHz, */
75 	u8	channel_set[MAX_CHANNEL_NUM];
76 	u8	channel_cck_power[MAX_CHANNEL_NUM];/* dbm */
77 	u8	channel_ofdm_power[MAX_CHANNEL_NUM];/* dbm */
78 	u8	txpower_limit;  				/* dbm */
79 	u8	channel_spacing;				/* MHz */
80 	u8	modem;
81 };
82 
83 typedef enum _CAPABILITY {
84 	cESS			= 0x0001,
85 	cIBSS			= 0x0002,
86 	cPollable		= 0x0004,
87 	cPollReq			= 0x0008,
88 	cPrivacy		= 0x0010,
89 	cShortPreamble	= 0x0020,
90 	cPBCC			= 0x0040,
91 	cChannelAgility	= 0x0080,
92 	cSpectrumMgnt	= 0x0100,
93 	cQos			= 0x0200,	/* For HCCA, use with CF-Pollable and CF-PollReq */
94 	cShortSlotTime	= 0x0400,
95 	cAPSD			= 0x0800,
96 	cRM				= 0x1000,	/* RRM (Radio Request Measurement) */
97 	cDSSS_OFDM	= 0x2000,
98 	cDelayedBA		= 0x4000,
99 	cImmediateBA	= 0x8000,
100 } CAPABILITY, *PCAPABILITY;
101 
102 enum	_REG_PREAMBLE_MODE {
103 	PREAMBLE_LONG	= 1,
104 	PREAMBLE_AUTO	= 2,
105 	PREAMBLE_SHORT	= 3,
106 };
107 
108 
109 enum _RTL8712_RF_MIMO_CONFIG_ {
110 	RTL8712_RFCONFIG_1T = 0x10,
111 	RTL8712_RFCONFIG_2T = 0x20,
112 	RTL8712_RFCONFIG_1R = 0x01,
113 	RTL8712_RFCONFIG_2R = 0x02,
114 	RTL8712_RFCONFIG_1T1R = 0x11,
115 	RTL8712_RFCONFIG_1T2R = 0x12,
116 	RTL8712_RFCONFIG_TURBO = 0x92,
117 	RTL8712_RFCONFIG_2T2R = 0x22
118 };
119 
120 typedef enum _RF_PATH {
121 	RF_PATH_A = 0,
122 	RF_PATH_B = 1,
123 	RF_PATH_C = 2,
124 	RF_PATH_D = 3,
125 } RF_PATH, *PRF_PATH;
126 
127 #define rf_path_char(path) (((path) >= RF_PATH_MAX) ? 'X' : 'A' + (path))
128 
129 /* Bandwidth Offset */
130 #define HAL_PRIME_CHNL_OFFSET_DONT_CARE	0
131 #define HAL_PRIME_CHNL_OFFSET_LOWER	1
132 #define HAL_PRIME_CHNL_OFFSET_UPPER	2
133 
134 typedef enum _BAND_TYPE {
135 	BAND_ON_2_4G = 0,
136 	BAND_ON_5G = 1,
137 	BAND_ON_BOTH = 2,
138 	BAND_MAX = 3,
139 } BAND_TYPE, *PBAND_TYPE;
140 
141 extern const char *const _band_str[];
142 #define band_str(band) (((band) >= BAND_MAX) ? _band_str[BAND_MAX] : _band_str[(band)])
143 
144 extern const u8 _band_to_band_cap[];
145 #define band_to_band_cap(band) (((band) >= BAND_MAX) ? _band_to_band_cap[BAND_MAX] : _band_to_band_cap[(band)])
146 
147 /* Represent Channel Width in HT Capabilities
148  *   */
149 typedef enum _CHANNEL_WIDTH {
150 	CHANNEL_WIDTH_20 = 0,
151 	CHANNEL_WIDTH_40 = 1,
152 	CHANNEL_WIDTH_80 = 2,
153 	CHANNEL_WIDTH_160 = 3,
154 	CHANNEL_WIDTH_80_80 = 4,
155 	CHANNEL_WIDTH_MAX = 5,
156 } CHANNEL_WIDTH, *PCHANNEL_WIDTH;
157 
158 extern const char *const _ch_width_str[];
159 #define ch_width_str(bw) (((bw) >= CHANNEL_WIDTH_MAX) ? _ch_width_str[CHANNEL_WIDTH_MAX] : _ch_width_str[(bw)])
160 
161 extern const u8 _ch_width_to_bw_cap[];
162 #define ch_width_to_bw_cap(bw) (((bw) >= CHANNEL_WIDTH_MAX) ? _ch_width_to_bw_cap[CHANNEL_WIDTH_MAX] : _ch_width_to_bw_cap[(bw)])
163 
164 /*
165  * Represent Extention Channel Offset in HT Capabilities
166  * This is available only in 40Mhz mode.
167  *   */
168 typedef enum _EXTCHNL_OFFSET {
169 	EXTCHNL_OFFSET_NO_EXT = 0,
170 	EXTCHNL_OFFSET_UPPER = 1,
171 	EXTCHNL_OFFSET_NO_DEF = 2,
172 	EXTCHNL_OFFSET_LOWER = 3,
173 } EXTCHNL_OFFSET, *PEXTCHNL_OFFSET;
174 
175 typedef enum _VHT_DATA_SC {
176 	VHT_DATA_SC_DONOT_CARE = 0,
177 	VHT_DATA_SC_20_UPPER_OF_80MHZ = 1,
178 	VHT_DATA_SC_20_LOWER_OF_80MHZ = 2,
179 	VHT_DATA_SC_20_UPPERST_OF_80MHZ = 3,
180 	VHT_DATA_SC_20_LOWEST_OF_80MHZ = 4,
181 	VHT_DATA_SC_20_RECV1 = 5,
182 	VHT_DATA_SC_20_RECV2 = 6,
183 	VHT_DATA_SC_20_RECV3 = 7,
184 	VHT_DATA_SC_20_RECV4 = 8,
185 	VHT_DATA_SC_40_UPPER_OF_80MHZ = 9,
186 	VHT_DATA_SC_40_LOWER_OF_80MHZ = 10,
187 } VHT_DATA_SC, *PVHT_DATA_SC_E;
188 
189 typedef enum _PROTECTION_MODE {
190 	PROTECTION_MODE_AUTO = 0,
191 	PROTECTION_MODE_FORCE_ENABLE = 1,
192 	PROTECTION_MODE_FORCE_DISABLE = 2,
193 } PROTECTION_MODE, *PPROTECTION_MODE;
194 
195 typedef	enum _RT_RF_TYPE_DEFINITION {
196 	RF_1T2R = 0,
197 	RF_2T4R = 1,
198 	RF_2T2R = 2,
199 	RF_1T1R = 3,
200 	RF_2T2R_GREEN = 4,
201 	RF_2T3R = 5,
202 	RF_3T3R = 6,
203 	RF_3T4R	= 7,
204 	RF_4T4R	= 8,
205 
206 	RF_MAX_TYPE = 0xF, /* u1Byte */
207 } RT_RF_TYPE_DEF_E;
208 
209 int rtw_ch2freq(int chan);
210 int rtw_freq2ch(int freq);
211 bool rtw_chbw_to_freq_range(u8 ch, u8 bw, u8 offset, u32 *hi, u32 *lo);
212 
213 #define RTW_MODULE_RTL8821AE_HMC_M2		BIT0 /* RTL8821AE(HMC + M.2) */
214 #define RTW_MODULE_RTL8821AU			BIT1 /* RTL8821AU */
215 #define RTW_MODULE_RTL8812AENF_NGFF		BIT2 /* RTL8812AENF(8812AE+8761)_NGFF */
216 #define RTW_MODULE_RTL8812AEBT_HMC		BIT3 /* RTL8812AEBT(8812AE+8761)_HMC */
217 #define RTW_MODULE_RTL8188EE_HMC_M2		BIT4 /* RTL8188EE(HMC + M.2) */
218 #define RTW_MODULE_RTL8723BE_HMC_M2		BIT5 /* RTL8723BE(HMC + M.2) */
219 #define RTW_MODULE_RTL8723BS_NGFF1216	BIT6 /* RTL8723BS(NGFF1216) */
220 #define RTW_MODULE_RTL8192EEBT_HMC_M2	BIT7 /* RTL8192EEBT(8192EE+8761AU)_(HMC + M.2) */
221 
222 #define IS_ALPHA2_NO_SPECIFIED(_alpha2) ((*((u16 *)(_alpha2))) == 0xFFFF)
223 
224 struct country_chplan {
225 	char alpha2[2];
226 	u8 chplan;
227 #ifdef CONFIG_80211AC_VHT
228 	u8 en_11ac;
229 #endif
230 #if RTW_DEF_MODULE_REGULATORY_CERT
231 	u8 def_module_flags; /* RTW_MODULE_RTLXXX */
232 #endif
233 };
234 
235 #ifdef CONFIG_80211AC_VHT
236 	#define COUNTRY_CHPLAN_EN_11AC(_ent) ((_ent)->en_11ac)
237 #else
238 	#define COUNTRY_CHPLAN_EN_11AC(_ent) 0
239 #endif
240 
241 #if RTW_DEF_MODULE_REGULATORY_CERT
242 	#define COUNTRY_CHPLAN_DEF_MODULE_FALGS(_ent) ((_ent)->def_module_flags)
243 #else
244 	#define COUNTRY_CHPLAN_DEF_MODULE_FALGS(_ent) 0
245 #endif
246 
247 const struct country_chplan *rtw_get_chplan_from_country(const char *country_code);
248 
249 #define BB_GAIN_2G 0
250 #ifdef CONFIG_IEEE80211_BAND_5GHZ
251 	#define BB_GAIN_5GLB1 1
252 	#define BB_GAIN_5GLB2 2
253 	#define BB_GAIN_5GMB1 3
254 	#define BB_GAIN_5GMB2 4
255 	#define BB_GAIN_5GHB 5
256 #endif
257 
258 #ifdef CONFIG_IEEE80211_BAND_5GHZ
259 	#define BB_GAIN_NUM 6
260 #else
261 	#define BB_GAIN_NUM 1
262 #endif
263 
264 int rtw_ch_to_bb_gain_sel(int ch);
265 void rtw_rf_set_tx_gain_offset(_adapter *adapter, u8 path, s8 offset);
266 void rtw_rf_apply_tx_gain_offset(_adapter *adapter, u8 ch);
267 
268 bool rtw_is_dfs_range(u32 hi, u32 lo);
269 bool rtw_is_dfs_ch(u8 ch, u8 bw, u8 offset);
270 bool rtw_is_long_cac_range(u32 hi, u32 lo, u8 dfs_region);
271 bool rtw_is_long_cac_ch(u8 ch, u8 bw, u8 offset, u8 dfs_region);
272 
273 #endif /* _RTL8711_RF_H_ */
274