• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  * Copyright(c) 2016 - 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 #include <hal_btcoex_wifionly.h>
16 
17 #if (CONFIG_BTCOEX_SUPPORT_WIFI_ONLY_CFG == 1)
18 
19 #include "btc/mp_precomp.h"
20 
21 struct  wifi_only_cfg GLBtCoexistWifiOnly;
22 
halwifionly_write1byte(void * pwifionlyContext,u32 RegAddr,u8 Data)23 void halwifionly_write1byte(void *pwifionlyContext, u32 RegAddr, u8 Data)
24 {
25 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
26 	PADAPTER		Adapter = pwifionlycfg->Adapter;
27 
28 	rtw_write8(Adapter, RegAddr, Data);
29 }
30 
halwifionly_write2byte(void * pwifionlyContext,u32 RegAddr,u16 Data)31 void halwifionly_write2byte(void *pwifionlyContext, u32 RegAddr, u16 Data)
32 {
33 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
34 	PADAPTER		Adapter = pwifionlycfg->Adapter;
35 
36 	rtw_write16(Adapter, RegAddr, Data);
37 }
38 
halwifionly_write4byte(void * pwifionlyContext,u32 RegAddr,u32 Data)39 void halwifionly_write4byte(void *pwifionlyContext, u32 RegAddr, u32 Data)
40 {
41 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
42 	PADAPTER		Adapter = pwifionlycfg->Adapter;
43 
44 	rtw_write32(Adapter, RegAddr, Data);
45 }
46 
halwifionly_read1byte(void * pwifionlyContext,u32 RegAddr)47 u8 halwifionly_read1byte(void *pwifionlyContext, u32 RegAddr)
48 {
49 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
50 	PADAPTER		Adapter = pwifionlycfg->Adapter;
51 
52 	return rtw_read8(Adapter, RegAddr);
53 }
54 
halwifionly_read2byte(void * pwifionlyContext,u32 RegAddr)55 u16 halwifionly_read2byte(void * pwifionlyContext, u32 RegAddr)
56 {
57 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
58 	PADAPTER		Adapter = pwifionlycfg->Adapter;
59 
60 	return rtw_read16(Adapter, RegAddr);
61 }
62 
halwifionly_read4byte(void * pwifionlyContext,u32 RegAddr)63 u32 halwifionly_read4byte(void *pwifionlyContext, u32 RegAddr)
64 {
65 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
66 	PADAPTER		Adapter = pwifionlycfg->Adapter;
67 
68 	return rtw_read32(Adapter, RegAddr);
69 }
70 
halwifionly_bitmaskwrite1byte(void * pwifionlyContext,u32 regAddr,u8 bitMask,u8 data)71 void halwifionly_bitmaskwrite1byte(void *pwifionlyContext, u32 regAddr, u8 bitMask, u8 data)
72 {
73 	u8 originalValue, bitShift = 0;
74 	u8 i;
75 
76 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
77 	PADAPTER		Adapter = pwifionlycfg->Adapter;
78 
79 	if (bitMask != 0xff) {
80 		originalValue = rtw_read8(Adapter, regAddr);
81 		for (i = 0; i <= 7; i++) {
82 			if ((bitMask >> i) & 0x1)
83 				break;
84 		}
85 		bitShift = i;
86 		data = ((originalValue) & (~bitMask)) | (((data << bitShift)) & bitMask);
87 	}
88 	rtw_write8(Adapter, regAddr, data);
89 }
90 
halwifionly_phy_set_rf_reg(void * pwifionlyContext,enum rf_path eRFPath,u32 RegAddr,u32 BitMask,u32 Data)91 void halwifionly_phy_set_rf_reg(void *pwifionlyContext, enum rf_path eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
92 {
93 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
94 	PADAPTER		Adapter = pwifionlycfg->Adapter;
95 
96 	phy_set_rf_reg(Adapter, eRFPath, RegAddr, BitMask, Data);
97 }
98 
halwifionly_phy_set_bb_reg(void * pwifionlyContext,u32 RegAddr,u32 BitMask,u32 Data)99 void halwifionly_phy_set_bb_reg(void *pwifionlyContext, u32 RegAddr, u32 BitMask, u32 Data)
100 {
101 	struct wifi_only_cfg *pwifionlycfg = (struct wifi_only_cfg *)pwifionlyContext;
102 	PADAPTER		Adapter = pwifionlycfg->Adapter;
103 
104 	phy_set_bb_reg(Adapter, RegAddr, BitMask, Data);
105 }
106 
hal_btcoex_wifionly_switchband_notify(PADAPTER padapter)107 void hal_btcoex_wifionly_switchband_notify(PADAPTER padapter)
108 {
109 	HAL_DATA_TYPE	*pHalData = GET_HAL_DATA(padapter);
110 	u8 is_5g = _FALSE;
111 
112 	if (pHalData->current_band_type == BAND_ON_5G)
113 		is_5g = _TRUE;
114 
115 	if (IS_HARDWARE_TYPE_8822B(padapter)) {
116 #ifdef CONFIG_RTL8822B
117 		ex_hal8822b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
118 #endif
119 	}
120 
121 #ifdef CONFIG_RTL8821C
122 	else if (IS_HARDWARE_TYPE_8821C(padapter))
123 		ex_hal8821c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
124 #endif
125 
126 #ifdef CONFIG_RTL8822C
127 	else if (IS_HARDWARE_TYPE_8822C(padapter))
128 		ex_hal8822c_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
129 #endif
130 
131 #ifdef CONFIG_RTL8814B
132 	else if (IS_HARDWARE_TYPE_8814B(padapter))
133 		ex_hal8814b_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
134 #endif
135 
136 #ifdef CONFIG_RTL8723F
137 	else if (IS_HARDWARE_TYPE_8723F(padapter))
138 		ex_hal8723f_wifi_only_switchbandnotify(&GLBtCoexistWifiOnly, is_5g);
139 #endif
140 }
141 
hal_btcoex_wifionly_scan_notify(PADAPTER padapter)142 void hal_btcoex_wifionly_scan_notify(PADAPTER padapter)
143 {
144 	HAL_DATA_TYPE	*pHalData = GET_HAL_DATA(padapter);
145 	u8 is_5g = _FALSE;
146 
147 	if (pHalData->current_band_type == BAND_ON_5G)
148 		is_5g = _TRUE;
149 
150 	if (IS_HARDWARE_TYPE_8822B(padapter)) {
151 #ifdef CONFIG_RTL8822B
152 		ex_hal8822b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
153 #endif
154 	}
155 
156 #ifdef CONFIG_RTL8821C
157 	else if (IS_HARDWARE_TYPE_8821C(padapter))
158 		ex_hal8821c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
159 #endif
160 
161 #ifdef CONFIG_RTL8822C
162 	else if (IS_HARDWARE_TYPE_8822C(padapter))
163 		ex_hal8822c_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
164 #endif
165 
166 #ifdef CONFIG_RTL8814B
167 	else if (IS_HARDWARE_TYPE_8814B(padapter))
168 		ex_hal8814b_wifi_only_scannotify(&GLBtCoexistWifiOnly, is_5g);
169 #endif
170 }
171 
hal_btcoex_wifionly_connect_notify(PADAPTER padapter)172 void hal_btcoex_wifionly_connect_notify(PADAPTER padapter)
173 {
174 	HAL_DATA_TYPE	*pHalData = GET_HAL_DATA(padapter);
175 	u8 is_5g = _FALSE;
176 
177 	if (pHalData->current_band_type == BAND_ON_5G)
178 		is_5g = _TRUE;
179 
180 	if (IS_HARDWARE_TYPE_8822B(padapter)) {
181 #ifdef CONFIG_RTL8822B
182 		ex_hal8822b_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
183 #endif
184 	}
185 
186 #ifdef CONFIG_RTL8821C
187 	else if (IS_HARDWARE_TYPE_8821C(padapter))
188 		ex_hal8821c_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
189 #endif
190 
191 #ifdef CONFIG_RTL8822C
192 	else if (IS_HARDWARE_TYPE_8822C(padapter))
193 		ex_hal8822c_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
194 #endif
195 
196 #ifdef CONFIG_RTL8814B
197 	else if (IS_HARDWARE_TYPE_8814B(padapter))
198 		ex_hal8814b_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
199 #endif
200 
201 #ifdef CONFIG_RTL8723F
202 	else if (IS_HARDWARE_TYPE_8723F(padapter))
203 		ex_hal8723f_wifi_only_connectnotify(&GLBtCoexistWifiOnly, is_5g);
204 #endif
205 }
206 
hal_btcoex_wifionly_hw_config(PADAPTER padapter)207 void hal_btcoex_wifionly_hw_config(PADAPTER padapter)
208 {
209 	struct wifi_only_cfg *pwifionlycfg = &GLBtCoexistWifiOnly;
210 
211 	if (IS_HARDWARE_TYPE_8723B(padapter)) {
212 #ifdef CONFIG_RTL8723B
213 		ex_hal8723b_wifi_only_hw_config(pwifionlycfg);
214 #endif
215 	}
216 
217 #ifdef CONFIG_RTL8822B
218 	else if (IS_HARDWARE_TYPE_8822B(padapter))
219 		ex_hal8822b_wifi_only_hw_config(pwifionlycfg);
220 #endif
221 
222 #ifdef CONFIG_RTL8821C
223 	else if (IS_HARDWARE_TYPE_8821C(padapter))
224 		ex_hal8821c_wifi_only_hw_config(pwifionlycfg);
225 #endif
226 
227 #ifdef CONFIG_RTL8822C
228 	else if (IS_HARDWARE_TYPE_8822C(padapter))
229 		ex_hal8822c_wifi_only_hw_config(pwifionlycfg);
230 #endif
231 
232 #ifdef CONFIG_RTL8814B
233 	else if (IS_HARDWARE_TYPE_8814B(padapter))
234 		ex_hal8814b_wifi_only_hw_config(pwifionlycfg);
235 #endif
236 
237 #ifdef CONFIG_RTL8723F
238 	else if (IS_HARDWARE_TYPE_8723F(padapter))
239 		ex_hal8723f_wifi_only_hw_config(pwifionlycfg);
240 #endif
241 }
242 
hal_btcoex_wifionly_initlizevariables(PADAPTER padapter)243 void hal_btcoex_wifionly_initlizevariables(PADAPTER padapter)
244 {
245 	struct wifi_only_cfg		*pwifionlycfg = &GLBtCoexistWifiOnly;
246 	struct wifi_only_haldata	*pwifionly_haldata = &pwifionlycfg->haldata_info;
247 	HAL_DATA_TYPE	*pHalData = GET_HAL_DATA(padapter);
248 
249 	_rtw_memset(&GLBtCoexistWifiOnly, 0, sizeof(GLBtCoexistWifiOnly));
250 
251 	pwifionlycfg->Adapter = padapter;
252 
253 #ifdef CONFIG_PCI_HCI
254 	pwifionlycfg->chip_interface = WIFIONLY_INTF_PCI;
255 #elif defined(CONFIG_USB_HCI)
256 	pwifionlycfg->chip_interface = WIFIONLY_INTF_USB;
257 #elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
258 	pwifionlycfg->chip_interface = WIFIONLY_INTF_SDIO;
259 #else
260 	pwifionlycfg->chip_interface = WIFIONLY_INTF_UNKNOWN;
261 #endif
262 
263 	pwifionly_haldata->customer_id = CUSTOMER_NORMAL;
264 }
265 
hal_btcoex_wifionly_AntInfoSetting(PADAPTER padapter)266 void hal_btcoex_wifionly_AntInfoSetting(PADAPTER padapter)
267 {
268 	struct wifi_only_cfg		*pwifionlycfg = &GLBtCoexistWifiOnly;
269 	struct wifi_only_haldata	*pwifionly_haldata = &pwifionlycfg->haldata_info;
270 	HAL_DATA_TYPE	*pHalData = GET_HAL_DATA(padapter);
271 
272 	pwifionly_haldata->efuse_pg_antnum = pHalData->EEPROMBluetoothAntNum;
273 	pwifionly_haldata->efuse_pg_antpath = pHalData->ant_path;
274 	pwifionly_haldata->rfe_type = pHalData->rfe_type;
275 	pwifionly_haldata->ant_div_cfg = pHalData->AntDivCfg;
276 }
277 
278 #endif
279 
280