1*5113495bSYour Name /*
2*5113495bSYour Name * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name *
5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name * above copyright notice and this permission notice appear in all
8*5113495bSYour Name * copies.
9*5113495bSYour Name *
10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name */
19*5113495bSYour Name
20*5113495bSYour Name /**
21*5113495bSYour Name * DOC: wlan_tdls_tgt_api.c
22*5113495bSYour Name *
23*5113495bSYour Name * TDLS south bound interface definitions
24*5113495bSYour Name */
25*5113495bSYour Name
26*5113495bSYour Name #include "qdf_status.h"
27*5113495bSYour Name #include <wlan_tdls_tgt_api.h>
28*5113495bSYour Name #include "../../core/src/wlan_tdls_main.h"
29*5113495bSYour Name #include "../../core/src/wlan_tdls_cmds_process.h"
30*5113495bSYour Name #include "../../core/src/wlan_tdls_mgmt.h"
31*5113495bSYour Name
32*5113495bSYour Name static inline struct wlan_lmac_if_tdls_tx_ops *
wlan_psoc_get_tdls_txops(struct wlan_objmgr_psoc * psoc)33*5113495bSYour Name wlan_psoc_get_tdls_txops(struct wlan_objmgr_psoc *psoc)
34*5113495bSYour Name {
35*5113495bSYour Name return &psoc->soc_cb.tx_ops->tdls_tx_ops;
36*5113495bSYour Name }
37*5113495bSYour Name
38*5113495bSYour Name static inline struct wlan_lmac_if_tdls_rx_ops *
wlan_psoc_get_tdls_rxops(struct wlan_objmgr_psoc * psoc)39*5113495bSYour Name wlan_psoc_get_tdls_rxops(struct wlan_objmgr_psoc *psoc)
40*5113495bSYour Name {
41*5113495bSYour Name return &psoc->soc_cb.rx_ops->tdls_rx_ops;
42*5113495bSYour Name }
43*5113495bSYour Name
tgt_tdls_set_fw_state(struct wlan_objmgr_psoc * psoc,struct tdls_info * tdls_param)44*5113495bSYour Name QDF_STATUS tgt_tdls_set_fw_state(struct wlan_objmgr_psoc *psoc,
45*5113495bSYour Name struct tdls_info *tdls_param)
46*5113495bSYour Name {
47*5113495bSYour Name struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
48*5113495bSYour Name
49*5113495bSYour Name tdls_ops = wlan_psoc_get_tdls_txops(psoc);
50*5113495bSYour Name if (tdls_ops && tdls_ops->update_fw_state)
51*5113495bSYour Name return tdls_ops->update_fw_state(psoc, tdls_param);
52*5113495bSYour Name else
53*5113495bSYour Name return QDF_STATUS_SUCCESS;
54*5113495bSYour Name }
55*5113495bSYour Name
tgt_tdls_set_peer_state(struct wlan_objmgr_psoc * psoc,struct tdls_peer_update_state * peer_param)56*5113495bSYour Name QDF_STATUS tgt_tdls_set_peer_state(struct wlan_objmgr_psoc *psoc,
57*5113495bSYour Name struct tdls_peer_update_state *peer_param)
58*5113495bSYour Name {
59*5113495bSYour Name struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
60*5113495bSYour Name
61*5113495bSYour Name tdls_ops = wlan_psoc_get_tdls_txops(psoc);
62*5113495bSYour Name if (tdls_ops && tdls_ops->update_peer_state)
63*5113495bSYour Name return tdls_ops->update_peer_state(psoc, peer_param);
64*5113495bSYour Name else
65*5113495bSYour Name return QDF_STATUS_SUCCESS;
66*5113495bSYour Name }
67*5113495bSYour Name
tgt_tdls_set_offchan_mode(struct wlan_objmgr_psoc * psoc,struct tdls_channel_switch_params * param)68*5113495bSYour Name QDF_STATUS tgt_tdls_set_offchan_mode(struct wlan_objmgr_psoc *psoc,
69*5113495bSYour Name struct tdls_channel_switch_params *param)
70*5113495bSYour Name {
71*5113495bSYour Name struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
72*5113495bSYour Name
73*5113495bSYour Name tdls_ops = wlan_psoc_get_tdls_txops(psoc);
74*5113495bSYour Name if (tdls_ops && tdls_ops->set_offchan_mode)
75*5113495bSYour Name return tdls_ops->set_offchan_mode(psoc, param);
76*5113495bSYour Name else
77*5113495bSYour Name return QDF_STATUS_SUCCESS;
78*5113495bSYour Name }
79*5113495bSYour Name
tgt_tdls_send_mgmt_tx_completion(struct scheduler_msg * pmsg)80*5113495bSYour Name QDF_STATUS tgt_tdls_send_mgmt_tx_completion(struct scheduler_msg *pmsg)
81*5113495bSYour Name {
82*5113495bSYour Name QDF_STATUS status = QDF_STATUS_SUCCESS;
83*5113495bSYour Name
84*5113495bSYour Name if (!pmsg || !pmsg->bodyptr) {
85*5113495bSYour Name tdls_err("msg: 0x%pK", pmsg);
86*5113495bSYour Name QDF_ASSERT(0);
87*5113495bSYour Name return QDF_STATUS_E_NULL_VALUE;
88*5113495bSYour Name }
89*5113495bSYour Name
90*5113495bSYour Name status = tdls_send_mgmt_tx_completion(pmsg->bodyptr);
91*5113495bSYour Name
92*5113495bSYour Name return status;
93*5113495bSYour Name }
94*5113495bSYour Name
tgt_tdls_send_mgmt_rsp(struct scheduler_msg * pmsg)95*5113495bSYour Name QDF_STATUS tgt_tdls_send_mgmt_rsp(struct scheduler_msg *pmsg)
96*5113495bSYour Name {
97*5113495bSYour Name QDF_STATUS status = QDF_STATUS_SUCCESS;
98*5113495bSYour Name
99*5113495bSYour Name if (!pmsg || !pmsg->bodyptr) {
100*5113495bSYour Name tdls_err("msg: 0x%pK", pmsg);
101*5113495bSYour Name QDF_ASSERT(0);
102*5113495bSYour Name return QDF_STATUS_E_NULL_VALUE;
103*5113495bSYour Name }
104*5113495bSYour Name
105*5113495bSYour Name status = tdls_process_send_mgmt_rsp(pmsg->bodyptr);
106*5113495bSYour Name
107*5113495bSYour Name return status;
108*5113495bSYour Name }
109*5113495bSYour Name
tgt_tdls_add_peer_rsp(struct scheduler_msg * pmsg)110*5113495bSYour Name QDF_STATUS tgt_tdls_add_peer_rsp(struct scheduler_msg *pmsg)
111*5113495bSYour Name {
112*5113495bSYour Name QDF_STATUS status = QDF_STATUS_SUCCESS;
113*5113495bSYour Name
114*5113495bSYour Name if (!pmsg || !pmsg->bodyptr) {
115*5113495bSYour Name tdls_err("msg: 0x%pK", pmsg);
116*5113495bSYour Name QDF_ASSERT(0);
117*5113495bSYour Name return QDF_STATUS_E_NULL_VALUE;
118*5113495bSYour Name }
119*5113495bSYour Name
120*5113495bSYour Name status = tdls_process_add_peer_rsp(pmsg->bodyptr);
121*5113495bSYour Name
122*5113495bSYour Name return status;
123*5113495bSYour Name }
124*5113495bSYour Name
tgt_tdls_del_peer_rsp(struct scheduler_msg * pmsg)125*5113495bSYour Name QDF_STATUS tgt_tdls_del_peer_rsp(struct scheduler_msg *pmsg)
126*5113495bSYour Name {
127*5113495bSYour Name QDF_STATUS status = QDF_STATUS_SUCCESS;
128*5113495bSYour Name
129*5113495bSYour Name if (!pmsg || !pmsg->bodyptr) {
130*5113495bSYour Name tdls_err("msg: 0x%pK", pmsg);
131*5113495bSYour Name QDF_ASSERT(0);
132*5113495bSYour Name return QDF_STATUS_E_NULL_VALUE;
133*5113495bSYour Name }
134*5113495bSYour Name
135*5113495bSYour Name status = tdls_process_del_peer_rsp(pmsg->bodyptr);
136*5113495bSYour Name
137*5113495bSYour Name return status;
138*5113495bSYour Name }
139*5113495bSYour Name
tgt_tdls_register_ev_handler(struct wlan_objmgr_psoc * psoc)140*5113495bSYour Name QDF_STATUS tgt_tdls_register_ev_handler(struct wlan_objmgr_psoc *psoc)
141*5113495bSYour Name {
142*5113495bSYour Name struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
143*5113495bSYour Name
144*5113495bSYour Name tdls_ops = wlan_psoc_get_tdls_txops(psoc);
145*5113495bSYour Name if (tdls_ops && tdls_ops->tdls_reg_ev_handler)
146*5113495bSYour Name return tdls_ops->tdls_reg_ev_handler(psoc, NULL);
147*5113495bSYour Name else
148*5113495bSYour Name return QDF_STATUS_SUCCESS;
149*5113495bSYour Name }
150*5113495bSYour Name
tgt_tdls_unregister_ev_handler(struct wlan_objmgr_psoc * psoc)151*5113495bSYour Name QDF_STATUS tgt_tdls_unregister_ev_handler(struct wlan_objmgr_psoc *psoc)
152*5113495bSYour Name {
153*5113495bSYour Name struct wlan_lmac_if_tdls_tx_ops *tdls_ops = NULL;
154*5113495bSYour Name
155*5113495bSYour Name tdls_ops = wlan_psoc_get_tdls_txops(psoc);
156*5113495bSYour Name if (tdls_ops->tdls_unreg_ev_handler)
157*5113495bSYour Name return tdls_ops->tdls_unreg_ev_handler(psoc, NULL);
158*5113495bSYour Name else
159*5113495bSYour Name return QDF_STATUS_SUCCESS;
160*5113495bSYour Name }
161*5113495bSYour Name
tgt_tdls_event_flush_cb(struct scheduler_msg * msg)162*5113495bSYour Name static QDF_STATUS tgt_tdls_event_flush_cb(struct scheduler_msg *msg)
163*5113495bSYour Name {
164*5113495bSYour Name struct tdls_event_notify *notify;
165*5113495bSYour Name
166*5113495bSYour Name notify = msg->bodyptr;
167*5113495bSYour Name if (notify && notify->vdev) {
168*5113495bSYour Name wlan_objmgr_vdev_release_ref(notify->vdev, WLAN_TDLS_SB_ID);
169*5113495bSYour Name qdf_mem_free(notify);
170*5113495bSYour Name }
171*5113495bSYour Name
172*5113495bSYour Name return QDF_STATUS_SUCCESS;
173*5113495bSYour Name }
174*5113495bSYour Name
175*5113495bSYour Name QDF_STATUS
tgt_tdls_event_handler(struct wlan_objmgr_psoc * psoc,struct tdls_event_info * info)176*5113495bSYour Name tgt_tdls_event_handler(struct wlan_objmgr_psoc *psoc,
177*5113495bSYour Name struct tdls_event_info *info)
178*5113495bSYour Name {
179*5113495bSYour Name struct scheduler_msg msg = {0,};
180*5113495bSYour Name struct tdls_event_notify *notify;
181*5113495bSYour Name uint8_t vdev_id;
182*5113495bSYour Name QDF_STATUS status;
183*5113495bSYour Name
184*5113495bSYour Name if (!psoc || !info) {
185*5113495bSYour Name tdls_err("psoc: 0x%pK, info: 0x%pK", psoc, info);
186*5113495bSYour Name return QDF_STATUS_E_NULL_VALUE;
187*5113495bSYour Name }
188*5113495bSYour Name tdls_debug("vdev: %d, type: %d, reason: %d" QDF_MAC_ADDR_FMT,
189*5113495bSYour Name info->vdev_id, info->message_type, info->peer_reason,
190*5113495bSYour Name QDF_MAC_ADDR_REF(info->peermac.bytes));
191*5113495bSYour Name notify = qdf_mem_malloc(sizeof(*notify));
192*5113495bSYour Name if (!notify)
193*5113495bSYour Name return QDF_STATUS_E_NOMEM;
194*5113495bSYour Name
195*5113495bSYour Name vdev_id = info->vdev_id;
196*5113495bSYour Name notify->vdev =
197*5113495bSYour Name wlan_objmgr_get_vdev_by_id_from_psoc(psoc,
198*5113495bSYour Name vdev_id, WLAN_TDLS_SB_ID);
199*5113495bSYour Name if (!notify->vdev) {
200*5113495bSYour Name tdls_err("null vdev, vdev_id: %d, psoc: 0x%pK", vdev_id, psoc);
201*5113495bSYour Name return QDF_STATUS_E_INVAL;
202*5113495bSYour Name }
203*5113495bSYour Name qdf_mem_copy(¬ify->event, info, sizeof(*info));
204*5113495bSYour Name
205*5113495bSYour Name msg.bodyptr = notify;
206*5113495bSYour Name msg.callback = tdls_process_evt;
207*5113495bSYour Name msg.flush_callback = tgt_tdls_event_flush_cb;
208*5113495bSYour Name
209*5113495bSYour Name status = scheduler_post_message(QDF_MODULE_ID_TDLS,
210*5113495bSYour Name QDF_MODULE_ID_TDLS,
211*5113495bSYour Name QDF_MODULE_ID_TARGET_IF, &msg);
212*5113495bSYour Name if (QDF_IS_STATUS_ERROR(status)) {
213*5113495bSYour Name tdls_err("can't post msg to handle tdls event");
214*5113495bSYour Name wlan_objmgr_vdev_release_ref(notify->vdev, WLAN_TDLS_SB_ID);
215*5113495bSYour Name qdf_mem_free(notify);
216*5113495bSYour Name }
217*5113495bSYour Name
218*5113495bSYour Name return status;
219*5113495bSYour Name }
220*5113495bSYour Name
tgt_tdls_mgmt_frame_rx_flush_cb(struct scheduler_msg * msg)221*5113495bSYour Name static QDF_STATUS tgt_tdls_mgmt_frame_rx_flush_cb(struct scheduler_msg *msg)
222*5113495bSYour Name {
223*5113495bSYour Name struct tdls_rx_mgmt_event *rx_mgmt_event;
224*5113495bSYour Name
225*5113495bSYour Name rx_mgmt_event = msg->bodyptr;
226*5113495bSYour Name
227*5113495bSYour Name if (rx_mgmt_event) {
228*5113495bSYour Name if (rx_mgmt_event->rx_mgmt)
229*5113495bSYour Name qdf_mem_free(rx_mgmt_event->rx_mgmt);
230*5113495bSYour Name
231*5113495bSYour Name qdf_mem_free(rx_mgmt_event);
232*5113495bSYour Name }
233*5113495bSYour Name msg->bodyptr = NULL;
234*5113495bSYour Name
235*5113495bSYour Name return QDF_STATUS_SUCCESS;
236*5113495bSYour Name }
237*5113495bSYour Name
238*5113495bSYour Name static
tgt_tdls_mgmt_frame_process_rx_cb(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_peer * peer,qdf_nbuf_t buf,struct mgmt_rx_event_params * mgmt_rx_params,enum mgmt_frame_type frm_type)239*5113495bSYour Name QDF_STATUS tgt_tdls_mgmt_frame_process_rx_cb(
240*5113495bSYour Name struct wlan_objmgr_psoc *psoc,
241*5113495bSYour Name struct wlan_objmgr_peer *peer,
242*5113495bSYour Name qdf_nbuf_t buf,
243*5113495bSYour Name struct mgmt_rx_event_params *mgmt_rx_params,
244*5113495bSYour Name enum mgmt_frame_type frm_type)
245*5113495bSYour Name {
246*5113495bSYour Name struct tdls_rx_mgmt_frame *rx_mgmt;
247*5113495bSYour Name struct tdls_rx_mgmt_event *rx_mgmt_event;
248*5113495bSYour Name struct tdls_soc_priv_obj *tdls_soc_obj;
249*5113495bSYour Name struct scheduler_msg msg = {0};
250*5113495bSYour Name struct wlan_objmgr_vdev *vdev;
251*5113495bSYour Name uint32_t vdev_id;
252*5113495bSYour Name uint8_t *pdata;
253*5113495bSYour Name QDF_STATUS status;
254*5113495bSYour Name
255*5113495bSYour Name tdls_soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
256*5113495bSYour Name WLAN_UMAC_COMP_TDLS);
257*5113495bSYour Name if (!tdls_soc_obj) {
258*5113495bSYour Name tdls_err("tdls ctx is NULL, drop this frame");
259*5113495bSYour Name return QDF_STATUS_E_FAILURE;
260*5113495bSYour Name }
261*5113495bSYour Name
262*5113495bSYour Name if (!peer) {
263*5113495bSYour Name vdev = tdls_get_vdev(psoc, WLAN_TDLS_SB_ID);
264*5113495bSYour Name if (!vdev) {
265*5113495bSYour Name tdls_err("current tdls vdev is null, can't get vdev id");
266*5113495bSYour Name return QDF_STATUS_E_FAILURE;
267*5113495bSYour Name }
268*5113495bSYour Name vdev_id = wlan_vdev_get_id(vdev);
269*5113495bSYour Name wlan_objmgr_vdev_release_ref(vdev, WLAN_TDLS_SB_ID);
270*5113495bSYour Name } else {
271*5113495bSYour Name vdev = wlan_peer_get_vdev(peer);
272*5113495bSYour Name if (!vdev) {
273*5113495bSYour Name tdls_err("vdev is NULL in peer, drop this frame");
274*5113495bSYour Name return QDF_STATUS_E_FAILURE;
275*5113495bSYour Name }
276*5113495bSYour Name vdev_id = wlan_vdev_get_id(vdev);
277*5113495bSYour Name }
278*5113495bSYour Name
279*5113495bSYour Name rx_mgmt_event = qdf_mem_malloc_atomic(sizeof(*rx_mgmt_event));
280*5113495bSYour Name if (!rx_mgmt_event)
281*5113495bSYour Name return QDF_STATUS_E_NOMEM;
282*5113495bSYour Name
283*5113495bSYour Name rx_mgmt = qdf_mem_malloc_atomic(sizeof(*rx_mgmt) +
284*5113495bSYour Name mgmt_rx_params->buf_len);
285*5113495bSYour Name if (!rx_mgmt) {
286*5113495bSYour Name tdls_debug_rl("Failed to allocate rx mgmt frame");
287*5113495bSYour Name qdf_mem_free(rx_mgmt_event);
288*5113495bSYour Name return QDF_STATUS_E_NOMEM;
289*5113495bSYour Name }
290*5113495bSYour Name
291*5113495bSYour Name pdata = (uint8_t *)qdf_nbuf_data(buf);
292*5113495bSYour Name rx_mgmt->frame_len = mgmt_rx_params->buf_len;
293*5113495bSYour Name rx_mgmt->rx_freq = mgmt_rx_params->chan_freq;
294*5113495bSYour Name rx_mgmt->vdev_id = vdev_id;
295*5113495bSYour Name rx_mgmt->frm_type = frm_type;
296*5113495bSYour Name rx_mgmt->rx_rssi = mgmt_rx_params->rssi;
297*5113495bSYour Name
298*5113495bSYour Name rx_mgmt_event->rx_mgmt = rx_mgmt;
299*5113495bSYour Name rx_mgmt_event->tdls_soc_obj = tdls_soc_obj;
300*5113495bSYour Name qdf_mem_copy(rx_mgmt->buf, pdata, mgmt_rx_params->buf_len);
301*5113495bSYour Name msg.type = TDLS_EVENT_RX_MGMT;
302*5113495bSYour Name msg.bodyptr = rx_mgmt_event;
303*5113495bSYour Name msg.callback = tdls_process_rx_frame;
304*5113495bSYour Name msg.flush_callback = tgt_tdls_mgmt_frame_rx_flush_cb;
305*5113495bSYour Name status = scheduler_post_message(QDF_MODULE_ID_TDLS,
306*5113495bSYour Name QDF_MODULE_ID_TDLS,
307*5113495bSYour Name QDF_MODULE_ID_TARGET_IF, &msg);
308*5113495bSYour Name if (QDF_IS_STATUS_ERROR(status)) {
309*5113495bSYour Name qdf_mem_free(rx_mgmt);
310*5113495bSYour Name qdf_mem_free(rx_mgmt_event);
311*5113495bSYour Name }
312*5113495bSYour Name
313*5113495bSYour Name qdf_nbuf_free(buf);
314*5113495bSYour Name
315*5113495bSYour Name return status;
316*5113495bSYour Name }
317*5113495bSYour Name
tgt_tdls_mgmt_frame_rx_cb(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_peer * peer,qdf_nbuf_t buf,struct mgmt_rx_event_params * mgmt_rx_params,enum mgmt_frame_type frm_type)318*5113495bSYour Name QDF_STATUS tgt_tdls_mgmt_frame_rx_cb(
319*5113495bSYour Name struct wlan_objmgr_psoc *psoc,
320*5113495bSYour Name struct wlan_objmgr_peer *peer,
321*5113495bSYour Name qdf_nbuf_t buf,
322*5113495bSYour Name struct mgmt_rx_event_params *mgmt_rx_params,
323*5113495bSYour Name enum mgmt_frame_type frm_type)
324*5113495bSYour Name {
325*5113495bSYour Name QDF_STATUS status;
326*5113495bSYour Name
327*5113495bSYour Name tdls_debug("psoc:%pK, peer:%pK, type:%d", psoc, peer, frm_type);
328*5113495bSYour Name
329*5113495bSYour Name
330*5113495bSYour Name if (!buf) {
331*5113495bSYour Name tdls_err("rx frame buff is null buf:%pK", buf);
332*5113495bSYour Name return QDF_STATUS_E_INVAL;
333*5113495bSYour Name }
334*5113495bSYour Name
335*5113495bSYour Name if (!mgmt_rx_params || !psoc) {
336*5113495bSYour Name tdls_err("input is NULL mgmt_rx_params:%pK psoc:%pK, peer:%pK",
337*5113495bSYour Name mgmt_rx_params, psoc, peer);
338*5113495bSYour Name status = QDF_STATUS_E_INVAL;
339*5113495bSYour Name goto release_nbuf;
340*5113495bSYour Name }
341*5113495bSYour Name
342*5113495bSYour Name status = wlan_objmgr_peer_try_get_ref(peer, WLAN_TDLS_SB_ID);
343*5113495bSYour Name if (QDF_STATUS_SUCCESS != status)
344*5113495bSYour Name goto release_nbuf;
345*5113495bSYour Name
346*5113495bSYour Name status = tgt_tdls_mgmt_frame_process_rx_cb(psoc, peer, buf,
347*5113495bSYour Name mgmt_rx_params, frm_type);
348*5113495bSYour Name
349*5113495bSYour Name wlan_objmgr_peer_release_ref(peer, WLAN_TDLS_SB_ID);
350*5113495bSYour Name
351*5113495bSYour Name if (QDF_STATUS_SUCCESS != status)
352*5113495bSYour Name release_nbuf:
353*5113495bSYour Name qdf_nbuf_free(buf);
354*5113495bSYour Name return status;
355*5113495bSYour Name }
356*5113495bSYour Name
tgt_tdls_peers_deleted_notification(struct wlan_objmgr_psoc * psoc,uint32_t session_id)357*5113495bSYour Name void tgt_tdls_peers_deleted_notification(struct wlan_objmgr_psoc *psoc,
358*5113495bSYour Name uint32_t session_id)
359*5113495bSYour Name {
360*5113495bSYour Name tdls_peers_deleted_notification(psoc, session_id);
361*5113495bSYour Name }
362*5113495bSYour Name
tgt_tdls_delete_all_peers_indication(struct wlan_objmgr_psoc * psoc,uint32_t session_id)363*5113495bSYour Name void tgt_tdls_delete_all_peers_indication(struct wlan_objmgr_psoc *psoc,
364*5113495bSYour Name uint32_t session_id)
365*5113495bSYour Name {
366*5113495bSYour Name tdls_check_and_indicate_delete_all_peers(psoc, session_id);
367*5113495bSYour Name }
368