xref: /wlan-dirver/qca-wifi-host-cmn/dp/inc/cdp_txrx_host_stats.h (revision bea437e2293c3d4fb1b5704fcf633aedac996962)
1 /*
2  * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * @file cdp_txrx_host_stats.h
21  * @brief Define the host data path stats API functions
22  * called by the host control SW and the OS interface module
23  */
24 #ifndef _CDP_TXRX_HOST_STATS_H_
25 #define _CDP_TXRX_HOST_STATS_H_
26 #include "cdp_txrx_handle.h"
27 #include <wmi_unified_api.h>
28 /**
29  * cdp_host_stats_get: cdp call to get host stats
30  * @soc: SOC handle
31  * @vdev_id: vdev id of vdev
32  * @req: Requirement type
33  *
34  * return: 0 for Success, Failure returns error message
35  */
36 static inline int cdp_host_stats_get(ol_txrx_soc_handle soc,
37 		uint8_t vdev_id,
38 		struct ol_txrx_stats_req *req)
39 {
40 	if (!soc || !soc->ops) {
41 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
42 				"%s: Invalid Instance", __func__);
43 		QDF_BUG(0);
44 		return 0;
45 	}
46 
47 	if (!soc->ops->host_stats_ops ||
48 	    !soc->ops->host_stats_ops->txrx_host_stats_get)
49 		return 0;
50 
51 	return soc->ops->host_stats_ops->txrx_host_stats_get(soc, vdev_id, req);
52 }
53 
54 /**
55  * cdp_host_stats_get_ratekbps: cdp call to get rate in kbps
56  * @soc: SOC handle
57  * @preamb: Preamble
58  * @mcs: Modulation and Coding scheme index
59  * @htflag: Flag to identify HT or VHT
60  * @gintval: Gaurd Interval value
61  *
62  * return: 0 for Failure, Returns rate on Success
63  */
64 static inline int cdp_host_stats_get_ratekbps(ol_txrx_soc_handle soc,
65 					      int preamb, int mcs,
66 					      int htflag, int gintval)
67 {
68 	if (!soc || !soc->ops) {
69 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
70 			  "%s: Invalid Instance", __func__);
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
92 cdp_host_stats_clr(ol_txrx_soc_handle soc, uint8_t vdev_id)
93 {
94 	if (!soc || !soc->ops) {
95 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
96 				"%s: Invalid Instance", __func__);
97 		QDF_BUG(0);
98 		return QDF_STATUS_E_FAILURE;
99 	}
100 
101 	if (!soc->ops->host_stats_ops ||
102 	    !soc->ops->host_stats_ops->txrx_host_stats_clr)
103 		return QDF_STATUS_E_FAILURE;
104 
105 	return soc->ops->host_stats_ops->txrx_host_stats_clr(soc, vdev_id);
106 }
107 
108 static inline QDF_STATUS
109 cdp_host_ce_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
110 {
111 	if (!soc || !soc->ops) {
112 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
113 				"%s: Invalid Instance", __func__);
114 		QDF_BUG(0);
115 		return QDF_STATUS_E_FAILURE;
116 	}
117 
118 	if (!soc->ops->host_stats_ops ||
119 	    !soc->ops->host_stats_ops->txrx_host_ce_stats)
120 		return QDF_STATUS_E_FAILURE;
121 
122 	return soc->ops->host_stats_ops->txrx_host_ce_stats(soc, vdev_id);
123 }
124 
125 static inline int cdp_stats_publish
126 	(ol_txrx_soc_handle soc, uint8_t pdev_id,
127 	struct cdp_stats_extd *buf)
128 {
129 	if (!soc || !soc->ops) {
130 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
131 				"%s: Invalid Instance", __func__);
132 		QDF_BUG(0);
133 		return 0;
134 	}
135 
136 	if (!soc->ops->host_stats_ops ||
137 	    !soc->ops->host_stats_ops->txrx_stats_publish)
138 		return 0;
139 
140 	return soc->ops->host_stats_ops->txrx_stats_publish(soc, pdev_id, buf);
141 }
142 
143 /**
144  * @brief Enable enhanced stats functionality.
145  *
146  * @param soc - the soc object
147  * @param pdev_id - id of the physical device object
148  * @return - QDF_STATUS
149  */
150 static inline QDF_STATUS
151 cdp_enable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
152 {
153 	if (!soc || !soc->ops) {
154 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
155 				"%s: Invalid Instance", __func__);
156 		QDF_BUG(0);
157 		return QDF_STATUS_E_FAILURE;
158 	}
159 
160 	if (!soc->ops->host_stats_ops ||
161 	    !soc->ops->host_stats_ops->txrx_enable_enhanced_stats)
162 		return QDF_STATUS_E_FAILURE;
163 
164 	return soc->ops->host_stats_ops->txrx_enable_enhanced_stats
165 			(soc, pdev_id);
166 }
167 
168 /**
169  * @brief Disable enhanced stats functionality.
170  *
171  * @param soc - the soc object
172  * @param pdev_id - id of the physical device object
173  * @return - QDF_STATUS
174  */
175 static inline QDF_STATUS
176 cdp_disable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
177 {
178 	if (!soc || !soc->ops) {
179 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
180 				"%s: Invalid Instance", __func__);
181 		QDF_BUG(0);
182 		return QDF_STATUS_E_FAILURE;
183 	}
184 
185 	if (!soc->ops->host_stats_ops ||
186 	    !soc->ops->host_stats_ops->txrx_disable_enhanced_stats)
187 		return QDF_STATUS_E_FAILURE;
188 
189 	return soc->ops->host_stats_ops->txrx_disable_enhanced_stats
190 			(soc, pdev_id);
191 }
192 
193 static inline QDF_STATUS
194 cdp_tx_print_tso_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
195 {
196 	if (!soc || !soc->ops) {
197 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
198 				"%s: Invalid Instance", __func__);
199 		QDF_BUG(0);
200 		return QDF_STATUS_E_FAILURE;
201 	}
202 
203 	if (!soc->ops->host_stats_ops ||
204 	    !soc->ops->host_stats_ops->tx_print_tso_stats)
205 		return QDF_STATUS_E_FAILURE;
206 
207 	return soc->ops->host_stats_ops->tx_print_tso_stats(soc, vdev_id);
208 }
209 
210 static inline QDF_STATUS
211 cdp_tx_rst_tso_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
212 {
213 	if (!soc || !soc->ops) {
214 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
215 				"%s: Invalid Instance", __func__);
216 		QDF_BUG(0);
217 		return QDF_STATUS_E_FAILURE;
218 	}
219 
220 	if (!soc->ops->host_stats_ops ||
221 	    !soc->ops->host_stats_ops->tx_rst_tso_stats)
222 		return QDF_STATUS_E_FAILURE;
223 
224 	return soc->ops->host_stats_ops->tx_rst_tso_stats(soc, vdev_id);
225 }
226 
227 static inline QDF_STATUS
228 cdp_tx_print_sg_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
229 {
230 	if (!soc || !soc->ops) {
231 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
232 				"%s: Invalid Instance", __func__);
233 		QDF_BUG(0);
234 		return QDF_STATUS_E_FAILURE;
235 	}
236 
237 	if (!soc->ops->host_stats_ops ||
238 	    !soc->ops->host_stats_ops->tx_print_sg_stats)
239 		return QDF_STATUS_E_FAILURE;
240 
241 	return soc->ops->host_stats_ops->tx_print_sg_stats(soc, vdev_id);
242 }
243 
244 static inline QDF_STATUS
245 cdp_tx_rst_sg_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
246 {
247 	if (!soc || !soc->ops) {
248 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
249 				"%s: Invalid Instance", __func__);
250 		QDF_BUG(0);
251 		return QDF_STATUS_E_FAILURE;
252 	}
253 
254 	if (!soc->ops->host_stats_ops ||
255 	    !soc->ops->host_stats_ops->tx_rst_sg_stats)
256 		return QDF_STATUS_E_FAILURE;
257 
258 	return soc->ops->host_stats_ops->tx_rst_sg_stats(soc, vdev_id);
259 }
260 
261 static inline QDF_STATUS
262 cdp_print_rx_cksum_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
263 {
264 	if (!soc || !soc->ops) {
265 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
266 				"%s: Invalid Instance", __func__);
267 		QDF_BUG(0);
268 		return QDF_STATUS_E_FAILURE;
269 	}
270 
271 	if (!soc->ops->host_stats_ops ||
272 	    !soc->ops->host_stats_ops->print_rx_cksum_stats)
273 		return QDF_STATUS_E_FAILURE;
274 
275 	return soc->ops->host_stats_ops->print_rx_cksum_stats(soc, vdev_id);
276 }
277 
278 static inline QDF_STATUS
279 cdp_rst_rx_cksum_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
280 {
281 	if (!soc || !soc->ops) {
282 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
283 				"%s: Invalid Instance", __func__);
284 		QDF_BUG(0);
285 		return QDF_STATUS_E_FAILURE;
286 	}
287 
288 	if (!soc->ops->host_stats_ops ||
289 	    !soc->ops->host_stats_ops->rst_rx_cksum_stats)
290 		return QDF_STATUS_E_FAILURE;
291 
292 	return soc->ops->host_stats_ops->rst_rx_cksum_stats(soc, vdev_id);
293 }
294 
295 static inline QDF_STATUS
296 cdp_host_me_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
297 {
298 	if (!soc || !soc->ops) {
299 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
300 				"%s: Invalid Instance", __func__);
301 		QDF_BUG(0);
302 		return QDF_STATUS_E_FAILURE;
303 	}
304 
305 	if (!soc->ops->host_stats_ops ||
306 	    !soc->ops->host_stats_ops->txrx_host_me_stats)
307 		return QDF_STATUS_E_FAILURE;
308 
309 	return soc->ops->host_stats_ops->txrx_host_me_stats(soc, vdev_id);
310 }
311 
312 /**
313  * cdp_per_peer_stats(): function to print per peer REO Queue stats
314  * @soc: soc handle
315  * @pdev: physical device
316  * @addr: peer address
317  *
318  * return: status
319  */
320 static inline QDF_STATUS cdp_per_peer_stats(ol_txrx_soc_handle soc,
321 					    uint8_t *addr)
322 {
323 	if (!soc || !soc->ops) {
324 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
325 			  "%s: Invalid Instance", __func__);
326 		QDF_BUG(0);
327 		return QDF_STATUS_E_FAILURE;
328 	}
329 
330 	if (!soc->ops->host_stats_ops ||
331 	    !soc->ops->host_stats_ops->txrx_per_peer_stats)
332 		return QDF_STATUS_E_FAILURE;
333 
334 	return soc->ops->host_stats_ops->txrx_per_peer_stats(soc, addr);
335 }
336 
337 static inline int cdp_host_msdu_ttl_stats(ol_txrx_soc_handle soc,
338 	uint8_t vdev_id,
339 	struct ol_txrx_stats_req *req)
340 {
341 	if (!soc || !soc->ops) {
342 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
343 				"%s: Invalid Instance", __func__);
344 		QDF_BUG(0);
345 		return 0;
346 	}
347 
348 	if (!soc->ops->host_stats_ops ||
349 	    !soc->ops->host_stats_ops->txrx_host_msdu_ttl_stats)
350 		return 0;
351 
352 	return soc->ops->host_stats_ops->txrx_host_msdu_ttl_stats
353 			(soc, vdev_id, req);
354 }
355 
356 static inline QDF_STATUS cdp_update_peer_stats(ol_txrx_soc_handle soc,
357 					       uint8_t vdev_id, uint8_t *mac,
358 					       void *stats,
359 					       uint32_t last_tx_rate_mcs,
360 					       uint32_t stats_id)
361 {
362 	if (!soc || !soc->ops) {
363 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
364 				"%s: Invalid Instance", __func__);
365 		QDF_BUG(0);
366 		return QDF_STATUS_E_FAILURE;
367 	}
368 
369 	if (!soc->ops->host_stats_ops ||
370 	    !soc->ops->host_stats_ops->txrx_update_peer_stats)
371 		return QDF_STATUS_E_FAILURE;
372 
373 	return soc->ops->host_stats_ops->txrx_update_peer_stats
374 			(soc, vdev_id, mac, stats, last_tx_rate_mcs, stats_id);
375 }
376 
377 static inline QDF_STATUS cdp_get_dp_fw_peer_stats(ol_txrx_soc_handle soc,
378 						  uint8_t pdev_id,
379 						  uint8_t *mac, uint32_t caps,
380 						  uint32_t copy_stats)
381 {
382 	if (!soc || !soc->ops) {
383 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
384 				"%s: Invalid Instance", __func__);
385 		QDF_BUG(0);
386 		return QDF_STATUS_E_FAILURE;
387 	}
388 
389 	if (!soc->ops->host_stats_ops ||
390 	    !soc->ops->host_stats_ops->get_fw_peer_stats)
391 		return QDF_STATUS_E_FAILURE;
392 
393 	return soc->ops->host_stats_ops->get_fw_peer_stats
394 			(soc, pdev_id, mac, caps, copy_stats);
395 }
396 
397 static inline QDF_STATUS cdp_get_dp_htt_stats(ol_txrx_soc_handle soc,
398 					      uint8_t pdev_id,
399 					      void *data, uint32_t data_len)
400 {
401 	if (!soc || !soc->ops) {
402 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
403 			  "%s: Invalid Instance", __func__);
404 		QDF_BUG(0);
405 		return QDF_STATUS_E_FAILURE;
406 	}
407 
408 	if (!soc->ops->host_stats_ops ||
409 	    !soc->ops->host_stats_ops->get_htt_stats)
410 		return QDF_STATUS_E_FAILURE;
411 
412 	return soc->ops->host_stats_ops->get_htt_stats(soc, pdev_id, data,
413 						       data_len);
414 }
415 
416 /**
417  * @brief Update pdev host stats received from firmware
418  * (wmi_host_pdev_stats and wmi_host_pdev_ext_stats) into dp
419  *
420  * @param soc - soc handle
421  * @param pdev_id - id of the physical device object
422  * @param data - pdev stats
423  * @return - QDF_STATUS
424  */
425 static inline QDF_STATUS
426 cdp_update_pdev_host_stats(ol_txrx_soc_handle soc,
427 			   uint8_t pdev_id,
428 			   void *data,
429 			   uint16_t stats_id)
430 {
431 	if (!soc || !soc->ops) {
432 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
433 			  "%s: Invalid Instance", __func__);
434 		QDF_BUG(0);
435 		return QDF_STATUS_E_FAILURE;
436 	}
437 
438 	if (!soc->ops->host_stats_ops ||
439 	    !soc->ops->host_stats_ops->txrx_update_pdev_stats)
440 		return QDF_STATUS_E_FAILURE;
441 
442 	return soc->ops->host_stats_ops->txrx_update_pdev_stats(soc, pdev_id,
443 								data,
444 								stats_id);
445 }
446 
447 /**
448  * @brief Update vdev host stats
449  *
450  * @param soc	   - soc handle
451  * @param vdev_id  - id of the virtual device object
452  * @param data     - pdev stats
453  * @param stats_id - type of stats
454  *
455  * @return - QDF_STATUS
456  */
457 static inline QDF_STATUS
458 cdp_update_vdev_host_stats(ol_txrx_soc_handle soc,
459 			   uint8_t vdev_id,
460 			   void *data,
461 			   uint16_t stats_id)
462 {
463 	if (!soc || !soc->ops) {
464 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
465 			  "%s: Invalid Instance", __func__);
466 		QDF_BUG(0);
467 		return QDF_STATUS_E_FAILURE;
468 	}
469 
470 	if (!soc->ops->host_stats_ops ||
471 	    !soc->ops->host_stats_ops->txrx_update_vdev_stats)
472 		return QDF_STATUS_E_FAILURE;
473 
474 	return soc->ops->host_stats_ops->txrx_update_vdev_stats(soc, vdev_id,
475 								data,
476 								stats_id);
477 }
478 
479 /**
480  * @brief Call to get peer stats
481  *
482  * @param soc - soc handle
483  * @param vdev_id - vdev_id of vdev object
484  * @param peer_mac - mac address of the peer
485  * @return - struct cdp_peer_stats
486  */
487 static inline QDF_STATUS
488 cdp_host_get_peer_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
489 			uint8_t *peer_mac,
490 			struct cdp_peer_stats *peer_stats)
491 {
492 	if (!soc || !soc->ops) {
493 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
494 			  "%s: Invalid Instance", __func__);
495 		QDF_BUG(0);
496 		return QDF_STATUS_E_FAILURE;
497 	}
498 
499 	if (!soc->ops->host_stats_ops ||
500 	    !soc->ops->host_stats_ops->txrx_get_peer_stats)
501 		return QDF_STATUS_E_FAILURE;
502 
503 	return soc->ops->host_stats_ops->txrx_get_peer_stats(soc, vdev_id,
504 							     peer_mac,
505 							     peer_stats);
506 }
507 
508 /**
509  * @brief Call to reset ald stats
510  *
511  * @param soc - soc handle
512  * @param vdev_id - vdev_id of vdev object
513  * @param peer_mac - mac address of the peer
514  * @return - void
515  */
516 static inline QDF_STATUS
517 cdp_host_reset_peer_ald_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
518 			      uint8_t *peer_mac)
519 {
520 	if (!soc || !soc->ops) {
521 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
522 			  "%s: Invalid Instance", __func__);
523 		QDF_BUG(0);
524 		return QDF_STATUS_E_FAILURE;
525 	}
526 
527 	if (!soc->ops->host_stats_ops ||
528 	    !soc->ops->host_stats_ops->txrx_reset_peer_ald_stats)
529 		return QDF_STATUS_E_FAILURE;
530 
531 	return soc->ops->host_stats_ops->txrx_reset_peer_ald_stats(soc,
532 							    vdev_id,
533 							    peer_mac);
534 }
535 
536 /**
537  * @brief Call to reset peer stats
538  *
539  * @param soc - soc handle
540  * @param vdev_id - vdev_id of vdev object
541  * @param peer_mac - mac address of the peer
542  * @return - QDF_STATUS
543  */
544 static inline QDF_STATUS
545 cdp_host_reset_peer_stats(ol_txrx_soc_handle soc,
546 			  uint8_t vdev_id, uint8_t *peer_mac)
547 {
548 	if (!soc || !soc->ops) {
549 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
550 			  "%s: Invalid Instance", __func__);
551 		QDF_BUG(0);
552 		return QDF_STATUS_E_FAILURE;
553 	}
554 
555 	if (!soc->ops->host_stats_ops ||
556 	    !soc->ops->host_stats_ops->txrx_reset_peer_stats)
557 		return QDF_STATUS_E_FAILURE;
558 
559 	return soc->ops->host_stats_ops->txrx_reset_peer_stats(soc,
560 							vdev_id,
561 							peer_mac);
562 }
563 
564 /**
565  * @brief Call to get vdev stats
566  *
567  * @param soc - dp soc object
568  * @param vdev_id - id of dp vdev object
569  * @param buf - buffer
570  * @return - int
571  */
572 static inline int
573 cdp_host_get_vdev_stats(ol_txrx_soc_handle soc,
574 			uint8_t vdev_id,
575 			struct cdp_vdev_stats *buf,
576 			bool is_aggregate)
577 {
578 	if (!soc || !soc->ops) {
579 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
580 			  "%s: Invalid Instance", __func__);
581 		QDF_BUG(0);
582 		return 0;
583 	}
584 
585 	if (!soc->ops->host_stats_ops ||
586 	    !soc->ops->host_stats_ops->txrx_get_vdev_stats)
587 		return 0;
588 
589 	return soc->ops->host_stats_ops->txrx_get_vdev_stats(soc, vdev_id,
590 							     buf,
591 							     is_aggregate);
592 }
593 
594 /**
595  * @brief Call to update vdev stats received from firmware
596  * (wmi_host_vdev_stats and wmi_host_vdev_extd_stats) into dp
597  *
598  * @param data - stats data to be updated
599  * @param size - size of stats data
600  * @param stats_id - stats id
601  * @return - int
602  */
603 static inline int
604 cdp_update_host_vdev_stats(ol_txrx_soc_handle soc,
605 			   void *data,
606 			   uint32_t size,
607 			   uint32_t stats_id)
608 {
609 	if (!soc || !soc->ops) {
610 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
611 			  "%s: Invalid Instance", __func__);
612 		QDF_BUG(0);
613 		return 0;
614 	}
615 
616 	if (!soc->ops->host_stats_ops ||
617 	    !soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats)
618 		return 0;
619 
620 	return soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats
621 								(soc,
622 								 data,
623 								 size,
624 								 stats_id);
625 }
626 
627 /**
628  * @brief Call to get vdev extd stats
629  *
630  * @param soc - soc handle
631  * @param vdev_id - id of dp vdev object
632  * @param buf - buffer
633  * @return - int
634  */
635 static inline int
636 cdp_get_vdev_extd_stats(ol_txrx_soc_handle soc,
637 			uint8_t vdev_id,
638 			wmi_host_vdev_extd_stats *buf)
639 {
640 	if (!soc || !soc->ops) {
641 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
642 			  "%s: Invalid Instance", __func__);
643 		QDF_BUG(0);
644 		return 0;
645 	}
646 
647 	if (!soc->ops->host_stats_ops ||
648 	    !soc->ops->host_stats_ops->txrx_get_vdev_extd_stats)
649 		return 0;
650 
651 	return soc->ops->host_stats_ops->txrx_get_vdev_extd_stats(soc, vdev_id,
652 								  buf);
653 }
654 
655 /**
656  * @brief Call to get cdp_pdev_stats
657  *
658  * @param soc - soc handle
659  * @param pdev_id - id of dp pdev object
660  * @param buf - buffer to hold cdp_pdev_stats
661  * @return - success/failure
662  */
663 static inline int
664 cdp_host_get_pdev_stats(ol_txrx_soc_handle soc,
665 			uint8_t pdev_id, struct cdp_pdev_stats *buf)
666 {
667 	if (!soc || !soc->ops) {
668 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
669 			  "%s: Invalid Instance", __func__);
670 		QDF_BUG(0);
671 		return 0;
672 	}
673 
674 	if (!soc->ops->host_stats_ops ||
675 	    !soc->ops->host_stats_ops->txrx_get_pdev_stats)
676 		return 0;
677 
678 	return soc->ops->host_stats_ops->txrx_get_pdev_stats(soc, pdev_id, buf);
679 }
680 
681 /**
682  * @brief Call to get radio stats
683  *
684  * @param soc - soc handle
685  * @param pdev_id - id of dp pdev object
686  * @param scn_stats_user - stats buffer
687  * @return - int
688  */
689 static inline int
690 cdp_host_get_radio_stats(ol_txrx_soc_handle soc,
691 			 uint8_t pdev_id,
692 			 void *buf)
693 {
694 	if (!soc || !soc->ops) {
695 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
696 			  "%s: Invalid Instance", __func__);
697 		QDF_BUG(0);
698 		return 0;
699 	}
700 
701 	if (!soc->ops->host_stats_ops ||
702 	    !soc->ops->host_stats_ops->txrx_get_radio_stats)
703 		return 0;
704 
705 	return soc->ops->host_stats_ops->txrx_get_radio_stats(soc, pdev_id,
706 							      buf);
707 }
708 
709 /**
710  * @brief confgure rate stats at soc
711  *
712  * @param soc - opaque soc handle
713  * @param val - capabilities
714  * @return - QDF_STATUS
715  */
716 static inline QDF_STATUS
717 cdp_soc_configure_rate_stats(ol_txrx_soc_handle soc, uint8_t val)
718 {
719 	if (!soc || !soc->ops) {
720 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
721 			  "%s: Invalid Instance", __func__);
722 		QDF_BUG(0);
723 		return QDF_STATUS_E_FAILURE;
724 	}
725 
726 	if (!soc->ops->host_stats_ops ||
727 	    !soc->ops->host_stats_ops->configure_rate_stats)
728 		return QDF_STATUS_E_FAILURE;
729 
730 	return soc->ops->host_stats_ops->configure_rate_stats(soc, val);
731 }
732 
733 #endif /* _CDP_TXRX_HOST_STATS_H_ */
734