xref: /wlan-dirver/qcacld-3.0/components/tdls/dispatcher/src/wlan_tdls_tgt_api.c (revision 9e24d820d4aca161503ce0168be643067ae72530)
192728a07SLinux Build Service Account /*
22281c2d6SAbhishek Singh  * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
3*9e24d820SPragaspathi Thilagaraj  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
492728a07SLinux Build Service Account  *
592728a07SLinux Build Service Account  * Permission to use, copy, modify, and/or distribute this software for
692728a07SLinux Build Service Account  * any purpose with or without fee is hereby granted, provided that the
792728a07SLinux Build Service Account  * above copyright notice and this permission notice appear in all
892728a07SLinux Build Service Account  * copies.
992728a07SLinux Build Service Account  *
1092728a07SLinux Build Service Account  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
1192728a07SLinux Build Service Account  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
1292728a07SLinux Build Service Account  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
1392728a07SLinux Build Service Account  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
1492728a07SLinux Build Service Account  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
1592728a07SLinux Build Service Account  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1692728a07SLinux Build Service Account  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1792728a07SLinux Build Service Account  * PERFORMANCE OF THIS SOFTWARE.
1892728a07SLinux Build Service Account  */
1992728a07SLinux Build Service Account 
2092728a07SLinux Build Service Account /**
2192728a07SLinux Build Service Account  * DOC: wlan_tdls_tgt_api.c
2292728a07SLinux Build Service Account  *
2392728a07SLinux Build Service Account  * TDLS south bound interface definitions
2492728a07SLinux Build Service Account  */
2592728a07SLinux Build Service Account 
2692728a07SLinux Build Service Account #include "qdf_status.h"
2792728a07SLinux Build Service Account #include <wlan_tdls_tgt_api.h>
2892728a07SLinux Build Service Account #include "../../core/src/wlan_tdls_main.h"
2992728a07SLinux Build Service Account #include "../../core/src/wlan_tdls_cmds_process.h"
3092728a07SLinux Build Service Account #include "../../core/src/wlan_tdls_mgmt.h"
3192728a07SLinux Build Service Account 
3292728a07SLinux Build Service Account static inline struct wlan_lmac_if_tdls_tx_ops *
3392728a07SLinux Build Service Account wlan_psoc_get_tdls_txops(struct wlan_objmgr_psoc *psoc)
3492728a07SLinux Build Service Account {
352281c2d6SAbhishek Singh 	return &psoc->soc_cb.tx_ops->tdls_tx_ops;
3692728a07SLinux Build Service Account }
3792728a07SLinux Build Service Account 
3892728a07SLinux Build Service Account static inline struct wlan_lmac_if_tdls_rx_ops *
3992728a07SLinux Build Service Account wlan_psoc_get_tdls_rxops(struct wlan_objmgr_psoc *psoc)
4092728a07SLinux Build Service Account {
412281c2d6SAbhishek Singh 	return &psoc->soc_cb.rx_ops->tdls_rx_ops;
4292728a07SLinux Build Service Account }
4392728a07SLinux Build Service Account 
4492728a07SLinux Build Service Account QDF_STATUS tgt_tdls_set_fw_state(struct wlan_objmgr_psoc *psoc,
4592728a07SLinux Build Service Account 				 struct tdls_info *tdls_param)
4692728a07SLinux Build Service Account {
4792728a07SLinux Build Service Account 	struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
4892728a07SLinux Build Service Account 
4992728a07SLinux Build Service Account 	tdls_ops = wlan_psoc_get_tdls_txops(psoc);
5092728a07SLinux Build Service Account 	if (tdls_ops && tdls_ops->update_fw_state)
5192728a07SLinux Build Service Account 		return tdls_ops->update_fw_state(psoc, tdls_param);
5292728a07SLinux Build Service Account 	else
5392728a07SLinux Build Service Account 		return QDF_STATUS_SUCCESS;
5492728a07SLinux Build Service Account }
5592728a07SLinux Build Service Account 
5692728a07SLinux Build Service Account QDF_STATUS tgt_tdls_set_peer_state(struct wlan_objmgr_psoc *psoc,
5792728a07SLinux Build Service Account 				   struct tdls_peer_update_state *peer_param)
5892728a07SLinux Build Service Account {
5992728a07SLinux Build Service Account 	struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
6092728a07SLinux Build Service Account 
6192728a07SLinux Build Service Account 	tdls_ops = wlan_psoc_get_tdls_txops(psoc);
6292728a07SLinux Build Service Account 	if (tdls_ops && tdls_ops->update_peer_state)
6392728a07SLinux Build Service Account 		return tdls_ops->update_peer_state(psoc, peer_param);
6492728a07SLinux Build Service Account 	else
6592728a07SLinux Build Service Account 		return QDF_STATUS_SUCCESS;
6692728a07SLinux Build Service Account }
6792728a07SLinux Build Service Account 
6892728a07SLinux Build Service Account QDF_STATUS tgt_tdls_set_offchan_mode(struct wlan_objmgr_psoc *psoc,
6992728a07SLinux Build Service Account 				     struct tdls_channel_switch_params *param)
7092728a07SLinux Build Service Account {
7192728a07SLinux Build Service Account 	struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
7292728a07SLinux Build Service Account 
7392728a07SLinux Build Service Account 	tdls_ops = wlan_psoc_get_tdls_txops(psoc);
7492728a07SLinux Build Service Account 	if (tdls_ops && tdls_ops->set_offchan_mode)
7592728a07SLinux Build Service Account 		return tdls_ops->set_offchan_mode(psoc, param);
7692728a07SLinux Build Service Account 	else
7792728a07SLinux Build Service Account 		return QDF_STATUS_SUCCESS;
7892728a07SLinux Build Service Account }
7992728a07SLinux Build Service Account 
8092728a07SLinux Build Service Account QDF_STATUS tgt_tdls_send_mgmt_tx_completion(struct scheduler_msg *pmsg)
8192728a07SLinux Build Service Account {
8292728a07SLinux Build Service Account 	QDF_STATUS status = QDF_STATUS_SUCCESS;
8392728a07SLinux Build Service Account 
8492728a07SLinux Build Service Account 	if (!pmsg || !pmsg->bodyptr) {
8592728a07SLinux Build Service Account 		tdls_err("msg: 0x%pK", pmsg);
8692728a07SLinux Build Service Account 		QDF_ASSERT(0);
8792728a07SLinux Build Service Account 		return QDF_STATUS_E_NULL_VALUE;
8892728a07SLinux Build Service Account 	}
8992728a07SLinux Build Service Account 
9092728a07SLinux Build Service Account 	status = tdls_send_mgmt_tx_completion(pmsg->bodyptr);
9192728a07SLinux Build Service Account 
9292728a07SLinux Build Service Account 	return status;
9392728a07SLinux Build Service Account }
9492728a07SLinux Build Service Account 
9592728a07SLinux Build Service Account QDF_STATUS tgt_tdls_send_mgmt_rsp(struct scheduler_msg *pmsg)
9692728a07SLinux Build Service Account {
9792728a07SLinux Build Service Account 	QDF_STATUS status = QDF_STATUS_SUCCESS;
9892728a07SLinux Build Service Account 
9992728a07SLinux Build Service Account 	if (!pmsg || !pmsg->bodyptr) {
10092728a07SLinux Build Service Account 		tdls_err("msg: 0x%pK", pmsg);
10192728a07SLinux Build Service Account 		QDF_ASSERT(0);
10292728a07SLinux Build Service Account 		return QDF_STATUS_E_NULL_VALUE;
10392728a07SLinux Build Service Account 	}
10492728a07SLinux Build Service Account 
10592728a07SLinux Build Service Account 	status = tdls_process_send_mgmt_rsp(pmsg->bodyptr);
10692728a07SLinux Build Service Account 
10792728a07SLinux Build Service Account 	return status;
10892728a07SLinux Build Service Account }
10992728a07SLinux Build Service Account 
11092728a07SLinux Build Service Account QDF_STATUS tgt_tdls_add_peer_rsp(struct scheduler_msg *pmsg)
11192728a07SLinux Build Service Account {
11292728a07SLinux Build Service Account 	QDF_STATUS status = QDF_STATUS_SUCCESS;
11392728a07SLinux Build Service Account 
11492728a07SLinux Build Service Account 	if (!pmsg || !pmsg->bodyptr) {
11592728a07SLinux Build Service Account 		tdls_err("msg: 0x%pK", pmsg);
11692728a07SLinux Build Service Account 		QDF_ASSERT(0);
11792728a07SLinux Build Service Account 		return QDF_STATUS_E_NULL_VALUE;
11892728a07SLinux Build Service Account 	}
11992728a07SLinux Build Service Account 
12092728a07SLinux Build Service Account 	status = tdls_process_add_peer_rsp(pmsg->bodyptr);
12192728a07SLinux Build Service Account 
12292728a07SLinux Build Service Account 	return status;
12392728a07SLinux Build Service Account }
12492728a07SLinux Build Service Account 
12592728a07SLinux Build Service Account QDF_STATUS tgt_tdls_del_peer_rsp(struct scheduler_msg *pmsg)
12692728a07SLinux Build Service Account {
12792728a07SLinux Build Service Account 	QDF_STATUS status = QDF_STATUS_SUCCESS;
12892728a07SLinux Build Service Account 
12992728a07SLinux Build Service Account 	if (!pmsg || !pmsg->bodyptr) {
13092728a07SLinux Build Service Account 		tdls_err("msg: 0x%pK", pmsg);
13192728a07SLinux Build Service Account 		QDF_ASSERT(0);
13292728a07SLinux Build Service Account 		return QDF_STATUS_E_NULL_VALUE;
13392728a07SLinux Build Service Account 	}
13492728a07SLinux Build Service Account 
13592728a07SLinux Build Service Account 	status = tdls_process_del_peer_rsp(pmsg->bodyptr);
13692728a07SLinux Build Service Account 
13792728a07SLinux Build Service Account 	return status;
13892728a07SLinux Build Service Account }
13992728a07SLinux Build Service Account 
14092728a07SLinux Build Service Account QDF_STATUS tgt_tdls_register_ev_handler(struct wlan_objmgr_psoc *psoc)
14192728a07SLinux Build Service Account {
14292728a07SLinux Build Service Account 	struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
14392728a07SLinux Build Service Account 
14492728a07SLinux Build Service Account 	tdls_ops = wlan_psoc_get_tdls_txops(psoc);
14592728a07SLinux Build Service Account 	if (tdls_ops && tdls_ops->tdls_reg_ev_handler)
14692728a07SLinux Build Service Account 		return tdls_ops->tdls_reg_ev_handler(psoc, NULL);
14792728a07SLinux Build Service Account 	else
14892728a07SLinux Build Service Account 		return QDF_STATUS_SUCCESS;
14992728a07SLinux Build Service Account }
15092728a07SLinux Build Service Account 
15192728a07SLinux Build Service Account QDF_STATUS tgt_tdls_unregister_ev_handler(struct wlan_objmgr_psoc *psoc)
15292728a07SLinux Build Service Account {
15392728a07SLinux Build Service Account 	struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
15492728a07SLinux Build Service Account 
15592728a07SLinux Build Service Account 	tdls_ops = wlan_psoc_get_tdls_txops(psoc);
15692728a07SLinux Build Service Account 	if (tdls_ops->tdls_unreg_ev_handler)
15792728a07SLinux Build Service Account 		return tdls_ops->tdls_unreg_ev_handler(psoc, NULL);
15892728a07SLinux Build Service Account 	else
15992728a07SLinux Build Service Account 		return QDF_STATUS_SUCCESS;
16092728a07SLinux Build Service Account }
16192728a07SLinux Build Service Account 
16292728a07SLinux Build Service Account static QDF_STATUS tgt_tdls_event_flush_cb(struct scheduler_msg *msg)
16392728a07SLinux Build Service Account {
16492728a07SLinux Build Service Account 	struct tdls_event_notify *notify;
16592728a07SLinux Build Service Account 
16692728a07SLinux Build Service Account 	notify = msg->bodyptr;
16792728a07SLinux Build Service Account 	if (notify && notify->vdev) {
16892728a07SLinux Build Service Account 		wlan_objmgr_vdev_release_ref(notify->vdev, WLAN_TDLS_SB_ID);
16992728a07SLinux Build Service Account 		qdf_mem_free(notify);
17092728a07SLinux Build Service Account 	}
17192728a07SLinux Build Service Account 
17292728a07SLinux Build Service Account 	return QDF_STATUS_SUCCESS;
17392728a07SLinux Build Service Account }
17492728a07SLinux Build Service Account 
17592728a07SLinux Build Service Account QDF_STATUS
17692728a07SLinux Build Service Account tgt_tdls_event_handler(struct wlan_objmgr_psoc *psoc,
17792728a07SLinux Build Service Account 		       struct tdls_event_info *info)
17892728a07SLinux Build Service Account {
17992728a07SLinux Build Service Account 	struct scheduler_msg msg = {0,};
18092728a07SLinux Build Service Account 	struct tdls_event_notify *notify;
18192728a07SLinux Build Service Account 	uint8_t vdev_id;
18292728a07SLinux Build Service Account 	QDF_STATUS status;
18392728a07SLinux Build Service Account 
18492728a07SLinux Build Service Account 	if (!psoc || !info) {
18592728a07SLinux Build Service Account 		tdls_err("psoc: 0x%pK, info: 0x%pK", psoc, info);
18692728a07SLinux Build Service Account 		return QDF_STATUS_E_NULL_VALUE;
18792728a07SLinux Build Service Account 	}
1883e043aa2SSrinivas Girigowda 	tdls_debug("vdev: %d, type: %d, reason: %d" QDF_MAC_ADDR_FMT,
18992728a07SLinux Build Service Account 		   info->vdev_id, info->message_type, info->peer_reason,
1903e043aa2SSrinivas Girigowda 		   QDF_MAC_ADDR_REF(info->peermac.bytes));
19192728a07SLinux Build Service Account 	notify = qdf_mem_malloc(sizeof(*notify));
192d36054fbSSrinivas Girigowda 	if (!notify)
19392728a07SLinux Build Service Account 		return QDF_STATUS_E_NOMEM;
19492728a07SLinux Build Service Account 
19592728a07SLinux Build Service Account 	vdev_id = info->vdev_id;
19692728a07SLinux Build Service Account 	notify->vdev =
19792728a07SLinux Build Service Account 		wlan_objmgr_get_vdev_by_id_from_psoc(psoc,
19892728a07SLinux Build Service Account 						     vdev_id, WLAN_TDLS_SB_ID);
19992728a07SLinux Build Service Account 	if (!notify->vdev) {
20092728a07SLinux Build Service Account 		tdls_err("null vdev, vdev_id: %d, psoc: 0x%pK", vdev_id, psoc);
20192728a07SLinux Build Service Account 		return QDF_STATUS_E_INVAL;
20292728a07SLinux Build Service Account 	}
20392728a07SLinux Build Service Account 	qdf_mem_copy(&notify->event, info, sizeof(*info));
20492728a07SLinux Build Service Account 
20592728a07SLinux Build Service Account 	msg.bodyptr = notify;
20692728a07SLinux Build Service Account 	msg.callback = tdls_process_evt;
20792728a07SLinux Build Service Account 	msg.flush_callback = tgt_tdls_event_flush_cb;
20892728a07SLinux Build Service Account 
20992728a07SLinux Build Service Account 	status = scheduler_post_message(QDF_MODULE_ID_TDLS,
21092728a07SLinux Build Service Account 					QDF_MODULE_ID_TDLS,
21192728a07SLinux Build Service Account 					QDF_MODULE_ID_TARGET_IF, &msg);
21292728a07SLinux Build Service Account 	if (QDF_IS_STATUS_ERROR(status)) {
21392728a07SLinux Build Service Account 		tdls_err("can't post msg to handle tdls event");
21492728a07SLinux Build Service Account 		wlan_objmgr_vdev_release_ref(notify->vdev, WLAN_TDLS_SB_ID);
21592728a07SLinux Build Service Account 		qdf_mem_free(notify);
21692728a07SLinux Build Service Account 	}
21792728a07SLinux Build Service Account 
21892728a07SLinux Build Service Account 	return status;
21992728a07SLinux Build Service Account }
22092728a07SLinux Build Service Account 
22192728a07SLinux Build Service Account static QDF_STATUS tgt_tdls_mgmt_frame_rx_flush_cb(struct scheduler_msg *msg)
22292728a07SLinux Build Service Account {
22392728a07SLinux Build Service Account 	struct tdls_rx_mgmt_event *rx_mgmt_event;
22492728a07SLinux Build Service Account 
22592728a07SLinux Build Service Account 	rx_mgmt_event = msg->bodyptr;
22692728a07SLinux Build Service Account 
22792728a07SLinux Build Service Account 	if (rx_mgmt_event) {
22892728a07SLinux Build Service Account 		if (rx_mgmt_event->rx_mgmt)
22992728a07SLinux Build Service Account 			qdf_mem_free(rx_mgmt_event->rx_mgmt);
23092728a07SLinux Build Service Account 
23192728a07SLinux Build Service Account 		qdf_mem_free(rx_mgmt_event);
23292728a07SLinux Build Service Account 	}
23392728a07SLinux Build Service Account 	msg->bodyptr = NULL;
23492728a07SLinux Build Service Account 
23592728a07SLinux Build Service Account 	return QDF_STATUS_SUCCESS;
23692728a07SLinux Build Service Account }
23792728a07SLinux Build Service Account 
23892728a07SLinux Build Service Account static
23992728a07SLinux Build Service Account QDF_STATUS tgt_tdls_mgmt_frame_process_rx_cb(
24092728a07SLinux Build Service Account 			struct wlan_objmgr_psoc *psoc,
24192728a07SLinux Build Service Account 			struct wlan_objmgr_peer *peer,
24292728a07SLinux Build Service Account 			qdf_nbuf_t buf,
24392728a07SLinux Build Service Account 			struct mgmt_rx_event_params *mgmt_rx_params,
24492728a07SLinux Build Service Account 			enum mgmt_frame_type frm_type)
24592728a07SLinux Build Service Account {
24692728a07SLinux Build Service Account 	struct tdls_rx_mgmt_frame *rx_mgmt;
24792728a07SLinux Build Service Account 	struct tdls_rx_mgmt_event *rx_mgmt_event;
24892728a07SLinux Build Service Account 	struct tdls_soc_priv_obj *tdls_soc_obj;
24992728a07SLinux Build Service Account 	struct scheduler_msg msg = {0};
25092728a07SLinux Build Service Account 	struct wlan_objmgr_vdev *vdev;
25192728a07SLinux Build Service Account 	uint32_t vdev_id;
25292728a07SLinux Build Service Account 	uint8_t *pdata;
25392728a07SLinux Build Service Account 	QDF_STATUS status;
25492728a07SLinux Build Service Account 
25592728a07SLinux Build Service Account 	tdls_soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
25692728a07SLinux Build Service Account 			WLAN_UMAC_COMP_TDLS);
25792728a07SLinux Build Service Account 	if (!tdls_soc_obj) {
25892728a07SLinux Build Service Account 		tdls_err("tdls ctx is NULL, drop this frame");
25992728a07SLinux Build Service Account 		return QDF_STATUS_E_FAILURE;
26092728a07SLinux Build Service Account 	}
26192728a07SLinux Build Service Account 
26292728a07SLinux Build Service Account 	if (!peer) {
26392728a07SLinux Build Service Account 		vdev = tdls_get_vdev(psoc, WLAN_TDLS_SB_ID);
26492728a07SLinux Build Service Account 		if (!vdev) {
26592728a07SLinux Build Service Account 			tdls_err("current tdls vdev is null, can't get vdev id");
26692728a07SLinux Build Service Account 			return QDF_STATUS_E_FAILURE;
26792728a07SLinux Build Service Account 		}
26892728a07SLinux Build Service Account 		vdev_id = wlan_vdev_get_id(vdev);
26992728a07SLinux Build Service Account 		wlan_objmgr_vdev_release_ref(vdev, WLAN_TDLS_SB_ID);
27092728a07SLinux Build Service Account 	} else {
27192728a07SLinux Build Service Account 		vdev = wlan_peer_get_vdev(peer);
27292728a07SLinux Build Service Account 		if (!vdev) {
27392728a07SLinux Build Service Account 			tdls_err("vdev is NULL in peer, drop this frame");
27492728a07SLinux Build Service Account 			return QDF_STATUS_E_FAILURE;
27592728a07SLinux Build Service Account 		}
27692728a07SLinux Build Service Account 		vdev_id = wlan_vdev_get_id(vdev);
27792728a07SLinux Build Service Account 	}
27892728a07SLinux Build Service Account 
279b3645e79Sgaurank kathpalia 	rx_mgmt_event = qdf_mem_malloc_atomic(sizeof(*rx_mgmt_event));
280d36054fbSSrinivas Girigowda 	if (!rx_mgmt_event)
28192728a07SLinux Build Service Account 		return QDF_STATUS_E_NOMEM;
28292728a07SLinux Build Service Account 
283b3645e79Sgaurank kathpalia 	rx_mgmt = qdf_mem_malloc_atomic(sizeof(*rx_mgmt) +
28492728a07SLinux Build Service Account 			mgmt_rx_params->buf_len);
28592728a07SLinux Build Service Account 	if (!rx_mgmt) {
286b3645e79Sgaurank kathpalia 		tdls_debug_rl("Failed to allocate rx mgmt frame");
28792728a07SLinux Build Service Account 		qdf_mem_free(rx_mgmt_event);
28892728a07SLinux Build Service Account 		return QDF_STATUS_E_NOMEM;
28992728a07SLinux Build Service Account 	}
29092728a07SLinux Build Service Account 
29192728a07SLinux Build Service Account 	pdata = (uint8_t *)qdf_nbuf_data(buf);
29292728a07SLinux Build Service Account 	rx_mgmt->frame_len = mgmt_rx_params->buf_len;
293ca5d9222SAshish Kumar Dhanotiya 	rx_mgmt->rx_freq = mgmt_rx_params->chan_freq;
29492728a07SLinux Build Service Account 	rx_mgmt->vdev_id = vdev_id;
29592728a07SLinux Build Service Account 	rx_mgmt->frm_type = frm_type;
29692728a07SLinux Build Service Account 	rx_mgmt->rx_rssi = mgmt_rx_params->rssi;
29792728a07SLinux Build Service Account 
29892728a07SLinux Build Service Account 	rx_mgmt_event->rx_mgmt = rx_mgmt;
29992728a07SLinux Build Service Account 	rx_mgmt_event->tdls_soc_obj = tdls_soc_obj;
30092728a07SLinux Build Service Account 	qdf_mem_copy(rx_mgmt->buf, pdata, mgmt_rx_params->buf_len);
30192728a07SLinux Build Service Account 	msg.type = TDLS_EVENT_RX_MGMT;
30292728a07SLinux Build Service Account 	msg.bodyptr = rx_mgmt_event;
30392728a07SLinux Build Service Account 	msg.callback = tdls_process_rx_frame;
30492728a07SLinux Build Service Account 	msg.flush_callback = tgt_tdls_mgmt_frame_rx_flush_cb;
30592728a07SLinux Build Service Account 	status = scheduler_post_message(QDF_MODULE_ID_TDLS,
30692728a07SLinux Build Service Account 					QDF_MODULE_ID_TDLS,
30792728a07SLinux Build Service Account 					QDF_MODULE_ID_TARGET_IF, &msg);
30892728a07SLinux Build Service Account 	if (QDF_IS_STATUS_ERROR(status)) {
30992728a07SLinux Build Service Account 		qdf_mem_free(rx_mgmt);
31092728a07SLinux Build Service Account 		qdf_mem_free(rx_mgmt_event);
31192728a07SLinux Build Service Account 	}
31292728a07SLinux Build Service Account 
31392728a07SLinux Build Service Account 	qdf_nbuf_free(buf);
31492728a07SLinux Build Service Account 
31592728a07SLinux Build Service Account 	return status;
31692728a07SLinux Build Service Account }
31792728a07SLinux Build Service Account 
31892728a07SLinux Build Service Account QDF_STATUS tgt_tdls_mgmt_frame_rx_cb(
31992728a07SLinux Build Service Account 			struct wlan_objmgr_psoc *psoc,
32092728a07SLinux Build Service Account 			struct wlan_objmgr_peer *peer,
32192728a07SLinux Build Service Account 			qdf_nbuf_t buf,
32292728a07SLinux Build Service Account 			struct mgmt_rx_event_params *mgmt_rx_params,
32392728a07SLinux Build Service Account 			enum mgmt_frame_type frm_type)
32492728a07SLinux Build Service Account {
32592728a07SLinux Build Service Account 	QDF_STATUS status;
32692728a07SLinux Build Service Account 
32792728a07SLinux Build Service Account 	tdls_debug("psoc:%pK, peer:%pK, type:%d", psoc, peer, frm_type);
32892728a07SLinux Build Service Account 
32992728a07SLinux Build Service Account 
33092728a07SLinux Build Service Account 	if (!buf) {
33192728a07SLinux Build Service Account 		tdls_err("rx frame buff is null buf:%pK", buf);
33292728a07SLinux Build Service Account 		return QDF_STATUS_E_INVAL;
33392728a07SLinux Build Service Account 	}
33492728a07SLinux Build Service Account 
33592728a07SLinux Build Service Account 	if (!mgmt_rx_params || !psoc) {
33692728a07SLinux Build Service Account 		tdls_err("input is NULL mgmt_rx_params:%pK psoc:%pK, peer:%pK",
33792728a07SLinux Build Service Account 			  mgmt_rx_params, psoc, peer);
33892728a07SLinux Build Service Account 		status = QDF_STATUS_E_INVAL;
33992728a07SLinux Build Service Account 		goto release_nbuf;
34092728a07SLinux Build Service Account 	}
34192728a07SLinux Build Service Account 
34292728a07SLinux Build Service Account 	status = wlan_objmgr_peer_try_get_ref(peer, WLAN_TDLS_SB_ID);
34392728a07SLinux Build Service Account 	if (QDF_STATUS_SUCCESS != status)
34492728a07SLinux Build Service Account 		goto release_nbuf;
34592728a07SLinux Build Service Account 
34692728a07SLinux Build Service Account 	status = tgt_tdls_mgmt_frame_process_rx_cb(psoc, peer, buf,
34792728a07SLinux Build Service Account 						   mgmt_rx_params, frm_type);
34892728a07SLinux Build Service Account 
34992728a07SLinux Build Service Account 	wlan_objmgr_peer_release_ref(peer, WLAN_TDLS_SB_ID);
35092728a07SLinux Build Service Account 
35192728a07SLinux Build Service Account 	if (QDF_STATUS_SUCCESS != status)
35292728a07SLinux Build Service Account release_nbuf:
35392728a07SLinux Build Service Account 		qdf_nbuf_free(buf);
35492728a07SLinux Build Service Account 	return status;
35592728a07SLinux Build Service Account }
35692728a07SLinux Build Service Account 
35792728a07SLinux Build Service Account void tgt_tdls_peers_deleted_notification(struct wlan_objmgr_psoc *psoc,
35892728a07SLinux Build Service Account 					 uint32_t session_id)
35992728a07SLinux Build Service Account {
36092728a07SLinux Build Service Account 	tdls_peers_deleted_notification(psoc, session_id);
36192728a07SLinux Build Service Account }
36292728a07SLinux Build Service Account 
36392728a07SLinux Build Service Account void tgt_tdls_delete_all_peers_indication(struct wlan_objmgr_psoc *psoc,
36492728a07SLinux Build Service Account 					  uint32_t session_id)
36592728a07SLinux Build Service Account {
366*9e24d820SPragaspathi Thilagaraj 	tdls_check_and_indicate_delete_all_peers(psoc, session_id);
36792728a07SLinux Build Service Account }
368