blob: a97fa69fc275d234300edc14389006f25b605568 [file] [log] [blame]
Sandeep Puligillac5609d52018-05-17 19:23:41 -07001/*
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302 * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
Sandeep Puligillac5609d52018-05-17 19:23:41 -07003 *
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 Viswanathan21c58cb2018-05-24 15:53:58 +053019 * DOC: define internal APIs related to the mlme component
Sandeep Puligillac5609d52018-05-17 19:23:41 -070020 */
21
22#include "wlan_mlme_main.h"
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053023#include "include/wlan_vdev_mlme.h"
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +053024#include "cfg_ucfg_api.h"
Karthik Kantamneni2231a232018-09-11 15:45:55 +053025#include "wmi_unified.h"
Harprit Chhabadabec6de42018-09-10 10:21:15 -070026#include "wlan_scan_public_structs.h"
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053027#include "wlan_vdev_mlme_api.h"
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +053028#include "wlan_mlme_api.h"
Abhishek Singhf880a7d2019-04-29 14:51:11 +053029#include <wlan_crypto_global_api.h>
Sandeep Puligillac5609d52018-05-17 19:23:41 -070030
Abhinav Kumarb074f2f2018-09-15 15:32:11 +053031#define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/
32
Arif Hussainbd5194c2018-11-27 19:01:15 -080033struct wlan_mlme_psoc_obj *mlme_get_psoc_obj_fl(struct wlan_objmgr_psoc *psoc,
34 const char *func, uint32_t line)
Sandeep Puligillac5609d52018-05-17 19:23:41 -070035{
36 struct wlan_mlme_psoc_obj *mlme_obj;
37
38 mlme_obj = (struct wlan_mlme_psoc_obj *)
39 wlan_objmgr_psoc_get_comp_private_obj(psoc,
40 WLAN_UMAC_COMP_MLME);
Arif Hussainbd5194c2018-11-27 19:01:15 -080041 if (!mlme_obj)
Abhishek Ambureec000072019-05-03 12:38:42 +053042 mlme_legacy_err("mlme obj is null, %s:%d", func, line);
Sandeep Puligillac5609d52018-05-17 19:23:41 -070043
44 return mlme_obj;
45}
46
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053047struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config(
48 struct wlan_objmgr_vdev *vdev)
49{
50 struct vdev_mlme_obj *vdev_mlme;
51 struct mlme_legacy_priv *mlme_priv;
52
53 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
54 if (!vdev_mlme) {
Abhishek Ambureec000072019-05-03 12:38:42 +053055 mlme_legacy_err("vdev component object is NULL");
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053056 return NULL;
57 }
58
Abhishek Singh5d921542018-12-05 15:04:07 +053059 mlme_priv = vdev_mlme->ext_vdev_ptr;
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053060
61 return &mlme_priv->dynamic_cfg;
62}
63
64struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config(
65 struct wlan_objmgr_vdev *vdev)
66{
67 struct vdev_mlme_obj *vdev_mlme;
68 struct mlme_legacy_priv *mlme_priv;
69
70 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
71 if (!vdev_mlme) {
Abhishek Ambureec000072019-05-03 12:38:42 +053072 mlme_legacy_err("vdev component object is NULL");
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053073 return NULL;
74 }
75
Abhishek Singh5d921542018-12-05 15:04:07 +053076 mlme_priv = vdev_mlme->ext_vdev_ptr;
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053077
78 return &mlme_priv->ini_cfg;
79}
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053080
gaurank kathpalia7ef72182019-05-29 19:41:25 +053081struct mlme_roam_after_data_stall *
82mlme_get_roam_invoke_params(struct wlan_objmgr_vdev *vdev)
83{
84 struct vdev_mlme_obj *vdev_mlme;
85 struct mlme_legacy_priv *mlme_priv;
86
87 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
88 if (!vdev_mlme)
89 return NULL;
90
91 mlme_priv = vdev_mlme->ext_vdev_ptr;
92
93 return &mlme_priv->roam_invoke_params;
94}
95
Bala Venkateshaccb9ddb2019-04-04 17:41:58 +053096uint8_t *mlme_get_dynamic_oce_flags(struct wlan_objmgr_vdev *vdev)
97{
98 struct vdev_mlme_obj *vdev_mlme;
99 struct mlme_legacy_priv *mlme_priv;
100
101 vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(vdev);
102 if (!vdev_mlme) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530103 mlme_legacy_err("vdev component object is NULL");
Bala Venkateshaccb9ddb2019-04-04 17:41:58 +0530104 return NULL;
105 }
106
107 mlme_priv = vdev_mlme->ext_vdev_ptr;
108
109 return &mlme_priv->sta_dynamic_oce_value;
110}
111
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530112QDF_STATUS
113mlme_psoc_object_created_notification(struct wlan_objmgr_psoc *psoc,
114 void *arg)
Sandeep Puligillac5609d52018-05-17 19:23:41 -0700115{
116 QDF_STATUS status;
117 struct wlan_mlme_psoc_obj *mlme_obj;
118
119 mlme_obj = qdf_mem_malloc(sizeof(struct wlan_mlme_psoc_obj));
120 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530121 mlme_legacy_err("Failed to allocate memory");
Sandeep Puligillac5609d52018-05-17 19:23:41 -0700122 return QDF_STATUS_E_NOMEM;
123 }
124
125 status = wlan_objmgr_psoc_component_obj_attach(psoc,
126 WLAN_UMAC_COMP_MLME,
127 mlme_obj,
128 QDF_STATUS_SUCCESS);
129 if (status != QDF_STATUS_SUCCESS) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530130 mlme_legacy_err("Failed to attach psoc_ctx with psoc");
Sandeep Puligillac5609d52018-05-17 19:23:41 -0700131 qdf_mem_free(mlme_obj);
132 }
133
134 return status;
135}
136
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530137QDF_STATUS
138mlme_psoc_object_destroyed_notification(struct wlan_objmgr_psoc *psoc,
139 void *arg)
Sandeep Puligillac5609d52018-05-17 19:23:41 -0700140{
141 struct wlan_mlme_psoc_obj *mlme_obj = NULL;
142 QDF_STATUS status;
143
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530144 mlme_obj = mlme_get_psoc_obj(psoc);
Sandeep Puligillac5609d52018-05-17 19:23:41 -0700145
146 status = wlan_objmgr_psoc_component_obj_detach(psoc,
147 WLAN_UMAC_COMP_MLME,
148 mlme_obj);
149 if (status != QDF_STATUS_SUCCESS) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530150 mlme_legacy_err("Failed to detach psoc_ctx from psoc");
Sandeep Puligillac5609d52018-05-17 19:23:41 -0700151 status = QDF_STATUS_E_FAILURE;
152 goto out;
153 }
154
155 qdf_mem_free(mlme_obj);
156
157out:
158 return status;
159}
160
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530161#ifdef CRYPTO_SET_KEY_CONVERGED
162QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
163 uint8_t *peer_mac, uint8_t *mic_len,
164 uint8_t *mic_hdr_len)
165{
166 struct wlan_objmgr_peer *peer;
167 uint32_t key_cipher;
168
169 if (!psoc || !mic_len || !mic_hdr_len || !peer_mac) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530170 mlme_legacy_debug("psoc/mic_len/mic_hdr_len/peer_mac null");
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530171 return QDF_STATUS_E_NULL_VALUE;
172 }
173
174 peer = wlan_objmgr_get_peer(psoc, pdev_id,
175 peer_mac, WLAN_LEGACY_MAC_ID);
176 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530177 mlme_legacy_debug("Peer of peer_mac %pM not found", peer_mac);
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530178 return QDF_STATUS_E_INVAL;
179 }
180
181 key_cipher =
182 wlan_crypto_get_peer_param(peer,
183 WLAN_CRYPTO_PARAM_UCAST_CIPHER);
184 wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
185
186 if (key_cipher & (1 << WLAN_CRYPTO_CIPHER_AES_GCM) ||
187 key_cipher & (1 << WLAN_CRYPTO_CIPHER_AES_GCM_256)) {
188 *mic_hdr_len = WLAN_IEEE80211_GCMP_HEADERLEN;
189 *mic_len = WLAN_IEEE80211_GCMP_MICLEN;
190 } else {
191 *mic_hdr_len = IEEE80211_CCMP_HEADERLEN;
192 *mic_len = IEEE80211_CCMP_MICLEN;
193 }
Abhishek Ambureec000072019-05-03 12:38:42 +0530194 mlme_legacy_debug("peer %pM hdr_len %d mic_len %d key_cipher 0x%x",
195 peer_mac, *mic_hdr_len, *mic_len, key_cipher);
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530196
197 return QDF_STATUS_SUCCESS;
198}
199
200QDF_STATUS
201mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
202 void *arg)
203{
204 return QDF_STATUS_SUCCESS;
205}
206
207QDF_STATUS
208mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
209 void *arg)
210{
211 return QDF_STATUS_SUCCESS;
212}
213
214#else
215
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530216QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
217 uint8_t *peer_mac, uint8_t *mic_len,
218 uint8_t *mic_hdr_len)
219{
220 struct wlan_objmgr_peer *peer;
221 uint32_t key_cipher;
222
223 if (!psoc || !mic_len || !mic_hdr_len || !peer_mac) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530224 mlme_legacy_debug("psoc/mic_len/mic_hdr_len/peer_mac null");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530225 return QDF_STATUS_E_NULL_VALUE;
226 }
227
228 peer = wlan_objmgr_get_peer(psoc, pdev_id,
229 peer_mac, WLAN_LEGACY_MAC_ID);
230 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530231 mlme_legacy_debug("Peer of peer_mac %pM not found", peer_mac);
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530232 return QDF_STATUS_E_INVAL;
233 }
234 key_cipher = wlan_peer_get_unicast_cipher(peer);
235 wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
236
237 if (key_cipher == WMI_CIPHER_AES_GCM) {
238 *mic_hdr_len = WLAN_IEEE80211_GCMP_HEADERLEN;
239 *mic_len = WLAN_IEEE80211_GCMP_MICLEN;
240 } else {
241 *mic_hdr_len = IEEE80211_CCMP_HEADERLEN;
242 *mic_len = IEEE80211_CCMP_MICLEN;
243 }
Abhishek Ambureec000072019-05-03 12:38:42 +0530244 mlme_legacy_debug("peer %pM hdr_len %d mic_len %d key_cipher %d",
245 peer_mac, *mic_hdr_len, *mic_len, key_cipher);
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530246
247 return QDF_STATUS_SUCCESS;
248}
249
250QDF_STATUS
251mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
252 void *arg)
253{
254 struct peer_mlme_priv_obj *peer_priv;
255 QDF_STATUS status;
256
257 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530258 mlme_legacy_err(" peer is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530259 return QDF_STATUS_E_FAILURE;
260 }
261
262 peer_priv = qdf_mem_malloc(sizeof(*peer_priv));
263 if (!peer_priv) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530264 mlme_legacy_err(" peer_priv component object alloc failed");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530265 return QDF_STATUS_E_NOMEM;
266 }
267
268 status = wlan_objmgr_peer_component_obj_attach(peer,
269 WLAN_UMAC_COMP_MLME,
270 (void *)peer_priv,
271 QDF_STATUS_SUCCESS);
272
273 if (QDF_IS_STATUS_ERROR(status)) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530274 mlme_legacy_err("unable to attach peer_priv obj to peer obj");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530275 qdf_mem_free(peer_priv);
276 }
277
278 return status;
279}
280
281QDF_STATUS
282mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
283 void *arg)
284{
285 struct peer_mlme_priv_obj *peer_priv;
286 QDF_STATUS status;
287
288 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530289 mlme_legacy_err(" peer is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530290 return QDF_STATUS_E_FAILURE;
291 }
292
293 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
294 WLAN_UMAC_COMP_MLME);
295 if (!peer_priv) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530296 mlme_legacy_err(" peer MLME component object is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530297 return QDF_STATUS_E_FAILURE;
298 }
299
300 status = wlan_objmgr_peer_component_obj_detach(peer,
301 WLAN_UMAC_COMP_MLME,
302 peer_priv);
303
304 if (QDF_IS_STATUS_ERROR(status))
Abhishek Ambureec000072019-05-03 12:38:42 +0530305 mlme_legacy_err("unable to detach peer_priv obj to peer obj");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530306
307 qdf_mem_free(peer_priv);
308
309 return status;
310}
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530311#endif
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530312
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +0530313static void mlme_init_chainmask_cfg(struct wlan_objmgr_psoc *psoc,
314 struct wlan_mlme_chainmask *chainmask_info)
315{
316 chainmask_info->txchainmask1x1 =
317 cfg_get(psoc, CFG_VHT_ENABLE_1x1_TX_CHAINMASK);
318
319 chainmask_info->rxchainmask1x1 =
320 cfg_get(psoc, CFG_VHT_ENABLE_1x1_RX_CHAINMASK);
321
322 chainmask_info->tx_chain_mask_cck =
323 cfg_get(psoc, CFG_TX_CHAIN_MASK_CCK);
324
325 chainmask_info->tx_chain_mask_1ss =
326 cfg_get(psoc, CFG_TX_CHAIN_MASK_1SS);
327
328 chainmask_info->num_11b_tx_chains =
329 cfg_get(psoc, CFG_11B_NUM_TX_CHAIN);
330
331 chainmask_info->num_11ag_tx_chains =
332 cfg_get(psoc, CFG_11AG_NUM_TX_CHAIN);
333
334 chainmask_info->tx_chain_mask_2g =
335 cfg_get(psoc, CFG_TX_CHAIN_MASK_2G);
336
337 chainmask_info->rx_chain_mask_2g =
338 cfg_get(psoc, CFG_RX_CHAIN_MASK_2G);
339
340 chainmask_info->tx_chain_mask_5g =
341 cfg_get(psoc, CFG_TX_CHAIN_MASK_5G);
342
343 chainmask_info->rx_chain_mask_5g =
344 cfg_get(psoc, CFG_RX_CHAIN_MASK_5G);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530345
346 chainmask_info->enable_bt_chain_separation =
347 cfg_get(psoc, CFG_ENABLE_BT_CHAIN_SEPARATION);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +0530348}
349
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530350#ifdef WLAN_FEATURE_11W
351static void mlme_init_pmf_cfg(struct wlan_objmgr_psoc *psoc,
352 struct wlan_mlme_generic *gen)
353{
354 gen->pmf_sa_query_max_retries =
355 cfg_get(psoc, CFG_PMF_SA_QUERY_MAX_RETRIES);
356 gen->pmf_sa_query_retry_interval =
357 cfg_get(psoc, CFG_PMF_SA_QUERY_RETRY_INTERVAL);
358}
359#else
360static void mlme_init_pmf_cfg(struct wlan_objmgr_psoc *psoc,
361 struct wlan_mlme_generic *gen)
362{
363 gen->pmf_sa_query_max_retries =
364 cfg_default(CFG_PMF_SA_QUERY_MAX_RETRIES);
365 gen->pmf_sa_query_retry_interval =
366 cfg_default(CFG_PMF_SA_QUERY_RETRY_INTERVAL);
367}
368#endif /*WLAN_FEATURE_11W*/
369
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530370#ifdef WLAN_FEATURE_LPSS
371static inline void
372mlme_init_lpass_support_cfg(struct wlan_objmgr_psoc *psoc,
373 struct wlan_mlme_generic *gen)
374{
375 gen->lpass_support = cfg_get(psoc, CFG_ENABLE_LPASS_SUPPORT);
376}
377#else
378static inline void
379mlme_init_lpass_support_cfg(struct wlan_objmgr_psoc *psoc,
380 struct wlan_mlme_generic *gen)
381{
382 gen->lpass_support = cfg_default(CFG_ENABLE_LPASS_SUPPORT);
383}
384#endif
385
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530386static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
387 struct wlan_mlme_generic *gen)
388{
389 gen->rtt3_enabled = cfg_default(CFG_RTT3_ENABLE);
Karthik Kantamneni9180c752018-11-14 12:14:17 +0530390 gen->rtt_mac_randomization =
391 cfg_get(psoc, CFG_ENABLE_RTT_MAC_RANDOMIZATION);
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530392 gen->band_capability =
393 cfg_get(psoc, CFG_BAND_CAPABILITY);
Vignesh Viswanathanf97cc112018-10-03 19:17:07 +0530394 gen->band = gen->band_capability;
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530395 gen->select_5ghz_margin =
396 cfg_get(psoc, CFG_SELECT_5GHZ_MARGIN);
397 gen->sub_20_chan_width =
398 cfg_get(psoc, CFG_SUB_20_CHANNEL_WIDTH);
399 gen->ito_repeat_count =
400 cfg_get(psoc, CFG_ITO_REPEAT_COUNT);
401 gen->dropped_pkt_disconnect_thresh =
402 cfg_get(psoc, CFG_DROPPED_PKT_DISCONNECT_THRESHOLD);
403 gen->prevent_link_down =
404 cfg_get(psoc, CFG_PREVENT_LINK_DOWN);
405 gen->memory_deep_sleep =
406 cfg_get(psoc, CFG_ENABLE_MEM_DEEP_SLEEP);
407 gen->cck_tx_fir_override =
408 cfg_get(psoc, CFG_ENABLE_CCK_TX_FIR_OVERRIDE);
409 gen->crash_inject =
410 cfg_get(psoc, CFG_ENABLE_CRASH_INJECT);
411 gen->self_recovery =
412 cfg_get(psoc, CFG_ENABLE_SELF_RECOVERY);
413 gen->sap_dot11mc =
414 cfg_get(psoc, CFG_SAP_DOT11MC);
415 gen->fatal_event_trigger =
416 cfg_get(psoc, CFG_ENABLE_FATAL_EVENT_TRIGGER);
417 gen->optimize_ca_event =
418 cfg_get(psoc, CFG_OPTIMIZE_CA_EVENT);
419 gen->fw_timeout_crash =
420 cfg_get(psoc, CFG_CRASH_FW_TIMEOUT);
Dundi Ravitejaf99ce092018-09-27 17:51:59 +0530421 gen->debug_packet_log = cfg_get(psoc, CFG_ENABLE_DEBUG_PACKET_LOG);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +0530422 gen->enable_deauth_to_disassoc_map =
423 cfg_get(psoc, CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP);
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530424 mlme_init_pmf_cfg(psoc, gen);
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530425 mlme_init_lpass_support_cfg(psoc, gen);
Abhinav Kumard4d6eb72018-12-04 20:30:37 +0530426
Ashish Kumar Dhanotiyaefae55b2018-12-24 15:20:42 +0530427 gen->enabled_11h = cfg_get(psoc, CFG_11H_SUPPORT_ENABLED);
428 gen->enabled_11d = cfg_get(psoc, CFG_11D_SUPPORT_ENABLED);
Sourav Mohapatrac55bdf32018-12-13 16:16:50 +0530429 gen->enable_beacon_reception_stats =
430 cfg_get(psoc, CFG_ENABLE_BEACON_RECEPTION_STATS);
Wu Gaof3cbeaf2019-01-15 18:26:25 +0800431 gen->enable_remove_time_stamp_sync_cmd =
432 cfg_get(psoc, CFG_REMOVE_TIME_STAMP_SYNC_CMD);
Pragaspathi Thilagaraja8893752019-02-06 19:58:59 +0530433 gen->enable_change_channel_bandwidth =
434 cfg_get(psoc, CFG_CHANGE_CHANNEL_BANDWIDTH);
Yeshwanth Sriram Guntukac52f24d2019-05-24 13:54:15 +0530435 gen->disable_4way_hs_offload =
436 cfg_get(psoc, CFG_DISABLE_4WAY_HS_OFFLOAD);
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530437}
438
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530439static void mlme_init_edca_ani_cfg(struct wlan_mlme_edca_params *edca_params)
440{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530441 /* initialize the max allowed array length for read/write */
442 edca_params->ani_acbe_l.max_len = CFG_EDCA_DATA_LEN;
443 edca_params->ani_acbk_l.max_len = CFG_EDCA_DATA_LEN;
444 edca_params->ani_acvi_l.max_len = CFG_EDCA_DATA_LEN;
445 edca_params->ani_acvo_l.max_len = CFG_EDCA_DATA_LEN;
446
447 edca_params->ani_acbe_b.max_len = CFG_EDCA_DATA_LEN;
448 edca_params->ani_acbk_b.max_len = CFG_EDCA_DATA_LEN;
449 edca_params->ani_acvi_b.max_len = CFG_EDCA_DATA_LEN;
450 edca_params->ani_acvo_b.max_len = CFG_EDCA_DATA_LEN;
451
452 /* parse the ETSI edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530453 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBK_LOCAL),
454 edca_params->ani_acbk_l.data,
455 CFG_EDCA_DATA_LEN,
456 &edca_params->ani_acbk_l.len);
457
458 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBE_LOCAL),
459 edca_params->ani_acbe_l.data,
460 CFG_EDCA_DATA_LEN,
461 &edca_params->ani_acbe_l.len);
462
463 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVI_LOCAL),
464 edca_params->ani_acvi_l.data,
465 CFG_EDCA_DATA_LEN,
466 &edca_params->ani_acvi_l.len);
467
468 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVO_LOCAL),
469 edca_params->ani_acvo_l.data,
470 CFG_EDCA_DATA_LEN,
471 &edca_params->ani_acvo_l.len);
472
473 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBK),
474 edca_params->ani_acbk_b.data,
475 CFG_EDCA_DATA_LEN,
476 &edca_params->ani_acbk_b.len);
477
478 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBE),
479 edca_params->ani_acbe_b.data,
480 CFG_EDCA_DATA_LEN,
481 &edca_params->ani_acbe_b.len);
482
483 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVI),
484 edca_params->ani_acvi_b.data,
485 CFG_EDCA_DATA_LEN,
486 &edca_params->ani_acvi_b.len);
487
488 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVO),
489 edca_params->ani_acvo_b.data,
490 CFG_EDCA_DATA_LEN,
491 &edca_params->ani_acvo_b.len);
492}
493
494static void mlme_init_edca_wme_cfg(struct wlan_mlme_edca_params *edca_params)
495{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530496 /* initialize the max allowed array length for read/write */
497 edca_params->wme_acbk_l.max_len = CFG_EDCA_DATA_LEN;
498 edca_params->wme_acbe_l.max_len = CFG_EDCA_DATA_LEN;
499 edca_params->wme_acvi_l.max_len = CFG_EDCA_DATA_LEN;
500 edca_params->wme_acvo_l.max_len = CFG_EDCA_DATA_LEN;
501
502 edca_params->wme_acbk_b.max_len = CFG_EDCA_DATA_LEN;
503 edca_params->wme_acbe_b.max_len = CFG_EDCA_DATA_LEN;
504 edca_params->wme_acvi_b.max_len = CFG_EDCA_DATA_LEN;
505 edca_params->wme_acvo_b.max_len = CFG_EDCA_DATA_LEN;
506
507 /* parse the WME edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530508 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBK_LOCAL),
509 edca_params->wme_acbk_l.data,
510 CFG_EDCA_DATA_LEN,
511 &edca_params->wme_acbk_l.len);
512
513 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBE_LOCAL),
514 edca_params->wme_acbe_l.data,
515 CFG_EDCA_DATA_LEN,
516 &edca_params->wme_acbe_l.len);
517
518 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVI_LOCAL),
519 edca_params->wme_acvi_l.data,
520 CFG_EDCA_DATA_LEN,
521 &edca_params->wme_acvi_l.len);
522
523 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVO_LOCAL),
524 edca_params->wme_acvo_l.data,
525 CFG_EDCA_DATA_LEN,
526 &edca_params->wme_acvo_l.len);
527
528 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBK),
529 edca_params->wme_acbk_b.data,
530 CFG_EDCA_DATA_LEN,
531 &edca_params->wme_acbk_b.len);
532
533 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBE),
534 edca_params->wme_acbe_b.data,
535 CFG_EDCA_DATA_LEN,
536 &edca_params->wme_acbe_b.len);
537
538 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVI),
539 edca_params->wme_acvi_b.data,
540 CFG_EDCA_DATA_LEN,
541 &edca_params->wme_acvi_b.len);
542
543 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVO),
544 edca_params->wme_acvo_b.data,
545 CFG_EDCA_DATA_LEN,
546 &edca_params->wme_acvo_b.len);
547}
548
549static void mlme_init_edca_etsi_cfg(struct wlan_mlme_edca_params *edca_params)
550{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530551 /* initialize the max allowed array length for read/write */
552 edca_params->etsi_acbe_l.max_len = CFG_EDCA_DATA_LEN;
553 edca_params->etsi_acbk_l.max_len = CFG_EDCA_DATA_LEN;
554 edca_params->etsi_acvi_l.max_len = CFG_EDCA_DATA_LEN;
555 edca_params->etsi_acvo_l.max_len = CFG_EDCA_DATA_LEN;
556
557 edca_params->etsi_acbe_b.max_len = CFG_EDCA_DATA_LEN;
558 edca_params->etsi_acbk_b.max_len = CFG_EDCA_DATA_LEN;
559 edca_params->etsi_acvi_b.max_len = CFG_EDCA_DATA_LEN;
560 edca_params->etsi_acvo_b.max_len = CFG_EDCA_DATA_LEN;
561
562 /* parse the ETSI edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530563 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBK_LOCAL),
564 edca_params->etsi_acbk_l.data,
565 CFG_EDCA_DATA_LEN,
566 &edca_params->etsi_acbk_l.len);
567
568 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBE_LOCAL),
569 edca_params->etsi_acbe_l.data,
570 CFG_EDCA_DATA_LEN,
571 &edca_params->etsi_acbe_l.len);
572
573 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVI_LOCAL),
574 edca_params->etsi_acvi_l.data,
575 CFG_EDCA_DATA_LEN,
576 &edca_params->etsi_acvi_l.len);
577
578 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVO_LOCAL),
579 edca_params->etsi_acvo_l.data,
580 CFG_EDCA_DATA_LEN,
581 &edca_params->etsi_acvo_l.len);
582
583 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBK),
584 edca_params->etsi_acbk_b.data,
585 CFG_EDCA_DATA_LEN,
586 &edca_params->etsi_acbk_b.len);
587
588 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBE),
589 edca_params->etsi_acbe_b.data,
590 CFG_EDCA_DATA_LEN,
591 &edca_params->etsi_acbe_b.len);
592
593 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVI),
594 edca_params->etsi_acvi_b.data,
595 CFG_EDCA_DATA_LEN,
596 &edca_params->etsi_acvi_b.len);
597
598 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVO),
599 edca_params->etsi_acvo_b.data,
600 CFG_EDCA_DATA_LEN,
601 &edca_params->etsi_acvo_b.len);
602}
603
Abhinav Kumar06b9a122018-10-10 15:01:11 +0530604static void
605mlme_init_qos_edca_params(struct wlan_objmgr_psoc *psoc,
606 struct wlan_mlme_edca_params *edca_params)
607{
608 edca_params->enable_edca_params =
609 cfg_get(psoc, CFG_EDCA_ENABLE_PARAM);
610
611 edca_params->edca_ac_vo.vo_cwmin =
612 cfg_get(psoc, CFG_EDCA_VO_CWMIN);
613 edca_params->edca_ac_vo.vo_cwmax =
614 cfg_get(psoc, CFG_EDCA_VO_CWMAX);
615 edca_params->edca_ac_vo.vo_aifs =
616 cfg_get(psoc, CFG_EDCA_VO_AIFS);
617
618 edca_params->edca_ac_vi.vi_cwmin =
619 cfg_get(psoc, CFG_EDCA_VI_CWMIN);
620 edca_params->edca_ac_vi.vi_cwmax =
621 cfg_get(psoc, CFG_EDCA_VI_CWMAX);
622 edca_params->edca_ac_vi.vi_aifs =
623 cfg_get(psoc, CFG_EDCA_VI_AIFS);
624
625 edca_params->edca_ac_bk.bk_cwmin =
626 cfg_get(psoc, CFG_EDCA_BK_CWMIN);
627 edca_params->edca_ac_bk.bk_cwmax =
628 cfg_get(psoc, CFG_EDCA_BK_CWMAX);
629 edca_params->edca_ac_bk.bk_aifs =
630 cfg_get(psoc, CFG_EDCA_BK_AIFS);
631
632 edca_params->edca_ac_be.be_cwmin =
633 cfg_get(psoc, CFG_EDCA_BE_CWMIN);
634 edca_params->edca_ac_be.be_cwmax =
635 cfg_get(psoc, CFG_EDCA_BE_CWMAX);
636 edca_params->edca_ac_be.be_aifs =
637 cfg_get(psoc, CFG_EDCA_BE_AIFS);
638}
639
640static void mlme_init_edca_params(struct wlan_objmgr_psoc *psoc,
641 struct wlan_mlme_edca_params *edca_params)
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530642{
643 mlme_init_edca_ani_cfg(edca_params);
644 mlme_init_edca_wme_cfg(edca_params);
645 mlme_init_edca_etsi_cfg(edca_params);
Abhinav Kumar06b9a122018-10-10 15:01:11 +0530646 mlme_init_qos_edca_params(psoc, edca_params);
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530647}
648
Arif Hussain9f93a642018-09-10 18:32:25 -0700649static void mlme_init_timeout_cfg(struct wlan_objmgr_psoc *psoc,
650 struct wlan_mlme_timeout *timeouts)
651{
Arif Hussain43e09712018-09-18 19:31:57 -0700652 timeouts->join_failure_timeout =
653 cfg_get(psoc, CFG_JOIN_FAILURE_TIMEOUT);
654 timeouts->auth_failure_timeout =
655 cfg_get(psoc, CFG_AUTH_FAILURE_TIMEOUT);
656 timeouts->auth_rsp_timeout =
657 cfg_get(psoc, CFG_AUTH_RSP_TIMEOUT);
658 timeouts->assoc_failure_timeout =
659 cfg_get(psoc, CFG_ASSOC_FAILURE_TIMEOUT);
660 timeouts->reassoc_failure_timeout =
661 cfg_get(psoc, CFG_REASSOC_FAILURE_TIMEOUT);
662 timeouts->probe_after_hb_fail_timeout =
663 cfg_get(psoc, CFG_PROBE_AFTER_HB_FAIL_TIMEOUT);
664 timeouts->olbc_detect_timeout =
665 cfg_get(psoc, CFG_OLBC_DETECT_TIMEOUT);
666 timeouts->addts_rsp_timeout =
667 cfg_get(psoc, CFG_ADDTS_RSP_TIMEOUT);
668 timeouts->heart_beat_threshold =
669 cfg_get(psoc, CFG_HEART_BEAT_THRESHOLD);
670 timeouts->ap_keep_alive_timeout =
671 cfg_get(psoc, CFG_AP_KEEP_ALIVE_TIMEOUT);
672 timeouts->ap_link_monitor_timeout =
673 cfg_get(psoc, CFG_AP_LINK_MONITOR_TIMEOUT);
674 timeouts->ps_data_inactivity_timeout =
675 cfg_get(psoc, CFG_PS_DATA_INACTIVITY_TIMEOUT);
Arif Hussain4966f692018-11-27 16:40:51 -0800676 timeouts->wmi_wq_watchdog_timeout =
677 cfg_get(psoc, CFG_WMI_WQ_WATCHDOG);
Arif Hussain9f93a642018-09-10 18:32:25 -0700678}
679
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530680static void mlme_init_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
681 struct wlan_mlme_ht_caps *ht_caps)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530682{
683 union {
684 uint16_t val_16;
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530685 struct mlme_ht_capabilities_info ht_cap_info;
686 } u1;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530687
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530688 union {
689 uint16_t val_16;
690 struct mlme_ht_ext_cap_info ext_cap_info;
691 } u2;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530692
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530693 union {
694 uint8_t val_8;
695 struct mlme_ht_info_field_1 info_field_1;
696 } u3;
697
698 union {
699 uint16_t val_16;
700 struct mlme_ht_info_field_2 info_field_2;
701 } u4;
702
703 union {
704 uint16_t val_16;
705 struct mlme_ht_info_field_3 info_field_3;
706 } u5;
707
708 /* HT Capabilities - HT Caps Info Field */
709 u1.val_16 = (uint16_t)cfg_default(CFG_HT_CAP_INFO);
710 u1.ht_cap_info.adv_coding_cap =
Vignesh Viswanathan78182502018-08-06 15:13:30 +0530711 cfg_get(psoc, CFG_RX_LDPC_ENABLE);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530712 u1.ht_cap_info.rx_stbc = cfg_get(psoc, CFG_RX_STBC_ENABLE);
713 u1.ht_cap_info.tx_stbc = cfg_get(psoc, CFG_TX_STBC_ENABLE);
714 u1.ht_cap_info.short_gi_20_mhz =
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530715 cfg_get(psoc, CFG_SHORT_GI_20MHZ);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530716 u1.ht_cap_info.short_gi_40_mhz =
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530717 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530718 ht_caps->ht_cap_info = u1.ht_cap_info;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530719
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530720 /* HT Capapabilties - AMPDU Params */
721 ht_caps->ampdu_params.max_rx_ampdu_factor =
722 cfg_get(psoc, CFG_MAX_RX_AMPDU_FACTOR);
723 ht_caps->ampdu_params.mpdu_density =
724 cfg_get(psoc, CFG_MPDU_DENSITY);
725 ht_caps->ampdu_params.reserved = 0;
726
727 /* HT Capabilities - Extended Capabilities field */
728 u2.val_16 = (uint16_t)cfg_default(CFG_EXT_HT_CAP_INFO);
729 ht_caps->ext_cap_info = u2.ext_cap_info;
730
731 /* HT Operation - Information subset 1 of 3 */
732 u3.val_8 = (uint8_t)cfg_default(CFG_HT_INFO_FIELD_1);
733 ht_caps->info_field_1 = u3.info_field_1;
734
735 /* HT Operation - Information subset 2 of 3 */
736 u4.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_2);
737 ht_caps->info_field_2 = u4.info_field_2;
738
739 /* HT Operation - Information subset 3 of 3 */
740 u5.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_3);
741 ht_caps->info_field_3 = u5.info_field_3;
742
743 ht_caps->short_preamble = cfg_get(psoc, CFG_SHORT_PREAMBLE);
744 ht_caps->enable_ampdu_ps = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
745 ht_caps->enable_smps = cfg_get(psoc, CFG_ENABLE_HT_SMPS);
746 ht_caps->smps = cfg_get(psoc, CFG_HT_SMPS_MODE);
747 ht_caps->max_num_amsdu = cfg_get(psoc, CFG_MAX_AMSDU_NUM);
Vignesh Viswanathanecd4de72018-11-22 13:02:20 +0530748 ht_caps->tx_ldpc_enable = cfg_get(psoc, CFG_TX_LDPC_ENABLE);
749 ht_caps->short_slot_time_enabled =
750 cfg_get(psoc, CFG_SHORT_SLOT_TIME_ENABLED);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530751}
752
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530753static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
754 struct wlan_mlme_qos *qos_aggr_params)
755{
756 qos_aggr_params->tx_aggregation_size =
757 cfg_get(psoc, CFG_TX_AGGREGATION_SIZE);
758 qos_aggr_params->tx_aggregation_size_be =
759 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEBE);
760 qos_aggr_params->tx_aggregation_size_bk =
761 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEBK);
762 qos_aggr_params->tx_aggregation_size_vi =
763 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEVI);
764 qos_aggr_params->tx_aggregation_size_vo =
765 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEVO);
766 qos_aggr_params->rx_aggregation_size =
767 cfg_get(psoc, CFG_RX_AGGREGATION_SIZE);
768 qos_aggr_params->tx_aggr_sw_retry_threshold_be =
769 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_BE);
770 qos_aggr_params->tx_aggr_sw_retry_threshold_bk =
771 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_BK);
772 qos_aggr_params->tx_aggr_sw_retry_threshold_vi =
773 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VI);
774 qos_aggr_params->tx_aggr_sw_retry_threshold_vo =
775 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VO);
Paul Zhanga25f75a2019-04-12 17:11:14 +0800776 qos_aggr_params->tx_aggr_sw_retry_threshold =
777 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY);
stonez26388d02018-10-17 13:37:48 +0800778 qos_aggr_params->tx_non_aggr_sw_retry_threshold_be =
779 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BE);
780 qos_aggr_params->tx_non_aggr_sw_retry_threshold_bk =
781 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BK);
782 qos_aggr_params->tx_non_aggr_sw_retry_threshold_vi =
783 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VI);
784 qos_aggr_params->tx_non_aggr_sw_retry_threshold_vo =
785 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VO);
Paul Zhanga25f75a2019-04-12 17:11:14 +0800786 qos_aggr_params->tx_non_aggr_sw_retry_threshold =
787 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530788 qos_aggr_params->sap_max_inactivity_override =
789 cfg_get(psoc, CFG_SAP_MAX_INACTIVITY_OVERRIDE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530790 qos_aggr_params->sap_uapsd_enabled =
791 cfg_get(psoc, CFG_SAP_QOS_UAPSD);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530792}
793
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +0530794static void mlme_init_mbo_cfg(struct wlan_objmgr_psoc *psoc,
795 struct wlan_mlme_mbo *mbo_params)
796{
797 mbo_params->mbo_candidate_rssi_thres =
798 cfg_get(psoc, CFG_MBO_CANDIDATE_RSSI_THRESHOLD);
799 mbo_params->mbo_current_rssi_thres =
800 cfg_get(psoc, CFG_MBO_CURRENT_RSSI_THRESHOLD);
801 mbo_params->mbo_current_rssi_mcc_thres =
802 cfg_get(psoc, CFG_MBO_CUR_RSSI_MCC_THRESHOLD);
803 mbo_params->mbo_candidate_rssi_btc_thres =
804 cfg_get(psoc, CFG_MBO_CAND_RSSI_BTC_THRESHOLD);
805}
806
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530807static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc,
808 struct mlme_vht_capabilities_info
809 *vht_cap_info)
810{
811 vht_cap_info->supp_chan_width =
812 cfg_default(CFG_VHT_SUPP_CHAN_WIDTH);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530813 vht_cap_info->num_soundingdim =
814 cfg_default(CFG_VHT_NUM_SOUNDING_DIMENSIONS);
815 vht_cap_info->htc_vhtc =
816 cfg_default(CFG_VHT_HTC_VHTC);
817 vht_cap_info->link_adap_cap =
818 cfg_default(CFG_VHT_LINK_ADAPTATION_CAP);
819 vht_cap_info->rx_antpattern =
820 cfg_default(CFG_VHT_RX_ANT_PATTERN);
821 vht_cap_info->tx_antpattern =
822 cfg_default(CFG_VHT_TX_ANT_PATTERN);
823 vht_cap_info->rx_supp_data_rate =
824 cfg_default(CFG_VHT_RX_SUPP_DATA_RATE);
825 vht_cap_info->tx_supp_data_rate =
826 cfg_default(CFG_VHT_TX_SUPP_DATA_RATE);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530827 vht_cap_info->txop_ps =
828 cfg_default(CFG_VHT_TXOP_PS);
829 vht_cap_info->rx_mcs_map =
Abhinav Kumare057b412018-10-09 17:28:16 +0530830 CFG_VHT_RX_MCS_MAP_STADEF;
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530831 vht_cap_info->tx_mcs_map =
Abhinav Kumare057b412018-10-09 17:28:16 +0530832 CFG_VHT_TX_MCS_MAP_STADEF;
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530833 vht_cap_info->basic_mcs_set =
834 CFG_VHT_BASIC_MCS_SET_STADEF;
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530835
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530836 vht_cap_info->tx_bfee_ant_supp =
837 cfg_get(psoc, CFG_VHT_BEAMFORMEE_ANT_SUPP);
838
839 vht_cap_info->enable_txbf_20mhz =
Abhinav Kumare057b412018-10-09 17:28:16 +0530840 cfg_get(psoc, CFG_VHT_ENABLE_TXBF_IN_20MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530841 vht_cap_info->ampdu_len =
842 cfg_get(psoc, CFG_VHT_MPDU_LEN);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530843
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530844 vht_cap_info->ldpc_coding_cap =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530845 cfg_get(psoc, CFG_RX_LDPC_ENABLE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530846 vht_cap_info->short_gi_80mhz =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530847 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530848 vht_cap_info->short_gi_160mhz =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530849 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530850 vht_cap_info->tx_stbc =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530851 cfg_get(psoc, CFG_TX_STBC_ENABLE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530852 vht_cap_info->rx_stbc =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530853 cfg_get(psoc, CFG_RX_STBC_ENABLE);
854
Kiran Kumar Lokereeaaa3462018-11-01 19:03:23 -0700855 vht_cap_info->su_bformee =
sheenam monga0b8f2572019-05-30 19:26:45 +0530856 cfg_get(psoc, CFG_VHT_SU_BEAMFORMEE_CAP);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530857
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530858 vht_cap_info->mu_bformer =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530859 cfg_default(CFG_VHT_MU_BEAMFORMER_CAP);
860
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530861 vht_cap_info->enable_mu_bformee =
862 cfg_get(psoc, CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530863 vht_cap_info->ampdu_len_exponent =
864 cfg_get(psoc, CFG_VHT_AMPDU_LEN_EXPONENT);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530865 vht_cap_info->channel_width =
866 cfg_get(psoc, CFG_VHT_CHANNEL_WIDTH);
867 vht_cap_info->rx_mcs =
868 cfg_get(psoc, CFG_VHT_ENABLE_RX_MCS_8_9);
869 vht_cap_info->tx_mcs =
870 cfg_get(psoc, CFG_VHT_ENABLE_TX_MCS_8_9);
871 vht_cap_info->rx_mcs2x2 =
872 cfg_get(psoc, CFG_VHT_ENABLE_RX_MCS2x2_8_9);
873 vht_cap_info->tx_mcs2x2 =
874 cfg_get(psoc, CFG_VHT_ENABLE_TX_MCS2x2_8_9);
875 vht_cap_info->enable_vht20_mcs9 =
876 cfg_get(psoc, CFG_ENABLE_VHT20_MCS9);
877 vht_cap_info->enable2x2 =
878 cfg_get(psoc, CFG_VHT_ENABLE_2x2_CAP_FEATURE);
879 vht_cap_info->enable_paid =
880 cfg_get(psoc, CFG_VHT_ENABLE_PAID_FEATURE);
881 vht_cap_info->enable_gid =
882 cfg_get(psoc, CFG_VHT_ENABLE_GID_FEATURE);
883 vht_cap_info->b24ghz_band =
884 cfg_get(psoc, CFG_ENABLE_VHT_FOR_24GHZ);
885 vht_cap_info->vendor_24ghz_band =
886 cfg_get(psoc, CFG_ENABLE_VENDOR_VHT_FOR_24GHZ);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530887 vht_cap_info->tx_bfee_sap =
888 cfg_get(psoc, CFG_VHT_ENABLE_TXBF_SAP_MODE);
889 vht_cap_info->vendor_vhtie =
890 cfg_get(psoc, CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE);
891
892 if (vht_cap_info->enable2x2)
Kiran Kumar Lokere9159af62018-10-31 18:47:33 -0700893 vht_cap_info->su_bformer =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530894 cfg_get(psoc, CFG_VHT_ENABLE_TX_SU_BEAM_FORMER);
895
Kiran Kumar Lokere9159af62018-10-31 18:47:33 -0700896 if (vht_cap_info->enable2x2 && vht_cap_info->su_bformer)
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530897 vht_cap_info->num_soundingdim = NUM_OF_SOUNDING_DIMENSIONS;
Abhinav Kumard4d6eb72018-12-04 20:30:37 +0530898
899 vht_cap_info->tx_bf_cap = cfg_default(CFG_TX_BF_CAP);
900 vht_cap_info->as_cap = cfg_default(CFG_AS_CAP);
901 vht_cap_info->disable_ldpc_with_txbf_ap =
902 cfg_get(psoc, CFG_DISABLE_LDPC_WITH_TXBF_AP);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530903}
904
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530905static void mlme_init_rates_in_cfg(struct wlan_objmgr_psoc *psoc,
906 struct wlan_mlme_rates *rates)
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530907{
908 rates->cfp_period = cfg_default(CFG_CFP_PERIOD);
909 rates->cfp_max_duration = cfg_default(CFG_CFP_MAX_DURATION);
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530910 rates->max_htmcs_txdata = cfg_get(psoc, CFG_MAX_HT_MCS_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530911 rates->disable_abg_rate_txdata = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530912 CFG_DISABLE_ABG_RATE_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530913 rates->sap_max_mcs_txdata = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530914 CFG_SAP_MAX_MCS_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530915 rates->disable_high_ht_mcs_2x2 = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530916 CFG_DISABLE_HIGH_HT_RX_MCS_2x2);
917
918 rates->supported_11b.max_len = CFG_SUPPORTED_RATES_11B_LEN;
919 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_RATES_11B),
920 rates->supported_11b.data,
921 sizeof(rates->supported_11b.data),
922 &rates->supported_11b.len);
923 rates->supported_11a.max_len = CFG_SUPPORTED_RATES_11A_LEN;
924 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_RATES_11A),
925 rates->supported_11a.data,
926 sizeof(rates->supported_11a.data),
927 &rates->supported_11a.len);
928 rates->opr_rate_set.max_len = CFG_OPERATIONAL_RATE_SET_LEN;
929 rates->opr_rate_set.len = 0;
930 rates->ext_opr_rate_set.max_len = CFG_EXTENDED_OPERATIONAL_RATE_SET_LEN;
931 rates->ext_opr_rate_set.len = 0;
932 rates->supported_mcs_set.max_len = CFG_SUPPORTED_MCS_SET_LEN;
933 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_MCS_SET),
934 rates->supported_mcs_set.data,
935 sizeof(rates->supported_mcs_set.data),
936 &rates->supported_mcs_set.len);
937 rates->basic_mcs_set.max_len = CFG_BASIC_MCS_SET_LEN;
938 qdf_uint8_array_parse(cfg_default(CFG_BASIC_MCS_SET),
939 rates->basic_mcs_set.data,
940 sizeof(rates->basic_mcs_set.data),
941 &rates->basic_mcs_set.len);
942 rates->current_mcs_set.max_len = CFG_CURRENT_MCS_SET_LEN;
943 qdf_uint8_array_parse(cfg_default(CFG_CURRENT_MCS_SET),
944 rates->current_mcs_set.data,
945 sizeof(rates->current_mcs_set.data),
946 &rates->current_mcs_set.len);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530947}
948
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700949static void mlme_init_dfs_cfg(struct wlan_objmgr_psoc *psoc,
950 struct wlan_mlme_dfs_cfg *dfs_cfg)
951{
Arif Hussain224d3812018-11-16 17:58:38 -0800952 dfs_cfg->dfs_ignore_cac = cfg_get(psoc, CFG_IGNORE_CAC);
953 dfs_cfg->dfs_master_capable =
954 cfg_get(psoc, CFG_ENABLE_DFS_MASTER_CAPABILITY);
955 dfs_cfg->dfs_disable_channel_switch =
956 cfg_get(psoc, CFG_DISABLE_DFS_CH_SWITCH);
957 dfs_cfg->dfs_filter_offload =
958 cfg_get(psoc, CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD);
959 dfs_cfg->dfs_prefer_non_dfs =
960 cfg_get(psoc, CFG_ENABLE_NON_DFS_CHAN_ON_RADAR);
961 dfs_cfg->dfs_beacon_tx_enhanced =
962 cfg_get(psoc, CFG_DFS_BEACON_TX_ENHANCED);
Arif Hussain0b634b42018-12-20 16:03:18 -0800963 dfs_cfg->dfs_disable_japan_w53 =
964 cfg_get(psoc, CFG_DISABLE_DFS_JAPAN_W53);
Arif Hussain224d3812018-11-16 17:58:38 -0800965 dfs_cfg->sap_tx_leakage_threshold =
966 cfg_get(psoc, CFG_SAP_TX_LEAKAGE_THRESHOLD);
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700967}
968
gaurank kathpaliae5a17e42018-09-10 10:05:25 +0530969static void mlme_init_feature_flag_in_cfg(
970 struct wlan_objmgr_psoc *psoc,
971 struct wlan_mlme_feature_flag *feature_flags)
972{
973 feature_flags->accept_short_slot_assoc =
974 cfg_default(CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY);
975 feature_flags->enable_hcf = cfg_default(CFG_HCF_ENABLED);
976 feature_flags->enable_rsn = cfg_default(CFG_RSN_ENABLED);
977 feature_flags->enable_short_preamble_11g =
978 cfg_default(CFG_11G_SHORT_PREAMBLE_ENABLED);
979 feature_flags->enable_short_slot_time_11g =
980 cfg_default(CFG_11G_SHORT_SLOT_TIME_ENABLED);
981 feature_flags->channel_bonding_mode =
982 cfg_default(CFG_CHANNEL_BONDING_MODE);
983 feature_flags->enable_block_ack = cfg_default(CFG_BLOCK_ACK_ENABLED);
984 feature_flags->enable_ampdu = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
Krunal Sonid2c33e12018-12-06 15:02:37 -0800985 feature_flags->mcc_rts_cts_prot = cfg_get(psoc,
986 CFG_FW_MCC_RTS_CTS_PROT);
987 feature_flags->mcc_bcast_prob_rsp = cfg_get(psoc,
988 CFG_FW_MCC_BCAST_PROB_RESP);
989 feature_flags->enable_mcc = cfg_get(psoc, CFG_MCC_FEATURE);
Wu Gaoed616a12019-01-16 15:19:21 +0800990 feature_flags->channel_bonding_mode_24ghz =
991 cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_24GHZ);
992 feature_flags->channel_bonding_mode_5ghz =
993 cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_5GHZ);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +0530994}
995
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530996static void mlme_init_sap_protection_cfg(struct wlan_objmgr_psoc *psoc,
997 struct wlan_mlme_sap_protection
998 *sap_protection_params)
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530999{
1000 sap_protection_params->protection_enabled =
1001 cfg_default(CFG_PROTECTION_ENABLED);
1002 sap_protection_params->protection_force_policy =
1003 cfg_default(CFG_FORCE_POLICY_PROTECTION);
Pragaspathi Thilagaraj1ee76002018-09-18 21:38:51 +05301004 sap_protection_params->ignore_peer_ht_opmode =
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +05301005 cfg_get(psoc, CFG_IGNORE_PEER_HT_MODE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +05301006 sap_protection_params->enable_ap_obss_protection =
1007 cfg_get(psoc, CFG_AP_OBSS_PROTECTION_ENABLE);
Pragaspathi Thilagarajf37f3932019-01-11 00:25:43 +05301008 sap_protection_params->is_ap_prot_enabled =
1009 cfg_get(psoc, CFG_AP_ENABLE_PROTECTION_MODE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +05301010 sap_protection_params->ap_protection_mode =
1011 cfg_get(psoc, CFG_AP_PROTECTION_MODE);
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +05301012}
1013
Bala Venkatesh6d537092018-09-25 10:38:36 +05301014#ifdef WLAN_FEATURE_11AX
Bala Venkatesh9296f092018-09-21 16:25:24 +05301015static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
Bala Venkatesh6d537092018-09-25 10:38:36 +05301016 struct wlan_mlme_cfg *mlme_cfg)
Bala Venkatesh9296f092018-09-21 16:25:24 +05301017{
Bala Venkatesh6d537092018-09-25 10:38:36 +05301018 uint32_t chan_width;
1019 uint16_t value = 0;
1020 struct wlan_mlme_he_caps *he_caps = &mlme_cfg->he_caps;
1021
1022 he_caps->dot11_he_cap.htc_he = cfg_default(CFG_HE_CONTROL);
1023 he_caps->dot11_he_cap.twt_request = cfg_default(CFG_HE_TWT_REQUESTOR);
1024 he_caps->dot11_he_cap.twt_responder = cfg_default(CFG_HE_TWT_RESPONDER);
1025 he_caps->dot11_he_cap.fragmentation =
1026 cfg_default(CFG_HE_FRAGMENTATION);
1027 he_caps->dot11_he_cap.max_num_frag_msdu_amsdu_exp =
1028 cfg_default(CFG_HE_MAX_FRAG_MSDU);
1029 he_caps->dot11_he_cap.min_frag_size = cfg_default(CFG_HE_MIN_FRAG_SIZE);
1030 he_caps->dot11_he_cap.trigger_frm_mac_pad =
1031 cfg_default(CFG_HE_TRIG_PAD);
1032 he_caps->dot11_he_cap.multi_tid_aggr_rx_supp =
1033 cfg_default(CFG_HE_MTID_AGGR_RX);
1034 he_caps->dot11_he_cap.he_link_adaptation =
1035 cfg_default(CFG_HE_LINK_ADAPTATION);
1036 he_caps->dot11_he_cap.all_ack = cfg_default(CFG_HE_ALL_ACK);
1037 he_caps->dot11_he_cap.trigd_rsp_sched =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301038 cfg_default(CFG_HE_TRIGD_RSP_SCHEDULING);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301039 he_caps->dot11_he_cap.a_bsr = cfg_default(CFG_HE_BUFFER_STATUS_RPT);
1040 he_caps->dot11_he_cap.broadcast_twt = cfg_default(CFG_HE_BCAST_TWT);
1041 he_caps->dot11_he_cap.ba_32bit_bitmap = cfg_default(CFG_HE_BA_32BIT);
1042 he_caps->dot11_he_cap.mu_cascade = cfg_default(CFG_HE_MU_CASCADING);
1043 he_caps->dot11_he_cap.ack_enabled_multitid =
1044 cfg_default(CFG_HE_MULTI_TID);
1045 he_caps->dot11_he_cap.omi_a_ctrl = cfg_default(CFG_HE_OMI);
1046 he_caps->dot11_he_cap.ofdma_ra = cfg_default(CFG_HE_OFDMA_RA);
1047 he_caps->dot11_he_cap.max_ampdu_len_exp_ext =
1048 cfg_default(CFG_HE_MAX_AMPDU_LEN);
1049 he_caps->dot11_he_cap.amsdu_frag = cfg_default(CFG_HE_AMSDU_FRAG);
1050 he_caps->dot11_he_cap.flex_twt_sched =
1051 cfg_default(CFG_HE_FLEX_TWT_SCHED);
1052 he_caps->dot11_he_cap.rx_ctrl_frame = cfg_default(CFG_HE_RX_CTRL);
1053 he_caps->dot11_he_cap.bsrp_ampdu_aggr =
1054 cfg_default(CFG_HE_BSRP_AMPDU_AGGR);
1055 he_caps->dot11_he_cap.qtp = cfg_default(CFG_HE_QTP);
1056 he_caps->dot11_he_cap.a_bqr = cfg_default(CFG_HE_A_BQR);
1057 he_caps->dot11_he_cap.spatial_reuse_param_rspder =
1058 cfg_default(CFG_HE_SR_RESPONDER);
1059 he_caps->dot11_he_cap.ndp_feedback_supp =
1060 cfg_default(CFG_HE_NDP_FEEDBACK_SUPP);
1061 he_caps->dot11_he_cap.ops_supp = cfg_default(CFG_HE_OPS_SUPP);
1062 he_caps->dot11_he_cap.amsdu_in_ampdu =
1063 cfg_default(CFG_HE_AMSDU_IN_AMPDU);
1064
1065 chan_width = cfg_default(CFG_HE_CHAN_WIDTH);
1066 he_caps->dot11_he_cap.chan_width_0 = HE_CH_WIDTH_GET_BIT(chan_width, 0);
1067 he_caps->dot11_he_cap.chan_width_1 = HE_CH_WIDTH_GET_BIT(chan_width, 1);
1068 he_caps->dot11_he_cap.chan_width_2 = HE_CH_WIDTH_GET_BIT(chan_width, 2);
1069 he_caps->dot11_he_cap.chan_width_3 = HE_CH_WIDTH_GET_BIT(chan_width, 3);
1070 he_caps->dot11_he_cap.chan_width_4 = HE_CH_WIDTH_GET_BIT(chan_width, 4);
1071 he_caps->dot11_he_cap.chan_width_5 = HE_CH_WIDTH_GET_BIT(chan_width, 5);
1072 he_caps->dot11_he_cap.chan_width_6 = HE_CH_WIDTH_GET_BIT(chan_width, 6);
1073
1074 he_caps->dot11_he_cap.multi_tid_aggr_tx_supp =
1075 cfg_default(CFG_HE_MTID_AGGR_TX);
1076 he_caps->dot11_he_cap.he_sub_ch_sel_tx_supp =
1077 cfg_default(CFG_HE_SUB_CH_SEL_TX);
1078 he_caps->dot11_he_cap.ul_2x996_tone_ru_supp =
1079 cfg_default(CFG_HE_UL_2X996_RU);
1080 he_caps->dot11_he_cap.om_ctrl_ul_mu_data_dis_rx =
1081 cfg_default(CFG_HE_OM_CTRL_UL_MU_DIS_RX);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001082 he_caps->dot11_he_cap.he_dynamic_smps =
1083 cfg_default(CFG_HE_DYNAMIC_SMPS);
1084 he_caps->dot11_he_cap.punctured_sounding_supp =
1085 cfg_default(CFG_HE_PUNCTURED_SOUNDING);
1086 he_caps->dot11_he_cap.ht_vht_trg_frm_rx_supp =
1087 cfg_default(CFG_HE_HT_VHT_TRG_FRM_RX);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301088 he_caps->dot11_he_cap.rx_pream_puncturing =
1089 cfg_default(CFG_HE_RX_PREAM_PUNC);
1090 he_caps->dot11_he_cap.device_class =
1091 cfg_default(CFG_HE_CLASS_OF_DEVICE);
1092 he_caps->dot11_he_cap.ldpc_coding = cfg_default(CFG_HE_LDPC);
1093 he_caps->dot11_he_cap.he_1x_ltf_800_gi_ppdu =
1094 cfg_default(CFG_HE_LTF_PPDU);
1095 he_caps->dot11_he_cap.midamble_tx_rx_max_nsts =
1096 cfg_default(CFG_HE_MIDAMBLE_RX_MAX_NSTS);
1097 he_caps->dot11_he_cap.he_4x_ltf_3200_gi_ndp =
1098 cfg_default(CFG_HE_LTF_NDP);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001099 he_caps->dot11_he_cap.tb_ppdu_tx_stbc_lt_80mhz =
Bala Venkatesh6d537092018-09-25 10:38:36 +05301100 cfg_default(CFG_HE_TX_STBC_LT80);
1101 he_caps->dot11_he_cap.rx_stbc_lt_80mhz =
1102 cfg_default(CFG_HE_RX_STBC_LT80);
1103 he_caps->dot11_he_cap.doppler = cfg_default(CFG_HE_DOPPLER);
Harprit Chhabada09b50032019-02-13 14:48:01 -08001104 he_caps->dot11_he_cap.ul_mu =
1105 cfg_get(psoc, CFG_HE_UL_MUMIMO);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301106 he_caps->dot11_he_cap.dcm_enc_tx = cfg_default(CFG_HE_DCM_TX);
1107 he_caps->dot11_he_cap.dcm_enc_rx = cfg_default(CFG_HE_DCM_RX);
1108 he_caps->dot11_he_cap.ul_he_mu = cfg_default(CFG_HE_MU_PPDU);
1109 he_caps->dot11_he_cap.su_beamformer = cfg_default(CFG_HE_SU_BEAMFORMER);
1110 he_caps->dot11_he_cap.su_beamformee = cfg_default(CFG_HE_SU_BEAMFORMEE);
1111 he_caps->dot11_he_cap.mu_beamformer = cfg_default(CFG_HE_MU_BEAMFORMER);
1112 he_caps->dot11_he_cap.bfee_sts_lt_80 =
1113 cfg_default(CFG_HE_BFEE_STS_LT80);
1114 he_caps->dot11_he_cap.bfee_sts_gt_80 =
1115 cfg_default(CFG_HE_BFEE_STS_GT80);
1116 he_caps->dot11_he_cap.num_sounding_lt_80 =
1117 cfg_default(CFG_HE_NUM_SOUND_LT80);
1118 he_caps->dot11_he_cap.num_sounding_gt_80 =
1119 cfg_default(CFG_HE_NUM_SOUND_GT80);
1120 he_caps->dot11_he_cap.su_feedback_tone16 =
1121 cfg_default(CFG_HE_SU_FEED_TONE16);
1122 he_caps->dot11_he_cap.mu_feedback_tone16 =
1123 cfg_default(CFG_HE_MU_FEED_TONE16);
1124 he_caps->dot11_he_cap.codebook_su = cfg_default(CFG_HE_CODEBOOK_SU);
1125 he_caps->dot11_he_cap.codebook_mu = cfg_default(CFG_HE_CODEBOOK_MU);
1126 he_caps->dot11_he_cap.beamforming_feedback =
1127 cfg_default(CFG_HE_BFRM_FEED);
1128 he_caps->dot11_he_cap.he_er_su_ppdu = cfg_default(CFG_HE_ER_SU_PPDU);
1129 he_caps->dot11_he_cap.dl_mu_mimo_part_bw =
1130 cfg_default(CFG_HE_DL_PART_BW);
1131 he_caps->dot11_he_cap.ppet_present = cfg_default(CFG_HE_PPET_PRESENT);
1132 he_caps->dot11_he_cap.srp = cfg_default(CFG_HE_SRP);
1133 he_caps->dot11_he_cap.power_boost = cfg_default(CFG_HE_POWER_BOOST);
1134 he_caps->dot11_he_cap.he_ltf_800_gi_4x = cfg_default(CFG_HE_4x_LTF_GI);
1135 he_caps->dot11_he_cap.max_nc = cfg_default(CFG_HE_MAX_NC);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001136 he_caps->dot11_he_cap.tb_ppdu_tx_stbc_gt_80mhz =
Bala Venkatesh6d537092018-09-25 10:38:36 +05301137 cfg_default(CFG_HE_TX_STBC_GT80);
1138 he_caps->dot11_he_cap.rx_stbc_gt_80mhz =
1139 cfg_default(CFG_HE_RX_STBC_GT80);
1140 he_caps->dot11_he_cap.er_he_ltf_800_gi_4x =
1141 cfg_default(CFG_HE_ER_4x_LTF_GI);
1142 he_caps->dot11_he_cap.he_ppdu_20_in_40Mhz_2G =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301143 cfg_default(CFG_HE_PPDU_20_IN_40MHZ_2G);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301144 he_caps->dot11_he_cap.he_ppdu_20_in_160_80p80Mhz =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301145 cfg_default(CFG_HE_PPDU_20_IN_160_80P80MHZ);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301146 he_caps->dot11_he_cap.he_ppdu_80_in_160_80p80Mhz =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301147 cfg_default(CFG_HE_PPDU_80_IN_160_80P80MHZ);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301148 he_caps->dot11_he_cap.er_1x_he_ltf_gi =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301149 cfg_default(CFG_HE_ER_1X_HE_LTF_GI);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301150 he_caps->dot11_he_cap.midamble_tx_rx_1x_he_ltf =
1151 cfg_default(CFG_HE_MIDAMBLE_TXRX_1X_HE_LTF);
1152 he_caps->dot11_he_cap.dcm_max_bw = cfg_default(CFG_HE_DCM_MAX_BW);
1153 he_caps->dot11_he_cap.longer_than_16_he_sigb_ofdm_sym =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301154 cfg_default(CFG_HE_LONGER_16_SIGB_OFDM_SYM);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301155 he_caps->dot11_he_cap.non_trig_cqi_feedback =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301156 cfg_default(CFG_HE_NON_TRIG_CQI_FEEDBACK);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301157 he_caps->dot11_he_cap.tx_1024_qam_lt_242_tone_ru =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301158 cfg_default(CFG_HE_TX_1024_QAM_LT_242_RU);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301159 he_caps->dot11_he_cap.rx_1024_qam_lt_242_tone_ru =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301160 cfg_default(CFG_HE_RX_1024_QAM_LT_242_RU);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301161 he_caps->dot11_he_cap.rx_full_bw_su_he_mu_compress_sigb =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301162 cfg_default(CFG_HE_RX_FULL_BW_MU_CMPR_SIGB);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301163 he_caps->dot11_he_cap.rx_full_bw_su_he_mu_non_cmpr_sigb =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301164 cfg_default(CFG_HE_RX_FULL_BW_MU_NON_CMPR_SIGB);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301165 he_caps->dot11_he_cap.rx_he_mcs_map_lt_80 =
1166 cfg_default(CFG_HE_RX_MCS_MAP_LT_80);
1167 he_caps->dot11_he_cap.tx_he_mcs_map_lt_80 =
1168 cfg_default(CFG_HE_TX_MCS_MAP_LT_80);
1169 value = cfg_default(CFG_HE_RX_MCS_MAP_160);
1170 qdf_mem_copy(he_caps->dot11_he_cap.rx_he_mcs_map_160, &value,
1171 sizeof(uint16_t));
1172 value = cfg_default(CFG_HE_TX_MCS_MAP_160);
1173 qdf_mem_copy(he_caps->dot11_he_cap.tx_he_mcs_map_160, &value,
1174 sizeof(uint16_t));
1175 value = cfg_default(CFG_HE_RX_MCS_MAP_80_80);
1176 qdf_mem_copy(he_caps->dot11_he_cap.rx_he_mcs_map_80_80, &value,
1177 sizeof(uint16_t));
1178 value = cfg_default(CFG_HE_TX_MCS_MAP_80_80);
1179 qdf_mem_copy(he_caps->dot11_he_cap.tx_he_mcs_map_80_80, &value,
1180 sizeof(uint16_t));
Bala Venkatesh9296f092018-09-21 16:25:24 +05301181 he_caps->he_ops_basic_mcs_nss = cfg_default(CFG_HE_OPS_BASIC_MCS_NSS);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301182 he_caps->he_dynamic_fragmentation =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301183 cfg_get(psoc, CFG_HE_DYNAMIC_FRAGMENTATION);
1184 he_caps->enable_ul_mimo =
1185 cfg_get(psoc, CFG_ENABLE_UL_MIMO);
1186 he_caps->enable_ul_ofdm =
1187 cfg_get(psoc, CFG_ENABLE_UL_OFDMA);
1188 he_caps->he_sta_obsspd =
1189 cfg_get(psoc, CFG_HE_STA_OBSSPD);
1190 qdf_mem_zero(he_caps->he_ppet_2g, MLME_HE_PPET_LEN);
1191 qdf_mem_zero(he_caps->he_ppet_5g, MLME_HE_PPET_LEN);
1192}
Bala Venkatesh6d537092018-09-25 10:38:36 +05301193#else
1194static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
1195 struct wlan_mlme_cfg *mlme_cfg)
1196{
1197}
1198#endif
Bala Venkatesh9296f092018-09-21 16:25:24 +05301199
Arif Hussain178f35f2018-11-13 18:26:18 -08001200static void mlme_init_twt_cfg(struct wlan_objmgr_psoc *psoc,
1201 struct wlan_mlme_cfg_twt *twt_cfg)
1202{
1203 twt_cfg->is_twt_bcast_enabled = cfg_get(psoc, CFG_BCAST_TWT);
1204 twt_cfg->is_twt_enabled = cfg_get(psoc, CFG_ENABLE_TWT);
1205 twt_cfg->is_twt_responder_enabled = cfg_get(psoc, CFG_TWT_RESPONDER);
1206 twt_cfg->is_twt_requestor_enabled = cfg_get(psoc, CFG_TWT_REQUESTOR);
1207 twt_cfg->twt_congestion_timeout = cfg_get(psoc, CFG_TWT_CONGESTION_TIMEOUT);
1208}
1209
Srinivas Dasaried83dde2019-02-11 16:21:42 +05301210#ifdef WLAN_FEATURE_SAE
1211static bool is_sae_sap_enabled(struct wlan_objmgr_psoc *psoc)
1212{
1213 return cfg_get(psoc, CFG_IS_SAP_SAE_ENABLED);
1214}
1215#else
1216static bool is_sae_sap_enabled(struct wlan_objmgr_psoc *psoc)
1217{
1218 return false;
1219}
1220#endif
1221
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301222static void mlme_init_sap_cfg(struct wlan_objmgr_psoc *psoc,
1223 struct wlan_mlme_cfg_sap *sap_cfg)
Bala Venkatesh100d7422018-08-27 11:42:21 +05301224{
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301225 uint8_t *ssid;
1226
1227 ssid = cfg_default(CFG_SSID);
Srinivas Girigowdab8fdc642019-03-19 15:33:03 -07001228 qdf_mem_zero(sap_cfg->cfg_ssid, WLAN_SSID_MAX_LEN);
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301229 sap_cfg->cfg_ssid_len = STR_SSID_DEFAULT_LEN;
1230 qdf_mem_copy(sap_cfg->cfg_ssid, ssid, STR_SSID_DEFAULT_LEN);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301231 sap_cfg->beacon_interval = cfg_get(psoc, CFG_BEACON_INTERVAL);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301232 sap_cfg->dtim_interval = cfg_default(CFG_DTIM_PERIOD);
1233 sap_cfg->listen_interval = cfg_default(CFG_LISTEN_INTERVAL);
1234 sap_cfg->sap_11g_policy = cfg_default(CFG_11G_ONLY_POLICY);
1235 sap_cfg->assoc_sta_limit = cfg_default(CFG_ASSOC_STA_LIMIT);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301236 sap_cfg->enable_lte_coex = cfg_get(psoc, CFG_ENABLE_LTE_COEX);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301237 sap_cfg->rmc_action_period_freq =
1238 cfg_default(CFG_RMC_ACTION_PERIOD_FREQUENCY);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301239 sap_cfg->rate_tx_mgmt = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT);
1240 sap_cfg->rate_tx_mgmt_2g = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT_2G);
1241 sap_cfg->rate_tx_mgmt_5g = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT_5G);
1242 sap_cfg->tele_bcn_wakeup_en = cfg_get(psoc, CFG_TELE_BCN_WAKEUP_EN);
1243 sap_cfg->tele_bcn_max_li = cfg_get(psoc, CFG_TELE_BCN_MAX_LI);
1244 sap_cfg->sap_get_peer_info = cfg_get(psoc, CFG_SAP_GET_PEER_INFO);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301245 sap_cfg->sap_allow_all_chan_param_name =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301246 cfg_get(psoc, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM);
1247 sap_cfg->sap_max_no_peers = cfg_get(psoc, CFG_SAP_MAX_NO_PEERS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301248 sap_cfg->sap_max_offload_peers =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301249 cfg_get(psoc, CFG_SAP_MAX_OFFLOAD_PEERS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301250 sap_cfg->sap_max_offload_reorder_buffs =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301251 cfg_get(psoc, CFG_SAP_MAX_OFFLOAD_REORDER_BUFFS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301252 sap_cfg->sap_ch_switch_beacon_cnt =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301253 cfg_get(psoc, CFG_SAP_CH_SWITCH_BEACON_CNT);
1254 sap_cfg->sap_ch_switch_mode = cfg_get(psoc, CFG_SAP_CH_SWITCH_MODE);
1255 sap_cfg->sap_internal_restart =
1256 cfg_get(psoc, CFG_SAP_INTERNAL_RESTART);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301257 sap_cfg->chan_switch_hostapd_rate_enabled_name =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301258 cfg_get(psoc, CFG_CHAN_SWITCH_HOSTAPD_RATE_ENABLED_NAME);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301259 sap_cfg->reduced_beacon_interval =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301260 cfg_get(psoc, CFG_REDUCED_BEACON_INTERVAL);
Bala Venkatesh46e29032018-11-14 18:24:55 +05301261 sap_cfg->max_li_modulated_dtim_time =
1262 cfg_get(psoc, CFG_MAX_LI_MODULATED_DTIM);
1263 sap_cfg->country_code_priority =
1264 cfg_get(psoc, CFG_COUNTRY_CODE_PRIORITY);
1265 sap_cfg->sap_pref_chan_location =
1266 cfg_get(psoc, CFG_SAP_PREF_CHANNEL_LOCATION);
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301267 sap_cfg->sap_force_11n_for_11ac =
1268 cfg_get(psoc, CFG_SAP_FORCE_11N_FOR_11AC);
1269 sap_cfg->go_force_11n_for_11ac =
1270 cfg_get(psoc, CFG_GO_FORCE_11N_FOR_11AC);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301271 sap_cfg->ap_random_bssid_enable =
1272 cfg_get(psoc, CFG_AP_ENABLE_RANDOM_BSSID);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001273 sap_cfg->sap_mcc_chnl_avoid =
1274 cfg_get(psoc, CFG_SAP_MCC_CHANNEL_AVOIDANCE);
Sandeep Puligilla34618782019-01-04 17:42:42 -08001275 sap_cfg->sap_11ac_override =
1276 cfg_get(psoc, CFG_SAP_11AC_OVERRIDE);
1277 sap_cfg->go_11ac_override =
1278 cfg_get(psoc, CFG_GO_11AC_OVERRIDE);
Srinivas Dasaried83dde2019-02-11 16:21:42 +05301279 sap_cfg->sap_sae_enabled = is_sae_sap_enabled(psoc);
Harprit Chhabadae5742552019-03-21 16:28:48 -07001280 sap_cfg->is_sap_bcast_deauth_enabled =
1281 cfg_get(psoc, CFG_IS_SAP_BCAST_DEAUTH_ENABLED);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301282}
1283
Wu Gaod8f3db02018-07-24 19:18:45 +08001284static void mlme_init_obss_ht40_cfg(struct wlan_objmgr_psoc *psoc,
1285 struct wlan_mlme_obss_ht40 *obss_ht40)
1286{
1287 obss_ht40->active_dwelltime =
1288 cfg_get(psoc, CFG_OBSS_HT40_SCAN_ACTIVE_DWELL_TIME);
1289 obss_ht40->passive_dwelltime =
1290 cfg_get(psoc, CFG_OBSS_HT40_SCAN_PASSIVE_DWELL_TIME);
1291 obss_ht40->width_trigger_interval =
1292 cfg_get(psoc, CFG_OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL);
1293 obss_ht40->passive_per_channel = (uint32_t)
1294 cfg_default(CFG_OBSS_HT40_SCAN_PASSIVE_TOTAL_PER_CHANNEL);
1295 obss_ht40->active_per_channel = (uint32_t)
1296 cfg_default(CFG_OBSS_HT40_SCAN_ACTIVE_TOTAL_PER_CHANNEL);
1297 obss_ht40->width_trans_delay = (uint32_t)
1298 cfg_default(CFG_OBSS_HT40_WIDTH_CH_TRANSITION_DELAY);
1299 obss_ht40->scan_activity_threshold = (uint32_t)
1300 cfg_default(CFG_OBSS_HT40_SCAN_ACTIVITY_THRESHOLD);
Wu Gaofc81ecf2018-11-22 11:38:41 +08001301 obss_ht40->is_override_ht20_40_24g =
1302 cfg_get(psoc, CFG_OBSS_HT40_OVERRIDE_HT40_20_24GHZ);
Wu Gao2255ea22019-01-04 15:44:35 +08001303 obss_ht40->obss_detection_offload_enabled =
1304 (bool)cfg_default(CFG_OBSS_DETECTION_OFFLOAD);
1305 obss_ht40->obss_color_collision_offload_enabled =
1306 (bool)cfg_default(CFG_OBSS_COLOR_COLLISION_OFFLOAD);
Wu Gaod8f3db02018-07-24 19:18:45 +08001307}
Wu Gaofc81ecf2018-11-22 11:38:41 +08001308
Harprit Chhabadabec6de42018-09-10 10:21:15 -07001309static void mlme_init_threshold_cfg(struct wlan_objmgr_psoc *psoc,
1310 struct wlan_mlme_threshold *threshold)
1311{
1312 threshold->rts_threshold = cfg_get(psoc, CFG_RTS_THRESHOLD);
1313 threshold->frag_threshold = cfg_get(psoc, CFG_FRAG_THRESHOLD);
1314}
Wu Gaod8f3db02018-07-24 19:18:45 +08001315
Harprit Chhabadabd027a02018-10-30 13:02:22 -07001316static void mlme_init_acs_cfg(struct wlan_objmgr_psoc *psoc,
1317 struct wlan_mlme_acs *acs)
1318{
1319 acs->is_acs_with_more_param =
1320 cfg_get(psoc, CFG_ACS_WITH_MORE_PARAM);
1321 acs->auto_channel_select_weight =
1322 cfg_get(psoc, CFG_AUTO_CHANNEL_SELECT_WEIGHT);
1323 acs->is_vendor_acs_support =
1324 cfg_get(psoc, CFG_USER_AUTO_CHANNEL_SELECTION);
1325 acs->is_acs_support_for_dfs_ltecoex =
1326 cfg_get(psoc, CFG_USER_ACS_DFS_LTE);
1327 acs->is_external_acs_policy =
1328 cfg_get(psoc, CFG_EXTERNAL_ACS_POLICY);
1329}
1330
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001331QDF_STATUS mlme_init_ibss_cfg(struct wlan_objmgr_psoc *psoc,
1332 struct wlan_mlme_ibss_cfg *ibss_cfg)
1333{
1334 if (!ibss_cfg)
1335 return QDF_STATUS_E_FAILURE;
1336
1337 ibss_cfg->auto_bssid = cfg_default(CFG_IBSS_AUTO_BSSID);
1338 ibss_cfg->atim_win_size = cfg_get(psoc, CFG_IBSS_ATIM_WIN_SIZE);
1339 ibss_cfg->adhoc_ch_5g = cfg_get(psoc, CFG_IBSS_ADHOC_CHANNEL_5GHZ);
1340 ibss_cfg->adhoc_ch_2g = cfg_get(psoc, CFG_IBSS_ADHOC_CHANNEL_24GHZ);
1341 ibss_cfg->coalesing_enable = cfg_get(psoc, CFG_IBSS_COALESING);
1342 ibss_cfg->power_save_allow = cfg_get(psoc,
1343 CFG_IBSS_IS_POWER_SAVE_ALLOWED);
1344 ibss_cfg->power_collapse_allow =
1345 cfg_get(psoc, CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED);
1346 ibss_cfg->awake_on_tx_rx = cfg_get(psoc, CFG_IBSS_AWAKE_ON_TX_RX);
1347 ibss_cfg->inactivity_bcon_count =
1348 cfg_get(psoc, CFG_IBSS_INACTIVITY_TIME);
1349 ibss_cfg->txsp_end_timeout =
1350 cfg_get(psoc, CFG_IBSS_TXSP_END_INACTIVITY);
1351 ibss_cfg->ps_warm_up_time = cfg_get(psoc, CFG_IBSS_PS_WARMUP_TIME);
1352 ibss_cfg->ps_1rx_chain_atim_win =
1353 cfg_get(psoc, CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW);
1354 qdf_copy_macaddr(&ibss_cfg->bssid, (struct qdf_mac_addr *)
1355 &cfg_get(psoc, CFG_IBSS_BSSID));
1356
1357 return QDF_STATUS_SUCCESS;
1358}
1359
Jiachao Wu3304d6b2018-08-24 18:24:34 +08001360static void
1361mlme_init_product_details_cfg(struct wlan_mlme_product_details_cfg
1362 *product_details)
1363{
1364 qdf_str_lcopy(product_details->manufacturer_name,
1365 cfg_default(CFG_MFR_NAME),
1366 sizeof(product_details->manufacturer_name));
1367 qdf_str_lcopy(product_details->manufacture_product_name,
1368 cfg_default(CFG_MFR_PRODUCT_NAME),
1369 sizeof(product_details->manufacture_product_name));
1370 qdf_str_lcopy(product_details->manufacture_product_version,
1371 cfg_default(CFG_MFR_PRODUCT_VERSION),
1372 sizeof(product_details->manufacture_product_version));
1373 qdf_str_lcopy(product_details->model_name,
1374 cfg_default(CFG_MODEL_NAME),
1375 sizeof(product_details->model_name));
1376 qdf_str_lcopy(product_details->model_number,
1377 cfg_default(CFG_MODEL_NUMBER),
1378 sizeof(product_details->model_number));
1379}
1380
Wu Gao406c53c2018-09-10 13:51:37 +08001381static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc,
1382 struct wlan_mlme_sta_cfg *sta)
1383{
1384 sta->sta_keep_alive_period =
1385 cfg_get(psoc, CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
1386 sta->tgt_gtx_usr_cfg =
1387 cfg_get(psoc, CFG_TGT_GTX_USR_CFG);
1388 sta->pmkid_modes =
1389 cfg_get(psoc, CFG_PMKID_MODES);
1390 sta->ignore_peer_erp_info =
1391 cfg_get(psoc, CFG_IGNORE_PEER_ERP_INFO);
1392 sta->sta_prefer_80mhz_over_160mhz =
1393 cfg_get(psoc, CFG_STA_PREFER_80MHZ_OVER_160MHZ);
1394 sta->enable_5g_ebt =
1395 cfg_get(psoc, CFG_PPS_ENABLE_5G_EBT);
1396 sta->deauth_before_connection =
1397 cfg_get(psoc, CFG_ENABLE_DEAUTH_BEFORE_CONNECTION);
1398 sta->dot11p_mode =
1399 cfg_get(psoc, CFG_DOT11P_MODE);
1400 sta->enable_go_cts2self_for_sta =
1401 cfg_get(psoc, CFG_ENABLE_GO_CTS2SELF_FOR_STA);
1402 sta->qcn_ie_support =
1403 cfg_get(psoc, CFG_QCN_IE_SUPPORT);
1404 sta->fils_max_chan_guard_time =
1405 cfg_get(psoc, CFG_FILS_MAX_CHAN_GUARD_TIME);
1406 sta->force_rsne_override =
1407 cfg_get(psoc, CFG_FORCE_RSNE_OVERRIDE);
1408 sta->single_tid =
1409 cfg_get(psoc, CFG_SINGLE_TID_RC);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001410 sta->sta_miracast_mcc_rest_time =
1411 cfg_get(psoc, CFG_STA_MCAST_MCC_REST_TIME);
Wu Gao406c53c2018-09-10 13:51:37 +08001412 sta->wait_cnf_timeout =
1413 (uint32_t)cfg_default(CFG_WT_CNF_TIMEOUT);
1414 sta->current_rssi =
1415 (uint32_t)cfg_default(CFG_CURRENT_RSSI);
Wu Gao4f8938a2018-11-26 11:49:00 +08001416 sta->allow_tpc_from_ap = cfg_get(psoc, CFG_TX_POWER_CTRL);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301417 sta->sta_keepalive_method =
1418 cfg_get(psoc, CFG_STA_KEEPALIVE_METHOD);
Wu Gao406c53c2018-09-10 13:51:37 +08001419}
1420
Arif Hussaincca60432018-12-03 19:45:12 -08001421static void mlme_init_stats_cfg(struct wlan_objmgr_psoc *psoc,
1422 struct wlan_mlme_stats_cfg *stats)
1423{
1424 stats->stats_periodic_display_time =
1425 cfg_get(psoc, CFG_PERIODIC_STATS_DISPLAY_TIME);
1426 stats->stats_link_speed_rssi_high =
1427 cfg_get(psoc, CFG_LINK_SPEED_RSSI_HIGH);
1428 stats->stats_link_speed_rssi_med =
1429 cfg_get(psoc, CFG_LINK_SPEED_RSSI_MID);
1430 stats->stats_link_speed_rssi_low =
1431 cfg_get(psoc, CFG_LINK_SPEED_RSSI_LOW);
1432 stats->stats_report_max_link_speed_rssi =
1433 cfg_get(psoc, CFG_REPORT_MAX_LINK_SPEED);
1434}
1435
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301436#ifdef WLAN_ADAPTIVE_11R
1437/**
1438 * mlme_init_adaptive_11r_cfg() - initialize enable_adaptive_11r
1439 * flag
1440 * @psoc: Pointer to PSOC
1441 * @lfr: pointer to mlme lfr config
1442 *
1443 * Return: None
1444 */
1445static void
1446mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1447 struct wlan_mlme_lfr_cfg *lfr)
1448{
1449 lfr->enable_adaptive_11r = cfg_get(psoc, CFG_ADAPTIVE_11R);
1450}
1451
1452#else
1453static inline void
1454mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1455 struct wlan_mlme_lfr_cfg *lfr)
1456{
1457}
1458#endif
1459
Wu Gao5d23d782018-11-08 16:09:47 +08001460#ifdef WLAN_FEATURE_ROAM_OFFLOAD
1461static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1462 struct wlan_mlme_lfr_cfg *lfr)
1463{
1464 lfr->lfr3_roaming_offload =
1465 cfg_get(psoc, CFG_LFR3_ROAMING_OFFLOAD);
Pragaspathi Thilagaraj14f72de2019-03-28 23:12:51 +05301466
1467 lfr->enable_disconnect_roam_offload =
1468 cfg_get(psoc, CFG_LFR_ENABLE_DISCONNECT_ROAM);
1469 lfr->enable_idle_roam =
1470 cfg_get(psoc, CFG_LFR_ENABLE_IDLE_ROAM);
1471 lfr->idle_roam_rssi_delta =
1472 cfg_get(psoc, CFG_LFR_IDLE_ROAM_RSSI_DELTA);
1473 lfr->idle_roam_inactive_time =
1474 cfg_get(psoc, CFG_LFR_IDLE_ROAM_INACTIVE_TIME);
1475 lfr->idle_data_packet_count =
1476 cfg_get(psoc, CFG_LFR_IDLE_ROAM_PACKET_COUNT);
1477 lfr->idle_roam_min_rssi = cfg_get(psoc, CFG_LFR_IDLE_ROAM_MIN_RSSI);
1478 lfr->idle_roam_band = cfg_get(psoc, CFG_LFR_IDLE_ROAM_BAND);
Wu Gao5d23d782018-11-08 16:09:47 +08001479}
1480
1481#else
1482static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1483 struct wlan_mlme_lfr_cfg *lfr)
1484{
1485}
1486
1487#endif
1488
1489#ifdef FEATURE_WLAN_ESE
1490static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1491 struct wlan_mlme_lfr_cfg *lfr)
1492{
1493 lfr->ese_enabled = cfg_get(psoc, CFG_LFR_ESE_FEATURE_ENABLED);
1494}
1495#else
1496static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1497 struct wlan_mlme_lfr_cfg *lfr)
1498{
1499}
1500#endif
1501
Wu Gao6294afc2019-01-05 00:00:58 +08001502#ifdef FEATURE_LFR_SUBNET_DETECTION
1503static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1504 struct wlan_mlme_lfr_cfg *lfr)
1505{
1506 lfr->enable_lfr_subnet_detection =
1507 cfg_get(psoc, CFG_LFR3_ENABLE_SUBNET_DETECTION);
1508}
1509#else
1510static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1511 struct wlan_mlme_lfr_cfg *lfr)
1512{
1513}
1514#endif
1515
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301516static void
1517mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc,
1518 struct bss_load_trigger *bss_load_trig)
1519{
1520 bss_load_trig->enabled =
1521 cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM);
1522 bss_load_trig->threshold = cfg_get(psoc, CFG_BSS_LOAD_THRESHOLD);
Pragaspathi Thilagaraj39d61602018-12-24 14:46:53 +05301523 bss_load_trig->sample_time = cfg_get(psoc, CFG_BSS_LOAD_SAMPLE_TIME);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301524 bss_load_trig->rssi_threshold_5ghz =
1525 cfg_get(psoc, CFG_BSS_LOAD_TRIG_5G_RSSI_THRES);
1526 bss_load_trig->rssi_threshold_24ghz =
1527 cfg_get(psoc, CFG_BSS_LOAD_TRIG_2G_RSSI_THRES);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301528}
1529
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301530static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
1531 struct wlan_mlme_lfr_cfg *lfr)
Wu Gao55f21712018-09-17 10:57:49 +08001532{
Wu Gaoe7687f42018-12-10 19:43:00 +08001533 qdf_size_t neighbor_scan_chan_list_num = 0;
Wu Gao5d23d782018-11-08 16:09:47 +08001534
Wu Gao55f21712018-09-17 10:57:49 +08001535 lfr->mawc_roam_enabled =
1536 cfg_get(psoc, CFG_LFR_MAWC_ROAM_ENABLED);
1537 lfr->enable_fast_roam_in_concurrency =
1538 cfg_get(psoc, CFG_LFR_ENABLE_FAST_ROAM_IN_CONCURRENCY);
Wu Gao55f21712018-09-17 10:57:49 +08001539 lfr->early_stop_scan_enable =
1540 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_ENABLE);
Wu Gao55f21712018-09-17 10:57:49 +08001541 lfr->enable_5g_band_pref =
1542 cfg_get(psoc, CFG_LFR_ENABLE_5G_BAND_PREF);
Wu Gao5d23d782018-11-08 16:09:47 +08001543 lfr->lfr_enabled = cfg_get(psoc, CFG_LFR_FEATURE_ENABLED);
1544 lfr->mawc_enabled = cfg_get(psoc, CFG_LFR_MAWC_FEATURE_ENABLED);
1545 lfr->fast_transition_enabled =
1546 cfg_get(psoc, CFG_LFR_FAST_TRANSITION_ENABLED);
1547 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
Wu Gao55f21712018-09-17 10:57:49 +08001548 lfr->mawc_roam_traffic_threshold =
1549 cfg_get(psoc, CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD);
1550 lfr->mawc_roam_ap_rssi_threshold =
1551 cfg_get(psoc, CFG_LFR_MAWC_ROAM_AP_RSSI_THRESHOLD);
1552 lfr->mawc_roam_rssi_high_adjust =
1553 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_HIGH_ADJUST);
1554 lfr->mawc_roam_rssi_low_adjust =
1555 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_LOW_ADJUST);
1556 lfr->roam_rssi_abs_threshold =
1557 cfg_get(psoc, CFG_LFR_ROAM_RSSI_ABS_THRESHOLD);
1558 lfr->rssi_threshold_offset_5g =
1559 cfg_get(psoc, CFG_LFR_5G_RSSI_THRESHOLD_OFFSET);
1560 lfr->early_stop_scan_min_threshold =
1561 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MIN_THRESHOLD);
1562 lfr->early_stop_scan_max_threshold =
1563 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MAX_THRESHOLD);
1564 lfr->first_scan_bucket_threshold =
1565 cfg_get(psoc, CFG_LFR_FIRST_SCAN_BUCKET_THRESHOLD);
1566 lfr->roam_dense_traffic_threshold =
1567 cfg_get(psoc, CFG_LFR_ROAM_DENSE_TRAFFIC_THRESHOLD);
1568 lfr->roam_dense_rssi_thre_offset =
1569 cfg_get(psoc, CFG_LFR_ROAM_DENSE_RSSI_THRE_OFFSET);
1570 lfr->roam_dense_min_aps =
1571 cfg_get(psoc, CFG_LFR_ROAM_DENSE_MIN_APS);
1572 lfr->roam_bg_scan_bad_rssi_threshold =
1573 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_THRESHOLD);
1574 lfr->roam_bg_scan_client_bitmap =
1575 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_CLIENT_BITMAP);
1576 lfr->roam_bg_scan_bad_rssi_offset_2g =
1577 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_OFFSET_2G);
1578 lfr->adaptive_roamscan_dwell_mode =
1579 cfg_get(psoc, CFG_LFR_ADAPTIVE_ROAMSCAN_DWELL_MODE);
1580 lfr->per_roam_enable =
1581 cfg_get(psoc, CFG_LFR_PER_ROAM_ENABLE);
1582 lfr->per_roam_config_high_rate_th =
1583 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_HIGH_RATE_TH);
1584 lfr->per_roam_config_low_rate_th =
1585 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_LOW_RATE_TH);
1586 lfr->per_roam_config_rate_th_percent =
1587 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_RATE_TH_PERCENT);
1588 lfr->per_roam_rest_time =
1589 cfg_get(psoc, CFG_LFR_PER_ROAM_REST_TIME);
1590 lfr->per_roam_monitor_time =
1591 cfg_get(psoc, CFG_LFR_PER_ROAM_MONITOR_TIME);
1592 lfr->per_roam_min_candidate_rssi =
1593 cfg_get(psoc, CFG_LFR_PER_ROAM_MIN_CANDIDATE_RSSI);
1594 lfr->lfr3_disallow_duration =
1595 cfg_get(psoc, CFG_LFR3_ROAM_DISALLOW_DURATION);
1596 lfr->lfr3_rssi_channel_penalization =
1597 cfg_get(psoc, CFG_LFR3_ROAM_RSSI_CHANNEL_PENALIZATION);
1598 lfr->lfr3_num_disallowed_aps =
1599 cfg_get(psoc, CFG_LFR3_ROAM_NUM_DISALLOWED_APS);
Wu Gaob056db62018-12-14 16:50:13 +08001600
1601 if (lfr->enable_5g_band_pref) {
1602 lfr->rssi_boost_threshold_5g =
1603 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_THRESHOLD);
1604 lfr->rssi_boost_factor_5g =
1605 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_FACTOR);
1606 lfr->max_rssi_boost_5g =
1607 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_BOOST);
1608 lfr->rssi_penalize_threshold_5g =
1609 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_THRESHOLD);
1610 lfr->rssi_penalize_factor_5g =
1611 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_FACTOR);
1612 lfr->max_rssi_penalize_5g =
1613 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_PENALIZE);
1614 }
1615
Wu Gao55f21712018-09-17 10:57:49 +08001616 lfr->max_num_pre_auth = (uint32_t)
1617 cfg_default(CFG_LFR_MAX_NUM_PRE_AUTH);
Sourav Mohapatra5ba8da32018-07-16 09:21:15 +05301618 lfr->roam_preauth_no_ack_timeout =
1619 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_NO_ACK_TIMEOUT);
1620 lfr->roam_preauth_retry_count =
1621 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_RETRY_COUNT);
Wu Gao5d23d782018-11-08 16:09:47 +08001622 lfr->roam_rssi_diff = cfg_get(psoc, CFG_LFR_ROAM_RSSI_DIFF);
1623 lfr->roam_scan_offload_enabled =
1624 cfg_get(psoc, CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
1625 lfr->neighbor_scan_timer_period =
1626 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_TIMER_PERIOD);
1627 lfr->neighbor_scan_min_timer_period =
1628 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_TIMER_PERIOD);
1629 lfr->neighbor_lookup_rssi_threshold =
1630 cfg_get(psoc, CFG_LFR_NEIGHBOR_LOOKUP_RSSI_THRESHOLD);
1631 lfr->opportunistic_scan_threshold_diff =
1632 cfg_get(psoc, CFG_LFR_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF);
1633 lfr->roam_rescan_rssi_diff =
1634 cfg_get(psoc, CFG_LFR_ROAM_RESCAN_RSSI_DIFF);
1635 lfr->neighbor_scan_min_chan_time =
1636 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_CHAN_TIME);
1637 lfr->neighbor_scan_max_chan_time =
1638 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MAX_CHAN_TIME);
1639 lfr->neighbor_scan_results_refresh_period =
1640 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD);
1641 lfr->empty_scan_refresh_period =
1642 cfg_get(psoc, CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD);
1643 lfr->roam_bmiss_first_bcnt =
1644 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FIRST_BCNT);
1645 lfr->roam_bmiss_final_bcnt =
1646 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FINAL_BCNT);
1647 lfr->roam_beacon_rssi_weight =
1648 cfg_get(psoc, CFG_LFR_ROAM_BEACON_RSSI_WEIGHT);
1649 lfr->roaming_dfs_channel =
1650 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1651 lfr->roam_scan_hi_rssi_maxcount =
1652 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_MAXCOUNT);
1653 lfr->roam_scan_hi_rssi_delta =
1654 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELTA);
1655 lfr->roam_scan_hi_rssi_delay =
1656 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELAY);
1657 lfr->roam_scan_hi_rssi_ub =
1658 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_UB);
1659 lfr->roam_prefer_5ghz =
1660 cfg_get(psoc, CFG_LFR_ROAM_PREFER_5GHZ);
1661 lfr->roam_intra_band =
1662 cfg_get(psoc, CFG_LFR_ROAM_INTRA_BAND);
1663 lfr->roam_scan_home_away_time =
1664 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HOME_AWAY_TIME);
1665 lfr->roam_scan_n_probes =
1666 cfg_get(psoc, CFG_LFR_ROAM_SCAN_N_PROBES);
1667 lfr->delay_before_vdev_stop =
1668 cfg_get(psoc, CFG_LFR_DELAY_BEFORE_VDEV_STOP);
Wu Gaoe7687f42018-12-10 19:43:00 +08001669 qdf_uint8_array_parse(cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_CHANNEL_LIST),
Wu Gao5d23d782018-11-08 16:09:47 +08001670 lfr->neighbor_scan_channel_list,
Wu Gao7f70e382019-05-31 14:23:48 +08001671 CFG_VALID_CHANNEL_LIST_LEN,
Wu Gao5d23d782018-11-08 16:09:47 +08001672 &neighbor_scan_chan_list_num);
1673 lfr->neighbor_scan_channel_list_num =
1674 (uint8_t)neighbor_scan_chan_list_num;
Wu Gao6294afc2019-01-05 00:00:58 +08001675 lfr->ho_delay_for_rx =
1676 cfg_get(psoc, CFG_LFR3_ROAM_HO_DELAY_FOR_RX);
1677 lfr->min_delay_btw_roam_scans =
1678 cfg_get(psoc, CFG_LFR_MIN_DELAY_BTW_ROAM_SCAN);
1679 lfr->roam_trigger_reason_bitmask =
1680 cfg_get(psoc, CFG_LFR_ROAM_SCAN_TRIGGER_REASON_BITMASK);
1681 lfr->enable_ftopen =
1682 cfg_get(psoc, CFG_LFR_ROAM_FT_OPEN_ENABLE);
1683 lfr->roam_force_rssi_trigger =
1684 cfg_get(psoc, CFG_LFR_ROAM_FORCE_RSSI_TRIGGER);
Abhinav Kumar990fea62019-02-14 12:38:38 +05301685 lfr->roaming_scan_policy =
1686 cfg_get(psoc, CFG_ROAM_SCAN_SCAN_POLICY);
1687
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301688 lfr->roam_scan_inactivity_time =
1689 cfg_get(psoc, CFG_ROAM_SCAN_INACTIVITY_TIME);
1690 lfr->roam_inactive_data_packet_count =
1691 cfg_get(psoc, CFG_ROAM_INACTIVE_COUNT);
1692 lfr->roam_scan_period_after_inactivity =
1693 cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
Pragaspathi Thilagarajeb367282019-02-19 00:42:28 +05301694 lfr->fw_akm_bitmap = 0;
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301695
Wu Gao5d23d782018-11-08 16:09:47 +08001696 mlme_init_roam_offload_cfg(psoc, lfr);
1697 mlme_init_ese_cfg(psoc, lfr);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301698 mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig);
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301699 mlme_init_adaptive_11r_cfg(psoc, lfr);
Wu Gao6294afc2019-01-05 00:00:58 +08001700 mlme_init_subnet_detection(psoc, lfr);
Wu Gao55f21712018-09-17 10:57:49 +08001701}
1702
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301703static uint32_t
1704mlme_limit_max_per_index_score(uint32_t per_index_score)
1705{
1706 uint8_t i, score;
1707
1708 for (i = 0; i < MAX_INDEX_PER_INI; i++) {
1709 score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i);
1710 if (score > MAX_INDEX_SCORE)
1711 WLAN_SET_SCORE_PERCENTAGE(per_index_score,
1712 MAX_INDEX_SCORE, i);
1713 }
1714
1715 return per_index_score;
1716}
1717
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301718static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
1719 struct wlan_mlme_power *power)
1720{
1721 power->tx_power_2g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT2G);
1722 power->tx_power_5g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT5G);
1723
1724 power->max_tx_power_24.max_len = CFG_MAX_TX_POWER_2_4_LEN;
1725 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_2_4),
1726 power->max_tx_power_24.data,
1727 sizeof(power->max_tx_power_24.data),
1728 &power->max_tx_power_24.len);
1729
1730 power->max_tx_power_5.max_len = CFG_MAX_TX_POWER_5_LEN;
1731 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_5),
1732 power->max_tx_power_5.data,
1733 sizeof(power->max_tx_power_5.data),
1734 &power->max_tx_power_5.len);
1735
1736 power->power_usage.max_len = CFG_POWER_USAGE_MAX_LEN;
1737 power->power_usage.len = CFG_POWER_USAGE_MAX_LEN;
1738 qdf_mem_copy(power->power_usage.data, cfg_get(psoc, CFG_POWER_USAGE),
1739 power->power_usage.len);
Wu Gao2255ea22019-01-04 15:44:35 +08001740 power->max_tx_power = cfg_get(psoc, CFG_MAX_TX_POWER);
1741 power->current_tx_power_level =
1742 (uint8_t)cfg_default(CFG_CURRENT_TX_POWER_LEVEL);
1743 power->local_power_constraint =
1744 (uint8_t)cfg_default(CFG_LOCAL_POWER_CONSTRAINT);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301745}
Wu Gao2255ea22019-01-04 15:44:35 +08001746
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301747static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
1748 struct wlan_mlme_scoring_cfg *scoring_cfg)
1749{
1750 uint32_t total_weight;
1751
1752 scoring_cfg->enable_scoring_for_roam =
1753 cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM);
1754 scoring_cfg->weight_cfg.rssi_weightage =
1755 cfg_get(psoc, CFG_SCORING_RSSI_WEIGHTAGE);
1756 scoring_cfg->weight_cfg.ht_caps_weightage =
1757 cfg_get(psoc, CFG_SCORING_HT_CAPS_WEIGHTAGE);
1758 scoring_cfg->weight_cfg.vht_caps_weightage =
1759 cfg_get(psoc, CFG_SCORING_VHT_CAPS_WEIGHTAGE);
1760 scoring_cfg->weight_cfg.he_caps_weightage =
1761 cfg_get(psoc, CFG_SCORING_HE_CAPS_WEIGHTAGE);
1762 scoring_cfg->weight_cfg.chan_width_weightage =
1763 cfg_get(psoc, CFG_SCORING_CHAN_WIDTH_WEIGHTAGE);
1764 scoring_cfg->weight_cfg.chan_band_weightage =
1765 cfg_get(psoc, CFG_SCORING_CHAN_BAND_WEIGHTAGE);
1766 scoring_cfg->weight_cfg.nss_weightage =
1767 cfg_get(psoc, CFG_SCORING_NSS_WEIGHTAGE);
1768 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1769 cfg_get(psoc, CFG_SCORING_BEAMFORM_CAP_WEIGHTAGE);
1770 scoring_cfg->weight_cfg.pcl_weightage =
1771 cfg_get(psoc, CFG_SCORING_PCL_WEIGHTAGE);
1772 scoring_cfg->weight_cfg.channel_congestion_weightage =
1773 cfg_get(psoc, CFG_SCORING_CHAN_CONGESTION_WEIGHTAGE);
1774 scoring_cfg->weight_cfg.oce_wan_weightage =
1775 cfg_get(psoc, CFG_SCORING_OCE_WAN_WEIGHTAGE);
1776
1777 total_weight = scoring_cfg->enable_scoring_for_roam +
1778 scoring_cfg->weight_cfg.rssi_weightage +
1779 scoring_cfg->weight_cfg.ht_caps_weightage +
1780 scoring_cfg->weight_cfg.vht_caps_weightage +
1781 scoring_cfg->weight_cfg.he_caps_weightage +
1782 scoring_cfg->weight_cfg.chan_width_weightage +
1783 scoring_cfg->weight_cfg.chan_band_weightage +
1784 scoring_cfg->weight_cfg.nss_weightage +
1785 scoring_cfg->weight_cfg.beamforming_cap_weightage +
1786 scoring_cfg->weight_cfg.pcl_weightage +
1787 scoring_cfg->weight_cfg.channel_congestion_weightage +
1788 scoring_cfg->weight_cfg.oce_wan_weightage;
1789
1790 /*
1791 * If configured weights are greater than max weight,
1792 * fallback to default weights
1793 */
1794 if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301795 mlme_legacy_err("Total weight greater than %d, using default weights",
1796 BEST_CANDIDATE_MAX_WEIGHT);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301797 scoring_cfg->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE;
1798 scoring_cfg->weight_cfg.ht_caps_weightage =
1799 HT_CAPABILITY_WEIGHTAGE;
1800 scoring_cfg->weight_cfg.vht_caps_weightage =
1801 VHT_CAP_WEIGHTAGE;
1802 scoring_cfg->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE;
1803 scoring_cfg->weight_cfg.chan_width_weightage =
1804 CHAN_WIDTH_WEIGHTAGE;
1805 scoring_cfg->weight_cfg.chan_band_weightage =
1806 CHAN_BAND_WEIGHTAGE;
1807 scoring_cfg->weight_cfg.nss_weightage = NSS_WEIGHTAGE;
1808 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1809 BEAMFORMING_CAP_WEIGHTAGE;
1810 scoring_cfg->weight_cfg.pcl_weightage = PCL_WEIGHT;
1811 scoring_cfg->weight_cfg.channel_congestion_weightage =
1812 CHANNEL_CONGESTION_WEIGHTAGE;
1813 scoring_cfg->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE;
1814 }
1815
1816 scoring_cfg->rssi_score.best_rssi_threshold =
1817 cfg_get(psoc, CFG_SCORING_BEST_RSSI_THRESHOLD);
1818 scoring_cfg->rssi_score.good_rssi_threshold =
1819 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_THRESHOLD);
1820 scoring_cfg->rssi_score.bad_rssi_threshold =
1821 cfg_get(psoc, CFG_SCORING_BAD_RSSI_THRESHOLD);
1822
1823 scoring_cfg->rssi_score.good_rssi_pcnt =
1824 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_PERCENT);
1825 scoring_cfg->rssi_score.bad_rssi_pcnt =
1826 cfg_get(psoc, CFG_SCORING_BAD_RSSI_PERCENT);
1827
1828 scoring_cfg->rssi_score.good_rssi_bucket_size =
1829 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_BUCKET_SIZE);
1830 scoring_cfg->rssi_score.bad_rssi_bucket_size =
1831 cfg_get(psoc, CFG_SCORING_BAD_RSSI_BUCKET_SIZE);
1832
1833 scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh =
1834 cfg_get(psoc, CFG_SCORING_RSSI_PREF_5G_THRESHOLD);
1835
1836 scoring_cfg->bandwidth_weight_per_index =
1837 mlme_limit_max_per_index_score(
1838 cfg_get(psoc, CFG_SCORING_BW_WEIGHT_PER_IDX));
1839 scoring_cfg->nss_weight_per_index =
1840 mlme_limit_max_per_index_score(
1841 cfg_get(psoc, CFG_SCORING_NSS_WEIGHT_PER_IDX));
1842 scoring_cfg->band_weight_per_index =
1843 mlme_limit_max_per_index_score(
1844 cfg_get(psoc, CFG_SCORING_BAND_WEIGHT_PER_IDX));
1845
1846 scoring_cfg->esp_qbss_scoring.num_slot =
1847 cfg_get(psoc, CFG_SCORING_NUM_ESP_QBSS_SLOTS);
1848 scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0 =
1849 mlme_limit_max_per_index_score(
1850 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_3_TO_0));
1851 scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4 =
1852 mlme_limit_max_per_index_score(
1853 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_7_TO_4));
1854 scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8 =
1855 mlme_limit_max_per_index_score(
1856 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_11_TO_8));
1857 scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12 =
1858 mlme_limit_max_per_index_score(
1859 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_15_TO_12));
1860
1861 scoring_cfg->oce_wan_scoring.num_slot =
1862 cfg_get(psoc, CFG_SCORING_NUM_OCE_WAN_SLOTS);
1863 scoring_cfg->oce_wan_scoring.score_pcnt3_to_0 =
1864 mlme_limit_max_per_index_score(
1865 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_3_TO_0));
1866 scoring_cfg->oce_wan_scoring.score_pcnt7_to_4 =
1867 mlme_limit_max_per_index_score(
1868 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4));
1869 scoring_cfg->oce_wan_scoring.score_pcnt11_to_8 =
1870 mlme_limit_max_per_index_score(
1871 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8));
1872 scoring_cfg->oce_wan_scoring.score_pcnt15_to_12 =
1873 mlme_limit_max_per_index_score(
1874 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12));
Pragaspathi Thilagarajdf0f5442018-12-11 16:59:46 +05301875 scoring_cfg->roam_trigger_bitmap =
1876 cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP);
1877 scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA);
Wu Gao2255ea22019-01-04 15:44:35 +08001878 scoring_cfg->apsd_enabled = (bool)cfg_default(CFG_APSD_ENABLED);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301879}
1880
Karthik Kantamneni2231a232018-09-11 15:45:55 +05301881static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc,
1882 struct wlan_mlme_oce *oce)
1883{
1884 uint8_t val;
1885 bool rssi_assoc_reject_enabled;
1886 bool probe_req_rate_enabled;
1887 bool probe_resp_rate_enabled;
1888 bool beacon_rate_enabled;
1889 bool probe_req_deferral_enabled;
1890 bool fils_discovery_sap_enabled;
1891 bool esp_for_roam_enabled;
1892
1893 oce->enable_bcast_probe_rsp =
1894 cfg_get(psoc, CFG_ENABLE_BCAST_PROBE_RESP);
1895 oce->oce_sta_enabled = cfg_get(psoc, CFG_OCE_ENABLE_STA);
1896 oce->oce_sap_enabled = cfg_get(psoc, CFG_OCE_ENABLE_SAP);
1897 oce->fils_enabled = cfg_get(psoc, CFG_IS_FILS_ENABLED);
1898
1899 rssi_assoc_reject_enabled =
1900 cfg_get(psoc, CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT);
1901 probe_req_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_REQ_RATE);
1902 probe_resp_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_RSP_RATE);
1903 beacon_rate_enabled = cfg_get(psoc, CFG_OCE_BEACON_RATE);
1904 probe_req_deferral_enabled =
1905 cfg_get(psoc, CFG_ENABLE_PROBE_REQ_DEFERRAL);
1906 fils_discovery_sap_enabled =
1907 cfg_get(psoc, CFG_ENABLE_FILS_DISCOVERY_SAP);
1908 esp_for_roam_enabled = cfg_get(psoc, CFG_ENABLE_ESP_FEATURE);
1909
1910 if (!rssi_assoc_reject_enabled ||
1911 !oce->enable_bcast_probe_rsp) {
1912 oce->oce_sta_enabled = 0;
1913 }
1914
1915 val = (probe_req_rate_enabled *
1916 WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) +
1917 (probe_resp_rate_enabled *
1918 WMI_VDEV_OCE_PROBE_RESPONSE_RATE_FEATURE_BITMAP) +
1919 (beacon_rate_enabled *
1920 WMI_VDEV_OCE_BEACON_RATE_FEATURE_BITMAP) +
1921 (probe_req_deferral_enabled *
1922 WMI_VDEV_OCE_PROBE_REQUEST_DEFERRAL_FEATURE_BITMAP) +
1923 (fils_discovery_sap_enabled *
1924 WMI_VDEV_OCE_FILS_DISCOVERY_FRAME_FEATURE_BITMAP) +
1925 (esp_for_roam_enabled *
1926 WMI_VDEV_OCE_ESP_FEATURE_BITMAP) +
1927 (rssi_assoc_reject_enabled *
1928 WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP);
1929 oce->feature_bitmap = val;
1930}
1931
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301932static void mlme_init_nss_chains(struct wlan_objmgr_psoc *psoc,
1933 struct wlan_mlme_nss_chains *nss_chains)
1934{
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301935 nss_chains->num_rx_chains[NSS_CHAINS_BAND_2GHZ] =
1936 cfg_get(psoc, CFG_NUM_RX_CHAINS_2G);
1937 nss_chains->num_rx_chains[NSS_CHAINS_BAND_5GHZ] =
1938 cfg_get(psoc, CFG_NUM_RX_CHAINS_5G);
1939 nss_chains->num_tx_chains[NSS_CHAINS_BAND_2GHZ] =
1940 cfg_get(psoc, CFG_NUM_TX_CHAINS_2G);
1941 nss_chains->num_tx_chains[NSS_CHAINS_BAND_5GHZ] =
1942 cfg_get(psoc, CFG_NUM_TX_CHAINS_5G);
1943
1944 nss_chains->tx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_TX_NSS_2G);
1945 nss_chains->tx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_TX_NSS_5G);
1946 nss_chains->rx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_RX_NSS_2G);
1947 nss_chains->rx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_RX_NSS_5G);
1948
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301949 nss_chains->num_tx_chains_11b = cfg_get(psoc, CFG_NUM_TX_CHAINS_11b);
1950 nss_chains->num_tx_chains_11g = cfg_get(psoc, CFG_NUM_TX_CHAINS_11g);
1951 nss_chains->num_tx_chains_11a = cfg_get(psoc, CFG_NUM_TX_CHAINS_11a);
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301952
1953 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_2GHZ] =
1954 cfg_get(psoc, CFG_DISABLE_RX_MRC_2G);
1955 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_5GHZ] =
1956 cfg_get(psoc, CFG_DISABLE_RX_MRC_5G);
1957 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_2GHZ] =
1958 cfg_get(psoc, CFG_DISABLE_TX_MRC_2G);
1959 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_5GHZ] =
1960 cfg_get(psoc, CFG_DISABLE_TX_MRC_5G);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301961}
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301962static void mlme_init_wep_keys(struct wlan_mlme_wep_cfg *wep_params)
1963{
1964 /* initialize the default key values to zero */
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001965 wep_params->wep_default_key_1.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1966 wep_params->wep_default_key_1.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1967 qdf_mem_zero(wep_params->wep_default_key_1.data,
1968 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301969
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001970 wep_params->wep_default_key_2.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1971 wep_params->wep_default_key_2.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1972 qdf_mem_zero(wep_params->wep_default_key_2.data,
1973 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301974
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001975 wep_params->wep_default_key_3.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1976 wep_params->wep_default_key_3.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1977 qdf_mem_zero(wep_params->wep_default_key_3.data,
1978 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301979
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001980 wep_params->wep_default_key_4.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1981 wep_params->wep_default_key_4.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1982 qdf_mem_zero(wep_params->wep_default_key_4.data,
1983 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301984}
1985
1986static void mlme_init_wep_cfg(struct wlan_mlme_wep_cfg *wep_params)
1987{
1988 wep_params->is_privacy_enabled = cfg_default(CFG_PRIVACY_ENABLED);
1989 wep_params->auth_type = cfg_default(CFG_AUTHENTICATION_TYPE);
1990 wep_params->is_shared_key_auth =
1991 cfg_default(CFG_SHARED_KEY_AUTH_ENABLE);
1992 wep_params->is_auth_open_system =
1993 cfg_default(CFG_OPEN_SYSTEM_AUTH_ENABLE);
1994
1995 wep_params->wep_default_key_id = cfg_default(CFG_WEP_DEFAULT_KEYID);
1996 mlme_init_wep_keys(wep_params);
1997}
1998
Arif Hussainbd5194c2018-11-27 19:01:15 -08001999static void mlme_init_wifi_pos_cfg(struct wlan_objmgr_psoc *psoc,
2000 struct wlan_mlme_wifi_pos_cfg *wifi_pos_cfg)
2001{
2002 wifi_pos_cfg->fine_time_meas_cap =
2003 cfg_get(psoc, CFG_FINE_TIME_MEAS_CAPABILITY);
2004}
2005
Abhinav Kumarab576712018-11-05 14:32:49 +05302006#ifdef FEATURE_WLAN_ESE
2007static void mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2008 struct wlan_mlme_wmm_params *wmm_params)
2009{
2010 wmm_params->wmm_tspec_element.inactivity_intv =
2011 cfg_get(psoc, CFG_QOS_WMM_INACTIVITY_INTERVAL);
2012}
2013#else
2014static inline void
2015mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2016 struct wlan_mlme_wmm_params *wmm_params)
2017{
2018}
2019#endif /* FEATURE_WLAN_ESE */
2020
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302021static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc,
2022 struct wlan_mlme_wmm_params *wmm_params)
2023{
2024 wmm_params->qos_enabled = cfg_default(CFG_QOS_ENABLED);
2025 wmm_params->wme_enabled = cfg_default(CFG_WME_ENABLED);
2026 wmm_params->max_sp_length = cfg_default(CFG_MAX_SP_LENGTH);
2027 wmm_params->wsm_enabled = cfg_default(CFG_WSM_ENABLED);
2028 wmm_params->edca_profile = cfg_default(CFG_EDCA_PROFILE);
Abhinav Kumar18b45cd2018-09-21 12:35:22 +05302029
2030 wmm_params->ac_vo.dir_ac_vo = cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VO);
2031 wmm_params->ac_vo.nom_msdu_size_ac_vo =
2032 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO);
2033 wmm_params->ac_vo.mean_data_rate_ac_vo =
2034 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO);
2035 wmm_params->ac_vo.min_phy_rate_ac_vo =
2036 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VO);
2037 wmm_params->ac_vo.sba_ac_vo = cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VO);
2038 wmm_params->ac_vo.uapsd_vo_srv_intv =
2039 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV);
2040 wmm_params->ac_vo.uapsd_vo_sus_intv =
2041 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV);
Abhinav Kumar4c8e0262018-10-06 16:50:27 +05302042
2043 wmm_params->ac_vi.dir_ac_vi =
2044 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VI);
2045 wmm_params->ac_vi.nom_msdu_size_ac_vi =
2046 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI);
2047 wmm_params->ac_vi.mean_data_rate_ac_vi =
2048 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI);
2049 wmm_params->ac_vi.min_phy_rate_ac_vi =
2050 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VI);
2051 wmm_params->ac_vi.sba_ac_vi =
2052 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VI);
2053 wmm_params->ac_vi.uapsd_vi_srv_intv =
2054 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SRV_INTV);
2055 wmm_params->ac_vi.uapsd_vi_sus_intv =
2056 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV);
2057
Abhinav Kumare94f2482018-08-19 12:37:36 +05302058 wmm_params->ac_be.dir_ac_be =
2059 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BE);
2060 wmm_params->ac_be.nom_msdu_size_ac_be =
2061 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE);
2062 wmm_params->ac_be.mean_data_rate_ac_be =
2063 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE);
2064 wmm_params->ac_be.min_phy_rate_ac_be =
2065 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BE);
2066 wmm_params->ac_be.sba_ac_be =
2067 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BE);
2068 wmm_params->ac_be.uapsd_be_srv_intv =
2069 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SRV_INTV);
2070 wmm_params->ac_be.uapsd_be_sus_intv =
2071 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SUS_INTV);
Abhinav Kumar2af8c122018-08-19 13:49:52 +05302072
2073 wmm_params->ac_bk.dir_ac_bk =
2074 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BK);
2075 wmm_params->ac_bk.nom_msdu_size_ac_bk =
2076 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK);
2077 wmm_params->ac_bk.mean_data_rate_ac_bk =
2078 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK);
2079 wmm_params->ac_bk.min_phy_rate_ac_bk =
2080 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BK);
2081 wmm_params->ac_bk.sba_ac_bk =
2082 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BK);
2083 wmm_params->ac_bk.uapsd_bk_srv_intv =
2084 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SRV_INTV);
2085 wmm_params->ac_bk.uapsd_bk_sus_intv =
2086 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SUS_INTV);
Abhinav Kumar7d6f1ac2018-09-01 18:33:56 +05302087
2088 wmm_params->wmm_config.wmm_mode =
2089 cfg_get(psoc, CFG_QOS_WMM_MODE);
2090 wmm_params->wmm_config.b80211e_is_enabled =
2091 cfg_get(psoc, CFG_QOS_WMM_80211E_ENABLED);
2092 wmm_params->wmm_config.uapsd_mask =
2093 cfg_get(psoc, CFG_QOS_WMM_UAPSD_MASK);
2094 wmm_params->wmm_config.bimplicit_qos_enabled =
2095 cfg_get(psoc, CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED);
Abhinav Kumarab576712018-11-05 14:32:49 +05302096
2097 mlme_init_inactivity_intv(psoc, wmm_params);
2098 wmm_params->wmm_tspec_element.burst_size_def =
2099 cfg_get(psoc, CFG_QOS_WMM_BURST_SIZE_DEFN);
2100 wmm_params->wmm_tspec_element.ts_ack_policy =
2101 cfg_get(psoc, CFG_QOS_WMM_TS_INFO_ACK_POLICY);
2102 wmm_params->wmm_tspec_element.ts_acm_is_off =
2103 cfg_get(psoc, CFG_QOS_ADDTS_WHEN_ACM_IS_OFF);
Abhinav Kumarc8c21502018-12-05 15:17:39 +05302104 wmm_params->delayed_trigger_frm_int =
2105 cfg_get(psoc, CFG_TL_DELAYED_TRGR_FRM_INTERVAL);
2106
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302107}
2108
gaurank kathpalia837f6202018-09-14 21:55:32 +05302109static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc,
2110 struct wlan_mlme_wps_params *wps_params)
2111{
2112 wps_params->enable_wps = cfg_default(CFG_WPS_ENABLE);
2113 wps_params->wps_cfg_method = cfg_default(CFG_WPS_CFG_METHOD);
2114 wps_params->wps_device_password_id =
2115 cfg_default(CFG_WPS_DEVICE_PASSWORD_ID);
2116 wps_params->wps_device_sub_category =
2117 cfg_default(CFG_WPS_DEVICE_SUB_CATEGORY);
2118 wps_params->wps_primary_device_category =
2119 cfg_default(CFG_WPS_PRIMARY_DEVICE_CATEGORY);
2120 wps_params->wps_primary_device_oui =
2121 cfg_default(CFG_WPS_PIMARY_DEVICE_OUI);
2122 wps_params->wps_state = cfg_default(CFG_WPS_STATE);
2123 wps_params->wps_version = cfg_default(CFG_WPS_VERSION);
Pragaspathi Thilagaraj2b9259f2018-12-05 22:29:03 +05302124 wps_params->wps_uuid.max_len = MLME_CFG_WPS_UUID_MAX_LEN;
2125 qdf_uint8_array_parse(cfg_default(CFG_WPS_UUID),
2126 wps_params->wps_uuid.data,
2127 MLME_CFG_WPS_UUID_MAX_LEN,
2128 &wps_params->wps_uuid.len);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302129}
2130
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302131static void mlme_init_btm_cfg(struct wlan_objmgr_psoc *psoc,
2132 struct wlan_mlme_btm *btm)
lifeng6d19c252018-11-23 18:04:23 +08002133{
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302134 btm->btm_offload_config = cfg_get(psoc, CFG_BTM_ENABLE);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302135 btm->prefer_btm_query = cfg_get(psoc, CFG_PREFER_BTM_QUERY);
2136 if (btm->prefer_btm_query)
2137 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_8);
2138
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302139 btm->abridge_flag = cfg_get(psoc, CFG_ENABLE_BTM_ABRIDGE);
2140 if (btm->abridge_flag)
2141 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_7);
2142
Pragaspathi Thilagarajed781902019-05-30 12:17:49 +05302143 btm->btm_solicited_timeout = cfg_get(psoc, CFG_BTM_SOLICITED_TIMEOUT);
2144 btm->btm_max_attempt_cnt = cfg_get(psoc, CFG_BTM_MAX_ATTEMPT_CNT);
2145 btm->btm_sticky_time = cfg_get(psoc, CFG_BTM_STICKY_TIME);
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302146 btm->rct_validity_timer = cfg_get(psoc, CFG_BTM_VALIDITY_TIMER);
2147 btm->disassoc_timer_threshold =
2148 cfg_get(psoc, CFG_BTM_DISASSOC_TIMER_THRESHOLD);
Abhinav Kumar43565942019-03-02 01:34:12 +05302149 btm->btm_query_bitmask = cfg_get(psoc, CFG_BTM_QUERY_BITMASK);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302150 btm->btm_trig_min_candidate_score =
2151 cfg_get(psoc, CFG_MIN_BTM_CANDIDATE_SCORE);
2152}
Abhinav Kumar43565942019-03-02 01:34:12 +05302153
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302154static void
2155mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
2156 struct wlan_mlme_cfg *mlme_cfg)
2157{
2158 struct roam_trigger_score_delta *score_delta_param;
2159 struct roam_trigger_min_rssi *min_rssi_param;
2160
2161 score_delta_param = &mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
2162 score_delta_param->roam_score_delta =
2163 cfg_get(psoc, CFG_IDLE_ROAM_SCORE_DELTA);
2164 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_IDLE;
2165
2166 score_delta_param = &mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
2167 score_delta_param->roam_score_delta =
2168 cfg_get(psoc, CFG_BTM_ROAM_SCORE_DELTA);
2169 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_BTM;
2170
2171 min_rssi_param = &mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
2172 min_rssi_param->min_rssi =
2173 cfg_get(psoc, CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI);
2174 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_DEAUTH;
2175
2176 min_rssi_param = &mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
2177 min_rssi_param->min_rssi =
2178 cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
2179 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
lifeng6d19c252018-11-23 18:04:23 +08002180}
2181
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302182/**
2183 * mlme_init_fe_wlm_in_cfg() - Populate WLM INI in MLME cfg
2184 * @psoc: pointer to the psoc object
2185 * @wlm_config: pointer to the MLME WLM cfg
2186 *
2187 * Return: None
2188 */
2189static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
2190 struct wlan_mlme_fe_wlm *wlm_config)
2191{
2192 wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
2193 wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
2194 wlm_config->latency_flags[0] = cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL);
2195 wlm_config->latency_flags[1] = cfg_get(psoc, CFG_LATENCY_FLAGS_MOD);
2196 wlm_config->latency_flags[2] = cfg_get(psoc, CFG_LATENCY_FLAGS_LOW);
2197 wlm_config->latency_flags[3] = cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW);
2198}
2199
2200/**
2201 * mlme_init_fe_rrm_in_cfg() - Populate RRM INI in MLME cfg
2202 * @psoc: pointer to the psoc object
2203 * @rrm_config: pointer to the MLME RRM cfg
2204 *
2205 * Return: None
2206 */
2207static void mlme_init_fe_rrm_in_cfg(struct wlan_objmgr_psoc *psoc,
2208 struct wlan_mlme_fe_rrm *rrm_config)
2209{
2210 qdf_size_t len;
2211
2212 rrm_config->rrm_enabled = cfg_get(psoc, CFG_RRM_ENABLE);
2213 rrm_config->rrm_rand_interval = cfg_get(psoc, CFG_RRM_MEAS_RAND_INTVL);
2214
2215 qdf_uint8_array_parse(cfg_get(psoc, CFG_RM_CAPABILITY),
2216 rrm_config->rm_capability,
2217 sizeof(rrm_config->rm_capability), &len);
2218
2219 if (len < MLME_RMENABLEDCAP_MAX_LEN) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302220 mlme_legacy_debug("Incorrect RM capability, using default");
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302221 qdf_uint8_array_parse(cfg_default(CFG_RM_CAPABILITY),
2222 rrm_config->rm_capability,
2223 sizeof(rrm_config->rm_capability), &len);
2224 }
2225}
2226
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302227static void mlme_init_powersave_params(struct wlan_objmgr_psoc *psoc,
2228 struct wlan_mlme_powersave *ps_cfg)
2229{
2230 ps_cfg->is_imps_enabled = cfg_get(psoc, CFG_ENABLE_IMPS);
2231 ps_cfg->is_bmps_enabled = cfg_get(psoc, CFG_ENABLE_PS);
2232 ps_cfg->auto_bmps_timer_val = cfg_get(psoc, CFG_AUTO_BMPS_ENABLE_TIMER);
2233 ps_cfg->bmps_min_listen_interval = cfg_get(psoc, CFG_BMPS_MINIMUM_LI);
2234 ps_cfg->bmps_max_listen_interval = cfg_get(psoc, CFG_BMPS_MAXIMUM_LI);
2235 ps_cfg->dtim_selection_diversity =
2236 cfg_get(psoc, CFG_DTIM_SELECTION_DIVERSITY);
2237}
2238
lifengdb340e72018-11-20 00:50:20 +08002239#ifdef MWS_COEX
2240static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2241 struct wlan_mlme_mwc *mwc)
2242{
2243 mwc->mws_coex_4g_quick_tdm =
2244 cfg_get(psoc, CFG_MWS_COEX_4G_QUICK_FTDM);
2245 mwc->mws_coex_5g_nr_pwr_limit =
2246 cfg_get(psoc, CFG_MWS_COEX_5G_NR_PWR_LIMIT);
2247}
2248#else
2249static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2250 struct wlan_mlme_mwc *mwc)
2251{
2252}
2253#endif
2254
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302255#ifdef SAP_AVOID_ACS_FREQ_LIST
2256static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2257 struct wlan_mlme_reg *reg)
2258{
2259 qdf_size_t avoid_acs_freq_list_num = 0;
2260 uint8_t i;
2261
2262 qdf_uint16_array_parse(cfg_get(psoc, CFG_SAP_AVOID_ACS_FREQ_LIST),
2263 reg->avoid_acs_freq_list,
2264 CFG_VALID_CHANNEL_LIST_LEN,
2265 &avoid_acs_freq_list_num);
2266 reg->avoid_acs_freq_list_num = avoid_acs_freq_list_num;
2267
2268 for (i = 0; i < avoid_acs_freq_list_num; i++)
2269 mlme_legacy_debug("avoid_acs_freq %d",
2270 reg->avoid_acs_freq_list[i]);
2271}
2272#else
2273static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2274 struct wlan_mlme_reg *reg)
2275{
2276}
2277#endif
2278
lifeng0b46ae52018-12-13 09:42:27 +08002279static void mlme_init_reg_cfg(struct wlan_objmgr_psoc *psoc,
2280 struct wlan_mlme_reg *reg)
2281{
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002282 qdf_size_t valid_channel_list_num = 0;
2283
lifeng0b46ae52018-12-13 09:42:27 +08002284 reg->self_gen_frm_pwr = cfg_get(psoc, CFG_SELF_GEN_FRM_PWR);
2285 reg->etsi13_srd_chan_in_master_mode =
2286 cfg_get(psoc, CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE);
2287 reg->restart_beaconing_on_ch_avoid =
2288 cfg_get(psoc, CFG_RESTART_BEACONING_ON_CH_AVOID);
2289 reg->indoor_channel_support = cfg_get(psoc, CFG_INDOOR_CHANNEL_SUPPORT);
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05302290 reg->enable_11d_in_world_mode = cfg_get(psoc,
2291 CFG_ENABLE_11D_IN_WORLD_MODE);
lifeng0b46ae52018-12-13 09:42:27 +08002292 reg->scan_11d_interval = cfg_get(psoc, CFG_SCAN_11D_INTERVAL);
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002293 qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST),
2294 reg->valid_channel_list,
2295 CFG_VALID_CHANNEL_LIST_LEN,
2296 &valid_channel_list_num);
2297 reg->valid_channel_list_num = (uint8_t)valid_channel_list_num;
2298 qdf_str_lcopy(reg->country_code, cfg_default(CFG_COUNTRY_CODE),
2299 sizeof(reg->country_code));
2300 reg->country_code_len = (uint8_t)sizeof(reg->country_code);
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302301 mlme_init_acs_avoid_freq_list(psoc, reg);
lifeng0b46ae52018-12-13 09:42:27 +08002302}
2303
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302304static void
2305mlme_init_dot11_mode_cfg(struct wlan_mlme_dot11_mode *dot11_mode)
2306{
2307 dot11_mode->dot11_mode = cfg_default(CFG_DOT11_MODE);
2308}
2309
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302310QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
2311{
2312 struct wlan_mlme_psoc_obj *mlme_obj;
2313 struct wlan_mlme_cfg *mlme_cfg;
2314 QDF_STATUS status = QDF_STATUS_SUCCESS;
2315
2316 mlme_obj = mlme_get_psoc_obj(psoc);
2317 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302318 mlme_legacy_err("Failed to get MLME Obj");
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302319 return QDF_STATUS_E_FAILURE;
2320 }
2321
2322 mlme_cfg = &mlme_obj->cfg;
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +05302323 mlme_init_generic_cfg(psoc, &mlme_cfg->gen);
Arif Hussain9f93a642018-09-10 18:32:25 -07002324 mlme_init_timeout_cfg(psoc, &mlme_cfg->timeouts);
Abhinav Kumar06b9a122018-10-10 15:01:11 +05302325 mlme_init_edca_params(psoc, &mlme_cfg->edca_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302326 mlme_init_ht_cap_in_cfg(psoc, &mlme_cfg->ht_caps);
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302327 mlme_init_wmm_in_cfg(psoc, &mlme_cfg->wmm_params);
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +05302328 mlme_init_mbo_cfg(psoc, &mlme_cfg->mbo_cfg);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +05302329 mlme_init_qos_cfg(psoc, &mlme_cfg->qos_mlme_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302330 mlme_init_rates_in_cfg(psoc, &mlme_cfg->rates);
Arif Hussain88d1fdd2018-09-26 16:12:24 -07002331 mlme_init_dfs_cfg(psoc, &mlme_cfg->dfs_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302332 mlme_init_sap_protection_cfg(psoc, &mlme_cfg->sap_protection_cfg);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +05302333 mlme_init_vht_cap_cfg(psoc, &mlme_cfg->vht_caps.vht_cap_info);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +05302334 mlme_init_chainmask_cfg(psoc, &mlme_cfg->chainmask_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302335 mlme_init_sap_cfg(psoc, &mlme_cfg->sap_cfg);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05302336 mlme_init_nss_chains(psoc, &mlme_cfg->nss_chains_ini_cfg);
Bala Venkatesh6d537092018-09-25 10:38:36 +05302337 mlme_init_he_cap_in_cfg(psoc, mlme_cfg);
Wu Gaod8f3db02018-07-24 19:18:45 +08002338 mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40);
Jiachao Wu3304d6b2018-08-24 18:24:34 +08002339 mlme_init_product_details_cfg(&mlme_cfg->product_details);
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302340 mlme_init_powersave_params(psoc, &mlme_cfg->ps_params);
Wu Gao406c53c2018-09-10 13:51:37 +08002341 mlme_init_sta_cfg(psoc, &mlme_cfg->sta);
Arif Hussaincca60432018-12-03 19:45:12 -08002342 mlme_init_stats_cfg(psoc, &mlme_cfg->stats);
Arif Hussain178f35f2018-11-13 18:26:18 -08002343 mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302344 mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr);
Manikandan Mohan2bd09772018-11-28 18:27:32 -08002345 mlme_init_ibss_cfg(psoc, &mlme_cfg->ibss);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +05302346 mlme_init_feature_flag_in_cfg(psoc, &mlme_cfg->feature_flags);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05302347 mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring);
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302348 mlme_init_dot11_mode_cfg(&mlme_cfg->dot11_mode);
Harprit Chhabadabec6de42018-09-10 10:21:15 -07002349 mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
Harprit Chhabadabd027a02018-10-30 13:02:22 -07002350 mlme_init_acs_cfg(psoc, &mlme_cfg->acs);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05302351 mlme_init_power_cfg(psoc, &mlme_cfg->power);
Karthik Kantamneni2231a232018-09-11 15:45:55 +05302352 mlme_init_oce_cfg(psoc, &mlme_cfg->oce);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302353 mlme_init_wep_cfg(&mlme_cfg->wep_params);
Arif Hussainbd5194c2018-11-27 19:01:15 -08002354 mlme_init_wifi_pos_cfg(psoc, &mlme_cfg->wifi_pos_cfg);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302355 mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302356 mlme_init_fe_wlm_in_cfg(psoc, &mlme_cfg->wlm_config);
2357 mlme_init_fe_rrm_in_cfg(psoc, &mlme_cfg->rrm_config);
lifengdb340e72018-11-20 00:50:20 +08002358 mlme_init_mwc_cfg(psoc, &mlme_cfg->mwc);
lifeng0b46ae52018-12-13 09:42:27 +08002359 mlme_init_reg_cfg(psoc, &mlme_cfg->reg);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302360 mlme_init_btm_cfg(psoc, &mlme_cfg->btm);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302361 mlme_init_roam_score_config(psoc, mlme_cfg);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302362
2363 return status;
2364}