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(¬ify->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