xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_cfg.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2019,2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /**
21*5113495bSYour Name  * DOC: cdp_txrx_cfg.h
22*5113495bSYour Name  *      Define the host data path configuration API functions
23*5113495bSYour Name  */
24*5113495bSYour Name #ifndef _CDP_TXRX_CFG_H_
25*5113495bSYour Name #define _CDP_TXRX_CFG_H_
26*5113495bSYour Name #include "cdp_txrx_handle.h"
27*5113495bSYour Name #include <cdp_txrx_cmn.h>
28*5113495bSYour Name 
29*5113495bSYour Name /**
30*5113495bSYour Name  * cdp_cfg_set_rx_fwd_disabled() - enable/disable rx forwarding
31*5113495bSYour Name  * @soc: data path soc handle
32*5113495bSYour Name  * @cfg_pdev: data path device instance
33*5113495bSYour Name  * @disable_rx_fwd: enable or disable rx forwarding
34*5113495bSYour Name  *
35*5113495bSYour Name  * enable/disable rx forwarding
36*5113495bSYour Name  *
37*5113495bSYour Name  * return NONE
38*5113495bSYour Name  */
39*5113495bSYour Name static inline void
cdp_cfg_set_rx_fwd_disabled(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev,uint8_t disable_rx_fwd)40*5113495bSYour Name cdp_cfg_set_rx_fwd_disabled(ol_txrx_soc_handle soc, struct cdp_cfg *cfg_pdev,
41*5113495bSYour Name 		uint8_t disable_rx_fwd)
42*5113495bSYour Name {
43*5113495bSYour Name 	if (!soc || !soc->ops) {
44*5113495bSYour Name 		dp_cdp_debug("invalid instance");
45*5113495bSYour Name 		QDF_BUG(0);
46*5113495bSYour Name 		return;
47*5113495bSYour Name 	}
48*5113495bSYour Name 
49*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
50*5113495bSYour Name 	    !soc->ops->cfg_ops->set_cfg_rx_fwd_disabled)
51*5113495bSYour Name 		return;
52*5113495bSYour Name 
53*5113495bSYour Name 	soc->ops->cfg_ops->set_cfg_rx_fwd_disabled(cfg_pdev,
54*5113495bSYour Name 			disable_rx_fwd);
55*5113495bSYour Name }
56*5113495bSYour Name 
57*5113495bSYour Name /**
58*5113495bSYour Name  * cdp_cfg_set_packet_log_enabled() - enable/disable packet log
59*5113495bSYour Name  * @soc: data path soc handle
60*5113495bSYour Name  * @cfg_pdev: data path device instance
61*5113495bSYour Name  * @val: enable or disable packet log
62*5113495bSYour Name  *
63*5113495bSYour Name  * packet log enable or disable
64*5113495bSYour Name  *
65*5113495bSYour Name  * return NONE
66*5113495bSYour Name  */
67*5113495bSYour Name static inline void
cdp_cfg_set_packet_log_enabled(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev,uint8_t val)68*5113495bSYour Name cdp_cfg_set_packet_log_enabled(ol_txrx_soc_handle soc,
69*5113495bSYour Name 		struct cdp_cfg *cfg_pdev, uint8_t val)
70*5113495bSYour Name {
71*5113495bSYour Name 	if (!soc || !soc->ops) {
72*5113495bSYour Name 		dp_cdp_debug("invalid instance");
73*5113495bSYour Name 		QDF_BUG(0);
74*5113495bSYour Name 		return;
75*5113495bSYour Name 	}
76*5113495bSYour Name 
77*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
78*5113495bSYour Name 	    !soc->ops->cfg_ops->set_cfg_packet_log_enabled)
79*5113495bSYour Name 		return;
80*5113495bSYour Name 
81*5113495bSYour Name 	soc->ops->cfg_ops->set_cfg_packet_log_enabled(cfg_pdev,
82*5113495bSYour Name 				val);
83*5113495bSYour Name }
84*5113495bSYour Name 
85*5113495bSYour Name /**
86*5113495bSYour Name  * cdp_cfg_attach() - attach config module
87*5113495bSYour Name  * @soc: data path soc handle
88*5113495bSYour Name  * @osdev: os instance
89*5113495bSYour Name  * @cfg_param: configuration parameter should be propagated
90*5113495bSYour Name  *
91*5113495bSYour Name  * Allocate configuration module instance, and propagate configuration values
92*5113495bSYour Name  *
93*5113495bSYour Name  * return soc configuration module instance
94*5113495bSYour Name  */
95*5113495bSYour Name static inline struct cdp_cfg
cdp_cfg_attach(ol_txrx_soc_handle soc,qdf_device_t osdev,void * cfg_param)96*5113495bSYour Name *cdp_cfg_attach(ol_txrx_soc_handle soc,
97*5113495bSYour Name 		qdf_device_t osdev, void *cfg_param)
98*5113495bSYour Name {
99*5113495bSYour Name 	if (!soc || !soc->ops) {
100*5113495bSYour Name 		dp_cdp_debug("invalid instance");
101*5113495bSYour Name 		QDF_BUG(0);
102*5113495bSYour Name 		return NULL;
103*5113495bSYour Name 	}
104*5113495bSYour Name 
105*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
106*5113495bSYour Name 	    !soc->ops->cfg_ops->cfg_attach)
107*5113495bSYour Name 		return NULL;
108*5113495bSYour Name 
109*5113495bSYour Name 	return soc->ops->cfg_ops->cfg_attach(osdev, cfg_param);
110*5113495bSYour Name }
111*5113495bSYour Name 
112*5113495bSYour Name /**
113*5113495bSYour Name  * cdp_cfg_vdev_rx_set_intrabss_fwd() - enable/disable intra bass forwarding
114*5113495bSYour Name  * @soc: data path soc handle
115*5113495bSYour Name  * @vdev_id: virtual interface id
116*5113495bSYour Name  * @val: enable or disable intra bss forwarding
117*5113495bSYour Name  *
118*5113495bSYour Name  * ap isolate, do not forward intra bss traffic
119*5113495bSYour Name  *
120*5113495bSYour Name  * return NONE
121*5113495bSYour Name  */
122*5113495bSYour Name static inline void
cdp_cfg_vdev_rx_set_intrabss_fwd(ol_txrx_soc_handle soc,uint8_t vdev_id,bool val)123*5113495bSYour Name cdp_cfg_vdev_rx_set_intrabss_fwd(ol_txrx_soc_handle soc,
124*5113495bSYour Name 				 uint8_t vdev_id, bool val)
125*5113495bSYour Name {
126*5113495bSYour Name 	if (!soc || !soc->ops) {
127*5113495bSYour Name 		dp_cdp_debug("invalid instance");
128*5113495bSYour Name 		QDF_BUG(0);
129*5113495bSYour Name 		return;
130*5113495bSYour Name 	}
131*5113495bSYour Name 
132*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
133*5113495bSYour Name 	    !soc->ops->cfg_ops->vdev_rx_set_intrabss_fwd)
134*5113495bSYour Name 		return;
135*5113495bSYour Name 
136*5113495bSYour Name 	soc->ops->cfg_ops->vdev_rx_set_intrabss_fwd(soc, vdev_id, val);
137*5113495bSYour Name }
138*5113495bSYour Name 
139*5113495bSYour Name /**
140*5113495bSYour Name  * cdp_cfg_is_rx_fwd_disabled() - get vdev rx forward
141*5113495bSYour Name  * @soc: data path soc handle
142*5113495bSYour Name  * @vdev: virtual interface instance
143*5113495bSYour Name  *
144*5113495bSYour Name  * Return rx forward feature enable status
145*5113495bSYour Name  *
146*5113495bSYour Name  * return 1 enabled
147*5113495bSYour Name  *        0 disabled
148*5113495bSYour Name  */
149*5113495bSYour Name static inline uint8_t
cdp_cfg_is_rx_fwd_disabled(ol_txrx_soc_handle soc,struct cdp_vdev * vdev)150*5113495bSYour Name cdp_cfg_is_rx_fwd_disabled(ol_txrx_soc_handle soc, struct cdp_vdev *vdev)
151*5113495bSYour Name {
152*5113495bSYour Name 	if (!soc || !soc->ops) {
153*5113495bSYour Name 		dp_cdp_debug("invalid instance");
154*5113495bSYour Name 		QDF_BUG(0);
155*5113495bSYour Name 		return 0;
156*5113495bSYour Name 	}
157*5113495bSYour Name 
158*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
159*5113495bSYour Name 	    !soc->ops->cfg_ops->is_rx_fwd_disabled)
160*5113495bSYour Name 		return 0;
161*5113495bSYour Name 
162*5113495bSYour Name 	return soc->ops->cfg_ops->is_rx_fwd_disabled(vdev);
163*5113495bSYour Name 
164*5113495bSYour Name }
165*5113495bSYour Name 
166*5113495bSYour Name /**
167*5113495bSYour Name  * cdp_cfg_tx_set_is_mgmt_over_wmi_enabled() - mgmt tx over wmi enable/disable
168*5113495bSYour Name  * @soc: data path soc handle
169*5113495bSYour Name  * @value: feature enable or disable
170*5113495bSYour Name  *
171*5113495bSYour Name  * Enable or disable management packet TX over WMI feature
172*5113495bSYour Name  *
173*5113495bSYour Name  * return None
174*5113495bSYour Name  */
175*5113495bSYour Name static inline void
cdp_cfg_tx_set_is_mgmt_over_wmi_enabled(ol_txrx_soc_handle soc,uint8_t value)176*5113495bSYour Name cdp_cfg_tx_set_is_mgmt_over_wmi_enabled(ol_txrx_soc_handle soc,
177*5113495bSYour Name 		uint8_t value)
178*5113495bSYour Name {
179*5113495bSYour Name 	if (!soc || !soc->ops) {
180*5113495bSYour Name 		dp_cdp_debug("invalid instance");
181*5113495bSYour Name 		QDF_BUG(0);
182*5113495bSYour Name 		return;
183*5113495bSYour Name 	}
184*5113495bSYour Name 
185*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
186*5113495bSYour Name 	    !soc->ops->cfg_ops->tx_set_is_mgmt_over_wmi_enabled)
187*5113495bSYour Name 		return;
188*5113495bSYour Name 
189*5113495bSYour Name 	soc->ops->cfg_ops->tx_set_is_mgmt_over_wmi_enabled(value);
190*5113495bSYour Name }
191*5113495bSYour Name 
192*5113495bSYour Name /**
193*5113495bSYour Name  * cdp_cfg_is_high_latency() - query data path is in high or low latency
194*5113495bSYour Name  * @soc: data path soc handle
195*5113495bSYour Name  * @cfg_pdev: data path device instance
196*5113495bSYour Name  *
197*5113495bSYour Name  * query data path is in high or low latency
198*5113495bSYour Name  *
199*5113495bSYour Name  * return 1 high latency data path, usb or sdio
200*5113495bSYour Name  *        0 low latency data path
201*5113495bSYour Name  */
202*5113495bSYour Name static inline int
cdp_cfg_is_high_latency(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev)203*5113495bSYour Name cdp_cfg_is_high_latency(ol_txrx_soc_handle soc, struct cdp_cfg *cfg_pdev)
204*5113495bSYour Name {
205*5113495bSYour Name 	if (!soc || !soc->ops) {
206*5113495bSYour Name 		dp_cdp_debug("invalid instance");
207*5113495bSYour Name 		QDF_BUG(0);
208*5113495bSYour Name 		return 0;
209*5113495bSYour Name 	}
210*5113495bSYour Name 
211*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
212*5113495bSYour Name 	    !soc->ops->cfg_ops->is_high_latency)
213*5113495bSYour Name 		return 0;
214*5113495bSYour Name 
215*5113495bSYour Name 	return soc->ops->cfg_ops->is_high_latency(cfg_pdev);
216*5113495bSYour Name }
217*5113495bSYour Name 
218*5113495bSYour Name /**
219*5113495bSYour Name  * cdp_cfg_set_flow_control_parameters() - set flow control params
220*5113495bSYour Name  * @soc: data path soc handle
221*5113495bSYour Name  * @cfg_pdev: dp config module instance
222*5113495bSYour Name  * @param: parameters should set
223*5113495bSYour Name  *
224*5113495bSYour Name  * set flow control params
225*5113495bSYour Name  *
226*5113495bSYour Name  * return None
227*5113495bSYour Name  */
228*5113495bSYour Name static inline void
cdp_cfg_set_flow_control_parameters(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev,void * param)229*5113495bSYour Name cdp_cfg_set_flow_control_parameters(ol_txrx_soc_handle soc,
230*5113495bSYour Name 		struct cdp_cfg *cfg_pdev, void *param)
231*5113495bSYour Name {
232*5113495bSYour Name 	if (!soc || !soc->ops) {
233*5113495bSYour Name 		dp_cdp_debug("invalid instance");
234*5113495bSYour Name 		QDF_BUG(0);
235*5113495bSYour Name 		return;
236*5113495bSYour Name 	}
237*5113495bSYour Name 
238*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
239*5113495bSYour Name 	    !soc->ops->cfg_ops->set_flow_control_parameters)
240*5113495bSYour Name 		return;
241*5113495bSYour Name 
242*5113495bSYour Name 	soc->ops->cfg_ops->set_flow_control_parameters(cfg_pdev,
243*5113495bSYour Name 						       param);
244*5113495bSYour Name }
245*5113495bSYour Name 
246*5113495bSYour Name /**
247*5113495bSYour Name  * cdp_cfg_set_flow_steering - Set Rx flow steering config based on CFG ini
248*5113495bSYour Name  *			config.
249*5113495bSYour Name  * @soc: data path soc handle
250*5113495bSYour Name  * @cfg_pdev: handle to the physical device
251*5113495bSYour Name  * @val: 0 - disable, 1 - enable
252*5113495bSYour Name  *
253*5113495bSYour Name  * Return: None
254*5113495bSYour Name  */
cdp_cfg_set_flow_steering(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev,uint8_t val)255*5113495bSYour Name static inline void cdp_cfg_set_flow_steering(ol_txrx_soc_handle soc,
256*5113495bSYour Name 		struct cdp_cfg *cfg_pdev, uint8_t val)
257*5113495bSYour Name {
258*5113495bSYour Name 	if (!soc || !soc->ops) {
259*5113495bSYour Name 		dp_cdp_debug("invalid instance");
260*5113495bSYour Name 		QDF_BUG(0);
261*5113495bSYour Name 		return;
262*5113495bSYour Name 	}
263*5113495bSYour Name 
264*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
265*5113495bSYour Name 	    !soc->ops->cfg_ops->set_flow_steering)
266*5113495bSYour Name 		return;
267*5113495bSYour Name 
268*5113495bSYour Name 	soc->ops->cfg_ops->set_flow_steering(cfg_pdev, val);
269*5113495bSYour Name }
270*5113495bSYour Name 
cdp_cfg_get_max_peer_id(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev)271*5113495bSYour Name static inline void cdp_cfg_get_max_peer_id(ol_txrx_soc_handle soc,
272*5113495bSYour Name 		struct cdp_cfg *cfg_pdev)
273*5113495bSYour Name {
274*5113495bSYour Name }
275*5113495bSYour Name 
276*5113495bSYour Name /**
277*5113495bSYour Name  * cdp_cfg_set_ptp_rx_opt_enabled() - enable/disable ptp rx timestamping
278*5113495bSYour Name  * @soc: data path soc handle
279*5113495bSYour Name  * @cfg_pdev: data path device instance
280*5113495bSYour Name  * @val: enable or disable packet log
281*5113495bSYour Name  *
282*5113495bSYour Name  * ptp rx timestamping enable or disable
283*5113495bSYour Name  *
284*5113495bSYour Name  * return NONE
285*5113495bSYour Name  */
286*5113495bSYour Name static inline void
cdp_cfg_set_ptp_rx_opt_enabled(ol_txrx_soc_handle soc,struct cdp_cfg * cfg_pdev,uint8_t val)287*5113495bSYour Name cdp_cfg_set_ptp_rx_opt_enabled(ol_txrx_soc_handle soc,
288*5113495bSYour Name 			       struct cdp_cfg *cfg_pdev, uint8_t val)
289*5113495bSYour Name {
290*5113495bSYour Name 	if (!soc || !soc->ops) {
291*5113495bSYour Name 		dp_cdp_debug("invalid instance");
292*5113495bSYour Name 		QDF_BUG(0);
293*5113495bSYour Name 		return;
294*5113495bSYour Name 	}
295*5113495bSYour Name 
296*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
297*5113495bSYour Name 	    !soc->ops->cfg_ops->set_ptp_rx_opt_enabled)
298*5113495bSYour Name 		return;
299*5113495bSYour Name 
300*5113495bSYour Name 	soc->ops->cfg_ops->set_ptp_rx_opt_enabled(cfg_pdev, val);
301*5113495bSYour Name }
302*5113495bSYour Name 
303*5113495bSYour Name /**
304*5113495bSYour Name  * cdp_cfg_set_new_htt_msg_format() - set htt h2t msg feature
305*5113495bSYour Name  * @soc: datapath soc handle
306*5113495bSYour Name  * @val: enable or disable new htt h2t msg feature
307*5113495bSYour Name  *
308*5113495bSYour Name  * Enable whether htt h2t message length includes htc header length
309*5113495bSYour Name  *
310*5113495bSYour Name  * return NONE
311*5113495bSYour Name  */
312*5113495bSYour Name static inline void
cdp_cfg_set_new_htt_msg_format(ol_txrx_soc_handle soc,uint8_t val)313*5113495bSYour Name cdp_cfg_set_new_htt_msg_format(ol_txrx_soc_handle soc,
314*5113495bSYour Name 			       uint8_t val)
315*5113495bSYour Name {
316*5113495bSYour Name 	if (!soc || !soc->ops) {
317*5113495bSYour Name 		dp_cdp_debug("invalid instance");
318*5113495bSYour Name 		return;
319*5113495bSYour Name 	}
320*5113495bSYour Name 
321*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
322*5113495bSYour Name 	    !soc->ops->cfg_ops->set_new_htt_msg_format)
323*5113495bSYour Name 		return;
324*5113495bSYour Name 
325*5113495bSYour Name 	soc->ops->cfg_ops->set_new_htt_msg_format(val);
326*5113495bSYour Name }
327*5113495bSYour Name 
328*5113495bSYour Name /**
329*5113495bSYour Name  * cdp_cfg_set_peer_unmap_conf_support() - set peer unmap conf feature
330*5113495bSYour Name  * @soc: datapath soc handle
331*5113495bSYour Name  * @val: enable or disable peer unmap conf feature
332*5113495bSYour Name  *
333*5113495bSYour Name  * Set if peer unmap confirmation feature is supported by both FW and in INI
334*5113495bSYour Name  *
335*5113495bSYour Name  * return NONE
336*5113495bSYour Name  */
337*5113495bSYour Name static inline void
cdp_cfg_set_peer_unmap_conf_support(ol_txrx_soc_handle soc,bool val)338*5113495bSYour Name cdp_cfg_set_peer_unmap_conf_support(ol_txrx_soc_handle soc, bool val)
339*5113495bSYour Name {
340*5113495bSYour Name 	if (!soc || !soc->ops) {
341*5113495bSYour Name 		dp_cdp_debug("invalid instance");
342*5113495bSYour Name 		QDF_BUG(0);
343*5113495bSYour Name 		return;
344*5113495bSYour Name 	}
345*5113495bSYour Name 
346*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
347*5113495bSYour Name 	    !soc->ops->cfg_ops->set_peer_unmap_conf_support)
348*5113495bSYour Name 		return;
349*5113495bSYour Name 
350*5113495bSYour Name 	soc->ops->cfg_ops->set_peer_unmap_conf_support(val);
351*5113495bSYour Name }
352*5113495bSYour Name 
353*5113495bSYour Name /**
354*5113495bSYour Name  * cdp_cfg_get_peer_unmap_conf_support() - check peer unmap conf feature
355*5113495bSYour Name  * @soc: datapath soc handle
356*5113495bSYour Name  *
357*5113495bSYour Name  * Check if peer unmap confirmation feature is enabled
358*5113495bSYour Name  *
359*5113495bSYour Name  * return true is peer unmap confirmation feature is enabled else false
360*5113495bSYour Name  */
361*5113495bSYour Name static inline bool
cdp_cfg_get_peer_unmap_conf_support(ol_txrx_soc_handle soc)362*5113495bSYour Name cdp_cfg_get_peer_unmap_conf_support(ol_txrx_soc_handle soc)
363*5113495bSYour Name {
364*5113495bSYour Name 	if (!soc || !soc->ops) {
365*5113495bSYour Name 		dp_cdp_debug("invalid instance");
366*5113495bSYour Name 		QDF_BUG(0);
367*5113495bSYour Name 		return false;
368*5113495bSYour Name 	}
369*5113495bSYour Name 
370*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
371*5113495bSYour Name 	    !soc->ops->cfg_ops->get_peer_unmap_conf_support)
372*5113495bSYour Name 		return false;
373*5113495bSYour Name 
374*5113495bSYour Name 	return soc->ops->cfg_ops->get_peer_unmap_conf_support();
375*5113495bSYour Name }
376*5113495bSYour Name 
377*5113495bSYour Name static inline void
cdp_cfg_set_tx_compl_tsf64(ol_txrx_soc_handle soc,uint8_t val)378*5113495bSYour Name cdp_cfg_set_tx_compl_tsf64(ol_txrx_soc_handle soc,
379*5113495bSYour Name 			   uint8_t val)
380*5113495bSYour Name {
381*5113495bSYour Name 	if (!soc || !soc->ops) {
382*5113495bSYour Name 		dp_debug("invalid instance");
383*5113495bSYour Name 		return;
384*5113495bSYour Name 	}
385*5113495bSYour Name 
386*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
387*5113495bSYour Name 	    !soc->ops->cfg_ops->set_tx_compl_tsf64)
388*5113495bSYour Name 		return;
389*5113495bSYour Name 
390*5113495bSYour Name 	soc->ops->cfg_ops->set_tx_compl_tsf64(val);
391*5113495bSYour Name }
392*5113495bSYour Name 
393*5113495bSYour Name static inline bool
cdp_cfg_get_tx_compl_tsf64(ol_txrx_soc_handle soc)394*5113495bSYour Name cdp_cfg_get_tx_compl_tsf64(ol_txrx_soc_handle soc)
395*5113495bSYour Name {
396*5113495bSYour Name 	if (!soc || !soc->ops) {
397*5113495bSYour Name 		dp_debug("invalid instance");
398*5113495bSYour Name 		return false;
399*5113495bSYour Name 	}
400*5113495bSYour Name 
401*5113495bSYour Name 	if (!soc->ops->cfg_ops ||
402*5113495bSYour Name 	    !soc->ops->cfg_ops->get_tx_compl_tsf64)
403*5113495bSYour Name 		return false;
404*5113495bSYour Name 
405*5113495bSYour Name 	return soc->ops->cfg_ops->get_tx_compl_tsf64();
406*5113495bSYour Name }
407*5113495bSYour Name 
408*5113495bSYour Name #endif /* _CDP_TXRX_CFG_H_ */
409