cdp_txrx_host_stats.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. /*
  2. * Copyright (c) 2016-2020 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. * @file cdp_txrx_host_stats.h
  20. * @brief Define the host data path stats API functions
  21. * called by the host control SW and the OS interface module
  22. */
  23. #ifndef _CDP_TXRX_HOST_STATS_H_
  24. #define _CDP_TXRX_HOST_STATS_H_
  25. #include "cdp_txrx_handle.h"
  26. #include <wmi_unified_api.h>
  27. /**
  28. * cdp_host_stats_get: cdp call to get host stats
  29. * @soc: SOC handle
  30. * @vdev_id: vdev id of vdev
  31. * @req: Requirement type
  32. *
  33. * return: 0 for Success, Failure returns error message
  34. */
  35. static inline int cdp_host_stats_get(ol_txrx_soc_handle soc,
  36. uint8_t vdev_id,
  37. struct ol_txrx_stats_req *req)
  38. {
  39. if (!soc || !soc->ops) {
  40. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  41. "%s: Invalid Instance", __func__);
  42. QDF_BUG(0);
  43. return 0;
  44. }
  45. if (!soc->ops->host_stats_ops ||
  46. !soc->ops->host_stats_ops->txrx_host_stats_get)
  47. return 0;
  48. return soc->ops->host_stats_ops->txrx_host_stats_get(soc, vdev_id, req);
  49. }
  50. /**
  51. * cdp_host_stats_get_ratekbps: cdp call to get rate in kbps
  52. * @soc: SOC handle
  53. * @preamb: Preamble
  54. * @mcs: Modulation and Coding scheme index
  55. * @htflag: Flag to identify HT or VHT
  56. * @gintval: Gaurd Interval value
  57. *
  58. * return: 0 for Failure, Returns rate on Success
  59. */
  60. static inline int cdp_host_stats_get_ratekbps(ol_txrx_soc_handle soc,
  61. int preamb, int mcs,
  62. int htflag, int gintval)
  63. {
  64. if (!soc || !soc->ops) {
  65. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  66. "%s: Invalid Instance", __func__);
  67. QDF_BUG(0);
  68. return 0;
  69. }
  70. if (!soc->ops->host_stats_ops ||
  71. !soc->ops->host_stats_ops->txrx_get_ratekbps)
  72. return 0;
  73. return soc->ops->host_stats_ops->txrx_get_ratekbps(preamb,
  74. mcs, htflag,
  75. gintval);
  76. }
  77. /**
  78. * cdp_host_stats_clr: cdp call to clear host stats
  79. * @soc: soc handle
  80. * @vdev_id: vdev handle id
  81. *
  82. * return: QDF_STATUS
  83. */
  84. static inline QDF_STATUS
  85. cdp_host_stats_clr(ol_txrx_soc_handle soc, uint8_t vdev_id)
  86. {
  87. if (!soc || !soc->ops) {
  88. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  89. "%s: Invalid Instance", __func__);
  90. QDF_BUG(0);
  91. return QDF_STATUS_E_FAILURE;
  92. }
  93. if (!soc->ops->host_stats_ops ||
  94. !soc->ops->host_stats_ops->txrx_host_stats_clr)
  95. return QDF_STATUS_E_FAILURE;
  96. return soc->ops->host_stats_ops->txrx_host_stats_clr(soc, vdev_id);
  97. }
  98. static inline QDF_STATUS
  99. cdp_host_ce_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  100. {
  101. if (!soc || !soc->ops) {
  102. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  103. "%s: Invalid Instance", __func__);
  104. QDF_BUG(0);
  105. return QDF_STATUS_E_FAILURE;
  106. }
  107. if (!soc->ops->host_stats_ops ||
  108. !soc->ops->host_stats_ops->txrx_host_ce_stats)
  109. return QDF_STATUS_E_FAILURE;
  110. return soc->ops->host_stats_ops->txrx_host_ce_stats(soc, vdev_id);
  111. }
  112. static inline int cdp_stats_publish
  113. (ol_txrx_soc_handle soc, uint8_t pdev_id,
  114. struct cdp_stats_extd *buf)
  115. {
  116. if (!soc || !soc->ops) {
  117. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  118. "%s: Invalid Instance", __func__);
  119. QDF_BUG(0);
  120. return 0;
  121. }
  122. if (!soc->ops->host_stats_ops ||
  123. !soc->ops->host_stats_ops->txrx_stats_publish)
  124. return 0;
  125. return soc->ops->host_stats_ops->txrx_stats_publish(soc, pdev_id, buf);
  126. }
  127. /**
  128. * @brief Enable enhanced stats functionality.
  129. *
  130. * @param soc - the soc object
  131. * @param pdev_id - id of the physical device object
  132. * @return - QDF_STATUS
  133. */
  134. static inline QDF_STATUS
  135. cdp_enable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
  136. {
  137. if (!soc || !soc->ops) {
  138. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  139. "%s: Invalid Instance", __func__);
  140. QDF_BUG(0);
  141. return QDF_STATUS_E_FAILURE;
  142. }
  143. if (!soc->ops->host_stats_ops ||
  144. !soc->ops->host_stats_ops->txrx_enable_enhanced_stats)
  145. return QDF_STATUS_E_FAILURE;
  146. return soc->ops->host_stats_ops->txrx_enable_enhanced_stats
  147. (soc, pdev_id);
  148. }
  149. /**
  150. * @brief Disable enhanced stats functionality.
  151. *
  152. * @param soc - the soc object
  153. * @param pdev_id - id of the physical device object
  154. * @return - QDF_STATUS
  155. */
  156. static inline QDF_STATUS
  157. cdp_disable_enhanced_stats(ol_txrx_soc_handle soc, uint8_t pdev_id)
  158. {
  159. if (!soc || !soc->ops) {
  160. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  161. "%s: Invalid Instance", __func__);
  162. QDF_BUG(0);
  163. return QDF_STATUS_E_FAILURE;
  164. }
  165. if (!soc->ops->host_stats_ops ||
  166. !soc->ops->host_stats_ops->txrx_disable_enhanced_stats)
  167. return QDF_STATUS_E_FAILURE;
  168. return soc->ops->host_stats_ops->txrx_disable_enhanced_stats
  169. (soc, pdev_id);
  170. }
  171. static inline QDF_STATUS
  172. cdp_tx_print_tso_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  173. {
  174. if (!soc || !soc->ops) {
  175. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  176. "%s: Invalid Instance", __func__);
  177. QDF_BUG(0);
  178. return QDF_STATUS_E_FAILURE;
  179. }
  180. if (!soc->ops->host_stats_ops ||
  181. !soc->ops->host_stats_ops->tx_print_tso_stats)
  182. return QDF_STATUS_E_FAILURE;
  183. return soc->ops->host_stats_ops->tx_print_tso_stats(soc, vdev_id);
  184. }
  185. static inline QDF_STATUS
  186. cdp_tx_rst_tso_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  187. {
  188. if (!soc || !soc->ops) {
  189. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  190. "%s: Invalid Instance", __func__);
  191. QDF_BUG(0);
  192. return QDF_STATUS_E_FAILURE;
  193. }
  194. if (!soc->ops->host_stats_ops ||
  195. !soc->ops->host_stats_ops->tx_rst_tso_stats)
  196. return QDF_STATUS_E_FAILURE;
  197. return soc->ops->host_stats_ops->tx_rst_tso_stats(soc, vdev_id);
  198. }
  199. static inline QDF_STATUS
  200. cdp_tx_print_sg_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  201. {
  202. if (!soc || !soc->ops) {
  203. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  204. "%s: Invalid Instance", __func__);
  205. QDF_BUG(0);
  206. return QDF_STATUS_E_FAILURE;
  207. }
  208. if (!soc->ops->host_stats_ops ||
  209. !soc->ops->host_stats_ops->tx_print_sg_stats)
  210. return QDF_STATUS_E_FAILURE;
  211. return soc->ops->host_stats_ops->tx_print_sg_stats(soc, vdev_id);
  212. }
  213. static inline QDF_STATUS
  214. cdp_tx_rst_sg_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  215. {
  216. if (!soc || !soc->ops) {
  217. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  218. "%s: Invalid Instance", __func__);
  219. QDF_BUG(0);
  220. return QDF_STATUS_E_FAILURE;
  221. }
  222. if (!soc->ops->host_stats_ops ||
  223. !soc->ops->host_stats_ops->tx_rst_sg_stats)
  224. return QDF_STATUS_E_FAILURE;
  225. return soc->ops->host_stats_ops->tx_rst_sg_stats(soc, vdev_id);
  226. }
  227. static inline QDF_STATUS
  228. cdp_print_rx_cksum_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. if (!soc->ops->host_stats_ops ||
  237. !soc->ops->host_stats_ops->print_rx_cksum_stats)
  238. return QDF_STATUS_E_FAILURE;
  239. return soc->ops->host_stats_ops->print_rx_cksum_stats(soc, vdev_id);
  240. }
  241. static inline QDF_STATUS
  242. cdp_rst_rx_cksum_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  243. {
  244. if (!soc || !soc->ops) {
  245. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  246. "%s: Invalid Instance", __func__);
  247. QDF_BUG(0);
  248. return QDF_STATUS_E_FAILURE;
  249. }
  250. if (!soc->ops->host_stats_ops ||
  251. !soc->ops->host_stats_ops->rst_rx_cksum_stats)
  252. return QDF_STATUS_E_FAILURE;
  253. return soc->ops->host_stats_ops->rst_rx_cksum_stats(soc, vdev_id);
  254. }
  255. static inline QDF_STATUS
  256. cdp_host_me_stats(ol_txrx_soc_handle soc, uint8_t vdev_id)
  257. {
  258. if (!soc || !soc->ops) {
  259. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  260. "%s: Invalid Instance", __func__);
  261. QDF_BUG(0);
  262. return QDF_STATUS_E_FAILURE;
  263. }
  264. if (!soc->ops->host_stats_ops ||
  265. !soc->ops->host_stats_ops->txrx_host_me_stats)
  266. return QDF_STATUS_E_FAILURE;
  267. return soc->ops->host_stats_ops->txrx_host_me_stats(soc, vdev_id);
  268. }
  269. /**
  270. * cdp_per_peer_stats(): function to print per peer REO Queue stats
  271. * @soc: soc handle
  272. * @pdev: physical device
  273. * @addr: peer address
  274. *
  275. * return: status
  276. */
  277. static inline QDF_STATUS cdp_per_peer_stats(ol_txrx_soc_handle soc,
  278. uint8_t *addr)
  279. {
  280. if (!soc || !soc->ops) {
  281. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  282. "%s: Invalid Instance", __func__);
  283. QDF_BUG(0);
  284. return QDF_STATUS_E_FAILURE;
  285. }
  286. if (!soc->ops->host_stats_ops ||
  287. !soc->ops->host_stats_ops->txrx_per_peer_stats)
  288. return QDF_STATUS_E_FAILURE;
  289. return soc->ops->host_stats_ops->txrx_per_peer_stats(soc, addr);
  290. }
  291. static inline int cdp_host_msdu_ttl_stats(ol_txrx_soc_handle soc,
  292. uint8_t vdev_id,
  293. struct ol_txrx_stats_req *req)
  294. {
  295. if (!soc || !soc->ops) {
  296. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  297. "%s: Invalid Instance", __func__);
  298. QDF_BUG(0);
  299. return 0;
  300. }
  301. if (!soc->ops->host_stats_ops ||
  302. !soc->ops->host_stats_ops->txrx_host_msdu_ttl_stats)
  303. return 0;
  304. return soc->ops->host_stats_ops->txrx_host_msdu_ttl_stats
  305. (soc, vdev_id, req);
  306. }
  307. static inline QDF_STATUS cdp_update_peer_stats(ol_txrx_soc_handle soc,
  308. uint8_t vdev_id, uint8_t *mac,
  309. void *stats,
  310. uint32_t last_tx_rate_mcs,
  311. uint32_t stats_id)
  312. {
  313. if (!soc || !soc->ops) {
  314. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  315. "%s: Invalid Instance", __func__);
  316. QDF_BUG(0);
  317. return QDF_STATUS_E_FAILURE;
  318. }
  319. if (!soc->ops->host_stats_ops ||
  320. !soc->ops->host_stats_ops->txrx_update_peer_stats)
  321. return QDF_STATUS_E_FAILURE;
  322. return soc->ops->host_stats_ops->txrx_update_peer_stats
  323. (soc, vdev_id, mac, stats, last_tx_rate_mcs, stats_id);
  324. }
  325. static inline QDF_STATUS cdp_get_dp_fw_peer_stats(ol_txrx_soc_handle soc,
  326. uint8_t pdev_id,
  327. uint8_t *mac, uint32_t caps,
  328. uint32_t copy_stats)
  329. {
  330. if (!soc || !soc->ops) {
  331. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  332. "%s: Invalid Instance", __func__);
  333. QDF_BUG(0);
  334. return QDF_STATUS_E_FAILURE;
  335. }
  336. if (!soc->ops->host_stats_ops ||
  337. !soc->ops->host_stats_ops->get_fw_peer_stats)
  338. return QDF_STATUS_E_FAILURE;
  339. return soc->ops->host_stats_ops->get_fw_peer_stats
  340. (soc, pdev_id, mac, caps, copy_stats);
  341. }
  342. static inline QDF_STATUS cdp_get_dp_htt_stats(ol_txrx_soc_handle soc,
  343. uint8_t pdev_id,
  344. void *data, uint32_t data_len)
  345. {
  346. if (!soc || !soc->ops) {
  347. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  348. "%s: Invalid Instance", __func__);
  349. QDF_BUG(0);
  350. return QDF_STATUS_E_FAILURE;
  351. }
  352. if (!soc->ops->host_stats_ops ||
  353. !soc->ops->host_stats_ops->get_htt_stats)
  354. return QDF_STATUS_E_FAILURE;
  355. return soc->ops->host_stats_ops->get_htt_stats(soc, pdev_id, data,
  356. data_len);
  357. }
  358. /**
  359. * @brief Update pdev host stats received from firmware
  360. * (wmi_host_pdev_stats and wmi_host_pdev_ext_stats) into dp
  361. *
  362. * @param soc - soc handle
  363. * @param pdev_id - id of the physical device object
  364. * @param data - pdev stats
  365. * @return - QDF_STATUS
  366. */
  367. static inline QDF_STATUS
  368. cdp_update_pdev_host_stats(ol_txrx_soc_handle soc,
  369. uint8_t pdev_id,
  370. void *data,
  371. uint16_t stats_id)
  372. {
  373. if (!soc || !soc->ops) {
  374. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  375. "%s: Invalid Instance", __func__);
  376. QDF_BUG(0);
  377. return QDF_STATUS_E_FAILURE;
  378. }
  379. if (!soc->ops->host_stats_ops ||
  380. !soc->ops->host_stats_ops->txrx_update_pdev_stats)
  381. return QDF_STATUS_E_FAILURE;
  382. return soc->ops->host_stats_ops->txrx_update_pdev_stats(soc, pdev_id,
  383. data,
  384. stats_id);
  385. }
  386. /**
  387. * @brief Update vdev host stats
  388. *
  389. * @soc: soc handle
  390. * @vdev_id: id of the virtual device object
  391. * @data: pdev stats
  392. * @stats_id: type of stats
  393. *
  394. * Return: QDF_STATUS
  395. */
  396. static inline QDF_STATUS
  397. cdp_update_vdev_host_stats(ol_txrx_soc_handle soc,
  398. uint8_t vdev_id,
  399. void *data,
  400. uint16_t stats_id)
  401. {
  402. if (!soc || !soc->ops) {
  403. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  404. "%s: Invalid Instance", __func__);
  405. QDF_BUG(0);
  406. return QDF_STATUS_E_FAILURE;
  407. }
  408. if (!soc->ops->host_stats_ops ||
  409. !soc->ops->host_stats_ops->txrx_update_vdev_stats)
  410. return QDF_STATUS_E_FAILURE;
  411. return soc->ops->host_stats_ops->txrx_update_vdev_stats(soc, vdev_id,
  412. data,
  413. stats_id);
  414. }
  415. /**
  416. * @brief Call to get peer stats
  417. *
  418. * @param soc - soc handle
  419. * @param vdev_id - vdev_id of vdev object
  420. * @param peer_mac - mac address of the peer
  421. * @return - struct cdp_peer_stats
  422. */
  423. static inline QDF_STATUS
  424. cdp_host_get_peer_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
  425. uint8_t *peer_mac,
  426. struct cdp_peer_stats *peer_stats)
  427. {
  428. if (!soc || !soc->ops) {
  429. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  430. "%s: Invalid Instance", __func__);
  431. QDF_BUG(0);
  432. return QDF_STATUS_E_FAILURE;
  433. }
  434. if (!soc->ops->host_stats_ops ||
  435. !soc->ops->host_stats_ops->txrx_get_peer_stats)
  436. return QDF_STATUS_E_FAILURE;
  437. return soc->ops->host_stats_ops->txrx_get_peer_stats(soc, vdev_id,
  438. peer_mac,
  439. peer_stats);
  440. }
  441. /**
  442. * @brief Call to reset ald stats
  443. *
  444. * @param soc - soc handle
  445. * @param vdev_id - vdev_id of vdev object
  446. * @param peer_mac - mac address of the peer
  447. * @return - void
  448. */
  449. static inline QDF_STATUS
  450. cdp_host_reset_peer_ald_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
  451. uint8_t *peer_mac)
  452. {
  453. if (!soc || !soc->ops) {
  454. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  455. "%s: Invalid Instance", __func__);
  456. QDF_BUG(0);
  457. return QDF_STATUS_E_FAILURE;
  458. }
  459. if (!soc->ops->host_stats_ops ||
  460. !soc->ops->host_stats_ops->txrx_reset_peer_ald_stats)
  461. return QDF_STATUS_E_FAILURE;
  462. return soc->ops->host_stats_ops->txrx_reset_peer_ald_stats(soc,
  463. vdev_id,
  464. peer_mac);
  465. }
  466. /**
  467. * @brief Call to reset peer stats
  468. *
  469. * @param soc - soc handle
  470. * @param vdev_id - vdev_id of vdev object
  471. * @param peer_mac - mac address of the peer
  472. * @return - QDF_STATUS
  473. */
  474. static inline QDF_STATUS
  475. cdp_host_reset_peer_stats(ol_txrx_soc_handle soc,
  476. uint8_t vdev_id, uint8_t *peer_mac)
  477. {
  478. if (!soc || !soc->ops) {
  479. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  480. "%s: Invalid Instance", __func__);
  481. QDF_BUG(0);
  482. return QDF_STATUS_E_FAILURE;
  483. }
  484. if (!soc->ops->host_stats_ops ||
  485. !soc->ops->host_stats_ops->txrx_reset_peer_stats)
  486. return QDF_STATUS_E_FAILURE;
  487. return soc->ops->host_stats_ops->txrx_reset_peer_stats(soc,
  488. vdev_id,
  489. peer_mac);
  490. }
  491. /**
  492. * @brief Call to get vdev stats
  493. *
  494. * @param soc - dp soc object
  495. * @param vdev_id - id of dp vdev object
  496. * @param buf - buffer
  497. * @return - int
  498. */
  499. static inline int
  500. cdp_host_get_vdev_stats(ol_txrx_soc_handle soc,
  501. uint8_t vdev_id,
  502. struct cdp_vdev_stats *buf,
  503. bool is_aggregate)
  504. {
  505. if (!soc || !soc->ops) {
  506. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  507. "%s: Invalid Instance", __func__);
  508. QDF_BUG(0);
  509. return 0;
  510. }
  511. if (!soc->ops->host_stats_ops ||
  512. !soc->ops->host_stats_ops->txrx_get_vdev_stats)
  513. return 0;
  514. return soc->ops->host_stats_ops->txrx_get_vdev_stats(soc, vdev_id,
  515. buf,
  516. is_aggregate);
  517. }
  518. /**
  519. * @brief Call to update vdev stats received from firmware
  520. * (wmi_host_vdev_stats and wmi_host_vdev_extd_stats) into dp
  521. *
  522. * @param data - stats data to be updated
  523. * @param size - size of stats data
  524. * @param stats_id - stats id
  525. * @return - int
  526. */
  527. static inline int
  528. cdp_update_host_vdev_stats(ol_txrx_soc_handle soc,
  529. void *data,
  530. uint32_t size,
  531. uint32_t stats_id)
  532. {
  533. if (!soc || !soc->ops) {
  534. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  535. "%s: Invalid Instance", __func__);
  536. QDF_BUG(0);
  537. return 0;
  538. }
  539. if (!soc->ops->host_stats_ops ||
  540. !soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats)
  541. return 0;
  542. return soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats
  543. (soc,
  544. data,
  545. size,
  546. stats_id);
  547. }
  548. /**
  549. * @brief Call to get vdev extd stats
  550. *
  551. * @param soc - soc handle
  552. * @param vdev_id - id of dp vdev object
  553. * @param buf - buffer
  554. * @return - int
  555. */
  556. static inline int
  557. cdp_get_vdev_extd_stats(ol_txrx_soc_handle soc,
  558. uint8_t vdev_id,
  559. wmi_host_vdev_extd_stats *buf)
  560. {
  561. if (!soc || !soc->ops) {
  562. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  563. "%s: Invalid Instance", __func__);
  564. QDF_BUG(0);
  565. return 0;
  566. }
  567. if (!soc->ops->host_stats_ops ||
  568. !soc->ops->host_stats_ops->txrx_get_vdev_extd_stats)
  569. return 0;
  570. return soc->ops->host_stats_ops->txrx_get_vdev_extd_stats(soc, vdev_id,
  571. buf);
  572. }
  573. /**
  574. * @brief Call to get cdp_pdev_stats
  575. *
  576. * @param soc - soc handle
  577. * @param pdev_id - id of dp pdev object
  578. * @param buf - buffer to hold cdp_pdev_stats
  579. * @return - success/failure
  580. */
  581. static inline int
  582. cdp_host_get_pdev_stats(ol_txrx_soc_handle soc,
  583. uint8_t pdev_id, struct cdp_pdev_stats *buf)
  584. {
  585. if (!soc || !soc->ops) {
  586. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  587. "%s: Invalid Instance", __func__);
  588. QDF_BUG(0);
  589. return 0;
  590. }
  591. if (!soc->ops->host_stats_ops ||
  592. !soc->ops->host_stats_ops->txrx_get_pdev_stats)
  593. return 0;
  594. return soc->ops->host_stats_ops->txrx_get_pdev_stats(soc, pdev_id, buf);
  595. }
  596. /**
  597. * @brief Call to get radio stats
  598. *
  599. * @param soc - soc handle
  600. * @param pdev_id - id of dp pdev object
  601. * @param scn_stats_user - stats buffer
  602. * @return - int
  603. */
  604. static inline int
  605. cdp_host_get_radio_stats(ol_txrx_soc_handle soc,
  606. uint8_t pdev_id,
  607. void *buf)
  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. if (!soc->ops->host_stats_ops ||
  616. !soc->ops->host_stats_ops->txrx_get_radio_stats)
  617. return 0;
  618. return soc->ops->host_stats_ops->txrx_get_radio_stats(soc, pdev_id,
  619. buf);
  620. }
  621. #endif /* _CDP_TXRX_HOST_STATS_H_ */