xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c (revision 1d96b191cf232f382465124518baf950d10d68cd)
1 /*
2  * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
3  *
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 
19 /**
20  * DOC: wlan_vdev_mgr_utils_api.c
21  *
22  * This file provide definition for APIs to enable Tx Ops and Rx Ops registered
23  * through LMAC
24  */
25 #include <wlan_vdev_mgr_utils_api.h>
26 #include <wlan_vdev_mgr_tgt_if_tx_api.h>
27 #include <cdp_txrx_cmn_struct.h>
28 #include <wlan_mlme_dbg.h>
29 #include <qdf_module.h>
30 #include <wlan_vdev_mgr_tgt_if_tx_api.h>
31 
32 static QDF_STATUS vdev_mgr_config_ratemask_update(
33 				struct vdev_mlme_obj *mlme_obj,
34 				struct config_ratemask_params *param)
35 {
36 	struct wlan_objmgr_vdev *vdev;
37 
38 	vdev = mlme_obj->vdev;
39 	param->vdev_id = wlan_vdev_get_id(vdev);
40 	param->type = mlme_obj->mgmt.rate_info.type;
41 	param->lower32 = mlme_obj->mgmt.rate_info.lower32;
42 	param->higher32 = mlme_obj->mgmt.rate_info.higher32;
43 	param->lower32_2 = mlme_obj->mgmt.rate_info.lower32_2;
44 
45 	return QDF_STATUS_SUCCESS;
46 }
47 
48 enum wlan_op_subtype
49 wlan_util_vdev_get_cdp_txrx_subtype(struct wlan_objmgr_vdev *vdev)
50 {
51 	enum QDF_OPMODE qdf_opmode;
52 	enum wlan_op_subtype cdp_txrx_subtype;
53 
54 	qdf_opmode = wlan_vdev_mlme_get_opmode(vdev);
55 	switch (qdf_opmode) {
56 	case QDF_P2P_DEVICE_MODE:
57 		cdp_txrx_subtype = wlan_op_subtype_p2p_device;
58 		break;
59 	case QDF_P2P_CLIENT_MODE:
60 		cdp_txrx_subtype = wlan_op_subtype_p2p_cli;
61 		break;
62 	case QDF_P2P_GO_MODE:
63 		cdp_txrx_subtype = wlan_op_subtype_p2p_go;
64 		break;
65 	default:
66 		cdp_txrx_subtype = wlan_op_subtype_none;
67 	};
68 
69 	return cdp_txrx_subtype;
70 }
71 
72 enum wlan_op_mode
73 wlan_util_vdev_get_cdp_txrx_opmode(struct wlan_objmgr_vdev *vdev)
74 {
75 	enum QDF_OPMODE qdf_opmode;
76 	enum wlan_op_mode cdp_txrx_opmode;
77 
78 	qdf_opmode = wlan_vdev_mlme_get_opmode(vdev);
79 	switch (qdf_opmode) {
80 	case QDF_STA_MODE:
81 		cdp_txrx_opmode = wlan_op_mode_sta;
82 		break;
83 	case QDF_SAP_MODE:
84 		cdp_txrx_opmode = wlan_op_mode_ap;
85 		break;
86 	case QDF_MONITOR_MODE:
87 		cdp_txrx_opmode = wlan_op_mode_monitor;
88 		break;
89 	case QDF_P2P_DEVICE_MODE:
90 		cdp_txrx_opmode = wlan_op_mode_ap;
91 		break;
92 	case QDF_P2P_CLIENT_MODE:
93 		cdp_txrx_opmode = wlan_op_mode_sta;
94 		break;
95 	case QDF_P2P_GO_MODE:
96 		cdp_txrx_opmode = wlan_op_mode_ap;
97 		break;
98 	case QDF_OCB_MODE:
99 		cdp_txrx_opmode = wlan_op_mode_ocb;
100 		break;
101 	case QDF_IBSS_MODE:
102 		cdp_txrx_opmode = wlan_op_mode_ibss;
103 		break;
104 	case QDF_NDI_MODE:
105 		cdp_txrx_opmode = wlan_op_mode_ndi;
106 		break;
107 	default:
108 		cdp_txrx_opmode = wlan_op_mode_unknown;
109 	};
110 
111 	return cdp_txrx_opmode;
112 }
113 
114 QDF_STATUS
115 wlan_util_vdev_mlme_set_ratemask_config(struct vdev_mlme_obj *vdev_mlme)
116 {
117 	struct config_ratemask_params rm_param = {0};
118 
119 	if (!vdev_mlme) {
120 		mlme_err("VDEV MLME is NULL");
121 		return QDF_STATUS_E_FAILURE;
122 	}
123 
124 	vdev_mgr_config_ratemask_update(vdev_mlme, &rm_param);
125 
126 	return tgt_vdev_mgr_config_ratemask_cmd_send(vdev_mlme, &rm_param);
127 }
128 
129 qdf_export_symbol(wlan_util_vdev_mlme_set_ratemask_config);
130 
131 QDF_STATUS
132 wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
133 			      enum wlan_mlme_cfg_id param_id,
134 			      struct wlan_vdev_mgr_cfg mlme_cfg)
135 {
136 	struct wlan_objmgr_vdev *vdev;
137 	struct vdev_mlme_proto *mlme_proto;
138 	struct vdev_mlme_mgmt *mlme_mgmt;
139 	struct vdev_mlme_inactivity_params *inactivity_params;
140 	bool is_wmi_cmd = false;
141 	int ret = QDF_STATUS_SUCCESS;
142 	struct vdev_set_params param = {0};
143 
144 	if (!vdev_mlme) {
145 		mlme_err("VDEV MLME is NULL");
146 		return QDF_STATUS_E_FAILURE;
147 	}
148 	vdev = vdev_mlme->vdev;
149 	mlme_proto = &vdev_mlme->proto;
150 	mlme_mgmt = &vdev_mlme->mgmt;
151 	inactivity_params = &mlme_mgmt->inactivity_params;
152 
153 	switch (param_id) {
154 	case WLAN_MLME_CFG_DTIM_PERIOD:
155 		mlme_proto->generic.dtim_period = mlme_cfg.value;
156 		is_wmi_cmd = true;
157 		break;
158 	case WLAN_MLME_CFG_SLOT_TIME:
159 		mlme_proto->generic.slot_time = mlme_cfg.value;
160 		is_wmi_cmd = true;
161 		break;
162 	case WLAN_MLME_CFG_PROTECTION_MODE:
163 		mlme_proto->generic.protection_mode = mlme_cfg.value;
164 		is_wmi_cmd = true;
165 		break;
166 	case WLAN_MLME_CFG_BEACON_INTERVAL:
167 		mlme_proto->generic.beacon_interval = mlme_cfg.value;
168 		is_wmi_cmd = true;
169 		break;
170 	case WLAN_MLME_CFG_LDPC:
171 		mlme_proto->generic.ldpc = mlme_cfg.value;
172 		is_wmi_cmd = true;
173 		break;
174 	case WLAN_MLME_CFG_NSS:
175 		mlme_proto->generic.nss = mlme_cfg.value;
176 		is_wmi_cmd = true;
177 		break;
178 	case WLAN_MLME_CFG_TSF_ADJUST:
179 		mlme_proto->generic.tsfadjust = mlme_cfg.tsf;
180 		break;
181 	case WLAN_MLME_CFG_ASSOC_ID:
182 		mlme_proto->sta.assoc_id = mlme_cfg.value;
183 		break;
184 	case WLAN_MLME_CFG_VHT_CAPS:
185 		mlme_proto->vht_info.caps = mlme_cfg.value;
186 		break;
187 	case WLAN_MLME_CFG_SUBFER:
188 		mlme_proto->vht_info.subfer = mlme_cfg.value;
189 		break;
190 	case WLAN_MLME_CFG_MUBFER:
191 		mlme_proto->vht_info.mubfer = mlme_cfg.value;
192 		break;
193 	case WLAN_MLME_CFG_SUBFEE:
194 		mlme_proto->vht_info.subfee = mlme_cfg.value;
195 		break;
196 	case WLAN_MLME_CFG_MUBFEE:
197 		mlme_proto->vht_info.mubfee = mlme_cfg.value;
198 		break;
199 	case WLAN_MLME_CFG_IMLICIT_BF:
200 		mlme_proto->vht_info.implicit_bf = mlme_cfg.value;
201 		break;
202 	case WLAN_MLME_CFG_SOUNDING_DIM:
203 		mlme_proto->vht_info.sounding_dimension = mlme_cfg.value;
204 		break;
205 	case WLAN_MLME_CFG_BFEE_STS_CAP:
206 		mlme_proto->vht_info.bfee_sts_cap = mlme_cfg.value;
207 		break;
208 	case WLAN_MLME_CFG_TXBF_CAPS:
209 		is_wmi_cmd = true;
210 		break;
211 	case WLAN_MLME_CFG_HT_CAPS:
212 		mlme_proto->ht_info.ht_caps = mlme_cfg.value;
213 		break;
214 	case WLAN_MLME_CFG_HE_OPS:
215 		mlme_proto->he_ops_info.he_ops = mlme_cfg.value;
216 		is_wmi_cmd = true;
217 		break;
218 	case WLAN_MLME_CFG_RTS_THRESHOLD:
219 		mlme_mgmt->generic.rts_threshold = mlme_cfg.value;
220 		is_wmi_cmd = true;
221 		break;
222 	case WLAN_MLME_CFG_FRAG_THRESHOLD:
223 		mlme_mgmt->generic.frag_threshold = mlme_cfg.value;
224 		is_wmi_cmd = true;
225 		break;
226 	case WLAN_MLME_CFG_PROBE_DELAY:
227 		mlme_mgmt->generic.probe_delay = mlme_cfg.value;
228 		break;
229 	case WLAN_MLME_CFG_REPEAT_PROBE_TIME:
230 		mlme_mgmt->generic.repeat_probe_time = mlme_cfg.value;
231 		break;
232 	case WLAN_MLME_CFG_DROP_UNENCRY:
233 		mlme_mgmt->generic.drop_unencry = mlme_cfg.value;
234 		is_wmi_cmd = true;
235 		break;
236 	case WLAN_MLME_CFG_TX_PWR_LIMIT:
237 		mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.value;
238 		break;
239 	case WLAN_MLME_CFG_TX_POWER:
240 		mlme_mgmt->generic.tx_power = mlme_cfg.value;
241 		is_wmi_cmd = true;
242 		break;
243 	case WLAN_MLME_CFG_AMPDU:
244 		mlme_mgmt->generic.ampdu = mlme_cfg.value;
245 		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
246 		is_wmi_cmd = true;
247 		break;
248 	case WLAN_MLME_CFG_AMPDU_SIZE:
249 		mlme_mgmt->generic.ampdu = mlme_cfg.value;
250 		break;
251 	case WLAN_MLME_CFG_AMSDU:
252 		mlme_mgmt->generic.amsdu = mlme_cfg.value;
253 		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
254 		is_wmi_cmd = true;
255 		break;
256 	case WLAN_MLME_CFG_AMSDU_SIZE:
257 		mlme_mgmt->generic.amsdu = mlme_cfg.value;
258 		break;
259 	case WLAN_MLME_CFG_BMISS_FIRST_BCNT:
260 		inactivity_params->bmiss_first_bcnt = mlme_cfg.value;
261 		break;
262 	case WLAN_MLME_CFG_BMISS_FINAL_BCNT:
263 		inactivity_params->bmiss_final_bcnt = mlme_cfg.value;
264 		break;
265 	case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME:
266 		inactivity_params->keepalive_min_idle_inactive_time_secs =
267 							mlme_cfg.value;
268 		is_wmi_cmd = true;
269 		break;
270 	case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME:
271 		inactivity_params->keepalive_max_idle_inactive_time_secs =
272 							mlme_cfg.value;
273 		is_wmi_cmd = true;
274 		break;
275 	case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME:
276 		inactivity_params->keepalive_max_unresponsive_time_secs =
277 							mlme_cfg.value;
278 		is_wmi_cmd = true;
279 		break;
280 	case WLAN_MLME_CFG_RATE_FLAGS:
281 		mlme_mgmt->rate_info.rate_flags = mlme_cfg.value;
282 		break;
283 	case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE:
284 		mlme_mgmt->rate_info.per_band_tx_mgmt_rate = mlme_cfg.value;
285 		break;
286 	case WLAN_MLME_CFG_MAX_RATE:
287 		mlme_mgmt->rate_info.max_rate = mlme_cfg.value;
288 		break;
289 	case WLAN_MLME_CFG_TX_MGMT_RATE:
290 		mlme_mgmt->rate_info.tx_mgmt_rate = mlme_cfg.value;
291 		break;
292 	case WLAN_MLME_CFG_TX_CHAINMASK:
293 		mlme_mgmt->chainmask_info.tx_chainmask = mlme_cfg.value;
294 		break;
295 	case WLAN_MLME_CFG_RX_CHAINMASK:
296 		mlme_mgmt->chainmask_info.rx_chainmask = mlme_cfg.value;
297 		break;
298 	case WLAN_MLME_CFG_PKT_POWERSAVE:
299 		mlme_mgmt->powersave_info.packet_powersave = mlme_cfg.value;
300 		break;
301 	case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM:
302 		mlme_mgmt->powersave_info.max_li_of_moddtim = mlme_cfg.value;
303 		break;
304 	case WLAN_MLME_CFG_DYNDTIM_CNT:
305 		mlme_mgmt->powersave_info.dyndtim_cnt = mlme_cfg.value;
306 		break;
307 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
308 		mlme_mgmt->powersave_info.listen_interval = mlme_cfg.value;
309 		is_wmi_cmd = true;
310 		break;
311 	case WLAN_MLME_CFG_MODDTIM_CNT:
312 		mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.value;
313 		break;
314 	case WLAN_MLME_CFG_PROFILE_IDX:
315 		mlme_mgmt->mbss_11ax.profile_idx = mlme_cfg.value;
316 		break;
317 	case WLAN_MLME_CFG_PROFILE_NUM:
318 		mlme_mgmt->mbss_11ax.profile_num = mlme_cfg.value;
319 		break;
320 	case WLAN_MLME_CFG_MBSSID_FLAGS:
321 		mlme_mgmt->mbss_11ax.mbssid_flags = mlme_cfg.value;
322 		break;
323 	case WLAN_MLME_CFG_VDEVID_TRANS:
324 		mlme_mgmt->mbss_11ax.vdevid_trans = mlme_cfg.value;
325 		break;
326 	case WLAN_MLME_CFG_SSID:
327 		if (mlme_cfg.ssid_cfg.length <= WLAN_SSID_MAX_LEN) {
328 			qdf_mem_copy(mlme_mgmt->generic.ssid,
329 				     mlme_cfg.ssid_cfg.ssid,
330 				     mlme_cfg.ssid_cfg.length);
331 			mlme_mgmt->generic.ssid_len =
332 						mlme_cfg.ssid_cfg.length;
333 		} else {
334 			mlme_mgmt->generic.ssid_len = 0;
335 		}
336 
337 		break;
338 	case WLAN_MLME_CFG_TRANS_BSSID:
339 		qdf_mem_copy(mlme_mgmt->mbss_11ax.trans_bssid,
340 			     mlme_cfg.trans_bssid, QDF_MAC_ADDR_SIZE);
341 		break;
342 	case WLAN_MLME_CFG_TYPE:
343 		mlme_mgmt->generic.type = mlme_cfg.value;
344 		break;
345 	case WLAN_MLME_CFG_SUBTYPE:
346 		mlme_mgmt->generic.subtype = mlme_cfg.value;
347 		break;
348 	case WLAN_MLME_CFG_UAPSD:
349 		mlme_proto->sta.uapsd_cfg = mlme_cfg.value;
350 		break;
351 	case WLAN_MLME_CFG_TX_ENCAP_TYPE:
352 		is_wmi_cmd = true;
353 		mlme_mgmt->generic.tx_encap_type = mlme_cfg.value;
354 		tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme,
355 						  WLAN_MLME_CFG_TX_ENCAP_TYPE,
356 						  mlme_cfg.value);
357 		break;
358 	case WLAN_MLME_CFG_RX_DECAP_TYPE:
359 		is_wmi_cmd = true;
360 		mlme_mgmt->generic.rx_decap_type = mlme_cfg.value;
361 		tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme,
362 						  WLAN_MLME_CFG_RX_DECAP_TYPE,
363 						  mlme_cfg.value);
364 		break;
365 	case WLAN_MLME_CFG_RATEMASK_TYPE:
366 		mlme_mgmt->rate_info.type = mlme_cfg.value;
367 		break;
368 	case WLAN_MLME_CFG_RATEMASK_LOWER32:
369 		mlme_mgmt->rate_info.lower32 = mlme_cfg.value;
370 		break;
371 	case WLAN_MLME_CFG_RATEMASK_HIGHER32:
372 		mlme_mgmt->rate_info.higher32 = mlme_cfg.value;
373 		break;
374 	case WLAN_MLME_CFG_RATEMASK_LOWER32_2:
375 		mlme_mgmt->rate_info.lower32_2 = mlme_cfg.value;
376 		break;
377 	case WLAN_MLME_CFG_BCN_TX_RATE:
378 		mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.value;
379 		break;
380 	case WLAN_MLME_CFG_BCN_TX_RATE_CODE:
381 		is_wmi_cmd = true;
382 		break;
383 	case WLAN_MLME_CFG_TX_MGMT_RATE_CODE:
384 		is_wmi_cmd = true;
385 		break;
386 	case WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY:
387 		is_wmi_cmd = true;
388 		break;
389 	case WLAN_MLME_CFG_MAX_GROUP_KEYS:
390 		is_wmi_cmd = true;
391 		break;
392 	default:
393 		break;
394 	}
395 
396 	if (is_wmi_cmd) {
397 		param.param_id = param_id;
398 		param.vdev_id = wlan_vdev_get_id(vdev);
399 		param.param_value = mlme_cfg.value;
400 		ret = tgt_vdev_mgr_set_param_send(vdev_mlme, &param);
401 	}
402 
403 	return ret;
404 }
405 
406 qdf_export_symbol(wlan_util_vdev_mlme_set_param);
407 
408 void wlan_util_vdev_mlme_get_param(struct vdev_mlme_obj *vdev_mlme,
409 				   enum wlan_mlme_cfg_id param_id,
410 				   uint32_t *value)
411 {
412 	struct vdev_mlme_proto *mlme_proto;
413 	struct vdev_mlme_mgmt *mlme_mgmt;
414 	struct vdev_mlme_inactivity_params *inactivity_params;
415 
416 	if (!vdev_mlme) {
417 		mlme_err("VDEV MLME is NULL");
418 		return;
419 	}
420 	mlme_proto = &vdev_mlme->proto;
421 	mlme_mgmt = &vdev_mlme->mgmt;
422 	inactivity_params = &mlme_mgmt->inactivity_params;
423 
424 	switch (param_id) {
425 	case WLAN_MLME_CFG_DTIM_PERIOD:
426 		*value = mlme_proto->generic.dtim_period;
427 		break;
428 	case WLAN_MLME_CFG_SLOT_TIME:
429 		*value = mlme_proto->generic.slot_time;
430 		break;
431 	case WLAN_MLME_CFG_PROTECTION_MODE:
432 		*value = mlme_proto->generic.protection_mode;
433 		break;
434 	case WLAN_MLME_CFG_BEACON_INTERVAL:
435 		*value = mlme_proto->generic.beacon_interval;
436 		break;
437 	case WLAN_MLME_CFG_LDPC:
438 		*value = mlme_proto->generic.ldpc;
439 		break;
440 	case WLAN_MLME_CFG_NSS:
441 		*value = mlme_proto->generic.nss;
442 		break;
443 	case WLAN_MLME_CFG_ASSOC_ID:
444 		*value = mlme_proto->sta.assoc_id;
445 		break;
446 	case WLAN_MLME_CFG_VHT_CAPS:
447 		*value = mlme_proto->vht_info.caps;
448 		break;
449 	case WLAN_MLME_CFG_SUBFER:
450 		*value = mlme_proto->vht_info.subfer;
451 		break;
452 	case WLAN_MLME_CFG_MUBFER:
453 		*value = mlme_proto->vht_info.mubfer;
454 		break;
455 	case WLAN_MLME_CFG_SUBFEE:
456 		*value = mlme_proto->vht_info.subfee;
457 		break;
458 	case WLAN_MLME_CFG_MUBFEE:
459 		*value = mlme_proto->vht_info.mubfee;
460 		break;
461 	case WLAN_MLME_CFG_IMLICIT_BF:
462 		*value = mlme_proto->vht_info.implicit_bf;
463 		break;
464 	case WLAN_MLME_CFG_SOUNDING_DIM:
465 		*value = mlme_proto->vht_info.sounding_dimension;
466 		break;
467 	case WLAN_MLME_CFG_BFEE_STS_CAP:
468 		*value = mlme_proto->vht_info.bfee_sts_cap;
469 		break;
470 	case WLAN_MLME_CFG_HT_CAPS:
471 		*value = mlme_proto->ht_info.ht_caps;
472 		break;
473 	case WLAN_MLME_CFG_HE_OPS:
474 		*value = mlme_proto->he_ops_info.he_ops;
475 		break;
476 	case WLAN_MLME_CFG_RTS_THRESHOLD:
477 		*value = mlme_mgmt->generic.rts_threshold;
478 		break;
479 	case WLAN_MLME_CFG_FRAG_THRESHOLD:
480 		*value = mlme_mgmt->generic.frag_threshold;
481 		break;
482 	case WLAN_MLME_CFG_PROBE_DELAY:
483 		*value = mlme_mgmt->generic.probe_delay;
484 		break;
485 	case WLAN_MLME_CFG_REPEAT_PROBE_TIME:
486 		*value = mlme_mgmt->generic.repeat_probe_time;
487 		break;
488 	case WLAN_MLME_CFG_DROP_UNENCRY:
489 		*value = mlme_mgmt->generic.drop_unencry;
490 		break;
491 	case WLAN_MLME_CFG_TX_PWR_LIMIT:
492 		*value = mlme_mgmt->generic.tx_pwrlimit;
493 		break;
494 	case WLAN_MLME_CFG_TX_POWER:
495 		*value = mlme_mgmt->generic.tx_power;
496 		break;
497 	case WLAN_MLME_CFG_AMPDU:
498 		*value = mlme_mgmt->generic.ampdu;
499 		break;
500 	case WLAN_MLME_CFG_AMSDU:
501 		*value = mlme_mgmt->generic.amsdu;
502 		break;
503 	case WLAN_MLME_CFG_SSID_LEN:
504 		*value = mlme_mgmt->generic.ssid_len;
505 		break;
506 	case WLAN_MLME_CFG_BMISS_FIRST_BCNT:
507 		*value = inactivity_params->bmiss_first_bcnt;
508 		break;
509 	case WLAN_MLME_CFG_BMISS_FINAL_BCNT:
510 		*value = inactivity_params->bmiss_final_bcnt;
511 		break;
512 	case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME:
513 		*value =
514 		      inactivity_params->keepalive_min_idle_inactive_time_secs;
515 		break;
516 	case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME:
517 		*value =
518 		      inactivity_params->keepalive_max_idle_inactive_time_secs;
519 		break;
520 	case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME:
521 		*value =
522 		      inactivity_params->keepalive_max_unresponsive_time_secs;
523 		break;
524 	case WLAN_MLME_CFG_RATE_FLAGS:
525 		*value = mlme_mgmt->rate_info.rate_flags;
526 		break;
527 	case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE:
528 		*value = mlme_mgmt->rate_info.per_band_tx_mgmt_rate;
529 		break;
530 	case WLAN_MLME_CFG_MAX_RATE:
531 		*value = mlme_mgmt->rate_info.max_rate;
532 		break;
533 	case WLAN_MLME_CFG_TX_MGMT_RATE:
534 		*value = mlme_mgmt->rate_info.tx_mgmt_rate;
535 		break;
536 	case WLAN_MLME_CFG_TX_CHAINMASK:
537 		*value = mlme_mgmt->chainmask_info.tx_chainmask;
538 		break;
539 	case WLAN_MLME_CFG_RX_CHAINMASK:
540 		*value = mlme_mgmt->chainmask_info.rx_chainmask;
541 		break;
542 	case WLAN_MLME_CFG_PKT_POWERSAVE:
543 		*value = mlme_mgmt->powersave_info.packet_powersave;
544 		break;
545 	case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM:
546 		*value = mlme_mgmt->powersave_info.max_li_of_moddtim;
547 		break;
548 	case WLAN_MLME_CFG_DYNDTIM_CNT:
549 		*value = mlme_mgmt->powersave_info.dyndtim_cnt;
550 		break;
551 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
552 		*value = mlme_mgmt->powersave_info.listen_interval;
553 		break;
554 	case WLAN_MLME_CFG_MODDTIM_CNT:
555 		*value = mlme_mgmt->powersave_info.moddtim_cnt;
556 		break;
557 	case WLAN_MLME_CFG_PROFILE_IDX:
558 		*value = mlme_mgmt->mbss_11ax.profile_idx;
559 		break;
560 	case WLAN_MLME_CFG_PROFILE_NUM:
561 		*value = mlme_mgmt->mbss_11ax.profile_num;
562 		break;
563 	case WLAN_MLME_CFG_MBSSID_FLAGS:
564 		*value = mlme_mgmt->mbss_11ax.mbssid_flags;
565 		break;
566 	case WLAN_MLME_CFG_VDEVID_TRANS:
567 		*value = mlme_mgmt->mbss_11ax.vdevid_trans;
568 		break;
569 	case WLAN_MLME_CFG_BCN_TX_RATE:
570 		*value = mlme_mgmt->rate_info.bcn_tx_rate;
571 		break;
572 	default:
573 		break;
574 	}
575 }
576 
577 qdf_export_symbol(wlan_util_vdev_mlme_get_param);
578 
579 void wlan_util_vdev_get_param(struct wlan_objmgr_vdev *vdev,
580 			      enum wlan_mlme_cfg_id param_id,
581 			      uint32_t *value)
582 {
583 	ucfg_wlan_vdev_mgr_get_param(vdev, param_id, value);
584 }
585 
586 qdf_export_symbol(wlan_util_vdev_get_param);
587