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