blob: 8dfa486360f4aac6d9abaca3352b441368d7384d [file] [log] [blame]
Sandeep Puligillac5609d52018-05-17 19:23:41 -07001/*
Sandeep Puligilla511c6e22019-12-20 17:03:50 -08002 * Copyright (c) 2018-2020 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 +053097QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
98 uint8_t *peer_mac, uint8_t *mic_len,
99 uint8_t *mic_hdr_len)
100{
101 struct wlan_objmgr_peer *peer;
102 uint32_t key_cipher;
103
104 if (!psoc || !mic_len || !mic_hdr_len || !peer_mac) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530105 mlme_legacy_debug("psoc/mic_len/mic_hdr_len/peer_mac null");
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530106 return QDF_STATUS_E_NULL_VALUE;
107 }
108
109 peer = wlan_objmgr_get_peer(psoc, pdev_id,
110 peer_mac, WLAN_LEGACY_MAC_ID);
111 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530112 mlme_legacy_debug("Peer of peer_mac %pM not found", peer_mac);
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530113 return QDF_STATUS_E_INVAL;
114 }
115
116 key_cipher =
117 wlan_crypto_get_peer_param(peer,
118 WLAN_CRYPTO_PARAM_UCAST_CIPHER);
119 wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_MAC_ID);
120
121 if (key_cipher & (1 << WLAN_CRYPTO_CIPHER_AES_GCM) ||
122 key_cipher & (1 << WLAN_CRYPTO_CIPHER_AES_GCM_256)) {
123 *mic_hdr_len = WLAN_IEEE80211_GCMP_HEADERLEN;
124 *mic_len = WLAN_IEEE80211_GCMP_MICLEN;
125 } else {
126 *mic_hdr_len = IEEE80211_CCMP_HEADERLEN;
127 *mic_len = IEEE80211_CCMP_MICLEN;
128 }
Abhishek Ambureec000072019-05-03 12:38:42 +0530129 mlme_legacy_debug("peer %pM hdr_len %d mic_len %d key_cipher 0x%x",
130 peer_mac, *mic_hdr_len, *mic_len, key_cipher);
Abhishek Singhf880a7d2019-04-29 14:51:11 +0530131
132 return QDF_STATUS_SUCCESS;
133}
134
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530135QDF_STATUS
136mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
137 void *arg)
138{
139 struct peer_mlme_priv_obj *peer_priv;
140 QDF_STATUS status;
141
142 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530143 mlme_legacy_err(" peer is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530144 return QDF_STATUS_E_FAILURE;
145 }
146
147 peer_priv = qdf_mem_malloc(sizeof(*peer_priv));
148 if (!peer_priv) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530149 mlme_legacy_err(" peer_priv component object alloc failed");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530150 return QDF_STATUS_E_NOMEM;
151 }
152
153 status = wlan_objmgr_peer_component_obj_attach(peer,
154 WLAN_UMAC_COMP_MLME,
155 (void *)peer_priv,
156 QDF_STATUS_SUCCESS);
157
158 if (QDF_IS_STATUS_ERROR(status)) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530159 mlme_legacy_err("unable to attach peer_priv obj to peer obj");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530160 qdf_mem_free(peer_priv);
161 }
162
163 return status;
164}
165
166QDF_STATUS
167mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
168 void *arg)
169{
170 struct peer_mlme_priv_obj *peer_priv;
171 QDF_STATUS status;
172
173 if (!peer) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530174 mlme_legacy_err(" peer is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530175 return QDF_STATUS_E_FAILURE;
176 }
177
178 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
179 WLAN_UMAC_COMP_MLME);
180 if (!peer_priv) {
Abhishek Ambureec000072019-05-03 12:38:42 +0530181 mlme_legacy_err(" peer MLME component object is NULL");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530182 return QDF_STATUS_E_FAILURE;
183 }
184
185 status = wlan_objmgr_peer_component_obj_detach(peer,
186 WLAN_UMAC_COMP_MLME,
187 peer_priv);
188
189 if (QDF_IS_STATUS_ERROR(status))
Abhishek Ambureec000072019-05-03 12:38:42 +0530190 mlme_legacy_err("unable to detach peer_priv obj to peer obj");
Abhishek Singh7c1c7432019-04-04 12:11:57 +0530191
192 qdf_mem_free(peer_priv);
193
194 return status;
195}
196
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +0530197static void mlme_init_chainmask_cfg(struct wlan_objmgr_psoc *psoc,
198 struct wlan_mlme_chainmask *chainmask_info)
199{
200 chainmask_info->txchainmask1x1 =
201 cfg_get(psoc, CFG_VHT_ENABLE_1x1_TX_CHAINMASK);
202
203 chainmask_info->rxchainmask1x1 =
204 cfg_get(psoc, CFG_VHT_ENABLE_1x1_RX_CHAINMASK);
205
206 chainmask_info->tx_chain_mask_cck =
207 cfg_get(psoc, CFG_TX_CHAIN_MASK_CCK);
208
209 chainmask_info->tx_chain_mask_1ss =
210 cfg_get(psoc, CFG_TX_CHAIN_MASK_1SS);
211
212 chainmask_info->num_11b_tx_chains =
213 cfg_get(psoc, CFG_11B_NUM_TX_CHAIN);
214
215 chainmask_info->num_11ag_tx_chains =
216 cfg_get(psoc, CFG_11AG_NUM_TX_CHAIN);
217
218 chainmask_info->tx_chain_mask_2g =
219 cfg_get(psoc, CFG_TX_CHAIN_MASK_2G);
220
221 chainmask_info->rx_chain_mask_2g =
222 cfg_get(psoc, CFG_RX_CHAIN_MASK_2G);
223
224 chainmask_info->tx_chain_mask_5g =
225 cfg_get(psoc, CFG_TX_CHAIN_MASK_5G);
226
227 chainmask_info->rx_chain_mask_5g =
228 cfg_get(psoc, CFG_RX_CHAIN_MASK_5G);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530229
230 chainmask_info->enable_bt_chain_separation =
231 cfg_get(psoc, CFG_ENABLE_BT_CHAIN_SEPARATION);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +0530232}
233
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530234#ifdef WLAN_FEATURE_11W
235static void mlme_init_pmf_cfg(struct wlan_objmgr_psoc *psoc,
236 struct wlan_mlme_generic *gen)
237{
238 gen->pmf_sa_query_max_retries =
239 cfg_get(psoc, CFG_PMF_SA_QUERY_MAX_RETRIES);
240 gen->pmf_sa_query_retry_interval =
241 cfg_get(psoc, CFG_PMF_SA_QUERY_RETRY_INTERVAL);
242}
243#else
244static void mlme_init_pmf_cfg(struct wlan_objmgr_psoc *psoc,
245 struct wlan_mlme_generic *gen)
246{
247 gen->pmf_sa_query_max_retries =
248 cfg_default(CFG_PMF_SA_QUERY_MAX_RETRIES);
249 gen->pmf_sa_query_retry_interval =
250 cfg_default(CFG_PMF_SA_QUERY_RETRY_INTERVAL);
251}
252#endif /*WLAN_FEATURE_11W*/
253
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530254#ifdef WLAN_FEATURE_LPSS
255static inline void
256mlme_init_lpass_support_cfg(struct wlan_objmgr_psoc *psoc,
257 struct wlan_mlme_generic *gen)
258{
259 gen->lpass_support = cfg_get(psoc, CFG_ENABLE_LPASS_SUPPORT);
260}
261#else
262static inline void
263mlme_init_lpass_support_cfg(struct wlan_objmgr_psoc *psoc,
264 struct wlan_mlme_generic *gen)
265{
266 gen->lpass_support = cfg_default(CFG_ENABLE_LPASS_SUPPORT);
267}
268#endif
269
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530270static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
271 struct wlan_mlme_generic *gen)
272{
273 gen->rtt3_enabled = cfg_default(CFG_RTT3_ENABLE);
Karthik Kantamneni9180c752018-11-14 12:14:17 +0530274 gen->rtt_mac_randomization =
275 cfg_get(psoc, CFG_ENABLE_RTT_MAC_RANDOMIZATION);
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530276 gen->band_capability =
277 cfg_get(psoc, CFG_BAND_CAPABILITY);
Vignesh Viswanathanf97cc112018-10-03 19:17:07 +0530278 gen->band = gen->band_capability;
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530279 gen->select_5ghz_margin =
280 cfg_get(psoc, CFG_SELECT_5GHZ_MARGIN);
281 gen->sub_20_chan_width =
282 cfg_get(psoc, CFG_SUB_20_CHANNEL_WIDTH);
283 gen->ito_repeat_count =
284 cfg_get(psoc, CFG_ITO_REPEAT_COUNT);
285 gen->dropped_pkt_disconnect_thresh =
286 cfg_get(psoc, CFG_DROPPED_PKT_DISCONNECT_THRESHOLD);
287 gen->prevent_link_down =
288 cfg_get(psoc, CFG_PREVENT_LINK_DOWN);
289 gen->memory_deep_sleep =
290 cfg_get(psoc, CFG_ENABLE_MEM_DEEP_SLEEP);
291 gen->cck_tx_fir_override =
292 cfg_get(psoc, CFG_ENABLE_CCK_TX_FIR_OVERRIDE);
293 gen->crash_inject =
294 cfg_get(psoc, CFG_ENABLE_CRASH_INJECT);
295 gen->self_recovery =
296 cfg_get(psoc, CFG_ENABLE_SELF_RECOVERY);
297 gen->sap_dot11mc =
298 cfg_get(psoc, CFG_SAP_DOT11MC);
299 gen->fatal_event_trigger =
300 cfg_get(psoc, CFG_ENABLE_FATAL_EVENT_TRIGGER);
301 gen->optimize_ca_event =
302 cfg_get(psoc, CFG_OPTIMIZE_CA_EVENT);
303 gen->fw_timeout_crash =
304 cfg_get(psoc, CFG_CRASH_FW_TIMEOUT);
Dundi Ravitejaf99ce092018-09-27 17:51:59 +0530305 gen->debug_packet_log = cfg_get(psoc, CFG_ENABLE_DEBUG_PACKET_LOG);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +0530306 gen->enable_deauth_to_disassoc_map =
307 cfg_get(psoc, CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP);
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530308 mlme_init_pmf_cfg(psoc, gen);
Vignesh Viswanathan7db3b042018-10-03 23:33:35 +0530309 mlme_init_lpass_support_cfg(psoc, gen);
Abhinav Kumard4d6eb72018-12-04 20:30:37 +0530310
Ashish Kumar Dhanotiyaefae55b2018-12-24 15:20:42 +0530311 gen->enabled_11h = cfg_get(psoc, CFG_11H_SUPPORT_ENABLED);
312 gen->enabled_11d = cfg_get(psoc, CFG_11D_SUPPORT_ENABLED);
Sourav Mohapatrac55bdf32018-12-13 16:16:50 +0530313 gen->enable_beacon_reception_stats =
314 cfg_get(psoc, CFG_ENABLE_BEACON_RECEPTION_STATS);
Wu Gaof3cbeaf2019-01-15 18:26:25 +0800315 gen->enable_remove_time_stamp_sync_cmd =
316 cfg_get(psoc, CFG_REMOVE_TIME_STAMP_SYNC_CMD);
Yeshwanth Sriram Guntukac52f24d2019-05-24 13:54:15 +0530317 gen->disable_4way_hs_offload =
318 cfg_get(psoc, CFG_DISABLE_4WAY_HS_OFFLOAD);
sheenam monga451c68c2019-12-11 20:00:17 +0530319 gen->mgmt_retry_max = cfg_get(psoc, CFG_MGMT_RETRY_MAX);
Abhinav Kumar444a5eb2019-12-03 18:56:55 +0530320 gen->bmiss_skip_full_scan = cfg_get(psoc, CFG_BMISS_SKIP_FULL_SCAN);
sheenam monga63736f62019-12-23 18:44:31 +0530321 gen->enable_ring_buffer = cfg_get(psoc, CFG_ENABLE_RING_BUFFER);
Alok Kumara73938f2020-01-22 20:56:59 +0530322 gen->enable_peer_unmap_conf_support =
323 cfg_get(psoc, CFG_DP_ENABLE_PEER_UMAP_CONF_SUPPORT);
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +0530324}
325
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530326static void mlme_init_edca_ani_cfg(struct wlan_mlme_edca_params *edca_params)
327{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530328 /* initialize the max allowed array length for read/write */
329 edca_params->ani_acbe_l.max_len = CFG_EDCA_DATA_LEN;
330 edca_params->ani_acbk_l.max_len = CFG_EDCA_DATA_LEN;
331 edca_params->ani_acvi_l.max_len = CFG_EDCA_DATA_LEN;
332 edca_params->ani_acvo_l.max_len = CFG_EDCA_DATA_LEN;
333
334 edca_params->ani_acbe_b.max_len = CFG_EDCA_DATA_LEN;
335 edca_params->ani_acbk_b.max_len = CFG_EDCA_DATA_LEN;
336 edca_params->ani_acvi_b.max_len = CFG_EDCA_DATA_LEN;
337 edca_params->ani_acvo_b.max_len = CFG_EDCA_DATA_LEN;
338
339 /* parse the ETSI edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530340 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBK_LOCAL),
341 edca_params->ani_acbk_l.data,
342 CFG_EDCA_DATA_LEN,
343 &edca_params->ani_acbk_l.len);
344
345 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBE_LOCAL),
346 edca_params->ani_acbe_l.data,
347 CFG_EDCA_DATA_LEN,
348 &edca_params->ani_acbe_l.len);
349
350 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVI_LOCAL),
351 edca_params->ani_acvi_l.data,
352 CFG_EDCA_DATA_LEN,
353 &edca_params->ani_acvi_l.len);
354
355 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVO_LOCAL),
356 edca_params->ani_acvo_l.data,
357 CFG_EDCA_DATA_LEN,
358 &edca_params->ani_acvo_l.len);
359
360 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBK),
361 edca_params->ani_acbk_b.data,
362 CFG_EDCA_DATA_LEN,
363 &edca_params->ani_acbk_b.len);
364
365 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACBE),
366 edca_params->ani_acbe_b.data,
367 CFG_EDCA_DATA_LEN,
368 &edca_params->ani_acbe_b.len);
369
370 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVI),
371 edca_params->ani_acvi_b.data,
372 CFG_EDCA_DATA_LEN,
373 &edca_params->ani_acvi_b.len);
374
375 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ANI_ACVO),
376 edca_params->ani_acvo_b.data,
377 CFG_EDCA_DATA_LEN,
378 &edca_params->ani_acvo_b.len);
379}
380
381static void mlme_init_edca_wme_cfg(struct wlan_mlme_edca_params *edca_params)
382{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530383 /* initialize the max allowed array length for read/write */
384 edca_params->wme_acbk_l.max_len = CFG_EDCA_DATA_LEN;
385 edca_params->wme_acbe_l.max_len = CFG_EDCA_DATA_LEN;
386 edca_params->wme_acvi_l.max_len = CFG_EDCA_DATA_LEN;
387 edca_params->wme_acvo_l.max_len = CFG_EDCA_DATA_LEN;
388
389 edca_params->wme_acbk_b.max_len = CFG_EDCA_DATA_LEN;
390 edca_params->wme_acbe_b.max_len = CFG_EDCA_DATA_LEN;
391 edca_params->wme_acvi_b.max_len = CFG_EDCA_DATA_LEN;
392 edca_params->wme_acvo_b.max_len = CFG_EDCA_DATA_LEN;
393
394 /* parse the WME edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530395 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBK_LOCAL),
396 edca_params->wme_acbk_l.data,
397 CFG_EDCA_DATA_LEN,
398 &edca_params->wme_acbk_l.len);
399
400 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBE_LOCAL),
401 edca_params->wme_acbe_l.data,
402 CFG_EDCA_DATA_LEN,
403 &edca_params->wme_acbe_l.len);
404
405 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVI_LOCAL),
406 edca_params->wme_acvi_l.data,
407 CFG_EDCA_DATA_LEN,
408 &edca_params->wme_acvi_l.len);
409
410 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVO_LOCAL),
411 edca_params->wme_acvo_l.data,
412 CFG_EDCA_DATA_LEN,
413 &edca_params->wme_acvo_l.len);
414
415 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBK),
416 edca_params->wme_acbk_b.data,
417 CFG_EDCA_DATA_LEN,
418 &edca_params->wme_acbk_b.len);
419
420 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACBE),
421 edca_params->wme_acbe_b.data,
422 CFG_EDCA_DATA_LEN,
423 &edca_params->wme_acbe_b.len);
424
425 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVI),
426 edca_params->wme_acvi_b.data,
427 CFG_EDCA_DATA_LEN,
428 &edca_params->wme_acvi_b.len);
429
430 qdf_uint8_array_parse(cfg_default(CFG_EDCA_WME_ACVO),
431 edca_params->wme_acvo_b.data,
432 CFG_EDCA_DATA_LEN,
433 &edca_params->wme_acvo_b.len);
434}
435
436static void mlme_init_edca_etsi_cfg(struct wlan_mlme_edca_params *edca_params)
437{
Pragaspathi Thilagarajfe1efec2018-09-16 00:18:26 +0530438 /* initialize the max allowed array length for read/write */
439 edca_params->etsi_acbe_l.max_len = CFG_EDCA_DATA_LEN;
440 edca_params->etsi_acbk_l.max_len = CFG_EDCA_DATA_LEN;
441 edca_params->etsi_acvi_l.max_len = CFG_EDCA_DATA_LEN;
442 edca_params->etsi_acvo_l.max_len = CFG_EDCA_DATA_LEN;
443
444 edca_params->etsi_acbe_b.max_len = CFG_EDCA_DATA_LEN;
445 edca_params->etsi_acbk_b.max_len = CFG_EDCA_DATA_LEN;
446 edca_params->etsi_acvi_b.max_len = CFG_EDCA_DATA_LEN;
447 edca_params->etsi_acvo_b.max_len = CFG_EDCA_DATA_LEN;
448
449 /* parse the ETSI edca parameters from cfg string for BK,BE,VI,VO ac */
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530450 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBK_LOCAL),
451 edca_params->etsi_acbk_l.data,
452 CFG_EDCA_DATA_LEN,
453 &edca_params->etsi_acbk_l.len);
454
455 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBE_LOCAL),
456 edca_params->etsi_acbe_l.data,
457 CFG_EDCA_DATA_LEN,
458 &edca_params->etsi_acbe_l.len);
459
460 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVI_LOCAL),
461 edca_params->etsi_acvi_l.data,
462 CFG_EDCA_DATA_LEN,
463 &edca_params->etsi_acvi_l.len);
464
465 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVO_LOCAL),
466 edca_params->etsi_acvo_l.data,
467 CFG_EDCA_DATA_LEN,
468 &edca_params->etsi_acvo_l.len);
469
470 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBK),
471 edca_params->etsi_acbk_b.data,
472 CFG_EDCA_DATA_LEN,
473 &edca_params->etsi_acbk_b.len);
474
475 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACBE),
476 edca_params->etsi_acbe_b.data,
477 CFG_EDCA_DATA_LEN,
478 &edca_params->etsi_acbe_b.len);
479
480 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVI),
481 edca_params->etsi_acvi_b.data,
482 CFG_EDCA_DATA_LEN,
483 &edca_params->etsi_acvi_b.len);
484
485 qdf_uint8_array_parse(cfg_default(CFG_EDCA_ETSI_ACVO),
486 edca_params->etsi_acvo_b.data,
487 CFG_EDCA_DATA_LEN,
488 &edca_params->etsi_acvo_b.len);
489}
490
Abhinav Kumar06b9a122018-10-10 15:01:11 +0530491static void
492mlme_init_qos_edca_params(struct wlan_objmgr_psoc *psoc,
493 struct wlan_mlme_edca_params *edca_params)
494{
495 edca_params->enable_edca_params =
496 cfg_get(psoc, CFG_EDCA_ENABLE_PARAM);
497
498 edca_params->edca_ac_vo.vo_cwmin =
499 cfg_get(psoc, CFG_EDCA_VO_CWMIN);
500 edca_params->edca_ac_vo.vo_cwmax =
501 cfg_get(psoc, CFG_EDCA_VO_CWMAX);
502 edca_params->edca_ac_vo.vo_aifs =
503 cfg_get(psoc, CFG_EDCA_VO_AIFS);
504
505 edca_params->edca_ac_vi.vi_cwmin =
506 cfg_get(psoc, CFG_EDCA_VI_CWMIN);
507 edca_params->edca_ac_vi.vi_cwmax =
508 cfg_get(psoc, CFG_EDCA_VI_CWMAX);
509 edca_params->edca_ac_vi.vi_aifs =
510 cfg_get(psoc, CFG_EDCA_VI_AIFS);
511
512 edca_params->edca_ac_bk.bk_cwmin =
513 cfg_get(psoc, CFG_EDCA_BK_CWMIN);
514 edca_params->edca_ac_bk.bk_cwmax =
515 cfg_get(psoc, CFG_EDCA_BK_CWMAX);
516 edca_params->edca_ac_bk.bk_aifs =
517 cfg_get(psoc, CFG_EDCA_BK_AIFS);
518
519 edca_params->edca_ac_be.be_cwmin =
520 cfg_get(psoc, CFG_EDCA_BE_CWMIN);
521 edca_params->edca_ac_be.be_cwmax =
522 cfg_get(psoc, CFG_EDCA_BE_CWMAX);
523 edca_params->edca_ac_be.be_aifs =
524 cfg_get(psoc, CFG_EDCA_BE_AIFS);
525}
526
527static void mlme_init_edca_params(struct wlan_objmgr_psoc *psoc,
528 struct wlan_mlme_edca_params *edca_params)
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530529{
530 mlme_init_edca_ani_cfg(edca_params);
531 mlme_init_edca_wme_cfg(edca_params);
532 mlme_init_edca_etsi_cfg(edca_params);
Abhinav Kumar06b9a122018-10-10 15:01:11 +0530533 mlme_init_qos_edca_params(psoc, edca_params);
Pragaspathi Thilagaraj03efaa52018-09-15 22:58:18 +0530534}
535
Arif Hussain9f93a642018-09-10 18:32:25 -0700536static void mlme_init_timeout_cfg(struct wlan_objmgr_psoc *psoc,
537 struct wlan_mlme_timeout *timeouts)
538{
Arif Hussain43e09712018-09-18 19:31:57 -0700539 timeouts->join_failure_timeout =
540 cfg_get(psoc, CFG_JOIN_FAILURE_TIMEOUT);
541 timeouts->auth_failure_timeout =
542 cfg_get(psoc, CFG_AUTH_FAILURE_TIMEOUT);
543 timeouts->auth_rsp_timeout =
544 cfg_get(psoc, CFG_AUTH_RSP_TIMEOUT);
545 timeouts->assoc_failure_timeout =
546 cfg_get(psoc, CFG_ASSOC_FAILURE_TIMEOUT);
547 timeouts->reassoc_failure_timeout =
548 cfg_get(psoc, CFG_REASSOC_FAILURE_TIMEOUT);
549 timeouts->probe_after_hb_fail_timeout =
550 cfg_get(psoc, CFG_PROBE_AFTER_HB_FAIL_TIMEOUT);
551 timeouts->olbc_detect_timeout =
552 cfg_get(psoc, CFG_OLBC_DETECT_TIMEOUT);
553 timeouts->addts_rsp_timeout =
554 cfg_get(psoc, CFG_ADDTS_RSP_TIMEOUT);
555 timeouts->heart_beat_threshold =
556 cfg_get(psoc, CFG_HEART_BEAT_THRESHOLD);
557 timeouts->ap_keep_alive_timeout =
558 cfg_get(psoc, CFG_AP_KEEP_ALIVE_TIMEOUT);
559 timeouts->ap_link_monitor_timeout =
560 cfg_get(psoc, CFG_AP_LINK_MONITOR_TIMEOUT);
561 timeouts->ps_data_inactivity_timeout =
562 cfg_get(psoc, CFG_PS_DATA_INACTIVITY_TIMEOUT);
Arif Hussain4966f692018-11-27 16:40:51 -0800563 timeouts->wmi_wq_watchdog_timeout =
564 cfg_get(psoc, CFG_WMI_WQ_WATCHDOG);
Arif Hussain9f93a642018-09-10 18:32:25 -0700565}
566
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530567static void mlme_init_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
568 struct wlan_mlme_ht_caps *ht_caps)
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530569{
570 union {
571 uint16_t val_16;
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530572 struct mlme_ht_capabilities_info ht_cap_info;
573 } u1;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530574
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530575 union {
576 uint16_t val_16;
577 struct mlme_ht_ext_cap_info ext_cap_info;
578 } u2;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530579
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530580 union {
581 uint8_t val_8;
582 struct mlme_ht_info_field_1 info_field_1;
583 } u3;
584
585 union {
586 uint16_t val_16;
587 struct mlme_ht_info_field_2 info_field_2;
588 } u4;
589
590 union {
591 uint16_t val_16;
592 struct mlme_ht_info_field_3 info_field_3;
593 } u5;
594
595 /* HT Capabilities - HT Caps Info Field */
596 u1.val_16 = (uint16_t)cfg_default(CFG_HT_CAP_INFO);
597 u1.ht_cap_info.adv_coding_cap =
Vignesh Viswanathan78182502018-08-06 15:13:30 +0530598 cfg_get(psoc, CFG_RX_LDPC_ENABLE);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530599 u1.ht_cap_info.rx_stbc = cfg_get(psoc, CFG_RX_STBC_ENABLE);
600 u1.ht_cap_info.tx_stbc = cfg_get(psoc, CFG_TX_STBC_ENABLE);
601 u1.ht_cap_info.short_gi_20_mhz =
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530602 cfg_get(psoc, CFG_SHORT_GI_20MHZ);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530603 u1.ht_cap_info.short_gi_40_mhz =
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530604 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530605 ht_caps->ht_cap_info = u1.ht_cap_info;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530606
Vignesh Viswanathanddc89e52018-11-02 18:43:42 +0530607 /* HT Capapabilties - AMPDU Params */
608 ht_caps->ampdu_params.max_rx_ampdu_factor =
609 cfg_get(psoc, CFG_MAX_RX_AMPDU_FACTOR);
610 ht_caps->ampdu_params.mpdu_density =
611 cfg_get(psoc, CFG_MPDU_DENSITY);
612 ht_caps->ampdu_params.reserved = 0;
613
614 /* HT Capabilities - Extended Capabilities field */
615 u2.val_16 = (uint16_t)cfg_default(CFG_EXT_HT_CAP_INFO);
616 ht_caps->ext_cap_info = u2.ext_cap_info;
617
618 /* HT Operation - Information subset 1 of 3 */
619 u3.val_8 = (uint8_t)cfg_default(CFG_HT_INFO_FIELD_1);
620 ht_caps->info_field_1 = u3.info_field_1;
621
622 /* HT Operation - Information subset 2 of 3 */
623 u4.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_2);
624 ht_caps->info_field_2 = u4.info_field_2;
625
626 /* HT Operation - Information subset 3 of 3 */
627 u5.val_16 = (uint16_t)cfg_default(CFG_HT_INFO_FIELD_3);
628 ht_caps->info_field_3 = u5.info_field_3;
629
630 ht_caps->short_preamble = cfg_get(psoc, CFG_SHORT_PREAMBLE);
631 ht_caps->enable_ampdu_ps = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
632 ht_caps->enable_smps = cfg_get(psoc, CFG_ENABLE_HT_SMPS);
633 ht_caps->smps = cfg_get(psoc, CFG_HT_SMPS_MODE);
634 ht_caps->max_num_amsdu = cfg_get(psoc, CFG_MAX_AMSDU_NUM);
Vignesh Viswanathanecd4de72018-11-22 13:02:20 +0530635 ht_caps->tx_ldpc_enable = cfg_get(psoc, CFG_TX_LDPC_ENABLE);
636 ht_caps->short_slot_time_enabled =
637 cfg_get(psoc, CFG_SHORT_SLOT_TIME_ENABLED);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +0530638}
639
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530640static void mlme_init_qos_cfg(struct wlan_objmgr_psoc *psoc,
641 struct wlan_mlme_qos *qos_aggr_params)
642{
643 qos_aggr_params->tx_aggregation_size =
644 cfg_get(psoc, CFG_TX_AGGREGATION_SIZE);
645 qos_aggr_params->tx_aggregation_size_be =
646 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEBE);
647 qos_aggr_params->tx_aggregation_size_bk =
648 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEBK);
649 qos_aggr_params->tx_aggregation_size_vi =
650 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEVI);
651 qos_aggr_params->tx_aggregation_size_vo =
652 cfg_get(psoc, CFG_TX_AGGREGATION_SIZEVO);
653 qos_aggr_params->rx_aggregation_size =
654 cfg_get(psoc, CFG_RX_AGGREGATION_SIZE);
655 qos_aggr_params->tx_aggr_sw_retry_threshold_be =
656 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_BE);
657 qos_aggr_params->tx_aggr_sw_retry_threshold_bk =
658 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_BK);
659 qos_aggr_params->tx_aggr_sw_retry_threshold_vi =
660 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VI);
661 qos_aggr_params->tx_aggr_sw_retry_threshold_vo =
662 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY_VO);
Paul Zhanga25f75a2019-04-12 17:11:14 +0800663 qos_aggr_params->tx_aggr_sw_retry_threshold =
664 cfg_get(psoc, CFG_TX_AGGR_SW_RETRY);
stonez26388d02018-10-17 13:37:48 +0800665 qos_aggr_params->tx_non_aggr_sw_retry_threshold_be =
666 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BE);
667 qos_aggr_params->tx_non_aggr_sw_retry_threshold_bk =
668 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_BK);
669 qos_aggr_params->tx_non_aggr_sw_retry_threshold_vi =
670 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VI);
671 qos_aggr_params->tx_non_aggr_sw_retry_threshold_vo =
672 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY_VO);
Paul Zhanga25f75a2019-04-12 17:11:14 +0800673 qos_aggr_params->tx_non_aggr_sw_retry_threshold =
674 cfg_get(psoc, CFG_TX_NON_AGGR_SW_RETRY);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530675 qos_aggr_params->sap_max_inactivity_override =
676 cfg_get(psoc, CFG_SAP_MAX_INACTIVITY_OVERRIDE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530677 qos_aggr_params->sap_uapsd_enabled =
678 cfg_get(psoc, CFG_SAP_QOS_UAPSD);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +0530679}
680
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +0530681static void mlme_init_mbo_cfg(struct wlan_objmgr_psoc *psoc,
682 struct wlan_mlme_mbo *mbo_params)
683{
684 mbo_params->mbo_candidate_rssi_thres =
685 cfg_get(psoc, CFG_MBO_CANDIDATE_RSSI_THRESHOLD);
686 mbo_params->mbo_current_rssi_thres =
687 cfg_get(psoc, CFG_MBO_CURRENT_RSSI_THRESHOLD);
688 mbo_params->mbo_current_rssi_mcc_thres =
689 cfg_get(psoc, CFG_MBO_CUR_RSSI_MCC_THRESHOLD);
690 mbo_params->mbo_candidate_rssi_btc_thres =
691 cfg_get(psoc, CFG_MBO_CAND_RSSI_BTC_THRESHOLD);
692}
693
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530694static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc,
695 struct mlme_vht_capabilities_info
696 *vht_cap_info)
697{
698 vht_cap_info->supp_chan_width =
699 cfg_default(CFG_VHT_SUPP_CHAN_WIDTH);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530700 vht_cap_info->num_soundingdim =
701 cfg_default(CFG_VHT_NUM_SOUNDING_DIMENSIONS);
702 vht_cap_info->htc_vhtc =
703 cfg_default(CFG_VHT_HTC_VHTC);
704 vht_cap_info->link_adap_cap =
705 cfg_default(CFG_VHT_LINK_ADAPTATION_CAP);
706 vht_cap_info->rx_antpattern =
707 cfg_default(CFG_VHT_RX_ANT_PATTERN);
708 vht_cap_info->tx_antpattern =
709 cfg_default(CFG_VHT_TX_ANT_PATTERN);
710 vht_cap_info->rx_supp_data_rate =
711 cfg_default(CFG_VHT_RX_SUPP_DATA_RATE);
712 vht_cap_info->tx_supp_data_rate =
713 cfg_default(CFG_VHT_TX_SUPP_DATA_RATE);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530714 vht_cap_info->txop_ps =
715 cfg_default(CFG_VHT_TXOP_PS);
716 vht_cap_info->rx_mcs_map =
Abhinav Kumare057b412018-10-09 17:28:16 +0530717 CFG_VHT_RX_MCS_MAP_STADEF;
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530718 vht_cap_info->tx_mcs_map =
Abhinav Kumare057b412018-10-09 17:28:16 +0530719 CFG_VHT_TX_MCS_MAP_STADEF;
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530720 vht_cap_info->basic_mcs_set =
721 CFG_VHT_BASIC_MCS_SET_STADEF;
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530722
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530723 vht_cap_info->tx_bfee_ant_supp =
724 cfg_get(psoc, CFG_VHT_BEAMFORMEE_ANT_SUPP);
725
726 vht_cap_info->enable_txbf_20mhz =
Abhinav Kumare057b412018-10-09 17:28:16 +0530727 cfg_get(psoc, CFG_VHT_ENABLE_TXBF_IN_20MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530728 vht_cap_info->ampdu_len =
729 cfg_get(psoc, CFG_VHT_MPDU_LEN);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530730
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530731 vht_cap_info->ldpc_coding_cap =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530732 cfg_get(psoc, CFG_RX_LDPC_ENABLE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530733 vht_cap_info->short_gi_80mhz =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530734 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530735 vht_cap_info->short_gi_160mhz =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530736 cfg_get(psoc, CFG_SHORT_GI_40MHZ);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530737 vht_cap_info->tx_stbc =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530738 cfg_get(psoc, CFG_TX_STBC_ENABLE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530739 vht_cap_info->rx_stbc =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530740 cfg_get(psoc, CFG_RX_STBC_ENABLE);
741
Kiran Kumar Lokereeaaa3462018-11-01 19:03:23 -0700742 vht_cap_info->su_bformee =
sheenam monga0b8f2572019-05-30 19:26:45 +0530743 cfg_get(psoc, CFG_VHT_SU_BEAMFORMEE_CAP);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530744
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530745 vht_cap_info->mu_bformer =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530746 cfg_default(CFG_VHT_MU_BEAMFORMER_CAP);
747
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530748 vht_cap_info->enable_mu_bformee =
749 cfg_get(psoc, CFG_VHT_ENABLE_MU_BFORMEE_CAP_FEATURE);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530750 vht_cap_info->ampdu_len_exponent =
751 cfg_get(psoc, CFG_VHT_AMPDU_LEN_EXPONENT);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530752 vht_cap_info->channel_width =
753 cfg_get(psoc, CFG_VHT_CHANNEL_WIDTH);
754 vht_cap_info->rx_mcs =
755 cfg_get(psoc, CFG_VHT_ENABLE_RX_MCS_8_9);
756 vht_cap_info->tx_mcs =
757 cfg_get(psoc, CFG_VHT_ENABLE_TX_MCS_8_9);
758 vht_cap_info->rx_mcs2x2 =
759 cfg_get(psoc, CFG_VHT_ENABLE_RX_MCS2x2_8_9);
760 vht_cap_info->tx_mcs2x2 =
761 cfg_get(psoc, CFG_VHT_ENABLE_TX_MCS2x2_8_9);
762 vht_cap_info->enable_vht20_mcs9 =
763 cfg_get(psoc, CFG_ENABLE_VHT20_MCS9);
764 vht_cap_info->enable2x2 =
765 cfg_get(psoc, CFG_VHT_ENABLE_2x2_CAP_FEATURE);
766 vht_cap_info->enable_paid =
767 cfg_get(psoc, CFG_VHT_ENABLE_PAID_FEATURE);
768 vht_cap_info->enable_gid =
769 cfg_get(psoc, CFG_VHT_ENABLE_GID_FEATURE);
770 vht_cap_info->b24ghz_band =
771 cfg_get(psoc, CFG_ENABLE_VHT_FOR_24GHZ);
772 vht_cap_info->vendor_24ghz_band =
773 cfg_get(psoc, CFG_ENABLE_VENDOR_VHT_FOR_24GHZ);
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530774 vht_cap_info->tx_bfee_sap =
775 cfg_get(psoc, CFG_VHT_ENABLE_TXBF_SAP_MODE);
776 vht_cap_info->vendor_vhtie =
777 cfg_get(psoc, CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE);
778
779 if (vht_cap_info->enable2x2)
Kiran Kumar Lokere9159af62018-10-31 18:47:33 -0700780 vht_cap_info->su_bformer =
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530781 cfg_get(psoc, CFG_VHT_ENABLE_TX_SU_BEAM_FORMER);
782
Kiran Kumar Lokere9159af62018-10-31 18:47:33 -0700783 if (vht_cap_info->enable2x2 && vht_cap_info->su_bformer)
Abhinav Kumarb074f2f2018-09-15 15:32:11 +0530784 vht_cap_info->num_soundingdim = NUM_OF_SOUNDING_DIMENSIONS;
Abhinav Kumard4d6eb72018-12-04 20:30:37 +0530785
786 vht_cap_info->tx_bf_cap = cfg_default(CFG_TX_BF_CAP);
787 vht_cap_info->as_cap = cfg_default(CFG_AS_CAP);
788 vht_cap_info->disable_ldpc_with_txbf_ap =
789 cfg_get(psoc, CFG_DISABLE_LDPC_WITH_TXBF_AP);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +0530790}
791
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530792static void mlme_init_rates_in_cfg(struct wlan_objmgr_psoc *psoc,
793 struct wlan_mlme_rates *rates)
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530794{
795 rates->cfp_period = cfg_default(CFG_CFP_PERIOD);
796 rates->cfp_max_duration = cfg_default(CFG_CFP_MAX_DURATION);
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530797 rates->max_htmcs_txdata = cfg_get(psoc, CFG_MAX_HT_MCS_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530798 rates->disable_abg_rate_txdata = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530799 CFG_DISABLE_ABG_RATE_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530800 rates->sap_max_mcs_txdata = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530801 CFG_SAP_MAX_MCS_FOR_TX_DATA);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530802 rates->disable_high_ht_mcs_2x2 = cfg_get(psoc,
Karthik Kantamnenie3bbd7f2018-09-19 20:27:32 +0530803 CFG_DISABLE_HIGH_HT_RX_MCS_2x2);
804
805 rates->supported_11b.max_len = CFG_SUPPORTED_RATES_11B_LEN;
806 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_RATES_11B),
807 rates->supported_11b.data,
808 sizeof(rates->supported_11b.data),
809 &rates->supported_11b.len);
810 rates->supported_11a.max_len = CFG_SUPPORTED_RATES_11A_LEN;
811 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_RATES_11A),
812 rates->supported_11a.data,
813 sizeof(rates->supported_11a.data),
814 &rates->supported_11a.len);
815 rates->opr_rate_set.max_len = CFG_OPERATIONAL_RATE_SET_LEN;
816 rates->opr_rate_set.len = 0;
817 rates->ext_opr_rate_set.max_len = CFG_EXTENDED_OPERATIONAL_RATE_SET_LEN;
818 rates->ext_opr_rate_set.len = 0;
819 rates->supported_mcs_set.max_len = CFG_SUPPORTED_MCS_SET_LEN;
820 qdf_uint8_array_parse(cfg_default(CFG_SUPPORTED_MCS_SET),
821 rates->supported_mcs_set.data,
822 sizeof(rates->supported_mcs_set.data),
823 &rates->supported_mcs_set.len);
824 rates->basic_mcs_set.max_len = CFG_BASIC_MCS_SET_LEN;
825 qdf_uint8_array_parse(cfg_default(CFG_BASIC_MCS_SET),
826 rates->basic_mcs_set.data,
827 sizeof(rates->basic_mcs_set.data),
828 &rates->basic_mcs_set.len);
829 rates->current_mcs_set.max_len = CFG_CURRENT_MCS_SET_LEN;
830 qdf_uint8_array_parse(cfg_default(CFG_CURRENT_MCS_SET),
831 rates->current_mcs_set.data,
832 sizeof(rates->current_mcs_set.data),
833 &rates->current_mcs_set.len);
Karthik Kantamneni22dd0f62018-08-07 14:53:50 +0530834}
835
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700836static void mlme_init_dfs_cfg(struct wlan_objmgr_psoc *psoc,
837 struct wlan_mlme_dfs_cfg *dfs_cfg)
838{
Arif Hussain224d3812018-11-16 17:58:38 -0800839 dfs_cfg->dfs_ignore_cac = cfg_get(psoc, CFG_IGNORE_CAC);
840 dfs_cfg->dfs_master_capable =
841 cfg_get(psoc, CFG_ENABLE_DFS_MASTER_CAPABILITY);
842 dfs_cfg->dfs_disable_channel_switch =
843 cfg_get(psoc, CFG_DISABLE_DFS_CH_SWITCH);
844 dfs_cfg->dfs_filter_offload =
845 cfg_get(psoc, CFG_ENABLE_DFS_PHYERR_FILTEROFFLOAD);
846 dfs_cfg->dfs_prefer_non_dfs =
847 cfg_get(psoc, CFG_ENABLE_NON_DFS_CHAN_ON_RADAR);
848 dfs_cfg->dfs_beacon_tx_enhanced =
849 cfg_get(psoc, CFG_DFS_BEACON_TX_ENHANCED);
Arif Hussain0b634b42018-12-20 16:03:18 -0800850 dfs_cfg->dfs_disable_japan_w53 =
851 cfg_get(psoc, CFG_DISABLE_DFS_JAPAN_W53);
Arif Hussain224d3812018-11-16 17:58:38 -0800852 dfs_cfg->sap_tx_leakage_threshold =
853 cfg_get(psoc, CFG_SAP_TX_LEAKAGE_THRESHOLD);
Hangtian Zhu9a28ed02019-09-24 12:18:20 +0800854 dfs_cfg->dfs_pri_multiplier =
855 cfg_get(psoc, CFG_DFS_RADAR_PRI_MULTIPLIER);
Arif Hussain88d1fdd2018-09-26 16:12:24 -0700856}
857
gaurank kathpaliae5a17e42018-09-10 10:05:25 +0530858static void mlme_init_feature_flag_in_cfg(
859 struct wlan_objmgr_psoc *psoc,
860 struct wlan_mlme_feature_flag *feature_flags)
861{
862 feature_flags->accept_short_slot_assoc =
863 cfg_default(CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY);
864 feature_flags->enable_hcf = cfg_default(CFG_HCF_ENABLED);
865 feature_flags->enable_rsn = cfg_default(CFG_RSN_ENABLED);
866 feature_flags->enable_short_preamble_11g =
867 cfg_default(CFG_11G_SHORT_PREAMBLE_ENABLED);
868 feature_flags->enable_short_slot_time_11g =
869 cfg_default(CFG_11G_SHORT_SLOT_TIME_ENABLED);
870 feature_flags->channel_bonding_mode =
871 cfg_default(CFG_CHANNEL_BONDING_MODE);
872 feature_flags->enable_block_ack = cfg_default(CFG_BLOCK_ACK_ENABLED);
873 feature_flags->enable_ampdu = cfg_get(psoc, CFG_ENABLE_AMPDUPS);
Krunal Sonid2c33e12018-12-06 15:02:37 -0800874 feature_flags->mcc_rts_cts_prot = cfg_get(psoc,
875 CFG_FW_MCC_RTS_CTS_PROT);
876 feature_flags->mcc_bcast_prob_rsp = cfg_get(psoc,
877 CFG_FW_MCC_BCAST_PROB_RESP);
878 feature_flags->enable_mcc = cfg_get(psoc, CFG_MCC_FEATURE);
Wu Gaoed616a12019-01-16 15:19:21 +0800879 feature_flags->channel_bonding_mode_24ghz =
880 cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_24GHZ);
881 feature_flags->channel_bonding_mode_5ghz =
882 cfg_get(psoc, CFG_CHANNEL_BONDING_MODE_5GHZ);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +0530883}
884
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +0530885static void mlme_init_sap_protection_cfg(struct wlan_objmgr_psoc *psoc,
886 struct wlan_mlme_sap_protection
887 *sap_protection_params)
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530888{
889 sap_protection_params->protection_enabled =
890 cfg_default(CFG_PROTECTION_ENABLED);
891 sap_protection_params->protection_force_policy =
892 cfg_default(CFG_FORCE_POLICY_PROTECTION);
Pragaspathi Thilagaraj1ee76002018-09-18 21:38:51 +0530893 sap_protection_params->ignore_peer_ht_opmode =
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530894 cfg_get(psoc, CFG_IGNORE_PEER_HT_MODE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530895 sap_protection_params->enable_ap_obss_protection =
896 cfg_get(psoc, CFG_AP_OBSS_PROTECTION_ENABLE);
Pragaspathi Thilagarajf37f3932019-01-11 00:25:43 +0530897 sap_protection_params->is_ap_prot_enabled =
898 cfg_get(psoc, CFG_AP_ENABLE_PROTECTION_MODE);
Pragaspathi Thilagaraj4b5c0602018-11-14 22:35:23 +0530899 sap_protection_params->ap_protection_mode =
900 cfg_get(psoc, CFG_AP_PROTECTION_MODE);
Pragaspathi Thilagarajf4cc58b2018-07-31 00:39:05 +0530901}
902
Bala Venkatesh6d537092018-09-25 10:38:36 +0530903#ifdef WLAN_FEATURE_11AX
Bala Venkatesh9296f092018-09-21 16:25:24 +0530904static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
Bala Venkatesh6d537092018-09-25 10:38:36 +0530905 struct wlan_mlme_cfg *mlme_cfg)
Bala Venkatesh9296f092018-09-21 16:25:24 +0530906{
Bala Venkatesh6d537092018-09-25 10:38:36 +0530907 uint32_t chan_width;
908 uint16_t value = 0;
909 struct wlan_mlme_he_caps *he_caps = &mlme_cfg->he_caps;
910
911 he_caps->dot11_he_cap.htc_he = cfg_default(CFG_HE_CONTROL);
912 he_caps->dot11_he_cap.twt_request = cfg_default(CFG_HE_TWT_REQUESTOR);
913 he_caps->dot11_he_cap.twt_responder = cfg_default(CFG_HE_TWT_RESPONDER);
914 he_caps->dot11_he_cap.fragmentation =
915 cfg_default(CFG_HE_FRAGMENTATION);
916 he_caps->dot11_he_cap.max_num_frag_msdu_amsdu_exp =
917 cfg_default(CFG_HE_MAX_FRAG_MSDU);
918 he_caps->dot11_he_cap.min_frag_size = cfg_default(CFG_HE_MIN_FRAG_SIZE);
919 he_caps->dot11_he_cap.trigger_frm_mac_pad =
920 cfg_default(CFG_HE_TRIG_PAD);
921 he_caps->dot11_he_cap.multi_tid_aggr_rx_supp =
922 cfg_default(CFG_HE_MTID_AGGR_RX);
923 he_caps->dot11_he_cap.he_link_adaptation =
924 cfg_default(CFG_HE_LINK_ADAPTATION);
925 he_caps->dot11_he_cap.all_ack = cfg_default(CFG_HE_ALL_ACK);
926 he_caps->dot11_he_cap.trigd_rsp_sched =
Bala Venkatesh9296f092018-09-21 16:25:24 +0530927 cfg_default(CFG_HE_TRIGD_RSP_SCHEDULING);
Bala Venkatesh6d537092018-09-25 10:38:36 +0530928 he_caps->dot11_he_cap.a_bsr = cfg_default(CFG_HE_BUFFER_STATUS_RPT);
929 he_caps->dot11_he_cap.broadcast_twt = cfg_default(CFG_HE_BCAST_TWT);
930 he_caps->dot11_he_cap.ba_32bit_bitmap = cfg_default(CFG_HE_BA_32BIT);
931 he_caps->dot11_he_cap.mu_cascade = cfg_default(CFG_HE_MU_CASCADING);
932 he_caps->dot11_he_cap.ack_enabled_multitid =
933 cfg_default(CFG_HE_MULTI_TID);
934 he_caps->dot11_he_cap.omi_a_ctrl = cfg_default(CFG_HE_OMI);
935 he_caps->dot11_he_cap.ofdma_ra = cfg_default(CFG_HE_OFDMA_RA);
936 he_caps->dot11_he_cap.max_ampdu_len_exp_ext =
937 cfg_default(CFG_HE_MAX_AMPDU_LEN);
938 he_caps->dot11_he_cap.amsdu_frag = cfg_default(CFG_HE_AMSDU_FRAG);
939 he_caps->dot11_he_cap.flex_twt_sched =
940 cfg_default(CFG_HE_FLEX_TWT_SCHED);
941 he_caps->dot11_he_cap.rx_ctrl_frame = cfg_default(CFG_HE_RX_CTRL);
942 he_caps->dot11_he_cap.bsrp_ampdu_aggr =
943 cfg_default(CFG_HE_BSRP_AMPDU_AGGR);
944 he_caps->dot11_he_cap.qtp = cfg_default(CFG_HE_QTP);
945 he_caps->dot11_he_cap.a_bqr = cfg_default(CFG_HE_A_BQR);
946 he_caps->dot11_he_cap.spatial_reuse_param_rspder =
947 cfg_default(CFG_HE_SR_RESPONDER);
948 he_caps->dot11_he_cap.ndp_feedback_supp =
949 cfg_default(CFG_HE_NDP_FEEDBACK_SUPP);
950 he_caps->dot11_he_cap.ops_supp = cfg_default(CFG_HE_OPS_SUPP);
951 he_caps->dot11_he_cap.amsdu_in_ampdu =
952 cfg_default(CFG_HE_AMSDU_IN_AMPDU);
953
954 chan_width = cfg_default(CFG_HE_CHAN_WIDTH);
955 he_caps->dot11_he_cap.chan_width_0 = HE_CH_WIDTH_GET_BIT(chan_width, 0);
956 he_caps->dot11_he_cap.chan_width_1 = HE_CH_WIDTH_GET_BIT(chan_width, 1);
957 he_caps->dot11_he_cap.chan_width_2 = HE_CH_WIDTH_GET_BIT(chan_width, 2);
958 he_caps->dot11_he_cap.chan_width_3 = HE_CH_WIDTH_GET_BIT(chan_width, 3);
959 he_caps->dot11_he_cap.chan_width_4 = HE_CH_WIDTH_GET_BIT(chan_width, 4);
960 he_caps->dot11_he_cap.chan_width_5 = HE_CH_WIDTH_GET_BIT(chan_width, 5);
961 he_caps->dot11_he_cap.chan_width_6 = HE_CH_WIDTH_GET_BIT(chan_width, 6);
962
963 he_caps->dot11_he_cap.multi_tid_aggr_tx_supp =
964 cfg_default(CFG_HE_MTID_AGGR_TX);
965 he_caps->dot11_he_cap.he_sub_ch_sel_tx_supp =
966 cfg_default(CFG_HE_SUB_CH_SEL_TX);
967 he_caps->dot11_he_cap.ul_2x996_tone_ru_supp =
968 cfg_default(CFG_HE_UL_2X996_RU);
969 he_caps->dot11_he_cap.om_ctrl_ul_mu_data_dis_rx =
970 cfg_default(CFG_HE_OM_CTRL_UL_MU_DIS_RX);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -0800971 he_caps->dot11_he_cap.he_dynamic_smps =
972 cfg_default(CFG_HE_DYNAMIC_SMPS);
973 he_caps->dot11_he_cap.punctured_sounding_supp =
974 cfg_default(CFG_HE_PUNCTURED_SOUNDING);
975 he_caps->dot11_he_cap.ht_vht_trg_frm_rx_supp =
976 cfg_default(CFG_HE_HT_VHT_TRG_FRM_RX);
Bala Venkatesh6d537092018-09-25 10:38:36 +0530977 he_caps->dot11_he_cap.rx_pream_puncturing =
978 cfg_default(CFG_HE_RX_PREAM_PUNC);
979 he_caps->dot11_he_cap.device_class =
980 cfg_default(CFG_HE_CLASS_OF_DEVICE);
981 he_caps->dot11_he_cap.ldpc_coding = cfg_default(CFG_HE_LDPC);
982 he_caps->dot11_he_cap.he_1x_ltf_800_gi_ppdu =
983 cfg_default(CFG_HE_LTF_PPDU);
984 he_caps->dot11_he_cap.midamble_tx_rx_max_nsts =
985 cfg_default(CFG_HE_MIDAMBLE_RX_MAX_NSTS);
986 he_caps->dot11_he_cap.he_4x_ltf_3200_gi_ndp =
987 cfg_default(CFG_HE_LTF_NDP);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -0800988 he_caps->dot11_he_cap.tb_ppdu_tx_stbc_lt_80mhz =
Bala Venkatesh6d537092018-09-25 10:38:36 +0530989 cfg_default(CFG_HE_TX_STBC_LT80);
990 he_caps->dot11_he_cap.rx_stbc_lt_80mhz =
991 cfg_default(CFG_HE_RX_STBC_LT80);
992 he_caps->dot11_he_cap.doppler = cfg_default(CFG_HE_DOPPLER);
Harprit Chhabada09b50032019-02-13 14:48:01 -0800993 he_caps->dot11_he_cap.ul_mu =
994 cfg_get(psoc, CFG_HE_UL_MUMIMO);
Bala Venkatesh6d537092018-09-25 10:38:36 +0530995 he_caps->dot11_he_cap.dcm_enc_tx = cfg_default(CFG_HE_DCM_TX);
996 he_caps->dot11_he_cap.dcm_enc_rx = cfg_default(CFG_HE_DCM_RX);
997 he_caps->dot11_he_cap.ul_he_mu = cfg_default(CFG_HE_MU_PPDU);
998 he_caps->dot11_he_cap.su_beamformer = cfg_default(CFG_HE_SU_BEAMFORMER);
999 he_caps->dot11_he_cap.su_beamformee = cfg_default(CFG_HE_SU_BEAMFORMEE);
1000 he_caps->dot11_he_cap.mu_beamformer = cfg_default(CFG_HE_MU_BEAMFORMER);
1001 he_caps->dot11_he_cap.bfee_sts_lt_80 =
1002 cfg_default(CFG_HE_BFEE_STS_LT80);
1003 he_caps->dot11_he_cap.bfee_sts_gt_80 =
1004 cfg_default(CFG_HE_BFEE_STS_GT80);
1005 he_caps->dot11_he_cap.num_sounding_lt_80 =
1006 cfg_default(CFG_HE_NUM_SOUND_LT80);
1007 he_caps->dot11_he_cap.num_sounding_gt_80 =
1008 cfg_default(CFG_HE_NUM_SOUND_GT80);
1009 he_caps->dot11_he_cap.su_feedback_tone16 =
1010 cfg_default(CFG_HE_SU_FEED_TONE16);
1011 he_caps->dot11_he_cap.mu_feedback_tone16 =
1012 cfg_default(CFG_HE_MU_FEED_TONE16);
1013 he_caps->dot11_he_cap.codebook_su = cfg_default(CFG_HE_CODEBOOK_SU);
1014 he_caps->dot11_he_cap.codebook_mu = cfg_default(CFG_HE_CODEBOOK_MU);
1015 he_caps->dot11_he_cap.beamforming_feedback =
1016 cfg_default(CFG_HE_BFRM_FEED);
1017 he_caps->dot11_he_cap.he_er_su_ppdu = cfg_default(CFG_HE_ER_SU_PPDU);
1018 he_caps->dot11_he_cap.dl_mu_mimo_part_bw =
1019 cfg_default(CFG_HE_DL_PART_BW);
1020 he_caps->dot11_he_cap.ppet_present = cfg_default(CFG_HE_PPET_PRESENT);
1021 he_caps->dot11_he_cap.srp = cfg_default(CFG_HE_SRP);
1022 he_caps->dot11_he_cap.power_boost = cfg_default(CFG_HE_POWER_BOOST);
1023 he_caps->dot11_he_cap.he_ltf_800_gi_4x = cfg_default(CFG_HE_4x_LTF_GI);
1024 he_caps->dot11_he_cap.max_nc = cfg_default(CFG_HE_MAX_NC);
Kiran Kumar Lokere9cab5252019-02-04 14:38:08 -08001025 he_caps->dot11_he_cap.tb_ppdu_tx_stbc_gt_80mhz =
Bala Venkatesh6d537092018-09-25 10:38:36 +05301026 cfg_default(CFG_HE_TX_STBC_GT80);
1027 he_caps->dot11_he_cap.rx_stbc_gt_80mhz =
1028 cfg_default(CFG_HE_RX_STBC_GT80);
1029 he_caps->dot11_he_cap.er_he_ltf_800_gi_4x =
1030 cfg_default(CFG_HE_ER_4x_LTF_GI);
1031 he_caps->dot11_he_cap.he_ppdu_20_in_40Mhz_2G =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301032 cfg_default(CFG_HE_PPDU_20_IN_40MHZ_2G);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301033 he_caps->dot11_he_cap.he_ppdu_20_in_160_80p80Mhz =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301034 cfg_default(CFG_HE_PPDU_20_IN_160_80P80MHZ);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301035 he_caps->dot11_he_cap.he_ppdu_80_in_160_80p80Mhz =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301036 cfg_default(CFG_HE_PPDU_80_IN_160_80P80MHZ);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301037 he_caps->dot11_he_cap.er_1x_he_ltf_gi =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301038 cfg_default(CFG_HE_ER_1X_HE_LTF_GI);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301039 he_caps->dot11_he_cap.midamble_tx_rx_1x_he_ltf =
1040 cfg_default(CFG_HE_MIDAMBLE_TXRX_1X_HE_LTF);
1041 he_caps->dot11_he_cap.dcm_max_bw = cfg_default(CFG_HE_DCM_MAX_BW);
1042 he_caps->dot11_he_cap.longer_than_16_he_sigb_ofdm_sym =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301043 cfg_default(CFG_HE_LONGER_16_SIGB_OFDM_SYM);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301044 he_caps->dot11_he_cap.non_trig_cqi_feedback =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301045 cfg_default(CFG_HE_NON_TRIG_CQI_FEEDBACK);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301046 he_caps->dot11_he_cap.tx_1024_qam_lt_242_tone_ru =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301047 cfg_default(CFG_HE_TX_1024_QAM_LT_242_RU);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301048 he_caps->dot11_he_cap.rx_1024_qam_lt_242_tone_ru =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301049 cfg_default(CFG_HE_RX_1024_QAM_LT_242_RU);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301050 he_caps->dot11_he_cap.rx_full_bw_su_he_mu_compress_sigb =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301051 cfg_default(CFG_HE_RX_FULL_BW_MU_CMPR_SIGB);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301052 he_caps->dot11_he_cap.rx_full_bw_su_he_mu_non_cmpr_sigb =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301053 cfg_default(CFG_HE_RX_FULL_BW_MU_NON_CMPR_SIGB);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301054 he_caps->dot11_he_cap.rx_he_mcs_map_lt_80 =
1055 cfg_default(CFG_HE_RX_MCS_MAP_LT_80);
1056 he_caps->dot11_he_cap.tx_he_mcs_map_lt_80 =
1057 cfg_default(CFG_HE_TX_MCS_MAP_LT_80);
1058 value = cfg_default(CFG_HE_RX_MCS_MAP_160);
1059 qdf_mem_copy(he_caps->dot11_he_cap.rx_he_mcs_map_160, &value,
1060 sizeof(uint16_t));
1061 value = cfg_default(CFG_HE_TX_MCS_MAP_160);
1062 qdf_mem_copy(he_caps->dot11_he_cap.tx_he_mcs_map_160, &value,
1063 sizeof(uint16_t));
1064 value = cfg_default(CFG_HE_RX_MCS_MAP_80_80);
1065 qdf_mem_copy(he_caps->dot11_he_cap.rx_he_mcs_map_80_80, &value,
1066 sizeof(uint16_t));
1067 value = cfg_default(CFG_HE_TX_MCS_MAP_80_80);
1068 qdf_mem_copy(he_caps->dot11_he_cap.tx_he_mcs_map_80_80, &value,
1069 sizeof(uint16_t));
Bala Venkatesh9296f092018-09-21 16:25:24 +05301070 he_caps->he_ops_basic_mcs_nss = cfg_default(CFG_HE_OPS_BASIC_MCS_NSS);
Bala Venkatesh6d537092018-09-25 10:38:36 +05301071 he_caps->he_dynamic_fragmentation =
Bala Venkatesh9296f092018-09-21 16:25:24 +05301072 cfg_get(psoc, CFG_HE_DYNAMIC_FRAGMENTATION);
1073 he_caps->enable_ul_mimo =
1074 cfg_get(psoc, CFG_ENABLE_UL_MIMO);
1075 he_caps->enable_ul_ofdm =
1076 cfg_get(psoc, CFG_ENABLE_UL_OFDMA);
1077 he_caps->he_sta_obsspd =
1078 cfg_get(psoc, CFG_HE_STA_OBSSPD);
1079 qdf_mem_zero(he_caps->he_ppet_2g, MLME_HE_PPET_LEN);
1080 qdf_mem_zero(he_caps->he_ppet_5g, MLME_HE_PPET_LEN);
1081}
Bala Venkatesh6d537092018-09-25 10:38:36 +05301082#else
1083static void mlme_init_he_cap_in_cfg(struct wlan_objmgr_psoc *psoc,
1084 struct wlan_mlme_cfg *mlme_cfg)
1085{
1086}
1087#endif
Bala Venkatesh9296f092018-09-21 16:25:24 +05301088
Arif Hussain178f35f2018-11-13 18:26:18 -08001089static void mlme_init_twt_cfg(struct wlan_objmgr_psoc *psoc,
1090 struct wlan_mlme_cfg_twt *twt_cfg)
1091{
1092 twt_cfg->is_twt_bcast_enabled = cfg_get(psoc, CFG_BCAST_TWT);
1093 twt_cfg->is_twt_enabled = cfg_get(psoc, CFG_ENABLE_TWT);
1094 twt_cfg->is_twt_responder_enabled = cfg_get(psoc, CFG_TWT_RESPONDER);
1095 twt_cfg->is_twt_requestor_enabled = cfg_get(psoc, CFG_TWT_REQUESTOR);
1096 twt_cfg->twt_congestion_timeout = cfg_get(psoc, CFG_TWT_CONGESTION_TIMEOUT);
1097}
1098
Srinivas Dasaried83dde2019-02-11 16:21:42 +05301099#ifdef WLAN_FEATURE_SAE
1100static bool is_sae_sap_enabled(struct wlan_objmgr_psoc *psoc)
1101{
1102 return cfg_get(psoc, CFG_IS_SAP_SAE_ENABLED);
1103}
1104#else
1105static bool is_sae_sap_enabled(struct wlan_objmgr_psoc *psoc)
1106{
1107 return false;
1108}
1109#endif
1110
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301111static void mlme_init_sap_cfg(struct wlan_objmgr_psoc *psoc,
1112 struct wlan_mlme_cfg_sap *sap_cfg)
Bala Venkatesh100d7422018-08-27 11:42:21 +05301113{
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301114 uint8_t *ssid;
1115
1116 ssid = cfg_default(CFG_SSID);
Srinivas Girigowdab8fdc642019-03-19 15:33:03 -07001117 qdf_mem_zero(sap_cfg->cfg_ssid, WLAN_SSID_MAX_LEN);
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301118 sap_cfg->cfg_ssid_len = STR_SSID_DEFAULT_LEN;
1119 qdf_mem_copy(sap_cfg->cfg_ssid, ssid, STR_SSID_DEFAULT_LEN);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301120 sap_cfg->beacon_interval = cfg_get(psoc, CFG_BEACON_INTERVAL);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301121 sap_cfg->dtim_interval = cfg_default(CFG_DTIM_PERIOD);
1122 sap_cfg->listen_interval = cfg_default(CFG_LISTEN_INTERVAL);
1123 sap_cfg->sap_11g_policy = cfg_default(CFG_11G_ONLY_POLICY);
1124 sap_cfg->assoc_sta_limit = cfg_default(CFG_ASSOC_STA_LIMIT);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301125 sap_cfg->enable_lte_coex = cfg_get(psoc, CFG_ENABLE_LTE_COEX);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301126 sap_cfg->rmc_action_period_freq =
1127 cfg_default(CFG_RMC_ACTION_PERIOD_FREQUENCY);
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301128 sap_cfg->rate_tx_mgmt = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT);
1129 sap_cfg->rate_tx_mgmt_2g = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT_2G);
1130 sap_cfg->rate_tx_mgmt_5g = cfg_get(psoc, CFG_RATE_FOR_TX_MGMT_5G);
1131 sap_cfg->tele_bcn_wakeup_en = cfg_get(psoc, CFG_TELE_BCN_WAKEUP_EN);
1132 sap_cfg->tele_bcn_max_li = cfg_get(psoc, CFG_TELE_BCN_MAX_LI);
1133 sap_cfg->sap_get_peer_info = cfg_get(psoc, CFG_SAP_GET_PEER_INFO);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301134 sap_cfg->sap_allow_all_chan_param_name =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301135 cfg_get(psoc, CFG_SAP_ALLOW_ALL_CHANNEL_PARAM);
1136 sap_cfg->sap_max_no_peers = cfg_get(psoc, CFG_SAP_MAX_NO_PEERS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301137 sap_cfg->sap_max_offload_peers =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301138 cfg_get(psoc, CFG_SAP_MAX_OFFLOAD_PEERS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301139 sap_cfg->sap_max_offload_reorder_buffs =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301140 cfg_get(psoc, CFG_SAP_MAX_OFFLOAD_REORDER_BUFFS);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301141 sap_cfg->sap_ch_switch_beacon_cnt =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301142 cfg_get(psoc, CFG_SAP_CH_SWITCH_BEACON_CNT);
1143 sap_cfg->sap_ch_switch_mode = cfg_get(psoc, CFG_SAP_CH_SWITCH_MODE);
1144 sap_cfg->sap_internal_restart =
1145 cfg_get(psoc, CFG_SAP_INTERNAL_RESTART);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301146 sap_cfg->chan_switch_hostapd_rate_enabled_name =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301147 cfg_get(psoc, CFG_CHAN_SWITCH_HOSTAPD_RATE_ENABLED_NAME);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301148 sap_cfg->reduced_beacon_interval =
Bala Venkatesh2fde2c62018-09-11 20:33:24 +05301149 cfg_get(psoc, CFG_REDUCED_BEACON_INTERVAL);
Bala Venkatesh46e29032018-11-14 18:24:55 +05301150 sap_cfg->max_li_modulated_dtim_time =
1151 cfg_get(psoc, CFG_MAX_LI_MODULATED_DTIM);
1152 sap_cfg->country_code_priority =
1153 cfg_get(psoc, CFG_COUNTRY_CODE_PRIORITY);
1154 sap_cfg->sap_pref_chan_location =
1155 cfg_get(psoc, CFG_SAP_PREF_CHANNEL_LOCATION);
Bala Venkatesh3d786eb2018-11-20 12:59:31 +05301156 sap_cfg->sap_force_11n_for_11ac =
1157 cfg_get(psoc, CFG_SAP_FORCE_11N_FOR_11AC);
1158 sap_cfg->go_force_11n_for_11ac =
1159 cfg_get(psoc, CFG_GO_FORCE_11N_FOR_11AC);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301160 sap_cfg->ap_random_bssid_enable =
1161 cfg_get(psoc, CFG_AP_ENABLE_RANDOM_BSSID);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001162 sap_cfg->sap_mcc_chnl_avoid =
1163 cfg_get(psoc, CFG_SAP_MCC_CHANNEL_AVOIDANCE);
Sandeep Puligilla34618782019-01-04 17:42:42 -08001164 sap_cfg->sap_11ac_override =
1165 cfg_get(psoc, CFG_SAP_11AC_OVERRIDE);
1166 sap_cfg->go_11ac_override =
1167 cfg_get(psoc, CFG_GO_11AC_OVERRIDE);
Srinivas Dasaried83dde2019-02-11 16:21:42 +05301168 sap_cfg->sap_sae_enabled = is_sae_sap_enabled(psoc);
Harprit Chhabadae5742552019-03-21 16:28:48 -07001169 sap_cfg->is_sap_bcast_deauth_enabled =
1170 cfg_get(psoc, CFG_IS_SAP_BCAST_DEAUTH_ENABLED);
Sandeep Puligilla511c6e22019-12-20 17:03:50 -08001171 sap_cfg->is_6g_sap_fd_enabled =
1172 cfg_get(psoc, CFG_6G_SAP_FILS_DISCOVERY_ENABLED);
Bala Venkatesh100d7422018-08-27 11:42:21 +05301173}
1174
Wu Gaod8f3db02018-07-24 19:18:45 +08001175static void mlme_init_obss_ht40_cfg(struct wlan_objmgr_psoc *psoc,
1176 struct wlan_mlme_obss_ht40 *obss_ht40)
1177{
1178 obss_ht40->active_dwelltime =
1179 cfg_get(psoc, CFG_OBSS_HT40_SCAN_ACTIVE_DWELL_TIME);
1180 obss_ht40->passive_dwelltime =
1181 cfg_get(psoc, CFG_OBSS_HT40_SCAN_PASSIVE_DWELL_TIME);
1182 obss_ht40->width_trigger_interval =
1183 cfg_get(psoc, CFG_OBSS_HT40_SCAN_WIDTH_TRIGGER_INTERVAL);
1184 obss_ht40->passive_per_channel = (uint32_t)
1185 cfg_default(CFG_OBSS_HT40_SCAN_PASSIVE_TOTAL_PER_CHANNEL);
1186 obss_ht40->active_per_channel = (uint32_t)
1187 cfg_default(CFG_OBSS_HT40_SCAN_ACTIVE_TOTAL_PER_CHANNEL);
1188 obss_ht40->width_trans_delay = (uint32_t)
1189 cfg_default(CFG_OBSS_HT40_WIDTH_CH_TRANSITION_DELAY);
1190 obss_ht40->scan_activity_threshold = (uint32_t)
1191 cfg_default(CFG_OBSS_HT40_SCAN_ACTIVITY_THRESHOLD);
Wu Gaofc81ecf2018-11-22 11:38:41 +08001192 obss_ht40->is_override_ht20_40_24g =
1193 cfg_get(psoc, CFG_OBSS_HT40_OVERRIDE_HT40_20_24GHZ);
Wu Gao2255ea22019-01-04 15:44:35 +08001194 obss_ht40->obss_detection_offload_enabled =
1195 (bool)cfg_default(CFG_OBSS_DETECTION_OFFLOAD);
1196 obss_ht40->obss_color_collision_offload_enabled =
1197 (bool)cfg_default(CFG_OBSS_COLOR_COLLISION_OFFLOAD);
Wu Gaod8f3db02018-07-24 19:18:45 +08001198}
Wu Gaofc81ecf2018-11-22 11:38:41 +08001199
Harprit Chhabadabec6de42018-09-10 10:21:15 -07001200static void mlme_init_threshold_cfg(struct wlan_objmgr_psoc *psoc,
1201 struct wlan_mlme_threshold *threshold)
1202{
1203 threshold->rts_threshold = cfg_get(psoc, CFG_RTS_THRESHOLD);
1204 threshold->frag_threshold = cfg_get(psoc, CFG_FRAG_THRESHOLD);
1205}
Wu Gaod8f3db02018-07-24 19:18:45 +08001206
gaurank kathpaliac0d08412019-09-22 13:34:53 +05301207static bool
1208mlme_is_freq_present_in_list(struct acs_weight *normalize_weight_chan_list,
1209 uint8_t num_freq, uint32_t freq, uint8_t *index)
1210{
1211 uint8_t i;
1212
1213 for (i = 0; i < num_freq; i++) {
1214 if (normalize_weight_chan_list[i].chan_freq == freq) {
1215 *index = i;
1216 return true;
1217 }
1218 }
1219
1220 return false;
1221}
1222
1223static void
1224mlme_acs_parse_weight_list(struct wlan_objmgr_psoc *psoc,
1225 struct wlan_mlme_acs *acs)
1226{
1227 char *acs_weight, *str1, *str2 = NULL, *acs_weight_temp, is_range = '-';
1228 int freq1, freq2, normalize_factor;
1229 uint8_t num_acs_weight = 0, num_acs_weight_range = 0, index = 0;
1230 struct acs_weight *weight_list = acs->normalize_weight_chan;
1231 struct acs_weight_range *range_list = acs->normalize_weight_range;
1232
1233 if (!qdf_str_len(cfg_get(psoc, CFG_NORMALIZE_ACS_WEIGHT)))
1234 return;
1235
1236 acs_weight = qdf_mem_malloc(ACS_WEIGHT_MAX_STR_LEN);
1237
1238 if (!acs_weight)
1239 return;
1240
1241 qdf_mem_copy(acs_weight, cfg_get(psoc, CFG_NORMALIZE_ACS_WEIGHT),
1242 ACS_WEIGHT_MAX_STR_LEN);
1243 acs_weight_temp = acs_weight;
1244
1245 while(acs_weight_temp) {
1246 str1 = strsep(&acs_weight_temp, ",");
1247 if (!str1)
1248 goto end;
1249 freq1 = 0;
1250 freq2 = 0;
1251 if (strchr(str1, is_range)) {
1252 str2 = strsep(&str1, "-");
1253 sscanf(str2, "%d", &freq1);
1254 sscanf(str1, "%d", &freq2);
1255 strsep(&str1, "=");
1256 sscanf(str1, "%d", &normalize_factor);
1257
1258 if (num_acs_weight_range == MAX_ACS_WEIGHT_RANGE)
1259 continue;
1260 range_list[num_acs_weight_range].normalize_weight =
1261 normalize_factor;
1262 range_list[num_acs_weight_range].start_freq = freq1;
1263 range_list[num_acs_weight_range++].end_freq = freq2;
1264 } else {
1265 sscanf(str1, "%d", &freq1);
1266 strsep(&str1, "=");
1267 sscanf(str1, "%d", &normalize_factor);
1268 if (mlme_is_freq_present_in_list(weight_list,
1269 num_acs_weight, freq1,
1270 &index)) {
1271 weight_list[index].normalize_weight =
1272 normalize_factor;
1273 } else {
1274 if (num_acs_weight == QDF_MAX_NUM_CHAN)
1275 continue;
1276
1277 weight_list[num_acs_weight].chan_freq = freq1;
1278 weight_list[num_acs_weight++].normalize_weight =
1279 normalize_factor;
1280 }
1281 }
1282 }
1283
1284 acs->normalize_weight_num_chan = num_acs_weight;
1285 acs->num_weight_range = num_acs_weight_range;
1286
1287end:
1288 qdf_mem_free(acs_weight);
1289}
1290
Harprit Chhabadabd027a02018-10-30 13:02:22 -07001291static void mlme_init_acs_cfg(struct wlan_objmgr_psoc *psoc,
1292 struct wlan_mlme_acs *acs)
1293{
1294 acs->is_acs_with_more_param =
1295 cfg_get(psoc, CFG_ACS_WITH_MORE_PARAM);
1296 acs->auto_channel_select_weight =
1297 cfg_get(psoc, CFG_AUTO_CHANNEL_SELECT_WEIGHT);
1298 acs->is_vendor_acs_support =
1299 cfg_get(psoc, CFG_USER_AUTO_CHANNEL_SELECTION);
1300 acs->is_acs_support_for_dfs_ltecoex =
1301 cfg_get(psoc, CFG_USER_ACS_DFS_LTE);
1302 acs->is_external_acs_policy =
1303 cfg_get(psoc, CFG_EXTERNAL_ACS_POLICY);
gaurank kathpaliac0d08412019-09-22 13:34:53 +05301304
1305 mlme_acs_parse_weight_list(psoc, acs);
Harprit Chhabadabd027a02018-10-30 13:02:22 -07001306}
1307
Manikandan Mohan2bd09772018-11-28 18:27:32 -08001308QDF_STATUS mlme_init_ibss_cfg(struct wlan_objmgr_psoc *psoc,
1309 struct wlan_mlme_ibss_cfg *ibss_cfg)
1310{
1311 if (!ibss_cfg)
1312 return QDF_STATUS_E_FAILURE;
1313
1314 ibss_cfg->auto_bssid = cfg_default(CFG_IBSS_AUTO_BSSID);
1315 ibss_cfg->atim_win_size = cfg_get(psoc, CFG_IBSS_ATIM_WIN_SIZE);
1316 ibss_cfg->adhoc_ch_5g = cfg_get(psoc, CFG_IBSS_ADHOC_CHANNEL_5GHZ);
1317 ibss_cfg->adhoc_ch_2g = cfg_get(psoc, CFG_IBSS_ADHOC_CHANNEL_24GHZ);
1318 ibss_cfg->coalesing_enable = cfg_get(psoc, CFG_IBSS_COALESING);
1319 ibss_cfg->power_save_allow = cfg_get(psoc,
1320 CFG_IBSS_IS_POWER_SAVE_ALLOWED);
1321 ibss_cfg->power_collapse_allow =
1322 cfg_get(psoc, CFG_IBSS_IS_POWER_COLLAPSE_ALLOWED);
1323 ibss_cfg->awake_on_tx_rx = cfg_get(psoc, CFG_IBSS_AWAKE_ON_TX_RX);
1324 ibss_cfg->inactivity_bcon_count =
1325 cfg_get(psoc, CFG_IBSS_INACTIVITY_TIME);
1326 ibss_cfg->txsp_end_timeout =
1327 cfg_get(psoc, CFG_IBSS_TXSP_END_INACTIVITY);
1328 ibss_cfg->ps_warm_up_time = cfg_get(psoc, CFG_IBSS_PS_WARMUP_TIME);
1329 ibss_cfg->ps_1rx_chain_atim_win =
1330 cfg_get(psoc, CFG_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW);
1331 qdf_copy_macaddr(&ibss_cfg->bssid, (struct qdf_mac_addr *)
1332 &cfg_get(psoc, CFG_IBSS_BSSID));
1333
1334 return QDF_STATUS_SUCCESS;
1335}
1336
Jiachao Wu3304d6b2018-08-24 18:24:34 +08001337static void
1338mlme_init_product_details_cfg(struct wlan_mlme_product_details_cfg
1339 *product_details)
1340{
1341 qdf_str_lcopy(product_details->manufacturer_name,
1342 cfg_default(CFG_MFR_NAME),
1343 sizeof(product_details->manufacturer_name));
1344 qdf_str_lcopy(product_details->manufacture_product_name,
1345 cfg_default(CFG_MFR_PRODUCT_NAME),
1346 sizeof(product_details->manufacture_product_name));
1347 qdf_str_lcopy(product_details->manufacture_product_version,
1348 cfg_default(CFG_MFR_PRODUCT_VERSION),
1349 sizeof(product_details->manufacture_product_version));
1350 qdf_str_lcopy(product_details->model_name,
1351 cfg_default(CFG_MODEL_NAME),
1352 sizeof(product_details->model_name));
1353 qdf_str_lcopy(product_details->model_number,
1354 cfg_default(CFG_MODEL_NUMBER),
1355 sizeof(product_details->model_number));
1356}
1357
sheenam monga26165ab2020-02-23 05:25:01 +05301358#ifdef WLAN_FEATURE_BCN_RPT_VSIE
1359/**
1360 * mlme_init_bcn_rpt_err_vsi: To fill rpt_err_vsi INI
1361 * @psoc: psoc
1362 * @sta: sta config
1363 *
1364 * @return None
1365 */
1366static void mlme_init_bcn_rpt_err_vsi(struct wlan_objmgr_psoc *psoc,
1367 struct wlan_mlme_sta_cfg *sta)
1368{
1369 sta->bcn_rpt_err_vsie = cfg_get(psoc, CFG_ENABLE_BCN_RPT_ERR_VSIE);
1370}
1371#else
1372static inline void mlme_init_bcn_rpt_err_vsi(struct wlan_objmgr_psoc *psoc,
1373 struct wlan_mlme_sta_cfg *sta)
1374{
1375}
1376#endif
1377
Wu Gao406c53c2018-09-10 13:51:37 +08001378static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc,
1379 struct wlan_mlme_sta_cfg *sta)
1380{
1381 sta->sta_keep_alive_period =
1382 cfg_get(psoc, CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
1383 sta->tgt_gtx_usr_cfg =
1384 cfg_get(psoc, CFG_TGT_GTX_USR_CFG);
1385 sta->pmkid_modes =
1386 cfg_get(psoc, CFG_PMKID_MODES);
1387 sta->ignore_peer_erp_info =
1388 cfg_get(psoc, CFG_IGNORE_PEER_ERP_INFO);
1389 sta->sta_prefer_80mhz_over_160mhz =
1390 cfg_get(psoc, CFG_STA_PREFER_80MHZ_OVER_160MHZ);
1391 sta->enable_5g_ebt =
1392 cfg_get(psoc, CFG_PPS_ENABLE_5G_EBT);
1393 sta->deauth_before_connection =
1394 cfg_get(psoc, CFG_ENABLE_DEAUTH_BEFORE_CONNECTION);
1395 sta->dot11p_mode =
1396 cfg_get(psoc, CFG_DOT11P_MODE);
1397 sta->enable_go_cts2self_for_sta =
1398 cfg_get(psoc, CFG_ENABLE_GO_CTS2SELF_FOR_STA);
1399 sta->qcn_ie_support =
1400 cfg_get(psoc, CFG_QCN_IE_SUPPORT);
1401 sta->fils_max_chan_guard_time =
1402 cfg_get(psoc, CFG_FILS_MAX_CHAN_GUARD_TIME);
Wu Gao406c53c2018-09-10 13:51:37 +08001403 sta->single_tid =
1404 cfg_get(psoc, CFG_SINGLE_TID_RC);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001405 sta->sta_miracast_mcc_rest_time =
1406 cfg_get(psoc, CFG_STA_MCAST_MCC_REST_TIME);
Wu Gao406c53c2018-09-10 13:51:37 +08001407 sta->wait_cnf_timeout =
1408 (uint32_t)cfg_default(CFG_WT_CNF_TIMEOUT);
1409 sta->current_rssi =
1410 (uint32_t)cfg_default(CFG_CURRENT_RSSI);
Wu Gao4f8938a2018-11-26 11:49:00 +08001411 sta->allow_tpc_from_ap = cfg_get(psoc, CFG_TX_POWER_CTRL);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301412 sta->sta_keepalive_method =
1413 cfg_get(psoc, CFG_STA_KEEPALIVE_METHOD);
sheenam monga26165ab2020-02-23 05:25:01 +05301414 mlme_init_bcn_rpt_err_vsi(psoc, sta);
Wu Gao406c53c2018-09-10 13:51:37 +08001415}
1416
Arif Hussaincca60432018-12-03 19:45:12 -08001417static void mlme_init_stats_cfg(struct wlan_objmgr_psoc *psoc,
1418 struct wlan_mlme_stats_cfg *stats)
1419{
1420 stats->stats_periodic_display_time =
1421 cfg_get(psoc, CFG_PERIODIC_STATS_DISPLAY_TIME);
1422 stats->stats_link_speed_rssi_high =
1423 cfg_get(psoc, CFG_LINK_SPEED_RSSI_HIGH);
1424 stats->stats_link_speed_rssi_med =
1425 cfg_get(psoc, CFG_LINK_SPEED_RSSI_MID);
1426 stats->stats_link_speed_rssi_low =
1427 cfg_get(psoc, CFG_LINK_SPEED_RSSI_LOW);
1428 stats->stats_report_max_link_speed_rssi =
1429 cfg_get(psoc, CFG_REPORT_MAX_LINK_SPEED);
1430}
1431
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301432#ifdef WLAN_ADAPTIVE_11R
1433/**
1434 * mlme_init_adaptive_11r_cfg() - initialize enable_adaptive_11r
1435 * flag
1436 * @psoc: Pointer to PSOC
1437 * @lfr: pointer to mlme lfr config
1438 *
1439 * Return: None
1440 */
1441static void
1442mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1443 struct wlan_mlme_lfr_cfg *lfr)
1444{
1445 lfr->enable_adaptive_11r = cfg_get(psoc, CFG_ADAPTIVE_11R);
1446}
1447
1448#else
1449static inline void
1450mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1451 struct wlan_mlme_lfr_cfg *lfr)
1452{
1453}
1454#endif
1455
Abhinav Kumar243b43b2020-02-21 14:23:07 +05301456#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
Abhinav Kumar95a59012020-01-30 11:35:32 +05301457/**
1458 * mlme_init_sae_single_pmk_cfg() - initialize sae_same_pmk_config
1459 * flag
1460 * @psoc: Pointer to PSOC
1461 * @lfr: pointer to mlme lfr config
1462 *
1463 * Return: None
1464 */
1465static void
1466mlme_init_sae_single_pmk_cfg(struct wlan_objmgr_psoc *psoc,
1467 struct wlan_mlme_lfr_cfg *lfr)
1468{
Abhinav Kumar243b43b2020-02-21 14:23:07 +05301469 lfr->sae_single_pmk_feature_enabled = cfg_get(psoc, CFG_SAE_SINGLE_PMK);
Abhinav Kumar95a59012020-01-30 11:35:32 +05301470}
1471
1472#else
1473static inline void
1474mlme_init_sae_single_pmk_cfg(struct wlan_objmgr_psoc *psoc,
1475 struct wlan_mlme_lfr_cfg *lfr)
1476{
1477}
1478#endif
1479
Wu Gao5d23d782018-11-08 16:09:47 +08001480#ifdef WLAN_FEATURE_ROAM_OFFLOAD
1481static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1482 struct wlan_mlme_lfr_cfg *lfr)
1483{
1484 lfr->lfr3_roaming_offload =
1485 cfg_get(psoc, CFG_LFR3_ROAMING_OFFLOAD);
sheenam mongac6d93fa2020-02-24 16:28:33 +05301486 lfr->enable_roam_reason_vsie =
1487 cfg_get(psoc, CFG_ENABLE_ROAM_REASON_VSIE);
Pragaspathi Thilagaraj14f72de2019-03-28 23:12:51 +05301488 lfr->enable_disconnect_roam_offload =
1489 cfg_get(psoc, CFG_LFR_ENABLE_DISCONNECT_ROAM);
1490 lfr->enable_idle_roam =
1491 cfg_get(psoc, CFG_LFR_ENABLE_IDLE_ROAM);
1492 lfr->idle_roam_rssi_delta =
1493 cfg_get(psoc, CFG_LFR_IDLE_ROAM_RSSI_DELTA);
1494 lfr->idle_roam_inactive_time =
1495 cfg_get(psoc, CFG_LFR_IDLE_ROAM_INACTIVE_TIME);
1496 lfr->idle_data_packet_count =
1497 cfg_get(psoc, CFG_LFR_IDLE_ROAM_PACKET_COUNT);
1498 lfr->idle_roam_min_rssi = cfg_get(psoc, CFG_LFR_IDLE_ROAM_MIN_RSSI);
1499 lfr->idle_roam_band = cfg_get(psoc, CFG_LFR_IDLE_ROAM_BAND);
Abhinav Kumar243b43b2020-02-21 14:23:07 +05301500 mlme_init_sae_single_pmk_cfg(psoc, lfr);
Wu Gao5d23d782018-11-08 16:09:47 +08001501}
1502
1503#else
1504static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1505 struct wlan_mlme_lfr_cfg *lfr)
1506{
1507}
1508
1509#endif
1510
1511#ifdef FEATURE_WLAN_ESE
1512static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1513 struct wlan_mlme_lfr_cfg *lfr)
1514{
1515 lfr->ese_enabled = cfg_get(psoc, CFG_LFR_ESE_FEATURE_ENABLED);
1516}
1517#else
1518static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1519 struct wlan_mlme_lfr_cfg *lfr)
1520{
1521}
1522#endif
1523
Wu Gao6294afc2019-01-05 00:00:58 +08001524#ifdef FEATURE_LFR_SUBNET_DETECTION
1525static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1526 struct wlan_mlme_lfr_cfg *lfr)
1527{
1528 lfr->enable_lfr_subnet_detection =
1529 cfg_get(psoc, CFG_LFR3_ENABLE_SUBNET_DETECTION);
1530}
1531#else
1532static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1533 struct wlan_mlme_lfr_cfg *lfr)
1534{
1535}
1536#endif
1537
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301538static void
1539mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc,
1540 struct bss_load_trigger *bss_load_trig)
1541{
1542 bss_load_trig->enabled =
1543 cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM);
1544 bss_load_trig->threshold = cfg_get(psoc, CFG_BSS_LOAD_THRESHOLD);
Pragaspathi Thilagaraj39d61602018-12-24 14:46:53 +05301545 bss_load_trig->sample_time = cfg_get(psoc, CFG_BSS_LOAD_SAMPLE_TIME);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301546 bss_load_trig->rssi_threshold_5ghz =
1547 cfg_get(psoc, CFG_BSS_LOAD_TRIG_5G_RSSI_THRES);
1548 bss_load_trig->rssi_threshold_24ghz =
1549 cfg_get(psoc, CFG_BSS_LOAD_TRIG_2G_RSSI_THRES);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301550}
1551
Srinivas Dasari1ec74522019-09-19 14:16:29 +05301552void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc,
1553 struct wlan_mlme_lfr_cfg *lfr)
1554{
1555 /* Restore the params set through SETDFSSCANMODE */
1556 lfr->roaming_dfs_channel =
1557 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1558
1559 /* Restore the params set through SETWESMODE */
1560 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
1561}
1562
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301563static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
1564 struct wlan_mlme_lfr_cfg *lfr)
Wu Gao55f21712018-09-17 10:57:49 +08001565{
Wu Gaoe7687f42018-12-10 19:43:00 +08001566 qdf_size_t neighbor_scan_chan_list_num = 0;
Wu Gao5d23d782018-11-08 16:09:47 +08001567
Wu Gao55f21712018-09-17 10:57:49 +08001568 lfr->mawc_roam_enabled =
1569 cfg_get(psoc, CFG_LFR_MAWC_ROAM_ENABLED);
1570 lfr->enable_fast_roam_in_concurrency =
1571 cfg_get(psoc, CFG_LFR_ENABLE_FAST_ROAM_IN_CONCURRENCY);
Wu Gao55f21712018-09-17 10:57:49 +08001572 lfr->early_stop_scan_enable =
1573 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_ENABLE);
Wu Gao55f21712018-09-17 10:57:49 +08001574 lfr->enable_5g_band_pref =
1575 cfg_get(psoc, CFG_LFR_ENABLE_5G_BAND_PREF);
Wu Gao5d23d782018-11-08 16:09:47 +08001576 lfr->lfr_enabled = cfg_get(psoc, CFG_LFR_FEATURE_ENABLED);
1577 lfr->mawc_enabled = cfg_get(psoc, CFG_LFR_MAWC_FEATURE_ENABLED);
1578 lfr->fast_transition_enabled =
1579 cfg_get(psoc, CFG_LFR_FAST_TRANSITION_ENABLED);
1580 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
Wu Gao55f21712018-09-17 10:57:49 +08001581 lfr->mawc_roam_traffic_threshold =
1582 cfg_get(psoc, CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD);
1583 lfr->mawc_roam_ap_rssi_threshold =
1584 cfg_get(psoc, CFG_LFR_MAWC_ROAM_AP_RSSI_THRESHOLD);
1585 lfr->mawc_roam_rssi_high_adjust =
1586 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_HIGH_ADJUST);
1587 lfr->mawc_roam_rssi_low_adjust =
1588 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_LOW_ADJUST);
1589 lfr->roam_rssi_abs_threshold =
1590 cfg_get(psoc, CFG_LFR_ROAM_RSSI_ABS_THRESHOLD);
1591 lfr->rssi_threshold_offset_5g =
1592 cfg_get(psoc, CFG_LFR_5G_RSSI_THRESHOLD_OFFSET);
1593 lfr->early_stop_scan_min_threshold =
1594 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MIN_THRESHOLD);
1595 lfr->early_stop_scan_max_threshold =
1596 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MAX_THRESHOLD);
1597 lfr->first_scan_bucket_threshold =
1598 cfg_get(psoc, CFG_LFR_FIRST_SCAN_BUCKET_THRESHOLD);
1599 lfr->roam_dense_traffic_threshold =
1600 cfg_get(psoc, CFG_LFR_ROAM_DENSE_TRAFFIC_THRESHOLD);
1601 lfr->roam_dense_rssi_thre_offset =
1602 cfg_get(psoc, CFG_LFR_ROAM_DENSE_RSSI_THRE_OFFSET);
1603 lfr->roam_dense_min_aps =
1604 cfg_get(psoc, CFG_LFR_ROAM_DENSE_MIN_APS);
1605 lfr->roam_bg_scan_bad_rssi_threshold =
1606 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_THRESHOLD);
1607 lfr->roam_bg_scan_client_bitmap =
1608 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_CLIENT_BITMAP);
1609 lfr->roam_bg_scan_bad_rssi_offset_2g =
1610 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_OFFSET_2G);
1611 lfr->adaptive_roamscan_dwell_mode =
1612 cfg_get(psoc, CFG_LFR_ADAPTIVE_ROAMSCAN_DWELL_MODE);
1613 lfr->per_roam_enable =
1614 cfg_get(psoc, CFG_LFR_PER_ROAM_ENABLE);
1615 lfr->per_roam_config_high_rate_th =
1616 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_HIGH_RATE_TH);
1617 lfr->per_roam_config_low_rate_th =
1618 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_LOW_RATE_TH);
1619 lfr->per_roam_config_rate_th_percent =
1620 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_RATE_TH_PERCENT);
1621 lfr->per_roam_rest_time =
1622 cfg_get(psoc, CFG_LFR_PER_ROAM_REST_TIME);
1623 lfr->per_roam_monitor_time =
1624 cfg_get(psoc, CFG_LFR_PER_ROAM_MONITOR_TIME);
1625 lfr->per_roam_min_candidate_rssi =
1626 cfg_get(psoc, CFG_LFR_PER_ROAM_MIN_CANDIDATE_RSSI);
1627 lfr->lfr3_disallow_duration =
1628 cfg_get(psoc, CFG_LFR3_ROAM_DISALLOW_DURATION);
1629 lfr->lfr3_rssi_channel_penalization =
1630 cfg_get(psoc, CFG_LFR3_ROAM_RSSI_CHANNEL_PENALIZATION);
1631 lfr->lfr3_num_disallowed_aps =
1632 cfg_get(psoc, CFG_LFR3_ROAM_NUM_DISALLOWED_APS);
Wu Gaob056db62018-12-14 16:50:13 +08001633
1634 if (lfr->enable_5g_band_pref) {
1635 lfr->rssi_boost_threshold_5g =
1636 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_THRESHOLD);
1637 lfr->rssi_boost_factor_5g =
1638 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_FACTOR);
1639 lfr->max_rssi_boost_5g =
1640 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_BOOST);
1641 lfr->rssi_penalize_threshold_5g =
1642 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_THRESHOLD);
1643 lfr->rssi_penalize_factor_5g =
1644 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_FACTOR);
1645 lfr->max_rssi_penalize_5g =
1646 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_PENALIZE);
1647 }
1648
Wu Gao55f21712018-09-17 10:57:49 +08001649 lfr->max_num_pre_auth = (uint32_t)
1650 cfg_default(CFG_LFR_MAX_NUM_PRE_AUTH);
Sourav Mohapatra5ba8da32018-07-16 09:21:15 +05301651 lfr->roam_preauth_no_ack_timeout =
1652 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_NO_ACK_TIMEOUT);
1653 lfr->roam_preauth_retry_count =
1654 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_RETRY_COUNT);
Wu Gao5d23d782018-11-08 16:09:47 +08001655 lfr->roam_rssi_diff = cfg_get(psoc, CFG_LFR_ROAM_RSSI_DIFF);
1656 lfr->roam_scan_offload_enabled =
1657 cfg_get(psoc, CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
1658 lfr->neighbor_scan_timer_period =
1659 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_TIMER_PERIOD);
1660 lfr->neighbor_scan_min_timer_period =
1661 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_TIMER_PERIOD);
1662 lfr->neighbor_lookup_rssi_threshold =
1663 cfg_get(psoc, CFG_LFR_NEIGHBOR_LOOKUP_RSSI_THRESHOLD);
1664 lfr->opportunistic_scan_threshold_diff =
1665 cfg_get(psoc, CFG_LFR_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF);
1666 lfr->roam_rescan_rssi_diff =
1667 cfg_get(psoc, CFG_LFR_ROAM_RESCAN_RSSI_DIFF);
1668 lfr->neighbor_scan_min_chan_time =
1669 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_CHAN_TIME);
1670 lfr->neighbor_scan_max_chan_time =
1671 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MAX_CHAN_TIME);
1672 lfr->neighbor_scan_results_refresh_period =
1673 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD);
1674 lfr->empty_scan_refresh_period =
1675 cfg_get(psoc, CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD);
1676 lfr->roam_bmiss_first_bcnt =
1677 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FIRST_BCNT);
1678 lfr->roam_bmiss_final_bcnt =
1679 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FINAL_BCNT);
1680 lfr->roam_beacon_rssi_weight =
1681 cfg_get(psoc, CFG_LFR_ROAM_BEACON_RSSI_WEIGHT);
1682 lfr->roaming_dfs_channel =
1683 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1684 lfr->roam_scan_hi_rssi_maxcount =
1685 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_MAXCOUNT);
1686 lfr->roam_scan_hi_rssi_delta =
1687 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELTA);
1688 lfr->roam_scan_hi_rssi_delay =
1689 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELAY);
1690 lfr->roam_scan_hi_rssi_ub =
1691 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_UB);
1692 lfr->roam_prefer_5ghz =
1693 cfg_get(psoc, CFG_LFR_ROAM_PREFER_5GHZ);
1694 lfr->roam_intra_band =
1695 cfg_get(psoc, CFG_LFR_ROAM_INTRA_BAND);
1696 lfr->roam_scan_home_away_time =
1697 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HOME_AWAY_TIME);
1698 lfr->roam_scan_n_probes =
1699 cfg_get(psoc, CFG_LFR_ROAM_SCAN_N_PROBES);
1700 lfr->delay_before_vdev_stop =
1701 cfg_get(psoc, CFG_LFR_DELAY_BEFORE_VDEV_STOP);
Wu Gaoe7687f42018-12-10 19:43:00 +08001702 qdf_uint8_array_parse(cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_CHANNEL_LIST),
Wu Gao5d23d782018-11-08 16:09:47 +08001703 lfr->neighbor_scan_channel_list,
Wu Gao7f70e382019-05-31 14:23:48 +08001704 CFG_VALID_CHANNEL_LIST_LEN,
Wu Gao5d23d782018-11-08 16:09:47 +08001705 &neighbor_scan_chan_list_num);
1706 lfr->neighbor_scan_channel_list_num =
1707 (uint8_t)neighbor_scan_chan_list_num;
Wu Gao6294afc2019-01-05 00:00:58 +08001708 lfr->ho_delay_for_rx =
1709 cfg_get(psoc, CFG_LFR3_ROAM_HO_DELAY_FOR_RX);
1710 lfr->min_delay_btw_roam_scans =
1711 cfg_get(psoc, CFG_LFR_MIN_DELAY_BTW_ROAM_SCAN);
1712 lfr->roam_trigger_reason_bitmask =
1713 cfg_get(psoc, CFG_LFR_ROAM_SCAN_TRIGGER_REASON_BITMASK);
1714 lfr->enable_ftopen =
1715 cfg_get(psoc, CFG_LFR_ROAM_FT_OPEN_ENABLE);
1716 lfr->roam_force_rssi_trigger =
1717 cfg_get(psoc, CFG_LFR_ROAM_FORCE_RSSI_TRIGGER);
Abhinav Kumar990fea62019-02-14 12:38:38 +05301718 lfr->roaming_scan_policy =
1719 cfg_get(psoc, CFG_ROAM_SCAN_SCAN_POLICY);
1720
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301721 lfr->roam_scan_inactivity_time =
1722 cfg_get(psoc, CFG_ROAM_SCAN_INACTIVITY_TIME);
1723 lfr->roam_inactive_data_packet_count =
1724 cfg_get(psoc, CFG_ROAM_INACTIVE_COUNT);
1725 lfr->roam_scan_period_after_inactivity =
1726 cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
Pragaspathi Thilagarajeb367282019-02-19 00:42:28 +05301727 lfr->fw_akm_bitmap = 0;
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301728
Wu Gao5d23d782018-11-08 16:09:47 +08001729 mlme_init_roam_offload_cfg(psoc, lfr);
1730 mlme_init_ese_cfg(psoc, lfr);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301731 mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig);
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301732 mlme_init_adaptive_11r_cfg(psoc, lfr);
Wu Gao6294afc2019-01-05 00:00:58 +08001733 mlme_init_subnet_detection(psoc, lfr);
Wu Gao55f21712018-09-17 10:57:49 +08001734}
1735
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301736static uint32_t
1737mlme_limit_max_per_index_score(uint32_t per_index_score)
1738{
1739 uint8_t i, score;
1740
1741 for (i = 0; i < MAX_INDEX_PER_INI; i++) {
1742 score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i);
1743 if (score > MAX_INDEX_SCORE)
1744 WLAN_SET_SCORE_PERCENTAGE(per_index_score,
1745 MAX_INDEX_SCORE, i);
1746 }
1747
1748 return per_index_score;
1749}
1750
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301751static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
1752 struct wlan_mlme_power *power)
1753{
1754 power->tx_power_2g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT2G);
1755 power->tx_power_5g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT5G);
1756
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301757 power->max_tx_power_24_chan.max_len = CFG_MAX_TX_POWER_2_4_LEN;
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301758 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_2_4),
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301759 power->max_tx_power_24_chan.data,
1760 sizeof(power->max_tx_power_24_chan.data),
1761 &power->max_tx_power_24_chan.len);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301762
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301763 power->max_tx_power_5_chan.max_len = CFG_MAX_TX_POWER_5_LEN;
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301764 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_5),
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301765 power->max_tx_power_5_chan.data,
1766 sizeof(power->max_tx_power_5_chan.data),
1767 &power->max_tx_power_5_chan.len);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301768
1769 power->power_usage.max_len = CFG_POWER_USAGE_MAX_LEN;
1770 power->power_usage.len = CFG_POWER_USAGE_MAX_LEN;
1771 qdf_mem_copy(power->power_usage.data, cfg_get(psoc, CFG_POWER_USAGE),
1772 power->power_usage.len);
Wu Gao2255ea22019-01-04 15:44:35 +08001773 power->max_tx_power = cfg_get(psoc, CFG_MAX_TX_POWER);
1774 power->current_tx_power_level =
1775 (uint8_t)cfg_default(CFG_CURRENT_TX_POWER_LEVEL);
1776 power->local_power_constraint =
1777 (uint8_t)cfg_default(CFG_LOCAL_POWER_CONSTRAINT);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301778}
Wu Gao2255ea22019-01-04 15:44:35 +08001779
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301780static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
1781 struct wlan_mlme_scoring_cfg *scoring_cfg)
1782{
1783 uint32_t total_weight;
1784
sheenam mongafd394822019-08-26 19:05:59 +05301785 scoring_cfg->vendor_roam_score_algorithm =
1786 cfg_get(psoc, CFG_VENDOR_ROAM_SCORE_ALGORITHM);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301787 scoring_cfg->enable_scoring_for_roam =
1788 cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM);
1789 scoring_cfg->weight_cfg.rssi_weightage =
1790 cfg_get(psoc, CFG_SCORING_RSSI_WEIGHTAGE);
1791 scoring_cfg->weight_cfg.ht_caps_weightage =
1792 cfg_get(psoc, CFG_SCORING_HT_CAPS_WEIGHTAGE);
1793 scoring_cfg->weight_cfg.vht_caps_weightage =
1794 cfg_get(psoc, CFG_SCORING_VHT_CAPS_WEIGHTAGE);
1795 scoring_cfg->weight_cfg.he_caps_weightage =
1796 cfg_get(psoc, CFG_SCORING_HE_CAPS_WEIGHTAGE);
1797 scoring_cfg->weight_cfg.chan_width_weightage =
1798 cfg_get(psoc, CFG_SCORING_CHAN_WIDTH_WEIGHTAGE);
1799 scoring_cfg->weight_cfg.chan_band_weightage =
1800 cfg_get(psoc, CFG_SCORING_CHAN_BAND_WEIGHTAGE);
1801 scoring_cfg->weight_cfg.nss_weightage =
1802 cfg_get(psoc, CFG_SCORING_NSS_WEIGHTAGE);
1803 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1804 cfg_get(psoc, CFG_SCORING_BEAMFORM_CAP_WEIGHTAGE);
1805 scoring_cfg->weight_cfg.pcl_weightage =
1806 cfg_get(psoc, CFG_SCORING_PCL_WEIGHTAGE);
1807 scoring_cfg->weight_cfg.channel_congestion_weightage =
1808 cfg_get(psoc, CFG_SCORING_CHAN_CONGESTION_WEIGHTAGE);
1809 scoring_cfg->weight_cfg.oce_wan_weightage =
1810 cfg_get(psoc, CFG_SCORING_OCE_WAN_WEIGHTAGE);
1811
Pragaspathi Thilagarajdd6a45d2019-09-13 17:36:10 +05301812 total_weight = scoring_cfg->weight_cfg.rssi_weightage +
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301813 scoring_cfg->weight_cfg.ht_caps_weightage +
1814 scoring_cfg->weight_cfg.vht_caps_weightage +
1815 scoring_cfg->weight_cfg.he_caps_weightage +
1816 scoring_cfg->weight_cfg.chan_width_weightage +
1817 scoring_cfg->weight_cfg.chan_band_weightage +
1818 scoring_cfg->weight_cfg.nss_weightage +
1819 scoring_cfg->weight_cfg.beamforming_cap_weightage +
1820 scoring_cfg->weight_cfg.pcl_weightage +
1821 scoring_cfg->weight_cfg.channel_congestion_weightage +
1822 scoring_cfg->weight_cfg.oce_wan_weightage;
1823
1824 /*
1825 * If configured weights are greater than max weight,
1826 * fallback to default weights
1827 */
1828 if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301829 mlme_legacy_err("Total weight greater than %d, using default weights",
1830 BEST_CANDIDATE_MAX_WEIGHT);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301831 scoring_cfg->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE;
1832 scoring_cfg->weight_cfg.ht_caps_weightage =
1833 HT_CAPABILITY_WEIGHTAGE;
1834 scoring_cfg->weight_cfg.vht_caps_weightage =
1835 VHT_CAP_WEIGHTAGE;
1836 scoring_cfg->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE;
1837 scoring_cfg->weight_cfg.chan_width_weightage =
1838 CHAN_WIDTH_WEIGHTAGE;
1839 scoring_cfg->weight_cfg.chan_band_weightage =
1840 CHAN_BAND_WEIGHTAGE;
1841 scoring_cfg->weight_cfg.nss_weightage = NSS_WEIGHTAGE;
1842 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1843 BEAMFORMING_CAP_WEIGHTAGE;
1844 scoring_cfg->weight_cfg.pcl_weightage = PCL_WEIGHT;
1845 scoring_cfg->weight_cfg.channel_congestion_weightage =
1846 CHANNEL_CONGESTION_WEIGHTAGE;
1847 scoring_cfg->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE;
1848 }
1849
1850 scoring_cfg->rssi_score.best_rssi_threshold =
1851 cfg_get(psoc, CFG_SCORING_BEST_RSSI_THRESHOLD);
1852 scoring_cfg->rssi_score.good_rssi_threshold =
1853 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_THRESHOLD);
1854 scoring_cfg->rssi_score.bad_rssi_threshold =
1855 cfg_get(psoc, CFG_SCORING_BAD_RSSI_THRESHOLD);
1856
1857 scoring_cfg->rssi_score.good_rssi_pcnt =
1858 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_PERCENT);
1859 scoring_cfg->rssi_score.bad_rssi_pcnt =
1860 cfg_get(psoc, CFG_SCORING_BAD_RSSI_PERCENT);
1861
1862 scoring_cfg->rssi_score.good_rssi_bucket_size =
1863 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_BUCKET_SIZE);
1864 scoring_cfg->rssi_score.bad_rssi_bucket_size =
1865 cfg_get(psoc, CFG_SCORING_BAD_RSSI_BUCKET_SIZE);
1866
1867 scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh =
1868 cfg_get(psoc, CFG_SCORING_RSSI_PREF_5G_THRESHOLD);
1869
1870 scoring_cfg->bandwidth_weight_per_index =
1871 mlme_limit_max_per_index_score(
1872 cfg_get(psoc, CFG_SCORING_BW_WEIGHT_PER_IDX));
1873 scoring_cfg->nss_weight_per_index =
1874 mlme_limit_max_per_index_score(
1875 cfg_get(psoc, CFG_SCORING_NSS_WEIGHT_PER_IDX));
1876 scoring_cfg->band_weight_per_index =
1877 mlme_limit_max_per_index_score(
1878 cfg_get(psoc, CFG_SCORING_BAND_WEIGHT_PER_IDX));
1879
1880 scoring_cfg->esp_qbss_scoring.num_slot =
1881 cfg_get(psoc, CFG_SCORING_NUM_ESP_QBSS_SLOTS);
1882 scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0 =
1883 mlme_limit_max_per_index_score(
1884 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_3_TO_0));
1885 scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4 =
1886 mlme_limit_max_per_index_score(
1887 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_7_TO_4));
1888 scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8 =
1889 mlme_limit_max_per_index_score(
1890 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_11_TO_8));
1891 scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12 =
1892 mlme_limit_max_per_index_score(
1893 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_15_TO_12));
1894
1895 scoring_cfg->oce_wan_scoring.num_slot =
1896 cfg_get(psoc, CFG_SCORING_NUM_OCE_WAN_SLOTS);
1897 scoring_cfg->oce_wan_scoring.score_pcnt3_to_0 =
1898 mlme_limit_max_per_index_score(
1899 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_3_TO_0));
1900 scoring_cfg->oce_wan_scoring.score_pcnt7_to_4 =
1901 mlme_limit_max_per_index_score(
1902 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4));
1903 scoring_cfg->oce_wan_scoring.score_pcnt11_to_8 =
1904 mlme_limit_max_per_index_score(
1905 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8));
1906 scoring_cfg->oce_wan_scoring.score_pcnt15_to_12 =
1907 mlme_limit_max_per_index_score(
1908 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12));
Pragaspathi Thilagarajdf0f5442018-12-11 16:59:46 +05301909 scoring_cfg->roam_trigger_bitmap =
1910 cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP);
1911 scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA);
Wu Gao2255ea22019-01-04 15:44:35 +08001912 scoring_cfg->apsd_enabled = (bool)cfg_default(CFG_APSD_ENABLED);
Abhishek Ambure62b8cc42020-02-01 12:54:11 +05301913 scoring_cfg->min_roam_score_delta =
1914 cfg_get(psoc, CFG_CAND_MIN_ROAM_SCORE_DELTA);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301915}
1916
Karthik Kantamneni2231a232018-09-11 15:45:55 +05301917static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc,
1918 struct wlan_mlme_oce *oce)
1919{
1920 uint8_t val;
1921 bool rssi_assoc_reject_enabled;
1922 bool probe_req_rate_enabled;
1923 bool probe_resp_rate_enabled;
1924 bool beacon_rate_enabled;
1925 bool probe_req_deferral_enabled;
1926 bool fils_discovery_sap_enabled;
1927 bool esp_for_roam_enabled;
1928
1929 oce->enable_bcast_probe_rsp =
1930 cfg_get(psoc, CFG_ENABLE_BCAST_PROBE_RESP);
1931 oce->oce_sta_enabled = cfg_get(psoc, CFG_OCE_ENABLE_STA);
1932 oce->oce_sap_enabled = cfg_get(psoc, CFG_OCE_ENABLE_SAP);
1933 oce->fils_enabled = cfg_get(psoc, CFG_IS_FILS_ENABLED);
1934
1935 rssi_assoc_reject_enabled =
1936 cfg_get(psoc, CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT);
1937 probe_req_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_REQ_RATE);
1938 probe_resp_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_RSP_RATE);
1939 beacon_rate_enabled = cfg_get(psoc, CFG_OCE_BEACON_RATE);
1940 probe_req_deferral_enabled =
1941 cfg_get(psoc, CFG_ENABLE_PROBE_REQ_DEFERRAL);
1942 fils_discovery_sap_enabled =
1943 cfg_get(psoc, CFG_ENABLE_FILS_DISCOVERY_SAP);
1944 esp_for_roam_enabled = cfg_get(psoc, CFG_ENABLE_ESP_FEATURE);
1945
1946 if (!rssi_assoc_reject_enabled ||
1947 !oce->enable_bcast_probe_rsp) {
1948 oce->oce_sta_enabled = 0;
1949 }
1950
1951 val = (probe_req_rate_enabled *
1952 WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) +
1953 (probe_resp_rate_enabled *
1954 WMI_VDEV_OCE_PROBE_RESPONSE_RATE_FEATURE_BITMAP) +
1955 (beacon_rate_enabled *
1956 WMI_VDEV_OCE_BEACON_RATE_FEATURE_BITMAP) +
1957 (probe_req_deferral_enabled *
1958 WMI_VDEV_OCE_PROBE_REQUEST_DEFERRAL_FEATURE_BITMAP) +
1959 (fils_discovery_sap_enabled *
1960 WMI_VDEV_OCE_FILS_DISCOVERY_FRAME_FEATURE_BITMAP) +
1961 (esp_for_roam_enabled *
1962 WMI_VDEV_OCE_ESP_FEATURE_BITMAP) +
1963 (rssi_assoc_reject_enabled *
1964 WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP);
1965 oce->feature_bitmap = val;
1966}
1967
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301968static void mlme_init_nss_chains(struct wlan_objmgr_psoc *psoc,
1969 struct wlan_mlme_nss_chains *nss_chains)
1970{
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301971 nss_chains->num_rx_chains[NSS_CHAINS_BAND_2GHZ] =
1972 cfg_get(psoc, CFG_NUM_RX_CHAINS_2G);
1973 nss_chains->num_rx_chains[NSS_CHAINS_BAND_5GHZ] =
1974 cfg_get(psoc, CFG_NUM_RX_CHAINS_5G);
1975 nss_chains->num_tx_chains[NSS_CHAINS_BAND_2GHZ] =
1976 cfg_get(psoc, CFG_NUM_TX_CHAINS_2G);
1977 nss_chains->num_tx_chains[NSS_CHAINS_BAND_5GHZ] =
1978 cfg_get(psoc, CFG_NUM_TX_CHAINS_5G);
1979
1980 nss_chains->tx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_TX_NSS_2G);
1981 nss_chains->tx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_TX_NSS_5G);
1982 nss_chains->rx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_RX_NSS_2G);
1983 nss_chains->rx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_RX_NSS_5G);
1984
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301985 nss_chains->num_tx_chains_11b = cfg_get(psoc, CFG_NUM_TX_CHAINS_11b);
1986 nss_chains->num_tx_chains_11g = cfg_get(psoc, CFG_NUM_TX_CHAINS_11g);
1987 nss_chains->num_tx_chains_11a = cfg_get(psoc, CFG_NUM_TX_CHAINS_11a);
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301988
1989 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_2GHZ] =
1990 cfg_get(psoc, CFG_DISABLE_RX_MRC_2G);
1991 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_5GHZ] =
1992 cfg_get(psoc, CFG_DISABLE_RX_MRC_5G);
1993 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_2GHZ] =
1994 cfg_get(psoc, CFG_DISABLE_TX_MRC_2G);
1995 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_5GHZ] =
1996 cfg_get(psoc, CFG_DISABLE_TX_MRC_5G);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301997}
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301998static void mlme_init_wep_keys(struct wlan_mlme_wep_cfg *wep_params)
1999{
2000 /* initialize the default key values to zero */
Srinivas Girigowdacf161402019-03-14 11:37:33 -07002001 wep_params->wep_default_key_1.len = WLAN_CRYPTO_KEY_WEP104_LEN;
2002 wep_params->wep_default_key_1.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
2003 qdf_mem_zero(wep_params->wep_default_key_1.data,
2004 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302005
Srinivas Girigowdacf161402019-03-14 11:37:33 -07002006 wep_params->wep_default_key_2.len = WLAN_CRYPTO_KEY_WEP104_LEN;
2007 wep_params->wep_default_key_2.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
2008 qdf_mem_zero(wep_params->wep_default_key_2.data,
2009 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302010
Srinivas Girigowdacf161402019-03-14 11:37:33 -07002011 wep_params->wep_default_key_3.len = WLAN_CRYPTO_KEY_WEP104_LEN;
2012 wep_params->wep_default_key_3.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
2013 qdf_mem_zero(wep_params->wep_default_key_3.data,
2014 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302015
Srinivas Girigowdacf161402019-03-14 11:37:33 -07002016 wep_params->wep_default_key_4.len = WLAN_CRYPTO_KEY_WEP104_LEN;
2017 wep_params->wep_default_key_4.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
2018 qdf_mem_zero(wep_params->wep_default_key_4.data,
2019 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302020}
2021
2022static void mlme_init_wep_cfg(struct wlan_mlme_wep_cfg *wep_params)
2023{
2024 wep_params->is_privacy_enabled = cfg_default(CFG_PRIVACY_ENABLED);
2025 wep_params->auth_type = cfg_default(CFG_AUTHENTICATION_TYPE);
2026 wep_params->is_shared_key_auth =
2027 cfg_default(CFG_SHARED_KEY_AUTH_ENABLE);
2028 wep_params->is_auth_open_system =
2029 cfg_default(CFG_OPEN_SYSTEM_AUTH_ENABLE);
2030
2031 wep_params->wep_default_key_id = cfg_default(CFG_WEP_DEFAULT_KEYID);
2032 mlme_init_wep_keys(wep_params);
2033}
2034
Arif Hussainbd5194c2018-11-27 19:01:15 -08002035static void mlme_init_wifi_pos_cfg(struct wlan_objmgr_psoc *psoc,
2036 struct wlan_mlme_wifi_pos_cfg *wifi_pos_cfg)
2037{
2038 wifi_pos_cfg->fine_time_meas_cap =
2039 cfg_get(psoc, CFG_FINE_TIME_MEAS_CAPABILITY);
Abhishek Ambure4706d0f2020-01-03 19:52:05 +05302040 wifi_pos_cfg->oem_6g_support_disable =
2041 cfg_get(psoc, CFG_OEM_SIXG_SUPPORT_DISABLE);
Arif Hussainbd5194c2018-11-27 19:01:15 -08002042}
2043
Abhinav Kumarab576712018-11-05 14:32:49 +05302044#ifdef FEATURE_WLAN_ESE
2045static void mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2046 struct wlan_mlme_wmm_params *wmm_params)
2047{
2048 wmm_params->wmm_tspec_element.inactivity_intv =
2049 cfg_get(psoc, CFG_QOS_WMM_INACTIVITY_INTERVAL);
2050}
2051#else
2052static inline void
2053mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2054 struct wlan_mlme_wmm_params *wmm_params)
2055{
2056}
2057#endif /* FEATURE_WLAN_ESE */
2058
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302059static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc,
2060 struct wlan_mlme_wmm_params *wmm_params)
2061{
2062 wmm_params->qos_enabled = cfg_default(CFG_QOS_ENABLED);
2063 wmm_params->wme_enabled = cfg_default(CFG_WME_ENABLED);
2064 wmm_params->max_sp_length = cfg_default(CFG_MAX_SP_LENGTH);
2065 wmm_params->wsm_enabled = cfg_default(CFG_WSM_ENABLED);
2066 wmm_params->edca_profile = cfg_default(CFG_EDCA_PROFILE);
Abhinav Kumar18b45cd2018-09-21 12:35:22 +05302067
2068 wmm_params->ac_vo.dir_ac_vo = cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VO);
2069 wmm_params->ac_vo.nom_msdu_size_ac_vo =
2070 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO);
2071 wmm_params->ac_vo.mean_data_rate_ac_vo =
2072 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO);
2073 wmm_params->ac_vo.min_phy_rate_ac_vo =
2074 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VO);
2075 wmm_params->ac_vo.sba_ac_vo = cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VO);
2076 wmm_params->ac_vo.uapsd_vo_srv_intv =
2077 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV);
2078 wmm_params->ac_vo.uapsd_vo_sus_intv =
2079 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV);
Abhinav Kumar4c8e0262018-10-06 16:50:27 +05302080
2081 wmm_params->ac_vi.dir_ac_vi =
2082 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VI);
2083 wmm_params->ac_vi.nom_msdu_size_ac_vi =
2084 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI);
2085 wmm_params->ac_vi.mean_data_rate_ac_vi =
2086 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI);
2087 wmm_params->ac_vi.min_phy_rate_ac_vi =
2088 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VI);
2089 wmm_params->ac_vi.sba_ac_vi =
2090 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VI);
2091 wmm_params->ac_vi.uapsd_vi_srv_intv =
2092 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SRV_INTV);
2093 wmm_params->ac_vi.uapsd_vi_sus_intv =
2094 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV);
2095
Abhinav Kumare94f2482018-08-19 12:37:36 +05302096 wmm_params->ac_be.dir_ac_be =
2097 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BE);
2098 wmm_params->ac_be.nom_msdu_size_ac_be =
2099 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE);
2100 wmm_params->ac_be.mean_data_rate_ac_be =
2101 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE);
2102 wmm_params->ac_be.min_phy_rate_ac_be =
2103 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BE);
2104 wmm_params->ac_be.sba_ac_be =
2105 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BE);
2106 wmm_params->ac_be.uapsd_be_srv_intv =
2107 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SRV_INTV);
2108 wmm_params->ac_be.uapsd_be_sus_intv =
2109 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SUS_INTV);
Abhinav Kumar2af8c122018-08-19 13:49:52 +05302110
2111 wmm_params->ac_bk.dir_ac_bk =
2112 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BK);
2113 wmm_params->ac_bk.nom_msdu_size_ac_bk =
2114 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK);
2115 wmm_params->ac_bk.mean_data_rate_ac_bk =
2116 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK);
2117 wmm_params->ac_bk.min_phy_rate_ac_bk =
2118 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BK);
2119 wmm_params->ac_bk.sba_ac_bk =
2120 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BK);
2121 wmm_params->ac_bk.uapsd_bk_srv_intv =
2122 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SRV_INTV);
2123 wmm_params->ac_bk.uapsd_bk_sus_intv =
2124 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SUS_INTV);
Abhinav Kumar7d6f1ac2018-09-01 18:33:56 +05302125
2126 wmm_params->wmm_config.wmm_mode =
2127 cfg_get(psoc, CFG_QOS_WMM_MODE);
2128 wmm_params->wmm_config.b80211e_is_enabled =
2129 cfg_get(psoc, CFG_QOS_WMM_80211E_ENABLED);
2130 wmm_params->wmm_config.uapsd_mask =
2131 cfg_get(psoc, CFG_QOS_WMM_UAPSD_MASK);
2132 wmm_params->wmm_config.bimplicit_qos_enabled =
2133 cfg_get(psoc, CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED);
Abhinav Kumarab576712018-11-05 14:32:49 +05302134
2135 mlme_init_inactivity_intv(psoc, wmm_params);
2136 wmm_params->wmm_tspec_element.burst_size_def =
2137 cfg_get(psoc, CFG_QOS_WMM_BURST_SIZE_DEFN);
2138 wmm_params->wmm_tspec_element.ts_ack_policy =
2139 cfg_get(psoc, CFG_QOS_WMM_TS_INFO_ACK_POLICY);
2140 wmm_params->wmm_tspec_element.ts_acm_is_off =
2141 cfg_get(psoc, CFG_QOS_ADDTS_WHEN_ACM_IS_OFF);
Abhinav Kumarc8c21502018-12-05 15:17:39 +05302142 wmm_params->delayed_trigger_frm_int =
2143 cfg_get(psoc, CFG_TL_DELAYED_TRGR_FRM_INTERVAL);
2144
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302145}
2146
gaurank kathpalia837f6202018-09-14 21:55:32 +05302147static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc,
2148 struct wlan_mlme_wps_params *wps_params)
2149{
2150 wps_params->enable_wps = cfg_default(CFG_WPS_ENABLE);
2151 wps_params->wps_cfg_method = cfg_default(CFG_WPS_CFG_METHOD);
2152 wps_params->wps_device_password_id =
2153 cfg_default(CFG_WPS_DEVICE_PASSWORD_ID);
2154 wps_params->wps_device_sub_category =
2155 cfg_default(CFG_WPS_DEVICE_SUB_CATEGORY);
2156 wps_params->wps_primary_device_category =
2157 cfg_default(CFG_WPS_PRIMARY_DEVICE_CATEGORY);
2158 wps_params->wps_primary_device_oui =
2159 cfg_default(CFG_WPS_PIMARY_DEVICE_OUI);
2160 wps_params->wps_state = cfg_default(CFG_WPS_STATE);
2161 wps_params->wps_version = cfg_default(CFG_WPS_VERSION);
Pragaspathi Thilagaraj2b9259f2018-12-05 22:29:03 +05302162 wps_params->wps_uuid.max_len = MLME_CFG_WPS_UUID_MAX_LEN;
2163 qdf_uint8_array_parse(cfg_default(CFG_WPS_UUID),
2164 wps_params->wps_uuid.data,
2165 MLME_CFG_WPS_UUID_MAX_LEN,
2166 &wps_params->wps_uuid.len);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302167}
2168
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302169static void mlme_init_btm_cfg(struct wlan_objmgr_psoc *psoc,
2170 struct wlan_mlme_btm *btm)
lifeng6d19c252018-11-23 18:04:23 +08002171{
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302172 btm->btm_offload_config = cfg_get(psoc, CFG_BTM_ENABLE);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302173 btm->prefer_btm_query = cfg_get(psoc, CFG_PREFER_BTM_QUERY);
2174 if (btm->prefer_btm_query)
2175 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_8);
2176
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302177 btm->abridge_flag = cfg_get(psoc, CFG_ENABLE_BTM_ABRIDGE);
2178 if (btm->abridge_flag)
2179 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_7);
2180
Pragaspathi Thilagarajed781902019-05-30 12:17:49 +05302181 btm->btm_solicited_timeout = cfg_get(psoc, CFG_BTM_SOLICITED_TIMEOUT);
2182 btm->btm_max_attempt_cnt = cfg_get(psoc, CFG_BTM_MAX_ATTEMPT_CNT);
2183 btm->btm_sticky_time = cfg_get(psoc, CFG_BTM_STICKY_TIME);
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302184 btm->rct_validity_timer = cfg_get(psoc, CFG_BTM_VALIDITY_TIMER);
2185 btm->disassoc_timer_threshold =
2186 cfg_get(psoc, CFG_BTM_DISASSOC_TIMER_THRESHOLD);
Abhinav Kumar43565942019-03-02 01:34:12 +05302187 btm->btm_query_bitmask = cfg_get(psoc, CFG_BTM_QUERY_BITMASK);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302188 btm->btm_trig_min_candidate_score =
2189 cfg_get(psoc, CFG_MIN_BTM_CANDIDATE_SCORE);
2190}
Abhinav Kumar43565942019-03-02 01:34:12 +05302191
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302192static void
2193mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
2194 struct wlan_mlme_cfg *mlme_cfg)
2195{
2196 struct roam_trigger_score_delta *score_delta_param;
2197 struct roam_trigger_min_rssi *min_rssi_param;
2198
2199 score_delta_param = &mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
2200 score_delta_param->roam_score_delta =
2201 cfg_get(psoc, CFG_IDLE_ROAM_SCORE_DELTA);
2202 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_IDLE;
2203
2204 score_delta_param = &mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
2205 score_delta_param->roam_score_delta =
2206 cfg_get(psoc, CFG_BTM_ROAM_SCORE_DELTA);
2207 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_BTM;
2208
2209 min_rssi_param = &mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
2210 min_rssi_param->min_rssi =
2211 cfg_get(psoc, CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI);
2212 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_DEAUTH;
2213
2214 min_rssi_param = &mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
2215 min_rssi_param->min_rssi =
2216 cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
2217 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
lifeng6d19c252018-11-23 18:04:23 +08002218}
2219
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302220/**
2221 * mlme_init_fe_wlm_in_cfg() - Populate WLM INI in MLME cfg
2222 * @psoc: pointer to the psoc object
2223 * @wlm_config: pointer to the MLME WLM cfg
2224 *
2225 * Return: None
2226 */
2227static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
2228 struct wlan_mlme_fe_wlm *wlm_config)
2229{
2230 wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
2231 wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
2232 wlm_config->latency_flags[0] = cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL);
2233 wlm_config->latency_flags[1] = cfg_get(psoc, CFG_LATENCY_FLAGS_MOD);
2234 wlm_config->latency_flags[2] = cfg_get(psoc, CFG_LATENCY_FLAGS_LOW);
2235 wlm_config->latency_flags[3] = cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW);
2236}
2237
2238/**
2239 * mlme_init_fe_rrm_in_cfg() - Populate RRM INI in MLME cfg
2240 * @psoc: pointer to the psoc object
2241 * @rrm_config: pointer to the MLME RRM cfg
2242 *
2243 * Return: None
2244 */
2245static void mlme_init_fe_rrm_in_cfg(struct wlan_objmgr_psoc *psoc,
2246 struct wlan_mlme_fe_rrm *rrm_config)
2247{
2248 qdf_size_t len;
2249
2250 rrm_config->rrm_enabled = cfg_get(psoc, CFG_RRM_ENABLE);
2251 rrm_config->rrm_rand_interval = cfg_get(psoc, CFG_RRM_MEAS_RAND_INTVL);
2252
2253 qdf_uint8_array_parse(cfg_get(psoc, CFG_RM_CAPABILITY),
2254 rrm_config->rm_capability,
2255 sizeof(rrm_config->rm_capability), &len);
2256
2257 if (len < MLME_RMENABLEDCAP_MAX_LEN) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302258 mlme_legacy_debug("Incorrect RM capability, using default");
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302259 qdf_uint8_array_parse(cfg_default(CFG_RM_CAPABILITY),
2260 rrm_config->rm_capability,
2261 sizeof(rrm_config->rm_capability), &len);
2262 }
2263}
2264
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302265static void mlme_init_powersave_params(struct wlan_objmgr_psoc *psoc,
2266 struct wlan_mlme_powersave *ps_cfg)
2267{
2268 ps_cfg->is_imps_enabled = cfg_get(psoc, CFG_ENABLE_IMPS);
2269 ps_cfg->is_bmps_enabled = cfg_get(psoc, CFG_ENABLE_PS);
2270 ps_cfg->auto_bmps_timer_val = cfg_get(psoc, CFG_AUTO_BMPS_ENABLE_TIMER);
2271 ps_cfg->bmps_min_listen_interval = cfg_get(psoc, CFG_BMPS_MINIMUM_LI);
2272 ps_cfg->bmps_max_listen_interval = cfg_get(psoc, CFG_BMPS_MAXIMUM_LI);
2273 ps_cfg->dtim_selection_diversity =
2274 cfg_get(psoc, CFG_DTIM_SELECTION_DIVERSITY);
2275}
2276
lifengdb340e72018-11-20 00:50:20 +08002277#ifdef MWS_COEX
2278static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2279 struct wlan_mlme_mwc *mwc)
2280{
2281 mwc->mws_coex_4g_quick_tdm =
2282 cfg_get(psoc, CFG_MWS_COEX_4G_QUICK_FTDM);
2283 mwc->mws_coex_5g_nr_pwr_limit =
2284 cfg_get(psoc, CFG_MWS_COEX_5G_NR_PWR_LIMIT);
2285}
2286#else
2287static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2288 struct wlan_mlme_mwc *mwc)
2289{
2290}
2291#endif
2292
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302293#ifdef SAP_AVOID_ACS_FREQ_LIST
2294static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2295 struct wlan_mlme_reg *reg)
2296{
2297 qdf_size_t avoid_acs_freq_list_num = 0;
2298 uint8_t i;
2299
2300 qdf_uint16_array_parse(cfg_get(psoc, CFG_SAP_AVOID_ACS_FREQ_LIST),
2301 reg->avoid_acs_freq_list,
2302 CFG_VALID_CHANNEL_LIST_LEN,
2303 &avoid_acs_freq_list_num);
2304 reg->avoid_acs_freq_list_num = avoid_acs_freq_list_num;
2305
2306 for (i = 0; i < avoid_acs_freq_list_num; i++)
2307 mlme_legacy_debug("avoid_acs_freq %d",
2308 reg->avoid_acs_freq_list[i]);
2309}
2310#else
2311static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2312 struct wlan_mlme_reg *reg)
2313{
2314}
2315#endif
2316
lifeng0b46ae52018-12-13 09:42:27 +08002317static void mlme_init_reg_cfg(struct wlan_objmgr_psoc *psoc,
2318 struct wlan_mlme_reg *reg)
2319{
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002320 qdf_size_t valid_channel_list_num = 0;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002321 uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN];
2322 uint8_t i;
2323 struct wlan_objmgr_pdev *pdev = NULL;
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002324
lifeng0b46ae52018-12-13 09:42:27 +08002325 reg->self_gen_frm_pwr = cfg_get(psoc, CFG_SELF_GEN_FRM_PWR);
2326 reg->etsi13_srd_chan_in_master_mode =
2327 cfg_get(psoc, CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE);
2328 reg->restart_beaconing_on_ch_avoid =
2329 cfg_get(psoc, CFG_RESTART_BEACONING_ON_CH_AVOID);
2330 reg->indoor_channel_support = cfg_get(psoc, CFG_INDOOR_CHANNEL_SUPPORT);
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05302331 reg->enable_11d_in_world_mode = cfg_get(psoc,
2332 CFG_ENABLE_11D_IN_WORLD_MODE);
lifeng0b46ae52018-12-13 09:42:27 +08002333 reg->scan_11d_interval = cfg_get(psoc, CFG_SCAN_11D_INTERVAL);
Pankaj Singhf84a5dd2019-12-13 13:29:11 +05302334 reg->enable_pending_chan_list_req = cfg_get(psoc,
2335 CFG_ENABLE_PENDING_CHAN_LIST_REQ);
Rajeev Kumar Sirasanagandla1b3a5352019-08-05 21:33:03 +05302336 reg->ignore_fw_reg_offload_ind = cfg_get(
2337 psoc,
2338 CFG_IGNORE_FW_REG_OFFLOAD_IND);
2339
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002340 qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST),
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002341 channel_list,
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002342 CFG_VALID_CHANNEL_LIST_LEN,
2343 &valid_channel_list_num);
2344 reg->valid_channel_list_num = (uint8_t)valid_channel_list_num;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002345
2346 pdev = wlan_objmgr_get_pdev_by_id(psoc, 0, WLAN_MLME_NB_ID);
2347 if (!pdev) {
2348 mlme_legacy_err("null pdev");
2349 return;
2350 }
2351
2352 for (i = 0; i < valid_channel_list_num; i++)
2353 reg->valid_channel_freq_list[i] =
2354 wlan_reg_chan_to_freq(pdev, channel_list[i]);
2355
2356 wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_NB_ID);
2357
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002358 qdf_str_lcopy(reg->country_code, cfg_default(CFG_COUNTRY_CODE),
2359 sizeof(reg->country_code));
2360 reg->country_code_len = (uint8_t)sizeof(reg->country_code);
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302361 mlme_init_acs_avoid_freq_list(psoc, reg);
lifeng0b46ae52018-12-13 09:42:27 +08002362}
2363
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302364static void
2365mlme_init_dot11_mode_cfg(struct wlan_mlme_dot11_mode *dot11_mode)
2366{
2367 dot11_mode->dot11_mode = cfg_default(CFG_DOT11_MODE);
2368}
2369
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302370QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
2371{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05302372 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302373 struct wlan_mlme_cfg *mlme_cfg;
2374 QDF_STATUS status = QDF_STATUS_SUCCESS;
2375
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05302376 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302377 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302378 mlme_legacy_err("Failed to get MLME Obj");
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302379 return QDF_STATUS_E_FAILURE;
2380 }
2381
2382 mlme_cfg = &mlme_obj->cfg;
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +05302383 mlme_init_generic_cfg(psoc, &mlme_cfg->gen);
Arif Hussain9f93a642018-09-10 18:32:25 -07002384 mlme_init_timeout_cfg(psoc, &mlme_cfg->timeouts);
Abhinav Kumar06b9a122018-10-10 15:01:11 +05302385 mlme_init_edca_params(psoc, &mlme_cfg->edca_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302386 mlme_init_ht_cap_in_cfg(psoc, &mlme_cfg->ht_caps);
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302387 mlme_init_wmm_in_cfg(psoc, &mlme_cfg->wmm_params);
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +05302388 mlme_init_mbo_cfg(psoc, &mlme_cfg->mbo_cfg);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +05302389 mlme_init_qos_cfg(psoc, &mlme_cfg->qos_mlme_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302390 mlme_init_rates_in_cfg(psoc, &mlme_cfg->rates);
Arif Hussain88d1fdd2018-09-26 16:12:24 -07002391 mlme_init_dfs_cfg(psoc, &mlme_cfg->dfs_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302392 mlme_init_sap_protection_cfg(psoc, &mlme_cfg->sap_protection_cfg);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +05302393 mlme_init_vht_cap_cfg(psoc, &mlme_cfg->vht_caps.vht_cap_info);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +05302394 mlme_init_chainmask_cfg(psoc, &mlme_cfg->chainmask_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302395 mlme_init_sap_cfg(psoc, &mlme_cfg->sap_cfg);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05302396 mlme_init_nss_chains(psoc, &mlme_cfg->nss_chains_ini_cfg);
Bala Venkatesh6d537092018-09-25 10:38:36 +05302397 mlme_init_he_cap_in_cfg(psoc, mlme_cfg);
Wu Gaod8f3db02018-07-24 19:18:45 +08002398 mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40);
Jiachao Wu3304d6b2018-08-24 18:24:34 +08002399 mlme_init_product_details_cfg(&mlme_cfg->product_details);
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302400 mlme_init_powersave_params(psoc, &mlme_cfg->ps_params);
Wu Gao406c53c2018-09-10 13:51:37 +08002401 mlme_init_sta_cfg(psoc, &mlme_cfg->sta);
Arif Hussaincca60432018-12-03 19:45:12 -08002402 mlme_init_stats_cfg(psoc, &mlme_cfg->stats);
Arif Hussain178f35f2018-11-13 18:26:18 -08002403 mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302404 mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr);
Manikandan Mohan2bd09772018-11-28 18:27:32 -08002405 mlme_init_ibss_cfg(psoc, &mlme_cfg->ibss);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +05302406 mlme_init_feature_flag_in_cfg(psoc, &mlme_cfg->feature_flags);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05302407 mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring);
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302408 mlme_init_dot11_mode_cfg(&mlme_cfg->dot11_mode);
Harprit Chhabadabec6de42018-09-10 10:21:15 -07002409 mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
Harprit Chhabadabd027a02018-10-30 13:02:22 -07002410 mlme_init_acs_cfg(psoc, &mlme_cfg->acs);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05302411 mlme_init_power_cfg(psoc, &mlme_cfg->power);
Karthik Kantamneni2231a232018-09-11 15:45:55 +05302412 mlme_init_oce_cfg(psoc, &mlme_cfg->oce);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302413 mlme_init_wep_cfg(&mlme_cfg->wep_params);
Arif Hussainbd5194c2018-11-27 19:01:15 -08002414 mlme_init_wifi_pos_cfg(psoc, &mlme_cfg->wifi_pos_cfg);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302415 mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302416 mlme_init_fe_wlm_in_cfg(psoc, &mlme_cfg->wlm_config);
2417 mlme_init_fe_rrm_in_cfg(psoc, &mlme_cfg->rrm_config);
lifengdb340e72018-11-20 00:50:20 +08002418 mlme_init_mwc_cfg(psoc, &mlme_cfg->mwc);
lifeng0b46ae52018-12-13 09:42:27 +08002419 mlme_init_reg_cfg(psoc, &mlme_cfg->reg);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302420 mlme_init_btm_cfg(psoc, &mlme_cfg->btm);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302421 mlme_init_roam_score_config(psoc, mlme_cfg);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302422
2423 return status;
2424}
Srinivas Dasari37e37312019-06-30 23:50:24 +05302425
2426void mlme_set_self_disconnect_ies(struct wlan_objmgr_vdev *vdev,
2427 struct wlan_ies *ie)
2428{
Srinivas Dasari37e37312019-06-30 23:50:24 +05302429 struct mlme_legacy_priv *mlme_priv;
2430
2431 if (!ie || !ie->len || !ie->data) {
2432 mlme_legacy_debug("disocnnect IEs are NULL");
2433 return;
2434 }
2435
hqu7f10f552019-07-09 22:12:44 +08002436 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2437 if (!mlme_priv) {
2438 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasari37e37312019-06-30 23:50:24 +05302439 return;
2440 }
2441
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302442 if (mlme_priv->disconnect_info.self_discon_ies.data) {
2443 qdf_mem_free(mlme_priv->disconnect_info.self_discon_ies.data);
2444 mlme_priv->disconnect_info.self_discon_ies.len = 0;
Srinivas Dasari37e37312019-06-30 23:50:24 +05302445 }
2446
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302447 mlme_priv->disconnect_info.self_discon_ies.data =
2448 qdf_mem_malloc(ie->len);
2449 if (!mlme_priv->disconnect_info.self_discon_ies.data)
Srinivas Dasari37e37312019-06-30 23:50:24 +05302450 return;
2451
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302452 qdf_mem_copy(mlme_priv->disconnect_info.self_discon_ies.data,
2453 ie->data, ie->len);
2454 mlme_priv->disconnect_info.self_discon_ies.len = ie->len;
Srinivas Dasari37e37312019-06-30 23:50:24 +05302455
2456 mlme_legacy_debug("Self disconnect IEs");
2457 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_DEBUG,
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302458 mlme_priv->disconnect_info.self_discon_ies.data,
2459 mlme_priv->disconnect_info.self_discon_ies.len);
Srinivas Dasari37e37312019-06-30 23:50:24 +05302460}
2461
2462void mlme_free_self_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2463{
Srinivas Dasari37e37312019-06-30 23:50:24 +05302464 struct mlme_legacy_priv *mlme_priv;
2465
hqu7f10f552019-07-09 22:12:44 +08002466 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2467 if (!mlme_priv) {
2468 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasari37e37312019-06-30 23:50:24 +05302469 return;
2470 }
2471
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302472 if (mlme_priv->disconnect_info.self_discon_ies.data) {
2473 qdf_mem_free(mlme_priv->disconnect_info.self_discon_ies.data);
2474 mlme_priv->disconnect_info.self_discon_ies.data = NULL;
2475 mlme_priv->disconnect_info.self_discon_ies.len = 0;
Srinivas Dasari37e37312019-06-30 23:50:24 +05302476 }
2477}
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302478
2479struct wlan_ies *mlme_get_self_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2480{
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302481 struct mlme_legacy_priv *mlme_priv;
2482
hqu7f10f552019-07-09 22:12:44 +08002483 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2484 if (!mlme_priv) {
2485 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302486 return NULL;
2487 }
2488
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302489 return &mlme_priv->disconnect_info.self_discon_ies;
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302490}
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302491
2492void mlme_set_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev,
2493 struct wlan_ies *ie)
2494{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302495 struct mlme_legacy_priv *mlme_priv;
2496
2497 if (!ie || !ie->len || !ie->data) {
2498 mlme_legacy_debug("disocnnect IEs are NULL");
2499 return;
2500 }
2501
hqu7f10f552019-07-09 22:12:44 +08002502 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2503 if (!mlme_priv) {
2504 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302505 return;
2506 }
2507
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302508 if (mlme_priv->disconnect_info.peer_discon_ies.data) {
2509 qdf_mem_free(mlme_priv->disconnect_info.peer_discon_ies.data);
2510 mlme_priv->disconnect_info.peer_discon_ies.len = 0;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302511 }
2512
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302513 mlme_priv->disconnect_info.peer_discon_ies.data =
2514 qdf_mem_malloc(ie->len);
2515 if (!mlme_priv->disconnect_info.peer_discon_ies.data)
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302516 return;
2517
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302518 qdf_mem_copy(mlme_priv->disconnect_info.peer_discon_ies.data,
2519 ie->data, ie->len);
2520 mlme_priv->disconnect_info.peer_discon_ies.len = ie->len;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302521
2522 mlme_legacy_debug("peer disconnect IEs");
2523 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_DEBUG,
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302524 mlme_priv->disconnect_info.peer_discon_ies.data,
2525 mlme_priv->disconnect_info.peer_discon_ies.len);
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302526}
2527
2528void mlme_free_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2529{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302530 struct mlme_legacy_priv *mlme_priv;
2531
hqu7f10f552019-07-09 22:12:44 +08002532 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2533 if (!mlme_priv) {
2534 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302535 return;
2536 }
2537
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302538 if (mlme_priv->disconnect_info.peer_discon_ies.data) {
2539 qdf_mem_free(mlme_priv->disconnect_info.peer_discon_ies.data);
2540 mlme_priv->disconnect_info.peer_discon_ies.data = NULL;
2541 mlme_priv->disconnect_info.peer_discon_ies.len = 0;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302542 }
2543}
2544
2545struct wlan_ies *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2546{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302547 struct mlme_legacy_priv *mlme_priv;
2548
hqu7f10f552019-07-09 22:12:44 +08002549 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2550 if (!mlme_priv) {
2551 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302552 return NULL;
2553 }
2554
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302555 return &mlme_priv->disconnect_info.peer_discon_ies;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302556}
Srinivas Dasaricc863f02019-09-05 17:18:48 +05302557
Paul Zhangd34b5752019-10-09 11:22:32 +08002558void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag)
2559{
2560 struct mlme_legacy_priv *mlme_priv;
2561
2562 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2563 if (!mlme_priv) {
2564 mlme_legacy_err("vdev legacy private object is NULL");
2565 return;
2566 }
2567
2568 mlme_priv->follow_ap_edca = flag;
2569}
2570
2571bool mlme_get_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev)
2572{
2573 struct mlme_legacy_priv *mlme_priv;
2574
2575 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2576 if (!mlme_priv) {
2577 mlme_legacy_err("vdev legacy private object is NULL");
2578 return false;
2579 }
2580
2581 return mlme_priv->follow_ap_edca;
2582}
2583
Srinivas Dasaricc863f02019-09-05 17:18:48 +05302584void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer,
2585 bool is_pmf_enabled)
2586{
2587 struct peer_mlme_priv_obj *peer_priv;
2588
2589 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
2590 WLAN_UMAC_COMP_MLME);
2591 if (!peer_priv) {
2592 mlme_legacy_err(" peer mlme component object is NULL");
2593 return;
2594 }
2595 peer_priv->is_pmf_enabled = is_pmf_enabled;
2596}
2597
2598bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer)
2599{
2600 struct peer_mlme_priv_obj *peer_priv;
2601
2602 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
2603 WLAN_UMAC_COMP_MLME);
2604 if (!peer_priv) {
2605 mlme_legacy_err("peer mlme component object is NULL");
2606 return false;
2607 }
2608
2609 return peer_priv->is_pmf_enabled;
2610}
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302611
Srinivas Dasarie2495dc2020-02-13 09:49:24 +05302612void mlme_set_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
2613 uint8_t vdev_id, bool from_ap,
2614 uint32_t reason_code)
2615{
2616 struct wlan_objmgr_vdev *vdev;
2617 struct mlme_legacy_priv *mlme_priv;
2618
2619 if (!psoc)
2620 return;
2621
2622 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2623 WLAN_LEGACY_MAC_ID);
2624 if (!vdev)
2625 return;
2626 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2627 if (!mlme_priv) {
2628 mlme_legacy_err("vdev legacy private object is NULL");
2629 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2630 return;
2631 }
2632
2633 mlme_priv->disconnect_info.from_ap = from_ap;
2634 mlme_priv->disconnect_info.discon_reason = reason_code;
2635 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2636}
2637
2638void mlme_get_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
2639 uint8_t vdev_id, bool *from_ap,
2640 uint32_t *reason_code)
2641{
2642 struct wlan_objmgr_vdev *vdev;
2643 struct mlme_legacy_priv *mlme_priv;
2644
2645 if (!psoc)
2646 return;
2647
2648 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2649 WLAN_LEGACY_MAC_ID);
2650 if (!vdev)
2651 return;
2652 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2653 if (!mlme_priv) {
2654 mlme_legacy_err("vdev legacy private object is NULL");
2655 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2656 return;
2657 }
2658
2659 *from_ap = mlme_priv->disconnect_info.from_ap;
2660 *reason_code = mlme_priv->disconnect_info.discon_reason;
2661 mlme_priv->disconnect_info.from_ap = false;
2662 mlme_priv->disconnect_info.discon_reason = 0;
2663 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2664}
2665
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302666#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
2667static
2668const char *mlme_roam_state_to_string(enum roam_offload_state state)
2669{
2670 switch (state) {
2671 case ROAM_INIT:
2672 return "ROAM_INIT";
2673 case ROAM_DEINIT:
2674 return "ROAM_DEINIT";
2675 case ROAM_RSO_STARTED:
2676 return "ROAM_RSO_STARTED";
2677 case ROAM_RSO_STOPPED:
2678 return "ROAM_RSO_STOPPED";
2679 default:
2680 return "";
2681 }
2682}
2683
2684static void
2685mlme_print_roaming_state(uint8_t vdev_id, enum roam_offload_state cur_state,
2686 enum roam_offload_state new_state)
2687{
Arun Kumar Khandavalli32a90962020-01-20 12:03:23 +05302688 mlme_debug("ROAM: vdev[%d] ROAM State Changed from [%s] to [%s]",
2689 vdev_id, mlme_roam_state_to_string(cur_state),
2690 mlme_roam_state_to_string(new_state));
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302691
2692 /* TODO: Try to print the state change requestor also */
2693}
2694
2695bool
2696mlme_get_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
2697 uint8_t vdev_id)
2698{
2699 struct wlan_objmgr_vdev *vdev;
2700 struct mlme_legacy_priv *mlme_priv;
2701 bool value;
2702
2703 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2704 WLAN_MLME_OBJMGR_ID);
2705
2706 if (!vdev) {
2707 mlme_legacy_err("vdev object is NULL");
2708 return 0;
2709 }
2710
2711 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2712 if (!mlme_priv) {
2713 mlme_legacy_err("vdev legacy private object is NULL");
2714 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2715 return 0;
2716 }
2717
2718 value = mlme_priv->mlme_roam.roam_cfg.supplicant_disabled_roaming;
2719 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2720
2721 return value;
2722}
2723
2724void mlme_set_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
2725 uint8_t vdev_id, bool val)
2726{
2727 struct wlan_objmgr_vdev *vdev;
2728 struct mlme_legacy_priv *mlme_priv;
2729
2730 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2731 WLAN_MLME_OBJMGR_ID);
2732
2733 if (!vdev) {
2734 mlme_legacy_err("vdev object is NULL");
2735 return;
2736 }
2737
2738 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2739 if (!mlme_priv) {
2740 mlme_legacy_err("vdev legacy private object is NULL");
2741 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2742 return;
2743 }
2744
2745 mlme_priv->mlme_roam.roam_cfg.supplicant_disabled_roaming = val;
2746 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2747}
2748
2749uint32_t
2750mlme_get_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2751{
2752 struct wlan_objmgr_vdev *vdev;
2753 struct mlme_legacy_priv *mlme_priv;
2754 uint32_t roam_bitmap;
2755
2756 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2757 WLAN_MLME_OBJMGR_ID);
2758
2759 if (!vdev) {
2760 mlme_legacy_err("vdev object is NULL");
2761 return 0;
2762 }
2763
2764 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2765 if (!mlme_priv) {
2766 mlme_legacy_err("vdev legacy private object is NULL");
2767 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2768 return 0;
2769 }
2770
2771 roam_bitmap = mlme_priv->mlme_roam.roam_cfg.roam_trigger_bitmap;
2772 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2773
2774 return roam_bitmap;
2775}
2776
2777void mlme_set_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc,
2778 uint8_t vdev_id, uint32_t val)
2779{
2780 struct wlan_objmgr_vdev *vdev;
2781 struct mlme_legacy_priv *mlme_priv;
2782
2783 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2784 WLAN_MLME_OBJMGR_ID);
2785 if (!vdev) {
2786 mlme_legacy_err("vdev object is NULL");
2787 return;
2788 }
2789
2790 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2791 if (!mlme_priv) {
2792 mlme_legacy_err("vdev legacy private object is NULL");
2793 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2794 return;
2795 }
2796
2797 mlme_priv->mlme_roam.roam_cfg.roam_trigger_bitmap = val;
2798 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2799}
2800
2801uint8_t
2802mlme_get_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2803{
2804 struct wlan_objmgr_vdev *vdev;
2805 struct mlme_legacy_priv *mlme_priv;
2806 uint8_t bitmap;
2807
2808 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2809 WLAN_MLME_OBJMGR_ID);
2810
2811 if (!vdev) {
2812 mlme_legacy_err("vdev object is NULL");
2813 return 0xFF;
2814 }
2815
2816 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2817 if (!mlme_priv) {
2818 mlme_legacy_err("vdev legacy private object is NULL");
2819 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2820 return 0xFF;
2821 }
2822
2823 bitmap = mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap;
2824 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2825
2826 return bitmap;
2827}
2828
2829void
2830mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2831 enum roam_control_requestor reqs, bool clear)
2832{
2833 struct wlan_objmgr_vdev *vdev;
2834 struct mlme_legacy_priv *mlme_priv;
2835
2836 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2837 WLAN_MLME_OBJMGR_ID);
2838 if (!vdev) {
2839 mlme_legacy_err("vdev object is NULL");
2840 return;
2841 }
2842
2843 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2844 if (!mlme_priv) {
2845 mlme_legacy_err("vdev legacy private object is NULL");
2846 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2847 return;
2848 }
2849
2850 if (clear)
2851 mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap &= ~reqs;
2852 else
2853 mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap |= reqs;
2854 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2855}
2856
2857enum roam_offload_state
2858mlme_get_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2859{
2860 struct wlan_objmgr_vdev *vdev;
2861 struct mlme_legacy_priv *mlme_priv;
2862 enum roam_offload_state roam_state;
2863
2864 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2865 WLAN_MLME_OBJMGR_ID);
2866
2867 if (!vdev) {
2868 mlme_legacy_err("vdev object is NULL");
2869 return ROAM_DEINIT;
2870 }
2871
2872 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2873 if (!mlme_priv) {
2874 mlme_legacy_err("vdev legacy private object is NULL");
2875 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2876 return ROAM_DEINIT;
2877 }
2878
2879 roam_state = mlme_priv->mlme_roam.roam_sm.state;
2880 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2881
2882 return roam_state;
2883}
2884
2885void mlme_set_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2886 enum roam_offload_state new_state)
2887{
2888 struct wlan_objmgr_vdev *vdev;
2889 struct mlme_legacy_priv *mlme_priv;
2890
2891 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2892 WLAN_MLME_OBJMGR_ID);
2893
2894 if (!vdev) {
2895 mlme_legacy_err("vdev object is NULL");
2896 return;
2897 }
2898
2899 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2900 if (!mlme_priv) {
2901 mlme_legacy_err("vdev legacy private object is NULL");
2902 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2903 return;
2904 }
2905
2906 mlme_print_roaming_state(vdev_id, mlme_priv->mlme_roam.roam_sm.state,
2907 new_state);
2908 mlme_priv->mlme_roam.roam_sm.state = new_state;
2909 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2910}
2911#endif