xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_utils_api.c (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
1 /*
2  * Copyright (c) 2019-2021, 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 static QDF_STATUS
132 tgt_vdev_mgr_vdev_set_param_wrapper(struct vdev_mlme_obj *vdev_mlme,
133 				    enum wlan_mlme_cfg_id param_id,
134 				    struct wlan_vdev_mgr_cfg mlme_cfg)
135 {
136 	uint8_t id, count = 0;
137 	bool is_mbss_enabled, is_cmn_param = 0;
138 	unsigned long vdev_bmap = 0;
139 	struct wlan_objmgr_pdev *pdev;
140 	struct vdev_mlme_mbss_11ax *mbss;
141 	struct vdev_set_params param1 = {0};
142 	struct multiple_vdev_set_param param2 = {0};
143 	QDF_STATUS status = QDF_STATUS_SUCCESS;
144 
145 	mbss = &vdev_mlme->mgmt.mbss_11ax;
146 	is_mbss_enabled = (mbss->mbssid_flags
147 				& WLAN_VDEV_MLME_FLAGS_NON_MBSSID_AP) ? 0 : 1;
148 
149 	if (is_mbss_enabled) {
150 		vdev_bmap = mbss->vdev_bmap;
151 		is_cmn_param = mbss->is_cmn_param;
152 	}
153 
154 	/* 1. if non tx vap and cmn param, dont send any WMI
155 	 * 2. if tx vap and cmn param, send multi vdev set WMI
156 	 * 3. if non tx vap and non cmn param, send vdev set WMI
157 	 * 4. if tx vap and non cmn param, send vdev set WMI
158 	 * 5. if non mbss vap, send vdev set WMI
159 	 */
160 	if (!is_mbss_enabled || !is_cmn_param) {
161 		param1.param_id = param_id;
162 		param1.vdev_id = wlan_vdev_get_id(vdev_mlme->vdev);
163 		param1.param_value = mlme_cfg.value;
164 		return tgt_vdev_mgr_set_param_send(vdev_mlme, &param1);
165 	}
166 
167 	if (is_cmn_param && vdev_bmap) {
168 		pdev = wlan_vdev_get_pdev(vdev_mlme->vdev);
169 		param2.pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
170 		param2.param_id = param_id;
171 		param2.param_value = mlme_cfg.value;
172 
173 		for (id = 0; id < WLAN_UMAC_PDEV_MAX_VDEVS; id++) {
174 			if (qdf_test_bit(id, &vdev_bmap)) {
175 				param2.vdev_ids[count] = id;
176 				count++;
177 			}
178 		}
179 		param2.num_vdevs = count;
180 		status = tgt_vdev_mgr_multiple_vdev_set_param(pdev, &param2);
181 		mbss->vdev_bmap = 0;
182 	}
183 
184 	/* Reset the is_cmn_param for this vap */
185 	mbss->is_cmn_param = 0;
186 
187 	return status;
188 }
189 
190 QDF_STATUS
191 wlan_util_vdev_mlme_set_param(struct vdev_mlme_obj *vdev_mlme,
192 			      enum wlan_mlme_cfg_id param_id,
193 			      struct wlan_vdev_mgr_cfg mlme_cfg)
194 {
195 	struct wlan_objmgr_vdev *vdev;
196 	struct vdev_mlme_proto *mlme_proto;
197 	struct vdev_mlme_mgmt *mlme_mgmt;
198 	struct vdev_mlme_inactivity_params *inactivity_params;
199 	bool is_wmi_cmd = false;
200 	int ret = QDF_STATUS_SUCCESS;
201 
202 	if (!vdev_mlme) {
203 		mlme_err("VDEV MLME is NULL");
204 		return QDF_STATUS_E_FAILURE;
205 	}
206 	vdev = vdev_mlme->vdev;
207 	mlme_proto = &vdev_mlme->proto;
208 	mlme_mgmt = &vdev_mlme->mgmt;
209 	inactivity_params = &mlme_mgmt->inactivity_params;
210 
211 	switch (param_id) {
212 	case WLAN_MLME_CFG_DTIM_PERIOD:
213 		mlme_proto->generic.dtim_period = mlme_cfg.value;
214 		is_wmi_cmd = true;
215 		break;
216 	case WLAN_MLME_CFG_SLOT_TIME:
217 		mlme_proto->generic.slot_time = mlme_cfg.value;
218 		is_wmi_cmd = true;
219 		break;
220 	case WLAN_MLME_CFG_PROTECTION_MODE:
221 		mlme_proto->generic.protection_mode = mlme_cfg.value;
222 		is_wmi_cmd = true;
223 		break;
224 	case WLAN_MLME_CFG_BEACON_INTERVAL:
225 		mlme_proto->generic.beacon_interval = mlme_cfg.value;
226 		is_wmi_cmd = true;
227 		break;
228 	case WLAN_MLME_CFG_LDPC:
229 		mlme_proto->generic.ldpc = mlme_cfg.value;
230 		is_wmi_cmd = true;
231 		break;
232 	case WLAN_MLME_CFG_NSS:
233 		mlme_proto->generic.nss = mlme_cfg.value;
234 		is_wmi_cmd = true;
235 		break;
236 	case WLAN_MLME_CFG_TSF_ADJUST:
237 		mlme_proto->generic.tsfadjust = mlme_cfg.tsf;
238 		break;
239 	case WLAN_MLME_CFG_ASSOC_ID:
240 		mlme_proto->sta.assoc_id = mlme_cfg.value;
241 		break;
242 	case WLAN_MLME_CFG_VHT_CAPS:
243 		mlme_proto->vht_info.caps = mlme_cfg.value;
244 		break;
245 	case WLAN_MLME_CFG_SUBFER:
246 		mlme_proto->vht_info.subfer = mlme_cfg.value;
247 		break;
248 	case WLAN_MLME_CFG_MUBFER:
249 		mlme_proto->vht_info.mubfer = mlme_cfg.value;
250 		break;
251 	case WLAN_MLME_CFG_SUBFEE:
252 		mlme_proto->vht_info.subfee = mlme_cfg.value;
253 		break;
254 	case WLAN_MLME_CFG_MUBFEE:
255 		mlme_proto->vht_info.mubfee = mlme_cfg.value;
256 		break;
257 	case WLAN_MLME_CFG_IMLICIT_BF:
258 		mlme_proto->vht_info.implicit_bf = mlme_cfg.value;
259 		break;
260 	case WLAN_MLME_CFG_SOUNDING_DIM:
261 		mlme_proto->vht_info.sounding_dimension = mlme_cfg.value;
262 		break;
263 	case WLAN_MLME_CFG_BFEE_STS_CAP:
264 		mlme_proto->vht_info.bfee_sts_cap = mlme_cfg.value;
265 		break;
266 	case WLAN_MLME_CFG_TXBF_CAPS:
267 		is_wmi_cmd = true;
268 		break;
269 	case WLAN_MLME_CFG_HT_CAPS:
270 		mlme_proto->ht_info.ht_caps = mlme_cfg.value;
271 		break;
272 	case WLAN_MLME_CFG_HE_OPS:
273 		mlme_proto->he_ops_info.he_ops = mlme_cfg.value;
274 		is_wmi_cmd = true;
275 		break;
276 #ifdef WLAN_FEATURE_11BE
277 	case WLAN_MLME_CFG_EHT_OPS:
278 		mlme_proto->eht_ops_info.eht_ops = mlme_cfg.value;
279 		is_wmi_cmd = true;
280 		break;
281 #endif
282 	case WLAN_MLME_CFG_RTS_THRESHOLD:
283 		mlme_mgmt->generic.rts_threshold = mlme_cfg.value;
284 		is_wmi_cmd = true;
285 		break;
286 	case WLAN_MLME_CFG_FRAG_THRESHOLD:
287 		mlme_mgmt->generic.frag_threshold = mlme_cfg.value;
288 		is_wmi_cmd = true;
289 		break;
290 	case WLAN_MLME_CFG_PROBE_DELAY:
291 		mlme_mgmt->generic.probe_delay = mlme_cfg.value;
292 		break;
293 	case WLAN_MLME_CFG_REPEAT_PROBE_TIME:
294 		mlme_mgmt->generic.repeat_probe_time = mlme_cfg.value;
295 		break;
296 	case WLAN_MLME_CFG_DROP_UNENCRY:
297 		mlme_mgmt->generic.drop_unencry = mlme_cfg.value;
298 		is_wmi_cmd = true;
299 		break;
300 	case WLAN_MLME_CFG_TX_PWR_LIMIT:
301 		mlme_mgmt->generic.tx_pwrlimit = mlme_cfg.value;
302 		break;
303 	case WLAN_MLME_CFG_TX_POWER:
304 		mlme_mgmt->generic.tx_power = mlme_cfg.value;
305 		is_wmi_cmd = true;
306 		break;
307 	case WLAN_MLME_CFG_AMPDU:
308 		mlme_mgmt->generic.ampdu = mlme_cfg.value;
309 		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
310 		is_wmi_cmd = true;
311 		break;
312 	case WLAN_MLME_CFG_AMPDU_SIZE:
313 		mlme_mgmt->generic.ampdu = mlme_cfg.value;
314 		break;
315 	case WLAN_MLME_CFG_AMSDU:
316 		mlme_mgmt->generic.amsdu = mlme_cfg.value;
317 		mlme_cfg.value = (mlme_cfg.value << 8) + 0xFF;
318 		is_wmi_cmd = true;
319 		break;
320 	case WLAN_MLME_CFG_AMSDU_SIZE:
321 		mlme_mgmt->generic.amsdu = mlme_cfg.value;
322 		break;
323 	case WLAN_MLME_CFG_BMISS_FIRST_BCNT:
324 		inactivity_params->bmiss_first_bcnt = mlme_cfg.value;
325 		break;
326 	case WLAN_MLME_CFG_BMISS_FINAL_BCNT:
327 		inactivity_params->bmiss_final_bcnt = mlme_cfg.value;
328 		break;
329 	case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME:
330 		inactivity_params->keepalive_min_idle_inactive_time_secs =
331 							mlme_cfg.value;
332 		is_wmi_cmd = true;
333 		break;
334 	case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME:
335 		inactivity_params->keepalive_max_idle_inactive_time_secs =
336 							mlme_cfg.value;
337 		is_wmi_cmd = true;
338 		break;
339 	case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME:
340 		inactivity_params->keepalive_max_unresponsive_time_secs =
341 							mlme_cfg.value;
342 		is_wmi_cmd = true;
343 		break;
344 	case WLAN_MLME_CFG_RATE_FLAGS:
345 		mlme_mgmt->rate_info.rate_flags = mlme_cfg.value;
346 		break;
347 	case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE:
348 		mlme_mgmt->rate_info.per_band_tx_mgmt_rate = mlme_cfg.value;
349 		break;
350 	case WLAN_MLME_CFG_MAX_RATE:
351 		mlme_mgmt->rate_info.max_rate = mlme_cfg.value;
352 		break;
353 	case WLAN_MLME_CFG_TX_MGMT_RATE:
354 		mlme_mgmt->rate_info.tx_mgmt_rate = mlme_cfg.value;
355 		break;
356 	case WLAN_MLME_CFG_TX_RTSCTS_RATE:
357 		mlme_mgmt->rate_info.rtscts_tx_rate = mlme_cfg.value;
358 		break;
359 	case WLAN_MLME_CFG_TX_CHAINMASK:
360 		mlme_mgmt->chainmask_info.tx_chainmask = mlme_cfg.value;
361 		break;
362 	case WLAN_MLME_CFG_RX_CHAINMASK:
363 		mlme_mgmt->chainmask_info.rx_chainmask = mlme_cfg.value;
364 		break;
365 	case WLAN_MLME_CFG_PKT_POWERSAVE:
366 		mlme_mgmt->powersave_info.packet_powersave = mlme_cfg.value;
367 		break;
368 	case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM:
369 		mlme_mgmt->powersave_info.max_li_of_moddtim = mlme_cfg.value;
370 		break;
371 	case WLAN_MLME_CFG_DYNDTIM_CNT:
372 		mlme_mgmt->powersave_info.dyndtim_cnt = mlme_cfg.value;
373 		break;
374 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
375 		mlme_mgmt->powersave_info.listen_interval = mlme_cfg.value;
376 		is_wmi_cmd = true;
377 		break;
378 	case WLAN_MLME_CFG_MODDTIM_CNT:
379 		mlme_mgmt->powersave_info.moddtim_cnt = mlme_cfg.value;
380 		break;
381 	case WLAN_MLME_CFG_PROFILE_IDX:
382 		mlme_mgmt->mbss_11ax.profile_idx = mlme_cfg.value;
383 		break;
384 	case WLAN_MLME_CFG_PROFILE_NUM:
385 		mlme_mgmt->mbss_11ax.profile_num = mlme_cfg.value;
386 		break;
387 	case WLAN_MLME_CFG_MBSSID_FLAGS:
388 		mlme_mgmt->mbss_11ax.mbssid_flags = mlme_cfg.value;
389 		break;
390 	case WLAN_MLME_CFG_VDEVID_TRANS:
391 		mlme_mgmt->mbss_11ax.vdevid_trans = mlme_cfg.value;
392 		break;
393 	case WLAN_MLME_CFG_SSID:
394 		if (mlme_cfg.ssid_cfg.length <= WLAN_SSID_MAX_LEN) {
395 			qdf_mem_copy(mlme_mgmt->generic.ssid,
396 				     mlme_cfg.ssid_cfg.ssid,
397 				     mlme_cfg.ssid_cfg.length);
398 			mlme_mgmt->generic.ssid_len =
399 						mlme_cfg.ssid_cfg.length;
400 		} else {
401 			mlme_mgmt->generic.ssid_len = 0;
402 		}
403 
404 		break;
405 	case WLAN_MLME_CFG_TRANS_BSSID:
406 		qdf_mem_copy(mlme_mgmt->mbss_11ax.trans_bssid,
407 			     mlme_cfg.trans_bssid, QDF_MAC_ADDR_SIZE);
408 		break;
409 	case WLAN_MLME_CFG_TYPE:
410 		mlme_mgmt->generic.type = mlme_cfg.value;
411 		break;
412 	case WLAN_MLME_CFG_SUBTYPE:
413 		mlme_mgmt->generic.subtype = mlme_cfg.value;
414 		break;
415 	case WLAN_MLME_CFG_UAPSD:
416 		mlme_proto->sta.uapsd_cfg = mlme_cfg.value;
417 		break;
418 	case WLAN_MLME_CFG_TX_ENCAP_TYPE:
419 		is_wmi_cmd = true;
420 		mlme_mgmt->generic.tx_encap_type = mlme_cfg.value;
421 		tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme,
422 						  WLAN_MLME_CFG_TX_ENCAP_TYPE,
423 						  mlme_cfg.value);
424 		break;
425 	case WLAN_MLME_CFG_RX_DECAP_TYPE:
426 		is_wmi_cmd = true;
427 		mlme_mgmt->generic.rx_decap_type = mlme_cfg.value;
428 		tgt_vdev_mgr_set_tx_rx_decap_type(vdev_mlme,
429 						  WLAN_MLME_CFG_RX_DECAP_TYPE,
430 						  mlme_cfg.value);
431 		break;
432 	case WLAN_MLME_CFG_RATEMASK_TYPE:
433 		mlme_mgmt->rate_info.type = mlme_cfg.value;
434 		break;
435 	case WLAN_MLME_CFG_RATEMASK_LOWER32:
436 		mlme_mgmt->rate_info.lower32 = mlme_cfg.value;
437 		break;
438 	case WLAN_MLME_CFG_RATEMASK_HIGHER32:
439 		mlme_mgmt->rate_info.higher32 = mlme_cfg.value;
440 		break;
441 	case WLAN_MLME_CFG_RATEMASK_LOWER32_2:
442 		mlme_mgmt->rate_info.lower32_2 = mlme_cfg.value;
443 		break;
444 	case WLAN_MLME_CFG_BCN_TX_RATE:
445 		mlme_mgmt->rate_info.bcn_tx_rate = mlme_cfg.value;
446 		break;
447 	case WLAN_MLME_CFG_BCN_TX_RATE_CODE:
448 		is_wmi_cmd = true;
449 		break;
450 	case WLAN_MLME_CFG_TX_MGMT_RATE_CODE:
451 		is_wmi_cmd = true;
452 		break;
453 	case WLAN_MLME_CFG_ENABLE_MULTI_GROUP_KEY:
454 		is_wmi_cmd = true;
455 		break;
456 	case WLAN_MLME_CFG_MAX_GROUP_KEYS:
457 		is_wmi_cmd = true;
458 		break;
459 	case WLAN_MLME_CFG_TX_STREAMS:
460 		mlme_mgmt->chainmask_info.num_tx_chain = mlme_cfg.value;
461 		break;
462 	case WLAN_MLME_CFG_RX_STREAMS:
463 		mlme_mgmt->chainmask_info.num_rx_chain = mlme_cfg.value;
464 		break;
465 	case WLAN_MLME_CFG_ENABLE_DISABLE_RTT_RESPONDER_ROLE:
466 		is_wmi_cmd = true;
467 		break;
468 	case WLAN_MLME_CFG_ENABLE_DISABLE_RTT_INITIATOR_ROLE:
469 		is_wmi_cmd = true;
470 		break;
471 	default:
472 		break;
473 	}
474 
475 	if (is_wmi_cmd)
476 		ret = tgt_vdev_mgr_vdev_set_param_wrapper(vdev_mlme, param_id,
477 							  mlme_cfg);
478 
479 	return ret;
480 }
481 
482 qdf_export_symbol(wlan_util_vdev_mlme_set_param);
483 
484 void wlan_util_vdev_mlme_get_param(struct vdev_mlme_obj *vdev_mlme,
485 				   enum wlan_mlme_cfg_id param_id,
486 				   uint32_t *value)
487 {
488 	struct vdev_mlme_proto *mlme_proto;
489 	struct vdev_mlme_mgmt *mlme_mgmt;
490 	struct vdev_mlme_inactivity_params *inactivity_params;
491 
492 	if (!vdev_mlme) {
493 		mlme_err("VDEV MLME is NULL");
494 		return;
495 	}
496 	mlme_proto = &vdev_mlme->proto;
497 	mlme_mgmt = &vdev_mlme->mgmt;
498 	inactivity_params = &mlme_mgmt->inactivity_params;
499 
500 	switch (param_id) {
501 	case WLAN_MLME_CFG_DTIM_PERIOD:
502 		*value = mlme_proto->generic.dtim_period;
503 		break;
504 	case WLAN_MLME_CFG_SLOT_TIME:
505 		*value = mlme_proto->generic.slot_time;
506 		break;
507 	case WLAN_MLME_CFG_PROTECTION_MODE:
508 		*value = mlme_proto->generic.protection_mode;
509 		break;
510 	case WLAN_MLME_CFG_BEACON_INTERVAL:
511 		*value = mlme_proto->generic.beacon_interval;
512 		break;
513 	case WLAN_MLME_CFG_LDPC:
514 		*value = mlme_proto->generic.ldpc;
515 		break;
516 	case WLAN_MLME_CFG_NSS:
517 		*value = mlme_proto->generic.nss;
518 		break;
519 	case WLAN_MLME_CFG_ASSOC_ID:
520 		*value = mlme_proto->sta.assoc_id;
521 		break;
522 	case WLAN_MLME_CFG_VHT_CAPS:
523 		*value = mlme_proto->vht_info.caps;
524 		break;
525 	case WLAN_MLME_CFG_SUBFER:
526 		*value = mlme_proto->vht_info.subfer;
527 		break;
528 	case WLAN_MLME_CFG_MUBFER:
529 		*value = mlme_proto->vht_info.mubfer;
530 		break;
531 	case WLAN_MLME_CFG_SUBFEE:
532 		*value = mlme_proto->vht_info.subfee;
533 		break;
534 	case WLAN_MLME_CFG_MUBFEE:
535 		*value = mlme_proto->vht_info.mubfee;
536 		break;
537 	case WLAN_MLME_CFG_IMLICIT_BF:
538 		*value = mlme_proto->vht_info.implicit_bf;
539 		break;
540 	case WLAN_MLME_CFG_SOUNDING_DIM:
541 		*value = mlme_proto->vht_info.sounding_dimension;
542 		break;
543 	case WLAN_MLME_CFG_BFEE_STS_CAP:
544 		*value = mlme_proto->vht_info.bfee_sts_cap;
545 		break;
546 	case WLAN_MLME_CFG_HT_CAPS:
547 		*value = mlme_proto->ht_info.ht_caps;
548 		break;
549 	case WLAN_MLME_CFG_HE_OPS:
550 		*value = mlme_proto->he_ops_info.he_ops;
551 		break;
552 #ifdef WLAN_FEATURE_11BE
553 	case WLAN_MLME_CFG_EHT_OPS:
554 		*value = mlme_proto->eht_ops_info.eht_ops;
555 		break;
556 #endif
557 	case WLAN_MLME_CFG_RTS_THRESHOLD:
558 		*value = mlme_mgmt->generic.rts_threshold;
559 		break;
560 	case WLAN_MLME_CFG_FRAG_THRESHOLD:
561 		*value = mlme_mgmt->generic.frag_threshold;
562 		break;
563 	case WLAN_MLME_CFG_PROBE_DELAY:
564 		*value = mlme_mgmt->generic.probe_delay;
565 		break;
566 	case WLAN_MLME_CFG_REPEAT_PROBE_TIME:
567 		*value = mlme_mgmt->generic.repeat_probe_time;
568 		break;
569 	case WLAN_MLME_CFG_DROP_UNENCRY:
570 		*value = mlme_mgmt->generic.drop_unencry;
571 		break;
572 	case WLAN_MLME_CFG_TX_PWR_LIMIT:
573 		*value = mlme_mgmt->generic.tx_pwrlimit;
574 		break;
575 	case WLAN_MLME_CFG_TX_POWER:
576 		*value = mlme_mgmt->generic.tx_power;
577 		break;
578 	case WLAN_MLME_CFG_AMPDU:
579 		*value = mlme_mgmt->generic.ampdu;
580 		break;
581 	case WLAN_MLME_CFG_AMSDU:
582 		*value = mlme_mgmt->generic.amsdu;
583 		break;
584 	case WLAN_MLME_CFG_SSID_LEN:
585 		*value = mlme_mgmt->generic.ssid_len;
586 		break;
587 	case WLAN_MLME_CFG_BMISS_FIRST_BCNT:
588 		*value = inactivity_params->bmiss_first_bcnt;
589 		break;
590 	case WLAN_MLME_CFG_BMISS_FINAL_BCNT:
591 		*value = inactivity_params->bmiss_final_bcnt;
592 		break;
593 	case WLAN_MLME_CFG_MIN_IDLE_INACTIVE_TIME:
594 		*value =
595 		      inactivity_params->keepalive_min_idle_inactive_time_secs;
596 		break;
597 	case WLAN_MLME_CFG_MAX_IDLE_INACTIVE_TIME:
598 		*value =
599 		      inactivity_params->keepalive_max_idle_inactive_time_secs;
600 		break;
601 	case WLAN_MLME_CFG_MAX_UNRESPONSIVE_INACTIVE_TIME:
602 		*value =
603 		      inactivity_params->keepalive_max_unresponsive_time_secs;
604 		break;
605 	case WLAN_MLME_CFG_RATE_FLAGS:
606 		*value = mlme_mgmt->rate_info.rate_flags;
607 		break;
608 	case WLAN_MLME_CFG_PER_BAND_TX_MGMT_RATE:
609 		*value = mlme_mgmt->rate_info.per_band_tx_mgmt_rate;
610 		break;
611 	case WLAN_MLME_CFG_MAX_RATE:
612 		*value = mlme_mgmt->rate_info.max_rate;
613 		break;
614 	case WLAN_MLME_CFG_TX_MGMT_RATE:
615 		*value = mlme_mgmt->rate_info.tx_mgmt_rate;
616 		break;
617 	case WLAN_MLME_CFG_TX_RTSCTS_RATE:
618 		*value = mlme_mgmt->rate_info.rtscts_tx_rate;
619 		break;
620 	case WLAN_MLME_CFG_TX_CHAINMASK:
621 		*value = mlme_mgmt->chainmask_info.tx_chainmask;
622 		break;
623 	case WLAN_MLME_CFG_RX_CHAINMASK:
624 		*value = mlme_mgmt->chainmask_info.rx_chainmask;
625 		break;
626 	case WLAN_MLME_CFG_PKT_POWERSAVE:
627 		*value = mlme_mgmt->powersave_info.packet_powersave;
628 		break;
629 	case WLAN_MLME_CFG_MAX_LI_OF_MODDTIM:
630 		*value = mlme_mgmt->powersave_info.max_li_of_moddtim;
631 		break;
632 	case WLAN_MLME_CFG_DYNDTIM_CNT:
633 		*value = mlme_mgmt->powersave_info.dyndtim_cnt;
634 		break;
635 	case WLAN_MLME_CFG_LISTEN_INTERVAL:
636 		*value = mlme_mgmt->powersave_info.listen_interval;
637 		break;
638 	case WLAN_MLME_CFG_MODDTIM_CNT:
639 		*value = mlme_mgmt->powersave_info.moddtim_cnt;
640 		break;
641 	case WLAN_MLME_CFG_PROFILE_IDX:
642 		*value = mlme_mgmt->mbss_11ax.profile_idx;
643 		break;
644 	case WLAN_MLME_CFG_PROFILE_NUM:
645 		*value = mlme_mgmt->mbss_11ax.profile_num;
646 		break;
647 	case WLAN_MLME_CFG_MBSSID_FLAGS:
648 		*value = mlme_mgmt->mbss_11ax.mbssid_flags;
649 		break;
650 	case WLAN_MLME_CFG_VDEVID_TRANS:
651 		*value = mlme_mgmt->mbss_11ax.vdevid_trans;
652 		break;
653 	case WLAN_MLME_CFG_BCN_TX_RATE:
654 		*value = mlme_mgmt->rate_info.bcn_tx_rate;
655 		break;
656 	case WLAN_MLME_CFG_TX_STREAMS:
657 		*value = mlme_mgmt->chainmask_info.num_tx_chain;
658 		break;
659 	case WLAN_MLME_CFG_RX_STREAMS:
660 		*value = mlme_mgmt->chainmask_info.num_rx_chain;
661 		break;
662 	default:
663 		break;
664 	}
665 }
666 
667 qdf_export_symbol(wlan_util_vdev_mlme_get_param);
668 
669 void wlan_util_vdev_get_param(struct wlan_objmgr_vdev *vdev,
670 			      enum wlan_mlme_cfg_id param_id,
671 			      uint32_t *value)
672 {
673 	ucfg_wlan_vdev_mgr_get_param(vdev, param_id, value);
674 }
675 
676 qdf_export_symbol(wlan_util_vdev_get_param);
677