blob: 0c2dd2ec7c71c1c622791544087fcab5950a22a1 [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
Wu Gao406c53c2018-09-10 13:51:37 +08001358static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc,
1359 struct wlan_mlme_sta_cfg *sta)
1360{
1361 sta->sta_keep_alive_period =
1362 cfg_get(psoc, CFG_INFRA_STA_KEEP_ALIVE_PERIOD);
1363 sta->tgt_gtx_usr_cfg =
1364 cfg_get(psoc, CFG_TGT_GTX_USR_CFG);
1365 sta->pmkid_modes =
1366 cfg_get(psoc, CFG_PMKID_MODES);
1367 sta->ignore_peer_erp_info =
1368 cfg_get(psoc, CFG_IGNORE_PEER_ERP_INFO);
1369 sta->sta_prefer_80mhz_over_160mhz =
1370 cfg_get(psoc, CFG_STA_PREFER_80MHZ_OVER_160MHZ);
1371 sta->enable_5g_ebt =
1372 cfg_get(psoc, CFG_PPS_ENABLE_5G_EBT);
1373 sta->deauth_before_connection =
1374 cfg_get(psoc, CFG_ENABLE_DEAUTH_BEFORE_CONNECTION);
1375 sta->dot11p_mode =
1376 cfg_get(psoc, CFG_DOT11P_MODE);
1377 sta->enable_go_cts2self_for_sta =
1378 cfg_get(psoc, CFG_ENABLE_GO_CTS2SELF_FOR_STA);
1379 sta->qcn_ie_support =
1380 cfg_get(psoc, CFG_QCN_IE_SUPPORT);
1381 sta->fils_max_chan_guard_time =
1382 cfg_get(psoc, CFG_FILS_MAX_CHAN_GUARD_TIME);
Wu Gao406c53c2018-09-10 13:51:37 +08001383 sta->single_tid =
1384 cfg_get(psoc, CFG_SINGLE_TID_RC);
Krunal Sonid2c33e12018-12-06 15:02:37 -08001385 sta->sta_miracast_mcc_rest_time =
1386 cfg_get(psoc, CFG_STA_MCAST_MCC_REST_TIME);
Wu Gao406c53c2018-09-10 13:51:37 +08001387 sta->wait_cnf_timeout =
1388 (uint32_t)cfg_default(CFG_WT_CNF_TIMEOUT);
1389 sta->current_rssi =
1390 (uint32_t)cfg_default(CFG_CURRENT_RSSI);
Wu Gao4f8938a2018-11-26 11:49:00 +08001391 sta->allow_tpc_from_ap = cfg_get(psoc, CFG_TX_POWER_CTRL);
Sourav Mohapatra0dfe5552018-11-16 11:29:54 +05301392 sta->sta_keepalive_method =
1393 cfg_get(psoc, CFG_STA_KEEPALIVE_METHOD);
Wu Gao406c53c2018-09-10 13:51:37 +08001394}
1395
Arif Hussaincca60432018-12-03 19:45:12 -08001396static void mlme_init_stats_cfg(struct wlan_objmgr_psoc *psoc,
1397 struct wlan_mlme_stats_cfg *stats)
1398{
1399 stats->stats_periodic_display_time =
1400 cfg_get(psoc, CFG_PERIODIC_STATS_DISPLAY_TIME);
1401 stats->stats_link_speed_rssi_high =
1402 cfg_get(psoc, CFG_LINK_SPEED_RSSI_HIGH);
1403 stats->stats_link_speed_rssi_med =
1404 cfg_get(psoc, CFG_LINK_SPEED_RSSI_MID);
1405 stats->stats_link_speed_rssi_low =
1406 cfg_get(psoc, CFG_LINK_SPEED_RSSI_LOW);
1407 stats->stats_report_max_link_speed_rssi =
1408 cfg_get(psoc, CFG_REPORT_MAX_LINK_SPEED);
1409}
1410
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301411#ifdef WLAN_ADAPTIVE_11R
1412/**
1413 * mlme_init_adaptive_11r_cfg() - initialize enable_adaptive_11r
1414 * flag
1415 * @psoc: Pointer to PSOC
1416 * @lfr: pointer to mlme lfr config
1417 *
1418 * Return: None
1419 */
1420static void
1421mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1422 struct wlan_mlme_lfr_cfg *lfr)
1423{
1424 lfr->enable_adaptive_11r = cfg_get(psoc, CFG_ADAPTIVE_11R);
1425}
1426
1427#else
1428static inline void
1429mlme_init_adaptive_11r_cfg(struct wlan_objmgr_psoc *psoc,
1430 struct wlan_mlme_lfr_cfg *lfr)
1431{
1432}
1433#endif
1434
Abhinav Kumar243b43b2020-02-21 14:23:07 +05301435#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
Abhinav Kumar95a59012020-01-30 11:35:32 +05301436/**
1437 * mlme_init_sae_single_pmk_cfg() - initialize sae_same_pmk_config
1438 * flag
1439 * @psoc: Pointer to PSOC
1440 * @lfr: pointer to mlme lfr config
1441 *
1442 * Return: None
1443 */
1444static void
1445mlme_init_sae_single_pmk_cfg(struct wlan_objmgr_psoc *psoc,
1446 struct wlan_mlme_lfr_cfg *lfr)
1447{
Abhinav Kumar243b43b2020-02-21 14:23:07 +05301448 lfr->sae_single_pmk_feature_enabled = cfg_get(psoc, CFG_SAE_SINGLE_PMK);
Abhinav Kumar95a59012020-01-30 11:35:32 +05301449}
1450
1451#else
1452static inline void
1453mlme_init_sae_single_pmk_cfg(struct wlan_objmgr_psoc *psoc,
1454 struct wlan_mlme_lfr_cfg *lfr)
1455{
1456}
1457#endif
1458
Wu Gao5d23d782018-11-08 16:09:47 +08001459#ifdef WLAN_FEATURE_ROAM_OFFLOAD
1460static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1461 struct wlan_mlme_lfr_cfg *lfr)
1462{
1463 lfr->lfr3_roaming_offload =
1464 cfg_get(psoc, CFG_LFR3_ROAMING_OFFLOAD);
sheenam mongac6d93fa2020-02-24 16:28:33 +05301465 lfr->enable_roam_reason_vsie =
1466 cfg_get(psoc, CFG_ENABLE_ROAM_REASON_VSIE);
Pragaspathi Thilagaraj14f72de2019-03-28 23:12:51 +05301467 lfr->enable_disconnect_roam_offload =
1468 cfg_get(psoc, CFG_LFR_ENABLE_DISCONNECT_ROAM);
1469 lfr->enable_idle_roam =
1470 cfg_get(psoc, CFG_LFR_ENABLE_IDLE_ROAM);
1471 lfr->idle_roam_rssi_delta =
1472 cfg_get(psoc, CFG_LFR_IDLE_ROAM_RSSI_DELTA);
1473 lfr->idle_roam_inactive_time =
1474 cfg_get(psoc, CFG_LFR_IDLE_ROAM_INACTIVE_TIME);
1475 lfr->idle_data_packet_count =
1476 cfg_get(psoc, CFG_LFR_IDLE_ROAM_PACKET_COUNT);
1477 lfr->idle_roam_min_rssi = cfg_get(psoc, CFG_LFR_IDLE_ROAM_MIN_RSSI);
1478 lfr->idle_roam_band = cfg_get(psoc, CFG_LFR_IDLE_ROAM_BAND);
Abhinav Kumar243b43b2020-02-21 14:23:07 +05301479 mlme_init_sae_single_pmk_cfg(psoc, lfr);
Wu Gao5d23d782018-11-08 16:09:47 +08001480}
1481
1482#else
1483static void mlme_init_roam_offload_cfg(struct wlan_objmgr_psoc *psoc,
1484 struct wlan_mlme_lfr_cfg *lfr)
1485{
1486}
1487
1488#endif
1489
1490#ifdef FEATURE_WLAN_ESE
1491static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1492 struct wlan_mlme_lfr_cfg *lfr)
1493{
1494 lfr->ese_enabled = cfg_get(psoc, CFG_LFR_ESE_FEATURE_ENABLED);
1495}
1496#else
1497static void mlme_init_ese_cfg(struct wlan_objmgr_psoc *psoc,
1498 struct wlan_mlme_lfr_cfg *lfr)
1499{
1500}
1501#endif
1502
Wu Gao6294afc2019-01-05 00:00:58 +08001503#ifdef FEATURE_LFR_SUBNET_DETECTION
1504static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1505 struct wlan_mlme_lfr_cfg *lfr)
1506{
1507 lfr->enable_lfr_subnet_detection =
1508 cfg_get(psoc, CFG_LFR3_ENABLE_SUBNET_DETECTION);
1509}
1510#else
1511static void mlme_init_subnet_detection(struct wlan_objmgr_psoc *psoc,
1512 struct wlan_mlme_lfr_cfg *lfr)
1513{
1514}
1515#endif
1516
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301517static void
1518mlme_init_bss_load_trigger_params(struct wlan_objmgr_psoc *psoc,
1519 struct bss_load_trigger *bss_load_trig)
1520{
1521 bss_load_trig->enabled =
1522 cfg_get(psoc, CFG_ENABLE_BSS_LOAD_TRIGGERED_ROAM);
1523 bss_load_trig->threshold = cfg_get(psoc, CFG_BSS_LOAD_THRESHOLD);
Pragaspathi Thilagaraj39d61602018-12-24 14:46:53 +05301524 bss_load_trig->sample_time = cfg_get(psoc, CFG_BSS_LOAD_SAMPLE_TIME);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301525 bss_load_trig->rssi_threshold_5ghz =
1526 cfg_get(psoc, CFG_BSS_LOAD_TRIG_5G_RSSI_THRES);
1527 bss_load_trig->rssi_threshold_24ghz =
1528 cfg_get(psoc, CFG_BSS_LOAD_TRIG_2G_RSSI_THRES);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301529}
1530
Srinivas Dasari1ec74522019-09-19 14:16:29 +05301531void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc,
1532 struct wlan_mlme_lfr_cfg *lfr)
1533{
1534 /* Restore the params set through SETDFSSCANMODE */
1535 lfr->roaming_dfs_channel =
1536 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1537
1538 /* Restore the params set through SETWESMODE */
1539 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
1540}
1541
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05301542static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
1543 struct wlan_mlme_lfr_cfg *lfr)
Wu Gao55f21712018-09-17 10:57:49 +08001544{
Wu Gaoe7687f42018-12-10 19:43:00 +08001545 qdf_size_t neighbor_scan_chan_list_num = 0;
Wu Gao5d23d782018-11-08 16:09:47 +08001546
Wu Gao55f21712018-09-17 10:57:49 +08001547 lfr->mawc_roam_enabled =
1548 cfg_get(psoc, CFG_LFR_MAWC_ROAM_ENABLED);
1549 lfr->enable_fast_roam_in_concurrency =
1550 cfg_get(psoc, CFG_LFR_ENABLE_FAST_ROAM_IN_CONCURRENCY);
Wu Gao55f21712018-09-17 10:57:49 +08001551 lfr->early_stop_scan_enable =
1552 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_ENABLE);
Wu Gao55f21712018-09-17 10:57:49 +08001553 lfr->enable_5g_band_pref =
1554 cfg_get(psoc, CFG_LFR_ENABLE_5G_BAND_PREF);
Wu Gao5d23d782018-11-08 16:09:47 +08001555 lfr->lfr_enabled = cfg_get(psoc, CFG_LFR_FEATURE_ENABLED);
1556 lfr->mawc_enabled = cfg_get(psoc, CFG_LFR_MAWC_FEATURE_ENABLED);
1557 lfr->fast_transition_enabled =
1558 cfg_get(psoc, CFG_LFR_FAST_TRANSITION_ENABLED);
1559 lfr->wes_mode_enabled = cfg_get(psoc, CFG_LFR_ENABLE_WES_MODE);
Wu Gao55f21712018-09-17 10:57:49 +08001560 lfr->mawc_roam_traffic_threshold =
1561 cfg_get(psoc, CFG_LFR_MAWC_ROAM_TRAFFIC_THRESHOLD);
1562 lfr->mawc_roam_ap_rssi_threshold =
1563 cfg_get(psoc, CFG_LFR_MAWC_ROAM_AP_RSSI_THRESHOLD);
1564 lfr->mawc_roam_rssi_high_adjust =
1565 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_HIGH_ADJUST);
1566 lfr->mawc_roam_rssi_low_adjust =
1567 cfg_get(psoc, CFG_LFR_MAWC_ROAM_RSSI_LOW_ADJUST);
1568 lfr->roam_rssi_abs_threshold =
1569 cfg_get(psoc, CFG_LFR_ROAM_RSSI_ABS_THRESHOLD);
1570 lfr->rssi_threshold_offset_5g =
1571 cfg_get(psoc, CFG_LFR_5G_RSSI_THRESHOLD_OFFSET);
1572 lfr->early_stop_scan_min_threshold =
1573 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MIN_THRESHOLD);
1574 lfr->early_stop_scan_max_threshold =
1575 cfg_get(psoc, CFG_LFR_EARLY_STOP_SCAN_MAX_THRESHOLD);
1576 lfr->first_scan_bucket_threshold =
1577 cfg_get(psoc, CFG_LFR_FIRST_SCAN_BUCKET_THRESHOLD);
1578 lfr->roam_dense_traffic_threshold =
1579 cfg_get(psoc, CFG_LFR_ROAM_DENSE_TRAFFIC_THRESHOLD);
1580 lfr->roam_dense_rssi_thre_offset =
1581 cfg_get(psoc, CFG_LFR_ROAM_DENSE_RSSI_THRE_OFFSET);
1582 lfr->roam_dense_min_aps =
1583 cfg_get(psoc, CFG_LFR_ROAM_DENSE_MIN_APS);
1584 lfr->roam_bg_scan_bad_rssi_threshold =
1585 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_THRESHOLD);
1586 lfr->roam_bg_scan_client_bitmap =
1587 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_CLIENT_BITMAP);
1588 lfr->roam_bg_scan_bad_rssi_offset_2g =
1589 cfg_get(psoc, CFG_LFR_ROAM_BG_SCAN_BAD_RSSI_OFFSET_2G);
1590 lfr->adaptive_roamscan_dwell_mode =
1591 cfg_get(psoc, CFG_LFR_ADAPTIVE_ROAMSCAN_DWELL_MODE);
1592 lfr->per_roam_enable =
1593 cfg_get(psoc, CFG_LFR_PER_ROAM_ENABLE);
1594 lfr->per_roam_config_high_rate_th =
1595 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_HIGH_RATE_TH);
1596 lfr->per_roam_config_low_rate_th =
1597 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_LOW_RATE_TH);
1598 lfr->per_roam_config_rate_th_percent =
1599 cfg_get(psoc, CFG_LFR_PER_ROAM_CONFIG_RATE_TH_PERCENT);
1600 lfr->per_roam_rest_time =
1601 cfg_get(psoc, CFG_LFR_PER_ROAM_REST_TIME);
1602 lfr->per_roam_monitor_time =
1603 cfg_get(psoc, CFG_LFR_PER_ROAM_MONITOR_TIME);
1604 lfr->per_roam_min_candidate_rssi =
1605 cfg_get(psoc, CFG_LFR_PER_ROAM_MIN_CANDIDATE_RSSI);
1606 lfr->lfr3_disallow_duration =
1607 cfg_get(psoc, CFG_LFR3_ROAM_DISALLOW_DURATION);
1608 lfr->lfr3_rssi_channel_penalization =
1609 cfg_get(psoc, CFG_LFR3_ROAM_RSSI_CHANNEL_PENALIZATION);
1610 lfr->lfr3_num_disallowed_aps =
1611 cfg_get(psoc, CFG_LFR3_ROAM_NUM_DISALLOWED_APS);
Wu Gaob056db62018-12-14 16:50:13 +08001612
1613 if (lfr->enable_5g_band_pref) {
1614 lfr->rssi_boost_threshold_5g =
1615 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_THRESHOLD);
1616 lfr->rssi_boost_factor_5g =
1617 cfg_get(psoc, CFG_LFR_5G_RSSI_BOOST_FACTOR);
1618 lfr->max_rssi_boost_5g =
1619 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_BOOST);
1620 lfr->rssi_penalize_threshold_5g =
1621 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_THRESHOLD);
1622 lfr->rssi_penalize_factor_5g =
1623 cfg_get(psoc, CFG_LFR_5G_RSSI_PENALIZE_FACTOR);
1624 lfr->max_rssi_penalize_5g =
1625 cfg_get(psoc, CFG_LFR_5G_MAX_RSSI_PENALIZE);
1626 }
1627
Wu Gao55f21712018-09-17 10:57:49 +08001628 lfr->max_num_pre_auth = (uint32_t)
1629 cfg_default(CFG_LFR_MAX_NUM_PRE_AUTH);
Sourav Mohapatra5ba8da32018-07-16 09:21:15 +05301630 lfr->roam_preauth_no_ack_timeout =
1631 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_NO_ACK_TIMEOUT);
1632 lfr->roam_preauth_retry_count =
1633 cfg_get(psoc, CFG_LFR3_ROAM_PREAUTH_RETRY_COUNT);
Wu Gao5d23d782018-11-08 16:09:47 +08001634 lfr->roam_rssi_diff = cfg_get(psoc, CFG_LFR_ROAM_RSSI_DIFF);
1635 lfr->roam_scan_offload_enabled =
1636 cfg_get(psoc, CFG_LFR_ROAM_SCAN_OFFLOAD_ENABLED);
1637 lfr->neighbor_scan_timer_period =
1638 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_TIMER_PERIOD);
1639 lfr->neighbor_scan_min_timer_period =
1640 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_TIMER_PERIOD);
1641 lfr->neighbor_lookup_rssi_threshold =
1642 cfg_get(psoc, CFG_LFR_NEIGHBOR_LOOKUP_RSSI_THRESHOLD);
1643 lfr->opportunistic_scan_threshold_diff =
1644 cfg_get(psoc, CFG_LFR_OPPORTUNISTIC_SCAN_THRESHOLD_DIFF);
1645 lfr->roam_rescan_rssi_diff =
1646 cfg_get(psoc, CFG_LFR_ROAM_RESCAN_RSSI_DIFF);
1647 lfr->neighbor_scan_min_chan_time =
1648 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MIN_CHAN_TIME);
1649 lfr->neighbor_scan_max_chan_time =
1650 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_MAX_CHAN_TIME);
1651 lfr->neighbor_scan_results_refresh_period =
1652 cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_RESULTS_REFRESH_PERIOD);
1653 lfr->empty_scan_refresh_period =
1654 cfg_get(psoc, CFG_LFR_EMPTY_SCAN_REFRESH_PERIOD);
1655 lfr->roam_bmiss_first_bcnt =
1656 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FIRST_BCNT);
1657 lfr->roam_bmiss_final_bcnt =
1658 cfg_get(psoc, CFG_LFR_ROAM_BMISS_FINAL_BCNT);
1659 lfr->roam_beacon_rssi_weight =
1660 cfg_get(psoc, CFG_LFR_ROAM_BEACON_RSSI_WEIGHT);
1661 lfr->roaming_dfs_channel =
1662 cfg_get(psoc, CFG_LFR_ROAMING_DFS_CHANNEL);
1663 lfr->roam_scan_hi_rssi_maxcount =
1664 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_MAXCOUNT);
1665 lfr->roam_scan_hi_rssi_delta =
1666 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELTA);
1667 lfr->roam_scan_hi_rssi_delay =
1668 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_DELAY);
1669 lfr->roam_scan_hi_rssi_ub =
1670 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HI_RSSI_UB);
1671 lfr->roam_prefer_5ghz =
1672 cfg_get(psoc, CFG_LFR_ROAM_PREFER_5GHZ);
1673 lfr->roam_intra_band =
1674 cfg_get(psoc, CFG_LFR_ROAM_INTRA_BAND);
1675 lfr->roam_scan_home_away_time =
1676 cfg_get(psoc, CFG_LFR_ROAM_SCAN_HOME_AWAY_TIME);
1677 lfr->roam_scan_n_probes =
1678 cfg_get(psoc, CFG_LFR_ROAM_SCAN_N_PROBES);
1679 lfr->delay_before_vdev_stop =
1680 cfg_get(psoc, CFG_LFR_DELAY_BEFORE_VDEV_STOP);
Wu Gaoe7687f42018-12-10 19:43:00 +08001681 qdf_uint8_array_parse(cfg_get(psoc, CFG_LFR_NEIGHBOR_SCAN_CHANNEL_LIST),
Wu Gao5d23d782018-11-08 16:09:47 +08001682 lfr->neighbor_scan_channel_list,
Wu Gao7f70e382019-05-31 14:23:48 +08001683 CFG_VALID_CHANNEL_LIST_LEN,
Wu Gao5d23d782018-11-08 16:09:47 +08001684 &neighbor_scan_chan_list_num);
1685 lfr->neighbor_scan_channel_list_num =
1686 (uint8_t)neighbor_scan_chan_list_num;
Wu Gao6294afc2019-01-05 00:00:58 +08001687 lfr->ho_delay_for_rx =
1688 cfg_get(psoc, CFG_LFR3_ROAM_HO_DELAY_FOR_RX);
1689 lfr->min_delay_btw_roam_scans =
1690 cfg_get(psoc, CFG_LFR_MIN_DELAY_BTW_ROAM_SCAN);
1691 lfr->roam_trigger_reason_bitmask =
1692 cfg_get(psoc, CFG_LFR_ROAM_SCAN_TRIGGER_REASON_BITMASK);
1693 lfr->enable_ftopen =
1694 cfg_get(psoc, CFG_LFR_ROAM_FT_OPEN_ENABLE);
1695 lfr->roam_force_rssi_trigger =
1696 cfg_get(psoc, CFG_LFR_ROAM_FORCE_RSSI_TRIGGER);
Abhinav Kumar990fea62019-02-14 12:38:38 +05301697 lfr->roaming_scan_policy =
1698 cfg_get(psoc, CFG_ROAM_SCAN_SCAN_POLICY);
1699
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301700 lfr->roam_scan_inactivity_time =
1701 cfg_get(psoc, CFG_ROAM_SCAN_INACTIVITY_TIME);
1702 lfr->roam_inactive_data_packet_count =
1703 cfg_get(psoc, CFG_ROAM_INACTIVE_COUNT);
1704 lfr->roam_scan_period_after_inactivity =
1705 cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
Pragaspathi Thilagarajeb367282019-02-19 00:42:28 +05301706 lfr->fw_akm_bitmap = 0;
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05301707
Wu Gao5d23d782018-11-08 16:09:47 +08001708 mlme_init_roam_offload_cfg(psoc, lfr);
1709 mlme_init_ese_cfg(psoc, lfr);
Pragaspathi Thilagaraj69f0b692018-12-16 22:23:04 +05301710 mlme_init_bss_load_trigger_params(psoc, &lfr->bss_load_trig);
Pragaspathi Thilagaraj1f3f99f2019-04-24 23:48:47 +05301711 mlme_init_adaptive_11r_cfg(psoc, lfr);
Wu Gao6294afc2019-01-05 00:00:58 +08001712 mlme_init_subnet_detection(psoc, lfr);
Wu Gao55f21712018-09-17 10:57:49 +08001713}
1714
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301715static uint32_t
1716mlme_limit_max_per_index_score(uint32_t per_index_score)
1717{
1718 uint8_t i, score;
1719
1720 for (i = 0; i < MAX_INDEX_PER_INI; i++) {
1721 score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i);
1722 if (score > MAX_INDEX_SCORE)
1723 WLAN_SET_SCORE_PERCENTAGE(per_index_score,
1724 MAX_INDEX_SCORE, i);
1725 }
1726
1727 return per_index_score;
1728}
1729
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301730static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
1731 struct wlan_mlme_power *power)
1732{
1733 power->tx_power_2g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT2G);
1734 power->tx_power_5g = cfg_get(psoc, CFG_SET_TXPOWER_LIMIT5G);
1735
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301736 power->max_tx_power_24_chan.max_len = CFG_MAX_TX_POWER_2_4_LEN;
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301737 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_2_4),
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301738 power->max_tx_power_24_chan.data,
1739 sizeof(power->max_tx_power_24_chan.data),
1740 &power->max_tx_power_24_chan.len);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301741
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301742 power->max_tx_power_5_chan.max_len = CFG_MAX_TX_POWER_5_LEN;
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301743 qdf_uint8_array_parse(cfg_default(CFG_MAX_TX_POWER_5),
Ashish Kumar Dhanotiyab0355702019-09-19 18:06:30 +05301744 power->max_tx_power_5_chan.data,
1745 sizeof(power->max_tx_power_5_chan.data),
1746 &power->max_tx_power_5_chan.len);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301747
1748 power->power_usage.max_len = CFG_POWER_USAGE_MAX_LEN;
1749 power->power_usage.len = CFG_POWER_USAGE_MAX_LEN;
1750 qdf_mem_copy(power->power_usage.data, cfg_get(psoc, CFG_POWER_USAGE),
1751 power->power_usage.len);
Wu Gao2255ea22019-01-04 15:44:35 +08001752 power->max_tx_power = cfg_get(psoc, CFG_MAX_TX_POWER);
1753 power->current_tx_power_level =
1754 (uint8_t)cfg_default(CFG_CURRENT_TX_POWER_LEVEL);
1755 power->local_power_constraint =
1756 (uint8_t)cfg_default(CFG_LOCAL_POWER_CONSTRAINT);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05301757}
Wu Gao2255ea22019-01-04 15:44:35 +08001758
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301759static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
1760 struct wlan_mlme_scoring_cfg *scoring_cfg)
1761{
1762 uint32_t total_weight;
1763
sheenam mongafd394822019-08-26 19:05:59 +05301764 scoring_cfg->vendor_roam_score_algorithm =
1765 cfg_get(psoc, CFG_VENDOR_ROAM_SCORE_ALGORITHM);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301766 scoring_cfg->enable_scoring_for_roam =
1767 cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM);
1768 scoring_cfg->weight_cfg.rssi_weightage =
1769 cfg_get(psoc, CFG_SCORING_RSSI_WEIGHTAGE);
1770 scoring_cfg->weight_cfg.ht_caps_weightage =
1771 cfg_get(psoc, CFG_SCORING_HT_CAPS_WEIGHTAGE);
1772 scoring_cfg->weight_cfg.vht_caps_weightage =
1773 cfg_get(psoc, CFG_SCORING_VHT_CAPS_WEIGHTAGE);
1774 scoring_cfg->weight_cfg.he_caps_weightage =
1775 cfg_get(psoc, CFG_SCORING_HE_CAPS_WEIGHTAGE);
1776 scoring_cfg->weight_cfg.chan_width_weightage =
1777 cfg_get(psoc, CFG_SCORING_CHAN_WIDTH_WEIGHTAGE);
1778 scoring_cfg->weight_cfg.chan_band_weightage =
1779 cfg_get(psoc, CFG_SCORING_CHAN_BAND_WEIGHTAGE);
1780 scoring_cfg->weight_cfg.nss_weightage =
1781 cfg_get(psoc, CFG_SCORING_NSS_WEIGHTAGE);
1782 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1783 cfg_get(psoc, CFG_SCORING_BEAMFORM_CAP_WEIGHTAGE);
1784 scoring_cfg->weight_cfg.pcl_weightage =
1785 cfg_get(psoc, CFG_SCORING_PCL_WEIGHTAGE);
1786 scoring_cfg->weight_cfg.channel_congestion_weightage =
1787 cfg_get(psoc, CFG_SCORING_CHAN_CONGESTION_WEIGHTAGE);
1788 scoring_cfg->weight_cfg.oce_wan_weightage =
1789 cfg_get(psoc, CFG_SCORING_OCE_WAN_WEIGHTAGE);
1790
Pragaspathi Thilagarajdd6a45d2019-09-13 17:36:10 +05301791 total_weight = scoring_cfg->weight_cfg.rssi_weightage +
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301792 scoring_cfg->weight_cfg.ht_caps_weightage +
1793 scoring_cfg->weight_cfg.vht_caps_weightage +
1794 scoring_cfg->weight_cfg.he_caps_weightage +
1795 scoring_cfg->weight_cfg.chan_width_weightage +
1796 scoring_cfg->weight_cfg.chan_band_weightage +
1797 scoring_cfg->weight_cfg.nss_weightage +
1798 scoring_cfg->weight_cfg.beamforming_cap_weightage +
1799 scoring_cfg->weight_cfg.pcl_weightage +
1800 scoring_cfg->weight_cfg.channel_congestion_weightage +
1801 scoring_cfg->weight_cfg.oce_wan_weightage;
1802
1803 /*
1804 * If configured weights are greater than max weight,
1805 * fallback to default weights
1806 */
1807 if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) {
Abhishek Ambureec000072019-05-03 12:38:42 +05301808 mlme_legacy_err("Total weight greater than %d, using default weights",
1809 BEST_CANDIDATE_MAX_WEIGHT);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301810 scoring_cfg->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE;
1811 scoring_cfg->weight_cfg.ht_caps_weightage =
1812 HT_CAPABILITY_WEIGHTAGE;
1813 scoring_cfg->weight_cfg.vht_caps_weightage =
1814 VHT_CAP_WEIGHTAGE;
1815 scoring_cfg->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE;
1816 scoring_cfg->weight_cfg.chan_width_weightage =
1817 CHAN_WIDTH_WEIGHTAGE;
1818 scoring_cfg->weight_cfg.chan_band_weightage =
1819 CHAN_BAND_WEIGHTAGE;
1820 scoring_cfg->weight_cfg.nss_weightage = NSS_WEIGHTAGE;
1821 scoring_cfg->weight_cfg.beamforming_cap_weightage =
1822 BEAMFORMING_CAP_WEIGHTAGE;
1823 scoring_cfg->weight_cfg.pcl_weightage = PCL_WEIGHT;
1824 scoring_cfg->weight_cfg.channel_congestion_weightage =
1825 CHANNEL_CONGESTION_WEIGHTAGE;
1826 scoring_cfg->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE;
1827 }
1828
1829 scoring_cfg->rssi_score.best_rssi_threshold =
1830 cfg_get(psoc, CFG_SCORING_BEST_RSSI_THRESHOLD);
1831 scoring_cfg->rssi_score.good_rssi_threshold =
1832 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_THRESHOLD);
1833 scoring_cfg->rssi_score.bad_rssi_threshold =
1834 cfg_get(psoc, CFG_SCORING_BAD_RSSI_THRESHOLD);
1835
1836 scoring_cfg->rssi_score.good_rssi_pcnt =
1837 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_PERCENT);
1838 scoring_cfg->rssi_score.bad_rssi_pcnt =
1839 cfg_get(psoc, CFG_SCORING_BAD_RSSI_PERCENT);
1840
1841 scoring_cfg->rssi_score.good_rssi_bucket_size =
1842 cfg_get(psoc, CFG_SCORING_GOOD_RSSI_BUCKET_SIZE);
1843 scoring_cfg->rssi_score.bad_rssi_bucket_size =
1844 cfg_get(psoc, CFG_SCORING_BAD_RSSI_BUCKET_SIZE);
1845
1846 scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh =
1847 cfg_get(psoc, CFG_SCORING_RSSI_PREF_5G_THRESHOLD);
1848
1849 scoring_cfg->bandwidth_weight_per_index =
1850 mlme_limit_max_per_index_score(
1851 cfg_get(psoc, CFG_SCORING_BW_WEIGHT_PER_IDX));
1852 scoring_cfg->nss_weight_per_index =
1853 mlme_limit_max_per_index_score(
1854 cfg_get(psoc, CFG_SCORING_NSS_WEIGHT_PER_IDX));
1855 scoring_cfg->band_weight_per_index =
1856 mlme_limit_max_per_index_score(
1857 cfg_get(psoc, CFG_SCORING_BAND_WEIGHT_PER_IDX));
1858
1859 scoring_cfg->esp_qbss_scoring.num_slot =
1860 cfg_get(psoc, CFG_SCORING_NUM_ESP_QBSS_SLOTS);
1861 scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0 =
1862 mlme_limit_max_per_index_score(
1863 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_3_TO_0));
1864 scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4 =
1865 mlme_limit_max_per_index_score(
1866 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_7_TO_4));
1867 scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8 =
1868 mlme_limit_max_per_index_score(
1869 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_11_TO_8));
1870 scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12 =
1871 mlme_limit_max_per_index_score(
1872 cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_15_TO_12));
1873
1874 scoring_cfg->oce_wan_scoring.num_slot =
1875 cfg_get(psoc, CFG_SCORING_NUM_OCE_WAN_SLOTS);
1876 scoring_cfg->oce_wan_scoring.score_pcnt3_to_0 =
1877 mlme_limit_max_per_index_score(
1878 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_3_TO_0));
1879 scoring_cfg->oce_wan_scoring.score_pcnt7_to_4 =
1880 mlme_limit_max_per_index_score(
1881 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4));
1882 scoring_cfg->oce_wan_scoring.score_pcnt11_to_8 =
1883 mlme_limit_max_per_index_score(
1884 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8));
1885 scoring_cfg->oce_wan_scoring.score_pcnt15_to_12 =
1886 mlme_limit_max_per_index_score(
1887 cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12));
Pragaspathi Thilagarajdf0f5442018-12-11 16:59:46 +05301888 scoring_cfg->roam_trigger_bitmap =
1889 cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP);
1890 scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA);
Wu Gao2255ea22019-01-04 15:44:35 +08001891 scoring_cfg->apsd_enabled = (bool)cfg_default(CFG_APSD_ENABLED);
Abhishek Ambure62b8cc42020-02-01 12:54:11 +05301892 scoring_cfg->min_roam_score_delta =
1893 cfg_get(psoc, CFG_CAND_MIN_ROAM_SCORE_DELTA);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05301894}
1895
Karthik Kantamneni2231a232018-09-11 15:45:55 +05301896static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc,
1897 struct wlan_mlme_oce *oce)
1898{
1899 uint8_t val;
1900 bool rssi_assoc_reject_enabled;
1901 bool probe_req_rate_enabled;
1902 bool probe_resp_rate_enabled;
1903 bool beacon_rate_enabled;
1904 bool probe_req_deferral_enabled;
1905 bool fils_discovery_sap_enabled;
1906 bool esp_for_roam_enabled;
1907
1908 oce->enable_bcast_probe_rsp =
1909 cfg_get(psoc, CFG_ENABLE_BCAST_PROBE_RESP);
1910 oce->oce_sta_enabled = cfg_get(psoc, CFG_OCE_ENABLE_STA);
1911 oce->oce_sap_enabled = cfg_get(psoc, CFG_OCE_ENABLE_SAP);
1912 oce->fils_enabled = cfg_get(psoc, CFG_IS_FILS_ENABLED);
1913
1914 rssi_assoc_reject_enabled =
1915 cfg_get(psoc, CFG_OCE_ENABLE_RSSI_BASED_ASSOC_REJECT);
1916 probe_req_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_REQ_RATE);
1917 probe_resp_rate_enabled = cfg_get(psoc, CFG_OCE_PROBE_RSP_RATE);
1918 beacon_rate_enabled = cfg_get(psoc, CFG_OCE_BEACON_RATE);
1919 probe_req_deferral_enabled =
1920 cfg_get(psoc, CFG_ENABLE_PROBE_REQ_DEFERRAL);
1921 fils_discovery_sap_enabled =
1922 cfg_get(psoc, CFG_ENABLE_FILS_DISCOVERY_SAP);
1923 esp_for_roam_enabled = cfg_get(psoc, CFG_ENABLE_ESP_FEATURE);
1924
1925 if (!rssi_assoc_reject_enabled ||
1926 !oce->enable_bcast_probe_rsp) {
1927 oce->oce_sta_enabled = 0;
1928 }
1929
1930 val = (probe_req_rate_enabled *
1931 WMI_VDEV_OCE_PROBE_REQUEST_RATE_FEATURE_BITMAP) +
1932 (probe_resp_rate_enabled *
1933 WMI_VDEV_OCE_PROBE_RESPONSE_RATE_FEATURE_BITMAP) +
1934 (beacon_rate_enabled *
1935 WMI_VDEV_OCE_BEACON_RATE_FEATURE_BITMAP) +
1936 (probe_req_deferral_enabled *
1937 WMI_VDEV_OCE_PROBE_REQUEST_DEFERRAL_FEATURE_BITMAP) +
1938 (fils_discovery_sap_enabled *
1939 WMI_VDEV_OCE_FILS_DISCOVERY_FRAME_FEATURE_BITMAP) +
1940 (esp_for_roam_enabled *
1941 WMI_VDEV_OCE_ESP_FEATURE_BITMAP) +
1942 (rssi_assoc_reject_enabled *
1943 WMI_VDEV_OCE_REASSOC_REJECT_FEATURE_BITMAP);
1944 oce->feature_bitmap = val;
1945}
1946
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301947static void mlme_init_nss_chains(struct wlan_objmgr_psoc *psoc,
1948 struct wlan_mlme_nss_chains *nss_chains)
1949{
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301950 nss_chains->num_rx_chains[NSS_CHAINS_BAND_2GHZ] =
1951 cfg_get(psoc, CFG_NUM_RX_CHAINS_2G);
1952 nss_chains->num_rx_chains[NSS_CHAINS_BAND_5GHZ] =
1953 cfg_get(psoc, CFG_NUM_RX_CHAINS_5G);
1954 nss_chains->num_tx_chains[NSS_CHAINS_BAND_2GHZ] =
1955 cfg_get(psoc, CFG_NUM_TX_CHAINS_2G);
1956 nss_chains->num_tx_chains[NSS_CHAINS_BAND_5GHZ] =
1957 cfg_get(psoc, CFG_NUM_TX_CHAINS_5G);
1958
1959 nss_chains->tx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_TX_NSS_2G);
1960 nss_chains->tx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_TX_NSS_5G);
1961 nss_chains->rx_nss[NSS_CHAINS_BAND_2GHZ] = cfg_get(psoc, CFG_RX_NSS_2G);
1962 nss_chains->rx_nss[NSS_CHAINS_BAND_5GHZ] = cfg_get(psoc, CFG_RX_NSS_5G);
1963
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301964 nss_chains->num_tx_chains_11b = cfg_get(psoc, CFG_NUM_TX_CHAINS_11b);
1965 nss_chains->num_tx_chains_11g = cfg_get(psoc, CFG_NUM_TX_CHAINS_11g);
1966 nss_chains->num_tx_chains_11a = cfg_get(psoc, CFG_NUM_TX_CHAINS_11a);
gaurank kathpaliab414bce2018-11-09 18:44:46 +05301967
1968 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_2GHZ] =
1969 cfg_get(psoc, CFG_DISABLE_RX_MRC_2G);
1970 nss_chains->disable_rx_mrc[NSS_CHAINS_BAND_5GHZ] =
1971 cfg_get(psoc, CFG_DISABLE_RX_MRC_5G);
1972 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_2GHZ] =
1973 cfg_get(psoc, CFG_DISABLE_TX_MRC_2G);
1974 nss_chains->disable_tx_mrc[NSS_CHAINS_BAND_5GHZ] =
1975 cfg_get(psoc, CFG_DISABLE_TX_MRC_5G);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05301976}
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301977static void mlme_init_wep_keys(struct wlan_mlme_wep_cfg *wep_params)
1978{
1979 /* initialize the default key values to zero */
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001980 wep_params->wep_default_key_1.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1981 wep_params->wep_default_key_1.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1982 qdf_mem_zero(wep_params->wep_default_key_1.data,
1983 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301984
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001985 wep_params->wep_default_key_2.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1986 wep_params->wep_default_key_2.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1987 qdf_mem_zero(wep_params->wep_default_key_2.data,
1988 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301989
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001990 wep_params->wep_default_key_3.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1991 wep_params->wep_default_key_3.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1992 qdf_mem_zero(wep_params->wep_default_key_3.data,
1993 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301994
Srinivas Girigowdacf161402019-03-14 11:37:33 -07001995 wep_params->wep_default_key_4.len = WLAN_CRYPTO_KEY_WEP104_LEN;
1996 wep_params->wep_default_key_4.max_len = WLAN_CRYPTO_KEY_WEP104_LEN;
1997 qdf_mem_zero(wep_params->wep_default_key_4.data,
1998 WLAN_CRYPTO_KEY_WEP104_LEN);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05301999}
2000
2001static void mlme_init_wep_cfg(struct wlan_mlme_wep_cfg *wep_params)
2002{
2003 wep_params->is_privacy_enabled = cfg_default(CFG_PRIVACY_ENABLED);
2004 wep_params->auth_type = cfg_default(CFG_AUTHENTICATION_TYPE);
2005 wep_params->is_shared_key_auth =
2006 cfg_default(CFG_SHARED_KEY_AUTH_ENABLE);
2007 wep_params->is_auth_open_system =
2008 cfg_default(CFG_OPEN_SYSTEM_AUTH_ENABLE);
2009
2010 wep_params->wep_default_key_id = cfg_default(CFG_WEP_DEFAULT_KEYID);
2011 mlme_init_wep_keys(wep_params);
2012}
2013
Arif Hussainbd5194c2018-11-27 19:01:15 -08002014static void mlme_init_wifi_pos_cfg(struct wlan_objmgr_psoc *psoc,
2015 struct wlan_mlme_wifi_pos_cfg *wifi_pos_cfg)
2016{
2017 wifi_pos_cfg->fine_time_meas_cap =
2018 cfg_get(psoc, CFG_FINE_TIME_MEAS_CAPABILITY);
Abhishek Ambure4706d0f2020-01-03 19:52:05 +05302019 wifi_pos_cfg->oem_6g_support_disable =
2020 cfg_get(psoc, CFG_OEM_SIXG_SUPPORT_DISABLE);
Arif Hussainbd5194c2018-11-27 19:01:15 -08002021}
2022
Abhinav Kumarab576712018-11-05 14:32:49 +05302023#ifdef FEATURE_WLAN_ESE
2024static void mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2025 struct wlan_mlme_wmm_params *wmm_params)
2026{
2027 wmm_params->wmm_tspec_element.inactivity_intv =
2028 cfg_get(psoc, CFG_QOS_WMM_INACTIVITY_INTERVAL);
2029}
2030#else
2031static inline void
2032mlme_init_inactivity_intv(struct wlan_objmgr_psoc *psoc,
2033 struct wlan_mlme_wmm_params *wmm_params)
2034{
2035}
2036#endif /* FEATURE_WLAN_ESE */
2037
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302038static void mlme_init_wmm_in_cfg(struct wlan_objmgr_psoc *psoc,
2039 struct wlan_mlme_wmm_params *wmm_params)
2040{
2041 wmm_params->qos_enabled = cfg_default(CFG_QOS_ENABLED);
2042 wmm_params->wme_enabled = cfg_default(CFG_WME_ENABLED);
2043 wmm_params->max_sp_length = cfg_default(CFG_MAX_SP_LENGTH);
2044 wmm_params->wsm_enabled = cfg_default(CFG_WSM_ENABLED);
2045 wmm_params->edca_profile = cfg_default(CFG_EDCA_PROFILE);
Abhinav Kumar18b45cd2018-09-21 12:35:22 +05302046
2047 wmm_params->ac_vo.dir_ac_vo = cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VO);
2048 wmm_params->ac_vo.nom_msdu_size_ac_vo =
2049 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VO);
2050 wmm_params->ac_vo.mean_data_rate_ac_vo =
2051 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VO);
2052 wmm_params->ac_vo.min_phy_rate_ac_vo =
2053 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VO);
2054 wmm_params->ac_vo.sba_ac_vo = cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VO);
2055 wmm_params->ac_vo.uapsd_vo_srv_intv =
2056 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SRV_INTV);
2057 wmm_params->ac_vo.uapsd_vo_sus_intv =
2058 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VO_SUS_INTV);
Abhinav Kumar4c8e0262018-10-06 16:50:27 +05302059
2060 wmm_params->ac_vi.dir_ac_vi =
2061 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_VI);
2062 wmm_params->ac_vi.nom_msdu_size_ac_vi =
2063 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_VI);
2064 wmm_params->ac_vi.mean_data_rate_ac_vi =
2065 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_VI);
2066 wmm_params->ac_vi.min_phy_rate_ac_vi =
2067 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_VI);
2068 wmm_params->ac_vi.sba_ac_vi =
2069 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_VI);
2070 wmm_params->ac_vi.uapsd_vi_srv_intv =
2071 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SRV_INTV);
2072 wmm_params->ac_vi.uapsd_vi_sus_intv =
2073 cfg_get(psoc, CFG_QOS_WMM_UAPSD_VI_SUS_INTV);
2074
Abhinav Kumare94f2482018-08-19 12:37:36 +05302075 wmm_params->ac_be.dir_ac_be =
2076 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BE);
2077 wmm_params->ac_be.nom_msdu_size_ac_be =
2078 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BE);
2079 wmm_params->ac_be.mean_data_rate_ac_be =
2080 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BE);
2081 wmm_params->ac_be.min_phy_rate_ac_be =
2082 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BE);
2083 wmm_params->ac_be.sba_ac_be =
2084 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BE);
2085 wmm_params->ac_be.uapsd_be_srv_intv =
2086 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SRV_INTV);
2087 wmm_params->ac_be.uapsd_be_sus_intv =
2088 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BE_SUS_INTV);
Abhinav Kumar2af8c122018-08-19 13:49:52 +05302089
2090 wmm_params->ac_bk.dir_ac_bk =
2091 cfg_get(psoc, CFG_QOS_WMM_DIR_AC_BK);
2092 wmm_params->ac_bk.nom_msdu_size_ac_bk =
2093 cfg_get(psoc, CFG_QOS_WMM_NOM_MSDU_SIZE_AC_BK);
2094 wmm_params->ac_bk.mean_data_rate_ac_bk =
2095 cfg_get(psoc, CFG_QOS_WMM_MEAN_DATA_RATE_AC_BK);
2096 wmm_params->ac_bk.min_phy_rate_ac_bk =
2097 cfg_get(psoc, CFG_QOS_WMM_MIN_PHY_RATE_AC_BK);
2098 wmm_params->ac_bk.sba_ac_bk =
2099 cfg_get(psoc, CFG_QOS_WMM_SBA_AC_BK);
2100 wmm_params->ac_bk.uapsd_bk_srv_intv =
2101 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SRV_INTV);
2102 wmm_params->ac_bk.uapsd_bk_sus_intv =
2103 cfg_get(psoc, CFG_QOS_WMM_UAPSD_BK_SUS_INTV);
Abhinav Kumar7d6f1ac2018-09-01 18:33:56 +05302104
2105 wmm_params->wmm_config.wmm_mode =
2106 cfg_get(psoc, CFG_QOS_WMM_MODE);
2107 wmm_params->wmm_config.b80211e_is_enabled =
2108 cfg_get(psoc, CFG_QOS_WMM_80211E_ENABLED);
2109 wmm_params->wmm_config.uapsd_mask =
2110 cfg_get(psoc, CFG_QOS_WMM_UAPSD_MASK);
2111 wmm_params->wmm_config.bimplicit_qos_enabled =
2112 cfg_get(psoc, CFG_QOS_WMM_IMPLICIT_SETUP_ENABLED);
Abhinav Kumarab576712018-11-05 14:32:49 +05302113
2114 mlme_init_inactivity_intv(psoc, wmm_params);
2115 wmm_params->wmm_tspec_element.burst_size_def =
2116 cfg_get(psoc, CFG_QOS_WMM_BURST_SIZE_DEFN);
2117 wmm_params->wmm_tspec_element.ts_ack_policy =
2118 cfg_get(psoc, CFG_QOS_WMM_TS_INFO_ACK_POLICY);
2119 wmm_params->wmm_tspec_element.ts_acm_is_off =
2120 cfg_get(psoc, CFG_QOS_ADDTS_WHEN_ACM_IS_OFF);
Abhinav Kumarc8c21502018-12-05 15:17:39 +05302121 wmm_params->delayed_trigger_frm_int =
2122 cfg_get(psoc, CFG_TL_DELAYED_TRGR_FRM_INTERVAL);
2123
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302124}
2125
gaurank kathpalia837f6202018-09-14 21:55:32 +05302126static void mlme_init_wps_params_cfg(struct wlan_objmgr_psoc *psoc,
2127 struct wlan_mlme_wps_params *wps_params)
2128{
2129 wps_params->enable_wps = cfg_default(CFG_WPS_ENABLE);
2130 wps_params->wps_cfg_method = cfg_default(CFG_WPS_CFG_METHOD);
2131 wps_params->wps_device_password_id =
2132 cfg_default(CFG_WPS_DEVICE_PASSWORD_ID);
2133 wps_params->wps_device_sub_category =
2134 cfg_default(CFG_WPS_DEVICE_SUB_CATEGORY);
2135 wps_params->wps_primary_device_category =
2136 cfg_default(CFG_WPS_PRIMARY_DEVICE_CATEGORY);
2137 wps_params->wps_primary_device_oui =
2138 cfg_default(CFG_WPS_PIMARY_DEVICE_OUI);
2139 wps_params->wps_state = cfg_default(CFG_WPS_STATE);
2140 wps_params->wps_version = cfg_default(CFG_WPS_VERSION);
Pragaspathi Thilagaraj2b9259f2018-12-05 22:29:03 +05302141 wps_params->wps_uuid.max_len = MLME_CFG_WPS_UUID_MAX_LEN;
2142 qdf_uint8_array_parse(cfg_default(CFG_WPS_UUID),
2143 wps_params->wps_uuid.data,
2144 MLME_CFG_WPS_UUID_MAX_LEN,
2145 &wps_params->wps_uuid.len);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302146}
2147
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302148static void mlme_init_btm_cfg(struct wlan_objmgr_psoc *psoc,
2149 struct wlan_mlme_btm *btm)
lifeng6d19c252018-11-23 18:04:23 +08002150{
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302151 btm->btm_offload_config = cfg_get(psoc, CFG_BTM_ENABLE);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302152 btm->prefer_btm_query = cfg_get(psoc, CFG_PREFER_BTM_QUERY);
2153 if (btm->prefer_btm_query)
2154 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_8);
2155
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302156 btm->abridge_flag = cfg_get(psoc, CFG_ENABLE_BTM_ABRIDGE);
2157 if (btm->abridge_flag)
2158 MLME_SET_BIT(btm->btm_offload_config, BTM_OFFLOAD_CONFIG_BIT_7);
2159
Pragaspathi Thilagarajed781902019-05-30 12:17:49 +05302160 btm->btm_solicited_timeout = cfg_get(psoc, CFG_BTM_SOLICITED_TIMEOUT);
2161 btm->btm_max_attempt_cnt = cfg_get(psoc, CFG_BTM_MAX_ATTEMPT_CNT);
2162 btm->btm_sticky_time = cfg_get(psoc, CFG_BTM_STICKY_TIME);
Pragaspathi Thilagarajae7dc762018-12-12 18:10:50 +05302163 btm->rct_validity_timer = cfg_get(psoc, CFG_BTM_VALIDITY_TIMER);
2164 btm->disassoc_timer_threshold =
2165 cfg_get(psoc, CFG_BTM_DISASSOC_TIMER_THRESHOLD);
Abhinav Kumar43565942019-03-02 01:34:12 +05302166 btm->btm_query_bitmask = cfg_get(psoc, CFG_BTM_QUERY_BITMASK);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302167 btm->btm_trig_min_candidate_score =
2168 cfg_get(psoc, CFG_MIN_BTM_CANDIDATE_SCORE);
2169}
Abhinav Kumar43565942019-03-02 01:34:12 +05302170
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302171static void
2172mlme_init_roam_score_config(struct wlan_objmgr_psoc *psoc,
2173 struct wlan_mlme_cfg *mlme_cfg)
2174{
2175 struct roam_trigger_score_delta *score_delta_param;
2176 struct roam_trigger_min_rssi *min_rssi_param;
2177
2178 score_delta_param = &mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
2179 score_delta_param->roam_score_delta =
2180 cfg_get(psoc, CFG_IDLE_ROAM_SCORE_DELTA);
2181 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_IDLE;
2182
2183 score_delta_param = &mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
2184 score_delta_param->roam_score_delta =
2185 cfg_get(psoc, CFG_BTM_ROAM_SCORE_DELTA);
2186 score_delta_param->trigger_reason = ROAM_TRIGGER_REASON_BTM;
2187
2188 min_rssi_param = &mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
2189 min_rssi_param->min_rssi =
2190 cfg_get(psoc, CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI);
2191 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_DEAUTH;
2192
2193 min_rssi_param = &mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
2194 min_rssi_param->min_rssi =
2195 cfg_get(psoc, CFG_BMISS_ROAM_MIN_RSSI);
2196 min_rssi_param->trigger_reason = ROAM_TRIGGER_REASON_BMISS;
lifeng6d19c252018-11-23 18:04:23 +08002197}
2198
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302199/**
2200 * mlme_init_fe_wlm_in_cfg() - Populate WLM INI in MLME cfg
2201 * @psoc: pointer to the psoc object
2202 * @wlm_config: pointer to the MLME WLM cfg
2203 *
2204 * Return: None
2205 */
2206static void mlme_init_fe_wlm_in_cfg(struct wlan_objmgr_psoc *psoc,
2207 struct wlan_mlme_fe_wlm *wlm_config)
2208{
2209 wlm_config->latency_enable = cfg_get(psoc, CFG_LATENCY_ENABLE);
2210 wlm_config->latency_level = cfg_get(psoc, CFG_LATENCY_LEVEL);
2211 wlm_config->latency_flags[0] = cfg_get(psoc, CFG_LATENCY_FLAGS_NORMAL);
2212 wlm_config->latency_flags[1] = cfg_get(psoc, CFG_LATENCY_FLAGS_MOD);
2213 wlm_config->latency_flags[2] = cfg_get(psoc, CFG_LATENCY_FLAGS_LOW);
2214 wlm_config->latency_flags[3] = cfg_get(psoc, CFG_LATENCY_FLAGS_ULTLOW);
2215}
2216
2217/**
2218 * mlme_init_fe_rrm_in_cfg() - Populate RRM INI in MLME cfg
2219 * @psoc: pointer to the psoc object
2220 * @rrm_config: pointer to the MLME RRM cfg
2221 *
2222 * Return: None
2223 */
2224static void mlme_init_fe_rrm_in_cfg(struct wlan_objmgr_psoc *psoc,
2225 struct wlan_mlme_fe_rrm *rrm_config)
2226{
2227 qdf_size_t len;
2228
2229 rrm_config->rrm_enabled = cfg_get(psoc, CFG_RRM_ENABLE);
2230 rrm_config->rrm_rand_interval = cfg_get(psoc, CFG_RRM_MEAS_RAND_INTVL);
2231
2232 qdf_uint8_array_parse(cfg_get(psoc, CFG_RM_CAPABILITY),
2233 rrm_config->rm_capability,
2234 sizeof(rrm_config->rm_capability), &len);
2235
2236 if (len < MLME_RMENABLEDCAP_MAX_LEN) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302237 mlme_legacy_debug("Incorrect RM capability, using default");
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302238 qdf_uint8_array_parse(cfg_default(CFG_RM_CAPABILITY),
2239 rrm_config->rm_capability,
2240 sizeof(rrm_config->rm_capability), &len);
2241 }
2242}
2243
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302244static void mlme_init_powersave_params(struct wlan_objmgr_psoc *psoc,
2245 struct wlan_mlme_powersave *ps_cfg)
2246{
2247 ps_cfg->is_imps_enabled = cfg_get(psoc, CFG_ENABLE_IMPS);
2248 ps_cfg->is_bmps_enabled = cfg_get(psoc, CFG_ENABLE_PS);
2249 ps_cfg->auto_bmps_timer_val = cfg_get(psoc, CFG_AUTO_BMPS_ENABLE_TIMER);
2250 ps_cfg->bmps_min_listen_interval = cfg_get(psoc, CFG_BMPS_MINIMUM_LI);
2251 ps_cfg->bmps_max_listen_interval = cfg_get(psoc, CFG_BMPS_MAXIMUM_LI);
2252 ps_cfg->dtim_selection_diversity =
2253 cfg_get(psoc, CFG_DTIM_SELECTION_DIVERSITY);
2254}
2255
lifengdb340e72018-11-20 00:50:20 +08002256#ifdef MWS_COEX
2257static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2258 struct wlan_mlme_mwc *mwc)
2259{
2260 mwc->mws_coex_4g_quick_tdm =
2261 cfg_get(psoc, CFG_MWS_COEX_4G_QUICK_FTDM);
2262 mwc->mws_coex_5g_nr_pwr_limit =
2263 cfg_get(psoc, CFG_MWS_COEX_5G_NR_PWR_LIMIT);
2264}
2265#else
2266static void mlme_init_mwc_cfg(struct wlan_objmgr_psoc *psoc,
2267 struct wlan_mlme_mwc *mwc)
2268{
2269}
2270#endif
2271
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302272#ifdef SAP_AVOID_ACS_FREQ_LIST
2273static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2274 struct wlan_mlme_reg *reg)
2275{
2276 qdf_size_t avoid_acs_freq_list_num = 0;
2277 uint8_t i;
2278
2279 qdf_uint16_array_parse(cfg_get(psoc, CFG_SAP_AVOID_ACS_FREQ_LIST),
2280 reg->avoid_acs_freq_list,
2281 CFG_VALID_CHANNEL_LIST_LEN,
2282 &avoid_acs_freq_list_num);
2283 reg->avoid_acs_freq_list_num = avoid_acs_freq_list_num;
2284
2285 for (i = 0; i < avoid_acs_freq_list_num; i++)
2286 mlme_legacy_debug("avoid_acs_freq %d",
2287 reg->avoid_acs_freq_list[i]);
2288}
2289#else
2290static void mlme_init_acs_avoid_freq_list(struct wlan_objmgr_psoc *psoc,
2291 struct wlan_mlme_reg *reg)
2292{
2293}
2294#endif
2295
lifeng0b46ae52018-12-13 09:42:27 +08002296static void mlme_init_reg_cfg(struct wlan_objmgr_psoc *psoc,
2297 struct wlan_mlme_reg *reg)
2298{
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002299 qdf_size_t valid_channel_list_num = 0;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002300 uint8_t channel_list[CFG_VALID_CHANNEL_LIST_LEN];
2301 uint8_t i;
2302 struct wlan_objmgr_pdev *pdev = NULL;
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002303
lifeng0b46ae52018-12-13 09:42:27 +08002304 reg->self_gen_frm_pwr = cfg_get(psoc, CFG_SELF_GEN_FRM_PWR);
2305 reg->etsi13_srd_chan_in_master_mode =
2306 cfg_get(psoc, CFG_ETSI13_SRD_CHAN_IN_MASTER_MODE);
2307 reg->restart_beaconing_on_ch_avoid =
2308 cfg_get(psoc, CFG_RESTART_BEACONING_ON_CH_AVOID);
2309 reg->indoor_channel_support = cfg_get(psoc, CFG_INDOOR_CHANNEL_SUPPORT);
gaurank kathpaliaba22ef22019-02-05 17:04:08 +05302310 reg->enable_11d_in_world_mode = cfg_get(psoc,
2311 CFG_ENABLE_11D_IN_WORLD_MODE);
lifeng0b46ae52018-12-13 09:42:27 +08002312 reg->scan_11d_interval = cfg_get(psoc, CFG_SCAN_11D_INTERVAL);
Pankaj Singhf84a5dd2019-12-13 13:29:11 +05302313 reg->enable_pending_chan_list_req = cfg_get(psoc,
2314 CFG_ENABLE_PENDING_CHAN_LIST_REQ);
Rajeev Kumar Sirasanagandla1b3a5352019-08-05 21:33:03 +05302315 reg->ignore_fw_reg_offload_ind = cfg_get(
2316 psoc,
2317 CFG_IGNORE_FW_REG_OFFLOAD_IND);
2318
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002319 qdf_uint8_array_parse(cfg_default(CFG_VALID_CHANNEL_LIST),
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002320 channel_list,
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002321 CFG_VALID_CHANNEL_LIST_LEN,
2322 &valid_channel_list_num);
2323 reg->valid_channel_list_num = (uint8_t)valid_channel_list_num;
Tushnim Bhattacharyyad1d0db92019-08-30 13:50:15 -07002324
2325 pdev = wlan_objmgr_get_pdev_by_id(psoc, 0, WLAN_MLME_NB_ID);
2326 if (!pdev) {
2327 mlme_legacy_err("null pdev");
2328 return;
2329 }
2330
2331 for (i = 0; i < valid_channel_list_num; i++)
2332 reg->valid_channel_freq_list[i] =
2333 wlan_reg_chan_to_freq(pdev, channel_list[i]);
2334
2335 wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_NB_ID);
2336
Wu Gaof3cbeaf2019-01-15 18:26:25 +08002337 qdf_str_lcopy(reg->country_code, cfg_default(CFG_COUNTRY_CODE),
2338 sizeof(reg->country_code));
2339 reg->country_code_len = (uint8_t)sizeof(reg->country_code);
Ashish Kumar Dhanotiya2168aad2019-06-12 20:51:36 +05302340 mlme_init_acs_avoid_freq_list(psoc, reg);
lifeng0b46ae52018-12-13 09:42:27 +08002341}
2342
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302343static void
2344mlme_init_dot11_mode_cfg(struct wlan_mlme_dot11_mode *dot11_mode)
2345{
2346 dot11_mode->dot11_mode = cfg_default(CFG_DOT11_MODE);
2347}
2348
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302349QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
2350{
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05302351 struct wlan_mlme_psoc_ext_obj *mlme_obj;
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302352 struct wlan_mlme_cfg *mlme_cfg;
2353 QDF_STATUS status = QDF_STATUS_SUCCESS;
2354
Arun Kumar Khandavallia43590e2019-08-26 17:13:25 +05302355 mlme_obj = mlme_get_psoc_ext_obj(psoc);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302356 if (!mlme_obj) {
Abhishek Ambureec000072019-05-03 12:38:42 +05302357 mlme_legacy_err("Failed to get MLME Obj");
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302358 return QDF_STATUS_E_FAILURE;
2359 }
2360
2361 mlme_cfg = &mlme_obj->cfg;
Karthik Kantamneni24f71bc2018-09-11 19:08:38 +05302362 mlme_init_generic_cfg(psoc, &mlme_cfg->gen);
Arif Hussain9f93a642018-09-10 18:32:25 -07002363 mlme_init_timeout_cfg(psoc, &mlme_cfg->timeouts);
Abhinav Kumar06b9a122018-10-10 15:01:11 +05302364 mlme_init_edca_params(psoc, &mlme_cfg->edca_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302365 mlme_init_ht_cap_in_cfg(psoc, &mlme_cfg->ht_caps);
Pragaspathi Thilagarajec7dc252018-09-06 15:38:49 +05302366 mlme_init_wmm_in_cfg(psoc, &mlme_cfg->wmm_params);
Pragaspathi Thilagarajcd6aef02018-09-11 20:30:23 +05302367 mlme_init_mbo_cfg(psoc, &mlme_cfg->mbo_cfg);
Pragaspathi Thilagaraj17afb842018-08-30 17:55:13 +05302368 mlme_init_qos_cfg(psoc, &mlme_cfg->qos_mlme_params);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302369 mlme_init_rates_in_cfg(psoc, &mlme_cfg->rates);
Arif Hussain88d1fdd2018-09-26 16:12:24 -07002370 mlme_init_dfs_cfg(psoc, &mlme_cfg->dfs_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302371 mlme_init_sap_protection_cfg(psoc, &mlme_cfg->sap_protection_cfg);
Abhinav Kumarc1c266b2018-09-08 18:43:47 +05302372 mlme_init_vht_cap_cfg(psoc, &mlme_cfg->vht_caps.vht_cap_info);
Pragaspathi Thilagarajce0a9d02018-08-18 01:17:23 +05302373 mlme_init_chainmask_cfg(psoc, &mlme_cfg->chainmask_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302374 mlme_init_sap_cfg(psoc, &mlme_cfg->sap_cfg);
gaurank kathpalia6c9d1c32018-10-08 15:11:59 +05302375 mlme_init_nss_chains(psoc, &mlme_cfg->nss_chains_ini_cfg);
Bala Venkatesh6d537092018-09-25 10:38:36 +05302376 mlme_init_he_cap_in_cfg(psoc, mlme_cfg);
Wu Gaod8f3db02018-07-24 19:18:45 +08002377 mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40);
Jiachao Wu3304d6b2018-08-24 18:24:34 +08002378 mlme_init_product_details_cfg(&mlme_cfg->product_details);
Pragaspathi Thilagaraj43455532018-11-20 00:05:44 +05302379 mlme_init_powersave_params(psoc, &mlme_cfg->ps_params);
Wu Gao406c53c2018-09-10 13:51:37 +08002380 mlme_init_sta_cfg(psoc, &mlme_cfg->sta);
Arif Hussaincca60432018-12-03 19:45:12 -08002381 mlme_init_stats_cfg(psoc, &mlme_cfg->stats);
Arif Hussain178f35f2018-11-13 18:26:18 -08002382 mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg);
Vignesh Viswanathanfb62afc2018-09-19 16:21:31 +05302383 mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr);
Manikandan Mohan2bd09772018-11-28 18:27:32 -08002384 mlme_init_ibss_cfg(psoc, &mlme_cfg->ibss);
gaurank kathpaliae5a17e42018-09-10 10:05:25 +05302385 mlme_init_feature_flag_in_cfg(psoc, &mlme_cfg->feature_flags);
Vignesh Viswanathan987f0bb2018-09-17 17:00:29 +05302386 mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring);
gaurank kathpalia1be77fa2019-01-04 13:32:09 +05302387 mlme_init_dot11_mode_cfg(&mlme_cfg->dot11_mode);
Harprit Chhabadabec6de42018-09-10 10:21:15 -07002388 mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
Harprit Chhabadabd027a02018-10-30 13:02:22 -07002389 mlme_init_acs_cfg(psoc, &mlme_cfg->acs);
gaurank kathpalia3d2e3852018-10-03 22:03:23 +05302390 mlme_init_power_cfg(psoc, &mlme_cfg->power);
Karthik Kantamneni2231a232018-09-11 15:45:55 +05302391 mlme_init_oce_cfg(psoc, &mlme_cfg->oce);
Pragaspathi Thilagaraj51d0a182018-09-21 01:25:46 +05302392 mlme_init_wep_cfg(&mlme_cfg->wep_params);
Arif Hussainbd5194c2018-11-27 19:01:15 -08002393 mlme_init_wifi_pos_cfg(psoc, &mlme_cfg->wifi_pos_cfg);
gaurank kathpalia837f6202018-09-14 21:55:32 +05302394 mlme_init_wps_params_cfg(psoc, &mlme_cfg->wps_params);
Yeshwanth Sriram Guntuka334aa8d2018-08-20 16:49:15 +05302395 mlme_init_fe_wlm_in_cfg(psoc, &mlme_cfg->wlm_config);
2396 mlme_init_fe_rrm_in_cfg(psoc, &mlme_cfg->rrm_config);
lifengdb340e72018-11-20 00:50:20 +08002397 mlme_init_mwc_cfg(psoc, &mlme_cfg->mwc);
lifeng0b46ae52018-12-13 09:42:27 +08002398 mlme_init_reg_cfg(psoc, &mlme_cfg->reg);
Pragaspathi Thilagaraj7d0a3cf2018-12-12 15:53:57 +05302399 mlme_init_btm_cfg(psoc, &mlme_cfg->btm);
Pragaspathi Thilagaraj2b8ea352019-04-12 02:23:50 +05302400 mlme_init_roam_score_config(psoc, mlme_cfg);
Vignesh Viswanathan21c58cb2018-05-24 15:53:58 +05302401
2402 return status;
2403}
Srinivas Dasari37e37312019-06-30 23:50:24 +05302404
2405void mlme_set_self_disconnect_ies(struct wlan_objmgr_vdev *vdev,
2406 struct wlan_ies *ie)
2407{
Srinivas Dasari37e37312019-06-30 23:50:24 +05302408 struct mlme_legacy_priv *mlme_priv;
2409
2410 if (!ie || !ie->len || !ie->data) {
2411 mlme_legacy_debug("disocnnect IEs are NULL");
2412 return;
2413 }
2414
hqu7f10f552019-07-09 22:12:44 +08002415 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2416 if (!mlme_priv) {
2417 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasari37e37312019-06-30 23:50:24 +05302418 return;
2419 }
2420
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302421 if (mlme_priv->disconnect_info.self_discon_ies.data) {
2422 qdf_mem_free(mlme_priv->disconnect_info.self_discon_ies.data);
2423 mlme_priv->disconnect_info.self_discon_ies.len = 0;
Srinivas Dasari37e37312019-06-30 23:50:24 +05302424 }
2425
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302426 mlme_priv->disconnect_info.self_discon_ies.data =
2427 qdf_mem_malloc(ie->len);
2428 if (!mlme_priv->disconnect_info.self_discon_ies.data)
Srinivas Dasari37e37312019-06-30 23:50:24 +05302429 return;
2430
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302431 qdf_mem_copy(mlme_priv->disconnect_info.self_discon_ies.data,
2432 ie->data, ie->len);
2433 mlme_priv->disconnect_info.self_discon_ies.len = ie->len;
Srinivas Dasari37e37312019-06-30 23:50:24 +05302434
2435 mlme_legacy_debug("Self disconnect IEs");
2436 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_DEBUG,
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302437 mlme_priv->disconnect_info.self_discon_ies.data,
2438 mlme_priv->disconnect_info.self_discon_ies.len);
Srinivas Dasari37e37312019-06-30 23:50:24 +05302439}
2440
2441void mlme_free_self_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2442{
Srinivas Dasari37e37312019-06-30 23:50:24 +05302443 struct mlme_legacy_priv *mlme_priv;
2444
hqu7f10f552019-07-09 22:12:44 +08002445 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2446 if (!mlme_priv) {
2447 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasari37e37312019-06-30 23:50:24 +05302448 return;
2449 }
2450
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302451 if (mlme_priv->disconnect_info.self_discon_ies.data) {
2452 qdf_mem_free(mlme_priv->disconnect_info.self_discon_ies.data);
2453 mlme_priv->disconnect_info.self_discon_ies.data = NULL;
2454 mlme_priv->disconnect_info.self_discon_ies.len = 0;
Srinivas Dasari37e37312019-06-30 23:50:24 +05302455 }
2456}
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302457
2458struct wlan_ies *mlme_get_self_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2459{
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302460 struct mlme_legacy_priv *mlme_priv;
2461
hqu7f10f552019-07-09 22:12:44 +08002462 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2463 if (!mlme_priv) {
2464 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302465 return NULL;
2466 }
2467
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302468 return &mlme_priv->disconnect_info.self_discon_ies;
Srinivas Dasarie2ee0942019-06-29 14:34:50 +05302469}
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302470
2471void mlme_set_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev,
2472 struct wlan_ies *ie)
2473{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302474 struct mlme_legacy_priv *mlme_priv;
2475
2476 if (!ie || !ie->len || !ie->data) {
2477 mlme_legacy_debug("disocnnect IEs are NULL");
2478 return;
2479 }
2480
hqu7f10f552019-07-09 22:12:44 +08002481 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2482 if (!mlme_priv) {
2483 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302484 return;
2485 }
2486
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302487 if (mlme_priv->disconnect_info.peer_discon_ies.data) {
2488 qdf_mem_free(mlme_priv->disconnect_info.peer_discon_ies.data);
2489 mlme_priv->disconnect_info.peer_discon_ies.len = 0;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302490 }
2491
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302492 mlme_priv->disconnect_info.peer_discon_ies.data =
2493 qdf_mem_malloc(ie->len);
2494 if (!mlme_priv->disconnect_info.peer_discon_ies.data)
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302495 return;
2496
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302497 qdf_mem_copy(mlme_priv->disconnect_info.peer_discon_ies.data,
2498 ie->data, ie->len);
2499 mlme_priv->disconnect_info.peer_discon_ies.len = ie->len;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302500
2501 mlme_legacy_debug("peer disconnect IEs");
2502 QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_DEBUG,
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302503 mlme_priv->disconnect_info.peer_discon_ies.data,
2504 mlme_priv->disconnect_info.peer_discon_ies.len);
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302505}
2506
2507void mlme_free_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2508{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302509 struct mlme_legacy_priv *mlme_priv;
2510
hqu7f10f552019-07-09 22:12:44 +08002511 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2512 if (!mlme_priv) {
2513 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302514 return;
2515 }
2516
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302517 if (mlme_priv->disconnect_info.peer_discon_ies.data) {
2518 qdf_mem_free(mlme_priv->disconnect_info.peer_discon_ies.data);
2519 mlme_priv->disconnect_info.peer_discon_ies.data = NULL;
2520 mlme_priv->disconnect_info.peer_discon_ies.len = 0;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302521 }
2522}
2523
2524struct wlan_ies *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev)
2525{
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302526 struct mlme_legacy_priv *mlme_priv;
2527
hqu7f10f552019-07-09 22:12:44 +08002528 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2529 if (!mlme_priv) {
2530 mlme_legacy_err("vdev legacy private object is NULL");
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302531 return NULL;
2532 }
2533
Srinivas Dasaric3003a42020-02-13 11:30:50 +05302534 return &mlme_priv->disconnect_info.peer_discon_ies;
Srinivas Dasarid4e87252019-07-01 15:35:52 +05302535}
Srinivas Dasaricc863f02019-09-05 17:18:48 +05302536
Paul Zhangd34b5752019-10-09 11:22:32 +08002537void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag)
2538{
2539 struct mlme_legacy_priv *mlme_priv;
2540
2541 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2542 if (!mlme_priv) {
2543 mlme_legacy_err("vdev legacy private object is NULL");
2544 return;
2545 }
2546
2547 mlme_priv->follow_ap_edca = flag;
2548}
2549
2550bool mlme_get_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev)
2551{
2552 struct mlme_legacy_priv *mlme_priv;
2553
2554 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2555 if (!mlme_priv) {
2556 mlme_legacy_err("vdev legacy private object is NULL");
2557 return false;
2558 }
2559
2560 return mlme_priv->follow_ap_edca;
2561}
2562
Srinivas Dasaricc863f02019-09-05 17:18:48 +05302563void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer,
2564 bool is_pmf_enabled)
2565{
2566 struct peer_mlme_priv_obj *peer_priv;
2567
2568 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
2569 WLAN_UMAC_COMP_MLME);
2570 if (!peer_priv) {
2571 mlme_legacy_err(" peer mlme component object is NULL");
2572 return;
2573 }
2574 peer_priv->is_pmf_enabled = is_pmf_enabled;
2575}
2576
2577bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer)
2578{
2579 struct peer_mlme_priv_obj *peer_priv;
2580
2581 peer_priv = wlan_objmgr_peer_get_comp_private_obj(peer,
2582 WLAN_UMAC_COMP_MLME);
2583 if (!peer_priv) {
2584 mlme_legacy_err("peer mlme component object is NULL");
2585 return false;
2586 }
2587
2588 return peer_priv->is_pmf_enabled;
2589}
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302590
Srinivas Dasarie2495dc2020-02-13 09:49:24 +05302591void mlme_set_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
2592 uint8_t vdev_id, bool from_ap,
2593 uint32_t reason_code)
2594{
2595 struct wlan_objmgr_vdev *vdev;
2596 struct mlme_legacy_priv *mlme_priv;
2597
2598 if (!psoc)
2599 return;
2600
2601 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2602 WLAN_LEGACY_MAC_ID);
2603 if (!vdev)
2604 return;
2605 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2606 if (!mlme_priv) {
2607 mlme_legacy_err("vdev legacy private object is NULL");
2608 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2609 return;
2610 }
2611
2612 mlme_priv->disconnect_info.from_ap = from_ap;
2613 mlme_priv->disconnect_info.discon_reason = reason_code;
2614 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2615}
2616
2617void mlme_get_discon_reason_n_from_ap(struct wlan_objmgr_psoc *psoc,
2618 uint8_t vdev_id, bool *from_ap,
2619 uint32_t *reason_code)
2620{
2621 struct wlan_objmgr_vdev *vdev;
2622 struct mlme_legacy_priv *mlme_priv;
2623
2624 if (!psoc)
2625 return;
2626
2627 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2628 WLAN_LEGACY_MAC_ID);
2629 if (!vdev)
2630 return;
2631 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2632 if (!mlme_priv) {
2633 mlme_legacy_err("vdev legacy private object is NULL");
2634 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2635 return;
2636 }
2637
2638 *from_ap = mlme_priv->disconnect_info.from_ap;
2639 *reason_code = mlme_priv->disconnect_info.discon_reason;
2640 mlme_priv->disconnect_info.from_ap = false;
2641 mlme_priv->disconnect_info.discon_reason = 0;
2642 wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
2643}
2644
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302645#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
2646static
2647const char *mlme_roam_state_to_string(enum roam_offload_state state)
2648{
2649 switch (state) {
2650 case ROAM_INIT:
2651 return "ROAM_INIT";
2652 case ROAM_DEINIT:
2653 return "ROAM_DEINIT";
2654 case ROAM_RSO_STARTED:
2655 return "ROAM_RSO_STARTED";
2656 case ROAM_RSO_STOPPED:
2657 return "ROAM_RSO_STOPPED";
2658 default:
2659 return "";
2660 }
2661}
2662
2663static void
2664mlme_print_roaming_state(uint8_t vdev_id, enum roam_offload_state cur_state,
2665 enum roam_offload_state new_state)
2666{
Abhinav Kumar2717f6f2020-02-24 14:39:57 +05302667 mlme_debug("ROAM: vdev %d: %s(%d) --> %s(%d)",
2668 vdev_id, mlme_roam_state_to_string(cur_state), cur_state,
2669 mlme_roam_state_to_string(new_state), new_state);
Yeshwanth Sriram Guntukaea2fb372019-08-28 12:21:16 +05302670
2671 /* TODO: Try to print the state change requestor also */
2672}
2673
2674bool
2675mlme_get_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
2676 uint8_t vdev_id)
2677{
2678 struct wlan_objmgr_vdev *vdev;
2679 struct mlme_legacy_priv *mlme_priv;
2680 bool value;
2681
2682 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2683 WLAN_MLME_OBJMGR_ID);
2684
2685 if (!vdev) {
2686 mlme_legacy_err("vdev object is NULL");
2687 return 0;
2688 }
2689
2690 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2691 if (!mlme_priv) {
2692 mlme_legacy_err("vdev legacy private object is NULL");
2693 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2694 return 0;
2695 }
2696
2697 value = mlme_priv->mlme_roam.roam_cfg.supplicant_disabled_roaming;
2698 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2699
2700 return value;
2701}
2702
2703void mlme_set_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
2704 uint8_t vdev_id, bool val)
2705{
2706 struct wlan_objmgr_vdev *vdev;
2707 struct mlme_legacy_priv *mlme_priv;
2708
2709 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2710 WLAN_MLME_OBJMGR_ID);
2711
2712 if (!vdev) {
2713 mlme_legacy_err("vdev object is NULL");
2714 return;
2715 }
2716
2717 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2718 if (!mlme_priv) {
2719 mlme_legacy_err("vdev legacy private object is NULL");
2720 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2721 return;
2722 }
2723
2724 mlme_priv->mlme_roam.roam_cfg.supplicant_disabled_roaming = val;
2725 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2726}
2727
2728uint32_t
2729mlme_get_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2730{
2731 struct wlan_objmgr_vdev *vdev;
2732 struct mlme_legacy_priv *mlme_priv;
2733 uint32_t roam_bitmap;
2734
2735 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2736 WLAN_MLME_OBJMGR_ID);
2737
2738 if (!vdev) {
2739 mlme_legacy_err("vdev object is NULL");
2740 return 0;
2741 }
2742
2743 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2744 if (!mlme_priv) {
2745 mlme_legacy_err("vdev legacy private object is NULL");
2746 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2747 return 0;
2748 }
2749
2750 roam_bitmap = mlme_priv->mlme_roam.roam_cfg.roam_trigger_bitmap;
2751 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2752
2753 return roam_bitmap;
2754}
2755
2756void mlme_set_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc,
2757 uint8_t vdev_id, uint32_t val)
2758{
2759 struct wlan_objmgr_vdev *vdev;
2760 struct mlme_legacy_priv *mlme_priv;
2761
2762 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2763 WLAN_MLME_OBJMGR_ID);
2764 if (!vdev) {
2765 mlme_legacy_err("vdev object is NULL");
2766 return;
2767 }
2768
2769 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2770 if (!mlme_priv) {
2771 mlme_legacy_err("vdev legacy private object is NULL");
2772 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2773 return;
2774 }
2775
2776 mlme_priv->mlme_roam.roam_cfg.roam_trigger_bitmap = val;
2777 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2778}
2779
2780uint8_t
2781mlme_get_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2782{
2783 struct wlan_objmgr_vdev *vdev;
2784 struct mlme_legacy_priv *mlme_priv;
2785 uint8_t bitmap;
2786
2787 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2788 WLAN_MLME_OBJMGR_ID);
2789
2790 if (!vdev) {
2791 mlme_legacy_err("vdev object is NULL");
2792 return 0xFF;
2793 }
2794
2795 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2796 if (!mlme_priv) {
2797 mlme_legacy_err("vdev legacy private object is NULL");
2798 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2799 return 0xFF;
2800 }
2801
2802 bitmap = mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap;
2803 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2804
2805 return bitmap;
2806}
2807
2808void
2809mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2810 enum roam_control_requestor reqs, bool clear)
2811{
2812 struct wlan_objmgr_vdev *vdev;
2813 struct mlme_legacy_priv *mlme_priv;
2814
2815 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2816 WLAN_MLME_OBJMGR_ID);
2817 if (!vdev) {
2818 mlme_legacy_err("vdev object is NULL");
2819 return;
2820 }
2821
2822 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2823 if (!mlme_priv) {
2824 mlme_legacy_err("vdev legacy private object is NULL");
2825 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2826 return;
2827 }
2828
2829 if (clear)
2830 mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap &= ~reqs;
2831 else
2832 mlme_priv->mlme_roam.roam_sm.mlme_operations_bitmap |= reqs;
2833 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2834}
2835
2836enum roam_offload_state
2837mlme_get_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
2838{
2839 struct wlan_objmgr_vdev *vdev;
2840 struct mlme_legacy_priv *mlme_priv;
2841 enum roam_offload_state roam_state;
2842
2843 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2844 WLAN_MLME_OBJMGR_ID);
2845
2846 if (!vdev) {
2847 mlme_legacy_err("vdev object is NULL");
2848 return ROAM_DEINIT;
2849 }
2850
2851 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2852 if (!mlme_priv) {
2853 mlme_legacy_err("vdev legacy private object is NULL");
2854 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2855 return ROAM_DEINIT;
2856 }
2857
2858 roam_state = mlme_priv->mlme_roam.roam_sm.state;
2859 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2860
2861 return roam_state;
2862}
2863
2864void mlme_set_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2865 enum roam_offload_state new_state)
2866{
2867 struct wlan_objmgr_vdev *vdev;
2868 struct mlme_legacy_priv *mlme_priv;
2869
2870 vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
2871 WLAN_MLME_OBJMGR_ID);
2872
2873 if (!vdev) {
2874 mlme_legacy_err("vdev object is NULL");
2875 return;
2876 }
2877
2878 mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
2879 if (!mlme_priv) {
2880 mlme_legacy_err("vdev legacy private object is NULL");
2881 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2882 return;
2883 }
2884
2885 mlme_print_roaming_state(vdev_id, mlme_priv->mlme_roam.roam_sm.state,
2886 new_state);
2887 mlme_priv->mlme_roam.roam_sm.state = new_state;
2888 wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
2889}
2890#endif