dp_stats.c 94 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884
  1. /*
  2. * Copyright (c) 2017 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. #include "qdf_types.h"
  19. #include "htt_stats.h"
  20. #include "dp_types.h"
  21. #include "dp_internal.h"
  22. #define DP_MAX_STRING_LEN 500
  23. #define DP_HTT_HW_INTR_NAME_LEN HTT_STATS_MAX_HW_INTR_NAME_LEN
  24. #define DP_HTT_HW_MODULE_NAME_LEN HTT_STATS_MAX_HW_MODULE_NAME_LEN
  25. #define DP_HTT_COUNTER_NAME_LEN HTT_MAX_COUNTER_NAME
  26. #define DP_HTT_LOW_WM_HIT_COUNT_LEN HTT_STATS_LOW_WM_BINS
  27. #define DP_HTT_HIGH_WM_HIT_COUNT_LEN HTT_STATS_HIGH_WM_BINS
  28. #define DP_HTT_TX_MCS_LEN HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS
  29. #define DP_HTT_TX_SU_MCS_LEN HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS
  30. #define DP_HTT_TX_MU_MCS_LEN HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS
  31. #define DP_HTT_TX_NSS_LEN HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS
  32. #define DP_HTT_TX_BW_LEN HTT_TX_PDEV_STATS_NUM_BW_COUNTERS
  33. #define DP_HTT_TX_PREAM_LEN HTT_TX_PDEV_STATS_NUM_PREAMBLE_TYPES
  34. #define DP_HTT_TX_PDEV_GI_LEN HTT_TX_PDEV_STATS_NUM_GI_COUNTERS
  35. #define DP_HTT_TX_DCM_LEN HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS
  36. #define DP_HTT_RX_MCS_LEN HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS
  37. #define DP_HTT_RX_NSS_LEN HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS
  38. #define DP_HTT_RX_DCM_LEN HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS
  39. #define DP_HTT_RX_BW_LEN HTT_RX_PDEV_STATS_NUM_BW_COUNTERS
  40. #define DP_HTT_RX_PREAM_LEN HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES
  41. #define DP_HTT_RSSI_CHAIN_LEN HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS
  42. #define DP_HTT_RX_GI_LEN HTT_RX_PDEV_STATS_NUM_GI_COUNTERS
  43. #define DP_HTT_FW_RING_MGMT_SUBTYPE_LEN HTT_STATS_SUBTYPE_MAX
  44. #define DP_HTT_FW_RING_CTRL_SUBTYPE_LEN HTT_STATS_SUBTYPE_MAX
  45. #define DP_HTT_FW_RING_MPDU_ERR_LEN HTT_RX_STATS_RXDMA_MAX_ERR
  46. #define DP_HTT_TID_NAME_LEN MAX_HTT_TID_NAME
  47. #define DP_HTT_PEER_NUM_SS HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS
  48. #define DP_HTT_PDEV_TX_GI_LEN HTT_TX_PDEV_STATS_NUM_GI_COUNTERS
  49. /*
  50. * dp_print_stats_string_tlv: display htt_stats_string_tlv
  51. * @tag_buf: buffer containing the tlv htt_stats_string_tlv
  52. *
  53. * return:void
  54. */
  55. static inline void dp_print_stats_string_tlv(uint32_t *tag_buf)
  56. {
  57. htt_stats_string_tlv *dp_stats_buf =
  58. (htt_stats_string_tlv *)tag_buf;
  59. uint8_t i;
  60. uint16_t index = 0;
  61. char data[DP_MAX_STRING_LEN];
  62. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  63. DP_TRACE_STATS(FATAL, "HTT_STATS_STRING_TLV:");
  64. for (i = 0; i < tag_len; i++) {
  65. index += qdf_snprint(&data[index],
  66. DP_MAX_STRING_LEN - index,
  67. " %d:%d,", i, dp_stats_buf->data[i]);
  68. }
  69. DP_TRACE_STATS(FATAL, "data = %s\n", data);
  70. }
  71. /*
  72. * dp_print_tx_pdev_stats_cmn_tlv: display htt_tx_pdev_stats_cmn_tlv
  73. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_cmn_tlv
  74. *
  75. * return:void
  76. */
  77. static inline void dp_print_tx_pdev_stats_cmn_tlv(uint32_t *tag_buf)
  78. {
  79. htt_tx_pdev_stats_cmn_tlv *dp_stats_buf =
  80. (htt_tx_pdev_stats_cmn_tlv *)tag_buf;
  81. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_CMN_TLV:");
  82. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  83. dp_stats_buf->mac_id__word);
  84. DP_TRACE_STATS(FATAL, "hw_queued = %d",
  85. dp_stats_buf->hw_queued);
  86. DP_TRACE_STATS(FATAL, "hw_reaped = %d",
  87. dp_stats_buf->hw_reaped);
  88. DP_TRACE_STATS(FATAL, "underrun = %d",
  89. dp_stats_buf->underrun);
  90. DP_TRACE_STATS(FATAL, "hw_paused = %d",
  91. dp_stats_buf->hw_paused);
  92. DP_TRACE_STATS(FATAL, "hw_flush = %d",
  93. dp_stats_buf->hw_flush);
  94. DP_TRACE_STATS(FATAL, "hw_filt = %d",
  95. dp_stats_buf->hw_filt);
  96. DP_TRACE_STATS(FATAL, "tx_abort = %d",
  97. dp_stats_buf->tx_abort);
  98. DP_TRACE_STATS(FATAL, "mpdu_requeued = %d",
  99. dp_stats_buf->mpdu_requed);
  100. DP_TRACE_STATS(FATAL, "tx_xretry = %d",
  101. dp_stats_buf->tx_xretry);
  102. DP_TRACE_STATS(FATAL, "data_rc = %d",
  103. dp_stats_buf->data_rc);
  104. DP_TRACE_STATS(FATAL, "mpdu_dropped_xretry = %d",
  105. dp_stats_buf->mpdu_dropped_xretry);
  106. DP_TRACE_STATS(FATAL, "illegal_rate_phy_err = %d",
  107. dp_stats_buf->illgl_rate_phy_err);
  108. DP_TRACE_STATS(FATAL, "cont_xretry = %d",
  109. dp_stats_buf->cont_xretry);
  110. DP_TRACE_STATS(FATAL, "tx_timeout = %d",
  111. dp_stats_buf->tx_timeout);
  112. DP_TRACE_STATS(FATAL, "pdev_resets = %d",
  113. dp_stats_buf->pdev_resets);
  114. DP_TRACE_STATS(FATAL, "phy_underrun = %d",
  115. dp_stats_buf->phy_underrun);
  116. DP_TRACE_STATS(FATAL, "txop_ovf = %d",
  117. dp_stats_buf->txop_ovf);
  118. DP_TRACE_STATS(FATAL, "seq_posted = %d",
  119. dp_stats_buf->seq_posted);
  120. DP_TRACE_STATS(FATAL, "seq_failed_queueing = %d",
  121. dp_stats_buf->seq_failed_queueing);
  122. DP_TRACE_STATS(FATAL, "seq_completed = %d",
  123. dp_stats_buf->seq_completed);
  124. DP_TRACE_STATS(FATAL, "seq_restarted = %d",
  125. dp_stats_buf->seq_restarted);
  126. DP_TRACE_STATS(FATAL, "mu_seq_posted = %d",
  127. dp_stats_buf->mu_seq_posted);
  128. DP_TRACE_STATS(FATAL, "seq_switch_hw_paused = %d",
  129. dp_stats_buf->seq_switch_hw_paused);
  130. DP_TRACE_STATS(FATAL, "next_seq_posted_dsr = %d",
  131. dp_stats_buf->next_seq_posted_dsr);
  132. DP_TRACE_STATS(FATAL, "seq_posted_isr = %d",
  133. dp_stats_buf->seq_posted_isr);
  134. DP_TRACE_STATS(FATAL, "seq_ctrl_cached = %d",
  135. dp_stats_buf->seq_ctrl_cached);
  136. DP_TRACE_STATS(FATAL, "mpdu_count_tqm = %d",
  137. dp_stats_buf->mpdu_count_tqm);
  138. DP_TRACE_STATS(FATAL, "msdu_count_tqm = %d",
  139. dp_stats_buf->msdu_count_tqm);
  140. DP_TRACE_STATS(FATAL, "mpdu_removed_tqm = %d",
  141. dp_stats_buf->mpdu_removed_tqm);
  142. DP_TRACE_STATS(FATAL, "msdu_removed_tqm = %d",
  143. dp_stats_buf->msdu_removed_tqm);
  144. DP_TRACE_STATS(FATAL, "mpdus_sw_flush = %d",
  145. dp_stats_buf->mpdus_sw_flush);
  146. DP_TRACE_STATS(FATAL, "mpdus_hw_filter = %d",
  147. dp_stats_buf->mpdus_hw_filter);
  148. DP_TRACE_STATS(FATAL, "mpdus_truncated = %d",
  149. dp_stats_buf->mpdus_truncated);
  150. DP_TRACE_STATS(FATAL, "mpdus_ack_failed = %d",
  151. dp_stats_buf->mpdus_ack_failed);
  152. DP_TRACE_STATS(FATAL, "mpdus_expired = %d",
  153. dp_stats_buf->mpdus_expired);
  154. DP_TRACE_STATS(FATAL, "mpdus_seq_hw_retry = %d",
  155. dp_stats_buf->mpdus_seq_hw_retry);
  156. DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
  157. dp_stats_buf->ack_tlv_proc);
  158. DP_TRACE_STATS(FATAL, "coex_abort_mpdu_cnt_valid = %d",
  159. dp_stats_buf->coex_abort_mpdu_cnt_valid);
  160. DP_TRACE_STATS(FATAL, "coex_abort_mpdu_cnt = %d\n",
  161. dp_stats_buf->coex_abort_mpdu_cnt);
  162. }
  163. /*
  164. * dp_print_tx_pdev_stats_urrn_tlv_v: display htt_tx_pdev_stats_urrn_tlv_v
  165. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_urrn_tlv_v
  166. *
  167. * return:void
  168. */
  169. static inline void dp_print_tx_pdev_stats_urrn_tlv_v(uint32_t *tag_buf)
  170. {
  171. htt_tx_pdev_stats_urrn_tlv_v *dp_stats_buf =
  172. (htt_tx_pdev_stats_urrn_tlv_v *)tag_buf;
  173. uint8_t i;
  174. uint16_t index = 0;
  175. char urrn_stats[DP_MAX_STRING_LEN];
  176. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  177. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_URRN_STATS);
  178. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_URRN_TLV_V:");
  179. for (i = 0; i < tag_len; i++) {
  180. index += qdf_snprint(&urrn_stats[index],
  181. DP_MAX_STRING_LEN - index,
  182. " %d:%d,", i, dp_stats_buf->urrn_stats[i]);
  183. }
  184. DP_TRACE_STATS(FATAL, "urrn_stats = %s\n", urrn_stats);
  185. }
  186. /*
  187. * dp_print_tx_pdev_stats_flush_tlv_v: display htt_tx_pdev_stats_flush_tlv_v
  188. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_flush_tlv_v
  189. *
  190. * return:void
  191. */
  192. static inline void dp_print_tx_pdev_stats_flush_tlv_v(uint32_t *tag_buf)
  193. {
  194. htt_tx_pdev_stats_flush_tlv_v *dp_stats_buf =
  195. (htt_tx_pdev_stats_flush_tlv_v *)tag_buf;
  196. uint8_t i;
  197. uint16_t index = 0;
  198. char flush_errs[DP_MAX_STRING_LEN];
  199. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  200. tag_len = qdf_min(tag_len,
  201. (uint32_t)HTT_TX_PDEV_MAX_FLUSH_REASON_STATS);
  202. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_FLUSH_TLV_V:");
  203. for (i = 0; i < tag_len; i++) {
  204. index += qdf_snprint(&flush_errs[index],
  205. DP_MAX_STRING_LEN - index,
  206. " %d:%d,", i, dp_stats_buf->flush_errs[i]);
  207. }
  208. DP_TRACE_STATS(FATAL, "flush_errs = %s\n", flush_errs);
  209. }
  210. /*
  211. * dp_print_tx_pdev_stats_sifs_tlv_v: display htt_tx_pdev_stats_sifs_tlv_v
  212. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_sifs_tlv_v
  213. *
  214. * return:void
  215. */
  216. static inline void dp_print_tx_pdev_stats_sifs_tlv_v(uint32_t *tag_buf)
  217. {
  218. htt_tx_pdev_stats_sifs_tlv_v *dp_stats_buf =
  219. (htt_tx_pdev_stats_sifs_tlv_v *)tag_buf;
  220. uint8_t i;
  221. uint16_t index = 0;
  222. char sifs_status[DP_MAX_STRING_LEN];
  223. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  224. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_SIFS_BURST_STATS);
  225. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_SIFS_TLV_V:");
  226. for (i = 0; i < tag_len; i++) {
  227. index += qdf_snprint(&sifs_status[index],
  228. DP_MAX_STRING_LEN - index,
  229. " %d:%d,", i, dp_stats_buf->sifs_status[i]);
  230. }
  231. DP_TRACE_STATS(FATAL, "sifs_status = %s\n", sifs_status);
  232. }
  233. /*
  234. * dp_print_tx_pdev_stats_phy_err_tlv_v: display htt_tx_pdev_stats_phy_err_tlv_v
  235. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_phy_err_tlv_v
  236. *
  237. * return:void
  238. */
  239. static inline void dp_print_tx_pdev_stats_phy_err_tlv_v(uint32_t *tag_buf)
  240. {
  241. htt_tx_pdev_stats_phy_err_tlv_v *dp_stats_buf =
  242. (htt_tx_pdev_stats_phy_err_tlv_v *)tag_buf;
  243. uint8_t i;
  244. uint16_t index = 0;
  245. char phy_errs[DP_MAX_STRING_LEN];
  246. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  247. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_PHY_ERR_STATS);
  248. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_PHY_ERR_TLV_V:");
  249. for (i = 0; i < tag_len; i++) {
  250. index += qdf_snprint(&phy_errs[index],
  251. DP_MAX_STRING_LEN - index,
  252. " %d:%d,", i, dp_stats_buf->phy_errs[i]);
  253. }
  254. DP_TRACE_STATS(FATAL, "phy_errs = %s\n", phy_errs);
  255. }
  256. /*
  257. * dp_print_hw_stats_intr_misc_tlv: display htt_hw_stats_intr_misc_tlv
  258. * @tag_buf: buffer containing the tlv htt_hw_stats_intr_misc_tlv
  259. *
  260. * return:void
  261. */
  262. static inline void dp_print_hw_stats_intr_misc_tlv(uint32_t *tag_buf)
  263. {
  264. htt_hw_stats_intr_misc_tlv *dp_stats_buf =
  265. (htt_hw_stats_intr_misc_tlv *)tag_buf;
  266. uint8_t i;
  267. uint16_t index = 0;
  268. char hw_intr_name[DP_MAX_STRING_LEN];
  269. DP_TRACE_STATS(FATAL, "HTT_HW_STATS_INTR_MISC_TLV:");
  270. for (i = 0; i < DP_HTT_HW_INTR_NAME_LEN; i++) {
  271. index += qdf_snprint(&hw_intr_name[index],
  272. DP_MAX_STRING_LEN - index,
  273. " %d:%d,", i, dp_stats_buf->hw_intr_name[i]);
  274. }
  275. DP_TRACE_STATS(FATAL, "hw_intr_name = %s ", hw_intr_name);
  276. DP_TRACE_STATS(FATAL, "mask = %d",
  277. dp_stats_buf->mask);
  278. DP_TRACE_STATS(FATAL, "count = %d\n",
  279. dp_stats_buf->count);
  280. }
  281. /*
  282. * dp_print_hw_stats_wd_timeout_tlv: display htt_hw_stats_wd_timeout_tlv
  283. * @tag_buf: buffer containing the tlv htt_hw_stats_wd_timeout_tlv
  284. *
  285. * return:void
  286. */
  287. static inline void dp_print_hw_stats_wd_timeout_tlv(uint32_t *tag_buf)
  288. {
  289. htt_hw_stats_wd_timeout_tlv *dp_stats_buf =
  290. (htt_hw_stats_wd_timeout_tlv *)tag_buf;
  291. uint8_t i;
  292. uint16_t index = 0;
  293. char hw_module_name[DP_MAX_STRING_LEN];
  294. DP_TRACE_STATS(FATAL, "HTT_HW_STATS_WD_TIMEOUT_TLV:");
  295. for (i = 0; i < DP_HTT_HW_MODULE_NAME_LEN; i++) {
  296. index += qdf_snprint(&hw_module_name[index],
  297. DP_MAX_STRING_LEN - index,
  298. " %d:%d,", i, dp_stats_buf->hw_module_name[i]);
  299. }
  300. DP_TRACE_STATS(FATAL, "hw_module_name = %s ", hw_module_name);
  301. DP_TRACE_STATS(FATAL, "count = %d",
  302. dp_stats_buf->count);
  303. }
  304. /*
  305. * dp_print_hw_stats_pdev_errs_tlv: display htt_hw_stats_pdev_errs_tlv
  306. * @tag_buf: buffer containing the tlv htt_hw_stats_pdev_errs_tlv
  307. *
  308. * return:void
  309. */
  310. static inline void dp_print_hw_stats_pdev_errs_tlv(uint32_t *tag_buf)
  311. {
  312. htt_hw_stats_pdev_errs_tlv *dp_stats_buf =
  313. (htt_hw_stats_pdev_errs_tlv *)tag_buf;
  314. DP_TRACE_STATS(FATAL, "HTT_HW_STATS_PDEV_ERRS_TLV:");
  315. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  316. dp_stats_buf->mac_id__word);
  317. DP_TRACE_STATS(FATAL, "tx_abort = %d",
  318. dp_stats_buf->tx_abort);
  319. DP_TRACE_STATS(FATAL, "tx_abort_fail_count = %d",
  320. dp_stats_buf->tx_abort_fail_count);
  321. DP_TRACE_STATS(FATAL, "rx_abort = %d",
  322. dp_stats_buf->rx_abort);
  323. DP_TRACE_STATS(FATAL, "rx_abort_fail_count = %d",
  324. dp_stats_buf->rx_abort_fail_count);
  325. DP_TRACE_STATS(FATAL, "warm_reset = %d",
  326. dp_stats_buf->warm_reset);
  327. DP_TRACE_STATS(FATAL, "cold_reset = %d",
  328. dp_stats_buf->cold_reset);
  329. DP_TRACE_STATS(FATAL, "tx_flush = %d",
  330. dp_stats_buf->tx_flush);
  331. DP_TRACE_STATS(FATAL, "tx_glb_reset = %d",
  332. dp_stats_buf->tx_glb_reset);
  333. DP_TRACE_STATS(FATAL, "tx_txq_reset = %d",
  334. dp_stats_buf->tx_txq_reset);
  335. DP_TRACE_STATS(FATAL, "rx_timeout_reset = %d\n",
  336. dp_stats_buf->rx_timeout_reset);
  337. }
  338. /*
  339. * dp_print_msdu_flow_stats_tlv: display htt_msdu_flow_stats_tlv
  340. * @tag_buf: buffer containing the tlv htt_msdu_flow_stats_tlv
  341. *
  342. * return:void
  343. */
  344. static inline void dp_print_msdu_flow_stats_tlv(uint32_t *tag_buf)
  345. {
  346. htt_msdu_flow_stats_tlv *dp_stats_buf =
  347. (htt_msdu_flow_stats_tlv *)tag_buf;
  348. DP_TRACE_STATS(FATAL, "HTT_MSDU_FLOW_STATS_TLV:");
  349. DP_TRACE_STATS(FATAL, "last_update_timestamp = %d",
  350. dp_stats_buf->last_update_timestamp);
  351. DP_TRACE_STATS(FATAL, "last_add_timestamp = %d",
  352. dp_stats_buf->last_add_timestamp);
  353. DP_TRACE_STATS(FATAL, "last_remove_timestamp = %d",
  354. dp_stats_buf->last_remove_timestamp);
  355. DP_TRACE_STATS(FATAL, "total_processed_msdu_count = %d",
  356. dp_stats_buf->total_processed_msdu_count);
  357. DP_TRACE_STATS(FATAL, "cur_msdu_count_in_flowq = %d",
  358. dp_stats_buf->cur_msdu_count_in_flowq);
  359. DP_TRACE_STATS(FATAL, "sw_peer_id = %d",
  360. dp_stats_buf->sw_peer_id);
  361. DP_TRACE_STATS(FATAL, "tx_flow_no__tid_num__drop_rule = %d\n",
  362. dp_stats_buf->tx_flow_no__tid_num__drop_rule);
  363. }
  364. /*
  365. * dp_print_tx_tid_stats_tlv: display htt_tx_tid_stats_tlv
  366. * @tag_buf: buffer containing the tlv htt_tx_tid_stats_tlv
  367. *
  368. * return:void
  369. */
  370. static inline void dp_print_tx_tid_stats_tlv(uint32_t *tag_buf)
  371. {
  372. htt_tx_tid_stats_tlv *dp_stats_buf =
  373. (htt_tx_tid_stats_tlv *)tag_buf;
  374. uint8_t i;
  375. uint16_t index = 0;
  376. char tid_name[DP_MAX_STRING_LEN];
  377. DP_TRACE_STATS(FATAL, "HTT_TX_TID_STATS_TLV:");
  378. for (i = 0; i < DP_HTT_TID_NAME_LEN; i++) {
  379. index += qdf_snprint(&tid_name[index],
  380. DP_MAX_STRING_LEN - index,
  381. " %d:%d,", i, dp_stats_buf->tid_name[i]);
  382. }
  383. DP_TRACE_STATS(FATAL, "tid_name = %s ", tid_name);
  384. DP_TRACE_STATS(FATAL, "sw_peer_id__tid_num = %d",
  385. dp_stats_buf->sw_peer_id__tid_num);
  386. DP_TRACE_STATS(FATAL, "num_sched_pending__num_ppdu_in_hwq = %d",
  387. dp_stats_buf->num_sched_pending__num_ppdu_in_hwq);
  388. DP_TRACE_STATS(FATAL, "tid_flags = %d",
  389. dp_stats_buf->tid_flags);
  390. DP_TRACE_STATS(FATAL, "hw_queued = %d",
  391. dp_stats_buf->hw_queued);
  392. DP_TRACE_STATS(FATAL, "hw_reaped = %d",
  393. dp_stats_buf->hw_reaped);
  394. DP_TRACE_STATS(FATAL, "mpdus_hw_filter = %d",
  395. dp_stats_buf->mpdus_hw_filter);
  396. DP_TRACE_STATS(FATAL, "qdepth_bytes = %d",
  397. dp_stats_buf->qdepth_bytes);
  398. DP_TRACE_STATS(FATAL, "qdepth_num_msdu = %d",
  399. dp_stats_buf->qdepth_num_msdu);
  400. DP_TRACE_STATS(FATAL, "qdepth_num_mpdu = %d",
  401. dp_stats_buf->qdepth_num_mpdu);
  402. DP_TRACE_STATS(FATAL, "last_scheduled_tsmp = %d",
  403. dp_stats_buf->last_scheduled_tsmp);
  404. DP_TRACE_STATS(FATAL, "pause_module_id = %d",
  405. dp_stats_buf->pause_module_id);
  406. DP_TRACE_STATS(FATAL, "block_module_id = %d\n",
  407. dp_stats_buf->block_module_id);
  408. DP_TRACE_STATS(FATAL, "tid_tx_airtime = %d\n",
  409. dp_stats_buf->tid_tx_airtime);
  410. }
  411. #ifdef CONFIG_WIN
  412. /*
  413. * dp_print_tx_tid_stats_v1_tlv: display htt_tx_tid_stats_v1_tlv
  414. * @tag_buf: buffer containing the tlv htt_tx_tid_stats_v1_tlv
  415. *
  416. * return:void
  417. */
  418. static inline void dp_print_tx_tid_stats_v1_tlv(uint32_t *tag_buf)
  419. {
  420. htt_tx_tid_stats_v1_tlv *dp_stats_buf =
  421. (htt_tx_tid_stats_v1_tlv *)tag_buf;
  422. uint8_t i;
  423. uint16_t index = 0;
  424. char tid_name[DP_MAX_STRING_LEN];
  425. DP_TRACE_STATS(FATAL, "HTT_TX_TID_STATS_V1_TLV:");
  426. for (i = 0; i < DP_HTT_TID_NAME_LEN; i++) {
  427. index += qdf_snprint(&tid_name[index],
  428. DP_MAX_STRING_LEN - index,
  429. " %d:%d,", i, dp_stats_buf->tid_name[i]);
  430. }
  431. DP_TRACE_STATS(FATAL, "tid_name = %s ", tid_name);
  432. DP_TRACE_STATS(FATAL, "sw_peer_id__tid_num = %d",
  433. dp_stats_buf->sw_peer_id__tid_num);
  434. DP_TRACE_STATS(FATAL, "num_sched_pending__num_ppdu_in_hwq = %d",
  435. dp_stats_buf->num_sched_pending__num_ppdu_in_hwq);
  436. DP_TRACE_STATS(FATAL, "tid_flags = %d",
  437. dp_stats_buf->tid_flags);
  438. DP_TRACE_STATS(FATAL, "max_qdepth_bytes = %d",
  439. dp_stats_buf->max_qdepth_bytes);
  440. DP_TRACE_STATS(FATAL, "max_qdepth_n_msdus = %d",
  441. dp_stats_buf->max_qdepth_n_msdus);
  442. DP_TRACE_STATS(FATAL, "rsvd = %d",
  443. dp_stats_buf->rsvd);
  444. DP_TRACE_STATS(FATAL, "qdepth_bytes = %d",
  445. dp_stats_buf->qdepth_bytes);
  446. DP_TRACE_STATS(FATAL, "qdepth_num_msdu = %d",
  447. dp_stats_buf->qdepth_num_msdu);
  448. DP_TRACE_STATS(FATAL, "qdepth_num_mpdu = %d",
  449. dp_stats_buf->qdepth_num_mpdu);
  450. DP_TRACE_STATS(FATAL, "last_scheduled_tsmp = %d",
  451. dp_stats_buf->last_scheduled_tsmp);
  452. DP_TRACE_STATS(FATAL, "pause_module_id = %d",
  453. dp_stats_buf->pause_module_id);
  454. DP_TRACE_STATS(FATAL, "block_module_id = %d\n",
  455. dp_stats_buf->block_module_id);
  456. DP_TRACE_STATS(FATAL, "tid_tx_airtime = %d\n",
  457. dp_stats_buf->tid_tx_airtime);
  458. }
  459. #endif
  460. /*
  461. * dp_print_rx_tid_stats_tlv: display htt_rx_tid_stats_tlv
  462. * @tag_buf: buffer containing the tlv htt_rx_tid_stats_tlv
  463. *
  464. * return:void
  465. */
  466. static inline void dp_print_rx_tid_stats_tlv(uint32_t *tag_buf)
  467. {
  468. htt_rx_tid_stats_tlv *dp_stats_buf =
  469. (htt_rx_tid_stats_tlv *)tag_buf;
  470. uint8_t i;
  471. uint16_t index = 0;
  472. char tid_name[DP_MAX_STRING_LEN];
  473. DP_TRACE_STATS(FATAL, "HTT_RX_TID_STATS_TLV:");
  474. DP_TRACE_STATS(FATAL, "sw_peer_id__tid_num = %d",
  475. dp_stats_buf->sw_peer_id__tid_num);
  476. for (i = 0; i < DP_HTT_TID_NAME_LEN; i++) {
  477. index += qdf_snprint(&tid_name[index],
  478. DP_MAX_STRING_LEN - index,
  479. " %d:%d,", i, dp_stats_buf->tid_name[i]);
  480. }
  481. DP_TRACE_STATS(FATAL, "tid_name = %s ", tid_name);
  482. DP_TRACE_STATS(FATAL, "dup_in_reorder = %d",
  483. dp_stats_buf->dup_in_reorder);
  484. DP_TRACE_STATS(FATAL, "dup_past_outside_window = %d",
  485. dp_stats_buf->dup_past_outside_window);
  486. DP_TRACE_STATS(FATAL, "dup_past_within_window = %d",
  487. dp_stats_buf->dup_past_within_window);
  488. DP_TRACE_STATS(FATAL, "rxdesc_err_decrypt = %d\n",
  489. dp_stats_buf->rxdesc_err_decrypt);
  490. }
  491. /*
  492. * dp_print_counter_tlv: display htt_counter_tlv
  493. * @tag_buf: buffer containing the tlv htt_counter_tlv
  494. *
  495. * return:void
  496. */
  497. static inline void dp_print_counter_tlv(uint32_t *tag_buf)
  498. {
  499. htt_counter_tlv *dp_stats_buf =
  500. (htt_counter_tlv *)tag_buf;
  501. uint8_t i;
  502. uint16_t index = 0;
  503. char counter_name[DP_MAX_STRING_LEN];
  504. DP_TRACE_STATS(FATAL, "HTT_COUNTER_TLV:");
  505. for (i = 0; i < DP_HTT_COUNTER_NAME_LEN; i++) {
  506. index += qdf_snprint(&counter_name[index],
  507. DP_MAX_STRING_LEN - index,
  508. " %d:%d,", i, dp_stats_buf->counter_name[i]);
  509. }
  510. DP_TRACE_STATS(FATAL, "counter_name = %s ", counter_name);
  511. DP_TRACE_STATS(FATAL, "count = %d\n",
  512. dp_stats_buf->count);
  513. }
  514. /*
  515. * dp_print_peer_stats_cmn_tlv: display htt_peer_stats_cmn_tlv
  516. * @tag_buf: buffer containing the tlv htt_peer_stats_cmn_tlv
  517. *
  518. * return:void
  519. */
  520. static inline void dp_print_peer_stats_cmn_tlv(uint32_t *tag_buf)
  521. {
  522. htt_peer_stats_cmn_tlv *dp_stats_buf =
  523. (htt_peer_stats_cmn_tlv *)tag_buf;
  524. DP_TRACE_STATS(FATAL, "HTT_PEER_STATS_CMN_TLV:");
  525. DP_TRACE_STATS(FATAL, "ppdu_cnt = %d",
  526. dp_stats_buf->ppdu_cnt);
  527. DP_TRACE_STATS(FATAL, "mpdu_cnt = %d",
  528. dp_stats_buf->mpdu_cnt);
  529. DP_TRACE_STATS(FATAL, "msdu_cnt = %d",
  530. dp_stats_buf->msdu_cnt);
  531. DP_TRACE_STATS(FATAL, "pause_bitmap = %d",
  532. dp_stats_buf->pause_bitmap);
  533. DP_TRACE_STATS(FATAL, "block_bitmap = %d",
  534. dp_stats_buf->block_bitmap);
  535. DP_TRACE_STATS(FATAL, "current_timestamp = %d\n",
  536. dp_stats_buf->current_timestamp);
  537. }
  538. /*
  539. * dp_print_peer_details_tlv: display htt_peer_details_tlv
  540. * @tag_buf: buffer containing the tlv htt_peer_details_tlv
  541. *
  542. * return:void
  543. */
  544. static inline void dp_print_peer_details_tlv(uint32_t *tag_buf)
  545. {
  546. htt_peer_details_tlv *dp_stats_buf =
  547. (htt_peer_details_tlv *)tag_buf;
  548. DP_TRACE_STATS(FATAL, "HTT_PEER_DETAILS_TLV:");
  549. DP_TRACE_STATS(FATAL, "peer_type = %d",
  550. dp_stats_buf->peer_type);
  551. DP_TRACE_STATS(FATAL, "sw_peer_id = %d",
  552. dp_stats_buf->sw_peer_id);
  553. DP_TRACE_STATS(FATAL, "vdev_pdev_ast_idx = %d",
  554. dp_stats_buf->vdev_pdev_ast_idx);
  555. DP_TRACE_STATS(FATAL, "mac_addr(upper 4 bytes) = %d",
  556. dp_stats_buf->mac_addr.mac_addr31to0);
  557. DP_TRACE_STATS(FATAL, "mac_addr(lower 2 bytes) = %d",
  558. dp_stats_buf->mac_addr.mac_addr47to32);
  559. DP_TRACE_STATS(FATAL, "peer_flags = %d",
  560. dp_stats_buf->peer_flags);
  561. DP_TRACE_STATS(FATAL, "qpeer_flags = %d\n",
  562. dp_stats_buf->qpeer_flags);
  563. }
  564. /*
  565. * dp_print_tx_peer_rate_stats_tlv: display htt_tx_peer_rate_stats_tlv
  566. * @tag_buf: buffer containing the tlv htt_tx_peer_rate_stats_tlv
  567. *
  568. * return:void
  569. */
  570. static inline void dp_print_tx_peer_rate_stats_tlv(uint32_t *tag_buf)
  571. {
  572. htt_tx_peer_rate_stats_tlv *dp_stats_buf =
  573. (htt_tx_peer_rate_stats_tlv *)tag_buf;
  574. uint8_t i, j;
  575. uint16_t index = 0;
  576. char str_buf[DP_MAX_STRING_LEN];
  577. char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
  578. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
  579. tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN);
  580. DP_TRACE_STATS(FATAL, "HTT_TX_PEER_RATE_STATS_TLV:");
  581. DP_TRACE_STATS(FATAL, "tx_ldpc = %d",
  582. dp_stats_buf->tx_ldpc);
  583. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  584. dp_stats_buf->rts_cnt);
  585. DP_TRACE_STATS(FATAL, "ack_rssi = %d",
  586. dp_stats_buf->ack_rssi);
  587. index = 0;
  588. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  589. for (i = 0; i < DP_HTT_TX_MCS_LEN; i++) {
  590. index += qdf_snprint(&str_buf[index],
  591. DP_MAX_STRING_LEN - index,
  592. " %d:%d,", i, dp_stats_buf->tx_mcs[i]);
  593. }
  594. DP_TRACE_STATS(FATAL, "tx_mcs = %s ", str_buf);
  595. index = 0;
  596. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  597. for (i = 0; i < DP_HTT_TX_SU_MCS_LEN; i++) {
  598. index += qdf_snprint(&str_buf[index],
  599. DP_MAX_STRING_LEN - index,
  600. " %d:%d,", i, dp_stats_buf->tx_su_mcs[i]);
  601. }
  602. DP_TRACE_STATS(FATAL, "tx_su_mcs = %s ", str_buf);
  603. index = 0;
  604. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  605. for (i = 0; i < DP_HTT_TX_MU_MCS_LEN; i++) {
  606. index += qdf_snprint(&str_buf[index],
  607. DP_MAX_STRING_LEN - index,
  608. " %d:%d,", i, dp_stats_buf->tx_mu_mcs[i]);
  609. }
  610. DP_TRACE_STATS(FATAL, "tx_mu_mcs = %s ", str_buf);
  611. index = 0;
  612. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  613. for (i = 0; i < DP_HTT_TX_NSS_LEN; i++) {
  614. index += qdf_snprint(&str_buf[index],
  615. DP_MAX_STRING_LEN - index,
  616. " %d:%d,", i, dp_stats_buf->tx_nss[i]);
  617. }
  618. DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf);
  619. index = 0;
  620. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  621. for (i = 0; i < DP_HTT_TX_BW_LEN; i++) {
  622. index += qdf_snprint(&str_buf[index],
  623. DP_MAX_STRING_LEN - index,
  624. " %d:%d,", i, dp_stats_buf->tx_bw[i]);
  625. }
  626. DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf);
  627. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  628. for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  629. index += qdf_snprint(&str_buf[index],
  630. DP_MAX_STRING_LEN - index,
  631. " %d:%d,", i, dp_stats_buf->tx_stbc[i]);
  632. }
  633. DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf);
  634. index = 0;
  635. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  636. for (i = 0; i < DP_HTT_TX_PREAM_LEN; i++) {
  637. index += qdf_snprint(&str_buf[index],
  638. DP_MAX_STRING_LEN - index,
  639. " %d:%d,", i, dp_stats_buf->tx_pream[i]);
  640. }
  641. DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf);
  642. for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
  643. index = 0;
  644. for (i = 0; i < HTT_TX_PEER_STATS_NUM_MCS_COUNTERS; i++) {
  645. index += qdf_snprint(&tx_gi[j][index],
  646. DP_MAX_STRING_LEN - index,
  647. " %d:%d,", i,
  648. dp_stats_buf->tx_gi[j][i]);
  649. }
  650. DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]);
  651. }
  652. index = 0;
  653. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  654. for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) {
  655. index += qdf_snprint(&str_buf[index],
  656. DP_MAX_STRING_LEN - index,
  657. " %d:%d,", i, dp_stats_buf->tx_dcm[i]);
  658. }
  659. DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf);
  660. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
  661. qdf_mem_free(tx_gi[i]);
  662. }
  663. /*
  664. * dp_print_rx_peer_rate_stats_tlv: display htt_rx_peer_rate_stats_tlv
  665. * @tag_buf: buffer containing the tlv htt_rx_peer_rate_stats_tlv
  666. *
  667. * return:void
  668. */
  669. static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf)
  670. {
  671. htt_rx_peer_rate_stats_tlv *dp_stats_buf =
  672. (htt_rx_peer_rate_stats_tlv *)tag_buf;
  673. uint8_t i, j;
  674. uint16_t index = 0;
  675. char *rssi_chain[DP_HTT_PEER_NUM_SS];
  676. char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS];
  677. char str_buf[DP_MAX_STRING_LEN];
  678. for (i = 0; i < DP_HTT_PEER_NUM_SS; i++)
  679. rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  680. for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++)
  681. rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  682. DP_TRACE_STATS(FATAL, "HTT_RX_PEER_RATE_STATS_TLV:");
  683. DP_TRACE_STATS(FATAL, "nsts = %d",
  684. dp_stats_buf->nsts);
  685. DP_TRACE_STATS(FATAL, "rx_ldpc = %d",
  686. dp_stats_buf->rx_ldpc);
  687. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  688. dp_stats_buf->rts_cnt);
  689. DP_TRACE_STATS(FATAL, "rssi_mgmt = %d",
  690. dp_stats_buf->rssi_mgmt);
  691. DP_TRACE_STATS(FATAL, "rssi_data = %d",
  692. dp_stats_buf->rssi_data);
  693. DP_TRACE_STATS(FATAL, "rssi_comb = %d",
  694. dp_stats_buf->rssi_comb);
  695. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  696. for (i = 0; i < DP_HTT_RX_MCS_LEN; i++) {
  697. index += qdf_snprint(&str_buf[index],
  698. DP_MAX_STRING_LEN - index,
  699. " %d:%d,", i, dp_stats_buf->rx_mcs[i]);
  700. }
  701. DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf);
  702. index = 0;
  703. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  704. for (i = 0; i < DP_HTT_RX_NSS_LEN; i++) {
  705. index += qdf_snprint(&str_buf[index],
  706. DP_MAX_STRING_LEN - index,
  707. " %d:%d,", i, dp_stats_buf->rx_nss[i]);
  708. }
  709. DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf);
  710. index = 0;
  711. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  712. for (i = 0; i < DP_HTT_RX_DCM_LEN; i++) {
  713. index += qdf_snprint(&str_buf[index],
  714. DP_MAX_STRING_LEN - index,
  715. " %d:%d,", i, dp_stats_buf->rx_dcm[i]);
  716. }
  717. DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf);
  718. index = 0;
  719. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  720. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  721. index += qdf_snprint(&str_buf[index],
  722. DP_MAX_STRING_LEN - index,
  723. " %d:%d,", i, dp_stats_buf->rx_stbc[i]);
  724. }
  725. DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf);
  726. index = 0;
  727. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  728. for (i = 0; i < DP_HTT_RX_BW_LEN; i++) {
  729. index += qdf_snprint(&str_buf[index],
  730. DP_MAX_STRING_LEN - index,
  731. " %d:%d,", i, dp_stats_buf->rx_bw[i]);
  732. }
  733. DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf);
  734. for (j = 0; j < DP_HTT_PEER_NUM_SS; j++) {
  735. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  736. index = 0;
  737. for (i = 0; i < HTT_RX_PEER_STATS_NUM_BW_COUNTERS; i++) {
  738. index += qdf_snprint(&rssi_chain[j][index],
  739. DP_MAX_STRING_LEN - index,
  740. " %d:%d,", i,
  741. dp_stats_buf->rssi_chain[j][i]);
  742. }
  743. DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]);
  744. }
  745. for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++) {
  746. index = 0;
  747. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  748. index += qdf_snprint(&rx_gi[j][index],
  749. DP_MAX_STRING_LEN - index,
  750. " %d:%d,", i,
  751. dp_stats_buf->rx_gi[j][i]);
  752. }
  753. DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]);
  754. }
  755. index = 0;
  756. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  757. for (i = 0; i < DP_HTT_RX_PREAM_LEN; i++) {
  758. index += qdf_snprint(&str_buf[index],
  759. DP_MAX_STRING_LEN - index,
  760. " %d:%d,", i, dp_stats_buf->rx_pream[i]);
  761. }
  762. DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf);
  763. for (i = 0; i < DP_HTT_PEER_NUM_SS; i++)
  764. qdf_mem_free(rssi_chain[i]);
  765. for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++)
  766. qdf_mem_free(rx_gi[i]);
  767. }
  768. /*
  769. * dp_print_tx_hwq_mu_mimo_sch_stats_tlv: display htt_tx_hwq_mu_mimo_sch_stats
  770. * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_sch_stats_tlv
  771. *
  772. * return:void
  773. */
  774. static inline void dp_print_tx_hwq_mu_mimo_sch_stats_tlv(uint32_t *tag_buf)
  775. {
  776. htt_tx_hwq_mu_mimo_sch_stats_tlv *dp_stats_buf =
  777. (htt_tx_hwq_mu_mimo_sch_stats_tlv *)tag_buf;
  778. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_SCH_STATS_TLV:");
  779. DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d",
  780. dp_stats_buf->mu_mimo_sch_posted);
  781. DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d",
  782. dp_stats_buf->mu_mimo_sch_failed);
  783. DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n",
  784. dp_stats_buf->mu_mimo_ppdu_posted);
  785. }
  786. /*
  787. * dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv: display htt_tx_hwq_mu_mimo_mpdu_stats
  788. * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_mpdu_stats_tlv
  789. *
  790. * return:void
  791. */
  792. static inline void dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf)
  793. {
  794. htt_tx_hwq_mu_mimo_mpdu_stats_tlv *dp_stats_buf =
  795. (htt_tx_hwq_mu_mimo_mpdu_stats_tlv *)tag_buf;
  796. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_MPDU_STATS_TLV:");
  797. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d",
  798. dp_stats_buf->mu_mimo_mpdus_queued_usr);
  799. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d",
  800. dp_stats_buf->mu_mimo_mpdus_tried_usr);
  801. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d",
  802. dp_stats_buf->mu_mimo_mpdus_failed_usr);
  803. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d",
  804. dp_stats_buf->mu_mimo_mpdus_requeued_usr);
  805. DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d",
  806. dp_stats_buf->mu_mimo_err_no_ba_usr);
  807. DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d",
  808. dp_stats_buf->mu_mimo_mpdu_underrun_usr);
  809. DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n",
  810. dp_stats_buf->mu_mimo_ampdu_underrun_usr);
  811. }
  812. /*
  813. * dp_print_tx_hwq_mu_mimo_cmn_stats_tlv: display htt_tx_hwq_mu_mimo_cmn_stats
  814. * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_cmn_stats_tlv
  815. *
  816. * return:void
  817. */
  818. static inline void dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(uint32_t *tag_buf)
  819. {
  820. htt_tx_hwq_mu_mimo_cmn_stats_tlv *dp_stats_buf =
  821. (htt_tx_hwq_mu_mimo_cmn_stats_tlv *)tag_buf;
  822. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_CMN_STATS_TLV:");
  823. DP_TRACE_STATS(FATAL, "mac_id__hwq_id__word = %d\n",
  824. dp_stats_buf->mac_id__hwq_id__word);
  825. }
  826. /*
  827. * dp_print_tx_hwq_stats_cmn_tlv: display htt_tx_hwq_stats_cmn_tlv
  828. * @tag_buf: buffer containing the tlv htt_tx_hwq_stats_cmn_tlv
  829. *
  830. * return:void
  831. */
  832. static inline void dp_print_tx_hwq_stats_cmn_tlv(uint32_t *tag_buf)
  833. {
  834. htt_tx_hwq_stats_cmn_tlv *dp_stats_buf =
  835. (htt_tx_hwq_stats_cmn_tlv *)tag_buf;
  836. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_STATS_CMN_TLV:");
  837. DP_TRACE_STATS(FATAL, "mac_id__hwq_id__word = %d",
  838. dp_stats_buf->mac_id__hwq_id__word);
  839. DP_TRACE_STATS(FATAL, "xretry = %d",
  840. dp_stats_buf->xretry);
  841. DP_TRACE_STATS(FATAL, "underrun_cnt = %d",
  842. dp_stats_buf->underrun_cnt);
  843. DP_TRACE_STATS(FATAL, "flush_cnt = %d",
  844. dp_stats_buf->flush_cnt);
  845. DP_TRACE_STATS(FATAL, "filt_cnt = %d",
  846. dp_stats_buf->filt_cnt);
  847. DP_TRACE_STATS(FATAL, "null_mpdu_bmap = %d",
  848. dp_stats_buf->null_mpdu_bmap);
  849. DP_TRACE_STATS(FATAL, "user_ack_failure = %d",
  850. dp_stats_buf->user_ack_failure);
  851. DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
  852. dp_stats_buf->ack_tlv_proc);
  853. DP_TRACE_STATS(FATAL, "sched_id_proc = %d",
  854. dp_stats_buf->sched_id_proc);
  855. DP_TRACE_STATS(FATAL, "null_mpdu_tx_count = %d",
  856. dp_stats_buf->null_mpdu_tx_count);
  857. DP_TRACE_STATS(FATAL, "mpdu_bmap_not_recvd = %d",
  858. dp_stats_buf->mpdu_bmap_not_recvd);
  859. DP_TRACE_STATS(FATAL, "num_bar = %d",
  860. dp_stats_buf->num_bar);
  861. DP_TRACE_STATS(FATAL, "rts = %d",
  862. dp_stats_buf->rts);
  863. DP_TRACE_STATS(FATAL, "cts2self = %d",
  864. dp_stats_buf->cts2self);
  865. DP_TRACE_STATS(FATAL, "qos_null = %d",
  866. dp_stats_buf->qos_null);
  867. DP_TRACE_STATS(FATAL, "mpdu_tried_cnt = %d",
  868. dp_stats_buf->mpdu_tried_cnt);
  869. DP_TRACE_STATS(FATAL, "mpdu_queued_cnt = %d",
  870. dp_stats_buf->mpdu_queued_cnt);
  871. DP_TRACE_STATS(FATAL, "mpdu_ack_fail_cnt = %d",
  872. dp_stats_buf->mpdu_ack_fail_cnt);
  873. DP_TRACE_STATS(FATAL, "mpdu_filt_cnt = %d",
  874. dp_stats_buf->mpdu_filt_cnt);
  875. DP_TRACE_STATS(FATAL, "false_mpdu_ack_count = %d\n",
  876. dp_stats_buf->false_mpdu_ack_count);
  877. }
  878. /*
  879. * dp_print_tx_hwq_difs_latency_stats_tlv_v: display
  880. * htt_tx_hwq_difs_latency_stats_tlv_v
  881. * @tag_buf: buffer containing the tlv htt_tx_hwq_difs_latency_stats_tlv_v
  882. *
  883. *return:void
  884. */
  885. static inline void dp_print_tx_hwq_difs_latency_stats_tlv_v(uint32_t *tag_buf)
  886. {
  887. htt_tx_hwq_difs_latency_stats_tlv_v *dp_stats_buf =
  888. (htt_tx_hwq_difs_latency_stats_tlv_v *)tag_buf;
  889. uint8_t i;
  890. uint16_t index = 0;
  891. char difs_latency_hist[DP_MAX_STRING_LEN];
  892. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  893. tag_len = qdf_min(tag_len,
  894. (uint32_t)HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS) - 1;
  895. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_DIFS_LATENCY_STATS_TLV_V:");
  896. DP_TRACE_STATS(FATAL, "hist_intvl = %d",
  897. dp_stats_buf->hist_intvl);
  898. for (i = 0; i < tag_len; i++) {
  899. index += qdf_snprint(&difs_latency_hist[index],
  900. DP_MAX_STRING_LEN - index,
  901. " %d:%d,", i,
  902. dp_stats_buf->difs_latency_hist[i]);
  903. }
  904. DP_TRACE_STATS(FATAL, "difs_latency_hist = %s\n", difs_latency_hist);
  905. }
  906. /*
  907. * dp_print_tx_hwq_cmd_result_stats_tlv_v: display htt_tx_hwq_cmd_result_stats
  908. * @tag_buf: buffer containing the tlv htt_tx_hwq_cmd_result_stats_tlv_v
  909. *
  910. * return:void
  911. */
  912. static inline void dp_print_tx_hwq_cmd_result_stats_tlv_v(uint32_t *tag_buf)
  913. {
  914. htt_tx_hwq_cmd_result_stats_tlv_v *dp_stats_buf =
  915. (htt_tx_hwq_cmd_result_stats_tlv_v *)tag_buf;
  916. uint8_t i;
  917. uint16_t index = 0;
  918. char cmd_result[DP_MAX_STRING_LEN];
  919. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  920. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_CMD_RESULT_STATS);
  921. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_CMD_RESULT_STATS_TLV_V:");
  922. for (i = 0; i < tag_len; i++) {
  923. index += qdf_snprint(&cmd_result[index],
  924. DP_MAX_STRING_LEN - index,
  925. " %d:%d,", i, dp_stats_buf->cmd_result[i]);
  926. }
  927. DP_TRACE_STATS(FATAL, "cmd_result = %s ", cmd_result);
  928. }
  929. /*
  930. * dp_print_tx_hwq_cmd_stall_stats_tlv_v: display htt_tx_hwq_cmd_stall_stats_tlv
  931. * @tag_buf: buffer containing the tlv htt_tx_hwq_cmd_stall_stats_tlv_v
  932. *
  933. * return:void
  934. */
  935. static inline void dp_print_tx_hwq_cmd_stall_stats_tlv_v(uint32_t *tag_buf)
  936. {
  937. htt_tx_hwq_cmd_stall_stats_tlv_v *dp_stats_buf =
  938. (htt_tx_hwq_cmd_stall_stats_tlv_v *)tag_buf;
  939. uint8_t i;
  940. uint16_t index = 0;
  941. char cmd_stall_status[DP_MAX_STRING_LEN];
  942. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  943. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_CMD_STALL_STATS);
  944. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_CMD_STALL_STATS_TLV_V:");
  945. for (i = 0; i < tag_len; i++) {
  946. index += qdf_snprint(&cmd_stall_status[index],
  947. DP_MAX_STRING_LEN - index,
  948. " %d:%d,", i,
  949. dp_stats_buf->cmd_stall_status[i]);
  950. }
  951. DP_TRACE_STATS(FATAL, "cmd_stall_status = %s\n", cmd_stall_status);
  952. }
  953. /*
  954. * dp_print_tx_hwq_fes_result_stats_tlv_v: display htt_tx_hwq_fes_result_stats
  955. * @tag_buf: buffer containing the tlv htt_tx_hwq_fes_result_stats_tlv_v
  956. *
  957. * return:void
  958. */
  959. static inline void dp_print_tx_hwq_fes_result_stats_tlv_v(uint32_t *tag_buf)
  960. {
  961. htt_tx_hwq_fes_result_stats_tlv_v *dp_stats_buf =
  962. (htt_tx_hwq_fes_result_stats_tlv_v *)tag_buf;
  963. uint8_t i;
  964. uint16_t index = 0;
  965. char fes_result[DP_MAX_STRING_LEN];
  966. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  967. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_FES_RESULT_STATS);
  968. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_FES_RESULT_STATS_TLV_V:");
  969. for (i = 0; i < tag_len; i++) {
  970. index += qdf_snprint(&fes_result[index],
  971. DP_MAX_STRING_LEN - index,
  972. " %d:%d,", i, dp_stats_buf->fes_result[i]);
  973. }
  974. DP_TRACE_STATS(FATAL, "fes_result = %s ", fes_result);
  975. }
  976. /*
  977. * dp_print_tx_selfgen_cmn_stats_tlv: display htt_tx_selfgen_cmn_stats_tlv
  978. * @tag_buf: buffer containing the tlv htt_tx_selfgen_cmn_stats_tlv
  979. *
  980. * return:void
  981. */
  982. static inline void dp_print_tx_selfgen_cmn_stats_tlv(uint32_t *tag_buf)
  983. {
  984. htt_tx_selfgen_cmn_stats_tlv *dp_stats_buf =
  985. (htt_tx_selfgen_cmn_stats_tlv *)tag_buf;
  986. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_CMN_STATS_TLV:");
  987. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  988. dp_stats_buf->mac_id__word);
  989. DP_TRACE_STATS(FATAL, "su_bar = %d",
  990. dp_stats_buf->su_bar);
  991. DP_TRACE_STATS(FATAL, "rts = %d",
  992. dp_stats_buf->rts);
  993. DP_TRACE_STATS(FATAL, "cts2self = %d",
  994. dp_stats_buf->cts2self);
  995. DP_TRACE_STATS(FATAL, "qos_null = %d",
  996. dp_stats_buf->qos_null);
  997. DP_TRACE_STATS(FATAL, "delayed_bar_1 = %d",
  998. dp_stats_buf->delayed_bar_1);
  999. DP_TRACE_STATS(FATAL, "delayed_bar_2 = %d",
  1000. dp_stats_buf->delayed_bar_2);
  1001. DP_TRACE_STATS(FATAL, "delayed_bar_3 = %d",
  1002. dp_stats_buf->delayed_bar_3);
  1003. DP_TRACE_STATS(FATAL, "delayed_bar_4 = %d",
  1004. dp_stats_buf->delayed_bar_4);
  1005. DP_TRACE_STATS(FATAL, "delayed_bar_5 = %d",
  1006. dp_stats_buf->delayed_bar_5);
  1007. DP_TRACE_STATS(FATAL, "delayed_bar_6 = %d",
  1008. dp_stats_buf->delayed_bar_6);
  1009. DP_TRACE_STATS(FATAL, "delayed_bar_7 = %d\n",
  1010. dp_stats_buf->delayed_bar_7);
  1011. }
  1012. /*
  1013. * dp_print_tx_selfgen_ac_stats_tlv: display htt_tx_selfgen_ac_stats_tlv
  1014. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ac_stats_tlv
  1015. *
  1016. * return:void
  1017. */
  1018. static inline void dp_print_tx_selfgen_ac_stats_tlv(uint32_t *tag_buf)
  1019. {
  1020. htt_tx_selfgen_ac_stats_tlv *dp_stats_buf =
  1021. (htt_tx_selfgen_ac_stats_tlv *)tag_buf;
  1022. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AC_STATS_TLV:");
  1023. DP_TRACE_STATS(FATAL, "ac_su_ndpa = %d",
  1024. dp_stats_buf->ac_su_ndpa);
  1025. DP_TRACE_STATS(FATAL, "ac_su_ndp = %d",
  1026. dp_stats_buf->ac_su_ndp);
  1027. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndpa = %d",
  1028. dp_stats_buf->ac_mu_mimo_ndpa);
  1029. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndp = %d",
  1030. dp_stats_buf->ac_mu_mimo_ndp);
  1031. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_1 = %d",
  1032. dp_stats_buf->ac_mu_mimo_brpoll_1);
  1033. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_2 = %d",
  1034. dp_stats_buf->ac_mu_mimo_brpoll_2);
  1035. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_3 = %d\n",
  1036. dp_stats_buf->ac_mu_mimo_brpoll_3);
  1037. }
  1038. /*
  1039. * dp_print_tx_selfgen_ax_stats_tlv: display htt_tx_selfgen_ax_stats_tlv
  1040. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ax_stats_tlv
  1041. *
  1042. * return:void
  1043. */
  1044. static inline void dp_print_tx_selfgen_ax_stats_tlv(uint32_t *tag_buf)
  1045. {
  1046. htt_tx_selfgen_ax_stats_tlv *dp_stats_buf =
  1047. (htt_tx_selfgen_ax_stats_tlv *)tag_buf;
  1048. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AX_STATS_TLV:");
  1049. DP_TRACE_STATS(FATAL, "ax_su_ndpa = %d",
  1050. dp_stats_buf->ax_su_ndpa);
  1051. DP_TRACE_STATS(FATAL, "ax_su_ndp = %d",
  1052. dp_stats_buf->ax_su_ndp);
  1053. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndpa = %d",
  1054. dp_stats_buf->ax_mu_mimo_ndpa);
  1055. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndp = %d",
  1056. dp_stats_buf->ax_mu_mimo_ndp);
  1057. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_1 = %d",
  1058. dp_stats_buf->ax_mu_mimo_brpoll_1);
  1059. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_2 = %d",
  1060. dp_stats_buf->ax_mu_mimo_brpoll_2);
  1061. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_3 = %d",
  1062. dp_stats_buf->ax_mu_mimo_brpoll_3);
  1063. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_4 = %d",
  1064. dp_stats_buf->ax_mu_mimo_brpoll_4);
  1065. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_5 = %d",
  1066. dp_stats_buf->ax_mu_mimo_brpoll_5);
  1067. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_6 = %d",
  1068. dp_stats_buf->ax_mu_mimo_brpoll_6);
  1069. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_7 = %d",
  1070. dp_stats_buf->ax_mu_mimo_brpoll_7);
  1071. DP_TRACE_STATS(FATAL, "ax_basic_trigger = %d",
  1072. dp_stats_buf->ax_basic_trigger);
  1073. DP_TRACE_STATS(FATAL, "ax_bsr_trigger = %d",
  1074. dp_stats_buf->ax_bsr_trigger);
  1075. DP_TRACE_STATS(FATAL, "ax_mu_bar_trigger = %d",
  1076. dp_stats_buf->ax_mu_bar_trigger);
  1077. DP_TRACE_STATS(FATAL, "ax_mu_rts_trigger = %d\n",
  1078. dp_stats_buf->ax_mu_rts_trigger);
  1079. }
  1080. /*
  1081. * dp_print_tx_selfgen_ac_err_stats_tlv: display htt_tx_selfgen_ac_err_stats_tlv
  1082. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ac_err_stats_tlv
  1083. *
  1084. * return:void
  1085. */
  1086. static inline void dp_print_tx_selfgen_ac_err_stats_tlv(uint32_t *tag_buf)
  1087. {
  1088. htt_tx_selfgen_ac_err_stats_tlv *dp_stats_buf =
  1089. (htt_tx_selfgen_ac_err_stats_tlv *)tag_buf;
  1090. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AC_ERR_STATS_TLV:");
  1091. DP_TRACE_STATS(FATAL, "ac_su_ndp_err = %d",
  1092. dp_stats_buf->ac_su_ndp_err);
  1093. DP_TRACE_STATS(FATAL, "ac_su_ndpa_err = %d",
  1094. dp_stats_buf->ac_su_ndpa_err);
  1095. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndpa_err = %d",
  1096. dp_stats_buf->ac_mu_mimo_ndpa_err);
  1097. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndp_err = %d",
  1098. dp_stats_buf->ac_mu_mimo_ndp_err);
  1099. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp1_err = %d",
  1100. dp_stats_buf->ac_mu_mimo_brp1_err);
  1101. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp2_err = %d",
  1102. dp_stats_buf->ac_mu_mimo_brp2_err);
  1103. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp3_err = %d\n",
  1104. dp_stats_buf->ac_mu_mimo_brp3_err);
  1105. }
  1106. /*
  1107. * dp_print_tx_selfgen_ax_err_stats_tlv: display htt_tx_selfgen_ax_err_stats_tlv
  1108. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ax_err_stats_tlv
  1109. *
  1110. * return:void
  1111. */
  1112. static inline void dp_print_tx_selfgen_ax_err_stats_tlv(uint32_t *tag_buf)
  1113. {
  1114. htt_tx_selfgen_ax_err_stats_tlv *dp_stats_buf =
  1115. (htt_tx_selfgen_ax_err_stats_tlv *)tag_buf;
  1116. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AX_ERR_STATS_TLV:");
  1117. DP_TRACE_STATS(FATAL, "ax_su_ndp_err = %d",
  1118. dp_stats_buf->ax_su_ndp_err);
  1119. DP_TRACE_STATS(FATAL, "ax_su_ndpa_err = %d",
  1120. dp_stats_buf->ax_su_ndpa_err);
  1121. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndpa_err = %d",
  1122. dp_stats_buf->ax_mu_mimo_ndpa_err);
  1123. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndp_err = %d",
  1124. dp_stats_buf->ax_mu_mimo_ndp_err);
  1125. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp1_err = %d",
  1126. dp_stats_buf->ax_mu_mimo_brp1_err);
  1127. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp2_err = %d",
  1128. dp_stats_buf->ax_mu_mimo_brp2_err);
  1129. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp3_err = %d",
  1130. dp_stats_buf->ax_mu_mimo_brp3_err);
  1131. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp4_err = %d",
  1132. dp_stats_buf->ax_mu_mimo_brp4_err);
  1133. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp5_err = %d",
  1134. dp_stats_buf->ax_mu_mimo_brp5_err);
  1135. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp6_err = %d",
  1136. dp_stats_buf->ax_mu_mimo_brp6_err);
  1137. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp7_err = %d",
  1138. dp_stats_buf->ax_mu_mimo_brp7_err);
  1139. DP_TRACE_STATS(FATAL, "ax_basic_trigger_err = %d",
  1140. dp_stats_buf->ax_basic_trigger_err);
  1141. DP_TRACE_STATS(FATAL, "ax_bsr_trigger_err = %d",
  1142. dp_stats_buf->ax_bsr_trigger_err);
  1143. DP_TRACE_STATS(FATAL, "ax_mu_bar_trigger_err = %d",
  1144. dp_stats_buf->ax_mu_bar_trigger_err);
  1145. DP_TRACE_STATS(FATAL, "ax_mu_rts_trigger_err = %d\n",
  1146. dp_stats_buf->ax_mu_rts_trigger_err);
  1147. }
  1148. /*
  1149. * dp_print_tx_pdev_mu_mimo_sch_stats_tlv: display htt_tx_pdev_mu_mimo_sch_stats
  1150. * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_sch_stats_tlv
  1151. *
  1152. * return:void
  1153. */
  1154. static inline void dp_print_tx_pdev_mu_mimo_sch_stats_tlv(uint32_t *tag_buf)
  1155. {
  1156. htt_tx_pdev_mu_mimo_sch_stats_tlv *dp_stats_buf =
  1157. (htt_tx_pdev_mu_mimo_sch_stats_tlv *)tag_buf;
  1158. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_SCH_STATS_TLV:");
  1159. DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d",
  1160. dp_stats_buf->mu_mimo_sch_posted);
  1161. DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d",
  1162. dp_stats_buf->mu_mimo_sch_failed);
  1163. DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n",
  1164. dp_stats_buf->mu_mimo_ppdu_posted);
  1165. }
  1166. /*
  1167. * dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv: display
  1168. * htt_tx_pdev_mu_mimo_mpdu_stats_tlv
  1169. * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_mpdu_stats_tlv
  1170. *
  1171. * return:void
  1172. */
  1173. static inline void dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf)
  1174. {
  1175. htt_tx_pdev_mu_mimo_mpdu_stats_tlv *dp_stats_buf =
  1176. (htt_tx_pdev_mu_mimo_mpdu_stats_tlv *)tag_buf;
  1177. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_MPDU_STATS_TLV:");
  1178. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d",
  1179. dp_stats_buf->mu_mimo_mpdus_queued_usr);
  1180. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d",
  1181. dp_stats_buf->mu_mimo_mpdus_tried_usr);
  1182. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d",
  1183. dp_stats_buf->mu_mimo_mpdus_failed_usr);
  1184. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d",
  1185. dp_stats_buf->mu_mimo_mpdus_requeued_usr);
  1186. DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d",
  1187. dp_stats_buf->mu_mimo_err_no_ba_usr);
  1188. DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d",
  1189. dp_stats_buf->mu_mimo_mpdu_underrun_usr);
  1190. DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n",
  1191. dp_stats_buf->mu_mimo_ampdu_underrun_usr);
  1192. }
  1193. /*
  1194. * dp_print_sched_txq_cmd_posted_tlv_v: display htt_sched_txq_cmd_posted_tlv_v
  1195. * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_posted_tlv_v
  1196. *
  1197. * return:void
  1198. */
  1199. static inline void dp_print_sched_txq_cmd_posted_tlv_v(uint32_t *tag_buf)
  1200. {
  1201. htt_sched_txq_cmd_posted_tlv_v *dp_stats_buf =
  1202. (htt_sched_txq_cmd_posted_tlv_v *)tag_buf;
  1203. uint8_t i;
  1204. uint16_t index = 0;
  1205. char sched_cmd_posted[DP_MAX_STRING_LEN];
  1206. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1207. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX);
  1208. DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_POSTED_TLV_V:");
  1209. for (i = 0; i < tag_len; i++) {
  1210. index += qdf_snprint(&sched_cmd_posted[index],
  1211. DP_MAX_STRING_LEN - index,
  1212. " %d:%d,", i,
  1213. dp_stats_buf->sched_cmd_posted[i]);
  1214. }
  1215. DP_TRACE_STATS(FATAL, "sched_cmd_posted = %s\n", sched_cmd_posted);
  1216. }
  1217. /*
  1218. * dp_print_sched_txq_cmd_reaped_tlv_v: display htt_sched_txq_cmd_reaped_tlv_v
  1219. * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_reaped_tlv_v
  1220. *
  1221. * return:void
  1222. */
  1223. static inline void dp_print_sched_txq_cmd_reaped_tlv_v(uint32_t *tag_buf)
  1224. {
  1225. htt_sched_txq_cmd_reaped_tlv_v *dp_stats_buf =
  1226. (htt_sched_txq_cmd_reaped_tlv_v *)tag_buf;
  1227. uint8_t i;
  1228. uint16_t index = 0;
  1229. char sched_cmd_reaped[DP_MAX_STRING_LEN];
  1230. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1231. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX);
  1232. DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_REAPED_TLV_V:");
  1233. for (i = 0; i < tag_len; i++) {
  1234. index += qdf_snprint(&sched_cmd_reaped[index],
  1235. DP_MAX_STRING_LEN - index,
  1236. " %d:%d,", i,
  1237. dp_stats_buf->sched_cmd_reaped[i]);
  1238. }
  1239. DP_TRACE_STATS(FATAL, "sched_cmd_reaped = %s\n", sched_cmd_reaped);
  1240. }
  1241. /*
  1242. * dp_print_tx_pdev_stats_sched_per_txq_tlv: display
  1243. * htt_tx_pdev_stats_sched_per_txq_tlv
  1244. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_sched_per_txq_tlv
  1245. *
  1246. * return:void
  1247. */
  1248. static inline void dp_print_tx_pdev_stats_sched_per_txq_tlv(uint32_t *tag_buf)
  1249. {
  1250. htt_tx_pdev_stats_sched_per_txq_tlv *dp_stats_buf =
  1251. (htt_tx_pdev_stats_sched_per_txq_tlv *)tag_buf;
  1252. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TLV:");
  1253. DP_TRACE_STATS(FATAL, "mac_id__txq_id__word = %d",
  1254. dp_stats_buf->mac_id__txq_id__word);
  1255. DP_TRACE_STATS(FATAL, "sched_policy = %d",
  1256. dp_stats_buf->sched_policy);
  1257. DP_TRACE_STATS(FATAL, "last_sched_cmd_posted_timestamp = %d",
  1258. dp_stats_buf->last_sched_cmd_posted_timestamp);
  1259. DP_TRACE_STATS(FATAL, "last_sched_cmd_compl_timestamp = %d",
  1260. dp_stats_buf->last_sched_cmd_compl_timestamp);
  1261. DP_TRACE_STATS(FATAL, "sched_2_tac_lwm_count = %d",
  1262. dp_stats_buf->sched_2_tac_lwm_count);
  1263. DP_TRACE_STATS(FATAL, "sched_2_tac_ring_full = %d",
  1264. dp_stats_buf->sched_2_tac_ring_full);
  1265. DP_TRACE_STATS(FATAL, "sched_cmd_post_failure = %d",
  1266. dp_stats_buf->sched_cmd_post_failure);
  1267. DP_TRACE_STATS(FATAL, "num_active_tids = %d",
  1268. dp_stats_buf->num_active_tids);
  1269. DP_TRACE_STATS(FATAL, "num_ps_schedules = %d",
  1270. dp_stats_buf->num_ps_schedules);
  1271. DP_TRACE_STATS(FATAL, "sched_cmds_pending = %d",
  1272. dp_stats_buf->sched_cmds_pending);
  1273. DP_TRACE_STATS(FATAL, "num_tid_register = %d",
  1274. dp_stats_buf->num_tid_register);
  1275. DP_TRACE_STATS(FATAL, "num_tid_unregister = %d",
  1276. dp_stats_buf->num_tid_unregister);
  1277. DP_TRACE_STATS(FATAL, "num_qstats_queried = %d",
  1278. dp_stats_buf->num_qstats_queried);
  1279. DP_TRACE_STATS(FATAL, "qstats_update_pending = %d",
  1280. dp_stats_buf->qstats_update_pending);
  1281. DP_TRACE_STATS(FATAL, "last_qstats_query_timestamp = %d",
  1282. dp_stats_buf->last_qstats_query_timestamp);
  1283. DP_TRACE_STATS(FATAL, "num_tqm_cmdq_full = %d",
  1284. dp_stats_buf->num_tqm_cmdq_full);
  1285. DP_TRACE_STATS(FATAL, "num_de_sched_algo_trigger = %d",
  1286. dp_stats_buf->num_de_sched_algo_trigger);
  1287. DP_TRACE_STATS(FATAL, "num_rt_sched_algo_trigger = %d",
  1288. dp_stats_buf->num_rt_sched_algo_trigger);
  1289. DP_TRACE_STATS(FATAL, "num_tqm_sched_algo_trigger = %d",
  1290. dp_stats_buf->num_tqm_sched_algo_trigger);
  1291. DP_TRACE_STATS(FATAL, "notify_sched = %d\n",
  1292. dp_stats_buf->notify_sched);
  1293. }
  1294. /*
  1295. * dp_print_stats_tx_sched_cmn_tlv: display htt_stats_tx_sched_cmn_tlv
  1296. * @tag_buf: buffer containing the tlv htt_stats_tx_sched_cmn_tlv
  1297. *
  1298. * return:void
  1299. */
  1300. static inline void dp_print_stats_tx_sched_cmn_tlv(uint32_t *tag_buf)
  1301. {
  1302. htt_stats_tx_sched_cmn_tlv *dp_stats_buf =
  1303. (htt_stats_tx_sched_cmn_tlv *)tag_buf;
  1304. DP_TRACE_STATS(FATAL, "HTT_STATS_TX_SCHED_CMN_TLV:");
  1305. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1306. dp_stats_buf->mac_id__word);
  1307. DP_TRACE_STATS(FATAL, "current_timestamp = %d\n",
  1308. dp_stats_buf->current_timestamp);
  1309. }
  1310. /*
  1311. * dp_print_tx_tqm_gen_mpdu_stats_tlv_v: display htt_tx_tqm_gen_mpdu_stats_tlv_v
  1312. * @tag_buf: buffer containing the tlv htt_tx_tqm_gen_mpdu_stats_tlv_v
  1313. *
  1314. * return:void
  1315. */
  1316. static inline void dp_print_tx_tqm_gen_mpdu_stats_tlv_v(uint32_t *tag_buf)
  1317. {
  1318. htt_tx_tqm_gen_mpdu_stats_tlv_v *dp_stats_buf =
  1319. (htt_tx_tqm_gen_mpdu_stats_tlv_v *)tag_buf;
  1320. uint8_t i;
  1321. uint16_t index = 0;
  1322. char gen_mpdu_end_reason[DP_MAX_STRING_LEN];
  1323. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1324. tag_len = qdf_min(tag_len,
  1325. (uint32_t)HTT_TX_TQM_MAX_GEN_MPDU_END_REASON);
  1326. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_GEN_MPDU_STATS_TLV_V:");
  1327. for (i = 0; i < tag_len; i++) {
  1328. index += qdf_snprint(&gen_mpdu_end_reason[index],
  1329. DP_MAX_STRING_LEN - index,
  1330. " %d:%d,", i,
  1331. dp_stats_buf->gen_mpdu_end_reason[i]);
  1332. }
  1333. DP_TRACE_STATS(FATAL, "gen_mpdu_end_reason = %s\n", gen_mpdu_end_reason);
  1334. }
  1335. /*
  1336. * dp_print_tx_tqm_list_mpdu_stats_tlv_v: display htt_tx_tqm_list_mpdu_stats_tlv
  1337. * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_stats_tlv_v
  1338. *
  1339. * return:void
  1340. */
  1341. static inline void dp_print_tx_tqm_list_mpdu_stats_tlv_v(uint32_t *tag_buf)
  1342. {
  1343. htt_tx_tqm_list_mpdu_stats_tlv_v *dp_stats_buf =
  1344. (htt_tx_tqm_list_mpdu_stats_tlv_v *)tag_buf;
  1345. uint8_t i;
  1346. uint16_t index = 0;
  1347. char list_mpdu_end_reason[DP_MAX_STRING_LEN];
  1348. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1349. tag_len = qdf_min(tag_len,
  1350. (uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_END_REASON);
  1351. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_STATS_TLV_V:");
  1352. for (i = 0; i < tag_len; i++) {
  1353. index += qdf_snprint(&list_mpdu_end_reason[index],
  1354. DP_MAX_STRING_LEN - index,
  1355. " %d:%d,", i,
  1356. dp_stats_buf->list_mpdu_end_reason[i]);
  1357. }
  1358. DP_TRACE_STATS(FATAL, "list_mpdu_end_reason = %s\n",
  1359. list_mpdu_end_reason);
  1360. }
  1361. /*
  1362. * dp_print_tx_tqm_list_mpdu_cnt_tlv_v: display htt_tx_tqm_list_mpdu_cnt_tlv_v
  1363. * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_cnt_tlv_v
  1364. *
  1365. * return:void
  1366. */
  1367. static inline void dp_print_tx_tqm_list_mpdu_cnt_tlv_v(uint32_t *tag_buf)
  1368. {
  1369. htt_tx_tqm_list_mpdu_cnt_tlv_v *dp_stats_buf =
  1370. (htt_tx_tqm_list_mpdu_cnt_tlv_v *)tag_buf;
  1371. uint8_t i;
  1372. uint16_t index = 0;
  1373. char list_mpdu_cnt_hist[DP_MAX_STRING_LEN];
  1374. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1375. tag_len = qdf_min(tag_len,
  1376. (uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS);
  1377. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_CNT_TLV_V:");
  1378. for (i = 0; i < tag_len; i++) {
  1379. index += qdf_snprint(&list_mpdu_cnt_hist[index],
  1380. DP_MAX_STRING_LEN - index,
  1381. " %d:%d,", i,
  1382. dp_stats_buf->list_mpdu_cnt_hist[i]);
  1383. }
  1384. DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist = %s\n", list_mpdu_cnt_hist);
  1385. }
  1386. /*
  1387. * dp_print_tx_tqm_pdev_stats_tlv_v: display htt_tx_tqm_pdev_stats_tlv_v
  1388. * @tag_buf: buffer containing the tlv htt_tx_tqm_pdev_stats_tlv_v
  1389. *
  1390. * return:void
  1391. */
  1392. static inline void dp_print_tx_tqm_pdev_stats_tlv_v(uint32_t *tag_buf)
  1393. {
  1394. htt_tx_tqm_pdev_stats_tlv_v *dp_stats_buf =
  1395. (htt_tx_tqm_pdev_stats_tlv_v *)tag_buf;
  1396. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_PDEV_STATS_TLV_V:");
  1397. DP_TRACE_STATS(FATAL, "msdu_count = %d",
  1398. dp_stats_buf->msdu_count);
  1399. DP_TRACE_STATS(FATAL, "mpdu_count = %d",
  1400. dp_stats_buf->mpdu_count);
  1401. DP_TRACE_STATS(FATAL, "remove_msdu = %d",
  1402. dp_stats_buf->remove_msdu);
  1403. DP_TRACE_STATS(FATAL, "remove_mpdu = %d",
  1404. dp_stats_buf->remove_mpdu);
  1405. DP_TRACE_STATS(FATAL, "remove_msdu_ttl = %d",
  1406. dp_stats_buf->remove_msdu_ttl);
  1407. DP_TRACE_STATS(FATAL, "send_bar = %d",
  1408. dp_stats_buf->send_bar);
  1409. DP_TRACE_STATS(FATAL, "bar_sync = %d",
  1410. dp_stats_buf->bar_sync);
  1411. DP_TRACE_STATS(FATAL, "notify_mpdu = %d",
  1412. dp_stats_buf->notify_mpdu);
  1413. DP_TRACE_STATS(FATAL, "sync_cmd = %d",
  1414. dp_stats_buf->sync_cmd);
  1415. DP_TRACE_STATS(FATAL, "write_cmd = %d",
  1416. dp_stats_buf->write_cmd);
  1417. DP_TRACE_STATS(FATAL, "hwsch_trigger = %d",
  1418. dp_stats_buf->hwsch_trigger);
  1419. DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
  1420. dp_stats_buf->ack_tlv_proc);
  1421. DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d",
  1422. dp_stats_buf->gen_mpdu_cmd);
  1423. DP_TRACE_STATS(FATAL, "gen_list_cmd = %d",
  1424. dp_stats_buf->gen_list_cmd);
  1425. DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d",
  1426. dp_stats_buf->remove_mpdu_cmd);
  1427. DP_TRACE_STATS(FATAL, "remove_mpdu_tried_cmd = %d",
  1428. dp_stats_buf->remove_mpdu_tried_cmd);
  1429. DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d",
  1430. dp_stats_buf->mpdu_queue_stats_cmd);
  1431. DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d",
  1432. dp_stats_buf->mpdu_head_info_cmd);
  1433. DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d",
  1434. dp_stats_buf->msdu_flow_stats_cmd);
  1435. DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d",
  1436. dp_stats_buf->remove_msdu_cmd);
  1437. DP_TRACE_STATS(FATAL, "remove_msdu_ttl_cmd = %d",
  1438. dp_stats_buf->remove_msdu_ttl_cmd);
  1439. DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d",
  1440. dp_stats_buf->flush_cache_cmd);
  1441. DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d",
  1442. dp_stats_buf->update_mpduq_cmd);
  1443. DP_TRACE_STATS(FATAL, "enqueue = %d",
  1444. dp_stats_buf->enqueue);
  1445. DP_TRACE_STATS(FATAL, "enqueue_notify = %d",
  1446. dp_stats_buf->enqueue_notify);
  1447. DP_TRACE_STATS(FATAL, "notify_mpdu_at_head = %d",
  1448. dp_stats_buf->notify_mpdu_at_head);
  1449. DP_TRACE_STATS(FATAL, "notify_mpdu_state_valid = %d\n",
  1450. dp_stats_buf->notify_mpdu_state_valid);
  1451. }
  1452. /*
  1453. * dp_print_tx_tqm_cmn_stats_tlv: display htt_tx_tqm_cmn_stats_tlv
  1454. * @tag_buf: buffer containing the tlv htt_tx_tqm_cmn_stats_tlv
  1455. *
  1456. * return:void
  1457. */
  1458. static inline void dp_print_tx_tqm_cmn_stats_tlv(uint32_t *tag_buf)
  1459. {
  1460. htt_tx_tqm_cmn_stats_tlv *dp_stats_buf =
  1461. (htt_tx_tqm_cmn_stats_tlv *)tag_buf;
  1462. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMN_STATS_TLV:");
  1463. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1464. dp_stats_buf->mac_id__word);
  1465. DP_TRACE_STATS(FATAL, "max_cmdq_id = %d",
  1466. dp_stats_buf->max_cmdq_id);
  1467. DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist_intvl = %d",
  1468. dp_stats_buf->list_mpdu_cnt_hist_intvl);
  1469. DP_TRACE_STATS(FATAL, "add_msdu = %d",
  1470. dp_stats_buf->add_msdu);
  1471. DP_TRACE_STATS(FATAL, "q_empty = %d",
  1472. dp_stats_buf->q_empty);
  1473. DP_TRACE_STATS(FATAL, "q_not_empty = %d",
  1474. dp_stats_buf->q_not_empty);
  1475. DP_TRACE_STATS(FATAL, "drop_notification = %d",
  1476. dp_stats_buf->drop_notification);
  1477. DP_TRACE_STATS(FATAL, "desc_threshold = %d\n",
  1478. dp_stats_buf->desc_threshold);
  1479. }
  1480. /*
  1481. * dp_print_tx_tqm_error_stats_tlv: display htt_tx_tqm_error_stats_tlv
  1482. * @tag_buf: buffer containing the tlv htt_tx_tqm_error_stats_tlv
  1483. *
  1484. * return:void
  1485. */
  1486. static inline void dp_print_tx_tqm_error_stats_tlv(uint32_t *tag_buf)
  1487. {
  1488. htt_tx_tqm_error_stats_tlv *dp_stats_buf =
  1489. (htt_tx_tqm_error_stats_tlv *)tag_buf;
  1490. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_ERROR_STATS_TLV:");
  1491. DP_TRACE_STATS(FATAL, "q_empty_failure = %d",
  1492. dp_stats_buf->q_empty_failure);
  1493. DP_TRACE_STATS(FATAL, "q_not_empty_failure = %d",
  1494. dp_stats_buf->q_not_empty_failure);
  1495. DP_TRACE_STATS(FATAL, "add_msdu_failure = %d\n",
  1496. dp_stats_buf->add_msdu_failure);
  1497. }
  1498. /*
  1499. * dp_print_tx_tqm_cmdq_status_tlv: display htt_tx_tqm_cmdq_status_tlv
  1500. * @tag_buf: buffer containing the tlv htt_tx_tqm_cmdq_status_tlv
  1501. *
  1502. * return:void
  1503. */
  1504. static inline void dp_print_tx_tqm_cmdq_status_tlv(uint32_t *tag_buf)
  1505. {
  1506. htt_tx_tqm_cmdq_status_tlv *dp_stats_buf =
  1507. (htt_tx_tqm_cmdq_status_tlv *)tag_buf;
  1508. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMDQ_STATUS_TLV:");
  1509. DP_TRACE_STATS(FATAL, "mac_id__cmdq_id__word = %d",
  1510. dp_stats_buf->mac_id__cmdq_id__word);
  1511. DP_TRACE_STATS(FATAL, "sync_cmd = %d",
  1512. dp_stats_buf->sync_cmd);
  1513. DP_TRACE_STATS(FATAL, "write_cmd = %d",
  1514. dp_stats_buf->write_cmd);
  1515. DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d",
  1516. dp_stats_buf->gen_mpdu_cmd);
  1517. DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d",
  1518. dp_stats_buf->mpdu_queue_stats_cmd);
  1519. DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d",
  1520. dp_stats_buf->mpdu_head_info_cmd);
  1521. DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d",
  1522. dp_stats_buf->msdu_flow_stats_cmd);
  1523. DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d",
  1524. dp_stats_buf->remove_mpdu_cmd);
  1525. DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d",
  1526. dp_stats_buf->remove_msdu_cmd);
  1527. DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d",
  1528. dp_stats_buf->flush_cache_cmd);
  1529. DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d",
  1530. dp_stats_buf->update_mpduq_cmd);
  1531. DP_TRACE_STATS(FATAL, "update_msduq_cmd = %d\n",
  1532. dp_stats_buf->update_msduq_cmd);
  1533. }
  1534. /*
  1535. * dp_print_tx_de_eapol_packets_stats_tlv: display htt_tx_de_eapol_packets_stats
  1536. * @tag_buf: buffer containing the tlv htt_tx_de_eapol_packets_stats_tlv
  1537. *
  1538. * return:void
  1539. */
  1540. static inline void dp_print_tx_de_eapol_packets_stats_tlv(uint32_t *tag_buf)
  1541. {
  1542. htt_tx_de_eapol_packets_stats_tlv *dp_stats_buf =
  1543. (htt_tx_de_eapol_packets_stats_tlv *)tag_buf;
  1544. DP_TRACE_STATS(FATAL, "HTT_TX_DE_EAPOL_PACKETS_STATS_TLV:");
  1545. DP_TRACE_STATS(FATAL, "m1_packets = %d",
  1546. dp_stats_buf->m1_packets);
  1547. DP_TRACE_STATS(FATAL, "m2_packets = %d",
  1548. dp_stats_buf->m2_packets);
  1549. DP_TRACE_STATS(FATAL, "m3_packets = %d",
  1550. dp_stats_buf->m3_packets);
  1551. DP_TRACE_STATS(FATAL, "m4_packets = %d",
  1552. dp_stats_buf->m4_packets);
  1553. DP_TRACE_STATS(FATAL, "g1_packets = %d",
  1554. dp_stats_buf->g1_packets);
  1555. DP_TRACE_STATS(FATAL, "g2_packets = %d\n",
  1556. dp_stats_buf->g2_packets);
  1557. }
  1558. /*
  1559. * dp_print_tx_de_classify_failed_stats_tlv: display
  1560. * htt_tx_de_classify_failed_stats_tlv
  1561. * @tag_buf: buffer containing the tlv htt_tx_de_classify_failed_stats_tlv
  1562. *
  1563. * return:void
  1564. */
  1565. static inline void dp_print_tx_de_classify_failed_stats_tlv(uint32_t *tag_buf)
  1566. {
  1567. htt_tx_de_classify_failed_stats_tlv *dp_stats_buf =
  1568. (htt_tx_de_classify_failed_stats_tlv *)tag_buf;
  1569. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_FAILED_STATS_TLV:");
  1570. DP_TRACE_STATS(FATAL, "ap_bss_peer_not_found = %d",
  1571. dp_stats_buf->ap_bss_peer_not_found);
  1572. DP_TRACE_STATS(FATAL, "ap_bcast_mcast_no_peer = %d",
  1573. dp_stats_buf->ap_bcast_mcast_no_peer);
  1574. DP_TRACE_STATS(FATAL, "sta_delete_in_progress = %d",
  1575. dp_stats_buf->sta_delete_in_progress);
  1576. DP_TRACE_STATS(FATAL, "ibss_no_bss_peer = %d",
  1577. dp_stats_buf->ibss_no_bss_peer);
  1578. DP_TRACE_STATS(FATAL, "invaild_vdev_type = %d",
  1579. dp_stats_buf->invaild_vdev_type);
  1580. DP_TRACE_STATS(FATAL, "invalid_ast_peer_entry = %d",
  1581. dp_stats_buf->invalid_ast_peer_entry);
  1582. DP_TRACE_STATS(FATAL, "peer_entry_invalid = %d",
  1583. dp_stats_buf->peer_entry_invalid);
  1584. DP_TRACE_STATS(FATAL, "ethertype_not_ip = %d",
  1585. dp_stats_buf->ethertype_not_ip);
  1586. DP_TRACE_STATS(FATAL, "eapol_lookup_failed = %d",
  1587. dp_stats_buf->eapol_lookup_failed);
  1588. DP_TRACE_STATS(FATAL, "qpeer_not_allow_data = %d",
  1589. dp_stats_buf->qpeer_not_allow_data);
  1590. DP_TRACE_STATS(FATAL, "fse_tid_override = %d\n",
  1591. dp_stats_buf->fse_tid_override);
  1592. }
  1593. /*
  1594. * dp_print_tx_de_classify_stats_tlv: display htt_tx_de_classify_stats_tlv
  1595. * @tag_buf: buffer containing the tlv htt_tx_de_classify_stats_tlv
  1596. *
  1597. * return:void
  1598. */
  1599. static inline void dp_print_tx_de_classify_stats_tlv(uint32_t *tag_buf)
  1600. {
  1601. htt_tx_de_classify_stats_tlv *dp_stats_buf =
  1602. (htt_tx_de_classify_stats_tlv *)tag_buf;
  1603. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATS_TLV:");
  1604. DP_TRACE_STATS(FATAL, "arp_packets = %d",
  1605. dp_stats_buf->arp_packets);
  1606. DP_TRACE_STATS(FATAL, "igmp_packets = %d",
  1607. dp_stats_buf->igmp_packets);
  1608. DP_TRACE_STATS(FATAL, "dhcp_packets = %d",
  1609. dp_stats_buf->dhcp_packets);
  1610. DP_TRACE_STATS(FATAL, "host_inspected = %d",
  1611. dp_stats_buf->host_inspected);
  1612. DP_TRACE_STATS(FATAL, "htt_included = %d",
  1613. dp_stats_buf->htt_included);
  1614. DP_TRACE_STATS(FATAL, "htt_valid_mcs = %d",
  1615. dp_stats_buf->htt_valid_mcs);
  1616. DP_TRACE_STATS(FATAL, "htt_valid_nss = %d",
  1617. dp_stats_buf->htt_valid_nss);
  1618. DP_TRACE_STATS(FATAL, "htt_valid_preamble_type = %d",
  1619. dp_stats_buf->htt_valid_preamble_type);
  1620. DP_TRACE_STATS(FATAL, "htt_valid_chainmask = %d",
  1621. dp_stats_buf->htt_valid_chainmask);
  1622. DP_TRACE_STATS(FATAL, "htt_valid_guard_interval = %d",
  1623. dp_stats_buf->htt_valid_guard_interval);
  1624. DP_TRACE_STATS(FATAL, "htt_valid_retries = %d",
  1625. dp_stats_buf->htt_valid_retries);
  1626. DP_TRACE_STATS(FATAL, "htt_valid_bw_info = %d",
  1627. dp_stats_buf->htt_valid_bw_info);
  1628. DP_TRACE_STATS(FATAL, "htt_valid_power = %d",
  1629. dp_stats_buf->htt_valid_power);
  1630. DP_TRACE_STATS(FATAL, "htt_valid_key_flags = %d",
  1631. dp_stats_buf->htt_valid_key_flags);
  1632. DP_TRACE_STATS(FATAL, "htt_valid_no_encryption = %d",
  1633. dp_stats_buf->htt_valid_no_encryption);
  1634. DP_TRACE_STATS(FATAL, "fse_entry_count = %d",
  1635. dp_stats_buf->fse_entry_count);
  1636. DP_TRACE_STATS(FATAL, "fse_priority_be = %d",
  1637. dp_stats_buf->fse_priority_be);
  1638. DP_TRACE_STATS(FATAL, "fse_priority_high = %d",
  1639. dp_stats_buf->fse_priority_high);
  1640. DP_TRACE_STATS(FATAL, "fse_priority_low = %d",
  1641. dp_stats_buf->fse_priority_low);
  1642. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_be = %d",
  1643. dp_stats_buf->fse_traffic_ptrn_be);
  1644. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_over_sub = %d",
  1645. dp_stats_buf->fse_traffic_ptrn_over_sub);
  1646. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_bursty = %d",
  1647. dp_stats_buf->fse_traffic_ptrn_bursty);
  1648. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_interactive = %d",
  1649. dp_stats_buf->fse_traffic_ptrn_interactive);
  1650. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_periodic = %d",
  1651. dp_stats_buf->fse_traffic_ptrn_periodic);
  1652. DP_TRACE_STATS(FATAL, "fse_hwqueue_alloc = %d",
  1653. dp_stats_buf->fse_hwqueue_alloc);
  1654. DP_TRACE_STATS(FATAL, "fse_hwqueue_created = %d",
  1655. dp_stats_buf->fse_hwqueue_created);
  1656. DP_TRACE_STATS(FATAL, "fse_hwqueue_send_to_host = %d",
  1657. dp_stats_buf->fse_hwqueue_send_to_host);
  1658. DP_TRACE_STATS(FATAL, "mcast_entry = %d",
  1659. dp_stats_buf->mcast_entry);
  1660. DP_TRACE_STATS(FATAL, "bcast_entry = %d\n",
  1661. dp_stats_buf->bcast_entry);
  1662. }
  1663. /*
  1664. * dp_print_tx_de_classify_status_stats_tlv: display
  1665. * htt_tx_de_classify_status_stats_tlv
  1666. * @tag_buf: buffer containing the tlv htt_tx_de_classify_status_stats_tlv
  1667. *
  1668. * return:void
  1669. */
  1670. static inline void dp_print_tx_de_classify_status_stats_tlv(uint32_t *tag_buf)
  1671. {
  1672. htt_tx_de_classify_status_stats_tlv *dp_stats_buf =
  1673. (htt_tx_de_classify_status_stats_tlv *)tag_buf;
  1674. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATUS_STATS_TLV:");
  1675. DP_TRACE_STATS(FATAL, "eok = %d",
  1676. dp_stats_buf->eok);
  1677. DP_TRACE_STATS(FATAL, "classify_done = %d",
  1678. dp_stats_buf->classify_done);
  1679. DP_TRACE_STATS(FATAL, "lookup_failed = %d",
  1680. dp_stats_buf->lookup_failed);
  1681. DP_TRACE_STATS(FATAL, "send_host_dhcp = %d",
  1682. dp_stats_buf->send_host_dhcp);
  1683. DP_TRACE_STATS(FATAL, "send_host_mcast = %d",
  1684. dp_stats_buf->send_host_mcast);
  1685. DP_TRACE_STATS(FATAL, "send_host_unknown_dest = %d",
  1686. dp_stats_buf->send_host_unknown_dest);
  1687. DP_TRACE_STATS(FATAL, "send_host = %d",
  1688. dp_stats_buf->send_host);
  1689. DP_TRACE_STATS(FATAL, "status_invalid = %d\n",
  1690. dp_stats_buf->status_invalid);
  1691. }
  1692. /*
  1693. * dp_print_tx_de_enqueue_packets_stats_tlv: display
  1694. * htt_tx_de_enqueue_packets_stats_tlv
  1695. * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_packets_stats_tlv
  1696. *
  1697. * return:void
  1698. */
  1699. static inline void dp_print_tx_de_enqueue_packets_stats_tlv(uint32_t *tag_buf)
  1700. {
  1701. htt_tx_de_enqueue_packets_stats_tlv *dp_stats_buf =
  1702. (htt_tx_de_enqueue_packets_stats_tlv *)tag_buf;
  1703. DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_PACKETS_STATS_TLV:");
  1704. DP_TRACE_STATS(FATAL, "enqueued_pkts = %d",
  1705. dp_stats_buf->enqueued_pkts);
  1706. DP_TRACE_STATS(FATAL, "to_tqm = %d",
  1707. dp_stats_buf->to_tqm);
  1708. DP_TRACE_STATS(FATAL, "to_tqm_bypass = %d\n",
  1709. dp_stats_buf->to_tqm_bypass);
  1710. }
  1711. /*
  1712. * dp_print_tx_de_enqueue_discard_stats_tlv: display
  1713. * htt_tx_de_enqueue_discard_stats_tlv
  1714. * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_discard_stats_tlv
  1715. *
  1716. * return:void
  1717. */
  1718. static inline void dp_print_tx_de_enqueue_discard_stats_tlv(uint32_t *tag_buf)
  1719. {
  1720. htt_tx_de_enqueue_discard_stats_tlv *dp_stats_buf =
  1721. (htt_tx_de_enqueue_discard_stats_tlv *)tag_buf;
  1722. DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_DISCARD_STATS_TLV:");
  1723. DP_TRACE_STATS(FATAL, "discarded_pkts = %d",
  1724. dp_stats_buf->discarded_pkts);
  1725. DP_TRACE_STATS(FATAL, "local_frames = %d",
  1726. dp_stats_buf->local_frames);
  1727. DP_TRACE_STATS(FATAL, "is_ext_msdu = %d\n",
  1728. dp_stats_buf->is_ext_msdu);
  1729. }
  1730. /*
  1731. * dp_print_tx_de_compl_stats_tlv: display htt_tx_de_compl_stats_tlv
  1732. * @tag_buf: buffer containing the tlv htt_tx_de_compl_stats_tlv
  1733. *
  1734. * return:void
  1735. */
  1736. static inline void dp_print_tx_de_compl_stats_tlv(uint32_t *tag_buf)
  1737. {
  1738. htt_tx_de_compl_stats_tlv *dp_stats_buf =
  1739. (htt_tx_de_compl_stats_tlv *)tag_buf;
  1740. DP_TRACE_STATS(FATAL, "HTT_TX_DE_COMPL_STATS_TLV:");
  1741. DP_TRACE_STATS(FATAL, "tcl_dummy_frame = %d",
  1742. dp_stats_buf->tcl_dummy_frame);
  1743. DP_TRACE_STATS(FATAL, "tqm_dummy_frame = %d",
  1744. dp_stats_buf->tqm_dummy_frame);
  1745. DP_TRACE_STATS(FATAL, "tqm_notify_frame = %d",
  1746. dp_stats_buf->tqm_notify_frame);
  1747. DP_TRACE_STATS(FATAL, "fw2wbm_enq = %d",
  1748. dp_stats_buf->fw2wbm_enq);
  1749. DP_TRACE_STATS(FATAL, "tqm_bypass_frame = %d\n",
  1750. dp_stats_buf->tqm_bypass_frame);
  1751. }
  1752. /*
  1753. * dp_print_tx_de_cmn_stats_tlv: display htt_tx_de_cmn_stats_tlv
  1754. * @tag_buf: buffer containing the tlv htt_tx_de_cmn_stats_tlv
  1755. *
  1756. * return:void
  1757. */
  1758. static inline void dp_print_tx_de_cmn_stats_tlv(uint32_t *tag_buf)
  1759. {
  1760. htt_tx_de_cmn_stats_tlv *dp_stats_buf =
  1761. (htt_tx_de_cmn_stats_tlv *)tag_buf;
  1762. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CMN_STATS_TLV:");
  1763. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1764. dp_stats_buf->mac_id__word);
  1765. DP_TRACE_STATS(FATAL, "tcl2fw_entry_count = %d",
  1766. dp_stats_buf->tcl2fw_entry_count);
  1767. DP_TRACE_STATS(FATAL, "not_to_fw = %d",
  1768. dp_stats_buf->not_to_fw);
  1769. DP_TRACE_STATS(FATAL, "invalid_pdev_vdev_peer = %d",
  1770. dp_stats_buf->invalid_pdev_vdev_peer);
  1771. DP_TRACE_STATS(FATAL, "tcl_res_invalid_addrx = %d",
  1772. dp_stats_buf->tcl_res_invalid_addrx);
  1773. DP_TRACE_STATS(FATAL, "wbm2fw_entry_count = %d",
  1774. dp_stats_buf->wbm2fw_entry_count);
  1775. DP_TRACE_STATS(FATAL, "invalid_pdev = %d\n",
  1776. dp_stats_buf->invalid_pdev);
  1777. }
  1778. /*
  1779. * dp_print_ring_if_stats_tlv: display htt_ring_if_stats_tlv
  1780. * @tag_buf: buffer containing the tlv htt_ring_if_stats_tlv
  1781. *
  1782. * return:void
  1783. */
  1784. static inline void dp_print_ring_if_stats_tlv(uint32_t *tag_buf)
  1785. {
  1786. htt_ring_if_stats_tlv *dp_stats_buf =
  1787. (htt_ring_if_stats_tlv *)tag_buf;
  1788. uint8_t i;
  1789. uint16_t index = 0;
  1790. char low_wm_hit_count[DP_MAX_STRING_LEN];
  1791. char high_wm_hit_count[DP_MAX_STRING_LEN];
  1792. DP_TRACE_STATS(FATAL, "HTT_RING_IF_STATS_TLV:");
  1793. DP_TRACE_STATS(FATAL, "base_addr = %d",
  1794. dp_stats_buf->base_addr);
  1795. DP_TRACE_STATS(FATAL, "elem_size = %d",
  1796. dp_stats_buf->elem_size);
  1797. DP_TRACE_STATS(FATAL, "num_elems__prefetch_tail_idx = %d",
  1798. dp_stats_buf->num_elems__prefetch_tail_idx);
  1799. DP_TRACE_STATS(FATAL, "head_idx__tail_idx = %d",
  1800. dp_stats_buf->head_idx__tail_idx);
  1801. DP_TRACE_STATS(FATAL, "shadow_head_idx__shadow_tail_idx = %d",
  1802. dp_stats_buf->shadow_head_idx__shadow_tail_idx);
  1803. DP_TRACE_STATS(FATAL, "num_tail_incr = %d",
  1804. dp_stats_buf->num_tail_incr);
  1805. DP_TRACE_STATS(FATAL, "lwm_thresh__hwm_thresh = %d",
  1806. dp_stats_buf->lwm_thresh__hwm_thresh);
  1807. DP_TRACE_STATS(FATAL, "overrun_hit_count = %d",
  1808. dp_stats_buf->overrun_hit_count);
  1809. DP_TRACE_STATS(FATAL, "underrun_hit_count = %d",
  1810. dp_stats_buf->underrun_hit_count);
  1811. DP_TRACE_STATS(FATAL, "prod_blockwait_count = %d",
  1812. dp_stats_buf->prod_blockwait_count);
  1813. DP_TRACE_STATS(FATAL, "cons_blockwait_count = %d",
  1814. dp_stats_buf->cons_blockwait_count);
  1815. for (i = 0; i < DP_HTT_LOW_WM_HIT_COUNT_LEN; i++) {
  1816. index += qdf_snprint(&low_wm_hit_count[index],
  1817. DP_MAX_STRING_LEN - index,
  1818. " %d:%d,", i,
  1819. dp_stats_buf->low_wm_hit_count[i]);
  1820. }
  1821. DP_TRACE_STATS(FATAL, "low_wm_hit_count = %s ", low_wm_hit_count);
  1822. index = 0;
  1823. for (i = 0; i < DP_HTT_HIGH_WM_HIT_COUNT_LEN; i++) {
  1824. index += qdf_snprint(&high_wm_hit_count[index],
  1825. DP_MAX_STRING_LEN - index,
  1826. " %d:%d,", i,
  1827. dp_stats_buf->high_wm_hit_count[i]);
  1828. }
  1829. DP_TRACE_STATS(FATAL, "high_wm_hit_count = %s\n", high_wm_hit_count);
  1830. }
  1831. /*
  1832. * dp_print_ring_if_cmn_tlv: display htt_ring_if_cmn_tlv
  1833. * @tag_buf: buffer containing the tlv htt_ring_if_cmn_tlv
  1834. *
  1835. * return:void
  1836. */
  1837. static inline void dp_print_ring_if_cmn_tlv(uint32_t *tag_buf)
  1838. {
  1839. htt_ring_if_cmn_tlv *dp_stats_buf =
  1840. (htt_ring_if_cmn_tlv *)tag_buf;
  1841. DP_TRACE_STATS(FATAL, "HTT_RING_IF_CMN_TLV:");
  1842. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1843. dp_stats_buf->mac_id__word);
  1844. DP_TRACE_STATS(FATAL, "num_records = %d\n",
  1845. dp_stats_buf->num_records);
  1846. }
  1847. /*
  1848. * dp_print_sfm_client_user_tlv_v: display htt_sfm_client_user_tlv_v
  1849. * @tag_buf: buffer containing the tlv htt_sfm_client_user_tlv_v
  1850. *
  1851. * return:void
  1852. */
  1853. static inline void dp_print_sfm_client_user_tlv_v(uint32_t *tag_buf)
  1854. {
  1855. htt_sfm_client_user_tlv_v *dp_stats_buf =
  1856. (htt_sfm_client_user_tlv_v *)tag_buf;
  1857. uint8_t i;
  1858. uint16_t index = 0;
  1859. char dwords_used_by_user_n[DP_MAX_STRING_LEN];
  1860. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1861. DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_USER_TLV_V:");
  1862. for (i = 0; i < tag_len; i++) {
  1863. index += qdf_snprint(&dwords_used_by_user_n[index],
  1864. DP_MAX_STRING_LEN - index,
  1865. " %d:%d,", i,
  1866. dp_stats_buf->dwords_used_by_user_n[i]);
  1867. }
  1868. DP_TRACE_STATS(FATAL, "dwords_used_by_user_n = %s\n",
  1869. dwords_used_by_user_n);
  1870. }
  1871. /*
  1872. * dp_print_sfm_client_tlv: display htt_sfm_client_tlv
  1873. * @tag_buf: buffer containing the tlv htt_sfm_client_tlv
  1874. *
  1875. * return:void
  1876. */
  1877. static inline void dp_print_sfm_client_tlv(uint32_t *tag_buf)
  1878. {
  1879. htt_sfm_client_tlv *dp_stats_buf =
  1880. (htt_sfm_client_tlv *)tag_buf;
  1881. DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_TLV:");
  1882. DP_TRACE_STATS(FATAL, "client_id = %d",
  1883. dp_stats_buf->client_id);
  1884. DP_TRACE_STATS(FATAL, "buf_min = %d",
  1885. dp_stats_buf->buf_min);
  1886. DP_TRACE_STATS(FATAL, "buf_max = %d",
  1887. dp_stats_buf->buf_max);
  1888. DP_TRACE_STATS(FATAL, "buf_busy = %d",
  1889. dp_stats_buf->buf_busy);
  1890. DP_TRACE_STATS(FATAL, "buf_alloc = %d",
  1891. dp_stats_buf->buf_alloc);
  1892. DP_TRACE_STATS(FATAL, "buf_avail = %d",
  1893. dp_stats_buf->buf_avail);
  1894. DP_TRACE_STATS(FATAL, "num_users = %d\n",
  1895. dp_stats_buf->num_users);
  1896. }
  1897. /*
  1898. * dp_print_sfm_cmn_tlv: display htt_sfm_cmn_tlv
  1899. * @tag_buf: buffer containing the tlv htt_sfm_cmn_tlv
  1900. *
  1901. * return:void
  1902. */
  1903. static inline void dp_print_sfm_cmn_tlv(uint32_t *tag_buf)
  1904. {
  1905. htt_sfm_cmn_tlv *dp_stats_buf =
  1906. (htt_sfm_cmn_tlv *)tag_buf;
  1907. DP_TRACE_STATS(FATAL, "HTT_SFM_CMN_TLV:");
  1908. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1909. dp_stats_buf->mac_id__word);
  1910. DP_TRACE_STATS(FATAL, "buf_total = %d",
  1911. dp_stats_buf->buf_total);
  1912. DP_TRACE_STATS(FATAL, "mem_empty = %d",
  1913. dp_stats_buf->mem_empty);
  1914. DP_TRACE_STATS(FATAL, "deallocate_bufs = %d",
  1915. dp_stats_buf->deallocate_bufs);
  1916. DP_TRACE_STATS(FATAL, "num_records = %d\n",
  1917. dp_stats_buf->num_records);
  1918. }
  1919. /*
  1920. * dp_print_sring_stats_tlv: display htt_sring_stats_tlv
  1921. * @tag_buf: buffer containing the tlv htt_sring_stats_tlv
  1922. *
  1923. * return:void
  1924. */
  1925. static inline void dp_print_sring_stats_tlv(uint32_t *tag_buf)
  1926. {
  1927. htt_sring_stats_tlv *dp_stats_buf =
  1928. (htt_sring_stats_tlv *)tag_buf;
  1929. DP_TRACE_STATS(FATAL, "HTT_SRING_STATS_TLV:");
  1930. DP_TRACE_STATS(FATAL, "mac_id__ring_id__arena__ep = %d",
  1931. dp_stats_buf->mac_id__ring_id__arena__ep);
  1932. DP_TRACE_STATS(FATAL, "base_addr_lsb = %d",
  1933. dp_stats_buf->base_addr_lsb);
  1934. DP_TRACE_STATS(FATAL, "base_addr_msb = %d",
  1935. dp_stats_buf->base_addr_msb);
  1936. DP_TRACE_STATS(FATAL, "ring_size = %d",
  1937. dp_stats_buf->ring_size);
  1938. DP_TRACE_STATS(FATAL, "elem_size = %d",
  1939. dp_stats_buf->elem_size);
  1940. DP_TRACE_STATS(FATAL, "num_avail_words__num_valid_words = %d",
  1941. dp_stats_buf->num_avail_words__num_valid_words);
  1942. DP_TRACE_STATS(FATAL, "head_ptr__tail_ptr = %d",
  1943. dp_stats_buf->head_ptr__tail_ptr);
  1944. DP_TRACE_STATS(FATAL, "consumer_empty__producer_full = %d",
  1945. dp_stats_buf->consumer_empty__producer_full);
  1946. DP_TRACE_STATS(FATAL, "prefetch_count__internal_tail_ptr = %d\n",
  1947. dp_stats_buf->prefetch_count__internal_tail_ptr);
  1948. }
  1949. /*
  1950. * dp_print_sring_cmn_tlv: display htt_sring_cmn_tlv
  1951. * @tag_buf: buffer containing the tlv htt_sring_cmn_tlv
  1952. *
  1953. * return:void
  1954. */
  1955. static inline void dp_print_sring_cmn_tlv(uint32_t *tag_buf)
  1956. {
  1957. htt_sring_cmn_tlv *dp_stats_buf =
  1958. (htt_sring_cmn_tlv *)tag_buf;
  1959. DP_TRACE_STATS(FATAL, "HTT_SRING_CMN_TLV:");
  1960. DP_TRACE_STATS(FATAL, "num_records = %d\n",
  1961. dp_stats_buf->num_records);
  1962. }
  1963. /*
  1964. * dp_print_tx_pdev_rate_stats_tlv: display htt_tx_pdev_rate_stats_tlv
  1965. * @tag_buf: buffer containing the tlv htt_tx_pdev_rate_stats_tlv
  1966. *
  1967. * return:void
  1968. */
  1969. static inline void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf)
  1970. {
  1971. htt_tx_pdev_rate_stats_tlv *dp_stats_buf =
  1972. (htt_tx_pdev_rate_stats_tlv *)tag_buf;
  1973. uint8_t i, j;
  1974. uint16_t index = 0;
  1975. char str_buf[DP_MAX_STRING_LEN];
  1976. char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
  1977. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) {
  1978. tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN);
  1979. }
  1980. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_RATE_STATS_TLV:");
  1981. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1982. dp_stats_buf->mac_id__word);
  1983. DP_TRACE_STATS(FATAL, "tx_ldpc = %d",
  1984. dp_stats_buf->tx_ldpc);
  1985. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  1986. dp_stats_buf->rts_cnt);
  1987. DP_TRACE_STATS(FATAL, "rts_success = %d",
  1988. dp_stats_buf->rts_success);
  1989. DP_TRACE_STATS(FATAL, "ack_rssi = %d",
  1990. dp_stats_buf->ack_rssi);
  1991. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  1992. for (i = 0; i < DP_HTT_TX_MCS_LEN; i++) {
  1993. index += qdf_snprint(&str_buf[index],
  1994. DP_MAX_STRING_LEN - index,
  1995. " %d:%d,", i, dp_stats_buf->tx_mcs[i]);
  1996. }
  1997. DP_TRACE_STATS(FATAL, "tx_mcs = %s ", str_buf);
  1998. index = 0;
  1999. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2000. for (i = 0; i < DP_HTT_TX_SU_MCS_LEN; i++) {
  2001. index += qdf_snprint(&str_buf[index],
  2002. DP_MAX_STRING_LEN - index,
  2003. " %d:%d,", i, dp_stats_buf->tx_su_mcs[i]);
  2004. }
  2005. DP_TRACE_STATS(FATAL, "tx_su_mcs = %s ", str_buf);
  2006. index = 0;
  2007. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2008. for (i = 0; i < DP_HTT_TX_MU_MCS_LEN; i++) {
  2009. index += qdf_snprint(&str_buf[index],
  2010. DP_MAX_STRING_LEN - index,
  2011. " %d:%d,", i, dp_stats_buf->tx_mu_mcs[i]);
  2012. }
  2013. DP_TRACE_STATS(FATAL, "tx_mu_mcs = %s ", str_buf);
  2014. index = 0;
  2015. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2016. for (i = 0; i < DP_HTT_TX_NSS_LEN; i++) {
  2017. index += qdf_snprint(&str_buf[index],
  2018. DP_MAX_STRING_LEN - index,
  2019. " %d:%d,", i, dp_stats_buf->tx_nss[i]);
  2020. }
  2021. DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf);
  2022. index = 0;
  2023. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2024. for (i = 0; i < DP_HTT_TX_BW_LEN; i++) {
  2025. index += qdf_snprint(&str_buf[index],
  2026. DP_MAX_STRING_LEN - index,
  2027. " %d:%d,", i, dp_stats_buf->tx_bw[i]);
  2028. }
  2029. DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf);
  2030. index = 0;
  2031. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2032. for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2033. index += qdf_snprint(&str_buf[index],
  2034. DP_MAX_STRING_LEN - index,
  2035. " %d:%d,", i, dp_stats_buf->tx_stbc[i]);
  2036. }
  2037. DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf);
  2038. index = 0;
  2039. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2040. for (i = 0; i < DP_HTT_TX_PREAM_LEN; i++) {
  2041. index += qdf_snprint(&str_buf[index],
  2042. DP_MAX_STRING_LEN - index,
  2043. " %d:%d,", i, dp_stats_buf->tx_pream[i]);
  2044. }
  2045. DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf);
  2046. for (j = 0; j < DP_HTT_PDEV_TX_GI_LEN; j++) {
  2047. index = 0;
  2048. for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2049. index += qdf_snprint(&tx_gi[j][index],
  2050. DP_MAX_STRING_LEN - index,
  2051. " %d:%d,", i,
  2052. dp_stats_buf->tx_gi[j][i]);
  2053. }
  2054. DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]);
  2055. }
  2056. index = 0;
  2057. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2058. for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) {
  2059. index += qdf_snprint(&str_buf[index],
  2060. DP_MAX_STRING_LEN - index,
  2061. " %d:%d,", i, dp_stats_buf->tx_dcm[i]);
  2062. }
  2063. DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf);
  2064. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
  2065. qdf_mem_free(tx_gi[i]);
  2066. }
  2067. /*
  2068. * dp_print_rx_pdev_rate_stats_tlv: display htt_rx_pdev_rate_stats_tlv
  2069. * @tag_buf: buffer containing the tlv htt_rx_pdev_rate_stats_tlv
  2070. *
  2071. * return:void
  2072. */
  2073. static inline void dp_print_rx_pdev_rate_stats_tlv(uint32_t *tag_buf)
  2074. {
  2075. htt_rx_pdev_rate_stats_tlv *dp_stats_buf =
  2076. (htt_rx_pdev_rate_stats_tlv *)tag_buf;
  2077. uint8_t i, j;
  2078. uint16_t index = 0;
  2079. char *rssi_chain[DP_HTT_RSSI_CHAIN_LEN];
  2080. char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS];
  2081. char str_buf[DP_MAX_STRING_LEN];
  2082. for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++)
  2083. rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  2084. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
  2085. rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  2086. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_RATE_STATS_TLV:");
  2087. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  2088. dp_stats_buf->mac_id__word);
  2089. DP_TRACE_STATS(FATAL, "nsts = %d",
  2090. dp_stats_buf->nsts);
  2091. DP_TRACE_STATS(FATAL, "rx_ldpc = %d",
  2092. dp_stats_buf->rx_ldpc);
  2093. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  2094. dp_stats_buf->rts_cnt);
  2095. DP_TRACE_STATS(FATAL, "rssi_mgmt = %d",
  2096. dp_stats_buf->rssi_mgmt);
  2097. DP_TRACE_STATS(FATAL, "rssi_data = %d",
  2098. dp_stats_buf->rssi_data);
  2099. DP_TRACE_STATS(FATAL, "rssi_comb = %d",
  2100. dp_stats_buf->rssi_comb);
  2101. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2102. for (i = 0; i < DP_HTT_RX_MCS_LEN; i++) {
  2103. index += qdf_snprint(&str_buf[index],
  2104. DP_MAX_STRING_LEN - index,
  2105. " %d:%d,", i, dp_stats_buf->rx_mcs[i]);
  2106. }
  2107. DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf);
  2108. index = 0;
  2109. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2110. for (i = 0; i < DP_HTT_RX_NSS_LEN; i++) {
  2111. index += qdf_snprint(&str_buf[index],
  2112. DP_MAX_STRING_LEN - index,
  2113. " %d:%d,", i, dp_stats_buf->rx_nss[i]);
  2114. }
  2115. DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf);
  2116. index = 0;
  2117. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2118. for (i = 0; i < DP_HTT_RX_DCM_LEN; i++) {
  2119. index += qdf_snprint(&str_buf[index],
  2120. DP_MAX_STRING_LEN - index,
  2121. " %d:%d,", i, dp_stats_buf->rx_dcm[i]);
  2122. }
  2123. DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf);
  2124. index = 0;
  2125. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2126. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2127. index += qdf_snprint(&str_buf[index],
  2128. DP_MAX_STRING_LEN - index,
  2129. " %d:%d,", i, dp_stats_buf->rx_stbc[i]);
  2130. }
  2131. DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf);
  2132. index = 0;
  2133. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2134. for (i = 0; i < DP_HTT_RX_BW_LEN; i++) {
  2135. index += qdf_snprint(&str_buf[index],
  2136. DP_MAX_STRING_LEN - index,
  2137. " %d:%d,", i, dp_stats_buf->rx_bw[i]);
  2138. }
  2139. DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf);
  2140. for (j = 0; j < DP_HTT_RSSI_CHAIN_LEN; j++) {
  2141. index = 0;
  2142. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_BW_COUNTERS; i++) {
  2143. index += qdf_snprint(&rssi_chain[j][index],
  2144. DP_MAX_STRING_LEN - index,
  2145. " %d:%d,", i,
  2146. dp_stats_buf->rssi_chain[j][i]);
  2147. }
  2148. DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]);
  2149. }
  2150. for (j = 0; j < DP_HTT_RX_GI_LEN; j++) {
  2151. index = 0;
  2152. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2153. index += qdf_snprint(&rx_gi[j][index],
  2154. DP_MAX_STRING_LEN - index,
  2155. " %d:%d,", i,
  2156. dp_stats_buf->rx_gi[j][i]);
  2157. }
  2158. DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]);
  2159. }
  2160. index = 0;
  2161. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2162. for (i = 0; i < DP_HTT_RX_PREAM_LEN; i++) {
  2163. index += qdf_snprint(&str_buf[index],
  2164. DP_MAX_STRING_LEN - index,
  2165. " %d:%d,", i, dp_stats_buf->rx_pream[i]);
  2166. }
  2167. DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf);
  2168. for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++)
  2169. qdf_mem_free(rssi_chain[i]);
  2170. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
  2171. qdf_mem_free(rx_gi[i]);
  2172. }
  2173. /*
  2174. * dp_print_rx_soc_fw_stats_tlv: display htt_rx_soc_fw_stats_tlv
  2175. * @tag_buf: buffer containing the tlv htt_rx_soc_fw_stats_tlv
  2176. *
  2177. * return:void
  2178. */
  2179. static inline void dp_print_rx_soc_fw_stats_tlv(uint32_t *tag_buf)
  2180. {
  2181. htt_rx_soc_fw_stats_tlv *dp_stats_buf =
  2182. (htt_rx_soc_fw_stats_tlv *)tag_buf;
  2183. DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_STATS_TLV:");
  2184. DP_TRACE_STATS(FATAL, "fw_reo_ring_data_msdu = %d",
  2185. dp_stats_buf->fw_reo_ring_data_msdu);
  2186. DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_bcmc = %d",
  2187. dp_stats_buf->fw_to_host_data_msdu_bcmc);
  2188. DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_uc = %d",
  2189. dp_stats_buf->fw_to_host_data_msdu_uc);
  2190. DP_TRACE_STATS(FATAL, "ofld_remote_data_buf_recycle_cnt = %d",
  2191. dp_stats_buf->ofld_remote_data_buf_recycle_cnt);
  2192. DP_TRACE_STATS(FATAL, "ofld_remote_free_buf_indication_cnt = %d\n",
  2193. dp_stats_buf->ofld_remote_free_buf_indication_cnt);
  2194. }
  2195. /*
  2196. * dp_print_rx_soc_fw_refill_ring_empty_tlv_v: display
  2197. * htt_rx_soc_fw_refill_ring_empty_tlv_v
  2198. * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_empty_tlv_v
  2199. *
  2200. * return:void
  2201. */
  2202. static inline void dp_print_rx_soc_fw_refill_ring_empty_tlv_v(uint32_t *tag_buf)
  2203. {
  2204. htt_rx_soc_fw_refill_ring_empty_tlv_v *dp_stats_buf =
  2205. (htt_rx_soc_fw_refill_ring_empty_tlv_v *)tag_buf;
  2206. uint8_t i;
  2207. uint16_t index = 0;
  2208. char refill_ring_empty_cnt[DP_MAX_STRING_LEN];
  2209. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  2210. tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_REFILL_MAX_RING);
  2211. DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_EMPTY_TLV_V:");
  2212. for (i = 0; i < tag_len; i++) {
  2213. index += qdf_snprint(&refill_ring_empty_cnt[index],
  2214. DP_MAX_STRING_LEN - index,
  2215. " %d:%d,", i,
  2216. dp_stats_buf->refill_ring_empty_cnt[i]);
  2217. }
  2218. DP_TRACE_STATS(FATAL, "refill_ring_empty_cnt = %s\n",
  2219. refill_ring_empty_cnt);
  2220. }
  2221. /*
  2222. * dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v: display
  2223. * htt_rx_soc_fw_refill_ring_num_refill_tlv_v
  2224. * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_num_refill_tlv
  2225. *
  2226. * return:void
  2227. */
  2228. static inline void dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v(
  2229. uint32_t *tag_buf)
  2230. {
  2231. htt_rx_soc_fw_refill_ring_num_refill_tlv_v *dp_stats_buf =
  2232. (htt_rx_soc_fw_refill_ring_num_refill_tlv_v *)tag_buf;
  2233. uint8_t i;
  2234. uint16_t index = 0;
  2235. char refill_ring_num_refill[DP_MAX_STRING_LEN];
  2236. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  2237. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_URRN_STATS);
  2238. DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_REFILL_TLV_V:");
  2239. for (i = 0; i < tag_len; i++) {
  2240. index += qdf_snprint(&refill_ring_num_refill[index],
  2241. DP_MAX_STRING_LEN - index,
  2242. " %d:%d,", i,
  2243. dp_stats_buf->refill_ring_num_refill[i]);
  2244. }
  2245. DP_TRACE_STATS(FATAL, "refill_ring_num_refill = %s\n",
  2246. refill_ring_num_refill);
  2247. }
  2248. /*
  2249. * dp_print_rx_pdev_fw_stats_tlv: display htt_rx_pdev_fw_stats_tlv
  2250. * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_stats_tlv
  2251. *
  2252. * return:void
  2253. */
  2254. static inline void dp_print_rx_pdev_fw_stats_tlv(uint32_t *tag_buf)
  2255. {
  2256. htt_rx_pdev_fw_stats_tlv *dp_stats_buf =
  2257. (htt_rx_pdev_fw_stats_tlv *)tag_buf;
  2258. uint8_t i;
  2259. uint16_t index = 0;
  2260. char fw_ring_mgmt_subtype[DP_MAX_STRING_LEN];
  2261. char fw_ring_ctrl_subtype[DP_MAX_STRING_LEN];
  2262. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_STATS_TLV:");
  2263. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  2264. dp_stats_buf->mac_id__word);
  2265. DP_TRACE_STATS(FATAL, "ppdu_recvd = %d",
  2266. dp_stats_buf->ppdu_recvd);
  2267. DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_ok = %d",
  2268. dp_stats_buf->mpdu_cnt_fcs_ok);
  2269. DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_err = %d",
  2270. dp_stats_buf->mpdu_cnt_fcs_err);
  2271. DP_TRACE_STATS(FATAL, "tcp_msdu_cnt = %d",
  2272. dp_stats_buf->tcp_msdu_cnt);
  2273. DP_TRACE_STATS(FATAL, "tcp_ack_msdu_cnt = %d",
  2274. dp_stats_buf->tcp_ack_msdu_cnt);
  2275. DP_TRACE_STATS(FATAL, "udp_msdu_cnt = %d",
  2276. dp_stats_buf->udp_msdu_cnt);
  2277. DP_TRACE_STATS(FATAL, "other_msdu_cnt = %d",
  2278. dp_stats_buf->other_msdu_cnt);
  2279. DP_TRACE_STATS(FATAL, "fw_ring_mpdu_ind = %d",
  2280. dp_stats_buf->fw_ring_mpdu_ind);
  2281. for (i = 0; i < DP_HTT_FW_RING_MGMT_SUBTYPE_LEN; i++) {
  2282. index += qdf_snprint(&fw_ring_mgmt_subtype[index],
  2283. DP_MAX_STRING_LEN - index,
  2284. " %d:%d,", i,
  2285. dp_stats_buf->fw_ring_mgmt_subtype[i]);
  2286. }
  2287. DP_TRACE_STATS(FATAL, "fw_ring_mgmt_subtype = %s ", fw_ring_mgmt_subtype);
  2288. index = 0;
  2289. for (i = 0; i < DP_HTT_FW_RING_CTRL_SUBTYPE_LEN; i++) {
  2290. index += qdf_snprint(&fw_ring_ctrl_subtype[index],
  2291. DP_MAX_STRING_LEN - index,
  2292. " %d:%d,", i,
  2293. dp_stats_buf->fw_ring_ctrl_subtype[i]);
  2294. }
  2295. DP_TRACE_STATS(FATAL, "fw_ring_ctrl_subtype = %s ", fw_ring_ctrl_subtype);
  2296. DP_TRACE_STATS(FATAL, "fw_ring_mcast_data_msdu = %d",
  2297. dp_stats_buf->fw_ring_mcast_data_msdu);
  2298. DP_TRACE_STATS(FATAL, "fw_ring_bcast_data_msdu = %d",
  2299. dp_stats_buf->fw_ring_bcast_data_msdu);
  2300. DP_TRACE_STATS(FATAL, "fw_ring_ucast_data_msdu = %d",
  2301. dp_stats_buf->fw_ring_ucast_data_msdu);
  2302. DP_TRACE_STATS(FATAL, "fw_ring_null_data_msdu = %d",
  2303. dp_stats_buf->fw_ring_null_data_msdu);
  2304. DP_TRACE_STATS(FATAL, "fw_ring_mpdu_drop = %d",
  2305. dp_stats_buf->fw_ring_mpdu_drop);
  2306. DP_TRACE_STATS(FATAL, "ofld_local_data_ind_cnt = %d",
  2307. dp_stats_buf->ofld_local_data_ind_cnt);
  2308. DP_TRACE_STATS(FATAL, "ofld_local_data_buf_recycle_cnt = %d",
  2309. dp_stats_buf->ofld_local_data_buf_recycle_cnt);
  2310. DP_TRACE_STATS(FATAL, "drx_local_data_ind_cnt = %d",
  2311. dp_stats_buf->drx_local_data_ind_cnt);
  2312. DP_TRACE_STATS(FATAL, "drx_local_data_buf_recycle_cnt = %d",
  2313. dp_stats_buf->drx_local_data_buf_recycle_cnt);
  2314. DP_TRACE_STATS(FATAL, "local_nondata_ind_cnt = %d",
  2315. dp_stats_buf->local_nondata_ind_cnt);
  2316. DP_TRACE_STATS(FATAL, "local_nondata_buf_recycle_cnt = %d",
  2317. dp_stats_buf->local_nondata_buf_recycle_cnt);
  2318. DP_TRACE_STATS(FATAL, "fw_status_buf_ring_refill_cnt = %d",
  2319. dp_stats_buf->fw_status_buf_ring_refill_cnt);
  2320. DP_TRACE_STATS(FATAL, "fw_status_buf_ring_empty_cnt = %d",
  2321. dp_stats_buf->fw_status_buf_ring_empty_cnt);
  2322. DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_refill_cnt = %d",
  2323. dp_stats_buf->fw_pkt_buf_ring_refill_cnt);
  2324. DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_empty_cnt = %d",
  2325. dp_stats_buf->fw_pkt_buf_ring_empty_cnt);
  2326. DP_TRACE_STATS(FATAL, "fw_link_buf_ring_refill_cnt = %d",
  2327. dp_stats_buf->fw_link_buf_ring_refill_cnt);
  2328. DP_TRACE_STATS(FATAL, "fw_link_buf_ring_empty_cnt = %d",
  2329. dp_stats_buf->fw_link_buf_ring_empty_cnt);
  2330. DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_refill_cnt = %d",
  2331. dp_stats_buf->host_pkt_buf_ring_refill_cnt);
  2332. DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_empty_cnt = %d",
  2333. dp_stats_buf->host_pkt_buf_ring_empty_cnt);
  2334. DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_refill_cnt = %d",
  2335. dp_stats_buf->mon_pkt_buf_ring_refill_cnt);
  2336. DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_empty_cnt = %d",
  2337. dp_stats_buf->mon_pkt_buf_ring_empty_cnt);
  2338. DP_TRACE_STATS(FATAL, "mon_status_buf_ring_refill_cnt = %d",
  2339. dp_stats_buf->mon_status_buf_ring_refill_cnt);
  2340. DP_TRACE_STATS(FATAL, "mon_status_buf_ring_empty_cnt = %d",
  2341. dp_stats_buf->mon_status_buf_ring_empty_cnt);
  2342. DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_refill_cnt = %d",
  2343. dp_stats_buf->mon_desc_buf_ring_refill_cnt);
  2344. DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_empty_cnt = %d",
  2345. dp_stats_buf->mon_desc_buf_ring_empty_cnt);
  2346. DP_TRACE_STATS(FATAL, "mon_dest_ring_update_cnt = %d",
  2347. dp_stats_buf->mon_dest_ring_update_cnt);
  2348. DP_TRACE_STATS(FATAL, "mon_dest_ring_full_cnt = %d",
  2349. dp_stats_buf->mon_dest_ring_full_cnt);
  2350. DP_TRACE_STATS(FATAL, "rx_suspend_cnt = %d",
  2351. dp_stats_buf->rx_suspend_cnt);
  2352. DP_TRACE_STATS(FATAL, "rx_suspend_fail_cnt = %d",
  2353. dp_stats_buf->rx_suspend_fail_cnt);
  2354. DP_TRACE_STATS(FATAL, "rx_resume_cnt = %d",
  2355. dp_stats_buf->rx_resume_cnt);
  2356. DP_TRACE_STATS(FATAL, "rx_resume_fail_cnt = %d",
  2357. dp_stats_buf->rx_resume_fail_cnt);
  2358. DP_TRACE_STATS(FATAL, "rx_ring_switch_cnt = %d",
  2359. dp_stats_buf->rx_ring_switch_cnt);
  2360. DP_TRACE_STATS(FATAL, "rx_ring_restore_cnt = %d",
  2361. dp_stats_buf->rx_ring_restore_cnt);
  2362. DP_TRACE_STATS(FATAL, "rx_flush_cnt = %d\n",
  2363. dp_stats_buf->rx_flush_cnt);
  2364. }
  2365. /*
  2366. * dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v: display
  2367. * htt_rx_pdev_fw_ring_mpdu_err_tlv_v
  2368. * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_ring_mpdu_err_tlv_v
  2369. *
  2370. * return:void
  2371. */
  2372. static inline void dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(uint32_t *tag_buf)
  2373. {
  2374. htt_rx_pdev_fw_ring_mpdu_err_tlv_v *dp_stats_buf =
  2375. (htt_rx_pdev_fw_ring_mpdu_err_tlv_v *)tag_buf;
  2376. uint8_t i;
  2377. uint16_t index = 0;
  2378. char fw_ring_mpdu_err[DP_MAX_STRING_LEN];
  2379. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_RING_MPDU_ERR_TLV_V:");
  2380. for (i = 0; i < DP_HTT_FW_RING_MPDU_ERR_LEN; i++) {
  2381. index += qdf_snprint(&fw_ring_mpdu_err[index],
  2382. DP_MAX_STRING_LEN - index,
  2383. " %d:%d,", i,
  2384. dp_stats_buf->fw_ring_mpdu_err[i]);
  2385. }
  2386. DP_TRACE_STATS(FATAL, "fw_ring_mpdu_err = %s\n", fw_ring_mpdu_err);
  2387. }
  2388. /*
  2389. * dp_print_rx_pdev_fw_mpdu_drop_tlv_v: display htt_rx_pdev_fw_mpdu_drop_tlv_v
  2390. * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_mpdu_drop_tlv_v
  2391. *
  2392. * return:void
  2393. */
  2394. static inline void dp_print_rx_pdev_fw_mpdu_drop_tlv_v(uint32_t *tag_buf)
  2395. {
  2396. htt_rx_pdev_fw_mpdu_drop_tlv_v *dp_stats_buf =
  2397. (htt_rx_pdev_fw_mpdu_drop_tlv_v *)tag_buf;
  2398. uint8_t i;
  2399. uint16_t index = 0;
  2400. char fw_mpdu_drop[DP_MAX_STRING_LEN];
  2401. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  2402. tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_FW_DROP_REASON_MAX);
  2403. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_MPDU_DROP_TLV_V:");
  2404. for (i = 0; i < tag_len; i++) {
  2405. index += qdf_snprint(&fw_mpdu_drop[index],
  2406. DP_MAX_STRING_LEN - index,
  2407. " %d:%d,", i, dp_stats_buf->fw_mpdu_drop[i]);
  2408. }
  2409. DP_TRACE_STATS(FATAL, "fw_mpdu_drop = %s\n", fw_mpdu_drop);
  2410. }
  2411. /*
  2412. * dp_htt_stats_print_tag: function to select the tag type and
  2413. * print the corresponding tag structure
  2414. * @tag_type: tag type that is to be printed
  2415. * @tag_buf: pointer to the tag structure
  2416. *
  2417. * return: void
  2418. */
  2419. void dp_htt_stats_print_tag(uint8_t tag_type, uint32_t *tag_buf)
  2420. {
  2421. switch (tag_type) {
  2422. case HTT_STATS_TX_PDEV_CMN_TAG:
  2423. dp_print_tx_pdev_stats_cmn_tlv(tag_buf);
  2424. break;
  2425. case HTT_STATS_TX_PDEV_UNDERRUN_TAG:
  2426. dp_print_tx_pdev_stats_urrn_tlv_v(tag_buf);
  2427. break;
  2428. case HTT_STATS_TX_PDEV_SIFS_TAG:
  2429. dp_print_tx_pdev_stats_sifs_tlv_v(tag_buf);
  2430. break;
  2431. case HTT_STATS_TX_PDEV_FLUSH_TAG:
  2432. dp_print_tx_pdev_stats_flush_tlv_v(tag_buf);
  2433. break;
  2434. case HTT_STATS_TX_PDEV_PHY_ERR_TAG:
  2435. dp_print_tx_pdev_stats_phy_err_tlv_v(tag_buf);
  2436. break;
  2437. case HTT_STATS_STRING_TAG:
  2438. dp_print_stats_string_tlv(tag_buf);
  2439. break;
  2440. case HTT_STATS_TX_HWQ_CMN_TAG:
  2441. dp_print_tx_hwq_stats_cmn_tlv(tag_buf);
  2442. break;
  2443. case HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG:
  2444. dp_print_tx_hwq_difs_latency_stats_tlv_v(tag_buf);
  2445. break;
  2446. case HTT_STATS_TX_HWQ_CMD_RESULT_TAG:
  2447. dp_print_tx_hwq_cmd_result_stats_tlv_v(tag_buf);
  2448. break;
  2449. case HTT_STATS_TX_HWQ_CMD_STALL_TAG:
  2450. dp_print_tx_hwq_cmd_stall_stats_tlv_v(tag_buf);
  2451. break;
  2452. case HTT_STATS_TX_HWQ_FES_STATUS_TAG:
  2453. dp_print_tx_hwq_fes_result_stats_tlv_v(tag_buf);
  2454. break;
  2455. case HTT_STATS_TX_TQM_GEN_MPDU_TAG:
  2456. dp_print_tx_tqm_gen_mpdu_stats_tlv_v(tag_buf);
  2457. break;
  2458. case HTT_STATS_TX_TQM_LIST_MPDU_TAG:
  2459. dp_print_tx_tqm_list_mpdu_stats_tlv_v(tag_buf);
  2460. break;
  2461. case HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG:
  2462. dp_print_tx_tqm_list_mpdu_cnt_tlv_v(tag_buf);
  2463. break;
  2464. case HTT_STATS_TX_TQM_CMN_TAG:
  2465. dp_print_tx_tqm_cmn_stats_tlv(tag_buf);
  2466. break;
  2467. case HTT_STATS_TX_TQM_PDEV_TAG:
  2468. dp_print_tx_tqm_pdev_stats_tlv_v(tag_buf);
  2469. break;
  2470. case HTT_STATS_TX_TQM_CMDQ_STATUS_TAG:
  2471. dp_print_tx_tqm_cmdq_status_tlv(tag_buf);
  2472. break;
  2473. case HTT_STATS_TX_DE_EAPOL_PACKETS_TAG:
  2474. dp_print_tx_de_eapol_packets_stats_tlv(tag_buf);
  2475. break;
  2476. case HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG:
  2477. dp_print_tx_de_classify_failed_stats_tlv(tag_buf);
  2478. break;
  2479. case HTT_STATS_TX_DE_CLASSIFY_STATS_TAG:
  2480. dp_print_tx_de_classify_stats_tlv(tag_buf);
  2481. break;
  2482. case HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG:
  2483. dp_print_tx_de_classify_status_stats_tlv(tag_buf);
  2484. break;
  2485. case HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG:
  2486. dp_print_tx_de_enqueue_packets_stats_tlv(tag_buf);
  2487. break;
  2488. case HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG:
  2489. dp_print_tx_de_enqueue_discard_stats_tlv(tag_buf);
  2490. break;
  2491. case HTT_STATS_TX_DE_CMN_TAG:
  2492. dp_print_tx_de_cmn_stats_tlv(tag_buf);
  2493. break;
  2494. case HTT_STATS_RING_IF_TAG:
  2495. dp_print_ring_if_stats_tlv(tag_buf);
  2496. break;
  2497. case HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG:
  2498. dp_print_tx_pdev_mu_mimo_sch_stats_tlv(tag_buf);
  2499. break;
  2500. case HTT_STATS_SFM_CMN_TAG:
  2501. dp_print_sfm_cmn_tlv(tag_buf);
  2502. break;
  2503. case HTT_STATS_SRING_STATS_TAG:
  2504. dp_print_sring_stats_tlv(tag_buf);
  2505. break;
  2506. case HTT_STATS_RX_PDEV_FW_STATS_TAG:
  2507. dp_print_rx_pdev_fw_stats_tlv(tag_buf);
  2508. break;
  2509. case HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG:
  2510. dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(tag_buf);
  2511. break;
  2512. case HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG:
  2513. dp_print_rx_pdev_fw_mpdu_drop_tlv_v(tag_buf);
  2514. break;
  2515. case HTT_STATS_RX_SOC_FW_STATS_TAG:
  2516. dp_print_rx_soc_fw_stats_tlv(tag_buf);
  2517. break;
  2518. case HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG:
  2519. dp_print_rx_soc_fw_refill_ring_empty_tlv_v(tag_buf);
  2520. break;
  2521. case HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG:
  2522. dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v(
  2523. tag_buf);
  2524. break;
  2525. case HTT_STATS_TX_PDEV_RATE_STATS_TAG:
  2526. dp_print_tx_pdev_rate_stats_tlv(tag_buf);
  2527. break;
  2528. case HTT_STATS_RX_PDEV_RATE_STATS_TAG:
  2529. dp_print_rx_pdev_rate_stats_tlv(tag_buf);
  2530. break;
  2531. case HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG:
  2532. dp_print_tx_pdev_stats_sched_per_txq_tlv(tag_buf);
  2533. break;
  2534. case HTT_STATS_TX_SCHED_CMN_TAG:
  2535. dp_print_stats_tx_sched_cmn_tlv(tag_buf);
  2536. break;
  2537. case HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG:
  2538. dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(tag_buf);
  2539. break;
  2540. case HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG:
  2541. dp_print_sched_txq_cmd_posted_tlv_v(tag_buf);
  2542. break;
  2543. case HTT_STATS_RING_IF_CMN_TAG:
  2544. dp_print_ring_if_cmn_tlv(tag_buf);
  2545. break;
  2546. case HTT_STATS_SFM_CLIENT_USER_TAG:
  2547. dp_print_sfm_client_user_tlv_v(tag_buf);
  2548. break;
  2549. case HTT_STATS_SFM_CLIENT_TAG:
  2550. dp_print_sfm_client_tlv(tag_buf);
  2551. break;
  2552. case HTT_STATS_TX_TQM_ERROR_STATS_TAG:
  2553. dp_print_tx_tqm_error_stats_tlv(tag_buf);
  2554. break;
  2555. case HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG:
  2556. dp_print_sched_txq_cmd_reaped_tlv_v(tag_buf);
  2557. break;
  2558. case HTT_STATS_SRING_CMN_TAG:
  2559. dp_print_sring_cmn_tlv(tag_buf);
  2560. break;
  2561. case HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG:
  2562. dp_print_tx_selfgen_ac_err_stats_tlv(tag_buf);
  2563. break;
  2564. case HTT_STATS_TX_SELFGEN_CMN_STATS_TAG:
  2565. dp_print_tx_selfgen_cmn_stats_tlv(tag_buf);
  2566. break;
  2567. case HTT_STATS_TX_SELFGEN_AC_STATS_TAG:
  2568. dp_print_tx_selfgen_ac_stats_tlv(tag_buf);
  2569. break;
  2570. case HTT_STATS_TX_SELFGEN_AX_STATS_TAG:
  2571. dp_print_tx_selfgen_ax_stats_tlv(tag_buf);
  2572. break;
  2573. case HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG:
  2574. dp_print_tx_selfgen_ax_err_stats_tlv(tag_buf);
  2575. break;
  2576. case HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG:
  2577. dp_print_tx_hwq_mu_mimo_sch_stats_tlv(tag_buf);
  2578. break;
  2579. case HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG:
  2580. dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(tag_buf);
  2581. break;
  2582. case HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG:
  2583. dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(tag_buf);
  2584. break;
  2585. case HTT_STATS_HW_INTR_MISC_TAG:
  2586. dp_print_hw_stats_intr_misc_tlv(tag_buf);
  2587. break;
  2588. case HTT_STATS_HW_WD_TIMEOUT_TAG:
  2589. dp_print_hw_stats_wd_timeout_tlv(tag_buf);
  2590. break;
  2591. case HTT_STATS_HW_PDEV_ERRS_TAG:
  2592. dp_print_hw_stats_pdev_errs_tlv(tag_buf);
  2593. break;
  2594. case HTT_STATS_COUNTER_NAME_TAG:
  2595. dp_print_counter_tlv(tag_buf);
  2596. break;
  2597. case HTT_STATS_TX_TID_DETAILS_TAG:
  2598. dp_print_tx_tid_stats_tlv(tag_buf);
  2599. break;
  2600. #ifdef CONFIG_WIN
  2601. case HTT_STATS_TX_TID_DETAILS_V1_TAG:
  2602. dp_print_tx_tid_stats_v1_tlv(tag_buf);
  2603. break;
  2604. #endif
  2605. case HTT_STATS_RX_TID_DETAILS_TAG:
  2606. dp_print_rx_tid_stats_tlv(tag_buf);
  2607. break;
  2608. case HTT_STATS_PEER_STATS_CMN_TAG:
  2609. dp_print_peer_stats_cmn_tlv(tag_buf);
  2610. break;
  2611. case HTT_STATS_PEER_DETAILS_TAG:
  2612. dp_print_peer_details_tlv(tag_buf);
  2613. break;
  2614. case HTT_STATS_PEER_MSDU_FLOWQ_TAG:
  2615. dp_print_msdu_flow_stats_tlv(tag_buf);
  2616. break;
  2617. case HTT_STATS_PEER_TX_RATE_STATS_TAG:
  2618. dp_print_tx_peer_rate_stats_tlv(tag_buf);
  2619. break;
  2620. case HTT_STATS_PEER_RX_RATE_STATS_TAG:
  2621. dp_print_rx_peer_rate_stats_tlv(tag_buf);
  2622. break;
  2623. case HTT_STATS_TX_DE_COMPL_STATS_TAG:
  2624. dp_print_tx_de_compl_stats_tlv(tag_buf);
  2625. break;
  2626. default:
  2627. break;
  2628. }
  2629. }