blob: 4a1305fc84646db8fac2d4be683fce4c8ed06296 [file] [log] [blame]
Sourav Mohapatra113685f2018-08-29 14:21:55 +05301/*
Harprit Chhabadad59ae762019-01-08 16:40:43 -08002 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
Sourav Mohapatra113685f2018-08-29 14:21:55 +05303 *
4 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
17 */
18/**
19 * DOC: define internal APIs related to the fwol component
20 */
21
22#include "wlan_fw_offload_main.h"
Harprit Chhabadad59ae762019-01-08 16:40:43 -080023#include "cds_api.h"
24#include "wma.h"
Sourav Mohapatra113685f2018-08-29 14:21:55 +053025
26struct wlan_fwol_psoc_obj *fwol_get_psoc_obj(struct wlan_objmgr_psoc *psoc)
27{
28 return wlan_objmgr_psoc_get_comp_private_obj(psoc,
29 WLAN_UMAC_COMP_FWOL);
30}
31
stonezc9936cb2019-03-11 16:41:22 +080032/**
33 * fwol_mpta_helper_config_get: Populate btc_mpta_helper_enable from cfg
34 * @psoc: The global psoc handler
35 * @coex_config: The cfg structure
36 *
37 * Return: none
38 */
39#ifdef FEATURE_MPTA_HELPER
40static void
41fwol_mpta_helper_config_get(struct wlan_objmgr_psoc *psoc,
42 struct wlan_fwol_coex_config *coex_config)
43{
44 coex_config->btc_mpta_helper_enable =
45 cfg_get(psoc, CFG_COEX_MPTA_HELPER);
46}
47#else
48static void
49fwol_mpta_helper_config_get(struct wlan_objmgr_psoc *psoc,
50 struct wlan_fwol_coex_config *coex_config)
51{
52}
53#endif
54
Dundi Raviteja3b637092018-09-12 13:42:50 +053055static void
Dundi Raviteja85a240a2018-09-10 15:03:07 +053056fwol_init_coex_config_in_cfg(struct wlan_objmgr_psoc *psoc,
57 struct wlan_fwol_coex_config *coex_config)
Dundi Raviteja3b637092018-09-12 13:42:50 +053058{
59 coex_config->btc_mode = cfg_get(psoc, CFG_BTC_MODE);
60 coex_config->antenna_isolation = cfg_get(psoc, CFG_ANTENNA_ISOLATION);
61 coex_config->max_tx_power_for_btc =
62 cfg_get(psoc, CFG_MAX_TX_POWER_FOR_BTC);
63 coex_config->wlan_low_rssi_threshold =
64 cfg_get(psoc, CFG_WLAN_LOW_RSSI_THRESHOLD);
65 coex_config->bt_low_rssi_threshold =
66 cfg_get(psoc, CFG_BT_LOW_RSSI_THRESHOLD);
67 coex_config->bt_interference_low_ll =
68 cfg_get(psoc, CFG_BT_INTERFERENCE_LOW_LL);
69 coex_config->bt_interference_low_ul =
70 cfg_get(psoc, CFG_BT_INTERFERENCE_LOW_UL);
71 coex_config->bt_interference_medium_ll =
72 cfg_get(psoc, CFG_BT_INTERFERENCE_MEDIUM_LL);
73 coex_config->bt_interference_medium_ul =
74 cfg_get(psoc, CFG_BT_INTERFERENCE_MEDIUM_UL);
75 coex_config->bt_interference_high_ll =
76 cfg_get(psoc, CFG_BT_INTERFERENCE_HIGH_LL);
77 coex_config->bt_interference_high_ul =
78 cfg_get(psoc, CFG_BT_INTERFERENCE_HIGH_UL);
stonezc9936cb2019-03-11 16:41:22 +080079 fwol_mpta_helper_config_get(psoc, coex_config);
Dundi Raviteja3b637092018-09-12 13:42:50 +053080}
81
Dundi Raviteja47ac7092018-09-07 10:40:28 +053082static void
Dundi Raviteja85a240a2018-09-10 15:03:07 +053083fwol_init_thermal_temp_in_cfg(struct wlan_objmgr_psoc *psoc,
84 struct wlan_fwol_thermal_temp *thermal_temp)
Dundi Raviteja47ac7092018-09-07 10:40:28 +053085{
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080086 thermal_temp->thermal_temp_min_level[0] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053087 cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL0);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080088 thermal_temp->thermal_temp_max_level[0] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053089 cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL0);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080090 thermal_temp->thermal_temp_min_level[1] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053091 cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL1);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080092 thermal_temp->thermal_temp_max_level[1] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053093 cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL1);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080094 thermal_temp->thermal_temp_min_level[2] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053095 cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL2);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080096 thermal_temp->thermal_temp_max_level[2] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053097 cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL2);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -080098 thermal_temp->thermal_temp_min_level[3] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +053099 cfg_get(psoc, CFG_THERMAL_TEMP_MIN_LEVEL3);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -0800100 thermal_temp->thermal_temp_max_level[3] =
Dundi Raviteja47ac7092018-09-07 10:40:28 +0530101 cfg_get(psoc, CFG_THERMAL_TEMP_MAX_LEVEL3);
Manikandan Mohan9045e2e2018-11-26 16:44:19 -0800102
103 thermal_temp->thermal_mitigation_enable =
104 cfg_get(psoc, CFG_THERMAL_MITIGATION_ENABLE);
105 thermal_temp->throttle_period = cfg_get(psoc, CFG_THROTTLE_PERIOD);
106 thermal_temp->throttle_dutycycle_level[0] =
107 cfg_get(psoc, CFG_THROTTLE_DUTY_CYCLE_LEVEL0);
108 thermal_temp->throttle_dutycycle_level[1]=
109 cfg_get(psoc, CFG_THROTTLE_DUTY_CYCLE_LEVEL1);
110 thermal_temp->throttle_dutycycle_level[2]=
111 cfg_get(psoc, CFG_THROTTLE_DUTY_CYCLE_LEVEL2);
112 thermal_temp->throttle_dutycycle_level[3]=
113 cfg_get(psoc, CFG_THROTTLE_DUTY_CYCLE_LEVEL3);
Dundi Raviteja47ac7092018-09-07 10:40:28 +0530114}
115
Manikandan Mohan06d38d82018-11-26 18:36:58 -0800116QDF_STATUS fwol_init_neighbor_report_cfg(struct wlan_objmgr_psoc *psoc,
117 struct wlan_fwol_neighbor_report_cfg
118 *fwol_neighbor_report_cfg)
119{
120 if (!fwol_neighbor_report_cfg) {
121 fwol_err("Neighbor report config pointer null");
122 return QDF_STATUS_E_FAILURE;
123 }
124
125 fwol_neighbor_report_cfg->enable_bitmask =
126 cfg_get(psoc, CFG_OFFLOAD_11K_ENABLE_BITMASK);
127 fwol_neighbor_report_cfg->params_bitmask =
128 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK);
129 fwol_neighbor_report_cfg->time_offset =
130 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET);
131 fwol_neighbor_report_cfg->low_rssi_offset =
132 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET);
133 fwol_neighbor_report_cfg->bmiss_count_trigger =
134 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER);
135 fwol_neighbor_report_cfg->per_threshold_offset =
136 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET);
137 fwol_neighbor_report_cfg->cache_timeout =
138 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT);
139 fwol_neighbor_report_cfg->max_req_cap =
140 cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP);
141
142 return QDF_STATUS_SUCCESS;
143}
144
Harprit Chhabadad59ae762019-01-08 16:40:43 -0800145QDF_STATUS
146fwol_init_adapt_dwelltime_in_cfg(
147 struct wlan_objmgr_psoc *psoc,
148 struct adaptive_dwelltime_params *dwelltime_params)
149{
150 if (!dwelltime_params) {
151 fwol_err("dwelltime params config pointer null");
152 return QDF_STATUS_E_FAILURE;
153 }
154 dwelltime_params->is_enabled =
155 cfg_get(psoc, CFG_ADAPTIVE_DWELL_MODE_ENABLED);
156 dwelltime_params->dwelltime_mode =
157 cfg_get(psoc, CFG_GLOBAL_ADAPTIVE_DWELL_MODE);
158 dwelltime_params->lpf_weight =
159 cfg_get(psoc, CFG_ADAPT_DWELL_LPF_WEIGHT);
160 dwelltime_params->passive_mon_intval =
161 cfg_get(psoc, CFG_ADAPT_DWELL_PASMON_INTVAL);
162 dwelltime_params->wifi_act_threshold =
163 cfg_get(psoc, CFG_ADAPT_DWELL_WIFI_THRESH);
164
165 return QDF_STATUS_SUCCESS;
166}
167
168QDF_STATUS
169fwol_set_adaptive_dwelltime_config(
170 struct adaptive_dwelltime_params *dwelltime_params)
171{
172 tp_wma_handle wma_handle;
173 QDF_STATUS status;
174
175 wma_handle = cds_get_context(QDF_MODULE_ID_WMA);
176 if (!wma_handle) {
177 fwol_err("wma handle is null");
178 return QDF_STATUS_E_FAILURE;
179 }
180 status = wma_send_adapt_dwelltime_params(wma_handle,
181 dwelltime_params);
182 return status;
183}
Dundi Raviteja9ab4e7b2018-09-28 14:18:28 +0530184/**
185 * fwol_parse_probe_req_ouis - form ouis from ini gProbeReqOUIs
186 * @psoc: Pointer to struct wlan_objmgr_psoc context
187 * @whitelist: Pointer to struct wlan_fwol_ie_whitelist
188 *
189 * This function parses the ini string gProbeReqOUIs which needs be to in the
190 * following format:
191 * "<8 characters of [0-9] or [A-F]>space<8 characters from [0-9] etc.,"
192 * example: "AABBCCDD 1122EEFF"
193 * and the logic counts the number of OUIS and allocates the memory
194 * for every valid OUI and is stored in struct hdd_context
195 *
196 * Return: None
197 */
198static void fwol_parse_probe_req_ouis(struct wlan_objmgr_psoc *psoc,
199 struct wlan_fwol_ie_whitelist *whitelist)
200{
201 uint8_t probe_req_ouis[MAX_PRB_REQ_VENDOR_OUI_INI_LEN] = {0};
202 uint32_t *voui = whitelist->probe_req_voui;
203 char *str;
204 uint8_t *token;
205 uint32_t oui_indx = 0;
206 int ret;
207 uint32_t hex_value;
208
209 qdf_str_lcopy(probe_req_ouis, cfg_get(psoc, CFG_PROBE_REQ_OUI),
210 MAX_PRB_REQ_VENDOR_OUI_INI_LEN);
211 str = probe_req_ouis;
212 whitelist->no_of_probe_req_ouis = 0;
213
214 if (!qdf_str_len(str)) {
215 fwol_info("NO OUIs to parse");
216 return;
217 }
218
219 token = strsep(&str, " ");
220 while (token) {
221 if (qdf_str_len(token) != 8)
222 goto next_token;
223
224 ret = qdf_kstrtouint(token, 16, &hex_value);
225 if (ret)
226 goto next_token;
227
228 voui[oui_indx++] = cpu_to_be32(hex_value);
229 if (oui_indx >= MAX_PROBE_REQ_OUIS)
230 break;
231next_token:
232 token = strsep(&str, " ");
233 }
234
235 if (!oui_indx) {
236 whitelist->ie_whitelist = false;
237 return;
238 }
239
240 whitelist->no_of_probe_req_ouis = oui_indx;
241}
242
243/**
244 * fwol_validate_ie_bitmaps() - Validate all IE whitelist bitmap param values
245 * @psoc: Pointer to struct wlan_objmgr_psoc
246 * @whitelist: Pointer to struct wlan_fwol_ie_whitelist
247 *
248 * Return: True if all bitmap values are valid, else false
249 */
250static bool fwol_validate_ie_bitmaps(struct wlan_objmgr_psoc *psoc,
251 struct wlan_fwol_ie_whitelist *whitelist)
252{
253 if (!(whitelist->ie_bitmap_0 && whitelist->ie_bitmap_1 &&
254 whitelist->ie_bitmap_2 && whitelist->ie_bitmap_3 &&
255 whitelist->ie_bitmap_4 && whitelist->ie_bitmap_5 &&
256 whitelist->ie_bitmap_6 && whitelist->ie_bitmap_7))
257 return false;
258
259 /*
260 * check whether vendor oui IE is set and OUIs are present, each OUI
261 * is entered in the form of string of 8 characters from ini, therefore,
262 * for atleast one OUI, minimum length is 8 and hence this string length
263 * is checked for minimum of 8
264 */
265 if ((whitelist->ie_bitmap_6 & VENDOR_SPECIFIC_IE_BITMAP) &&
266 (qdf_str_len(cfg_get(psoc, CFG_PROBE_REQ_OUI)) < 8))
267 return false;
268
269 /* check whether vendor oui IE is not set but OUIs are present */
270 if (!(whitelist->ie_bitmap_6 & VENDOR_SPECIFIC_IE_BITMAP) &&
271 (qdf_str_len(cfg_get(psoc, CFG_PROBE_REQ_OUI)) > 0))
272 return false;
273
274 return true;
275}
276
Dundi Raviteja85a240a2018-09-10 15:03:07 +0530277static void
278fwol_init_ie_whiltelist_in_cfg(struct wlan_objmgr_psoc *psoc,
279 struct wlan_fwol_ie_whitelist *whitelist)
280{
281 whitelist->ie_whitelist = cfg_get(psoc, CFG_PROBE_REQ_IE_WHITELIST);
282 whitelist->ie_bitmap_0 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP0);
283 whitelist->ie_bitmap_1 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP1);
284 whitelist->ie_bitmap_2 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP2);
285 whitelist->ie_bitmap_3 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP3);
286 whitelist->ie_bitmap_4 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP4);
287 whitelist->ie_bitmap_5 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP5);
288 whitelist->ie_bitmap_6 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP6);
289 whitelist->ie_bitmap_7 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP7);
Dundi Raviteja9ab4e7b2018-09-28 14:18:28 +0530290 if (!fwol_validate_ie_bitmaps(psoc, whitelist))
291 whitelist->ie_whitelist = false;
292 fwol_parse_probe_req_ouis(psoc, whitelist);
Dundi Raviteja85a240a2018-09-10 15:03:07 +0530293}
294
Sourav Mohapatra0f3b8572018-09-12 10:03:51 +0530295/**
296 * ucfg_fwol_fetch_dhcp_server_settings: Populate the enable_dhcp_server_offload
297 * and dhcp_max_num_clients from cfg
298 * @psoc: The global psoc handler
299 * @fwol_cfg: The cfg structure
300 *
301 * Return: none
302 */
303#ifdef DHCP_SERVER_OFFLOAD
304static void ucfg_fwol_fetch_dhcp_server_settings(struct wlan_objmgr_psoc *psoc,
305 struct wlan_fwol_cfg *fwol_cfg)
306{
307 fwol_cfg->enable_dhcp_server_offload =
308 cfg_get(psoc, CFG_DHCP_SERVER_OFFLOAD_SUPPORT);
309 fwol_cfg->dhcp_max_num_clients =
310 cfg_get(psoc, CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT);
311}
312#else
313static void ucfg_fwol_fetch_dhcp_server_settings(struct wlan_objmgr_psoc *psoc,
314 struct wlan_fwol_cfg *fwol_cfg)
315{
316}
317#endif
318
319/**
320 * ucfg_fwol_fetch_tsf_gpio_pin: Populate the tsf_gpio_pin from cfg
321 * @psoc: The global psoc handler
322 * @fwol_cfg: The cfg structure
323 *
324 * Return: none
325 */
326#ifdef WLAN_FEATURE_TSF
327static void ucfg_fwol_fetch_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
328 struct wlan_fwol_cfg *fwol_cfg)
329{
330 fwol_cfg->tsf_gpio_pin = cfg_get(psoc, CFG_SET_TSF_GPIO_PIN);
331}
332#else
333static void ucfg_fwol_fetch_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
334 struct wlan_fwol_cfg *fwol_cfg)
335{
336}
337#endif
338
339/**
Manikandan Mohand350c192018-11-29 14:01:12 -0800340 * ucfg_fwol_init_tsf_ptp_options: Populate the tsf_ptp_options from cfg
341 * @psoc: The global psoc handler
342 * @fwol_cfg: The cfg structure
343 *
344 * Return: none
345 */
346#if defined(WLAN_FEATURE_TSF) && defined(WLAN_FEATURE_TSF_PLUS)
347static void ucfg_fwol_init_tsf_ptp_options(struct wlan_objmgr_psoc *psoc,
348 struct wlan_fwol_cfg *fwol_cfg)
349{
350 fwol_cfg->tsf_ptp_options = cfg_get(psoc, CFG_SET_TSF_PTP_OPT);
351}
352#else
353static void ucfg_fwol_init_tsf_ptp_options(struct wlan_objmgr_psoc *psoc,
354 struct wlan_fwol_cfg *fwol_cfg)
355{
356}
357#endif
358
Subrat Dash5f36fbe2019-02-12 16:28:14 +0530359#ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ
360/**
361 * ucfg_fwol_fetch_tsf_irq_host_gpio_pin: Populate the
362 * tsf_irq_host_gpio_pin from cfg
363 * @psoc: The global psoc handler
364 * @fwol_cfg: The cfg structure
365 *
366 * This function is used to populate the cfg value of host platform
367 * gpio pin configured to receive tsf interrupt from fw.
368 *
369 * Return: none
370 */
371static void
372ucfg_fwol_fetch_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc,
373 struct wlan_fwol_cfg *fwol_cfg)
374{
375 fwol_cfg->tsf_irq_host_gpio_pin =
376 cfg_get(psoc, CFG_SET_TSF_IRQ_HOST_GPIO_PIN);
377}
378#else
379static void
380ucfg_fwol_fetch_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc,
381 struct wlan_fwol_cfg *fwol_cfg)
382{
383}
384#endif
Manikandan Mohand350c192018-11-29 14:01:12 -0800385/**
386 * ucfg_fwol_init_sae_cfg: Populate the sae control config from cfg
387 * @psoc: The global psoc handler
388 * @fwol_cfg: The cfg structure
389 *
390 * Return: none
391 */
392#ifdef WLAN_FEATURE_SAE
393static void ucfg_fwol_init_sae_cfg(struct wlan_objmgr_psoc *psoc,
394 struct wlan_fwol_cfg *fwol_cfg)
395{
396 fwol_cfg->sae_enable = cfg_get(psoc, CFG_IS_SAE_ENABLED);
397}
398#else
399static void ucfg_fwol_init_sae_cfg(struct wlan_objmgr_psoc *psoc,
400 struct wlan_fwol_cfg *fwol_cfg)
401{
402}
403#endif
404
405/**
Sourav Mohapatra0f3b8572018-09-12 10:03:51 +0530406 * ucfg_fwol_fetch_ra_filter: Populate the RA filter enabled or not from cfg
407 * @psoc: The global psoc handler
408 * @fwol_cfg: The cfg structure
409 *
410 * Return: none
411 */
412#ifdef FEATURE_WLAN_RA_FILTERING
413static void ucfg_fwol_fetch_ra_filter(struct wlan_objmgr_psoc *psoc,
414 struct wlan_fwol_cfg *fwol_cfg)
415{
416 fwol_cfg->is_rate_limit_enabled = cfg_get(psoc, CFG_RA_FILTER_ENABLE);
417}
418#else
419static void ucfg_fwol_fetch_ra_filter(struct wlan_objmgr_psoc *psoc,
420 struct wlan_fwol_cfg *fwol_cfg)
421{
422}
423#endif
424
Sourav Mohapatra113685f2018-08-29 14:21:55 +0530425QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
426{
427 QDF_STATUS status = QDF_STATUS_SUCCESS;
428 struct wlan_fwol_psoc_obj *fwol_obj;
429 struct wlan_fwol_cfg *fwol_cfg;
lifengfaa83cb2018-11-24 01:53:56 +0800430 qdf_size_t enable_fw_module_log_level_num;
Sourav Mohapatra113685f2018-08-29 14:21:55 +0530431
432 fwol_obj = fwol_get_psoc_obj(psoc);
433 if (!fwol_obj) {
434 fwol_err("Failed to get FWOL Obj");
435 return QDF_STATUS_E_FAILURE;
436 }
437
438 fwol_cfg = &fwol_obj->cfg;
Dundi Raviteja3b637092018-09-12 13:42:50 +0530439
Dundi Raviteja85a240a2018-09-10 15:03:07 +0530440 fwol_init_coex_config_in_cfg(psoc, &fwol_cfg->coex_config);
441 fwol_init_thermal_temp_in_cfg(psoc, &fwol_cfg->thermal_temp_cfg);
442 fwol_init_ie_whiltelist_in_cfg(psoc, &fwol_cfg->ie_whitelist_cfg);
Manikandan Mohan06d38d82018-11-26 18:36:58 -0800443 fwol_init_neighbor_report_cfg(psoc, &fwol_cfg->neighbor_report_cfg);
Sourav Mohapatrad9387d82018-09-07 12:28:52 +0530444 fwol_cfg->ani_enabled = cfg_get(psoc, CFG_ENABLE_ANI);
445 fwol_cfg->enable_rts_sifsbursting =
446 cfg_get(psoc, CFG_SET_RTS_FOR_SIFS_BURSTING);
447 fwol_cfg->max_mpdus_inampdu = cfg_get(psoc, CFG_MAX_MPDUS_IN_AMPDU);
448 fwol_cfg->arp_ac_category = cfg_get(psoc, CFG_ARP_AC_CATEGORY);
449 fwol_cfg->enable_phy_reg_retention = cfg_get(psoc, CFG_ENABLE_PHY_REG);
450 fwol_cfg->upper_brssi_thresh = cfg_get(psoc, CFG_UPPER_BRSSI_THRESH);
451 fwol_cfg->lower_brssi_thresh = cfg_get(psoc, CFG_LOWER_BRSSI_THRESH);
452 fwol_cfg->enable_dtim_1chrx = cfg_get(psoc, CFG_DTIM_1CHRX_ENABLE);
453 fwol_cfg->alternative_chainmask_enabled =
454 cfg_get(psoc, CFG_ENABLE_COEX_ALT_CHAINMASK);
Sourav Mohapatra0f3b8572018-09-12 10:03:51 +0530455 fwol_cfg->smart_chainmask_enabled =
456 cfg_get(psoc, CFG_ENABLE_SMART_CHAINMASK);
457 fwol_cfg->get_rts_profile = cfg_get(psoc, CFG_ENABLE_FW_RTS_PROFILE);
458 fwol_cfg->enable_fw_log_level =
459 cfg_get(psoc, CFG_ENABLE_FW_DEBUG_LOG_LEVEL);
460 fwol_cfg->enable_fw_log_type = cfg_get(psoc, CFG_ENABLE_FW_LOG_TYPE);
lifengfaa83cb2018-11-24 01:53:56 +0800461 qdf_uint8_array_parse(cfg_get(psoc, CFG_ENABLE_FW_MODULE_LOG_LEVEL),
462 fwol_cfg->enable_fw_module_log_level,
463 FW_MODULE_LOG_LEVEL_STRING_LENGTH,
464 &enable_fw_module_log_level_num);
465 fwol_cfg->enable_fw_module_log_level_num =
466 (uint8_t)enable_fw_module_log_level_num;
Manikandan Mohand350c192018-11-29 14:01:12 -0800467 ucfg_fwol_init_tsf_ptp_options(psoc, fwol_cfg);
468 ucfg_fwol_init_sae_cfg(psoc, fwol_cfg);
469 fwol_cfg->lprx_enable = cfg_get(psoc, CFG_LPRX);
470 fwol_cfg->gcmp_enable = cfg_get(psoc, CFG_ENABLE_GCMP);
471 fwol_cfg->enable_tx_sch_delay = cfg_get(psoc, CFG_TX_SCH_DELAY);
472 fwol_cfg->enable_secondary_rate = cfg_get(psoc,
473 CFG_ENABLE_SECONDARY_RATE);
Harprit Chhabadad59ae762019-01-08 16:40:43 -0800474 fwol_init_adapt_dwelltime_in_cfg(psoc, &fwol_cfg->dwelltime_params);
Sourav Mohapatra0f3b8572018-09-12 10:03:51 +0530475 ucfg_fwol_fetch_ra_filter(psoc, fwol_cfg);
476 ucfg_fwol_fetch_tsf_gpio_pin(psoc, fwol_cfg);
Subrat Dash5f36fbe2019-02-12 16:28:14 +0530477 ucfg_fwol_fetch_tsf_irq_host_gpio_pin(psoc, fwol_cfg);
Sourav Mohapatra0f3b8572018-09-12 10:03:51 +0530478 ucfg_fwol_fetch_dhcp_server_settings(psoc, fwol_cfg);
Sourav Mohapatra113685f2018-08-29 14:21:55 +0530479
480 return status;
481}
482
483QDF_STATUS fwol_cfg_on_psoc_disable(struct wlan_objmgr_psoc *psoc)
484{
485 /* Clear the CFG structure */
486 return QDF_STATUS_SUCCESS;
487}