blob: aee44af976972fcf23c4468e03858b913eefc8b8 [file] [log] [blame]
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05301/*
Wu Gao6294afc2019-01-05 00:00:58 +08002 * Copyright (c) 2018-2019 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#ifdef CONFIG_VDEV_SM
30#include <include/wlan_pdev_mlme.h>
31#include "wlan_pdev_mlme_api.h"
32#endif
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053033
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053034#ifdef CONFIG_VDEV_SM
35static QDF_STATUS ucfg_mlme_vdev_init(void)
36{
37 return QDF_STATUS_SUCCESS;
38}
39
40static QDF_STATUS ucfg_mlme_vdev_deinit(void)
41{
42 return QDF_STATUS_SUCCESS;
43}
44
Abhishek Singhd5cf22d2019-01-08 19:51:09 +053045QDF_STATUS ucfg_mlme_global_init(void)
46{
47 mlme_register_mlme_ext_ops();
48
49 return QDF_STATUS_SUCCESS;
50}
51
52QDF_STATUS ucfg_mlme_global_deinit(void)
53{
54 return QDF_STATUS_SUCCESS;
55}
56
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053057#else
58static QDF_STATUS ucfg_mlme_vdev_init(void)
59{
60 QDF_STATUS status;
61
62 status = wlan_objmgr_register_vdev_create_handler(
63 WLAN_UMAC_COMP_MLME,
64 mlme_vdev_object_created_notification,
65 NULL);
66 if (QDF_IS_STATUS_ERROR(status)) {
67 mlme_err("unable to register vdev create handle");
68 return status;
69 }
70
71 status = wlan_objmgr_register_vdev_destroy_handler(
72 WLAN_UMAC_COMP_MLME,
73 mlme_vdev_object_destroyed_notification,
74 NULL);
75 if (QDF_IS_STATUS_ERROR(status))
76 mlme_err("unable to register vdev create handle");
77
78 return status;
79
80}
81
82static QDF_STATUS ucfg_mlme_vdev_deinit(void)
83{
84 QDF_STATUS status;
85
86 status = wlan_objmgr_unregister_vdev_destroy_handler(
87 WLAN_UMAC_COMP_MLME,
88 mlme_vdev_object_destroyed_notification,
89 NULL);
90
91 if (QDF_IS_STATUS_ERROR(status))
92 mlme_err("unable to unregister vdev destroy handle");
93
94 status = wlan_objmgr_unregister_vdev_create_handler(
95 WLAN_UMAC_COMP_MLME,
96 mlme_vdev_object_created_notification,
97 NULL);
98
99 if (QDF_IS_STATUS_ERROR(status))
100 mlme_err("unable to unregister vdev create handle");
101
102 return status;
103}
104
105#endif
106
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530107QDF_STATUS ucfg_mlme_init(void)
108{
109 QDF_STATUS status;
110
111 status = wlan_objmgr_register_psoc_create_handler(
112 WLAN_UMAC_COMP_MLME,
113 mlme_psoc_object_created_notification,
114 NULL);
115 if (status != QDF_STATUS_SUCCESS) {
116 mlme_err("unable to register psoc create handle");
117 return status;
118 }
119
120 status = wlan_objmgr_register_psoc_destroy_handler(
121 WLAN_UMAC_COMP_MLME,
122 mlme_psoc_object_destroyed_notification,
123 NULL);
gaurank kathpalia24ed0f42018-11-13 15:37:49 +0530124 if (status != QDF_STATUS_SUCCESS) {
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530125 mlme_err("unable to register psoc create handle");
gaurank kathpalia24ed0f42018-11-13 15:37:49 +0530126 return status;
127 }
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530128
gaurank kathpalia24ed0f42018-11-13 15:37:49 +0530129 status = ucfg_mlme_vdev_init();
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530130 if (QDF_IS_STATUS_ERROR(status))
131 return status;
132
133 status = wlan_objmgr_register_peer_create_handler(
134 WLAN_UMAC_COMP_MLME,
135 mlme_peer_object_created_notification,
136 NULL);
137 if (QDF_IS_STATUS_ERROR(status)) {
138 mlme_err("peer create register notification failed");
139 return QDF_STATUS_E_FAILURE;
140 }
141
142 status = wlan_objmgr_register_peer_destroy_handler(
143 WLAN_UMAC_COMP_MLME,
144 mlme_peer_object_destroyed_notification,
145 NULL);
146 if (QDF_IS_STATUS_ERROR(status)) {
147 mlme_err("peer destroy register notification failed");
148 return QDF_STATUS_E_FAILURE;
149 }
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530150
151 return status;
152}
153
154QDF_STATUS ucfg_mlme_deinit(void)
155{
156 QDF_STATUS status;
157
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530158 status = wlan_objmgr_unregister_peer_destroy_handler(
159 WLAN_UMAC_COMP_MLME,
160 mlme_peer_object_destroyed_notification,
161 NULL);
162 if (QDF_IS_STATUS_ERROR(status))
163 mlme_err("unable to unregister peer destroy handle");
164
165 status = wlan_objmgr_unregister_peer_create_handler(
166 WLAN_UMAC_COMP_MLME,
167 mlme_peer_object_created_notification,
168 NULL);
169 if (QDF_IS_STATUS_ERROR(status))
170 mlme_err("unable to unregister peer create handle");
171
gaurank kathpalia24ed0f42018-11-13 15:37:49 +0530172 status = ucfg_mlme_vdev_deinit();
173 if (QDF_IS_STATUS_ERROR(status))
174 mlme_err("unable to unregister vdev destroy handle");
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530175
176 status = wlan_objmgr_unregister_psoc_destroy_handler(
177 WLAN_UMAC_COMP_MLME,
178 mlme_psoc_object_destroyed_notification,
179 NULL);
gaurank kathpalia24ed0f42018-11-13 15:37:49 +0530180 if (QDF_IS_STATUS_ERROR(status))
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530181 mlme_err("unable to unregister psoc destroy handle");
182
gaurank kathpalia24ed0f42018-11-13 15:37:49 +0530183 status = wlan_objmgr_unregister_psoc_create_handler(
184 WLAN_UMAC_COMP_MLME,
185 mlme_psoc_object_created_notification,
186 NULL);
187
188 if (status != QDF_STATUS_SUCCESS)
189 mlme_err("unable to unregister psoc create handle");
190
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530191 return status;
192}
193
194QDF_STATUS ucfg_mlme_psoc_open(struct wlan_objmgr_psoc *psoc)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530195{
196 QDF_STATUS status;
197
198 status = mlme_cfg_on_psoc_enable(psoc);
199 if (!QDF_IS_STATUS_SUCCESS(status))
200 mlme_err("Failed to initialize MLME CFG");
201
202 return status;
203}
204
Vignesh Viswanathana0921c42018-09-04 19:03:35 +0530205void ucfg_mlme_psoc_close(struct wlan_objmgr_psoc *psoc)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530206{
207 /* Clear the MLME CFG Structure */
208}
Sandeep Puligillab7beb472018-08-13 22:54:20 -0700209
210#ifdef CONFIG_VDEV_SM
211QDF_STATUS ucfg_mlme_pdev_open(struct wlan_objmgr_pdev *pdev)
212{
Abhishek Singhd5cf22d2019-01-08 19:51:09 +0530213 struct pdev_mlme_obj *pdev_mlme;
214
215 pdev_mlme = wlan_pdev_mlme_get_cmpt_obj(pdev);
216 if (!pdev_mlme) {
217 mlme_err(" PDEV MLME is NULL");
218 return QDF_STATUS_E_FAILURE;
219 }
220 pdev_mlme->mlme_register_ops = mlme_register_vdev_mgr_ops;
Sandeep Puligillab7beb472018-08-13 22:54:20 -0700221
222 return QDF_STATUS_SUCCESS;
223}
224
225QDF_STATUS ucfg_mlme_pdev_close(struct wlan_objmgr_pdev *pdev)
226{
227 return QDF_STATUS_SUCCESS;
228}
229#endif
Wu Gao406c53c2018-09-10 13:51:37 +0800230
231QDF_STATUS
232ucfg_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc,
233 uint32_t *val)
234{
235 struct wlan_mlme_psoc_obj *mlme_obj;
236
237 mlme_obj = mlme_get_psoc_obj(psoc);
238 if (!mlme_obj) {
239 *val = cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
Wu Gao406c53c2018-09-10 13:51:37 +0800240 return QDF_STATUS_E_INVAL;
241 }
242
243 *val = mlme_obj->cfg.sta.sta_keep_alive_period;
244
245 return QDF_STATUS_SUCCESS;
246}
247
248QDF_STATUS
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700249ucfg_mlme_get_dfs_master_capability(struct wlan_objmgr_psoc *psoc,
250 bool *val)
251{
252 struct wlan_mlme_psoc_obj *mlme_obj;
253
254 mlme_obj = mlme_get_psoc_obj(psoc);
255 if (!mlme_obj) {
256 *val = cfg_default(CFG_ENABLE_DFS_MASTER_CAPABILITY);
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700257 return QDF_STATUS_E_INVAL;
258 }
259
260 *val = mlme_obj->cfg.dfs_cfg.dfs_master_capable;
261
262 return QDF_STATUS_SUCCESS;
263}
264
265QDF_STATUS
Arif Hussainbd5194c2018-11-27 19:01:15 -0800266ucfg_mlme_get_fine_time_meas_cap(struct wlan_objmgr_psoc *psoc,
267 uint32_t *fine_time_meas_cap)
268{
269 struct wlan_mlme_psoc_obj *mlme_obj;
270
271 mlme_obj = mlme_get_psoc_obj(psoc);
272 if (!mlme_obj) {
273 *fine_time_meas_cap =
274 cfg_default(CFG_FINE_TIME_MEAS_CAPABILITY);
275 return QDF_STATUS_E_INVAL;
276 }
277
278 *fine_time_meas_cap = mlme_obj->cfg.wifi_pos_cfg.fine_time_meas_cap;
279
280 return QDF_STATUS_SUCCESS;
281}
282
283QDF_STATUS
284ucfg_mlme_set_fine_time_meas_cap(struct wlan_objmgr_psoc *psoc,
285 uint32_t fine_time_meas_cap)
286{
287 struct wlan_mlme_psoc_obj *mlme_obj;
288
289 mlme_obj = mlme_get_psoc_obj(psoc);
290 if (!mlme_obj)
291 return QDF_STATUS_E_INVAL;
292
293 mlme_obj->cfg.wifi_pos_cfg.fine_time_meas_cap = fine_time_meas_cap;
294
295 return QDF_STATUS_SUCCESS;
296}
297
298QDF_STATUS
Arif Hussain224d3812018-11-16 17:58:38 -0800299ucfg_mlme_get_dfs_disable_channel_switch(struct wlan_objmgr_psoc *psoc,
300 bool *dfs_disable_channel_switch)
301{
302 struct wlan_mlme_psoc_obj *mlme_obj;
303
304 mlme_obj = mlme_get_psoc_obj(psoc);
305 if (!mlme_obj) {
306 *dfs_disable_channel_switch =
307 cfg_default(CFG_DISABLE_DFS_CH_SWITCH);
Arif Hussain224d3812018-11-16 17:58:38 -0800308 return QDF_STATUS_E_INVAL;
309 }
310
311 *dfs_disable_channel_switch =
312 mlme_obj->cfg.dfs_cfg.dfs_disable_channel_switch;
313
314 return QDF_STATUS_SUCCESS;
315}
316
317QDF_STATUS
318ucfg_mlme_set_dfs_disable_channel_switch(struct wlan_objmgr_psoc *psoc,
319 bool dfs_disable_channel_switch)
320{
321 struct wlan_mlme_psoc_obj *mlme_obj;
322
323 mlme_obj = mlme_get_psoc_obj(psoc);
324 if (!mlme_obj) {
Arif Hussain224d3812018-11-16 17:58:38 -0800325 return QDF_STATUS_E_INVAL;
326 }
327
328 mlme_obj->cfg.dfs_cfg.dfs_disable_channel_switch =
329 dfs_disable_channel_switch;
330
331 return QDF_STATUS_SUCCESS;
332}
333
334QDF_STATUS
335ucfg_mlme_get_dfs_ignore_cac(struct wlan_objmgr_psoc *psoc,
336 bool *dfs_ignore_cac)
337{
338 struct wlan_mlme_psoc_obj *mlme_obj;
339
340 mlme_obj = mlme_get_psoc_obj(psoc);
341 if (!mlme_obj) {
342 *dfs_ignore_cac = cfg_default(CFG_IGNORE_CAC);
Arif Hussain224d3812018-11-16 17:58:38 -0800343 return QDF_STATUS_E_INVAL;
344 }
345
346 *dfs_ignore_cac = mlme_obj->cfg.dfs_cfg.dfs_ignore_cac;
347
348 return QDF_STATUS_SUCCESS;
349}
350
351QDF_STATUS
352ucfg_mlme_set_dfs_ignore_cac(struct wlan_objmgr_psoc *psoc,
353 bool dfs_ignore_cac)
354{
355 struct wlan_mlme_psoc_obj *mlme_obj;
356
357 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530358 if (!mlme_obj)
Arif Hussain224d3812018-11-16 17:58:38 -0800359 return QDF_STATUS_E_INVAL;
Arif Hussain224d3812018-11-16 17:58:38 -0800360
361 mlme_obj->cfg.dfs_cfg.dfs_ignore_cac = dfs_ignore_cac;
362
363 return QDF_STATUS_SUCCESS;
364}
365
366QDF_STATUS
367ucfg_mlme_get_sap_tx_leakage_threshold(struct wlan_objmgr_psoc *psoc,
368 uint32_t *sap_tx_leakage_threshold)
369{
370 struct wlan_mlme_psoc_obj *mlme_obj;
371
372 mlme_obj = mlme_get_psoc_obj(psoc);
373 if (!mlme_obj) {
374 *sap_tx_leakage_threshold =
375 cfg_default(CFG_SAP_TX_LEAKAGE_THRESHOLD);
Arif Hussain224d3812018-11-16 17:58:38 -0800376 return QDF_STATUS_E_INVAL;
377 }
378
379 *sap_tx_leakage_threshold =
380 mlme_obj->cfg.dfs_cfg.sap_tx_leakage_threshold;
381
382 return QDF_STATUS_SUCCESS;
383}
384
385QDF_STATUS
386ucfg_mlme_set_sap_tx_leakage_threshold(struct wlan_objmgr_psoc *psoc,
387 uint32_t sap_tx_leakage_threshold)
388{
389 struct wlan_mlme_psoc_obj *mlme_obj;
390
391 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530392 if (!mlme_obj)
Arif Hussain224d3812018-11-16 17:58:38 -0800393 return QDF_STATUS_E_INVAL;
Arif Hussain224d3812018-11-16 17:58:38 -0800394
395 mlme_obj->cfg.dfs_cfg.sap_tx_leakage_threshold =
396 sap_tx_leakage_threshold;
397
398 return QDF_STATUS_SUCCESS;
399}
400
401QDF_STATUS
402ucfg_mlme_get_dfs_filter_offload(struct wlan_objmgr_psoc *psoc,
403 bool *dfs_filter_offload)
404{
405 struct wlan_mlme_psoc_obj *mlme_obj;
406
407 mlme_obj = mlme_get_psoc_obj(psoc);
408 if (!mlme_obj) {
409 *dfs_filter_offload =
410 cfg_default(CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD);
Arif Hussain224d3812018-11-16 17:58:38 -0800411 return QDF_STATUS_E_INVAL;
412 }
413
414 *dfs_filter_offload = mlme_obj->cfg.dfs_cfg.dfs_filter_offload;
415
416 return QDF_STATUS_SUCCESS;
417}
418
419QDF_STATUS
420ucfg_mlme_set_dfs_filter_offload(struct wlan_objmgr_psoc *psoc,
421 bool dfs_filter_offload)
422{
423 struct wlan_mlme_psoc_obj *mlme_obj;
424
425 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530426 if (!mlme_obj)
Arif Hussain224d3812018-11-16 17:58:38 -0800427 return QDF_STATUS_E_INVAL;
Arif Hussain224d3812018-11-16 17:58:38 -0800428
429 mlme_obj->cfg.dfs_cfg.dfs_filter_offload = dfs_filter_offload;
430
431 return QDF_STATUS_SUCCESS;
432}
433
434QDF_STATUS
Wu Gao406c53c2018-09-10 13:51:37 +0800435ucfg_mlme_get_pmkid_modes(struct wlan_objmgr_psoc *psoc,
436 uint32_t *val)
437{
438 struct wlan_mlme_psoc_obj *mlme_obj;
439
440 mlme_obj = mlme_get_psoc_obj(psoc);
441 if (!mlme_obj) {
442 *val = cfg_default(CFG_PMKID_MODES);
Wu Gao406c53c2018-09-10 13:51:37 +0800443 return QDF_STATUS_E_INVAL;
444 }
445
446 *val = mlme_obj->cfg.sta.pmkid_modes;
447
448 return QDF_STATUS_SUCCESS;
449}
450
451QDF_STATUS
452ucfg_mlme_set_pmkid_modes(struct wlan_objmgr_psoc *psoc,
453 uint32_t val)
454{
455 struct wlan_mlme_psoc_obj *mlme_obj;
456
457 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530458 if (!mlme_obj)
Wu Gao406c53c2018-09-10 13:51:37 +0800459 return QDF_STATUS_E_INVAL;
Wu Gao406c53c2018-09-10 13:51:37 +0800460
461 mlme_obj->cfg.sta.pmkid_modes = val;
462
463 return QDF_STATUS_SUCCESS;
464}
465
466QDF_STATUS
Arif Hussain178f35f2018-11-13 18:26:18 -0800467ucfg_mlme_get_twt_requestor(struct wlan_objmgr_psoc *psoc,
468 bool *val)
469{
470 struct wlan_mlme_psoc_obj *mlme_obj;
471
472 mlme_obj = mlme_get_psoc_obj(psoc);
473 if (!mlme_obj) {
474 *val = cfg_default(CFG_TWT_REQUESTOR);
Arif Hussain178f35f2018-11-13 18:26:18 -0800475 return QDF_STATUS_E_INVAL;
476 }
477
478 *val = mlme_obj->cfg.twt_cfg.is_twt_requestor_enabled;
479
480 return QDF_STATUS_SUCCESS;
481}
482
483QDF_STATUS
484ucfg_mlme_set_twt_requestor(struct wlan_objmgr_psoc *psoc,
485 bool val)
486{
487 struct wlan_mlme_psoc_obj *mlme_obj;
488
489 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530490 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800491 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800492
493 mlme_obj->cfg.twt_cfg.is_twt_requestor_enabled = val;
494
495 return QDF_STATUS_SUCCESS;
496}
497
498QDF_STATUS
499ucfg_mlme_get_twt_responder(struct wlan_objmgr_psoc *psoc,
500 bool *val)
501{
502 struct wlan_mlme_psoc_obj *mlme_obj;
503
504 mlme_obj = mlme_get_psoc_obj(psoc);
505 if (!mlme_obj) {
506 *val = cfg_default(CFG_TWT_RESPONDER);
Arif Hussain178f35f2018-11-13 18:26:18 -0800507 return QDF_STATUS_E_INVAL;
508 }
509
510 *val = mlme_obj->cfg.twt_cfg.is_twt_responder_enabled;
511
512 return QDF_STATUS_SUCCESS;
513}
514
515QDF_STATUS
516ucfg_mlme_set_twt_responder(struct wlan_objmgr_psoc *psoc,
517 bool val)
518{
519 struct wlan_mlme_psoc_obj *mlme_obj;
520
521 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530522 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800523 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800524
525 mlme_obj->cfg.twt_cfg.is_twt_responder_enabled = val;
526
527 return QDF_STATUS_SUCCESS;
528}
529
530QDF_STATUS
531ucfg_mlme_get_bcast_twt(struct wlan_objmgr_psoc *psoc,
532 bool *val)
533{
534 struct wlan_mlme_psoc_obj *mlme_obj;
535
536 mlme_obj = mlme_get_psoc_obj(psoc);
537 if (!mlme_obj) {
538 *val = cfg_default(CFG_BCAST_TWT);
Arif Hussain178f35f2018-11-13 18:26:18 -0800539 return QDF_STATUS_E_INVAL;
540 }
541
542 *val = mlme_obj->cfg.twt_cfg.is_twt_bcast_enabled;
543
544 return QDF_STATUS_SUCCESS;
545}
546
547QDF_STATUS
548ucfg_mlme_set_bcast_twt(struct wlan_objmgr_psoc *psoc,
549 bool val)
550{
551 struct wlan_mlme_psoc_obj *mlme_obj;
552
553 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530554 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800555 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800556
557 mlme_obj->cfg.twt_cfg.is_twt_bcast_enabled = val;
558
559 return QDF_STATUS_SUCCESS;
560}
561
562QDF_STATUS
563ucfg_mlme_get_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
564 uint32_t *val)
565{
566 struct wlan_mlme_psoc_obj *mlme_obj;
567
568 mlme_obj = mlme_get_psoc_obj(psoc);
569 if (!mlme_obj) {
570 *val = cfg_default(CFG_TWT_CONGESTION_TIMEOUT);
Arif Hussain178f35f2018-11-13 18:26:18 -0800571 return QDF_STATUS_E_INVAL;
572 }
573
574 *val = mlme_obj->cfg.twt_cfg.twt_congestion_timeout;
575
576 return QDF_STATUS_SUCCESS;
577}
578
579QDF_STATUS
580ucfg_mlme_set_twt_congestion_timeout(struct wlan_objmgr_psoc *psoc,
581 uint32_t val)
582{
583 struct wlan_mlme_psoc_obj *mlme_obj;
584
585 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530586 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800587 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800588
589 mlme_obj->cfg.twt_cfg.twt_congestion_timeout = val;
590
591 return QDF_STATUS_SUCCESS;
592}
593
594QDF_STATUS
595ucfg_mlme_get_enable_twt(struct wlan_objmgr_psoc *psoc,
596 bool *val)
597{
598 struct wlan_mlme_psoc_obj *mlme_obj;
599
600 mlme_obj = mlme_get_psoc_obj(psoc);
601 if (!mlme_obj) {
602 *val = cfg_default(CFG_ENABLE_TWT);
Arif Hussain178f35f2018-11-13 18:26:18 -0800603 return QDF_STATUS_E_INVAL;
604 }
605
606 *val = mlme_obj->cfg.twt_cfg.is_twt_enabled;
607
608 return QDF_STATUS_SUCCESS;
609}
610
611QDF_STATUS
612ucfg_mlme_set_enable_twt(struct wlan_objmgr_psoc *psoc,
613 bool val)
614{
615 struct wlan_mlme_psoc_obj *mlme_obj;
616
617 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530618 if (!mlme_obj)
Arif Hussain178f35f2018-11-13 18:26:18 -0800619 return QDF_STATUS_E_INVAL;
Arif Hussain178f35f2018-11-13 18:26:18 -0800620
621 mlme_obj->cfg.twt_cfg.is_twt_enabled = val;
622
623 return QDF_STATUS_SUCCESS;
624}
625
626QDF_STATUS
Wu Gao406c53c2018-09-10 13:51:37 +0800627ucfg_mlme_get_dot11p_mode(struct wlan_objmgr_psoc *psoc,
Dustin Brown686d3032018-10-17 16:58:50 -0700628 enum dot11p_mode *out_mode)
Wu Gao406c53c2018-09-10 13:51:37 +0800629{
630 struct wlan_mlme_psoc_obj *mlme_obj;
631
632 mlme_obj = mlme_get_psoc_obj(psoc);
633 if (!mlme_obj) {
Dustin Brown686d3032018-10-17 16:58:50 -0700634 *out_mode = cfg_default(CFG_DOT11P_MODE);
Wu Gao406c53c2018-09-10 13:51:37 +0800635 return QDF_STATUS_E_INVAL;
636 }
637
Dustin Brown686d3032018-10-17 16:58:50 -0700638 *out_mode = mlme_obj->cfg.sta.dot11p_mode;
Wu Gao406c53c2018-09-10 13:51:37 +0800639
640 return QDF_STATUS_SUCCESS;
641}
642
643QDF_STATUS
644ucfg_mlme_get_go_cts2self_for_sta(struct wlan_objmgr_psoc *psoc,
645 bool *val)
646{
647 struct wlan_mlme_psoc_obj *mlme_obj;
648
649 mlme_obj = mlme_get_psoc_obj(psoc);
650 if (!mlme_obj) {
651 *val = cfg_default(CFG_ENABLE_GO_CTS2SELF_FOR_STA);
Wu Gao406c53c2018-09-10 13:51:37 +0800652 return QDF_STATUS_E_INVAL;
653 }
654
655 *val = mlme_obj->cfg.sta.enable_go_cts2self_for_sta;
656
657 return QDF_STATUS_SUCCESS;
658}
659
660QDF_STATUS
661ucfg_mlme_get_force_rsne_override(struct wlan_objmgr_psoc *psoc,
662 bool *val)
663{
664 struct wlan_mlme_psoc_obj *mlme_obj;
665
666 mlme_obj = mlme_get_psoc_obj(psoc);
667 if (!mlme_obj) {
668 *val = cfg_default(CFG_FORCE_RSNE_OVERRIDE);
Wu Gao406c53c2018-09-10 13:51:37 +0800669 return QDF_STATUS_E_INVAL;
670 }
671
672 *val = mlme_obj->cfg.sta.force_rsne_override;
673
674 return QDF_STATUS_SUCCESS;
675}
676
677QDF_STATUS
678ucfg_mlme_get_qcn_ie_support(struct wlan_objmgr_psoc *psoc,
679 bool *val)
680{
681 struct wlan_mlme_psoc_obj *mlme_obj;
682
683 mlme_obj = mlme_get_psoc_obj(psoc);
684 if (!mlme_obj) {
685 *val = cfg_default(CFG_QCN_IE_SUPPORT);
Wu Gao406c53c2018-09-10 13:51:37 +0800686 return QDF_STATUS_E_INVAL;
687 }
688
689 *val = mlme_obj->cfg.sta.qcn_ie_support;
690
691 return QDF_STATUS_SUCCESS;
692}
693
694QDF_STATUS
695ucfg_mlme_get_tgt_gtx_usr_cfg(struct wlan_objmgr_psoc *psoc,
696 uint32_t *val)
697{
698 struct wlan_mlme_psoc_obj *mlme_obj;
699
700 mlme_obj = mlme_get_psoc_obj(psoc);
701 if (!mlme_obj) {
702 *val = cfg_default(CFG_TGT_GTX_USR_CFG);
Wu Gao406c53c2018-09-10 13:51:37 +0800703 return QDF_STATUS_E_INVAL;
704 }
705
706 *val = mlme_obj->cfg.sta.tgt_gtx_usr_cfg;
707
708 return QDF_STATUS_SUCCESS;
709}
Wu Gao55f21712018-09-17 10:57:49 +0800710
711QDF_STATUS
Wu Gaofc81ecf2018-11-22 11:38:41 +0800712ucfg_mlme_is_override_ht20_40_24g(struct wlan_objmgr_psoc *psoc, bool *val)
713{
714 struct wlan_mlme_psoc_obj *mlme_obj;
715
716 mlme_obj = mlme_get_psoc_obj(psoc);
717 if (!mlme_obj) {
718 *val = cfg_default(CFG_OBSS_HT40_OVERRIDE_HT40_20_24GHZ);
Wu Gaofc81ecf2018-11-22 11:38:41 +0800719 return QDF_STATUS_E_INVAL;
720 }
721 *val = mlme_obj->cfg.obss_ht40.is_override_ht20_40_24g;
722
723 return QDF_STATUS_SUCCESS;
724}
725
Wu Gao5d23d782018-11-08 16:09:47 +0800726#ifdef WLAN_FEATURE_ROAM_OFFLOAD
Wu Gaofc81ecf2018-11-22 11:38:41 +0800727QDF_STATUS
Wu Gao55f21712018-09-17 10:57:49 +0800728ucfg_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
729 bool *val)
730{
731 struct wlan_mlme_psoc_obj *mlme_obj;
732
733 mlme_obj = mlme_get_psoc_obj(psoc);
734 if (!mlme_obj) {
735 *val = cfg_default(CFG_LFR3_ROAMING_OFFLOAD);
Wu Gao55f21712018-09-17 10:57:49 +0800736 return QDF_STATUS_E_INVAL;
737 }
738
739 *val = mlme_obj->cfg.lfr.lfr3_roaming_offload;
740
741 return QDF_STATUS_SUCCESS;
742}
743
744QDF_STATUS
745ucfg_mlme_set_roaming_offload(struct wlan_objmgr_psoc *psoc,
746 bool val)
747{
748 struct wlan_mlme_psoc_obj *mlme_obj;
749
750 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530751 if (!mlme_obj)
Wu Gao55f21712018-09-17 10:57:49 +0800752 return QDF_STATUS_E_INVAL;
Wu Gao55f21712018-09-17 10:57:49 +0800753
754 mlme_obj->cfg.lfr.lfr3_roaming_offload = val;
755
756 return QDF_STATUS_SUCCESS;
757}
Wu Gao5d23d782018-11-08 16:09:47 +0800758#endif
Wu Gao55f21712018-09-17 10:57:49 +0800759
760QDF_STATUS
761ucfg_mlme_get_first_scan_bucket_threshold(struct wlan_objmgr_psoc *psoc,
762 uint8_t *val)
763{
764 struct wlan_mlme_psoc_obj *mlme_obj;
765
766 mlme_obj = mlme_get_psoc_obj(psoc);
767 if (!mlme_obj) {
768 *val = cfg_default(CFG_LFR_FIRST_SCAN_BUCKET_THRESHOLD);
Wu Gao55f21712018-09-17 10:57:49 +0800769 return QDF_STATUS_E_INVAL;
770 }
771
772 *val = mlme_obj->cfg.lfr.first_scan_bucket_threshold;
773
774 return QDF_STATUS_SUCCESS;
775}
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530776
777QDF_STATUS
Pragaspathi Thilagarajeb367282019-02-19 00:42:28 +0530778ucfg_mlme_set_fw_supported_roaming_akm(struct wlan_objmgr_psoc *psoc,
779 uint32_t val)
780{
781 struct wlan_mlme_psoc_obj *mlme_obj;
782
783 mlme_obj = mlme_get_psoc_obj(psoc);
784 if (!mlme_obj)
785 return QDF_STATUS_E_INVAL;
786
787 mlme_obj->cfg.lfr.fw_akm_bitmap = val;
788 return QDF_STATUS_SUCCESS;
789}
790
791QDF_STATUS
Wu Gao5d23d782018-11-08 16:09:47 +0800792ucfg_mlme_is_mawc_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
793{
794 struct wlan_mlme_psoc_obj *mlme_obj;
795
796 mlme_obj = mlme_get_psoc_obj(psoc);
797 if (!mlme_obj) {
798 *val = cfg_default(CFG_LFR_MAWC_FEATURE_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800799 return QDF_STATUS_E_INVAL;
800 }
801 *val = mlme_obj->cfg.lfr.mawc_enabled;
802
803 return QDF_STATUS_SUCCESS;
804}
805
806QDF_STATUS
807ucfg_mlme_set_mawc_enabled(struct wlan_objmgr_psoc *psoc, bool val)
808{
809 struct wlan_mlme_psoc_obj *mlme_obj;
810
811 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530812 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +0800813 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +0800814
815 mlme_obj->cfg.lfr.mawc_enabled = val;
816
817 return QDF_STATUS_SUCCESS;
818}
819
820QDF_STATUS
821ucfg_mlme_is_fast_transition_enabled(struct wlan_objmgr_psoc *psoc,
822 bool *val)
823{
824 struct wlan_mlme_psoc_obj *mlme_obj;
825
826 mlme_obj = mlme_get_psoc_obj(psoc);
827 if (!mlme_obj) {
828 *val = cfg_default(CFG_LFR_FAST_TRANSITION_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800829 return QDF_STATUS_E_INVAL;
830 }
831
832 *val = mlme_obj->cfg.lfr.fast_transition_enabled;
833
834 return QDF_STATUS_SUCCESS;
835}
836
837QDF_STATUS
838ucfg_mlme_set_fast_transition_enabled(struct wlan_objmgr_psoc *psoc,
839 bool val)
840{
841 struct wlan_mlme_psoc_obj *mlme_obj;
842
843 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530844 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +0800845 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +0800846
847 mlme_obj->cfg.lfr.fast_transition_enabled = val;
848
849 return QDF_STATUS_SUCCESS;
850}
851
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +0530852#ifdef WLAN_ADAPTIVE_11R
853QDF_STATUS
854ucfg_mlme_set_tgt_adaptive_11r_cap(struct wlan_objmgr_psoc *psoc,
855 bool val)
856{
857 struct wlan_mlme_psoc_obj *mlme_obj;
858
859 mlme_obj = mlme_get_psoc_obj(psoc);
860 if (!mlme_obj)
861 return QDF_STATUS_E_INVAL;
862
863 mlme_obj->cfg.lfr.tgt_adaptive_11r_cap = val;
864
865 return QDF_STATUS_SUCCESS;
866}
867#endif
868
Wu Gao5d23d782018-11-08 16:09:47 +0800869QDF_STATUS
870ucfg_mlme_is_roam_scan_offload_enabled(struct wlan_objmgr_psoc *psoc,
871 bool *val)
872{
873 struct wlan_mlme_psoc_obj *mlme_obj;
874
875 mlme_obj = mlme_get_psoc_obj(psoc);
876 if (!mlme_obj) {
877 *val = cfg_default(CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800878 return QDF_STATUS_E_INVAL;
879 }
880
881 *val = mlme_obj->cfg.lfr.roam_scan_offload_enabled;
882
883 return QDF_STATUS_SUCCESS;
884}
885
886QDF_STATUS
887ucfg_mlme_set_roam_scan_offload_enabled(struct wlan_objmgr_psoc *psoc,
888 bool val)
889{
890 struct wlan_mlme_psoc_obj *mlme_obj;
891
892 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +0530893 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +0800894 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +0800895
896 mlme_obj->cfg.lfr.roam_scan_offload_enabled = val;
897
898 return QDF_STATUS_SUCCESS;
899}
900
901QDF_STATUS
902ucfg_mlme_get_neighbor_scan_max_chan_time(struct wlan_objmgr_psoc *psoc,
903 uint16_t *val)
904{
905 struct wlan_mlme_psoc_obj *mlme_obj;
906
907 mlme_obj = mlme_get_psoc_obj(psoc);
908 if (!mlme_obj) {
909 *val = cfg_default(CFG_LFR_NEIGHBOR_SCAN_MAX_CHAN_TIME);
Wu Gao5d23d782018-11-08 16:09:47 +0800910 return QDF_STATUS_E_INVAL;
911 }
912
913 *val = mlme_obj->cfg.lfr.neighbor_scan_max_chan_time;
914
915 return QDF_STATUS_SUCCESS;
916}
917
918QDF_STATUS
919ucfg_mlme_get_neighbor_scan_min_chan_time(struct wlan_objmgr_psoc *psoc,
920 uint16_t *val)
921{
922 struct wlan_mlme_psoc_obj *mlme_obj;
923
924 mlme_obj = mlme_get_psoc_obj(psoc);
925 if (!mlme_obj) {
926 *val = cfg_default(CFG_LFR_NEIGHBOR_SCAN_MIN_CHAN_TIME);
Wu Gao5d23d782018-11-08 16:09:47 +0800927 return QDF_STATUS_E_INVAL;
928 }
929
930 *val = mlme_obj->cfg.lfr.neighbor_scan_min_chan_time;
931
932 return QDF_STATUS_SUCCESS;
933}
934
935QDF_STATUS
936ucfg_mlme_get_delay_before_vdev_stop(struct wlan_objmgr_psoc *psoc,
937 uint8_t *val)
938{
939 struct wlan_mlme_psoc_obj *mlme_obj;
940
941 mlme_obj = mlme_get_psoc_obj(psoc);
942 if (!mlme_obj) {
943 *val = cfg_default(CFG_LFR_DELAY_BEFORE_VDEV_STOP);
Wu Gao5d23d782018-11-08 16:09:47 +0800944 return QDF_STATUS_E_INVAL;
945 }
946
947 *val = mlme_obj->cfg.lfr.delay_before_vdev_stop;
948
949 return QDF_STATUS_SUCCESS;
950}
951
952QDF_STATUS
953ucfg_mlme_get_roam_bmiss_final_bcnt(struct wlan_objmgr_psoc *psoc,
954 uint8_t *val)
955{
956 struct wlan_mlme_psoc_obj *mlme_obj;
957
958 mlme_obj = mlme_get_psoc_obj(psoc);
959 if (!mlme_obj) {
960 *val = cfg_default(CFG_LFR_ROAM_BMISS_FINAL_BCNT);
Wu Gao5d23d782018-11-08 16:09:47 +0800961 return QDF_STATUS_E_INVAL;
962 }
963
964 *val = mlme_obj->cfg.lfr.roam_bmiss_final_bcnt;
965
966 return QDF_STATUS_SUCCESS;
967}
968
969QDF_STATUS
970ucfg_mlme_get_roam_bmiss_first_bcnt(struct wlan_objmgr_psoc *psoc,
971 uint8_t *val)
972{
973 struct wlan_mlme_psoc_obj *mlme_obj;
974
975 mlme_obj = mlme_get_psoc_obj(psoc);
976 if (!mlme_obj) {
977 *val = cfg_default(CFG_LFR_ROAM_BMISS_FIRST_BCNT);
Wu Gao5d23d782018-11-08 16:09:47 +0800978 return QDF_STATUS_E_INVAL;
979 }
980
981 *val = mlme_obj->cfg.lfr.roam_bmiss_first_bcnt;
982
983 return QDF_STATUS_SUCCESS;
984}
985
986QDF_STATUS
987ucfg_mlme_is_lfr_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
988{
989 struct wlan_mlme_psoc_obj *mlme_obj;
990
991 mlme_obj = mlme_get_psoc_obj(psoc);
992 if (!mlme_obj) {
993 *val = cfg_default(CFG_LFR_FEATURE_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +0800994 return QDF_STATUS_E_INVAL;
995 }
996
997 *val = mlme_obj->cfg.lfr.lfr_enabled;
998
999 return QDF_STATUS_SUCCESS;
1000}
1001
1002QDF_STATUS
1003ucfg_mlme_set_lfr_enabled(struct wlan_objmgr_psoc *psoc, bool val)
1004{
1005 struct wlan_mlme_psoc_obj *mlme_obj;
1006
1007 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301008 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +08001009 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +08001010
1011 mlme_obj->cfg.lfr.lfr_enabled = val;
1012
1013 return QDF_STATUS_SUCCESS;
1014}
1015
1016QDF_STATUS
1017ucfg_mlme_is_roam_prefer_5ghz(struct wlan_objmgr_psoc *psoc, bool *val)
1018{
1019 struct wlan_mlme_psoc_obj *mlme_obj;
1020
1021 mlme_obj = mlme_get_psoc_obj(psoc);
1022 if (!mlme_obj) {
1023 *val = cfg_default(CFG_LFR_ROAM_PREFER_5GHZ);
Wu Gao5d23d782018-11-08 16:09:47 +08001024 return QDF_STATUS_E_INVAL;
1025 }
1026
1027 *val = mlme_obj->cfg.lfr.roam_prefer_5ghz;
1028
1029 return QDF_STATUS_SUCCESS;
1030}
1031
1032QDF_STATUS
1033ucfg_mlme_set_roam_intra_band(struct wlan_objmgr_psoc *psoc, bool val)
1034{
1035 struct wlan_mlme_psoc_obj *mlme_obj;
1036
1037 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301038 if (!mlme_obj)
Wu Gao5d23d782018-11-08 16:09:47 +08001039 return QDF_STATUS_E_INVAL;
Wu Gao5d23d782018-11-08 16:09:47 +08001040
1041 mlme_obj->cfg.lfr.roam_intra_band = val;
1042
1043 return QDF_STATUS_SUCCESS;
1044}
1045
1046QDF_STATUS
1047ucfg_mlme_get_home_away_time(struct wlan_objmgr_psoc *psoc, uint16_t *val)
1048{
1049 struct wlan_mlme_psoc_obj *mlme_obj;
1050
1051 mlme_obj = mlme_get_psoc_obj(psoc);
1052 if (!mlme_obj) {
1053 *val = cfg_default(CFG_LFR_ROAM_SCAN_HOME_AWAY_TIME);
Wu Gao5d23d782018-11-08 16:09:47 +08001054 return QDF_STATUS_E_INVAL;
1055 }
1056
1057 *val = mlme_obj->cfg.lfr.roam_scan_home_away_time;
1058
1059 return QDF_STATUS_SUCCESS;
1060}
1061
1062QDF_STATUS
1063ucfg_mlme_set_fast_roam_in_concurrency_enabled(struct wlan_objmgr_psoc *psoc,
1064 bool val)
1065{
1066 struct wlan_mlme_psoc_obj *mlme_obj;
1067
1068 mlme_obj = mlme_get_psoc_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.enable_fast_roam_in_concurrency = val;
1073
1074 return QDF_STATUS_SUCCESS;
1075}
1076
1077#ifdef FEATURE_WLAN_ESE
1078QDF_STATUS
1079ucfg_mlme_is_ese_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
1080{
1081 struct wlan_mlme_psoc_obj *mlme_obj;
1082
1083 mlme_obj = mlme_get_psoc_obj(psoc);
1084 if (!mlme_obj) {
1085 *val = cfg_default(CFG_LFR_ESE_FEATURE_ENABLED);
Wu Gao5d23d782018-11-08 16:09:47 +08001086 return QDF_STATUS_E_INVAL;
1087 }
1088
1089 *val = mlme_obj->cfg.lfr.ese_enabled;
1090
1091 return QDF_STATUS_SUCCESS;
1092}
1093#endif /* FEATURE_WLAN_ESE */
1094
1095QDF_STATUS
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301096ucfg_mlme_get_opr_rate_set(struct wlan_objmgr_psoc *psoc,
1097 uint8_t *buf, qdf_size_t *len)
1098{
1099 struct wlan_mlme_psoc_obj *mlme_obj;
1100
1101 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301102 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301103 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301104
1105 return wlan_mlme_get_cfg_str(buf, &mlme_obj->cfg.rates.opr_rate_set,
1106 len);
1107}
1108
1109QDF_STATUS
1110ucfg_mlme_get_ext_opr_rate_set(struct wlan_objmgr_psoc *psoc,
1111 uint8_t *buf, qdf_size_t *len)
1112{
1113 struct wlan_mlme_psoc_obj *mlme_obj;
1114
1115 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301116 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301117 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301118
1119 return wlan_mlme_get_cfg_str(buf, &mlme_obj->cfg.rates.ext_opr_rate_set,
1120 len);
1121}
1122
1123QDF_STATUS
1124ucfg_mlme_get_supported_mcs_set(struct wlan_objmgr_psoc *psoc,
1125 uint8_t *buf, qdf_size_t *len)
1126{
1127 struct wlan_mlme_psoc_obj *mlme_obj;
1128
1129 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301130 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301131 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301132
1133 return wlan_mlme_get_cfg_str(buf,
1134 &mlme_obj->cfg.rates.supported_mcs_set,
1135 len);
1136}
1137
1138QDF_STATUS
1139ucfg_mlme_set_supported_mcs_set(struct wlan_objmgr_psoc *psoc,
1140 uint8_t *buf, qdf_size_t len)
1141{
1142 struct wlan_mlme_psoc_obj *mlme_obj;
1143
1144 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301145 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301146 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301147
1148 return wlan_mlme_set_cfg_str(buf,
1149 &mlme_obj->cfg.rates.supported_mcs_set,
1150 len);
1151}
1152
1153QDF_STATUS
1154ucfg_mlme_get_current_mcs_set(struct wlan_objmgr_psoc *psoc,
1155 uint8_t *buf, qdf_size_t *len)
1156{
1157 struct wlan_mlme_psoc_obj *mlme_obj;
1158
1159 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301160 if (!mlme_obj)
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301161 return QDF_STATUS_E_INVAL;
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +05301162
1163 return wlan_mlme_get_cfg_str(buf,
1164 &mlme_obj->cfg.rates.current_mcs_set,
1165 len);
1166}
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001167
1168QDF_STATUS
Arif Hussain4966f692018-11-27 16:40:51 -08001169ucfg_mlme_get_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc,
1170 uint32_t *wmi_wq_watchdog_timeout)
1171{
1172 struct wlan_mlme_psoc_obj *mlme_obj;
1173
1174 mlme_obj = mlme_get_psoc_obj(psoc);
1175 if (!mlme_obj) {
1176 *wmi_wq_watchdog_timeout = cfg_default(CFG_WMI_WQ_WATCHDOG);
Arif Hussain4966f692018-11-27 16:40:51 -08001177 return QDF_STATUS_E_INVAL;
1178 }
1179
1180 *wmi_wq_watchdog_timeout =
1181 mlme_obj->cfg.timeouts.wmi_wq_watchdog_timeout;
1182
1183 return QDF_STATUS_SUCCESS;
1184}
1185
1186QDF_STATUS
1187ucfg_mlme_set_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc,
1188 uint32_t wmi_wq_watchdog_timeout)
1189{
1190 struct wlan_mlme_psoc_obj *mlme_obj;
1191
1192 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301193 if (!mlme_obj)
Arif Hussain4966f692018-11-27 16:40:51 -08001194 return QDF_STATUS_E_INVAL;
Arif Hussain4966f692018-11-27 16:40:51 -08001195
1196 if (!cfg_in_range(CFG_WMI_WQ_WATCHDOG, wmi_wq_watchdog_timeout)) {
1197 mlme_err("wmi watchdog bite timeout is invalid %d",
1198 wmi_wq_watchdog_timeout);
1199 return QDF_STATUS_E_INVAL;
1200 }
1201
1202 mlme_obj->cfg.timeouts.wmi_wq_watchdog_timeout =
1203 wmi_wq_watchdog_timeout;
1204
1205 return QDF_STATUS_SUCCESS;
1206}
1207
1208QDF_STATUS
Arif Hussaincca60432018-12-03 19:45:12 -08001209ucfg_mlme_stats_get_periodic_display_time(struct wlan_objmgr_psoc *psoc,
1210 uint32_t *periodic_display_time)
1211{
1212 struct wlan_mlme_psoc_obj *mlme_obj;
1213
1214 mlme_obj = mlme_get_psoc_obj(psoc);
1215 if (!mlme_obj) {
1216 *periodic_display_time =
1217 cfg_default(CFG_PERIODIC_STATS_DISPLAY_TIME);
1218 return QDF_STATUS_E_INVAL;
1219 }
1220
1221 *periodic_display_time =
1222 mlme_obj->cfg.stats.stats_periodic_display_time;
1223
1224 return QDF_STATUS_SUCCESS;
1225}
1226
1227QDF_STATUS
1228ucfg_mlme_stats_get_cfg_values(struct wlan_objmgr_psoc *psoc,
1229 int *link_speed_rssi_high,
1230 int *link_speed_rssi_mid,
1231 int *link_speed_rssi_low,
1232 uint32_t *link_speed_rssi_report)
1233{
1234 struct wlan_mlme_psoc_obj *mlme_obj;
1235
1236 mlme_obj = mlme_get_psoc_obj(psoc);
1237 if (!mlme_obj) {
1238 *link_speed_rssi_high =
1239 cfg_default(CFG_LINK_SPEED_RSSI_HIGH);
1240 *link_speed_rssi_mid =
1241 cfg_default(CFG_LINK_SPEED_RSSI_MID);
1242 *link_speed_rssi_low =
1243 cfg_default(CFG_LINK_SPEED_RSSI_LOW);
1244 *link_speed_rssi_report =
1245 cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1246 return QDF_STATUS_E_INVAL;
1247 }
1248
1249 *link_speed_rssi_high =
1250 mlme_obj->cfg.stats.stats_link_speed_rssi_high;
1251 *link_speed_rssi_mid =
1252 mlme_obj->cfg.stats.stats_link_speed_rssi_med;
1253 *link_speed_rssi_low =
1254 mlme_obj->cfg.stats.stats_link_speed_rssi_low;
1255 *link_speed_rssi_report =
1256 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1257
1258 return QDF_STATUS_SUCCESS;
1259}
1260
1261bool ucfg_mlme_stats_is_link_speed_report_actual(struct wlan_objmgr_psoc *psoc)
1262{
1263 struct wlan_mlme_psoc_obj *mlme_obj;
1264 int report_link_speed = 0;
1265
1266 mlme_obj = mlme_get_psoc_obj(psoc);
1267 if (!mlme_obj)
1268 report_link_speed = cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1269 else
1270 report_link_speed =
1271 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1272
1273 return (report_link_speed == CFG_STATS_LINK_SPEED_REPORT_ACTUAL);
1274}
1275
1276bool ucfg_mlme_stats_is_link_speed_report_max(struct wlan_objmgr_psoc *psoc)
1277{
1278 struct wlan_mlme_psoc_obj *mlme_obj;
1279 int report_link_speed = 0;
1280
1281 mlme_obj = mlme_get_psoc_obj(psoc);
1282 if (!mlme_obj)
1283 report_link_speed = cfg_default(CFG_REPORT_MAX_LINK_SPEED);
1284 else
1285 report_link_speed =
1286 mlme_obj->cfg.stats.stats_report_max_link_speed_rssi;
1287
1288 return (report_link_speed == CFG_STATS_LINK_SPEED_REPORT_MAX);
1289}
1290
1291bool
1292ucfg_mlme_stats_is_link_speed_report_max_scaled(struct wlan_objmgr_psoc *psoc)
1293{
1294 struct wlan_mlme_psoc_obj *mlme_obj;
1295 int report_link_speed = 0;
1296
1297 mlme_obj = mlme_get_psoc_obj(psoc);
1298 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_MAX_SCALED);
1305}
1306
1307QDF_STATUS
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001308ucfg_mlme_get_ps_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
1309 uint32_t *inactivity_timeout)
1310{
1311 struct wlan_mlme_psoc_obj *mlme_obj;
1312
1313 mlme_obj = mlme_get_psoc_obj(psoc);
1314 if (!mlme_obj) {
1315 *inactivity_timeout =
1316 cfg_default(CFG_PS_DATA_INACTIVITY_TIMEOUT);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301317 return QDF_STATUS_E_FAILURE;
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001318 }
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001319 *inactivity_timeout = mlme_obj->cfg.timeouts.ps_data_inactivity_timeout;
1320
1321 return QDF_STATUS_SUCCESS;
1322}
1323
1324QDF_STATUS
1325ucfg_mlme_set_ps_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
1326 uint32_t inactivity_timeout)
1327{
1328 struct wlan_mlme_psoc_obj *mlme_obj;
1329
1330 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301331 if (!mlme_obj)
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001332 return QDF_STATUS_E_INVAL;
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001333
1334 if (!cfg_in_range(CFG_PS_DATA_INACTIVITY_TIMEOUT, inactivity_timeout)) {
1335 mlme_err("inactivity timeout set value is invalid %d",
1336 inactivity_timeout);
1337 return QDF_STATUS_E_INVAL;
1338 }
Arif Hussain41cbc1e2018-11-15 05:54:45 -08001339 mlme_obj->cfg.timeouts.ps_data_inactivity_timeout = inactivity_timeout;
1340
1341 return QDF_STATUS_SUCCESS;
1342}
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301343
1344QDF_STATUS
1345ucfg_mlme_get_sta_keepalive_method(struct wlan_objmgr_psoc *psoc,
1346 enum station_keepalive_method *val)
1347{
1348 struct wlan_mlme_psoc_obj *mlme_obj;
1349
1350 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301351 if (!mlme_obj)
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301352 return QDF_STATUS_E_INVAL;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301353
1354 *val = mlme_obj->cfg.sta.sta_keepalive_method;
1355 return QDF_STATUS_SUCCESS;
1356}
1357
1358QDF_STATUS
1359ucfg_mlme_get_enable_deauth_to_disassoc_map(struct wlan_objmgr_psoc *psoc,
1360 bool *value)
1361{
1362 struct wlan_mlme_psoc_obj *mlme_obj;
1363
1364 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301365 if (!mlme_obj)
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301366 return QDF_STATUS_E_INVAL;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301367
1368 *value = mlme_obj->cfg.gen.enable_deauth_to_disassoc_map;
1369 return QDF_STATUS_SUCCESS;
1370}
1371
1372
1373QDF_STATUS
1374ucfg_mlme_get_ap_random_bssid_enable(struct wlan_objmgr_psoc *psoc,
1375 bool *value)
1376{
1377 struct wlan_mlme_psoc_obj *mlme_obj;
1378
1379 mlme_obj = mlme_get_psoc_obj(psoc);
Pragaspathi Thilagaraj9f790742018-12-12 01:38:41 +05301380 if (!mlme_obj)
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301381 return QDF_STATUS_E_INVAL;
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301382
1383 *value = mlme_obj->cfg.sap_cfg.ap_random_bssid_enable;
1384 return QDF_STATUS_SUCCESS;
1385}
Sourav Mohapatrac457ae62018-12-06 15:19:41 +05301386
1387QDF_STATUS
1388ucfg_mlme_get_latency_enable(struct wlan_objmgr_psoc *psoc, bool *value)
1389{
1390 struct wlan_mlme_psoc_obj *mlme_obj;
1391
1392 mlme_obj = mlme_get_psoc_obj(psoc);
1393 if (!mlme_obj) {
1394 mlme_err("mlme obj null");
1395 return QDF_STATUS_E_INVAL;
1396 }
1397
1398 *value = mlme_obj->cfg.wlm_config.latency_enable;
1399 return QDF_STATUS_SUCCESS;
1400}
lifengdb340e72018-11-20 00:50:20 +08001401
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001402QDF_STATUS ucfg_mlme_get_ibss_cfg(struct wlan_objmgr_psoc *psoc,
1403 struct wlan_mlme_ibss_cfg *ibss_cfg)
1404{
1405 struct wlan_mlme_psoc_obj *mlme_obj;
1406
1407 if (!ibss_cfg)
1408 return QDF_STATUS_E_FAILURE;
1409
1410 mlme_obj = mlme_get_psoc_obj(psoc);
1411 if (!mlme_obj) {
1412 mlme_err("MLME Obj null on get IBSS config");
1413 mlme_init_ibss_cfg(psoc, ibss_cfg);
1414 return QDF_STATUS_E_INVAL;
1415 }
1416 *ibss_cfg = mlme_obj->cfg.ibss;
1417 return QDF_STATUS_SUCCESS;
1418}
1419
1420QDF_STATUS ucfg_mlme_set_ibss_auto_bssid(struct wlan_objmgr_psoc *psoc,
1421 uint32_t auto_bssid)
1422{
1423 struct wlan_mlme_psoc_obj *mlme_obj;
1424
1425 mlme_obj = mlme_get_psoc_obj(psoc);
1426 if (!mlme_obj) {
1427 mlme_err("MLME Obj null on get IBSS config");
1428 return QDF_STATUS_E_INVAL;
1429 }
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001430 mlme_obj->cfg.ibss.auto_bssid = auto_bssid;
1431 return QDF_STATUS_SUCCESS;
1432}
1433
lifengdb340e72018-11-20 00:50:20 +08001434#ifdef MWS_COEX
1435QDF_STATUS
1436ucfg_mlme_get_mws_coex_4g_quick_tdm(struct wlan_objmgr_psoc *psoc,
1437 uint32_t *val)
1438{
1439 struct wlan_mlme_psoc_obj *mlme_obj;
1440
1441 mlme_obj = mlme_get_psoc_obj(psoc);
1442 if (!mlme_obj) {
1443 *val = cfg_default(CFG_MWS_COEX_4G_QUICK_FTDM);
1444 mlme_err("mlme obj null");
1445 return QDF_STATUS_E_INVAL;
1446 }
1447
1448 *val = mlme_obj->cfg.mwc.mws_coex_4g_quick_tdm;
1449
1450 return QDF_STATUS_SUCCESS;
1451}
1452
1453QDF_STATUS
1454ucfg_mlme_get_mws_coex_5g_nr_pwr_limit(struct wlan_objmgr_psoc *psoc,
1455 uint32_t *val)
1456{
1457 struct wlan_mlme_psoc_obj *mlme_obj;
1458
1459 mlme_obj = mlme_get_psoc_obj(psoc);
1460 if (!mlme_obj) {
1461 *val = cfg_default(CFG_MWS_COEX_5G_NR_PWR_LIMIT);
1462 mlme_err("mlme obj null");
1463 return QDF_STATUS_E_INVAL;
1464 }
1465
1466 *val = mlme_obj->cfg.mwc.mws_coex_5g_nr_pwr_limit;
1467
1468 return QDF_STATUS_SUCCESS;
1469}
1470#endif
lifeng0b46ae52018-12-13 09:42:27 +08001471
1472QDF_STATUS
1473ucfg_mlme_get_etsi13_srd_chan_in_master_mode(struct wlan_objmgr_psoc *psoc,
1474 bool *value)
1475{
1476 struct wlan_mlme_psoc_obj *mlme_obj;
1477
1478 mlme_obj = mlme_get_psoc_obj(psoc);
1479 if (!mlme_obj) {
1480 *value = cfg_default(CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE);
1481 mlme_err("Failed to get MLME Obj");
1482 return QDF_STATUS_E_INVAL;
1483 }
1484
1485 *value = mlme_obj->cfg.reg.etsi13_srd_chan_in_master_mode;
1486
1487 return QDF_STATUS_SUCCESS;
1488}
1489
1490QDF_STATUS
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05301491ucfg_mlme_get_11d_in_world_mode(struct wlan_objmgr_psoc *psoc,
1492 bool *value)
1493{
1494 struct wlan_mlme_psoc_obj *mlme_obj;
1495
1496 mlme_obj = mlme_get_psoc_obj(psoc);
1497 if (!mlme_obj) {
1498 *value = cfg_default(CFG_ENABLE_11D_IN_WORLD_MODE);
1499 mlme_err("Failed to get MLME Obj");
1500 return QDF_STATUS_E_INVAL;
1501 }
1502
1503 *value = mlme_obj->cfg.reg.enable_11d_in_world_mode;
1504
1505 return QDF_STATUS_SUCCESS;
1506}
1507
1508QDF_STATUS
lifeng0b46ae52018-12-13 09:42:27 +08001509ucfg_mlme_get_restart_beaconing_on_ch_avoid(struct wlan_objmgr_psoc *psoc,
1510 uint32_t *value)
1511{
1512 struct wlan_mlme_psoc_obj *mlme_obj;
1513
1514 mlme_obj = mlme_get_psoc_obj(psoc);
1515 if (!mlme_obj) {
1516 *value = cfg_default(CFG_RESTART_BEACONING_ON_CH_AVOID);
1517 mlme_err("Failed to get MLME Obj");
1518 return QDF_STATUS_E_INVAL;
1519 }
1520
1521 *value = mlme_obj->cfg.reg.restart_beaconing_on_ch_avoid;
1522
1523 return QDF_STATUS_SUCCESS;
1524}
1525
1526QDF_STATUS
1527ucfg_mlme_get_indoor_channel_support(struct wlan_objmgr_psoc *psoc,
1528 bool *value)
1529{
1530 struct wlan_mlme_psoc_obj *mlme_obj;
1531
1532 mlme_obj = mlme_get_psoc_obj(psoc);
1533 if (!mlme_obj) {
1534 *value = cfg_default(CFG_INDOOR_CHANNEL_SUPPORT);
1535 mlme_err("Failed to get MLME Obj");
1536 return QDF_STATUS_E_INVAL;
1537 }
1538
1539 *value = mlme_obj->cfg.reg.indoor_channel_support;
1540
1541 return QDF_STATUS_SUCCESS;
1542}
1543
1544QDF_STATUS
1545ucfg_mlme_get_scan_11d_interval(struct wlan_objmgr_psoc *psoc,
1546 uint32_t *value)
1547{
1548 struct wlan_mlme_psoc_obj *mlme_obj;
1549
1550 mlme_obj = mlme_get_psoc_obj(psoc);
1551 if (!mlme_obj) {
1552 *value = cfg_default(CFG_SCAN_11D_INTERVAL);
1553 mlme_err("Failed to get MLME Obj");
1554 return QDF_STATUS_E_INVAL;
1555 }
1556
1557 *value = mlme_obj->cfg.reg.scan_11d_interval;
lifeng0b46ae52018-12-13 09:42:27 +08001558 return QDF_STATUS_SUCCESS;
1559}
Wu Gao6294afc2019-01-05 00:00:58 +08001560
Wu Gaof3cbeaf2019-01-15 18:26:25 +08001561QDF_STATUS
1562ucfg_mlme_get_valid_channel_list(struct wlan_objmgr_psoc *psoc,
1563 uint8_t *channel_list,
1564 uint32_t *channel_list_num)
1565{
1566 struct wlan_mlme_psoc_obj *mlme_obj;
1567 qdf_size_t valid_channel_list_num = 0;
1568
1569 mlme_obj = mlme_get_psoc_obj(psoc);
1570 if (!mlme_obj) {
1571 qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST),
1572 channel_list,
1573 CFG_VALID_CHANNEL_LIST_LEN,
1574 &valid_channel_list_num);
1575 *channel_list_num = (uint8_t)valid_channel_list_num;
1576 mlme_err("Failed to get MLME Obj");
1577 return QDF_STATUS_E_INVAL;
1578 }
1579
1580 *channel_list_num = (uint32_t)mlme_obj->cfg.reg.valid_channel_list_num;
1581 qdf_mem_copy(channel_list, mlme_obj->cfg.reg.valid_channel_list,
1582 *channel_list_num);
1583
1584 return QDF_STATUS_SUCCESS;
1585}
1586
Wu Gao6294afc2019-01-05 00:00:58 +08001587#ifdef FEATURE_LFR_SUBNET_DETECTION
1588QDF_STATUS
1589ucfg_mlme_is_subnet_detection_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
1590{
1591 struct wlan_mlme_psoc_obj *mlme_obj;
1592
1593 mlme_obj = mlme_get_psoc_obj(psoc);
1594 if (!mlme_obj) {
1595 *val = cfg_default(CFG_LFR3_ENABLE_SUBNET_DETECTION);
1596 return QDF_STATUS_E_INVAL;
1597 }
1598 *val = mlme_obj->cfg.lfr.enable_lfr_subnet_detection;
1599
1600 return QDF_STATUS_SUCCESS;
1601}
1602#endif
Wu Gao2255ea22019-01-04 15:44:35 +08001603
1604QDF_STATUS
1605ucfg_mlme_set_current_tx_power_level(struct wlan_objmgr_psoc *psoc,
1606 uint8_t value)
1607{
1608 struct wlan_mlme_psoc_obj *mlme_obj;
1609
1610 mlme_obj = mlme_get_psoc_obj(psoc);
1611 if (!mlme_obj)
1612 return QDF_STATUS_E_INVAL;
1613
1614 mlme_obj->cfg.power.current_tx_power_level = value;
1615
1616 return QDF_STATUS_SUCCESS;
1617}
1618
1619QDF_STATUS
1620ucfg_mlme_get_current_tx_power_level(struct wlan_objmgr_psoc *psoc,
1621 uint8_t *value)
1622{
1623 struct wlan_mlme_psoc_obj *mlme_obj;
1624
1625 mlme_obj = mlme_get_psoc_obj(psoc);
1626 if (!mlme_obj) {
1627 *value = cfg_default(CFG_CURRENT_TX_POWER_LEVEL);
1628 return QDF_STATUS_E_INVAL;
1629 }
1630
1631 *value = mlme_obj->cfg.power.current_tx_power_level;
1632
1633 return QDF_STATUS_SUCCESS;
1634}
1635
1636QDF_STATUS
1637ucfg_mlme_set_obss_detection_offload_enabled(struct wlan_objmgr_psoc *psoc,
1638 uint8_t value)
1639{
1640 struct wlan_mlme_psoc_obj *mlme_obj;
1641
1642 mlme_obj = mlme_get_psoc_obj(psoc);
1643 if (!mlme_obj)
1644 return QDF_STATUS_E_INVAL;
1645
1646 mlme_obj->cfg.obss_ht40.obss_detection_offload_enabled = value;
1647
1648 return QDF_STATUS_SUCCESS;
1649}
1650
1651QDF_STATUS
1652ucfg_mlme_set_obss_color_collision_offload_enabled(
1653 struct wlan_objmgr_psoc *psoc, uint8_t value)
1654{
1655 struct wlan_mlme_psoc_obj *mlme_obj;
1656
1657 mlme_obj = mlme_get_psoc_obj(psoc);
1658 if (!mlme_obj)
1659 return QDF_STATUS_E_INVAL;
1660
1661 mlme_obj->cfg.obss_ht40.obss_color_collision_offload_enabled = value;
1662
1663 return QDF_STATUS_SUCCESS;
1664}
Wu Gaoed616a12019-01-16 15:19:21 +08001665
1666QDF_STATUS
1667ucfg_mlme_get_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
1668 uint32_t *val)
1669{
1670 struct wlan_mlme_psoc_obj *mlme_obj;
1671
1672 mlme_obj = mlme_get_psoc_obj(psoc);
1673 if (!mlme_obj) {
1674 *val = cfg_default(CFG_CHANNEL_BONDING_MODE_24GHZ);
1675 return QDF_STATUS_E_INVAL;
1676 }
1677 *val = mlme_obj->cfg.feature_flags.channel_bonding_mode_24ghz;
1678
1679 return QDF_STATUS_SUCCESS;
1680}
1681
1682QDF_STATUS
1683ucfg_mlme_set_channel_bonding_24ghz(struct wlan_objmgr_psoc *psoc,
1684 uint32_t value)
1685{
1686 struct wlan_mlme_psoc_obj *mlme_obj;
1687
1688 mlme_obj = mlme_get_psoc_obj(psoc);
1689 if (!mlme_obj)
1690 return QDF_STATUS_E_INVAL;
1691
1692 mlme_obj->cfg.feature_flags.channel_bonding_mode_24ghz = value;
1693
1694 return QDF_STATUS_SUCCESS;
1695}
1696
1697QDF_STATUS
1698ucfg_mlme_get_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
1699 uint32_t *value)
1700{
1701 struct wlan_mlme_psoc_obj *mlme_obj;
1702
1703 mlme_obj = mlme_get_psoc_obj(psoc);
1704 if (!mlme_obj) {
1705 *value = cfg_default(CFG_CHANNEL_BONDING_MODE_5GHZ);
1706 return QDF_STATUS_E_INVAL;
1707 }
1708 *value = mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz;
1709
1710 return QDF_STATUS_SUCCESS;
1711}
1712
1713QDF_STATUS
1714ucfg_mlme_set_channel_bonding_5ghz(struct wlan_objmgr_psoc *psoc,
1715 uint32_t value)
1716{
1717 struct wlan_mlme_psoc_obj *mlme_obj;
1718
1719 mlme_obj = mlme_get_psoc_obj(psoc);
1720 if (!mlme_obj)
1721 return QDF_STATUS_E_INVAL;
1722
1723 mlme_obj->cfg.feature_flags.channel_bonding_mode_5ghz = value;
1724
1725 return QDF_STATUS_SUCCESS;
1726}
1727