xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_peer_ops.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2023-2024 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: cdp_txrx_peer_ops.h
22*5113495bSYour Name  * Define the host data path peer API functions
23*5113495bSYour Name  * called by the host control SW and the OS interface module
24*5113495bSYour Name  */
25*5113495bSYour Name #ifndef _CDP_TXRX_PEER_H_
26*5113495bSYour Name #define _CDP_TXRX_PEER_H_
27*5113495bSYour Name #include <cdp_txrx_ops.h>
28*5113495bSYour Name #include "cdp_txrx_handle.h"
29*5113495bSYour Name 
30*5113495bSYour Name /**
31*5113495bSYour Name  * cdp_peer_register() - Register peer into physical device
32*5113495bSYour Name  * @soc: data path soc handle
33*5113495bSYour Name  * @pdev_id: data path device instance id
34*5113495bSYour Name  * @sta_desc: peer description
35*5113495bSYour Name  *
36*5113495bSYour Name  * Register peer into physical device
37*5113495bSYour Name  *
38*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS registration success
39*5113495bSYour Name  *         QDF_STATUS_E_NOSUPPORT not support this feature
40*5113495bSYour Name  */
41*5113495bSYour Name static inline QDF_STATUS
cdp_peer_register(ol_txrx_soc_handle soc,uint8_t pdev_id,struct ol_txrx_desc_type * sta_desc)42*5113495bSYour Name cdp_peer_register(ol_txrx_soc_handle soc, uint8_t pdev_id,
43*5113495bSYour Name 		  struct ol_txrx_desc_type *sta_desc)
44*5113495bSYour Name {
45*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
46*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
47*5113495bSYour Name 			"%s invalid instance", __func__);
48*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
49*5113495bSYour Name 	}
50*5113495bSYour Name 
51*5113495bSYour Name 	if (soc->ops->peer_ops->register_peer)
52*5113495bSYour Name 		return soc->ops->peer_ops->register_peer(soc, pdev_id,
53*5113495bSYour Name 							 sta_desc);
54*5113495bSYour Name 
55*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
56*5113495bSYour Name }
57*5113495bSYour Name 
58*5113495bSYour Name /**
59*5113495bSYour Name  * cdp_clear_peer() - remove peer from physical device
60*5113495bSYour Name  * @soc: data path soc handle
61*5113495bSYour Name  * @pdev_id: data path device instance id
62*5113495bSYour Name  * @peer_addr: peer mac address
63*5113495bSYour Name  *
64*5113495bSYour Name  * remove peer from physical device
65*5113495bSYour Name  *
66*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS registration success
67*5113495bSYour Name  *         QDF_STATUS_E_NOSUPPORT not support this feature
68*5113495bSYour Name  */
69*5113495bSYour Name static inline QDF_STATUS
cdp_clear_peer(ol_txrx_soc_handle soc,uint8_t pdev_id,struct qdf_mac_addr peer_addr)70*5113495bSYour Name cdp_clear_peer(ol_txrx_soc_handle soc, uint8_t pdev_id,
71*5113495bSYour Name 	       struct qdf_mac_addr peer_addr)
72*5113495bSYour Name {
73*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
74*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
75*5113495bSYour Name 			"%s invalid instance", __func__);
76*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
77*5113495bSYour Name 	}
78*5113495bSYour Name 
79*5113495bSYour Name 	if (soc->ops->peer_ops->clear_peer)
80*5113495bSYour Name 		return soc->ops->peer_ops->clear_peer(soc, pdev_id, peer_addr);
81*5113495bSYour Name 
82*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
83*5113495bSYour Name }
84*5113495bSYour Name 
85*5113495bSYour Name /**
86*5113495bSYour Name  * cdp_peer_register_ocb_peer() - register ocb peer from physical device
87*5113495bSYour Name  * @soc: data path soc handle
88*5113495bSYour Name  * @mac_addr: mac address for ocb self peer
89*5113495bSYour Name  *
90*5113495bSYour Name  * register ocb peer from physical device
91*5113495bSYour Name  *
92*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS registration success
93*5113495bSYour Name  *         QDF_STATUS_E_NOSUPPORT not support this feature
94*5113495bSYour Name  */
95*5113495bSYour Name static inline QDF_STATUS
cdp_peer_register_ocb_peer(ol_txrx_soc_handle soc,uint8_t * mac_addr)96*5113495bSYour Name cdp_peer_register_ocb_peer(ol_txrx_soc_handle soc,
97*5113495bSYour Name 			   uint8_t *mac_addr)
98*5113495bSYour Name {
99*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
100*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
101*5113495bSYour Name 			"%s invalid instance", __func__);
102*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
103*5113495bSYour Name 	}
104*5113495bSYour Name 
105*5113495bSYour Name 	if (soc->ops->peer_ops->register_ocb_peer)
106*5113495bSYour Name 		return soc->ops->peer_ops->register_ocb_peer(mac_addr);
107*5113495bSYour Name 
108*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
109*5113495bSYour Name }
110*5113495bSYour Name 
111*5113495bSYour Name /**
112*5113495bSYour Name  * cdp_find_peer_exist - Find if peer already exists
113*5113495bSYour Name  * @soc: data path soc handle
114*5113495bSYour Name  * @pdev_id: data path device instance id
115*5113495bSYour Name  * @peer_addr: peer mac address
116*5113495bSYour Name  *
117*5113495bSYour Name  * Return: true or false
118*5113495bSYour Name  */
119*5113495bSYour Name static inline bool
cdp_find_peer_exist(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t * peer_addr)120*5113495bSYour Name cdp_find_peer_exist(ol_txrx_soc_handle soc, uint8_t pdev_id,
121*5113495bSYour Name 		    uint8_t *peer_addr)
122*5113495bSYour Name {
123*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
124*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
125*5113495bSYour Name 			"%s invalid instance", __func__);
126*5113495bSYour Name 		return false;
127*5113495bSYour Name 	}
128*5113495bSYour Name 
129*5113495bSYour Name 	if (soc->ops->peer_ops->find_peer_exist)
130*5113495bSYour Name 		return soc->ops->peer_ops->find_peer_exist(soc, pdev_id,
131*5113495bSYour Name 							   peer_addr);
132*5113495bSYour Name 
133*5113495bSYour Name 	return false;
134*5113495bSYour Name }
135*5113495bSYour Name 
136*5113495bSYour Name /**
137*5113495bSYour Name  * cdp_find_peer_exist_on_vdev - Find if duplicate peer exists
138*5113495bSYour Name  * on the given vdev
139*5113495bSYour Name  * @soc: data path soc handle
140*5113495bSYour Name  * @vdev_id: data path virtual interface id
141*5113495bSYour Name  * @peer_addr: peer mac address
142*5113495bSYour Name  *
143*5113495bSYour Name  * Return: true or false
144*5113495bSYour Name  */
145*5113495bSYour Name static inline bool
cdp_find_peer_exist_on_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_addr)146*5113495bSYour Name cdp_find_peer_exist_on_vdev(ol_txrx_soc_handle soc, uint8_t vdev_id,
147*5113495bSYour Name 			    uint8_t *peer_addr)
148*5113495bSYour Name {
149*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
150*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
151*5113495bSYour Name 			"%s invalid instance", __func__);
152*5113495bSYour Name 		return false;
153*5113495bSYour Name 	}
154*5113495bSYour Name 
155*5113495bSYour Name 	if (soc->ops->peer_ops->find_peer_exist_on_vdev)
156*5113495bSYour Name 		return soc->ops->peer_ops->find_peer_exist_on_vdev(soc, vdev_id,
157*5113495bSYour Name 								   peer_addr);
158*5113495bSYour Name 
159*5113495bSYour Name 	return false;
160*5113495bSYour Name }
161*5113495bSYour Name 
162*5113495bSYour Name /**
163*5113495bSYour Name  * cdp_find_peer_exist_on_other_vdev - Find if duplicate peer exists
164*5113495bSYour Name  * on other than the given vdev
165*5113495bSYour Name  * @soc: data path soc handle
166*5113495bSYour Name  * @vdev_id: data path virtual interface id
167*5113495bSYour Name  * @peer_addr: peer mac address
168*5113495bSYour Name  * @max_bssid: max number of bssids
169*5113495bSYour Name  *
170*5113495bSYour Name  * Return: true or false
171*5113495bSYour Name  */
172*5113495bSYour Name static inline bool
cdp_find_peer_exist_on_other_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_addr,uint16_t max_bssid)173*5113495bSYour Name cdp_find_peer_exist_on_other_vdev(ol_txrx_soc_handle soc, uint8_t vdev_id,
174*5113495bSYour Name 				  uint8_t *peer_addr, uint16_t max_bssid)
175*5113495bSYour Name {
176*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
177*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
178*5113495bSYour Name 			"%s invalid instance", __func__);
179*5113495bSYour Name 		return false;
180*5113495bSYour Name 	}
181*5113495bSYour Name 
182*5113495bSYour Name 	if (soc->ops->peer_ops->find_peer_exist_on_other_vdev)
183*5113495bSYour Name 		return soc->ops->peer_ops->find_peer_exist_on_other_vdev(
184*5113495bSYour Name 								soc, vdev_id,
185*5113495bSYour Name 								peer_addr,
186*5113495bSYour Name 								max_bssid);
187*5113495bSYour Name 
188*5113495bSYour Name 	return false;
189*5113495bSYour Name }
190*5113495bSYour Name 
191*5113495bSYour Name /**
192*5113495bSYour Name  * cdp_peer_state_update() - update peer local state
193*5113495bSYour Name  * @soc: data path soc handle
194*5113495bSYour Name  * @peer_addr: peer mac address
195*5113495bSYour Name  * @state: new peer local state
196*5113495bSYour Name  *
197*5113495bSYour Name  * update peer local state
198*5113495bSYour Name  *
199*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS registration success
200*5113495bSYour Name  *         QDF_STATUS_E_NOSUPPORT not support this feature
201*5113495bSYour Name  */
202*5113495bSYour Name static inline QDF_STATUS
cdp_peer_state_update(ol_txrx_soc_handle soc,uint8_t * peer_addr,enum ol_txrx_peer_state state)203*5113495bSYour Name cdp_peer_state_update(ol_txrx_soc_handle soc, uint8_t *peer_addr,
204*5113495bSYour Name 		      enum ol_txrx_peer_state state)
205*5113495bSYour Name {
206*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
207*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
208*5113495bSYour Name 			"%s invalid instance", __func__);
209*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
210*5113495bSYour Name 	}
211*5113495bSYour Name 
212*5113495bSYour Name 	if (soc->ops->peer_ops->peer_state_update)
213*5113495bSYour Name 		return soc->ops->peer_ops->peer_state_update(soc, peer_addr,
214*5113495bSYour Name 							     state);
215*5113495bSYour Name 
216*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
217*5113495bSYour Name }
218*5113495bSYour Name 
219*5113495bSYour Name /**
220*5113495bSYour Name  * cdp_peer_state_get() - Get local peer state
221*5113495bSYour Name  * @soc: data path soc handle
222*5113495bSYour Name  * @vdev_id: virtual interface id
223*5113495bSYour Name  * @peer_mac: peer mac addr
224*5113495bSYour Name  * @slowpath: call from slow path or not
225*5113495bSYour Name  *
226*5113495bSYour Name  * Get local peer state
227*5113495bSYour Name  *
228*5113495bSYour Name  * Return: peer status
229*5113495bSYour Name  */
230*5113495bSYour Name static inline int
cdp_peer_state_get(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,bool slowpath)231*5113495bSYour Name cdp_peer_state_get(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac, bool slowpath)
232*5113495bSYour Name {
233*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
234*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
235*5113495bSYour Name 			"%s invalid instance", __func__);
236*5113495bSYour Name 		return 0;
237*5113495bSYour Name 	}
238*5113495bSYour Name 
239*5113495bSYour Name 	if (soc->ops->peer_ops->get_peer_state)
240*5113495bSYour Name 		return soc->ops->peer_ops->get_peer_state(soc, vdev_id,
241*5113495bSYour Name 							  peer_mac,
242*5113495bSYour Name 							  slowpath);
243*5113495bSYour Name 
244*5113495bSYour Name 	return 0;
245*5113495bSYour Name }
246*5113495bSYour Name 
247*5113495bSYour Name /**
248*5113495bSYour Name  * cdp_peer_get_vdevid() - Get virtual interface id which peer registered
249*5113495bSYour Name  * @soc: data path soc handle
250*5113495bSYour Name  * @peer_mac: peer mac address
251*5113495bSYour Name  * @vdev_id: virtual interface id which peer registered
252*5113495bSYour Name  *
253*5113495bSYour Name  * Get virtual interface id which peer registered
254*5113495bSYour Name  *
255*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS registration success
256*5113495bSYour Name  *         QDF_STATUS_E_NOSUPPORT not support this feature
257*5113495bSYour Name  */
258*5113495bSYour Name static inline QDF_STATUS
cdp_peer_get_vdevid(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint8_t * vdev_id)259*5113495bSYour Name cdp_peer_get_vdevid(ol_txrx_soc_handle soc,
260*5113495bSYour Name 		    uint8_t  *peer_mac, uint8_t *vdev_id)
261*5113495bSYour Name {
262*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
263*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
264*5113495bSYour Name 			"%s invalid instance", __func__);
265*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
266*5113495bSYour Name 	}
267*5113495bSYour Name 
268*5113495bSYour Name 	if (soc->ops->peer_ops->get_vdevid)
269*5113495bSYour Name 		return soc->ops->peer_ops->get_vdevid(soc, peer_mac, vdev_id);
270*5113495bSYour Name 
271*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
272*5113495bSYour Name }
273*5113495bSYour Name 
274*5113495bSYour Name /**
275*5113495bSYour Name  * cdp_peer_get_vdev_by_peer_addr() - Get vdev instance by local peer address
276*5113495bSYour Name  * @soc: data path soc handle
277*5113495bSYour Name  * @pdev: data path device instance
278*5113495bSYour Name  * @peer_addr: peer mac address
279*5113495bSYour Name  *
280*5113495bSYour Name  * Get virtual interface id by local peer id
281*5113495bSYour Name  *
282*5113495bSYour Name  * Return: Virtual interface instance
283*5113495bSYour Name  *         NULL in case cannot find
284*5113495bSYour Name  */
285*5113495bSYour Name static inline struct cdp_vdev
cdp_peer_get_vdev_by_peer_addr(ol_txrx_soc_handle soc,struct cdp_pdev * pdev,struct qdf_mac_addr peer_addr)286*5113495bSYour Name *cdp_peer_get_vdev_by_peer_addr(ol_txrx_soc_handle soc, struct cdp_pdev *pdev,
287*5113495bSYour Name 				struct qdf_mac_addr peer_addr)
288*5113495bSYour Name {
289*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
290*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
291*5113495bSYour Name 			"%s invalid instance", __func__);
292*5113495bSYour Name 		return NULL;
293*5113495bSYour Name 	}
294*5113495bSYour Name 
295*5113495bSYour Name 	if (soc->ops->peer_ops->get_vdev_by_peer_addr)
296*5113495bSYour Name 		return soc->ops->peer_ops->get_vdev_by_peer_addr(pdev,
297*5113495bSYour Name 								 peer_addr);
298*5113495bSYour Name 
299*5113495bSYour Name 	return NULL;
300*5113495bSYour Name }
301*5113495bSYour Name 
302*5113495bSYour Name /**
303*5113495bSYour Name  * cdp_peer_get_peer_mac_addr() - Get peer mac address
304*5113495bSYour Name  * @soc: data path soc handle
305*5113495bSYour Name  * @peer: peer instance
306*5113495bSYour Name  *
307*5113495bSYour Name  * Get peer mac address
308*5113495bSYour Name  *
309*5113495bSYour Name  * Return: peer mac address pointer
310*5113495bSYour Name  *         NULL in case cannot find
311*5113495bSYour Name  */
312*5113495bSYour Name static inline uint8_t
cdp_peer_get_peer_mac_addr(ol_txrx_soc_handle soc,void * peer)313*5113495bSYour Name *cdp_peer_get_peer_mac_addr(ol_txrx_soc_handle soc, void *peer)
314*5113495bSYour Name {
315*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
316*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
317*5113495bSYour Name 			"%s invalid instance", __func__);
318*5113495bSYour Name 		return NULL;
319*5113495bSYour Name 	}
320*5113495bSYour Name 
321*5113495bSYour Name 	if (soc->ops->peer_ops->peer_get_peer_mac_addr)
322*5113495bSYour Name 		return soc->ops->peer_ops->peer_get_peer_mac_addr(peer);
323*5113495bSYour Name 
324*5113495bSYour Name 	return NULL;
325*5113495bSYour Name }
326*5113495bSYour Name 
327*5113495bSYour Name /**
328*5113495bSYour Name  * cdp_peer_update_ibss_add_peer_num_of_vdev() - update number of peer
329*5113495bSYour Name  * @soc: data path soc handle
330*5113495bSYour Name  * @vdev_id: virtual interface instance id
331*5113495bSYour Name  * @peer_num_delta: number of peer should be updated
332*5113495bSYour Name  *
333*5113495bSYour Name  * update number of peer
334*5113495bSYour Name  *
335*5113495bSYour Name  * Return: updated number of peer
336*5113495bSYour Name  *         0 fail
337*5113495bSYour Name  */
338*5113495bSYour Name static inline int16_t
cdp_peer_update_ibss_add_peer_num_of_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id,int16_t peer_num_delta)339*5113495bSYour Name cdp_peer_update_ibss_add_peer_num_of_vdev(ol_txrx_soc_handle soc,
340*5113495bSYour Name 					  uint8_t vdev_id,
341*5113495bSYour Name 					  int16_t peer_num_delta)
342*5113495bSYour Name {
343*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
344*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
345*5113495bSYour Name 			"%s invalid instance", __func__);
346*5113495bSYour Name 		return 0;
347*5113495bSYour Name 	}
348*5113495bSYour Name 
349*5113495bSYour Name 	if (soc->ops->peer_ops->update_ibss_add_peer_num_of_vdev)
350*5113495bSYour Name 		return soc->ops->peer_ops->update_ibss_add_peer_num_of_vdev(
351*5113495bSYour Name 								soc, vdev_id,
352*5113495bSYour Name 								peer_num_delta);
353*5113495bSYour Name 
354*5113495bSYour Name 	return 0;
355*5113495bSYour Name }
356*5113495bSYour Name 
357*5113495bSYour Name /**
358*5113495bSYour Name  * cdp_peer_copy_mac_addr_raw() - copy peer mac address
359*5113495bSYour Name  * @soc: data path soc handle
360*5113495bSYour Name  * @vdev_id: virtual interface instance id
361*5113495bSYour Name  * @bss_addr: mac address should be copied
362*5113495bSYour Name  *
363*5113495bSYour Name  * copy peer mac address
364*5113495bSYour Name  *
365*5113495bSYour Name  * Return: none
366*5113495bSYour Name  */
367*5113495bSYour Name static inline void
cdp_peer_copy_mac_addr_raw(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * bss_addr)368*5113495bSYour Name cdp_peer_copy_mac_addr_raw(ol_txrx_soc_handle soc,
369*5113495bSYour Name 			   uint8_t vdev_id, uint8_t *bss_addr)
370*5113495bSYour Name {
371*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
372*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
373*5113495bSYour Name 			"%s invalid instance", __func__);
374*5113495bSYour Name 		return;
375*5113495bSYour Name 	}
376*5113495bSYour Name 
377*5113495bSYour Name 	if (soc->ops->peer_ops->copy_mac_addr_raw)
378*5113495bSYour Name 		return soc->ops->peer_ops->copy_mac_addr_raw(soc, vdev_id,
379*5113495bSYour Name 							     bss_addr);
380*5113495bSYour Name 
381*5113495bSYour Name 	return;
382*5113495bSYour Name }
383*5113495bSYour Name 
384*5113495bSYour Name /**
385*5113495bSYour Name  * cdp_peer_add_last_real_peer() - Add peer with last peer marking
386*5113495bSYour Name  * @soc: data path soc handle
387*5113495bSYour Name  * @pdev_id: data path device instance id
388*5113495bSYour Name  * @vdev_id: virtual interface instance id
389*5113495bSYour Name  *
390*5113495bSYour Name  * copy peer mac address
391*5113495bSYour Name  *
392*5113495bSYour Name  * Return: none
393*5113495bSYour Name  */
394*5113495bSYour Name static inline void
cdp_peer_add_last_real_peer(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t vdev_id)395*5113495bSYour Name cdp_peer_add_last_real_peer(ol_txrx_soc_handle soc, uint8_t pdev_id,
396*5113495bSYour Name 			    uint8_t vdev_id)
397*5113495bSYour Name {
398*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
399*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
400*5113495bSYour Name 			"%s invalid instance", __func__);
401*5113495bSYour Name 		return;
402*5113495bSYour Name 	}
403*5113495bSYour Name 
404*5113495bSYour Name 	if (soc->ops->peer_ops->add_last_real_peer)
405*5113495bSYour Name 		return soc->ops->peer_ops->add_last_real_peer(soc, pdev_id,
406*5113495bSYour Name 							      vdev_id);
407*5113495bSYour Name 	return;
408*5113495bSYour Name }
409*5113495bSYour Name 
410*5113495bSYour Name /**
411*5113495bSYour Name  * cdp_peer_is_vdev_restore_last_peer() - restore last peer
412*5113495bSYour Name  * @soc: data path soc handle
413*5113495bSYour Name  * @vdev_id: virtual interface id
414*5113495bSYour Name  * @peer_mac: peer mac address
415*5113495bSYour Name  *
416*5113495bSYour Name  * restore last peer
417*5113495bSYour Name  *
418*5113495bSYour Name  * Return: true, restore success
419*5113495bSYour Name  *         false, restore fail
420*5113495bSYour Name  */
421*5113495bSYour Name static inline bool
cdp_peer_is_vdev_restore_last_peer(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)422*5113495bSYour Name cdp_peer_is_vdev_restore_last_peer(ol_txrx_soc_handle soc, uint8_t vdev_id,
423*5113495bSYour Name 				   uint8_t *peer_mac)
424*5113495bSYour Name {
425*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
426*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
427*5113495bSYour Name 			"%s invalid instance", __func__);
428*5113495bSYour Name 		return false;
429*5113495bSYour Name 	}
430*5113495bSYour Name 
431*5113495bSYour Name 	if (soc->ops->peer_ops->is_vdev_restore_last_peer)
432*5113495bSYour Name 		return soc->ops->peer_ops->is_vdev_restore_last_peer(soc,
433*5113495bSYour Name 								     vdev_id,
434*5113495bSYour Name 								     peer_mac);
435*5113495bSYour Name 
436*5113495bSYour Name 	return false;
437*5113495bSYour Name }
438*5113495bSYour Name 
439*5113495bSYour Name /**
440*5113495bSYour Name  * cdp_peer_update_last_real_peer() - update last real peer
441*5113495bSYour Name  * @soc: data path soc handle
442*5113495bSYour Name  * @pdev_id: data path device instance id
443*5113495bSYour Name  * @vdev_id: virtual interface id
444*5113495bSYour Name  * @restore_last_peer: restore last peer or not
445*5113495bSYour Name  *
446*5113495bSYour Name  * update last real peer
447*5113495bSYour Name  *
448*5113495bSYour Name  * Return: none
449*5113495bSYour Name  */
450*5113495bSYour Name static inline void
cdp_peer_update_last_real_peer(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t vdev_id,bool restore_last_peer)451*5113495bSYour Name cdp_peer_update_last_real_peer(ol_txrx_soc_handle soc, uint8_t pdev_id,
452*5113495bSYour Name 			       uint8_t vdev_id, bool restore_last_peer)
453*5113495bSYour Name {
454*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
455*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
456*5113495bSYour Name 			"%s invalid instance", __func__);
457*5113495bSYour Name 		return;
458*5113495bSYour Name 	}
459*5113495bSYour Name 
460*5113495bSYour Name 	if (soc->ops->peer_ops->update_last_real_peer)
461*5113495bSYour Name 		return soc->ops->peer_ops->update_last_real_peer(
462*5113495bSYour Name 						soc, pdev_id, vdev_id,
463*5113495bSYour Name 						restore_last_peer);
464*5113495bSYour Name 
465*5113495bSYour Name 	return;
466*5113495bSYour Name }
467*5113495bSYour Name 
468*5113495bSYour Name /**
469*5113495bSYour Name  * cdp_peer_detach_force_delete() - Detach and delete a peer's data object
470*5113495bSYour Name  * @soc: data path soc handle
471*5113495bSYour Name  * @vdev_id: data path virtual interface id
472*5113495bSYour Name  * @peer_mac: peer mac address
473*5113495bSYour Name  *
474*5113495bSYour Name  * Detach a peer and force the peer object to be removed. It is called during
475*5113495bSYour Name  * roaming scenario when the firmware has already deleted a peer.
476*5113495bSYour Name  * Peer object is freed immediately to avoid duplicate peers during roam sync
477*5113495bSYour Name  * indication processing.
478*5113495bSYour Name  *
479*5113495bSYour Name  * Return: None
480*5113495bSYour Name  */
cdp_peer_detach_force_delete(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)481*5113495bSYour Name static inline void cdp_peer_detach_force_delete(ol_txrx_soc_handle soc,
482*5113495bSYour Name 						uint8_t vdev_id,
483*5113495bSYour Name 						uint8_t *peer_mac)
484*5113495bSYour Name {
485*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
486*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
487*5113495bSYour Name 			"%s invalid instance", __func__);
488*5113495bSYour Name 		return;
489*5113495bSYour Name 	}
490*5113495bSYour Name 
491*5113495bSYour Name 	if (soc->ops->peer_ops->peer_detach_force_delete)
492*5113495bSYour Name 		return soc->ops->peer_ops->peer_detach_force_delete(soc,
493*5113495bSYour Name 								    vdev_id,
494*5113495bSYour Name 								    peer_mac);
495*5113495bSYour Name 
496*5113495bSYour Name 	return;
497*5113495bSYour Name }
498*5113495bSYour Name 
499*5113495bSYour Name /**
500*5113495bSYour Name  * is_cdp_peer_detach_force_delete_supported() - To check if force delete
501*5113495bSYour Name  *						 operation is supported
502*5113495bSYour Name  * @soc: pointer to SOC handle
503*5113495bSYour Name  *
504*5113495bSYour Name  * Some of the platforms support force delete operation and some of them
505*5113495bSYour Name  * don't. This API returns true if API which handles force delete operation
506*5113495bSYour Name  * is registered and false otherwise.
507*5113495bSYour Name  *
508*5113495bSYour Name  * Return: true if API which handles force delete operation is registered
509*5113495bSYour Name  *	   false in all other cases
510*5113495bSYour Name  */
511*5113495bSYour Name static inline bool
is_cdp_peer_detach_force_delete_supported(ol_txrx_soc_handle soc)512*5113495bSYour Name is_cdp_peer_detach_force_delete_supported(ol_txrx_soc_handle soc)
513*5113495bSYour Name {
514*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
515*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
516*5113495bSYour Name 			  "%s invalid instance", __func__);
517*5113495bSYour Name 		return false;
518*5113495bSYour Name 	}
519*5113495bSYour Name 
520*5113495bSYour Name 	if (soc->ops->peer_ops->peer_detach_force_delete)
521*5113495bSYour Name 		return true;
522*5113495bSYour Name 
523*5113495bSYour Name 	return false;
524*5113495bSYour Name }
525*5113495bSYour Name 
526*5113495bSYour Name /**
527*5113495bSYour Name  * cdp_peer_set_peer_as_tdls() - To set peer as tdls peer
528*5113495bSYour Name  * @soc: pointer to SOC handle
529*5113495bSYour Name  * @vdev_id: virtual interface id
530*5113495bSYour Name  * @peer_mac: peer mac address
531*5113495bSYour Name  * @val: true or false
532*5113495bSYour Name  *
533*5113495bSYour Name  * Return: void
534*5113495bSYour Name  */
535*5113495bSYour Name static inline void
cdp_peer_set_peer_as_tdls(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,bool val)536*5113495bSYour Name cdp_peer_set_peer_as_tdls(ol_txrx_soc_handle soc, uint8_t vdev_id,
537*5113495bSYour Name 			  uint8_t *peer_mac, bool val)
538*5113495bSYour Name {
539*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
540*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
541*5113495bSYour Name 			  "%s invalid instance", __func__);
542*5113495bSYour Name 		return;
543*5113495bSYour Name 	}
544*5113495bSYour Name 
545*5113495bSYour Name 	if (soc->ops->peer_ops->set_peer_as_tdls_peer)
546*5113495bSYour Name 		soc->ops->peer_ops->set_peer_as_tdls_peer(soc, vdev_id,
547*5113495bSYour Name 							  peer_mac, val);
548*5113495bSYour Name }
549*5113495bSYour Name 
550*5113495bSYour Name /**
551*5113495bSYour Name  * cdp_peer_set_tdls_offchan_enabled() - Set tdls offchan operation as enabled
552*5113495bSYour Name  * @soc: pointer to SOC handle
553*5113495bSYour Name  * @vdev_id: virtual interface id
554*5113495bSYour Name  * @peer_mac: peer mac address
555*5113495bSYour Name  * @val: true or false
556*5113495bSYour Name  *
557*5113495bSYour Name  * update tdls_offchan_enabled
558*5113495bSYour Name  *
559*5113495bSYour Name  * Return: none
560*5113495bSYour Name  */
561*5113495bSYour Name static inline void
cdp_peer_set_tdls_offchan_enabled(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,bool val)562*5113495bSYour Name cdp_peer_set_tdls_offchan_enabled(ol_txrx_soc_handle soc, uint8_t vdev_id,
563*5113495bSYour Name 				  uint8_t *peer_mac, bool val)
564*5113495bSYour Name {
565*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
566*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
567*5113495bSYour Name 			  "%s invalid instance", __func__);
568*5113495bSYour Name 		return;
569*5113495bSYour Name 	}
570*5113495bSYour Name 
571*5113495bSYour Name 	if (soc->ops->peer_ops->set_tdls_offchan_enabled)
572*5113495bSYour Name 		soc->ops->peer_ops->set_tdls_offchan_enabled(soc, vdev_id,
573*5113495bSYour Name 							     peer_mac, val);
574*5113495bSYour Name }
575*5113495bSYour Name 
576*5113495bSYour Name /**
577*5113495bSYour Name  * cdp_peer_flush_frags() - Flush frags on peer
578*5113495bSYour Name  * @soc: data path soc handle
579*5113495bSYour Name  * @vdev_id: virtual interface id
580*5113495bSYour Name  * @peer_mac: peer mac addr
581*5113495bSYour Name  *
582*5113495bSYour Name  * Return: None
583*5113495bSYour Name  */
584*5113495bSYour Name static inline void
cdp_peer_flush_frags(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)585*5113495bSYour Name cdp_peer_flush_frags(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac)
586*5113495bSYour Name {
587*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->peer_ops) {
588*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
589*5113495bSYour Name 			  "%s invalid instance", __func__);
590*5113495bSYour Name 		return;
591*5113495bSYour Name 	}
592*5113495bSYour Name 
593*5113495bSYour Name 	if (soc->ops->peer_ops->peer_flush_frags)
594*5113495bSYour Name 		soc->ops->peer_ops->peer_flush_frags(soc, vdev_id, peer_mac);
595*5113495bSYour Name }
596*5113495bSYour Name #endif /* _CDP_TXRX_PEER_H_ */
597