xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_ctrl.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-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: cdp_txrx_ctrl.h
22*5113495bSYour Name  * Define the host data path control API functions
23*5113495bSYour Name  * called by the host control SW and the OS interface module
24*5113495bSYour Name  */
25*5113495bSYour Name 
26*5113495bSYour Name #ifndef _CDP_TXRX_CTRL_H_
27*5113495bSYour Name #define _CDP_TXRX_CTRL_H_
28*5113495bSYour Name #include "cdp_txrx_handle.h"
29*5113495bSYour Name #include "cdp_txrx_cmn_struct.h"
30*5113495bSYour Name #include "cdp_txrx_cmn.h"
31*5113495bSYour Name #include "cdp_txrx_ops.h"
32*5113495bSYour Name 
cdp_is_target_ar900b(ol_txrx_soc_handle soc)33*5113495bSYour Name static inline int cdp_is_target_ar900b
34*5113495bSYour Name 	(ol_txrx_soc_handle soc)
35*5113495bSYour Name {
36*5113495bSYour Name 	if (!soc || !soc->ops) {
37*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
38*5113495bSYour Name 		QDF_BUG(0);
39*5113495bSYour Name 		return 0;
40*5113495bSYour Name 	}
41*5113495bSYour Name 
42*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
43*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_is_target_ar900b)
44*5113495bSYour Name 		return 0;
45*5113495bSYour Name 
46*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_is_target_ar900b(soc);
47*5113495bSYour Name }
48*5113495bSYour Name 
49*5113495bSYour Name 
50*5113495bSYour Name /* WIN */
51*5113495bSYour Name static inline int
cdp_mempools_attach(ol_txrx_soc_handle soc)52*5113495bSYour Name cdp_mempools_attach(ol_txrx_soc_handle soc)
53*5113495bSYour Name {
54*5113495bSYour Name 	if (!soc || !soc->ops) {
55*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
56*5113495bSYour Name 		QDF_BUG(0);
57*5113495bSYour Name 		return 0;
58*5113495bSYour Name 	}
59*5113495bSYour Name 
60*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
61*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_mempools_attach)
62*5113495bSYour Name 		return 0;
63*5113495bSYour Name 
64*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_mempools_attach(soc);
65*5113495bSYour Name }
66*5113495bSYour Name 
67*5113495bSYour Name 
68*5113495bSYour Name #if defined(ATH_SUPPORT_NAC) || defined(ATH_SUPPORT_NAC_RSSI)
69*5113495bSYour Name /**
70*5113495bSYour Name  * cdp_update_filter_neighbour_peers() - update the neighbour peer addresses
71*5113495bSYour Name  * @soc: the pointer to soc object
72*5113495bSYour Name  * @vdev_id: id of the pointer to vdev
73*5113495bSYour Name  * @cmd: add/del entry into peer table
74*5113495bSYour Name  * @macaddr: the address of neighbour peer
75*5113495bSYour Name  *
76*5113495bSYour Name  *  This defines interface function to update neighbour peers addresses
77*5113495bSYour Name  *  which needs to be filtered
78*5113495bSYour Name  *
79*5113495bSYour Name  * Return: int
80*5113495bSYour Name  */
81*5113495bSYour Name static inline int
cdp_update_filter_neighbour_peers(ol_txrx_soc_handle soc,uint8_t vdev_id,uint32_t cmd,uint8_t * macaddr)82*5113495bSYour Name cdp_update_filter_neighbour_peers(ol_txrx_soc_handle soc,
83*5113495bSYour Name 	uint8_t vdev_id, uint32_t cmd, uint8_t *macaddr)
84*5113495bSYour Name {
85*5113495bSYour Name 	if (!soc || !soc->ops) {
86*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
87*5113495bSYour Name 		QDF_BUG(0);
88*5113495bSYour Name 		return 0;
89*5113495bSYour Name 	}
90*5113495bSYour Name 
91*5113495bSYour Name 	if (!soc->ops->mon_ops ||
92*5113495bSYour Name 	    !soc->ops->mon_ops->txrx_update_filter_neighbour_peers)
93*5113495bSYour Name 		return 0;
94*5113495bSYour Name 
95*5113495bSYour Name 	return soc->ops->mon_ops->txrx_update_filter_neighbour_peers
96*5113495bSYour Name 			(soc, vdev_id, cmd, macaddr);
97*5113495bSYour Name }
98*5113495bSYour Name #endif /* ATH_SUPPORT_NAC || ATH_SUPPORT_NAC_RSSI*/
99*5113495bSYour Name 
100*5113495bSYour Name /**
101*5113495bSYour Name  * cdp_update_mon_mac_filter() - update the monitor buffer and status filter
102*5113495bSYour Name  * @soc: the pointer to soc object
103*5113495bSYour Name  * @vdev_id: id of the pointer to vdev
104*5113495bSYour Name  * @cmd: add/del entry into peer table
105*5113495bSYour Name  *
106*5113495bSYour Name  * This defines interface function to set/reset monitor filter
107*5113495bSYour Name  * in case of special vap (scan radio)
108*5113495bSYour Name  *
109*5113495bSYour Name  * Return: QDF_STATUS
110*5113495bSYour Name  */
111*5113495bSYour Name static inline QDF_STATUS
cdp_update_mon_mac_filter(ol_txrx_soc_handle soc,uint8_t vdev_id,uint32_t cmd)112*5113495bSYour Name cdp_update_mon_mac_filter(ol_txrx_soc_handle soc,
113*5113495bSYour Name 			  uint8_t vdev_id, uint32_t cmd)
114*5113495bSYour Name {
115*5113495bSYour Name 	if (!soc || !soc->ops) {
116*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
117*5113495bSYour Name 		QDF_BUG(0);
118*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
119*5113495bSYour Name 	}
120*5113495bSYour Name 
121*5113495bSYour Name 	if (!soc->ops->mon_ops ||
122*5113495bSYour Name 	    !soc->ops->mon_ops->txrx_update_mon_mac_filter)
123*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
124*5113495bSYour Name 
125*5113495bSYour Name 	return soc->ops->mon_ops->txrx_update_mon_mac_filter
126*5113495bSYour Name 			(soc, vdev_id, cmd);
127*5113495bSYour Name }
128*5113495bSYour Name 
129*5113495bSYour Name #ifdef WLAN_SUPPORT_MSCS
130*5113495bSYour Name /**
131*5113495bSYour Name  * cdp_record_vdev_mscs_params() - record the MSCS data and send it to the
132*5113495bSYour Name  *                                 Data path
133*5113495bSYour Name  * @soc: the pointer to soc object
134*5113495bSYour Name  * @vdev_id: id of the pointer to vdev
135*5113495bSYour Name  * @macaddr: the address of neighbour peer
136*5113495bSYour Name  * @mscs_params: Structure having MSCS params obtained from handshake
137*5113495bSYour Name  * @active: Flag to set MSCS active/inactive
138*5113495bSYour Name  *
139*5113495bSYour Name  * This defines interface function to record the MSCS procedure
140*5113495bSYour Name  * based data parameters so that the data path layer can access it
141*5113495bSYour Name  *
142*5113495bSYour Name  * Return: QDF_STATUS
143*5113495bSYour Name  */
144*5113495bSYour Name static inline QDF_STATUS
cdp_record_vdev_mscs_params(ol_txrx_soc_handle soc,uint8_t * macaddr,uint8_t vdev_id,struct cdp_mscs_params * mscs_params,bool active)145*5113495bSYour Name cdp_record_vdev_mscs_params(ol_txrx_soc_handle soc, uint8_t
146*5113495bSYour Name 		*macaddr, uint8_t vdev_id, struct cdp_mscs_params *mscs_params,
147*5113495bSYour Name 		bool active)
148*5113495bSYour Name {
149*5113495bSYour Name 	if (!soc || !soc->ops) {
150*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
151*5113495bSYour Name 		QDF_BUG(0);
152*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
153*5113495bSYour Name 	}
154*5113495bSYour Name 
155*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
156*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_record_mscs_params)
157*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
158*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_record_mscs_params
159*5113495bSYour Name 			(soc, macaddr, vdev_id, mscs_params, active);
160*5113495bSYour Name }
161*5113495bSYour Name #endif
162*5113495bSYour Name 
163*5113495bSYour Name /**
164*5113495bSYour Name  * cdp_set_pdev_reo_dest() - set the Reo Destination ring for the pdev
165*5113495bSYour Name  * @soc: pointer to the soc
166*5113495bSYour Name  * @pdev_id: id of the data physical device object
167*5113495bSYour Name  * @val: the Reo destination ring index (1 to 4)
168*5113495bSYour Name  *
169*5113495bSYour Name  * This will be used to configure the Reo Destination ring for this pdev.
170*5113495bSYour Name  *
171*5113495bSYour Name  * Return: QDF_STATUS
172*5113495bSYour Name  */
173*5113495bSYour Name static inline QDF_STATUS
cdp_set_pdev_reo_dest(ol_txrx_soc_handle soc,uint8_t pdev_id,enum cdp_host_reo_dest_ring val)174*5113495bSYour Name cdp_set_pdev_reo_dest(ol_txrx_soc_handle soc,
175*5113495bSYour Name 		      uint8_t pdev_id, enum cdp_host_reo_dest_ring val)
176*5113495bSYour Name {
177*5113495bSYour Name 	if (!soc || !soc->ops) {
178*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
179*5113495bSYour Name 		QDF_BUG(0);
180*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
181*5113495bSYour Name 	}
182*5113495bSYour Name 
183*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
184*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_pdev_reo_dest)
185*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
186*5113495bSYour Name 
187*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_pdev_reo_dest
188*5113495bSYour Name 			(soc, pdev_id, val);
189*5113495bSYour Name }
190*5113495bSYour Name 
191*5113495bSYour Name /**
192*5113495bSYour Name  * cdp_get_pdev_reo_dest() - get the Reo Destination ring for the pdev
193*5113495bSYour Name  * @soc: pointer to the soc
194*5113495bSYour Name  * @pdev_id: id of physical device object
195*5113495bSYour Name  *
196*5113495bSYour Name  * Return: the Reo destination ring index (1 to 4), 0 if not supported.
197*5113495bSYour Name  */
198*5113495bSYour Name static inline enum cdp_host_reo_dest_ring
cdp_get_pdev_reo_dest(ol_txrx_soc_handle soc,uint8_t pdev_id)199*5113495bSYour Name cdp_get_pdev_reo_dest(ol_txrx_soc_handle soc, uint8_t pdev_id)
200*5113495bSYour Name {
201*5113495bSYour Name 	if (!soc || !soc->ops) {
202*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
203*5113495bSYour Name 		QDF_BUG(0);
204*5113495bSYour Name 		return cdp_host_reo_dest_ring_unknown;
205*5113495bSYour Name 	}
206*5113495bSYour Name 
207*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
208*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_pdev_reo_dest)
209*5113495bSYour Name 		return cdp_host_reo_dest_ring_unknown;
210*5113495bSYour Name 
211*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_pdev_reo_dest(soc, pdev_id);
212*5113495bSYour Name }
213*5113495bSYour Name 
214*5113495bSYour Name /* Is this similar to ol_txrx_peer_state_update() in MCL */
215*5113495bSYour Name 
216*5113495bSYour Name /**
217*5113495bSYour Name  * cdp_peer_authorize() - Update the authorize peer object at association time
218*5113495bSYour Name  * @soc: pointer to the soc
219*5113495bSYour Name  * @vdev_id: id of the pointer to vdev
220*5113495bSYour Name  * @peer_mac: mac address of the node's object
221*5113495bSYour Name  * @authorize: either to authorize or unauthorize peer
222*5113495bSYour Name  *
223*5113495bSYour Name  * For the host-based implementation of rate-control, it
224*5113495bSYour Name  * updates the peer/node-related parameters within rate-control
225*5113495bSYour Name  * context of the peer at association.
226*5113495bSYour Name  *
227*5113495bSYour Name  * Return: QDF_STATUS
228*5113495bSYour Name  */
229*5113495bSYour Name static inline QDF_STATUS
cdp_peer_authorize(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,u_int32_t authorize)230*5113495bSYour Name cdp_peer_authorize(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
231*5113495bSYour Name 		   u_int32_t authorize)
232*5113495bSYour Name {
233*5113495bSYour Name 	if (!soc || !soc->ops) {
234*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
235*5113495bSYour Name 		QDF_BUG(0);
236*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
237*5113495bSYour Name 	}
238*5113495bSYour Name 
239*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
240*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_peer_authorize)
241*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
242*5113495bSYour Name 
243*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_peer_authorize
244*5113495bSYour Name 			(soc, vdev_id, peer_mac, authorize);
245*5113495bSYour Name }
246*5113495bSYour Name 
247*5113495bSYour Name /**
248*5113495bSYour Name  * cdp_peer_get_authorize() - Get per authorize status
249*5113495bSYour Name  * @soc: pointer to the soc
250*5113495bSYour Name  * @vdev_id: id of the pointer to vdev
251*5113495bSYour Name  * @peer_mac: mac address of the node's object
252*5113495bSYour Name  *
253*5113495bSYour Name  * Return: true is peer is authorized, false otherwise
254*5113495bSYour Name  */
255*5113495bSYour Name static inline bool
cdp_peer_get_authorize(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)256*5113495bSYour Name cdp_peer_get_authorize(ol_txrx_soc_handle soc, uint8_t vdev_id,
257*5113495bSYour Name 		       uint8_t *peer_mac)
258*5113495bSYour Name {
259*5113495bSYour Name 	if (!soc || !soc->ops) {
260*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
261*5113495bSYour Name 		QDF_BUG(0);
262*5113495bSYour Name 		return false;
263*5113495bSYour Name 	}
264*5113495bSYour Name 
265*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
266*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_peer_get_authorize)
267*5113495bSYour Name 		return false;
268*5113495bSYour Name 
269*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_peer_get_authorize
270*5113495bSYour Name 			(soc, vdev_id, peer_mac);
271*5113495bSYour Name }
272*5113495bSYour Name 
cdp_tx_flush_buffers(ol_txrx_soc_handle soc,uint8_t vdev_id)273*5113495bSYour Name static inline void cdp_tx_flush_buffers
274*5113495bSYour Name (ol_txrx_soc_handle soc, uint8_t vdev_id)
275*5113495bSYour Name {
276*5113495bSYour Name 	if (!soc || !soc->ops) {
277*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
278*5113495bSYour Name 		QDF_BUG(0);
279*5113495bSYour Name 		return;
280*5113495bSYour Name 	}
281*5113495bSYour Name 
282*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
283*5113495bSYour Name 	    !soc->ops->ctrl_ops->tx_flush_buffers)
284*5113495bSYour Name 		return;
285*5113495bSYour Name 
286*5113495bSYour Name 	soc->ops->ctrl_ops->tx_flush_buffers(soc, vdev_id);
287*5113495bSYour Name }
288*5113495bSYour Name 
cdp_txrx_get_vdev_param(ol_txrx_soc_handle soc,uint8_t vdev_id,enum cdp_vdev_param_type type,cdp_config_param_type * val)289*5113495bSYour Name static inline QDF_STATUS cdp_txrx_get_vdev_param(ol_txrx_soc_handle soc,
290*5113495bSYour Name 						 uint8_t vdev_id,
291*5113495bSYour Name 						 enum cdp_vdev_param_type type,
292*5113495bSYour Name 						 cdp_config_param_type *val)
293*5113495bSYour Name {
294*5113495bSYour Name 	if (!soc || !soc->ops) {
295*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
296*5113495bSYour Name 		QDF_BUG(0);
297*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
298*5113495bSYour Name 	}
299*5113495bSYour Name 
300*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
301*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_vdev_param) {
302*5113495bSYour Name 		dp_cdp_debug("callback not registered:");
303*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
304*5113495bSYour Name 	}
305*5113495bSYour Name 
306*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_vdev_param(soc, vdev_id,
307*5113495bSYour Name 						       type, val);
308*5113495bSYour Name }
309*5113495bSYour Name 
310*5113495bSYour Name static inline QDF_STATUS
cdp_txrx_set_vdev_param(ol_txrx_soc_handle soc,uint8_t vdev_id,enum cdp_vdev_param_type type,cdp_config_param_type val)311*5113495bSYour Name cdp_txrx_set_vdev_param(ol_txrx_soc_handle soc,
312*5113495bSYour Name 			uint8_t vdev_id, enum cdp_vdev_param_type type,
313*5113495bSYour Name 			cdp_config_param_type val)
314*5113495bSYour Name {
315*5113495bSYour Name 	if (!soc || !soc->ops) {
316*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
317*5113495bSYour Name 		QDF_BUG(0);
318*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
319*5113495bSYour Name 	}
320*5113495bSYour Name 
321*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
322*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_vdev_param) {
323*5113495bSYour Name 		dp_cdp_nofl_debug("NULL vdev params callback");
324*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
325*5113495bSYour Name 	}
326*5113495bSYour Name 
327*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_vdev_param(soc, vdev_id,
328*5113495bSYour Name 						       type, val);
329*5113495bSYour Name }
330*5113495bSYour Name 
331*5113495bSYour Name static inline QDF_STATUS
cdp_txrx_set_psoc_param(ol_txrx_soc_handle soc,enum cdp_psoc_param_type type,cdp_config_param_type val)332*5113495bSYour Name cdp_txrx_set_psoc_param(ol_txrx_soc_handle soc,
333*5113495bSYour Name 			enum cdp_psoc_param_type type,
334*5113495bSYour Name 			cdp_config_param_type val)
335*5113495bSYour Name {
336*5113495bSYour Name 	if (!soc || !soc->ops) {
337*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
338*5113495bSYour Name 		QDF_BUG(0);
339*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
340*5113495bSYour Name 	}
341*5113495bSYour Name 
342*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
343*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_psoc_param)
344*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
345*5113495bSYour Name 
346*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_psoc_param(soc, type, val);
347*5113495bSYour Name }
348*5113495bSYour Name 
349*5113495bSYour Name static inline QDF_STATUS
cdp_txrx_get_psoc_param(ol_txrx_soc_handle soc,enum cdp_psoc_param_type type,cdp_config_param_type * val)350*5113495bSYour Name cdp_txrx_get_psoc_param(ol_txrx_soc_handle soc,
351*5113495bSYour Name 			enum cdp_psoc_param_type type,
352*5113495bSYour Name 			cdp_config_param_type *val)
353*5113495bSYour Name {
354*5113495bSYour Name 	if (!soc || !soc->ops) {
355*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
356*5113495bSYour Name 		QDF_BUG(0);
357*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
358*5113495bSYour Name 	}
359*5113495bSYour Name 
360*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
361*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_psoc_param)
362*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
363*5113495bSYour Name 
364*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_psoc_param(soc, type, val);
365*5113495bSYour Name }
366*5113495bSYour Name 
367*5113495bSYour Name static inline
cdp_vdev_alloc_vdev_stats_id(ol_txrx_soc_handle soc,uint8_t * vdev_stats_id)368*5113495bSYour Name QDF_STATUS cdp_vdev_alloc_vdev_stats_id(ol_txrx_soc_handle soc,
369*5113495bSYour Name 					uint8_t *vdev_stats_id)
370*5113495bSYour Name {
371*5113495bSYour Name 	if (!soc || !soc->ops) {
372*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
373*5113495bSYour Name 		QDF_BUG(0);
374*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
375*5113495bSYour Name 	}
376*5113495bSYour Name 
377*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
378*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_alloc_vdev_stats_id)
379*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
380*5113495bSYour Name 
381*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_alloc_vdev_stats_id
382*5113495bSYour Name 			(soc, vdev_stats_id);
383*5113495bSYour Name }
384*5113495bSYour Name 
385*5113495bSYour Name static inline
cdp_vdev_reset_vdev_stats_id(ol_txrx_soc_handle soc,uint8_t vdev_stats_id)386*5113495bSYour Name void cdp_vdev_reset_vdev_stats_id(ol_txrx_soc_handle soc,
387*5113495bSYour Name 				  uint8_t vdev_stats_id)
388*5113495bSYour Name {
389*5113495bSYour Name 	if (!soc || !soc->ops) {
390*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
391*5113495bSYour Name 		QDF_BUG(0);
392*5113495bSYour Name 		return;
393*5113495bSYour Name 	}
394*5113495bSYour Name 
395*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
396*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_reset_vdev_stats_id)
397*5113495bSYour Name 		return;
398*5113495bSYour Name 
399*5113495bSYour Name 	soc->ops->host_stats_ops->txrx_reset_vdev_stats_id(soc, vdev_stats_id);
400*5113495bSYour Name }
401*5113495bSYour Name 
402*5113495bSYour Name #ifdef VDEV_PEER_PROTOCOL_COUNT
403*5113495bSYour Name /**
404*5113495bSYour Name  * cdp_set_vdev_peer_protocol_count() - set per-peer protocol count tracking
405*5113495bSYour Name  * @soc: pointer to the soc
406*5113495bSYour Name  * @vdev_id: the data virtual device object
407*5113495bSYour Name  * @enable: enable per-peer protocol count
408*5113495bSYour Name  *
409*5113495bSYour Name  * Set per-peer protocol count feature enable
410*5113495bSYour Name  *
411*5113495bSYour Name  * Return: void
412*5113495bSYour Name  */
413*5113495bSYour Name static inline
cdp_set_vdev_peer_protocol_count(ol_txrx_soc_handle soc,int8_t vdev_id,bool enable)414*5113495bSYour Name void cdp_set_vdev_peer_protocol_count(ol_txrx_soc_handle soc, int8_t vdev_id,
415*5113495bSYour Name 				      bool enable)
416*5113495bSYour Name {
417*5113495bSYour Name 	if (!soc || !soc->ops) {
418*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
419*5113495bSYour Name 		QDF_BUG(0);
420*5113495bSYour Name 		return;
421*5113495bSYour Name 	}
422*5113495bSYour Name 
423*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
424*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_enable_peer_protocol_count)
425*5113495bSYour Name 		return;
426*5113495bSYour Name 
427*5113495bSYour Name 	soc->ops->ctrl_ops->txrx_enable_peer_protocol_count(soc, vdev_id,
428*5113495bSYour Name 							    enable);
429*5113495bSYour Name }
430*5113495bSYour Name 
431*5113495bSYour Name /**
432*5113495bSYour Name  * cdp_set_vdev_peer_protocol_drop_mask() - set per-peer protocol drop mask
433*5113495bSYour Name  * @soc: pointer to the soc
434*5113495bSYour Name  * @vdev_id: ID of the data virtual device object
435*5113495bSYour Name  * @drop_mask: drop_mask
436*5113495bSYour Name  *
437*5113495bSYour Name  * Set per-peer protocol drop_mask
438*5113495bSYour Name  *
439*5113495bSYour Name  * Return: void
440*5113495bSYour Name  */
441*5113495bSYour Name static inline
cdp_set_vdev_peer_protocol_drop_mask(ol_txrx_soc_handle soc,int8_t vdev_id,int drop_mask)442*5113495bSYour Name void cdp_set_vdev_peer_protocol_drop_mask(ol_txrx_soc_handle soc,
443*5113495bSYour Name 					  int8_t vdev_id, int drop_mask)
444*5113495bSYour Name {
445*5113495bSYour Name 	if (!soc || !soc->ops) {
446*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
447*5113495bSYour Name 		QDF_BUG(0);
448*5113495bSYour Name 		return;
449*5113495bSYour Name 	}
450*5113495bSYour Name 
451*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
452*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_peer_protocol_drop_mask)
453*5113495bSYour Name 		return;
454*5113495bSYour Name 
455*5113495bSYour Name 	soc->ops->ctrl_ops->txrx_set_peer_protocol_drop_mask(soc, vdev_id,
456*5113495bSYour Name 							 drop_mask);
457*5113495bSYour Name }
458*5113495bSYour Name 
459*5113495bSYour Name /**
460*5113495bSYour Name  * cdp_is_vdev_peer_protocol_count_enabled() - whether peer-protocol tracking
461*5113495bSYour Name  *                                             enabled
462*5113495bSYour Name  * @soc: pointer to the soc
463*5113495bSYour Name  * @vdev_id: ID of the data virtual device object
464*5113495bSYour Name  *
465*5113495bSYour Name  * Get whether peer protocol count feature enabled or not
466*5113495bSYour Name  *
467*5113495bSYour Name  * Return: whether feature enabled or not
468*5113495bSYour Name  */
469*5113495bSYour Name static inline
cdp_is_vdev_peer_protocol_count_enabled(ol_txrx_soc_handle soc,int8_t vdev_id)470*5113495bSYour Name int cdp_is_vdev_peer_protocol_count_enabled(ol_txrx_soc_handle soc,
471*5113495bSYour Name 					    int8_t vdev_id)
472*5113495bSYour Name {
473*5113495bSYour Name 	if (!soc || !soc->ops) {
474*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
475*5113495bSYour Name 		QDF_BUG(0);
476*5113495bSYour Name 		return 0;
477*5113495bSYour Name 	}
478*5113495bSYour Name 
479*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
480*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_is_peer_protocol_count_enabled)
481*5113495bSYour Name 		return 0;
482*5113495bSYour Name 
483*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_is_peer_protocol_count_enabled(soc,
484*5113495bSYour Name 								   vdev_id);
485*5113495bSYour Name }
486*5113495bSYour Name 
487*5113495bSYour Name /**
488*5113495bSYour Name  * cdp_get_peer_protocol_drop_mask() - get per-peer protocol count drop-mask
489*5113495bSYour Name  * @soc: pointer to the soc
490*5113495bSYour Name  * @vdev_id: ID of the data virtual device object
491*5113495bSYour Name  *
492*5113495bSYour Name  * Get peer-protocol-count drop-mask
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: peer-protocol-count drop-mask
495*5113495bSYour Name  */
496*5113495bSYour Name static inline
cdp_get_peer_protocol_drop_mask(ol_txrx_soc_handle soc,int8_t vdev_id)497*5113495bSYour Name int cdp_get_peer_protocol_drop_mask(ol_txrx_soc_handle soc, int8_t vdev_id)
498*5113495bSYour Name {
499*5113495bSYour Name 	if (!soc || !soc->ops) {
500*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
501*5113495bSYour Name 		QDF_BUG(0);
502*5113495bSYour Name 		return 0;
503*5113495bSYour Name 	}
504*5113495bSYour Name 
505*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
506*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_peer_protocol_drop_mask)
507*5113495bSYour Name 		return 0;
508*5113495bSYour Name 
509*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_peer_protocol_drop_mask(soc,
510*5113495bSYour Name 								    vdev_id);
511*5113495bSYour Name }
512*5113495bSYour Name 
513*5113495bSYour Name /*
514*5113495bSYour Name  * Rx-Ingress and Tx-Egress are in the lower level DP layer
515*5113495bSYour Name  * Rx-Egress and Tx-ingress are handled in osif layer for DP
516*5113495bSYour Name  * So
517*5113495bSYour Name  * Rx-Ingress and Tx-Egress definitions are in DP layer
518*5113495bSYour Name  * Rx-Egress and Tx-ingress mask definitions are here below
519*5113495bSYour Name  */
520*5113495bSYour Name #define VDEV_PEER_PROTOCOL_RX_INGRESS_MASK 1
521*5113495bSYour Name #define VDEV_PEER_PROTOCOL_TX_INGRESS_MASK 2
522*5113495bSYour Name #define VDEV_PEER_PROTOCOL_RX_EGRESS_MASK 4
523*5113495bSYour Name #define VDEV_PEER_PROTOCOL_TX_EGRESS_MASK 8
524*5113495bSYour Name 
525*5113495bSYour Name #else
526*5113495bSYour Name #define cdp_set_vdev_peer_protocol_count(soc, vdev_id, enable)
527*5113495bSYour Name #define cdp_set_vdev_peer_protocol_drop_mask(soc, vdev_id, drop_mask)
528*5113495bSYour Name #define cdp_is_vdev_peer_protocol_count_enabled(soc, vdev_id) 0
529*5113495bSYour Name #define cdp_get_peer_protocol_drop_mask(soc, vdev_id) 0
530*5113495bSYour Name #endif
531*5113495bSYour Name 
532*5113495bSYour Name /**
533*5113495bSYour Name  * cdp_txrx_set_pdev_param() - set pdev parameter
534*5113495bSYour Name  * @soc: opaque soc handle
535*5113495bSYour Name  * @pdev_id: id of data path pdev handle
536*5113495bSYour Name  * @type: param type
537*5113495bSYour Name  * @val: value
538*5113495bSYour Name  *
539*5113495bSYour Name  * Return: status: 0 - Success, non-zero: Failure
540*5113495bSYour Name  */
cdp_txrx_set_pdev_param(ol_txrx_soc_handle soc,uint8_t pdev_id,enum cdp_pdev_param_type type,cdp_config_param_type val)541*5113495bSYour Name static inline QDF_STATUS cdp_txrx_set_pdev_param(ol_txrx_soc_handle soc,
542*5113495bSYour Name 						 uint8_t pdev_id,
543*5113495bSYour Name 						 enum cdp_pdev_param_type type,
544*5113495bSYour Name 						 cdp_config_param_type val)
545*5113495bSYour Name {
546*5113495bSYour Name 	if (!soc || !soc->ops) {
547*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
548*5113495bSYour Name 		QDF_BUG(0);
549*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
550*5113495bSYour Name 	}
551*5113495bSYour Name 
552*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
553*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_pdev_param)
554*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
555*5113495bSYour Name 
556*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_pdev_param
557*5113495bSYour Name 			(soc, pdev_id, type, val);
558*5113495bSYour Name }
559*5113495bSYour Name 
560*5113495bSYour Name /**
561*5113495bSYour Name  * cdp_txrx_set_peer_param() - set pdev parameter
562*5113495bSYour Name  * @soc: opaque soc handle
563*5113495bSYour Name  * @vdev_id: id of data path vdev handle
564*5113495bSYour Name  * @peer_mac: peer mac address
565*5113495bSYour Name  * @type: param type
566*5113495bSYour Name  * @val: value
567*5113495bSYour Name  *
568*5113495bSYour Name  * Return: status: 0 - Success, non-zero: Failure
569*5113495bSYour Name  */
cdp_txrx_set_peer_param(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,enum cdp_peer_param_type type,cdp_config_param_type val)570*5113495bSYour Name static inline QDF_STATUS cdp_txrx_set_peer_param(ol_txrx_soc_handle soc,
571*5113495bSYour Name 						 uint8_t vdev_id,
572*5113495bSYour Name 						 uint8_t *peer_mac,
573*5113495bSYour Name 						 enum cdp_peer_param_type type,
574*5113495bSYour Name 						 cdp_config_param_type val)
575*5113495bSYour Name {
576*5113495bSYour Name 	if (!soc || !soc->ops) {
577*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
578*5113495bSYour Name 		QDF_BUG(0);
579*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
580*5113495bSYour Name 	}
581*5113495bSYour Name 
582*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
583*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_peer_param)
584*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
585*5113495bSYour Name 
586*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_peer_param
587*5113495bSYour Name 			(soc, vdev_id, peer_mac, type, val);
588*5113495bSYour Name }
589*5113495bSYour Name 
590*5113495bSYour Name /**
591*5113495bSYour Name  * cdp_txrx_get_peer_param() - set pdev parameter
592*5113495bSYour Name  * @soc: opaque soc handle
593*5113495bSYour Name  * @vdev_id: id of data path vdev handle
594*5113495bSYour Name  * @peer_mac: peer mac address
595*5113495bSYour Name  * @type: param type
596*5113495bSYour Name  * @val: address of buffer
597*5113495bSYour Name  *
598*5113495bSYour Name  * Return: status
599*5113495bSYour Name  */
cdp_txrx_get_peer_param(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,enum cdp_peer_param_type type,cdp_config_param_type * val)600*5113495bSYour Name static inline QDF_STATUS cdp_txrx_get_peer_param(ol_txrx_soc_handle soc,
601*5113495bSYour Name 						 uint8_t vdev_id,
602*5113495bSYour Name 						 uint8_t *peer_mac,
603*5113495bSYour Name 						 enum cdp_peer_param_type type,
604*5113495bSYour Name 						 cdp_config_param_type *val)
605*5113495bSYour Name {
606*5113495bSYour Name 	if (!soc || !soc->ops) {
607*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
608*5113495bSYour Name 		QDF_BUG(0);
609*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
610*5113495bSYour Name 	}
611*5113495bSYour Name 
612*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
613*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_peer_param)
614*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
615*5113495bSYour Name 
616*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_peer_param
617*5113495bSYour Name 			(soc, vdev_id, peer_mac, type, val);
618*5113495bSYour Name }
619*5113495bSYour Name 
620*5113495bSYour Name #ifdef QCA_MULTIPASS_SUPPORT
621*5113495bSYour Name static inline void
cdp_peer_set_vlan_id(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint16_t vlan_id)622*5113495bSYour Name cdp_peer_set_vlan_id(ol_txrx_soc_handle soc, uint8_t vdev_id,
623*5113495bSYour Name 		     uint8_t *peer_mac, uint16_t vlan_id)
624*5113495bSYour Name {
625*5113495bSYour Name 	if (!soc || !soc->ops) {
626*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
627*5113495bSYour Name 		QDF_BUG(0);
628*5113495bSYour Name 		return;
629*5113495bSYour Name 	}
630*5113495bSYour Name 
631*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
632*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_peer_set_vlan_id)
633*5113495bSYour Name 		return;
634*5113495bSYour Name 
635*5113495bSYour Name 	soc->ops->ctrl_ops->txrx_peer_set_vlan_id(soc, vdev_id, peer_mac,
636*5113495bSYour Name 						  vlan_id);
637*5113495bSYour Name }
638*5113495bSYour Name #endif
639*5113495bSYour Name 
640*5113495bSYour Name /**
641*5113495bSYour Name  * cdp_txrx_get_pdev_param() - get pdev parameter
642*5113495bSYour Name  * @soc: opaque soc handle
643*5113495bSYour Name  * @pdev_id: id of data path pdev handle
644*5113495bSYour Name  * @type: param type
645*5113495bSYour Name  * @value: address of value buffer
646*5113495bSYour Name  *
647*5113495bSYour Name  * Return: status
648*5113495bSYour Name  */
cdp_txrx_get_pdev_param(ol_txrx_soc_handle soc,uint8_t pdev_id,enum cdp_pdev_param_type type,cdp_config_param_type * value)649*5113495bSYour Name static inline QDF_STATUS cdp_txrx_get_pdev_param(ol_txrx_soc_handle soc,
650*5113495bSYour Name 						 uint8_t pdev_id,
651*5113495bSYour Name 						 enum cdp_pdev_param_type type,
652*5113495bSYour Name 						 cdp_config_param_type *value)
653*5113495bSYour Name {
654*5113495bSYour Name 	if (!soc || !soc->ops) {
655*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
656*5113495bSYour Name 		QDF_BUG(0);
657*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
658*5113495bSYour Name 	}
659*5113495bSYour Name 
660*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
661*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_pdev_param)
662*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
663*5113495bSYour Name 
664*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_pdev_param
665*5113495bSYour Name 			(soc, pdev_id, type, value);
666*5113495bSYour Name }
667*5113495bSYour Name 
668*5113495bSYour Name /**
669*5113495bSYour Name  * cdp_txrx_peer_protocol_cnt() - set peer protocol count
670*5113495bSYour Name  * @soc: opaque soc handle
671*5113495bSYour Name  * @vdev_id: vdev id
672*5113495bSYour Name  * @nbuf: data packet
673*5113495bSYour Name  * @is_egress: whether egress or ingress
674*5113495bSYour Name  * @is_rx: whether tx or rx
675*5113495bSYour Name  *
676*5113495bSYour Name  * Return: void
677*5113495bSYour Name  */
678*5113495bSYour Name #ifdef VDEV_PEER_PROTOCOL_COUNT
679*5113495bSYour Name static inline void
cdp_txrx_peer_protocol_cnt(ol_txrx_soc_handle soc,int8_t vdev_id,qdf_nbuf_t nbuf,enum vdev_peer_protocol_enter_exit is_egress,enum vdev_peer_protocol_tx_rx is_rx)680*5113495bSYour Name cdp_txrx_peer_protocol_cnt(ol_txrx_soc_handle soc,
681*5113495bSYour Name 			   int8_t vdev_id,
682*5113495bSYour Name 			   qdf_nbuf_t nbuf,
683*5113495bSYour Name 			   enum vdev_peer_protocol_enter_exit is_egress,
684*5113495bSYour Name 			   enum vdev_peer_protocol_tx_rx is_rx)
685*5113495bSYour Name {
686*5113495bSYour Name 	if (!soc || !soc->ops) {
687*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
688*5113495bSYour Name 		QDF_BUG(0);
689*5113495bSYour Name 		return;
690*5113495bSYour Name 	}
691*5113495bSYour Name 
692*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
693*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_peer_protocol_cnt)
694*5113495bSYour Name 		return;
695*5113495bSYour Name 
696*5113495bSYour Name 	soc->ops->ctrl_ops->txrx_peer_protocol_cnt(soc, vdev_id, nbuf,
697*5113495bSYour Name 						   is_egress, is_rx);
698*5113495bSYour Name }
699*5113495bSYour Name #else
700*5113495bSYour Name #define cdp_txrx_peer_protocol_cnt(soc, vdev_id, nbuf, is_egress, is_rx)
701*5113495bSYour Name #endif
702*5113495bSYour Name 
703*5113495bSYour Name /**
704*5113495bSYour Name  * cdp_enable_peer_based_pktlog()- Set flag in peer structure
705*5113495bSYour Name  * @soc: pointer to the soc
706*5113495bSYour Name  * @pdev_id: id of the data physical device object
707*5113495bSYour Name  * @enable: enable or disable peer based filter based pktlog
708*5113495bSYour Name  * @peer_macaddr: Mac address of peer which needs to be
709*5113495bSYour Name  * filtered
710*5113495bSYour Name  *
711*5113495bSYour Name  * This function will set flag in peer structure if peer based filtering
712*5113495bSYour Name  * is enabled for pktlog
713*5113495bSYour Name  *
714*5113495bSYour Name  * Return: int
715*5113495bSYour Name  */
716*5113495bSYour Name static inline int
cdp_enable_peer_based_pktlog(ol_txrx_soc_handle soc,uint8_t pdev_id,char * peer_macaddr,uint8_t enable)717*5113495bSYour Name cdp_enable_peer_based_pktlog(ol_txrx_soc_handle soc, uint8_t pdev_id,
718*5113495bSYour Name 			     char *peer_macaddr,
719*5113495bSYour Name 			     uint8_t enable)
720*5113495bSYour Name {
721*5113495bSYour Name 	if (!soc || !soc->ops) {
722*5113495bSYour Name 		QDF_TRACE_ERROR(QDF_MODULE_ID_DP,
723*5113495bSYour Name 				"%s invalid instance", __func__);
724*5113495bSYour Name 		QDF_BUG(0);
725*5113495bSYour Name 		return 0;
726*5113495bSYour Name 	}
727*5113495bSYour Name 
728*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
729*5113495bSYour Name 	    !soc->ops->ctrl_ops->enable_peer_based_pktlog)
730*5113495bSYour Name 		return 0;
731*5113495bSYour Name 
732*5113495bSYour Name 	return soc->ops->ctrl_ops->enable_peer_based_pktlog
733*5113495bSYour Name 			(soc, pdev_id, peer_macaddr, enable);
734*5113495bSYour Name }
735*5113495bSYour Name 
736*5113495bSYour Name /**
737*5113495bSYour Name  * cdp_calculate_delay_stats()- get rx delay stats
738*5113495bSYour Name  * @soc: pointer to the soc
739*5113495bSYour Name  * @vdev_id: id of vdev handle
740*5113495bSYour Name  * @nbuf: nbuf which is passed
741*5113495bSYour Name  *
742*5113495bSYour Name  * This function will calculate rx delay statistics.
743*5113495bSYour Name  */
744*5113495bSYour Name static inline QDF_STATUS
cdp_calculate_delay_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,qdf_nbuf_t nbuf)745*5113495bSYour Name cdp_calculate_delay_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
746*5113495bSYour Name 			  qdf_nbuf_t nbuf)
747*5113495bSYour Name {
748*5113495bSYour Name 	if (!soc || !soc->ops) {
749*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
750*5113495bSYour Name 		QDF_BUG(0);
751*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
752*5113495bSYour Name 	}
753*5113495bSYour Name 
754*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
755*5113495bSYour Name 	    !soc->ops->ctrl_ops->calculate_delay_stats) {
756*5113495bSYour Name 		dp_cdp_debug("callback not registered:");
757*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
758*5113495bSYour Name 	}
759*5113495bSYour Name 
760*5113495bSYour Name 	return soc->ops->ctrl_ops->calculate_delay_stats(soc, vdev_id, nbuf);
761*5113495bSYour Name }
762*5113495bSYour Name 
763*5113495bSYour Name /**
764*5113495bSYour Name  * cdp_wdi_event_sub() - Subscribe to a specified WDI event.
765*5113495bSYour Name  * @soc: pointer to the soc
766*5113495bSYour Name  * @pdev_id: id of the data physical device object
767*5113495bSYour Name  * @event_cb_sub: the callback and context for the event subscriber
768*5113495bSYour Name  * @event: which event's notifications are being subscribed to
769*5113495bSYour Name  *
770*5113495bSYour Name  * This function adds the provided wdi_event_subscribe object to a list of
771*5113495bSYour Name  * subscribers for the specified WDI event.
772*5113495bSYour Name  * When the event in question happens, each subscriber for the event will
773*5113495bSYour Name  * have their callback function invoked.
774*5113495bSYour Name  * The order in which callback functions from multiple subscribers are
775*5113495bSYour Name  * invoked is unspecified.
776*5113495bSYour Name  *
777*5113495bSYour Name  * Return: int
778*5113495bSYour Name  */
779*5113495bSYour Name static inline int
cdp_wdi_event_sub(ol_txrx_soc_handle soc,uint8_t pdev_id,wdi_event_subscribe * event_cb_sub,uint32_t event)780*5113495bSYour Name cdp_wdi_event_sub(ol_txrx_soc_handle soc, uint8_t pdev_id,
781*5113495bSYour Name 		  wdi_event_subscribe *event_cb_sub, uint32_t event)
782*5113495bSYour Name {
783*5113495bSYour Name 
784*5113495bSYour Name 	if (!soc || !soc->ops) {
785*5113495bSYour Name 		dp_cdp_debug("invalid instance");
786*5113495bSYour Name 		QDF_BUG(0);
787*5113495bSYour Name 		return 0;
788*5113495bSYour Name 	}
789*5113495bSYour Name 
790*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
791*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_wdi_event_sub)
792*5113495bSYour Name 		return 0;
793*5113495bSYour Name 
794*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_wdi_event_sub
795*5113495bSYour Name 			(soc, pdev_id, event_cb_sub, event);
796*5113495bSYour Name }
797*5113495bSYour Name 
798*5113495bSYour Name /**
799*5113495bSYour Name  * cdp_wdi_event_unsub() - Unsubscribe from a specified WDI event.
800*5113495bSYour Name  * @soc: pointer to the soc
801*5113495bSYour Name  * @pdev_id: id of the data physical device object
802*5113495bSYour Name  * @event_cb_sub: the callback and context for the event subscriber
803*5113495bSYour Name  * @event: which event's notifications are being subscribed to
804*5113495bSYour Name  *
805*5113495bSYour Name  * This function removes the provided event subscription object from the
806*5113495bSYour Name  * list of subscribers for its event.
807*5113495bSYour Name  * This function shall only be called if there was a successful prior call
808*5113495bSYour Name  * to cdp_wdi_event_sub() on the same wdi_event_subscribe object.
809*5113495bSYour Name  *
810*5113495bSYour Name  * Return: int
811*5113495bSYour Name  */
812*5113495bSYour Name static inline int
cdp_wdi_event_unsub(ol_txrx_soc_handle soc,uint8_t pdev_id,wdi_event_subscribe * event_cb_sub,uint32_t event)813*5113495bSYour Name cdp_wdi_event_unsub(ol_txrx_soc_handle soc,
814*5113495bSYour Name 		    uint8_t pdev_id, wdi_event_subscribe *event_cb_sub,
815*5113495bSYour Name 		    uint32_t event)
816*5113495bSYour Name {
817*5113495bSYour Name 
818*5113495bSYour Name 	if (!soc || !soc->ops) {
819*5113495bSYour Name 		dp_cdp_debug("invalid instance");
820*5113495bSYour Name 		QDF_BUG(0);
821*5113495bSYour Name 		return 0;
822*5113495bSYour Name 	}
823*5113495bSYour Name 
824*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
825*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_wdi_event_unsub)
826*5113495bSYour Name 		return 0;
827*5113495bSYour Name 
828*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_wdi_event_unsub
829*5113495bSYour Name 			(soc, pdev_id, event_cb_sub, event);
830*5113495bSYour Name }
831*5113495bSYour Name 
832*5113495bSYour Name /**
833*5113495bSYour Name  * cdp_get_sec_type() - Get security type from the from peer.
834*5113495bSYour Name  * @soc: pointer to the soc
835*5113495bSYour Name  * @vdev_id: id of vdev handle
836*5113495bSYour Name  * @peer_mac: peer mac address
837*5113495bSYour Name  * @sec_idx: mcast or ucast frame type.
838*5113495bSYour Name  *
839*5113495bSYour Name  * This function gets the Security information from the peer handler.
840*5113495bSYour Name  * The security information is got from the rx descriptor and filled in
841*5113495bSYour Name  * to the peer handler.
842*5113495bSYour Name  *
843*5113495bSYour Name  * Return: int
844*5113495bSYour Name  */
845*5113495bSYour Name static inline int
cdp_get_sec_type(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint8_t sec_idx)846*5113495bSYour Name cdp_get_sec_type(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
847*5113495bSYour Name 		 uint8_t sec_idx)
848*5113495bSYour Name {
849*5113495bSYour Name 	if (!soc || !soc->ops) {
850*5113495bSYour Name 		dp_cdp_debug("invalid instance");
851*5113495bSYour Name 		QDF_BUG(0);
852*5113495bSYour Name 		return A_ERROR;
853*5113495bSYour Name 	}
854*5113495bSYour Name 
855*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
856*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_sec_type)
857*5113495bSYour Name 		return A_ERROR;
858*5113495bSYour Name 
859*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_sec_type
860*5113495bSYour Name 		(soc, vdev_id, peer_mac, sec_idx);
861*5113495bSYour Name }
862*5113495bSYour Name 
863*5113495bSYour Name /**
864*5113495bSYour Name   * cdp_set_mgmt_tx_power() - function to set tx power for mgmt frames
865*5113495bSYour Name   * @soc: pointer to the soc
866*5113495bSYour Name   * @vdev_id : id of vdev handle
867*5113495bSYour Name   * @subtype: subtype
868*5113495bSYour Name   * @tx_power: Tx power
869*5113495bSYour Name   *
870*5113495bSYour Name   * Return: QDF_STATUS
871*5113495bSYour Name   */
872*5113495bSYour Name static inline QDF_STATUS
cdp_set_mgmt_tx_power(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t subtype,uint8_t tx_power)873*5113495bSYour Name cdp_set_mgmt_tx_power(ol_txrx_soc_handle soc,
874*5113495bSYour Name 		      uint8_t vdev_id, uint8_t subtype, uint8_t tx_power)
875*5113495bSYour Name {
876*5113495bSYour Name 	if (!soc || !soc->ops) {
877*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
878*5113495bSYour Name 		QDF_BUG(0);
879*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
880*5113495bSYour Name 	}
881*5113495bSYour Name 
882*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
883*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_update_mgmt_txpow_vdev)
884*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
885*5113495bSYour Name 
886*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_update_mgmt_txpow_vdev(soc, vdev_id,
887*5113495bSYour Name 							subtype, tx_power);
888*5113495bSYour Name }
889*5113495bSYour Name 
890*5113495bSYour Name /**
891*5113495bSYour Name  * cdp_get_pldev() - function to get pktlog device handle
892*5113495bSYour Name  * @soc: datapath soc handle
893*5113495bSYour Name  * @pdev_id: physical device id
894*5113495bSYour Name  *
895*5113495bSYour Name  * Return: pktlog device handle or NULL
896*5113495bSYour Name  */
897*5113495bSYour Name static inline void *
cdp_get_pldev(ol_txrx_soc_handle soc,uint8_t pdev_id)898*5113495bSYour Name cdp_get_pldev(ol_txrx_soc_handle soc, uint8_t pdev_id)
899*5113495bSYour Name {
900*5113495bSYour Name 	if (!soc || !soc->ops) {
901*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
902*5113495bSYour Name 			"%s invalid instance", __func__);
903*5113495bSYour Name 		QDF_BUG(0);
904*5113495bSYour Name 		return NULL;
905*5113495bSYour Name 	}
906*5113495bSYour Name 
907*5113495bSYour Name 	if (!soc->ops->ctrl_ops || !soc->ops->ctrl_ops->txrx_get_pldev)
908*5113495bSYour Name 		return NULL;
909*5113495bSYour Name 
910*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_pldev(soc, pdev_id);
911*5113495bSYour Name }
912*5113495bSYour Name 
913*5113495bSYour Name #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
914*5113495bSYour Name /**
915*5113495bSYour Name  * cdp_cfr_filter() - Configure Host RX monitor status ring for CFR
916*5113495bSYour Name  * @soc: SOC TXRX handle
917*5113495bSYour Name  * @pdev_id: ID of the physical device object
918*5113495bSYour Name  * @enable: Enable or disable CFR
919*5113495bSYour Name  * @filter_val: Flag to select filter for monitor mode
920*5113495bSYour Name  * @cfr_enable_monitor_mode: Flag to be enabled when scan radio is brought up
921*5113495bSYour Name  * in special vap mode
922*5113495bSYour Name  */
923*5113495bSYour Name static inline void
cdp_cfr_filter(ol_txrx_soc_handle soc,uint8_t pdev_id,bool enable,struct cdp_monitor_filter * filter_val,bool cfr_enable_monitor_mode)924*5113495bSYour Name cdp_cfr_filter(ol_txrx_soc_handle soc,
925*5113495bSYour Name 	       uint8_t pdev_id,
926*5113495bSYour Name 	       bool enable, struct cdp_monitor_filter *filter_val,
927*5113495bSYour Name 	       bool cfr_enable_monitor_mode)
928*5113495bSYour Name {
929*5113495bSYour Name 	if (!soc || !soc->ops) {
930*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
931*5113495bSYour Name 			  "%s invalid instance", __func__);
932*5113495bSYour Name 		QDF_BUG(0);
933*5113495bSYour Name 		return;
934*5113495bSYour Name 	}
935*5113495bSYour Name 
936*5113495bSYour Name 	if (!soc->ops->mon_ops || !soc->ops->mon_ops->txrx_cfr_filter)
937*5113495bSYour Name 		return;
938*5113495bSYour Name 
939*5113495bSYour Name 	soc->ops->mon_ops->txrx_cfr_filter(soc, pdev_id, enable, filter_val,
940*5113495bSYour Name 					   cfr_enable_monitor_mode);
941*5113495bSYour Name }
942*5113495bSYour Name 
943*5113495bSYour Name /**
944*5113495bSYour Name  * cdp_get_cfr_rcc() - get cfr rcc config
945*5113495bSYour Name  * @soc: Datapath soc handle
946*5113495bSYour Name  * @pdev_id: id of objmgr pdev
947*5113495bSYour Name  *
948*5113495bSYour Name  * Return: true/false based on cfr mode setting
949*5113495bSYour Name  */
950*5113495bSYour Name static inline
cdp_get_cfr_rcc(ol_txrx_soc_handle soc,uint8_t pdev_id)951*5113495bSYour Name bool cdp_get_cfr_rcc(ol_txrx_soc_handle soc, uint8_t pdev_id)
952*5113495bSYour Name {
953*5113495bSYour Name 	if (!soc || !soc->ops) {
954*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
955*5113495bSYour Name 			  "%s invalid instance", __func__);
956*5113495bSYour Name 		QDF_BUG(0);
957*5113495bSYour Name 		return 0;
958*5113495bSYour Name 	}
959*5113495bSYour Name 
960*5113495bSYour Name 	if (!soc->ops->cfr_ops || !soc->ops->cfr_ops->txrx_get_cfr_rcc)
961*5113495bSYour Name 		return 0;
962*5113495bSYour Name 
963*5113495bSYour Name 	return soc->ops->cfr_ops->txrx_get_cfr_rcc(soc, pdev_id);
964*5113495bSYour Name }
965*5113495bSYour Name 
966*5113495bSYour Name /**
967*5113495bSYour Name  * cdp_set_cfr_rcc() - enable/disable cfr rcc config
968*5113495bSYour Name  * @soc: Datapath soc handle
969*5113495bSYour Name  * @pdev_id: id of objmgr pdev
970*5113495bSYour Name  * @enable: Enable/Disable cfr rcc mode
971*5113495bSYour Name  *
972*5113495bSYour Name  * Return: none
973*5113495bSYour Name  */
974*5113495bSYour Name static inline
cdp_set_cfr_rcc(ol_txrx_soc_handle soc,uint8_t pdev_id,bool enable)975*5113495bSYour Name void cdp_set_cfr_rcc(ol_txrx_soc_handle soc, uint8_t pdev_id, bool enable)
976*5113495bSYour Name {
977*5113495bSYour Name 	if (!soc || !soc->ops) {
978*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
979*5113495bSYour Name 			  "%s invalid instance", __func__);
980*5113495bSYour Name 		QDF_BUG(0);
981*5113495bSYour Name 		return;
982*5113495bSYour Name 	}
983*5113495bSYour Name 
984*5113495bSYour Name 	if (!soc->ops->cfr_ops || !soc->ops->cfr_ops->txrx_set_cfr_rcc)
985*5113495bSYour Name 		return;
986*5113495bSYour Name 
987*5113495bSYour Name 	return soc->ops->cfr_ops->txrx_set_cfr_rcc(soc, pdev_id, enable);
988*5113495bSYour Name }
989*5113495bSYour Name 
990*5113495bSYour Name /**
991*5113495bSYour Name  * cdp_get_cfr_dbg_stats() - Get debug statistics for CFR
992*5113495bSYour Name  * @soc: SOC TXRX handle
993*5113495bSYour Name  * @pdev_id: ID of the physical device object
994*5113495bSYour Name  * @buf: CFR RCC debug statistics buffer
995*5113495bSYour Name  *
996*5113495bSYour Name  * Return: None
997*5113495bSYour Name  */
998*5113495bSYour Name static inline void
cdp_get_cfr_dbg_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_cfr_rcc_stats * buf)999*5113495bSYour Name cdp_get_cfr_dbg_stats(ol_txrx_soc_handle soc, uint8_t pdev_id,
1000*5113495bSYour Name 		      struct cdp_cfr_rcc_stats *buf)
1001*5113495bSYour Name {
1002*5113495bSYour Name 	if (!soc || !soc->ops) {
1003*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
1004*5113495bSYour Name 			  "%s invalid instance", __func__);
1005*5113495bSYour Name 		QDF_BUG(0);
1006*5113495bSYour Name 		return;
1007*5113495bSYour Name 	}
1008*5113495bSYour Name 
1009*5113495bSYour Name 	if (!soc->ops->cfr_ops || !soc->ops->cfr_ops->txrx_get_cfr_dbg_stats)
1010*5113495bSYour Name 		return;
1011*5113495bSYour Name 
1012*5113495bSYour Name 	soc->ops->cfr_ops->txrx_get_cfr_dbg_stats(soc, pdev_id, buf);
1013*5113495bSYour Name }
1014*5113495bSYour Name 
1015*5113495bSYour Name /**
1016*5113495bSYour Name  * cdp_cfr_clr_dbg_stats() - Clear debug statistics for CFR
1017*5113495bSYour Name  * @soc: SOC TXRX handle
1018*5113495bSYour Name  * @pdev_id: ID of the physical device object
1019*5113495bSYour Name  */
1020*5113495bSYour Name static inline void
cdp_cfr_clr_dbg_stats(ol_txrx_soc_handle soc,uint8_t pdev_id)1021*5113495bSYour Name cdp_cfr_clr_dbg_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
1022*5113495bSYour Name {
1023*5113495bSYour Name 	if (!soc || !soc->ops) {
1024*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
1025*5113495bSYour Name 			  "%s invalid instance", __func__);
1026*5113495bSYour Name 		QDF_BUG(0);
1027*5113495bSYour Name 		return;
1028*5113495bSYour Name 	}
1029*5113495bSYour Name 
1030*5113495bSYour Name 	if (!soc->ops->cfr_ops || !soc->ops->cfr_ops->txrx_clear_cfr_dbg_stats)
1031*5113495bSYour Name 		return;
1032*5113495bSYour Name 
1033*5113495bSYour Name 	soc->ops->cfr_ops->txrx_clear_cfr_dbg_stats(soc, pdev_id);
1034*5113495bSYour Name }
1035*5113495bSYour Name #endif
1036*5113495bSYour Name 
1037*5113495bSYour Name #if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
1038*5113495bSYour Name /**
1039*5113495bSYour Name  * cdp_update_peer_pkt_capture_params() - Sets Rx & Tx Capture params for a peer
1040*5113495bSYour Name  * @soc: SOC TXRX handle
1041*5113495bSYour Name  * @pdev_id: id of CDP pdev pointer
1042*5113495bSYour Name  * @is_rx_pkt_cap_enable: enable/disable rx pkt capture for this peer
1043*5113495bSYour Name  * @is_tx_pkt_cap_enable: enable/disable tx pkt capture for this peer
1044*5113495bSYour Name  * @peer_mac: MAC address of peer for which pkt_cap is to be enabled/disabled
1045*5113495bSYour Name  *
1046*5113495bSYour Name  * Return: Success when matching peer is found & flags are set, error otherwise
1047*5113495bSYour Name  */
1048*5113495bSYour Name static inline QDF_STATUS
cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc,uint8_t pdev_id,bool is_rx_pkt_cap_enable,uint8_t is_tx_pkt_cap_enable,uint8_t * peer_mac)1049*5113495bSYour Name cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc,
1050*5113495bSYour Name 				   uint8_t pdev_id,
1051*5113495bSYour Name 				   bool is_rx_pkt_cap_enable,
1052*5113495bSYour Name 				   uint8_t is_tx_pkt_cap_enable,
1053*5113495bSYour Name 				   uint8_t *peer_mac)
1054*5113495bSYour Name {
1055*5113495bSYour Name 	if (!soc || !soc->ops) {
1056*5113495bSYour Name 		dp_err("Invalid SOC instance");
1057*5113495bSYour Name 		QDF_BUG(0);
1058*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1059*5113495bSYour Name 	}
1060*5113495bSYour Name 
1061*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1062*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_update_peer_pkt_capture_params)
1063*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1064*5113495bSYour Name 
1065*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_update_peer_pkt_capture_params
1066*5113495bSYour Name 			(soc, pdev_id, is_rx_pkt_cap_enable,
1067*5113495bSYour Name 			 is_tx_pkt_cap_enable, peer_mac);
1068*5113495bSYour Name }
1069*5113495bSYour Name #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
1070*5113495bSYour Name 
1071*5113495bSYour Name #ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
1072*5113495bSYour Name /**
1073*5113495bSYour Name  * cdp_update_pdev_rx_protocol_tag() - wrapper function to set the protocol
1074*5113495bSYour Name  *                                    tag in CDP layer from cfg layer
1075*5113495bSYour Name  * @soc: SOC TXRX handle
1076*5113495bSYour Name  * @pdev_id: id of CDP pdev pointer
1077*5113495bSYour Name  * @protocol_mask: Bitmap for protocol for which tagging is enabled
1078*5113495bSYour Name  * @protocol_type: Protocol type for which the tag should be update
1079*5113495bSYour Name  * @tag: Actual tag value for the given prototype
1080*5113495bSYour Name  * Return: Returns QDF_STATUS_SUCCESS/FAILURE
1081*5113495bSYour Name  */
1082*5113495bSYour Name static inline QDF_STATUS
cdp_update_pdev_rx_protocol_tag(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t protocol_mask,uint16_t protocol_type,uint16_t tag)1083*5113495bSYour Name cdp_update_pdev_rx_protocol_tag(ol_txrx_soc_handle soc,
1084*5113495bSYour Name 				uint8_t pdev_id, uint32_t protocol_mask,
1085*5113495bSYour Name 				uint16_t protocol_type, uint16_t tag)
1086*5113495bSYour Name {
1087*5113495bSYour Name 	if (!soc || !soc->ops) {
1088*5113495bSYour Name 		dp_err("Invalid SOC instance");
1089*5113495bSYour Name 		QDF_BUG(0);
1090*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1091*5113495bSYour Name 	}
1092*5113495bSYour Name 
1093*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1094*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_update_pdev_rx_protocol_tag)
1095*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1096*5113495bSYour Name 
1097*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_update_pdev_rx_protocol_tag
1098*5113495bSYour Name 			(soc, pdev_id, protocol_mask, protocol_type, tag);
1099*5113495bSYour Name }
1100*5113495bSYour Name 
1101*5113495bSYour Name #ifdef WLAN_SUPPORT_RX_TAG_STATISTICS
1102*5113495bSYour Name /**
1103*5113495bSYour Name  * cdp_dump_pdev_rx_protocol_tag_stats() - wrapper function to dump the protocol
1104*5113495bSYour Name  *				tag statistics for given or all protocols
1105*5113495bSYour Name  * @soc: SOC TXRX handle
1106*5113495bSYour Name  * @pdev_id: id of CDP pdev pointer
1107*5113495bSYour Name  * @protocol_type: Protocol type for which the tag should be update
1108*5113495bSYour Name  *
1109*5113495bSYour Name  * Return: Returns QDF_STATUS_SUCCESS/FAILURE
1110*5113495bSYour Name  */
1111*5113495bSYour Name static inline QDF_STATUS
cdp_dump_pdev_rx_protocol_tag_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,uint16_t protocol_type)1112*5113495bSYour Name cdp_dump_pdev_rx_protocol_tag_stats(ol_txrx_soc_handle soc,
1113*5113495bSYour Name 				    uint8_t pdev_id,
1114*5113495bSYour Name 				    uint16_t protocol_type)
1115*5113495bSYour Name {
1116*5113495bSYour Name 	if (!soc || !soc->ops) {
1117*5113495bSYour Name 		dp_err("Invalid SOC instance");
1118*5113495bSYour Name 		QDF_BUG(0);
1119*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1120*5113495bSYour Name 	}
1121*5113495bSYour Name 
1122*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1123*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_dump_pdev_rx_protocol_tag_stats)
1124*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1125*5113495bSYour Name 
1126*5113495bSYour Name 	soc->ops->ctrl_ops->txrx_dump_pdev_rx_protocol_tag_stats(soc, pdev_id,
1127*5113495bSYour Name 						protocol_type);
1128*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1129*5113495bSYour Name }
1130*5113495bSYour Name #endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
1131*5113495bSYour Name #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
1132*5113495bSYour Name 
1133*5113495bSYour Name #ifdef ATH_SUPPORT_NAC_RSSI
1134*5113495bSYour Name /**
1135*5113495bSYour Name   * cdp_vdev_config_for_nac_rssi() - To invoke dp callback for nac rssi config
1136*5113495bSYour Name   * @soc: soc pointer
1137*5113495bSYour Name   * @vdev_id: id of vdev
1138*5113495bSYour Name   * @nac_cmd: specifies nac_rss config action add, del, list
1139*5113495bSYour Name   * @bssid: Neighbour bssid
1140*5113495bSYour Name   * @client_macaddr: Non-Associated client MAC
1141*5113495bSYour Name   * @chan_num: channel number to scan
1142*5113495bSYour Name   *
1143*5113495bSYour Name   * Return: QDF_STATUS
1144*5113495bSYour Name   */
cdp_vdev_config_for_nac_rssi(ol_txrx_soc_handle soc,uint8_t vdev_id,enum cdp_nac_param_cmd nac_cmd,char * bssid,char * client_macaddr,uint8_t chan_num)1145*5113495bSYour Name static inline QDF_STATUS cdp_vdev_config_for_nac_rssi(ol_txrx_soc_handle soc,
1146*5113495bSYour Name 		uint8_t vdev_id, enum cdp_nac_param_cmd nac_cmd,
1147*5113495bSYour Name 		char *bssid, char *client_macaddr, uint8_t chan_num)
1148*5113495bSYour Name {
1149*5113495bSYour Name 	if (!soc || !soc->ops) {
1150*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
1151*5113495bSYour Name 			"%s invalid instance", __func__);
1152*5113495bSYour Name 		QDF_BUG(0);
1153*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1154*5113495bSYour Name 	}
1155*5113495bSYour Name 
1156*5113495bSYour Name 	if (!soc->ops->mon_ops ||
1157*5113495bSYour Name 			!soc->ops->mon_ops->txrx_vdev_config_for_nac_rssi)
1158*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1159*5113495bSYour Name 
1160*5113495bSYour Name 	return soc->ops->mon_ops->txrx_vdev_config_for_nac_rssi(soc, vdev_id,
1161*5113495bSYour Name 			nac_cmd, bssid, client_macaddr, chan_num);
1162*5113495bSYour Name }
1163*5113495bSYour Name 
1164*5113495bSYour Name /**
1165*5113495bSYour Name  * cdp_vdev_get_neighbour_rssi() - invoke dp callback to get rssi value of nac
1166*5113495bSYour Name  * @soc: soc pointer
1167*5113495bSYour Name  * @vdev_id: id of vdev
1168*5113495bSYour Name  * @macaddr: Non-Associated client MAC
1169*5113495bSYour Name  * @rssi: rssi
1170*5113495bSYour Name  *
1171*5113495bSYour Name  * Return: QDF_STATUS
1172*5113495bSYour Name  */
cdp_vdev_get_neighbour_rssi(ol_txrx_soc_handle soc,uint8_t vdev_id,char * macaddr,uint8_t * rssi)1173*5113495bSYour Name static inline QDF_STATUS cdp_vdev_get_neighbour_rssi(ol_txrx_soc_handle soc,
1174*5113495bSYour Name 						     uint8_t vdev_id,
1175*5113495bSYour Name 						     char *macaddr,
1176*5113495bSYour Name 						     uint8_t *rssi)
1177*5113495bSYour Name {
1178*5113495bSYour Name 	if (!soc || !soc->ops) {
1179*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
1180*5113495bSYour Name 			  "%s invalid instance", __func__);
1181*5113495bSYour Name 		QDF_BUG(0);
1182*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1183*5113495bSYour Name 	}
1184*5113495bSYour Name 
1185*5113495bSYour Name 	if (!soc->ops->mon_ops ||
1186*5113495bSYour Name 	    !soc->ops->mon_ops->txrx_vdev_get_neighbour_rssi)
1187*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1188*5113495bSYour Name 
1189*5113495bSYour Name 	return soc->ops->mon_ops->txrx_vdev_get_neighbour_rssi(soc, vdev_id,
1190*5113495bSYour Name 								macaddr,
1191*5113495bSYour Name 								rssi);
1192*5113495bSYour Name }
1193*5113495bSYour Name #endif
1194*5113495bSYour Name 
1195*5113495bSYour Name #ifdef WLAN_SUPPORT_RX_FLOW_TAG
1196*5113495bSYour Name /**
1197*5113495bSYour Name  * cdp_set_rx_flow_tag() - wrapper function to set the flow
1198*5113495bSYour Name  *                         tag in CDP layer from cfg layer
1199*5113495bSYour Name  * @soc: SOC TXRX handle
1200*5113495bSYour Name  * @pdev_id: id of CDP pdev pointer
1201*5113495bSYour Name  * @flow_info: Flow 5-tuple, along with tag, if any, that needs to added/deleted
1202*5113495bSYour Name  *
1203*5113495bSYour Name  * Return: Success when add/del operation is successful, error otherwise
1204*5113495bSYour Name  */
1205*5113495bSYour Name static inline QDF_STATUS
cdp_set_rx_flow_tag(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_rx_flow_info * flow_info)1206*5113495bSYour Name cdp_set_rx_flow_tag(ol_txrx_soc_handle soc, uint8_t pdev_id,
1207*5113495bSYour Name 		    struct cdp_rx_flow_info *flow_info)
1208*5113495bSYour Name {
1209*5113495bSYour Name 	if (!soc || !soc->ops) {
1210*5113495bSYour Name 		dp_err("Invalid SOC instance");
1211*5113495bSYour Name 		QDF_BUG(0);
1212*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1213*5113495bSYour Name 	}
1214*5113495bSYour Name 
1215*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1216*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_rx_flow_tag)
1217*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1218*5113495bSYour Name 
1219*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_rx_flow_tag(soc, pdev_id,
1220*5113495bSYour Name 				   flow_info);
1221*5113495bSYour Name }
1222*5113495bSYour Name 
1223*5113495bSYour Name /**
1224*5113495bSYour Name  * cdp_dump_rx_flow_tag_stats() - wrapper function to dump the flow
1225*5113495bSYour Name  *                                tag statistics for given flow
1226*5113495bSYour Name  * @soc: SOC TXRX handle
1227*5113495bSYour Name  * @pdev_id: id of CDP pdev
1228*5113495bSYour Name  * @flow_info: Flow tuple for which we want to print the statistics
1229*5113495bSYour Name  *
1230*5113495bSYour Name  * Return: Success when flow is found and stats are printed, error otherwise
1231*5113495bSYour Name  */
1232*5113495bSYour Name static inline QDF_STATUS
cdp_dump_rx_flow_tag_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_rx_flow_info * flow_info)1233*5113495bSYour Name cdp_dump_rx_flow_tag_stats(ol_txrx_soc_handle soc, uint8_t pdev_id,
1234*5113495bSYour Name 			   struct cdp_rx_flow_info *flow_info)
1235*5113495bSYour Name {
1236*5113495bSYour Name 	if (!soc || !soc->ops) {
1237*5113495bSYour Name 		dp_err("Invalid SOC instance");
1238*5113495bSYour Name 		QDF_BUG(0);
1239*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1240*5113495bSYour Name 	}
1241*5113495bSYour Name 
1242*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1243*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_dump_rx_flow_tag_stats)
1244*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1245*5113495bSYour Name 
1246*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_dump_rx_flow_tag_stats(soc,
1247*5113495bSYour Name 								pdev_id,
1248*5113495bSYour Name 								flow_info);
1249*5113495bSYour Name }
1250*5113495bSYour Name #endif /* WLAN_SUPPORT_RX_FLOW_TAG */
1251*5113495bSYour Name 
1252*5113495bSYour Name /**
1253*5113495bSYour Name  * cdp_txrx_peer_flush_frags() - flush frags for peer
1254*5113495bSYour Name  * @soc: pointer to the soc
1255*5113495bSYour Name  * @vdev_id: vdev id
1256*5113495bSYour Name  * @peer_mac: peer MAC address
1257*5113495bSYour Name  *
1258*5113495bSYour Name  * Get peer-protocol-count drop-mask
1259*5113495bSYour Name  *
1260*5113495bSYour Name  * Return: peer-protocol-count drop-mask
1261*5113495bSYour Name  */
1262*5113495bSYour Name static inline
cdp_txrx_peer_flush_frags(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)1263*5113495bSYour Name void cdp_txrx_peer_flush_frags(ol_txrx_soc_handle soc, uint8_t vdev_id,
1264*5113495bSYour Name 			       uint8_t *peer_mac)
1265*5113495bSYour Name {
1266*5113495bSYour Name 	if (!soc || !soc->ops) {
1267*5113495bSYour Name 		dp_cdp_err("Invalid Instance:");
1268*5113495bSYour Name 		QDF_BUG(0);
1269*5113495bSYour Name 		return;
1270*5113495bSYour Name 	}
1271*5113495bSYour Name 
1272*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1273*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_peer_flush_frags)
1274*5113495bSYour Name 		return;
1275*5113495bSYour Name 
1276*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_peer_flush_frags(soc, vdev_id,
1277*5113495bSYour Name 							 peer_mac);
1278*5113495bSYour Name }
1279*5113495bSYour Name 
1280*5113495bSYour Name #if defined(WLAN_FEATURE_TSF_AUTO_REPORT) || defined(WLAN_CONFIG_TX_DELAY)
1281*5113495bSYour Name /**
1282*5113495bSYour Name  * cdp_set_delta_tsf() - wrapper function to set delta_tsf
1283*5113495bSYour Name  * @soc: SOC TXRX handle
1284*5113495bSYour Name  * @vdev_id: vdev id
1285*5113495bSYour Name  * @delta_tsf: difference between TSF clock and qtimer
1286*5113495bSYour Name  *
1287*5113495bSYour Name  * Return: None
1288*5113495bSYour Name  */
cdp_set_delta_tsf(ol_txrx_soc_handle soc,uint8_t vdev_id,uint32_t delta_tsf)1289*5113495bSYour Name static inline void cdp_set_delta_tsf(ol_txrx_soc_handle soc, uint8_t vdev_id,
1290*5113495bSYour Name 				     uint32_t delta_tsf)
1291*5113495bSYour Name {
1292*5113495bSYour Name 	if (!soc || !soc->ops) {
1293*5113495bSYour Name 		dp_cdp_err("Invalid instance");
1294*5113495bSYour Name 		QDF_BUG(0);
1295*5113495bSYour Name 		return;
1296*5113495bSYour Name 	}
1297*5113495bSYour Name 
1298*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1299*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_delta_tsf)
1300*5113495bSYour Name 		return;
1301*5113495bSYour Name 
1302*5113495bSYour Name 	soc->ops->ctrl_ops->txrx_set_delta_tsf(soc, vdev_id, delta_tsf);
1303*5113495bSYour Name }
1304*5113495bSYour Name #endif
1305*5113495bSYour Name #ifdef WLAN_FEATURE_TSF_UPLINK_DELAY
1306*5113495bSYour Name /**
1307*5113495bSYour Name  * cdp_set_tsf_ul_delay_report() - Enable or disable reporting uplink delay
1308*5113495bSYour Name  * @soc: SOC TXRX handle
1309*5113495bSYour Name  * @vdev_id: vdev id
1310*5113495bSYour Name  * @enable: true to enable and false to disable
1311*5113495bSYour Name  *
1312*5113495bSYour Name  * Return: QDF_STATUS
1313*5113495bSYour Name  */
cdp_set_tsf_ul_delay_report(ol_txrx_soc_handle soc,uint8_t vdev_id,bool enable)1314*5113495bSYour Name static inline QDF_STATUS cdp_set_tsf_ul_delay_report(ol_txrx_soc_handle soc,
1315*5113495bSYour Name 						     uint8_t vdev_id,
1316*5113495bSYour Name 						     bool enable)
1317*5113495bSYour Name {
1318*5113495bSYour Name 	if (!soc || !soc->ops) {
1319*5113495bSYour Name 		dp_cdp_err("Invalid SOC instance");
1320*5113495bSYour Name 		QDF_BUG(0);
1321*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1322*5113495bSYour Name 	}
1323*5113495bSYour Name 
1324*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1325*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_tsf_ul_delay_report)
1326*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1327*5113495bSYour Name 
1328*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_tsf_ul_delay_report(soc, vdev_id,
1329*5113495bSYour Name 								enable);
1330*5113495bSYour Name }
1331*5113495bSYour Name 
1332*5113495bSYour Name /**
1333*5113495bSYour Name  * cdp_get_uplink_delay() - Get uplink delay value
1334*5113495bSYour Name  * @soc: SOC TXRX handle
1335*5113495bSYour Name  * @vdev_id: vdev id
1336*5113495bSYour Name  * @val: pointer to save uplink delay value
1337*5113495bSYour Name  *
1338*5113495bSYour Name  * Return: QDF_STATUS
1339*5113495bSYour Name  */
cdp_get_uplink_delay(ol_txrx_soc_handle soc,uint32_t vdev_id,uint32_t * val)1340*5113495bSYour Name static inline QDF_STATUS cdp_get_uplink_delay(ol_txrx_soc_handle soc,
1341*5113495bSYour Name 					      uint32_t vdev_id, uint32_t *val)
1342*5113495bSYour Name {
1343*5113495bSYour Name 	if (!soc || !soc->ops) {
1344*5113495bSYour Name 		dp_cdp_err("Invalid SOC instance");
1345*5113495bSYour Name 		QDF_BUG(0);
1346*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1347*5113495bSYour Name 	}
1348*5113495bSYour Name 
1349*5113495bSYour Name 	if (!val) {
1350*5113495bSYour Name 		dp_cdp_err("Invalid params val");
1351*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1352*5113495bSYour Name 	}
1353*5113495bSYour Name 
1354*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1355*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_uplink_delay)
1356*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1357*5113495bSYour Name 
1358*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_uplink_delay(soc, vdev_id, val);
1359*5113495bSYour Name }
1360*5113495bSYour Name #endif /* WLAN_FEATURE_TSF_UPLINK_DELAY */
1361*5113495bSYour Name 
1362*5113495bSYour Name #ifdef QCA_UNDECODED_METADATA_SUPPORT
1363*5113495bSYour Name /**
1364*5113495bSYour Name  * cdp_txrx_set_pdev_phyrx_error_mask() - set phyrx error mask
1365*5113495bSYour Name  * @soc: opaque soc handle
1366*5113495bSYour Name  * @pdev_id: id of data path pdev handle
1367*5113495bSYour Name  * @mask: mask to configure 0 to 31 phy error
1368*5113495bSYour Name  * @mask_cont: mask to configure 32 to 63 phy error
1369*5113495bSYour Name  *
1370*5113495bSYour Name  * Return: status: 0 - Success, non-zero: Failure
1371*5113495bSYour Name  */
1372*5113495bSYour Name static inline
cdp_txrx_set_pdev_phyrx_error_mask(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t mask,uint32_t mask_cont)1373*5113495bSYour Name QDF_STATUS cdp_txrx_set_pdev_phyrx_error_mask(ol_txrx_soc_handle soc,
1374*5113495bSYour Name 					      uint8_t pdev_id, uint32_t mask,
1375*5113495bSYour Name 					      uint32_t mask_cont)
1376*5113495bSYour Name {
1377*5113495bSYour Name 	if (!soc || !soc->ops) {
1378*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
1379*5113495bSYour Name 		QDF_BUG(0);
1380*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1381*5113495bSYour Name 	}
1382*5113495bSYour Name 
1383*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1384*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_set_pdev_phyrx_error_mask)
1385*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1386*5113495bSYour Name 
1387*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_set_pdev_phyrx_error_mask
1388*5113495bSYour Name 			(soc, pdev_id, mask, mask_cont);
1389*5113495bSYour Name }
1390*5113495bSYour Name 
1391*5113495bSYour Name static inline
cdp_txrx_get_pdev_phyrx_error_mask(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t * mask,uint32_t * mask_cont)1392*5113495bSYour Name QDF_STATUS cdp_txrx_get_pdev_phyrx_error_mask(ol_txrx_soc_handle soc,
1393*5113495bSYour Name 					      uint8_t pdev_id, uint32_t *mask,
1394*5113495bSYour Name 					      uint32_t *mask_cont)
1395*5113495bSYour Name {
1396*5113495bSYour Name 	if (!soc || !soc->ops) {
1397*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
1398*5113495bSYour Name 		QDF_BUG(0);
1399*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1400*5113495bSYour Name 	}
1401*5113495bSYour Name 
1402*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1403*5113495bSYour Name 	    !soc->ops->ctrl_ops->txrx_get_pdev_phyrx_error_mask)
1404*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1405*5113495bSYour Name 
1406*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_get_pdev_phyrx_error_mask
1407*5113495bSYour Name 			(soc, pdev_id, mask, mask_cont);
1408*5113495bSYour Name }
1409*5113495bSYour Name #endif
1410*5113495bSYour Name 
1411*5113495bSYour Name #ifdef DP_UMAC_HW_RESET_SUPPORT
1412*5113495bSYour Name /**
1413*5113495bSYour Name  * cdp_get_umac_reset_in_progress_state() - API to get the umac reset in
1414*5113495bSYour Name  *                                          progress state
1415*5113495bSYour Name  * @soc: opaque soc handle
1416*5113495bSYour Name  *
1417*5113495bSYour Name  * Return: Umac reset in progress state
1418*5113495bSYour Name  */
1419*5113495bSYour Name static inline enum cdp_umac_reset_state
cdp_get_umac_reset_in_progress_state(ol_txrx_soc_handle soc)1420*5113495bSYour Name cdp_get_umac_reset_in_progress_state(ol_txrx_soc_handle soc)
1421*5113495bSYour Name {
1422*5113495bSYour Name 	if (!soc || !soc->ops) {
1423*5113495bSYour Name 		dp_cdp_debug("Invalid soc or soc->ops:");
1424*5113495bSYour Name 		return CDP_UMAC_RESET_INVALID_STATE;
1425*5113495bSYour Name 	}
1426*5113495bSYour Name 
1427*5113495bSYour Name 	if (!soc->ops->ctrl_ops ||
1428*5113495bSYour Name 	    !soc->ops->ctrl_ops->get_umac_reset_in_progress_state)
1429*5113495bSYour Name 		return CDP_UMAC_RESET_INVALID_STATE;
1430*5113495bSYour Name 
1431*5113495bSYour Name 	return soc->ops->ctrl_ops->get_umac_reset_in_progress_state(soc);
1432*5113495bSYour Name }
1433*5113495bSYour Name 
1434*5113495bSYour Name /**
1435*5113495bSYour Name  * cdp_umac_reset_is_inprogress() - API to check if umac reset is in progress
1436*5113495bSYour Name  * @soc: opaque soc handle
1437*5113495bSYour Name  *
1438*5113495bSYour Name  * Return: true if umac reset is in progress, else false.
1439*5113495bSYour Name  */
1440*5113495bSYour Name static inline bool
cdp_umac_reset_is_inprogress(ol_txrx_soc_handle soc)1441*5113495bSYour Name cdp_umac_reset_is_inprogress(ol_txrx_soc_handle soc)
1442*5113495bSYour Name {
1443*5113495bSYour Name 	enum cdp_umac_reset_state state;
1444*5113495bSYour Name 
1445*5113495bSYour Name 	state = cdp_get_umac_reset_in_progress_state(soc);
1446*5113495bSYour Name 
1447*5113495bSYour Name 	if (state == CDP_UMAC_RESET_IN_PROGRESS ||
1448*5113495bSYour Name 	    state == CDP_UMAC_RESET_IN_PROGRESS_DURING_BUFFER_WINDOW)
1449*5113495bSYour Name 		return true;
1450*5113495bSYour Name 	else
1451*5113495bSYour Name 		return false;
1452*5113495bSYour Name }
1453*5113495bSYour Name #else
1454*5113495bSYour Name static inline bool
cdp_umac_reset_is_inprogress(ol_txrx_soc_handle soc)1455*5113495bSYour Name cdp_umac_reset_is_inprogress(ol_txrx_soc_handle soc)
1456*5113495bSYour Name {
1457*5113495bSYour Name 	return false;
1458*5113495bSYour Name }
1459*5113495bSYour Name #endif
1460*5113495bSYour Name 
1461*5113495bSYour Name #ifdef WLAN_SUPPORT_RX_FISA
1462*5113495bSYour Name static inline
cdp_txrx_fisa_config(struct cdp_soc_t * soc,uint8_t pdev_id,enum cdp_fisa_config_id config_id,union cdp_fisa_config * cfg)1463*5113495bSYour Name QDF_STATUS cdp_txrx_fisa_config(struct cdp_soc_t *soc, uint8_t pdev_id,
1464*5113495bSYour Name 				enum cdp_fisa_config_id config_id,
1465*5113495bSYour Name 				union cdp_fisa_config *cfg)
1466*5113495bSYour Name {
1467*5113495bSYour Name 	if (!soc || !soc->ops) {
1468*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
1469*5113495bSYour Name 		QDF_BUG(0);
1470*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1471*5113495bSYour Name 	}
1472*5113495bSYour Name 
1473*5113495bSYour Name 	if (!soc->ops->ctrl_ops || !soc->ops->ctrl_ops->txrx_fisa_config)
1474*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1475*5113495bSYour Name 
1476*5113495bSYour Name 	return soc->ops->ctrl_ops->txrx_fisa_config(soc, pdev_id, config_id,
1477*5113495bSYour Name 						    cfg);
1478*5113495bSYour Name }
1479*5113495bSYour Name #endif
1480*5113495bSYour Name #endif /* _CDP_TXRX_CTRL_H_ */
1481