dp_stats.c 94 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892
  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. /* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
  615. index += qdf_snprint(&str_buf[index],
  616. DP_MAX_STRING_LEN - index,
  617. " %d:%d,", (i + 1),
  618. dp_stats_buf->tx_nss[i]);
  619. }
  620. DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf);
  621. index = 0;
  622. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  623. for (i = 0; i < DP_HTT_TX_BW_LEN; i++) {
  624. index += qdf_snprint(&str_buf[index],
  625. DP_MAX_STRING_LEN - index,
  626. " %d:%d,", i, dp_stats_buf->tx_bw[i]);
  627. }
  628. DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf);
  629. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  630. for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  631. index += qdf_snprint(&str_buf[index],
  632. DP_MAX_STRING_LEN - index,
  633. " %d:%d,", i, dp_stats_buf->tx_stbc[i]);
  634. }
  635. DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf);
  636. index = 0;
  637. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  638. for (i = 0; i < DP_HTT_TX_PREAM_LEN; i++) {
  639. index += qdf_snprint(&str_buf[index],
  640. DP_MAX_STRING_LEN - index,
  641. " %d:%d,", i, dp_stats_buf->tx_pream[i]);
  642. }
  643. DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf);
  644. for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
  645. index = 0;
  646. for (i = 0; i < HTT_TX_PEER_STATS_NUM_MCS_COUNTERS; i++) {
  647. index += qdf_snprint(&tx_gi[j][index],
  648. DP_MAX_STRING_LEN - index,
  649. " %d:%d,", i,
  650. dp_stats_buf->tx_gi[j][i]);
  651. }
  652. DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]);
  653. }
  654. index = 0;
  655. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  656. for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) {
  657. index += qdf_snprint(&str_buf[index],
  658. DP_MAX_STRING_LEN - index,
  659. " %d:%d,", i, dp_stats_buf->tx_dcm[i]);
  660. }
  661. DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf);
  662. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
  663. qdf_mem_free(tx_gi[i]);
  664. }
  665. /*
  666. * dp_print_rx_peer_rate_stats_tlv: display htt_rx_peer_rate_stats_tlv
  667. * @tag_buf: buffer containing the tlv htt_rx_peer_rate_stats_tlv
  668. *
  669. * return:void
  670. */
  671. static inline void dp_print_rx_peer_rate_stats_tlv(uint32_t *tag_buf)
  672. {
  673. htt_rx_peer_rate_stats_tlv *dp_stats_buf =
  674. (htt_rx_peer_rate_stats_tlv *)tag_buf;
  675. uint8_t i, j;
  676. uint16_t index = 0;
  677. char *rssi_chain[DP_HTT_PEER_NUM_SS];
  678. char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS];
  679. char str_buf[DP_MAX_STRING_LEN];
  680. for (i = 0; i < DP_HTT_PEER_NUM_SS; i++)
  681. rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  682. for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++)
  683. rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  684. DP_TRACE_STATS(FATAL, "HTT_RX_PEER_RATE_STATS_TLV:");
  685. DP_TRACE_STATS(FATAL, "nsts = %d",
  686. dp_stats_buf->nsts);
  687. DP_TRACE_STATS(FATAL, "rx_ldpc = %d",
  688. dp_stats_buf->rx_ldpc);
  689. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  690. dp_stats_buf->rts_cnt);
  691. DP_TRACE_STATS(FATAL, "rssi_mgmt = %d",
  692. dp_stats_buf->rssi_mgmt);
  693. DP_TRACE_STATS(FATAL, "rssi_data = %d",
  694. dp_stats_buf->rssi_data);
  695. DP_TRACE_STATS(FATAL, "rssi_comb = %d",
  696. dp_stats_buf->rssi_comb);
  697. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  698. for (i = 0; i < DP_HTT_RX_MCS_LEN; i++) {
  699. index += qdf_snprint(&str_buf[index],
  700. DP_MAX_STRING_LEN - index,
  701. " %d:%d,", i, dp_stats_buf->rx_mcs[i]);
  702. }
  703. DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf);
  704. index = 0;
  705. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  706. for (i = 0; i < DP_HTT_RX_NSS_LEN; i++) {
  707. /* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
  708. index += qdf_snprint(&str_buf[index],
  709. DP_MAX_STRING_LEN - index,
  710. " %d:%d,", (i + 1),
  711. dp_stats_buf->rx_nss[i]);
  712. }
  713. DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf);
  714. index = 0;
  715. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  716. for (i = 0; i < DP_HTT_RX_DCM_LEN; i++) {
  717. index += qdf_snprint(&str_buf[index],
  718. DP_MAX_STRING_LEN - index,
  719. " %d:%d,", i, dp_stats_buf->rx_dcm[i]);
  720. }
  721. DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf);
  722. index = 0;
  723. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  724. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  725. index += qdf_snprint(&str_buf[index],
  726. DP_MAX_STRING_LEN - index,
  727. " %d:%d,", i, dp_stats_buf->rx_stbc[i]);
  728. }
  729. DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf);
  730. index = 0;
  731. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  732. for (i = 0; i < DP_HTT_RX_BW_LEN; i++) {
  733. index += qdf_snprint(&str_buf[index],
  734. DP_MAX_STRING_LEN - index,
  735. " %d:%d,", i, dp_stats_buf->rx_bw[i]);
  736. }
  737. DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf);
  738. for (j = 0; j < DP_HTT_PEER_NUM_SS; j++) {
  739. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  740. index = 0;
  741. for (i = 0; i < HTT_RX_PEER_STATS_NUM_BW_COUNTERS; i++) {
  742. index += qdf_snprint(&rssi_chain[j][index],
  743. DP_MAX_STRING_LEN - index,
  744. " %d:%d,", i,
  745. dp_stats_buf->rssi_chain[j][i]);
  746. }
  747. DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]);
  748. }
  749. for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++) {
  750. index = 0;
  751. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  752. index += qdf_snprint(&rx_gi[j][index],
  753. DP_MAX_STRING_LEN - index,
  754. " %d:%d,", i,
  755. dp_stats_buf->rx_gi[j][i]);
  756. }
  757. DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]);
  758. }
  759. index = 0;
  760. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  761. for (i = 0; i < DP_HTT_RX_PREAM_LEN; i++) {
  762. index += qdf_snprint(&str_buf[index],
  763. DP_MAX_STRING_LEN - index,
  764. " %d:%d,", i, dp_stats_buf->rx_pream[i]);
  765. }
  766. DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf);
  767. for (i = 0; i < DP_HTT_PEER_NUM_SS; i++)
  768. qdf_mem_free(rssi_chain[i]);
  769. for (i = 0; i < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; i++)
  770. qdf_mem_free(rx_gi[i]);
  771. }
  772. /*
  773. * dp_print_tx_hwq_mu_mimo_sch_stats_tlv: display htt_tx_hwq_mu_mimo_sch_stats
  774. * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_sch_stats_tlv
  775. *
  776. * return:void
  777. */
  778. static inline void dp_print_tx_hwq_mu_mimo_sch_stats_tlv(uint32_t *tag_buf)
  779. {
  780. htt_tx_hwq_mu_mimo_sch_stats_tlv *dp_stats_buf =
  781. (htt_tx_hwq_mu_mimo_sch_stats_tlv *)tag_buf;
  782. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_SCH_STATS_TLV:");
  783. DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d",
  784. dp_stats_buf->mu_mimo_sch_posted);
  785. DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d",
  786. dp_stats_buf->mu_mimo_sch_failed);
  787. DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n",
  788. dp_stats_buf->mu_mimo_ppdu_posted);
  789. }
  790. /*
  791. * dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv: display htt_tx_hwq_mu_mimo_mpdu_stats
  792. * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_mpdu_stats_tlv
  793. *
  794. * return:void
  795. */
  796. static inline void dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf)
  797. {
  798. htt_tx_hwq_mu_mimo_mpdu_stats_tlv *dp_stats_buf =
  799. (htt_tx_hwq_mu_mimo_mpdu_stats_tlv *)tag_buf;
  800. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_MPDU_STATS_TLV:");
  801. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d",
  802. dp_stats_buf->mu_mimo_mpdus_queued_usr);
  803. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d",
  804. dp_stats_buf->mu_mimo_mpdus_tried_usr);
  805. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d",
  806. dp_stats_buf->mu_mimo_mpdus_failed_usr);
  807. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d",
  808. dp_stats_buf->mu_mimo_mpdus_requeued_usr);
  809. DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d",
  810. dp_stats_buf->mu_mimo_err_no_ba_usr);
  811. DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d",
  812. dp_stats_buf->mu_mimo_mpdu_underrun_usr);
  813. DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n",
  814. dp_stats_buf->mu_mimo_ampdu_underrun_usr);
  815. }
  816. /*
  817. * dp_print_tx_hwq_mu_mimo_cmn_stats_tlv: display htt_tx_hwq_mu_mimo_cmn_stats
  818. * @tag_buf: buffer containing the tlv htt_tx_hwq_mu_mimo_cmn_stats_tlv
  819. *
  820. * return:void
  821. */
  822. static inline void dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(uint32_t *tag_buf)
  823. {
  824. htt_tx_hwq_mu_mimo_cmn_stats_tlv *dp_stats_buf =
  825. (htt_tx_hwq_mu_mimo_cmn_stats_tlv *)tag_buf;
  826. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_MU_MIMO_CMN_STATS_TLV:");
  827. DP_TRACE_STATS(FATAL, "mac_id__hwq_id__word = %d\n",
  828. dp_stats_buf->mac_id__hwq_id__word);
  829. }
  830. /*
  831. * dp_print_tx_hwq_stats_cmn_tlv: display htt_tx_hwq_stats_cmn_tlv
  832. * @tag_buf: buffer containing the tlv htt_tx_hwq_stats_cmn_tlv
  833. *
  834. * return:void
  835. */
  836. static inline void dp_print_tx_hwq_stats_cmn_tlv(uint32_t *tag_buf)
  837. {
  838. htt_tx_hwq_stats_cmn_tlv *dp_stats_buf =
  839. (htt_tx_hwq_stats_cmn_tlv *)tag_buf;
  840. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_STATS_CMN_TLV:");
  841. DP_TRACE_STATS(FATAL, "mac_id__hwq_id__word = %d",
  842. dp_stats_buf->mac_id__hwq_id__word);
  843. DP_TRACE_STATS(FATAL, "xretry = %d",
  844. dp_stats_buf->xretry);
  845. DP_TRACE_STATS(FATAL, "underrun_cnt = %d",
  846. dp_stats_buf->underrun_cnt);
  847. DP_TRACE_STATS(FATAL, "flush_cnt = %d",
  848. dp_stats_buf->flush_cnt);
  849. DP_TRACE_STATS(FATAL, "filt_cnt = %d",
  850. dp_stats_buf->filt_cnt);
  851. DP_TRACE_STATS(FATAL, "null_mpdu_bmap = %d",
  852. dp_stats_buf->null_mpdu_bmap);
  853. DP_TRACE_STATS(FATAL, "user_ack_failure = %d",
  854. dp_stats_buf->user_ack_failure);
  855. DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
  856. dp_stats_buf->ack_tlv_proc);
  857. DP_TRACE_STATS(FATAL, "sched_id_proc = %d",
  858. dp_stats_buf->sched_id_proc);
  859. DP_TRACE_STATS(FATAL, "null_mpdu_tx_count = %d",
  860. dp_stats_buf->null_mpdu_tx_count);
  861. DP_TRACE_STATS(FATAL, "mpdu_bmap_not_recvd = %d",
  862. dp_stats_buf->mpdu_bmap_not_recvd);
  863. DP_TRACE_STATS(FATAL, "num_bar = %d",
  864. dp_stats_buf->num_bar);
  865. DP_TRACE_STATS(FATAL, "rts = %d",
  866. dp_stats_buf->rts);
  867. DP_TRACE_STATS(FATAL, "cts2self = %d",
  868. dp_stats_buf->cts2self);
  869. DP_TRACE_STATS(FATAL, "qos_null = %d",
  870. dp_stats_buf->qos_null);
  871. DP_TRACE_STATS(FATAL, "mpdu_tried_cnt = %d",
  872. dp_stats_buf->mpdu_tried_cnt);
  873. DP_TRACE_STATS(FATAL, "mpdu_queued_cnt = %d",
  874. dp_stats_buf->mpdu_queued_cnt);
  875. DP_TRACE_STATS(FATAL, "mpdu_ack_fail_cnt = %d",
  876. dp_stats_buf->mpdu_ack_fail_cnt);
  877. DP_TRACE_STATS(FATAL, "mpdu_filt_cnt = %d",
  878. dp_stats_buf->mpdu_filt_cnt);
  879. DP_TRACE_STATS(FATAL, "false_mpdu_ack_count = %d\n",
  880. dp_stats_buf->false_mpdu_ack_count);
  881. }
  882. /*
  883. * dp_print_tx_hwq_difs_latency_stats_tlv_v: display
  884. * htt_tx_hwq_difs_latency_stats_tlv_v
  885. * @tag_buf: buffer containing the tlv htt_tx_hwq_difs_latency_stats_tlv_v
  886. *
  887. *return:void
  888. */
  889. static inline void dp_print_tx_hwq_difs_latency_stats_tlv_v(uint32_t *tag_buf)
  890. {
  891. htt_tx_hwq_difs_latency_stats_tlv_v *dp_stats_buf =
  892. (htt_tx_hwq_difs_latency_stats_tlv_v *)tag_buf;
  893. uint8_t i;
  894. uint16_t index = 0;
  895. char difs_latency_hist[DP_MAX_STRING_LEN];
  896. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  897. tag_len = qdf_min(tag_len,
  898. (uint32_t)HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS) - 1;
  899. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_DIFS_LATENCY_STATS_TLV_V:");
  900. DP_TRACE_STATS(FATAL, "hist_intvl = %d",
  901. dp_stats_buf->hist_intvl);
  902. for (i = 0; i < tag_len; i++) {
  903. index += qdf_snprint(&difs_latency_hist[index],
  904. DP_MAX_STRING_LEN - index,
  905. " %d:%d,", i,
  906. dp_stats_buf->difs_latency_hist[i]);
  907. }
  908. DP_TRACE_STATS(FATAL, "difs_latency_hist = %s\n", difs_latency_hist);
  909. }
  910. /*
  911. * dp_print_tx_hwq_cmd_result_stats_tlv_v: display htt_tx_hwq_cmd_result_stats
  912. * @tag_buf: buffer containing the tlv htt_tx_hwq_cmd_result_stats_tlv_v
  913. *
  914. * return:void
  915. */
  916. static inline void dp_print_tx_hwq_cmd_result_stats_tlv_v(uint32_t *tag_buf)
  917. {
  918. htt_tx_hwq_cmd_result_stats_tlv_v *dp_stats_buf =
  919. (htt_tx_hwq_cmd_result_stats_tlv_v *)tag_buf;
  920. uint8_t i;
  921. uint16_t index = 0;
  922. char cmd_result[DP_MAX_STRING_LEN];
  923. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  924. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_CMD_RESULT_STATS);
  925. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_CMD_RESULT_STATS_TLV_V:");
  926. for (i = 0; i < tag_len; i++) {
  927. index += qdf_snprint(&cmd_result[index],
  928. DP_MAX_STRING_LEN - index,
  929. " %d:%d,", i, dp_stats_buf->cmd_result[i]);
  930. }
  931. DP_TRACE_STATS(FATAL, "cmd_result = %s ", cmd_result);
  932. }
  933. /*
  934. * dp_print_tx_hwq_cmd_stall_stats_tlv_v: display htt_tx_hwq_cmd_stall_stats_tlv
  935. * @tag_buf: buffer containing the tlv htt_tx_hwq_cmd_stall_stats_tlv_v
  936. *
  937. * return:void
  938. */
  939. static inline void dp_print_tx_hwq_cmd_stall_stats_tlv_v(uint32_t *tag_buf)
  940. {
  941. htt_tx_hwq_cmd_stall_stats_tlv_v *dp_stats_buf =
  942. (htt_tx_hwq_cmd_stall_stats_tlv_v *)tag_buf;
  943. uint8_t i;
  944. uint16_t index = 0;
  945. char cmd_stall_status[DP_MAX_STRING_LEN];
  946. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  947. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_CMD_STALL_STATS);
  948. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_CMD_STALL_STATS_TLV_V:");
  949. for (i = 0; i < tag_len; i++) {
  950. index += qdf_snprint(&cmd_stall_status[index],
  951. DP_MAX_STRING_LEN - index,
  952. " %d:%d,", i,
  953. dp_stats_buf->cmd_stall_status[i]);
  954. }
  955. DP_TRACE_STATS(FATAL, "cmd_stall_status = %s\n", cmd_stall_status);
  956. }
  957. /*
  958. * dp_print_tx_hwq_fes_result_stats_tlv_v: display htt_tx_hwq_fes_result_stats
  959. * @tag_buf: buffer containing the tlv htt_tx_hwq_fes_result_stats_tlv_v
  960. *
  961. * return:void
  962. */
  963. static inline void dp_print_tx_hwq_fes_result_stats_tlv_v(uint32_t *tag_buf)
  964. {
  965. htt_tx_hwq_fes_result_stats_tlv_v *dp_stats_buf =
  966. (htt_tx_hwq_fes_result_stats_tlv_v *)tag_buf;
  967. uint8_t i;
  968. uint16_t index = 0;
  969. char fes_result[DP_MAX_STRING_LEN];
  970. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  971. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_HWQ_MAX_FES_RESULT_STATS);
  972. DP_TRACE_STATS(FATAL, "HTT_TX_HWQ_FES_RESULT_STATS_TLV_V:");
  973. for (i = 0; i < tag_len; i++) {
  974. index += qdf_snprint(&fes_result[index],
  975. DP_MAX_STRING_LEN - index,
  976. " %d:%d,", i, dp_stats_buf->fes_result[i]);
  977. }
  978. DP_TRACE_STATS(FATAL, "fes_result = %s ", fes_result);
  979. }
  980. /*
  981. * dp_print_tx_selfgen_cmn_stats_tlv: display htt_tx_selfgen_cmn_stats_tlv
  982. * @tag_buf: buffer containing the tlv htt_tx_selfgen_cmn_stats_tlv
  983. *
  984. * return:void
  985. */
  986. static inline void dp_print_tx_selfgen_cmn_stats_tlv(uint32_t *tag_buf)
  987. {
  988. htt_tx_selfgen_cmn_stats_tlv *dp_stats_buf =
  989. (htt_tx_selfgen_cmn_stats_tlv *)tag_buf;
  990. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_CMN_STATS_TLV:");
  991. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  992. dp_stats_buf->mac_id__word);
  993. DP_TRACE_STATS(FATAL, "su_bar = %d",
  994. dp_stats_buf->su_bar);
  995. DP_TRACE_STATS(FATAL, "rts = %d",
  996. dp_stats_buf->rts);
  997. DP_TRACE_STATS(FATAL, "cts2self = %d",
  998. dp_stats_buf->cts2self);
  999. DP_TRACE_STATS(FATAL, "qos_null = %d",
  1000. dp_stats_buf->qos_null);
  1001. DP_TRACE_STATS(FATAL, "delayed_bar_1 = %d",
  1002. dp_stats_buf->delayed_bar_1);
  1003. DP_TRACE_STATS(FATAL, "delayed_bar_2 = %d",
  1004. dp_stats_buf->delayed_bar_2);
  1005. DP_TRACE_STATS(FATAL, "delayed_bar_3 = %d",
  1006. dp_stats_buf->delayed_bar_3);
  1007. DP_TRACE_STATS(FATAL, "delayed_bar_4 = %d",
  1008. dp_stats_buf->delayed_bar_4);
  1009. DP_TRACE_STATS(FATAL, "delayed_bar_5 = %d",
  1010. dp_stats_buf->delayed_bar_5);
  1011. DP_TRACE_STATS(FATAL, "delayed_bar_6 = %d",
  1012. dp_stats_buf->delayed_bar_6);
  1013. DP_TRACE_STATS(FATAL, "delayed_bar_7 = %d\n",
  1014. dp_stats_buf->delayed_bar_7);
  1015. }
  1016. /*
  1017. * dp_print_tx_selfgen_ac_stats_tlv: display htt_tx_selfgen_ac_stats_tlv
  1018. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ac_stats_tlv
  1019. *
  1020. * return:void
  1021. */
  1022. static inline void dp_print_tx_selfgen_ac_stats_tlv(uint32_t *tag_buf)
  1023. {
  1024. htt_tx_selfgen_ac_stats_tlv *dp_stats_buf =
  1025. (htt_tx_selfgen_ac_stats_tlv *)tag_buf;
  1026. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AC_STATS_TLV:");
  1027. DP_TRACE_STATS(FATAL, "ac_su_ndpa = %d",
  1028. dp_stats_buf->ac_su_ndpa);
  1029. DP_TRACE_STATS(FATAL, "ac_su_ndp = %d",
  1030. dp_stats_buf->ac_su_ndp);
  1031. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndpa = %d",
  1032. dp_stats_buf->ac_mu_mimo_ndpa);
  1033. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndp = %d",
  1034. dp_stats_buf->ac_mu_mimo_ndp);
  1035. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_1 = %d",
  1036. dp_stats_buf->ac_mu_mimo_brpoll_1);
  1037. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_2 = %d",
  1038. dp_stats_buf->ac_mu_mimo_brpoll_2);
  1039. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brpoll_3 = %d\n",
  1040. dp_stats_buf->ac_mu_mimo_brpoll_3);
  1041. }
  1042. /*
  1043. * dp_print_tx_selfgen_ax_stats_tlv: display htt_tx_selfgen_ax_stats_tlv
  1044. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ax_stats_tlv
  1045. *
  1046. * return:void
  1047. */
  1048. static inline void dp_print_tx_selfgen_ax_stats_tlv(uint32_t *tag_buf)
  1049. {
  1050. htt_tx_selfgen_ax_stats_tlv *dp_stats_buf =
  1051. (htt_tx_selfgen_ax_stats_tlv *)tag_buf;
  1052. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AX_STATS_TLV:");
  1053. DP_TRACE_STATS(FATAL, "ax_su_ndpa = %d",
  1054. dp_stats_buf->ax_su_ndpa);
  1055. DP_TRACE_STATS(FATAL, "ax_su_ndp = %d",
  1056. dp_stats_buf->ax_su_ndp);
  1057. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndpa = %d",
  1058. dp_stats_buf->ax_mu_mimo_ndpa);
  1059. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndp = %d",
  1060. dp_stats_buf->ax_mu_mimo_ndp);
  1061. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_1 = %d",
  1062. dp_stats_buf->ax_mu_mimo_brpoll_1);
  1063. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_2 = %d",
  1064. dp_stats_buf->ax_mu_mimo_brpoll_2);
  1065. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_3 = %d",
  1066. dp_stats_buf->ax_mu_mimo_brpoll_3);
  1067. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_4 = %d",
  1068. dp_stats_buf->ax_mu_mimo_brpoll_4);
  1069. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_5 = %d",
  1070. dp_stats_buf->ax_mu_mimo_brpoll_5);
  1071. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_6 = %d",
  1072. dp_stats_buf->ax_mu_mimo_brpoll_6);
  1073. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brpoll_7 = %d",
  1074. dp_stats_buf->ax_mu_mimo_brpoll_7);
  1075. DP_TRACE_STATS(FATAL, "ax_basic_trigger = %d",
  1076. dp_stats_buf->ax_basic_trigger);
  1077. DP_TRACE_STATS(FATAL, "ax_bsr_trigger = %d",
  1078. dp_stats_buf->ax_bsr_trigger);
  1079. DP_TRACE_STATS(FATAL, "ax_mu_bar_trigger = %d",
  1080. dp_stats_buf->ax_mu_bar_trigger);
  1081. DP_TRACE_STATS(FATAL, "ax_mu_rts_trigger = %d\n",
  1082. dp_stats_buf->ax_mu_rts_trigger);
  1083. }
  1084. /*
  1085. * dp_print_tx_selfgen_ac_err_stats_tlv: display htt_tx_selfgen_ac_err_stats_tlv
  1086. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ac_err_stats_tlv
  1087. *
  1088. * return:void
  1089. */
  1090. static inline void dp_print_tx_selfgen_ac_err_stats_tlv(uint32_t *tag_buf)
  1091. {
  1092. htt_tx_selfgen_ac_err_stats_tlv *dp_stats_buf =
  1093. (htt_tx_selfgen_ac_err_stats_tlv *)tag_buf;
  1094. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AC_ERR_STATS_TLV:");
  1095. DP_TRACE_STATS(FATAL, "ac_su_ndp_err = %d",
  1096. dp_stats_buf->ac_su_ndp_err);
  1097. DP_TRACE_STATS(FATAL, "ac_su_ndpa_err = %d",
  1098. dp_stats_buf->ac_su_ndpa_err);
  1099. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndpa_err = %d",
  1100. dp_stats_buf->ac_mu_mimo_ndpa_err);
  1101. DP_TRACE_STATS(FATAL, "ac_mu_mimo_ndp_err = %d",
  1102. dp_stats_buf->ac_mu_mimo_ndp_err);
  1103. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp1_err = %d",
  1104. dp_stats_buf->ac_mu_mimo_brp1_err);
  1105. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp2_err = %d",
  1106. dp_stats_buf->ac_mu_mimo_brp2_err);
  1107. DP_TRACE_STATS(FATAL, "ac_mu_mimo_brp3_err = %d\n",
  1108. dp_stats_buf->ac_mu_mimo_brp3_err);
  1109. }
  1110. /*
  1111. * dp_print_tx_selfgen_ax_err_stats_tlv: display htt_tx_selfgen_ax_err_stats_tlv
  1112. * @tag_buf: buffer containing the tlv htt_tx_selfgen_ax_err_stats_tlv
  1113. *
  1114. * return:void
  1115. */
  1116. static inline void dp_print_tx_selfgen_ax_err_stats_tlv(uint32_t *tag_buf)
  1117. {
  1118. htt_tx_selfgen_ax_err_stats_tlv *dp_stats_buf =
  1119. (htt_tx_selfgen_ax_err_stats_tlv *)tag_buf;
  1120. DP_TRACE_STATS(FATAL, "HTT_TX_SELFGEN_AX_ERR_STATS_TLV:");
  1121. DP_TRACE_STATS(FATAL, "ax_su_ndp_err = %d",
  1122. dp_stats_buf->ax_su_ndp_err);
  1123. DP_TRACE_STATS(FATAL, "ax_su_ndpa_err = %d",
  1124. dp_stats_buf->ax_su_ndpa_err);
  1125. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndpa_err = %d",
  1126. dp_stats_buf->ax_mu_mimo_ndpa_err);
  1127. DP_TRACE_STATS(FATAL, "ax_mu_mimo_ndp_err = %d",
  1128. dp_stats_buf->ax_mu_mimo_ndp_err);
  1129. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp1_err = %d",
  1130. dp_stats_buf->ax_mu_mimo_brp1_err);
  1131. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp2_err = %d",
  1132. dp_stats_buf->ax_mu_mimo_brp2_err);
  1133. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp3_err = %d",
  1134. dp_stats_buf->ax_mu_mimo_brp3_err);
  1135. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp4_err = %d",
  1136. dp_stats_buf->ax_mu_mimo_brp4_err);
  1137. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp5_err = %d",
  1138. dp_stats_buf->ax_mu_mimo_brp5_err);
  1139. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp6_err = %d",
  1140. dp_stats_buf->ax_mu_mimo_brp6_err);
  1141. DP_TRACE_STATS(FATAL, "ax_mu_mimo_brp7_err = %d",
  1142. dp_stats_buf->ax_mu_mimo_brp7_err);
  1143. DP_TRACE_STATS(FATAL, "ax_basic_trigger_err = %d",
  1144. dp_stats_buf->ax_basic_trigger_err);
  1145. DP_TRACE_STATS(FATAL, "ax_bsr_trigger_err = %d",
  1146. dp_stats_buf->ax_bsr_trigger_err);
  1147. DP_TRACE_STATS(FATAL, "ax_mu_bar_trigger_err = %d",
  1148. dp_stats_buf->ax_mu_bar_trigger_err);
  1149. DP_TRACE_STATS(FATAL, "ax_mu_rts_trigger_err = %d\n",
  1150. dp_stats_buf->ax_mu_rts_trigger_err);
  1151. }
  1152. /*
  1153. * dp_print_tx_pdev_mu_mimo_sch_stats_tlv: display htt_tx_pdev_mu_mimo_sch_stats
  1154. * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_sch_stats_tlv
  1155. *
  1156. * return:void
  1157. */
  1158. static inline void dp_print_tx_pdev_mu_mimo_sch_stats_tlv(uint32_t *tag_buf)
  1159. {
  1160. htt_tx_pdev_mu_mimo_sch_stats_tlv *dp_stats_buf =
  1161. (htt_tx_pdev_mu_mimo_sch_stats_tlv *)tag_buf;
  1162. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_SCH_STATS_TLV:");
  1163. DP_TRACE_STATS(FATAL, "mu_mimo_sch_posted = %d",
  1164. dp_stats_buf->mu_mimo_sch_posted);
  1165. DP_TRACE_STATS(FATAL, "mu_mimo_sch_failed = %d",
  1166. dp_stats_buf->mu_mimo_sch_failed);
  1167. DP_TRACE_STATS(FATAL, "mu_mimo_ppdu_posted = %d\n",
  1168. dp_stats_buf->mu_mimo_ppdu_posted);
  1169. }
  1170. /*
  1171. * dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv: display
  1172. * htt_tx_pdev_mu_mimo_mpdu_stats_tlv
  1173. * @tag_buf: buffer containing the tlv htt_tx_pdev_mu_mimo_mpdu_stats_tlv
  1174. *
  1175. * return:void
  1176. */
  1177. static inline void dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(uint32_t *tag_buf)
  1178. {
  1179. htt_tx_pdev_mu_mimo_mpdu_stats_tlv *dp_stats_buf =
  1180. (htt_tx_pdev_mu_mimo_mpdu_stats_tlv *)tag_buf;
  1181. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_MU_MIMO_MPDU_STATS_TLV:");
  1182. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_queued_usr = %d",
  1183. dp_stats_buf->mu_mimo_mpdus_queued_usr);
  1184. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_tried_usr = %d",
  1185. dp_stats_buf->mu_mimo_mpdus_tried_usr);
  1186. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_failed_usr = %d",
  1187. dp_stats_buf->mu_mimo_mpdus_failed_usr);
  1188. DP_TRACE_STATS(FATAL, "mu_mimo_mpdus_requeued_usr = %d",
  1189. dp_stats_buf->mu_mimo_mpdus_requeued_usr);
  1190. DP_TRACE_STATS(FATAL, "mu_mimo_err_no_ba_usr = %d",
  1191. dp_stats_buf->mu_mimo_err_no_ba_usr);
  1192. DP_TRACE_STATS(FATAL, "mu_mimo_mpdu_underrun_usr = %d",
  1193. dp_stats_buf->mu_mimo_mpdu_underrun_usr);
  1194. DP_TRACE_STATS(FATAL, "mu_mimo_ampdu_underrun_usr = %d\n",
  1195. dp_stats_buf->mu_mimo_ampdu_underrun_usr);
  1196. }
  1197. /*
  1198. * dp_print_sched_txq_cmd_posted_tlv_v: display htt_sched_txq_cmd_posted_tlv_v
  1199. * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_posted_tlv_v
  1200. *
  1201. * return:void
  1202. */
  1203. static inline void dp_print_sched_txq_cmd_posted_tlv_v(uint32_t *tag_buf)
  1204. {
  1205. htt_sched_txq_cmd_posted_tlv_v *dp_stats_buf =
  1206. (htt_sched_txq_cmd_posted_tlv_v *)tag_buf;
  1207. uint8_t i;
  1208. uint16_t index = 0;
  1209. char sched_cmd_posted[DP_MAX_STRING_LEN];
  1210. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1211. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX);
  1212. DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_POSTED_TLV_V:");
  1213. for (i = 0; i < tag_len; i++) {
  1214. index += qdf_snprint(&sched_cmd_posted[index],
  1215. DP_MAX_STRING_LEN - index,
  1216. " %d:%d,", i,
  1217. dp_stats_buf->sched_cmd_posted[i]);
  1218. }
  1219. DP_TRACE_STATS(FATAL, "sched_cmd_posted = %s\n", sched_cmd_posted);
  1220. }
  1221. /*
  1222. * dp_print_sched_txq_cmd_reaped_tlv_v: display htt_sched_txq_cmd_reaped_tlv_v
  1223. * @tag_buf: buffer containing the tlv htt_sched_txq_cmd_reaped_tlv_v
  1224. *
  1225. * return:void
  1226. */
  1227. static inline void dp_print_sched_txq_cmd_reaped_tlv_v(uint32_t *tag_buf)
  1228. {
  1229. htt_sched_txq_cmd_reaped_tlv_v *dp_stats_buf =
  1230. (htt_sched_txq_cmd_reaped_tlv_v *)tag_buf;
  1231. uint8_t i;
  1232. uint16_t index = 0;
  1233. char sched_cmd_reaped[DP_MAX_STRING_LEN];
  1234. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1235. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_SCHED_TX_MODE_MAX);
  1236. DP_TRACE_STATS(FATAL, "HTT_SCHED_TXQ_CMD_REAPED_TLV_V:");
  1237. for (i = 0; i < tag_len; i++) {
  1238. index += qdf_snprint(&sched_cmd_reaped[index],
  1239. DP_MAX_STRING_LEN - index,
  1240. " %d:%d,", i,
  1241. dp_stats_buf->sched_cmd_reaped[i]);
  1242. }
  1243. DP_TRACE_STATS(FATAL, "sched_cmd_reaped = %s\n", sched_cmd_reaped);
  1244. }
  1245. /*
  1246. * dp_print_tx_pdev_stats_sched_per_txq_tlv: display
  1247. * htt_tx_pdev_stats_sched_per_txq_tlv
  1248. * @tag_buf: buffer containing the tlv htt_tx_pdev_stats_sched_per_txq_tlv
  1249. *
  1250. * return:void
  1251. */
  1252. static inline void dp_print_tx_pdev_stats_sched_per_txq_tlv(uint32_t *tag_buf)
  1253. {
  1254. htt_tx_pdev_stats_sched_per_txq_tlv *dp_stats_buf =
  1255. (htt_tx_pdev_stats_sched_per_txq_tlv *)tag_buf;
  1256. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_STATS_SCHED_PER_TXQ_TLV:");
  1257. DP_TRACE_STATS(FATAL, "mac_id__txq_id__word = %d",
  1258. dp_stats_buf->mac_id__txq_id__word);
  1259. DP_TRACE_STATS(FATAL, "sched_policy = %d",
  1260. dp_stats_buf->sched_policy);
  1261. DP_TRACE_STATS(FATAL, "last_sched_cmd_posted_timestamp = %d",
  1262. dp_stats_buf->last_sched_cmd_posted_timestamp);
  1263. DP_TRACE_STATS(FATAL, "last_sched_cmd_compl_timestamp = %d",
  1264. dp_stats_buf->last_sched_cmd_compl_timestamp);
  1265. DP_TRACE_STATS(FATAL, "sched_2_tac_lwm_count = %d",
  1266. dp_stats_buf->sched_2_tac_lwm_count);
  1267. DP_TRACE_STATS(FATAL, "sched_2_tac_ring_full = %d",
  1268. dp_stats_buf->sched_2_tac_ring_full);
  1269. DP_TRACE_STATS(FATAL, "sched_cmd_post_failure = %d",
  1270. dp_stats_buf->sched_cmd_post_failure);
  1271. DP_TRACE_STATS(FATAL, "num_active_tids = %d",
  1272. dp_stats_buf->num_active_tids);
  1273. DP_TRACE_STATS(FATAL, "num_ps_schedules = %d",
  1274. dp_stats_buf->num_ps_schedules);
  1275. DP_TRACE_STATS(FATAL, "sched_cmds_pending = %d",
  1276. dp_stats_buf->sched_cmds_pending);
  1277. DP_TRACE_STATS(FATAL, "num_tid_register = %d",
  1278. dp_stats_buf->num_tid_register);
  1279. DP_TRACE_STATS(FATAL, "num_tid_unregister = %d",
  1280. dp_stats_buf->num_tid_unregister);
  1281. DP_TRACE_STATS(FATAL, "num_qstats_queried = %d",
  1282. dp_stats_buf->num_qstats_queried);
  1283. DP_TRACE_STATS(FATAL, "qstats_update_pending = %d",
  1284. dp_stats_buf->qstats_update_pending);
  1285. DP_TRACE_STATS(FATAL, "last_qstats_query_timestamp = %d",
  1286. dp_stats_buf->last_qstats_query_timestamp);
  1287. DP_TRACE_STATS(FATAL, "num_tqm_cmdq_full = %d",
  1288. dp_stats_buf->num_tqm_cmdq_full);
  1289. DP_TRACE_STATS(FATAL, "num_de_sched_algo_trigger = %d",
  1290. dp_stats_buf->num_de_sched_algo_trigger);
  1291. DP_TRACE_STATS(FATAL, "num_rt_sched_algo_trigger = %d",
  1292. dp_stats_buf->num_rt_sched_algo_trigger);
  1293. DP_TRACE_STATS(FATAL, "num_tqm_sched_algo_trigger = %d",
  1294. dp_stats_buf->num_tqm_sched_algo_trigger);
  1295. DP_TRACE_STATS(FATAL, "notify_sched = %d\n",
  1296. dp_stats_buf->notify_sched);
  1297. }
  1298. /*
  1299. * dp_print_stats_tx_sched_cmn_tlv: display htt_stats_tx_sched_cmn_tlv
  1300. * @tag_buf: buffer containing the tlv htt_stats_tx_sched_cmn_tlv
  1301. *
  1302. * return:void
  1303. */
  1304. static inline void dp_print_stats_tx_sched_cmn_tlv(uint32_t *tag_buf)
  1305. {
  1306. htt_stats_tx_sched_cmn_tlv *dp_stats_buf =
  1307. (htt_stats_tx_sched_cmn_tlv *)tag_buf;
  1308. DP_TRACE_STATS(FATAL, "HTT_STATS_TX_SCHED_CMN_TLV:");
  1309. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1310. dp_stats_buf->mac_id__word);
  1311. DP_TRACE_STATS(FATAL, "current_timestamp = %d\n",
  1312. dp_stats_buf->current_timestamp);
  1313. }
  1314. /*
  1315. * dp_print_tx_tqm_gen_mpdu_stats_tlv_v: display htt_tx_tqm_gen_mpdu_stats_tlv_v
  1316. * @tag_buf: buffer containing the tlv htt_tx_tqm_gen_mpdu_stats_tlv_v
  1317. *
  1318. * return:void
  1319. */
  1320. static inline void dp_print_tx_tqm_gen_mpdu_stats_tlv_v(uint32_t *tag_buf)
  1321. {
  1322. htt_tx_tqm_gen_mpdu_stats_tlv_v *dp_stats_buf =
  1323. (htt_tx_tqm_gen_mpdu_stats_tlv_v *)tag_buf;
  1324. uint8_t i;
  1325. uint16_t index = 0;
  1326. char gen_mpdu_end_reason[DP_MAX_STRING_LEN];
  1327. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1328. tag_len = qdf_min(tag_len,
  1329. (uint32_t)HTT_TX_TQM_MAX_GEN_MPDU_END_REASON);
  1330. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_GEN_MPDU_STATS_TLV_V:");
  1331. for (i = 0; i < tag_len; i++) {
  1332. index += qdf_snprint(&gen_mpdu_end_reason[index],
  1333. DP_MAX_STRING_LEN - index,
  1334. " %d:%d,", i,
  1335. dp_stats_buf->gen_mpdu_end_reason[i]);
  1336. }
  1337. DP_TRACE_STATS(FATAL, "gen_mpdu_end_reason = %s\n", gen_mpdu_end_reason);
  1338. }
  1339. /*
  1340. * dp_print_tx_tqm_list_mpdu_stats_tlv_v: display htt_tx_tqm_list_mpdu_stats_tlv
  1341. * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_stats_tlv_v
  1342. *
  1343. * return:void
  1344. */
  1345. static inline void dp_print_tx_tqm_list_mpdu_stats_tlv_v(uint32_t *tag_buf)
  1346. {
  1347. htt_tx_tqm_list_mpdu_stats_tlv_v *dp_stats_buf =
  1348. (htt_tx_tqm_list_mpdu_stats_tlv_v *)tag_buf;
  1349. uint8_t i;
  1350. uint16_t index = 0;
  1351. char list_mpdu_end_reason[DP_MAX_STRING_LEN];
  1352. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1353. tag_len = qdf_min(tag_len,
  1354. (uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_END_REASON);
  1355. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_STATS_TLV_V:");
  1356. for (i = 0; i < tag_len; i++) {
  1357. index += qdf_snprint(&list_mpdu_end_reason[index],
  1358. DP_MAX_STRING_LEN - index,
  1359. " %d:%d,", i,
  1360. dp_stats_buf->list_mpdu_end_reason[i]);
  1361. }
  1362. DP_TRACE_STATS(FATAL, "list_mpdu_end_reason = %s\n",
  1363. list_mpdu_end_reason);
  1364. }
  1365. /*
  1366. * dp_print_tx_tqm_list_mpdu_cnt_tlv_v: display htt_tx_tqm_list_mpdu_cnt_tlv_v
  1367. * @tag_buf: buffer containing the tlv htt_tx_tqm_list_mpdu_cnt_tlv_v
  1368. *
  1369. * return:void
  1370. */
  1371. static inline void dp_print_tx_tqm_list_mpdu_cnt_tlv_v(uint32_t *tag_buf)
  1372. {
  1373. htt_tx_tqm_list_mpdu_cnt_tlv_v *dp_stats_buf =
  1374. (htt_tx_tqm_list_mpdu_cnt_tlv_v *)tag_buf;
  1375. uint8_t i;
  1376. uint16_t index = 0;
  1377. char list_mpdu_cnt_hist[DP_MAX_STRING_LEN];
  1378. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1379. tag_len = qdf_min(tag_len,
  1380. (uint32_t)HTT_TX_TQM_MAX_LIST_MPDU_CNT_HISTOGRAM_BINS);
  1381. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_LIST_MPDU_CNT_TLV_V:");
  1382. for (i = 0; i < tag_len; i++) {
  1383. index += qdf_snprint(&list_mpdu_cnt_hist[index],
  1384. DP_MAX_STRING_LEN - index,
  1385. " %d:%d,", i,
  1386. dp_stats_buf->list_mpdu_cnt_hist[i]);
  1387. }
  1388. DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist = %s\n", list_mpdu_cnt_hist);
  1389. }
  1390. /*
  1391. * dp_print_tx_tqm_pdev_stats_tlv_v: display htt_tx_tqm_pdev_stats_tlv_v
  1392. * @tag_buf: buffer containing the tlv htt_tx_tqm_pdev_stats_tlv_v
  1393. *
  1394. * return:void
  1395. */
  1396. static inline void dp_print_tx_tqm_pdev_stats_tlv_v(uint32_t *tag_buf)
  1397. {
  1398. htt_tx_tqm_pdev_stats_tlv_v *dp_stats_buf =
  1399. (htt_tx_tqm_pdev_stats_tlv_v *)tag_buf;
  1400. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_PDEV_STATS_TLV_V:");
  1401. DP_TRACE_STATS(FATAL, "msdu_count = %d",
  1402. dp_stats_buf->msdu_count);
  1403. DP_TRACE_STATS(FATAL, "mpdu_count = %d",
  1404. dp_stats_buf->mpdu_count);
  1405. DP_TRACE_STATS(FATAL, "remove_msdu = %d",
  1406. dp_stats_buf->remove_msdu);
  1407. DP_TRACE_STATS(FATAL, "remove_mpdu = %d",
  1408. dp_stats_buf->remove_mpdu);
  1409. DP_TRACE_STATS(FATAL, "remove_msdu_ttl = %d",
  1410. dp_stats_buf->remove_msdu_ttl);
  1411. DP_TRACE_STATS(FATAL, "send_bar = %d",
  1412. dp_stats_buf->send_bar);
  1413. DP_TRACE_STATS(FATAL, "bar_sync = %d",
  1414. dp_stats_buf->bar_sync);
  1415. DP_TRACE_STATS(FATAL, "notify_mpdu = %d",
  1416. dp_stats_buf->notify_mpdu);
  1417. DP_TRACE_STATS(FATAL, "sync_cmd = %d",
  1418. dp_stats_buf->sync_cmd);
  1419. DP_TRACE_STATS(FATAL, "write_cmd = %d",
  1420. dp_stats_buf->write_cmd);
  1421. DP_TRACE_STATS(FATAL, "hwsch_trigger = %d",
  1422. dp_stats_buf->hwsch_trigger);
  1423. DP_TRACE_STATS(FATAL, "ack_tlv_proc = %d",
  1424. dp_stats_buf->ack_tlv_proc);
  1425. DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d",
  1426. dp_stats_buf->gen_mpdu_cmd);
  1427. DP_TRACE_STATS(FATAL, "gen_list_cmd = %d",
  1428. dp_stats_buf->gen_list_cmd);
  1429. DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d",
  1430. dp_stats_buf->remove_mpdu_cmd);
  1431. DP_TRACE_STATS(FATAL, "remove_mpdu_tried_cmd = %d",
  1432. dp_stats_buf->remove_mpdu_tried_cmd);
  1433. DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d",
  1434. dp_stats_buf->mpdu_queue_stats_cmd);
  1435. DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d",
  1436. dp_stats_buf->mpdu_head_info_cmd);
  1437. DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d",
  1438. dp_stats_buf->msdu_flow_stats_cmd);
  1439. DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d",
  1440. dp_stats_buf->remove_msdu_cmd);
  1441. DP_TRACE_STATS(FATAL, "remove_msdu_ttl_cmd = %d",
  1442. dp_stats_buf->remove_msdu_ttl_cmd);
  1443. DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d",
  1444. dp_stats_buf->flush_cache_cmd);
  1445. DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d",
  1446. dp_stats_buf->update_mpduq_cmd);
  1447. DP_TRACE_STATS(FATAL, "enqueue = %d",
  1448. dp_stats_buf->enqueue);
  1449. DP_TRACE_STATS(FATAL, "enqueue_notify = %d",
  1450. dp_stats_buf->enqueue_notify);
  1451. DP_TRACE_STATS(FATAL, "notify_mpdu_at_head = %d",
  1452. dp_stats_buf->notify_mpdu_at_head);
  1453. DP_TRACE_STATS(FATAL, "notify_mpdu_state_valid = %d\n",
  1454. dp_stats_buf->notify_mpdu_state_valid);
  1455. }
  1456. /*
  1457. * dp_print_tx_tqm_cmn_stats_tlv: display htt_tx_tqm_cmn_stats_tlv
  1458. * @tag_buf: buffer containing the tlv htt_tx_tqm_cmn_stats_tlv
  1459. *
  1460. * return:void
  1461. */
  1462. static inline void dp_print_tx_tqm_cmn_stats_tlv(uint32_t *tag_buf)
  1463. {
  1464. htt_tx_tqm_cmn_stats_tlv *dp_stats_buf =
  1465. (htt_tx_tqm_cmn_stats_tlv *)tag_buf;
  1466. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMN_STATS_TLV:");
  1467. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1468. dp_stats_buf->mac_id__word);
  1469. DP_TRACE_STATS(FATAL, "max_cmdq_id = %d",
  1470. dp_stats_buf->max_cmdq_id);
  1471. DP_TRACE_STATS(FATAL, "list_mpdu_cnt_hist_intvl = %d",
  1472. dp_stats_buf->list_mpdu_cnt_hist_intvl);
  1473. DP_TRACE_STATS(FATAL, "add_msdu = %d",
  1474. dp_stats_buf->add_msdu);
  1475. DP_TRACE_STATS(FATAL, "q_empty = %d",
  1476. dp_stats_buf->q_empty);
  1477. DP_TRACE_STATS(FATAL, "q_not_empty = %d",
  1478. dp_stats_buf->q_not_empty);
  1479. DP_TRACE_STATS(FATAL, "drop_notification = %d",
  1480. dp_stats_buf->drop_notification);
  1481. DP_TRACE_STATS(FATAL, "desc_threshold = %d\n",
  1482. dp_stats_buf->desc_threshold);
  1483. }
  1484. /*
  1485. * dp_print_tx_tqm_error_stats_tlv: display htt_tx_tqm_error_stats_tlv
  1486. * @tag_buf: buffer containing the tlv htt_tx_tqm_error_stats_tlv
  1487. *
  1488. * return:void
  1489. */
  1490. static inline void dp_print_tx_tqm_error_stats_tlv(uint32_t *tag_buf)
  1491. {
  1492. htt_tx_tqm_error_stats_tlv *dp_stats_buf =
  1493. (htt_tx_tqm_error_stats_tlv *)tag_buf;
  1494. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_ERROR_STATS_TLV:");
  1495. DP_TRACE_STATS(FATAL, "q_empty_failure = %d",
  1496. dp_stats_buf->q_empty_failure);
  1497. DP_TRACE_STATS(FATAL, "q_not_empty_failure = %d",
  1498. dp_stats_buf->q_not_empty_failure);
  1499. DP_TRACE_STATS(FATAL, "add_msdu_failure = %d\n",
  1500. dp_stats_buf->add_msdu_failure);
  1501. }
  1502. /*
  1503. * dp_print_tx_tqm_cmdq_status_tlv: display htt_tx_tqm_cmdq_status_tlv
  1504. * @tag_buf: buffer containing the tlv htt_tx_tqm_cmdq_status_tlv
  1505. *
  1506. * return:void
  1507. */
  1508. static inline void dp_print_tx_tqm_cmdq_status_tlv(uint32_t *tag_buf)
  1509. {
  1510. htt_tx_tqm_cmdq_status_tlv *dp_stats_buf =
  1511. (htt_tx_tqm_cmdq_status_tlv *)tag_buf;
  1512. DP_TRACE_STATS(FATAL, "HTT_TX_TQM_CMDQ_STATUS_TLV:");
  1513. DP_TRACE_STATS(FATAL, "mac_id__cmdq_id__word = %d",
  1514. dp_stats_buf->mac_id__cmdq_id__word);
  1515. DP_TRACE_STATS(FATAL, "sync_cmd = %d",
  1516. dp_stats_buf->sync_cmd);
  1517. DP_TRACE_STATS(FATAL, "write_cmd = %d",
  1518. dp_stats_buf->write_cmd);
  1519. DP_TRACE_STATS(FATAL, "gen_mpdu_cmd = %d",
  1520. dp_stats_buf->gen_mpdu_cmd);
  1521. DP_TRACE_STATS(FATAL, "mpdu_queue_stats_cmd = %d",
  1522. dp_stats_buf->mpdu_queue_stats_cmd);
  1523. DP_TRACE_STATS(FATAL, "mpdu_head_info_cmd = %d",
  1524. dp_stats_buf->mpdu_head_info_cmd);
  1525. DP_TRACE_STATS(FATAL, "msdu_flow_stats_cmd = %d",
  1526. dp_stats_buf->msdu_flow_stats_cmd);
  1527. DP_TRACE_STATS(FATAL, "remove_mpdu_cmd = %d",
  1528. dp_stats_buf->remove_mpdu_cmd);
  1529. DP_TRACE_STATS(FATAL, "remove_msdu_cmd = %d",
  1530. dp_stats_buf->remove_msdu_cmd);
  1531. DP_TRACE_STATS(FATAL, "flush_cache_cmd = %d",
  1532. dp_stats_buf->flush_cache_cmd);
  1533. DP_TRACE_STATS(FATAL, "update_mpduq_cmd = %d",
  1534. dp_stats_buf->update_mpduq_cmd);
  1535. DP_TRACE_STATS(FATAL, "update_msduq_cmd = %d\n",
  1536. dp_stats_buf->update_msduq_cmd);
  1537. }
  1538. /*
  1539. * dp_print_tx_de_eapol_packets_stats_tlv: display htt_tx_de_eapol_packets_stats
  1540. * @tag_buf: buffer containing the tlv htt_tx_de_eapol_packets_stats_tlv
  1541. *
  1542. * return:void
  1543. */
  1544. static inline void dp_print_tx_de_eapol_packets_stats_tlv(uint32_t *tag_buf)
  1545. {
  1546. htt_tx_de_eapol_packets_stats_tlv *dp_stats_buf =
  1547. (htt_tx_de_eapol_packets_stats_tlv *)tag_buf;
  1548. DP_TRACE_STATS(FATAL, "HTT_TX_DE_EAPOL_PACKETS_STATS_TLV:");
  1549. DP_TRACE_STATS(FATAL, "m1_packets = %d",
  1550. dp_stats_buf->m1_packets);
  1551. DP_TRACE_STATS(FATAL, "m2_packets = %d",
  1552. dp_stats_buf->m2_packets);
  1553. DP_TRACE_STATS(FATAL, "m3_packets = %d",
  1554. dp_stats_buf->m3_packets);
  1555. DP_TRACE_STATS(FATAL, "m4_packets = %d",
  1556. dp_stats_buf->m4_packets);
  1557. DP_TRACE_STATS(FATAL, "g1_packets = %d",
  1558. dp_stats_buf->g1_packets);
  1559. DP_TRACE_STATS(FATAL, "g2_packets = %d\n",
  1560. dp_stats_buf->g2_packets);
  1561. }
  1562. /*
  1563. * dp_print_tx_de_classify_failed_stats_tlv: display
  1564. * htt_tx_de_classify_failed_stats_tlv
  1565. * @tag_buf: buffer containing the tlv htt_tx_de_classify_failed_stats_tlv
  1566. *
  1567. * return:void
  1568. */
  1569. static inline void dp_print_tx_de_classify_failed_stats_tlv(uint32_t *tag_buf)
  1570. {
  1571. htt_tx_de_classify_failed_stats_tlv *dp_stats_buf =
  1572. (htt_tx_de_classify_failed_stats_tlv *)tag_buf;
  1573. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_FAILED_STATS_TLV:");
  1574. DP_TRACE_STATS(FATAL, "ap_bss_peer_not_found = %d",
  1575. dp_stats_buf->ap_bss_peer_not_found);
  1576. DP_TRACE_STATS(FATAL, "ap_bcast_mcast_no_peer = %d",
  1577. dp_stats_buf->ap_bcast_mcast_no_peer);
  1578. DP_TRACE_STATS(FATAL, "sta_delete_in_progress = %d",
  1579. dp_stats_buf->sta_delete_in_progress);
  1580. DP_TRACE_STATS(FATAL, "ibss_no_bss_peer = %d",
  1581. dp_stats_buf->ibss_no_bss_peer);
  1582. DP_TRACE_STATS(FATAL, "invaild_vdev_type = %d",
  1583. dp_stats_buf->invaild_vdev_type);
  1584. DP_TRACE_STATS(FATAL, "invalid_ast_peer_entry = %d",
  1585. dp_stats_buf->invalid_ast_peer_entry);
  1586. DP_TRACE_STATS(FATAL, "peer_entry_invalid = %d",
  1587. dp_stats_buf->peer_entry_invalid);
  1588. DP_TRACE_STATS(FATAL, "ethertype_not_ip = %d",
  1589. dp_stats_buf->ethertype_not_ip);
  1590. DP_TRACE_STATS(FATAL, "eapol_lookup_failed = %d",
  1591. dp_stats_buf->eapol_lookup_failed);
  1592. DP_TRACE_STATS(FATAL, "qpeer_not_allow_data = %d",
  1593. dp_stats_buf->qpeer_not_allow_data);
  1594. DP_TRACE_STATS(FATAL, "fse_tid_override = %d\n",
  1595. dp_stats_buf->fse_tid_override);
  1596. }
  1597. /*
  1598. * dp_print_tx_de_classify_stats_tlv: display htt_tx_de_classify_stats_tlv
  1599. * @tag_buf: buffer containing the tlv htt_tx_de_classify_stats_tlv
  1600. *
  1601. * return:void
  1602. */
  1603. static inline void dp_print_tx_de_classify_stats_tlv(uint32_t *tag_buf)
  1604. {
  1605. htt_tx_de_classify_stats_tlv *dp_stats_buf =
  1606. (htt_tx_de_classify_stats_tlv *)tag_buf;
  1607. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATS_TLV:");
  1608. DP_TRACE_STATS(FATAL, "arp_packets = %d",
  1609. dp_stats_buf->arp_packets);
  1610. DP_TRACE_STATS(FATAL, "igmp_packets = %d",
  1611. dp_stats_buf->igmp_packets);
  1612. DP_TRACE_STATS(FATAL, "dhcp_packets = %d",
  1613. dp_stats_buf->dhcp_packets);
  1614. DP_TRACE_STATS(FATAL, "host_inspected = %d",
  1615. dp_stats_buf->host_inspected);
  1616. DP_TRACE_STATS(FATAL, "htt_included = %d",
  1617. dp_stats_buf->htt_included);
  1618. DP_TRACE_STATS(FATAL, "htt_valid_mcs = %d",
  1619. dp_stats_buf->htt_valid_mcs);
  1620. DP_TRACE_STATS(FATAL, "htt_valid_nss = %d",
  1621. dp_stats_buf->htt_valid_nss);
  1622. DP_TRACE_STATS(FATAL, "htt_valid_preamble_type = %d",
  1623. dp_stats_buf->htt_valid_preamble_type);
  1624. DP_TRACE_STATS(FATAL, "htt_valid_chainmask = %d",
  1625. dp_stats_buf->htt_valid_chainmask);
  1626. DP_TRACE_STATS(FATAL, "htt_valid_guard_interval = %d",
  1627. dp_stats_buf->htt_valid_guard_interval);
  1628. DP_TRACE_STATS(FATAL, "htt_valid_retries = %d",
  1629. dp_stats_buf->htt_valid_retries);
  1630. DP_TRACE_STATS(FATAL, "htt_valid_bw_info = %d",
  1631. dp_stats_buf->htt_valid_bw_info);
  1632. DP_TRACE_STATS(FATAL, "htt_valid_power = %d",
  1633. dp_stats_buf->htt_valid_power);
  1634. DP_TRACE_STATS(FATAL, "htt_valid_key_flags = %d",
  1635. dp_stats_buf->htt_valid_key_flags);
  1636. DP_TRACE_STATS(FATAL, "htt_valid_no_encryption = %d",
  1637. dp_stats_buf->htt_valid_no_encryption);
  1638. DP_TRACE_STATS(FATAL, "fse_entry_count = %d",
  1639. dp_stats_buf->fse_entry_count);
  1640. DP_TRACE_STATS(FATAL, "fse_priority_be = %d",
  1641. dp_stats_buf->fse_priority_be);
  1642. DP_TRACE_STATS(FATAL, "fse_priority_high = %d",
  1643. dp_stats_buf->fse_priority_high);
  1644. DP_TRACE_STATS(FATAL, "fse_priority_low = %d",
  1645. dp_stats_buf->fse_priority_low);
  1646. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_be = %d",
  1647. dp_stats_buf->fse_traffic_ptrn_be);
  1648. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_over_sub = %d",
  1649. dp_stats_buf->fse_traffic_ptrn_over_sub);
  1650. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_bursty = %d",
  1651. dp_stats_buf->fse_traffic_ptrn_bursty);
  1652. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_interactive = %d",
  1653. dp_stats_buf->fse_traffic_ptrn_interactive);
  1654. DP_TRACE_STATS(FATAL, "fse_traffic_ptrn_periodic = %d",
  1655. dp_stats_buf->fse_traffic_ptrn_periodic);
  1656. DP_TRACE_STATS(FATAL, "fse_hwqueue_alloc = %d",
  1657. dp_stats_buf->fse_hwqueue_alloc);
  1658. DP_TRACE_STATS(FATAL, "fse_hwqueue_created = %d",
  1659. dp_stats_buf->fse_hwqueue_created);
  1660. DP_TRACE_STATS(FATAL, "fse_hwqueue_send_to_host = %d",
  1661. dp_stats_buf->fse_hwqueue_send_to_host);
  1662. DP_TRACE_STATS(FATAL, "mcast_entry = %d",
  1663. dp_stats_buf->mcast_entry);
  1664. DP_TRACE_STATS(FATAL, "bcast_entry = %d\n",
  1665. dp_stats_buf->bcast_entry);
  1666. }
  1667. /*
  1668. * dp_print_tx_de_classify_status_stats_tlv: display
  1669. * htt_tx_de_classify_status_stats_tlv
  1670. * @tag_buf: buffer containing the tlv htt_tx_de_classify_status_stats_tlv
  1671. *
  1672. * return:void
  1673. */
  1674. static inline void dp_print_tx_de_classify_status_stats_tlv(uint32_t *tag_buf)
  1675. {
  1676. htt_tx_de_classify_status_stats_tlv *dp_stats_buf =
  1677. (htt_tx_de_classify_status_stats_tlv *)tag_buf;
  1678. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CLASSIFY_STATUS_STATS_TLV:");
  1679. DP_TRACE_STATS(FATAL, "eok = %d",
  1680. dp_stats_buf->eok);
  1681. DP_TRACE_STATS(FATAL, "classify_done = %d",
  1682. dp_stats_buf->classify_done);
  1683. DP_TRACE_STATS(FATAL, "lookup_failed = %d",
  1684. dp_stats_buf->lookup_failed);
  1685. DP_TRACE_STATS(FATAL, "send_host_dhcp = %d",
  1686. dp_stats_buf->send_host_dhcp);
  1687. DP_TRACE_STATS(FATAL, "send_host_mcast = %d",
  1688. dp_stats_buf->send_host_mcast);
  1689. DP_TRACE_STATS(FATAL, "send_host_unknown_dest = %d",
  1690. dp_stats_buf->send_host_unknown_dest);
  1691. DP_TRACE_STATS(FATAL, "send_host = %d",
  1692. dp_stats_buf->send_host);
  1693. DP_TRACE_STATS(FATAL, "status_invalid = %d\n",
  1694. dp_stats_buf->status_invalid);
  1695. }
  1696. /*
  1697. * dp_print_tx_de_enqueue_packets_stats_tlv: display
  1698. * htt_tx_de_enqueue_packets_stats_tlv
  1699. * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_packets_stats_tlv
  1700. *
  1701. * return:void
  1702. */
  1703. static inline void dp_print_tx_de_enqueue_packets_stats_tlv(uint32_t *tag_buf)
  1704. {
  1705. htt_tx_de_enqueue_packets_stats_tlv *dp_stats_buf =
  1706. (htt_tx_de_enqueue_packets_stats_tlv *)tag_buf;
  1707. DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_PACKETS_STATS_TLV:");
  1708. DP_TRACE_STATS(FATAL, "enqueued_pkts = %d",
  1709. dp_stats_buf->enqueued_pkts);
  1710. DP_TRACE_STATS(FATAL, "to_tqm = %d",
  1711. dp_stats_buf->to_tqm);
  1712. DP_TRACE_STATS(FATAL, "to_tqm_bypass = %d\n",
  1713. dp_stats_buf->to_tqm_bypass);
  1714. }
  1715. /*
  1716. * dp_print_tx_de_enqueue_discard_stats_tlv: display
  1717. * htt_tx_de_enqueue_discard_stats_tlv
  1718. * @tag_buf: buffer containing the tlv htt_tx_de_enqueue_discard_stats_tlv
  1719. *
  1720. * return:void
  1721. */
  1722. static inline void dp_print_tx_de_enqueue_discard_stats_tlv(uint32_t *tag_buf)
  1723. {
  1724. htt_tx_de_enqueue_discard_stats_tlv *dp_stats_buf =
  1725. (htt_tx_de_enqueue_discard_stats_tlv *)tag_buf;
  1726. DP_TRACE_STATS(FATAL, "HTT_TX_DE_ENQUEUE_DISCARD_STATS_TLV:");
  1727. DP_TRACE_STATS(FATAL, "discarded_pkts = %d",
  1728. dp_stats_buf->discarded_pkts);
  1729. DP_TRACE_STATS(FATAL, "local_frames = %d",
  1730. dp_stats_buf->local_frames);
  1731. DP_TRACE_STATS(FATAL, "is_ext_msdu = %d\n",
  1732. dp_stats_buf->is_ext_msdu);
  1733. }
  1734. /*
  1735. * dp_print_tx_de_compl_stats_tlv: display htt_tx_de_compl_stats_tlv
  1736. * @tag_buf: buffer containing the tlv htt_tx_de_compl_stats_tlv
  1737. *
  1738. * return:void
  1739. */
  1740. static inline void dp_print_tx_de_compl_stats_tlv(uint32_t *tag_buf)
  1741. {
  1742. htt_tx_de_compl_stats_tlv *dp_stats_buf =
  1743. (htt_tx_de_compl_stats_tlv *)tag_buf;
  1744. DP_TRACE_STATS(FATAL, "HTT_TX_DE_COMPL_STATS_TLV:");
  1745. DP_TRACE_STATS(FATAL, "tcl_dummy_frame = %d",
  1746. dp_stats_buf->tcl_dummy_frame);
  1747. DP_TRACE_STATS(FATAL, "tqm_dummy_frame = %d",
  1748. dp_stats_buf->tqm_dummy_frame);
  1749. DP_TRACE_STATS(FATAL, "tqm_notify_frame = %d",
  1750. dp_stats_buf->tqm_notify_frame);
  1751. DP_TRACE_STATS(FATAL, "fw2wbm_enq = %d",
  1752. dp_stats_buf->fw2wbm_enq);
  1753. DP_TRACE_STATS(FATAL, "tqm_bypass_frame = %d\n",
  1754. dp_stats_buf->tqm_bypass_frame);
  1755. }
  1756. /*
  1757. * dp_print_tx_de_cmn_stats_tlv: display htt_tx_de_cmn_stats_tlv
  1758. * @tag_buf: buffer containing the tlv htt_tx_de_cmn_stats_tlv
  1759. *
  1760. * return:void
  1761. */
  1762. static inline void dp_print_tx_de_cmn_stats_tlv(uint32_t *tag_buf)
  1763. {
  1764. htt_tx_de_cmn_stats_tlv *dp_stats_buf =
  1765. (htt_tx_de_cmn_stats_tlv *)tag_buf;
  1766. DP_TRACE_STATS(FATAL, "HTT_TX_DE_CMN_STATS_TLV:");
  1767. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1768. dp_stats_buf->mac_id__word);
  1769. DP_TRACE_STATS(FATAL, "tcl2fw_entry_count = %d",
  1770. dp_stats_buf->tcl2fw_entry_count);
  1771. DP_TRACE_STATS(FATAL, "not_to_fw = %d",
  1772. dp_stats_buf->not_to_fw);
  1773. DP_TRACE_STATS(FATAL, "invalid_pdev_vdev_peer = %d",
  1774. dp_stats_buf->invalid_pdev_vdev_peer);
  1775. DP_TRACE_STATS(FATAL, "tcl_res_invalid_addrx = %d",
  1776. dp_stats_buf->tcl_res_invalid_addrx);
  1777. DP_TRACE_STATS(FATAL, "wbm2fw_entry_count = %d",
  1778. dp_stats_buf->wbm2fw_entry_count);
  1779. DP_TRACE_STATS(FATAL, "invalid_pdev = %d\n",
  1780. dp_stats_buf->invalid_pdev);
  1781. }
  1782. /*
  1783. * dp_print_ring_if_stats_tlv: display htt_ring_if_stats_tlv
  1784. * @tag_buf: buffer containing the tlv htt_ring_if_stats_tlv
  1785. *
  1786. * return:void
  1787. */
  1788. static inline void dp_print_ring_if_stats_tlv(uint32_t *tag_buf)
  1789. {
  1790. htt_ring_if_stats_tlv *dp_stats_buf =
  1791. (htt_ring_if_stats_tlv *)tag_buf;
  1792. uint8_t i;
  1793. uint16_t index = 0;
  1794. char low_wm_hit_count[DP_MAX_STRING_LEN];
  1795. char high_wm_hit_count[DP_MAX_STRING_LEN];
  1796. DP_TRACE_STATS(FATAL, "HTT_RING_IF_STATS_TLV:");
  1797. DP_TRACE_STATS(FATAL, "base_addr = %d",
  1798. dp_stats_buf->base_addr);
  1799. DP_TRACE_STATS(FATAL, "elem_size = %d",
  1800. dp_stats_buf->elem_size);
  1801. DP_TRACE_STATS(FATAL, "num_elems__prefetch_tail_idx = %d",
  1802. dp_stats_buf->num_elems__prefetch_tail_idx);
  1803. DP_TRACE_STATS(FATAL, "head_idx__tail_idx = %d",
  1804. dp_stats_buf->head_idx__tail_idx);
  1805. DP_TRACE_STATS(FATAL, "shadow_head_idx__shadow_tail_idx = %d",
  1806. dp_stats_buf->shadow_head_idx__shadow_tail_idx);
  1807. DP_TRACE_STATS(FATAL, "num_tail_incr = %d",
  1808. dp_stats_buf->num_tail_incr);
  1809. DP_TRACE_STATS(FATAL, "lwm_thresh__hwm_thresh = %d",
  1810. dp_stats_buf->lwm_thresh__hwm_thresh);
  1811. DP_TRACE_STATS(FATAL, "overrun_hit_count = %d",
  1812. dp_stats_buf->overrun_hit_count);
  1813. DP_TRACE_STATS(FATAL, "underrun_hit_count = %d",
  1814. dp_stats_buf->underrun_hit_count);
  1815. DP_TRACE_STATS(FATAL, "prod_blockwait_count = %d",
  1816. dp_stats_buf->prod_blockwait_count);
  1817. DP_TRACE_STATS(FATAL, "cons_blockwait_count = %d",
  1818. dp_stats_buf->cons_blockwait_count);
  1819. for (i = 0; i < DP_HTT_LOW_WM_HIT_COUNT_LEN; i++) {
  1820. index += qdf_snprint(&low_wm_hit_count[index],
  1821. DP_MAX_STRING_LEN - index,
  1822. " %d:%d,", i,
  1823. dp_stats_buf->low_wm_hit_count[i]);
  1824. }
  1825. DP_TRACE_STATS(FATAL, "low_wm_hit_count = %s ", low_wm_hit_count);
  1826. index = 0;
  1827. for (i = 0; i < DP_HTT_HIGH_WM_HIT_COUNT_LEN; i++) {
  1828. index += qdf_snprint(&high_wm_hit_count[index],
  1829. DP_MAX_STRING_LEN - index,
  1830. " %d:%d,", i,
  1831. dp_stats_buf->high_wm_hit_count[i]);
  1832. }
  1833. DP_TRACE_STATS(FATAL, "high_wm_hit_count = %s\n", high_wm_hit_count);
  1834. }
  1835. /*
  1836. * dp_print_ring_if_cmn_tlv: display htt_ring_if_cmn_tlv
  1837. * @tag_buf: buffer containing the tlv htt_ring_if_cmn_tlv
  1838. *
  1839. * return:void
  1840. */
  1841. static inline void dp_print_ring_if_cmn_tlv(uint32_t *tag_buf)
  1842. {
  1843. htt_ring_if_cmn_tlv *dp_stats_buf =
  1844. (htt_ring_if_cmn_tlv *)tag_buf;
  1845. DP_TRACE_STATS(FATAL, "HTT_RING_IF_CMN_TLV:");
  1846. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1847. dp_stats_buf->mac_id__word);
  1848. DP_TRACE_STATS(FATAL, "num_records = %d\n",
  1849. dp_stats_buf->num_records);
  1850. }
  1851. /*
  1852. * dp_print_sfm_client_user_tlv_v: display htt_sfm_client_user_tlv_v
  1853. * @tag_buf: buffer containing the tlv htt_sfm_client_user_tlv_v
  1854. *
  1855. * return:void
  1856. */
  1857. static inline void dp_print_sfm_client_user_tlv_v(uint32_t *tag_buf)
  1858. {
  1859. htt_sfm_client_user_tlv_v *dp_stats_buf =
  1860. (htt_sfm_client_user_tlv_v *)tag_buf;
  1861. uint8_t i;
  1862. uint16_t index = 0;
  1863. char dwords_used_by_user_n[DP_MAX_STRING_LEN];
  1864. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  1865. DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_USER_TLV_V:");
  1866. for (i = 0; i < tag_len; i++) {
  1867. index += qdf_snprint(&dwords_used_by_user_n[index],
  1868. DP_MAX_STRING_LEN - index,
  1869. " %d:%d,", i,
  1870. dp_stats_buf->dwords_used_by_user_n[i]);
  1871. }
  1872. DP_TRACE_STATS(FATAL, "dwords_used_by_user_n = %s\n",
  1873. dwords_used_by_user_n);
  1874. }
  1875. /*
  1876. * dp_print_sfm_client_tlv: display htt_sfm_client_tlv
  1877. * @tag_buf: buffer containing the tlv htt_sfm_client_tlv
  1878. *
  1879. * return:void
  1880. */
  1881. static inline void dp_print_sfm_client_tlv(uint32_t *tag_buf)
  1882. {
  1883. htt_sfm_client_tlv *dp_stats_buf =
  1884. (htt_sfm_client_tlv *)tag_buf;
  1885. DP_TRACE_STATS(FATAL, "HTT_SFM_CLIENT_TLV:");
  1886. DP_TRACE_STATS(FATAL, "client_id = %d",
  1887. dp_stats_buf->client_id);
  1888. DP_TRACE_STATS(FATAL, "buf_min = %d",
  1889. dp_stats_buf->buf_min);
  1890. DP_TRACE_STATS(FATAL, "buf_max = %d",
  1891. dp_stats_buf->buf_max);
  1892. DP_TRACE_STATS(FATAL, "buf_busy = %d",
  1893. dp_stats_buf->buf_busy);
  1894. DP_TRACE_STATS(FATAL, "buf_alloc = %d",
  1895. dp_stats_buf->buf_alloc);
  1896. DP_TRACE_STATS(FATAL, "buf_avail = %d",
  1897. dp_stats_buf->buf_avail);
  1898. DP_TRACE_STATS(FATAL, "num_users = %d\n",
  1899. dp_stats_buf->num_users);
  1900. }
  1901. /*
  1902. * dp_print_sfm_cmn_tlv: display htt_sfm_cmn_tlv
  1903. * @tag_buf: buffer containing the tlv htt_sfm_cmn_tlv
  1904. *
  1905. * return:void
  1906. */
  1907. static inline void dp_print_sfm_cmn_tlv(uint32_t *tag_buf)
  1908. {
  1909. htt_sfm_cmn_tlv *dp_stats_buf =
  1910. (htt_sfm_cmn_tlv *)tag_buf;
  1911. DP_TRACE_STATS(FATAL, "HTT_SFM_CMN_TLV:");
  1912. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1913. dp_stats_buf->mac_id__word);
  1914. DP_TRACE_STATS(FATAL, "buf_total = %d",
  1915. dp_stats_buf->buf_total);
  1916. DP_TRACE_STATS(FATAL, "mem_empty = %d",
  1917. dp_stats_buf->mem_empty);
  1918. DP_TRACE_STATS(FATAL, "deallocate_bufs = %d",
  1919. dp_stats_buf->deallocate_bufs);
  1920. DP_TRACE_STATS(FATAL, "num_records = %d\n",
  1921. dp_stats_buf->num_records);
  1922. }
  1923. /*
  1924. * dp_print_sring_stats_tlv: display htt_sring_stats_tlv
  1925. * @tag_buf: buffer containing the tlv htt_sring_stats_tlv
  1926. *
  1927. * return:void
  1928. */
  1929. static inline void dp_print_sring_stats_tlv(uint32_t *tag_buf)
  1930. {
  1931. htt_sring_stats_tlv *dp_stats_buf =
  1932. (htt_sring_stats_tlv *)tag_buf;
  1933. DP_TRACE_STATS(FATAL, "HTT_SRING_STATS_TLV:");
  1934. DP_TRACE_STATS(FATAL, "mac_id__ring_id__arena__ep = %d",
  1935. dp_stats_buf->mac_id__ring_id__arena__ep);
  1936. DP_TRACE_STATS(FATAL, "base_addr_lsb = %d",
  1937. dp_stats_buf->base_addr_lsb);
  1938. DP_TRACE_STATS(FATAL, "base_addr_msb = %d",
  1939. dp_stats_buf->base_addr_msb);
  1940. DP_TRACE_STATS(FATAL, "ring_size = %d",
  1941. dp_stats_buf->ring_size);
  1942. DP_TRACE_STATS(FATAL, "elem_size = %d",
  1943. dp_stats_buf->elem_size);
  1944. DP_TRACE_STATS(FATAL, "num_avail_words__num_valid_words = %d",
  1945. dp_stats_buf->num_avail_words__num_valid_words);
  1946. DP_TRACE_STATS(FATAL, "head_ptr__tail_ptr = %d",
  1947. dp_stats_buf->head_ptr__tail_ptr);
  1948. DP_TRACE_STATS(FATAL, "consumer_empty__producer_full = %d",
  1949. dp_stats_buf->consumer_empty__producer_full);
  1950. DP_TRACE_STATS(FATAL, "prefetch_count__internal_tail_ptr = %d\n",
  1951. dp_stats_buf->prefetch_count__internal_tail_ptr);
  1952. }
  1953. /*
  1954. * dp_print_sring_cmn_tlv: display htt_sring_cmn_tlv
  1955. * @tag_buf: buffer containing the tlv htt_sring_cmn_tlv
  1956. *
  1957. * return:void
  1958. */
  1959. static inline void dp_print_sring_cmn_tlv(uint32_t *tag_buf)
  1960. {
  1961. htt_sring_cmn_tlv *dp_stats_buf =
  1962. (htt_sring_cmn_tlv *)tag_buf;
  1963. DP_TRACE_STATS(FATAL, "HTT_SRING_CMN_TLV:");
  1964. DP_TRACE_STATS(FATAL, "num_records = %d\n",
  1965. dp_stats_buf->num_records);
  1966. }
  1967. /*
  1968. * dp_print_tx_pdev_rate_stats_tlv: display htt_tx_pdev_rate_stats_tlv
  1969. * @tag_buf: buffer containing the tlv htt_tx_pdev_rate_stats_tlv
  1970. *
  1971. * return:void
  1972. */
  1973. static inline void dp_print_tx_pdev_rate_stats_tlv(uint32_t *tag_buf)
  1974. {
  1975. htt_tx_pdev_rate_stats_tlv *dp_stats_buf =
  1976. (htt_tx_pdev_rate_stats_tlv *)tag_buf;
  1977. uint8_t i, j;
  1978. uint16_t index = 0;
  1979. char str_buf[DP_MAX_STRING_LEN];
  1980. char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
  1981. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++) {
  1982. tx_gi[i] = (char *)qdf_mem_malloc(DP_MAX_STRING_LEN);
  1983. }
  1984. DP_TRACE_STATS(FATAL, "HTT_TX_PDEV_RATE_STATS_TLV:");
  1985. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  1986. dp_stats_buf->mac_id__word);
  1987. DP_TRACE_STATS(FATAL, "tx_ldpc = %d",
  1988. dp_stats_buf->tx_ldpc);
  1989. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  1990. dp_stats_buf->rts_cnt);
  1991. DP_TRACE_STATS(FATAL, "rts_success = %d",
  1992. dp_stats_buf->rts_success);
  1993. DP_TRACE_STATS(FATAL, "ack_rssi = %d",
  1994. dp_stats_buf->ack_rssi);
  1995. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  1996. for (i = 0; i < DP_HTT_TX_MCS_LEN; i++) {
  1997. index += qdf_snprint(&str_buf[index],
  1998. DP_MAX_STRING_LEN - index,
  1999. " %d:%d,", i, dp_stats_buf->tx_mcs[i]);
  2000. }
  2001. DP_TRACE_STATS(FATAL, "tx_mcs = %s ", str_buf);
  2002. index = 0;
  2003. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2004. for (i = 0; i < DP_HTT_TX_SU_MCS_LEN; i++) {
  2005. index += qdf_snprint(&str_buf[index],
  2006. DP_MAX_STRING_LEN - index,
  2007. " %d:%d,", i, dp_stats_buf->tx_su_mcs[i]);
  2008. }
  2009. DP_TRACE_STATS(FATAL, "tx_su_mcs = %s ", str_buf);
  2010. index = 0;
  2011. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2012. for (i = 0; i < DP_HTT_TX_MU_MCS_LEN; i++) {
  2013. index += qdf_snprint(&str_buf[index],
  2014. DP_MAX_STRING_LEN - index,
  2015. " %d:%d,", i, dp_stats_buf->tx_mu_mcs[i]);
  2016. }
  2017. DP_TRACE_STATS(FATAL, "tx_mu_mcs = %s ", str_buf);
  2018. index = 0;
  2019. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2020. for (i = 0; i < DP_HTT_TX_NSS_LEN; i++) {
  2021. /* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
  2022. index += qdf_snprint(&str_buf[index],
  2023. DP_MAX_STRING_LEN - index,
  2024. " %d:%d,", (i + 1),
  2025. dp_stats_buf->tx_nss[i]);
  2026. }
  2027. DP_TRACE_STATS(FATAL, "tx_nss = %s ", str_buf);
  2028. index = 0;
  2029. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2030. for (i = 0; i < DP_HTT_TX_BW_LEN; i++) {
  2031. index += qdf_snprint(&str_buf[index],
  2032. DP_MAX_STRING_LEN - index,
  2033. " %d:%d,", i, dp_stats_buf->tx_bw[i]);
  2034. }
  2035. DP_TRACE_STATS(FATAL, "tx_bw = %s ", str_buf);
  2036. index = 0;
  2037. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2038. for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2039. index += qdf_snprint(&str_buf[index],
  2040. DP_MAX_STRING_LEN - index,
  2041. " %d:%d,", i, dp_stats_buf->tx_stbc[i]);
  2042. }
  2043. DP_TRACE_STATS(FATAL, "tx_stbc = %s ", str_buf);
  2044. index = 0;
  2045. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2046. for (i = 0; i < DP_HTT_TX_PREAM_LEN; i++) {
  2047. index += qdf_snprint(&str_buf[index],
  2048. DP_MAX_STRING_LEN - index,
  2049. " %d:%d,", i, dp_stats_buf->tx_pream[i]);
  2050. }
  2051. DP_TRACE_STATS(FATAL, "tx_pream = %s ", str_buf);
  2052. for (j = 0; j < DP_HTT_PDEV_TX_GI_LEN; j++) {
  2053. index = 0;
  2054. for (i = 0; i < HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2055. index += qdf_snprint(&tx_gi[j][index],
  2056. DP_MAX_STRING_LEN - index,
  2057. " %d:%d,", i,
  2058. dp_stats_buf->tx_gi[j][i]);
  2059. }
  2060. DP_TRACE_STATS(FATAL, "tx_gi[%d] = %s ", j, tx_gi[j]);
  2061. }
  2062. index = 0;
  2063. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2064. for (i = 0; i < DP_HTT_TX_DCM_LEN; i++) {
  2065. index += qdf_snprint(&str_buf[index],
  2066. DP_MAX_STRING_LEN - index,
  2067. " %d:%d,", i, dp_stats_buf->tx_dcm[i]);
  2068. }
  2069. DP_TRACE_STATS(FATAL, "tx_dcm = %s\n", str_buf);
  2070. for (i = 0; i < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; i++)
  2071. qdf_mem_free(tx_gi[i]);
  2072. }
  2073. /*
  2074. * dp_print_rx_pdev_rate_stats_tlv: display htt_rx_pdev_rate_stats_tlv
  2075. * @tag_buf: buffer containing the tlv htt_rx_pdev_rate_stats_tlv
  2076. *
  2077. * return:void
  2078. */
  2079. static inline void dp_print_rx_pdev_rate_stats_tlv(uint32_t *tag_buf)
  2080. {
  2081. htt_rx_pdev_rate_stats_tlv *dp_stats_buf =
  2082. (htt_rx_pdev_rate_stats_tlv *)tag_buf;
  2083. uint8_t i, j;
  2084. uint16_t index = 0;
  2085. char *rssi_chain[DP_HTT_RSSI_CHAIN_LEN];
  2086. char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS];
  2087. char str_buf[DP_MAX_STRING_LEN];
  2088. for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++)
  2089. rssi_chain[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  2090. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
  2091. rx_gi[i] = qdf_mem_malloc(DP_MAX_STRING_LEN);
  2092. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_RATE_STATS_TLV:");
  2093. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  2094. dp_stats_buf->mac_id__word);
  2095. DP_TRACE_STATS(FATAL, "nsts = %d",
  2096. dp_stats_buf->nsts);
  2097. DP_TRACE_STATS(FATAL, "rx_ldpc = %d",
  2098. dp_stats_buf->rx_ldpc);
  2099. DP_TRACE_STATS(FATAL, "rts_cnt = %d",
  2100. dp_stats_buf->rts_cnt);
  2101. DP_TRACE_STATS(FATAL, "rssi_mgmt = %d",
  2102. dp_stats_buf->rssi_mgmt);
  2103. DP_TRACE_STATS(FATAL, "rssi_data = %d",
  2104. dp_stats_buf->rssi_data);
  2105. DP_TRACE_STATS(FATAL, "rssi_comb = %d",
  2106. dp_stats_buf->rssi_comb);
  2107. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2108. for (i = 0; i < DP_HTT_RX_MCS_LEN; i++) {
  2109. index += qdf_snprint(&str_buf[index],
  2110. DP_MAX_STRING_LEN - index,
  2111. " %d:%d,", i, dp_stats_buf->rx_mcs[i]);
  2112. }
  2113. DP_TRACE_STATS(FATAL, "rx_mcs = %s ", str_buf);
  2114. index = 0;
  2115. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2116. for (i = 0; i < DP_HTT_RX_NSS_LEN; i++) {
  2117. /* 0 stands for NSS 1, 1 stands for NSS 2, etc. */
  2118. index += qdf_snprint(&str_buf[index],
  2119. DP_MAX_STRING_LEN - index,
  2120. " %d:%d,", (i + 1),
  2121. dp_stats_buf->rx_nss[i]);
  2122. }
  2123. DP_TRACE_STATS(FATAL, "rx_nss = %s ", str_buf);
  2124. index = 0;
  2125. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2126. for (i = 0; i < DP_HTT_RX_DCM_LEN; i++) {
  2127. index += qdf_snprint(&str_buf[index],
  2128. DP_MAX_STRING_LEN - index,
  2129. " %d:%d,", i, dp_stats_buf->rx_dcm[i]);
  2130. }
  2131. DP_TRACE_STATS(FATAL, "rx_dcm = %s ", str_buf);
  2132. index = 0;
  2133. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2134. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2135. index += qdf_snprint(&str_buf[index],
  2136. DP_MAX_STRING_LEN - index,
  2137. " %d:%d,", i, dp_stats_buf->rx_stbc[i]);
  2138. }
  2139. DP_TRACE_STATS(FATAL, "rx_stbc = %s ", str_buf);
  2140. index = 0;
  2141. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2142. for (i = 0; i < DP_HTT_RX_BW_LEN; i++) {
  2143. index += qdf_snprint(&str_buf[index],
  2144. DP_MAX_STRING_LEN - index,
  2145. " %d:%d,", i, dp_stats_buf->rx_bw[i]);
  2146. }
  2147. DP_TRACE_STATS(FATAL, "rx_bw = %s ", str_buf);
  2148. for (j = 0; j < DP_HTT_RSSI_CHAIN_LEN; j++) {
  2149. index = 0;
  2150. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_BW_COUNTERS; i++) {
  2151. index += qdf_snprint(&rssi_chain[j][index],
  2152. DP_MAX_STRING_LEN - index,
  2153. " %d:%d,", i,
  2154. dp_stats_buf->rssi_chain[j][i]);
  2155. }
  2156. DP_TRACE_STATS(FATAL, "rssi_chain[%d] = %s ", j, rssi_chain[j]);
  2157. }
  2158. for (j = 0; j < DP_HTT_RX_GI_LEN; j++) {
  2159. index = 0;
  2160. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS; i++) {
  2161. index += qdf_snprint(&rx_gi[j][index],
  2162. DP_MAX_STRING_LEN - index,
  2163. " %d:%d,", i,
  2164. dp_stats_buf->rx_gi[j][i]);
  2165. }
  2166. DP_TRACE_STATS(FATAL, "rx_gi[%d] = %s ", j, rx_gi[j]);
  2167. }
  2168. index = 0;
  2169. qdf_mem_set(str_buf, DP_MAX_STRING_LEN, 0x0);
  2170. for (i = 0; i < DP_HTT_RX_PREAM_LEN; i++) {
  2171. index += qdf_snprint(&str_buf[index],
  2172. DP_MAX_STRING_LEN - index,
  2173. " %d:%d,", i, dp_stats_buf->rx_pream[i]);
  2174. }
  2175. DP_TRACE_STATS(FATAL, "rx_pream = %s\n", str_buf);
  2176. for (i = 0; i < DP_HTT_RSSI_CHAIN_LEN; i++)
  2177. qdf_mem_free(rssi_chain[i]);
  2178. for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
  2179. qdf_mem_free(rx_gi[i]);
  2180. }
  2181. /*
  2182. * dp_print_rx_soc_fw_stats_tlv: display htt_rx_soc_fw_stats_tlv
  2183. * @tag_buf: buffer containing the tlv htt_rx_soc_fw_stats_tlv
  2184. *
  2185. * return:void
  2186. */
  2187. static inline void dp_print_rx_soc_fw_stats_tlv(uint32_t *tag_buf)
  2188. {
  2189. htt_rx_soc_fw_stats_tlv *dp_stats_buf =
  2190. (htt_rx_soc_fw_stats_tlv *)tag_buf;
  2191. DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_STATS_TLV:");
  2192. DP_TRACE_STATS(FATAL, "fw_reo_ring_data_msdu = %d",
  2193. dp_stats_buf->fw_reo_ring_data_msdu);
  2194. DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_bcmc = %d",
  2195. dp_stats_buf->fw_to_host_data_msdu_bcmc);
  2196. DP_TRACE_STATS(FATAL, "fw_to_host_data_msdu_uc = %d",
  2197. dp_stats_buf->fw_to_host_data_msdu_uc);
  2198. DP_TRACE_STATS(FATAL, "ofld_remote_data_buf_recycle_cnt = %d",
  2199. dp_stats_buf->ofld_remote_data_buf_recycle_cnt);
  2200. DP_TRACE_STATS(FATAL, "ofld_remote_free_buf_indication_cnt = %d\n",
  2201. dp_stats_buf->ofld_remote_free_buf_indication_cnt);
  2202. }
  2203. /*
  2204. * dp_print_rx_soc_fw_refill_ring_empty_tlv_v: display
  2205. * htt_rx_soc_fw_refill_ring_empty_tlv_v
  2206. * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_empty_tlv_v
  2207. *
  2208. * return:void
  2209. */
  2210. static inline void dp_print_rx_soc_fw_refill_ring_empty_tlv_v(uint32_t *tag_buf)
  2211. {
  2212. htt_rx_soc_fw_refill_ring_empty_tlv_v *dp_stats_buf =
  2213. (htt_rx_soc_fw_refill_ring_empty_tlv_v *)tag_buf;
  2214. uint8_t i;
  2215. uint16_t index = 0;
  2216. char refill_ring_empty_cnt[DP_MAX_STRING_LEN];
  2217. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  2218. tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_REFILL_MAX_RING);
  2219. DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_EMPTY_TLV_V:");
  2220. for (i = 0; i < tag_len; i++) {
  2221. index += qdf_snprint(&refill_ring_empty_cnt[index],
  2222. DP_MAX_STRING_LEN - index,
  2223. " %d:%d,", i,
  2224. dp_stats_buf->refill_ring_empty_cnt[i]);
  2225. }
  2226. DP_TRACE_STATS(FATAL, "refill_ring_empty_cnt = %s\n",
  2227. refill_ring_empty_cnt);
  2228. }
  2229. /*
  2230. * dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v: display
  2231. * htt_rx_soc_fw_refill_ring_num_refill_tlv_v
  2232. * @tag_buf: buffer containing the tlv htt_rx_soc_fw_refill_ring_num_refill_tlv
  2233. *
  2234. * return:void
  2235. */
  2236. static inline void dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v(
  2237. uint32_t *tag_buf)
  2238. {
  2239. htt_rx_soc_fw_refill_ring_num_refill_tlv_v *dp_stats_buf =
  2240. (htt_rx_soc_fw_refill_ring_num_refill_tlv_v *)tag_buf;
  2241. uint8_t i;
  2242. uint16_t index = 0;
  2243. char refill_ring_num_refill[DP_MAX_STRING_LEN];
  2244. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  2245. tag_len = qdf_min(tag_len, (uint32_t)HTT_TX_PDEV_MAX_URRN_STATS);
  2246. DP_TRACE_STATS(FATAL, "HTT_RX_SOC_FW_REFILL_RING_NUM_REFILL_TLV_V:");
  2247. for (i = 0; i < tag_len; i++) {
  2248. index += qdf_snprint(&refill_ring_num_refill[index],
  2249. DP_MAX_STRING_LEN - index,
  2250. " %d:%d,", i,
  2251. dp_stats_buf->refill_ring_num_refill[i]);
  2252. }
  2253. DP_TRACE_STATS(FATAL, "refill_ring_num_refill = %s\n",
  2254. refill_ring_num_refill);
  2255. }
  2256. /*
  2257. * dp_print_rx_pdev_fw_stats_tlv: display htt_rx_pdev_fw_stats_tlv
  2258. * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_stats_tlv
  2259. *
  2260. * return:void
  2261. */
  2262. static inline void dp_print_rx_pdev_fw_stats_tlv(uint32_t *tag_buf)
  2263. {
  2264. htt_rx_pdev_fw_stats_tlv *dp_stats_buf =
  2265. (htt_rx_pdev_fw_stats_tlv *)tag_buf;
  2266. uint8_t i;
  2267. uint16_t index = 0;
  2268. char fw_ring_mgmt_subtype[DP_MAX_STRING_LEN];
  2269. char fw_ring_ctrl_subtype[DP_MAX_STRING_LEN];
  2270. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_STATS_TLV:");
  2271. DP_TRACE_STATS(FATAL, "mac_id__word = %d",
  2272. dp_stats_buf->mac_id__word);
  2273. DP_TRACE_STATS(FATAL, "ppdu_recvd = %d",
  2274. dp_stats_buf->ppdu_recvd);
  2275. DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_ok = %d",
  2276. dp_stats_buf->mpdu_cnt_fcs_ok);
  2277. DP_TRACE_STATS(FATAL, "mpdu_cnt_fcs_err = %d",
  2278. dp_stats_buf->mpdu_cnt_fcs_err);
  2279. DP_TRACE_STATS(FATAL, "tcp_msdu_cnt = %d",
  2280. dp_stats_buf->tcp_msdu_cnt);
  2281. DP_TRACE_STATS(FATAL, "tcp_ack_msdu_cnt = %d",
  2282. dp_stats_buf->tcp_ack_msdu_cnt);
  2283. DP_TRACE_STATS(FATAL, "udp_msdu_cnt = %d",
  2284. dp_stats_buf->udp_msdu_cnt);
  2285. DP_TRACE_STATS(FATAL, "other_msdu_cnt = %d",
  2286. dp_stats_buf->other_msdu_cnt);
  2287. DP_TRACE_STATS(FATAL, "fw_ring_mpdu_ind = %d",
  2288. dp_stats_buf->fw_ring_mpdu_ind);
  2289. for (i = 0; i < DP_HTT_FW_RING_MGMT_SUBTYPE_LEN; i++) {
  2290. index += qdf_snprint(&fw_ring_mgmt_subtype[index],
  2291. DP_MAX_STRING_LEN - index,
  2292. " %d:%d,", i,
  2293. dp_stats_buf->fw_ring_mgmt_subtype[i]);
  2294. }
  2295. DP_TRACE_STATS(FATAL, "fw_ring_mgmt_subtype = %s ", fw_ring_mgmt_subtype);
  2296. index = 0;
  2297. for (i = 0; i < DP_HTT_FW_RING_CTRL_SUBTYPE_LEN; i++) {
  2298. index += qdf_snprint(&fw_ring_ctrl_subtype[index],
  2299. DP_MAX_STRING_LEN - index,
  2300. " %d:%d,", i,
  2301. dp_stats_buf->fw_ring_ctrl_subtype[i]);
  2302. }
  2303. DP_TRACE_STATS(FATAL, "fw_ring_ctrl_subtype = %s ", fw_ring_ctrl_subtype);
  2304. DP_TRACE_STATS(FATAL, "fw_ring_mcast_data_msdu = %d",
  2305. dp_stats_buf->fw_ring_mcast_data_msdu);
  2306. DP_TRACE_STATS(FATAL, "fw_ring_bcast_data_msdu = %d",
  2307. dp_stats_buf->fw_ring_bcast_data_msdu);
  2308. DP_TRACE_STATS(FATAL, "fw_ring_ucast_data_msdu = %d",
  2309. dp_stats_buf->fw_ring_ucast_data_msdu);
  2310. DP_TRACE_STATS(FATAL, "fw_ring_null_data_msdu = %d",
  2311. dp_stats_buf->fw_ring_null_data_msdu);
  2312. DP_TRACE_STATS(FATAL, "fw_ring_mpdu_drop = %d",
  2313. dp_stats_buf->fw_ring_mpdu_drop);
  2314. DP_TRACE_STATS(FATAL, "ofld_local_data_ind_cnt = %d",
  2315. dp_stats_buf->ofld_local_data_ind_cnt);
  2316. DP_TRACE_STATS(FATAL, "ofld_local_data_buf_recycle_cnt = %d",
  2317. dp_stats_buf->ofld_local_data_buf_recycle_cnt);
  2318. DP_TRACE_STATS(FATAL, "drx_local_data_ind_cnt = %d",
  2319. dp_stats_buf->drx_local_data_ind_cnt);
  2320. DP_TRACE_STATS(FATAL, "drx_local_data_buf_recycle_cnt = %d",
  2321. dp_stats_buf->drx_local_data_buf_recycle_cnt);
  2322. DP_TRACE_STATS(FATAL, "local_nondata_ind_cnt = %d",
  2323. dp_stats_buf->local_nondata_ind_cnt);
  2324. DP_TRACE_STATS(FATAL, "local_nondata_buf_recycle_cnt = %d",
  2325. dp_stats_buf->local_nondata_buf_recycle_cnt);
  2326. DP_TRACE_STATS(FATAL, "fw_status_buf_ring_refill_cnt = %d",
  2327. dp_stats_buf->fw_status_buf_ring_refill_cnt);
  2328. DP_TRACE_STATS(FATAL, "fw_status_buf_ring_empty_cnt = %d",
  2329. dp_stats_buf->fw_status_buf_ring_empty_cnt);
  2330. DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_refill_cnt = %d",
  2331. dp_stats_buf->fw_pkt_buf_ring_refill_cnt);
  2332. DP_TRACE_STATS(FATAL, "fw_pkt_buf_ring_empty_cnt = %d",
  2333. dp_stats_buf->fw_pkt_buf_ring_empty_cnt);
  2334. DP_TRACE_STATS(FATAL, "fw_link_buf_ring_refill_cnt = %d",
  2335. dp_stats_buf->fw_link_buf_ring_refill_cnt);
  2336. DP_TRACE_STATS(FATAL, "fw_link_buf_ring_empty_cnt = %d",
  2337. dp_stats_buf->fw_link_buf_ring_empty_cnt);
  2338. DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_refill_cnt = %d",
  2339. dp_stats_buf->host_pkt_buf_ring_refill_cnt);
  2340. DP_TRACE_STATS(FATAL, "host_pkt_buf_ring_empty_cnt = %d",
  2341. dp_stats_buf->host_pkt_buf_ring_empty_cnt);
  2342. DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_refill_cnt = %d",
  2343. dp_stats_buf->mon_pkt_buf_ring_refill_cnt);
  2344. DP_TRACE_STATS(FATAL, "mon_pkt_buf_ring_empty_cnt = %d",
  2345. dp_stats_buf->mon_pkt_buf_ring_empty_cnt);
  2346. DP_TRACE_STATS(FATAL, "mon_status_buf_ring_refill_cnt = %d",
  2347. dp_stats_buf->mon_status_buf_ring_refill_cnt);
  2348. DP_TRACE_STATS(FATAL, "mon_status_buf_ring_empty_cnt = %d",
  2349. dp_stats_buf->mon_status_buf_ring_empty_cnt);
  2350. DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_refill_cnt = %d",
  2351. dp_stats_buf->mon_desc_buf_ring_refill_cnt);
  2352. DP_TRACE_STATS(FATAL, "mon_desc_buf_ring_empty_cnt = %d",
  2353. dp_stats_buf->mon_desc_buf_ring_empty_cnt);
  2354. DP_TRACE_STATS(FATAL, "mon_dest_ring_update_cnt = %d",
  2355. dp_stats_buf->mon_dest_ring_update_cnt);
  2356. DP_TRACE_STATS(FATAL, "mon_dest_ring_full_cnt = %d",
  2357. dp_stats_buf->mon_dest_ring_full_cnt);
  2358. DP_TRACE_STATS(FATAL, "rx_suspend_cnt = %d",
  2359. dp_stats_buf->rx_suspend_cnt);
  2360. DP_TRACE_STATS(FATAL, "rx_suspend_fail_cnt = %d",
  2361. dp_stats_buf->rx_suspend_fail_cnt);
  2362. DP_TRACE_STATS(FATAL, "rx_resume_cnt = %d",
  2363. dp_stats_buf->rx_resume_cnt);
  2364. DP_TRACE_STATS(FATAL, "rx_resume_fail_cnt = %d",
  2365. dp_stats_buf->rx_resume_fail_cnt);
  2366. DP_TRACE_STATS(FATAL, "rx_ring_switch_cnt = %d",
  2367. dp_stats_buf->rx_ring_switch_cnt);
  2368. DP_TRACE_STATS(FATAL, "rx_ring_restore_cnt = %d",
  2369. dp_stats_buf->rx_ring_restore_cnt);
  2370. DP_TRACE_STATS(FATAL, "rx_flush_cnt = %d\n",
  2371. dp_stats_buf->rx_flush_cnt);
  2372. }
  2373. /*
  2374. * dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v: display
  2375. * htt_rx_pdev_fw_ring_mpdu_err_tlv_v
  2376. * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_ring_mpdu_err_tlv_v
  2377. *
  2378. * return:void
  2379. */
  2380. static inline void dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(uint32_t *tag_buf)
  2381. {
  2382. htt_rx_pdev_fw_ring_mpdu_err_tlv_v *dp_stats_buf =
  2383. (htt_rx_pdev_fw_ring_mpdu_err_tlv_v *)tag_buf;
  2384. uint8_t i;
  2385. uint16_t index = 0;
  2386. char fw_ring_mpdu_err[DP_MAX_STRING_LEN];
  2387. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_RING_MPDU_ERR_TLV_V:");
  2388. for (i = 0; i < DP_HTT_FW_RING_MPDU_ERR_LEN; i++) {
  2389. index += qdf_snprint(&fw_ring_mpdu_err[index],
  2390. DP_MAX_STRING_LEN - index,
  2391. " %d:%d,", i,
  2392. dp_stats_buf->fw_ring_mpdu_err[i]);
  2393. }
  2394. DP_TRACE_STATS(FATAL, "fw_ring_mpdu_err = %s\n", fw_ring_mpdu_err);
  2395. }
  2396. /*
  2397. * dp_print_rx_pdev_fw_mpdu_drop_tlv_v: display htt_rx_pdev_fw_mpdu_drop_tlv_v
  2398. * @tag_buf: buffer containing the tlv htt_rx_pdev_fw_mpdu_drop_tlv_v
  2399. *
  2400. * return:void
  2401. */
  2402. static inline void dp_print_rx_pdev_fw_mpdu_drop_tlv_v(uint32_t *tag_buf)
  2403. {
  2404. htt_rx_pdev_fw_mpdu_drop_tlv_v *dp_stats_buf =
  2405. (htt_rx_pdev_fw_mpdu_drop_tlv_v *)tag_buf;
  2406. uint8_t i;
  2407. uint16_t index = 0;
  2408. char fw_mpdu_drop[DP_MAX_STRING_LEN];
  2409. uint32_t tag_len = (HTT_STATS_TLV_LENGTH_GET(*tag_buf) >> 2);
  2410. tag_len = qdf_min(tag_len, (uint32_t)HTT_RX_STATS_FW_DROP_REASON_MAX);
  2411. DP_TRACE_STATS(FATAL, "HTT_RX_PDEV_FW_MPDU_DROP_TLV_V:");
  2412. for (i = 0; i < tag_len; i++) {
  2413. index += qdf_snprint(&fw_mpdu_drop[index],
  2414. DP_MAX_STRING_LEN - index,
  2415. " %d:%d,", i, dp_stats_buf->fw_mpdu_drop[i]);
  2416. }
  2417. DP_TRACE_STATS(FATAL, "fw_mpdu_drop = %s\n", fw_mpdu_drop);
  2418. }
  2419. /*
  2420. * dp_htt_stats_print_tag: function to select the tag type and
  2421. * print the corresponding tag structure
  2422. * @tag_type: tag type that is to be printed
  2423. * @tag_buf: pointer to the tag structure
  2424. *
  2425. * return: void
  2426. */
  2427. void dp_htt_stats_print_tag(uint8_t tag_type, uint32_t *tag_buf)
  2428. {
  2429. switch (tag_type) {
  2430. case HTT_STATS_TX_PDEV_CMN_TAG:
  2431. dp_print_tx_pdev_stats_cmn_tlv(tag_buf);
  2432. break;
  2433. case HTT_STATS_TX_PDEV_UNDERRUN_TAG:
  2434. dp_print_tx_pdev_stats_urrn_tlv_v(tag_buf);
  2435. break;
  2436. case HTT_STATS_TX_PDEV_SIFS_TAG:
  2437. dp_print_tx_pdev_stats_sifs_tlv_v(tag_buf);
  2438. break;
  2439. case HTT_STATS_TX_PDEV_FLUSH_TAG:
  2440. dp_print_tx_pdev_stats_flush_tlv_v(tag_buf);
  2441. break;
  2442. case HTT_STATS_TX_PDEV_PHY_ERR_TAG:
  2443. dp_print_tx_pdev_stats_phy_err_tlv_v(tag_buf);
  2444. break;
  2445. case HTT_STATS_STRING_TAG:
  2446. dp_print_stats_string_tlv(tag_buf);
  2447. break;
  2448. case HTT_STATS_TX_HWQ_CMN_TAG:
  2449. dp_print_tx_hwq_stats_cmn_tlv(tag_buf);
  2450. break;
  2451. case HTT_STATS_TX_HWQ_DIFS_LATENCY_TAG:
  2452. dp_print_tx_hwq_difs_latency_stats_tlv_v(tag_buf);
  2453. break;
  2454. case HTT_STATS_TX_HWQ_CMD_RESULT_TAG:
  2455. dp_print_tx_hwq_cmd_result_stats_tlv_v(tag_buf);
  2456. break;
  2457. case HTT_STATS_TX_HWQ_CMD_STALL_TAG:
  2458. dp_print_tx_hwq_cmd_stall_stats_tlv_v(tag_buf);
  2459. break;
  2460. case HTT_STATS_TX_HWQ_FES_STATUS_TAG:
  2461. dp_print_tx_hwq_fes_result_stats_tlv_v(tag_buf);
  2462. break;
  2463. case HTT_STATS_TX_TQM_GEN_MPDU_TAG:
  2464. dp_print_tx_tqm_gen_mpdu_stats_tlv_v(tag_buf);
  2465. break;
  2466. case HTT_STATS_TX_TQM_LIST_MPDU_TAG:
  2467. dp_print_tx_tqm_list_mpdu_stats_tlv_v(tag_buf);
  2468. break;
  2469. case HTT_STATS_TX_TQM_LIST_MPDU_CNT_TAG:
  2470. dp_print_tx_tqm_list_mpdu_cnt_tlv_v(tag_buf);
  2471. break;
  2472. case HTT_STATS_TX_TQM_CMN_TAG:
  2473. dp_print_tx_tqm_cmn_stats_tlv(tag_buf);
  2474. break;
  2475. case HTT_STATS_TX_TQM_PDEV_TAG:
  2476. dp_print_tx_tqm_pdev_stats_tlv_v(tag_buf);
  2477. break;
  2478. case HTT_STATS_TX_TQM_CMDQ_STATUS_TAG:
  2479. dp_print_tx_tqm_cmdq_status_tlv(tag_buf);
  2480. break;
  2481. case HTT_STATS_TX_DE_EAPOL_PACKETS_TAG:
  2482. dp_print_tx_de_eapol_packets_stats_tlv(tag_buf);
  2483. break;
  2484. case HTT_STATS_TX_DE_CLASSIFY_FAILED_TAG:
  2485. dp_print_tx_de_classify_failed_stats_tlv(tag_buf);
  2486. break;
  2487. case HTT_STATS_TX_DE_CLASSIFY_STATS_TAG:
  2488. dp_print_tx_de_classify_stats_tlv(tag_buf);
  2489. break;
  2490. case HTT_STATS_TX_DE_CLASSIFY_STATUS_TAG:
  2491. dp_print_tx_de_classify_status_stats_tlv(tag_buf);
  2492. break;
  2493. case HTT_STATS_TX_DE_ENQUEUE_PACKETS_TAG:
  2494. dp_print_tx_de_enqueue_packets_stats_tlv(tag_buf);
  2495. break;
  2496. case HTT_STATS_TX_DE_ENQUEUE_DISCARD_TAG:
  2497. dp_print_tx_de_enqueue_discard_stats_tlv(tag_buf);
  2498. break;
  2499. case HTT_STATS_TX_DE_CMN_TAG:
  2500. dp_print_tx_de_cmn_stats_tlv(tag_buf);
  2501. break;
  2502. case HTT_STATS_RING_IF_TAG:
  2503. dp_print_ring_if_stats_tlv(tag_buf);
  2504. break;
  2505. case HTT_STATS_TX_PDEV_MU_MIMO_STATS_TAG:
  2506. dp_print_tx_pdev_mu_mimo_sch_stats_tlv(tag_buf);
  2507. break;
  2508. case HTT_STATS_SFM_CMN_TAG:
  2509. dp_print_sfm_cmn_tlv(tag_buf);
  2510. break;
  2511. case HTT_STATS_SRING_STATS_TAG:
  2512. dp_print_sring_stats_tlv(tag_buf);
  2513. break;
  2514. case HTT_STATS_RX_PDEV_FW_STATS_TAG:
  2515. dp_print_rx_pdev_fw_stats_tlv(tag_buf);
  2516. break;
  2517. case HTT_STATS_RX_PDEV_FW_RING_MPDU_ERR_TAG:
  2518. dp_print_rx_pdev_fw_ring_mpdu_err_tlv_v(tag_buf);
  2519. break;
  2520. case HTT_STATS_RX_PDEV_FW_MPDU_DROP_TAG:
  2521. dp_print_rx_pdev_fw_mpdu_drop_tlv_v(tag_buf);
  2522. break;
  2523. case HTT_STATS_RX_SOC_FW_STATS_TAG:
  2524. dp_print_rx_soc_fw_stats_tlv(tag_buf);
  2525. break;
  2526. case HTT_STATS_RX_SOC_FW_REFILL_RING_EMPTY_TAG:
  2527. dp_print_rx_soc_fw_refill_ring_empty_tlv_v(tag_buf);
  2528. break;
  2529. case HTT_STATS_RX_SOC_FW_REFILL_RING_NUM_REFILL_TAG:
  2530. dp_print_rx_soc_fw_refill_ring_num_refill_tlv_v(
  2531. tag_buf);
  2532. break;
  2533. case HTT_STATS_TX_PDEV_RATE_STATS_TAG:
  2534. dp_print_tx_pdev_rate_stats_tlv(tag_buf);
  2535. break;
  2536. case HTT_STATS_RX_PDEV_RATE_STATS_TAG:
  2537. dp_print_rx_pdev_rate_stats_tlv(tag_buf);
  2538. break;
  2539. case HTT_STATS_TX_PDEV_SCHEDULER_TXQ_STATS_TAG:
  2540. dp_print_tx_pdev_stats_sched_per_txq_tlv(tag_buf);
  2541. break;
  2542. case HTT_STATS_TX_SCHED_CMN_TAG:
  2543. dp_print_stats_tx_sched_cmn_tlv(tag_buf);
  2544. break;
  2545. case HTT_STATS_TX_PDEV_MUMIMO_MPDU_STATS_TAG:
  2546. dp_print_tx_pdev_mu_mimo_mpdu_stats_tlv(tag_buf);
  2547. break;
  2548. case HTT_STATS_SCHED_TXQ_CMD_POSTED_TAG:
  2549. dp_print_sched_txq_cmd_posted_tlv_v(tag_buf);
  2550. break;
  2551. case HTT_STATS_RING_IF_CMN_TAG:
  2552. dp_print_ring_if_cmn_tlv(tag_buf);
  2553. break;
  2554. case HTT_STATS_SFM_CLIENT_USER_TAG:
  2555. dp_print_sfm_client_user_tlv_v(tag_buf);
  2556. break;
  2557. case HTT_STATS_SFM_CLIENT_TAG:
  2558. dp_print_sfm_client_tlv(tag_buf);
  2559. break;
  2560. case HTT_STATS_TX_TQM_ERROR_STATS_TAG:
  2561. dp_print_tx_tqm_error_stats_tlv(tag_buf);
  2562. break;
  2563. case HTT_STATS_SCHED_TXQ_CMD_REAPED_TAG:
  2564. dp_print_sched_txq_cmd_reaped_tlv_v(tag_buf);
  2565. break;
  2566. case HTT_STATS_SRING_CMN_TAG:
  2567. dp_print_sring_cmn_tlv(tag_buf);
  2568. break;
  2569. case HTT_STATS_TX_SELFGEN_AC_ERR_STATS_TAG:
  2570. dp_print_tx_selfgen_ac_err_stats_tlv(tag_buf);
  2571. break;
  2572. case HTT_STATS_TX_SELFGEN_CMN_STATS_TAG:
  2573. dp_print_tx_selfgen_cmn_stats_tlv(tag_buf);
  2574. break;
  2575. case HTT_STATS_TX_SELFGEN_AC_STATS_TAG:
  2576. dp_print_tx_selfgen_ac_stats_tlv(tag_buf);
  2577. break;
  2578. case HTT_STATS_TX_SELFGEN_AX_STATS_TAG:
  2579. dp_print_tx_selfgen_ax_stats_tlv(tag_buf);
  2580. break;
  2581. case HTT_STATS_TX_SELFGEN_AX_ERR_STATS_TAG:
  2582. dp_print_tx_selfgen_ax_err_stats_tlv(tag_buf);
  2583. break;
  2584. case HTT_STATS_TX_HWQ_MUMIMO_SCH_STATS_TAG:
  2585. dp_print_tx_hwq_mu_mimo_sch_stats_tlv(tag_buf);
  2586. break;
  2587. case HTT_STATS_TX_HWQ_MUMIMO_MPDU_STATS_TAG:
  2588. dp_print_tx_hwq_mu_mimo_mpdu_stats_tlv(tag_buf);
  2589. break;
  2590. case HTT_STATS_TX_HWQ_MUMIMO_CMN_STATS_TAG:
  2591. dp_print_tx_hwq_mu_mimo_cmn_stats_tlv(tag_buf);
  2592. break;
  2593. case HTT_STATS_HW_INTR_MISC_TAG:
  2594. dp_print_hw_stats_intr_misc_tlv(tag_buf);
  2595. break;
  2596. case HTT_STATS_HW_WD_TIMEOUT_TAG:
  2597. dp_print_hw_stats_wd_timeout_tlv(tag_buf);
  2598. break;
  2599. case HTT_STATS_HW_PDEV_ERRS_TAG:
  2600. dp_print_hw_stats_pdev_errs_tlv(tag_buf);
  2601. break;
  2602. case HTT_STATS_COUNTER_NAME_TAG:
  2603. dp_print_counter_tlv(tag_buf);
  2604. break;
  2605. case HTT_STATS_TX_TID_DETAILS_TAG:
  2606. dp_print_tx_tid_stats_tlv(tag_buf);
  2607. break;
  2608. #ifdef CONFIG_WIN
  2609. case HTT_STATS_TX_TID_DETAILS_V1_TAG:
  2610. dp_print_tx_tid_stats_v1_tlv(tag_buf);
  2611. break;
  2612. #endif
  2613. case HTT_STATS_RX_TID_DETAILS_TAG:
  2614. dp_print_rx_tid_stats_tlv(tag_buf);
  2615. break;
  2616. case HTT_STATS_PEER_STATS_CMN_TAG:
  2617. dp_print_peer_stats_cmn_tlv(tag_buf);
  2618. break;
  2619. case HTT_STATS_PEER_DETAILS_TAG:
  2620. dp_print_peer_details_tlv(tag_buf);
  2621. break;
  2622. case HTT_STATS_PEER_MSDU_FLOWQ_TAG:
  2623. dp_print_msdu_flow_stats_tlv(tag_buf);
  2624. break;
  2625. case HTT_STATS_PEER_TX_RATE_STATS_TAG:
  2626. dp_print_tx_peer_rate_stats_tlv(tag_buf);
  2627. break;
  2628. case HTT_STATS_PEER_RX_RATE_STATS_TAG:
  2629. dp_print_rx_peer_rate_stats_tlv(tag_buf);
  2630. break;
  2631. case HTT_STATS_TX_DE_COMPL_STATS_TAG:
  2632. dp_print_tx_de_compl_stats_tlv(tag_buf);
  2633. break;
  2634. default:
  2635. break;
  2636. }
  2637. }