xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_host_stats.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_host_stats.h
22*5113495bSYour Name  * Define the host data path stats API functions
23*5113495bSYour Name  * called by the host control SW and the OS interface module
24*5113495bSYour Name  */
25*5113495bSYour Name #ifndef _CDP_TXRX_HOST_STATS_H_
26*5113495bSYour Name #define _CDP_TXRX_HOST_STATS_H_
27*5113495bSYour Name #include "cdp_txrx_handle.h"
28*5113495bSYour Name #include <cdp_txrx_cmn.h>
29*5113495bSYour Name #include <wmi_unified_api.h>
30*5113495bSYour Name /**
31*5113495bSYour Name  * cdp_host_stats_get() - cdp call to get host stats
32*5113495bSYour Name  * @soc: SOC handle
33*5113495bSYour Name  * @vdev_id: vdev id of vdev
34*5113495bSYour Name  * @req: Requirement type
35*5113495bSYour Name  *
36*5113495bSYour Name  * Return: 0 for Success, Failure returns error message
37*5113495bSYour Name  */
cdp_host_stats_get(ol_txrx_soc_handle soc,uint8_t vdev_id,struct ol_txrx_stats_req * req)38*5113495bSYour Name static inline int cdp_host_stats_get(ol_txrx_soc_handle soc,
39*5113495bSYour Name 		uint8_t vdev_id,
40*5113495bSYour Name 		struct ol_txrx_stats_req *req)
41*5113495bSYour Name {
42*5113495bSYour Name 	if (!soc || !soc->ops) {
43*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
44*5113495bSYour Name 		QDF_BUG(0);
45*5113495bSYour Name 		return 0;
46*5113495bSYour Name 	}
47*5113495bSYour Name 
48*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
49*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_host_stats_get)
50*5113495bSYour Name 		return 0;
51*5113495bSYour Name 
52*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_host_stats_get(soc, vdev_id, req);
53*5113495bSYour Name }
54*5113495bSYour Name 
55*5113495bSYour Name /**
56*5113495bSYour Name  * cdp_host_stats_get_ratekbps() - cdp call to get rate in kbps
57*5113495bSYour Name  * @soc: SOC handle
58*5113495bSYour Name  * @preamb: Preamble
59*5113495bSYour Name  * @mcs: Modulation and Coding scheme index
60*5113495bSYour Name  * @htflag: Flag to identify HT or VHT
61*5113495bSYour Name  * @gintval: Guard Interval value
62*5113495bSYour Name  *
63*5113495bSYour Name  * Return: 0 for Failure, Returns rate on Success
64*5113495bSYour Name  */
cdp_host_stats_get_ratekbps(ol_txrx_soc_handle soc,int preamb,int mcs,int htflag,int gintval)65*5113495bSYour Name static inline int cdp_host_stats_get_ratekbps(ol_txrx_soc_handle soc,
66*5113495bSYour Name 					      int preamb, int mcs,
67*5113495bSYour Name 					      int htflag, int gintval)
68*5113495bSYour Name {
69*5113495bSYour Name 	if (!soc || !soc->ops) {
70*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
71*5113495bSYour Name 		QDF_BUG(0);
72*5113495bSYour Name 		return 0;
73*5113495bSYour Name 	}
74*5113495bSYour Name 
75*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
76*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_ratekbps)
77*5113495bSYour Name 		return 0;
78*5113495bSYour Name 
79*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_ratekbps(preamb,
80*5113495bSYour Name 							   mcs, htflag,
81*5113495bSYour Name 							   gintval);
82*5113495bSYour Name }
83*5113495bSYour Name 
84*5113495bSYour Name /**
85*5113495bSYour Name  * cdp_host_stats_clr() - cdp call to clear host stats
86*5113495bSYour Name  * @soc: soc handle
87*5113495bSYour Name  * @vdev_id: vdev handle id
88*5113495bSYour Name  *
89*5113495bSYour Name  * Return: QDF_STATUS
90*5113495bSYour Name  */
91*5113495bSYour Name static inline QDF_STATUS
cdp_host_stats_clr(ol_txrx_soc_handle soc,uint8_t vdev_id)92*5113495bSYour Name cdp_host_stats_clr(ol_txrx_soc_handle soc, uint8_t vdev_id)
93*5113495bSYour Name {
94*5113495bSYour Name 	if (!soc || !soc->ops) {
95*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
96*5113495bSYour Name 		QDF_BUG(0);
97*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
98*5113495bSYour Name 	}
99*5113495bSYour Name 
100*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
101*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_host_stats_clr)
102*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
103*5113495bSYour Name 
104*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_host_stats_clr(soc, vdev_id);
105*5113495bSYour Name }
106*5113495bSYour Name 
107*5113495bSYour Name static inline QDF_STATUS
cdp_host_ce_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)108*5113495bSYour Name cdp_host_ce_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
109*5113495bSYour Name {
110*5113495bSYour Name 	if (!soc || !soc->ops) {
111*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
112*5113495bSYour Name 		QDF_BUG(0);
113*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
114*5113495bSYour Name 	}
115*5113495bSYour Name 
116*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
117*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_host_ce_stats)
118*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
119*5113495bSYour Name 
120*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_host_ce_stats(soc, vdev_id);
121*5113495bSYour Name }
122*5113495bSYour Name 
cdp_stats_publish(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_stats_extd * buf)123*5113495bSYour Name static inline int cdp_stats_publish
124*5113495bSYour Name 	(ol_txrx_soc_handle soc, uint8_t pdev_id,
125*5113495bSYour Name 	struct cdp_stats_extd *buf)
126*5113495bSYour Name {
127*5113495bSYour Name 	if (!soc || !soc->ops) {
128*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
129*5113495bSYour Name 		QDF_BUG(0);
130*5113495bSYour Name 		return 0;
131*5113495bSYour Name 	}
132*5113495bSYour Name 
133*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
134*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_stats_publish)
135*5113495bSYour Name 		return 0;
136*5113495bSYour Name 
137*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_stats_publish(soc, pdev_id, buf);
138*5113495bSYour Name }
139*5113495bSYour Name 
140*5113495bSYour Name /**
141*5113495bSYour Name  * cdp_enable_enhanced_stats() - Enable enhanced stats functionality.
142*5113495bSYour Name  * @soc: the soc object
143*5113495bSYour Name  * @pdev_id: id of the physical device object
144*5113495bSYour Name  *
145*5113495bSYour Name  * Return: QDF_STATUS
146*5113495bSYour Name  */
147*5113495bSYour Name static inline QDF_STATUS
cdp_enable_enhanced_stats(ol_txrx_soc_handle soc,uint8_t pdev_id)148*5113495bSYour Name cdp_enable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
149*5113495bSYour Name {
150*5113495bSYour Name 	if (!soc || !soc->ops) {
151*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
152*5113495bSYour Name 		QDF_BUG(0);
153*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
154*5113495bSYour Name 	}
155*5113495bSYour Name 
156*5113495bSYour Name 	if (!soc->ops->mon_ops ||
157*5113495bSYour Name 	    !soc->ops->mon_ops->txrx_enable_enhanced_stats)
158*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
159*5113495bSYour Name 
160*5113495bSYour Name 	return soc->ops->mon_ops->txrx_enable_enhanced_stats
161*5113495bSYour Name 			(soc, pdev_id);
162*5113495bSYour Name }
163*5113495bSYour Name 
164*5113495bSYour Name /**
165*5113495bSYour Name  * cdp_disable_enhanced_stats() - Disable enhanced stats functionality.
166*5113495bSYour Name  * @soc: the soc object
167*5113495bSYour Name  * @pdev_id: id of the physical device object
168*5113495bSYour Name  *
169*5113495bSYour Name  * Return: QDF_STATUS
170*5113495bSYour Name  */
171*5113495bSYour Name static inline QDF_STATUS
cdp_disable_enhanced_stats(ol_txrx_soc_handle soc,uint8_t pdev_id)172*5113495bSYour Name cdp_disable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
173*5113495bSYour Name {
174*5113495bSYour Name 	if (!soc || !soc->ops) {
175*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
176*5113495bSYour Name 		QDF_BUG(0);
177*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
178*5113495bSYour Name 	}
179*5113495bSYour Name 
180*5113495bSYour Name 	if (!soc->ops->mon_ops ||
181*5113495bSYour Name 	    !soc->ops->mon_ops->txrx_disable_enhanced_stats)
182*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
183*5113495bSYour Name 
184*5113495bSYour Name 	return soc->ops->mon_ops->txrx_disable_enhanced_stats
185*5113495bSYour Name 			(soc, pdev_id);
186*5113495bSYour Name }
187*5113495bSYour Name 
188*5113495bSYour Name static inline QDF_STATUS
cdp_tx_print_tso_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)189*5113495bSYour Name cdp_tx_print_tso_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
190*5113495bSYour Name {
191*5113495bSYour Name 	if (!soc || !soc->ops) {
192*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
193*5113495bSYour Name 		QDF_BUG(0);
194*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
195*5113495bSYour Name 	}
196*5113495bSYour Name 
197*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
198*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_print_tso_stats)
199*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
200*5113495bSYour Name 
201*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_print_tso_stats(soc, vdev_id);
202*5113495bSYour Name }
203*5113495bSYour Name 
204*5113495bSYour Name static inline QDF_STATUS
cdp_tx_rst_tso_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)205*5113495bSYour Name cdp_tx_rst_tso_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
206*5113495bSYour Name {
207*5113495bSYour Name 	if (!soc || !soc->ops) {
208*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
209*5113495bSYour Name 		QDF_BUG(0);
210*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
211*5113495bSYour Name 	}
212*5113495bSYour Name 
213*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
214*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_rst_tso_stats)
215*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
216*5113495bSYour Name 
217*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_rst_tso_stats(soc, vdev_id);
218*5113495bSYour Name }
219*5113495bSYour Name 
220*5113495bSYour Name static inline QDF_STATUS
cdp_tx_print_sg_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)221*5113495bSYour Name cdp_tx_print_sg_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
222*5113495bSYour Name {
223*5113495bSYour Name 	if (!soc || !soc->ops) {
224*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
225*5113495bSYour Name 		QDF_BUG(0);
226*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
227*5113495bSYour Name 	}
228*5113495bSYour Name 
229*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
230*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_print_sg_stats)
231*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
232*5113495bSYour Name 
233*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_print_sg_stats(soc, vdev_id);
234*5113495bSYour Name }
235*5113495bSYour Name 
236*5113495bSYour Name static inline QDF_STATUS
cdp_tx_rst_sg_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)237*5113495bSYour Name cdp_tx_rst_sg_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
238*5113495bSYour Name {
239*5113495bSYour Name 	if (!soc || !soc->ops) {
240*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
241*5113495bSYour Name 		QDF_BUG(0);
242*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
243*5113495bSYour Name 	}
244*5113495bSYour Name 
245*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
246*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_rst_sg_stats)
247*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
248*5113495bSYour Name 
249*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_rst_sg_stats(soc, vdev_id);
250*5113495bSYour Name }
251*5113495bSYour Name 
252*5113495bSYour Name static inline QDF_STATUS
cdp_print_rx_cksum_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)253*5113495bSYour Name cdp_print_rx_cksum_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
254*5113495bSYour Name {
255*5113495bSYour Name 	if (!soc || !soc->ops) {
256*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
257*5113495bSYour Name 		QDF_BUG(0);
258*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
259*5113495bSYour Name 	}
260*5113495bSYour Name 
261*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
262*5113495bSYour Name 	    !soc->ops->host_stats_ops->print_rx_cksum_stats)
263*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
264*5113495bSYour Name 
265*5113495bSYour Name 	return soc->ops->host_stats_ops->print_rx_cksum_stats(soc, vdev_id);
266*5113495bSYour Name }
267*5113495bSYour Name 
268*5113495bSYour Name static inline QDF_STATUS
cdp_rst_rx_cksum_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)269*5113495bSYour Name cdp_rst_rx_cksum_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
270*5113495bSYour Name {
271*5113495bSYour Name 	if (!soc || !soc->ops) {
272*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
273*5113495bSYour Name 		QDF_BUG(0);
274*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
275*5113495bSYour Name 	}
276*5113495bSYour Name 
277*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
278*5113495bSYour Name 	    !soc->ops->host_stats_ops->rst_rx_cksum_stats)
279*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
280*5113495bSYour Name 
281*5113495bSYour Name 	return soc->ops->host_stats_ops->rst_rx_cksum_stats(soc, vdev_id);
282*5113495bSYour Name }
283*5113495bSYour Name 
284*5113495bSYour Name static inline QDF_STATUS
cdp_host_me_stats(ol_txrx_soc_handle soc,uint8_t vdev_id)285*5113495bSYour Name cdp_host_me_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
286*5113495bSYour Name {
287*5113495bSYour Name 	if (!soc || !soc->ops) {
288*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
289*5113495bSYour Name 		QDF_BUG(0);
290*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
291*5113495bSYour Name 	}
292*5113495bSYour Name 
293*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
294*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_host_me_stats)
295*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
296*5113495bSYour Name 
297*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_host_me_stats(soc, vdev_id);
298*5113495bSYour Name }
299*5113495bSYour Name 
300*5113495bSYour Name /**
301*5113495bSYour Name  * cdp_per_peer_stats() - function to print per peer REO Queue stats
302*5113495bSYour Name  * @soc: soc handle
303*5113495bSYour Name  * @addr: peer address
304*5113495bSYour Name  *
305*5113495bSYour Name  * Return: status
306*5113495bSYour Name  */
cdp_per_peer_stats(ol_txrx_soc_handle soc,uint8_t * addr)307*5113495bSYour Name static inline QDF_STATUS cdp_per_peer_stats(ol_txrx_soc_handle soc,
308*5113495bSYour Name 					    uint8_t *addr)
309*5113495bSYour Name {
310*5113495bSYour Name 	if (!soc || !soc->ops) {
311*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
312*5113495bSYour Name 		QDF_BUG(0);
313*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
314*5113495bSYour Name 	}
315*5113495bSYour Name 
316*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
317*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_per_peer_stats)
318*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
319*5113495bSYour Name 
320*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_per_peer_stats(soc, addr);
321*5113495bSYour Name }
322*5113495bSYour Name 
cdp_host_msdu_ttl_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,struct ol_txrx_stats_req * req)323*5113495bSYour Name static inline int cdp_host_msdu_ttl_stats(ol_txrx_soc_handle soc,
324*5113495bSYour Name 	uint8_t vdev_id,
325*5113495bSYour Name 	struct ol_txrx_stats_req *req)
326*5113495bSYour Name {
327*5113495bSYour Name 	if (!soc || !soc->ops) {
328*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
329*5113495bSYour Name 		QDF_BUG(0);
330*5113495bSYour Name 		return 0;
331*5113495bSYour Name 	}
332*5113495bSYour Name 
333*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
334*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_host_msdu_ttl_stats)
335*5113495bSYour Name 		return 0;
336*5113495bSYour Name 
337*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_host_msdu_ttl_stats
338*5113495bSYour Name 			(soc, vdev_id, req);
339*5113495bSYour Name }
340*5113495bSYour Name 
cdp_update_peer_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac,void * stats,uint32_t last_tx_rate_mcs,uint32_t stats_id)341*5113495bSYour Name static inline QDF_STATUS cdp_update_peer_stats(ol_txrx_soc_handle soc,
342*5113495bSYour Name 					       uint8_t vdev_id, uint8_t *mac,
343*5113495bSYour Name 					       void *stats,
344*5113495bSYour Name 					       uint32_t last_tx_rate_mcs,
345*5113495bSYour Name 					       uint32_t stats_id)
346*5113495bSYour Name {
347*5113495bSYour Name 	if (!soc || !soc->ops) {
348*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
349*5113495bSYour Name 		QDF_BUG(0);
350*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
351*5113495bSYour Name 	}
352*5113495bSYour Name 
353*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
354*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_update_peer_stats)
355*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
356*5113495bSYour Name 
357*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_update_peer_stats
358*5113495bSYour Name 			(soc, vdev_id, mac, stats, last_tx_rate_mcs, stats_id);
359*5113495bSYour Name }
360*5113495bSYour Name 
cdp_get_dp_fw_peer_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t * mac,uint32_t caps,uint32_t copy_stats)361*5113495bSYour Name static inline QDF_STATUS cdp_get_dp_fw_peer_stats(ol_txrx_soc_handle soc,
362*5113495bSYour Name 						  uint8_t pdev_id,
363*5113495bSYour Name 						  uint8_t *mac, uint32_t caps,
364*5113495bSYour Name 						  uint32_t copy_stats)
365*5113495bSYour Name {
366*5113495bSYour Name 	if (!soc || !soc->ops) {
367*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
368*5113495bSYour Name 		QDF_BUG(0);
369*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
370*5113495bSYour Name 	}
371*5113495bSYour Name 
372*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
373*5113495bSYour Name 	    !soc->ops->host_stats_ops->get_fw_peer_stats)
374*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
375*5113495bSYour Name 
376*5113495bSYour Name 	return soc->ops->host_stats_ops->get_fw_peer_stats
377*5113495bSYour Name 			(soc, pdev_id, mac, caps, copy_stats);
378*5113495bSYour Name }
379*5113495bSYour Name 
cdp_get_dp_htt_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,void * data,uint32_t data_len)380*5113495bSYour Name static inline QDF_STATUS cdp_get_dp_htt_stats(ol_txrx_soc_handle soc,
381*5113495bSYour Name 					      uint8_t pdev_id,
382*5113495bSYour Name 					      void *data, uint32_t data_len)
383*5113495bSYour Name {
384*5113495bSYour Name 	if (!soc || !soc->ops) {
385*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
386*5113495bSYour Name 		QDF_BUG(0);
387*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
388*5113495bSYour Name 	}
389*5113495bSYour Name 
390*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
391*5113495bSYour Name 	    !soc->ops->host_stats_ops->get_htt_stats)
392*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
393*5113495bSYour Name 
394*5113495bSYour Name 	return soc->ops->host_stats_ops->get_htt_stats(soc, pdev_id, data,
395*5113495bSYour Name 						       data_len);
396*5113495bSYour Name }
397*5113495bSYour Name 
398*5113495bSYour Name /**
399*5113495bSYour Name  * cdp_update_pdev_host_stats() - Update pdev host stats received from firmware
400*5113495bSYour Name  * (wmi_host_pdev_stats and wmi_host_pdev_ext_stats) into dp
401*5113495bSYour Name  * @soc: soc handle
402*5113495bSYour Name  * @pdev_id: id of the physical device object
403*5113495bSYour Name  * @data: pdev stats
404*5113495bSYour Name  * @stats_id: statistics to be updated
405*5113495bSYour Name  *
406*5113495bSYour Name  * Return: QDF_STATUS
407*5113495bSYour Name  */
408*5113495bSYour Name static inline QDF_STATUS
cdp_update_pdev_host_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,void * data,uint16_t stats_id)409*5113495bSYour Name cdp_update_pdev_host_stats(ol_txrx_soc_handle soc,
410*5113495bSYour Name 			   uint8_t pdev_id,
411*5113495bSYour Name 			   void *data,
412*5113495bSYour Name 			   uint16_t stats_id)
413*5113495bSYour Name {
414*5113495bSYour Name 	if (!soc || !soc->ops) {
415*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
416*5113495bSYour Name 		QDF_BUG(0);
417*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
418*5113495bSYour Name 	}
419*5113495bSYour Name 
420*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
421*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_update_pdev_stats)
422*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
423*5113495bSYour Name 
424*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_update_pdev_stats(soc, pdev_id,
425*5113495bSYour Name 								data,
426*5113495bSYour Name 								stats_id);
427*5113495bSYour Name }
428*5113495bSYour Name 
429*5113495bSYour Name /**
430*5113495bSYour Name  * cdp_update_vdev_host_stats() - Update vdev host stats
431*5113495bSYour Name  * @soc: soc handle
432*5113495bSYour Name  * @vdev_id: id of the virtual device object
433*5113495bSYour Name  * @data: pdev stats
434*5113495bSYour Name  * @stats_id: type of stats
435*5113495bSYour Name  * @xmit_type: xmit type, MLO/Legacy
436*5113495bSYour Name  * Return: QDF_STATUS
437*5113495bSYour Name  */
438*5113495bSYour Name static inline QDF_STATUS
cdp_update_vdev_host_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,void * data,uint16_t stats_id,uint8_t xmit_type)439*5113495bSYour Name cdp_update_vdev_host_stats(ol_txrx_soc_handle soc,
440*5113495bSYour Name 			   uint8_t vdev_id,
441*5113495bSYour Name 			   void *data,
442*5113495bSYour Name 			   uint16_t stats_id, uint8_t xmit_type)
443*5113495bSYour Name {
444*5113495bSYour Name 	if (!soc || !soc->ops) {
445*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
446*5113495bSYour Name 		QDF_BUG(0);
447*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
448*5113495bSYour Name 	}
449*5113495bSYour Name 
450*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
451*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_update_vdev_stats)
452*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
453*5113495bSYour Name 
454*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_update_vdev_stats(soc, vdev_id,
455*5113495bSYour Name 								data,
456*5113495bSYour Name 								stats_id,
457*5113495bSYour Name 								xmit_type);
458*5113495bSYour Name }
459*5113495bSYour Name 
460*5113495bSYour Name /**
461*5113495bSYour Name  * cdp_txrx_get_peer_stats_param() - Call to get specified peer stats
462*5113495bSYour Name  * @soc: soc handle
463*5113495bSYour Name  * @vdev_id: vdev_id of vdev object
464*5113495bSYour Name  * @peer_mac: mac address of the peer
465*5113495bSYour Name  * @type: enum of required stats
466*5113495bSYour Name  * @buf: buffer to hold the value
467*5113495bSYour Name  *
468*5113495bSYour Name  * Return: QDF_STATUS
469*5113495bSYour Name  */
470*5113495bSYour Name static inline QDF_STATUS
cdp_txrx_get_peer_stats_param(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,enum cdp_peer_stats_type type,cdp_peer_stats_param_t * buf)471*5113495bSYour Name cdp_txrx_get_peer_stats_param(ol_txrx_soc_handle soc, uint8_t vdev_id,
472*5113495bSYour Name 			      uint8_t *peer_mac,
473*5113495bSYour Name 			      enum cdp_peer_stats_type type,
474*5113495bSYour Name 			      cdp_peer_stats_param_t *buf)
475*5113495bSYour Name {
476*5113495bSYour Name 	if (!soc || !soc->ops) {
477*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
478*5113495bSYour Name 		QDF_BUG(0);
479*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
480*5113495bSYour Name 	}
481*5113495bSYour Name 
482*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
483*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_peer_stats_param)
484*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
485*5113495bSYour Name 
486*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_peer_stats_param(soc,
487*5113495bSYour Name 								   vdev_id,
488*5113495bSYour Name 								   peer_mac,
489*5113495bSYour Name 								   type,
490*5113495bSYour Name 								   buf);
491*5113495bSYour Name }
492*5113495bSYour Name 
493*5113495bSYour Name /**
494*5113495bSYour Name  * cdp_host_get_soc_stats() - Call to get soc stats
495*5113495bSYour Name  * @soc: soc handle
496*5113495bSYour Name  * @soc_stats: buffer for cdp soc stats
497*5113495bSYour Name  *
498*5113495bSYour Name  * Return: QDF_STATUS
499*5113495bSYour Name  */
500*5113495bSYour Name static inline QDF_STATUS
cdp_host_get_soc_stats(ol_txrx_soc_handle soc,struct cdp_soc_stats * soc_stats)501*5113495bSYour Name cdp_host_get_soc_stats(ol_txrx_soc_handle soc, struct cdp_soc_stats *soc_stats)
502*5113495bSYour Name {
503*5113495bSYour Name 	if (!soc || !soc->ops) {
504*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
505*5113495bSYour Name 		QDF_BUG(0);
506*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
507*5113495bSYour Name 	}
508*5113495bSYour Name 
509*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
510*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_soc_stats)
511*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
512*5113495bSYour Name 
513*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_soc_stats(soc, soc_stats);
514*5113495bSYour Name }
515*5113495bSYour Name 
516*5113495bSYour Name /**
517*5113495bSYour Name  * cdp_host_get_peer_stats() - Call to get peer stats
518*5113495bSYour Name  * @soc: soc handle
519*5113495bSYour Name  * @vdev_id: vdev_id of vdev object
520*5113495bSYour Name  * @peer_mac: mac address of the peer
521*5113495bSYour Name  * @peer_stats: destination buffer
522*5113495bSYour Name  *
523*5113495bSYour Name  * Return: QDF_STATUS
524*5113495bSYour Name  */
525*5113495bSYour Name static inline QDF_STATUS
cdp_host_get_peer_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_peer_stats * peer_stats)526*5113495bSYour Name cdp_host_get_peer_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
527*5113495bSYour Name 			uint8_t *peer_mac,
528*5113495bSYour Name 			struct cdp_peer_stats *peer_stats)
529*5113495bSYour Name {
530*5113495bSYour Name 	if (!soc || !soc->ops) {
531*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
532*5113495bSYour Name 		QDF_BUG(0);
533*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
534*5113495bSYour Name 	}
535*5113495bSYour Name 
536*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
537*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_peer_stats)
538*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
539*5113495bSYour Name 
540*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_peer_stats(soc, vdev_id,
541*5113495bSYour Name 							     peer_mac,
542*5113495bSYour Name 							     peer_stats);
543*5113495bSYour Name }
544*5113495bSYour Name 
545*5113495bSYour Name 
546*5113495bSYour Name /**
547*5113495bSYour Name  * cdp_host_get_peer_stats_based_on_peer_type() - Fetch peer stats based on the
548*5113495bSYour Name  * peer type
549*5113495bSYour Name  * @soc: soc handle
550*5113495bSYour Name  * @vdev_id: vdev_id of vdev object
551*5113495bSYour Name  * @peer_mac: mac address of the peer
552*5113495bSYour Name  * @peer_stats: destination buffer
553*5113495bSYour Name  * @peer_type: type of peer
554*5113495bSYour Name  *
555*5113495bSYour Name  * Return: QDF_STATUS
556*5113495bSYour Name  */
557*5113495bSYour Name static inline QDF_STATUS
cdp_host_get_peer_stats_based_on_peer_type(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_peer_stats * peer_stats,enum cdp_peer_type peer_type)558*5113495bSYour Name cdp_host_get_peer_stats_based_on_peer_type(ol_txrx_soc_handle soc, uint8_t vdev_id,
559*5113495bSYour Name 					   uint8_t *peer_mac,
560*5113495bSYour Name 					   struct cdp_peer_stats *peer_stats,
561*5113495bSYour Name 					   enum cdp_peer_type peer_type)
562*5113495bSYour Name {
563*5113495bSYour Name 	if (!soc || !soc->ops) {
564*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
565*5113495bSYour Name 		QDF_BUG(0);
566*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
567*5113495bSYour Name 	}
568*5113495bSYour Name 
569*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
570*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_peer_stats_based_on_peer_type)
571*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
572*5113495bSYour Name 
573*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_peer_stats_based_on_peer_type(
574*5113495bSYour Name 								soc, vdev_id,
575*5113495bSYour Name 								peer_mac,
576*5113495bSYour Name 								peer_stats,
577*5113495bSYour Name 								peer_type);
578*5113495bSYour Name }
579*5113495bSYour Name 
580*5113495bSYour Name /**
581*5113495bSYour Name  * cdp_host_get_per_link_peer_stats() - Call to get peer stats
582*5113495bSYour Name  * @soc: soc handle
583*5113495bSYour Name  * @vdev_id: vdev_id of vdev object
584*5113495bSYour Name  * @peer_mac: mac address of the peer
585*5113495bSYour Name  * @peer_stats: destination buffer
586*5113495bSYour Name  * @peer_type: Peer type
587*5113495bSYour Name  * @num_link: Number of ML links
588*5113495bSYour Name  *
589*5113495bSYour Name  * NOTE: For peer_type = CDP_MLD_PEER_TYPE peer_stats should point to
590*5113495bSYour Name  *       buffer of size = (sizeof(*peer_stats) * num_link)
591*5113495bSYour Name  *
592*5113495bSYour Name  * Return: QDF_STATUS
593*5113495bSYour Name  */
594*5113495bSYour Name static inline QDF_STATUS
cdp_host_get_per_link_peer_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_peer_stats * peer_stats,enum cdp_peer_type peer_type,uint8_t num_link)595*5113495bSYour Name cdp_host_get_per_link_peer_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
596*5113495bSYour Name 				 uint8_t *peer_mac,
597*5113495bSYour Name 				 struct cdp_peer_stats *peer_stats,
598*5113495bSYour Name 				 enum cdp_peer_type peer_type,
599*5113495bSYour Name 				 uint8_t num_link)
600*5113495bSYour Name {
601*5113495bSYour Name 	if (!soc || !soc->ops) {
602*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
603*5113495bSYour Name 		QDF_BUG(0);
604*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
605*5113495bSYour Name 	}
606*5113495bSYour Name 
607*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
608*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_per_link_stats)
609*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
610*5113495bSYour Name 
611*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_per_link_stats(soc, vdev_id,
612*5113495bSYour Name 								 peer_mac,
613*5113495bSYour Name 								 peer_stats,
614*5113495bSYour Name 								 peer_type,
615*5113495bSYour Name 								 num_link);
616*5113495bSYour Name }
617*5113495bSYour Name 
618*5113495bSYour Name /**
619*5113495bSYour Name  * cdp_host_reset_peer_ald_stats() - Call to reset ald stats
620*5113495bSYour Name  * @soc: soc handle
621*5113495bSYour Name  * @vdev_id: vdev_id of vdev object
622*5113495bSYour Name  * @peer_mac: mac address of the peer
623*5113495bSYour Name  *
624*5113495bSYour Name  * Return: QDF_STATUS
625*5113495bSYour Name  */
626*5113495bSYour Name static inline QDF_STATUS
cdp_host_reset_peer_ald_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)627*5113495bSYour Name cdp_host_reset_peer_ald_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
628*5113495bSYour Name 			      uint8_t *peer_mac)
629*5113495bSYour Name {
630*5113495bSYour Name 	if (!soc || !soc->ops) {
631*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
632*5113495bSYour Name 		QDF_BUG(0);
633*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
634*5113495bSYour Name 	}
635*5113495bSYour Name 
636*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
637*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_reset_peer_ald_stats)
638*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
639*5113495bSYour Name 
640*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_reset_peer_ald_stats(soc,
641*5113495bSYour Name 							    vdev_id,
642*5113495bSYour Name 							    peer_mac);
643*5113495bSYour Name }
644*5113495bSYour Name 
645*5113495bSYour Name /**
646*5113495bSYour Name  * cdp_host_reset_peer_stats() - Call to reset peer stats
647*5113495bSYour Name  * @soc: soc handle
648*5113495bSYour Name  * @vdev_id: vdev_id of vdev object
649*5113495bSYour Name  * @peer_mac: mac address of the peer
650*5113495bSYour Name  *
651*5113495bSYour Name  * Return: QDF_STATUS
652*5113495bSYour Name  */
653*5113495bSYour Name static inline QDF_STATUS
cdp_host_reset_peer_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)654*5113495bSYour Name cdp_host_reset_peer_stats(ol_txrx_soc_handle soc,
655*5113495bSYour Name 			  uint8_t vdev_id, uint8_t *peer_mac)
656*5113495bSYour Name {
657*5113495bSYour Name 	if (!soc || !soc->ops) {
658*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
659*5113495bSYour Name 		QDF_BUG(0);
660*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
661*5113495bSYour Name 	}
662*5113495bSYour Name 
663*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
664*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_reset_peer_stats)
665*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
666*5113495bSYour Name 
667*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_reset_peer_stats(soc,
668*5113495bSYour Name 							vdev_id,
669*5113495bSYour Name 							peer_mac);
670*5113495bSYour Name }
671*5113495bSYour Name 
672*5113495bSYour Name /**
673*5113495bSYour Name  * cdp_host_get_vdev_stats() - Call to get vdev stats
674*5113495bSYour Name  * @soc: dp soc object
675*5113495bSYour Name  * @vdev_id: id of dp vdev object
676*5113495bSYour Name  * @buf: buffer
677*5113495bSYour Name  * @is_aggregate:
678*5113495bSYour Name  *
679*5113495bSYour Name  * Return: int
680*5113495bSYour Name  */
681*5113495bSYour Name static inline int
cdp_host_get_vdev_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,struct cdp_vdev_stats * buf,bool is_aggregate)682*5113495bSYour Name cdp_host_get_vdev_stats(ol_txrx_soc_handle soc,
683*5113495bSYour Name 			uint8_t vdev_id,
684*5113495bSYour Name 			struct cdp_vdev_stats *buf,
685*5113495bSYour Name 			bool is_aggregate)
686*5113495bSYour Name {
687*5113495bSYour Name 	if (!soc || !soc->ops) {
688*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
689*5113495bSYour Name 		QDF_BUG(0);
690*5113495bSYour Name 		return 0;
691*5113495bSYour Name 	}
692*5113495bSYour Name 
693*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
694*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_vdev_stats)
695*5113495bSYour Name 		return 0;
696*5113495bSYour Name 
697*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_vdev_stats(soc, vdev_id,
698*5113495bSYour Name 							     buf,
699*5113495bSYour Name 							     is_aggregate);
700*5113495bSYour Name }
701*5113495bSYour Name 
702*5113495bSYour Name /**
703*5113495bSYour Name  * cdp_update_host_vdev_stats() - Call to update vdev stats received from
704*5113495bSYour Name  * firmware (wmi_host_vdev_stats and wmi_host_vdev_extd_stats) into dp
705*5113495bSYour Name  * @soc: soc handle
706*5113495bSYour Name  * @data: stats data to be updated
707*5113495bSYour Name  * @size: size of stats data
708*5113495bSYour Name  * @stats_id: stats id
709*5113495bSYour Name  *
710*5113495bSYour Name  * Return: int
711*5113495bSYour Name  */
712*5113495bSYour Name static inline int
cdp_update_host_vdev_stats(ol_txrx_soc_handle soc,void * data,uint32_t size,uint32_t stats_id)713*5113495bSYour Name cdp_update_host_vdev_stats(ol_txrx_soc_handle soc,
714*5113495bSYour Name 			   void *data,
715*5113495bSYour Name 			   uint32_t size,
716*5113495bSYour Name 			   uint32_t stats_id)
717*5113495bSYour Name {
718*5113495bSYour Name 	if (!soc || !soc->ops) {
719*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
720*5113495bSYour Name 		QDF_BUG(0);
721*5113495bSYour Name 		return 0;
722*5113495bSYour Name 	}
723*5113495bSYour Name 
724*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
725*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats)
726*5113495bSYour Name 		return 0;
727*5113495bSYour Name 
728*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats
729*5113495bSYour Name 								(soc,
730*5113495bSYour Name 								 data,
731*5113495bSYour Name 								 size,
732*5113495bSYour Name 								 stats_id);
733*5113495bSYour Name }
734*5113495bSYour Name 
735*5113495bSYour Name /**
736*5113495bSYour Name  * cdp_get_vdev_extd_stats() - Call to get vdev extd stats
737*5113495bSYour Name  * @soc: soc handle
738*5113495bSYour Name  * @vdev_id: id of dp vdev object
739*5113495bSYour Name  * @buf: buffer
740*5113495bSYour Name  *
741*5113495bSYour Name  * Return: int
742*5113495bSYour Name  */
743*5113495bSYour Name static inline int
cdp_get_vdev_extd_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,wmi_host_vdev_extd_stats * buf)744*5113495bSYour Name cdp_get_vdev_extd_stats(ol_txrx_soc_handle soc,
745*5113495bSYour Name 			uint8_t vdev_id,
746*5113495bSYour Name 			wmi_host_vdev_extd_stats *buf)
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 0;
752*5113495bSYour Name 	}
753*5113495bSYour Name 
754*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
755*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_vdev_extd_stats)
756*5113495bSYour Name 		return 0;
757*5113495bSYour Name 
758*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_vdev_extd_stats(soc, vdev_id,
759*5113495bSYour Name 								  buf);
760*5113495bSYour Name }
761*5113495bSYour Name 
762*5113495bSYour Name /**
763*5113495bSYour Name  * cdp_host_get_pdev_stats() - Call to get cdp_pdev_stats
764*5113495bSYour Name  * @soc: soc handle
765*5113495bSYour Name  * @pdev_id: id of dp pdev object
766*5113495bSYour Name  * @buf: buffer to hold cdp_pdev_stats
767*5113495bSYour Name  *
768*5113495bSYour Name  * Return: success/failure
769*5113495bSYour Name  */
770*5113495bSYour Name static inline int
cdp_host_get_pdev_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_stats * buf)771*5113495bSYour Name cdp_host_get_pdev_stats(ol_txrx_soc_handle soc,
772*5113495bSYour Name 			uint8_t pdev_id, struct cdp_pdev_stats *buf)
773*5113495bSYour Name {
774*5113495bSYour Name 	if (!soc || !soc->ops) {
775*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
776*5113495bSYour Name 		QDF_BUG(0);
777*5113495bSYour Name 		return 0;
778*5113495bSYour Name 	}
779*5113495bSYour Name 
780*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
781*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_pdev_stats)
782*5113495bSYour Name 		return 0;
783*5113495bSYour Name 
784*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_pdev_stats(soc, pdev_id, buf);
785*5113495bSYour Name }
786*5113495bSYour Name 
787*5113495bSYour Name /**
788*5113495bSYour Name  * cdp_host_get_radio_stats() - Call to get radio stats
789*5113495bSYour Name  * @soc: soc handle
790*5113495bSYour Name  * @pdev_id: id of dp pdev object
791*5113495bSYour Name  * @buf: stats buffer
792*5113495bSYour Name  *
793*5113495bSYour Name  * Return: int
794*5113495bSYour Name  */
795*5113495bSYour Name static inline int
cdp_host_get_radio_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,void * buf)796*5113495bSYour Name cdp_host_get_radio_stats(ol_txrx_soc_handle soc,
797*5113495bSYour Name 			 uint8_t pdev_id,
798*5113495bSYour Name 			 void *buf)
799*5113495bSYour Name {
800*5113495bSYour Name 	if (!soc || !soc->ops) {
801*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
802*5113495bSYour Name 		QDF_BUG(0);
803*5113495bSYour Name 		return 0;
804*5113495bSYour Name 	}
805*5113495bSYour Name 
806*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
807*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_radio_stats)
808*5113495bSYour Name 		return 0;
809*5113495bSYour Name 
810*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_radio_stats(soc, pdev_id,
811*5113495bSYour Name 							      buf);
812*5113495bSYour Name }
813*5113495bSYour Name 
814*5113495bSYour Name #ifdef QCA_SUPPORT_SCAN_SPCL_VAP_STATS
815*5113495bSYour Name static inline int
cdp_get_scan_spcl_vap_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,struct cdp_scan_spcl_vap_stats * stats)816*5113495bSYour Name cdp_get_scan_spcl_vap_stats(ol_txrx_soc_handle soc,
817*5113495bSYour Name 			    uint8_t vdev_id,
818*5113495bSYour Name 			    struct cdp_scan_spcl_vap_stats *stats)
819*5113495bSYour Name {
820*5113495bSYour Name 	if (!soc || !soc->ops) {
821*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
822*5113495bSYour Name 		QDF_BUG(0);
823*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
824*5113495bSYour Name 	}
825*5113495bSYour Name 
826*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
827*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_scan_spcl_vap_stats)
828*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
829*5113495bSYour Name 
830*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_scan_spcl_vap_stats(soc,
831*5113495bSYour Name 								      vdev_id,
832*5113495bSYour Name 								      stats);
833*5113495bSYour Name }
834*5113495bSYour Name #endif
835*5113495bSYour Name 
836*5113495bSYour Name /**
837*5113495bSYour Name  * cdp_get_peer_delay_stats() - Call to get per peer delay stats
838*5113495bSYour Name  * @soc: soc handle
839*5113495bSYour Name  * @vdev_id: id of dp_vdev handle
840*5113495bSYour Name  * @peer_mac: peer mac address
841*5113495bSYour Name  * @delay_stats: user allocated buffer for peer delay stats
842*5113495bSYour Name  *
843*5113495bSYour Name  * Return: status Success/Failure
844*5113495bSYour Name  */
845*5113495bSYour Name static inline QDF_STATUS
cdp_get_peer_delay_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_delay_tid_stats * delay_stats)846*5113495bSYour Name cdp_get_peer_delay_stats(ol_txrx_soc_handle soc,
847*5113495bSYour Name 			 uint8_t vdev_id,
848*5113495bSYour Name 			 uint8_t *peer_mac,
849*5113495bSYour Name 			 struct cdp_delay_tid_stats *delay_stats)
850*5113495bSYour Name {
851*5113495bSYour Name 	if (!soc || !soc->ops) {
852*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
853*5113495bSYour Name 		QDF_BUG(0);
854*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
855*5113495bSYour Name 	}
856*5113495bSYour Name 
857*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
858*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_peer_delay_stats)
859*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
860*5113495bSYour Name 
861*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_peer_delay_stats(soc,
862*5113495bSYour Name 								   vdev_id,
863*5113495bSYour Name 								   peer_mac,
864*5113495bSYour Name 								   delay_stats);
865*5113495bSYour Name }
866*5113495bSYour Name 
867*5113495bSYour Name /**
868*5113495bSYour Name  * cdp_get_peer_jitter_stats() - Call to get per peer jitter stats
869*5113495bSYour Name  * @soc: soc handle
870*5113495bSYour Name  * @pdev_id: id of dp_pdev handle
871*5113495bSYour Name  * @vdev_id: id of dp_vdev handle
872*5113495bSYour Name  * @peer_mac: peer mac address
873*5113495bSYour Name  * @tid_stats: user allocated buffer for tid_stats
874*5113495bSYour Name  *
875*5113495bSYour Name  * Return: status Success/Failure
876*5113495bSYour Name  */
877*5113495bSYour Name static inline QDF_STATUS
cdp_get_peer_jitter_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_peer_tid_stats * tid_stats)878*5113495bSYour Name cdp_get_peer_jitter_stats(ol_txrx_soc_handle soc,
879*5113495bSYour Name 			  uint8_t pdev_id,
880*5113495bSYour Name 			  uint8_t vdev_id,
881*5113495bSYour Name 			  uint8_t *peer_mac,
882*5113495bSYour Name 			  struct cdp_peer_tid_stats *tid_stats)
883*5113495bSYour Name {
884*5113495bSYour Name 	if (!soc || !soc->ops) {
885*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
886*5113495bSYour Name 		QDF_BUG(0);
887*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
888*5113495bSYour Name 	}
889*5113495bSYour Name 
890*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
891*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_peer_jitter_stats)
892*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
893*5113495bSYour Name 
894*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_peer_jitter_stats(soc,
895*5113495bSYour Name 								    pdev_id,
896*5113495bSYour Name 								    vdev_id,
897*5113495bSYour Name 								    peer_mac,
898*5113495bSYour Name 								    tid_stats);
899*5113495bSYour Name }
900*5113495bSYour Name 
901*5113495bSYour Name /**
902*5113495bSYour Name  * cdp_mon_pdev_get_rx_stats() - Call to get monitor pdev rx stats
903*5113495bSYour Name  * @soc: soc handle
904*5113495bSYour Name  * @pdev_id: id of dp_pdev handle
905*5113495bSYour Name  * @stats: user allocated buffer for dp pdev mon stats
906*5113495bSYour Name  *
907*5113495bSYour Name  * Return: status Success/Failure
908*5113495bSYour Name  */
909*5113495bSYour Name static inline QDF_STATUS
cdp_mon_pdev_get_rx_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_mon_stats * stats)910*5113495bSYour Name cdp_mon_pdev_get_rx_stats(ol_txrx_soc_handle soc, uint8_t pdev_id,
911*5113495bSYour Name 			  struct cdp_pdev_mon_stats *stats)
912*5113495bSYour Name {
913*5113495bSYour Name 	if (!soc || !soc->ops) {
914*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
915*5113495bSYour Name 		QDF_BUG(0);
916*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
917*5113495bSYour Name 	}
918*5113495bSYour Name 
919*5113495bSYour Name 	if (!soc->ops->mon_ops ||
920*5113495bSYour Name 	    !soc->ops->mon_ops->get_mon_pdev_rx_stats)
921*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
922*5113495bSYour Name 
923*5113495bSYour Name 	return soc->ops->mon_ops->get_mon_pdev_rx_stats(soc, pdev_id, stats);
924*5113495bSYour Name }
925*5113495bSYour Name 
926*5113495bSYour Name #ifdef WLAN_TX_PKT_CAPTURE_ENH
927*5113495bSYour Name /**
928*5113495bSYour Name  * cdp_get_peer_tx_capture_stats() - Call to get peer tx capture stats
929*5113495bSYour Name  * @soc: soc handle
930*5113495bSYour Name  * @vdev_id: id of dp_vdev handle
931*5113495bSYour Name  * @peer_mac: peer mac address
932*5113495bSYour Name  * @stats: pointer to peer tx capture stats
933*5113495bSYour Name  *
934*5113495bSYour Name  * Return: status Success/Failure
935*5113495bSYour Name  */
936*5113495bSYour Name static inline QDF_STATUS
cdp_get_peer_tx_capture_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_peer_tx_capture_stats * stats)937*5113495bSYour Name cdp_get_peer_tx_capture_stats(ol_txrx_soc_handle soc,
938*5113495bSYour Name 			      uint8_t vdev_id,
939*5113495bSYour Name 			      uint8_t *peer_mac,
940*5113495bSYour Name 			      struct cdp_peer_tx_capture_stats *stats)
941*5113495bSYour Name {
942*5113495bSYour Name 	if (!soc || !soc->ops) {
943*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
944*5113495bSYour Name 		QDF_BUG(0);
945*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
946*5113495bSYour Name 	}
947*5113495bSYour Name 
948*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
949*5113495bSYour Name 	    !soc->ops->host_stats_ops->get_peer_tx_capture_stats)
950*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
951*5113495bSYour Name 
952*5113495bSYour Name 	return soc->ops->host_stats_ops->get_peer_tx_capture_stats(soc, vdev_id,
953*5113495bSYour Name 								   peer_mac,
954*5113495bSYour Name 								   stats);
955*5113495bSYour Name }
956*5113495bSYour Name 
957*5113495bSYour Name /**
958*5113495bSYour Name  * cdp_get_pdev_tx_capture_stats() - Call to get pdev tx capture stats
959*5113495bSYour Name  * @soc: soc handle
960*5113495bSYour Name  * @pdev_id: id of dp_pdev handle
961*5113495bSYour Name  * @stats: pointer to pdev tx capture stats
962*5113495bSYour Name  *
963*5113495bSYour Name  * Return: status Success/Failure
964*5113495bSYour Name  */
965*5113495bSYour Name static inline QDF_STATUS
cdp_get_pdev_tx_capture_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_tx_capture_stats * stats)966*5113495bSYour Name cdp_get_pdev_tx_capture_stats(ol_txrx_soc_handle soc, uint8_t pdev_id,
967*5113495bSYour Name 			      struct cdp_pdev_tx_capture_stats *stats)
968*5113495bSYour Name {
969*5113495bSYour Name 	if (!soc || !soc->ops) {
970*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
971*5113495bSYour Name 		QDF_BUG(0);
972*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
973*5113495bSYour Name 	}
974*5113495bSYour Name 
975*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
976*5113495bSYour Name 	    !soc->ops->host_stats_ops->get_pdev_tx_capture_stats)
977*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
978*5113495bSYour Name 
979*5113495bSYour Name 	return soc->ops->host_stats_ops->get_pdev_tx_capture_stats(soc, pdev_id,
980*5113495bSYour Name 								   stats);
981*5113495bSYour Name }
982*5113495bSYour Name #endif /* WLAN_TX_PKT_CAPTURE_ENH */
983*5113495bSYour Name 
984*5113495bSYour Name #ifdef HW_TX_DELAY_STATS_ENABLE
985*5113495bSYour Name /**
986*5113495bSYour Name  * cdp_enable_disable_vdev_tx_delay_stats() - Start/Stop tx delay stats capture
987*5113495bSYour Name  * @soc: soc handle
988*5113495bSYour Name  * @vdev_id: vdev id
989*5113495bSYour Name  * @value: value to be set
990*5113495bSYour Name  *
991*5113495bSYour Name  * Return: None
992*5113495bSYour Name  */
993*5113495bSYour Name static inline void
cdp_enable_disable_vdev_tx_delay_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t value)994*5113495bSYour Name cdp_enable_disable_vdev_tx_delay_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
995*5113495bSYour Name 				       uint8_t value)
996*5113495bSYour Name {
997*5113495bSYour Name 	if (!soc || !soc->ops) {
998*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
999*5113495bSYour Name 		return;
1000*5113495bSYour Name 	}
1001*5113495bSYour Name 
1002*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1003*5113495bSYour Name 	    !soc->ops->host_stats_ops->enable_disable_vdev_tx_delay_stats)
1004*5113495bSYour Name 		return;
1005*5113495bSYour Name 
1006*5113495bSYour Name 	soc->ops->host_stats_ops->enable_disable_vdev_tx_delay_stats(soc,
1007*5113495bSYour Name 								     vdev_id,
1008*5113495bSYour Name 								     value);
1009*5113495bSYour Name }
1010*5113495bSYour Name 
1011*5113495bSYour Name /**
1012*5113495bSYour Name  * cdp_vdev_is_tx_delay_stats_enabled() - Check if the Tx delay stats
1013*5113495bSYour Name  *  is enabled or not for the given vdev_id
1014*5113495bSYour Name  * @soc: soc handle
1015*5113495bSYour Name  * @vdev_id: vdev_id
1016*5113495bSYour Name  *
1017*5113495bSYour Name  * Return: 1 if enabled, 0 if disabled
1018*5113495bSYour Name  */
1019*5113495bSYour Name static inline uint8_t
cdp_vdev_is_tx_delay_stats_enabled(ol_txrx_soc_handle soc,uint8_t vdev_id)1020*5113495bSYour Name cdp_vdev_is_tx_delay_stats_enabled(ol_txrx_soc_handle soc, uint8_t vdev_id)
1021*5113495bSYour Name {
1022*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->host_stats_ops) {
1023*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
1024*5113495bSYour Name 		return 0;
1025*5113495bSYour Name 	}
1026*5113495bSYour Name 
1027*5113495bSYour Name 	if (soc->ops->host_stats_ops->is_tx_delay_stats_enabled)
1028*5113495bSYour Name 		return soc->ops->host_stats_ops->is_tx_delay_stats_enabled(soc,
1029*5113495bSYour Name 								     vdev_id);
1030*5113495bSYour Name 
1031*5113495bSYour Name 	return 0;
1032*5113495bSYour Name }
1033*5113495bSYour Name #endif
1034*5113495bSYour Name 
1035*5113495bSYour Name /**
1036*5113495bSYour Name  * cdp_get_pdev_tid_stats() - Get pdev tid stats
1037*5113495bSYour Name  * @soc: soc handle
1038*5113495bSYour Name  * @pdev_id: Pdev id
1039*5113495bSYour Name  * @tid_stats: Pointer to cdp_tid_stats_intf
1040*5113495bSYour Name  *
1041*5113495bSYour Name  * Return: status Success/Failure
1042*5113495bSYour Name  */
1043*5113495bSYour Name static inline QDF_STATUS
cdp_get_pdev_tid_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_tid_stats_intf * tid_stats)1044*5113495bSYour Name cdp_get_pdev_tid_stats(ol_txrx_soc_handle soc, uint8_t pdev_id,
1045*5113495bSYour Name 		       struct cdp_tid_stats_intf *tid_stats)
1046*5113495bSYour Name {
1047*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->host_stats_ops) {
1048*5113495bSYour Name 		dp_cdp_debug("Invalid Instance:");
1049*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1050*5113495bSYour Name 	}
1051*5113495bSYour Name 
1052*5113495bSYour Name 	if (!soc->ops->host_stats_ops->txrx_get_pdev_tid_stats)
1053*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1054*5113495bSYour Name 
1055*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_pdev_tid_stats(soc, pdev_id,
1056*5113495bSYour Name 								 tid_stats);
1057*5113495bSYour Name }
1058*5113495bSYour Name 
1059*5113495bSYour Name #ifdef WLAN_CONFIG_TELEMETRY_AGENT
1060*5113495bSYour Name /**
1061*5113495bSYour Name  * cdp_get_pdev_telemetry_stats() - function to get pdev telemetry stats
1062*5113495bSYour Name  * @soc: soc handle
1063*5113495bSYour Name  * @pdev_id: pdev id
1064*5113495bSYour Name  * @stats: pointer to pdev telemetry stats
1065*5113495bSYour Name  *
1066*5113495bSYour Name  * Return: status
1067*5113495bSYour Name  */
cdp_get_pdev_telemetry_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_telemetry_stats * stats)1068*5113495bSYour Name static inline QDF_STATUS cdp_get_pdev_telemetry_stats(
1069*5113495bSYour Name 				ol_txrx_soc_handle soc,
1070*5113495bSYour Name 				uint8_t pdev_id,
1071*5113495bSYour Name 				struct cdp_pdev_telemetry_stats *stats)
1072*5113495bSYour Name {
1073*5113495bSYour Name 	if (!soc || !soc->ops) {
1074*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1075*5113495bSYour Name 		QDF_BUG(0);
1076*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1077*5113495bSYour Name 	}
1078*5113495bSYour Name 
1079*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1080*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_pdev_telemetry_stats)
1081*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1082*5113495bSYour Name 
1083*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_pdev_telemetry_stats(
1084*5113495bSYour Name 					soc, pdev_id, stats);
1085*5113495bSYour Name }
1086*5113495bSYour Name 
1087*5113495bSYour Name /**
1088*5113495bSYour Name  * cdp_get_peer_telemetry_stats() - function to get peer telemetry stats
1089*5113495bSYour Name  * @soc: soc handle
1090*5113495bSYour Name  * @addr: peer address
1091*5113495bSYour Name  * @stats: pointer to peer telemetry stats
1092*5113495bSYour Name  *
1093*5113495bSYour Name  * Return: status
1094*5113495bSYour Name  */
cdp_get_peer_telemetry_stats(ol_txrx_soc_handle soc,uint8_t * addr,struct cdp_peer_telemetry_stats * stats)1095*5113495bSYour Name static inline QDF_STATUS cdp_get_peer_telemetry_stats(
1096*5113495bSYour Name 				ol_txrx_soc_handle soc,
1097*5113495bSYour Name 				uint8_t *addr,
1098*5113495bSYour Name 				struct cdp_peer_telemetry_stats *stats)
1099*5113495bSYour Name {
1100*5113495bSYour Name 	if (!soc || !soc->ops) {
1101*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1102*5113495bSYour Name 		QDF_BUG(0);
1103*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1104*5113495bSYour Name 	}
1105*5113495bSYour Name 
1106*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1107*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_peer_telemetry_stats)
1108*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1109*5113495bSYour Name 
1110*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_peer_telemetry_stats(
1111*5113495bSYour Name 					soc, addr, stats);
1112*5113495bSYour Name }
1113*5113495bSYour Name 
1114*5113495bSYour Name /**
1115*5113495bSYour Name  * cdp_get_pdev_deter_stats(): function to get pdev deterministic stats
1116*5113495bSYour Name  * @soc: soc handle
1117*5113495bSYour Name  * @pdev_id: pdev id
1118*5113495bSYour Name  * @stats: pointer to pdev deterministic stats
1119*5113495bSYour Name  *
1120*5113495bSYour Name  * return: status
1121*5113495bSYour Name  */
cdp_get_pdev_deter_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_deter_stats * stats)1122*5113495bSYour Name static inline QDF_STATUS cdp_get_pdev_deter_stats(
1123*5113495bSYour Name 				ol_txrx_soc_handle soc,
1124*5113495bSYour Name 				uint8_t pdev_id,
1125*5113495bSYour Name 				struct cdp_pdev_deter_stats *stats)
1126*5113495bSYour Name {
1127*5113495bSYour Name 	if (!soc || !soc->ops) {
1128*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1129*5113495bSYour Name 		QDF_BUG(0);
1130*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1131*5113495bSYour Name 	}
1132*5113495bSYour Name 
1133*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1134*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_pdev_deter_stats)
1135*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1136*5113495bSYour Name 
1137*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_pdev_deter_stats(
1138*5113495bSYour Name 					soc, pdev_id, stats);
1139*5113495bSYour Name }
1140*5113495bSYour Name 
1141*5113495bSYour Name /**
1142*5113495bSYour Name  * cdp_get_peer_deter_stats(): function to get peer deterministic stats
1143*5113495bSYour Name  * @soc: soc handle
1144*5113495bSYour Name  * @vdev_id: id of vdev handle
1145*5113495bSYour Name  * @addr: peer address
1146*5113495bSYour Name  * @stats: pointer to peer telemetry stats
1147*5113495bSYour Name  *
1148*5113495bSYour Name  * return: status
1149*5113495bSYour Name  */
cdp_get_peer_deter_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * addr,struct cdp_peer_deter_stats * stats)1150*5113495bSYour Name static inline QDF_STATUS cdp_get_peer_deter_stats(
1151*5113495bSYour Name 				ol_txrx_soc_handle soc,
1152*5113495bSYour Name 				uint8_t vdev_id,
1153*5113495bSYour Name 				uint8_t *addr,
1154*5113495bSYour Name 				struct cdp_peer_deter_stats *stats)
1155*5113495bSYour Name {
1156*5113495bSYour Name 	if (!soc || !soc->ops) {
1157*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1158*5113495bSYour Name 		QDF_BUG(0);
1159*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1160*5113495bSYour Name 	}
1161*5113495bSYour Name 
1162*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1163*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_peer_deter_stats)
1164*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1165*5113495bSYour Name 
1166*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_peer_deter_stats(
1167*5113495bSYour Name 					soc, vdev_id, addr, stats);
1168*5113495bSYour Name }
1169*5113495bSYour Name 
1170*5113495bSYour Name /**
1171*5113495bSYour Name  * cdp_update_pdev_chan_util_stats(): function to update pdev channel util stats
1172*5113495bSYour Name  * @soc: soc handle
1173*5113495bSYour Name  * @pdev_id: pdev id
1174*5113495bSYour Name  * @ch_util: pointer to pdev ch util stats
1175*5113495bSYour Name  *
1176*5113495bSYour Name  * return: status
1177*5113495bSYour Name  */
cdp_update_pdev_chan_util_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_chan_util_stats * ch_util)1178*5113495bSYour Name static inline QDF_STATUS cdp_update_pdev_chan_util_stats(
1179*5113495bSYour Name 				ol_txrx_soc_handle soc,
1180*5113495bSYour Name 				uint8_t pdev_id,
1181*5113495bSYour Name 				struct cdp_pdev_chan_util_stats *ch_util)
1182*5113495bSYour Name {
1183*5113495bSYour Name 	if (!soc || !soc->ops) {
1184*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1185*5113495bSYour Name 		QDF_BUG(0);
1186*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1187*5113495bSYour Name 	}
1188*5113495bSYour Name 
1189*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1190*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_update_pdev_chan_util_stats)
1191*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1192*5113495bSYour Name 
1193*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_update_pdev_chan_util_stats(
1194*5113495bSYour Name 					soc, pdev_id, ch_util);
1195*5113495bSYour Name }
1196*5113495bSYour Name #endif
1197*5113495bSYour Name 
1198*5113495bSYour Name /**
1199*5113495bSYour Name  * cdp_get_peer_extd_rate_link_stats() - cdp function to get peer
1200*5113495bSYour Name  *				extended rate and link stats
1201*5113495bSYour Name  * @soc: soc handle
1202*5113495bSYour Name  * @mac_addr: mac address
1203*5113495bSYour Name  *
1204*5113495bSYour Name  * Return: status
1205*5113495bSYour Name  */
cdp_get_peer_extd_rate_link_stats(ol_txrx_soc_handle soc,uint8_t * mac_addr)1206*5113495bSYour Name static inline QDF_STATUS cdp_get_peer_extd_rate_link_stats(
1207*5113495bSYour Name 					ol_txrx_soc_handle soc,
1208*5113495bSYour Name 					uint8_t *mac_addr)
1209*5113495bSYour Name {
1210*5113495bSYour Name 	if (!soc || !soc->ops) {
1211*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1212*5113495bSYour Name 		QDF_BUG(0);
1213*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1214*5113495bSYour Name 	}
1215*5113495bSYour Name 
1216*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1217*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_peer_extd_rate_link_stats)
1218*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1219*5113495bSYour Name 
1220*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_peer_extd_rate_link_stats(
1221*5113495bSYour Name 								soc, mac_addr);
1222*5113495bSYour Name }
1223*5113495bSYour Name 
1224*5113495bSYour Name /**
1225*5113495bSYour Name  * cdp_get_pdev_obss_pd_stats() - function to get pdev obss stats
1226*5113495bSYour Name  * @soc: soc handle
1227*5113495bSYour Name  * @pdev_id: pdev id
1228*5113495bSYour Name  * @stats: pointer to pdev obss stats
1229*5113495bSYour Name  * @req: Pointer to CDP TxRx stats
1230*5113495bSYour Name  *
1231*5113495bSYour Name  * Return: status
1232*5113495bSYour Name  */
cdp_get_pdev_obss_pd_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_pdev_obss_pd_stats_tlv * stats,struct cdp_txrx_stats_req * req)1233*5113495bSYour Name static inline QDF_STATUS cdp_get_pdev_obss_pd_stats(
1234*5113495bSYour Name 				ol_txrx_soc_handle soc,
1235*5113495bSYour Name 				uint8_t pdev_id,
1236*5113495bSYour Name 				struct cdp_pdev_obss_pd_stats_tlv *stats,
1237*5113495bSYour Name 				struct cdp_txrx_stats_req *req)
1238*5113495bSYour Name {
1239*5113495bSYour Name 	if (!soc || !soc->ops) {
1240*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1241*5113495bSYour Name 		QDF_BUG(0);
1242*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1243*5113495bSYour Name 	}
1244*5113495bSYour Name 
1245*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1246*5113495bSYour Name 	    !soc->ops->host_stats_ops->get_pdev_obss_stats)
1247*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1248*5113495bSYour Name 
1249*5113495bSYour Name 	return soc->ops->host_stats_ops->get_pdev_obss_stats(
1250*5113495bSYour Name 				     soc, pdev_id, stats, req);
1251*5113495bSYour Name }
1252*5113495bSYour Name 
1253*5113495bSYour Name /**
1254*5113495bSYour Name  * cdp_clear_pdev_obss_pd_stats() - function to clear pdev obss stats
1255*5113495bSYour Name  * @soc: soc handle
1256*5113495bSYour Name  * @pdev_id: pdev id
1257*5113495bSYour Name  * @req: Pointer to CDP TxRx stats request. mac_id will be pre-filled
1258*5113495bSYour Name  *	 and should not be overwritten
1259*5113495bSYour Name  *
1260*5113495bSYour Name  * Return: status
1261*5113495bSYour Name  */
cdp_clear_pdev_obss_pd_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_txrx_stats_req * req)1262*5113495bSYour Name static inline QDF_STATUS cdp_clear_pdev_obss_pd_stats(
1263*5113495bSYour Name 				ol_txrx_soc_handle soc,
1264*5113495bSYour Name 				uint8_t pdev_id, struct cdp_txrx_stats_req *req)
1265*5113495bSYour Name {
1266*5113495bSYour Name 	if (!soc || !soc->ops) {
1267*5113495bSYour Name 		dp_cdp_debug("Invalid Instance");
1268*5113495bSYour Name 		QDF_BUG(0);
1269*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1270*5113495bSYour Name 	}
1271*5113495bSYour Name 
1272*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1273*5113495bSYour Name 	    !soc->ops->host_stats_ops->clear_pdev_obss_pd_stats)
1274*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1275*5113495bSYour Name 
1276*5113495bSYour Name 	return soc->ops->host_stats_ops->clear_pdev_obss_pd_stats(
1277*5113495bSYour Name 					soc, pdev_id, req);
1278*5113495bSYour Name }
1279*5113495bSYour Name 
1280*5113495bSYour Name /*
1281*5113495bSYour Name  * cdp_host_get_interface_stats - Get vdev stats for ath interface
1282*5113495bSYour Name  * @soc: soc handle
1283*5113495bSYour Name  * @vdev_id: vdev_id
1284*5113495bSYour Name  * @buf: buffer to hold vdev_stats
1285*5113495bSYour Name  *
1286*5113495bSYour Name  * return: QDF_STATUS
1287*5113495bSYour Name  */
1288*5113495bSYour Name static inline QDF_STATUS
cdp_host_get_interface_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,struct cdp_vdev_stats * buf)1289*5113495bSYour Name cdp_host_get_interface_stats(ol_txrx_soc_handle soc,
1290*5113495bSYour Name 			     uint8_t vdev_id,
1291*5113495bSYour Name 			     struct cdp_vdev_stats *buf)
1292*5113495bSYour Name {
1293*5113495bSYour Name 	if (!soc || !soc->ops) {
1294*5113495bSYour Name 		QDF_BUG(0);
1295*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1296*5113495bSYour Name 	}
1297*5113495bSYour Name 
1298*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1299*5113495bSYour Name 	    !soc->ops->host_stats_ops->txrx_get_interface_stats)
1300*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1301*5113495bSYour Name 
1302*5113495bSYour Name 	return soc->ops->host_stats_ops->txrx_get_interface_stats(soc,
1303*5113495bSYour Name 								  vdev_id,
1304*5113495bSYour Name 								  buf,
1305*5113495bSYour Name 								  true);
1306*5113495bSYour Name }
1307*5113495bSYour Name 
1308*5113495bSYour Name #ifdef WLAN_FEATURE_TX_LATENCY_STATS
1309*5113495bSYour Name /**
1310*5113495bSYour Name  * cdp_host_tx_latency_stats_config() - config transmit latency statistics for
1311*5113495bSYour Name  * specified vdev
1312*5113495bSYour Name  * @soc: Handle to struct dp_soc
1313*5113495bSYour Name  * @vdev_id: vdev id
1314*5113495bSYour Name  * @config: configuration for transmit latency statistics
1315*5113495bSYour Name  *
1316*5113495bSYour Name  * Return: QDF_STATUS
1317*5113495bSYour Name  */
1318*5113495bSYour Name static inline QDF_STATUS
cdp_host_tx_latency_stats_config(ol_txrx_soc_handle soc,uint8_t vdev_id,struct cdp_tx_latency_config * config)1319*5113495bSYour Name cdp_host_tx_latency_stats_config(ol_txrx_soc_handle soc,
1320*5113495bSYour Name 				 uint8_t vdev_id,
1321*5113495bSYour Name 				 struct cdp_tx_latency_config *config)
1322*5113495bSYour Name {
1323*5113495bSYour Name 	if (!soc || !soc->ops) {
1324*5113495bSYour Name 		QDF_BUG(0);
1325*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1326*5113495bSYour Name 	}
1327*5113495bSYour Name 
1328*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1329*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_latency_stats_config)
1330*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1331*5113495bSYour Name 
1332*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_latency_stats_config(soc,
1333*5113495bSYour Name 								 vdev_id,
1334*5113495bSYour Name 								 config);
1335*5113495bSYour Name }
1336*5113495bSYour Name 
1337*5113495bSYour Name /**
1338*5113495bSYour Name  * cdp_host_tx_latency_stats_fetch() - fetch transmit latency statistics for
1339*5113495bSYour Name  * specified link mac address
1340*5113495bSYour Name  * @soc: Handle to struct dp_soc
1341*5113495bSYour Name  * @vdev_id: vdev id
1342*5113495bSYour Name  * @mac: link mac address of remote peer
1343*5113495bSYour Name  * @latency: buffer to hold per-link transmit latency statistics
1344*5113495bSYour Name  *
1345*5113495bSYour Name  * Return: QDF_STATUS
1346*5113495bSYour Name  */
1347*5113495bSYour Name static inline QDF_STATUS
cdp_host_tx_latency_stats_fetch(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac,struct cdp_tx_latency * latency)1348*5113495bSYour Name cdp_host_tx_latency_stats_fetch(ol_txrx_soc_handle soc,
1349*5113495bSYour Name 				uint8_t vdev_id, uint8_t *mac,
1350*5113495bSYour Name 				struct cdp_tx_latency *latency)
1351*5113495bSYour Name {
1352*5113495bSYour Name 	if (!soc || !soc->ops) {
1353*5113495bSYour Name 		QDF_BUG(0);
1354*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1355*5113495bSYour Name 	}
1356*5113495bSYour Name 
1357*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1358*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_latency_stats_fetch)
1359*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1360*5113495bSYour Name 
1361*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_latency_stats_fetch(soc,
1362*5113495bSYour Name 								vdev_id,
1363*5113495bSYour Name 								mac,
1364*5113495bSYour Name 								latency);
1365*5113495bSYour Name }
1366*5113495bSYour Name 
1367*5113495bSYour Name /**
1368*5113495bSYour Name  * cdp_host_tx_latency_stats_register_cb() - register transmit latency
1369*5113495bSYour Name  * statistics callback
1370*5113495bSYour Name  * @soc: Handle to struct dp_soc
1371*5113495bSYour Name  * @cb: callback function for transmit latency statistics
1372*5113495bSYour Name  *
1373*5113495bSYour Name  * Return: QDF_STATUS
1374*5113495bSYour Name  */
1375*5113495bSYour Name static inline QDF_STATUS
cdp_host_tx_latency_stats_register_cb(ol_txrx_soc_handle soc,cdp_tx_latency_cb cb)1376*5113495bSYour Name cdp_host_tx_latency_stats_register_cb(ol_txrx_soc_handle soc,
1377*5113495bSYour Name 				      cdp_tx_latency_cb cb)
1378*5113495bSYour Name {
1379*5113495bSYour Name 	if (!soc || !soc->ops) {
1380*5113495bSYour Name 		QDF_BUG(0);
1381*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1382*5113495bSYour Name 	}
1383*5113495bSYour Name 
1384*5113495bSYour Name 	if (!soc->ops->host_stats_ops ||
1385*5113495bSYour Name 	    !soc->ops->host_stats_ops->tx_latency_stats_register_cb)
1386*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
1387*5113495bSYour Name 
1388*5113495bSYour Name 	return soc->ops->host_stats_ops->tx_latency_stats_register_cb(soc, cb);
1389*5113495bSYour Name }
1390*5113495bSYour Name #endif
1391*5113495bSYour Name #endif /* _CDP_TXRX_HOST_STATS_H_ */
1392