xref: /wlan-dirver/qca-wifi-host-cmn/umac/mlme/vdev_mgr/core/src/vdev_mgr_ops.c (revision 6d768494e5ce14eb1603a695c86739d12ecc6ec2)
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: vdev_mgr_ops.c
21  *
22  * This file provide API definitions for filling data structures
23  * and sending vdev mgmt commands to target_if/mlme
24  */
25 #include "vdev_mgr_ops.h"
26 #include <wlan_objmgr_vdev_obj.h>
27 #include <wlan_vdev_mlme_api.h>
28 #include <wlan_mlme_dbg.h>
29 #include <wlan_vdev_mgr_tgt_if_tx_api.h>
30 #include <target_if.h>
31 #include <init_deinit_lmac.h>
32 #include <wlan_lmac_if_api.h>
33 #include <wlan_reg_services_api.h>
34 #include <wlan_dfs_tgt_api.h>
35 #include <wlan_dfs_utils_api.h>
36 #include <wlan_vdev_mgr_ucfg_api.h>
37 #include <qdf_module.h>
38 
39 static QDF_STATUS vdev_mgr_create_param_update(
40 					struct vdev_mlme_obj *mlme_obj,
41 					struct vdev_create_params *param)
42 {
43 	struct wlan_objmgr_pdev *pdev;
44 	struct wlan_objmgr_vdev *vdev;
45 	struct vdev_mlme_mbss_11ax *mbss;
46 
47 	vdev = mlme_obj->vdev;
48 	if (!vdev) {
49 		mlme_err("VDEV is NULL");
50 		return QDF_STATUS_E_INVAL;
51 	}
52 
53 	pdev = wlan_vdev_get_pdev(vdev);
54 	if (!pdev) {
55 		mlme_err("PDEV is NULL");
56 		return QDF_STATUS_E_INVAL;
57 	}
58 
59 	mbss = &mlme_obj->mgmt.mbss_11ax;
60 	param->pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
61 	param->vdev_id = wlan_vdev_get_id(vdev);
62 	param->nss_2g = mlme_obj->proto.generic.nss_2g;
63 	param->nss_5g = mlme_obj->proto.generic.nss_5g;
64 	param->type = mlme_obj->mgmt.generic.type;
65 	param->subtype = mlme_obj->mgmt.generic.subtype;
66 	param->mbssid_flags = mbss->mbssid_flags;
67 	param->vdevid_trans = mbss->vdevid_trans;
68 
69 	return QDF_STATUS_SUCCESS;
70 }
71 
72 QDF_STATUS vdev_mgr_create_send(struct vdev_mlme_obj *mlme_obj)
73 {
74 	QDF_STATUS status;
75 	struct vdev_create_params param = {0};
76 
77 	if (!mlme_obj) {
78 		mlme_err("VDEV_MLME is NULL");
79 		return QDF_STATUS_E_INVAL;
80 	}
81 
82 	status = vdev_mgr_create_param_update(mlme_obj, &param);
83 	if (QDF_IS_STATUS_ERROR(status)) {
84 		mlme_err("Param Update Error: %d", status);
85 		return status;
86 	}
87 
88 	status = tgt_vdev_mgr_create_send(mlme_obj, &param);
89 
90 	return status;
91 }
92 
93 #ifdef QCA_MCL_DFS_SUPPORT
94 static bool vdev_mgr_is_opmode_sap_or_p2p_go(enum QDF_OPMODE op_mode)
95 {
96 	return (op_mode == QDF_SAP_MODE || op_mode == QDF_P2P_GO_MODE);
97 }
98 
99 static bool vdev_mgr_is_49G_5G_6G_chan_freq(uint16_t chan_freq)
100 {
101 	return WLAN_REG_IS_5GHZ_CH_FREQ(chan_freq) ||
102 		WLAN_REG_IS_49GHZ_FREQ(chan_freq) ||
103 		WLAN_REG_IS_6GHZ_CHAN_FREQ(chan_freq);
104 }
105 #else
106 static inline bool vdev_mgr_is_opmode_sap_or_p2p_go(enum QDF_OPMODE op_mode)
107 {
108 	return true;
109 }
110 
111 static inline bool vdev_mgr_is_49G_5G_6G_chan_freq(uint16_t chan_freq)
112 {
113 	return true;
114 }
115 #endif
116 
117 static QDF_STATUS vdev_mgr_start_param_update(
118 					struct vdev_mlme_obj *mlme_obj,
119 					struct vdev_start_params *param)
120 {
121 	struct wlan_channel *des_chan;
122 	uint32_t dfs_reg;
123 	bool set_agile = false, dfs_set_cfreq2 = false;
124 	struct wlan_objmgr_vdev *vdev;
125 	struct wlan_objmgr_pdev *pdev;
126 	enum QDF_OPMODE op_mode;
127 	bool is_dfs_chan_updated = false;
128 
129 	vdev = mlme_obj->vdev;
130 	if (!vdev) {
131 		mlme_err("VDEV is NULL");
132 		return QDF_STATUS_E_INVAL;
133 	}
134 
135 	pdev = wlan_vdev_get_pdev(vdev);
136 	if (!pdev) {
137 		mlme_err("PDEV is NULL");
138 		return QDF_STATUS_E_INVAL;
139 	}
140 
141 	if (wlan_objmgr_pdev_try_get_ref(pdev, WLAN_MLME_SB_ID) !=
142 							QDF_STATUS_SUCCESS) {
143 		mlme_err("Failed to get pdev reference");
144 		return QDF_STATUS_E_FAILURE;
145 	}
146 
147 	des_chan = wlan_vdev_mlme_get_des_chan(vdev);
148 	param->vdev_id = wlan_vdev_get_id(vdev);
149 
150 	op_mode = wlan_vdev_mlme_get_opmode(vdev);
151 	if (vdev_mgr_is_opmode_sap_or_p2p_go(op_mode) &&
152 	    vdev_mgr_is_49G_5G_6G_chan_freq(des_chan->ch_freq))
153 		tgt_dfs_set_current_channel_for_freq(pdev, des_chan->ch_freq,
154 						     des_chan->ch_flags,
155 						     des_chan->ch_flagext,
156 						     des_chan->ch_ieee,
157 						     des_chan->ch_freq_seg1,
158 						     des_chan->ch_freq_seg2,
159 						     des_chan->ch_cfreq1,
160 						     des_chan->ch_cfreq2,
161 						     &is_dfs_chan_updated);
162 
163 	/* The RCAC state machine should be stopped only once for the channel
164 	 * change. If  the same channel is being sent to the FW then do
165 	 * not send unnecessary STOP to the state machine.
166 	 */
167 	if (is_dfs_chan_updated)
168 		utils_dfs_rcac_sm_deliver_evt(pdev,
169 					      DFS_RCAC_SM_EV_RCAC_STOP);
170 
171 	param->beacon_interval = mlme_obj->proto.generic.beacon_interval;
172 	param->dtim_period = mlme_obj->proto.generic.dtim_period;
173 	param->disable_hw_ack = mlme_obj->mgmt.generic.disable_hw_ack;
174 	param->preferred_rx_streams =
175 		mlme_obj->mgmt.chainmask_info.num_rx_chain;
176 	param->preferred_tx_streams =
177 		mlme_obj->mgmt.chainmask_info.num_tx_chain;
178 
179 	wlan_reg_get_dfs_region(pdev, &dfs_reg);
180 	param->regdomain = dfs_reg;
181 	param->he_ops = mlme_obj->proto.he_ops_info.he_ops;
182 
183 	param->channel.chan_id = des_chan->ch_ieee;
184 	param->channel.pwr = mlme_obj->mgmt.generic.tx_power;
185 	param->channel.mhz = des_chan->ch_freq;
186 	param->channel.half_rate = mlme_obj->mgmt.rate_info.half_rate;
187 	param->channel.quarter_rate = mlme_obj->mgmt.rate_info.quarter_rate;
188 	param->channel.dfs_set = wlan_reg_is_dfs_for_freq(pdev,
189 							  des_chan->ch_freq);
190 	param->channel.dfs_set_cfreq2 = utils_is_dfs_cfreq2_ch(pdev);
191 	param->channel.is_chan_passive =
192 		utils_is_dfs_chan_for_freq(pdev, param->channel.mhz);
193 	param->channel.allow_ht = mlme_obj->proto.ht_info.allow_ht;
194 	param->channel.allow_vht = mlme_obj->proto.vht_info.allow_vht;
195 	param->channel.phy_mode = mlme_obj->mgmt.generic.phy_mode;
196 	param->channel.cfreq1 = des_chan->ch_cfreq1;
197 	param->channel.cfreq2 = des_chan->ch_cfreq2;
198 	param->channel.maxpower = mlme_obj->mgmt.generic.maxpower;
199 	param->channel.minpower = mlme_obj->mgmt.generic.minpower;
200 	param->channel.maxregpower = mlme_obj->mgmt.generic.maxregpower;
201 	param->channel.antennamax = mlme_obj->mgmt.generic.antennamax;
202 	param->channel.reg_class_id = mlme_obj->mgmt.generic.reg_class_id;
203 	param->bcn_tx_rate_code = vdev_mgr_fetch_ratecode(mlme_obj);
204 	param->ldpc_rx_enabled = mlme_obj->proto.generic.ldpc;
205 	if (mlme_obj->mgmt.generic.type == WLAN_VDEV_MLME_TYPE_AP) {
206 		param->hidden_ssid = mlme_obj->mgmt.ap.hidden_ssid;
207 		param->cac_duration_ms = mlme_obj->mgmt.ap.cac_duration_ms;
208 	}
209 	wlan_vdev_mlme_get_ssid(vdev, param->ssid.mac_ssid,
210 				&param->ssid.length);
211 
212 	if (des_chan->ch_phymode == WLAN_PHYMODE_11AC_VHT80 ||
213 	    des_chan->ch_phymode == WLAN_PHYMODE_11AXA_HE80) {
214 		tgt_dfs_find_vht80_precac_chan_freq(pdev,
215 						    des_chan->ch_phymode,
216 						    des_chan->ch_freq_seg1,
217 						    &param->channel.cfreq1,
218 						    &param->channel.cfreq2,
219 						    &param->channel.phy_mode,
220 						    &dfs_set_cfreq2,
221 						    &set_agile);
222 		param->channel.dfs_set_cfreq2 = dfs_set_cfreq2;
223 		param->channel.set_agile = set_agile;
224 	}
225 
226 	wlan_objmgr_pdev_release_ref(pdev, WLAN_MLME_SB_ID);
227 	return QDF_STATUS_SUCCESS;
228 }
229 
230 QDF_STATUS vdev_mgr_start_send(
231 			struct vdev_mlme_obj *mlme_obj,
232 			bool restart)
233 {
234 	QDF_STATUS status;
235 	struct vdev_start_params param = {0};
236 
237 	if (!mlme_obj) {
238 		mlme_err("VDEV_MLME is NULL");
239 		return QDF_STATUS_E_INVAL;
240 	}
241 
242 	status = vdev_mgr_start_param_update(mlme_obj, &param);
243 	if (QDF_IS_STATUS_ERROR(status)) {
244 		mlme_err("Param Update Error: %d", status);
245 		return status;
246 	}
247 
248 	param.is_restart = restart;
249 	status = tgt_vdev_mgr_start_send(mlme_obj, &param);
250 
251 	return status;
252 }
253 
254 static QDF_STATUS vdev_mgr_delete_param_update(
255 					struct vdev_mlme_obj *mlme_obj,
256 					struct vdev_delete_params *param)
257 {
258 	struct wlan_objmgr_vdev *vdev;
259 
260 	vdev = mlme_obj->vdev;
261 	if (!vdev) {
262 		mlme_err("VDEV is NULL");
263 		return QDF_STATUS_E_INVAL;
264 	}
265 
266 	param->vdev_id = wlan_vdev_get_id(vdev);
267 	return QDF_STATUS_SUCCESS;
268 }
269 
270 QDF_STATUS vdev_mgr_delete_send(struct vdev_mlme_obj *mlme_obj)
271 {
272 	QDF_STATUS status;
273 	struct vdev_delete_params param;
274 
275 	if (!mlme_obj) {
276 		mlme_err("VDEV_MLME is NULL");
277 		return QDF_STATUS_E_INVAL;
278 	}
279 
280 	status = vdev_mgr_delete_param_update(mlme_obj, &param);
281 	if (QDF_IS_STATUS_ERROR(status)) {
282 		mlme_err("Param Update Error: %d", status);
283 		return status;
284 	}
285 
286 	status = tgt_vdev_mgr_delete_send(mlme_obj, &param);
287 
288 	return status;
289 }
290 
291 static QDF_STATUS vdev_mgr_stop_param_update(
292 				struct vdev_mlme_obj *mlme_obj,
293 				struct vdev_stop_params *param)
294 {
295 	struct wlan_objmgr_vdev *vdev;
296 
297 	vdev = mlme_obj->vdev;
298 	if (!vdev) {
299 		mlme_err("VDEV is NULL");
300 		return QDF_STATUS_E_INVAL;
301 	}
302 
303 	param->vdev_id = wlan_vdev_get_id(vdev);
304 
305 	return QDF_STATUS_SUCCESS;
306 }
307 
308 QDF_STATUS vdev_mgr_stop_send(struct vdev_mlme_obj *mlme_obj)
309 {
310 	QDF_STATUS status;
311 	struct vdev_stop_params param = {0};
312 
313 	if (!mlme_obj) {
314 		mlme_err("VDEV_MLME is NULL");
315 		return QDF_STATUS_E_INVAL;
316 	}
317 
318 	status = vdev_mgr_stop_param_update(mlme_obj, &param);
319 	if (QDF_IS_STATUS_ERROR(status)) {
320 		mlme_err("Param Update Error: %d", status);
321 		return status;
322 	}
323 
324 	status = tgt_vdev_mgr_stop_send(mlme_obj, &param);
325 
326 	return status;
327 }
328 
329 static QDF_STATUS vdev_mgr_bcn_tmpl_param_update(
330 				struct vdev_mlme_obj *mlme_obj,
331 				struct beacon_tmpl_params *param)
332 {
333 	return QDF_STATUS_SUCCESS;
334 }
335 
336 static QDF_STATUS vdev_mgr_sta_ps_param_update(
337 				struct vdev_mlme_obj *mlme_obj,
338 				struct sta_ps_params *param)
339 {
340 	struct wlan_objmgr_vdev *vdev;
341 
342 	vdev = mlme_obj->vdev;
343 	param->vdev_id = wlan_vdev_get_id(vdev);
344 	param->param_id = WLAN_MLME_CFG_UAPSD;
345 	param->value = mlme_obj->proto.sta.uapsd_cfg;
346 	return QDF_STATUS_SUCCESS;
347 }
348 
349 static QDF_STATUS vdev_mgr_up_param_update(
350 				struct vdev_mlme_obj *mlme_obj,
351 				struct vdev_up_params *param)
352 {
353 	struct vdev_mlme_mbss_11ax *mbss;
354 	struct wlan_objmgr_vdev *vdev;
355 
356 	vdev = mlme_obj->vdev;
357 	param->vdev_id = wlan_vdev_get_id(vdev);
358 	param->assoc_id = mlme_obj->proto.sta.assoc_id;
359 	mbss = &mlme_obj->mgmt.mbss_11ax;
360 	if (mbss->profile_idx) {
361 		param->profile_idx = mbss->profile_idx;
362 		param->profile_num = mbss->profile_num;
363 		qdf_mem_copy(param->trans_bssid, mbss->trans_bssid,
364 			     QDF_MAC_ADDR_SIZE);
365 	}
366 
367 	return QDF_STATUS_SUCCESS;
368 }
369 
370 QDF_STATUS vdev_mgr_up_send(struct vdev_mlme_obj *mlme_obj)
371 {
372 	QDF_STATUS status;
373 	struct vdev_up_params param = {0};
374 	struct sta_ps_params ps_param = {0};
375 	struct beacon_tmpl_params bcn_tmpl_param = {0};
376 	enum QDF_OPMODE opmode;
377 	struct wlan_objmgr_vdev *vdev;
378 	struct config_fils_params fils_param = {0};
379 	uint8_t is_6g_sap_fd_enabled;
380 
381 	if (!mlme_obj) {
382 		mlme_err("VDEV_MLME is NULL");
383 		return QDF_STATUS_E_INVAL;
384 	}
385 
386 	vdev = mlme_obj->vdev;
387 	if (!vdev) {
388 		mlme_err("VDEV is NULL");
389 		return QDF_STATUS_E_INVAL;
390 	}
391 
392 	vdev_mgr_up_param_update(mlme_obj, &param);
393 	vdev_mgr_bcn_tmpl_param_update(mlme_obj, &bcn_tmpl_param);
394 
395 	opmode = wlan_vdev_mlme_get_opmode(vdev);
396 	if (opmode == QDF_STA_MODE) {
397 		vdev_mgr_sta_ps_param_update(mlme_obj, &ps_param);
398 		status = tgt_vdev_mgr_sta_ps_param_send(mlme_obj, &ps_param);
399 
400 	}
401 
402 	status = tgt_vdev_mgr_beacon_tmpl_send(mlme_obj, &bcn_tmpl_param);
403 	if (QDF_IS_STATUS_ERROR(status))
404 		return status;
405 
406 	status = tgt_vdev_mgr_up_send(mlme_obj, &param);
407 	if (QDF_IS_STATUS_ERROR(status))
408 		return status;
409 
410 	is_6g_sap_fd_enabled = wlan_vdev_mlme_feat_ext_cap_get(vdev,
411 					WLAN_VDEV_FEXT_FILS_DISC_6G_SAP);
412 	mlme_debug("SAP FD enabled %d", is_6g_sap_fd_enabled);
413 	if (opmode == QDF_SAP_MODE && mlme_obj->vdev->vdev_mlme.des_chan &&
414 	    WLAN_REG_IS_6GHZ_CHAN_FREQ(
415 			mlme_obj->vdev->vdev_mlme.des_chan->ch_freq)) {
416 		fils_param.vdev_id = wlan_vdev_get_id(mlme_obj->vdev);
417 		if (is_6g_sap_fd_enabled) {
418 			fils_param.fd_period = DEFAULT_FILS_DISCOVERY_PERIOD;
419 		} else {
420 			fils_param.send_prb_rsp_frame = true;
421 			fils_param.fd_period = DEFAULT_PROBE_RESP_PERIOD;
422 		}
423 		status = tgt_vdev_mgr_fils_enable_send(mlme_obj,
424 						       &fils_param);
425 	}
426 
427 	return status;
428 }
429 
430 static QDF_STATUS vdev_mgr_down_param_update(
431 					struct vdev_mlme_obj *mlme_obj,
432 					struct vdev_down_params *param)
433 {
434 	struct wlan_objmgr_vdev *vdev;
435 
436 	vdev = mlme_obj->vdev;
437 	if (!vdev) {
438 		mlme_err("VDEV is NULL");
439 		return QDF_STATUS_E_INVAL;
440 	}
441 
442 	param->vdev_id = wlan_vdev_get_id(vdev);
443 
444 	return QDF_STATUS_SUCCESS;
445 }
446 
447 QDF_STATUS vdev_mgr_down_send(struct vdev_mlme_obj *mlme_obj)
448 {
449 	QDF_STATUS status;
450 	struct vdev_down_params param = {0};
451 
452 	if (!mlme_obj) {
453 		mlme_err("VDEV_MLME is NULL");
454 		return QDF_STATUS_E_INVAL;
455 	}
456 
457 	status = vdev_mgr_down_param_update(mlme_obj, &param);
458 	if (QDF_IS_STATUS_ERROR(status)) {
459 		mlme_err("Param Update Error: %d", status);
460 		return status;
461 	}
462 
463 	status = tgt_vdev_mgr_down_send(mlme_obj, &param);
464 
465 	return status;
466 }
467 
468 static QDF_STATUS vdev_mgr_peer_flush_tids_param_update(
469 					struct vdev_mlme_obj *mlme_obj,
470 					struct peer_flush_params *param,
471 					uint8_t *mac,
472 					uint32_t peer_tid_bitmap)
473 {
474 	struct wlan_objmgr_vdev *vdev;
475 
476 	vdev = mlme_obj->vdev;
477 	if (!vdev) {
478 		mlme_err("VDEV is NULL");
479 		return QDF_STATUS_E_INVAL;
480 	}
481 
482 	param->vdev_id = wlan_vdev_get_id(vdev);
483 	param->peer_tid_bitmap = peer_tid_bitmap;
484 	qdf_mem_copy(param->peer_mac, mac, QDF_MAC_ADDR_SIZE);
485 	return QDF_STATUS_SUCCESS;
486 }
487 
488 QDF_STATUS vdev_mgr_peer_flush_tids_send(struct vdev_mlme_obj *mlme_obj,
489 					 uint8_t *mac,
490 					 uint32_t peer_tid_bitmap)
491 {
492 	QDF_STATUS status;
493 	struct peer_flush_params param = {0};
494 
495 	if (!mlme_obj || !mac) {
496 		mlme_err("Invalid input");
497 		return QDF_STATUS_E_INVAL;
498 	}
499 
500 	status = vdev_mgr_peer_flush_tids_param_update(mlme_obj, &param,
501 						       mac, peer_tid_bitmap);
502 	if (QDF_IS_STATUS_ERROR(status)) {
503 		mlme_err("Param Update Error: %d", status);
504 		return status;
505 	}
506 
507 	status = tgt_vdev_mgr_peer_flush_tids_send(mlme_obj, &param);
508 
509 	return status;
510 }
511 
512 static QDF_STATUS vdev_mgr_multiple_restart_param_update(
513 				struct wlan_objmgr_pdev *pdev,
514 				struct mlme_channel_param *chan,
515 				uint32_t disable_hw_ack,
516 				uint32_t *vdev_ids,
517 				uint32_t num_vdevs,
518 				struct vdev_mlme_mvr_param *mvr_param,
519 				struct multiple_vdev_restart_params *param)
520 {
521 	param->pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
522 	param->requestor_id = MULTIPLE_VDEV_RESTART_REQ_ID;
523 	param->disable_hw_ack = disable_hw_ack;
524 	param->cac_duration_ms = WLAN_DFS_WAIT_MS;
525 	param->num_vdevs = num_vdevs;
526 
527 	qdf_mem_copy(param->vdev_ids, vdev_ids,
528 		     sizeof(uint32_t) * (param->num_vdevs));
529 	qdf_mem_copy(&param->ch_param, chan,
530 		     sizeof(struct mlme_channel_param));
531 	qdf_mem_copy(param->mvr_param, mvr_param,
532 		     sizeof(*mvr_param) * (param->num_vdevs));
533 
534 	return QDF_STATUS_SUCCESS;
535 }
536 
537 QDF_STATUS vdev_mgr_multiple_restart_send(struct wlan_objmgr_pdev *pdev,
538 					  struct mlme_channel_param *chan,
539 					  uint32_t disable_hw_ack,
540 					  uint32_t *vdev_ids,
541 					  uint32_t num_vdevs,
542 					  struct vdev_mlme_mvr_param *mvr_param)
543 {
544 	struct multiple_vdev_restart_params param = {0};
545 
546 	vdev_mgr_multiple_restart_param_update(pdev, chan,
547 					       disable_hw_ack,
548 					       vdev_ids, num_vdevs,
549 					       mvr_param, &param);
550 
551 	return tgt_vdev_mgr_multiple_vdev_restart_send(pdev, &param);
552 }
553 
554 qdf_export_symbol(vdev_mgr_multiple_restart_send);
555 
556 static QDF_STATUS vdev_mgr_set_custom_aggr_size_param_update(
557 				struct vdev_mlme_obj *mlme_obj,
558 				struct set_custom_aggr_size_params *param,
559 				bool is_amsdu)
560 {
561 	struct wlan_objmgr_vdev *vdev;
562 
563 	vdev = mlme_obj->vdev;
564 	if (!vdev) {
565 		mlme_err("VDEV is NULL");
566 		return QDF_STATUS_E_INVAL;
567 	}
568 
569 	param->aggr_type = is_amsdu ? WLAN_MLME_CUSTOM_AGGR_TYPE_AMSDU
570 				    : WLAN_MLME_CUSTOM_AGGR_TYPE_AMPDU;
571 	/*
572 	 * We are only setting TX params, therefore
573 	 * we are disabling rx_aggr_size
574 	 */
575 	param->rx_aggr_size_disable = true;
576 	param->tx_aggr_size = is_amsdu ? mlme_obj->mgmt.generic.amsdu
577 				       : mlme_obj->mgmt.generic.ampdu;
578 	param->vdev_id = wlan_vdev_get_id(vdev);
579 
580 	return QDF_STATUS_SUCCESS;
581 }
582 
583 QDF_STATUS vdev_mgr_set_custom_aggr_size_send(
584 				struct vdev_mlme_obj *vdev_mlme,
585 				bool is_amsdu)
586 {
587 	QDF_STATUS status;
588 	struct set_custom_aggr_size_params param = {0};
589 
590 	status = vdev_mgr_set_custom_aggr_size_param_update(vdev_mlme,
591 							    &param, is_amsdu);
592 	if (QDF_IS_STATUS_ERROR(status)) {
593 		mlme_err("Param Update Error: %d", status);
594 		return status;
595 	}
596 
597 	return tgt_vdev_mgr_set_custom_aggr_size_send(vdev_mlme, &param);
598 }
599 
600 static QDF_STATUS vdev_mgr_peer_delete_all_param_update(
601 				struct vdev_mlme_obj *mlme_obj,
602 				struct peer_delete_all_params *param)
603 {
604 	struct wlan_objmgr_vdev *vdev;
605 
606 	vdev = mlme_obj->vdev;
607 	if (!vdev) {
608 		mlme_err("VDEV is NULL");
609 		return QDF_STATUS_E_INVAL;
610 	}
611 
612 	param->vdev_id = wlan_vdev_get_id(vdev);
613 	return QDF_STATUS_SUCCESS;
614 }
615 
616 QDF_STATUS vdev_mgr_peer_delete_all_send(struct vdev_mlme_obj *mlme_obj)
617 {
618 	QDF_STATUS status;
619 	struct peer_delete_all_params param = {0};
620 
621 	if (!mlme_obj) {
622 		mlme_err("Invalid input");
623 		return QDF_STATUS_E_INVAL;
624 	}
625 
626 	status = vdev_mgr_peer_delete_all_param_update(mlme_obj, &param);
627 	if (QDF_IS_STATUS_ERROR(status)) {
628 		mlme_err("Param Update Error: %d", status);
629 		return status;
630 	}
631 
632 	status = tgt_vdev_mgr_peer_delete_all_send(mlme_obj, &param);
633 
634 	return status;
635 }
636 
637