blob: 19910b21e64f1e1cac1d1bc1951dd2080e95e9dd [file] [log] [blame]
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05301/*
Abhishek Ambure4706d0f2020-01-03 19:52:05 +05302 * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +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/**
Vignesh Viswanathana0921c42018-09-04 19:03:35 +053019 * DOC: define UCFG APIs exposed by the mlme component
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053020 */
21
Wu Gao406c53c2018-09-10 13:51:37 +080022#include "cfg_ucfg_api.h"
23#include "cfg_mlme_sta.h"
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053024#include "wlan_mlme_main.h"
Vignesh Viswanathana0921c42018-09-04 19:03:35 +053025#include "wlan_mlme_api.h"
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053026#include "wlan_mlme_ucfg_api.h"
Sandeep Puligillab7beb472018-08-13 22:54:20 -070027#include "wlan_objmgr_pdev_obj.h"
28#include "wlan_mlme_vdev_mgr_interface.h"
Abhishek Singhd5cf22d2019-01-08 19:51:09 +053029#include <include/wlan_pdev_mlme.h>
30#include "wlan_pdev_mlme_api.h"
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053031
Abhishek Singhd5cf22d2019-01-08 19:51:09 +053032QDF_STATUS ucfg_mlme_global_init(void)
33{
34 mlme_register_mlme_ext_ops();
35
36 return QDF_STATUS_SUCCESS;
37}
38
39QDF_STATUS ucfg_mlme_global_deinit(void)
40{
41 return QDF_STATUS_SUCCESS;
42}
43
Vignesh Viswanathana0921c42018-09-04 19:03:35 +053044QDF_STATUS ucfg_mlme_init(void)
45{
46 QDF_STATUS status;
47
Abhishek Singh7c1c7432019-04-04 12:11:57 +053048 status = wlan_objmgr_register_peer_create_handler(
49 WLAN_UMAC_COMP_MLME,
50 mlme_peer_object_created_notification,
51 NULL);
52 if (QDF_IS_STATUS_ERROR(status)) {
Abhishek Ambureec000072019-05-03 12:38:42 +053053 mlme_legacy_err("peer create register notification failed");
Abhishek Singh7c1c7432019-04-04 12:11:57 +053054 return QDF_STATUS_E_FAILURE;
55 }
56
57 status = wlan_objmgr_register_peer_destroy_handler(
58 WLAN_UMAC_COMP_MLME,
59 mlme_peer_object_destroyed_notification,
60 NULL);
61 if (QDF_IS_STATUS_ERROR(status)) {
Abhishek Ambureec000072019-05-03 12:38:42 +053062 mlme_legacy_err("peer destroy register notification failed");
Abhishek Singh7c1c7432019-04-04 12:11:57 +053063 return QDF_STATUS_E_FAILURE;
64 }
Vignesh Viswanathana0921c42018-09-04 19:03:35 +053065
66 return status;
67}
68
69QDF_STATUS ucfg_mlme_deinit(void)
70{
71 QDF_STATUS status;
72
Abhishek Singh7c1c7432019-04-04 12:11:57 +053073 status = wlan_objmgr_unregister_peer_destroy_handler(
74 WLAN_UMAC_COMP_MLME,
75 mlme_peer_object_destroyed_notification,
76 NULL);
77 if (QDF_IS_STATUS_ERROR(status))
Abhishek Ambureec000072019-05-03 12:38:42 +053078 mlme_legacy_err("unable to unregister peer destroy handle");
Abhishek Singh7c1c7432019-04-04 12:11:57 +053079
80 status = wlan_objmgr_unregister_peer_create_handler(
81 WLAN_UMAC_COMP_MLME,
82 mlme_peer_object_created_notification,
83 NULL);
84 if (QDF_IS_STATUS_ERROR(status))
Abhishek Ambureec000072019-05-03 12:38:42 +053085 mlme_legacy_err("unable to unregister peer create handle");
Abhishek Singh7c1c7432019-04-04 12:11:57 +053086
Vignesh Viswanathana0921c42018-09-04 19:03:35 +053087 return status;
88}
89
90QDF_STATUS ucfg_mlme_psoc_open(struct wlan_objmgr_psoc *psoc)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053091{
92 QDF_STATUS status;
93
94 status = mlme_cfg_on_psoc_enable(psoc);
95 if (!QDF_IS_STATUS_SUCCESS(status))
Abhishek Ambureec000072019-05-03 12:38:42 +053096 mlme_legacy_err("Failed to initialize MLME CFG");
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053097
98 return status;
99}
100
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530101void ucfg_mlme_psoc_close(struct wlan_objmgr_psoc *psoc)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530102{
103 /* Clear the MLME CFG Structure */
104}
Sandeep Puligillab7beb472018-08-13 22:54:20 -0700105
Sandeep Puligillab7beb472018-08-13 22:54:20 -0700106QDF_STATUS ucfg_mlme_pdev_open(struct wlan_objmgr_pdev *pdev)
107{
Abhishek Singhd5cf22d2019-01-08 19:51:09 +0530108 struct pdev_mlme_obj *pdev_mlme;
109
110 pdev_mlme = wlan_pdev_mlme_get_cmpt_obj(pdev);
111 if (!pdev_mlme) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530112 mlme_legacy_err(" PDEV MLME is NULL");
Abhishek Singhd5cf22d2019-01-08 19:51:09 +0530113 return QDF_STATUS_E_FAILURE;
114 }
115 pdev_mlme->mlme_register_ops = mlme_register_vdev_mgr_ops;
Sandeep Puligillab7beb472018-08-13 22:54:20 -0700116
117 return QDF_STATUS_SUCCESS;
118}
119
120QDF_STATUS ucfg_mlme_pdev_close(struct wlan_objmgr_pdev *pdev)
121{
122 return QDF_STATUS_SUCCESS;
123}
Wu Gao406c53c2018-09-10 13:51:37 +0800124
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +0530125/**
126 * ucfg_mlme_convert_power_cfg_chan_to_freq() - converts channel numbers to
127 * frequencies and copies the triplets to power_freq_data array
128 * @pdev: pointer to pdev object
129 * @max_length: Max length of the power chan data array
130 * @length: length of the data present in power_chan_data array
131 * @power_chan_data: Power data array from which channel numbers needs to be
132 * converted to frequencies
133 * @power_freq_data: Power data array in which the power data needs to be copied
134 * after conversion of channel numbers to frequencies
135 *
136 * power_data is received in the form of (first_channel_number,
137 * number_of_channels, max_tx_power) triplet, convert the channel numbers from
138 * the power_chan_data array to frequencies and copy the triplets
139 * (first_frequency, number_of_channels, max_tx_power) values to
140 * the power_freq_data array
141 *
142 * Return: Number of bytes filled in power_freq_data
143 */
144
145static uint32_t ucfg_mlme_convert_power_cfg_chan_to_freq(
146 struct wlan_objmgr_pdev *pdev,
147 uint32_t max_length,
148 qdf_size_t length,
149 uint8_t *power_chan_data,
150 uint8_t *power_freq_data)
151{
152 uint32_t count = 0, rem_length = length, copied_length = 0, i = 0;
153 tSirMacChanInfo *pwr_cfg_data;
154
155 pwr_cfg_data = qdf_mem_malloc(max_length);
156 if (!pwr_cfg_data)
157 return 0;
158
159 mlme_legacy_debug("max_length %d length %zu", max_length, length);
160 while ((rem_length >= 3) &&
161 (copied_length <= (max_length - (sizeof(tSirMacChanInfo))))) {
162 pwr_cfg_data[i].first_freq = wlan_reg_chan_to_freq(
163 pdev,
164 power_chan_data[count++]);
165 pwr_cfg_data[i].numChannels = power_chan_data[count++];
166 pwr_cfg_data[i].maxTxPower = power_chan_data[count++];
167 copied_length += sizeof(tSirMacChanInfo);
168 rem_length -= 3;
169 mlme_legacy_debug("First freq %d num channels %d max tx power %d",
170 pwr_cfg_data[i].first_freq,
171 pwr_cfg_data[i].numChannels,
172 pwr_cfg_data[i].maxTxPower);
173 i++;
174 }
175
176 qdf_mem_zero(power_freq_data, max_length);
177 qdf_mem_copy(power_freq_data, pwr_cfg_data, copied_length);
178 qdf_mem_free(pwr_cfg_data);
179 return copied_length;
180}
181
182void ucfg_mlme_cfg_chan_to_freq(struct wlan_objmgr_pdev *pdev)
183{
184 struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530185 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +0530186 struct wlan_mlme_cfg *mlme_cfg;
187 uint32_t converted_data_len = 0;
188
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530189 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +0530190 if (!mlme_obj)
191 return;
192
193 mlme_cfg = &mlme_obj->cfg;
194
195 mlme_cfg->power.max_tx_power_24.max_len = CFG_MAX_TX_POWER_2_4_LEN;
196 converted_data_len = ucfg_mlme_convert_power_cfg_chan_to_freq(
197 pdev,
198 mlme_cfg->power.max_tx_power_24_chan.max_len,
199 mlme_cfg->power.max_tx_power_24_chan.len,
200 mlme_cfg->power.max_tx_power_24_chan.data,
201 mlme_cfg->power.max_tx_power_24.data);
202 if (!converted_data_len) {
203 mlme_legacy_err("mlme cfg power 2_4 data chan number to freq failed");
204 return;
205 }
206
207 mlme_cfg->power.max_tx_power_24.len = converted_data_len;
208
209 mlme_cfg->power.max_tx_power_5.max_len = CFG_MAX_TX_POWER_5_LEN;
210 converted_data_len = ucfg_mlme_convert_power_cfg_chan_to_freq(
211 pdev,
212 mlme_cfg->power.max_tx_power_5_chan.max_len,
213 mlme_cfg->power.max_tx_power_5_chan.len,
214 mlme_cfg->power.max_tx_power_5_chan.data,
215 mlme_cfg->power.max_tx_power_5.data);
216 if (!converted_data_len) {
217 mlme_legacy_err("mlme cfg power 5 data chan number to freq failed");
218 return;
219 }
220 mlme_cfg->power.max_tx_power_5.len = converted_data_len;
221}
222
Wu Gao406c53c2018-09-10 13:51:37 +0800223QDF_STATUS
224ucfg_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc,
225 uint32_t *val)
226{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530227 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800228
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530229 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao406c53c2018-09-10 13:51:37 +0800230 if (!mlme_obj) {
231 *val = cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
Wu Gao406c53c2018-09-10 13:51:37 +0800232 return QDF_STATUS_E_INVAL;
233 }
234
235 *val = mlme_obj->cfg.sta.sta_keep_alive_period;
236
237 return QDF_STATUS_SUCCESS;
238}
239
240QDF_STATUS
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700241ucfg_mlme_get_dfs_master_capability(struct wlan_objmgr_psoc *psoc,
242 bool *val)
243{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530244 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700245
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530246 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700247 if (!mlme_obj) {
248 *val = cfg_default(CFG_ENABLE_DFS_MASTER_CAPABILITY);
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700249 return QDF_STATUS_E_INVAL;
250 }
251
252 *val = mlme_obj->cfg.dfs_cfg.dfs_master_capable;
253
254 return QDF_STATUS_SUCCESS;
255}
256
257QDF_STATUS
Abhishek Ambure4706d0f2020-01-03 19:52:05 +0530258ucfg_mlme_get_oem_6g_supported(struct wlan_objmgr_psoc *psoc,
259 bool *oem_6g_disable)
260{
261 struct wlan_mlme_psoc_ext_obj *mlme_obj;
262
263 mlme_obj = mlme_get_psoc_ext_obj(psoc);
264 if (!mlme_obj) {
265 *oem_6g_disable =
266 cfg_default(CFG_OEM_SIXG_SUPPORT_DISABLE);
267 return QDF_STATUS_E_INVAL;
268 }
269
270 *oem_6g_disable = mlme_obj->cfg.wifi_pos_cfg.oem_6g_support_disable;
271
272 return QDF_STATUS_SUCCESS;
273}
274
275QDF_STATUS
Arif Hussainbd5194c2018-11-27 19:01:15 -0800276ucfg_mlme_get_fine_time_meas_cap(struct wlan_objmgr_psoc *psoc,
277 uint32_t *fine_time_meas_cap)
278{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530279 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussainbd5194c2018-11-27 19:01:15 -0800280
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530281 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussainbd5194c2018-11-27 19:01:15 -0800282 if (!mlme_obj) {
283 *fine_time_meas_cap =
284 cfg_default(CFG_FINE_TIME_MEAS_CAPABILITY);
285 return QDF_STATUS_E_INVAL;
286 }
287
288 *fine_time_meas_cap = mlme_obj->cfg.wifi_pos_cfg.fine_time_meas_cap;
289
290 return QDF_STATUS_SUCCESS;
291}
292
293QDF_STATUS
294ucfg_mlme_set_fine_time_meas_cap(struct wlan_objmgr_psoc *psoc,
295 uint32_t fine_time_meas_cap)
296{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530297 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussainbd5194c2018-11-27 19:01:15 -0800298
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530299 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussainbd5194c2018-11-27 19:01:15 -0800300 if (!mlme_obj)
301 return QDF_STATUS_E_INVAL;
302
303 mlme_obj->cfg.wifi_pos_cfg.fine_time_meas_cap = fine_time_meas_cap;
304
305 return QDF_STATUS_SUCCESS;
306}
307
308QDF_STATUS
Arif Hussain224d3812018-11-16 17:58:38 -0800309ucfg_mlme_get_dfs_disable_channel_switch(struct wlan_objmgr_psoc *psoc,
310 bool *dfs_disable_channel_switch)
311{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530312 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800313
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530314 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain224d3812018-11-16 17:58:38 -0800315 if (!mlme_obj) {
316 *dfs_disable_channel_switch =
317 cfg_default(CFG_DISABLE_DFS_CH_SWITCH);
Arif Hussain224d3812018-11-16 17:58:38 -0800318 return QDF_STATUS_E_INVAL;
319 }
320
321 *dfs_disable_channel_switch =
322 mlme_obj->cfg.dfs_cfg.dfs_disable_channel_switch;
323
324 return QDF_STATUS_SUCCESS;
325}
326
327QDF_STATUS
328ucfg_mlme_set_dfs_disable_channel_switch(struct wlan_objmgr_psoc *psoc,
329 bool dfs_disable_channel_switch)
330{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530331 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800332
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530333 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain224d3812018-11-16 17:58:38 -0800334 if (!mlme_obj) {
Arif Hussain224d3812018-11-16 17:58:38 -0800335 return QDF_STATUS_E_INVAL;
336 }
337
338 mlme_obj->cfg.dfs_cfg.dfs_disable_channel_switch =
339 dfs_disable_channel_switch;
340
341 return QDF_STATUS_SUCCESS;
342}
343
344QDF_STATUS
345ucfg_mlme_get_dfs_ignore_cac(struct wlan_objmgr_psoc *psoc,
346 bool *dfs_ignore_cac)
347{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530348 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800349
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530350 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain224d3812018-11-16 17:58:38 -0800351 if (!mlme_obj) {
352 *dfs_ignore_cac = cfg_default(CFG_IGNORE_CAC);
Arif Hussain224d3812018-11-16 17:58:38 -0800353 return QDF_STATUS_E_INVAL;
354 }
355
356 *dfs_ignore_cac = mlme_obj->cfg.dfs_cfg.dfs_ignore_cac;
357
358 return QDF_STATUS_SUCCESS;
359}
360
361QDF_STATUS
362ucfg_mlme_set_dfs_ignore_cac(struct wlan_objmgr_psoc *psoc,
363 bool dfs_ignore_cac)
364{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530365 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800366
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530367 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530368 if (!mlme_obj)
Arif Hussain224d3812018-11-16 17:58:38 -0800369 return QDF_STATUS_E_INVAL;
Arif Hussain224d3812018-11-16 17:58:38 -0800370
371 mlme_obj->cfg.dfs_cfg.dfs_ignore_cac = dfs_ignore_cac;
372
373 return QDF_STATUS_SUCCESS;
374}
375
376QDF_STATUS
377ucfg_mlme_get_sap_tx_leakage_threshold(struct wlan_objmgr_psoc *psoc,
378 uint32_t *sap_tx_leakage_threshold)
379{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530380 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800381
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530382 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain224d3812018-11-16 17:58:38 -0800383 if (!mlme_obj) {
384 *sap_tx_leakage_threshold =
385 cfg_default(CFG_SAP_TX_LEAKAGE_THRESHOLD);
Arif Hussain224d3812018-11-16 17:58:38 -0800386 return QDF_STATUS_E_INVAL;
387 }
388
389 *sap_tx_leakage_threshold =
390 mlme_obj->cfg.dfs_cfg.sap_tx_leakage_threshold;
391
392 return QDF_STATUS_SUCCESS;
393}
394
395QDF_STATUS
396ucfg_mlme_set_sap_tx_leakage_threshold(struct wlan_objmgr_psoc *psoc,
397 uint32_t sap_tx_leakage_threshold)
398{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530399 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800400
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530401 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530402 if (!mlme_obj)
Arif Hussain224d3812018-11-16 17:58:38 -0800403 return QDF_STATUS_E_INVAL;
Arif Hussain224d3812018-11-16 17:58:38 -0800404
405 mlme_obj->cfg.dfs_cfg.sap_tx_leakage_threshold =
406 sap_tx_leakage_threshold;
407
408 return QDF_STATUS_SUCCESS;
409}
410
411QDF_STATUS
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800412ucfg_mlme_get_dfs_pri_multiplier(struct wlan_objmgr_psoc *psoc,
413 uint32_t *dfs_pri_multiplier)
414{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530415 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800416
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530417 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800418 if (!mlme_obj) {
419 *dfs_pri_multiplier =
420 cfg_default(CFG_DFS_RADAR_PRI_MULTIPLIER);
421 return QDF_STATUS_E_INVAL;
422 }
423
424 *dfs_pri_multiplier =
425 mlme_obj->cfg.dfs_cfg.dfs_pri_multiplier;
426
427 return QDF_STATUS_SUCCESS;
428}
429
430QDF_STATUS
431ucfg_mlme_set_dfs_pri_multiplier(struct wlan_objmgr_psoc *psoc,
432 uint32_t dfs_pri_multiplier)
433{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530434 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800435
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530436 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800437 if (!mlme_obj)
438 return QDF_STATUS_E_INVAL;
439
440 mlme_obj->cfg.dfs_cfg.dfs_pri_multiplier =
441 dfs_pri_multiplier;
442
443 return QDF_STATUS_SUCCESS;
444}
445
446QDF_STATUS
Arif Hussain224d3812018-11-16 17:58:38 -0800447ucfg_mlme_get_dfs_filter_offload(struct wlan_objmgr_psoc *psoc,
448 bool *dfs_filter_offload)
449{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530450 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800451
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530452 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain224d3812018-11-16 17:58:38 -0800453 if (!mlme_obj) {
454 *dfs_filter_offload =
455 cfg_default(CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD);
Arif Hussain224d3812018-11-16 17:58:38 -0800456 return QDF_STATUS_E_INVAL;
457 }
458
459 *dfs_filter_offload = mlme_obj->cfg.dfs_cfg.dfs_filter_offload;
460
461 return QDF_STATUS_SUCCESS;
462}
463
464QDF_STATUS
465ucfg_mlme_set_dfs_filter_offload(struct wlan_objmgr_psoc *psoc,
466 bool dfs_filter_offload)
467{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530468 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain224d3812018-11-16 17:58:38 -0800469
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530470 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530471 if (!mlme_obj)
Arif Hussain224d3812018-11-16 17:58:38 -0800472 return QDF_STATUS_E_INVAL;
Arif Hussain224d3812018-11-16 17:58:38 -0800473
474 mlme_obj->cfg.dfs_cfg.dfs_filter_offload = dfs_filter_offload;
475
476 return QDF_STATUS_SUCCESS;
477}
478
479QDF_STATUS
Wu Gao406c53c2018-09-10 13:51:37 +0800480ucfg_mlme_get_pmkid_modes(struct wlan_objmgr_psoc *psoc,
481 uint32_t *val)
482{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530483 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800484
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530485 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao406c53c2018-09-10 13:51:37 +0800486 if (!mlme_obj) {
487 *val = cfg_default(CFG_PMKID_MODES);
Wu Gao406c53c2018-09-10 13:51:37 +0800488 return QDF_STATUS_E_INVAL;
489 }
490
491 *val = mlme_obj->cfg.sta.pmkid_modes;
492
493 return QDF_STATUS_SUCCESS;
494}
495
496QDF_STATUS
497ucfg_mlme_set_pmkid_modes(struct wlan_objmgr_psoc *psoc,
498 uint32_t val)
499{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530500 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800501
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530502 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530503 if (!mlme_obj)
Wu Gao406c53c2018-09-10 13:51:37 +0800504 return QDF_STATUS_E_INVAL;
Wu Gao406c53c2018-09-10 13:51:37 +0800505
506 mlme_obj->cfg.sta.pmkid_modes = val;
507
508 return QDF_STATUS_SUCCESS;
509}
510
511QDF_STATUS
Arif Hussain178f35f2018-11-13 18:26:18 -0800512ucfg_mlme_get_twt_requestor(struct wlan_objmgr_psoc *psoc,
513 bool *val)
514{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530515 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800516
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530517 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain178f35f2018-11-13 18:26:18 -0800518 if (!mlme_obj) {
519 *val = cfg_default(CFG_TWT_REQUESTOR);
Arif Hussain178f35f2018-11-13 18:26:18 -0800520 return QDF_STATUS_E_INVAL;
521 }
522
523 *val = mlme_obj->cfg.twt_cfg.is_twt_requestor_enabled;
524
525 return QDF_STATUS_SUCCESS;
526}
527
528QDF_STATUS
529ucfg_mlme_set_twt_requestor(struct wlan_objmgr_psoc *psoc,
530 bool val)
531{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530532 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800533
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530534 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530535 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800536 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800537
538 mlme_obj->cfg.twt_cfg.is_twt_requestor_enabled = val;
539
540 return QDF_STATUS_SUCCESS;
541}
542
543QDF_STATUS
544ucfg_mlme_get_twt_responder(struct wlan_objmgr_psoc *psoc,
545 bool *val)
546{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530547 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800548
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530549 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain178f35f2018-11-13 18:26:18 -0800550 if (!mlme_obj) {
551 *val = cfg_default(CFG_TWT_RESPONDER);
Arif Hussain178f35f2018-11-13 18:26:18 -0800552 return QDF_STATUS_E_INVAL;
553 }
554
555 *val = mlme_obj->cfg.twt_cfg.is_twt_responder_enabled;
556
557 return QDF_STATUS_SUCCESS;
558}
559
560QDF_STATUS
561ucfg_mlme_set_twt_responder(struct wlan_objmgr_psoc *psoc,
562 bool val)
563{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530564 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800565
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530566 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530567 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800568 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800569
570 mlme_obj->cfg.twt_cfg.is_twt_responder_enabled = val;
571
572 return QDF_STATUS_SUCCESS;
573}
574
575QDF_STATUS
576ucfg_mlme_get_bcast_twt(struct wlan_objmgr_psoc *psoc,
577 bool *val)
578{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530579 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800580
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530581 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain178f35f2018-11-13 18:26:18 -0800582 if (!mlme_obj) {
583 *val = cfg_default(CFG_BCAST_TWT);
Arif Hussain178f35f2018-11-13 18:26:18 -0800584 return QDF_STATUS_E_INVAL;
585 }
586
587 *val = mlme_obj->cfg.twt_cfg.is_twt_bcast_enabled;
588
589 return QDF_STATUS_SUCCESS;
590}
591
592QDF_STATUS
593ucfg_mlme_set_bcast_twt(struct wlan_objmgr_psoc *psoc,
594 bool val)
595{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530596 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800597
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530598 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530599 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800600 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800601
602 mlme_obj->cfg.twt_cfg.is_twt_bcast_enabled = val;
603
604 return QDF_STATUS_SUCCESS;
605}
606
607QDF_STATUS
608ucfg_mlme_get_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
609 uint32_t *val)
610{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530611 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800612
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530613 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain178f35f2018-11-13 18:26:18 -0800614 if (!mlme_obj) {
615 *val = cfg_default(CFG_TWT_CONGESTION_TIMEOUT);
Arif Hussain178f35f2018-11-13 18:26:18 -0800616 return QDF_STATUS_E_INVAL;
617 }
618
619 *val = mlme_obj->cfg.twt_cfg.twt_congestion_timeout;
620
621 return QDF_STATUS_SUCCESS;
622}
623
624QDF_STATUS
625ucfg_mlme_set_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
626 uint32_t val)
627{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530628 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800629
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530630 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530631 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800632 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800633
634 mlme_obj->cfg.twt_cfg.twt_congestion_timeout = val;
635
636 return QDF_STATUS_SUCCESS;
637}
638
639QDF_STATUS
640ucfg_mlme_get_enable_twt(struct wlan_objmgr_psoc *psoc,
641 bool *val)
642{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530643 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800644
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530645 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain178f35f2018-11-13 18:26:18 -0800646 if (!mlme_obj) {
647 *val = cfg_default(CFG_ENABLE_TWT);
Arif Hussain178f35f2018-11-13 18:26:18 -0800648 return QDF_STATUS_E_INVAL;
649 }
650
651 *val = mlme_obj->cfg.twt_cfg.is_twt_enabled;
652
653 return QDF_STATUS_SUCCESS;
654}
655
656QDF_STATUS
657ucfg_mlme_set_enable_twt(struct wlan_objmgr_psoc *psoc,
658 bool val)
659{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530660 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain178f35f2018-11-13 18:26:18 -0800661
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530662 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530663 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800664 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800665
666 mlme_obj->cfg.twt_cfg.is_twt_enabled = val;
667
668 return QDF_STATUS_SUCCESS;
669}
670
671QDF_STATUS
Wu Gao406c53c2018-09-10 13:51:37 +0800672ucfg_mlme_get_dot11p_mode(struct wlan_objmgr_psoc *psoc,
Dustin Brown686d3032018-10-17 16:58:50 -0700673 enum dot11p_mode *out_mode)
Wu Gao406c53c2018-09-10 13:51:37 +0800674{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530675 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800676
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530677 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao406c53c2018-09-10 13:51:37 +0800678 if (!mlme_obj) {
Dustin Brown686d3032018-10-17 16:58:50 -0700679 *out_mode = cfg_default(CFG_DOT11P_MODE);
Wu Gao406c53c2018-09-10 13:51:37 +0800680 return QDF_STATUS_E_INVAL;
681 }
682
Dustin Brown686d3032018-10-17 16:58:50 -0700683 *out_mode = mlme_obj->cfg.sta.dot11p_mode;
Wu Gao406c53c2018-09-10 13:51:37 +0800684
685 return QDF_STATUS_SUCCESS;
686}
687
688QDF_STATUS
689ucfg_mlme_get_go_cts2self_for_sta(struct wlan_objmgr_psoc *psoc,
690 bool *val)
691{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530692 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800693
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530694 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao406c53c2018-09-10 13:51:37 +0800695 if (!mlme_obj) {
696 *val = cfg_default(CFG_ENABLE_GO_CTS2SELF_FOR_STA);
Wu Gao406c53c2018-09-10 13:51:37 +0800697 return QDF_STATUS_E_INVAL;
698 }
699
700 *val = mlme_obj->cfg.sta.enable_go_cts2self_for_sta;
701
702 return QDF_STATUS_SUCCESS;
703}
704
705QDF_STATUS
Wu Gao406c53c2018-09-10 13:51:37 +0800706ucfg_mlme_get_qcn_ie_support(struct wlan_objmgr_psoc *psoc,
707 bool *val)
708{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530709 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800710
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530711 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao406c53c2018-09-10 13:51:37 +0800712 if (!mlme_obj) {
713 *val = cfg_default(CFG_QCN_IE_SUPPORT);
Wu Gao406c53c2018-09-10 13:51:37 +0800714 return QDF_STATUS_E_INVAL;
715 }
716
717 *val = mlme_obj->cfg.sta.qcn_ie_support;
718
719 return QDF_STATUS_SUCCESS;
720}
721
722QDF_STATUS
723ucfg_mlme_get_tgt_gtx_usr_cfg(struct wlan_objmgr_psoc *psoc,
724 uint32_t *val)
725{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530726 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao406c53c2018-09-10 13:51:37 +0800727
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530728 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao406c53c2018-09-10 13:51:37 +0800729 if (!mlme_obj) {
730 *val = cfg_default(CFG_TGT_GTX_USR_CFG);
Wu Gao406c53c2018-09-10 13:51:37 +0800731 return QDF_STATUS_E_INVAL;
732 }
733
734 *val = mlme_obj->cfg.sta.tgt_gtx_usr_cfg;
735
736 return QDF_STATUS_SUCCESS;
737}
Wu Gao55f21712018-09-17 10:57:49 +0800738
739QDF_STATUS
Wu Gaofc81ecf2018-11-22 11:38:41 +0800740ucfg_mlme_is_override_ht20_40_24g(struct wlan_objmgr_psoc *psoc, bool *val)
741{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530742 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gaofc81ecf2018-11-22 11:38:41 +0800743
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530744 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gaofc81ecf2018-11-22 11:38:41 +0800745 if (!mlme_obj) {
746 *val = cfg_default(CFG_OBSS_HT40_OVERRIDE_HT40_20_24GHZ);
Wu Gaofc81ecf2018-11-22 11:38:41 +0800747 return QDF_STATUS_E_INVAL;
748 }
749 *val = mlme_obj->cfg.obss_ht40.is_override_ht20_40_24g;
750
751 return QDF_STATUS_SUCCESS;
752}
753
Wu Gao5d23d782018-11-08 16:09:47 +0800754#ifdef WLAN_FEATURE_ROAM_OFFLOAD
Wu Gaofc81ecf2018-11-22 11:38:41 +0800755QDF_STATUS
Abhishek Ambure93438092020-03-09 20:50:19 +0530756ucfg_mlme_get_roam_disable_config(struct wlan_objmgr_psoc *psoc,
757 uint32_t *val)
758{
759 struct wlan_mlme_psoc_ext_obj *mlme_obj;
760
761 mlme_obj = mlme_get_psoc_ext_obj(psoc);
762 if (!mlme_obj) {
763 *val = cfg_default(CFG_STA_DISABLE_ROAM);
764 return QDF_STATUS_E_INVAL;
765 }
766
767 *val = mlme_obj->cfg.lfr.sta_roam_disable;
768
769 return QDF_STATUS_SUCCESS;
770}
771
772QDF_STATUS
Wu Gao55f21712018-09-17 10:57:49 +0800773ucfg_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
774 bool *val)
775{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530776 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao55f21712018-09-17 10:57:49 +0800777
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530778 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao55f21712018-09-17 10:57:49 +0800779 if (!mlme_obj) {
780 *val = cfg_default(CFG_LFR3_ROAMING_OFFLOAD);
Wu Gao55f21712018-09-17 10:57:49 +0800781 return QDF_STATUS_E_INVAL;
782 }
783
784 *val = mlme_obj->cfg.lfr.lfr3_roaming_offload;
785
786 return QDF_STATUS_SUCCESS;
787}
788
789QDF_STATUS
790ucfg_mlme_set_roaming_offload(struct wlan_objmgr_psoc *psoc,
791 bool val)
792{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530793 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao55f21712018-09-17 10:57:49 +0800794
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530795 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530796 if (!mlme_obj)
Wu Gao55f21712018-09-17 10:57:49 +0800797 return QDF_STATUS_E_INVAL;
Wu Gao55f21712018-09-17 10:57:49 +0800798
799 mlme_obj->cfg.lfr.lfr3_roaming_offload = val;
800
801 return QDF_STATUS_SUCCESS;
802}
Wu Gao5d23d782018-11-08 16:09:47 +0800803#endif
Wu Gao55f21712018-09-17 10:57:49 +0800804
805QDF_STATUS
806ucfg_mlme_get_first_scan_bucket_threshold(struct wlan_objmgr_psoc *psoc,
807 uint8_t *val)
808{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530809 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao55f21712018-09-17 10:57:49 +0800810
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530811 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao55f21712018-09-17 10:57:49 +0800812 if (!mlme_obj) {
813 *val = cfg_default(CFG_LFR_FIRST_SCAN_BUCKET_THRESHOLD);
Wu Gao55f21712018-09-17 10:57:49 +0800814 return QDF_STATUS_E_INVAL;
815 }
816
817 *val = mlme_obj->cfg.lfr.first_scan_bucket_threshold;
818
819 return QDF_STATUS_SUCCESS;
820}
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530821
822QDF_STATUS
Wu Gao5d23d782018-11-08 16:09:47 +0800823ucfg_mlme_is_mawc_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
824{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530825 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800826
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530827 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800828 if (!mlme_obj) {
829 *val = cfg_default(CFG_LFR_MAWC_FEATURE_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800830 return QDF_STATUS_E_INVAL;
831 }
832 *val = mlme_obj->cfg.lfr.mawc_enabled;
833
834 return QDF_STATUS_SUCCESS;
835}
836
837QDF_STATUS
838ucfg_mlme_set_mawc_enabled(struct wlan_objmgr_psoc *psoc, bool val)
839{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530840 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800841
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530842 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530843 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +0800844 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +0800845
846 mlme_obj->cfg.lfr.mawc_enabled = val;
847
848 return QDF_STATUS_SUCCESS;
849}
850
851QDF_STATUS
852ucfg_mlme_is_fast_transition_enabled(struct wlan_objmgr_psoc *psoc,
853 bool *val)
854{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530855 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800856
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530857 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800858 if (!mlme_obj) {
859 *val = cfg_default(CFG_LFR_FAST_TRANSITION_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800860 return QDF_STATUS_E_INVAL;
861 }
862
863 *val = mlme_obj->cfg.lfr.fast_transition_enabled;
864
865 return QDF_STATUS_SUCCESS;
866}
867
868QDF_STATUS
869ucfg_mlme_set_fast_transition_enabled(struct wlan_objmgr_psoc *psoc,
870 bool val)
871{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530872 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800873
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530874 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530875 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +0800876 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +0800877
878 mlme_obj->cfg.lfr.fast_transition_enabled = val;
879
880 return QDF_STATUS_SUCCESS;
881}
882
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +0530883#ifdef WLAN_ADAPTIVE_11R
884QDF_STATUS
885ucfg_mlme_set_tgt_adaptive_11r_cap(struct wlan_objmgr_psoc *psoc,
886 bool val)
887{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530888 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +0530889
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530890 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +0530891 if (!mlme_obj)
892 return QDF_STATUS_E_INVAL;
893
894 mlme_obj->cfg.lfr.tgt_adaptive_11r_cap = val;
895
896 return QDF_STATUS_SUCCESS;
897}
898#endif
899
Wu Gao5d23d782018-11-08 16:09:47 +0800900QDF_STATUS
901ucfg_mlme_is_roam_scan_offload_enabled(struct wlan_objmgr_psoc *psoc,
902 bool *val)
903{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530904 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800905
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530906 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800907 if (!mlme_obj) {
908 *val = cfg_default(CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800909 return QDF_STATUS_E_INVAL;
910 }
911
912 *val = mlme_obj->cfg.lfr.roam_scan_offload_enabled;
913
914 return QDF_STATUS_SUCCESS;
915}
916
917QDF_STATUS
918ucfg_mlme_set_roam_scan_offload_enabled(struct wlan_objmgr_psoc *psoc,
919 bool val)
920{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530921 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800922
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530923 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530924 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +0800925 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +0800926
927 mlme_obj->cfg.lfr.roam_scan_offload_enabled = val;
928
929 return QDF_STATUS_SUCCESS;
930}
931
932QDF_STATUS
933ucfg_mlme_get_neighbor_scan_max_chan_time(struct wlan_objmgr_psoc *psoc,
934 uint16_t *val)
935{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530936 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800937
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530938 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800939 if (!mlme_obj) {
940 *val = cfg_default(CFG_LFR_NEIGHBOR_SCAN_MAX_CHAN_TIME);
Wu Gao5d23d782018-11-08 16:09:47 +0800941 return QDF_STATUS_E_INVAL;
942 }
943
944 *val = mlme_obj->cfg.lfr.neighbor_scan_max_chan_time;
945
946 return QDF_STATUS_SUCCESS;
947}
948
949QDF_STATUS
950ucfg_mlme_get_neighbor_scan_min_chan_time(struct wlan_objmgr_psoc *psoc,
951 uint16_t *val)
952{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530953 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800954
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530955 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800956 if (!mlme_obj) {
957 *val = cfg_default(CFG_LFR_NEIGHBOR_SCAN_MIN_CHAN_TIME);
Wu Gao5d23d782018-11-08 16:09:47 +0800958 return QDF_STATUS_E_INVAL;
959 }
960
961 *val = mlme_obj->cfg.lfr.neighbor_scan_min_chan_time;
962
963 return QDF_STATUS_SUCCESS;
964}
965
966QDF_STATUS
967ucfg_mlme_get_delay_before_vdev_stop(struct wlan_objmgr_psoc *psoc,
968 uint8_t *val)
969{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530970 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800971
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530972 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800973 if (!mlme_obj) {
974 *val = cfg_default(CFG_LFR_DELAY_BEFORE_VDEV_STOP);
Wu Gao5d23d782018-11-08 16:09:47 +0800975 return QDF_STATUS_E_INVAL;
976 }
977
978 *val = mlme_obj->cfg.lfr.delay_before_vdev_stop;
979
980 return QDF_STATUS_SUCCESS;
981}
982
983QDF_STATUS
984ucfg_mlme_get_roam_bmiss_final_bcnt(struct wlan_objmgr_psoc *psoc,
985 uint8_t *val)
986{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530987 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +0800988
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +0530989 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +0800990 if (!mlme_obj) {
991 *val = cfg_default(CFG_LFR_ROAM_BMISS_FINAL_BCNT);
Wu Gao5d23d782018-11-08 16:09:47 +0800992 return QDF_STATUS_E_INVAL;
993 }
994
995 *val = mlme_obj->cfg.lfr.roam_bmiss_final_bcnt;
996
997 return QDF_STATUS_SUCCESS;
998}
999
1000QDF_STATUS
1001ucfg_mlme_get_roam_bmiss_first_bcnt(struct wlan_objmgr_psoc *psoc,
1002 uint8_t *val)
1003{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301004 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001005
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301006 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +08001007 if (!mlme_obj) {
1008 *val = cfg_default(CFG_LFR_ROAM_BMISS_FIRST_BCNT);
Wu Gao5d23d782018-11-08 16:09:47 +08001009 return QDF_STATUS_E_INVAL;
1010 }
1011
1012 *val = mlme_obj->cfg.lfr.roam_bmiss_first_bcnt;
1013
1014 return QDF_STATUS_SUCCESS;
1015}
1016
1017QDF_STATUS
1018ucfg_mlme_is_lfr_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
1019{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301020 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001021
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301022 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +08001023 if (!mlme_obj) {
1024 *val = cfg_default(CFG_LFR_FEATURE_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +08001025 return QDF_STATUS_E_INVAL;
1026 }
1027
1028 *val = mlme_obj->cfg.lfr.lfr_enabled;
1029
1030 return QDF_STATUS_SUCCESS;
1031}
1032
1033QDF_STATUS
1034ucfg_mlme_set_lfr_enabled(struct wlan_objmgr_psoc *psoc, bool val)
1035{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301036 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001037
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301038 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301039 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +08001040 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +08001041
1042 mlme_obj->cfg.lfr.lfr_enabled = val;
1043
1044 return QDF_STATUS_SUCCESS;
1045}
1046
1047QDF_STATUS
1048ucfg_mlme_is_roam_prefer_5ghz(struct wlan_objmgr_psoc *psoc, bool *val)
1049{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301050 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001051
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301052 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +08001053 if (!mlme_obj) {
1054 *val = cfg_default(CFG_LFR_ROAM_PREFER_5GHZ);
Wu Gao5d23d782018-11-08 16:09:47 +08001055 return QDF_STATUS_E_INVAL;
1056 }
1057
1058 *val = mlme_obj->cfg.lfr.roam_prefer_5ghz;
1059
1060 return QDF_STATUS_SUCCESS;
1061}
1062
1063QDF_STATUS
1064ucfg_mlme_set_roam_intra_band(struct wlan_objmgr_psoc *psoc, bool val)
1065{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301066 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001067
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301068 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301069 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +08001070 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +08001071
1072 mlme_obj->cfg.lfr.roam_intra_band = val;
1073
1074 return QDF_STATUS_SUCCESS;
1075}
1076
1077QDF_STATUS
1078ucfg_mlme_get_home_away_time(struct wlan_objmgr_psoc *psoc, uint16_t *val)
1079{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301080 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001081
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301082 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +08001083 if (!mlme_obj) {
1084 *val = cfg_default(CFG_LFR_ROAM_SCAN_HOME_AWAY_TIME);
Wu Gao5d23d782018-11-08 16:09:47 +08001085 return QDF_STATUS_E_INVAL;
1086 }
1087
1088 *val = mlme_obj->cfg.lfr.roam_scan_home_away_time;
1089
1090 return QDF_STATUS_SUCCESS;
1091}
1092
1093QDF_STATUS
1094ucfg_mlme_set_fast_roam_in_concurrency_enabled(struct wlan_objmgr_psoc *psoc,
1095 bool val)
1096{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301097 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001098
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301099 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301100 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +08001101 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +08001102
1103 mlme_obj->cfg.lfr.enable_fast_roam_in_concurrency = val;
1104
1105 return QDF_STATUS_SUCCESS;
1106}
1107
1108#ifdef FEATURE_WLAN_ESE
1109QDF_STATUS
1110ucfg_mlme_is_ese_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
1111{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301112 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao5d23d782018-11-08 16:09:47 +08001113
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301114 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao5d23d782018-11-08 16:09:47 +08001115 if (!mlme_obj) {
1116 *val = cfg_default(CFG_LFR_ESE_FEATURE_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +08001117 return QDF_STATUS_E_INVAL;
1118 }
1119
1120 *val = mlme_obj->cfg.lfr.ese_enabled;
1121
1122 return QDF_STATUS_SUCCESS;
1123}
1124#endif /* FEATURE_WLAN_ESE */
1125
1126QDF_STATUS
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301127ucfg_mlme_get_opr_rate_set(struct wlan_objmgr_psoc *psoc,
1128 uint8_t *buf, qdf_size_t *len)
1129{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301130 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301131
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301132 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301133 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301134 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301135
1136 return wlan_mlme_get_cfg_str(buf, &mlme_obj->cfg.rates.opr_rate_set,
1137 len);
1138}
1139
1140QDF_STATUS
1141ucfg_mlme_get_ext_opr_rate_set(struct wlan_objmgr_psoc *psoc,
1142 uint8_t *buf, qdf_size_t *len)
1143{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301144 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301145
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301146 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301147 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301148 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301149
1150 return wlan_mlme_get_cfg_str(buf, &mlme_obj->cfg.rates.ext_opr_rate_set,
1151 len);
1152}
1153
1154QDF_STATUS
1155ucfg_mlme_get_supported_mcs_set(struct wlan_objmgr_psoc *psoc,
1156 uint8_t *buf, qdf_size_t *len)
1157{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301158 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301159
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301160 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301161 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301162 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301163
1164 return wlan_mlme_get_cfg_str(buf,
1165 &mlme_obj->cfg.rates.supported_mcs_set,
1166 len);
1167}
1168
1169QDF_STATUS
1170ucfg_mlme_set_supported_mcs_set(struct wlan_objmgr_psoc *psoc,
1171 uint8_t *buf, qdf_size_t len)
1172{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301173 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301174
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301175 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301176 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301177 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301178
1179 return wlan_mlme_set_cfg_str(buf,
1180 &mlme_obj->cfg.rates.supported_mcs_set,
1181 len);
1182}
1183
1184QDF_STATUS
1185ucfg_mlme_get_current_mcs_set(struct wlan_objmgr_psoc *psoc,
1186 uint8_t *buf, qdf_size_t *len)
1187{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301188 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301189
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301190 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301191 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301192 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301193
1194 return wlan_mlme_get_cfg_str(buf,
1195 &mlme_obj->cfg.rates.current_mcs_set,
1196 len);
1197}
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001198
1199QDF_STATUS
Arif Hussain4966f692018-11-27 16:40:51 -08001200ucfg_mlme_get_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc,
1201 uint32_t *wmi_wq_watchdog_timeout)
1202{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301203 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain4966f692018-11-27 16:40:51 -08001204
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301205 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain4966f692018-11-27 16:40:51 -08001206 if (!mlme_obj) {
1207 *wmi_wq_watchdog_timeout = cfg_default(CFG_WMI_WQ_WATCHDOG);
Arif Hussain4966f692018-11-27 16:40:51 -08001208 return QDF_STATUS_E_INVAL;
1209 }
1210
1211 *wmi_wq_watchdog_timeout =
1212 mlme_obj->cfg.timeouts.wmi_wq_watchdog_timeout;
1213
1214 return QDF_STATUS_SUCCESS;
1215}
1216
1217QDF_STATUS
1218ucfg_mlme_set_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc,
1219 uint32_t wmi_wq_watchdog_timeout)
1220{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301221 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain4966f692018-11-27 16:40:51 -08001222
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301223 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301224 if (!mlme_obj)
Arif Hussain4966f692018-11-27 16:40:51 -08001225 return QDF_STATUS_E_INVAL;
Arif Hussain4966f692018-11-27 16:40:51 -08001226
1227 if (!cfg_in_range(CFG_WMI_WQ_WATCHDOG, wmi_wq_watchdog_timeout)) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301228 mlme_legacy_err("wmi watchdog bite timeout is invalid %d",
1229 wmi_wq_watchdog_timeout);
Arif Hussain4966f692018-11-27 16:40:51 -08001230 return QDF_STATUS_E_INVAL;
1231 }
1232
1233 mlme_obj->cfg.timeouts.wmi_wq_watchdog_timeout =
1234 wmi_wq_watchdog_timeout;
1235
1236 return QDF_STATUS_SUCCESS;
1237}
1238
1239QDF_STATUS
Arif Hussaincca60432018-12-03 19:45:12 -08001240ucfg_mlme_stats_get_periodic_display_time(struct wlan_objmgr_psoc *psoc,
1241 uint32_t *periodic_display_time)
1242{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301243 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussaincca60432018-12-03 19:45:12 -08001244
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301245 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussaincca60432018-12-03 19:45:12 -08001246 if (!mlme_obj) {
1247 *periodic_display_time =
1248 cfg_default(CFG_PERIODIC_STATS_DISPLAY_TIME);
1249 return QDF_STATUS_E_INVAL;
1250 }
1251
1252 *periodic_display_time =
1253 mlme_obj->cfg.stats.stats_periodic_display_time;
1254
1255 return QDF_STATUS_SUCCESS;
1256}
1257
1258QDF_STATUS
1259ucfg_mlme_stats_get_cfg_values(struct wlan_objmgr_psoc *psoc,
1260 int *link_speed_rssi_high,
1261 int *link_speed_rssi_mid,
1262 int *link_speed_rssi_low,
1263 uint32_t *link_speed_rssi_report)
1264{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301265 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussaincca60432018-12-03 19:45:12 -08001266
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301267 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussaincca60432018-12-03 19:45:12 -08001268 if (!mlme_obj) {
1269 *link_speed_rssi_high =
1270 cfg_default(CFG_LINK_SPEED_RSSI_HIGH);
1271 *link_speed_rssi_mid =
1272 cfg_default(CFG_LINK_SPEED_RSSI_MID);
1273 *link_speed_rssi_low =
1274 cfg_default(CFG_LINK_SPEED_RSSI_LOW);
1275 *link_speed_rssi_report =
1276 cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1277 return QDF_STATUS_E_INVAL;
1278 }
1279
1280 *link_speed_rssi_high =
1281 mlme_obj->cfg.stats.stats_link_speed_rssi_high;
1282 *link_speed_rssi_mid =
1283 mlme_obj->cfg.stats.stats_link_speed_rssi_med;
1284 *link_speed_rssi_low =
1285 mlme_obj->cfg.stats.stats_link_speed_rssi_low;
1286 *link_speed_rssi_report =
1287 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1288
1289 return QDF_STATUS_SUCCESS;
1290}
1291
1292bool ucfg_mlme_stats_is_link_speed_report_actual(struct wlan_objmgr_psoc *psoc)
1293{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301294 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussaincca60432018-12-03 19:45:12 -08001295 int report_link_speed = 0;
1296
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301297 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussaincca60432018-12-03 19:45:12 -08001298 if (!mlme_obj)
1299 report_link_speed = cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1300 else
1301 report_link_speed =
1302 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1303
1304 return (report_link_speed == CFG_STATS_LINK_SPEED_REPORT_ACTUAL);
1305}
1306
1307bool ucfg_mlme_stats_is_link_speed_report_max(struct wlan_objmgr_psoc *psoc)
1308{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301309 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussaincca60432018-12-03 19:45:12 -08001310 int report_link_speed = 0;
1311
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301312 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussaincca60432018-12-03 19:45:12 -08001313 if (!mlme_obj)
1314 report_link_speed = cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1315 else
1316 report_link_speed =
1317 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1318
1319 return (report_link_speed == CFG_STATS_LINK_SPEED_REPORT_MAX);
1320}
1321
1322bool
1323ucfg_mlme_stats_is_link_speed_report_max_scaled(struct wlan_objmgr_psoc *psoc)
1324{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301325 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussaincca60432018-12-03 19:45:12 -08001326 int report_link_speed = 0;
1327
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301328 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussaincca60432018-12-03 19:45:12 -08001329 if (!mlme_obj)
1330 report_link_speed = cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1331 else
1332 report_link_speed =
1333 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1334
1335 return (report_link_speed == CFG_STATS_LINK_SPEED_REPORT_MAX_SCALED);
1336}
1337
1338QDF_STATUS
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001339ucfg_mlme_get_ps_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
1340 uint32_t *inactivity_timeout)
1341{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301342 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001343
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301344 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001345 if (!mlme_obj) {
1346 *inactivity_timeout =
1347 cfg_default(CFG_PS_DATA_INACTIVITY_TIMEOUT);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301348 return QDF_STATUS_E_FAILURE;
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001349 }
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001350 *inactivity_timeout = mlme_obj->cfg.timeouts.ps_data_inactivity_timeout;
1351
1352 return QDF_STATUS_SUCCESS;
1353}
1354
1355QDF_STATUS
1356ucfg_mlme_set_ps_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
1357 uint32_t inactivity_timeout)
1358{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301359 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001360
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301361 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301362 if (!mlme_obj)
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001363 return QDF_STATUS_E_INVAL;
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001364
1365 if (!cfg_in_range(CFG_PS_DATA_INACTIVITY_TIMEOUT, inactivity_timeout)) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301366 mlme_legacy_err("inactivity timeout set value is invalid %d",
1367 inactivity_timeout);
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001368 return QDF_STATUS_E_INVAL;
1369 }
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001370 mlme_obj->cfg.timeouts.ps_data_inactivity_timeout = inactivity_timeout;
1371
1372 return QDF_STATUS_SUCCESS;
1373}
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301374
1375QDF_STATUS
1376ucfg_mlme_get_sta_keepalive_method(struct wlan_objmgr_psoc *psoc,
1377 enum station_keepalive_method *val)
1378{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301379 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301380
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301381 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301382 if (!mlme_obj)
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301383 return QDF_STATUS_E_INVAL;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301384
1385 *val = mlme_obj->cfg.sta.sta_keepalive_method;
1386 return QDF_STATUS_SUCCESS;
1387}
1388
1389QDF_STATUS
1390ucfg_mlme_get_enable_deauth_to_disassoc_map(struct wlan_objmgr_psoc *psoc,
1391 bool *value)
1392{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301393 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301394
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301395 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301396 if (!mlme_obj)
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301397 return QDF_STATUS_E_INVAL;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301398
1399 *value = mlme_obj->cfg.gen.enable_deauth_to_disassoc_map;
1400 return QDF_STATUS_SUCCESS;
1401}
1402
1403
1404QDF_STATUS
1405ucfg_mlme_get_ap_random_bssid_enable(struct wlan_objmgr_psoc *psoc,
1406 bool *value)
1407{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301408 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301409
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301410 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301411 if (!mlme_obj)
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301412 return QDF_STATUS_E_INVAL;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301413
1414 *value = mlme_obj->cfg.sap_cfg.ap_random_bssid_enable;
1415 return QDF_STATUS_SUCCESS;
1416}
Sourav Mohapatrac457ae62018-12-06 15:19:41 +05301417
1418QDF_STATUS
1419ucfg_mlme_get_latency_enable(struct wlan_objmgr_psoc *psoc, bool *value)
1420{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301421 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Sourav Mohapatrac457ae62018-12-06 15:19:41 +05301422
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301423 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Sourav Mohapatrac457ae62018-12-06 15:19:41 +05301424 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301425 mlme_legacy_err("mlme obj null");
Sourav Mohapatrac457ae62018-12-06 15:19:41 +05301426 return QDF_STATUS_E_INVAL;
1427 }
1428
1429 *value = mlme_obj->cfg.wlm_config.latency_enable;
1430 return QDF_STATUS_SUCCESS;
1431}
lifengdb340e72018-11-20 00:50:20 +08001432
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001433QDF_STATUS ucfg_mlme_get_ibss_cfg(struct wlan_objmgr_psoc *psoc,
1434 struct wlan_mlme_ibss_cfg *ibss_cfg)
1435{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301436 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001437
1438 if (!ibss_cfg)
1439 return QDF_STATUS_E_FAILURE;
1440
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301441 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001442 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301443 mlme_legacy_err("MLME Obj null on get IBSS config");
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001444 mlme_init_ibss_cfg(psoc, ibss_cfg);
1445 return QDF_STATUS_E_INVAL;
1446 }
1447 *ibss_cfg = mlme_obj->cfg.ibss;
1448 return QDF_STATUS_SUCCESS;
1449}
1450
1451QDF_STATUS ucfg_mlme_set_ibss_auto_bssid(struct wlan_objmgr_psoc *psoc,
1452 uint32_t auto_bssid)
1453{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301454 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001455
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301456 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001457 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301458 mlme_legacy_err("MLME Obj null on get IBSS config");
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001459 return QDF_STATUS_E_INVAL;
1460 }
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001461 mlme_obj->cfg.ibss.auto_bssid = auto_bssid;
1462 return QDF_STATUS_SUCCESS;
1463}
1464
lifengdb340e72018-11-20 00:50:20 +08001465#ifdef MWS_COEX
1466QDF_STATUS
1467ucfg_mlme_get_mws_coex_4g_quick_tdm(struct wlan_objmgr_psoc *psoc,
1468 uint32_t *val)
1469{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301470 struct wlan_mlme_psoc_ext_obj *mlme_obj;
lifengdb340e72018-11-20 00:50:20 +08001471
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301472 mlme_obj = mlme_get_psoc_ext_obj(psoc);
lifengdb340e72018-11-20 00:50:20 +08001473 if (!mlme_obj) {
1474 *val = cfg_default(CFG_MWS_COEX_4G_QUICK_FTDM);
Abhishek Ambureec000072019-05-03 12:38:42 +05301475 mlme_legacy_err("mlme obj null");
lifengdb340e72018-11-20 00:50:20 +08001476 return QDF_STATUS_E_INVAL;
1477 }
1478
1479 *val = mlme_obj->cfg.mwc.mws_coex_4g_quick_tdm;
1480
1481 return QDF_STATUS_SUCCESS;
1482}
1483
1484QDF_STATUS
1485ucfg_mlme_get_mws_coex_5g_nr_pwr_limit(struct wlan_objmgr_psoc *psoc,
1486 uint32_t *val)
1487{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301488 struct wlan_mlme_psoc_ext_obj *mlme_obj;
lifengdb340e72018-11-20 00:50:20 +08001489
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301490 mlme_obj = mlme_get_psoc_ext_obj(psoc);
lifengdb340e72018-11-20 00:50:20 +08001491 if (!mlme_obj) {
1492 *val = cfg_default(CFG_MWS_COEX_5G_NR_PWR_LIMIT);
Abhishek Ambureec000072019-05-03 12:38:42 +05301493 mlme_legacy_err("mlme obj null");
lifengdb340e72018-11-20 00:50:20 +08001494 return QDF_STATUS_E_INVAL;
1495 }
1496
1497 *val = mlme_obj->cfg.mwc.mws_coex_5g_nr_pwr_limit;
1498
1499 return QDF_STATUS_SUCCESS;
1500}
Sourav Mohapatra3b81ce82020-02-05 10:08:47 +05301501
1502QDF_STATUS
1503ucfg_mlme_get_mws_coex_pcc_channel_avoid_delay(struct wlan_objmgr_psoc *psoc,
1504 uint32_t *val)
1505{
1506 struct wlan_mlme_psoc_ext_obj *mlme_obj;
1507
1508 mlme_obj = mlme_get_psoc_ext_obj(psoc);
1509 if (!mlme_obj) {
1510 *val = cfg_default(CFG_MWS_COEX_PCC_CHANNEL_AVOID_DELAY);
1511 mlme_legacy_err("mlme obj null");
1512 return QDF_STATUS_SUCCESS;
1513 }
1514
1515 *val = mlme_obj->cfg.mwc.mws_coex_pcc_channel_avoid_delay;
1516
1517 return QDF_STATUS_SUCCESS;
1518}
1519
1520QDF_STATUS
1521ucfg_mlme_get_mws_coex_scc_channel_avoid_delay(struct wlan_objmgr_psoc *psoc,
1522 uint32_t *val)
1523{
1524 struct wlan_mlme_psoc_ext_obj *mlme_obj;
1525
1526 mlme_obj = mlme_get_psoc_ext_obj(psoc);
1527 if (!mlme_obj) {
1528 *val = cfg_default(CFG_MWS_COEX_SCC_CHANNEL_AVOID_DELAY);
1529 mlme_legacy_err("mlme obj null");
1530 return QDF_STATUS_SUCCESS;
1531 }
1532
1533 *val = mlme_obj->cfg.mwc.mws_coex_scc_channel_avoid_delay;
1534
1535 return QDF_STATUS_SUCCESS;
1536}
lifengdb340e72018-11-20 00:50:20 +08001537#endif
lifeng0b46ae52018-12-13 09:42:27 +08001538
1539QDF_STATUS
1540ucfg_mlme_get_etsi13_srd_chan_in_master_mode(struct wlan_objmgr_psoc *psoc,
1541 bool *value)
1542{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301543 struct wlan_mlme_psoc_ext_obj *mlme_obj;
lifeng0b46ae52018-12-13 09:42:27 +08001544
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301545 mlme_obj = mlme_get_psoc_ext_obj(psoc);
lifeng0b46ae52018-12-13 09:42:27 +08001546 if (!mlme_obj) {
1547 *value = cfg_default(CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE);
Abhishek Ambureec000072019-05-03 12:38:42 +05301548 mlme_legacy_err("Failed to get MLME Obj");
lifeng0b46ae52018-12-13 09:42:27 +08001549 return QDF_STATUS_E_INVAL;
1550 }
1551
1552 *value = mlme_obj->cfg.reg.etsi13_srd_chan_in_master_mode;
1553
1554 return QDF_STATUS_SUCCESS;
1555}
1556
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05301557#ifdef SAP_AVOID_ACS_FREQ_LIST
1558QDF_STATUS
1559ucfg_mlme_get_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
1560 uint16_t *freq_list, uint8_t *freq_list_num)
1561{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301562 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05301563 qdf_size_t avoid_acs_freq_list_num;
1564
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301565 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05301566 if (!mlme_obj) {
1567 qdf_uint16_array_parse(
1568 cfg_default(CFG_SAP_AVOID_ACS_FREQ_LIST),
1569 freq_list, CFG_VALID_CHANNEL_LIST_LEN,
1570 &avoid_acs_freq_list_num);
1571 *freq_list_num = avoid_acs_freq_list_num;
1572
1573 mlme_legacy_err("Failed to get MLME Obj");
1574 return QDF_STATUS_E_INVAL;
1575 }
1576
1577 *freq_list_num = mlme_obj->cfg.reg.avoid_acs_freq_list_num;
1578 qdf_mem_copy(freq_list, mlme_obj->cfg.reg.avoid_acs_freq_list,
1579 *freq_list_num * sizeof(uint16_t));
1580
1581 return QDF_STATUS_SUCCESS;
1582}
1583#endif
1584
lifeng0b46ae52018-12-13 09:42:27 +08001585QDF_STATUS
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05301586ucfg_mlme_get_11d_in_world_mode(struct wlan_objmgr_psoc *psoc,
1587 bool *value)
1588{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301589 struct wlan_mlme_psoc_ext_obj *mlme_obj;
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05301590
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301591 mlme_obj = mlme_get_psoc_ext_obj(psoc);
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05301592 if (!mlme_obj) {
1593 *value = cfg_default(CFG_ENABLE_11D_IN_WORLD_MODE);
Abhishek Ambureec000072019-05-03 12:38:42 +05301594 mlme_legacy_err("Failed to get MLME Obj");
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05301595 return QDF_STATUS_E_INVAL;
1596 }
1597
1598 *value = mlme_obj->cfg.reg.enable_11d_in_world_mode;
1599
1600 return QDF_STATUS_SUCCESS;
1601}
1602
1603QDF_STATUS
lifeng0b46ae52018-12-13 09:42:27 +08001604ucfg_mlme_get_restart_beaconing_on_ch_avoid(struct wlan_objmgr_psoc *psoc,
1605 uint32_t *value)
1606{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301607 struct wlan_mlme_psoc_ext_obj *mlme_obj;
lifeng0b46ae52018-12-13 09:42:27 +08001608
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301609 mlme_obj = mlme_get_psoc_ext_obj(psoc);
lifeng0b46ae52018-12-13 09:42:27 +08001610 if (!mlme_obj) {
1611 *value = cfg_default(CFG_RESTART_BEACONING_ON_CH_AVOID);
Abhishek Ambureec000072019-05-03 12:38:42 +05301612 mlme_legacy_err("Failed to get MLME Obj");
lifeng0b46ae52018-12-13 09:42:27 +08001613 return QDF_STATUS_E_INVAL;
1614 }
1615
1616 *value = mlme_obj->cfg.reg.restart_beaconing_on_ch_avoid;
1617
1618 return QDF_STATUS_SUCCESS;
1619}
1620
1621QDF_STATUS
1622ucfg_mlme_get_indoor_channel_support(struct wlan_objmgr_psoc *psoc,
1623 bool *value)
1624{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301625 struct wlan_mlme_psoc_ext_obj *mlme_obj;
lifeng0b46ae52018-12-13 09:42:27 +08001626
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301627 mlme_obj = mlme_get_psoc_ext_obj(psoc);
lifeng0b46ae52018-12-13 09:42:27 +08001628 if (!mlme_obj) {
1629 *value = cfg_default(CFG_INDOOR_CHANNEL_SUPPORT);
Abhishek Ambureec000072019-05-03 12:38:42 +05301630 mlme_legacy_err("Failed to get MLME Obj");
lifeng0b46ae52018-12-13 09:42:27 +08001631 return QDF_STATUS_E_INVAL;
1632 }
1633
1634 *value = mlme_obj->cfg.reg.indoor_channel_support;
1635
1636 return QDF_STATUS_SUCCESS;
1637}
1638
1639QDF_STATUS
1640ucfg_mlme_get_scan_11d_interval(struct wlan_objmgr_psoc *psoc,
1641 uint32_t *value)
1642{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301643 struct wlan_mlme_psoc_ext_obj *mlme_obj;
lifeng0b46ae52018-12-13 09:42:27 +08001644
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301645 mlme_obj = mlme_get_psoc_ext_obj(psoc);
lifeng0b46ae52018-12-13 09:42:27 +08001646 if (!mlme_obj) {
1647 *value = cfg_default(CFG_SCAN_11D_INTERVAL);
Abhishek Ambureec000072019-05-03 12:38:42 +05301648 mlme_legacy_err("Failed to get MLME Obj");
lifeng0b46ae52018-12-13 09:42:27 +08001649 return QDF_STATUS_E_INVAL;
1650 }
1651
1652 *value = mlme_obj->cfg.reg.scan_11d_interval;
lifeng0b46ae52018-12-13 09:42:27 +08001653 return QDF_STATUS_SUCCESS;
1654}
Wu Gao6294afc2019-01-05 00:00:58 +08001655
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001656QDF_STATUS
Ashish Kumar Dhanotiya3aec11e2020-07-30 18:46:41 +05301657ucfg_mlme_get_nol_across_regdmn(struct wlan_objmgr_psoc *psoc, bool *value)
1658{
1659 struct wlan_mlme_psoc_ext_obj *mlme_obj;
1660
1661 mlme_obj = mlme_get_psoc_ext_obj(psoc);
1662 if (!mlme_obj) {
1663 *value = cfg_default(CFG_RETAIN_NOL_ACROSS_REG_DOMAIN);
1664 mlme_legacy_err("Failed to get MLME Obj");
1665 return QDF_STATUS_E_INVAL;
1666 }
1667
1668 *value = mlme_obj->cfg.reg.retain_nol_across_regdmn_update;
1669 return QDF_STATUS_SUCCESS;
1670}
1671
1672QDF_STATUS
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07001673ucfg_mlme_get_valid_channel_freq_list(struct wlan_objmgr_psoc *psoc,
1674 uint32_t *channel_list,
1675 uint32_t *channel_list_num)
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001676{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301677 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001678 qdf_size_t valid_channel_list_num = 0;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07001679 uint8_t tmp_channel_list[CFG_VALID_CHANNEL_LIST_LEN];
1680 uint8_t i;
1681 struct wlan_objmgr_pdev *pdev = NULL;
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001682
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301683 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001684 if (!mlme_obj) {
1685 qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST),
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07001686 tmp_channel_list,
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001687 CFG_VALID_CHANNEL_LIST_LEN,
1688 &valid_channel_list_num);
1689 *channel_list_num = (uint8_t)valid_channel_list_num;
Abhishek Ambureec000072019-05-03 12:38:42 +05301690 mlme_legacy_err("Failed to get MLME Obj");
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07001691 pdev = wlan_objmgr_get_pdev_by_id(psoc, 0, WLAN_MLME_NB_ID);
1692 if (!pdev) {
1693 mlme_legacy_err("null pdev");
1694 return QDF_STATUS_E_INVAL;
1695 }
1696
1697 for (i = 0; i < valid_channel_list_num; i++) {
1698 channel_list[i] =
1699 wlan_reg_chan_to_freq(pdev, tmp_channel_list[i]);
1700 }
1701
1702 wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_NB_ID);
1703
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001704 return QDF_STATUS_E_INVAL;
1705 }
1706
1707 *channel_list_num = (uint32_t)mlme_obj->cfg.reg.valid_channel_list_num;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07001708 for (i = 0; i < *channel_list_num; i++)
1709 channel_list[i] = mlme_obj->cfg.reg.valid_channel_freq_list[i];
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001710
1711 return QDF_STATUS_SUCCESS;
1712}
1713
Wu Gao6294afc2019-01-05 00:00:58 +08001714#ifdef FEATURE_LFR_SUBNET_DETECTION
1715QDF_STATUS
1716ucfg_mlme_is_subnet_detection_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
1717{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301718 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao6294afc2019-01-05 00:00:58 +08001719
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301720 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao6294afc2019-01-05 00:00:58 +08001721 if (!mlme_obj) {
1722 *val = cfg_default(CFG_LFR3_ENABLE_SUBNET_DETECTION);
1723 return QDF_STATUS_E_INVAL;
1724 }
1725 *val = mlme_obj->cfg.lfr.enable_lfr_subnet_detection;
1726
1727 return QDF_STATUS_SUCCESS;
1728}
1729#endif
Wu Gao2255ea22019-01-04 15:44:35 +08001730
1731QDF_STATUS
1732ucfg_mlme_set_current_tx_power_level(struct wlan_objmgr_psoc *psoc,
1733 uint8_t value)
1734{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301735 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao2255ea22019-01-04 15:44:35 +08001736
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301737 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao2255ea22019-01-04 15:44:35 +08001738 if (!mlme_obj)
1739 return QDF_STATUS_E_INVAL;
1740
1741 mlme_obj->cfg.power.current_tx_power_level = value;
1742
1743 return QDF_STATUS_SUCCESS;
1744}
1745
1746QDF_STATUS
1747ucfg_mlme_get_current_tx_power_level(struct wlan_objmgr_psoc *psoc,
1748 uint8_t *value)
1749{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301750 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao2255ea22019-01-04 15:44:35 +08001751
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301752 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao2255ea22019-01-04 15:44:35 +08001753 if (!mlme_obj) {
1754 *value = cfg_default(CFG_CURRENT_TX_POWER_LEVEL);
1755 return QDF_STATUS_E_INVAL;
1756 }
1757
1758 *value = mlme_obj->cfg.power.current_tx_power_level;
1759
1760 return QDF_STATUS_SUCCESS;
1761}
1762
1763QDF_STATUS
1764ucfg_mlme_set_obss_detection_offload_enabled(struct wlan_objmgr_psoc *psoc,
1765 uint8_t value)
1766{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301767 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao2255ea22019-01-04 15:44:35 +08001768
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301769 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao2255ea22019-01-04 15:44:35 +08001770 if (!mlme_obj)
1771 return QDF_STATUS_E_INVAL;
1772
1773 mlme_obj->cfg.obss_ht40.obss_detection_offload_enabled = value;
1774
1775 return QDF_STATUS_SUCCESS;
1776}
1777
1778QDF_STATUS
1779ucfg_mlme_set_obss_color_collision_offload_enabled(
1780 struct wlan_objmgr_psoc *psoc, uint8_t value)
1781{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301782 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gao2255ea22019-01-04 15:44:35 +08001783
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301784 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gao2255ea22019-01-04 15:44:35 +08001785 if (!mlme_obj)
1786 return QDF_STATUS_E_INVAL;
1787
1788 mlme_obj->cfg.obss_ht40.obss_color_collision_offload_enabled = value;
1789
1790 return QDF_STATUS_SUCCESS;
1791}
Wu Gaoed616a12019-01-16 15:19:21 +08001792
Kiran Kumar Lokere571f0d32019-11-19 19:38:31 -08001793QDF_STATUS ucfg_mlme_set_restricted_80p80_bw_supp(struct wlan_objmgr_psoc *psoc,
1794 bool restricted_80p80_supp)
1795{
1796 struct wlan_mlme_psoc_ext_obj *mlme_obj;
1797
1798 mlme_obj = mlme_get_psoc_ext_obj(psoc);
1799 if (!mlme_obj)
1800 return QDF_STATUS_E_INVAL;
1801
1802 mlme_obj->cfg.vht_caps.vht_cap_info.restricted_80p80_bw_supp =
1803 restricted_80p80_supp;
1804
1805 return QDF_STATUS_SUCCESS;
1806}
1807
1808bool ucfg_mlme_get_restricted_80p80_bw_supp(struct wlan_objmgr_psoc *psoc)
1809{
1810 struct wlan_mlme_psoc_ext_obj *mlme_obj;
1811
1812 mlme_obj = mlme_get_psoc_ext_obj(psoc);
1813
1814 if (!mlme_obj)
1815 return true;
1816
1817 return mlme_obj->cfg.vht_caps.vht_cap_info.restricted_80p80_bw_supp;
1818}
1819
Wu Gaoed616a12019-01-16 15:19:21 +08001820QDF_STATUS
1821ucfg_mlme_get_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
1822 uint32_t *val)
1823{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301824 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gaoed616a12019-01-16 15:19:21 +08001825
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301826 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gaoed616a12019-01-16 15:19:21 +08001827 if (!mlme_obj) {
1828 *val = cfg_default(CFG_CHANNEL_BONDING_MODE_24GHZ);
1829 return QDF_STATUS_E_INVAL;
1830 }
1831 *val = mlme_obj->cfg.feature_flags.channel_bonding_mode_24ghz;
1832
1833 return QDF_STATUS_SUCCESS;
1834}
1835
1836QDF_STATUS
1837ucfg_mlme_set_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
1838 uint32_t value)
1839{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301840 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gaoed616a12019-01-16 15:19:21 +08001841
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301842 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gaoed616a12019-01-16 15:19:21 +08001843 if (!mlme_obj)
1844 return QDF_STATUS_E_INVAL;
1845
1846 mlme_obj->cfg.feature_flags.channel_bonding_mode_24ghz = value;
1847
1848 return QDF_STATUS_SUCCESS;
1849}
1850
1851QDF_STATUS
1852ucfg_mlme_get_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
1853 uint32_t *value)
1854{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301855 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gaoed616a12019-01-16 15:19:21 +08001856
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301857 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gaoed616a12019-01-16 15:19:21 +08001858 if (!mlme_obj) {
1859 *value = cfg_default(CFG_CHANNEL_BONDING_MODE_5GHZ);
1860 return QDF_STATUS_E_INVAL;
1861 }
1862 *value = mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz;
1863
1864 return QDF_STATUS_SUCCESS;
1865}
1866
1867QDF_STATUS
1868ucfg_mlme_set_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
1869 uint32_t value)
1870{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301871 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Wu Gaoed616a12019-01-16 15:19:21 +08001872
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05301873 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Wu Gaoed616a12019-01-16 15:19:21 +08001874 if (!mlme_obj)
1875 return QDF_STATUS_E_INVAL;
1876
1877 mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz = value;
1878
1879 return QDF_STATUS_SUCCESS;
1880}
1881
Srinivas Dasari0628e842019-08-22 01:17:38 +05301882bool ucfg_mlme_validate_full_roam_scan_period(uint32_t full_roam_scan_period)
1883{
1884 bool is_valid = true;
1885 uint32_t min, max;
1886
1887 if (!cfg_in_range(CFG_LFR_FULL_ROAM_SCAN_REFRESH_PERIOD,
1888 full_roam_scan_period)) {
1889 min = (cfg_min(CFG_LFR_FULL_ROAM_SCAN_REFRESH_PERIOD));
1890 max = (cfg_max(CFG_LFR_FULL_ROAM_SCAN_REFRESH_PERIOD));
1891 mlme_legacy_err("Full roam scan period value %d is out of range (Min: %d Max: %d)",
1892 full_roam_scan_period, min, max);
1893 is_valid = false;
1894 }
1895
1896 return is_valid;
1897}
Srinivas Dasarib5d9f3e2019-08-22 01:43:42 +05301898
1899bool ucfg_mlme_validate_scan_period(uint32_t roam_scan_period)
1900{
1901 bool is_valid = true;
1902
1903 if (!cfg_in_range(CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD,
1904 roam_scan_period)) {
1905 mlme_legacy_err("Roam scan period value %d msec is out of range (Min: %d msec Max: %d msec)",
1906 roam_scan_period,
1907 cfg_min(CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD),
1908 cfg_max(CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD));
1909 is_valid = false;
1910 }
1911
1912 return is_valid;
1913}
Srinivas Dasarie1ca5382021-03-23 13:26:36 +05301914
1915bool ucfg_is_roaming_enabled(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
1916{
1917 struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
1918
1919 if (mlme_get_roam_state(psoc, vdev_id) == ROAM_RSO_STARTED)
1920 return true;
1921
1922 return false;
1923}