cdp_txrx_host_stats.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  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 specified 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. * @param type - enum of required stats
  422. * @param buf - buffer to hold the value
  423. * @return - QDF_STATUS
  424. */
  425. static inline QDF_STATUS
  426. cdp_txrx_get_peer_stats_param(ol_txrx_soc_handle soc, uint8_t vdev_id,
  427. uint8_t *peer_mac,
  428. enum cdp_peer_stats_type type,
  429. cdp_peer_stats_param_t *buf)
  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. if (!soc->ops->host_stats_ops ||
  438. !soc->ops->host_stats_ops->txrx_get_peer_stats_param)
  439. return QDF_STATUS_E_FAILURE;
  440. return soc->ops->host_stats_ops->txrx_get_peer_stats_param(soc,
  441. vdev_id,
  442. peer_mac,
  443. type,
  444. buf);
  445. }
  446. /**
  447. * @brief Call to get peer stats
  448. *
  449. * @param soc - soc handle
  450. * @param vdev_id - vdev_id of vdev object
  451. * @param peer_mac - mac address of the peer
  452. * @return - struct cdp_peer_stats
  453. */
  454. static inline QDF_STATUS
  455. cdp_host_get_peer_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
  456. uint8_t *peer_mac,
  457. struct cdp_peer_stats *peer_stats)
  458. {
  459. if (!soc || !soc->ops) {
  460. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  461. "%s: Invalid Instance", __func__);
  462. QDF_BUG(0);
  463. return QDF_STATUS_E_FAILURE;
  464. }
  465. if (!soc->ops->host_stats_ops ||
  466. !soc->ops->host_stats_ops->txrx_get_peer_stats)
  467. return QDF_STATUS_E_FAILURE;
  468. return soc->ops->host_stats_ops->txrx_get_peer_stats(soc, vdev_id,
  469. peer_mac,
  470. peer_stats);
  471. }
  472. /**
  473. * @brief Call to reset ald stats
  474. *
  475. * @param soc - soc handle
  476. * @param vdev_id - vdev_id of vdev object
  477. * @param peer_mac - mac address of the peer
  478. * @return - void
  479. */
  480. static inline QDF_STATUS
  481. cdp_host_reset_peer_ald_stats(ol_txrx_soc_handle soc, uint8_t vdev_id,
  482. uint8_t *peer_mac)
  483. {
  484. if (!soc || !soc->ops) {
  485. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  486. "%s: Invalid Instance", __func__);
  487. QDF_BUG(0);
  488. return QDF_STATUS_E_FAILURE;
  489. }
  490. if (!soc->ops->host_stats_ops ||
  491. !soc->ops->host_stats_ops->txrx_reset_peer_ald_stats)
  492. return QDF_STATUS_E_FAILURE;
  493. return soc->ops->host_stats_ops->txrx_reset_peer_ald_stats(soc,
  494. vdev_id,
  495. peer_mac);
  496. }
  497. /**
  498. * @brief Call to reset peer stats
  499. *
  500. * @param soc - soc handle
  501. * @param vdev_id - vdev_id of vdev object
  502. * @param peer_mac - mac address of the peer
  503. * @return - QDF_STATUS
  504. */
  505. static inline QDF_STATUS
  506. cdp_host_reset_peer_stats(ol_txrx_soc_handle soc,
  507. uint8_t vdev_id, uint8_t *peer_mac)
  508. {
  509. if (!soc || !soc->ops) {
  510. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  511. "%s: Invalid Instance", __func__);
  512. QDF_BUG(0);
  513. return QDF_STATUS_E_FAILURE;
  514. }
  515. if (!soc->ops->host_stats_ops ||
  516. !soc->ops->host_stats_ops->txrx_reset_peer_stats)
  517. return QDF_STATUS_E_FAILURE;
  518. return soc->ops->host_stats_ops->txrx_reset_peer_stats(soc,
  519. vdev_id,
  520. peer_mac);
  521. }
  522. /**
  523. * @brief Call to get vdev stats
  524. *
  525. * @param soc - dp soc object
  526. * @param vdev_id - id of dp vdev object
  527. * @param buf - buffer
  528. * @return - int
  529. */
  530. static inline int
  531. cdp_host_get_vdev_stats(ol_txrx_soc_handle soc,
  532. uint8_t vdev_id,
  533. struct cdp_vdev_stats *buf,
  534. bool is_aggregate)
  535. {
  536. if (!soc || !soc->ops) {
  537. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  538. "%s: Invalid Instance", __func__);
  539. QDF_BUG(0);
  540. return 0;
  541. }
  542. if (!soc->ops->host_stats_ops ||
  543. !soc->ops->host_stats_ops->txrx_get_vdev_stats)
  544. return 0;
  545. return soc->ops->host_stats_ops->txrx_get_vdev_stats(soc, vdev_id,
  546. buf,
  547. is_aggregate);
  548. }
  549. /**
  550. * @brief Call to update vdev stats received from firmware
  551. * (wmi_host_vdev_stats and wmi_host_vdev_extd_stats) into dp
  552. *
  553. * @param data - stats data to be updated
  554. * @param size - size of stats data
  555. * @param stats_id - stats id
  556. * @return - int
  557. */
  558. static inline int
  559. cdp_update_host_vdev_stats(ol_txrx_soc_handle soc,
  560. void *data,
  561. uint32_t size,
  562. uint32_t stats_id)
  563. {
  564. if (!soc || !soc->ops) {
  565. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  566. "%s: Invalid Instance", __func__);
  567. QDF_BUG(0);
  568. return 0;
  569. }
  570. if (!soc->ops->host_stats_ops ||
  571. !soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats)
  572. return 0;
  573. return soc->ops->host_stats_ops->txrx_process_wmi_host_vdev_stats
  574. (soc,
  575. data,
  576. size,
  577. stats_id);
  578. }
  579. /**
  580. * @brief Call to get vdev extd stats
  581. *
  582. * @param soc - soc handle
  583. * @param vdev_id - id of dp vdev object
  584. * @param buf - buffer
  585. * @return - int
  586. */
  587. static inline int
  588. cdp_get_vdev_extd_stats(ol_txrx_soc_handle soc,
  589. uint8_t vdev_id,
  590. wmi_host_vdev_extd_stats *buf)
  591. {
  592. if (!soc || !soc->ops) {
  593. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  594. "%s: Invalid Instance", __func__);
  595. QDF_BUG(0);
  596. return 0;
  597. }
  598. if (!soc->ops->host_stats_ops ||
  599. !soc->ops->host_stats_ops->txrx_get_vdev_extd_stats)
  600. return 0;
  601. return soc->ops->host_stats_ops->txrx_get_vdev_extd_stats(soc, vdev_id,
  602. buf);
  603. }
  604. /**
  605. * @brief Call to get cdp_pdev_stats
  606. *
  607. * @param soc - soc handle
  608. * @param pdev_id - id of dp pdev object
  609. * @param buf - buffer to hold cdp_pdev_stats
  610. * @return - success/failure
  611. */
  612. static inline int
  613. cdp_host_get_pdev_stats(ol_txrx_soc_handle soc,
  614. uint8_t pdev_id, struct cdp_pdev_stats *buf)
  615. {
  616. if (!soc || !soc->ops) {
  617. QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
  618. "%s: Invalid Instance", __func__);
  619. QDF_BUG(0);
  620. return 0;
  621. }
  622. if (!soc->ops->host_stats_ops ||
  623. !soc->ops->host_stats_ops->txrx_get_pdev_stats)
  624. return 0;
  625. return soc->ops->host_stats_ops->txrx_get_pdev_stats(soc, pdev_id, buf);
  626. }
  627. /**
  628. * @brief Call to get radio stats
  629. *
  630. * @param soc - soc handle
  631. * @param pdev_id - id of dp pdev object
  632. * @param scn_stats_user - stats buffer
  633. * @return - int
  634. */
  635. static inline int
  636. cdp_host_get_radio_stats(ol_txrx_soc_handle soc,
  637. uint8_t pdev_id,
  638. void *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. if (!soc->ops->host_stats_ops ||
  647. !soc->ops->host_stats_ops->txrx_get_radio_stats)
  648. return 0;
  649. return soc->ops->host_stats_ops->txrx_get_radio_stats(soc, pdev_id,
  650. buf);
  651. }
  652. #endif /* _CDP_TXRX_HOST_STATS_H_ */