blob: c86244bbadb8f7e24f9418ed6a01114e66918d3e [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"
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +053027#include "wlan_psoc_mlme_api.h"
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053028#include "wlan_vdev_mlme_api.h"
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +053029#include "wlan_mlme_api.h"
Abhishek Singhf880a7d2019-04-29 14:51:11 +053030#include <wlan_crypto_global_api.h>
Sandeep Puligillac5609d52018-05-17 19:23:41 -070031
Abhinav Kumarb074f2f2018-09-15 15:32:11 +053032#define NUM_OF_SOUNDING_DIMENSIONS 1 /*Nss - 1, (Nss = 2 for 2x2)*/
33
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +053034struct wlan_mlme_psoc_ext_obj *mlme_get_psoc_ext_obj_fl(
35 struct wlan_objmgr_psoc *psoc,
36 const char *func, uint32_t line)
Sandeep Puligillac5609d52018-05-17 19:23:41 -070037{
Sandeep Puligillac5609d52018-05-17 19:23:41 -070038
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +053039 return wlan_psoc_mlme_get_ext_hdl(psoc);
Sandeep Puligillac5609d52018-05-17 19:23:41 -070040}
41
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053042struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config(
43 struct wlan_objmgr_vdev *vdev)
44{
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053045 struct mlme_legacy_priv *mlme_priv;
46
hqu7f10f552019-07-09 22:12:44 +080047 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
48 if (!mlme_priv) {
49 mlme_legacy_err("vdev legacy private object is NULL");
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053050 return NULL;
51 }
52
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053053 return &mlme_priv->dynamic_cfg;
54}
55
56struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config(
57 struct wlan_objmgr_vdev *vdev)
58{
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053059 struct mlme_legacy_priv *mlme_priv;
60
hqu7f10f552019-07-09 22:12:44 +080061 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
62 if (!mlme_priv) {
63 mlme_legacy_err("vdev legacy private object is NULL");
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053064 return NULL;
65 }
66
gaurank kathpalia991e2fa2018-11-12 21:48:06 +053067 return &mlme_priv->ini_cfg;
68}
gaurank kathpalia24ed0f42018-11-13 15:37:49 +053069
gaurank kathpalia7ef72182019-05-29 19:41:25 +053070struct mlme_roam_after_data_stall *
71mlme_get_roam_invoke_params(struct wlan_objmgr_vdev *vdev)
72{
gaurank kathpalia7ef72182019-05-29 19:41:25 +053073 struct mlme_legacy_priv *mlme_priv;
74
hqu7f10f552019-07-09 22:12:44 +080075 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
76 if (!mlme_priv) {
77 mlme_legacy_err("vdev legacy private object is NULL");
gaurank kathpalia7ef72182019-05-29 19:41:25 +053078 return NULL;
hqu7f10f552019-07-09 22:12:44 +080079 }
gaurank kathpalia7ef72182019-05-29 19:41:25 +053080
81 return &mlme_priv->roam_invoke_params;
82}
83
Bala Venkateshaccb9ddb2019-04-04 17:41:58 +053084uint8_t *mlme_get_dynamic_oce_flags(struct wlan_objmgr_vdev *vdev)
85{
Bala Venkateshaccb9ddb2019-04-04 17:41:58 +053086 struct mlme_legacy_priv *mlme_priv;
87
hqu7f10f552019-07-09 22:12:44 +080088 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
89 if (!mlme_priv) {
90 mlme_legacy_err("vdev legacy private object is NULL");
Bala Venkateshaccb9ddb2019-04-04 17:41:58 +053091 return NULL;
92 }
93
Bala Venkateshaccb9ddb2019-04-04 17:41:58 +053094 return &mlme_priv->sta_dynamic_oce_value;
95}
96
Abhishek Singhf880a7d2019-04-29 14:51:11 +053097#ifdef CRYPTO_SET_KEY_CONVERGED
98QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
99 uint8_t *peer_mac, uint8_t *mic_len,
100 uint8_t *mic_hdr_len)
101{
102 struct wlan_objmgr_peer *peer;
103 uint32_t key_cipher;
104
105 if (!psoc || !mic_len || !mic_hdr_len || !peer_mac) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530106 mlme_legacy_debug("psoc/mic_len/mic_hdr_len/peer_mac null");
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530107 return QDF_STATUS_E_NULL_VALUE;
108 }
109
110 peer = wlan_objmgr_get_peer(psoc, pdev_id,
111 peer_mac, WLAN_LEGACY_MAC_ID);
112 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530113 mlme_legacy_debug("Peer of peer_mac %pM not found", peer_mac);
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530114 return QDF_STATUS_E_INVAL;
115 }
116
117 key_cipher =
118 wlan_crypto_get_peer_param(peer,
119 WLAN_CRYPTO_PARAM_UCAST_CIPHER);
120 wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
121
122 if (key_cipher & (1 << WLAN_CRYPTO_CIPHER_AES_GCM) ||
123 key_cipher & (1 << WLAN_CRYPTO_CIPHER_AES_GCM_256)) {
124 *mic_hdr_len = WLAN_IEEE80211_GCMP_HEADERLEN;
125 *mic_len = WLAN_IEEE80211_GCMP_MICLEN;
126 } else {
127 *mic_hdr_len = IEEE80211_CCMP_HEADERLEN;
128 *mic_len = IEEE80211_CCMP_MICLEN;
129 }
Abhishek Ambureec000072019-05-03 12:38:42 +0530130 mlme_legacy_debug("peer %pM hdr_len %d mic_len %d key_cipher 0x%x",
131 peer_mac, *mic_hdr_len, *mic_len, key_cipher);
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530132
133 return QDF_STATUS_SUCCESS;
134}
135
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530136#else
137
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530138QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
139 uint8_t *peer_mac, uint8_t *mic_len,
140 uint8_t *mic_hdr_len)
141{
142 struct wlan_objmgr_peer *peer;
143 uint32_t key_cipher;
144
145 if (!psoc || !mic_len || !mic_hdr_len || !peer_mac) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530146 mlme_legacy_debug("psoc/mic_len/mic_hdr_len/peer_mac null");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530147 return QDF_STATUS_E_NULL_VALUE;
148 }
149
150 peer = wlan_objmgr_get_peer(psoc, pdev_id,
151 peer_mac, WLAN_LEGACY_MAC_ID);
152 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530153 mlme_legacy_debug("Peer of peer_mac %pM not found", peer_mac);
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530154 return QDF_STATUS_E_INVAL;
155 }
156 key_cipher = wlan_peer_get_unicast_cipher(peer);
157 wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
158
159 if (key_cipher == WMI_CIPHER_AES_GCM) {
160 *mic_hdr_len = WLAN_IEEE80211_GCMP_HEADERLEN;
161 *mic_len = WLAN_IEEE80211_GCMP_MICLEN;
162 } else {
163 *mic_hdr_len = IEEE80211_CCMP_HEADERLEN;
164 *mic_len = IEEE80211_CCMP_MICLEN;
165 }
Abhishek Ambureec000072019-05-03 12:38:42 +0530166 mlme_legacy_debug("peer %pM hdr_len %d mic_len %d key_cipher %d",
167 peer_mac, *mic_hdr_len, *mic_len, key_cipher);
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530168
169 return QDF_STATUS_SUCCESS;
170}
Srinivas Dasaricc863f02019-09-05 17:18:48 +0530171#endif
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530172
173QDF_STATUS
174mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
175 void *arg)
176{
177 struct peer_mlme_priv_obj *peer_priv;
178 QDF_STATUS status;
179
180 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530181 mlme_legacy_err(" peer is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530182 return QDF_STATUS_E_FAILURE;
183 }
184
185 peer_priv = qdf_mem_malloc(sizeof(*peer_priv));
186 if (!peer_priv) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530187 mlme_legacy_err(" peer_priv component object alloc failed");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530188 return QDF_STATUS_E_NOMEM;
189 }
190
191 status = wlan_objmgr_peer_component_obj_attach(peer,
192 WLAN_UMAC_COMP_MLME,
193 (void *)peer_priv,
194 QDF_STATUS_SUCCESS);
195
196 if (QDF_IS_STATUS_ERROR(status)) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530197 mlme_legacy_err("unable to attach peer_priv obj to peer obj");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530198 qdf_mem_free(peer_priv);
199 }
200
201 return status;
202}
203
204QDF_STATUS
205mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
206 void *arg)
207{
208 struct peer_mlme_priv_obj *peer_priv;
209 QDF_STATUS status;
210
211 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530212 mlme_legacy_err(" peer is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530213 return QDF_STATUS_E_FAILURE;
214 }
215
216 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
217 WLAN_UMAC_COMP_MLME);
218 if (!peer_priv) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530219 mlme_legacy_err(" peer MLME component object is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530220 return QDF_STATUS_E_FAILURE;
221 }
222
223 status = wlan_objmgr_peer_component_obj_detach(peer,
224 WLAN_UMAC_COMP_MLME,
225 peer_priv);
226
227 if (QDF_IS_STATUS_ERROR(status))
Abhishek Ambureec000072019-05-03 12:38:42 +0530228 mlme_legacy_err("unable to detach peer_priv obj to peer obj");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530229
230 qdf_mem_free(peer_priv);
231
232 return status;
233}
234
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +0530235static void mlme_init_chainmask_cfg(struct wlan_objmgr_psoc *psoc,
236 struct wlan_mlme_chainmask *chainmask_info)
237{
238 chainmask_info->txchainmask1x1 =
239 cfg_get(psoc, CFG_VHT_ENABLE_1x1_TX_CHAINMASK);
240
241 chainmask_info->rxchainmask1x1 =
242 cfg_get(psoc, CFG_VHT_ENABLE_1x1_RX_CHAINMASK);
243
244 chainmask_info->tx_chain_mask_cck =
245 cfg_get(psoc, CFG_TX_CHAIN_MASK_CCK);
246
247 chainmask_info->tx_chain_mask_1ss =
248 cfg_get(psoc, CFG_TX_CHAIN_MASK_1SS);
249
250 chainmask_info->num_11b_tx_chains =
251 cfg_get(psoc, CFG_11B_NUM_TX_CHAIN);
252
253 chainmask_info->num_11ag_tx_chains =
254 cfg_get(psoc, CFG_11AG_NUM_TX_CHAIN);
255
256 chainmask_info->tx_chain_mask_2g =
257 cfg_get(psoc, CFG_TX_CHAIN_MASK_2G);
258
259 chainmask_info->rx_chain_mask_2g =
260 cfg_get(psoc, CFG_RX_CHAIN_MASK_2G);
261
262 chainmask_info->tx_chain_mask_5g =
263 cfg_get(psoc, CFG_TX_CHAIN_MASK_5G);
264
265 chainmask_info->rx_chain_mask_5g =
266 cfg_get(psoc, CFG_RX_CHAIN_MASK_5G);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530267
268 chainmask_info->enable_bt_chain_separation =
269 cfg_get(psoc, CFG_ENABLE_BT_CHAIN_SEPARATION);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +0530270}
271
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530272#ifdef WLAN_FEATURE_11W
273static void mlme_init_pmf_cfg(struct wlan_objmgr_psoc *psoc,
274 struct wlan_mlme_generic *gen)
275{
276 gen->pmf_sa_query_max_retries =
277 cfg_get(psoc, CFG_PMF_SA_QUERY_MAX_RETRIES);
278 gen->pmf_sa_query_retry_interval =
279 cfg_get(psoc, CFG_PMF_SA_QUERY_RETRY_INTERVAL);
280}
281#else
282static void mlme_init_pmf_cfg(struct wlan_objmgr_psoc *psoc,
283 struct wlan_mlme_generic *gen)
284{
285 gen->pmf_sa_query_max_retries =
286 cfg_default(CFG_PMF_SA_QUERY_MAX_RETRIES);
287 gen->pmf_sa_query_retry_interval =
288 cfg_default(CFG_PMF_SA_QUERY_RETRY_INTERVAL);
289}
290#endif /*WLAN_FEATURE_11W*/
291
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530292#ifdef WLAN_FEATURE_LPSS
293static inline void
294mlme_init_lpass_support_cfg(struct wlan_objmgr_psoc *psoc,
295 struct wlan_mlme_generic *gen)
296{
297 gen->lpass_support = cfg_get(psoc, CFG_ENABLE_LPASS_SUPPORT);
298}
299#else
300static inline void
301mlme_init_lpass_support_cfg(struct wlan_objmgr_psoc *psoc,
302 struct wlan_mlme_generic *gen)
303{
304 gen->lpass_support = cfg_default(CFG_ENABLE_LPASS_SUPPORT);
305}
306#endif
307
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530308static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
309 struct wlan_mlme_generic *gen)
310{
311 gen->rtt3_enabled = cfg_default(CFG_RTT3_ENABLE);
Karthik Kantamneni9180c752018-11-14 12:14:17 +0530312 gen->rtt_mac_randomization =
313 cfg_get(psoc, CFG_ENABLE_RTT_MAC_RANDOMIZATION);
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530314 gen->band_capability =
315 cfg_get(psoc, CFG_BAND_CAPABILITY);
Vignesh Viswanathanf97cc112018-10-03 19:17:07 +0530316 gen->band = gen->band_capability;
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530317 gen->select_5ghz_margin =
318 cfg_get(psoc, CFG_SELECT_5GHZ_MARGIN);
319 gen->sub_20_chan_width =
320 cfg_get(psoc, CFG_SUB_20_CHANNEL_WIDTH);
321 gen->ito_repeat_count =
322 cfg_get(psoc, CFG_ITO_REPEAT_COUNT);
323 gen->dropped_pkt_disconnect_thresh =
324 cfg_get(psoc, CFG_DROPPED_PKT_DISCONNECT_THRESHOLD);
325 gen->prevent_link_down =
326 cfg_get(psoc, CFG_PREVENT_LINK_DOWN);
327 gen->memory_deep_sleep =
328 cfg_get(psoc, CFG_ENABLE_MEM_DEEP_SLEEP);
329 gen->cck_tx_fir_override =
330 cfg_get(psoc, CFG_ENABLE_CCK_TX_FIR_OVERRIDE);
331 gen->crash_inject =
332 cfg_get(psoc, CFG_ENABLE_CRASH_INJECT);
333 gen->self_recovery =
334 cfg_get(psoc, CFG_ENABLE_SELF_RECOVERY);
335 gen->sap_dot11mc =
336 cfg_get(psoc, CFG_SAP_DOT11MC);
337 gen->fatal_event_trigger =
338 cfg_get(psoc, CFG_ENABLE_FATAL_EVENT_TRIGGER);
339 gen->optimize_ca_event =
340 cfg_get(psoc, CFG_OPTIMIZE_CA_EVENT);
341 gen->fw_timeout_crash =
342 cfg_get(psoc, CFG_CRASH_FW_TIMEOUT);
Dundi Ravitejaf99ce092018-09-27 17:51:59 +0530343 gen->debug_packet_log = cfg_get(psoc, CFG_ENABLE_DEBUG_PACKET_LOG);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +0530344 gen->enable_deauth_to_disassoc_map =
345 cfg_get(psoc, CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP);
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530346 mlme_init_pmf_cfg(psoc, gen);
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530347 mlme_init_lpass_support_cfg(psoc, gen);
Abhinav Kumard4d6eb72018-12-04 20:30:37 +0530348
Ashish Kumar Dhanotiyaefae55b2018-12-24 15:20:42 +0530349 gen->enabled_11h = cfg_get(psoc, CFG_11H_SUPPORT_ENABLED);
350 gen->enabled_11d = cfg_get(psoc, CFG_11D_SUPPORT_ENABLED);
Sourav Mohapatrac55bdf32018-12-13 16:16:50 +0530351 gen->enable_beacon_reception_stats =
352 cfg_get(psoc, CFG_ENABLE_BEACON_RECEPTION_STATS);
Wu Gaof3cbeaf2019-01-15 18:26:25 +0800353 gen->enable_remove_time_stamp_sync_cmd =
354 cfg_get(psoc, CFG_REMOVE_TIME_STAMP_SYNC_CMD);
Pragaspathi Thilagaraja8893752019-02-06 19:58:59 +0530355 gen->enable_change_channel_bandwidth =
356 cfg_get(psoc, CFG_CHANGE_CHANNEL_BANDWIDTH);
Yeshwanth Sriram Guntukac52f24d2019-05-24 13:54:15 +0530357 gen->disable_4way_hs_offload =
358 cfg_get(psoc, CFG_DISABLE_4WAY_HS_OFFLOAD);
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530359}
360
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530361static void mlme_init_edca_ani_cfg(struct wlan_mlme_edca_params *edca_params)
362{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530363 /* initialize the max allowed array length for read/write */
364 edca_params->ani_acbe_l.max_len = CFG_EDCA_DATA_LEN;
365 edca_params->ani_acbk_l.max_len = CFG_EDCA_DATA_LEN;
366 edca_params->ani_acvi_l.max_len = CFG_EDCA_DATA_LEN;
367 edca_params->ani_acvo_l.max_len = CFG_EDCA_DATA_LEN;
368
369 edca_params->ani_acbe_b.max_len = CFG_EDCA_DATA_LEN;
370 edca_params->ani_acbk_b.max_len = CFG_EDCA_DATA_LEN;
371 edca_params->ani_acvi_b.max_len = CFG_EDCA_DATA_LEN;
372 edca_params->ani_acvo_b.max_len = CFG_EDCA_DATA_LEN;
373
374 /* parse the ETSI edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530375 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBK_LOCAL),
376 edca_params->ani_acbk_l.data,
377 CFG_EDCA_DATA_LEN,
378 &edca_params->ani_acbk_l.len);
379
380 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBE_LOCAL),
381 edca_params->ani_acbe_l.data,
382 CFG_EDCA_DATA_LEN,
383 &edca_params->ani_acbe_l.len);
384
385 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVI_LOCAL),
386 edca_params->ani_acvi_l.data,
387 CFG_EDCA_DATA_LEN,
388 &edca_params->ani_acvi_l.len);
389
390 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVO_LOCAL),
391 edca_params->ani_acvo_l.data,
392 CFG_EDCA_DATA_LEN,
393 &edca_params->ani_acvo_l.len);
394
395 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBK),
396 edca_params->ani_acbk_b.data,
397 CFG_EDCA_DATA_LEN,
398 &edca_params->ani_acbk_b.len);
399
400 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBE),
401 edca_params->ani_acbe_b.data,
402 CFG_EDCA_DATA_LEN,
403 &edca_params->ani_acbe_b.len);
404
405 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVI),
406 edca_params->ani_acvi_b.data,
407 CFG_EDCA_DATA_LEN,
408 &edca_params->ani_acvi_b.len);
409
410 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVO),
411 edca_params->ani_acvo_b.data,
412 CFG_EDCA_DATA_LEN,
413 &edca_params->ani_acvo_b.len);
414}
415
416static void mlme_init_edca_wme_cfg(struct wlan_mlme_edca_params *edca_params)
417{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530418 /* initialize the max allowed array length for read/write */
419 edca_params->wme_acbk_l.max_len = CFG_EDCA_DATA_LEN;
420 edca_params->wme_acbe_l.max_len = CFG_EDCA_DATA_LEN;
421 edca_params->wme_acvi_l.max_len = CFG_EDCA_DATA_LEN;
422 edca_params->wme_acvo_l.max_len = CFG_EDCA_DATA_LEN;
423
424 edca_params->wme_acbk_b.max_len = CFG_EDCA_DATA_LEN;
425 edca_params->wme_acbe_b.max_len = CFG_EDCA_DATA_LEN;
426 edca_params->wme_acvi_b.max_len = CFG_EDCA_DATA_LEN;
427 edca_params->wme_acvo_b.max_len = CFG_EDCA_DATA_LEN;
428
429 /* parse the WME edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530430 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBK_LOCAL),
431 edca_params->wme_acbk_l.data,
432 CFG_EDCA_DATA_LEN,
433 &edca_params->wme_acbk_l.len);
434
435 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBE_LOCAL),
436 edca_params->wme_acbe_l.data,
437 CFG_EDCA_DATA_LEN,
438 &edca_params->wme_acbe_l.len);
439
440 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVI_LOCAL),
441 edca_params->wme_acvi_l.data,
442 CFG_EDCA_DATA_LEN,
443 &edca_params->wme_acvi_l.len);
444
445 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVO_LOCAL),
446 edca_params->wme_acvo_l.data,
447 CFG_EDCA_DATA_LEN,
448 &edca_params->wme_acvo_l.len);
449
450 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBK),
451 edca_params->wme_acbk_b.data,
452 CFG_EDCA_DATA_LEN,
453 &edca_params->wme_acbk_b.len);
454
455 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBE),
456 edca_params->wme_acbe_b.data,
457 CFG_EDCA_DATA_LEN,
458 &edca_params->wme_acbe_b.len);
459
460 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVI),
461 edca_params->wme_acvi_b.data,
462 CFG_EDCA_DATA_LEN,
463 &edca_params->wme_acvi_b.len);
464
465 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVO),
466 edca_params->wme_acvo_b.data,
467 CFG_EDCA_DATA_LEN,
468 &edca_params->wme_acvo_b.len);
469}
470
471static void mlme_init_edca_etsi_cfg(struct wlan_mlme_edca_params *edca_params)
472{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530473 /* initialize the max allowed array length for read/write */
474 edca_params->etsi_acbe_l.max_len = CFG_EDCA_DATA_LEN;
475 edca_params->etsi_acbk_l.max_len = CFG_EDCA_DATA_LEN;
476 edca_params->etsi_acvi_l.max_len = CFG_EDCA_DATA_LEN;
477 edca_params->etsi_acvo_l.max_len = CFG_EDCA_DATA_LEN;
478
479 edca_params->etsi_acbe_b.max_len = CFG_EDCA_DATA_LEN;
480 edca_params->etsi_acbk_b.max_len = CFG_EDCA_DATA_LEN;
481 edca_params->etsi_acvi_b.max_len = CFG_EDCA_DATA_LEN;
482 edca_params->etsi_acvo_b.max_len = CFG_EDCA_DATA_LEN;
483
484 /* parse the ETSI edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530485 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBK_LOCAL),
486 edca_params->etsi_acbk_l.data,
487 CFG_EDCA_DATA_LEN,
488 &edca_params->etsi_acbk_l.len);
489
490 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBE_LOCAL),
491 edca_params->etsi_acbe_l.data,
492 CFG_EDCA_DATA_LEN,
493 &edca_params->etsi_acbe_l.len);
494
495 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVI_LOCAL),
496 edca_params->etsi_acvi_l.data,
497 CFG_EDCA_DATA_LEN,
498 &edca_params->etsi_acvi_l.len);
499
500 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVO_LOCAL),
501 edca_params->etsi_acvo_l.data,
502 CFG_EDCA_DATA_LEN,
503 &edca_params->etsi_acvo_l.len);
504
505 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBK),
506 edca_params->etsi_acbk_b.data,
507 CFG_EDCA_DATA_LEN,
508 &edca_params->etsi_acbk_b.len);
509
510 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBE),
511 edca_params->etsi_acbe_b.data,
512 CFG_EDCA_DATA_LEN,
513 &edca_params->etsi_acbe_b.len);
514
515 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVI),
516 edca_params->etsi_acvi_b.data,
517 CFG_EDCA_DATA_LEN,
518 &edca_params->etsi_acvi_b.len);
519
520 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVO),
521 edca_params->etsi_acvo_b.data,
522 CFG_EDCA_DATA_LEN,
523 &edca_params->etsi_acvo_b.len);
524}
525
Abhinav Kumar06b9a122018-10-10 15:01:11 +0530526static void
527mlme_init_qos_edca_params(struct wlan_objmgr_psoc *psoc,
528 struct wlan_mlme_edca_params *edca_params)
529{
530 edca_params->enable_edca_params =
531 cfg_get(psoc, CFG_EDCA_ENABLE_PARAM);
532
533 edca_params->edca_ac_vo.vo_cwmin =
534 cfg_get(psoc, CFG_EDCA_VO_CWMIN);
535 edca_params->edca_ac_vo.vo_cwmax =
536 cfg_get(psoc, CFG_EDCA_VO_CWMAX);
537 edca_params->edca_ac_vo.vo_aifs =
538 cfg_get(psoc, CFG_EDCA_VO_AIFS);
539
540 edca_params->edca_ac_vi.vi_cwmin =
541 cfg_get(psoc, CFG_EDCA_VI_CWMIN);
542 edca_params->edca_ac_vi.vi_cwmax =
543 cfg_get(psoc, CFG_EDCA_VI_CWMAX);
544 edca_params->edca_ac_vi.vi_aifs =
545 cfg_get(psoc, CFG_EDCA_VI_AIFS);
546
547 edca_params->edca_ac_bk.bk_cwmin =
548 cfg_get(psoc, CFG_EDCA_BK_CWMIN);
549 edca_params->edca_ac_bk.bk_cwmax =
550 cfg_get(psoc, CFG_EDCA_BK_CWMAX);
551 edca_params->edca_ac_bk.bk_aifs =
552 cfg_get(psoc, CFG_EDCA_BK_AIFS);
553
554 edca_params->edca_ac_be.be_cwmin =
555 cfg_get(psoc, CFG_EDCA_BE_CWMIN);
556 edca_params->edca_ac_be.be_cwmax =
557 cfg_get(psoc, CFG_EDCA_BE_CWMAX);
558 edca_params->edca_ac_be.be_aifs =
559 cfg_get(psoc, CFG_EDCA_BE_AIFS);
560}
561
562static void mlme_init_edca_params(struct wlan_objmgr_psoc *psoc,
563 struct wlan_mlme_edca_params *edca_params)
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530564{
565 mlme_init_edca_ani_cfg(edca_params);
566 mlme_init_edca_wme_cfg(edca_params);
567 mlme_init_edca_etsi_cfg(edca_params);
Abhinav Kumar06b9a122018-10-10 15:01:11 +0530568 mlme_init_qos_edca_params(psoc, edca_params);
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530569}
570
Arif Hussain9f93a642018-09-10 18:32:25 -0700571static void mlme_init_timeout_cfg(struct wlan_objmgr_psoc *psoc,
572 struct wlan_mlme_timeout *timeouts)
573{
Arif Hussain43e09712018-09-18 19:31:57 -0700574 timeouts->join_failure_timeout =
575 cfg_get(psoc, CFG_JOIN_FAILURE_TIMEOUT);
576 timeouts->auth_failure_timeout =
577 cfg_get(psoc, CFG_AUTH_FAILURE_TIMEOUT);
578 timeouts->auth_rsp_timeout =
579 cfg_get(psoc, CFG_AUTH_RSP_TIMEOUT);
580 timeouts->assoc_failure_timeout =
581 cfg_get(psoc, CFG_ASSOC_FAILURE_TIMEOUT);
582 timeouts->reassoc_failure_timeout =
583 cfg_get(psoc, CFG_REASSOC_FAILURE_TIMEOUT);
584 timeouts->probe_after_hb_fail_timeout =
585 cfg_get(psoc, CFG_PROBE_AFTER_HB_FAIL_TIMEOUT);
586 timeouts->olbc_detect_timeout =
587 cfg_get(psoc, CFG_OLBC_DETECT_TIMEOUT);
588 timeouts->addts_rsp_timeout =
589 cfg_get(psoc, CFG_ADDTS_RSP_TIMEOUT);
590 timeouts->heart_beat_threshold =
591 cfg_get(psoc, CFG_HEART_BEAT_THRESHOLD);
592 timeouts->ap_keep_alive_timeout =
593 cfg_get(psoc, CFG_AP_KEEP_ALIVE_TIMEOUT);
594 timeouts->ap_link_monitor_timeout =
595 cfg_get(psoc, CFG_AP_LINK_MONITOR_TIMEOUT);
596 timeouts->ps_data_inactivity_timeout =
597 cfg_get(psoc, CFG_PS_DATA_INACTIVITY_TIMEOUT);
Arif Hussain4966f692018-11-27 16:40:51 -0800598 timeouts->wmi_wq_watchdog_timeout =
599 cfg_get(psoc, CFG_WMI_WQ_WATCHDOG);
Arif Hussain9f93a642018-09-10 18:32:25 -0700600}
601
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530602static void mlme_init_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
603 struct wlan_mlme_ht_caps *ht_caps)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530604{
605 union {
606 uint16_t val_16;
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530607 struct mlme_ht_capabilities_info ht_cap_info;
608 } u1;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530609
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530610 union {
611 uint16_t val_16;
612 struct mlme_ht_ext_cap_info ext_cap_info;
613 } u2;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530614
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530615 union {
616 uint8_t val_8;
617 struct mlme_ht_info_field_1 info_field_1;
618 } u3;
619
620 union {
621 uint16_t val_16;
622 struct mlme_ht_info_field_2 info_field_2;
623 } u4;
624
625 union {
626 uint16_t val_16;
627 struct mlme_ht_info_field_3 info_field_3;
628 } u5;
629
630 /* HT Capabilities - HT Caps Info Field */
631 u1.val_16 = (uint16_t)cfg_default(CFG_HT_CAP_INFO);
632 u1.ht_cap_info.adv_coding_cap =
Vignesh Viswanathan78182502018-08-06 15:13:30 +0530633 cfg_get(psoc, CFG_RX_LDPC_ENABLE);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530634 u1.ht_cap_info.rx_stbc = cfg_get(psoc, CFG_RX_STBC_ENABLE);
635 u1.ht_cap_info.tx_stbc = cfg_get(psoc, CFG_TX_STBC_ENABLE);
636 u1.ht_cap_info.short_gi_20_mhz =
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530637 cfg_get(psoc, CFG_SHORT_GI_20MHZ);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530638 u1.ht_cap_info.short_gi_40_mhz =
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530639 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530640 ht_caps->ht_cap_info = u1.ht_cap_info;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530641
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530642 /* HT Capapabilties - AMPDU Params */
643 ht_caps->ampdu_params.max_rx_ampdu_factor =
644 cfg_get(psoc, CFG_MAX_RX_AMPDU_FACTOR);
645 ht_caps->ampdu_params.mpdu_density =
646 cfg_get(psoc, CFG_MPDU_DENSITY);
647 ht_caps->ampdu_params.reserved = 0;
648
649 /* HT Capabilities - Extended Capabilities field */
650 u2.val_16 = (uint16_t)cfg_default(CFG_EXT_HT_CAP_INFO);
651 ht_caps->ext_cap_info = u2.ext_cap_info;
652
653 /* HT Operation - Information subset 1 of 3 */
654 u3.val_8 = (uint8_t)cfg_default(CFG_HT_INFO_FIELD_1);
655 ht_caps->info_field_1 = u3.info_field_1;
656
657 /* HT Operation - Information subset 2 of 3 */
658 u4.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_2);
659 ht_caps->info_field_2 = u4.info_field_2;
660
661 /* HT Operation - Information subset 3 of 3 */
662 u5.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_3);
663 ht_caps->info_field_3 = u5.info_field_3;
664
665 ht_caps->short_preamble = cfg_get(psoc, CFG_SHORT_PREAMBLE);
666 ht_caps->enable_ampdu_ps = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
667 ht_caps->enable_smps = cfg_get(psoc, CFG_ENABLE_HT_SMPS);
668 ht_caps->smps = cfg_get(psoc, CFG_HT_SMPS_MODE);
669 ht_caps->max_num_amsdu = cfg_get(psoc, CFG_MAX_AMSDU_NUM);
Vignesh Viswanathanecd4de72018-11-22 13:02:20 +0530670 ht_caps->tx_ldpc_enable = cfg_get(psoc, CFG_TX_LDPC_ENABLE);
671 ht_caps->short_slot_time_enabled =
672 cfg_get(psoc, CFG_SHORT_SLOT_TIME_ENABLED);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530673}
674
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530675static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
676 struct wlan_mlme_qos *qos_aggr_params)
677{
678 qos_aggr_params->tx_aggregation_size =
679 cfg_get(psoc, CFG_TX_AGGREGATION_SIZE);
680 qos_aggr_params->tx_aggregation_size_be =
681 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEBE);
682 qos_aggr_params->tx_aggregation_size_bk =
683 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEBK);
684 qos_aggr_params->tx_aggregation_size_vi =
685 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEVI);
686 qos_aggr_params->tx_aggregation_size_vo =
687 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEVO);
688 qos_aggr_params->rx_aggregation_size =
689 cfg_get(psoc, CFG_RX_AGGREGATION_SIZE);
690 qos_aggr_params->tx_aggr_sw_retry_threshold_be =
691 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_BE);
692 qos_aggr_params->tx_aggr_sw_retry_threshold_bk =
693 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_BK);
694 qos_aggr_params->tx_aggr_sw_retry_threshold_vi =
695 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VI);
696 qos_aggr_params->tx_aggr_sw_retry_threshold_vo =
697 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VO);
Paul Zhanga25f75a2019-04-12 17:11:14 +0800698 qos_aggr_params->tx_aggr_sw_retry_threshold =
699 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY);
stonez26388d02018-10-17 13:37:48 +0800700 qos_aggr_params->tx_non_aggr_sw_retry_threshold_be =
701 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BE);
702 qos_aggr_params->tx_non_aggr_sw_retry_threshold_bk =
703 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BK);
704 qos_aggr_params->tx_non_aggr_sw_retry_threshold_vi =
705 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VI);
706 qos_aggr_params->tx_non_aggr_sw_retry_threshold_vo =
707 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VO);
Paul Zhanga25f75a2019-04-12 17:11:14 +0800708 qos_aggr_params->tx_non_aggr_sw_retry_threshold =
709 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530710 qos_aggr_params->sap_max_inactivity_override =
711 cfg_get(psoc, CFG_SAP_MAX_INACTIVITY_OVERRIDE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530712 qos_aggr_params->sap_uapsd_enabled =
713 cfg_get(psoc, CFG_SAP_QOS_UAPSD);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530714}
715
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +0530716static void mlme_init_mbo_cfg(struct wlan_objmgr_psoc *psoc,
717 struct wlan_mlme_mbo *mbo_params)
718{
719 mbo_params->mbo_candidate_rssi_thres =
720 cfg_get(psoc, CFG_MBO_CANDIDATE_RSSI_THRESHOLD);
721 mbo_params->mbo_current_rssi_thres =
722 cfg_get(psoc, CFG_MBO_CURRENT_RSSI_THRESHOLD);
723 mbo_params->mbo_current_rssi_mcc_thres =
724 cfg_get(psoc, CFG_MBO_CUR_RSSI_MCC_THRESHOLD);
725 mbo_params->mbo_candidate_rssi_btc_thres =
726 cfg_get(psoc, CFG_MBO_CAND_RSSI_BTC_THRESHOLD);
727}
728
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530729static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc,
730 struct mlme_vht_capabilities_info
731 *vht_cap_info)
732{
733 vht_cap_info->supp_chan_width =
734 cfg_default(CFG_VHT_SUPP_CHAN_WIDTH);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530735 vht_cap_info->num_soundingdim =
736 cfg_default(CFG_VHT_NUM_SOUNDING_DIMENSIONS);
737 vht_cap_info->htc_vhtc =
738 cfg_default(CFG_VHT_HTC_VHTC);
739 vht_cap_info->link_adap_cap =
740 cfg_default(CFG_VHT_LINK_ADAPTATION_CAP);
741 vht_cap_info->rx_antpattern =
742 cfg_default(CFG_VHT_RX_ANT_PATTERN);
743 vht_cap_info->tx_antpattern =
744 cfg_default(CFG_VHT_TX_ANT_PATTERN);
745 vht_cap_info->rx_supp_data_rate =
746 cfg_default(CFG_VHT_RX_SUPP_DATA_RATE);
747 vht_cap_info->tx_supp_data_rate =
748 cfg_default(CFG_VHT_TX_SUPP_DATA_RATE);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530749 vht_cap_info->txop_ps =
750 cfg_default(CFG_VHT_TXOP_PS);
751 vht_cap_info->rx_mcs_map =
Abhinav Kumare057b412018-10-09 17:28:16 +0530752 CFG_VHT_RX_MCS_MAP_STADEF;
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530753 vht_cap_info->tx_mcs_map =
Abhinav Kumare057b412018-10-09 17:28:16 +0530754 CFG_VHT_TX_MCS_MAP_STADEF;
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530755 vht_cap_info->basic_mcs_set =
756 CFG_VHT_BASIC_MCS_SET_STADEF;
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530757
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530758 vht_cap_info->tx_bfee_ant_supp =
759 cfg_get(psoc, CFG_VHT_BEAMFORMEE_ANT_SUPP);
760
761 vht_cap_info->enable_txbf_20mhz =
Abhinav Kumare057b412018-10-09 17:28:16 +0530762 cfg_get(psoc, CFG_VHT_ENABLE_TXBF_IN_20MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530763 vht_cap_info->ampdu_len =
764 cfg_get(psoc, CFG_VHT_MPDU_LEN);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530765
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530766 vht_cap_info->ldpc_coding_cap =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530767 cfg_get(psoc, CFG_RX_LDPC_ENABLE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530768 vht_cap_info->short_gi_80mhz =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530769 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530770 vht_cap_info->short_gi_160mhz =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530771 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530772 vht_cap_info->tx_stbc =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530773 cfg_get(psoc, CFG_TX_STBC_ENABLE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530774 vht_cap_info->rx_stbc =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530775 cfg_get(psoc, CFG_RX_STBC_ENABLE);
776
Kiran Kumar Lokereeaaa3462018-11-01 19:03:23 -0700777 vht_cap_info->su_bformee =
sheenam monga0b8f2572019-05-30 19:26:45 +0530778 cfg_get(psoc, CFG_VHT_SU_BEAMFORMEE_CAP);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530779
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530780 vht_cap_info->mu_bformer =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530781 cfg_default(CFG_VHT_MU_BEAMFORMER_CAP);
782
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530783 vht_cap_info->enable_mu_bformee =
784 cfg_get(psoc, CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530785 vht_cap_info->ampdu_len_exponent =
786 cfg_get(psoc, CFG_VHT_AMPDU_LEN_EXPONENT);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530787 vht_cap_info->channel_width =
788 cfg_get(psoc, CFG_VHT_CHANNEL_WIDTH);
789 vht_cap_info->rx_mcs =
790 cfg_get(psoc, CFG_VHT_ENABLE_RX_MCS_8_9);
791 vht_cap_info->tx_mcs =
792 cfg_get(psoc, CFG_VHT_ENABLE_TX_MCS_8_9);
793 vht_cap_info->rx_mcs2x2 =
794 cfg_get(psoc, CFG_VHT_ENABLE_RX_MCS2x2_8_9);
795 vht_cap_info->tx_mcs2x2 =
796 cfg_get(psoc, CFG_VHT_ENABLE_TX_MCS2x2_8_9);
797 vht_cap_info->enable_vht20_mcs9 =
798 cfg_get(psoc, CFG_ENABLE_VHT20_MCS9);
799 vht_cap_info->enable2x2 =
800 cfg_get(psoc, CFG_VHT_ENABLE_2x2_CAP_FEATURE);
801 vht_cap_info->enable_paid =
802 cfg_get(psoc, CFG_VHT_ENABLE_PAID_FEATURE);
803 vht_cap_info->enable_gid =
804 cfg_get(psoc, CFG_VHT_ENABLE_GID_FEATURE);
805 vht_cap_info->b24ghz_band =
806 cfg_get(psoc, CFG_ENABLE_VHT_FOR_24GHZ);
807 vht_cap_info->vendor_24ghz_band =
808 cfg_get(psoc, CFG_ENABLE_VENDOR_VHT_FOR_24GHZ);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530809 vht_cap_info->tx_bfee_sap =
810 cfg_get(psoc, CFG_VHT_ENABLE_TXBF_SAP_MODE);
811 vht_cap_info->vendor_vhtie =
812 cfg_get(psoc, CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE);
813
814 if (vht_cap_info->enable2x2)
Kiran Kumar Lokere9159af62018-10-31 18:47:33 -0700815 vht_cap_info->su_bformer =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530816 cfg_get(psoc, CFG_VHT_ENABLE_TX_SU_BEAM_FORMER);
817
Kiran Kumar Lokere9159af62018-10-31 18:47:33 -0700818 if (vht_cap_info->enable2x2 && vht_cap_info->su_bformer)
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530819 vht_cap_info->num_soundingdim = NUM_OF_SOUNDING_DIMENSIONS;
Abhinav Kumard4d6eb72018-12-04 20:30:37 +0530820
821 vht_cap_info->tx_bf_cap = cfg_default(CFG_TX_BF_CAP);
822 vht_cap_info->as_cap = cfg_default(CFG_AS_CAP);
823 vht_cap_info->disable_ldpc_with_txbf_ap =
824 cfg_get(psoc, CFG_DISABLE_LDPC_WITH_TXBF_AP);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530825}
826
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530827static void mlme_init_rates_in_cfg(struct wlan_objmgr_psoc *psoc,
828 struct wlan_mlme_rates *rates)
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530829{
830 rates->cfp_period = cfg_default(CFG_CFP_PERIOD);
831 rates->cfp_max_duration = cfg_default(CFG_CFP_MAX_DURATION);
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530832 rates->max_htmcs_txdata = cfg_get(psoc, CFG_MAX_HT_MCS_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530833 rates->disable_abg_rate_txdata = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530834 CFG_DISABLE_ABG_RATE_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530835 rates->sap_max_mcs_txdata = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530836 CFG_SAP_MAX_MCS_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530837 rates->disable_high_ht_mcs_2x2 = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530838 CFG_DISABLE_HIGH_HT_RX_MCS_2x2);
839
840 rates->supported_11b.max_len = CFG_SUPPORTED_RATES_11B_LEN;
841 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_RATES_11B),
842 rates->supported_11b.data,
843 sizeof(rates->supported_11b.data),
844 &rates->supported_11b.len);
845 rates->supported_11a.max_len = CFG_SUPPORTED_RATES_11A_LEN;
846 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_RATES_11A),
847 rates->supported_11a.data,
848 sizeof(rates->supported_11a.data),
849 &rates->supported_11a.len);
850 rates->opr_rate_set.max_len = CFG_OPERATIONAL_RATE_SET_LEN;
851 rates->opr_rate_set.len = 0;
852 rates->ext_opr_rate_set.max_len = CFG_EXTENDED_OPERATIONAL_RATE_SET_LEN;
853 rates->ext_opr_rate_set.len = 0;
854 rates->supported_mcs_set.max_len = CFG_SUPPORTED_MCS_SET_LEN;
855 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_MCS_SET),
856 rates->supported_mcs_set.data,
857 sizeof(rates->supported_mcs_set.data),
858 &rates->supported_mcs_set.len);
859 rates->basic_mcs_set.max_len = CFG_BASIC_MCS_SET_LEN;
860 qdf_uint8_array_parse(cfg_default(CFG_BASIC_MCS_SET),
861 rates->basic_mcs_set.data,
862 sizeof(rates->basic_mcs_set.data),
863 &rates->basic_mcs_set.len);
864 rates->current_mcs_set.max_len = CFG_CURRENT_MCS_SET_LEN;
865 qdf_uint8_array_parse(cfg_default(CFG_CURRENT_MCS_SET),
866 rates->current_mcs_set.data,
867 sizeof(rates->current_mcs_set.data),
868 &rates->current_mcs_set.len);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530869}
870
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700871static void mlme_init_dfs_cfg(struct wlan_objmgr_psoc *psoc,
872 struct wlan_mlme_dfs_cfg *dfs_cfg)
873{
Arif Hussain224d3812018-11-16 17:58:38 -0800874 dfs_cfg->dfs_ignore_cac = cfg_get(psoc, CFG_IGNORE_CAC);
875 dfs_cfg->dfs_master_capable =
876 cfg_get(psoc, CFG_ENABLE_DFS_MASTER_CAPABILITY);
877 dfs_cfg->dfs_disable_channel_switch =
878 cfg_get(psoc, CFG_DISABLE_DFS_CH_SWITCH);
879 dfs_cfg->dfs_filter_offload =
880 cfg_get(psoc, CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD);
881 dfs_cfg->dfs_prefer_non_dfs =
882 cfg_get(psoc, CFG_ENABLE_NON_DFS_CHAN_ON_RADAR);
883 dfs_cfg->dfs_beacon_tx_enhanced =
884 cfg_get(psoc, CFG_DFS_BEACON_TX_ENHANCED);
Arif Hussain0b634b42018-12-20 16:03:18 -0800885 dfs_cfg->dfs_disable_japan_w53 =
886 cfg_get(psoc, CFG_DISABLE_DFS_JAPAN_W53);
Arif Hussain224d3812018-11-16 17:58:38 -0800887 dfs_cfg->sap_tx_leakage_threshold =
888 cfg_get(psoc, CFG_SAP_TX_LEAKAGE_THRESHOLD);
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800889 dfs_cfg->dfs_pri_multiplier =
890 cfg_get(psoc, CFG_DFS_RADAR_PRI_MULTIPLIER);
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700891}
892
gaurank kathpaliae5a17e42018-09-10 10:05:25 +0530893static void mlme_init_feature_flag_in_cfg(
894 struct wlan_objmgr_psoc *psoc,
895 struct wlan_mlme_feature_flag *feature_flags)
896{
897 feature_flags->accept_short_slot_assoc =
898 cfg_default(CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY);
899 feature_flags->enable_hcf = cfg_default(CFG_HCF_ENABLED);
900 feature_flags->enable_rsn = cfg_default(CFG_RSN_ENABLED);
901 feature_flags->enable_short_preamble_11g =
902 cfg_default(CFG_11G_SHORT_PREAMBLE_ENABLED);
903 feature_flags->enable_short_slot_time_11g =
904 cfg_default(CFG_11G_SHORT_SLOT_TIME_ENABLED);
905 feature_flags->channel_bonding_mode =
906 cfg_default(CFG_CHANNEL_BONDING_MODE);
907 feature_flags->enable_block_ack = cfg_default(CFG_BLOCK_ACK_ENABLED);
908 feature_flags->enable_ampdu = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
Krunal Sonid2c33e12018-12-06 15:02:37 -0800909 feature_flags->mcc_rts_cts_prot = cfg_get(psoc,
910 CFG_FW_MCC_RTS_CTS_PROT);
911 feature_flags->mcc_bcast_prob_rsp = cfg_get(psoc,
912 CFG_FW_MCC_BCAST_PROB_RESP);
913 feature_flags->enable_mcc = cfg_get(psoc, CFG_MCC_FEATURE);
Wu Gaoed616a12019-01-16 15:19:21 +0800914 feature_flags->channel_bonding_mode_24ghz =
915 cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_24GHZ);
916 feature_flags->channel_bonding_mode_5ghz =
917 cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_5GHZ);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +0530918}
919
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530920static void mlme_init_sap_protection_cfg(struct wlan_objmgr_psoc *psoc,
921 struct wlan_mlme_sap_protection
922 *sap_protection_params)
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530923{
924 sap_protection_params->protection_enabled =
925 cfg_default(CFG_PROTECTION_ENABLED);
926 sap_protection_params->protection_force_policy =
927 cfg_default(CFG_FORCE_POLICY_PROTECTION);
Pragaspathi Thilagaraj1ee76002018-09-18 21:38:51 +0530928 sap_protection_params->ignore_peer_ht_opmode =
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530929 cfg_get(psoc, CFG_IGNORE_PEER_HT_MODE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530930 sap_protection_params->enable_ap_obss_protection =
931 cfg_get(psoc, CFG_AP_OBSS_PROTECTION_ENABLE);
Pragaspathi Thilagarajf37f3932019-01-11 00:25:43 +0530932 sap_protection_params->is_ap_prot_enabled =
933 cfg_get(psoc, CFG_AP_ENABLE_PROTECTION_MODE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530934 sap_protection_params->ap_protection_mode =
935 cfg_get(psoc, CFG_AP_PROTECTION_MODE);
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530936}
937
Bala Venkatesh6d537092018-09-25 10:38:36 +0530938#ifdef WLAN_FEATURE_11AX
Bala Venkatesh9296f092018-09-21 16:25:24 +0530939static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
Bala Venkatesh6d537092018-09-25 10:38:36 +0530940 struct wlan_mlme_cfg *mlme_cfg)
Bala Venkatesh9296f092018-09-21 16:25:24 +0530941{
Bala Venkatesh6d537092018-09-25 10:38:36 +0530942 uint32_t chan_width;
943 uint16_t value = 0;
944 struct wlan_mlme_he_caps *he_caps = &mlme_cfg->he_caps;
945
946 he_caps->dot11_he_cap.htc_he = cfg_default(CFG_HE_CONTROL);
947 he_caps->dot11_he_cap.twt_request = cfg_default(CFG_HE_TWT_REQUESTOR);
948 he_caps->dot11_he_cap.twt_responder = cfg_default(CFG_HE_TWT_RESPONDER);
949 he_caps->dot11_he_cap.fragmentation =
950 cfg_default(CFG_HE_FRAGMENTATION);
951 he_caps->dot11_he_cap.max_num_frag_msdu_amsdu_exp =
952 cfg_default(CFG_HE_MAX_FRAG_MSDU);
953 he_caps->dot11_he_cap.min_frag_size = cfg_default(CFG_HE_MIN_FRAG_SIZE);
954 he_caps->dot11_he_cap.trigger_frm_mac_pad =
955 cfg_default(CFG_HE_TRIG_PAD);
956 he_caps->dot11_he_cap.multi_tid_aggr_rx_supp =
957 cfg_default(CFG_HE_MTID_AGGR_RX);
958 he_caps->dot11_he_cap.he_link_adaptation =
959 cfg_default(CFG_HE_LINK_ADAPTATION);
960 he_caps->dot11_he_cap.all_ack = cfg_default(CFG_HE_ALL_ACK);
961 he_caps->dot11_he_cap.trigd_rsp_sched =
Bala Venkatesh9296f092018-09-21 16:25:24 +0530962 cfg_default(CFG_HE_TRIGD_RSP_SCHEDULING);
Bala Venkatesh6d537092018-09-25 10:38:36 +0530963 he_caps->dot11_he_cap.a_bsr = cfg_default(CFG_HE_BUFFER_STATUS_RPT);
964 he_caps->dot11_he_cap.broadcast_twt = cfg_default(CFG_HE_BCAST_TWT);
965 he_caps->dot11_he_cap.ba_32bit_bitmap = cfg_default(CFG_HE_BA_32BIT);
966 he_caps->dot11_he_cap.mu_cascade = cfg_default(CFG_HE_MU_CASCADING);
967 he_caps->dot11_he_cap.ack_enabled_multitid =
968 cfg_default(CFG_HE_MULTI_TID);
969 he_caps->dot11_he_cap.omi_a_ctrl = cfg_default(CFG_HE_OMI);
970 he_caps->dot11_he_cap.ofdma_ra = cfg_default(CFG_HE_OFDMA_RA);
971 he_caps->dot11_he_cap.max_ampdu_len_exp_ext =
972 cfg_default(CFG_HE_MAX_AMPDU_LEN);
973 he_caps->dot11_he_cap.amsdu_frag = cfg_default(CFG_HE_AMSDU_FRAG);
974 he_caps->dot11_he_cap.flex_twt_sched =
975 cfg_default(CFG_HE_FLEX_TWT_SCHED);
976 he_caps->dot11_he_cap.rx_ctrl_frame = cfg_default(CFG_HE_RX_CTRL);
977 he_caps->dot11_he_cap.bsrp_ampdu_aggr =
978 cfg_default(CFG_HE_BSRP_AMPDU_AGGR);
979 he_caps->dot11_he_cap.qtp = cfg_default(CFG_HE_QTP);
980 he_caps->dot11_he_cap.a_bqr = cfg_default(CFG_HE_A_BQR);
981 he_caps->dot11_he_cap.spatial_reuse_param_rspder =
982 cfg_default(CFG_HE_SR_RESPONDER);
983 he_caps->dot11_he_cap.ndp_feedback_supp =
984 cfg_default(CFG_HE_NDP_FEEDBACK_SUPP);
985 he_caps->dot11_he_cap.ops_supp = cfg_default(CFG_HE_OPS_SUPP);
986 he_caps->dot11_he_cap.amsdu_in_ampdu =
987 cfg_default(CFG_HE_AMSDU_IN_AMPDU);
988
989 chan_width = cfg_default(CFG_HE_CHAN_WIDTH);
990 he_caps->dot11_he_cap.chan_width_0 = HE_CH_WIDTH_GET_BIT(chan_width, 0);
991 he_caps->dot11_he_cap.chan_width_1 = HE_CH_WIDTH_GET_BIT(chan_width, 1);
992 he_caps->dot11_he_cap.chan_width_2 = HE_CH_WIDTH_GET_BIT(chan_width, 2);
993 he_caps->dot11_he_cap.chan_width_3 = HE_CH_WIDTH_GET_BIT(chan_width, 3);
994 he_caps->dot11_he_cap.chan_width_4 = HE_CH_WIDTH_GET_BIT(chan_width, 4);
995 he_caps->dot11_he_cap.chan_width_5 = HE_CH_WIDTH_GET_BIT(chan_width, 5);
996 he_caps->dot11_he_cap.chan_width_6 = HE_CH_WIDTH_GET_BIT(chan_width, 6);
997
998 he_caps->dot11_he_cap.multi_tid_aggr_tx_supp =
999 cfg_default(CFG_HE_MTID_AGGR_TX);
1000 he_caps->dot11_he_cap.he_sub_ch_sel_tx_supp =
1001 cfg_default(CFG_HE_SUB_CH_SEL_TX);
1002 he_caps->dot11_he_cap.ul_2x996_tone_ru_supp =
1003 cfg_default(CFG_HE_UL_2X996_RU);
1004 he_caps->dot11_he_cap.om_ctrl_ul_mu_data_dis_rx =
1005 cfg_default(CFG_HE_OM_CTRL_UL_MU_DIS_RX);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001006 he_caps->dot11_he_cap.he_dynamic_smps =
1007 cfg_default(CFG_HE_DYNAMIC_SMPS);
1008 he_caps->dot11_he_cap.punctured_sounding_supp =
1009 cfg_default(CFG_HE_PUNCTURED_SOUNDING);
1010 he_caps->dot11_he_cap.ht_vht_trg_frm_rx_supp =
1011 cfg_default(CFG_HE_HT_VHT_TRG_FRM_RX);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301012 he_caps->dot11_he_cap.rx_pream_puncturing =
1013 cfg_default(CFG_HE_RX_PREAM_PUNC);
1014 he_caps->dot11_he_cap.device_class =
1015 cfg_default(CFG_HE_CLASS_OF_DEVICE);
1016 he_caps->dot11_he_cap.ldpc_coding = cfg_default(CFG_HE_LDPC);
1017 he_caps->dot11_he_cap.he_1x_ltf_800_gi_ppdu =
1018 cfg_default(CFG_HE_LTF_PPDU);
1019 he_caps->dot11_he_cap.midamble_tx_rx_max_nsts =
1020 cfg_default(CFG_HE_MIDAMBLE_RX_MAX_NSTS);
1021 he_caps->dot11_he_cap.he_4x_ltf_3200_gi_ndp =
1022 cfg_default(CFG_HE_LTF_NDP);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001023 he_caps->dot11_he_cap.tb_ppdu_tx_stbc_lt_80mhz =
Bala Venkatesh6d537092018-09-25 10:38:36 +05301024 cfg_default(CFG_HE_TX_STBC_LT80);
1025 he_caps->dot11_he_cap.rx_stbc_lt_80mhz =
1026 cfg_default(CFG_HE_RX_STBC_LT80);
1027 he_caps->dot11_he_cap.doppler = cfg_default(CFG_HE_DOPPLER);
Harprit Chhabada09b50032019-02-13 14:48:01 -08001028 he_caps->dot11_he_cap.ul_mu =
1029 cfg_get(psoc, CFG_HE_UL_MUMIMO);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301030 he_caps->dot11_he_cap.dcm_enc_tx = cfg_default(CFG_HE_DCM_TX);
1031 he_caps->dot11_he_cap.dcm_enc_rx = cfg_default(CFG_HE_DCM_RX);
1032 he_caps->dot11_he_cap.ul_he_mu = cfg_default(CFG_HE_MU_PPDU);
1033 he_caps->dot11_he_cap.su_beamformer = cfg_default(CFG_HE_SU_BEAMFORMER);
1034 he_caps->dot11_he_cap.su_beamformee = cfg_default(CFG_HE_SU_BEAMFORMEE);
1035 he_caps->dot11_he_cap.mu_beamformer = cfg_default(CFG_HE_MU_BEAMFORMER);
1036 he_caps->dot11_he_cap.bfee_sts_lt_80 =
1037 cfg_default(CFG_HE_BFEE_STS_LT80);
1038 he_caps->dot11_he_cap.bfee_sts_gt_80 =
1039 cfg_default(CFG_HE_BFEE_STS_GT80);
1040 he_caps->dot11_he_cap.num_sounding_lt_80 =
1041 cfg_default(CFG_HE_NUM_SOUND_LT80);
1042 he_caps->dot11_he_cap.num_sounding_gt_80 =
1043 cfg_default(CFG_HE_NUM_SOUND_GT80);
1044 he_caps->dot11_he_cap.su_feedback_tone16 =
1045 cfg_default(CFG_HE_SU_FEED_TONE16);
1046 he_caps->dot11_he_cap.mu_feedback_tone16 =
1047 cfg_default(CFG_HE_MU_FEED_TONE16);
1048 he_caps->dot11_he_cap.codebook_su = cfg_default(CFG_HE_CODEBOOK_SU);
1049 he_caps->dot11_he_cap.codebook_mu = cfg_default(CFG_HE_CODEBOOK_MU);
1050 he_caps->dot11_he_cap.beamforming_feedback =
1051 cfg_default(CFG_HE_BFRM_FEED);
1052 he_caps->dot11_he_cap.he_er_su_ppdu = cfg_default(CFG_HE_ER_SU_PPDU);
1053 he_caps->dot11_he_cap.dl_mu_mimo_part_bw =
1054 cfg_default(CFG_HE_DL_PART_BW);
1055 he_caps->dot11_he_cap.ppet_present = cfg_default(CFG_HE_PPET_PRESENT);
1056 he_caps->dot11_he_cap.srp = cfg_default(CFG_HE_SRP);
1057 he_caps->dot11_he_cap.power_boost = cfg_default(CFG_HE_POWER_BOOST);
1058 he_caps->dot11_he_cap.he_ltf_800_gi_4x = cfg_default(CFG_HE_4x_LTF_GI);
1059 he_caps->dot11_he_cap.max_nc = cfg_default(CFG_HE_MAX_NC);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001060 he_caps->dot11_he_cap.tb_ppdu_tx_stbc_gt_80mhz =
Bala Venkatesh6d537092018-09-25 10:38:36 +05301061 cfg_default(CFG_HE_TX_STBC_GT80);
1062 he_caps->dot11_he_cap.rx_stbc_gt_80mhz =
1063 cfg_default(CFG_HE_RX_STBC_GT80);
1064 he_caps->dot11_he_cap.er_he_ltf_800_gi_4x =
1065 cfg_default(CFG_HE_ER_4x_LTF_GI);
1066 he_caps->dot11_he_cap.he_ppdu_20_in_40Mhz_2G =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301067 cfg_default(CFG_HE_PPDU_20_IN_40MHZ_2G);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301068 he_caps->dot11_he_cap.he_ppdu_20_in_160_80p80Mhz =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301069 cfg_default(CFG_HE_PPDU_20_IN_160_80P80MHZ);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301070 he_caps->dot11_he_cap.he_ppdu_80_in_160_80p80Mhz =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301071 cfg_default(CFG_HE_PPDU_80_IN_160_80P80MHZ);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301072 he_caps->dot11_he_cap.er_1x_he_ltf_gi =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301073 cfg_default(CFG_HE_ER_1X_HE_LTF_GI);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301074 he_caps->dot11_he_cap.midamble_tx_rx_1x_he_ltf =
1075 cfg_default(CFG_HE_MIDAMBLE_TXRX_1X_HE_LTF);
1076 he_caps->dot11_he_cap.dcm_max_bw = cfg_default(CFG_HE_DCM_MAX_BW);
1077 he_caps->dot11_he_cap.longer_than_16_he_sigb_ofdm_sym =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301078 cfg_default(CFG_HE_LONGER_16_SIGB_OFDM_SYM);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301079 he_caps->dot11_he_cap.non_trig_cqi_feedback =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301080 cfg_default(CFG_HE_NON_TRIG_CQI_FEEDBACK);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301081 he_caps->dot11_he_cap.tx_1024_qam_lt_242_tone_ru =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301082 cfg_default(CFG_HE_TX_1024_QAM_LT_242_RU);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301083 he_caps->dot11_he_cap.rx_1024_qam_lt_242_tone_ru =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301084 cfg_default(CFG_HE_RX_1024_QAM_LT_242_RU);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301085 he_caps->dot11_he_cap.rx_full_bw_su_he_mu_compress_sigb =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301086 cfg_default(CFG_HE_RX_FULL_BW_MU_CMPR_SIGB);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301087 he_caps->dot11_he_cap.rx_full_bw_su_he_mu_non_cmpr_sigb =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301088 cfg_default(CFG_HE_RX_FULL_BW_MU_NON_CMPR_SIGB);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301089 he_caps->dot11_he_cap.rx_he_mcs_map_lt_80 =
1090 cfg_default(CFG_HE_RX_MCS_MAP_LT_80);
1091 he_caps->dot11_he_cap.tx_he_mcs_map_lt_80 =
1092 cfg_default(CFG_HE_TX_MCS_MAP_LT_80);
1093 value = cfg_default(CFG_HE_RX_MCS_MAP_160);
1094 qdf_mem_copy(he_caps->dot11_he_cap.rx_he_mcs_map_160, &value,
1095 sizeof(uint16_t));
1096 value = cfg_default(CFG_HE_TX_MCS_MAP_160);
1097 qdf_mem_copy(he_caps->dot11_he_cap.tx_he_mcs_map_160, &value,
1098 sizeof(uint16_t));
1099 value = cfg_default(CFG_HE_RX_MCS_MAP_80_80);
1100 qdf_mem_copy(he_caps->dot11_he_cap.rx_he_mcs_map_80_80, &value,
1101 sizeof(uint16_t));
1102 value = cfg_default(CFG_HE_TX_MCS_MAP_80_80);
1103 qdf_mem_copy(he_caps->dot11_he_cap.tx_he_mcs_map_80_80, &value,
1104 sizeof(uint16_t));
Bala Venkatesh9296f092018-09-21 16:25:24 +05301105 he_caps->he_ops_basic_mcs_nss = cfg_default(CFG_HE_OPS_BASIC_MCS_NSS);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301106 he_caps->he_dynamic_fragmentation =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301107 cfg_get(psoc, CFG_HE_DYNAMIC_FRAGMENTATION);
1108 he_caps->enable_ul_mimo =
1109 cfg_get(psoc, CFG_ENABLE_UL_MIMO);
1110 he_caps->enable_ul_ofdm =
1111 cfg_get(psoc, CFG_ENABLE_UL_OFDMA);
1112 he_caps->he_sta_obsspd =
1113 cfg_get(psoc, CFG_HE_STA_OBSSPD);
1114 qdf_mem_zero(he_caps->he_ppet_2g, MLME_HE_PPET_LEN);
1115 qdf_mem_zero(he_caps->he_ppet_5g, MLME_HE_PPET_LEN);
1116}
Bala Venkatesh6d537092018-09-25 10:38:36 +05301117#else
1118static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
1119 struct wlan_mlme_cfg *mlme_cfg)
1120{
1121}
1122#endif
Bala Venkatesh9296f092018-09-21 16:25:24 +05301123
Arif Hussain178f35f2018-11-13 18:26:18 -08001124static void mlme_init_twt_cfg(struct wlan_objmgr_psoc *psoc,
1125 struct wlan_mlme_cfg_twt *twt_cfg)
1126{
1127 twt_cfg->is_twt_bcast_enabled = cfg_get(psoc, CFG_BCAST_TWT);
1128 twt_cfg->is_twt_enabled = cfg_get(psoc, CFG_ENABLE_TWT);
1129 twt_cfg->is_twt_responder_enabled = cfg_get(psoc, CFG_TWT_RESPONDER);
1130 twt_cfg->is_twt_requestor_enabled = cfg_get(psoc, CFG_TWT_REQUESTOR);
1131 twt_cfg->twt_congestion_timeout = cfg_get(psoc, CFG_TWT_CONGESTION_TIMEOUT);
1132}
1133
Srinivas Dasaried83dde2019-02-11 16:21:42 +05301134#ifdef WLAN_FEATURE_SAE
1135static bool is_sae_sap_enabled(struct wlan_objmgr_psoc *psoc)
1136{
1137 return cfg_get(psoc, CFG_IS_SAP_SAE_ENABLED);
1138}
1139#else
1140static bool is_sae_sap_enabled(struct wlan_objmgr_psoc *psoc)
1141{
1142 return false;
1143}
1144#endif
1145
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301146static void mlme_init_sap_cfg(struct wlan_objmgr_psoc *psoc,
1147 struct wlan_mlme_cfg_sap *sap_cfg)
Bala Venkatesh100d7422018-08-27 11:42:21 +05301148{
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301149 uint8_t *ssid;
1150
1151 ssid = cfg_default(CFG_SSID);
Srinivas Girigowdab8fdc642019-03-19 15:33:03 -07001152 qdf_mem_zero(sap_cfg->cfg_ssid, WLAN_SSID_MAX_LEN);
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301153 sap_cfg->cfg_ssid_len = STR_SSID_DEFAULT_LEN;
1154 qdf_mem_copy(sap_cfg->cfg_ssid, ssid, STR_SSID_DEFAULT_LEN);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301155 sap_cfg->beacon_interval = cfg_get(psoc, CFG_BEACON_INTERVAL);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301156 sap_cfg->dtim_interval = cfg_default(CFG_DTIM_PERIOD);
1157 sap_cfg->listen_interval = cfg_default(CFG_LISTEN_INTERVAL);
1158 sap_cfg->sap_11g_policy = cfg_default(CFG_11G_ONLY_POLICY);
1159 sap_cfg->assoc_sta_limit = cfg_default(CFG_ASSOC_STA_LIMIT);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301160 sap_cfg->enable_lte_coex = cfg_get(psoc, CFG_ENABLE_LTE_COEX);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301161 sap_cfg->rmc_action_period_freq =
1162 cfg_default(CFG_RMC_ACTION_PERIOD_FREQUENCY);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301163 sap_cfg->rate_tx_mgmt = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT);
1164 sap_cfg->rate_tx_mgmt_2g = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT_2G);
1165 sap_cfg->rate_tx_mgmt_5g = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT_5G);
1166 sap_cfg->tele_bcn_wakeup_en = cfg_get(psoc, CFG_TELE_BCN_WAKEUP_EN);
1167 sap_cfg->tele_bcn_max_li = cfg_get(psoc, CFG_TELE_BCN_MAX_LI);
1168 sap_cfg->sap_get_peer_info = cfg_get(psoc, CFG_SAP_GET_PEER_INFO);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301169 sap_cfg->sap_allow_all_chan_param_name =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301170 cfg_get(psoc, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM);
1171 sap_cfg->sap_max_no_peers = cfg_get(psoc, CFG_SAP_MAX_NO_PEERS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301172 sap_cfg->sap_max_offload_peers =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301173 cfg_get(psoc, CFG_SAP_MAX_OFFLOAD_PEERS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301174 sap_cfg->sap_max_offload_reorder_buffs =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301175 cfg_get(psoc, CFG_SAP_MAX_OFFLOAD_REORDER_BUFFS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301176 sap_cfg->sap_ch_switch_beacon_cnt =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301177 cfg_get(psoc, CFG_SAP_CH_SWITCH_BEACON_CNT);
1178 sap_cfg->sap_ch_switch_mode = cfg_get(psoc, CFG_SAP_CH_SWITCH_MODE);
1179 sap_cfg->sap_internal_restart =
1180 cfg_get(psoc, CFG_SAP_INTERNAL_RESTART);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301181 sap_cfg->chan_switch_hostapd_rate_enabled_name =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301182 cfg_get(psoc, CFG_CHAN_SWITCH_HOSTAPD_RATE_ENABLED_NAME);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301183 sap_cfg->reduced_beacon_interval =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301184 cfg_get(psoc, CFG_REDUCED_BEACON_INTERVAL);
Bala Venkatesh46e29032018-11-14 18:24:55 +05301185 sap_cfg->max_li_modulated_dtim_time =
1186 cfg_get(psoc, CFG_MAX_LI_MODULATED_DTIM);
1187 sap_cfg->country_code_priority =
1188 cfg_get(psoc, CFG_COUNTRY_CODE_PRIORITY);
1189 sap_cfg->sap_pref_chan_location =
1190 cfg_get(psoc, CFG_SAP_PREF_CHANNEL_LOCATION);
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301191 sap_cfg->sap_force_11n_for_11ac =
1192 cfg_get(psoc, CFG_SAP_FORCE_11N_FOR_11AC);
1193 sap_cfg->go_force_11n_for_11ac =
1194 cfg_get(psoc, CFG_GO_FORCE_11N_FOR_11AC);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301195 sap_cfg->ap_random_bssid_enable =
1196 cfg_get(psoc, CFG_AP_ENABLE_RANDOM_BSSID);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001197 sap_cfg->sap_mcc_chnl_avoid =
1198 cfg_get(psoc, CFG_SAP_MCC_CHANNEL_AVOIDANCE);
Sandeep Puligilla34618782019-01-04 17:42:42 -08001199 sap_cfg->sap_11ac_override =
1200 cfg_get(psoc, CFG_SAP_11AC_OVERRIDE);
1201 sap_cfg->go_11ac_override =
1202 cfg_get(psoc, CFG_GO_11AC_OVERRIDE);
Srinivas Dasaried83dde2019-02-11 16:21:42 +05301203 sap_cfg->sap_sae_enabled = is_sae_sap_enabled(psoc);
Harprit Chhabadae5742552019-03-21 16:28:48 -07001204 sap_cfg->is_sap_bcast_deauth_enabled =
1205 cfg_get(psoc, CFG_IS_SAP_BCAST_DEAUTH_ENABLED);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301206}
1207
Wu Gaod8f3db02018-07-24 19:18:45 +08001208static void mlme_init_obss_ht40_cfg(struct wlan_objmgr_psoc *psoc,
1209 struct wlan_mlme_obss_ht40 *obss_ht40)
1210{
1211 obss_ht40->active_dwelltime =
1212 cfg_get(psoc, CFG_OBSS_HT40_SCAN_ACTIVE_DWELL_TIME);
1213 obss_ht40->passive_dwelltime =
1214 cfg_get(psoc, CFG_OBSS_HT40_SCAN_PASSIVE_DWELL_TIME);
1215 obss_ht40->width_trigger_interval =
1216 cfg_get(psoc, CFG_OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL);
1217 obss_ht40->passive_per_channel = (uint32_t)
1218 cfg_default(CFG_OBSS_HT40_SCAN_PASSIVE_TOTAL_PER_CHANNEL);
1219 obss_ht40->active_per_channel = (uint32_t)
1220 cfg_default(CFG_OBSS_HT40_SCAN_ACTIVE_TOTAL_PER_CHANNEL);
1221 obss_ht40->width_trans_delay = (uint32_t)
1222 cfg_default(CFG_OBSS_HT40_WIDTH_CH_TRANSITION_DELAY);
1223 obss_ht40->scan_activity_threshold = (uint32_t)
1224 cfg_default(CFG_OBSS_HT40_SCAN_ACTIVITY_THRESHOLD);
Wu Gaofc81ecf2018-11-22 11:38:41 +08001225 obss_ht40->is_override_ht20_40_24g =
1226 cfg_get(psoc, CFG_OBSS_HT40_OVERRIDE_HT40_20_24GHZ);
Wu Gao2255ea22019-01-04 15:44:35 +08001227 obss_ht40->obss_detection_offload_enabled =
1228 (bool)cfg_default(CFG_OBSS_DETECTION_OFFLOAD);
1229 obss_ht40->obss_color_collision_offload_enabled =
1230 (bool)cfg_default(CFG_OBSS_COLOR_COLLISION_OFFLOAD);
Wu Gaod8f3db02018-07-24 19:18:45 +08001231}
Wu Gaofc81ecf2018-11-22 11:38:41 +08001232
Harprit Chhabadabec6de42018-09-10 10:21:15 -07001233static void mlme_init_threshold_cfg(struct wlan_objmgr_psoc *psoc,
1234 struct wlan_mlme_threshold *threshold)
1235{
1236 threshold->rts_threshold = cfg_get(psoc, CFG_RTS_THRESHOLD);
1237 threshold->frag_threshold = cfg_get(psoc, CFG_FRAG_THRESHOLD);
1238}
Wu Gaod8f3db02018-07-24 19:18:45 +08001239
gaurank kathpaliac0d08412019-09-22 13:34:53 +05301240static bool
1241mlme_is_freq_present_in_list(struct acs_weight *normalize_weight_chan_list,
1242 uint8_t num_freq, uint32_t freq, uint8_t *index)
1243{
1244 uint8_t i;
1245
1246 for (i = 0; i < num_freq; i++) {
1247 if (normalize_weight_chan_list[i].chan_freq == freq) {
1248 *index = i;
1249 return true;
1250 }
1251 }
1252
1253 return false;
1254}
1255
1256static void
1257mlme_acs_parse_weight_list(struct wlan_objmgr_psoc *psoc,
1258 struct wlan_mlme_acs *acs)
1259{
1260 char *acs_weight, *str1, *str2 = NULL, *acs_weight_temp, is_range = '-';
1261 int freq1, freq2, normalize_factor;
1262 uint8_t num_acs_weight = 0, num_acs_weight_range = 0, index = 0;
1263 struct acs_weight *weight_list = acs->normalize_weight_chan;
1264 struct acs_weight_range *range_list = acs->normalize_weight_range;
1265
1266 if (!qdf_str_len(cfg_get(psoc, CFG_NORMALIZE_ACS_WEIGHT)))
1267 return;
1268
1269 acs_weight = qdf_mem_malloc(ACS_WEIGHT_MAX_STR_LEN);
1270
1271 if (!acs_weight)
1272 return;
1273
1274 qdf_mem_copy(acs_weight, cfg_get(psoc, CFG_NORMALIZE_ACS_WEIGHT),
1275 ACS_WEIGHT_MAX_STR_LEN);
1276 acs_weight_temp = acs_weight;
1277
1278 while(acs_weight_temp) {
1279 str1 = strsep(&acs_weight_temp, ",");
1280 if (!str1)
1281 goto end;
1282 freq1 = 0;
1283 freq2 = 0;
1284 if (strchr(str1, is_range)) {
1285 str2 = strsep(&str1, "-");
1286 sscanf(str2, "%d", &freq1);
1287 sscanf(str1, "%d", &freq2);
1288 strsep(&str1, "=");
1289 sscanf(str1, "%d", &normalize_factor);
1290
1291 if (num_acs_weight_range == MAX_ACS_WEIGHT_RANGE)
1292 continue;
1293 range_list[num_acs_weight_range].normalize_weight =
1294 normalize_factor;
1295 range_list[num_acs_weight_range].start_freq = freq1;
1296 range_list[num_acs_weight_range++].end_freq = freq2;
1297 } else {
1298 sscanf(str1, "%d", &freq1);
1299 strsep(&str1, "=");
1300 sscanf(str1, "%d", &normalize_factor);
1301 if (mlme_is_freq_present_in_list(weight_list,
1302 num_acs_weight, freq1,
1303 &index)) {
1304 weight_list[index].normalize_weight =
1305 normalize_factor;
1306 } else {
1307 if (num_acs_weight == QDF_MAX_NUM_CHAN)
1308 continue;
1309
1310 weight_list[num_acs_weight].chan_freq = freq1;
1311 weight_list[num_acs_weight++].normalize_weight =
1312 normalize_factor;
1313 }
1314 }
1315 }
1316
1317 acs->normalize_weight_num_chan = num_acs_weight;
1318 acs->num_weight_range = num_acs_weight_range;
1319
1320end:
1321 qdf_mem_free(acs_weight);
1322}
1323
Harprit Chhabadabd027a02018-10-30 13:02:22 -07001324static void mlme_init_acs_cfg(struct wlan_objmgr_psoc *psoc,
1325 struct wlan_mlme_acs *acs)
1326{
1327 acs->is_acs_with_more_param =
1328 cfg_get(psoc, CFG_ACS_WITH_MORE_PARAM);
1329 acs->auto_channel_select_weight =
1330 cfg_get(psoc, CFG_AUTO_CHANNEL_SELECT_WEIGHT);
1331 acs->is_vendor_acs_support =
1332 cfg_get(psoc, CFG_USER_AUTO_CHANNEL_SELECTION);
1333 acs->is_acs_support_for_dfs_ltecoex =
1334 cfg_get(psoc, CFG_USER_ACS_DFS_LTE);
1335 acs->is_external_acs_policy =
1336 cfg_get(psoc, CFG_EXTERNAL_ACS_POLICY);
gaurank kathpaliac0d08412019-09-22 13:34:53 +05301337
1338 mlme_acs_parse_weight_list(psoc, acs);
Harprit Chhabadabd027a02018-10-30 13:02:22 -07001339}
1340
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001341QDF_STATUS mlme_init_ibss_cfg(struct wlan_objmgr_psoc *psoc,
1342 struct wlan_mlme_ibss_cfg *ibss_cfg)
1343{
1344 if (!ibss_cfg)
1345 return QDF_STATUS_E_FAILURE;
1346
1347 ibss_cfg->auto_bssid = cfg_default(CFG_IBSS_AUTO_BSSID);
1348 ibss_cfg->atim_win_size = cfg_get(psoc, CFG_IBSS_ATIM_WIN_SIZE);
1349 ibss_cfg->adhoc_ch_5g = cfg_get(psoc, CFG_IBSS_ADHOC_CHANNEL_5GHZ);
1350 ibss_cfg->adhoc_ch_2g = cfg_get(psoc, CFG_IBSS_ADHOC_CHANNEL_24GHZ);
1351 ibss_cfg->coalesing_enable = cfg_get(psoc, CFG_IBSS_COALESING);
1352 ibss_cfg->power_save_allow = cfg_get(psoc,
1353 CFG_IBSS_IS_POWER_SAVE_ALLOWED);
1354 ibss_cfg->power_collapse_allow =
1355 cfg_get(psoc, CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED);
1356 ibss_cfg->awake_on_tx_rx = cfg_get(psoc, CFG_IBSS_AWAKE_ON_TX_RX);
1357 ibss_cfg->inactivity_bcon_count =
1358 cfg_get(psoc, CFG_IBSS_INACTIVITY_TIME);
1359 ibss_cfg->txsp_end_timeout =
1360 cfg_get(psoc, CFG_IBSS_TXSP_END_INACTIVITY);
1361 ibss_cfg->ps_warm_up_time = cfg_get(psoc, CFG_IBSS_PS_WARMUP_TIME);
1362 ibss_cfg->ps_1rx_chain_atim_win =
1363 cfg_get(psoc, CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW);
1364 qdf_copy_macaddr(&ibss_cfg->bssid, (struct qdf_mac_addr *)
1365 &cfg_get(psoc, CFG_IBSS_BSSID));
1366
1367 return QDF_STATUS_SUCCESS;
1368}
1369
Jiachao Wu3304d6b2018-08-24 18:24:34 +08001370static void
1371mlme_init_product_details_cfg(struct wlan_mlme_product_details_cfg
1372 *product_details)
1373{
1374 qdf_str_lcopy(product_details->manufacturer_name,
1375 cfg_default(CFG_MFR_NAME),
1376 sizeof(product_details->manufacturer_name));
1377 qdf_str_lcopy(product_details->manufacture_product_name,
1378 cfg_default(CFG_MFR_PRODUCT_NAME),
1379 sizeof(product_details->manufacture_product_name));
1380 qdf_str_lcopy(product_details->manufacture_product_version,
1381 cfg_default(CFG_MFR_PRODUCT_VERSION),
1382 sizeof(product_details->manufacture_product_version));
1383 qdf_str_lcopy(product_details->model_name,
1384 cfg_default(CFG_MODEL_NAME),
1385 sizeof(product_details->model_name));
1386 qdf_str_lcopy(product_details->model_number,
1387 cfg_default(CFG_MODEL_NUMBER),
1388 sizeof(product_details->model_number));
1389}
1390
Wu Gao406c53c2018-09-10 13:51:37 +08001391static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc,
1392 struct wlan_mlme_sta_cfg *sta)
1393{
1394 sta->sta_keep_alive_period =
1395 cfg_get(psoc, CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
1396 sta->tgt_gtx_usr_cfg =
1397 cfg_get(psoc, CFG_TGT_GTX_USR_CFG);
1398 sta->pmkid_modes =
1399 cfg_get(psoc, CFG_PMKID_MODES);
1400 sta->ignore_peer_erp_info =
1401 cfg_get(psoc, CFG_IGNORE_PEER_ERP_INFO);
1402 sta->sta_prefer_80mhz_over_160mhz =
1403 cfg_get(psoc, CFG_STA_PREFER_80MHZ_OVER_160MHZ);
1404 sta->enable_5g_ebt =
1405 cfg_get(psoc, CFG_PPS_ENABLE_5G_EBT);
1406 sta->deauth_before_connection =
1407 cfg_get(psoc, CFG_ENABLE_DEAUTH_BEFORE_CONNECTION);
1408 sta->dot11p_mode =
1409 cfg_get(psoc, CFG_DOT11P_MODE);
1410 sta->enable_go_cts2self_for_sta =
1411 cfg_get(psoc, CFG_ENABLE_GO_CTS2SELF_FOR_STA);
1412 sta->qcn_ie_support =
1413 cfg_get(psoc, CFG_QCN_IE_SUPPORT);
1414 sta->fils_max_chan_guard_time =
1415 cfg_get(psoc, CFG_FILS_MAX_CHAN_GUARD_TIME);
1416 sta->force_rsne_override =
1417 cfg_get(psoc, CFG_FORCE_RSNE_OVERRIDE);
1418 sta->single_tid =
1419 cfg_get(psoc, CFG_SINGLE_TID_RC);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001420 sta->sta_miracast_mcc_rest_time =
1421 cfg_get(psoc, CFG_STA_MCAST_MCC_REST_TIME);
Wu Gao406c53c2018-09-10 13:51:37 +08001422 sta->wait_cnf_timeout =
1423 (uint32_t)cfg_default(CFG_WT_CNF_TIMEOUT);
1424 sta->current_rssi =
1425 (uint32_t)cfg_default(CFG_CURRENT_RSSI);
Wu Gao4f8938a2018-11-26 11:49:00 +08001426 sta->allow_tpc_from_ap = cfg_get(psoc, CFG_TX_POWER_CTRL);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301427 sta->sta_keepalive_method =
1428 cfg_get(psoc, CFG_STA_KEEPALIVE_METHOD);
Wu Gao406c53c2018-09-10 13:51:37 +08001429}
1430
Arif Hussaincca60432018-12-03 19:45:12 -08001431static void mlme_init_stats_cfg(struct wlan_objmgr_psoc *psoc,
1432 struct wlan_mlme_stats_cfg *stats)
1433{
1434 stats->stats_periodic_display_time =
1435 cfg_get(psoc, CFG_PERIODIC_STATS_DISPLAY_TIME);
1436 stats->stats_link_speed_rssi_high =
1437 cfg_get(psoc, CFG_LINK_SPEED_RSSI_HIGH);
1438 stats->stats_link_speed_rssi_med =
1439 cfg_get(psoc, CFG_LINK_SPEED_RSSI_MID);
1440 stats->stats_link_speed_rssi_low =
1441 cfg_get(psoc, CFG_LINK_SPEED_RSSI_LOW);
1442 stats->stats_report_max_link_speed_rssi =
1443 cfg_get(psoc, CFG_REPORT_MAX_LINK_SPEED);
1444}
1445
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301446#ifdef WLAN_ADAPTIVE_11R
1447/**
1448 * mlme_init_adaptive_11r_cfg() - initialize enable_adaptive_11r
1449 * flag
1450 * @psoc: Pointer to PSOC
1451 * @lfr: pointer to mlme lfr config
1452 *
1453 * Return: None
1454 */
1455static void
1456mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1457 struct wlan_mlme_lfr_cfg *lfr)
1458{
1459 lfr->enable_adaptive_11r = cfg_get(psoc, CFG_ADAPTIVE_11R);
1460}
1461
1462#else
1463static inline void
1464mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1465 struct wlan_mlme_lfr_cfg *lfr)
1466{
1467}
1468#endif
1469
Wu Gao5d23d782018-11-08 16:09:47 +08001470#ifdef WLAN_FEATURE_ROAM_OFFLOAD
1471static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1472 struct wlan_mlme_lfr_cfg *lfr)
1473{
1474 lfr->lfr3_roaming_offload =
1475 cfg_get(psoc, CFG_LFR3_ROAMING_OFFLOAD);
Pragaspathi Thilagaraj14f72de2019-03-28 23:12:51 +05301476
1477 lfr->enable_disconnect_roam_offload =
1478 cfg_get(psoc, CFG_LFR_ENABLE_DISCONNECT_ROAM);
1479 lfr->enable_idle_roam =
1480 cfg_get(psoc, CFG_LFR_ENABLE_IDLE_ROAM);
1481 lfr->idle_roam_rssi_delta =
1482 cfg_get(psoc, CFG_LFR_IDLE_ROAM_RSSI_DELTA);
1483 lfr->idle_roam_inactive_time =
1484 cfg_get(psoc, CFG_LFR_IDLE_ROAM_INACTIVE_TIME);
1485 lfr->idle_data_packet_count =
1486 cfg_get(psoc, CFG_LFR_IDLE_ROAM_PACKET_COUNT);
1487 lfr->idle_roam_min_rssi = cfg_get(psoc, CFG_LFR_IDLE_ROAM_MIN_RSSI);
1488 lfr->idle_roam_band = cfg_get(psoc, CFG_LFR_IDLE_ROAM_BAND);
Wu Gao5d23d782018-11-08 16:09:47 +08001489}
1490
1491#else
1492static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1493 struct wlan_mlme_lfr_cfg *lfr)
1494{
1495}
1496
1497#endif
1498
1499#ifdef FEATURE_WLAN_ESE
1500static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1501 struct wlan_mlme_lfr_cfg *lfr)
1502{
1503 lfr->ese_enabled = cfg_get(psoc, CFG_LFR_ESE_FEATURE_ENABLED);
1504}
1505#else
1506static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1507 struct wlan_mlme_lfr_cfg *lfr)
1508{
1509}
1510#endif
1511
Wu Gao6294afc2019-01-05 00:00:58 +08001512#ifdef FEATURE_LFR_SUBNET_DETECTION
1513static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1514 struct wlan_mlme_lfr_cfg *lfr)
1515{
1516 lfr->enable_lfr_subnet_detection =
1517 cfg_get(psoc, CFG_LFR3_ENABLE_SUBNET_DETECTION);
1518}
1519#else
1520static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1521 struct wlan_mlme_lfr_cfg *lfr)
1522{
1523}
1524#endif
1525
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301526static void
1527mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc,
1528 struct bss_load_trigger *bss_load_trig)
1529{
1530 bss_load_trig->enabled =
1531 cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM);
1532 bss_load_trig->threshold = cfg_get(psoc, CFG_BSS_LOAD_THRESHOLD);
Pragaspathi Thilagaraj39d61602018-12-24 14:46:53 +05301533 bss_load_trig->sample_time = cfg_get(psoc, CFG_BSS_LOAD_SAMPLE_TIME);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301534 bss_load_trig->rssi_threshold_5ghz =
1535 cfg_get(psoc, CFG_BSS_LOAD_TRIG_5G_RSSI_THRES);
1536 bss_load_trig->rssi_threshold_24ghz =
1537 cfg_get(psoc, CFG_BSS_LOAD_TRIG_2G_RSSI_THRES);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301538}
1539
Srinivas Dasari1ec74522019-09-19 14:16:29 +05301540void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc,
1541 struct wlan_mlme_lfr_cfg *lfr)
1542{
1543 /* Restore the params set through SETDFSSCANMODE */
1544 lfr->roaming_dfs_channel =
1545 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1546
1547 /* Restore the params set through SETWESMODE */
1548 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
1549}
1550
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301551static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
1552 struct wlan_mlme_lfr_cfg *lfr)
Wu Gao55f21712018-09-17 10:57:49 +08001553{
Wu Gaoe7687f42018-12-10 19:43:00 +08001554 qdf_size_t neighbor_scan_chan_list_num = 0;
Wu Gao5d23d782018-11-08 16:09:47 +08001555
Wu Gao55f21712018-09-17 10:57:49 +08001556 lfr->mawc_roam_enabled =
1557 cfg_get(psoc, CFG_LFR_MAWC_ROAM_ENABLED);
1558 lfr->enable_fast_roam_in_concurrency =
1559 cfg_get(psoc, CFG_LFR_ENABLE_FAST_ROAM_IN_CONCURRENCY);
Wu Gao55f21712018-09-17 10:57:49 +08001560 lfr->early_stop_scan_enable =
1561 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_ENABLE);
Wu Gao55f21712018-09-17 10:57:49 +08001562 lfr->enable_5g_band_pref =
1563 cfg_get(psoc, CFG_LFR_ENABLE_5G_BAND_PREF);
Wu Gao5d23d782018-11-08 16:09:47 +08001564 lfr->lfr_enabled = cfg_get(psoc, CFG_LFR_FEATURE_ENABLED);
1565 lfr->mawc_enabled = cfg_get(psoc, CFG_LFR_MAWC_FEATURE_ENABLED);
1566 lfr->fast_transition_enabled =
1567 cfg_get(psoc, CFG_LFR_FAST_TRANSITION_ENABLED);
1568 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
Wu Gao55f21712018-09-17 10:57:49 +08001569 lfr->mawc_roam_traffic_threshold =
1570 cfg_get(psoc, CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD);
1571 lfr->mawc_roam_ap_rssi_threshold =
1572 cfg_get(psoc, CFG_LFR_MAWC_ROAM_AP_RSSI_THRESHOLD);
1573 lfr->mawc_roam_rssi_high_adjust =
1574 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_HIGH_ADJUST);
1575 lfr->mawc_roam_rssi_low_adjust =
1576 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_LOW_ADJUST);
1577 lfr->roam_rssi_abs_threshold =
1578 cfg_get(psoc, CFG_LFR_ROAM_RSSI_ABS_THRESHOLD);
1579 lfr->rssi_threshold_offset_5g =
1580 cfg_get(psoc, CFG_LFR_5G_RSSI_THRESHOLD_OFFSET);
1581 lfr->early_stop_scan_min_threshold =
1582 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MIN_THRESHOLD);
1583 lfr->early_stop_scan_max_threshold =
1584 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MAX_THRESHOLD);
1585 lfr->first_scan_bucket_threshold =
1586 cfg_get(psoc, CFG_LFR_FIRST_SCAN_BUCKET_THRESHOLD);
1587 lfr->roam_dense_traffic_threshold =
1588 cfg_get(psoc, CFG_LFR_ROAM_DENSE_TRAFFIC_THRESHOLD);
1589 lfr->roam_dense_rssi_thre_offset =
1590 cfg_get(psoc, CFG_LFR_ROAM_DENSE_RSSI_THRE_OFFSET);
1591 lfr->roam_dense_min_aps =
1592 cfg_get(psoc, CFG_LFR_ROAM_DENSE_MIN_APS);
1593 lfr->roam_bg_scan_bad_rssi_threshold =
1594 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_THRESHOLD);
1595 lfr->roam_bg_scan_client_bitmap =
1596 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_CLIENT_BITMAP);
1597 lfr->roam_bg_scan_bad_rssi_offset_2g =
1598 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_OFFSET_2G);
1599 lfr->adaptive_roamscan_dwell_mode =
1600 cfg_get(psoc, CFG_LFR_ADAPTIVE_ROAMSCAN_DWELL_MODE);
1601 lfr->per_roam_enable =
1602 cfg_get(psoc, CFG_LFR_PER_ROAM_ENABLE);
1603 lfr->per_roam_config_high_rate_th =
1604 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_HIGH_RATE_TH);
1605 lfr->per_roam_config_low_rate_th =
1606 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_LOW_RATE_TH);
1607 lfr->per_roam_config_rate_th_percent =
1608 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_RATE_TH_PERCENT);
1609 lfr->per_roam_rest_time =
1610 cfg_get(psoc, CFG_LFR_PER_ROAM_REST_TIME);
1611 lfr->per_roam_monitor_time =
1612 cfg_get(psoc, CFG_LFR_PER_ROAM_MONITOR_TIME);
1613 lfr->per_roam_min_candidate_rssi =
1614 cfg_get(psoc, CFG_LFR_PER_ROAM_MIN_CANDIDATE_RSSI);
1615 lfr->lfr3_disallow_duration =
1616 cfg_get(psoc, CFG_LFR3_ROAM_DISALLOW_DURATION);
1617 lfr->lfr3_rssi_channel_penalization =
1618 cfg_get(psoc, CFG_LFR3_ROAM_RSSI_CHANNEL_PENALIZATION);
1619 lfr->lfr3_num_disallowed_aps =
1620 cfg_get(psoc, CFG_LFR3_ROAM_NUM_DISALLOWED_APS);
Wu Gaob056db62018-12-14 16:50:13 +08001621
1622 if (lfr->enable_5g_band_pref) {
1623 lfr->rssi_boost_threshold_5g =
1624 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_THRESHOLD);
1625 lfr->rssi_boost_factor_5g =
1626 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_FACTOR);
1627 lfr->max_rssi_boost_5g =
1628 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_BOOST);
1629 lfr->rssi_penalize_threshold_5g =
1630 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_THRESHOLD);
1631 lfr->rssi_penalize_factor_5g =
1632 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_FACTOR);
1633 lfr->max_rssi_penalize_5g =
1634 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_PENALIZE);
1635 }
1636
Wu Gao55f21712018-09-17 10:57:49 +08001637 lfr->max_num_pre_auth = (uint32_t)
1638 cfg_default(CFG_LFR_MAX_NUM_PRE_AUTH);
Sourav Mohapatra5ba8da32018-07-16 09:21:15 +05301639 lfr->roam_preauth_no_ack_timeout =
1640 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_NO_ACK_TIMEOUT);
1641 lfr->roam_preauth_retry_count =
1642 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_RETRY_COUNT);
Wu Gao5d23d782018-11-08 16:09:47 +08001643 lfr->roam_rssi_diff = cfg_get(psoc, CFG_LFR_ROAM_RSSI_DIFF);
1644 lfr->roam_scan_offload_enabled =
1645 cfg_get(psoc, CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
1646 lfr->neighbor_scan_timer_period =
1647 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_TIMER_PERIOD);
1648 lfr->neighbor_scan_min_timer_period =
1649 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_TIMER_PERIOD);
1650 lfr->neighbor_lookup_rssi_threshold =
1651 cfg_get(psoc, CFG_LFR_NEIGHBOR_LOOKUP_RSSI_THRESHOLD);
1652 lfr->opportunistic_scan_threshold_diff =
1653 cfg_get(psoc, CFG_LFR_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF);
1654 lfr->roam_rescan_rssi_diff =
1655 cfg_get(psoc, CFG_LFR_ROAM_RESCAN_RSSI_DIFF);
1656 lfr->neighbor_scan_min_chan_time =
1657 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_CHAN_TIME);
1658 lfr->neighbor_scan_max_chan_time =
1659 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MAX_CHAN_TIME);
1660 lfr->neighbor_scan_results_refresh_period =
1661 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD);
1662 lfr->empty_scan_refresh_period =
1663 cfg_get(psoc, CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD);
1664 lfr->roam_bmiss_first_bcnt =
1665 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FIRST_BCNT);
1666 lfr->roam_bmiss_final_bcnt =
1667 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FINAL_BCNT);
1668 lfr->roam_beacon_rssi_weight =
1669 cfg_get(psoc, CFG_LFR_ROAM_BEACON_RSSI_WEIGHT);
1670 lfr->roaming_dfs_channel =
1671 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1672 lfr->roam_scan_hi_rssi_maxcount =
1673 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_MAXCOUNT);
1674 lfr->roam_scan_hi_rssi_delta =
1675 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELTA);
1676 lfr->roam_scan_hi_rssi_delay =
1677 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELAY);
1678 lfr->roam_scan_hi_rssi_ub =
1679 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_UB);
1680 lfr->roam_prefer_5ghz =
1681 cfg_get(psoc, CFG_LFR_ROAM_PREFER_5GHZ);
1682 lfr->roam_intra_band =
1683 cfg_get(psoc, CFG_LFR_ROAM_INTRA_BAND);
1684 lfr->roam_scan_home_away_time =
1685 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HOME_AWAY_TIME);
1686 lfr->roam_scan_n_probes =
1687 cfg_get(psoc, CFG_LFR_ROAM_SCAN_N_PROBES);
1688 lfr->delay_before_vdev_stop =
1689 cfg_get(psoc, CFG_LFR_DELAY_BEFORE_VDEV_STOP);
Wu Gaoe7687f42018-12-10 19:43:00 +08001690 qdf_uint8_array_parse(cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_CHANNEL_LIST),
Wu Gao5d23d782018-11-08 16:09:47 +08001691 lfr->neighbor_scan_channel_list,
Wu Gao7f70e382019-05-31 14:23:48 +08001692 CFG_VALID_CHANNEL_LIST_LEN,
Wu Gao5d23d782018-11-08 16:09:47 +08001693 &neighbor_scan_chan_list_num);
1694 lfr->neighbor_scan_channel_list_num =
1695 (uint8_t)neighbor_scan_chan_list_num;
Wu Gao6294afc2019-01-05 00:00:58 +08001696 lfr->ho_delay_for_rx =
1697 cfg_get(psoc, CFG_LFR3_ROAM_HO_DELAY_FOR_RX);
1698 lfr->min_delay_btw_roam_scans =
1699 cfg_get(psoc, CFG_LFR_MIN_DELAY_BTW_ROAM_SCAN);
1700 lfr->roam_trigger_reason_bitmask =
1701 cfg_get(psoc, CFG_LFR_ROAM_SCAN_TRIGGER_REASON_BITMASK);
1702 lfr->enable_ftopen =
1703 cfg_get(psoc, CFG_LFR_ROAM_FT_OPEN_ENABLE);
1704 lfr->roam_force_rssi_trigger =
1705 cfg_get(psoc, CFG_LFR_ROAM_FORCE_RSSI_TRIGGER);
Abhinav Kumar990fea62019-02-14 12:38:38 +05301706 lfr->roaming_scan_policy =
1707 cfg_get(psoc, CFG_ROAM_SCAN_SCAN_POLICY);
1708
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301709 lfr->roam_scan_inactivity_time =
1710 cfg_get(psoc, CFG_ROAM_SCAN_INACTIVITY_TIME);
1711 lfr->roam_inactive_data_packet_count =
1712 cfg_get(psoc, CFG_ROAM_INACTIVE_COUNT);
1713 lfr->roam_scan_period_after_inactivity =
1714 cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
Pragaspathi Thilagarajeb367282019-02-19 00:42:28 +05301715 lfr->fw_akm_bitmap = 0;
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301716
Wu Gao5d23d782018-11-08 16:09:47 +08001717 mlme_init_roam_offload_cfg(psoc, lfr);
1718 mlme_init_ese_cfg(psoc, lfr);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301719 mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig);
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301720 mlme_init_adaptive_11r_cfg(psoc, lfr);
Wu Gao6294afc2019-01-05 00:00:58 +08001721 mlme_init_subnet_detection(psoc, lfr);
Wu Gao55f21712018-09-17 10:57:49 +08001722}
1723
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301724static uint32_t
1725mlme_limit_max_per_index_score(uint32_t per_index_score)
1726{
1727 uint8_t i, score;
1728
1729 for (i = 0; i < MAX_INDEX_PER_INI; i++) {
1730 score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i);
1731 if (score > MAX_INDEX_SCORE)
1732 WLAN_SET_SCORE_PERCENTAGE(per_index_score,
1733 MAX_INDEX_SCORE, i);
1734 }
1735
1736 return per_index_score;
1737}
1738
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301739static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
1740 struct wlan_mlme_power *power)
1741{
1742 power->tx_power_2g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT2G);
1743 power->tx_power_5g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT5G);
1744
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301745 power->max_tx_power_24_chan.max_len = CFG_MAX_TX_POWER_2_4_LEN;
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301746 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_2_4),
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301747 power->max_tx_power_24_chan.data,
1748 sizeof(power->max_tx_power_24_chan.data),
1749 &power->max_tx_power_24_chan.len);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301750
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301751 power->max_tx_power_5_chan.max_len = CFG_MAX_TX_POWER_5_LEN;
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301752 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_5),
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301753 power->max_tx_power_5_chan.data,
1754 sizeof(power->max_tx_power_5_chan.data),
1755 &power->max_tx_power_5_chan.len);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301756
1757 power->power_usage.max_len = CFG_POWER_USAGE_MAX_LEN;
1758 power->power_usage.len = CFG_POWER_USAGE_MAX_LEN;
1759 qdf_mem_copy(power->power_usage.data, cfg_get(psoc, CFG_POWER_USAGE),
1760 power->power_usage.len);
Wu Gao2255ea22019-01-04 15:44:35 +08001761 power->max_tx_power = cfg_get(psoc, CFG_MAX_TX_POWER);
1762 power->current_tx_power_level =
1763 (uint8_t)cfg_default(CFG_CURRENT_TX_POWER_LEVEL);
1764 power->local_power_constraint =
1765 (uint8_t)cfg_default(CFG_LOCAL_POWER_CONSTRAINT);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301766}
Wu Gao2255ea22019-01-04 15:44:35 +08001767
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301768static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
1769 struct wlan_mlme_scoring_cfg *scoring_cfg)
1770{
1771 uint32_t total_weight;
1772
sheenam mongafd394822019-08-26 19:05:59 +05301773 scoring_cfg->vendor_roam_score_algorithm =
1774 cfg_get(psoc, CFG_VENDOR_ROAM_SCORE_ALGORITHM);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301775 scoring_cfg->enable_scoring_for_roam =
1776 cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM);
1777 scoring_cfg->weight_cfg.rssi_weightage =
1778 cfg_get(psoc, CFG_SCORING_RSSI_WEIGHTAGE);
1779 scoring_cfg->weight_cfg.ht_caps_weightage =
1780 cfg_get(psoc, CFG_SCORING_HT_CAPS_WEIGHTAGE);
1781 scoring_cfg->weight_cfg.vht_caps_weightage =
1782 cfg_get(psoc, CFG_SCORING_VHT_CAPS_WEIGHTAGE);
1783 scoring_cfg->weight_cfg.he_caps_weightage =
1784 cfg_get(psoc, CFG_SCORING_HE_CAPS_WEIGHTAGE);
1785 scoring_cfg->weight_cfg.chan_width_weightage =
1786 cfg_get(psoc, CFG_SCORING_CHAN_WIDTH_WEIGHTAGE);
1787 scoring_cfg->weight_cfg.chan_band_weightage =
1788 cfg_get(psoc, CFG_SCORING_CHAN_BAND_WEIGHTAGE);
1789 scoring_cfg->weight_cfg.nss_weightage =
1790 cfg_get(psoc, CFG_SCORING_NSS_WEIGHTAGE);
1791 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1792 cfg_get(psoc, CFG_SCORING_BEAMFORM_CAP_WEIGHTAGE);
1793 scoring_cfg->weight_cfg.pcl_weightage =
1794 cfg_get(psoc, CFG_SCORING_PCL_WEIGHTAGE);
1795 scoring_cfg->weight_cfg.channel_congestion_weightage =
1796 cfg_get(psoc, CFG_SCORING_CHAN_CONGESTION_WEIGHTAGE);
1797 scoring_cfg->weight_cfg.oce_wan_weightage =
1798 cfg_get(psoc, CFG_SCORING_OCE_WAN_WEIGHTAGE);
1799
Pragaspathi Thilagarajdd6a45d2019-09-13 17:36:10 +05301800 total_weight = scoring_cfg->weight_cfg.rssi_weightage +
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301801 scoring_cfg->weight_cfg.ht_caps_weightage +
1802 scoring_cfg->weight_cfg.vht_caps_weightage +
1803 scoring_cfg->weight_cfg.he_caps_weightage +
1804 scoring_cfg->weight_cfg.chan_width_weightage +
1805 scoring_cfg->weight_cfg.chan_band_weightage +
1806 scoring_cfg->weight_cfg.nss_weightage +
1807 scoring_cfg->weight_cfg.beamforming_cap_weightage +
1808 scoring_cfg->weight_cfg.pcl_weightage +
1809 scoring_cfg->weight_cfg.channel_congestion_weightage +
1810 scoring_cfg->weight_cfg.oce_wan_weightage;
1811
1812 /*
1813 * If configured weights are greater than max weight,
1814 * fallback to default weights
1815 */
1816 if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301817 mlme_legacy_err("Total weight greater than %d, using default weights",
1818 BEST_CANDIDATE_MAX_WEIGHT);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301819 scoring_cfg->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE;
1820 scoring_cfg->weight_cfg.ht_caps_weightage =
1821 HT_CAPABILITY_WEIGHTAGE;
1822 scoring_cfg->weight_cfg.vht_caps_weightage =
1823 VHT_CAP_WEIGHTAGE;
1824 scoring_cfg->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE;
1825 scoring_cfg->weight_cfg.chan_width_weightage =
1826 CHAN_WIDTH_WEIGHTAGE;
1827 scoring_cfg->weight_cfg.chan_band_weightage =
1828 CHAN_BAND_WEIGHTAGE;
1829 scoring_cfg->weight_cfg.nss_weightage = NSS_WEIGHTAGE;
1830 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1831 BEAMFORMING_CAP_WEIGHTAGE;
1832 scoring_cfg->weight_cfg.pcl_weightage = PCL_WEIGHT;
1833 scoring_cfg->weight_cfg.channel_congestion_weightage =
1834 CHANNEL_CONGESTION_WEIGHTAGE;
1835 scoring_cfg->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE;
1836 }
1837
1838 scoring_cfg->rssi_score.best_rssi_threshold =
1839 cfg_get(psoc, CFG_SCORING_BEST_RSSI_THRESHOLD);
1840 scoring_cfg->rssi_score.good_rssi_threshold =
1841 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_THRESHOLD);
1842 scoring_cfg->rssi_score.bad_rssi_threshold =
1843 cfg_get(psoc, CFG_SCORING_BAD_RSSI_THRESHOLD);
1844
1845 scoring_cfg->rssi_score.good_rssi_pcnt =
1846 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_PERCENT);
1847 scoring_cfg->rssi_score.bad_rssi_pcnt =
1848 cfg_get(psoc, CFG_SCORING_BAD_RSSI_PERCENT);
1849
1850 scoring_cfg->rssi_score.good_rssi_bucket_size =
1851 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_BUCKET_SIZE);
1852 scoring_cfg->rssi_score.bad_rssi_bucket_size =
1853 cfg_get(psoc, CFG_SCORING_BAD_RSSI_BUCKET_SIZE);
1854
1855 scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh =
1856 cfg_get(psoc, CFG_SCORING_RSSI_PREF_5G_THRESHOLD);
1857
1858 scoring_cfg->bandwidth_weight_per_index =
1859 mlme_limit_max_per_index_score(
1860 cfg_get(psoc, CFG_SCORING_BW_WEIGHT_PER_IDX));
1861 scoring_cfg->nss_weight_per_index =
1862 mlme_limit_max_per_index_score(
1863 cfg_get(psoc, CFG_SCORING_NSS_WEIGHT_PER_IDX));
1864 scoring_cfg->band_weight_per_index =
1865 mlme_limit_max_per_index_score(
1866 cfg_get(psoc, CFG_SCORING_BAND_WEIGHT_PER_IDX));
1867
1868 scoring_cfg->esp_qbss_scoring.num_slot =
1869 cfg_get(psoc, CFG_SCORING_NUM_ESP_QBSS_SLOTS);
1870 scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0 =
1871 mlme_limit_max_per_index_score(
1872 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_3_TO_0));
1873 scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4 =
1874 mlme_limit_max_per_index_score(
1875 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_7_TO_4));
1876 scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8 =
1877 mlme_limit_max_per_index_score(
1878 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_11_TO_8));
1879 scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12 =
1880 mlme_limit_max_per_index_score(
1881 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_15_TO_12));
1882
1883 scoring_cfg->oce_wan_scoring.num_slot =
1884 cfg_get(psoc, CFG_SCORING_NUM_OCE_WAN_SLOTS);
1885 scoring_cfg->oce_wan_scoring.score_pcnt3_to_0 =
1886 mlme_limit_max_per_index_score(
1887 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_3_TO_0));
1888 scoring_cfg->oce_wan_scoring.score_pcnt7_to_4 =
1889 mlme_limit_max_per_index_score(
1890 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4));
1891 scoring_cfg->oce_wan_scoring.score_pcnt11_to_8 =
1892 mlme_limit_max_per_index_score(
1893 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8));
1894 scoring_cfg->oce_wan_scoring.score_pcnt15_to_12 =
1895 mlme_limit_max_per_index_score(
1896 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12));
Pragaspathi Thilagarajdf0f5442018-12-11 16:59:46 +05301897 scoring_cfg->roam_trigger_bitmap =
1898 cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP);
1899 scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA);
Wu Gao2255ea22019-01-04 15:44:35 +08001900 scoring_cfg->apsd_enabled = (bool)cfg_default(CFG_APSD_ENABLED);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301901}
1902
Karthik Kantamneni2231a232018-09-11 15:45:55 +05301903static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc,
1904 struct wlan_mlme_oce *oce)
1905{
1906 uint8_t val;
1907 bool rssi_assoc_reject_enabled;
1908 bool probe_req_rate_enabled;
1909 bool probe_resp_rate_enabled;
1910 bool beacon_rate_enabled;
1911 bool probe_req_deferral_enabled;
1912 bool fils_discovery_sap_enabled;
1913 bool esp_for_roam_enabled;
1914
1915 oce->enable_bcast_probe_rsp =
1916 cfg_get(psoc, CFG_ENABLE_BCAST_PROBE_RESP);
1917 oce->oce_sta_enabled = cfg_get(psoc, CFG_OCE_ENABLE_STA);
1918 oce->oce_sap_enabled = cfg_get(psoc, CFG_OCE_ENABLE_SAP);
1919 oce->fils_enabled = cfg_get(psoc, CFG_IS_FILS_ENABLED);
1920
1921 rssi_assoc_reject_enabled =
1922 cfg_get(psoc, CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT);
1923 probe_req_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_REQ_RATE);
1924 probe_resp_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_RSP_RATE);
1925 beacon_rate_enabled = cfg_get(psoc, CFG_OCE_BEACON_RATE);
1926 probe_req_deferral_enabled =
1927 cfg_get(psoc, CFG_ENABLE_PROBE_REQ_DEFERRAL);
1928 fils_discovery_sap_enabled =
1929 cfg_get(psoc, CFG_ENABLE_FILS_DISCOVERY_SAP);
1930 esp_for_roam_enabled = cfg_get(psoc, CFG_ENABLE_ESP_FEATURE);
1931
1932 if (!rssi_assoc_reject_enabled ||
1933 !oce->enable_bcast_probe_rsp) {
1934 oce->oce_sta_enabled = 0;
1935 }
1936
1937 val = (probe_req_rate_enabled *
1938 WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) +
1939 (probe_resp_rate_enabled *
1940 WMI_VDEV_OCE_PROBE_RESPONSE_RATE_FEATURE_BITMAP) +
1941 (beacon_rate_enabled *
1942 WMI_VDEV_OCE_BEACON_RATE_FEATURE_BITMAP) +
1943 (probe_req_deferral_enabled *
1944 WMI_VDEV_OCE_PROBE_REQUEST_DEFERRAL_FEATURE_BITMAP) +
1945 (fils_discovery_sap_enabled *
1946 WMI_VDEV_OCE_FILS_DISCOVERY_FRAME_FEATURE_BITMAP) +
1947 (esp_for_roam_enabled *
1948 WMI_VDEV_OCE_ESP_FEATURE_BITMAP) +
1949 (rssi_assoc_reject_enabled *
1950 WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP);
1951 oce->feature_bitmap = val;
1952}
1953
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301954static void mlme_init_nss_chains(struct wlan_objmgr_psoc *psoc,
1955 struct wlan_mlme_nss_chains *nss_chains)
1956{
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301957 nss_chains->num_rx_chains[NSS_CHAINS_BAND_2GHZ] =
1958 cfg_get(psoc, CFG_NUM_RX_CHAINS_2G);
1959 nss_chains->num_rx_chains[NSS_CHAINS_BAND_5GHZ] =
1960 cfg_get(psoc, CFG_NUM_RX_CHAINS_5G);
1961 nss_chains->num_tx_chains[NSS_CHAINS_BAND_2GHZ] =
1962 cfg_get(psoc, CFG_NUM_TX_CHAINS_2G);
1963 nss_chains->num_tx_chains[NSS_CHAINS_BAND_5GHZ] =
1964 cfg_get(psoc, CFG_NUM_TX_CHAINS_5G);
1965
1966 nss_chains->tx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_TX_NSS_2G);
1967 nss_chains->tx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_TX_NSS_5G);
1968 nss_chains->rx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_RX_NSS_2G);
1969 nss_chains->rx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_RX_NSS_5G);
1970
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301971 nss_chains->num_tx_chains_11b = cfg_get(psoc, CFG_NUM_TX_CHAINS_11b);
1972 nss_chains->num_tx_chains_11g = cfg_get(psoc, CFG_NUM_TX_CHAINS_11g);
1973 nss_chains->num_tx_chains_11a = cfg_get(psoc, CFG_NUM_TX_CHAINS_11a);
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301974
1975 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_2GHZ] =
1976 cfg_get(psoc, CFG_DISABLE_RX_MRC_2G);
1977 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_5GHZ] =
1978 cfg_get(psoc, CFG_DISABLE_RX_MRC_5G);
1979 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_2GHZ] =
1980 cfg_get(psoc, CFG_DISABLE_TX_MRC_2G);
1981 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_5GHZ] =
1982 cfg_get(psoc, CFG_DISABLE_TX_MRC_5G);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301983}
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301984static void mlme_init_wep_keys(struct wlan_mlme_wep_cfg *wep_params)
1985{
1986 /* initialize the default key values to zero */
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001987 wep_params->wep_default_key_1.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1988 wep_params->wep_default_key_1.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1989 qdf_mem_zero(wep_params->wep_default_key_1.data,
1990 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301991
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001992 wep_params->wep_default_key_2.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1993 wep_params->wep_default_key_2.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1994 qdf_mem_zero(wep_params->wep_default_key_2.data,
1995 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301996
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001997 wep_params->wep_default_key_3.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1998 wep_params->wep_default_key_3.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1999 qdf_mem_zero(wep_params->wep_default_key_3.data,
2000 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302001
Srinivas Girigowdacf161402019-03-14 11:37:33 -07002002 wep_params->wep_default_key_4.len = WLAN_CRYPTO_KEY_WEP104_LEN;
2003 wep_params->wep_default_key_4.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
2004 qdf_mem_zero(wep_params->wep_default_key_4.data,
2005 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302006}
2007
2008static void mlme_init_wep_cfg(struct wlan_mlme_wep_cfg *wep_params)
2009{
2010 wep_params->is_privacy_enabled = cfg_default(CFG_PRIVACY_ENABLED);
2011 wep_params->auth_type = cfg_default(CFG_AUTHENTICATION_TYPE);
2012 wep_params->is_shared_key_auth =
2013 cfg_default(CFG_SHARED_KEY_AUTH_ENABLE);
2014 wep_params->is_auth_open_system =
2015 cfg_default(CFG_OPEN_SYSTEM_AUTH_ENABLE);
2016
2017 wep_params->wep_default_key_id = cfg_default(CFG_WEP_DEFAULT_KEYID);
2018 mlme_init_wep_keys(wep_params);
2019}
2020
Arif Hussainbd5194c2018-11-27 19:01:15 -08002021static void mlme_init_wifi_pos_cfg(struct wlan_objmgr_psoc *psoc,
2022 struct wlan_mlme_wifi_pos_cfg *wifi_pos_cfg)
2023{
2024 wifi_pos_cfg->fine_time_meas_cap =
2025 cfg_get(psoc, CFG_FINE_TIME_MEAS_CAPABILITY);
2026}
2027
Abhinav Kumarab576712018-11-05 14:32:49 +05302028#ifdef FEATURE_WLAN_ESE
2029static void mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2030 struct wlan_mlme_wmm_params *wmm_params)
2031{
2032 wmm_params->wmm_tspec_element.inactivity_intv =
2033 cfg_get(psoc, CFG_QOS_WMM_INACTIVITY_INTERVAL);
2034}
2035#else
2036static inline void
2037mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2038 struct wlan_mlme_wmm_params *wmm_params)
2039{
2040}
2041#endif /* FEATURE_WLAN_ESE */
2042
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302043static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc,
2044 struct wlan_mlme_wmm_params *wmm_params)
2045{
2046 wmm_params->qos_enabled = cfg_default(CFG_QOS_ENABLED);
2047 wmm_params->wme_enabled = cfg_default(CFG_WME_ENABLED);
2048 wmm_params->max_sp_length = cfg_default(CFG_MAX_SP_LENGTH);
2049 wmm_params->wsm_enabled = cfg_default(CFG_WSM_ENABLED);
2050 wmm_params->edca_profile = cfg_default(CFG_EDCA_PROFILE);
Abhinav Kumar18b45cd2018-09-21 12:35:22 +05302051
2052 wmm_params->ac_vo.dir_ac_vo = cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VO);
2053 wmm_params->ac_vo.nom_msdu_size_ac_vo =
2054 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO);
2055 wmm_params->ac_vo.mean_data_rate_ac_vo =
2056 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO);
2057 wmm_params->ac_vo.min_phy_rate_ac_vo =
2058 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VO);
2059 wmm_params->ac_vo.sba_ac_vo = cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VO);
2060 wmm_params->ac_vo.uapsd_vo_srv_intv =
2061 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV);
2062 wmm_params->ac_vo.uapsd_vo_sus_intv =
2063 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV);
Abhinav Kumar4c8e0262018-10-06 16:50:27 +05302064
2065 wmm_params->ac_vi.dir_ac_vi =
2066 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VI);
2067 wmm_params->ac_vi.nom_msdu_size_ac_vi =
2068 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI);
2069 wmm_params->ac_vi.mean_data_rate_ac_vi =
2070 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI);
2071 wmm_params->ac_vi.min_phy_rate_ac_vi =
2072 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VI);
2073 wmm_params->ac_vi.sba_ac_vi =
2074 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VI);
2075 wmm_params->ac_vi.uapsd_vi_srv_intv =
2076 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SRV_INTV);
2077 wmm_params->ac_vi.uapsd_vi_sus_intv =
2078 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV);
2079
Abhinav Kumare94f2482018-08-19 12:37:36 +05302080 wmm_params->ac_be.dir_ac_be =
2081 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BE);
2082 wmm_params->ac_be.nom_msdu_size_ac_be =
2083 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE);
2084 wmm_params->ac_be.mean_data_rate_ac_be =
2085 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE);
2086 wmm_params->ac_be.min_phy_rate_ac_be =
2087 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BE);
2088 wmm_params->ac_be.sba_ac_be =
2089 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BE);
2090 wmm_params->ac_be.uapsd_be_srv_intv =
2091 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SRV_INTV);
2092 wmm_params->ac_be.uapsd_be_sus_intv =
2093 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SUS_INTV);
Abhinav Kumar2af8c122018-08-19 13:49:52 +05302094
2095 wmm_params->ac_bk.dir_ac_bk =
2096 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BK);
2097 wmm_params->ac_bk.nom_msdu_size_ac_bk =
2098 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK);
2099 wmm_params->ac_bk.mean_data_rate_ac_bk =
2100 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK);
2101 wmm_params->ac_bk.min_phy_rate_ac_bk =
2102 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BK);
2103 wmm_params->ac_bk.sba_ac_bk =
2104 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BK);
2105 wmm_params->ac_bk.uapsd_bk_srv_intv =
2106 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SRV_INTV);
2107 wmm_params->ac_bk.uapsd_bk_sus_intv =
2108 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SUS_INTV);
Abhinav Kumar7d6f1ac2018-09-01 18:33:56 +05302109
2110 wmm_params->wmm_config.wmm_mode =
2111 cfg_get(psoc, CFG_QOS_WMM_MODE);
2112 wmm_params->wmm_config.b80211e_is_enabled =
2113 cfg_get(psoc, CFG_QOS_WMM_80211E_ENABLED);
2114 wmm_params->wmm_config.uapsd_mask =
2115 cfg_get(psoc, CFG_QOS_WMM_UAPSD_MASK);
2116 wmm_params->wmm_config.bimplicit_qos_enabled =
2117 cfg_get(psoc, CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED);
Abhinav Kumarab576712018-11-05 14:32:49 +05302118
2119 mlme_init_inactivity_intv(psoc, wmm_params);
2120 wmm_params->wmm_tspec_element.burst_size_def =
2121 cfg_get(psoc, CFG_QOS_WMM_BURST_SIZE_DEFN);
2122 wmm_params->wmm_tspec_element.ts_ack_policy =
2123 cfg_get(psoc, CFG_QOS_WMM_TS_INFO_ACK_POLICY);
2124 wmm_params->wmm_tspec_element.ts_acm_is_off =
2125 cfg_get(psoc, CFG_QOS_ADDTS_WHEN_ACM_IS_OFF);
Abhinav Kumarc8c21502018-12-05 15:17:39 +05302126 wmm_params->delayed_trigger_frm_int =
2127 cfg_get(psoc, CFG_TL_DELAYED_TRGR_FRM_INTERVAL);
2128
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302129}
2130
gaurank kathpalia837f6202018-09-14 21:55:32 +05302131static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc,
2132 struct wlan_mlme_wps_params *wps_params)
2133{
2134 wps_params->enable_wps = cfg_default(CFG_WPS_ENABLE);
2135 wps_params->wps_cfg_method = cfg_default(CFG_WPS_CFG_METHOD);
2136 wps_params->wps_device_password_id =
2137 cfg_default(CFG_WPS_DEVICE_PASSWORD_ID);
2138 wps_params->wps_device_sub_category =
2139 cfg_default(CFG_WPS_DEVICE_SUB_CATEGORY);
2140 wps_params->wps_primary_device_category =
2141 cfg_default(CFG_WPS_PRIMARY_DEVICE_CATEGORY);
2142 wps_params->wps_primary_device_oui =
2143 cfg_default(CFG_WPS_PIMARY_DEVICE_OUI);
2144 wps_params->wps_state = cfg_default(CFG_WPS_STATE);
2145 wps_params->wps_version = cfg_default(CFG_WPS_VERSION);
Pragaspathi Thilagaraj2b9259f2018-12-05 22:29:03 +05302146 wps_params->wps_uuid.max_len = MLME_CFG_WPS_UUID_MAX_LEN;
2147 qdf_uint8_array_parse(cfg_default(CFG_WPS_UUID),
2148 wps_params->wps_uuid.data,
2149 MLME_CFG_WPS_UUID_MAX_LEN,
2150 &wps_params->wps_uuid.len);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302151}
2152
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302153static void mlme_init_btm_cfg(struct wlan_objmgr_psoc *psoc,
2154 struct wlan_mlme_btm *btm)
lifeng6d19c252018-11-23 18:04:23 +08002155{
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302156 btm->btm_offload_config = cfg_get(psoc, CFG_BTM_ENABLE);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302157 btm->prefer_btm_query = cfg_get(psoc, CFG_PREFER_BTM_QUERY);
2158 if (btm->prefer_btm_query)
2159 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_8);
2160
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302161 btm->abridge_flag = cfg_get(psoc, CFG_ENABLE_BTM_ABRIDGE);
2162 if (btm->abridge_flag)
2163 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_7);
2164
Pragaspathi Thilagarajed781902019-05-30 12:17:49 +05302165 btm->btm_solicited_timeout = cfg_get(psoc, CFG_BTM_SOLICITED_TIMEOUT);
2166 btm->btm_max_attempt_cnt = cfg_get(psoc, CFG_BTM_MAX_ATTEMPT_CNT);
2167 btm->btm_sticky_time = cfg_get(psoc, CFG_BTM_STICKY_TIME);
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302168 btm->rct_validity_timer = cfg_get(psoc, CFG_BTM_VALIDITY_TIMER);
2169 btm->disassoc_timer_threshold =
2170 cfg_get(psoc, CFG_BTM_DISASSOC_TIMER_THRESHOLD);
Abhinav Kumar43565942019-03-02 01:34:12 +05302171 btm->btm_query_bitmask = cfg_get(psoc, CFG_BTM_QUERY_BITMASK);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302172 btm->btm_trig_min_candidate_score =
2173 cfg_get(psoc, CFG_MIN_BTM_CANDIDATE_SCORE);
2174}
Abhinav Kumar43565942019-03-02 01:34:12 +05302175
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302176static void
2177mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
2178 struct wlan_mlme_cfg *mlme_cfg)
2179{
2180 struct roam_trigger_score_delta *score_delta_param;
2181 struct roam_trigger_min_rssi *min_rssi_param;
2182
2183 score_delta_param = &mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
2184 score_delta_param->roam_score_delta =
2185 cfg_get(psoc, CFG_IDLE_ROAM_SCORE_DELTA);
2186 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_IDLE;
2187
2188 score_delta_param = &mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
2189 score_delta_param->roam_score_delta =
2190 cfg_get(psoc, CFG_BTM_ROAM_SCORE_DELTA);
2191 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_BTM;
2192
2193 min_rssi_param = &mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
2194 min_rssi_param->min_rssi =
2195 cfg_get(psoc, CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI);
2196 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_DEAUTH;
2197
2198 min_rssi_param = &mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
2199 min_rssi_param->min_rssi =
2200 cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
2201 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
lifeng6d19c252018-11-23 18:04:23 +08002202}
2203
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302204/**
2205 * mlme_init_fe_wlm_in_cfg() - Populate WLM INI in MLME cfg
2206 * @psoc: pointer to the psoc object
2207 * @wlm_config: pointer to the MLME WLM cfg
2208 *
2209 * Return: None
2210 */
2211static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
2212 struct wlan_mlme_fe_wlm *wlm_config)
2213{
2214 wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
2215 wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
2216 wlm_config->latency_flags[0] = cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL);
2217 wlm_config->latency_flags[1] = cfg_get(psoc, CFG_LATENCY_FLAGS_MOD);
2218 wlm_config->latency_flags[2] = cfg_get(psoc, CFG_LATENCY_FLAGS_LOW);
2219 wlm_config->latency_flags[3] = cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW);
2220}
2221
2222/**
2223 * mlme_init_fe_rrm_in_cfg() - Populate RRM INI in MLME cfg
2224 * @psoc: pointer to the psoc object
2225 * @rrm_config: pointer to the MLME RRM cfg
2226 *
2227 * Return: None
2228 */
2229static void mlme_init_fe_rrm_in_cfg(struct wlan_objmgr_psoc *psoc,
2230 struct wlan_mlme_fe_rrm *rrm_config)
2231{
2232 qdf_size_t len;
2233
2234 rrm_config->rrm_enabled = cfg_get(psoc, CFG_RRM_ENABLE);
2235 rrm_config->rrm_rand_interval = cfg_get(psoc, CFG_RRM_MEAS_RAND_INTVL);
2236
2237 qdf_uint8_array_parse(cfg_get(psoc, CFG_RM_CAPABILITY),
2238 rrm_config->rm_capability,
2239 sizeof(rrm_config->rm_capability), &len);
2240
2241 if (len < MLME_RMENABLEDCAP_MAX_LEN) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302242 mlme_legacy_debug("Incorrect RM capability, using default");
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302243 qdf_uint8_array_parse(cfg_default(CFG_RM_CAPABILITY),
2244 rrm_config->rm_capability,
2245 sizeof(rrm_config->rm_capability), &len);
2246 }
2247}
2248
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302249static void mlme_init_powersave_params(struct wlan_objmgr_psoc *psoc,
2250 struct wlan_mlme_powersave *ps_cfg)
2251{
2252 ps_cfg->is_imps_enabled = cfg_get(psoc, CFG_ENABLE_IMPS);
2253 ps_cfg->is_bmps_enabled = cfg_get(psoc, CFG_ENABLE_PS);
2254 ps_cfg->auto_bmps_timer_val = cfg_get(psoc, CFG_AUTO_BMPS_ENABLE_TIMER);
2255 ps_cfg->bmps_min_listen_interval = cfg_get(psoc, CFG_BMPS_MINIMUM_LI);
2256 ps_cfg->bmps_max_listen_interval = cfg_get(psoc, CFG_BMPS_MAXIMUM_LI);
2257 ps_cfg->dtim_selection_diversity =
2258 cfg_get(psoc, CFG_DTIM_SELECTION_DIVERSITY);
2259}
2260
lifengdb340e72018-11-20 00:50:20 +08002261#ifdef MWS_COEX
2262static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2263 struct wlan_mlme_mwc *mwc)
2264{
2265 mwc->mws_coex_4g_quick_tdm =
2266 cfg_get(psoc, CFG_MWS_COEX_4G_QUICK_FTDM);
2267 mwc->mws_coex_5g_nr_pwr_limit =
2268 cfg_get(psoc, CFG_MWS_COEX_5G_NR_PWR_LIMIT);
2269}
2270#else
2271static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2272 struct wlan_mlme_mwc *mwc)
2273{
2274}
2275#endif
2276
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302277#ifdef SAP_AVOID_ACS_FREQ_LIST
2278static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2279 struct wlan_mlme_reg *reg)
2280{
2281 qdf_size_t avoid_acs_freq_list_num = 0;
2282 uint8_t i;
2283
2284 qdf_uint16_array_parse(cfg_get(psoc, CFG_SAP_AVOID_ACS_FREQ_LIST),
2285 reg->avoid_acs_freq_list,
2286 CFG_VALID_CHANNEL_LIST_LEN,
2287 &avoid_acs_freq_list_num);
2288 reg->avoid_acs_freq_list_num = avoid_acs_freq_list_num;
2289
2290 for (i = 0; i < avoid_acs_freq_list_num; i++)
2291 mlme_legacy_debug("avoid_acs_freq %d",
2292 reg->avoid_acs_freq_list[i]);
2293}
2294#else
2295static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2296 struct wlan_mlme_reg *reg)
2297{
2298}
2299#endif
2300
lifeng0b46ae52018-12-13 09:42:27 +08002301static void mlme_init_reg_cfg(struct wlan_objmgr_psoc *psoc,
2302 struct wlan_mlme_reg *reg)
2303{
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002304 qdf_size_t valid_channel_list_num = 0;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002305 uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN];
2306 uint8_t i;
2307 struct wlan_objmgr_pdev *pdev = NULL;
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002308
lifeng0b46ae52018-12-13 09:42:27 +08002309 reg->self_gen_frm_pwr = cfg_get(psoc, CFG_SELF_GEN_FRM_PWR);
2310 reg->etsi13_srd_chan_in_master_mode =
2311 cfg_get(psoc, CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE);
2312 reg->restart_beaconing_on_ch_avoid =
2313 cfg_get(psoc, CFG_RESTART_BEACONING_ON_CH_AVOID);
2314 reg->indoor_channel_support = cfg_get(psoc, CFG_INDOOR_CHANNEL_SUPPORT);
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05302315 reg->enable_11d_in_world_mode = cfg_get(psoc,
2316 CFG_ENABLE_11D_IN_WORLD_MODE);
lifeng0b46ae52018-12-13 09:42:27 +08002317 reg->scan_11d_interval = cfg_get(psoc, CFG_SCAN_11D_INTERVAL);
Rajeev Kumar Sirasanagandla1b3a5352019-08-05 21:33:03 +05302318 reg->ignore_fw_reg_offload_ind = cfg_get(
2319 psoc,
2320 CFG_IGNORE_FW_REG_OFFLOAD_IND);
2321
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002322 qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST),
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002323 channel_list,
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002324 CFG_VALID_CHANNEL_LIST_LEN,
2325 &valid_channel_list_num);
2326 reg->valid_channel_list_num = (uint8_t)valid_channel_list_num;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002327
2328 pdev = wlan_objmgr_get_pdev_by_id(psoc, 0, WLAN_MLME_NB_ID);
2329 if (!pdev) {
2330 mlme_legacy_err("null pdev");
2331 return;
2332 }
2333
2334 for (i = 0; i < valid_channel_list_num; i++)
2335 reg->valid_channel_freq_list[i] =
2336 wlan_reg_chan_to_freq(pdev, channel_list[i]);
2337
2338 wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_NB_ID);
2339
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002340 qdf_str_lcopy(reg->country_code, cfg_default(CFG_COUNTRY_CODE),
2341 sizeof(reg->country_code));
2342 reg->country_code_len = (uint8_t)sizeof(reg->country_code);
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302343 mlme_init_acs_avoid_freq_list(psoc, reg);
lifeng0b46ae52018-12-13 09:42:27 +08002344}
2345
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302346static void
2347mlme_init_dot11_mode_cfg(struct wlan_mlme_dot11_mode *dot11_mode)
2348{
2349 dot11_mode->dot11_mode = cfg_default(CFG_DOT11_MODE);
2350}
2351
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302352QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
2353{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05302354 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302355 struct wlan_mlme_cfg *mlme_cfg;
2356 QDF_STATUS status = QDF_STATUS_SUCCESS;
2357
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05302358 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302359 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302360 mlme_legacy_err("Failed to get MLME Obj");
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302361 return QDF_STATUS_E_FAILURE;
2362 }
2363
2364 mlme_cfg = &mlme_obj->cfg;
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +05302365 mlme_init_generic_cfg(psoc, &mlme_cfg->gen);
Arif Hussain9f93a642018-09-10 18:32:25 -07002366 mlme_init_timeout_cfg(psoc, &mlme_cfg->timeouts);
Abhinav Kumar06b9a122018-10-10 15:01:11 +05302367 mlme_init_edca_params(psoc, &mlme_cfg->edca_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302368 mlme_init_ht_cap_in_cfg(psoc, &mlme_cfg->ht_caps);
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302369 mlme_init_wmm_in_cfg(psoc, &mlme_cfg->wmm_params);
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +05302370 mlme_init_mbo_cfg(psoc, &mlme_cfg->mbo_cfg);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +05302371 mlme_init_qos_cfg(psoc, &mlme_cfg->qos_mlme_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302372 mlme_init_rates_in_cfg(psoc, &mlme_cfg->rates);
Arif Hussain88d1fdd2018-09-26 16:12:24 -07002373 mlme_init_dfs_cfg(psoc, &mlme_cfg->dfs_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302374 mlme_init_sap_protection_cfg(psoc, &mlme_cfg->sap_protection_cfg);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +05302375 mlme_init_vht_cap_cfg(psoc, &mlme_cfg->vht_caps.vht_cap_info);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +05302376 mlme_init_chainmask_cfg(psoc, &mlme_cfg->chainmask_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302377 mlme_init_sap_cfg(psoc, &mlme_cfg->sap_cfg);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05302378 mlme_init_nss_chains(psoc, &mlme_cfg->nss_chains_ini_cfg);
Bala Venkatesh6d537092018-09-25 10:38:36 +05302379 mlme_init_he_cap_in_cfg(psoc, mlme_cfg);
Wu Gaod8f3db02018-07-24 19:18:45 +08002380 mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40);
Jiachao Wu3304d6b2018-08-24 18:24:34 +08002381 mlme_init_product_details_cfg(&mlme_cfg->product_details);
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302382 mlme_init_powersave_params(psoc, &mlme_cfg->ps_params);
Wu Gao406c53c2018-09-10 13:51:37 +08002383 mlme_init_sta_cfg(psoc, &mlme_cfg->sta);
Arif Hussaincca60432018-12-03 19:45:12 -08002384 mlme_init_stats_cfg(psoc, &mlme_cfg->stats);
Arif Hussain178f35f2018-11-13 18:26:18 -08002385 mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302386 mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr);
Manikandan Mohan2bd09772018-11-28 18:27:32 -08002387 mlme_init_ibss_cfg(psoc, &mlme_cfg->ibss);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +05302388 mlme_init_feature_flag_in_cfg(psoc, &mlme_cfg->feature_flags);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05302389 mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring);
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302390 mlme_init_dot11_mode_cfg(&mlme_cfg->dot11_mode);
Harprit Chhabadabec6de42018-09-10 10:21:15 -07002391 mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
Harprit Chhabadabd027a02018-10-30 13:02:22 -07002392 mlme_init_acs_cfg(psoc, &mlme_cfg->acs);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05302393 mlme_init_power_cfg(psoc, &mlme_cfg->power);
Karthik Kantamneni2231a232018-09-11 15:45:55 +05302394 mlme_init_oce_cfg(psoc, &mlme_cfg->oce);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302395 mlme_init_wep_cfg(&mlme_cfg->wep_params);
Arif Hussainbd5194c2018-11-27 19:01:15 -08002396 mlme_init_wifi_pos_cfg(psoc, &mlme_cfg->wifi_pos_cfg);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302397 mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302398 mlme_init_fe_wlm_in_cfg(psoc, &mlme_cfg->wlm_config);
2399 mlme_init_fe_rrm_in_cfg(psoc, &mlme_cfg->rrm_config);
lifengdb340e72018-11-20 00:50:20 +08002400 mlme_init_mwc_cfg(psoc, &mlme_cfg->mwc);
lifeng0b46ae52018-12-13 09:42:27 +08002401 mlme_init_reg_cfg(psoc, &mlme_cfg->reg);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302402 mlme_init_btm_cfg(psoc, &mlme_cfg->btm);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302403 mlme_init_roam_score_config(psoc, mlme_cfg);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302404
2405 return status;
2406}
Srinivas Dasari37e37312019-06-30 23:50:24 +05302407
2408void mlme_set_self_disconnect_ies(struct wlan_objmgr_vdev *vdev,
2409 struct wlan_ies *ie)
2410{
Srinivas Dasari37e37312019-06-30 23:50:24 +05302411 struct mlme_legacy_priv *mlme_priv;
2412
2413 if (!ie || !ie->len || !ie->data) {
2414 mlme_legacy_debug("disocnnect IEs are NULL");
2415 return;
2416 }
2417
hqu7f10f552019-07-09 22:12:44 +08002418 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2419 if (!mlme_priv) {
2420 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasari37e37312019-06-30 23:50:24 +05302421 return;
2422 }
2423
Srinivas Dasari37e37312019-06-30 23:50:24 +05302424 if (mlme_priv->self_disconnect_ies.data) {
2425 qdf_mem_free(mlme_priv->self_disconnect_ies.data);
2426 mlme_priv->self_disconnect_ies.len = 0;
2427 }
2428
2429 mlme_priv->self_disconnect_ies.data = qdf_mem_malloc(ie->len);
2430 if (!mlme_priv->self_disconnect_ies.data)
2431 return;
2432
2433 qdf_mem_copy(mlme_priv->self_disconnect_ies.data, ie->data, ie->len);
2434 mlme_priv->self_disconnect_ies.len = ie->len;
2435
2436 mlme_legacy_debug("Self disconnect IEs");
2437 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_DEBUG,
2438 mlme_priv->self_disconnect_ies.data,
2439 mlme_priv->self_disconnect_ies.len);
2440}
2441
2442void mlme_free_self_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2443{
Srinivas Dasari37e37312019-06-30 23:50:24 +05302444 struct mlme_legacy_priv *mlme_priv;
2445
hqu7f10f552019-07-09 22:12:44 +08002446 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2447 if (!mlme_priv) {
2448 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasari37e37312019-06-30 23:50:24 +05302449 return;
2450 }
2451
Srinivas Dasari37e37312019-06-30 23:50:24 +05302452 if (mlme_priv->self_disconnect_ies.data) {
2453 qdf_mem_free(mlme_priv->self_disconnect_ies.data);
2454 mlme_priv->self_disconnect_ies.data = NULL;
2455 mlme_priv->self_disconnect_ies.len = 0;
2456 }
2457}
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302458
2459struct wlan_ies *mlme_get_self_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2460{
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302461 struct mlme_legacy_priv *mlme_priv;
2462
hqu7f10f552019-07-09 22:12:44 +08002463 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2464 if (!mlme_priv) {
2465 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302466 return NULL;
2467 }
2468
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302469 return &mlme_priv->self_disconnect_ies;
2470}
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302471
2472void mlme_set_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev,
2473 struct wlan_ies *ie)
2474{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302475 struct mlme_legacy_priv *mlme_priv;
2476
2477 if (!ie || !ie->len || !ie->data) {
2478 mlme_legacy_debug("disocnnect IEs are NULL");
2479 return;
2480 }
2481
hqu7f10f552019-07-09 22:12:44 +08002482 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2483 if (!mlme_priv) {
2484 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302485 return;
2486 }
2487
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302488 if (mlme_priv->peer_disconnect_ies.data) {
2489 qdf_mem_free(mlme_priv->peer_disconnect_ies.data);
2490 mlme_priv->peer_disconnect_ies.len = 0;
2491 }
2492
2493 mlme_priv->peer_disconnect_ies.data = qdf_mem_malloc(ie->len);
2494 if (!mlme_priv->peer_disconnect_ies.data)
2495 return;
2496
2497 qdf_mem_copy(mlme_priv->peer_disconnect_ies.data, ie->data, ie->len);
2498 mlme_priv->peer_disconnect_ies.len = ie->len;
2499
2500 mlme_legacy_debug("peer disconnect IEs");
2501 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_DEBUG,
2502 mlme_priv->peer_disconnect_ies.data,
2503 mlme_priv->peer_disconnect_ies.len);
2504}
2505
2506void mlme_free_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2507{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302508 struct mlme_legacy_priv *mlme_priv;
2509
hqu7f10f552019-07-09 22:12:44 +08002510 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2511 if (!mlme_priv) {
2512 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302513 return;
2514 }
2515
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302516 if (mlme_priv->peer_disconnect_ies.data) {
2517 qdf_mem_free(mlme_priv->peer_disconnect_ies.data);
2518 mlme_priv->peer_disconnect_ies.data = NULL;
2519 mlme_priv->peer_disconnect_ies.len = 0;
2520 }
2521}
2522
2523struct wlan_ies *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2524{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302525 struct mlme_legacy_priv *mlme_priv;
2526
hqu7f10f552019-07-09 22:12:44 +08002527 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2528 if (!mlme_priv) {
2529 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302530 return NULL;
2531 }
2532
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302533 return &mlme_priv->peer_disconnect_ies;
2534}
Srinivas Dasaricc863f02019-09-05 17:18:48 +05302535
Paul Zhangd34b5752019-10-09 11:22:32 +08002536void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag)
2537{
2538 struct mlme_legacy_priv *mlme_priv;
2539
2540 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2541 if (!mlme_priv) {
2542 mlme_legacy_err("vdev legacy private object is NULL");
2543 return;
2544 }
2545
2546 mlme_priv->follow_ap_edca = flag;
2547}
2548
2549bool mlme_get_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev)
2550{
2551 struct mlme_legacy_priv *mlme_priv;
2552
2553 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2554 if (!mlme_priv) {
2555 mlme_legacy_err("vdev legacy private object is NULL");
2556 return false;
2557 }
2558
2559 return mlme_priv->follow_ap_edca;
2560}
2561
Srinivas Dasaricc863f02019-09-05 17:18:48 +05302562void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer,
2563 bool is_pmf_enabled)
2564{
2565 struct peer_mlme_priv_obj *peer_priv;
2566
2567 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
2568 WLAN_UMAC_COMP_MLME);
2569 if (!peer_priv) {
2570 mlme_legacy_err(" peer mlme component object is NULL");
2571 return;
2572 }
2573 peer_priv->is_pmf_enabled = is_pmf_enabled;
2574}
2575
2576bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer)
2577{
2578 struct peer_mlme_priv_obj *peer_priv;
2579
2580 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
2581 WLAN_UMAC_COMP_MLME);
2582 if (!peer_priv) {
2583 mlme_legacy_err("peer mlme component object is NULL");
2584 return false;
2585 }
2586
2587 return peer_priv->is_pmf_enabled;
2588}
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302589
2590#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
2591static
2592const char *mlme_roam_state_to_string(enum roam_offload_state state)
2593{
2594 switch (state) {
2595 case ROAM_INIT:
2596 return "ROAM_INIT";
2597 case ROAM_DEINIT:
2598 return "ROAM_DEINIT";
2599 case ROAM_RSO_STARTED:
2600 return "ROAM_RSO_STARTED";
2601 case ROAM_RSO_STOPPED:
2602 return "ROAM_RSO_STOPPED";
2603 default:
2604 return "";
2605 }
2606}
2607
2608static void
2609mlme_print_roaming_state(uint8_t vdev_id, enum roam_offload_state cur_state,
2610 enum roam_offload_state new_state)
2611{
2612 mlme_info("ROAM: vdev[%d] ROAM State Changed from [%s] to [%s]",
2613 vdev_id, mlme_roam_state_to_string(cur_state),
2614 mlme_roam_state_to_string(new_state));
2615
2616 /* TODO: Try to print the state change requestor also */
2617}
2618
2619bool
2620mlme_get_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
2621 uint8_t vdev_id)
2622{
2623 struct wlan_objmgr_vdev *vdev;
2624 struct mlme_legacy_priv *mlme_priv;
2625 bool value;
2626
2627 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2628 WLAN_MLME_OBJMGR_ID);
2629
2630 if (!vdev) {
2631 mlme_legacy_err("vdev object is NULL");
2632 return 0;
2633 }
2634
2635 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2636 if (!mlme_priv) {
2637 mlme_legacy_err("vdev legacy private object is NULL");
2638 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2639 return 0;
2640 }
2641
2642 value = mlme_priv->mlme_roam.roam_cfg.supplicant_disabled_roaming;
2643 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2644
2645 return value;
2646}
2647
2648void mlme_set_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
2649 uint8_t vdev_id, bool val)
2650{
2651 struct wlan_objmgr_vdev *vdev;
2652 struct mlme_legacy_priv *mlme_priv;
2653
2654 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2655 WLAN_MLME_OBJMGR_ID);
2656
2657 if (!vdev) {
2658 mlme_legacy_err("vdev object is NULL");
2659 return;
2660 }
2661
2662 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2663 if (!mlme_priv) {
2664 mlme_legacy_err("vdev legacy private object is NULL");
2665 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2666 return;
2667 }
2668
2669 mlme_priv->mlme_roam.roam_cfg.supplicant_disabled_roaming = val;
2670 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2671}
2672
2673uint32_t
2674mlme_get_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2675{
2676 struct wlan_objmgr_vdev *vdev;
2677 struct mlme_legacy_priv *mlme_priv;
2678 uint32_t roam_bitmap;
2679
2680 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2681 WLAN_MLME_OBJMGR_ID);
2682
2683 if (!vdev) {
2684 mlme_legacy_err("vdev object is NULL");
2685 return 0;
2686 }
2687
2688 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2689 if (!mlme_priv) {
2690 mlme_legacy_err("vdev legacy private object is NULL");
2691 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2692 return 0;
2693 }
2694
2695 roam_bitmap = mlme_priv->mlme_roam.roam_cfg.roam_trigger_bitmap;
2696 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2697
2698 return roam_bitmap;
2699}
2700
2701void mlme_set_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc,
2702 uint8_t vdev_id, uint32_t val)
2703{
2704 struct wlan_objmgr_vdev *vdev;
2705 struct mlme_legacy_priv *mlme_priv;
2706
2707 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2708 WLAN_MLME_OBJMGR_ID);
2709 if (!vdev) {
2710 mlme_legacy_err("vdev object is NULL");
2711 return;
2712 }
2713
2714 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2715 if (!mlme_priv) {
2716 mlme_legacy_err("vdev legacy private object is NULL");
2717 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2718 return;
2719 }
2720
2721 mlme_priv->mlme_roam.roam_cfg.roam_trigger_bitmap = val;
2722 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2723}
2724
2725uint8_t
2726mlme_get_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2727{
2728 struct wlan_objmgr_vdev *vdev;
2729 struct mlme_legacy_priv *mlme_priv;
2730 uint8_t bitmap;
2731
2732 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2733 WLAN_MLME_OBJMGR_ID);
2734
2735 if (!vdev) {
2736 mlme_legacy_err("vdev object is NULL");
2737 return 0xFF;
2738 }
2739
2740 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2741 if (!mlme_priv) {
2742 mlme_legacy_err("vdev legacy private object is NULL");
2743 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2744 return 0xFF;
2745 }
2746
2747 bitmap = mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap;
2748 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2749
2750 return bitmap;
2751}
2752
2753void
2754mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2755 enum roam_control_requestor reqs, bool clear)
2756{
2757 struct wlan_objmgr_vdev *vdev;
2758 struct mlme_legacy_priv *mlme_priv;
2759
2760 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2761 WLAN_MLME_OBJMGR_ID);
2762 if (!vdev) {
2763 mlme_legacy_err("vdev object is NULL");
2764 return;
2765 }
2766
2767 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2768 if (!mlme_priv) {
2769 mlme_legacy_err("vdev legacy private object is NULL");
2770 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2771 return;
2772 }
2773
2774 if (clear)
2775 mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap &= ~reqs;
2776 else
2777 mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap |= reqs;
2778 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2779}
2780
2781enum roam_offload_state
2782mlme_get_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2783{
2784 struct wlan_objmgr_vdev *vdev;
2785 struct mlme_legacy_priv *mlme_priv;
2786 enum roam_offload_state roam_state;
2787
2788 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2789 WLAN_MLME_OBJMGR_ID);
2790
2791 if (!vdev) {
2792 mlme_legacy_err("vdev object is NULL");
2793 return ROAM_DEINIT;
2794 }
2795
2796 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2797 if (!mlme_priv) {
2798 mlme_legacy_err("vdev legacy private object is NULL");
2799 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2800 return ROAM_DEINIT;
2801 }
2802
2803 roam_state = mlme_priv->mlme_roam.roam_sm.state;
2804 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2805
2806 return roam_state;
2807}
2808
2809void mlme_set_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2810 enum roam_offload_state new_state)
2811{
2812 struct wlan_objmgr_vdev *vdev;
2813 struct mlme_legacy_priv *mlme_priv;
2814
2815 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2816 WLAN_MLME_OBJMGR_ID);
2817
2818 if (!vdev) {
2819 mlme_legacy_err("vdev object is NULL");
2820 return;
2821 }
2822
2823 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2824 if (!mlme_priv) {
2825 mlme_legacy_err("vdev legacy private object is NULL");
2826 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2827 return;
2828 }
2829
2830 mlme_print_roaming_state(vdev_id, mlme_priv->mlme_roam.roam_sm.state,
2831 new_state);
2832 mlme_priv->mlme_roam.roam_sm.state = new_state;
2833 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2834}
2835#endif